From fdef054baf230358928cb4aa8cbe5eb3bb54fbb6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=AD=E5=85=B6=E5=85=B5?= Date: Fri, 29 Nov 2024 11:03:13 +0800 Subject: [PATCH] first commit --- .gitignore | 20 + README.md | 0 pom.xml | 249 +++ .../java/com/sa/zentao/ZentaoApplication.java | 18 + .../java/com/sa/zentao/conf/AfterRunner.java | 36 + .../com/sa/zentao/conf/CodeGenerator.java | 166 ++ .../com/sa/zentao/conf/DateConverter.java | 38 + .../com/sa/zentao/conf/DateFormatConfig.java | 45 + .../java/com/sa/zentao/conf/DevopsRunner.java | 71 + .../zentao/conf/GlobalExceptionHandler.java | 40 + .../zentao/conf/JwtAuthenticationFilter.java | 100 + .../com/sa/zentao/conf/LoginRiskUser.java | 85 + .../sa/zentao/conf/RiskUserThreadLocal.java | 47 + .../java/com/sa/zentao/conf/SmsConfig.java | 31 + .../java/com/sa/zentao/conf/SpringUtil.java | 49 + .../java/com/sa/zentao/conf/WebMvcConfig.java | 38 + .../zentao/controller/CommonsController.java | 86 + .../controller/FestivalConfigController.java | 112 ++ .../VerificationCodeController.java | 20 + .../zentao/controller/ZtActionController.java | 48 + .../controller/ZtActionrecentController.java | 20 + .../sa/zentao/controller/ZtBugController.java | 94 + .../zentao/controller/ZtCaseController.java | 100 + .../controller/ZtCasestepController.java | 20 + .../zentao/controller/ZtCountController.java | 122 ++ .../controller/ZtCronDevopsController.java | 63 + .../ZtCronDevopsUserController.java | 20 + .../zentao/controller/ZtEffortController.java | 66 + .../ZtExecutionprojectController.java | 20 + .../zentao/controller/ZtKanbanController.java | 56 + .../controller/ZtKanbancardController.java | 20 + .../controller/ZtKanbancellController.java | 20 + .../controller/ZtKanbancolumnController.java | 20 + .../controller/ZtKanbangroupController.java | 20 + .../controller/ZtKanbanlaneController.java | 20 + .../controller/ZtKanbanregionController.java | 20 + .../controller/ZtKanbanspaceController.java | 20 + .../zentao/controller/ZtModuleController.java | 209 +++ .../controller/ZtProductController.java | 107 ++ .../controller/ZtProjectController.java | 319 ++++ .../ZtProjectproductController.java | 20 + .../controller/ZtProjectstoryController.java | 20 + .../controller/ZtSearchindexController.java | 20 + .../zentao/controller/ZtStoryController.java | 180 ++ .../controller/ZtStoryFeedbackController.java | 69 + .../controller/ZtStoryUserController.java | 72 + .../controller/ZtStoryreviewController.java | 20 + .../controller/ZtStoryspecController.java | 20 + .../zentao/controller/ZtTaskController.java | 111 ++ .../controller/ZtTaskestimateController.java | 20 + .../controller/ZtTaskspecController.java | 20 + .../controller/ZtTaskteamController.java | 31 + .../zentao/controller/ZtTeamController.java | 20 + .../controller/ZtTestresultController.java | 20 + .../controller/ZtTesttaskController.java | 36 + .../zentao/controller/ZtUserController.java | 160 ++ .../controller/ZtYwBackupsController.java | 55 + .../controller/ZtYwChangeController.java | 82 + .../controller/ZtYwFaultController.java | 63 + .../controller/ZtYwFaultListController.java | 20 + .../controller/ZtYwFwqsearchController.java | 55 + .../controller/ZtYwMachineRoomController.java | 57 + .../controller/ZtYwPatrolController.java | 64 + .../zentao/controller/ZtYwTaskController.java | 80 + .../com/sa/zentao/dao/BusinessException.java | 17 + src/main/java/com/sa/zentao/dao/Code.java | 38 + .../com/sa/zentao/dao/FestivalConfigDTO.java | 86 + .../sa/zentao/dao/ProjectWorkDetailsDTO.java | 40 + src/main/java/com/sa/zentao/dao/Result.java | 75 + .../java/com/sa/zentao/dao/ServerListDTO.java | 16 + .../com/sa/zentao/dao/WorkDetailsDTO.java | 34 + .../java/com/sa/zentao/dao/ZtActionDTO.java | 59 + src/main/java/com/sa/zentao/dao/ZtBugDTO.java | 193 ++ .../java/com/sa/zentao/dao/ZtCaseDTO.java | 145 ++ .../java/com/sa/zentao/dao/ZtCasestepDTO.java | 43 + .../com/sa/zentao/dao/ZtCronDevopsDTO.java | 50 + .../java/com/sa/zentao/dao/ZtEffortDTO.java | 67 + .../java/com/sa/zentao/dao/ZtKanbanDTO.java | 100 + .../com/sa/zentao/dao/ZtKanbancolumnDTO.java | 65 + .../com/sa/zentao/dao/ZtKanbanlaneDTO.java | 56 + .../java/com/sa/zentao/dao/ZtModuleDTO.java | 54 + .../java/com/sa/zentao/dao/ZtProductDTO.java | 136 ++ .../java/com/sa/zentao/dao/ZtProjectDTO.java | 224 +++ .../com/sa/zentao/dao/ZtStoryCountDTO.java | 47 + .../java/com/sa/zentao/dao/ZtStoryDTO.java | 235 +++ .../com/sa/zentao/dao/ZtStoryFeedbackDTO.java | 78 + .../com/sa/zentao/dao/ZtStoryUserDTO.java | 203 ++ .../com/sa/zentao/dao/ZtStoryreviewDTO.java | 39 + .../java/com/sa/zentao/dao/ZtTaskDTO.java | 175 ++ .../java/com/sa/zentao/dao/ZtTesttaskDTO.java | 84 + .../java/com/sa/zentao/dao/ZtUserDTO.java | 133 ++ .../com/sa/zentao/dao/ZtYwBackupsDTO.java | 67 + .../java/com/sa/zentao/dao/ZtYwChangeDTO.java | 113 ++ .../java/com/sa/zentao/dao/ZtYwFaultDTO.java | 54 + .../com/sa/zentao/dao/ZtYwFwqsearchDTO.java | 67 + .../com/sa/zentao/dao/ZtYwMachineRoomDTO.java | 91 + .../java/com/sa/zentao/dao/ZtYwPatrolDTO.java | 77 + .../java/com/sa/zentao/dao/ZtYwTaskDTO.java | 98 + .../com/sa/zentao/entity/FestivalConfig.java | 62 + .../sa/zentao/entity/VerificationCode.java | 44 + .../java/com/sa/zentao/entity/ZtAction.java | 59 + .../com/sa/zentao/entity/ZtActionrecent.java | 57 + src/main/java/com/sa/zentao/entity/ZtBug.java | 193 ++ .../java/com/sa/zentao/entity/ZtCase.java | 142 ++ .../java/com/sa/zentao/entity/ZtCasestep.java | 41 + .../com/sa/zentao/entity/ZtCronDevops.java | 49 + .../sa/zentao/entity/ZtCronDevopsUser.java | 35 + .../java/com/sa/zentao/entity/ZtEffort.java | 65 + .../sa/zentao/entity/ZtExecutionproject.java | 26 + .../java/com/sa/zentao/entity/ZtKanban.java | 99 + .../com/sa/zentao/entity/ZtKanbancard.java | 99 + .../com/sa/zentao/entity/ZtKanbancell.java | 38 + .../com/sa/zentao/entity/ZtKanbancolumn.java | 48 + .../com/sa/zentao/entity/ZtKanbangroup.java | 34 + .../com/sa/zentao/entity/ZtKanbanlane.java | 52 + .../com/sa/zentao/entity/ZtKanbanregion.java | 51 + .../com/sa/zentao/entity/ZtKanbanspace.java | 73 + .../java/com/sa/zentao/entity/ZtModule.java | 54 + .../java/com/sa/zentao/entity/ZtProduct.java | 142 ++ .../java/com/sa/zentao/entity/ZtProject.java | 203 ++ .../sa/zentao/entity/ZtProjectproduct.java | 30 + .../com/sa/zentao/entity/ZtProjectstory.java | 39 + .../com/sa/zentao/entity/ZtSearchindex.java | 47 + .../java/com/sa/zentao/entity/ZtStory.java | 196 ++ .../com/sa/zentao/entity/ZtStoryFeedback.java | 80 + .../com/sa/zentao/entity/ZtStoryUser.java | 198 ++ .../com/sa/zentao/entity/ZtStoryreview.java | 40 + .../com/sa/zentao/entity/ZtStoryspec.java | 34 + .../java/com/sa/zentao/entity/ZtTask.java | 169 ++ .../com/sa/zentao/entity/ZtTaskestimate.java | 42 + .../java/com/sa/zentao/entity/ZtTaskspec.java | 35 + .../java/com/sa/zentao/entity/ZtTaskteam.java | 44 + .../java/com/sa/zentao/entity/ZtTeam.java | 60 + .../com/sa/zentao/entity/ZtTestresult.java | 63 + .../java/com/sa/zentao/entity/ZtTesttask.java | 80 + .../java/com/sa/zentao/entity/ZtUser.java | 132 ++ .../com/sa/zentao/entity/ZtYwBackups.java | 67 + .../java/com/sa/zentao/entity/ZtYwChange.java | 114 ++ .../java/com/sa/zentao/entity/ZtYwFault.java | 54 + .../com/sa/zentao/entity/ZtYwFaultList.java | 31 + .../com/sa/zentao/entity/ZtYwFwqsearch.java | 67 + .../com/sa/zentao/entity/ZtYwMachineRoom.java | 94 + .../java/com/sa/zentao/entity/ZtYwPatrol.java | 78 + .../java/com/sa/zentao/entity/ZtYwTask.java | 99 + .../com/sa/zentao/enums/ActionStatus.java | 64 + .../java/com/sa/zentao/enums/ActionType.java | 44 + .../com/sa/zentao/enums/DeleteFlagEnum.java | 25 + .../java/com/sa/zentao/enums/ProductBug.java | 30 + .../sa/zentao/enums/ProductStoryStatus.java | 32 + .../java/com/sa/zentao/enums/UserType.java | 39 + .../zentao/mapper/FestivalConfigMapper.java | 22 + .../zentao/mapper/VerificationCodeMapper.java | 16 + .../com/sa/zentao/mapper/ZtActionMapper.java | 16 + .../zentao/mapper/ZtActionrecentMapper.java | 16 + .../com/sa/zentao/mapper/ZtBugMapper.java | 25 + .../com/sa/zentao/mapper/ZtCaseMapper.java | 22 + .../sa/zentao/mapper/ZtCasestepMapper.java | 16 + .../sa/zentao/mapper/ZtCronDevopsMapper.java | 23 + .../zentao/mapper/ZtCronDevopsUserMapper.java | 16 + .../com/sa/zentao/mapper/ZtEffortMapper.java | 16 + .../mapper/ZtExecutionprojectMapper.java | 16 + .../com/sa/zentao/mapper/ZtKanbanMapper.java | 16 + .../sa/zentao/mapper/ZtKanbancardMapper.java | 16 + .../sa/zentao/mapper/ZtKanbancellMapper.java | 16 + .../zentao/mapper/ZtKanbancolumnMapper.java | 21 + .../sa/zentao/mapper/ZtKanbangroupMapper.java | 16 + .../sa/zentao/mapper/ZtKanbanlaneMapper.java | 25 + .../zentao/mapper/ZtKanbanregionMapper.java | 16 + .../sa/zentao/mapper/ZtKanbanspaceMapper.java | 16 + .../com/sa/zentao/mapper/ZtModuleMapper.java | 16 + .../com/sa/zentao/mapper/ZtProductMapper.java | 25 + .../com/sa/zentao/mapper/ZtProjectMapper.java | 32 + .../zentao/mapper/ZtProjectproductMapper.java | 16 + .../zentao/mapper/ZtProjectstoryMapper.java | 16 + .../sa/zentao/mapper/ZtSearchindexMapper.java | 16 + .../zentao/mapper/ZtStoryFeedbackMapper.java | 23 + .../com/sa/zentao/mapper/ZtStoryMapper.java | 25 + .../sa/zentao/mapper/ZtStoryUserMapper.java | 22 + .../sa/zentao/mapper/ZtStoryreviewMapper.java | 16 + .../sa/zentao/mapper/ZtStoryspecMapper.java | 16 + .../com/sa/zentao/mapper/ZtTaskMapper.java | 22 + .../zentao/mapper/ZtTaskestimateMapper.java | 16 + .../sa/zentao/mapper/ZtTaskspecMapper.java | 16 + .../sa/zentao/mapper/ZtTaskteamMapper.java | 16 + .../com/sa/zentao/mapper/ZtTeamMapper.java | 16 + .../sa/zentao/mapper/ZtTestresultMapper.java | 16 + .../sa/zentao/mapper/ZtTesttaskMapper.java | 16 + .../com/sa/zentao/mapper/ZtUserMapper.java | 21 + .../sa/zentao/mapper/ZtYwBackupsMapper.java | 22 + .../sa/zentao/mapper/ZtYwChangeMapper.java | 22 + .../sa/zentao/mapper/ZtYwFaultListMapper.java | 16 + .../com/sa/zentao/mapper/ZtYwFaultMapper.java | 22 + .../sa/zentao/mapper/ZtYwFwqsearchMapper.java | 22 + .../zentao/mapper/ZtYwMachineRoomMapper.java | 23 + .../sa/zentao/mapper/ZtYwPatrolMapper.java | 23 + .../com/sa/zentao/mapper/ZtYwTaskMapper.java | 22 + src/main/java/com/sa/zentao/qo/ActionQo.java | 18 + src/main/java/com/sa/zentao/qo/BaseQo.java | 18 + src/main/java/com/sa/zentao/qo/EffortQo.java | 15 + .../com/sa/zentao/qo/FestivalConfigQo.java | 27 + src/main/java/com/sa/zentao/qo/KanbanQo.java | 38 + src/main/java/com/sa/zentao/qo/StoryQo.java | 19 + src/main/java/com/sa/zentao/qo/ZtBugQo.java | 43 + src/main/java/com/sa/zentao/qo/ZtCaseQo.java | 51 + src/main/java/com/sa/zentao/qo/ZtCountQo.java | 40 + .../java/com/sa/zentao/qo/ZtModuleQo.java | 24 + .../java/com/sa/zentao/qo/ZtProjectQo.java | 67 + src/main/java/com/sa/zentao/qo/ZtUserQo.java | 37 + .../java/com/sa/zentao/qo/ZtYwPatrolQo.java | 16 + .../service/IFestivalConfigService.java | 26 + .../service/IVerificationCodeService.java | 16 + .../sa/zentao/service/IZtActionService.java | 42 + .../service/IZtActionrecentService.java | 16 + .../com/sa/zentao/service/IZtBugService.java | 35 + .../com/sa/zentao/service/IZtCaseService.java | 25 + .../sa/zentao/service/IZtCasestepService.java | 20 + .../zentao/service/IZtCronDevopsService.java | 28 + .../service/IZtCronDevopsUserService.java | 16 + .../sa/zentao/service/IZtEffortService.java | 25 + .../service/IZtExecutionprojectService.java | 16 + .../sa/zentao/service/IZtKanbanService.java | 16 + .../zentao/service/IZtKanbancardService.java | 16 + .../zentao/service/IZtKanbancellService.java | 16 + .../service/IZtKanbancolumnService.java | 20 + .../zentao/service/IZtKanbangroupService.java | 16 + .../zentao/service/IZtKanbanlaneService.java | 43 + .../service/IZtKanbanregionService.java | 16 + .../zentao/service/IZtKanbanspaceService.java | 16 + .../sa/zentao/service/IZtModuleService.java | 23 + .../sa/zentao/service/IZtProductService.java | 40 + .../sa/zentao/service/IZtProjectService.java | 99 + .../service/IZtProjectproductService.java | 16 + .../service/IZtProjectstoryService.java | 16 + .../zentao/service/IZtSearchindexService.java | 16 + .../service/IZtStoryFeedbackService.java | 28 + .../sa/zentao/service/IZtStoryService.java | 66 + .../zentao/service/IZtStoryUserService.java | 26 + .../zentao/service/IZtStoryreviewService.java | 16 + .../zentao/service/IZtStoryspecService.java | 16 + .../com/sa/zentao/service/IZtTaskService.java | 40 + .../service/IZtTaskestimateService.java | 16 + .../sa/zentao/service/IZtTaskspecService.java | 16 + .../sa/zentao/service/IZtTaskteamService.java | 20 + .../com/sa/zentao/service/IZtTeamService.java | 16 + .../zentao/service/IZtTestresultService.java | 16 + .../sa/zentao/service/IZtTesttaskService.java | 22 + .../com/sa/zentao/service/IZtUserService.java | 35 + .../zentao/service/IZtYwBackupsService.java | 25 + .../sa/zentao/service/IZtYwChangeService.java | 32 + .../zentao/service/IZtYwFaultListService.java | 16 + .../sa/zentao/service/IZtYwFaultService.java | 27 + .../zentao/service/IZtYwFwqsearchService.java | 24 + .../service/IZtYwMachineRoomService.java | 24 + .../sa/zentao/service/IZtYwPatrolService.java | 25 + .../sa/zentao/service/IZtYwTaskService.java | 32 + .../impl/FestivalConfigServiceImpl.java | 187 ++ .../zentao/service/impl/IZtCountService.java | 572 ++++++ .../impl/VerificationCodeServiceImpl.java | 20 + .../service/impl/ZtActionServiceImpl.java | 179 ++ .../impl/ZtActionrecentServiceImpl.java | 20 + .../zentao/service/impl/ZtBugServiceImpl.java | 301 +++ .../service/impl/ZtCaseServiceImpl.java | 114 ++ .../service/impl/ZtCasestepServiceImpl.java | 87 + .../service/impl/ZtCronDevopsServiceImpl.java | 228 +++ .../impl/ZtCronDevopsUserServiceImpl.java | 20 + .../service/impl/ZtEffortServiceImpl.java | 146 ++ .../impl/ZtExecutionprojectServiceImpl.java | 20 + .../service/impl/ZtKanbanServiceImpl.java | 20 + .../service/impl/ZtKanbancardServiceImpl.java | 20 + .../service/impl/ZtKanbancellServiceImpl.java | 20 + .../impl/ZtKanbancolumnServiceImpl.java | 44 + .../impl/ZtKanbangroupServiceImpl.java | 20 + .../service/impl/ZtKanbanlaneServiceImpl.java | 307 +++ .../impl/ZtKanbanregionServiceImpl.java | 20 + .../impl/ZtKanbanspaceServiceImpl.java | 20 + .../service/impl/ZtModuleServiceImpl.java | 69 + .../service/impl/ZtProductServiceImpl.java | 326 ++++ .../service/impl/ZtProjectServiceImpl.java | 1658 +++++++++++++++++ .../impl/ZtProjectproductServiceImpl.java | 20 + .../impl/ZtProjectstoryServiceImpl.java | 20 + .../impl/ZtSearchindexServiceImpl.java | 20 + .../impl/ZtStoryFeedbackServiceImpl.java | 143 ++ .../service/impl/ZtStoryServiceImpl.java | 1159 ++++++++++++ .../service/impl/ZtStoryUserServiceImpl.java | 165 ++ .../impl/ZtStoryreviewServiceImpl.java | 20 + .../service/impl/ZtStoryspecServiceImpl.java | 20 + .../service/impl/ZtTaskServiceImpl.java | 441 +++++ .../impl/ZtTaskestimateServiceImpl.java | 20 + .../service/impl/ZtTaskspecServiceImpl.java | 20 + .../service/impl/ZtTaskteamServiceImpl.java | 25 + .../service/impl/ZtTeamServiceImpl.java | 20 + .../service/impl/ZtTestresultServiceImpl.java | 20 + .../service/impl/ZtTesttaskServiceImpl.java | 55 + .../service/impl/ZtUserServiceImpl.java | 245 +++ .../service/impl/ZtYwBackupsServiceImpl.java | 85 + .../service/impl/ZtYwChangeServiceImpl.java | 155 ++ .../impl/ZtYwFaultListServiceImpl.java | 20 + .../service/impl/ZtYwFaultServiceImpl.java | 99 + .../impl/ZtYwFwqsearchServiceImpl.java | 135 ++ .../impl/ZtYwMachineRoomServiceImpl.java | 78 + .../service/impl/ZtYwPatrolServiceImpl.java | 93 + .../service/impl/ZtYwTaskServiceImpl.java | 163 ++ .../com/sa/zentao/task/SpringTaskJob.java | 76 + .../com/sa/zentao/utils/BeanCopyUtil.java | 30 + .../sa/zentao/utils/BeanCopyUtilCallBack.java | 6 + .../java/com/sa/zentao/utils/Constant.java | 34 + .../java/com/sa/zentao/utils/DateUtils.java | 530 ++++++ .../java/com/sa/zentao/utils/JwtUtil.java | 77 + .../com/sa/zentao/utils/KanBanConstant.java | 93 + .../java/com/sa/zentao/utils/SendEmail.java | 234 +++ .../java/com/sa/zentao/utils/UploadUtil.java | 154 ++ src/main/resources/application-dev.yml | 17 + src/main/resources/application-local.yml | 10 + src/main/resources/application.yml | 39 + src/main/resources/logback-spring.xml | 62 + .../resources/mapper/FestivalConfigMapper.xml | 28 + .../mapper/VerificationCodeMapper.xml | 11 + src/main/resources/mapper/ZtActionMapper.xml | 21 + .../resources/mapper/ZtActionrecentMapper.xml | 21 + src/main/resources/mapper/ZtBugMapper.xml | 153 ++ src/main/resources/mapper/ZtCaseMapper.xml | 60 + .../resources/mapper/ZtCasestepMapper.xml | 14 + .../resources/mapper/ZtCronDevopsMapper.xml | 24 + .../mapper/ZtCronDevopsUserMapper.xml | 12 + src/main/resources/mapper/ZtEffortMapper.xml | 24 + .../mapper/ZtExecutionprojectMapper.xml | 9 + src/main/resources/mapper/ZtKanbanMapper.xml | 36 + .../resources/mapper/ZtKanbancardMapper.xml | 36 + .../resources/mapper/ZtKanbancellMapper.xml | 13 + .../resources/mapper/ZtKanbancolumnMapper.xml | 29 + .../resources/mapper/ZtKanbangroupMapper.xml | 11 + .../resources/mapper/ZtKanbanlaneMapper.xml | 40 + .../resources/mapper/ZtKanbanregionMapper.xml | 17 + .../resources/mapper/ZtKanbanspaceMapper.xml | 26 + src/main/resources/mapper/ZtModuleMapper.xml | 21 + src/main/resources/mapper/ZtProductMapper.xml | 74 + src/main/resources/mapper/ZtProjectMapper.xml | 224 +++ .../mapper/ZtProjectproductMapper.xml | 11 + .../resources/mapper/ZtProjectstoryMapper.xml | 13 + .../resources/mapper/ZtSearchindexMapper.xml | 15 + .../mapper/ZtStoryFeedbackMapper.xml | 43 + src/main/resources/mapper/ZtStoryMapper.xml | 190 ++ .../resources/mapper/ZtStoryUserMapper.xml | 101 + .../resources/mapper/ZtStoryreviewMapper.xml | 12 + .../resources/mapper/ZtStoryspecMapper.xml | 13 + src/main/resources/mapper/ZtTaskMapper.xml | 93 + .../resources/mapper/ZtTaskestimateMapper.xml | 15 + .../resources/mapper/ZtTaskspecMapper.xml | 12 + .../resources/mapper/ZtTaskteamMapper.xml | 16 + src/main/resources/mapper/ZtTeamMapper.xml | 21 + .../resources/mapper/ZtTestresultMapper.xml | 22 + .../resources/mapper/ZtTesttaskMapper.xml | 30 + src/main/resources/mapper/ZtUserMapper.xml | 60 + .../resources/mapper/ZtYwBackupsMapper.xml | 21 + .../resources/mapper/ZtYwChangeMapper.xml | 30 + .../resources/mapper/ZtYwFaultListMapper.xml | 10 + src/main/resources/mapper/ZtYwFaultMapper.xml | 20 + .../resources/mapper/ZtYwFwqsearchMapper.xml | 23 + .../mapper/ZtYwMachineRoomMapper.xml | 25 + .../resources/mapper/ZtYwPatrolMapper.xml | 24 + src/main/resources/mapper/ZtYwTaskMapper.xml | 24 + .../resources/templates/EntityService.ftl | 8 + src/main/resources/templates/entity.java.btl | 166 ++ src/main/resources/templates/entity.java.ftl | 156 ++ src/main/resources/templates/entity.java.vm | 0 src/main/resources/templates/mapper.java.vm | 0 src/main/resources/templates/mapper.xml.ftl | 15 + src/main/resources/templates/paySlips.xls | Bin 0 -> 37888 bytes src/main/resources/templates/service.java.ftl | 20 + src/main/resources/templates/service.java.vm | 20 + .../java/com/sa/zentao/NetworkMonitor.java | 22 + .../com/sa/zentao/ZentaoApplicationTests.java | 19 + 372 files changed, 24482 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 pom.xml create mode 100644 src/main/java/com/sa/zentao/ZentaoApplication.java create mode 100644 src/main/java/com/sa/zentao/conf/AfterRunner.java create mode 100644 src/main/java/com/sa/zentao/conf/CodeGenerator.java create mode 100644 src/main/java/com/sa/zentao/conf/DateConverter.java create mode 100644 src/main/java/com/sa/zentao/conf/DateFormatConfig.java create mode 100644 src/main/java/com/sa/zentao/conf/DevopsRunner.java create mode 100644 src/main/java/com/sa/zentao/conf/GlobalExceptionHandler.java create mode 100644 src/main/java/com/sa/zentao/conf/JwtAuthenticationFilter.java create mode 100644 src/main/java/com/sa/zentao/conf/LoginRiskUser.java create mode 100644 src/main/java/com/sa/zentao/conf/RiskUserThreadLocal.java create mode 100644 src/main/java/com/sa/zentao/conf/SmsConfig.java create mode 100644 src/main/java/com/sa/zentao/conf/SpringUtil.java create mode 100644 src/main/java/com/sa/zentao/conf/WebMvcConfig.java create mode 100644 src/main/java/com/sa/zentao/controller/CommonsController.java create mode 100644 src/main/java/com/sa/zentao/controller/FestivalConfigController.java create mode 100644 src/main/java/com/sa/zentao/controller/VerificationCodeController.java create mode 100644 src/main/java/com/sa/zentao/controller/ZtActionController.java create mode 100644 src/main/java/com/sa/zentao/controller/ZtActionrecentController.java create mode 100644 src/main/java/com/sa/zentao/controller/ZtBugController.java create mode 100644 src/main/java/com/sa/zentao/controller/ZtCaseController.java create mode 100644 src/main/java/com/sa/zentao/controller/ZtCasestepController.java create mode 100644 src/main/java/com/sa/zentao/controller/ZtCountController.java create mode 100644 src/main/java/com/sa/zentao/controller/ZtCronDevopsController.java create mode 100644 src/main/java/com/sa/zentao/controller/ZtCronDevopsUserController.java create mode 100644 src/main/java/com/sa/zentao/controller/ZtEffortController.java create mode 100644 src/main/java/com/sa/zentao/controller/ZtExecutionprojectController.java create mode 100644 src/main/java/com/sa/zentao/controller/ZtKanbanController.java create mode 100644 src/main/java/com/sa/zentao/controller/ZtKanbancardController.java create mode 100644 src/main/java/com/sa/zentao/controller/ZtKanbancellController.java create mode 100644 src/main/java/com/sa/zentao/controller/ZtKanbancolumnController.java create mode 100644 src/main/java/com/sa/zentao/controller/ZtKanbangroupController.java create mode 100644 src/main/java/com/sa/zentao/controller/ZtKanbanlaneController.java create mode 100644 src/main/java/com/sa/zentao/controller/ZtKanbanregionController.java create mode 100644 src/main/java/com/sa/zentao/controller/ZtKanbanspaceController.java create mode 100644 src/main/java/com/sa/zentao/controller/ZtModuleController.java create mode 100644 src/main/java/com/sa/zentao/controller/ZtProductController.java create mode 100644 src/main/java/com/sa/zentao/controller/ZtProjectController.java create mode 100644 src/main/java/com/sa/zentao/controller/ZtProjectproductController.java create mode 100644 src/main/java/com/sa/zentao/controller/ZtProjectstoryController.java create mode 100644 src/main/java/com/sa/zentao/controller/ZtSearchindexController.java create mode 100644 src/main/java/com/sa/zentao/controller/ZtStoryController.java create mode 100644 src/main/java/com/sa/zentao/controller/ZtStoryFeedbackController.java create mode 100644 src/main/java/com/sa/zentao/controller/ZtStoryUserController.java create mode 100644 src/main/java/com/sa/zentao/controller/ZtStoryreviewController.java create mode 100644 src/main/java/com/sa/zentao/controller/ZtStoryspecController.java create mode 100644 src/main/java/com/sa/zentao/controller/ZtTaskController.java create mode 100644 src/main/java/com/sa/zentao/controller/ZtTaskestimateController.java create mode 100644 src/main/java/com/sa/zentao/controller/ZtTaskspecController.java create mode 100644 src/main/java/com/sa/zentao/controller/ZtTaskteamController.java create mode 100644 src/main/java/com/sa/zentao/controller/ZtTeamController.java create mode 100644 src/main/java/com/sa/zentao/controller/ZtTestresultController.java create mode 100644 src/main/java/com/sa/zentao/controller/ZtTesttaskController.java create mode 100644 src/main/java/com/sa/zentao/controller/ZtUserController.java create mode 100644 src/main/java/com/sa/zentao/controller/ZtYwBackupsController.java create mode 100644 src/main/java/com/sa/zentao/controller/ZtYwChangeController.java create mode 100644 src/main/java/com/sa/zentao/controller/ZtYwFaultController.java create mode 100644 src/main/java/com/sa/zentao/controller/ZtYwFaultListController.java create mode 100644 src/main/java/com/sa/zentao/controller/ZtYwFwqsearchController.java create mode 100644 src/main/java/com/sa/zentao/controller/ZtYwMachineRoomController.java create mode 100644 src/main/java/com/sa/zentao/controller/ZtYwPatrolController.java create mode 100644 src/main/java/com/sa/zentao/controller/ZtYwTaskController.java create mode 100644 src/main/java/com/sa/zentao/dao/BusinessException.java create mode 100644 src/main/java/com/sa/zentao/dao/Code.java create mode 100644 src/main/java/com/sa/zentao/dao/FestivalConfigDTO.java create mode 100644 src/main/java/com/sa/zentao/dao/ProjectWorkDetailsDTO.java create mode 100644 src/main/java/com/sa/zentao/dao/Result.java create mode 100644 src/main/java/com/sa/zentao/dao/ServerListDTO.java create mode 100644 src/main/java/com/sa/zentao/dao/WorkDetailsDTO.java create mode 100644 src/main/java/com/sa/zentao/dao/ZtActionDTO.java create mode 100644 src/main/java/com/sa/zentao/dao/ZtBugDTO.java create mode 100644 src/main/java/com/sa/zentao/dao/ZtCaseDTO.java create mode 100644 src/main/java/com/sa/zentao/dao/ZtCasestepDTO.java create mode 100644 src/main/java/com/sa/zentao/dao/ZtCronDevopsDTO.java create mode 100644 src/main/java/com/sa/zentao/dao/ZtEffortDTO.java create mode 100644 src/main/java/com/sa/zentao/dao/ZtKanbanDTO.java create mode 100644 src/main/java/com/sa/zentao/dao/ZtKanbancolumnDTO.java create mode 100644 src/main/java/com/sa/zentao/dao/ZtKanbanlaneDTO.java create mode 100644 src/main/java/com/sa/zentao/dao/ZtModuleDTO.java create mode 100644 src/main/java/com/sa/zentao/dao/ZtProductDTO.java create mode 100644 src/main/java/com/sa/zentao/dao/ZtProjectDTO.java create mode 100644 src/main/java/com/sa/zentao/dao/ZtStoryCountDTO.java create mode 100644 src/main/java/com/sa/zentao/dao/ZtStoryDTO.java create mode 100644 src/main/java/com/sa/zentao/dao/ZtStoryFeedbackDTO.java create mode 100644 src/main/java/com/sa/zentao/dao/ZtStoryUserDTO.java create mode 100644 src/main/java/com/sa/zentao/dao/ZtStoryreviewDTO.java create mode 100644 src/main/java/com/sa/zentao/dao/ZtTaskDTO.java create mode 100644 src/main/java/com/sa/zentao/dao/ZtTesttaskDTO.java create mode 100644 src/main/java/com/sa/zentao/dao/ZtUserDTO.java create mode 100644 src/main/java/com/sa/zentao/dao/ZtYwBackupsDTO.java create mode 100644 src/main/java/com/sa/zentao/dao/ZtYwChangeDTO.java create mode 100644 src/main/java/com/sa/zentao/dao/ZtYwFaultDTO.java create mode 100644 src/main/java/com/sa/zentao/dao/ZtYwFwqsearchDTO.java create mode 100644 src/main/java/com/sa/zentao/dao/ZtYwMachineRoomDTO.java create mode 100644 src/main/java/com/sa/zentao/dao/ZtYwPatrolDTO.java create mode 100644 src/main/java/com/sa/zentao/dao/ZtYwTaskDTO.java create mode 100644 src/main/java/com/sa/zentao/entity/FestivalConfig.java create mode 100644 src/main/java/com/sa/zentao/entity/VerificationCode.java create mode 100644 src/main/java/com/sa/zentao/entity/ZtAction.java create mode 100644 src/main/java/com/sa/zentao/entity/ZtActionrecent.java create mode 100644 src/main/java/com/sa/zentao/entity/ZtBug.java create mode 100644 src/main/java/com/sa/zentao/entity/ZtCase.java create mode 100644 src/main/java/com/sa/zentao/entity/ZtCasestep.java create mode 100644 src/main/java/com/sa/zentao/entity/ZtCronDevops.java create mode 100644 src/main/java/com/sa/zentao/entity/ZtCronDevopsUser.java create mode 100644 src/main/java/com/sa/zentao/entity/ZtEffort.java create mode 100644 src/main/java/com/sa/zentao/entity/ZtExecutionproject.java create mode 100644 src/main/java/com/sa/zentao/entity/ZtKanban.java create mode 100644 src/main/java/com/sa/zentao/entity/ZtKanbancard.java create mode 100644 src/main/java/com/sa/zentao/entity/ZtKanbancell.java create mode 100644 src/main/java/com/sa/zentao/entity/ZtKanbancolumn.java create mode 100644 src/main/java/com/sa/zentao/entity/ZtKanbangroup.java create mode 100644 src/main/java/com/sa/zentao/entity/ZtKanbanlane.java create mode 100644 src/main/java/com/sa/zentao/entity/ZtKanbanregion.java create mode 100644 src/main/java/com/sa/zentao/entity/ZtKanbanspace.java create mode 100644 src/main/java/com/sa/zentao/entity/ZtModule.java create mode 100644 src/main/java/com/sa/zentao/entity/ZtProduct.java create mode 100644 src/main/java/com/sa/zentao/entity/ZtProject.java create mode 100644 src/main/java/com/sa/zentao/entity/ZtProjectproduct.java create mode 100644 src/main/java/com/sa/zentao/entity/ZtProjectstory.java create mode 100644 src/main/java/com/sa/zentao/entity/ZtSearchindex.java create mode 100644 src/main/java/com/sa/zentao/entity/ZtStory.java create mode 100644 src/main/java/com/sa/zentao/entity/ZtStoryFeedback.java create mode 100644 src/main/java/com/sa/zentao/entity/ZtStoryUser.java create mode 100644 src/main/java/com/sa/zentao/entity/ZtStoryreview.java create mode 100644 src/main/java/com/sa/zentao/entity/ZtStoryspec.java create mode 100644 src/main/java/com/sa/zentao/entity/ZtTask.java create mode 100644 src/main/java/com/sa/zentao/entity/ZtTaskestimate.java create mode 100644 src/main/java/com/sa/zentao/entity/ZtTaskspec.java create mode 100644 src/main/java/com/sa/zentao/entity/ZtTaskteam.java create mode 100644 src/main/java/com/sa/zentao/entity/ZtTeam.java create mode 100644 src/main/java/com/sa/zentao/entity/ZtTestresult.java create mode 100644 src/main/java/com/sa/zentao/entity/ZtTesttask.java create mode 100644 src/main/java/com/sa/zentao/entity/ZtUser.java create mode 100644 src/main/java/com/sa/zentao/entity/ZtYwBackups.java create mode 100644 src/main/java/com/sa/zentao/entity/ZtYwChange.java create mode 100644 src/main/java/com/sa/zentao/entity/ZtYwFault.java create mode 100644 src/main/java/com/sa/zentao/entity/ZtYwFaultList.java create mode 100644 src/main/java/com/sa/zentao/entity/ZtYwFwqsearch.java create mode 100644 src/main/java/com/sa/zentao/entity/ZtYwMachineRoom.java create mode 100644 src/main/java/com/sa/zentao/entity/ZtYwPatrol.java create mode 100644 src/main/java/com/sa/zentao/entity/ZtYwTask.java create mode 100644 src/main/java/com/sa/zentao/enums/ActionStatus.java create mode 100644 src/main/java/com/sa/zentao/enums/ActionType.java create mode 100644 src/main/java/com/sa/zentao/enums/DeleteFlagEnum.java create mode 100644 src/main/java/com/sa/zentao/enums/ProductBug.java create mode 100644 src/main/java/com/sa/zentao/enums/ProductStoryStatus.java create mode 100644 src/main/java/com/sa/zentao/enums/UserType.java create mode 100644 src/main/java/com/sa/zentao/mapper/FestivalConfigMapper.java create mode 100644 src/main/java/com/sa/zentao/mapper/VerificationCodeMapper.java create mode 100644 src/main/java/com/sa/zentao/mapper/ZtActionMapper.java create mode 100644 src/main/java/com/sa/zentao/mapper/ZtActionrecentMapper.java create mode 100644 src/main/java/com/sa/zentao/mapper/ZtBugMapper.java create mode 100644 src/main/java/com/sa/zentao/mapper/ZtCaseMapper.java create mode 100644 src/main/java/com/sa/zentao/mapper/ZtCasestepMapper.java create mode 100644 src/main/java/com/sa/zentao/mapper/ZtCronDevopsMapper.java create mode 100644 src/main/java/com/sa/zentao/mapper/ZtCronDevopsUserMapper.java create mode 100644 src/main/java/com/sa/zentao/mapper/ZtEffortMapper.java create mode 100644 src/main/java/com/sa/zentao/mapper/ZtExecutionprojectMapper.java create mode 100644 src/main/java/com/sa/zentao/mapper/ZtKanbanMapper.java create mode 100644 src/main/java/com/sa/zentao/mapper/ZtKanbancardMapper.java create mode 100644 src/main/java/com/sa/zentao/mapper/ZtKanbancellMapper.java create mode 100644 src/main/java/com/sa/zentao/mapper/ZtKanbancolumnMapper.java create mode 100644 src/main/java/com/sa/zentao/mapper/ZtKanbangroupMapper.java create mode 100644 src/main/java/com/sa/zentao/mapper/ZtKanbanlaneMapper.java create mode 100644 src/main/java/com/sa/zentao/mapper/ZtKanbanregionMapper.java create mode 100644 src/main/java/com/sa/zentao/mapper/ZtKanbanspaceMapper.java create mode 100644 src/main/java/com/sa/zentao/mapper/ZtModuleMapper.java create mode 100644 src/main/java/com/sa/zentao/mapper/ZtProductMapper.java create mode 100644 src/main/java/com/sa/zentao/mapper/ZtProjectMapper.java create mode 100644 src/main/java/com/sa/zentao/mapper/ZtProjectproductMapper.java create mode 100644 src/main/java/com/sa/zentao/mapper/ZtProjectstoryMapper.java create mode 100644 src/main/java/com/sa/zentao/mapper/ZtSearchindexMapper.java create mode 100644 src/main/java/com/sa/zentao/mapper/ZtStoryFeedbackMapper.java create mode 100644 src/main/java/com/sa/zentao/mapper/ZtStoryMapper.java create mode 100644 src/main/java/com/sa/zentao/mapper/ZtStoryUserMapper.java create mode 100644 src/main/java/com/sa/zentao/mapper/ZtStoryreviewMapper.java create mode 100644 src/main/java/com/sa/zentao/mapper/ZtStoryspecMapper.java create mode 100644 src/main/java/com/sa/zentao/mapper/ZtTaskMapper.java create mode 100644 src/main/java/com/sa/zentao/mapper/ZtTaskestimateMapper.java create mode 100644 src/main/java/com/sa/zentao/mapper/ZtTaskspecMapper.java create mode 100644 src/main/java/com/sa/zentao/mapper/ZtTaskteamMapper.java create mode 100644 src/main/java/com/sa/zentao/mapper/ZtTeamMapper.java create mode 100644 src/main/java/com/sa/zentao/mapper/ZtTestresultMapper.java create mode 100644 src/main/java/com/sa/zentao/mapper/ZtTesttaskMapper.java create mode 100644 src/main/java/com/sa/zentao/mapper/ZtUserMapper.java create mode 100644 src/main/java/com/sa/zentao/mapper/ZtYwBackupsMapper.java create mode 100644 src/main/java/com/sa/zentao/mapper/ZtYwChangeMapper.java create mode 100644 src/main/java/com/sa/zentao/mapper/ZtYwFaultListMapper.java create mode 100644 src/main/java/com/sa/zentao/mapper/ZtYwFaultMapper.java create mode 100644 src/main/java/com/sa/zentao/mapper/ZtYwFwqsearchMapper.java create mode 100644 src/main/java/com/sa/zentao/mapper/ZtYwMachineRoomMapper.java create mode 100644 src/main/java/com/sa/zentao/mapper/ZtYwPatrolMapper.java create mode 100644 src/main/java/com/sa/zentao/mapper/ZtYwTaskMapper.java create mode 100644 src/main/java/com/sa/zentao/qo/ActionQo.java create mode 100644 src/main/java/com/sa/zentao/qo/BaseQo.java create mode 100644 src/main/java/com/sa/zentao/qo/EffortQo.java create mode 100644 src/main/java/com/sa/zentao/qo/FestivalConfigQo.java create mode 100644 src/main/java/com/sa/zentao/qo/KanbanQo.java create mode 100644 src/main/java/com/sa/zentao/qo/StoryQo.java create mode 100644 src/main/java/com/sa/zentao/qo/ZtBugQo.java create mode 100644 src/main/java/com/sa/zentao/qo/ZtCaseQo.java create mode 100644 src/main/java/com/sa/zentao/qo/ZtCountQo.java create mode 100644 src/main/java/com/sa/zentao/qo/ZtModuleQo.java create mode 100644 src/main/java/com/sa/zentao/qo/ZtProjectQo.java create mode 100644 src/main/java/com/sa/zentao/qo/ZtUserQo.java create mode 100644 src/main/java/com/sa/zentao/qo/ZtYwPatrolQo.java create mode 100644 src/main/java/com/sa/zentao/service/IFestivalConfigService.java create mode 100644 src/main/java/com/sa/zentao/service/IVerificationCodeService.java create mode 100644 src/main/java/com/sa/zentao/service/IZtActionService.java create mode 100644 src/main/java/com/sa/zentao/service/IZtActionrecentService.java create mode 100644 src/main/java/com/sa/zentao/service/IZtBugService.java create mode 100644 src/main/java/com/sa/zentao/service/IZtCaseService.java create mode 100644 src/main/java/com/sa/zentao/service/IZtCasestepService.java create mode 100644 src/main/java/com/sa/zentao/service/IZtCronDevopsService.java create mode 100644 src/main/java/com/sa/zentao/service/IZtCronDevopsUserService.java create mode 100644 src/main/java/com/sa/zentao/service/IZtEffortService.java create mode 100644 src/main/java/com/sa/zentao/service/IZtExecutionprojectService.java create mode 100644 src/main/java/com/sa/zentao/service/IZtKanbanService.java create mode 100644 src/main/java/com/sa/zentao/service/IZtKanbancardService.java create mode 100644 src/main/java/com/sa/zentao/service/IZtKanbancellService.java create mode 100644 src/main/java/com/sa/zentao/service/IZtKanbancolumnService.java create mode 100644 src/main/java/com/sa/zentao/service/IZtKanbangroupService.java create mode 100644 src/main/java/com/sa/zentao/service/IZtKanbanlaneService.java create mode 100644 src/main/java/com/sa/zentao/service/IZtKanbanregionService.java create mode 100644 src/main/java/com/sa/zentao/service/IZtKanbanspaceService.java create mode 100644 src/main/java/com/sa/zentao/service/IZtModuleService.java create mode 100644 src/main/java/com/sa/zentao/service/IZtProductService.java create mode 100644 src/main/java/com/sa/zentao/service/IZtProjectService.java create mode 100644 src/main/java/com/sa/zentao/service/IZtProjectproductService.java create mode 100644 src/main/java/com/sa/zentao/service/IZtProjectstoryService.java create mode 100644 src/main/java/com/sa/zentao/service/IZtSearchindexService.java create mode 100644 src/main/java/com/sa/zentao/service/IZtStoryFeedbackService.java create mode 100644 src/main/java/com/sa/zentao/service/IZtStoryService.java create mode 100644 src/main/java/com/sa/zentao/service/IZtStoryUserService.java create mode 100644 src/main/java/com/sa/zentao/service/IZtStoryreviewService.java create mode 100644 src/main/java/com/sa/zentao/service/IZtStoryspecService.java create mode 100644 src/main/java/com/sa/zentao/service/IZtTaskService.java create mode 100644 src/main/java/com/sa/zentao/service/IZtTaskestimateService.java create mode 100644 src/main/java/com/sa/zentao/service/IZtTaskspecService.java create mode 100644 src/main/java/com/sa/zentao/service/IZtTaskteamService.java create mode 100644 src/main/java/com/sa/zentao/service/IZtTeamService.java create mode 100644 src/main/java/com/sa/zentao/service/IZtTestresultService.java create mode 100644 src/main/java/com/sa/zentao/service/IZtTesttaskService.java create mode 100644 src/main/java/com/sa/zentao/service/IZtUserService.java create mode 100644 src/main/java/com/sa/zentao/service/IZtYwBackupsService.java create mode 100644 src/main/java/com/sa/zentao/service/IZtYwChangeService.java create mode 100644 src/main/java/com/sa/zentao/service/IZtYwFaultListService.java create mode 100644 src/main/java/com/sa/zentao/service/IZtYwFaultService.java create mode 100644 src/main/java/com/sa/zentao/service/IZtYwFwqsearchService.java create mode 100644 src/main/java/com/sa/zentao/service/IZtYwMachineRoomService.java create mode 100644 src/main/java/com/sa/zentao/service/IZtYwPatrolService.java create mode 100644 src/main/java/com/sa/zentao/service/IZtYwTaskService.java create mode 100644 src/main/java/com/sa/zentao/service/impl/FestivalConfigServiceImpl.java create mode 100644 src/main/java/com/sa/zentao/service/impl/IZtCountService.java create mode 100644 src/main/java/com/sa/zentao/service/impl/VerificationCodeServiceImpl.java create mode 100644 src/main/java/com/sa/zentao/service/impl/ZtActionServiceImpl.java create mode 100644 src/main/java/com/sa/zentao/service/impl/ZtActionrecentServiceImpl.java create mode 100644 src/main/java/com/sa/zentao/service/impl/ZtBugServiceImpl.java create mode 100644 src/main/java/com/sa/zentao/service/impl/ZtCaseServiceImpl.java create mode 100644 src/main/java/com/sa/zentao/service/impl/ZtCasestepServiceImpl.java create mode 100644 src/main/java/com/sa/zentao/service/impl/ZtCronDevopsServiceImpl.java create mode 100644 src/main/java/com/sa/zentao/service/impl/ZtCronDevopsUserServiceImpl.java create mode 100644 src/main/java/com/sa/zentao/service/impl/ZtEffortServiceImpl.java create mode 100644 src/main/java/com/sa/zentao/service/impl/ZtExecutionprojectServiceImpl.java create mode 100644 src/main/java/com/sa/zentao/service/impl/ZtKanbanServiceImpl.java create mode 100644 src/main/java/com/sa/zentao/service/impl/ZtKanbancardServiceImpl.java create mode 100644 src/main/java/com/sa/zentao/service/impl/ZtKanbancellServiceImpl.java create mode 100644 src/main/java/com/sa/zentao/service/impl/ZtKanbancolumnServiceImpl.java create mode 100644 src/main/java/com/sa/zentao/service/impl/ZtKanbangroupServiceImpl.java create mode 100644 src/main/java/com/sa/zentao/service/impl/ZtKanbanlaneServiceImpl.java create mode 100644 src/main/java/com/sa/zentao/service/impl/ZtKanbanregionServiceImpl.java create mode 100644 src/main/java/com/sa/zentao/service/impl/ZtKanbanspaceServiceImpl.java create mode 100644 src/main/java/com/sa/zentao/service/impl/ZtModuleServiceImpl.java create mode 100644 src/main/java/com/sa/zentao/service/impl/ZtProductServiceImpl.java create mode 100644 src/main/java/com/sa/zentao/service/impl/ZtProjectServiceImpl.java create mode 100644 src/main/java/com/sa/zentao/service/impl/ZtProjectproductServiceImpl.java create mode 100644 src/main/java/com/sa/zentao/service/impl/ZtProjectstoryServiceImpl.java create mode 100644 src/main/java/com/sa/zentao/service/impl/ZtSearchindexServiceImpl.java create mode 100644 src/main/java/com/sa/zentao/service/impl/ZtStoryFeedbackServiceImpl.java create mode 100644 src/main/java/com/sa/zentao/service/impl/ZtStoryServiceImpl.java create mode 100644 src/main/java/com/sa/zentao/service/impl/ZtStoryUserServiceImpl.java create mode 100644 src/main/java/com/sa/zentao/service/impl/ZtStoryreviewServiceImpl.java create mode 100644 src/main/java/com/sa/zentao/service/impl/ZtStoryspecServiceImpl.java create mode 100644 src/main/java/com/sa/zentao/service/impl/ZtTaskServiceImpl.java create mode 100644 src/main/java/com/sa/zentao/service/impl/ZtTaskestimateServiceImpl.java create mode 100644 src/main/java/com/sa/zentao/service/impl/ZtTaskspecServiceImpl.java create mode 100644 src/main/java/com/sa/zentao/service/impl/ZtTaskteamServiceImpl.java create mode 100644 src/main/java/com/sa/zentao/service/impl/ZtTeamServiceImpl.java create mode 100644 src/main/java/com/sa/zentao/service/impl/ZtTestresultServiceImpl.java create mode 100644 src/main/java/com/sa/zentao/service/impl/ZtTesttaskServiceImpl.java create mode 100644 src/main/java/com/sa/zentao/service/impl/ZtUserServiceImpl.java create mode 100644 src/main/java/com/sa/zentao/service/impl/ZtYwBackupsServiceImpl.java create mode 100644 src/main/java/com/sa/zentao/service/impl/ZtYwChangeServiceImpl.java create mode 100644 src/main/java/com/sa/zentao/service/impl/ZtYwFaultListServiceImpl.java create mode 100644 src/main/java/com/sa/zentao/service/impl/ZtYwFaultServiceImpl.java create mode 100644 src/main/java/com/sa/zentao/service/impl/ZtYwFwqsearchServiceImpl.java create mode 100644 src/main/java/com/sa/zentao/service/impl/ZtYwMachineRoomServiceImpl.java create mode 100644 src/main/java/com/sa/zentao/service/impl/ZtYwPatrolServiceImpl.java create mode 100644 src/main/java/com/sa/zentao/service/impl/ZtYwTaskServiceImpl.java create mode 100644 src/main/java/com/sa/zentao/task/SpringTaskJob.java create mode 100644 src/main/java/com/sa/zentao/utils/BeanCopyUtil.java create mode 100644 src/main/java/com/sa/zentao/utils/BeanCopyUtilCallBack.java create mode 100644 src/main/java/com/sa/zentao/utils/Constant.java create mode 100644 src/main/java/com/sa/zentao/utils/DateUtils.java create mode 100644 src/main/java/com/sa/zentao/utils/JwtUtil.java create mode 100644 src/main/java/com/sa/zentao/utils/KanBanConstant.java create mode 100644 src/main/java/com/sa/zentao/utils/SendEmail.java create mode 100644 src/main/java/com/sa/zentao/utils/UploadUtil.java create mode 100644 src/main/resources/application-dev.yml create mode 100644 src/main/resources/application-local.yml create mode 100644 src/main/resources/application.yml create mode 100644 src/main/resources/logback-spring.xml create mode 100644 src/main/resources/mapper/FestivalConfigMapper.xml create mode 100644 src/main/resources/mapper/VerificationCodeMapper.xml create mode 100644 src/main/resources/mapper/ZtActionMapper.xml create mode 100644 src/main/resources/mapper/ZtActionrecentMapper.xml create mode 100644 src/main/resources/mapper/ZtBugMapper.xml create mode 100644 src/main/resources/mapper/ZtCaseMapper.xml create mode 100644 src/main/resources/mapper/ZtCasestepMapper.xml create mode 100644 src/main/resources/mapper/ZtCronDevopsMapper.xml create mode 100644 src/main/resources/mapper/ZtCronDevopsUserMapper.xml create mode 100644 src/main/resources/mapper/ZtEffortMapper.xml create mode 100644 src/main/resources/mapper/ZtExecutionprojectMapper.xml create mode 100644 src/main/resources/mapper/ZtKanbanMapper.xml create mode 100644 src/main/resources/mapper/ZtKanbancardMapper.xml create mode 100644 src/main/resources/mapper/ZtKanbancellMapper.xml create mode 100644 src/main/resources/mapper/ZtKanbancolumnMapper.xml create mode 100644 src/main/resources/mapper/ZtKanbangroupMapper.xml create mode 100644 src/main/resources/mapper/ZtKanbanlaneMapper.xml create mode 100644 src/main/resources/mapper/ZtKanbanregionMapper.xml create mode 100644 src/main/resources/mapper/ZtKanbanspaceMapper.xml create mode 100644 src/main/resources/mapper/ZtModuleMapper.xml create mode 100644 src/main/resources/mapper/ZtProductMapper.xml create mode 100644 src/main/resources/mapper/ZtProjectMapper.xml create mode 100644 src/main/resources/mapper/ZtProjectproductMapper.xml create mode 100644 src/main/resources/mapper/ZtProjectstoryMapper.xml create mode 100644 src/main/resources/mapper/ZtSearchindexMapper.xml create mode 100644 src/main/resources/mapper/ZtStoryFeedbackMapper.xml create mode 100644 src/main/resources/mapper/ZtStoryMapper.xml create mode 100644 src/main/resources/mapper/ZtStoryUserMapper.xml create mode 100644 src/main/resources/mapper/ZtStoryreviewMapper.xml create mode 100644 src/main/resources/mapper/ZtStoryspecMapper.xml create mode 100644 src/main/resources/mapper/ZtTaskMapper.xml create mode 100644 src/main/resources/mapper/ZtTaskestimateMapper.xml create mode 100644 src/main/resources/mapper/ZtTaskspecMapper.xml create mode 100644 src/main/resources/mapper/ZtTaskteamMapper.xml create mode 100644 src/main/resources/mapper/ZtTeamMapper.xml create mode 100644 src/main/resources/mapper/ZtTestresultMapper.xml create mode 100644 src/main/resources/mapper/ZtTesttaskMapper.xml create mode 100644 src/main/resources/mapper/ZtUserMapper.xml create mode 100644 src/main/resources/mapper/ZtYwBackupsMapper.xml create mode 100644 src/main/resources/mapper/ZtYwChangeMapper.xml create mode 100644 src/main/resources/mapper/ZtYwFaultListMapper.xml create mode 100644 src/main/resources/mapper/ZtYwFaultMapper.xml create mode 100644 src/main/resources/mapper/ZtYwFwqsearchMapper.xml create mode 100644 src/main/resources/mapper/ZtYwMachineRoomMapper.xml create mode 100644 src/main/resources/mapper/ZtYwPatrolMapper.xml create mode 100644 src/main/resources/mapper/ZtYwTaskMapper.xml create mode 100644 src/main/resources/templates/EntityService.ftl create mode 100644 src/main/resources/templates/entity.java.btl create mode 100644 src/main/resources/templates/entity.java.ftl create mode 100644 src/main/resources/templates/entity.java.vm create mode 100644 src/main/resources/templates/mapper.java.vm create mode 100644 src/main/resources/templates/mapper.xml.ftl create mode 100644 src/main/resources/templates/paySlips.xls create mode 100644 src/main/resources/templates/service.java.ftl create mode 100644 src/main/resources/templates/service.java.vm create mode 100644 src/test/java/com/sa/zentao/NetworkMonitor.java create mode 100644 src/test/java/com/sa/zentao/ZentaoApplicationTests.java diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..6b40b38 --- /dev/null +++ b/.gitignore @@ -0,0 +1,20 @@ +/target/ +/dev/ +/hs_err_pid23072.log +/hs_err_pid6732.log +/replay_pid23072.log +/replay_pid6732.log +/hs_err_pid17440.log +/hs_err_pid6008.log +/replay_pid6008.log +/*.log +/.idea/ +/.settings/ +/test-output/ +/*.iml +/.classpath +/.project +/disconf/ +/log.txt +/*.idea +/zentao.iml \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..e69de29 diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..83b13af --- /dev/null +++ b/pom.xml @@ -0,0 +1,249 @@ + + + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 3.3.0 + + + com.sa + zentao + 0.0.1-SNAPSHOT + zentao + Demo project for Spring Boot + + 17 + 3.3.0 + + + + + com.sun.mail + javax.mail + 1.5.2 + + + + + + + + com.tencentcloudapi + tencentcloud-sdk-java + 3.1.975 + + + + + + org.springframework.boot + spring-boot-starter + + + + javax.servlet + javax.servlet-api + 3.1.0 + provided + + + + + + org.springframework.boot + spring-boot-starter-test + test + + + + org.springframework.boot + spring-boot-starter-websocket + + + + com.auth0 + java-jwt + 3.5.0 + + + + org.springframework.boot + spring-boot-starter-web + ${boot.version} + + + org.dom4j + dom4j + 2.0.0 + + + + + + + + + + + org.springframework.boot + spring-boot-starter-quartz + + + + org.mybatis + mybatis-spring + 3.0.3 + + + com.baomidou + mybatis-plus-boot-starter + 3.5.5 + + + + com.baomidou + mybatis-plus-spring-boot3-starter + 3.5.5 + + + + com.baomidou + mybatis-plus-generator + 3.4.1 + + + com.baomidou + mybatis-plus-extension + + + + + + + + + org.apache.httpcomponents + httpclient + 4.5.13 + + + org.apache.httpcomponents + httpmime + 4.5.13 + + + + org.springframework.boot + spring-boot-starter-freemarker + + + + mysql + mysql-connector-java + 8.0.19 + + + org.apache.commons + commons-lang3 + 3.7 + + + + com.alibaba + fastjson + 2.0.12 + + + org.springframework.boot + spring-boot-starter-aop + + + com.github.pagehelper + pagehelper-spring-boot-starter + + + 2.0.0 + + + + + + com.alibaba + easyexcel + 4.0.2 + + + org.springframework.boot + spring-boot-configuration-processor + + + + + + + + + org.apache.commons + commons-pool2 + + + + + org.projectlombok + lombok + 1.18.8 + + + + + org.apache.commons + commons-pool2 + 2.8.1 + + + + + zentao + + + org.springframework.boot + spring-boot-maven-plugin + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.0 + + ${java.version} + ${java.version} + ${project.build.sourceEncoding} + + src\main\webapp\WEB-INF\lib + + + + org.projectlombok + lombok + ${lombok.version} + + + + + + org.apache.maven.plugins + maven-resources-plugin + + + xls + xlsx + + + + + + + + diff --git a/src/main/java/com/sa/zentao/ZentaoApplication.java b/src/main/java/com/sa/zentao/ZentaoApplication.java new file mode 100644 index 0000000..5b73196 --- /dev/null +++ b/src/main/java/com/sa/zentao/ZentaoApplication.java @@ -0,0 +1,18 @@ +package com.sa.zentao; + +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.scheduling.annotation.EnableScheduling; + +@SpringBootApplication(scanBasePackages = {"com.sa.zentao"}) +@MapperScan({"com.sa.zentao.mapper","com.sa.**.mapper"}) +@EnableScheduling +public class ZentaoApplication { + + public static void main(String[] args) { + SpringApplication.run(ZentaoApplication.class, args); + } + +} diff --git a/src/main/java/com/sa/zentao/conf/AfterRunner.java b/src/main/java/com/sa/zentao/conf/AfterRunner.java new file mode 100644 index 0000000..6ce8875 --- /dev/null +++ b/src/main/java/com/sa/zentao/conf/AfterRunner.java @@ -0,0 +1,36 @@ +package com.sa.zentao.conf; + +//import com.dritec.FastDFSClient; + +import com.sa.zentao.service.IFestivalConfigService; +import com.sa.zentao.task.SpringTaskJob; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.ApplicationArguments; +import org.springframework.boot.ApplicationRunner; +import org.springframework.core.annotation.Order; +import org.springframework.stereotype.Component; + +@Component +@Order(value = 1) +@Slf4j +public class AfterRunner implements ApplicationRunner { + + + @Autowired + private IFestivalConfigService festivalConfigService; + + @Autowired + private com.sa.zentao.task.SpringTaskJob springTaskJob; + + + @Override + public void run(ApplicationArguments args) throws Exception { + //初始化假期 + festivalConfigService.initfestivalAndHoliday(); + springTaskJob.dkEveryDay(); + new Thread(new DevopsRunner()).start(); + } + +} \ No newline at end of file diff --git a/src/main/java/com/sa/zentao/conf/CodeGenerator.java b/src/main/java/com/sa/zentao/conf/CodeGenerator.java new file mode 100644 index 0000000..9a3ca9f --- /dev/null +++ b/src/main/java/com/sa/zentao/conf/CodeGenerator.java @@ -0,0 +1,166 @@ +package com.sa.zentao.conf; + +import com.baomidou.mybatisplus.core.toolkit.StringPool; +import com.baomidou.mybatisplus.generator.AutoGenerator; +import com.baomidou.mybatisplus.generator.InjectionConfig; +import com.baomidou.mybatisplus.generator.config.*; +import com.baomidou.mybatisplus.generator.config.builder.ConfigBuilder; +import com.baomidou.mybatisplus.generator.config.po.TableInfo; +import com.baomidou.mybatisplus.generator.config.rules.FileType; +import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy; +import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine; +import org.apache.commons.lang3.StringUtils; + +import javax.swing.*; +import java.io.File; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class CodeGenerator { + //自己的名字 + static String Author = "gqb"; + + public static String tableName = "zt_yw_fault_list"; + + /** + *

+ * 读取控制台内容 + *

+ */ + + public static void main(String[] args) throws Exception { + + +// Author = JOptionPane.showInputDialog(null, "请输入作者"); + +// if (StringUtils.isEmpty(Author)) { +// throw new Exception("请输入作者"); +// } + + + // 代码生成器 + AutoGenerator mpg = new AutoGenerator(); + // 全局配置 + GlobalConfig gc = new GlobalConfig(); + String projectPath = System.getProperty("user.dir") ; + + gc.setOutputDir(projectPath + "/src/main/java"); + gc.setAuthor(Author); + gc.setOpen(false); + // gc.setSwagger2(true); 实体属性 Swagger2 注解 + mpg.setGlobalConfig(gc); + // 数据源配置 + DataSourceConfig dsc = new DataSourceConfig(); + dsc.setUrl("jdbc:mysql://192.168.1.161:3306/zentao?useUnicode=true&useSSL=false&characterEncoding=utf8"); + // dsc.setSchemaName("public"); + dsc.setDriverName("com.mysql.cj.jdbc.Driver"); +// dsc.setUsername("root"); +// dsc.setPassword("123456"); + dsc.setUsername("devgps"); + dsc.setPassword("dev@2021GPS"); + mpg.setDataSource(dsc); + + // 包配置 + PackageConfig pc = new PackageConfig(); + pc.setModuleName(""); + pc.setParent("com.sa.zentao"); + mpg.setPackageInfo(pc); + + // 自定义配置 + InjectionConfig cfg = new InjectionConfig() { + @Override + public void initMap() { + Map map = new HashMap(); + map.put("entityPackage", "com.sa.zentao.pojo"); + map.put("mapperPackage", "com.sa.zentao.mapper"); + + this.setMap(map); + } + }; + // 如果模板引擎是 freemarker + String templatePath = "/templates/mapper.xml.ftl"; + // 如果模板引擎是 velocity + // String templatePath = "/templates/mapper.xml.vm"; + String templatePathBean = "/templates/entity.java.ftl"; + // 自定义输出配置 + List focList = new ArrayList<>(); + // 自定义配置会被优先输出 + focList.add(new FileOutConfig(templatePath) { + @Override + public String outputFile(TableInfo tableInfo) { + // 自定义输出文件名 , 如果你 Entity 设置了前后缀、此处注意 xml 的名称会跟着发生变化!! + return projectPath + "/src/main/resources/mapper/" + + "/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML; + } + }); + focList.add(new FileOutConfig(templatePathBean) { + @Override + public String outputFile(TableInfo tableInfo) { + // 自定义输出文件名 , 如果你 Entity 设置了前后缀、此处注意 xml 的名称会跟着发生变化!! + return System.getProperty("user.dir") + "/src/main/java/com/sa/zentao/entity/" + + "/" + tableInfo.getEntityName() + StringPool.DOT_JAVA; + } + }); + + cfg.setFileCreate(new IFileCreate() { + @Override + public boolean isCreate(ConfigBuilder configBuilder, FileType fileType, String filePath) { + // 判断自定义文件夹是否需要创建 + // checkDir("调用默认方法创建的目录,自定义目录用"); + if (fileType == FileType.MAPPER) { + // 已经生成 mapper 文件判断存在,不想重新生成返回 false + return !new File(filePath).exists(); + } + +// if (fileType == FileType.ENTITY) { +// if (filePath.contains("outbound-parent/outbound/src/main/java\\com\\sa\\care\\outbound\\entity\\")) { +// +// return false; +// } +// } + + // 允许生成模板文件 + return true; + } + }); + + cfg.setFileOutConfigList(focList); + + mpg.setCfg(cfg); + + // 配置模板 + TemplateConfig templateConfig = new TemplateConfig(); + // 配置自定义输出模板 + //指定自定义模板路径,注意不要带上.ftl/.vm, 会根据使用的模板引擎自动识别 + // templateConfig.setEntity("templates/entity2.java"); + // templateConfig.setService("templates/service.java"); + // templateConfig.setController(); + + templateConfig.setXml(null); + mpg.setTemplate(templateConfig); + + // 策略配置 + StrategyConfig strategy = new StrategyConfig(); + strategy.setNaming(NamingStrategy.underline_to_camel); + strategy.setColumnNaming(NamingStrategy.underline_to_camel); +// strategy.setSuperEntityClass("com.sa.care.base.baseenity.BaseEntity"); + strategy.setEntityLombokModel(true); + strategy.setRestControllerStyle(true); +// strategy.set + // 公共父类 +// strategy.setSuperControllerClass("你自己的父类控制器,没有就不用设置!"); + // 写于父类中的公共字段 +// strategy.setSuperEntityColumns("id"); + strategy.setInclude(tableName); + strategy.setControllerMappingHyphenStyle(true); + strategy.setTablePrefix(pc.getModuleName() + "_"); + + mpg.setStrategy(strategy); + mpg.setTemplateEngine(new FreemarkerTemplateEngine()); + mpg.execute(); + } + + +} \ No newline at end of file diff --git a/src/main/java/com/sa/zentao/conf/DateConverter.java b/src/main/java/com/sa/zentao/conf/DateConverter.java new file mode 100644 index 0000000..098e1dc --- /dev/null +++ b/src/main/java/com/sa/zentao/conf/DateConverter.java @@ -0,0 +1,38 @@ +package com.sa.zentao.conf; + +import com.alibaba.excel.converters.Converter; +import com.alibaba.excel.enums.CellDataTypeEnum; +import com.alibaba.excel.metadata.GlobalConfiguration; +import com.alibaba.excel.metadata.data.WriteCellData; +import com.alibaba.excel.metadata.property.ExcelContentProperty; + +import java.text.SimpleDateFormat; +import java.util.Date; + +/** + * @author : sean + * @date Date : 2022-10-29 23:21 + * @Description: + */ + +public class DateConverter implements Converter { + + private static final String PATTERN_YYYY_MM_DD = "yyyy-MM-dd hh:mm:hh"; + + @Override + public Class supportJavaTypeKey() { + return Converter.super.supportJavaTypeKey(); + } + + @Override + public CellDataTypeEnum supportExcelTypeKey() { + return Converter.super.supportExcelTypeKey(); + } + + @Override + public WriteCellData convertToExcelData(Date value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception { + SimpleDateFormat sdf = new SimpleDateFormat(PATTERN_YYYY_MM_DD); + String dateValue = sdf.format(value); + return new WriteCellData<>(dateValue); + } +} \ No newline at end of file diff --git a/src/main/java/com/sa/zentao/conf/DateFormatConfig.java b/src/main/java/com/sa/zentao/conf/DateFormatConfig.java new file mode 100644 index 0000000..697f64b --- /dev/null +++ b/src/main/java/com/sa/zentao/conf/DateFormatConfig.java @@ -0,0 +1,45 @@ +package com.sa.zentao.conf; + +import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer; +import org.springframework.boot.jackson.JsonComponent; +import org.springframework.context.annotation.Bean; + +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.TimeZone; + +@JsonComponent +public class DateFormatConfig { + + @Value("${spring.jackson.date-format:yyyy-MM-dd HH:mm:ss}") + private String pattern; + + @Bean + public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilder() { + + return builder -> { + TimeZone tz = TimeZone.getTimeZone("UTC"); + DateFormat df = new SimpleDateFormat(pattern); + df.setTimeZone(tz); + builder.failOnEmptyBeans(false) + .failOnUnknownProperties(false) + .featuresToDisable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS) + .dateFormat(df); + }; + } + + @Bean + public LocalDateTimeSerializer localDateTimeDeserializer() { + return new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(pattern)); + } + + @Bean + public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() { + return builder -> builder.serializerByType(LocalDateTime.class, localDateTimeDeserializer()); + } +} \ No newline at end of file diff --git a/src/main/java/com/sa/zentao/conf/DevopsRunner.java b/src/main/java/com/sa/zentao/conf/DevopsRunner.java new file mode 100644 index 0000000..edaa5e5 --- /dev/null +++ b/src/main/java/com/sa/zentao/conf/DevopsRunner.java @@ -0,0 +1,71 @@ +package com.sa.zentao.conf; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.sa.zentao.entity.ZtCronDevops; +import com.sa.zentao.entity.ZtCronDevopsUser; +import com.sa.zentao.service.IZtCronDevopsUserService; +import com.sa.zentao.utils.Constant; +import com.sa.zentao.utils.DateUtils; +//import com.sa.zentao.utils.SendEmail; +import com.sa.zentao.utils.SendEmail; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.util.CollectionUtils; + +import java.util.*; + +@Slf4j +public class DevopsRunner implements Runnable{ + + IZtCronDevopsUserService cronDevopsUserService; + + @Override + public void run() { + if(cronDevopsUserService==null){ + cronDevopsUserService=SpringUtil.getBean(IZtCronDevopsUserService.class); + } + while (true){ + try { + + Date date = new Date(); + Calendar instance = Calendar.getInstance(); + instance.setTime(date); + instance.add(Calendar.MINUTE,1); + Date time = instance.getTime(); + + + String s = DateUtils.formatDate(date, "yyyy-MM-dd HH:mm:00"); + log.info("定时任务 {}",s); + + List ztCronDevops = Constant.devMap.get(s); + if(!CollectionUtils.isEmpty(ztCronDevops)){ + for (ZtCronDevops d: ztCronDevops) { + + String phone = d.getPhone(); + try { + List list = cronDevopsUserService.list(new QueryWrapper().lambda().eq(ZtCronDevopsUser::getDevopsId, d.getId())); + if(!CollectionUtils.isEmpty(list)){ + for (ZtCronDevopsUser u:list) { + SendEmail.sendMail(u.getMail(),"尊敬的"+u.getUsername()+d.getContent()); + } + } + + }catch (Exception e){ + log.error("邮件发送失败",e); + } + } + } + long t =time.getTime()-System.currentTimeMillis(); + if(t>0){ + Thread.sleep(t); + } + + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + } + + + +} diff --git a/src/main/java/com/sa/zentao/conf/GlobalExceptionHandler.java b/src/main/java/com/sa/zentao/conf/GlobalExceptionHandler.java new file mode 100644 index 0000000..bf85e11 --- /dev/null +++ b/src/main/java/com/sa/zentao/conf/GlobalExceptionHandler.java @@ -0,0 +1,40 @@ +package com.sa.zentao.conf; + +import com.sa.zentao.dao.BusinessException; +import com.sa.zentao.dao.Code; +import com.sa.zentao.dao.Result; +import jakarta.servlet.http.HttpServletRequest; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.RestControllerAdvice; + + + +@Slf4j +@RestControllerAdvice +public class GlobalExceptionHandler { + + @Value("spring.application.name") + private String application; + + @ExceptionHandler(Exception.class) + public Result bizExceptionHandler(Exception e, HttpServletRequest request) { + log.error("发生业务异常!原因是: {}", e.getMessage()); + log.error(application +"发生了异常 ,异常信息 ,{}",e); + return Result.fail(Code.FAIL); + } + + @ExceptionHandler(BusinessException.class) + public Result bizExceptionHandler(BusinessException e, HttpServletRequest request) { + log.error("发生业务异常!原因是: {}", e.getMessage()); + log.error(application +"发生了异常 ,异常信息 ,{}",e); + if(e.code==null){ + return Result.fail(e.value); + }else{ + return Result.fail(e.code); + } + + + } +} diff --git a/src/main/java/com/sa/zentao/conf/JwtAuthenticationFilter.java b/src/main/java/com/sa/zentao/conf/JwtAuthenticationFilter.java new file mode 100644 index 0000000..63d0482 --- /dev/null +++ b/src/main/java/com/sa/zentao/conf/JwtAuthenticationFilter.java @@ -0,0 +1,100 @@ +package com.sa.zentao.conf; + +import com.alibaba.fastjson.JSON; +import com.sa.zentao.dao.Result; +import com.sa.zentao.dao.ZtUserDTO; +import com.sa.zentao.utils.JwtUtil; +import lombok.extern.slf4j.Slf4j; +import org.apache.catalina.connector.RequestFacade; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.util.AntPathMatcher; +import org.springframework.util.CollectionUtils; + +import javax.servlet.*; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.Arrays; +import java.util.List; +import java.util.Objects; + +/** + * @Auther: JiangHeng + * @Date: 2022/9/21 19:52 + */ +@Component +@Slf4j +public class JwtAuthenticationFilter implements jakarta.servlet.Filter { + + + public void init(FilterConfig filterConfig) throws ServletException { + + } + + + public void doFilter(jakarta.servlet.ServletRequest request, jakarta.servlet.ServletResponse servletResponse + , jakarta.servlet.FilterChain filterChain) throws IOException, jakarta.servlet.ServletException { + servletResponse.setCharacterEncoding("UTF-8"); + // 如果匹配不需要授权的路径,就不需要校验是否需要授权 + AntPathMatcher pathMatcher = new AntPathMatcher(); + + + String token = ((RequestFacade) request).getHeader("Authorization"); + String ipAddress = getIpAddress(request); +// if ("websocket".equals(request.("upgrade"))) { +// token = request.getParameter("token"); +// log.info("websocket 链接----- token ,{}", token); +// } else { +// String authorization = request.getHeader("Authorization"); +// token = StringUtils.isBlank(authorization) ? null : authorization.replace("Bearer ", StringUtils.EMPTY).trim(); +// log.info("http接入 ------ token {} ", token); +// } +// String ipAddress = getIpAddress(request); + +// log.info("当前ip================================={}",ipAddress); + log.info("token: " + token); + if (StringUtils.isNotBlank(token)){ + //解析token + ZtUserDTO user = JwtUtil.checkToken(token); + if (Objects.isNull(user)){ + servletResponse.getWriter().write(JSON.toJSONString(Result.fail("请登录"))); + return; + }else { + LoginRiskUser u=new LoginRiskUser(); + u.setName(user.getAccount()); + u.setUserId(user.getId()); + u.setUserType(user.getUserType()); + RiskUserThreadLocal.set(u); + RiskUserThreadLocal.risk.set(u); + } + } + filterChain.doFilter(request,servletResponse); + } + + + @Override + public void destroy() { + + } + public static String getIpAddress(jakarta.servlet.ServletRequest request) { + String ip = ((RequestFacade) request).getHeader("x-forwarded-for"); + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = ((RequestFacade) request).getHeader("Proxy-Client-IP"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = ((RequestFacade) request).getHeader("WL-Proxy-Client-IP"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = ((RequestFacade) request).getHeader("HTTP_CLIENT_IP"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = ((RequestFacade) request).getHeader("HTTP_X_FORWARDED_FOR"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = ((RequestFacade) request).getRemoteAddr(); + } + return ip; + } +} diff --git a/src/main/java/com/sa/zentao/conf/LoginRiskUser.java b/src/main/java/com/sa/zentao/conf/LoginRiskUser.java new file mode 100644 index 0000000..57a7f97 --- /dev/null +++ b/src/main/java/com/sa/zentao/conf/LoginRiskUser.java @@ -0,0 +1,85 @@ +package com.sa.zentao.conf; + +import com.sa.zentao.enums.UserType; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class LoginRiskUser implements Serializable { + + + + + public LoginRiskUser(){ + + + } + + private static final long serialVersionUID = 1L; + /** + * 用户唯一标识 + */ + private String userKey; + /** + * 用户ID,自增主键 + */ + + private Integer userId; + + /** + * 登录名 + */ + private String account; + /** + * 密码 + */ + private String password; + + /** + * 姓名 + */ + private String name; + + /** + * token时间 + */ + private Long tokenTime; + + /** + * 过期时间 + */ + private Long expireTime; + + /** + * 登录IP地址 + */ + private String ipAddress; + + /** + * 所属部门 + */ + private Integer groupId; + + /** + * 所属角色 + */ + private Integer roleId; + + /** + * 网关 + */ + private String gateway; + + /** + * 联系电话 + */ + private String contactTel; + private UserType userType; + public int getRiskUserId(){ + + return userId; + } + +} diff --git a/src/main/java/com/sa/zentao/conf/RiskUserThreadLocal.java b/src/main/java/com/sa/zentao/conf/RiskUserThreadLocal.java new file mode 100644 index 0000000..f3f7726 --- /dev/null +++ b/src/main/java/com/sa/zentao/conf/RiskUserThreadLocal.java @@ -0,0 +1,47 @@ +package com.sa.zentao.conf; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import org.springframework.util.CollectionUtils; + +import java.util.*; + +public class RiskUserThreadLocal { + + public static ThreadLocal risk=new ThreadLocal(){ + { + LoginRiskUser loginRiskUser = new LoginRiskUser(); + + loginRiskUser.setUserId(1); + loginRiskUser.setName("admin"); + + set(loginRiskUser); + } + }; + + public static LoginRiskUser get(){ + return risk.get(); + } + + public static void set(LoginRiskUser loginRiskUser){ + risk.set(loginRiskUser); + } + + public static void clean() { + if (Objects.nonNull(risk.get())) { + risk.remove(); + } + } + public static boolean isAdmin(){ + LoginRiskUser loginRiskUser = risk.get(); + if(loginRiskUser==null){ + return false; + } + if(loginRiskUser.getRiskUserId()==2){ + return true; + }else{ + return false; + } + } + +} diff --git a/src/main/java/com/sa/zentao/conf/SmsConfig.java b/src/main/java/com/sa/zentao/conf/SmsConfig.java new file mode 100644 index 0000000..7e08e11 --- /dev/null +++ b/src/main/java/com/sa/zentao/conf/SmsConfig.java @@ -0,0 +1,31 @@ +package com.sa.zentao.conf; + +import com.tencentcloudapi.common.Credential; +import com.tencentcloudapi.common.profile.ClientProfile; +import com.tencentcloudapi.common.profile.HttpProfile; +import com.tencentcloudapi.sms.v20210111.SmsClient; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * 短信服务配置 + * @Auther: JiangHeng + * @Date: 2023/9/20 14:37 + */ +@Configuration +public class SmsConfig { + + private final String tSecretId = "AKIDEWVewIbm5UuCUsqlbZWoGiCe0PqO2fP4"; + private final String tSecretKey = "odMtBQnFoGb4Rq7HUZUFGA61nYFkHd8Z"; + + @Bean(name = "tencentSmsClient") + public SmsClient tencentSmsClient(){ + Credential cred = new Credential(tSecretId, tSecretKey); + HttpProfile httpProfile = new HttpProfile(); + httpProfile.setEndpoint("sms.tencentcloudapi.com"); + ClientProfile clientProfile = new ClientProfile(); + clientProfile.setHttpProfile(httpProfile); + return new SmsClient(cred, "ap-guangzhou", clientProfile); + } + +} diff --git a/src/main/java/com/sa/zentao/conf/SpringUtil.java b/src/main/java/com/sa/zentao/conf/SpringUtil.java new file mode 100644 index 0000000..4453101 --- /dev/null +++ b/src/main/java/com/sa/zentao/conf/SpringUtil.java @@ -0,0 +1,49 @@ +package com.sa.zentao.conf; + +import org.springframework.beans.BeansException; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.stereotype.Component; + +@Component +public class SpringUtil implements ApplicationContextAware { + + private static ApplicationContext applicationContext; + + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + if(SpringUtil.applicationContext == null) { + SpringUtil.applicationContext = applicationContext; + } + System.out.println("---------------------------------------------------------------------"); + + System.out.println("---------------------------------------------------------------------"); + + System.out.println("---------------me.shijunjie.util.SpringUtil------------------------------------------------------"); + + System.out.println("========ApplicationContext配置成功,在普通类可以通过调用SpringUtils.getAppContext()获取applicationContext对象,applicationContext="+SpringUtil.applicationContext+"========"); + + System.out.println("---------------------------------------------------------------------"); + } + + //获取applicationContext + public static ApplicationContext getApplicationContext() { + return applicationContext; + } + + //通过name获取 Bean. + public static Object getBean(String name){ + return getApplicationContext().getBean(name); + } + + //通过class获取Bean. + public static T getBean(Class clazz){ + return getApplicationContext().getBean(clazz); + } + + //通过name,以及Clazz返回指定的Bean + public static T getBean(String name, Class clazz){ + return getApplicationContext().getBean(name, clazz); + } + +} \ No newline at end of file diff --git a/src/main/java/com/sa/zentao/conf/WebMvcConfig.java b/src/main/java/com/sa/zentao/conf/WebMvcConfig.java new file mode 100644 index 0000000..ad273dd --- /dev/null +++ b/src/main/java/com/sa/zentao/conf/WebMvcConfig.java @@ -0,0 +1,38 @@ +package com.sa.zentao.conf; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +@Configuration +@Slf4j +public class WebMvcConfig implements WebMvcConfigurer { + + @Value("${file.path.windows}") + private String windowsFilePath; + @Value("${file.path.linux}") + private String linuxFilePath; + + @Override + public void addResourceHandlers(ResourceHandlerRegistry registry) { + for (int i =0;i<200;i++){ + log.info("win"); + } + String os = System.getProperty("os.name"); + if (os.toLowerCase().startsWith("win")) { //如果是Windows系统 + log.info("win"); + registry.addResourceHandler("/img/**").addResourceLocations("file:"+windowsFilePath+"/"); + }else{ //linux和mac系统 + log.info("linux"); + registry.addResourceHandler("/img/**").addResourceLocations("file:"+linuxFilePath+"/"); + } + + +// registry.addResourceHandler("/static/**") +// .addResourceLocations("classpath:/static/"); +// registry.addResourceHandler(GlobalConstants.DOWNLOAD_URL_PREFIX + "/**") +// .addResourceLocations("file:"+ GlobalConstants.sharePath+"/"); + } +} \ No newline at end of file diff --git a/src/main/java/com/sa/zentao/controller/CommonsController.java b/src/main/java/com/sa/zentao/controller/CommonsController.java new file mode 100644 index 0000000..97103f4 --- /dev/null +++ b/src/main/java/com/sa/zentao/controller/CommonsController.java @@ -0,0 +1,86 @@ +package com.sa.zentao.controller; + +import com.sa.zentao.dao.BusinessException; +import com.sa.zentao.dao.Code; +import com.sa.zentao.dao.Result; +import com.sa.zentao.utils.DateUtils; +import com.sa.zentao.utils.UploadUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import java.io.IOException; +import java.lang.reflect.Method; +import java.util.*; +import java.util.stream.Collectors; + +@Slf4j +@RestController +@RequestMapping("/common") +public class CommonsController { + + +// @PostMapping("/upload") +// public Result upload(@RequestParam("file") MultipartFile file){ +// if (file.isEmpty()) { +// return Result.fail(Code.FAIL); +// } +// try { +// byte[] bytes = file.getBytes(); +// String url = UploadUtil.upload(bytes,file.getOriginalFilename()); +// return Result.success(url); +// } catch (IOException e) { +// e.printStackTrace(); +// } +// return Result.fail(Code.FAIL); +// } + + @Value("${file.path.windows}") + private String windowsFilePath; + @Value("${file.path.linux}") + private String linuxFilePath; + + @Value("${file.baseUrl}") + private String baseUrl; + + @PostMapping("/upload") + public Result upload(@RequestParam("file") MultipartFile file){ + if (file.isEmpty()) { + return Result.fail(Code.FAIL); + } + try { + // 获取文件名 + String fName = file.getOriginalFilename(); + fName=fName.substring(fName.lastIndexOf("."),fName.length()); + fName= DateUtils.formatDate(new Date(),"yyyyMMddHHmmss")+UUID.randomUUID().toString().replaceAll("-","")+fName; + // 获取文件的字节 + byte[] bytes = file.getBytes(); + String p =""; + String os = System.getProperty("os.name"); + if (os.toLowerCase().startsWith("win")) { //如果是Windows系统 + log.info("win"); + os=windowsFilePath +"\\"; + }else{ //linux和mac系统 + log.info("linux"); + os=linuxFilePath+"/"; + } + + + // 使用文件名在服务器端创建文件 + java.nio.file.Path path = java.nio.file.Paths.get(os + fName); + + // 写入文件到服务器的指定目录 + java.nio.file.Files.write(path, bytes); + + return Result.success(baseUrl+"/zentao/img/"+fName); + } catch (Exception e) { + throw new BusinessException("文件上传失败"); + } + } + + + + +} diff --git a/src/main/java/com/sa/zentao/controller/FestivalConfigController.java b/src/main/java/com/sa/zentao/controller/FestivalConfigController.java new file mode 100644 index 0000000..8c1fa11 --- /dev/null +++ b/src/main/java/com/sa/zentao/controller/FestivalConfigController.java @@ -0,0 +1,112 @@ +package com.sa.zentao.controller; + + +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.github.pagehelper.PageInfo; +import com.sa.zentao.dao.BusinessException; +import com.sa.zentao.dao.FestivalConfigDTO; +import com.sa.zentao.dao.Result; +import com.sa.zentao.entity.FestivalConfig; +import com.sa.zentao.enums.DeleteFlagEnum; +import com.sa.zentao.qo.FestivalConfigQo; +import com.sa.zentao.service.IFestivalConfigService; +import lombok.SneakyThrows; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletResponse; +import java.io.ByteArrayOutputStream; +import java.lang.reflect.Field; +import java.lang.reflect.InvocationHandler; +import java.lang.reflect.Proxy; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + *

+ * 前端控制器 + *

+ * + * @author gqb + * @since 2023-03-20 + */ +@RestController +@RequestMapping("/festival-config") +public class FestivalConfigController { + + @Autowired + private IFestivalConfigService festivalConfigService; + + + //打开记录 + @RequestMapping(value = "/pageList", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result> pageList(@RequestBody FestivalConfigQo qo) { + + PageInfo p = festivalConfigService.pageList(qo); + + return Result.success(p); + + } + + + @RequestMapping(value = "/add", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result add(@RequestBody FestivalConfigQo qo) { + + festivalConfigService.add(qo); + return Result.success(); + + } + + @RequestMapping(value = "/delete", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result delete(@RequestBody FestivalConfigQo qo) { + + FestivalConfig festivalConfig = festivalConfigService.getById(qo.getId()); + festivalConfig.setDeleteFlag(DeleteFlagEnum.DELETED); + this.festivalConfigService.updateById(festivalConfig); + return Result.success(); + + } + + @RequestMapping(value = "/updateById", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result updateFestivalConfig(@RequestBody FestivalConfigQo qo) { + List vacationDate = qo.getVacationDate(); + if (!CollectionUtils.isEmpty(vacationDate)) { + if (vacationDate.size() != vacationDate.stream().distinct().collect(Collectors.toList()).size()) { + throw new BusinessException("假期重复,请重新选择"); + } + } + List repairDate = qo.getRepairDate(); + if (!CollectionUtils.isEmpty(repairDate)) { + if (repairDate.size() != repairDate.stream().distinct().collect(Collectors.toList()).size()) { + throw new BusinessException("补班重复,请重新选择"); + } + } + + festivalConfigService.updateFestivalConfig(qo); + return Result.success(); + + } + + private void dealDownloadExcelProperty(Class detailClass, int level, String v) throws NoSuchFieldException, IllegalAccessException { + Field field = detailClass.getDeclaredField("regionsName"); + ExcelProperty annotation = field.getAnnotation(ExcelProperty.class); + InvocationHandler invocationHandler = Proxy.getInvocationHandler(annotation); + Field memberValues = invocationHandler.getClass().getDeclaredField("memberValues"); + memberValues.setAccessible(true); + Map memberValuesMap = (Map) memberValues.get(invocationHandler); + memberValuesMap.put("value", new String[]{v}); + } + +} diff --git a/src/main/java/com/sa/zentao/controller/VerificationCodeController.java b/src/main/java/com/sa/zentao/controller/VerificationCodeController.java new file mode 100644 index 0000000..095e0e0 --- /dev/null +++ b/src/main/java/com/sa/zentao/controller/VerificationCodeController.java @@ -0,0 +1,20 @@ +package com.sa.zentao.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 前端控制器 + *

+ * + * @author gqb + * @since 2024-09-14 + */ +@RestController +@RequestMapping("/verification-code") +public class VerificationCodeController { + +} diff --git a/src/main/java/com/sa/zentao/controller/ZtActionController.java b/src/main/java/com/sa/zentao/controller/ZtActionController.java new file mode 100644 index 0000000..d3824b4 --- /dev/null +++ b/src/main/java/com/sa/zentao/controller/ZtActionController.java @@ -0,0 +1,48 @@ +package com.sa.zentao.controller; + + +import com.github.pagehelper.PageInfo; +import com.sa.zentao.dao.Result; +import com.sa.zentao.dao.ZtActionDTO; +import com.sa.zentao.dao.ZtBugDTO; +import com.sa.zentao.entity.ZtAction; +import com.sa.zentao.qo.ActionQo; +import com.sa.zentao.qo.ZtProjectQo; +import com.sa.zentao.service.IZtActionService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + *

+ * 前端控制器 + *

+ * + * @author gqb + * @since 2024-06-27 + */ +@RestController +@RequestMapping("/zt-action") +public class ZtActionController { + + @Autowired + private IZtActionService actionService; + + @RequestMapping(value = "/actionList", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result> actionList(@RequestBody ActionQo qo){ + List p =actionService.actionList(qo); + + return Result.success( p); + } + @RequestMapping(value = "/todayActionList", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result> todayActionList(@RequestBody ActionQo qo){ + List p =actionService.todayActionList(qo); + + return Result.success( p); + } +} diff --git a/src/main/java/com/sa/zentao/controller/ZtActionrecentController.java b/src/main/java/com/sa/zentao/controller/ZtActionrecentController.java new file mode 100644 index 0000000..a1adce6 --- /dev/null +++ b/src/main/java/com/sa/zentao/controller/ZtActionrecentController.java @@ -0,0 +1,20 @@ +package com.sa.zentao.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 前端控制器 + *

+ * + * @author gqb + * @since 2024-06-27 + */ +@RestController +@RequestMapping("/zt-actionrecent") +public class ZtActionrecentController { + +} diff --git a/src/main/java/com/sa/zentao/controller/ZtBugController.java b/src/main/java/com/sa/zentao/controller/ZtBugController.java new file mode 100644 index 0000000..fded681 --- /dev/null +++ b/src/main/java/com/sa/zentao/controller/ZtBugController.java @@ -0,0 +1,94 @@ +package com.sa.zentao.controller; + + +import com.github.pagehelper.PageInfo; +import com.sa.zentao.dao.Result; +import com.sa.zentao.dao.ZtBugDTO; +import com.sa.zentao.dao.ZtCaseDTO; +import com.sa.zentao.entity.ZtBug; +import com.sa.zentao.qo.ZtBugQo; +import com.sa.zentao.qo.ZtProjectQo; +import com.sa.zentao.service.IZtBugService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 前端控制器 + *

+ * + * @author gqb + * @since 2024-07-04 + */ +@RestController +@RequestMapping("/zt-bug") +public class ZtBugController { + + + @Autowired + private IZtBugService bugService; + + @RequestMapping(value = "/bugPageList", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result> bugPageList(@RequestBody ZtProjectQo qo){ + PageInfo p =bugService.bugPageList(qo); + + return Result.success( p); + } + + + @RequestMapping(value = "/myBugPageList", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result> myBugPageList(@RequestBody ZtProjectQo qo){ + PageInfo p =bugService.myBugPageList(qo); + + return Result.success( p); + } + + @RequestMapping(value = "/addBug", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result addBug(@RequestBody ZtBugDTO dto){ + bugService.addBug(dto); + + return Result.success(); + } + + @RequestMapping(value = "/editBug", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result editBug(@RequestBody ZtBugDTO dto){ + bugService.editBug(dto); + return Result.success(); + } + + @RequestMapping(value = "/reActive", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result reActive(@RequestBody ZtBugDTO dto){ + bugService.reActive(dto); + return Result.success(); + } + + @RequestMapping(value = "/changeStatus", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result changeStatus(@RequestBody ZtBugQo qo){ + bugService.changeStatus(qo); + + return Result.success(); + } + + @RequestMapping(value = "/bugById", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result bugById(@RequestBody ZtBugQo qo){ + return Result.success(bugService.getById(qo.getId())); + } + + @RequestMapping(value = "/bugInfoById", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result bugInfoById(@RequestBody ZtBugQo qo){ + return Result.success(bugService.bugInfoById(qo.getId())); + } + + + @RequestMapping(value = "/resolved", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result resolved(@RequestBody ZtBugDTO dto){ + bugService.resolved(dto); + return Result.success(); + } + + +} diff --git a/src/main/java/com/sa/zentao/controller/ZtCaseController.java b/src/main/java/com/sa/zentao/controller/ZtCaseController.java new file mode 100644 index 0000000..debc604 --- /dev/null +++ b/src/main/java/com/sa/zentao/controller/ZtCaseController.java @@ -0,0 +1,100 @@ +package com.sa.zentao.controller; + + +import com.alibaba.fastjson.JSONArray; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.github.pagehelper.PageInfo; +import com.sa.zentao.dao.Result; +import com.sa.zentao.dao.ZtCaseDTO; +import com.sa.zentao.dao.ZtCasestepDTO; +import com.sa.zentao.dao.ZtProjectDTO; +import com.sa.zentao.entity.ZtCasestep; +import com.sa.zentao.entity.ZtTestresult; +import com.sa.zentao.qo.ZtProjectQo; +import com.sa.zentao.service.IZtCaseService; +import com.sa.zentao.service.IZtCasestepService; +import com.sa.zentao.service.IZtTestresultService; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +import java.util.ArrayList; +import java.util.List; + +/** + *

+ * 前端控制器 + *

+ * + * @author gqb + * @since 2024-07-03 + */ +@RestController +@RequestMapping("/zt-case") +public class ZtCaseController { + + + @Autowired + private IZtCaseService caseService; + + @Autowired + private IZtCasestepService casestepService; + + @Autowired + private IZtTestresultService testresultService; + + + @RequestMapping(value = "/addCase", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result addCase(@RequestBody ZtCaseDTO dto){ + caseService.addCase(dto); + return Result.success(); + } + @RequestMapping(value = "/modify", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result modify(@RequestBody ZtCaseDTO dto){ + caseService.modify(dto); + return Result.success(); + } + @RequestMapping(value = "/casePageList", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result> casePageList(@RequestBody ZtProjectQo qo){ + + return Result.success(caseService.casePageList(qo)); + } + @RequestMapping(value = "/caseStepByCase", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result> caseStepByCase(@RequestBody ZtProjectQo qo){ + + return Result.success(casestepService.list(new QueryWrapper() + .lambda().eq(ZtCasestep::getCaseId,qo.getId()))); + } + @RequestMapping(value = "/execCase", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result execCase(@RequestBody ZtCaseDTO dto){ + + casestepService.execCase(dto); + + return Result.success(); + } + + @RequestMapping(value = "/execListById", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result execListById(@RequestBody ZtCaseDTO dto){ + + List ztTestresult = testresultService.list(new QueryWrapper() + .lambda().eq(ZtTestresult::getCaseId, dto.getId()) + .orderByDesc(ZtTestresult::getId) + ); + if(ztTestresult==null){ + return Result.success(new ArrayList<>()); + } +// String stepresults = ztTestresult.getStepresults(); +// if(StringUtils.isEmpty(stepresults)){ +// return Result.success(new ArrayList<>()); +// } +// List ztCasestepDTOS = JSONArray.parseArray(stepresults, ZtCasestepDTO.class); + + return Result.success(ztTestresult); + } + +} diff --git a/src/main/java/com/sa/zentao/controller/ZtCasestepController.java b/src/main/java/com/sa/zentao/controller/ZtCasestepController.java new file mode 100644 index 0000000..7881050 --- /dev/null +++ b/src/main/java/com/sa/zentao/controller/ZtCasestepController.java @@ -0,0 +1,20 @@ +package com.sa.zentao.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 前端控制器 + *

+ * + * @author gqb + * @since 2024-07-03 + */ +@RestController +@RequestMapping("/zt-casestep") +public class ZtCasestepController { + +} diff --git a/src/main/java/com/sa/zentao/controller/ZtCountController.java b/src/main/java/com/sa/zentao/controller/ZtCountController.java new file mode 100644 index 0000000..5b08dfc --- /dev/null +++ b/src/main/java/com/sa/zentao/controller/ZtCountController.java @@ -0,0 +1,122 @@ +package com.sa.zentao.controller; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.sa.zentao.conf.RiskUserThreadLocal; +import com.sa.zentao.dao.BusinessException; +import com.sa.zentao.dao.Result; +import com.sa.zentao.dao.ZtCaseDTO; +import com.sa.zentao.entity.ZtBug; +import com.sa.zentao.entity.ZtProject; +import com.sa.zentao.entity.ZtStory; +import com.sa.zentao.entity.ZtTask; +import com.sa.zentao.qo.ZtCountQo; +import com.sa.zentao.service.IZtBugService; +import com.sa.zentao.service.IZtProjectService; +import com.sa.zentao.service.IZtStoryService; +import com.sa.zentao.service.IZtTaskService; +import com.sa.zentao.service.impl.IZtCountService; +import com.sa.zentao.utils.DateUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.math.BigDecimal; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@RestController +@RequestMapping("/count") +public class ZtCountController { + + + @Autowired + private IZtCountService countService; + + @Autowired + private IZtProjectService projectService; + + + /** + * 开发看到的 + * 今日工作统计 + * 我的任务 + * 我的bug + * 我的软件需求 + * + * BOSS 刘总 人事待评审 评审通过 进行中 延期 测试完成 上线待验收 验收不通过 验收通过 + * + * 产品 只看自己的需求 + * + * 项目管理员 bug + */ + @RequestMapping(value = "/todayWorkCount", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result todayWorkCount(@RequestBody ZtCaseDTO dto){ + return Result.success(countService.todayWorkCount(dto)) ; + + } + @RequestMapping(value = "/storyCount", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result storyCount(@RequestBody ZtCaseDTO dto){ + return Result.success(countService.storyCount(dto)) ; + + } + + //work工作量 月 + //任务总量 + //需求总工时 + //实际产出工时 + //其他支持项目产出工时 + //实际产出总工时 + //可用工时 + //工作饱和度 + //工作饱和度备注 + //产出线上bug率 + @RequestMapping(value = "/workDetailsCount", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result workDetailsCount(@RequestBody ZtCountQo qo){ + return Result.success(countService.workDetailsCount(qo)) ; + + } + + + //导出work工作量 + @RequestMapping(value = "/exportWorkDetailsCount", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public void exportWorkDetailsCount(@RequestBody ZtCountQo qo, jakarta.servlet.ServletRequest request, jakarta.servlet.ServletResponse response){ + if(qo.getDate()!=null){ + qo.setDate(DateUtils.getDayEndDate(qo.getDate())); + } + countService.exportWorkDetailsCount(qo,request,response); + } + + //导出项目统计 + //work总量 月 + @RequestMapping(value = "/exportProjectCount", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public void exportProjectCount(@RequestBody ZtCountQo qo, jakarta.servlet.ServletRequest request, jakarta.servlet.ServletResponse response){ + countService.exportProjectCount(qo,request,response) ; + } + // + + @RequestMapping(value = "/projectList", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result projectList(@RequestBody ZtCaseDTO dto){ + + List project = projectService.list(new QueryWrapper().lambda().eq(ZtProject::getType, "project") + .eq(ZtProject::getStatus,"doing") + ); + return Result.success(project) ; + } + //项目 任务 需求 等统计 项目统计 + @RequestMapping(value = "/projectInfoById", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result projectInfoById(@RequestBody ZtCaseDTO dto){ + + + return Result.success(countService.projectInfoById(dto.getId())) ; + } + + + +} diff --git a/src/main/java/com/sa/zentao/controller/ZtCronDevopsController.java b/src/main/java/com/sa/zentao/controller/ZtCronDevopsController.java new file mode 100644 index 0000000..ef1c238 --- /dev/null +++ b/src/main/java/com/sa/zentao/controller/ZtCronDevopsController.java @@ -0,0 +1,63 @@ +package com.sa.zentao.controller; + + +import com.github.pagehelper.PageInfo; +import com.sa.zentao.dao.Result; +import com.sa.zentao.dao.ZtCronDevopsDTO; +import com.sa.zentao.qo.ZtUserQo; +import com.sa.zentao.service.IZtCronDevopsService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +import java.text.ParseException; + +/** + *

+ * 前端控制器 + *

+ * + * @author gqb + * @since 2024-10-22 + */ +@RestController +@RequestMapping("/zt-cron-devops") +public class ZtCronDevopsController { + + @Autowired + private IZtCronDevopsService cronDevopsService; + + @RequestMapping(value = "/add", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result add(@RequestBody ZtCronDevopsDTO dto) throws ParseException { + + cronDevopsService.add(dto); + return Result.success(); + } + + + @RequestMapping(value = "/modify", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result modify(@RequestBody ZtCronDevopsDTO dto) throws ParseException { + + cronDevopsService.modify(dto); + return Result.success(); + } + + + @RequestMapping(value = "/close", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result close(@RequestBody ZtCronDevopsDTO dto){ + + cronDevopsService.close(dto); + return Result.success(); + } + @RequestMapping(value = "/pageList", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result pageList(@RequestBody ZtUserQo qo){ + + PageInfo page= cronDevopsService.pageList(qo); + return Result.success(page); + } + + +} diff --git a/src/main/java/com/sa/zentao/controller/ZtCronDevopsUserController.java b/src/main/java/com/sa/zentao/controller/ZtCronDevopsUserController.java new file mode 100644 index 0000000..fc38342 --- /dev/null +++ b/src/main/java/com/sa/zentao/controller/ZtCronDevopsUserController.java @@ -0,0 +1,20 @@ +package com.sa.zentao.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 前端控制器 + *

+ * + * @author gqb + * @since 2024-10-23 + */ +@RestController +@RequestMapping("/zt-cron-devops-user") +public class ZtCronDevopsUserController { + +} diff --git a/src/main/java/com/sa/zentao/controller/ZtEffortController.java b/src/main/java/com/sa/zentao/controller/ZtEffortController.java new file mode 100644 index 0000000..a8b1480 --- /dev/null +++ b/src/main/java/com/sa/zentao/controller/ZtEffortController.java @@ -0,0 +1,66 @@ +package com.sa.zentao.controller; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.sa.zentao.dao.Result; +import com.sa.zentao.dao.ZtBugDTO; +import com.sa.zentao.dao.ZtEffortDTO; +import com.sa.zentao.entity.ZtEffort; +import com.sa.zentao.qo.EffortQo; +import com.sa.zentao.service.IZtEffortService; +import com.sa.zentao.utils.BeanCopyUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.util.CollectionUtils; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; +import java.util.Map; + +/** + *

+ * 工时 + *

+ * + * @author gqb + * @since 2024-08-13 + */ +@RestController +@RequestMapping("/zt-effort") +public class ZtEffortController { + + + @Autowired + private IZtEffortService effortService; + + + @RequestMapping(value = "/batchAdd", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result batchAdd(@RequestBody ZtEffortDTO dto){ + + effortService.batchAdd(dto); + return Result.success(); + } + + @RequestMapping(value = "/timeWork", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result timeWork(@RequestBody ZtEffortDTO dto){ + + Map map = effortService.timeWork(dto); + return Result.success(map); + } + + @RequestMapping(value = "/list", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result> batchAdd(@RequestBody EffortQo qo){ + List list = effortService.list(new QueryWrapper().lambda() + .eq(ZtEffort::getObjecttype,qo.getType()) + .eq(ZtEffort::getObjectid,qo.getId()) + ); + if(CollectionUtils.isEmpty(list)){ + return Result.success(); + } + return Result.success(BeanCopyUtil.copyListProperties(list,ZtEffortDTO::new)); + } + +} diff --git a/src/main/java/com/sa/zentao/controller/ZtExecutionprojectController.java b/src/main/java/com/sa/zentao/controller/ZtExecutionprojectController.java new file mode 100644 index 0000000..c770a7c --- /dev/null +++ b/src/main/java/com/sa/zentao/controller/ZtExecutionprojectController.java @@ -0,0 +1,20 @@ +package com.sa.zentao.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 前端控制器 + *

+ * + * @author gqb + * @since 2024-08-01 + */ +@RestController +@RequestMapping("/zt-executionproject") +public class ZtExecutionprojectController { + +} diff --git a/src/main/java/com/sa/zentao/controller/ZtKanbanController.java b/src/main/java/com/sa/zentao/controller/ZtKanbanController.java new file mode 100644 index 0000000..14e5b02 --- /dev/null +++ b/src/main/java/com/sa/zentao/controller/ZtKanbanController.java @@ -0,0 +1,56 @@ +package com.sa.zentao.controller; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.sa.zentao.dao.Result; +import com.sa.zentao.dao.ZtKanbanDTO; +import com.sa.zentao.dao.ZtKanbancolumnDTO; +import com.sa.zentao.dao.ZtKanbanlaneDTO; +import com.sa.zentao.entity.*; +import com.sa.zentao.qo.KanbanQo; +import com.sa.zentao.qo.ZtProjectQo; +import com.sa.zentao.service.*; +import com.sa.zentao.utils.BeanCopyUtil; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.util.CollectionUtils; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +/** + *

+ * 前端控制器 + *

+ * + * @author gqb + * @since 2024-07-09 + */ +@RestController +@RequestMapping("/zt-kanban") +public class ZtKanbanController { + + @Autowired + private IZtKanbanlaneService kanbanlaneService; + + + //根据执行id获取看板列表 + @RequestMapping(value = "/lookInfoByExec", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result> productList(@RequestBody ZtProjectQo qo){ + List ztKanbanlanes = kanbanlaneService.lookInfoByExec(qo); + return Result.success(ztKanbanlanes); + } + //根据执行id获取看板列表 + @RequestMapping(value = "/changeStatus", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result changeStatus(@RequestBody KanbanQo qo){ + kanbanlaneService.changeStatus(qo); + return Result.success(); + } + +} diff --git a/src/main/java/com/sa/zentao/controller/ZtKanbancardController.java b/src/main/java/com/sa/zentao/controller/ZtKanbancardController.java new file mode 100644 index 0000000..1551924 --- /dev/null +++ b/src/main/java/com/sa/zentao/controller/ZtKanbancardController.java @@ -0,0 +1,20 @@ +package com.sa.zentao.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 前端控制器 + *

+ * + * @author gqb + * @since 2024-07-09 + */ +@RestController +@RequestMapping("/zt-kanbancard") +public class ZtKanbancardController { + +} diff --git a/src/main/java/com/sa/zentao/controller/ZtKanbancellController.java b/src/main/java/com/sa/zentao/controller/ZtKanbancellController.java new file mode 100644 index 0000000..070b887 --- /dev/null +++ b/src/main/java/com/sa/zentao/controller/ZtKanbancellController.java @@ -0,0 +1,20 @@ +package com.sa.zentao.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 前端控制器 + *

+ * + * @author gqb + * @since 2024-07-09 + */ +@RestController +@RequestMapping("/zt-kanbancell") +public class ZtKanbancellController { + +} diff --git a/src/main/java/com/sa/zentao/controller/ZtKanbancolumnController.java b/src/main/java/com/sa/zentao/controller/ZtKanbancolumnController.java new file mode 100644 index 0000000..1549e8e --- /dev/null +++ b/src/main/java/com/sa/zentao/controller/ZtKanbancolumnController.java @@ -0,0 +1,20 @@ +package com.sa.zentao.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 前端控制器 + *

+ * + * @author gqb + * @since 2024-07-09 + */ +@RestController +@RequestMapping("/zt-kanbancolumn") +public class ZtKanbancolumnController { + +} diff --git a/src/main/java/com/sa/zentao/controller/ZtKanbangroupController.java b/src/main/java/com/sa/zentao/controller/ZtKanbangroupController.java new file mode 100644 index 0000000..cfc43bc --- /dev/null +++ b/src/main/java/com/sa/zentao/controller/ZtKanbangroupController.java @@ -0,0 +1,20 @@ +package com.sa.zentao.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 前端控制器 + *

+ * + * @author gqb + * @since 2024-07-09 + */ +@RestController +@RequestMapping("/zt-kanbangroup") +public class ZtKanbangroupController { + +} diff --git a/src/main/java/com/sa/zentao/controller/ZtKanbanlaneController.java b/src/main/java/com/sa/zentao/controller/ZtKanbanlaneController.java new file mode 100644 index 0000000..45a1d1b --- /dev/null +++ b/src/main/java/com/sa/zentao/controller/ZtKanbanlaneController.java @@ -0,0 +1,20 @@ +package com.sa.zentao.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 前端控制器 + *

+ * + * @author gqb + * @since 2024-07-09 + */ +@RestController +@RequestMapping("/zt-kanbanlane") +public class ZtKanbanlaneController { + +} diff --git a/src/main/java/com/sa/zentao/controller/ZtKanbanregionController.java b/src/main/java/com/sa/zentao/controller/ZtKanbanregionController.java new file mode 100644 index 0000000..e7fbc56 --- /dev/null +++ b/src/main/java/com/sa/zentao/controller/ZtKanbanregionController.java @@ -0,0 +1,20 @@ +package com.sa.zentao.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 前端控制器 + *

+ * + * @author gqb + * @since 2024-07-09 + */ +@RestController +@RequestMapping("/zt-kanbanregion") +public class ZtKanbanregionController { + +} diff --git a/src/main/java/com/sa/zentao/controller/ZtKanbanspaceController.java b/src/main/java/com/sa/zentao/controller/ZtKanbanspaceController.java new file mode 100644 index 0000000..61e042b --- /dev/null +++ b/src/main/java/com/sa/zentao/controller/ZtKanbanspaceController.java @@ -0,0 +1,20 @@ +package com.sa.zentao.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 前端控制器 + *

+ * + * @author gqb + * @since 2024-07-09 + */ +@RestController +@RequestMapping("/zt-kanbanspace") +public class ZtKanbanspaceController { + +} diff --git a/src/main/java/com/sa/zentao/controller/ZtModuleController.java b/src/main/java/com/sa/zentao/controller/ZtModuleController.java new file mode 100644 index 0000000..b2942ed --- /dev/null +++ b/src/main/java/com/sa/zentao/controller/ZtModuleController.java @@ -0,0 +1,209 @@ +package com.sa.zentao.controller; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.sa.zentao.conf.RiskUserThreadLocal; +import com.sa.zentao.dao.Result; +import com.sa.zentao.dao.ZtModuleDTO; +import com.sa.zentao.entity.*; +import com.sa.zentao.enums.ActionStatus; +import com.sa.zentao.enums.ActionType; +import com.sa.zentao.qo.ZtModuleQo; +import com.sa.zentao.qo.ZtProjectQo; +import com.sa.zentao.service.*; +import com.sa.zentao.utils.BeanCopyUtil; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.util.CollectionUtils; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +/** + *

+ * 前端控制器 + *

+ * + * @author gqb + * @since 2024-08-05 + */ +@RestController +@RequestMapping("/zt-module") +public class ZtModuleController { + + + @Autowired + private IZtModuleService moduleService; + @Autowired + private IZtProjectproductService projectproductService; + + @Autowired + private IZtProjectService projectService; + + @Autowired + private IZtProductService productService; + + @Autowired + private IZtExecutionprojectService executionprojectService; + + @Autowired + private IZtActionService actionService; + + //模块 + @RequestMapping(value = "/projectList", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result> projectList(@RequestBody ZtProjectQo qo) { + //项目 + List list = moduleService.list(new QueryWrapper().lambda() + .eq(ZtModule::getRoot, qo.getId()).eq(ZtModule::getType, "project-story") + ); + return Result.success(list); + } + //模块 + @RequestMapping(value = "/getById", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result> getById(@RequestBody ZtProjectQo qo) { + //项目 + return Result.success(moduleService.getById(qo.getId())); + } + //模块 + @RequestMapping(value = "/list", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result> list(@RequestBody ZtProjectQo qo){ + + if("story".equalsIgnoreCase(qo.getType())){ + List list = moduleService.list(new QueryWrapper().lambda() + .eq(ZtModule::getRoot, qo.getId()).eq(ZtModule::getType, qo.getType()) + ); + return Result.success(list); + } + if("project-story".equalsIgnoreCase(qo.getType())){ + //项目模块-加上产品模块 + + ZtProject project = projectService.getById(qo.getId()); + + + //项目 + List result=new ArrayList<>(); + List list = moduleService.list(new QueryWrapper().lambda() + .eq(ZtModule::getRoot, qo.getId()).eq(ZtModule::getType, qo.getType()) + ); + if(!CollectionUtils.isEmpty(list)){ + + ZtModuleDTO d=new ZtModuleDTO(); + d.setId(project.getId()); + d.setName(project.getName()); + d.setList(BeanCopyUtil.copyListProperties(list,ZtModuleDTO::new)); + d.setType("project-story"); + result.add(d); + } + //产品 + + + List listProject = + projectproductService.list(new QueryWrapper().lambda().eq(ZtProjectproduct::getProject, qo.getId())); + if(!CollectionUtils.isEmpty(listProject)){ + ZtProjectproduct ztProjectproduct = listProject.get(0); + List story = moduleService.list(new QueryWrapper().lambda() + .eq(ZtModule::getRoot, ztProjectproduct.getProduct()).eq(ZtModule::getType, "story") + ); + ZtProduct product = productService.getById(ztProjectproduct.getProduct()); + + if(!CollectionUtils.isEmpty(story)){ + ZtModuleDTO d=new ZtModuleDTO(); + d.setId(product.getId()); + d.setName(product.getName()); + d.setList(BeanCopyUtil.copyListProperties(story,ZtModuleDTO::new)); + result.add(d); + } + } + return Result.success(result); + } + if("execution-story".equalsIgnoreCase(qo.getType())){ + List list = executionprojectService.list(new QueryWrapper().lambda() + .eq(ZtExecutionproject::getExecution, qo.getId()) + ); + + if(CollectionUtils.isEmpty(list)){ + return Result.success(); + } + List result=new ArrayList<>(); + //项目 + for (ZtExecutionproject p:list) { + List projectModuleList = moduleService.list(new QueryWrapper().lambda() + .eq(ZtModule::getRoot,p.getProject()).eq(ZtModule::getType, "project-story") + ); + if(!CollectionUtils.isEmpty(projectModuleList)){ + ZtProject project = projectService.getById(p.getProject()); + ZtModuleDTO d=new ZtModuleDTO(); + d.setId(project.getId()); + d.setName(project.getName()); + d.setList(BeanCopyUtil.copyListProperties(projectModuleList,ZtModuleDTO::new)); + result.add(d); + } + } + //产品 + List pIds = list.stream().map(o -> o.getProject()).collect(Collectors.toList()); + + + List listProject = + projectproductService.list(new QueryWrapper().lambda().in(ZtProjectproduct::getProject, pIds)); + if(!CollectionUtils.isEmpty(listProject)){ + for (ZtProjectproduct ztProjectproduct:listProject) { + List story = moduleService.list(new QueryWrapper().lambda() + .eq(ZtModule::getRoot, ztProjectproduct.getProduct()).eq(ZtModule::getType, "story") + ); + ZtProduct product = productService.getById(ztProjectproduct.getProduct()); + + if(!CollectionUtils.isEmpty(story)){ + ZtModuleDTO d=new ZtModuleDTO(); + d.setId(product.getId()); + d.setName(product.getName()); + d.setList(BeanCopyUtil.copyListProperties(story,ZtModuleDTO::new)); + result.add(d); + } + } + + } + return Result.success(result); + } + + + return Result.success(); + } + + @RequestMapping(value = "/add", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result add(@RequestBody ZtModuleDTO dto) { + + List list = dto.getList(); + List saveList = new ArrayList(); + for (ZtModuleDTO l : list) { + ZtModule ztModule = new ZtModule(); + BeanUtils.copyProperties(ztModule, l); + saveList.add(ztModule); + } + moduleService.saveBatch(saveList); + + actionService.addAction(ActionType.CP, ActionStatus.BJ,null,null,null,null, RiskUserThreadLocal.get().getName(),null,null); + + return Result.success(); + } + + @RequestMapping(value = "/modifyModule", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result modifyModule(@RequestBody ZtModuleDTO dto) { + + moduleService.modifyModule(dto); + return Result.success(); + } + + @RequestMapping(value = "/getModuleByStoryId", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result getModuleByStoryId(@RequestBody ZtModuleQo qo) { + + List moduleList = moduleService.getModuleByStoryId(qo); + + return Result.success(moduleList); + } +} diff --git a/src/main/java/com/sa/zentao/controller/ZtProductController.java b/src/main/java/com/sa/zentao/controller/ZtProductController.java new file mode 100644 index 0000000..1a14c99 --- /dev/null +++ b/src/main/java/com/sa/zentao/controller/ZtProductController.java @@ -0,0 +1,107 @@ +package com.sa.zentao.controller; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.github.pagehelper.PageInfo; +import com.sa.zentao.dao.Result; +import com.sa.zentao.dao.ZtProductDTO; +import com.sa.zentao.dao.ZtProjectDTO; +import com.sa.zentao.entity.ZtProduct; +import com.sa.zentao.entity.ZtProjectproduct; +import com.sa.zentao.qo.ZtProjectQo; +import com.sa.zentao.service.IZtProductService; +import com.sa.zentao.service.IZtProjectproductService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.util.CollectionUtils; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; +import java.util.stream.Collectors; + +/** + *

+ * 前端控制器 + *

+ * + * @author gqb + * @since 2024-06-13 + */ +@RestController +@RequestMapping("/zt-product") +public class ZtProductController { + + + @Autowired + private IZtProductService ztProductService; + @Autowired + private IZtProjectproductService projectproductService; + + + + //项目集 + @RequestMapping(value = "/pageList", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result> pageList(@RequestBody ZtProjectQo qo){ + + return Result.success(ztProductService.pageList(qo)); + + } + + //产品 + @RequestMapping(value = "/productPageList", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result> productPageList(@RequestBody ZtProjectQo qo){ + return Result.success(ztProductService.productPageList(qo)); + } + //关闭项目 + @RequestMapping(value = "/productClose", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result projectClose(@RequestBody ZtProductDTO dto){ + ztProductService.productClose(dto); + return Result.success(); + } + + //删除项目 + @RequestMapping(value = "/productDeleted", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result productDeleted(@RequestBody ZtProductDTO dto){ + ztProductService.productDeleted(dto); + return Result.success(); + } + + @RequestMapping(value = "/productList", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result> productList(@RequestBody ZtProjectQo qo){ + return Result.success(ztProductService.productList(qo)); + } + @RequestMapping(value = "/productListByProductId", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result> productListByProductId(@RequestBody ZtProjectQo qo){ + return Result.success(ztProductService.productListByProductId + (qo)); + } + + @RequestMapping(value = "/addProduct", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result addProduct(@RequestBody ZtProductDTO dto){ + ztProductService.addProduct(dto); + return Result.success(); + + } + @RequestMapping(value = "/modifyProduct", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result modifyProduct(@RequestBody ZtProductDTO dto){ + ztProductService.modifyProduct(dto); + return Result.success(); + + } + @RequestMapping(value = "/getProductByProjectId", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result getProductByProjectId(@RequestBody ZtProductDTO dto){ + ZtProjectproduct project = projectproductService.getOne(new QueryWrapper().lambda() + .eq(ZtProjectproduct::getProject, dto.getId())); + if(project==null){ + return Result.success(); + } + ZtProduct product = ztProductService.getById(project.getProduct()); + return Result.success(product); + } + + + +} diff --git a/src/main/java/com/sa/zentao/controller/ZtProjectController.java b/src/main/java/com/sa/zentao/controller/ZtProjectController.java new file mode 100644 index 0000000..55ff161 --- /dev/null +++ b/src/main/java/com/sa/zentao/controller/ZtProjectController.java @@ -0,0 +1,319 @@ +package com.sa.zentao.controller; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.github.pagehelper.PageInfo; +import com.sa.zentao.dao.BusinessException; +import com.sa.zentao.dao.Result; +import com.sa.zentao.dao.ZtProjectDTO; +import com.sa.zentao.dao.ZtStoryDTO; +import com.sa.zentao.entity.ZtProject; +import com.sa.zentao.qo.ZtProjectQo; +import com.sa.zentao.service.IZtKanbancolumnService; +import com.sa.zentao.service.IZtKanbanlaneService; +import com.sa.zentao.service.IZtProductService; +import com.sa.zentao.service.IZtProjectService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.util.CollectionUtils; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +import java.util.ArrayList; +import java.util.List; + +/** + *

+ * 前端控制器 + *

+ * + * @author gqb + * @since 2024-06-13 + */ +@RestController +@RequestMapping("/zt-project") +public class ZtProjectController { + + @Autowired + private IZtProjectService ztProjectService; + + @Autowired + private IZtProductService IZtProductService; + + + + + //添加项目集 + @RequestMapping(value = "/addProject", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result addProject(@RequestBody ZtProjectDTO dto){ + ztProjectService.addProject(dto); + return Result.success(); + } + + //修改执行 + @RequestMapping(value = "/editImplement", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result editImplement(@RequestBody ZtProjectDTO dto){ + ztProjectService.editImplement(dto); + return Result.success(); + } + @RequestMapping(value = "/changeStatusImplement", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result changeStatusImplement(@RequestBody ZtProjectDTO dto){ + ztProjectService.changeStatusImplement(dto); + return Result.success(); + } + //开始项目 + @RequestMapping(value = "/projectStart", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result projectStart(@RequestBody ZtProjectDTO dto){ + ztProjectService.projectStart(dto); + return Result.success(); + } + + @RequestMapping(value = "/copyExecList", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result copyExecList(@RequestBody ZtProjectDTO dto){ + List list = ztProjectService.copyExecList(dto); + return Result.success(list); + } + + @RequestMapping(value = "/copyExecInfoById", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result copyExecInfoById(@RequestBody ZtProjectDTO dto){ + ZtProjectDTO projectDTO = ztProjectService.copyExecInfoById(dto); + return Result.success(projectDTO); + } + + //关闭项目集 + @RequestMapping(value = "/projectClose", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result projectClose(@RequestBody ZtProjectDTO dto){ + ztProjectService.projectClose(dto); + return Result.success(); + } + //删除项目集 + @RequestMapping(value = "/projectDeleted", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result projectDeleted(@RequestBody ZtProjectDTO dto){ + ztProjectService.projectDeleted(dto); + return Result.success(); + } + //activated 激活 + @RequestMapping(value = "/projectActivated", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result projectActivated(@RequestBody ZtProjectDTO dto){ + ztProjectService.projectActivated(dto); + return Result.success(); + } + + //suspended 挂起 + @RequestMapping(value = "/projectSuspended", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result projectSuspended(@RequestBody ZtProjectDTO dto){ + ztProjectService.projectSuspended(dto); + return Result.success(); + } + + //修改项目集 + @RequestMapping(value = "/modifyProgram", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result modifyProgram(@RequestBody ZtProjectDTO dto){ + ztProjectService.modifyProgram(dto); + return Result.success(); + } + //添加项目 + + //添加执行 + @RequestMapping(value = "/addImplement", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result> implement(@RequestBody ZtProjectDTO dto){ + + ztProjectService.addProject(dto); + + return Result.success(); + + } + + + + + @RequestMapping(value = "/parentList", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result> parentList(@RequestBody ZtProjectDTO dto){ + + return Result.success(ztProjectService.parentList(dto)); + + } + @RequestMapping(value = "/getStoryByImplementId", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result> getStoryByImplementId(@RequestBody ZtProjectDTO dto){ + return Result.success(ztProjectService.getStoryByImplementId(dto)); + } + + + //执行关联需求 + @RequestMapping(value = "/implementSyncStory", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result implementSyncStory(@RequestBody ZtProjectDTO dto){ + if(dto.getId()==null|| CollectionUtils.isEmpty(dto.getStoryIds())){ + throw new BusinessException("添加失败"); + } + ztProjectService.implementSyncStory(dto); + return Result.success(); + } + + //项目关联需求 + @RequestMapping(value = "/projectSyncStory", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result projectSyncStory(@RequestBody ZtProjectDTO dto){ + if(dto.getProject()==null|| CollectionUtils.isEmpty(dto.getStoryIds())){ + throw new BusinessException("添加失败"); + } + ztProjectService.projectSyncStory(dto); + return Result.success(); + } + //项目关联需求 + @RequestMapping(value = "/executionSyncStory", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result executionSyncStory(@RequestBody ZtProjectDTO dto){ + if(dto.getExcludeId()==null|| CollectionUtils.isEmpty(dto.getStoryIds())){ + throw new BusinessException("添加失败"); + } + ztProjectService.executionSyncStory(dto); + return Result.success(); + } + + //查询项目信息根据需求 + @RequestMapping(value = "/projectByExecution", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result projectByExecution(@RequestBody ZtProjectDTO dto){ + + return Result.success(ztProjectService.projectByExecution(dto)); + } + + + @RequestMapping(value = "/implementSyncProduct", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result implementSyncProduct(@RequestBody ZtProjectDTO dto){ + if(dto.getId()==null|| CollectionUtils.isEmpty(dto.getProductIds())){ + throw new BusinessException("添加失败"); + } + ztProjectService.implementSyncProduct(dto); + return Result.success(); + + } + + + @RequestMapping(value = "/authTreeParentList", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result> authTreeParentList(@RequestBody ZtProjectDTO dto){ + + return Result.success(ztProjectService.authTreeParentList(dto)); + + } + + @RequestMapping(value = "/treeParentList", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result> treeParentList(@RequestBody ZtProjectDTO dto){ + + return Result.success(ztProjectService.treeParentList(dto)); + + } + + //项目集 + @RequestMapping(value = "/groupPageList", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result> pageList(@RequestBody ZtProjectQo qo){ + + return Result.success(ztProjectService.groupPageList(qo)); + } + + //项目列表 + @RequestMapping(value = "/typeProductList", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result> typeProductList(@RequestBody ZtProjectQo qo){ + + return Result.success(ztProjectService.typeProductList(qo)); + } + //项目根据id + @RequestMapping(value = "/projectInfoById", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result projectInfoById(@RequestBody ZtProjectQo qo){ + + return Result.success(ztProjectService.getById(qo.getId())); + } + + + //执行列表 + @RequestMapping(value = "/implementPageList", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result> implementPageList(@RequestBody ZtProjectQo qo){ + + return Result.success(ztProjectService.implementPageList(qo)); + } + //执行下拉 + @RequestMapping(value = "/implementList", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result> implementList(@RequestBody ZtProjectQo qo){ + if(qo.getImplementId()==null){ + return Result.success(new ArrayList()); + } + //执行 + ZtProject project = ztProjectService.getById(qo.getImplementId()); + //项目 + if(project==null){ + return Result.success(new ArrayList()); + } + List list = ztProjectService.list(new QueryWrapper().lambda().eq(ZtProject::getProject, project.getProject())); + + return Result.success(list); + } + + //项目列表 + @RequestMapping(value = "/pageProject", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result> pageProject(@RequestBody ZtProjectQo qo){ + + return Result.success(ztProjectService.pageProject(qo)); + + } + //修改项目 + @RequestMapping(value = "/modifyProduct", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result modifyProduct(@RequestBody ZtProjectDTO dto){ + ztProjectService.modifyProject(dto); + return Result.success(); + } + + //搜索项目根据产品 + @RequestMapping(value = "/projectListByProduct", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result projectListByProduct(@RequestBody ZtProjectQo qo){ + return Result.success(this.ztProjectService.getProjectByProduct(qo)); + } + + //搜索执行根据产品 和 项目 + @RequestMapping(value = "/executionListByProduct", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result executionListByProduct(@RequestBody ZtProjectQo qo){ + return Result.success(this.ztProjectService.executionListByProduct(qo)); + } + + @RequestMapping(value = "/executionListByProject", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result executionListByProject(@RequestBody ZtProjectQo qo){ + return Result.success(this.ztProjectService.executionListByProject(qo)); + } + + + //查询执行 根据项目 + @RequestMapping(value = "/implementByProject", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result implementByProject(@RequestBody ZtProjectQo qo){ + return Result.success(this.ztProjectService.implementByProject(qo)); + } + + + //countProject + @RequestMapping(value = "/countProject", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result countProject(@RequestBody ZtProjectQo qo){ + return Result.success(this.ztProjectService.countProject(qo)); + } + + //查询team根据执行id + @RequestMapping(value = "/execTeamById", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result execTeamById(@RequestBody ZtProjectQo qo){ + return Result.success(this.ztProjectService.execTeamById(qo)); + } + @RequestMapping(value = "/execTeamUpdate", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result execTeamUpdate(@RequestBody ZtProjectQo qo){ + this.ztProjectService.execTeamUpdate(qo); + return Result.success(); + } + @RequestMapping(value = "/execTeamList", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result execTeamList(@RequestBody ZtProjectQo qo){ + return Result.success(this.ztProjectService.execTeamList(qo)); + } + + + //项目工时 每个人 按月份 工时统计 + @RequestMapping(value = "/projectTeamTimeWork", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result projectTeamTimeWork(@RequestBody ZtProjectQo qo){ + return Result.success(this.ztProjectService.projectTeamTimeWork(qo)); + } + + + +} diff --git a/src/main/java/com/sa/zentao/controller/ZtProjectproductController.java b/src/main/java/com/sa/zentao/controller/ZtProjectproductController.java new file mode 100644 index 0000000..d773a68 --- /dev/null +++ b/src/main/java/com/sa/zentao/controller/ZtProjectproductController.java @@ -0,0 +1,20 @@ +package com.sa.zentao.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 前端控制器 + *

+ * + * @author gqb + * @since 2024-06-18 + */ +@RestController +@RequestMapping("/zt-projectproduct") +public class ZtProjectproductController { + +} diff --git a/src/main/java/com/sa/zentao/controller/ZtProjectstoryController.java b/src/main/java/com/sa/zentao/controller/ZtProjectstoryController.java new file mode 100644 index 0000000..7c362de --- /dev/null +++ b/src/main/java/com/sa/zentao/controller/ZtProjectstoryController.java @@ -0,0 +1,20 @@ +package com.sa.zentao.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 前端控制器 + *

+ * + * @author gqb + * @since 2024-07-02 + */ +@RestController +@RequestMapping("/zt-projectstory") +public class ZtProjectstoryController { + +} diff --git a/src/main/java/com/sa/zentao/controller/ZtSearchindexController.java b/src/main/java/com/sa/zentao/controller/ZtSearchindexController.java new file mode 100644 index 0000000..3908a33 --- /dev/null +++ b/src/main/java/com/sa/zentao/controller/ZtSearchindexController.java @@ -0,0 +1,20 @@ +package com.sa.zentao.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 前端控制器 + *

+ * + * @author gqb + * @since 2024-06-24 + */ +@RestController +@RequestMapping("/zt-searchindex") +public class ZtSearchindexController { + +} diff --git a/src/main/java/com/sa/zentao/controller/ZtStoryController.java b/src/main/java/com/sa/zentao/controller/ZtStoryController.java new file mode 100644 index 0000000..6dee200 --- /dev/null +++ b/src/main/java/com/sa/zentao/controller/ZtStoryController.java @@ -0,0 +1,180 @@ +package com.sa.zentao.controller; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.github.pagehelper.PageInfo; +import com.sa.zentao.dao.Result; +import com.sa.zentao.dao.ZtProjectDTO; +import com.sa.zentao.dao.ZtStoryDTO; +import com.sa.zentao.entity.ZtProject; +import com.sa.zentao.entity.ZtProjectproduct; +import com.sa.zentao.qo.ZtProjectQo; +import com.sa.zentao.service.IZtProjectproductService; +import com.sa.zentao.service.IZtStoryService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.util.CollectionUtils; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; +import java.util.stream.Collectors; + +/** + *

+ * 前端控制器 + *

+ * + * @author gqb + * @since 2024-06-24 + */ +@RestController +@RequestMapping("/zt-story") +public class ZtStoryController { + + @Autowired + private IZtStoryService ztStoryService; + + @RequestMapping(value = "/pageList", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result storyPageList(@RequestBody ZtProjectQo qo){ + + return Result.success(ztStoryService.pageList(qo)); + + } + + @RequestMapping(value = "/projectStoryPageList", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result projectStoryPageList(@RequestBody ZtProjectQo qo){ + + return Result.success(ztStoryService.projectStoryPageList(qo)); + + } + + @RequestMapping(value = "/storyListByProject", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result storyListByProject(@RequestBody ZtProjectQo qo){ + List list=ztStoryService.storyListByProject(qo); + return Result.success(list); + } + + + @RequestMapping(value = "/storyListByProductId", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result storyListByProductId(@RequestBody ZtProjectQo qo){ + List list=ztStoryService.storyListByProductId(qo); + return Result.success(list); + } + + @RequestMapping(value = "/storyListByExecution", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result storyListByExecution(@RequestBody ZtProjectQo qo){ + List list=ztStoryService.storyListByExecution(qo); + return Result.success(list); + + } + @RequestMapping(value = "/storyNoSyncProject", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result storyNoSyncProject(@RequestBody ZtProjectQo qo){ + List list=ztStoryService.storyNoSyncProject(qo); + return Result.success(list); + + } + @RequestMapping(value = "/execNoSyncProject", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result execNoSyncProject(@RequestBody ZtProjectQo qo){ + List list=ztStoryService.execNoSyncProject(qo); + return Result.success(list); + + } + + @RequestMapping(value = "/addStory", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result addStory(@RequestBody ZtStoryDTO dto){ + ztStoryService.addStory(dto); + return Result.success(); + } + @RequestMapping(value = "/editStory", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result editStory(@RequestBody ZtStoryDTO dto){ + ztStoryService.editStory(dto); + return Result.success(); + } + //关闭 + @RequestMapping(value = "/closeStory", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result closeStory(@RequestBody ZtStoryDTO dto){ + ztStoryService.closeStory(dto); + return Result.success(); + } + //指派 + @RequestMapping(value = "/assignedTo", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result assignedTo(@RequestBody ZtStoryDTO dto){ + ztStoryService.assignedTo(dto); + return Result.success(); + } + //验收 + @RequestMapping(value = "/storyYs", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result storyYs(@RequestBody ZtStoryDTO dto){ + ztStoryService.storyYs(dto); + return Result.success(); + } + //撤销评审 + @RequestMapping(value = "/cancelReview", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result cancelReview(@RequestBody ZtStoryDTO dto){ + ztStoryService.cancelReview(dto); + return Result.success(); + } + //添加评审 + @RequestMapping(value = "/addReview", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result addReview(@RequestBody ZtStoryDTO dto){ + ztStoryService.addReview(dto); + return Result.success(); + } + + //评审 + @RequestMapping(value = "/userReview", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result userReview(@RequestBody ZtStoryDTO dto){ + ztStoryService.userReview(dto); + return Result.success(); + } + //获取需求 根据id + @RequestMapping(value = "/getStoryById", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result getStoryById(@RequestBody ZtStoryDTO dto){ + ZtStoryDTO storyDTO = ztStoryService.getStoryById(dto.getId()); + return Result.success(storyDTO); + } + + //切换状态 + @RequestMapping(value = "/changeStatus", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result changeStatus(@RequestBody ZtStoryDTO dto){ + ztStoryService.changeStatus(dto); + return Result.success(); + } + //切换执行 + @RequestMapping(value = "/changeExecution", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result changeExecution(@RequestBody ZtStoryDTO dto){ + ztStoryService.changeExecution(dto); + return Result.success(); + } + //切换指派 + @RequestMapping(value = "/changeAssignedTo", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result changeAssignedTo(@RequestBody ZtStoryDTO dto){ + ztStoryService.changeAssignedTo(dto); + return Result.success(); + } + + @Autowired + private IZtProjectproductService projectproductService; + + //迭代列表根据项目id + @RequestMapping(value = "/execListByProject", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result execListByProject(@RequestBody ZtStoryDTO dto){ + if(dto.getProduct()!=null){ + List list = this.projectproductService.list(new QueryWrapper().lambda() + .eq(ZtProjectproduct::getProduct, dto.getProduct())); + + if(CollectionUtils.isEmpty(list)){ + return Result.success(); + } + dto.setProjects(list.stream().map(o->o.getProject()).collect(Collectors.toList())); + } + + + List list = ztStoryService.execListByProject(dto); + return Result.success(list); + } + +} diff --git a/src/main/java/com/sa/zentao/controller/ZtStoryFeedbackController.java b/src/main/java/com/sa/zentao/controller/ZtStoryFeedbackController.java new file mode 100644 index 0000000..832b8f9 --- /dev/null +++ b/src/main/java/com/sa/zentao/controller/ZtStoryFeedbackController.java @@ -0,0 +1,69 @@ +package com.sa.zentao.controller; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.sa.zentao.dao.Result; +import com.sa.zentao.dao.ZtStoryDTO; +import com.sa.zentao.dao.ZtStoryFeedbackDTO; +import com.sa.zentao.entity.ZtStoryFeedback; +import com.sa.zentao.qo.ZtProjectQo; +import com.sa.zentao.service.IZtStoryFeedbackService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + *

+ * 前端控制器 + *

+ * + * @author gqb + * @since 2024-10-15 + */ +@RestController +@RequestMapping("/zt-story-feedback") +public class ZtStoryFeedbackController { + + @Autowired + private IZtStoryFeedbackService storyFeedbackService; + + @RequestMapping(value = "/pageList", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result storyPageList(@RequestBody ZtProjectQo qo){ + return Result.success(storyFeedbackService.pageList(qo)); + } + + @RequestMapping(value = "/addFeedback", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result addStory(@RequestBody ZtStoryFeedbackDTO dto){ + storyFeedbackService.addFeedback(dto); + return Result.success(); + } + + @RequestMapping(value = "/editFeedback", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result editFeedback(@RequestBody ZtStoryFeedbackDTO dto){ + storyFeedbackService.editFeedback(dto); + return Result.success(); + } + + @RequestMapping(value = "/changeStatus", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result changeStatus(@RequestBody ZtStoryFeedbackDTO dto){ + storyFeedbackService.changeStatus(dto); + return Result.success(); + } + + + @RequestMapping(value = "/list", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result list(@RequestBody ZtStoryFeedbackDTO dto){ + List waitList = storyFeedbackService.list(new QueryWrapper() + .lambda().eq(ZtStoryFeedback::getStatus, "wait")); + + + return Result.success(waitList); + } + + +} diff --git a/src/main/java/com/sa/zentao/controller/ZtStoryUserController.java b/src/main/java/com/sa/zentao/controller/ZtStoryUserController.java new file mode 100644 index 0000000..d1a91bc --- /dev/null +++ b/src/main/java/com/sa/zentao/controller/ZtStoryUserController.java @@ -0,0 +1,72 @@ +package com.sa.zentao.controller; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.github.pagehelper.PageInfo; +import com.sa.zentao.dao.Result; +import com.sa.zentao.dao.ZtStoryDTO; +import com.sa.zentao.dao.ZtStoryUserDTO; +import com.sa.zentao.entity.ZtStoryUser; +import com.sa.zentao.qo.StoryQo; +import com.sa.zentao.service.IZtStoryUserService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Arrays; +import java.util.List; + +/** + *

+ * 前端控制器 + *

+ * + * @author gqb + * @since 2024-10-21 + */ +@RestController +@RequestMapping("/zt-story-user") +public class ZtStoryUserController { + + @Autowired + private IZtStoryUserService storyUserService; + + + + @RequestMapping(value = "/changeStatus", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result changeStatus(@RequestBody ZtStoryUserDTO dto){ + storyUserService.changeStatus(dto); + return Result.success(); + } + + + @RequestMapping(value = "/addStory", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result addStory(@RequestBody ZtStoryUserDTO dto){ + storyUserService.addStory(dto); + return Result.success(); + } + + @RequestMapping(value = "/editStory", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result editStory(@RequestBody ZtStoryUserDTO dto){ + storyUserService.editStory(dto); + return Result.success(); + } + + @RequestMapping(value = "/pageList", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result pageList(@RequestBody StoryQo qo){ + PageInfo p = storyUserService.pageList(qo); + return Result.success(p); + } + + @RequestMapping(value = "/storyList", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result storyList(@RequestBody StoryQo qo){ + + List list = storyUserService.list(new QueryWrapper() + .lambda().eq(ZtStoryUser::getProduct,qo.getId()).in(ZtStoryUser::getStatus, "wait","active")); + return Result.success(list); + } + +} diff --git a/src/main/java/com/sa/zentao/controller/ZtStoryreviewController.java b/src/main/java/com/sa/zentao/controller/ZtStoryreviewController.java new file mode 100644 index 0000000..b3e0246 --- /dev/null +++ b/src/main/java/com/sa/zentao/controller/ZtStoryreviewController.java @@ -0,0 +1,20 @@ +package com.sa.zentao.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 前端控制器 + *

+ * + * @author gqb + * @since 2024-06-24 + */ +@RestController +@RequestMapping("/zt-storyreview") +public class ZtStoryreviewController { + +} diff --git a/src/main/java/com/sa/zentao/controller/ZtStoryspecController.java b/src/main/java/com/sa/zentao/controller/ZtStoryspecController.java new file mode 100644 index 0000000..d5770ac --- /dev/null +++ b/src/main/java/com/sa/zentao/controller/ZtStoryspecController.java @@ -0,0 +1,20 @@ +package com.sa.zentao.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 前端控制器 + *

+ * + * @author gqb + * @since 2024-07-03 + */ +@RestController +@RequestMapping("/zt-storyspec") +public class ZtStoryspecController { + +} diff --git a/src/main/java/com/sa/zentao/controller/ZtTaskController.java b/src/main/java/com/sa/zentao/controller/ZtTaskController.java new file mode 100644 index 0000000..3cc8e15 --- /dev/null +++ b/src/main/java/com/sa/zentao/controller/ZtTaskController.java @@ -0,0 +1,111 @@ +package com.sa.zentao.controller; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.github.pagehelper.PageInfo; +import com.sa.zentao.dao.Result; +import com.sa.zentao.dao.ZtProjectDTO; +import com.sa.zentao.dao.ZtTaskDTO; +import com.sa.zentao.entity.ZtTask; +import com.sa.zentao.qo.ZtProjectQo; +import com.sa.zentao.service.IZtTaskService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + *

+ * 前端控制器 + *

+ * + * @author gqb + * @since 2024-06-25 + */ +@RestController +@RequestMapping("/zt-task") +public class ZtTaskController { + + @Autowired + private IZtTaskService ztTaskService; + + @RequestMapping(value = "/taskPageList", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result> taskPageList(@RequestBody ZtProjectQo qo){ + + return Result.success(ztTaskService.taskPageList(qo)); + } + + @RequestMapping(value = "/addTask", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result addTask(@RequestBody ZtTaskDTO dto){ + ztTaskService.addTask(dto); + return Result.success(); + } + + @RequestMapping(value = "/batchAddTask", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result batchAddTask(@RequestBody ZtTaskDTO dto){ + ztTaskService.batchAddTask(dto); + return Result.success(); + } + + @RequestMapping(value = "/modifyTask", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result modifyTask(@RequestBody ZtTaskDTO dto){ + ztTaskService.modifyTask(dto); + return Result.success(); + } + //开始任务 + @RequestMapping(value = "/startTask", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result startTask(@RequestBody ZtTaskDTO dto){ + ztTaskService.startTask(dto); + return Result.success(); + } + //结束任务 + @RequestMapping(value = "/finishTask", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result finishTask(@RequestBody ZtTaskDTO dto){ + ztTaskService.finishTask(dto); + return Result.success(); + } + + //关闭任务 + @RequestMapping(value = "/closeTask", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result closeTask(@RequestBody ZtTaskDTO dto){ + ztTaskService.closeTask(dto); + return Result.success(); + } + + //取消任务 + @RequestMapping(value = "/cancelTask", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result cancelTask(@RequestBody ZtTaskDTO dto){ + ztTaskService.cancelTask(dto); + return Result.success(); + } + + + //任务根据执行 和 需求 + @RequestMapping(value = "/taskListByExecution", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result taskListByExecution(@RequestBody ZtTaskDTO dto){ + List list=ztTaskService.taskListByExecution(dto); + return Result.success(list); + } + //获取Task根据id + @RequestMapping(value = "/getTaskById", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result getTaskById(@RequestBody ZtTaskDTO dto){ + return Result.success(ztTaskService.getById(dto.getId())); + } + + + //取消任务 + @RequestMapping(value = "/taskListByStory", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result taskListByStory(@RequestBody ZtTaskDTO dto){ + + + // 需求关联的迭代 + List list = this.ztTaskService.list(new QueryWrapper().lambda().eq(ZtTask::getStory, dto.getStory())); + + return Result.success(list); + } + +} diff --git a/src/main/java/com/sa/zentao/controller/ZtTaskestimateController.java b/src/main/java/com/sa/zentao/controller/ZtTaskestimateController.java new file mode 100644 index 0000000..e96712d --- /dev/null +++ b/src/main/java/com/sa/zentao/controller/ZtTaskestimateController.java @@ -0,0 +1,20 @@ +package com.sa.zentao.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 前端控制器 + *

+ * + * @author gqb + * @since 2024-06-25 + */ +@RestController +@RequestMapping("/zt-taskestimate") +public class ZtTaskestimateController { + +} diff --git a/src/main/java/com/sa/zentao/controller/ZtTaskspecController.java b/src/main/java/com/sa/zentao/controller/ZtTaskspecController.java new file mode 100644 index 0000000..7176cb5 --- /dev/null +++ b/src/main/java/com/sa/zentao/controller/ZtTaskspecController.java @@ -0,0 +1,20 @@ +package com.sa.zentao.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 前端控制器 + *

+ * + * @author gqb + * @since 2024-06-25 + */ +@RestController +@RequestMapping("/zt-taskspec") +public class ZtTaskspecController { + +} diff --git a/src/main/java/com/sa/zentao/controller/ZtTaskteamController.java b/src/main/java/com/sa/zentao/controller/ZtTaskteamController.java new file mode 100644 index 0000000..866c0da --- /dev/null +++ b/src/main/java/com/sa/zentao/controller/ZtTaskteamController.java @@ -0,0 +1,31 @@ +package com.sa.zentao.controller; + + +import com.sa.zentao.dao.Result; +import com.sa.zentao.qo.ZtProjectQo; +import com.sa.zentao.service.IZtTaskteamService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 前端控制器 + *

+ * + * @author gqb + * @since 2024-07-17 + */ +@RestController +@RequestMapping("/zt-taskteam") +public class ZtTaskteamController { + + + @Autowired + private IZtTaskteamService taskteamService; + + +} diff --git a/src/main/java/com/sa/zentao/controller/ZtTeamController.java b/src/main/java/com/sa/zentao/controller/ZtTeamController.java new file mode 100644 index 0000000..fe34923 --- /dev/null +++ b/src/main/java/com/sa/zentao/controller/ZtTeamController.java @@ -0,0 +1,20 @@ +package com.sa.zentao.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 前端控制器 + *

+ * + * @author gqb + * @since 2024-07-05 + */ +@RestController +@RequestMapping("/zt-team") +public class ZtTeamController { + +} diff --git a/src/main/java/com/sa/zentao/controller/ZtTestresultController.java b/src/main/java/com/sa/zentao/controller/ZtTestresultController.java new file mode 100644 index 0000000..4a1786e --- /dev/null +++ b/src/main/java/com/sa/zentao/controller/ZtTestresultController.java @@ -0,0 +1,20 @@ +package com.sa.zentao.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 前端控制器 + *

+ * + * @author gqb + * @since 2024-07-29 + */ +@RestController +@RequestMapping("/zt-testresult") +public class ZtTestresultController { + +} diff --git a/src/main/java/com/sa/zentao/controller/ZtTesttaskController.java b/src/main/java/com/sa/zentao/controller/ZtTesttaskController.java new file mode 100644 index 0000000..0ed76d6 --- /dev/null +++ b/src/main/java/com/sa/zentao/controller/ZtTesttaskController.java @@ -0,0 +1,36 @@ +package com.sa.zentao.controller; + + +import com.sa.zentao.dao.Result; +import com.sa.zentao.qo.ZtProjectQo; +import com.sa.zentao.service.IZtTesttaskService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 前端控制器 + *

+ * + * @author gqb + * @since 2024-10-21 + */ +@RestController +@RequestMapping("/zt-testtask") +public class ZtTesttaskController { + + + @Autowired + private IZtTesttaskService testtaskService; + + //查询执行 根据项目 + @RequestMapping(value = "/testtaskByProject", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result testtaskByProject(@RequestBody ZtProjectQo qo){ + return Result.success(this.testtaskService.testtaskByProject(qo)); + } + +} diff --git a/src/main/java/com/sa/zentao/controller/ZtUserController.java b/src/main/java/com/sa/zentao/controller/ZtUserController.java new file mode 100644 index 0000000..9ae03a4 --- /dev/null +++ b/src/main/java/com/sa/zentao/controller/ZtUserController.java @@ -0,0 +1,160 @@ +package com.sa.zentao.controller; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.github.pagehelper.PageInfo; +import com.sa.zentao.conf.RiskUserThreadLocal; +import com.sa.zentao.dao.BusinessException; +import com.sa.zentao.dao.Result; +import com.sa.zentao.dao.ZtProjectDTO; +import com.sa.zentao.dao.ZtUserDTO; +import com.sa.zentao.entity.ZtUser; +import com.sa.zentao.enums.ActionStatus; +import com.sa.zentao.enums.ActionType; +import com.sa.zentao.qo.ZtUserQo; +import com.sa.zentao.service.IZtActionService; +import com.sa.zentao.service.IZtUserService; +import com.sa.zentao.utils.JwtUtil; +import com.tencentcloudapi.common.Credential; +import com.tencentcloudapi.common.exception.TencentCloudSDKException; +import com.tencentcloudapi.sms.v20190711.SmsClient; +import com.tencentcloudapi.sms.v20190711.models.SendSmsRequest; +import com.tencentcloudapi.sms.v20190711.models.SendSmsResponse; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.util.CollectionUtils; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + *

+ * 前端控制器 + *

+ * + * @author gqb + * @since 2024-06-18 + */ +@RestController +@RequestMapping("/zt-user") +public class ZtUserController { + + @Autowired + private IZtUserService userService; + + @Autowired + private IZtActionService actionService; + + + + @RequestMapping(value = "/userList", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result> userList(@RequestBody ZtProjectDTO dto){ + return Result.success(userService.list(new QueryWrapper() + .lambda().eq(ZtUser::getDeleted,"0") + )); + } + + @RequestMapping(value = "/storyReviewList", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result> storyReviewList(@RequestBody ZtProjectDTO dto){ + return Result.success(userService.storyReviewList(dto)); + } + @RequestMapping(value = "/sendCode", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result> sendCode(@RequestBody ZtUser user){ + userService.sendCode(user); + return Result.success(); + } + + + @RequestMapping(value = "/pageList", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result pageList(@RequestBody ZtUserQo qo){ + + PageInfo page=userService.pageList(qo); + + return Result.success(page); + } + + @RequestMapping(value = "/login", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result login(@RequestBody ZtUser user){ + + + ZtUser login =userService.login(user); + + ZtUserDTO ztUserDTO = new ZtUserDTO(); + BeanUtils.copyProperties(login,ztUserDTO); + String sign = JwtUtil.sign(ztUserDTO); + ztUserDTO.setToken(sign); + this.actionService.addAction(ActionType.LOGIN, ActionStatus.LOGIN,login.getId(),null,null,null,login.getAccount(),null,null); + return Result.success(ztUserDTO); + } + + + @RequestMapping(value = "/add", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result add(@RequestBody ZtUserDTO user){ + + ZtUser login = userService.getOne(new QueryWrapper().lambda().eq(ZtUser::getAccount, user.getAccount())); + if(login!=null){ + throw new BusinessException("存在"); + } + ZtUser ztUser = new ZtUser(); + BeanUtils.copyProperties(user,ztUser); + List productList = user.getProductList(); + if(!CollectionUtils.isEmpty(productList)){ + ztUser.setProductIds(StringUtils.join(productList,",")); + } + + + + this.userService.save(ztUser); + this.actionService.addAction(ActionType.USER, ActionStatus.XJ,ztUser.getId(),null,null,null, RiskUserThreadLocal.get().getName(),null,ztUser.getAccount()); + + return Result.success(); + } + + @RequestMapping(value = "/modify", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result modify(@RequestBody ZtUserDTO user){ + + ZtUser ztUser = userService.getById(user.getId()); + + if(ztUser==null){ + throw new BusinessException("不存在"); + } + List list = userService.list(new QueryWrapper().lambda().eq(ZtUser::getAccount, user.getAccount()) + .ne(ZtUser::getId, user.getId()) + ); + + if(!CollectionUtils.isEmpty(list)){ + throw new BusinessException("请检查用户"); + } + + ztUser.setAccount(user.getAccount()); + + ztUser.setPassword(user.getPassword()); + ztUser.setUserType(user.getUserType()); + ztUser.setEmail(user.getEmail()); + ztUser.setPhone(user.getPhone()); + if(!CollectionUtils.isEmpty(user.getProductList())){ + ztUser.setProductIds(StringUtils.join(user.getProductList(),",")); + } + + this.userService.update(new UpdateWrapper().lambda() + .set(ZtUser::getPassword,user.getPassword()) + .set(ZtUser::getUserType,user.getUserType()) + .set(ZtUser::getEmail,user.getEmail()) + .set(ZtUser::getProductIds,ztUser.getProductIds()) + .set(ZtUser::getPhone,ztUser.getPhone()) + .eq(ZtUser::getId,ztUser.getId()) + ); + this.actionService.addAction(ActionType.USER, ActionStatus.BJ,ztUser.getId(),null,null,null,RiskUserThreadLocal.get().getName(),null,user.getAccount()); + + return Result.success(); + } + + +} diff --git a/src/main/java/com/sa/zentao/controller/ZtYwBackupsController.java b/src/main/java/com/sa/zentao/controller/ZtYwBackupsController.java new file mode 100644 index 0000000..cfe7261 --- /dev/null +++ b/src/main/java/com/sa/zentao/controller/ZtYwBackupsController.java @@ -0,0 +1,55 @@ +package com.sa.zentao.controller; + + +import com.github.pagehelper.PageInfo; +import com.sa.zentao.dao.Result; +import com.sa.zentao.dao.ZtYwBackupsDTO; +import com.sa.zentao.dao.ZtYwPatrolDTO; +import com.sa.zentao.qo.ZtYwPatrolQo; +import com.sa.zentao.service.IZtYwBackupsService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 前端控制器 + *

+ * + * @author gqb + * @since 2024-11-18 + */ +@RestController +@RequestMapping("/zt-yw-backups") +public class ZtYwBackupsController { + + @Autowired + private IZtYwBackupsService backupsService; + + @RequestMapping(value = "/add", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result add(@RequestBody ZtYwBackupsDTO dto){ + + backupsService.add(dto); + + return Result.success(); + } + @RequestMapping(value = "/modify", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result modify(@RequestBody ZtYwBackupsDTO dto){ + + backupsService.modify(dto); + + return Result.success(); + } + + @RequestMapping(value = "/pageList", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result pageList(@RequestBody ZtYwPatrolQo qo){ + + PageInfo page=backupsService.pageList(qo); + + return Result.success(page); + } + +} diff --git a/src/main/java/com/sa/zentao/controller/ZtYwChangeController.java b/src/main/java/com/sa/zentao/controller/ZtYwChangeController.java new file mode 100644 index 0000000..4220e9f --- /dev/null +++ b/src/main/java/com/sa/zentao/controller/ZtYwChangeController.java @@ -0,0 +1,82 @@ +package com.sa.zentao.controller; + + +import com.github.pagehelper.PageInfo; +import com.sa.zentao.dao.Result; +import com.sa.zentao.dao.ZtYwChangeDTO; +import com.sa.zentao.dao.ZtYwFwqsearchDTO; +import com.sa.zentao.qo.ZtYwPatrolQo; +import com.sa.zentao.service.IZtYwChangeService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 前端控制器 + *

+ * + * @author gqb + * @since 2024-11-19 + */ +@RestController +@RequestMapping("/zt-yw-change") +public class ZtYwChangeController { + + @Autowired + private IZtYwChangeService ywChangeService; + + + @RequestMapping(value = "/add", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result add(@RequestBody ZtYwChangeDTO dto){ + + ywChangeService.add(dto); + + return Result.success(); + } + @RequestMapping(value = "/modify", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result modify(@RequestBody ZtYwChangeDTO dto){ + + ywChangeService.modify(dto); + + return Result.success(); + } + + @RequestMapping(value = "/pageList", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result pageList(@RequestBody ZtYwPatrolQo qo){ + + PageInfo page=ywChangeService.pageList(qo); + + return Result.success(page); + } + @RequestMapping(value = "/approval", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result approval(@RequestBody ZtYwPatrolQo qo){ + + ywChangeService.approval(qo); + + return Result.success(); + } + @RequestMapping(value = "/changeStart", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result changeStart(@RequestBody ZtYwPatrolQo qo){ + + ywChangeService.changeStart(qo); + + return Result.success(); + } + @RequestMapping(value = "/ssResult", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result ssResult(@RequestBody ZtYwPatrolQo qo){ + ywChangeService.ssResult(qo); + return Result.success(); + } + + @RequestMapping(value = "/check", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result check(@RequestBody ZtYwPatrolQo qo){ + ywChangeService.check(qo); + return Result.success(); + } + + +} diff --git a/src/main/java/com/sa/zentao/controller/ZtYwFaultController.java b/src/main/java/com/sa/zentao/controller/ZtYwFaultController.java new file mode 100644 index 0000000..58357e9 --- /dev/null +++ b/src/main/java/com/sa/zentao/controller/ZtYwFaultController.java @@ -0,0 +1,63 @@ +package com.sa.zentao.controller; + + +import com.github.pagehelper.PageInfo; +import com.sa.zentao.dao.Result; +import com.sa.zentao.dao.ZtYwFaultDTO; +import com.sa.zentao.dao.ZtYwPatrolDTO; +import com.sa.zentao.qo.ZtYwPatrolQo; +import com.sa.zentao.service.IZtYwFaultService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 前端控制器 + *

+ * + * @author gqb + * @since 2024-11-19 + */ +@RestController +@RequestMapping("/zt-yw-fault") +public class ZtYwFaultController { + + @Autowired + private IZtYwFaultService ywFaultService; + + @RequestMapping(value = "/add", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result add(@RequestBody ZtYwFaultDTO dto){ + + ywFaultService.add(dto); + + return Result.success(); + } + + @RequestMapping(value = "/modify", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result modify(@RequestBody ZtYwFaultDTO dto){ + + ywFaultService.modify(dto); + + return Result.success(); + } + + @RequestMapping(value = "/handle", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result handle(@RequestBody ZtYwFaultDTO dto){ + + ywFaultService.handle(dto); + + return Result.success(); + } + @RequestMapping(value = "/pageList", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result pageList(@RequestBody ZtYwPatrolQo qo){ + + PageInfo page=ywFaultService.pageList(qo); + + return Result.success(page); + } + +} diff --git a/src/main/java/com/sa/zentao/controller/ZtYwFaultListController.java b/src/main/java/com/sa/zentao/controller/ZtYwFaultListController.java new file mode 100644 index 0000000..6403616 --- /dev/null +++ b/src/main/java/com/sa/zentao/controller/ZtYwFaultListController.java @@ -0,0 +1,20 @@ +package com.sa.zentao.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 前端控制器 + *

+ * + * @author gqb + * @since 2024-11-19 + */ +@RestController +@RequestMapping("/zt-yw-fault-list") +public class ZtYwFaultListController { + +} diff --git a/src/main/java/com/sa/zentao/controller/ZtYwFwqsearchController.java b/src/main/java/com/sa/zentao/controller/ZtYwFwqsearchController.java new file mode 100644 index 0000000..1540d0b --- /dev/null +++ b/src/main/java/com/sa/zentao/controller/ZtYwFwqsearchController.java @@ -0,0 +1,55 @@ +package com.sa.zentao.controller; + + +import com.github.pagehelper.PageInfo; +import com.sa.zentao.dao.Result; +import com.sa.zentao.dao.ZtYwBackupsDTO; +import com.sa.zentao.dao.ZtYwFwqsearchDTO; +import com.sa.zentao.qo.ZtYwPatrolQo; +import com.sa.zentao.service.IZtYwFwqsearchService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 前端控制器 + *

+ * + * @author gqb + * @since 2024-11-19 + */ +@RestController +@RequestMapping("/zt-yw-fwqsearch") +public class ZtYwFwqsearchController { + + @Autowired + private IZtYwFwqsearchService ywFwqsearchService; + + @RequestMapping(value = "/add", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result add(@RequestBody ZtYwFwqsearchDTO dto){ + + ywFwqsearchService.add(dto); + + return Result.success(); + } + @RequestMapping(value = "/modify", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result modify(@RequestBody ZtYwFwqsearchDTO dto){ + + ywFwqsearchService.modify(dto); + + return Result.success(); + } + + @RequestMapping(value = "/pageList", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result pageList(@RequestBody ZtYwPatrolQo qo){ + + PageInfo page=ywFwqsearchService.pageList(qo); + + return Result.success(page); + } + +} diff --git a/src/main/java/com/sa/zentao/controller/ZtYwMachineRoomController.java b/src/main/java/com/sa/zentao/controller/ZtYwMachineRoomController.java new file mode 100644 index 0000000..4b0495d --- /dev/null +++ b/src/main/java/com/sa/zentao/controller/ZtYwMachineRoomController.java @@ -0,0 +1,57 @@ +package com.sa.zentao.controller; + + +import com.github.pagehelper.PageInfo; +import com.sa.zentao.dao.Result; +import com.sa.zentao.dao.ZtYwMachineRoomDTO; +import com.sa.zentao.dao.ZtYwPatrolDTO; +import com.sa.zentao.qo.ZtYwPatrolQo; +import com.sa.zentao.service.IZtYwMachineRoomService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 前端控制器 + *

+ * + * @author gqb + * @since 2024-11-19 + */ +@RestController +@RequestMapping("/zt-yw-machine-room") +public class ZtYwMachineRoomController { + + @Autowired + private IZtYwMachineRoomService machineRoomService; + + @RequestMapping(value = "/add", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result add(@RequestBody ZtYwMachineRoomDTO dto){ + + machineRoomService.add(dto); + + return Result.success(); + } + + @RequestMapping(value = "/modify", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result modify(@RequestBody ZtYwMachineRoomDTO dto){ + + machineRoomService.modify(dto); + + return Result.success(); + } + + + @RequestMapping(value = "/pageList", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result pageList(@RequestBody ZtYwPatrolQo qo){ + + PageInfo page=machineRoomService.pageList(qo); + + return Result.success(page); + } + +} diff --git a/src/main/java/com/sa/zentao/controller/ZtYwPatrolController.java b/src/main/java/com/sa/zentao/controller/ZtYwPatrolController.java new file mode 100644 index 0000000..ce8f764 --- /dev/null +++ b/src/main/java/com/sa/zentao/controller/ZtYwPatrolController.java @@ -0,0 +1,64 @@ +package com.sa.zentao.controller; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.github.pagehelper.PageInfo; +import com.sa.zentao.dao.BusinessException; +import com.sa.zentao.dao.Result; +import com.sa.zentao.dao.ZtUserDTO; +import com.sa.zentao.dao.ZtYwPatrolDTO; +import com.sa.zentao.entity.ZtUser; +import com.sa.zentao.qo.ZtUserQo; +import com.sa.zentao.qo.ZtYwPatrolQo; +import com.sa.zentao.service.IZtYwPatrolService; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + *

+ * 前端控制器 + *

+ * + * @author gqb + * @since 2024-11-18 + */ +@RestController +@RequestMapping("/zt-yw-patrol") +public class ZtYwPatrolController { + + @Autowired + private IZtYwPatrolService ywPatrolService; + + @RequestMapping(value = "/add", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result add(@RequestBody ZtYwPatrolDTO dto){ + + ywPatrolService.add(dto); + + return Result.success(); + } + + @RequestMapping(value = "/modify", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result modify(@RequestBody ZtYwPatrolDTO dto){ + + ywPatrolService.modify(dto); + + return Result.success(); + } + + + @RequestMapping(value = "/pageList", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result pageList(@RequestBody ZtYwPatrolQo qo){ + + PageInfo page=ywPatrolService.pageList(qo); + + return Result.success(page); + } + +} diff --git a/src/main/java/com/sa/zentao/controller/ZtYwTaskController.java b/src/main/java/com/sa/zentao/controller/ZtYwTaskController.java new file mode 100644 index 0000000..21c97e1 --- /dev/null +++ b/src/main/java/com/sa/zentao/controller/ZtYwTaskController.java @@ -0,0 +1,80 @@ +package com.sa.zentao.controller; + + +import com.github.pagehelper.PageInfo; +import com.sa.zentao.dao.Result; +import com.sa.zentao.dao.ZtYwChangeDTO; +import com.sa.zentao.dao.ZtYwTaskDTO; +import com.sa.zentao.qo.ZtYwPatrolQo; +import com.sa.zentao.service.IZtYwTaskService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 前端控制器 + *

+ * + * @author gqb + * @since 2024-11-19 + */ +@RestController +@RequestMapping("/zt-yw-task") +public class ZtYwTaskController { + + @Autowired + private IZtYwTaskService ywTaskService; + + @RequestMapping(value = "/add", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result add(@RequestBody ZtYwTaskDTO dto){ + + ywTaskService.add(dto); + + return Result.success(); + } + + @RequestMapping(value = "/start", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result start(@RequestBody ZtYwTaskDTO dto){ + + ywTaskService.start(dto); + + return Result.success(); + } + @RequestMapping(value = "/finish", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result finish(@RequestBody ZtYwTaskDTO dto){ + + ywTaskService.finish(dto); + + return Result.success(); + } + + @RequestMapping(value = "/check", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result check(@RequestBody ZtYwTaskDTO dto){ + + ywTaskService.check(dto); + + return Result.success(); + } + + + @RequestMapping(value = "/modify", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result modify(@RequestBody ZtYwTaskDTO dto){ + + ywTaskService.modify(dto); + + return Result.success(); + } + + @RequestMapping(value = "/pageList", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") + public Result pageList(@RequestBody ZtYwPatrolQo qo){ + + PageInfo page=ywTaskService.pageList(qo); + + return Result.success(page); + } + +} diff --git a/src/main/java/com/sa/zentao/dao/BusinessException.java b/src/main/java/com/sa/zentao/dao/BusinessException.java new file mode 100644 index 0000000..310a3ab --- /dev/null +++ b/src/main/java/com/sa/zentao/dao/BusinessException.java @@ -0,0 +1,17 @@ +package com.sa.zentao.dao; + + +public class BusinessException extends RuntimeException { + + + public BusinessException(Code code){ + super(code.getValue()); + this.code=code; + } + public BusinessException(String value){ + super(value); + this.value=value; + } + public String value; + public Code code; +} diff --git a/src/main/java/com/sa/zentao/dao/Code.java b/src/main/java/com/sa/zentao/dao/Code.java new file mode 100644 index 0000000..ec3e220 --- /dev/null +++ b/src/main/java/com/sa/zentao/dao/Code.java @@ -0,0 +1,38 @@ +package com.sa.zentao.dao; + +public enum Code { + SUCCESS(0, "成功"), + FAIL(-1, "失败"), + CFTJ(-2, "重复添加"), + PLEASELOGIN(401, "请登录"); + + private Integer code; + private String value; + + private Code(Integer code, String value) { + this.code = code; + this.value = value; + } + + public static Code trans(Integer code) { + Code[] var1 = values(); + int var2 = var1.length; + + for(int var3 = 0; var3 < var2; ++var3) { + Code val = var1[var3]; + if (val.getCode() == code) { + return val; + } + } + + throw new IllegalArgumentException(); + } + + public String getValue() { + return this.value; + } + + public Integer getCode() { + return this.code; + } +} \ No newline at end of file diff --git a/src/main/java/com/sa/zentao/dao/FestivalConfigDTO.java b/src/main/java/com/sa/zentao/dao/FestivalConfigDTO.java new file mode 100644 index 0000000..ac67dbc --- /dev/null +++ b/src/main/java/com/sa/zentao/dao/FestivalConfigDTO.java @@ -0,0 +1,86 @@ +package com.sa.zentao.dao; + +import com.sa.zentao.enums.DeleteFlagEnum; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * + *

+ * + * @author gqb + * @since 2023-03-20 + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class FestivalConfigDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + private Integer id; + + /** + * 名称 + */ + private String name; + + /** + * 哪一年 + */ + private String year; + + /** + * 假期 + */ + private String vacationDate; + + private String vacationDateValue; + + /** + * 补班 + */ + private String repairDate; + + private String repairDateValue; + + //f法定节假日 + private String legalVacationDate; + //f法定节假日 + private String legalVacationDateValue; + + /** + * 1删除 + */ + private DeleteFlagEnum deleteFlag; + + /** + * 创建 + */ + private Date createDate; + + /** + * 创建 + */ + private Integer createUser; + + /** + * 更新 + */ + private Date updateDate; + + /** + * 更新 + */ + private Integer updateUser; + + /** + * 天数 + */ + private Integer days; + + +} diff --git a/src/main/java/com/sa/zentao/dao/ProjectWorkDetailsDTO.java b/src/main/java/com/sa/zentao/dao/ProjectWorkDetailsDTO.java new file mode 100644 index 0000000..23f49b5 --- /dev/null +++ b/src/main/java/com/sa/zentao/dao/ProjectWorkDetailsDTO.java @@ -0,0 +1,40 @@ +package com.sa.zentao.dao; + +import com.alibaba.excel.annotation.ExcelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; +import java.math.BigDecimal; + +@Data +@EqualsAndHashCode(callSuper = false) +public class ProjectWorkDetailsDTO implements Serializable { + + @ExcelProperty(value = "项目",index =0) + private String projectName; + //完成需求总量 + @ExcelProperty(value = "完成需求总量",index =1) + private Integer finishCount; + //完成任务总量 + @ExcelProperty(value = "完成任务总量",index =2) + private Integer finishTaskCount; + //完成需求总工时 + @ExcelProperty(value = "完成需求总工时",index =3) + private BigDecimal storyTotalTime; + //实际产出工时 + @ExcelProperty(value = "实际产出工时",index =4) + private BigDecimal useStoryTotalTime; + //上月剩余未完成需求量 + + //已验收需求总量 + @ExcelProperty(value = "已验收需求总量",index =5) + private Integer ysTaskCount; + //验收通过率 + @ExcelProperty(value = "验收通过率",index =6) + private BigDecimal ysYesRate; + //验收不通过数量 + @ExcelProperty(value = "验收不通过数量",index =7) + private BigDecimal ysNoRate; + //验收情况备注 +} diff --git a/src/main/java/com/sa/zentao/dao/Result.java b/src/main/java/com/sa/zentao/dao/Result.java new file mode 100644 index 0000000..97a6def --- /dev/null +++ b/src/main/java/com/sa/zentao/dao/Result.java @@ -0,0 +1,75 @@ +package com.sa.zentao.dao; + +import java.io.Serializable; + +public class Result implements Serializable { + private Integer code; + private String message; + private T data; + + public Result() { + } + + public Result(Integer code, String message) { + this.code = code; + this.message = message; + } + + public Result(Integer code, String message, T data) { + this.code = code; + this.message = message; + this.data = data; + } + + public Result(Integer code) { + this.code = code; + } + + public static Result fail(Code c) { + if (c == null) { + c = Code.FAIL; + } + + return new Result(c.getCode(), c.getValue()); + } + + public static Result fail(String c) { + return new Result(-1, c); + } + + public static Result success() { + return new Result(Code.SUCCESS.getCode(), Code.SUCCESS.getValue()); + } + + public static Result success(Object data) { + return new Result(Code.SUCCESS.getCode(), Code.SUCCESS.getValue(), data); + } + + public Integer getCode() { + return this.code; + } + + public String getMessage() { + return this.message; + } + + public T getData() { + return this.data; + } + + public void setCode(final Integer code) { + this.code = code; + } + + public void setMessage(final String message) { + this.message = message; + } + + public void setData(final T data) { + this.data = data; + } + + public String toString() { + return "Result(code=" + this.getCode() + ", message=" + this.getMessage() + ", data=" + this.getData() + ")"; + } +} \ No newline at end of file diff --git a/src/main/java/com/sa/zentao/dao/ServerListDTO.java b/src/main/java/com/sa/zentao/dao/ServerListDTO.java new file mode 100644 index 0000000..a1e71aa --- /dev/null +++ b/src/main/java/com/sa/zentao/dao/ServerListDTO.java @@ -0,0 +1,16 @@ +package com.sa.zentao.dao; + +import lombok.Data; + +@Data +public class ServerListDTO { + private String ip; + private String name; + private Double cpu; + //内存 + private Double memory; + //负载 + private Double average; + //磁盘 + private Double disk; +} diff --git a/src/main/java/com/sa/zentao/dao/WorkDetailsDTO.java b/src/main/java/com/sa/zentao/dao/WorkDetailsDTO.java new file mode 100644 index 0000000..9db68fe --- /dev/null +++ b/src/main/java/com/sa/zentao/dao/WorkDetailsDTO.java @@ -0,0 +1,34 @@ +package com.sa.zentao.dao; + +import com.alibaba.excel.annotation.ExcelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; +import java.math.BigDecimal; + +@Data +@EqualsAndHashCode(callSuper = false) +public class WorkDetailsDTO implements Serializable { + + @ExcelProperty(value = "员工",index =0) + private String userName; + //任务总量 + @ExcelProperty(value = "任务总量",index =1) + private BigDecimal taskCount; + //需求总工时 + @ExcelProperty(value = "需求总工时",index =2) + private BigDecimal storyTotalTime; + //实际产出工时 + @ExcelProperty(value = "实际产出工时",index =3) + private BigDecimal workTime; + //可用工时 6*工作天数 + @ExcelProperty(value = "可用工时 ",index =4) + private BigDecimal haveTime; + //工作饱和度 + @ExcelProperty(value = "工作饱和度 ",index =5) + private BigDecimal saturation; + //产出线上Bug + @ExcelProperty(value = "产出线上Bug ",index =6) + private BigDecimal bugCount; +} diff --git a/src/main/java/com/sa/zentao/dao/ZtActionDTO.java b/src/main/java/com/sa/zentao/dao/ZtActionDTO.java new file mode 100644 index 0000000..dec6f43 --- /dev/null +++ b/src/main/java/com/sa/zentao/dao/ZtActionDTO.java @@ -0,0 +1,59 @@ +package com.sa.zentao.dao; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +/** + *

+ * + *

+ * + * @author gqb + * @since 2024-06-27 + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class ZtActionDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + @TableField("objectType") + private String objecttype; + + @TableField("objectID") + private Integer objectid; + + private String product; + + private Integer project; + + private Integer execution; + + private String actor; + + private String action; + private String actionValue; + private Date date; + + private String comment; + + private String extra; + + private String read; + + private String vision; + + private Boolean efforted; + + +} diff --git a/src/main/java/com/sa/zentao/dao/ZtBugDTO.java b/src/main/java/com/sa/zentao/dao/ZtBugDTO.java new file mode 100644 index 0000000..bcead0d --- /dev/null +++ b/src/main/java/com/sa/zentao/dao/ZtBugDTO.java @@ -0,0 +1,193 @@ +package com.sa.zentao.dao; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.sa.zentao.entity.ZtProject; +import com.sa.zentao.entity.ZtStory; +import com.sa.zentao.entity.ZtTask; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +/** + *

+ * + *

+ * + * @author gqb + * @since 2024-07-04 + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class ZtBugDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + private Integer project; + + private Integer product; + + private Integer injection; + + private Integer identify; + + private Integer branch; + + private Integer module; + + private Integer execution; + + private Integer plan; + + private Integer story; + + @TableField("storyVersion") + private Integer storyversion; + + private Integer task; + + @TableField("toTask") + private Integer totask; + + @TableField("toStory") + private Integer tostory; + + private String title; + + private String keywords; + + private Integer severity; + + private Integer pri; + + private String type; + + private String os; + + private String browser; + + private String hardware; + + private String found; + + private String steps; + + private String status; + + @TableField("subStatus") + private String substatus; + + private String color; + + private Boolean confirmed; + + @TableField("activatedCount") + private Integer activatedcount; + + @TableField("activatedDate") + private LocalDateTime activateddate; + + @TableField("feedbackBy") + private String feedbackby; + + @TableField("notifyEmail") + private String notifyemail; + + private String mailto; + + @TableField("openedBy") + private String openedby; + private String openedbyName; + @TableField("openedDate") + private Date openeddate; + + @TableField("openedBuild") + private String openedbuild; + + @TableField("assignedTo") + private String assignedto; + private String assignedtoName; + @TableField("assignedDate") + private Date assigneddate; + + private Date deadline; + + @TableField("resolvedBy") + private String resolvedby; + + private String resolution; + + @TableField("resolvedBuild") + private String resolvedbuild; + + @TableField("resolvedDate") + private Date resolveddate; + + @TableField("closedBy") + private String closedby; + + @TableField("closedDate") + private Date closeddate; + + @TableField("duplicateBug") + private Integer duplicatebug; + + @TableField("linkBug") + private String linkbug; + + private Integer caseId; + + @TableField("caseVersion") + private Integer caseversion; + + private Integer feedback; + + private Integer result; + + private Integer repo; + + private Integer mr; + + private String entry; + + private String lines; + + private String v1; + + private String v2; + + @TableField("repoType") + private String repotype; + + @TableField("issueKey") + private String issuekey; + + private Integer testtask; + + @TableField("lastEditedBy") + private String lasteditedby; + + @TableField("lastEditedDate") + private Date lastediteddate; + + private String deleted; + + private String fileUrl; + + private String remark; + + private ZtProject ztProject; + + private ZtProject ztExecution; + + private ZtStory ztStory; + + private ZtTask ztTask; +} diff --git a/src/main/java/com/sa/zentao/dao/ZtCaseDTO.java b/src/main/java/com/sa/zentao/dao/ZtCaseDTO.java new file mode 100644 index 0000000..c2182f8 --- /dev/null +++ b/src/main/java/com/sa/zentao/dao/ZtCaseDTO.java @@ -0,0 +1,145 @@ +package com.sa.zentao.dao; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.Date; +import java.util.List; + +/** + *

+ * + *

+ * + * @author gqb + * @since 2024-07-03 + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class ZtCaseDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + private Integer project; + + private Integer product; + + private Integer execution; + + private Integer branch; + + private Integer lib; + + private Integer module; + + private Integer path; + + private Integer story; + + @TableField("storyVersion") + private Integer storyversion; + + private String title; + + private String precondition; + + private String keywords; + + private Integer pri; + + private String type; + + private String auto; + + private String frame; + + private String stage; + + @TableField("howRun") + private String howrun; + + private String script; + + @TableField("scriptedBy") + private String scriptedby; + + @TableField("scriptedDate") + private LocalDate scripteddate; + + @TableField("scriptStatus") + private String scriptstatus; + + @TableField("scriptLocation") + private String scriptlocation; + + private String status; + + @TableField("subStatus") + private String substatus; + + private String color; + + private String frequency; + + private Integer order; + + @TableField("openedBy") + private String openedby; + + @TableField("openedDate") + private Date openeddate; + + @TableField("reviewedBy") + private String reviewedby; + + @TableField("reviewedDate") + private Date revieweddate; + + @TableField("lastEditedBy") + private String lasteditedby; + + @TableField("lastEditedDate") + private Date lastediteddate; + + private Integer version; + + @TableField("linkCase") + private String linkcase; + + @TableField("fromBug") + private Integer frombug; + + @TableField("fromCaseID") + private Integer fromcaseid; + + @TableField("fromCaseVersion") + private Integer fromcaseversion; + + private String deleted; + + @TableField("lastRunner") + private String lastrunner; + + @TableField("lastRunDate") + private LocalDateTime lastrundate; + + @TableField("lastRunResult") + private String lastrunresult; + + private Integer scene; + + private Integer sort; + + + List list; + +} diff --git a/src/main/java/com/sa/zentao/dao/ZtCasestepDTO.java b/src/main/java/com/sa/zentao/dao/ZtCasestepDTO.java new file mode 100644 index 0000000..82d8157 --- /dev/null +++ b/src/main/java/com/sa/zentao/dao/ZtCasestepDTO.java @@ -0,0 +1,43 @@ +package com.sa.zentao.dao; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; + +/** + *

+ * + *

+ * + * @author gqb + * @since 2024-07-03 + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class ZtCasestepDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + private Integer parent; + + private Integer caseId; + + private Integer version; + + private String type; + + private String desc; + + private String expect; + + //0失败 1成功 + private Integer status; + + private String caseResult; +} diff --git a/src/main/java/com/sa/zentao/dao/ZtCronDevopsDTO.java b/src/main/java/com/sa/zentao/dao/ZtCronDevopsDTO.java new file mode 100644 index 0000000..9666b33 --- /dev/null +++ b/src/main/java/com/sa/zentao/dao/ZtCronDevopsDTO.java @@ -0,0 +1,50 @@ +package com.sa.zentao.dao; + +import com.sa.zentao.entity.ZtCronDevopsUser; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; +import java.util.List; + +/** + *

+ * + *

+ * + * @author gqb + * @since 2024-10-22 + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class ZtCronDevopsDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + private Integer id; + + private String name; + + private String content; + + private String mail; + + private String phone; + + private String cron; + + private String createUser; + + private Date createDate; + + private Date updateDate; + + private String updateUser; + + //0正常 1关闭 + private Integer status; + + private List itemList; +} diff --git a/src/main/java/com/sa/zentao/dao/ZtEffortDTO.java b/src/main/java/com/sa/zentao/dao/ZtEffortDTO.java new file mode 100644 index 0000000..737e0cc --- /dev/null +++ b/src/main/java/com/sa/zentao/dao/ZtEffortDTO.java @@ -0,0 +1,67 @@ +package com.sa.zentao.dao; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; +import java.time.LocalDate; +import java.util.Date; +import java.util.List; + +/** + *

+ * + *

+ * + * @author gqb + * @since 2024-08-13 + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class ZtEffortDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + @TableField("objectType") + private String objecttype; + + @TableField("objectID") + private Integer objectid; + + private String product; + + private Integer project; + + private Integer execution; + + private String account; + + private String work; + + private String vision; + + private Date date; + + private Float left; + + private Float consumed; + + private Integer begin; + + private Integer end; + + private String extra; + + private Integer order; + + private String deleted; + + + private List list; +} diff --git a/src/main/java/com/sa/zentao/dao/ZtKanbanDTO.java b/src/main/java/com/sa/zentao/dao/ZtKanbanDTO.java new file mode 100644 index 0000000..d1f4693 --- /dev/null +++ b/src/main/java/com/sa/zentao/dao/ZtKanbanDTO.java @@ -0,0 +1,100 @@ +package com.sa.zentao.dao; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + *

+ * + *

+ * + * @author gqb + * @since 2024-07-09 + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class ZtKanbanDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + private Integer space; + + private String name; + + private String owner; + + private String team; + + private String desc; + + private String acl; + + private String whitelist; + + private String archived; + + private String performable; + + private String status; + + private Integer order; + + @TableField("displayCards") + private Integer displaycards; + + @TableField("showWIP") + private String showwip; + + @TableField("fluidBoard") + private String fluidboard; + + @TableField("colWidth") + private Integer colwidth; + + @TableField("minColWidth") + private Integer mincolwidth; + + @TableField("maxColWidth") + private Integer maxcolwidth; + + private String object; + + private String alignment; + + @TableField("createdBy") + private String createdby; + + @TableField("createdDate") + private LocalDateTime createddate; + + @TableField("lastEditedBy") + private String lasteditedby; + + @TableField("lastEditedDate") + private LocalDateTime lastediteddate; + + @TableField("closedBy") + private String closedby; + + @TableField("closedDate") + private LocalDateTime closeddate; + + @TableField("activatedBy") + private String activatedby; + + @TableField("activatedDate") + private LocalDateTime activateddate; + + private String deleted; + + +} diff --git a/src/main/java/com/sa/zentao/dao/ZtKanbancolumnDTO.java b/src/main/java/com/sa/zentao/dao/ZtKanbancolumnDTO.java new file mode 100644 index 0000000..d31099d --- /dev/null +++ b/src/main/java/com/sa/zentao/dao/ZtKanbancolumnDTO.java @@ -0,0 +1,65 @@ +package com.sa.zentao.dao; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.apache.poi.ss.formula.functions.T; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; + +/** + *

+ * + *

+ * + * @author gqb + * @since 2024-07-09 + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class ZtKanbancolumnDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + private Integer parent; + private String parentName; + private String type; + @TableField("`region`") + private Integer region; + @TableField("`group`") + private Integer group; + + private String name; + + private String color; + @TableField("`limit`") + private Integer limit; + @TableField("`order`") + private Integer order; + + private String archived; + + private String deleted; + + //行id + private Integer lane; + + //执行id + private Integer kanban; + + // 需求 ,任务 ,BUG + private String cards; + + private List list=new ArrayList(); + + private String cardType; + + private String same; +} diff --git a/src/main/java/com/sa/zentao/dao/ZtKanbanlaneDTO.java b/src/main/java/com/sa/zentao/dao/ZtKanbanlaneDTO.java new file mode 100644 index 0000000..5791ce0 --- /dev/null +++ b/src/main/java/com/sa/zentao/dao/ZtKanbanlaneDTO.java @@ -0,0 +1,56 @@ +package com.sa.zentao.dao; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; +import java.util.List; + +/** + *

+ * + *

+ * + * @author gqb + * @since 2024-07-09 + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class ZtKanbanlaneDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + private Integer execution; + @TableField("`type`") + private String type; + + private Integer region; + @TableField("`group`") + private Integer group; + + private String groupby; + + private String extra; + + private String name; + + private String color; + @TableField("`order`") + private Integer order; + + @TableField("lastEditedTime") + private Date lasteditedtime; + + private String deleted; + + private List list; + +} diff --git a/src/main/java/com/sa/zentao/dao/ZtModuleDTO.java b/src/main/java/com/sa/zentao/dao/ZtModuleDTO.java new file mode 100644 index 0000000..4811a5d --- /dev/null +++ b/src/main/java/com/sa/zentao/dao/ZtModuleDTO.java @@ -0,0 +1,54 @@ +package com.sa.zentao.dao; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; +import java.util.List; + +/** + *

+ * + *

+ * + * @author gqb + * @since 2024-08-05 + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class ZtModuleDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + private Integer root; + + private Integer branch; + + private String name; + + private Integer parent; + + private String path; + + private Integer grade; + + private Integer order; + + private String type; + + private Integer from; + + private String owner; + + private String collector; + + + private String deleted; + + private List list; +} diff --git a/src/main/java/com/sa/zentao/dao/ZtProductDTO.java b/src/main/java/com/sa/zentao/dao/ZtProductDTO.java new file mode 100644 index 0000000..0e28d57 --- /dev/null +++ b/src/main/java/com/sa/zentao/dao/ZtProductDTO.java @@ -0,0 +1,136 @@ +package com.sa.zentao.dao; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.List; + +/** + *

+ * + *

+ * + * @author gqb + * @since 2024-06-13 + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class ZtProductDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + private Integer program; + + private String name; + + private String code; + + private Boolean shadow; + + private String bind; + + private Integer line; + + private String type; + + private String status; + + @TableField("subStatus") + private String subStatus; + + private String desc; + + @TableField("PO") + private String po; + + @TableField(exist = false) + private String pm; + @TableField("QD") + private String qd; + + @TableField("RD") + private String rd; + + private String feedback; + + private String ticket; + + private String acl; + + private String whitelist; + + private String reviewer; + + @TableField("PMT") + private String pmt; + + @TableField("draftStories") + private Integer draftStories; + + @TableField("activeStories") + private Integer activeStories; + + @TableField("changingStories") + private Integer changingStories; + + @TableField("reviewingStories") + private Integer reviewingStories; + + @TableField("finishedStories") + private Integer finishedStories; + + @TableField("closedStories") + private Integer closedStories; + + @TableField("totalStories") + private Integer totalStories; + + @TableField("unresolvedBugs") + private Integer unresolvedBugs; + + @TableField("closedBugs") + private Integer closedBugs; + + @TableField("fixedBugs") + private Integer fixedBugs; + + @TableField("totalBugs") + private Integer totalBugs; + + private Integer plans; + + private Integer releases; + + @TableField("createdBy") + private String createdBy; + + @TableField("createdDate") + private LocalDateTime createdDate; + + @TableField("createdVersion") + private String createdVersion; + + @TableField("closedDate") + private LocalDate closedDate; + + private Integer order; + + private String vision; + + private String deleted; + + private String poValue; + + private List approvalList; + + private List authList; +} diff --git a/src/main/java/com/sa/zentao/dao/ZtProjectDTO.java b/src/main/java/com/sa/zentao/dao/ZtProjectDTO.java new file mode 100644 index 0000000..12c5584 --- /dev/null +++ b/src/main/java/com/sa/zentao/dao/ZtProjectDTO.java @@ -0,0 +1,224 @@ +package com.sa.zentao.dao; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.Date; +import java.util.List; + +/** + *

+ * + *

+ * + * @author gqb + * @since 2024-06-13 + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class ZtProjectDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + private Integer project; + + private List projectList; + + private Integer charter; + + private String model; + // program 项目集 project 项目 sprint 执行 + private String type; + + private String category; + + private String lifetime; + + private String budget; + + @TableField("budgetUnit") + private String budgetUnit; + + private String attribute; + + private Float percent; + + private String milestone; + + private String output; + + private String auth; + + private List authList; + + private Integer parent; + + private String path; + + private Integer grade; + + private String name; + + + private String projectName; + + private String code; + + @TableField("hasProduct") + private Boolean hasProduct; + + private Date begin; + + private Date end; + + @TableField("firstEnd") + private Date firstEnd; + + @TableField("realBegan") + private Date realBegan; + + @TableField("realEnd") + private Date realEnd; + + private Integer days; + + private String status; + + @TableField("subStatus") + private String subStatus; + + private String pri; + + private String desc; + + private Integer version; + + @TableField("parentVersion") + private Integer parentVersion; + + @TableField("planDuration") + private Integer planDuration; + + @TableField("realDuration") + private Integer realDuration; + + private BigDecimal progress; + + private Float estimate; + + private Float plan; + + private Float left; + + private Float consumed; + + @TableField("teamCount") + private Integer teamCount; + + private Integer market; + + @TableField("openedBy") + private String openedBy; + + @TableField("openedDate") + private Date openedDate; + + @TableField("openedVersion") + private String openedVersion; + + @TableField("lastEditedBy") + private String lastEditedBy; + + @TableField("lastEditedDate") + private Date lastEditedDate; + + @TableField("closedBy") + private String closedBy; + + @TableField("closedDate") + private Date closedDate; + + @TableField("closedReason") + private String closedReason; + + @TableField("canceledBy") + private String canceledBy; + + @TableField("canceledDate") + private Date canceledDate; + + @TableField("suspendedDate") + private Date suspendedDate; + + @TableField("PO") + private String po; + + private String poValue; + + @TableField("PM") + private String pm; + + @TableField("QD") + private String qd; + + @TableField("RD") + private String rd; + + private String team; + + private String acl; + + private String whitelist; + + private Integer order; + + private String vision; + + private String division; + + @TableField("displayCards") + private Integer displayCards; + + @TableField("fluidBoard") + private String fluidBoard; + + private String multiple; + + @TableField("colWidth") + private Integer colWidth; + + @TableField("minColWidth") + private Integer minColWidth; + + @TableField("maxColWidth") + private Integer maxColWidth; + + private String deleted; + + private List children; + + private List storyIds; + +// private boolean hasChildren=false; + + private List productIds; + + private Integer productId; + private String productName; + private Integer excludeId; + + private List teamList; + + + +} diff --git a/src/main/java/com/sa/zentao/dao/ZtStoryCountDTO.java b/src/main/java/com/sa/zentao/dao/ZtStoryCountDTO.java new file mode 100644 index 0000000..d655015 --- /dev/null +++ b/src/main/java/com/sa/zentao/dao/ZtStoryCountDTO.java @@ -0,0 +1,47 @@ +package com.sa.zentao.dao; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; + +/** + *

+ * BOSS 刘总 人事待评审 评审通过 进行中 延期 测试完成 上线待验收 验收不通过 验收通过 + *

+ * + * @author gqb + * @since 2024-06-24 + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class ZtStoryCountDTO implements Serializable { + + //待评审 + private BigDecimal dpsCount; + + //评审通过 + private BigDecimal pstgCount; + + //进行中 + private BigDecimal jxzCount; + //延期 + private BigDecimal yqCount; + //测试完毕 + private BigDecimal cswbCount; + //上线待验收 + private BigDecimal dysCount; + //验收不通过 + private BigDecimal ysNoCount; + //验收通过 + private BigDecimal ysYesCount; + + //bug量 + private BigDecimal bugCount; +} diff --git a/src/main/java/com/sa/zentao/dao/ZtStoryDTO.java b/src/main/java/com/sa/zentao/dao/ZtStoryDTO.java new file mode 100644 index 0000000..7ef6fdb --- /dev/null +++ b/src/main/java/com/sa/zentao/dao/ZtStoryDTO.java @@ -0,0 +1,235 @@ +package com.sa.zentao.dao; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.sa.zentao.entity.ZtStoryreview; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.Date; +import java.util.List; + +/** + *

+ * + *

+ * + * @author gqb + * @since 2024-06-24 + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class ZtStoryDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + private List idList; + + private String vision; + + private Integer parent; + + private Integer product; + + private Integer branch; + + private Integer module; + + private String plan; + + private String source; + + @TableField("sourceNote") + private String sourceNote; + + @TableField("fromBug") + private Integer frombug; + + private Integer feedback; + + private String title; + + private String keywords; + + private String type; + + private String category; + + private Integer pri; + + private Float estimate; + + private String status; + + @TableField("subStatus") + private String substatus; + + private String color; +// +// {key:'研发中',value:'developing'} +// ,{key:'研发完毕',value:'developed'} +// ,{key:'测试中',value:'testing'} +// ,{key:'测试完毕',value:'tested'} +// ,{key:'已验收',value:'verified'} +// ,{key:'已发布',value:'released'} +// ,{key:'已关闭',value:'closed'} + private String stage; + + @TableField("stagedBy") + private String stagedby; + + private String mailto; + + private Integer lib; + + @TableField("fromStory") + private Integer fromstory; + + @TableField("fromVersion") + private Integer fromversion; + + @TableField("openedBy") + private String openedby; + private String openedbyName; + @TableField("openedDate") + private Date openeddate; + + @TableField("assignedTo") + private String assignedTo; + private String assignedToName; + @TableField("assignedDate") + private Date assigneddate; + + @TableField("approvedDate") + private Date approveddate; + + @TableField("lastEditedBy") + private String lasteditedby; + + @TableField("lastEditedDate") + private Date lastediteddate; + + @TableField("changedBy") + private String changedby; + + @TableField("changedDate") + private Date changeddate; + + @TableField("reviewedBy") + private String reviewedby; + + private String revieweUser; + + private Integer revieweResult; + + @TableField("reviewedDate") + private Date revieweddate; + + @TableField("releasedDate") + private Date releaseddate; + + @TableField("closedBy") + private String closedby; + + @TableField("closedDate") + private Date closeddate; + + @TableField("closedReason") + private String closedreason; + + @TableField("activatedDate") + private Date activateddate; + + @TableField("toBug") + private Integer tobug; + + @TableField("childStories") + private String childstories; + + @TableField("linkStories") + private String linkstories; + + @TableField("linkRequirements") + private String linkrequirements; + + private String twins; + + @TableField("duplicateStory") + private Integer duplicatestory; + + private Integer version; + + @TableField("storyChanged") + private String storychanged; + + @TableField("feedbackBy") + private String feedbackby; + + @TableField("notifyEmail") + private String notifyemail; + + @TableField("BSA") + private String bsa; + + private String duration; + + private Integer demand; + + //描述 + private String desc; + + @TableField("submitedBy") + private String submitedby; + + private String roadmap; + + @TableField("URChanged") + private String urchanged; + + private String deleted; + + private List userViewId; + + private String remark; + + + private List views; + + private String fileUrl; + private String verify; + private String spec; + //计划开始时间 + private Date planStartDate; + //计划结束时间 + private Date planEndDate; + //开始日期 + private Date startDate; + //结束日期 + private Date endDate; + + private Integer project; + + private List projects; + + private String files; + + //1通过 2不通过 + private Integer ysFlag; + + private Integer execution; + + private Boolean psFlag; + + private String executionName; + + private Integer feedbackId; + + private Integer userStory; +} diff --git a/src/main/java/com/sa/zentao/dao/ZtStoryFeedbackDTO.java b/src/main/java/com/sa/zentao/dao/ZtStoryFeedbackDTO.java new file mode 100644 index 0000000..c84b742 --- /dev/null +++ b/src/main/java/com/sa/zentao/dao/ZtStoryFeedbackDTO.java @@ -0,0 +1,78 @@ +package com.sa.zentao.dao; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +/** + *

+ * + *

+ * + * @author gqb + * @since 2024-10-15 + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class ZtStoryFeedbackDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + private Integer id; + + /** + * 名称 + */ + private String name; + + /** + * 备注 + */ + private String remark; + + /** + * 文件,隔开 + */ + private String files; + + private String openedBy; + + private String openedByName; + private Date openedDate; + + private Date updateDate; + + private String updateUser; + + /** + * 需求d + */ + private Integer storyId; + private String storyName; + /** + * 来源 + */ + private String source; + + private Date planEndDate; + + private String assignedTo; + + private String assignedToName; + + private String spec; + + // wait finish close + private String status; + + private String fileUrl; + + private Integer type; + + private String closeRemark; + + private Integer product; +} diff --git a/src/main/java/com/sa/zentao/dao/ZtStoryUserDTO.java b/src/main/java/com/sa/zentao/dao/ZtStoryUserDTO.java new file mode 100644 index 0000000..0e6db6f --- /dev/null +++ b/src/main/java/com/sa/zentao/dao/ZtStoryUserDTO.java @@ -0,0 +1,203 @@ +package com.sa.zentao.dao; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.Date; + +/** + *

+ * + *

+ * + * @author gqb + * @since 2024-10-21 + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class ZtStoryUserDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + private String vision; + + private Integer parent; + + private Integer product; + + private Integer project; + + private Integer branch; + + private Integer module; + + private String plan; + + private String source; + + @TableField("sourceNote") + private String sourcenote; + + @TableField("fromBug") + private Integer frombug; + + private Integer feedback; + + private String title; + + private String keywords; + + private String type; + + private String category; + + private Integer pri; + + private Float estimate; + + private String status; + + @TableField("subStatus") + private String substatus; + + private String color; + + private String stage; + + @TableField("stagedBy") + private String stagedby; + + private String mailto; + + private Integer lib; + + @TableField("fromStory") + private Integer fromstory; + + @TableField("fromVersion") + private Integer fromversion; + + @TableField("openedBy") + private String openedby; + + @TableField("openedDate") + private LocalDateTime openeddate; + + @TableField("assignedTo") + private String assignedto; + + @TableField("assignedDate") + private Date assigneddate; + + @TableField("approvedDate") + private Date approveddate; + + @TableField("lastEditedBy") + private String lasteditedby; + + @TableField("lastEditedDate") + private Date lastediteddate; + + @TableField("changedBy") + private String changedby; + + @TableField("changedDate") + private Date changeddate; + + @TableField("reviewedBy") + private String reviewedby; + + @TableField("reviewedDate") + private Date revieweddate; + + @TableField("releasedDate") + private Date releaseddate; + + @TableField("closedBy") + private String closedby; + + @TableField("closedDate") + private Date closeddate; + + @TableField("closedReason") + private String closedreason; + + @TableField("activatedDate") + private Date activateddate; + + @TableField("toBug") + private Integer tobug; + + @TableField("childStories") + private String childstories; + + @TableField("linkStories") + private String linkstories; + + @TableField("linkRequirements") + private String linkrequirements; + + private String twins; + + @TableField("duplicateStory") + private Integer duplicatestory; + + private Integer version; + + @TableField("storyChanged") + private String storychanged; + + @TableField("feedbackBy") + private String feedbackby; + + @TableField("notifyEmail") + private String notifyemail; + + @TableField("BSA") + private String bsa; + + private String duration; + + private Integer demand; + + @TableField("submitedBy") + private String submitedby; + + private String roadmap; + + @TableField("URChanged") + private String urchanged; + + private String deleted; + + private Date planStartDate; + + private Date planEndDate; + + private Date startDate; + + private Date endDate; + + /** + * 1通过 2不通过 + */ + private Integer ysFlag; + + + private String spec; + + private String fileUrl; + + private String remark; + + private String storyList; +} diff --git a/src/main/java/com/sa/zentao/dao/ZtStoryreviewDTO.java b/src/main/java/com/sa/zentao/dao/ZtStoryreviewDTO.java new file mode 100644 index 0000000..7bc0730 --- /dev/null +++ b/src/main/java/com/sa/zentao/dao/ZtStoryreviewDTO.java @@ -0,0 +1,39 @@ +package com.sa.zentao.dao; + +import com.baomidou.mybatisplus.annotation.TableField; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * + *

+ * + * @author gqb + * @since 2024-06-24 + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class ZtStoryreviewDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + private Integer story; + + private Integer version; + + private String reviewer; + + private String result; + + @TableField("reviewDate") + private Date reviewdate; + + private String reviewerName; + public String getKey(){ + return version+"-"+story; + } +} diff --git a/src/main/java/com/sa/zentao/dao/ZtTaskDTO.java b/src/main/java/com/sa/zentao/dao/ZtTaskDTO.java new file mode 100644 index 0000000..19adc96 --- /dev/null +++ b/src/main/java/com/sa/zentao/dao/ZtTaskDTO.java @@ -0,0 +1,175 @@ +package com.sa.zentao.dao; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.Date; +import java.util.List; + +/** + *

+ * + *

+ * + * @author gqb + * @since 2024-06-25 + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class ZtTaskDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + private Integer project; + + private Integer parent; + + private Integer execution; + + private Integer module; + + private Integer design; + + private Integer story; + + @TableField("storyVersion") + private Integer storyversion; + + @TableField("designVersion") + private Integer designversion; + + @TableField("fromBug") + private Integer frombug; + + private Integer feedback; + + @TableField("fromIssue") + private Integer fromissue; + + private String name; + + private String type; + + private String mode; + + private Integer pri; + + private Float estimate; + + private Float consumed; + + private Float left; + + private Date deadline; + + private String status; + + @TableField("subStatus") + private String substatus; + + private String color; + + private String mailto; + + private String desc; + + private Integer version; + + @TableField("openedBy") + private String openedby; + + @TableField("openedDate") + private Date openeddate; + + @TableField("assignedTo") + private String assignedTo; + private String assignedToName; + @TableField("assignedDate") + private Date assignedDate; + + @TableField("estStarted") + private Date estStarted; + + @TableField("realStarted") + private Date realstarted; + + @TableField("finishedBy") + private String finishedby; + private String finishedbyName; + @TableField("finishedDate") + private Date finishedDate; + + @TableField("finishedList") + private String finishedlist; + + @TableField("canceledBy") + private String canceledby; + + @TableField("canceledDate") + private Date canceleddate; + + @TableField("closedBy") + private String closedby; + + @TableField("closedDate") + private Date closeddate; + + @TableField("planDuration") + private Integer planduration; + + @TableField("realDuration") + private Integer realduration; + + @TableField("closedReason") + private String closedreason; + + @TableField("lastEditedBy") + private String lasteditedby; + + @TableField("lastEditedDate") + private Date lastediteddate; + + @TableField("activatedDate") + private Date activateddate; + + private Integer order; + + private Integer repo; + + private Integer mr; + + private String entry; + + private String lines; + + private String v1; + + private String v2; + + private String deleted; + + private String vision; + + + private String statusType; + + private String tabType; + private Integer moveId; + private Integer fromId; + private Integer toId; + + private String remark; + + private String files; + + private List list; +} diff --git a/src/main/java/com/sa/zentao/dao/ZtTesttaskDTO.java b/src/main/java/com/sa/zentao/dao/ZtTesttaskDTO.java new file mode 100644 index 0000000..d09b0cf --- /dev/null +++ b/src/main/java/com/sa/zentao/dao/ZtTesttaskDTO.java @@ -0,0 +1,84 @@ +package com.sa.zentao.dao; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * + *

+ * + * @author gqb + * @since 2024-07-17 + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class ZtTesttaskDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + private Integer project; + private String projectName; + private Integer product; + private String productName; + @TableField("`name`") + private String name; + + private Integer execution; + + private String build; + + private String type; + + @TableField("`owner`") + private String owner; + + private Integer pri; + + @TableField("`begin`") + private Date begin; + + @TableField("`end`") + private Date end; + + @TableField("realFinishedDate") + private Date realfinisheddate; + + private String mailto; + + @TableField("`desc`") + private String desc; + + private String report; + + private String members; + + @TableField("`status`") + private String status; + + private Integer testreport; + + private String auto; + + @TableField("subStatus") + private String substatus; + + @TableField("createdBy") + private String createdby; + + @TableField("createdDate") + private Date createddate; + + private String deleted; + + +} diff --git a/src/main/java/com/sa/zentao/dao/ZtUserDTO.java b/src/main/java/com/sa/zentao/dao/ZtUserDTO.java new file mode 100644 index 0000000..e1defb4 --- /dev/null +++ b/src/main/java/com/sa/zentao/dao/ZtUserDTO.java @@ -0,0 +1,133 @@ +package com.sa.zentao.dao; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.sa.zentao.enums.UserType; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +/** + *

+ * + *

+ * + * @author gqb + * @since 2024-06-18 + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class ZtUserDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + private Integer company; + + private String type; + + private Integer dept; + + private String account; + + @TableField("`password`") + private String password; + + private String role; + + private String realname; + + private String pinyin; + + private String nickname; + + private String commiter; + + private String avatar; + + private Date birthday; + + private String gender; + + private String email; + + private String skype; + + private String qq; + + private String mobile; + + private String phone; + + private String weixin; + + private String dingding; + + private String slack; + + private String whatsapp; + + private String address; + + private String zipcode; + + private String nature; + + private String analysis; + + private String strategy; + + @TableField("`join`") + private Date join; + + private Integer visits; + + private String visions; + + private String ip; + + private Integer last; + + private Integer fails; + + private Date locked; + + private String feedback; + + private String ranzhi; + + private String ldap; + + private Integer score; + + @TableField("scoreLevel") + private Integer scoreLevel; + + @TableField("resetToken") + private String resetToken; + + private String deleted; + + @TableField("clientStatus") + private String clientStatus; + + @TableField("clientLang") + private String clientLang; + + private String token; + + private UserType userType; + + private String userTypeValue; + + private List productList; + private String productIds; + private String productNames; + +} diff --git a/src/main/java/com/sa/zentao/dao/ZtYwBackupsDTO.java b/src/main/java/com/sa/zentao/dao/ZtYwBackupsDTO.java new file mode 100644 index 0000000..e4d06f8 --- /dev/null +++ b/src/main/java/com/sa/zentao/dao/ZtYwBackupsDTO.java @@ -0,0 +1,67 @@ +package com.sa.zentao.dao; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +/** + *

+ * + *

+ * + * @author gqb + * @since 2024-11-18 + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class ZtYwBackupsDTO implements Serializable { + + private static final long serialVersionUID = 1L; + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + /** + * 系统名称 + */ + private String name; + + /** + * 备份日期 + */ + private Date backupsDate; + + /** + * 备份文件名称 + */ + private String backupsFileName; + + /** + * 文件存储 + */ + private String saveRemark; + + /** + * 文件大小 + */ + private Double fileSize; + + /** + * 是否正常 + */ + private Integer normalFlag; + + /** + * 异常描述 + */ + private String errorRemark; + + private Date createDate; + + private String createUser; + + +} diff --git a/src/main/java/com/sa/zentao/dao/ZtYwChangeDTO.java b/src/main/java/com/sa/zentao/dao/ZtYwChangeDTO.java new file mode 100644 index 0000000..bc367d8 --- /dev/null +++ b/src/main/java/com/sa/zentao/dao/ZtYwChangeDTO.java @@ -0,0 +1,113 @@ +package com.sa.zentao.dao; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * + *

+ * + * @author gqb + * @since 2024-11-19 + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class ZtYwChangeDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + /** + * 申请日期 + */ + private Date applyDate; + + /** + * 变更内容 + */ + private String changeContent; + + /** + * 便跟范围 + */ + private String changeRange; + + /** + * 期望实施时间 + */ + private Date effectDate; + + /** + * 风险等级 123 中低搞 + */ + private String level; + + /** + * 应急方案 + */ + private String emergencyPlan; + + /** + * 审批中 审批通过 实施中 实施完成 + */ + private Integer changeStatus; + + /** + * 同意 不同意 + */ + private String result; + + /** + * 审批人 + */ + private String approvalUser; + + /** + * 审批日期 + */ + private Date approvalDate; + + /** + * 变更实施日期 + */ + private Date changeEffectDate; + + /** + * 变更实施结果 + */ + private String changeEffectResult; + private String changeEffectUser; + /** + * 1不通过 0通过 + */ + private String ysFlag; + + /** + * 验收备注 + */ + private String ysRemark; + + /** + * 验收人 + */ + private String ysUser; + + /** + * 验收日期 + */ + private Date ysDate; + + + private Date createDate; + + private String createUser; + +} diff --git a/src/main/java/com/sa/zentao/dao/ZtYwFaultDTO.java b/src/main/java/com/sa/zentao/dao/ZtYwFaultDTO.java new file mode 100644 index 0000000..7da45d5 --- /dev/null +++ b/src/main/java/com/sa/zentao/dao/ZtYwFaultDTO.java @@ -0,0 +1,54 @@ +package com.sa.zentao.dao; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * + *

+ * + * @author gqb + * @since 2024-11-19 + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class ZtYwFaultDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + private String eventName; + + private String eventRemark; + + private String eventLevel; + + private String eventRange; + + private String eventHandle; + + + private Date repairStartDate; + + private Date repairEndDate; +//发生原因分析 + private String analyse; + + private Date createDate; + + private String createUser; + + private String userName; + // 后续处理结果 + private String result; + //最终结果 + private String lastResult; +} diff --git a/src/main/java/com/sa/zentao/dao/ZtYwFwqsearchDTO.java b/src/main/java/com/sa/zentao/dao/ZtYwFwqsearchDTO.java new file mode 100644 index 0000000..ddf0f09 --- /dev/null +++ b/src/main/java/com/sa/zentao/dao/ZtYwFwqsearchDTO.java @@ -0,0 +1,67 @@ +package com.sa.zentao.dao; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; +import java.util.List; + +/** + *

+ * + *

+ * + * @author gqb + * @since 2024-11-19 + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class ZtYwFwqsearchDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + private Integer id; + + private String name; + + /** + * 1正常 0异常网络 + */ + private Integer networkError; + private Integer network; + /** + * 资源服务器是否异常 + */ + private Integer serverError; + + /** + * 资源异常描述 + */ + private String serverRemark; + + /** + * 是否有报警 + */ + private Integer alarmError; + + /** + * 描述 + */ + private String alarmRemark; + + /** + * 报警内容 + */ + private String alarmContent; + + private Date createDate; + + private String createUser; + + private String ipJson; + + private List serverList; + +} diff --git a/src/main/java/com/sa/zentao/dao/ZtYwMachineRoomDTO.java b/src/main/java/com/sa/zentao/dao/ZtYwMachineRoomDTO.java new file mode 100644 index 0000000..ca82c2c --- /dev/null +++ b/src/main/java/com/sa/zentao/dao/ZtYwMachineRoomDTO.java @@ -0,0 +1,91 @@ +package com.sa.zentao.dao; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * + *

+ * + * @author gqb + * @since 2024-11-19 + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class ZtYwMachineRoomDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + private Integer id; + + private String roomName; + + /** + * 巡检日期 + */ + private Date inspectDate; + + /** + * 巡检人 + */ + private String inspectUser; + + /** + * 温度 + */ + private String temperature; + + /** + * 湿度 + */ + private String humidity; + + /** + * 服务器情况 正常 异常 + */ + private Integer errorFlag; + + /** + * 服务器异常描述 + */ + private String errorRemark; + + /** + * 网络异常 + */ + private Integer networkFlag; + + /** + * 网络异常描述 + */ + private String networkRemark; + + /** + * ups是否异常 + */ + private Integer upsFlag; + + /** + * ups异常描述 + */ + private String upsRemark; + + /** + * 消防是否异常 + */ + private Integer xiaofangFlag; + + /** + * 消防异常描述 + */ + private String xiaofangRemark; + + private String url; + private String createUser; + private Date createDate; + +} diff --git a/src/main/java/com/sa/zentao/dao/ZtYwPatrolDTO.java b/src/main/java/com/sa/zentao/dao/ZtYwPatrolDTO.java new file mode 100644 index 0000000..af82db6 --- /dev/null +++ b/src/main/java/com/sa/zentao/dao/ZtYwPatrolDTO.java @@ -0,0 +1,77 @@ +package com.sa.zentao.dao; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * + *

+ * + * @author gqb + * @since 2024-11-18 + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class ZtYwPatrolDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + private Integer id; + + /** + * 巡检日期 + */ + private Date patrolDate; + + private String patrolUser; + private String patrolUserName; + /** + * 是否使用电器 + */ + private Integer dqFlag; + + private String dqRemark; + + /** + * 是否违规wifi + */ + private Integer wifiFlag; + + private String wifiRemark; + + /** + * 私拉电线 + */ + private Integer dxFlag; + + private String dxRemark; + + /** + * 桌面整洁 + */ + private Integer zmzjFlag; + + private String zmzjRemark; + + /** + * 安全风险 + */ + private Integer safeFlag; + + private String safeRemark; + + /** + * 连接 + */ + private String url; + + + private Date createDate; + + private String createUser; + +} diff --git a/src/main/java/com/sa/zentao/dao/ZtYwTaskDTO.java b/src/main/java/com/sa/zentao/dao/ZtYwTaskDTO.java new file mode 100644 index 0000000..6c831bc --- /dev/null +++ b/src/main/java/com/sa/zentao/dao/ZtYwTaskDTO.java @@ -0,0 +1,98 @@ +package com.sa.zentao.dao; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * + *

+ * + * @author gqb + * @since 2024-11-19 + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class ZtYwTaskDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + /** + * 任务事项 + */ + private String name; + + /** + * 任务描述 + */ + private String remark; + + /** + * 任务提醒时间 + */ + private Date taskRemindDate; + + /** + * 任务开始时间 + */ + private Date taskStartDate; + + /** + * 任务结束时间 + */ + private Date taskEndDate; + + /** + * 所属人归属人负责人 + */ + private String belongToUser; + + /** + * 邮箱 + */ + private String mail; + + /** + * 状态 1.等待中 2.已提醒 3.进行中 4.已完成 + */ + private Integer taskStatus; + private String result; + /** + * 任务完成时间 + */ + private Date finishDate; + + /** + * 验收物 + */ + private String deliver; + + /** + * 1.不通过 0通过 + */ + private Integer ysFlag; + + /** + * 验收人 + */ + private String ysUser; + + /** + * 验收日期 + */ + private Date ysDate; + + private Date createDate; + + private String createUser; + + private String copyToUser; + private String copyMail; +} diff --git a/src/main/java/com/sa/zentao/entity/FestivalConfig.java b/src/main/java/com/sa/zentao/entity/FestivalConfig.java new file mode 100644 index 0000000..0e0cc78 --- /dev/null +++ b/src/main/java/com/sa/zentao/entity/FestivalConfig.java @@ -0,0 +1,62 @@ +package com.sa.zentao.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import java.time.LocalDateTime; +import java.io.Serializable; +import java.util.Date; + +import com.sa.zentao.enums.DeleteFlagEnum; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + *

+ * + *

+ * + * @author gqb + * @since 2024-09-02 + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class FestivalConfig implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + private String name; + + private Integer year; + + /** + * 假期 + */ + private String vacationDate; + + /** + * 补班 + */ + private String repairDate; + + private DeleteFlagEnum deleteFlag; + + private Date createDate; + + private Integer createUser; + + private Date updateDate; + + private Integer updateUser; + + private Integer days; + + /** + * 法定节假日 + */ + private String legalVacationDate; + + +} diff --git a/src/main/java/com/sa/zentao/entity/VerificationCode.java b/src/main/java/com/sa/zentao/entity/VerificationCode.java new file mode 100644 index 0000000..05d3767 --- /dev/null +++ b/src/main/java/com/sa/zentao/entity/VerificationCode.java @@ -0,0 +1,44 @@ +package com.sa.zentao.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import java.time.LocalDateTime; +import java.io.Serializable; +import lombok.Data; +import lombok.EqualsAndHashCode; + + +/** + *

+ * + *

+ * + * @author gqb + * @since 2024-09-14 + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class VerificationCode implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + /** + * 手机号 + */ + private String phoneNumber; + + /** + * 验证码 + */ + private String code; + + /** + * 有效期 + */ + private LocalDateTime expirationTime; + + +} diff --git a/src/main/java/com/sa/zentao/entity/ZtAction.java b/src/main/java/com/sa/zentao/entity/ZtAction.java new file mode 100644 index 0000000..4c81370 --- /dev/null +++ b/src/main/java/com/sa/zentao/entity/ZtAction.java @@ -0,0 +1,59 @@ +package com.sa.zentao.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.TableField; +import java.io.Serializable; +import java.util.Date; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + *

+ * + *

+ * + * @author gqb + * @since 2024-06-27 + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class ZtAction implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + @TableField("objectType") + private String objecttype; + + @TableField("objectID") + private Integer objectid; + + private String product; + + private Integer project; + + private Integer execution; + + private String actor; + + private String action; + + private Date date; + @TableField("`comment`") + private String comment; + + private String extra; + @TableField("`read`") + private String read; + + private String vision; + + private Boolean efforted; + + +} diff --git a/src/main/java/com/sa/zentao/entity/ZtActionrecent.java b/src/main/java/com/sa/zentao/entity/ZtActionrecent.java new file mode 100644 index 0000000..1f9182a --- /dev/null +++ b/src/main/java/com/sa/zentao/entity/ZtActionrecent.java @@ -0,0 +1,57 @@ +package com.sa.zentao.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.TableField; +import java.io.Serializable; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + *

+ * + *

+ * + * @author gqb + * @since 2024-06-27 + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class ZtActionrecent implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + @TableField("objectType") + private String objecttype; + + @TableField("objectID") + private Integer objectid; + + private String product; + + private Integer project; + + private Integer execution; + + private String actor; + + private String action; + + private LocalDateTime date; + + private String comment; + + private String extra; + + private String read; + + private String vision; + + private Boolean efforted; + + +} diff --git a/src/main/java/com/sa/zentao/entity/ZtBug.java b/src/main/java/com/sa/zentao/entity/ZtBug.java new file mode 100644 index 0000000..246b4fb --- /dev/null +++ b/src/main/java/com/sa/zentao/entity/ZtBug.java @@ -0,0 +1,193 @@ +package com.sa.zentao.entity; + +import com.baomidou.mybatisplus.annotation.FieldStrategy; +import com.baomidou.mybatisplus.annotation.IdType; +import java.time.LocalDate; +import com.baomidou.mybatisplus.annotation.TableId; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.TableField; +import java.io.Serializable; +import java.util.Date; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + *

+ * + *

+ * + * @author gqb + * @since 2024-07-04 + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class ZtBug implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + private Integer project; + + private Integer product; + + private Integer injection; + + private Integer identify; + + private Integer branch; + + private Integer module; + + private Integer execution; + + private Integer plan; + + private Integer story; + + @TableField("storyVersion") + private Integer storyversion; + + private Integer task; + + @TableField(value="toTask",updateStrategy = FieldStrategy.IGNORED) + private Integer totask; + + @TableField("toStory") + private Integer tostory; + + private String title; + + private String keywords; + + private Integer severity; + + private Integer pri; + + private String type; + + private String os; + + private String browser; + + private String hardware; + + private String found; + + private String steps; + +// unconfirmed +// confirmed +// fixing +// fixed +// testing +// tested +// closed + //1.active 2.confire=1 3.解决进行中 不变 4 resolved 完成 5.测试中不变 6.测试完毕不变 + @TableField("`status`") + private String status; + + @TableField("subStatus") + private String substatus; + + private String color; + + private Boolean confirmed; + + @TableField("activatedCount") + private Integer activatedcount; + + @TableField("activatedDate") + private Date activateddate; + + @TableField("feedbackBy") + private String feedbackby; + + @TableField("notifyEmail") + private String notifyemail; + + private String mailto; + + @TableField("openedBy") + private String openedby; + + @TableField("openedDate") + private Date openeddate; + + @TableField("openedBuild") + private String openedbuild; + + @TableField("assignedTo") + private String assignedto; + + @TableField("assignedDate") + private Date assigneddate; + + private Date deadline; + + @TableField("resolvedBy") + private String resolvedby; + + private String resolution; + + @TableField("resolvedBuild") + private String resolvedbuild; + + @TableField("resolvedDate") + private Date resolveddate; + + @TableField("closedBy") + private String closedby; + + @TableField("closedDate") + private Date closeddate; + + @TableField("duplicateBug") + private Integer duplicatebug; + + @TableField("linkBug") + private String linkbug; + + @TableField("caseId") + private Integer caseId; + + @TableField("caseVersion") + private Integer caseversion; + + private Integer feedback; + + private Integer result; + + private Integer repo; + + private Integer mr; + + private String entry; + @TableField("`lines`") + private String lines; + + private String v1; + + private String v2; + + @TableField("repoType") + private String repotype; + + @TableField("issueKey") + private String issuekey; + + private Integer testtask; + + @TableField("lastEditedBy") + private String lasteditedby; + + @TableField("lastEditedDate") + private Date lastediteddate; + + private String deleted; + + + private String fileUrl; +} diff --git a/src/main/java/com/sa/zentao/entity/ZtCase.java b/src/main/java/com/sa/zentao/entity/ZtCase.java new file mode 100644 index 0000000..cf71bc7 --- /dev/null +++ b/src/main/java/com/sa/zentao/entity/ZtCase.java @@ -0,0 +1,142 @@ +package com.sa.zentao.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import java.time.LocalDate; +import com.baomidou.mybatisplus.annotation.TableId; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.TableField; +import java.io.Serializable; +import java.util.Date; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + *

+ * + *

+ * + * @author gqb + * @since 2024-07-03 + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class ZtCase implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + private Integer project; + + private Integer product; + + private Integer execution; + + private Integer branch; + + private Integer lib; + + private Integer module; + + private Integer path; + + private Integer story; + + @TableField("storyVersion") + private Integer storyversion; + + private String title; + + private String precondition; + + private String keywords; + + private Integer pri; + + private String type; + + private String auto; + + private String frame; + + private String stage; + + @TableField("howRun") + private String howrun; + + private String script; + + @TableField("scriptedBy") + private String scriptedby; + + @TableField("scriptedDate") + private Date scripteddate; + + @TableField("scriptStatus") + private String scriptstatus; + + @TableField("scriptLocation") + private String scriptlocation; + + private String status; + + @TableField("subStatus") + private String substatus; + + private String color; + + private String frequency; + @TableField("`order`") + private Integer order; + + @TableField("openedBy") + private String openedby; + + @TableField("openedDate") + private Date openeddate; + + @TableField("reviewedBy") + private String reviewedby; + + @TableField("reviewedDate") + private Date revieweddate; + + @TableField("lastEditedBy") + private String lasteditedby; + + @TableField("lastEditedDate") + private Date lastediteddate; + + private Integer version; + + @TableField("linkCase") + private String linkcase; + + @TableField("fromBug") + private Integer frombug; + + @TableField("fromCaseID") + private Integer fromcaseid; + + @TableField("fromCaseVersion") + private Integer fromcaseversion; + + private String deleted; + + @TableField("lastRunner") + private String lastrunner; + + @TableField("lastRunDate") + private Date lastrundate; + + @TableField("lastRunResult") + private String lastrunresult; + + private Integer scene; + + private Integer sort; + + +} diff --git a/src/main/java/com/sa/zentao/entity/ZtCasestep.java b/src/main/java/com/sa/zentao/entity/ZtCasestep.java new file mode 100644 index 0000000..56b499d --- /dev/null +++ b/src/main/java/com/sa/zentao/entity/ZtCasestep.java @@ -0,0 +1,41 @@ +package com.sa.zentao.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import java.io.Serializable; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + *

+ * + *

+ * + * @author gqb + * @since 2024-07-03 + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class ZtCasestep implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + private Integer parent; + + private Integer caseId; + + private Integer version; + + private String type; + + @TableField("`desc`") + private String desc; + + private String expect; + + +} diff --git a/src/main/java/com/sa/zentao/entity/ZtCronDevops.java b/src/main/java/com/sa/zentao/entity/ZtCronDevops.java new file mode 100644 index 0000000..41f61f8 --- /dev/null +++ b/src/main/java/com/sa/zentao/entity/ZtCronDevops.java @@ -0,0 +1,49 @@ +package com.sa.zentao.entity; + +import java.time.LocalDateTime; +import java.io.Serializable; +import java.util.Date; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + *

+ * + *

+ * + * @author gqb + * @since 2024-10-22 + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class ZtCronDevops implements Serializable { + + private static final long serialVersionUID = 1L; + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + private String name; + + private String content; + + private String mail; + + private String phone; + + private String cron; + + private String createUser; + + private Date createDate; + + private Date updateDate; + + private String updateUser; + + //0正常 1关闭 + private Integer status; + +} diff --git a/src/main/java/com/sa/zentao/entity/ZtCronDevopsUser.java b/src/main/java/com/sa/zentao/entity/ZtCronDevopsUser.java new file mode 100644 index 0000000..e4676de --- /dev/null +++ b/src/main/java/com/sa/zentao/entity/ZtCronDevopsUser.java @@ -0,0 +1,35 @@ +package com.sa.zentao.entity; + +import java.time.LocalDateTime; +import java.io.Serializable; +import java.util.Date; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + *

+ * + *

+ * + * @author gqb + * @since 2024-10-23 + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class ZtCronDevopsUser implements Serializable { + + private static final long serialVersionUID = 1L; + + private String username; + + private String mail; + + private Date createDate; + + private String createUser; + + private Integer devopsId; + + +} diff --git a/src/main/java/com/sa/zentao/entity/ZtEffort.java b/src/main/java/com/sa/zentao/entity/ZtEffort.java new file mode 100644 index 0000000..4415951 --- /dev/null +++ b/src/main/java/com/sa/zentao/entity/ZtEffort.java @@ -0,0 +1,65 @@ +package com.sa.zentao.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import java.time.LocalDate; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableField; +import java.io.Serializable; +import java.util.Date; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + *

+ * + *

+ * + * @author gqb + * @since 2024-08-13 + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class ZtEffort implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + @TableField("objectType") + private String objecttype; + + @TableField("objectID") + private Integer objectid; + + private String product; + + private Integer project; + + private Integer execution; + + private String account; + + private String work; + + private String vision; + + private Date date; + @TableField("`left`") + private Float left; + @TableField("`consumed`") + private Float consumed; + + private Integer begin; + + private Integer end; + + private String extra; + @TableField("`order`") + private Integer order; + @TableField("`deleted`") + private String deleted; + + +} diff --git a/src/main/java/com/sa/zentao/entity/ZtExecutionproject.java b/src/main/java/com/sa/zentao/entity/ZtExecutionproject.java new file mode 100644 index 0000000..3ffb383 --- /dev/null +++ b/src/main/java/com/sa/zentao/entity/ZtExecutionproject.java @@ -0,0 +1,26 @@ +package com.sa.zentao.entity; + +import java.io.Serializable; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + *

+ * + *

+ * + * @author gqb + * @since 2024-08-01 + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class ZtExecutionproject implements Serializable { + + private static final long serialVersionUID = 1L; + + private Integer execution; + + private Integer project; + + +} diff --git a/src/main/java/com/sa/zentao/entity/ZtKanban.java b/src/main/java/com/sa/zentao/entity/ZtKanban.java new file mode 100644 index 0000000..ec0e65d --- /dev/null +++ b/src/main/java/com/sa/zentao/entity/ZtKanban.java @@ -0,0 +1,99 @@ +package com.sa.zentao.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.TableField; +import java.io.Serializable; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + *

+ * + *

+ * + * @author gqb + * @since 2024-07-09 + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class ZtKanban implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + private Integer space; + + private String name; + + private String owner; + + private String team; + + private String desc; + + private String acl; + + private String whitelist; + + private String archived; + + private String performable; + + private String status; + + private Integer order; + + @TableField("displayCards") + private Integer displaycards; + + @TableField("showWIP") + private String showwip; + + @TableField("fluidBoard") + private String fluidboard; + + @TableField("colWidth") + private Integer colwidth; + + @TableField("minColWidth") + private Integer mincolwidth; + + @TableField("maxColWidth") + private Integer maxcolwidth; + + private String object; + + private String alignment; + + @TableField("createdBy") + private String createdby; + + @TableField("createdDate") + private LocalDateTime createddate; + + @TableField("lastEditedBy") + private String lasteditedby; + + @TableField("lastEditedDate") + private LocalDateTime lastediteddate; + + @TableField("closedBy") + private String closedby; + + @TableField("closedDate") + private LocalDateTime closeddate; + + @TableField("activatedBy") + private String activatedby; + + @TableField("activatedDate") + private LocalDateTime activateddate; + + private String deleted; + + +} diff --git a/src/main/java/com/sa/zentao/entity/ZtKanbancard.java b/src/main/java/com/sa/zentao/entity/ZtKanbancard.java new file mode 100644 index 0000000..ee2b4db --- /dev/null +++ b/src/main/java/com/sa/zentao/entity/ZtKanbancard.java @@ -0,0 +1,99 @@ +package com.sa.zentao.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import java.time.LocalDate; +import com.baomidou.mybatisplus.annotation.TableId; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.TableField; +import java.io.Serializable; +import java.util.Date; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + *

+ * + *

+ * + * @author gqb + * @since 2024-07-09 + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class ZtKanbancard implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + private Integer kanban; + + private Integer region; + + private Integer group; + + @TableField("fromID") + private Integer fromid; + + @TableField("fromType") + private String fromtype; + + private String name; + + private String status; + + private Integer pri; + + @TableField("assignedTo") + private String assignedto; + + private String desc; + + private Date begin; + + private Date end; + + private Float estimate; + + private Float progress; + + private String color; + + private String acl; + + private String whitelist; + + private Integer order; + + private String archived; + + @TableField("createdBy") + private String createdby; + + @TableField("createdDate") + private Date createddate; + + @TableField("lastEditedBy") + private String lasteditedby; + + @TableField("lastEditedDate") + private Date lastediteddate; + + @TableField("archivedBy") + private String archivedby; + + @TableField("archivedDate") + private Date archiveddate; + + @TableField("assignedBy") + private String assignedby; + + @TableField("assignedDate") + private Date assigneddate; + + private String deleted; + + +} diff --git a/src/main/java/com/sa/zentao/entity/ZtKanbancell.java b/src/main/java/com/sa/zentao/entity/ZtKanbancell.java new file mode 100644 index 0000000..3b0b460 --- /dev/null +++ b/src/main/java/com/sa/zentao/entity/ZtKanbancell.java @@ -0,0 +1,38 @@ +package com.sa.zentao.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import java.io.Serializable; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + *

+ * + *

+ * + * @author gqb + * @since 2024-07-09 + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class ZtKanbancell implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + private Integer kanban; + + private Integer lane; + @TableField("`column`") + private Integer column; + + private String type; + + private String cards; + + +} diff --git a/src/main/java/com/sa/zentao/entity/ZtKanbancolumn.java b/src/main/java/com/sa/zentao/entity/ZtKanbancolumn.java new file mode 100644 index 0000000..29caf23 --- /dev/null +++ b/src/main/java/com/sa/zentao/entity/ZtKanbancolumn.java @@ -0,0 +1,48 @@ +package com.sa.zentao.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import java.io.Serializable; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + *

+ * + *

+ * + * @author gqb + * @since 2024-07-09 + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class ZtKanbancolumn implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + private Integer parent; + + private String type; + @TableField("`region`") + private Integer region; + @TableField("`group`") + private Integer group; + + private String name; + + private String color; + @TableField("`limit`") + private Integer limit; + @TableField("`order`") + private Integer order; + + private String archived; + + private String deleted; + + +} diff --git a/src/main/java/com/sa/zentao/entity/ZtKanbangroup.java b/src/main/java/com/sa/zentao/entity/ZtKanbangroup.java new file mode 100644 index 0000000..a3eece2 --- /dev/null +++ b/src/main/java/com/sa/zentao/entity/ZtKanbangroup.java @@ -0,0 +1,34 @@ +package com.sa.zentao.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import java.io.Serializable; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + *

+ * + *

+ * + * @author gqb + * @since 2024-07-09 + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class ZtKanbangroup implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + private Integer kanban; + @TableField("`region`") + private Integer region; + @TableField("`order`") + private Integer order; + + +} diff --git a/src/main/java/com/sa/zentao/entity/ZtKanbanlane.java b/src/main/java/com/sa/zentao/entity/ZtKanbanlane.java new file mode 100644 index 0000000..dc8d0e1 --- /dev/null +++ b/src/main/java/com/sa/zentao/entity/ZtKanbanlane.java @@ -0,0 +1,52 @@ +package com.sa.zentao.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.TableField; +import java.io.Serializable; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + *

+ * + *

+ * + * @author gqb + * @since 2024-07-09 + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class ZtKanbanlane implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + private Integer execution; + @TableField("`type`") + private String type; + + private Integer region; + @TableField("`group`") + private Integer group; + + private String groupby; + + private String extra; + + private String name; + + private String color; + @TableField("`order`") + private Integer order; + + @TableField("lastEditedTime") + private LocalDateTime lasteditedtime; + + private String deleted; + + +} diff --git a/src/main/java/com/sa/zentao/entity/ZtKanbanregion.java b/src/main/java/com/sa/zentao/entity/ZtKanbanregion.java new file mode 100644 index 0000000..42c8c84 --- /dev/null +++ b/src/main/java/com/sa/zentao/entity/ZtKanbanregion.java @@ -0,0 +1,51 @@ +package com.sa.zentao.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.TableField; +import java.io.Serializable; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + *

+ * + *

+ * + * @author gqb + * @since 2024-07-09 + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class ZtKanbanregion implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + private Integer space; + + private Integer kanban; + + private String name; + + private Integer order; + + @TableField("createdBy") + private String createdby; + + @TableField("createdDate") + private LocalDateTime createddate; + + @TableField("lastEditedBy") + private String lasteditedby; + + @TableField("lastEditedDate") + private LocalDateTime lastediteddate; + + private String deleted; + + +} diff --git a/src/main/java/com/sa/zentao/entity/ZtKanbanspace.java b/src/main/java/com/sa/zentao/entity/ZtKanbanspace.java new file mode 100644 index 0000000..7edb9e3 --- /dev/null +++ b/src/main/java/com/sa/zentao/entity/ZtKanbanspace.java @@ -0,0 +1,73 @@ +package com.sa.zentao.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.TableField; +import java.io.Serializable; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + *

+ * + *

+ * + * @author gqb + * @since 2024-07-09 + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class ZtKanbanspace implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + private String name; + + private String type; + + private String owner; + + private String team; + + private String desc; + + private String acl; + + private String whitelist; + + private String status; + + private Integer order; + + @TableField("createdBy") + private String createdby; + + @TableField("createdDate") + private LocalDateTime createddate; + + @TableField("lastEditedBy") + private String lasteditedby; + + @TableField("lastEditedDate") + private LocalDateTime lastediteddate; + + @TableField("closedBy") + private String closedby; + + @TableField("closedDate") + private LocalDateTime closeddate; + + @TableField("activatedBy") + private String activatedby; + + @TableField("activatedDate") + private LocalDateTime activateddate; + + private String deleted; + + +} diff --git a/src/main/java/com/sa/zentao/entity/ZtModule.java b/src/main/java/com/sa/zentao/entity/ZtModule.java new file mode 100644 index 0000000..e3a10e1 --- /dev/null +++ b/src/main/java/com/sa/zentao/entity/ZtModule.java @@ -0,0 +1,54 @@ +package com.sa.zentao.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import java.io.Serializable; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + *

+ * + *

+ * + * @author gqb + * @since 2024-08-05 + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class ZtModule implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + private Integer root; + + private Integer branch; + + private String name; + + private Integer parent; + + private String path; + + private Integer grade; + + @TableField("`order`") + private Integer order; + + private String type; + @TableField("`from`") + private Integer from; + @TableField("`owner`") + private String owner; + + private String collector; + + + private String deleted; + + +} diff --git a/src/main/java/com/sa/zentao/entity/ZtProduct.java b/src/main/java/com/sa/zentao/entity/ZtProduct.java new file mode 100644 index 0000000..1c10e40 --- /dev/null +++ b/src/main/java/com/sa/zentao/entity/ZtProduct.java @@ -0,0 +1,142 @@ +package com.sa.zentao.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import java.time.LocalDate; +import com.baomidou.mybatisplus.annotation.TableId; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.TableField; +import java.io.Serializable; +import java.util.Date; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + *

+ * + *

+ * + * @author gqb + * @since 2024-06-13 + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class ZtProduct implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + private Integer program; + + @TableField("`name`") + private String name; + + @TableField("`code`") + private String code; + + private Boolean shadow; + + private String bind; + + private Integer line; + + private String type; + + //normal + @TableField("`status`") + private String status; + + @TableField("subStatus") + private String subStatus; + + @TableField("`desc`") + private String desc; + + @TableField("PO") + private String po; + + @TableField("QD") + private String qd; + + @TableField("RD") + private String rd; + + private String feedback; + + private String ticket; + + private String acl; + + private String whitelist; + + private String reviewer; + + @TableField("PMT") + private String pmt; + + @TableField("draftStories") + private Integer draftStories; + + //激活 + @TableField("activeStories") + private Integer activeStories; + + //变更 + @TableField("changingStories") + private Integer changingStories; + + //评审中 + @TableField("reviewingStories") + private Integer reviewingStories; + + //完成率 + @TableField("finishedStories") + private Integer finishedStories; + + + @TableField("closedStories") + private Integer closedStories; + + //修复率 fixedBugs/unresolvedBugs + @TableField("totalStories") + private Integer totalStories; + //激活 + @TableField("unresolvedBugs") + private Integer unresolvedBugs; + + @TableField("closedBugs") + private Integer closedBugs; + + @TableField("fixedBugs") + private Integer fixedBugs; + + @TableField("totalBugs") + private Integer totalBugs; + + private Integer plans; + + private Integer releases; + + @TableField("createdBy") + private String createdBy; + + @TableField("createdDate") + private Date createdDate; + + @TableField("createdVersion") + private String createdVersion; + + @TableField("closedDate") + private LocalDate closedDate; + + @TableField("`order`") + private Integer order; + + private String vision; + + private String deleted; + + +} diff --git a/src/main/java/com/sa/zentao/entity/ZtProject.java b/src/main/java/com/sa/zentao/entity/ZtProject.java new file mode 100644 index 0000000..90b814f --- /dev/null +++ b/src/main/java/com/sa/zentao/entity/ZtProject.java @@ -0,0 +1,203 @@ +package com.sa.zentao.entity; + +import java.math.BigDecimal; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableField; +import java.io.Serializable; +import java.util.Date; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + *

+ * + *

+ * + * @author gqb + * @since 2024-06-13 + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class ZtProject implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + private Integer project; + + private Integer charter; + + private String model; + // program 项目集 project 项目 sprint 执行 + private String type; + + private String category; + + private String lifetime; + + private String budget; + + @TableField("budgetUnit") + private String budgetUnit; + + private String attribute; + + private Float percent; + + private String milestone; + + private String output; + + //extend reset + private String auth; + + private Integer parent; + + + + private String path; + + private Integer grade; + @TableField("`name`") + private String name; + @TableField("`code`") + private String code; + + @TableField("hasProduct") + private Boolean hasProduct; + + @TableField("`begin`") + private Date begin; + + @TableField("`end`") + private Date end; + + @TableField("firstEnd") + private Date firstEnd; + + @TableField("realBegan") + private Date realBegan; + + @TableField("realEnd") + private Date realEnd; + + private Integer days; + //doing 进行中 closed 关闭 wait 未开始 suspended 已挂起 + @TableField("`status`") + private String status; + + @TableField("subStatus") + private String subStatus; + + private String pri; + @TableField("`desc`") + private String desc; + + private Integer version; + + @TableField("parentVersion") + private Integer parentVersion; + + @TableField("planDuration") + private Integer planDuration; + + @TableField("realDuration") + private Integer realDuration; + + private BigDecimal progress; + + private Float estimate; + + @TableField("`left`") + private Float left; + + private Float consumed; + + @TableField("teamCount") + private Integer teamCount; + + private Integer market; + + @TableField("openedBy") + private String openedBy; + + @TableField("openedDate") + private Date openedDate; + + @TableField("openedVersion") + private String openedVersion; + + @TableField("lastEditedBy") + private String lastEditedBy; + + @TableField("lastEditedDate") + private Date lastEditedDate; + + @TableField("closedBy") + private String closedBy; + + @TableField("closedDate") + private Date closedDate; + + @TableField("closedReason") + private String closedReason; + + @TableField("canceledBy") + private String canceledBy; + + @TableField("canceledDate") + private Date canceledDate; + + @TableField("suspendedDate") + private Date suspendedDate; + + @TableField("PO") + private String po; + + @TableField("PM") + private String pm; + + @TableField("QD") + private String qd; + + @TableField("RD") + private String rd; + + private String team; + // open 公开 private 私有 program 项目集公开 + private String acl; + + private String whitelist; + + @TableField("`order`") + private Integer order; + + private String vision; + + private String division; + + @TableField("displayCards") + private Integer displayCards; + + @TableField("fluidBoard") + private String fluidBoard; + + private String multiple; + + @TableField("colWidth") + private Integer colWidth; + + @TableField("minColWidth") + private Integer minColWidth; + + @TableField("maxColWidth") + private Integer maxColWidth; + + private String deleted; + + +} diff --git a/src/main/java/com/sa/zentao/entity/ZtProjectproduct.java b/src/main/java/com/sa/zentao/entity/ZtProjectproduct.java new file mode 100644 index 0000000..cd7f895 --- /dev/null +++ b/src/main/java/com/sa/zentao/entity/ZtProjectproduct.java @@ -0,0 +1,30 @@ +package com.sa.zentao.entity; + +import java.io.Serializable; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + *

+ * + *

+ * + * @author gqb + * @since 2024-06-18 + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class ZtProjectproduct implements Serializable { + + private static final long serialVersionUID = 1L; + + private Integer project; + + private Integer product; + + private Integer branch; + + private String plan; + + +} diff --git a/src/main/java/com/sa/zentao/entity/ZtProjectstory.java b/src/main/java/com/sa/zentao/entity/ZtProjectstory.java new file mode 100644 index 0000000..e6e495d --- /dev/null +++ b/src/main/java/com/sa/zentao/entity/ZtProjectstory.java @@ -0,0 +1,39 @@ +package com.sa.zentao.entity; + +import java.io.Serializable; + +import com.baomidou.mybatisplus.annotation.TableField; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + *

+ * + *

+ * + * @author gqb + * @since 2024-07-02 + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class ZtProjectstory implements Serializable { + + private static final long serialVersionUID = 1L; + + private Integer project; + + private Integer product; + + private Integer execution; + + private Integer branch; + + private Integer story; + + private Integer version; + + @TableField("`order`") + private Integer order; + + +} diff --git a/src/main/java/com/sa/zentao/entity/ZtSearchindex.java b/src/main/java/com/sa/zentao/entity/ZtSearchindex.java new file mode 100644 index 0000000..943a6e2 --- /dev/null +++ b/src/main/java/com/sa/zentao/entity/ZtSearchindex.java @@ -0,0 +1,47 @@ +package com.sa.zentao.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.TableField; +import java.io.Serializable; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + *

+ * + *

+ * + * @author gqb + * @since 2024-06-24 + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class ZtSearchindex implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + private String vision; + + @TableField("objectType") + private String objecttype; + + @TableField("objectID") + private Integer objectid; + + private String title; + + private String content; + + @TableField("addedDate") + private LocalDateTime addeddate; + + @TableField("editedDate") + private LocalDateTime editeddate; + + +} diff --git a/src/main/java/com/sa/zentao/entity/ZtStory.java b/src/main/java/com/sa/zentao/entity/ZtStory.java new file mode 100644 index 0000000..c015165 --- /dev/null +++ b/src/main/java/com/sa/zentao/entity/ZtStory.java @@ -0,0 +1,196 @@ +package com.sa.zentao.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import java.time.LocalDate; +import com.baomidou.mybatisplus.annotation.TableId; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.TableField; +import java.io.Serializable; +import java.util.Date; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + *

+ * + *

+ * + * @author gqb + * @since 2024-06-24 + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class ZtStory implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + private String vision; + + private Integer parent; + + private Integer product; + + private Integer branch; + + private Integer module; + + private String plan; + + private String source; + + @TableField("sourceNote") + private String sourceNote; + + @TableField("fromBug") + private Integer frombug; + + private Integer feedback; + + private String title; + + private String keywords; + + private String type; + + private String category; + + private Integer pri; + + private Float estimate; + //reviewing 评审中 active 激活 draft 草稿 + private String status; + + @TableField("subStatus") + private String substatus; + + private String color; + + //closed 关闭 wait 初始化 projected 已立项 developing 研发中 developed 研发完毕 testing 测试中 tested测试完毕 released已发布 verified已验收 closed 已关闭 + private String stage; + + @TableField("stagedBy") + private String stagedby; + + private String mailto; + + private Integer lib; + + @TableField("fromStory") + private Integer fromstory; + + @TableField("fromVersion") + private Integer fromversion; + + @TableField("openedBy") + private String openedby; + + @TableField("openedDate") + private Date openedDate; + + @TableField("assignedTo") + private String assignedTo; + + @TableField("assignedDate") + private Date assigneddate; + + @TableField("approvedDate") + private Date approveddate; + + @TableField("lastEditedBy") + private String lasteditedby; + + @TableField("lastEditedDate") + private Date lastediteddate; + + @TableField("changedBy") + private String changedby; + + @TableField("changedDate") + private Date changeddate; + + @TableField("reviewedBy") + private String reviewedby; + + @TableField("reviewedDate") + private Date revieweddate; + + @TableField("releasedDate") + private Date releaseddate; + + @TableField("closedBy") + private String closedby; + + @TableField("closedDate") + private Date closeddate; + + @TableField("closedReason") + private String closedreason; + + @TableField("activatedDate") + private Date activateddate; + + @TableField("toBug") + private Integer tobug; + + @TableField("childStories") + private String childstories; + + @TableField("linkStories") + private String linkstories; + + @TableField("linkRequirements") + private String linkrequirements; + + private String twins; + + @TableField("duplicateStory") + private Integer duplicatestory; + + private Integer version; + + @TableField("storyChanged") + private String storychanged; + + @TableField("feedbackBy") + private String feedbackby; + + @TableField("notifyEmail") + private String notifyemail; + + @TableField("BSA") + private String bsa; + + private String duration; + + private Integer demand; + + @TableField("submitedBy") + private String submitedby; + + private String roadmap; + + @TableField("URChanged") + private String urchanged; + + private String deleted; + + + //计划开始时间 + private Date planStartDate; + //计划结束时间 + private Date planEndDate; + //开始日期 + private Date startDate; + //结束日期 + private Date endDate; + + private Integer project; + //1通过 2不通过 + private Integer ysFlag; + + private Integer userStory; +} diff --git a/src/main/java/com/sa/zentao/entity/ZtStoryFeedback.java b/src/main/java/com/sa/zentao/entity/ZtStoryFeedback.java new file mode 100644 index 0000000..43b1784 --- /dev/null +++ b/src/main/java/com/sa/zentao/entity/ZtStoryFeedback.java @@ -0,0 +1,80 @@ +package com.sa.zentao.entity; + +import java.time.LocalDateTime; +import java.io.Serializable; +import java.util.Date; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + *

+ * + *

+ * + * @author gqb + * @since 2024-10-15 + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class ZtStoryFeedback implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + /** + * 名称 + */ + private String name; + + /** + * 备注 + */ + private String remark; + + /** + * 文件,隔开 + */ + private String files; + + private String openedBy; + + private Date openedDate; + + private Date updateDate; + + private String updateUser; + + /** + * 需求d + */ + private Integer storyId; + + /** + * 来源 + */ + private String source; + + private Date planEndDate; + + private String assignedTo; + + private String spec; + // wait doing finish closed + private String status; + + private Integer finishDate; + + private String fileUrl; + + + private Integer type; + + private String closeRemark; + + private Integer product; +} diff --git a/src/main/java/com/sa/zentao/entity/ZtStoryUser.java b/src/main/java/com/sa/zentao/entity/ZtStoryUser.java new file mode 100644 index 0000000..cffbcb1 --- /dev/null +++ b/src/main/java/com/sa/zentao/entity/ZtStoryUser.java @@ -0,0 +1,198 @@ +package com.sa.zentao.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import java.time.LocalDate; +import com.baomidou.mybatisplus.annotation.TableId; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.TableField; +import java.io.Serializable; +import java.util.Date; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + *

+ * + *

+ * + * @author gqb + * @since 2024-10-21 + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class ZtStoryUser implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + private String vision; + + private Integer parent; + + private Integer product; + + private Integer project; + + private Integer branch; + + private Integer module; + + private String plan; + + private String source; + + @TableField("sourceNote") + private String sourcenote; + + @TableField("fromBug") + private Integer frombug; + + private Integer feedback; + + private String title; + + private String keywords; + + private String type; + + private String category; + + private Integer pri; + + private Float estimate; + //wait active finished closed + private String status; + + @TableField("subStatus") + private String substatus; + + private String color; + + private String stage; + + @TableField("stagedBy") + private String stagedby; + + private String mailto; + + private Integer lib; + + @TableField("fromStory") + private Integer fromstory; + + @TableField("fromVersion") + private Integer fromversion; + + @TableField("openedBy") + private String openedby; + + @TableField("openedDate") + private Date openeddate; + + @TableField("assignedTo") + private String assignedto; + + @TableField("assignedDate") + private Date assigneddate; + + @TableField("approvedDate") + private Date approveddate; + + @TableField("lastEditedBy") + private String lasteditedby; + + @TableField("lastEditedDate") + private Date lastediteddate; + + @TableField("changedBy") + private String changedby; + + @TableField("changedDate") + private Date changeddate; + + @TableField("reviewedBy") + private String reviewedby; + + @TableField("reviewedDate") + private Date revieweddate; + + @TableField("releasedDate") + private Date releaseddate; + + @TableField("closedBy") + private String closedby; + + @TableField("closedDate") + private Date closeddate; + + @TableField("closedReason") + private String closedreason; + + @TableField("activatedDate") + private Date activateddate; + + @TableField("toBug") + private Integer tobug; + + @TableField("childStories") + private String childstories; + + @TableField("linkStories") + private String linkstories; + + @TableField("linkRequirements") + private String linkrequirements; + + private String twins; + + @TableField("duplicateStory") + private Integer duplicatestory; + + private Integer version; + + @TableField("storyChanged") + private String storychanged; + + @TableField("feedbackBy") + private String feedbackby; + + @TableField("notifyEmail") + private String notifyemail; + + @TableField("BSA") + private String bsa; + + private String duration; + + private Integer demand; + + @TableField("submitedBy") + private String submitedby; + + private String roadmap; + + @TableField("URChanged") + private String urchanged; + + private String deleted; + + private Date planStartDate; + + private Date planEndDate; + + private Date startDate; + + private Date endDate; + + /** + * 1通过 2不通过 + */ + private Integer ysFlag; + + private String spec; + + private String fileUrl; +} diff --git a/src/main/java/com/sa/zentao/entity/ZtStoryreview.java b/src/main/java/com/sa/zentao/entity/ZtStoryreview.java new file mode 100644 index 0000000..e44df4b --- /dev/null +++ b/src/main/java/com/sa/zentao/entity/ZtStoryreview.java @@ -0,0 +1,40 @@ +package com.sa.zentao.entity; + +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.TableField; +import java.io.Serializable; +import java.util.Date; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + *

+ * + *

+ * + * @author gqb + * @since 2024-06-24 + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class ZtStoryreview implements Serializable { + + private static final long serialVersionUID = 1L; + + private Integer story; + + private Integer version; + + private String reviewer; + + private String result; + + @TableField("reviewDate") + private Date reviewdate; + + + public String getKey(){ + return version+"-"+story; + } +} diff --git a/src/main/java/com/sa/zentao/entity/ZtStoryspec.java b/src/main/java/com/sa/zentao/entity/ZtStoryspec.java new file mode 100644 index 0000000..0b8ffaa --- /dev/null +++ b/src/main/java/com/sa/zentao/entity/ZtStoryspec.java @@ -0,0 +1,34 @@ +package com.sa.zentao.entity; + +import java.io.Serializable; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + *

+ * + *

+ * + * @author gqb + * @since 2024-07-03 + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class ZtStoryspec implements Serializable { + + private static final long serialVersionUID = 1L; + + private Integer story; + + private Integer version; + + private String title; + + private String spec; + + private String verify; + + private String files; + + +} diff --git a/src/main/java/com/sa/zentao/entity/ZtTask.java b/src/main/java/com/sa/zentao/entity/ZtTask.java new file mode 100644 index 0000000..af9b860 --- /dev/null +++ b/src/main/java/com/sa/zentao/entity/ZtTask.java @@ -0,0 +1,169 @@ +package com.sa.zentao.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import java.time.LocalDate; +import com.baomidou.mybatisplus.annotation.TableId; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.TableField; +import java.io.Serializable; +import java.util.Date; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + *

+ * + *

+ * + * @author gqb + * @since 2024-06-25 + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class ZtTask implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + private Integer project; + + private Integer parent; + + private Integer execution; + + private Integer module; + + private Integer design; + + private Integer story; + + @TableField("storyVersion") + private Integer storyversion; + + @TableField("designVersion") + private Integer designversion; + + @TableField("fromBug") + private Integer frombug; + + private Integer feedback; + + @TableField("fromIssue") + private Integer fromissue; + @TableField("`name`") + private String name; +//design设计 devel 开发 request 需求 test测试 study 研究 discuss讨论 ui界面 affair事务 misc其他 + private String type; + @TableField("`mode`") + private String mode; + + private Integer pri; + //预计工时 新增 + private Float estimate; + + //总计多少小时 + private Float consumed; + //剩余 开发 + @TableField("`left`") + private Float left; + //预计完成 + private Date deadline; + + //pause 暂停 cancel取消 closed 关闭 done 完成 + @TableField("`status`") + private String status; + + @TableField("subStatus") + private String substatus; + + private String color; + + private String mailto; + + @TableField("`desc`") + private String desc; + + private Integer version; + + @TableField("openedBy") + private String openedby; + + @TableField("openedDate") + private Date openeddate; + + @TableField("assignedTo") + private String assignedTo; + + @TableField("assignedDate") + private Date assignedDate; + //预计开始 + @TableField("estStarted") + private Date estStarted; + + @TableField("realStarted") + private Date realstarted; + + @TableField("finishedBy") + private String finishedby; + //完成日期 + @TableField("finishedDate") + private Date finishedDate; + + @TableField("finishedList") + private String finishedlist; + + @TableField("canceledBy") + private String canceledby; + + @TableField("canceledDate") + private Date canceleddate; + + @TableField("closedBy") + private String closedby; + + @TableField("closedDate") + private Date closeddate; + + @TableField("planDuration") + private Integer planduration; + + @TableField("realDuration") + private Integer realduration; + + @TableField("closedReason") + private String closedreason; + + @TableField("lastEditedBy") + private String lasteditedby; + + @TableField("lastEditedDate") + private Date lastediteddate; + + @TableField("activatedDate") + private Date activateddate; + + @TableField("`order`") + private Integer order; + + private Integer repo; + + private Integer mr; + + private String entry; + + @TableField("`lines`") + private String lines; + + private String v1; + + private String v2; + + private String deleted; + + private String vision; + + private String files; +} diff --git a/src/main/java/com/sa/zentao/entity/ZtTaskestimate.java b/src/main/java/com/sa/zentao/entity/ZtTaskestimate.java new file mode 100644 index 0000000..bd41aa2 --- /dev/null +++ b/src/main/java/com/sa/zentao/entity/ZtTaskestimate.java @@ -0,0 +1,42 @@ +package com.sa.zentao.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import java.time.LocalDate; +import com.baomidou.mybatisplus.annotation.TableId; +import java.io.Serializable; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + *

+ * + *

+ * + * @author gqb + * @since 2024-06-25 + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class ZtTaskestimate implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + private Integer task; + + private LocalDate date; + + private Float left; + + private Float consumed; + + private String account; + + private String work; + + private Integer order; + + +} diff --git a/src/main/java/com/sa/zentao/entity/ZtTaskspec.java b/src/main/java/com/sa/zentao/entity/ZtTaskspec.java new file mode 100644 index 0000000..1192ad6 --- /dev/null +++ b/src/main/java/com/sa/zentao/entity/ZtTaskspec.java @@ -0,0 +1,35 @@ +package com.sa.zentao.entity; + +import java.time.LocalDate; +import com.baomidou.mybatisplus.annotation.TableField; +import java.io.Serializable; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + *

+ * + *

+ * + * @author gqb + * @since 2024-06-25 + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class ZtTaskspec implements Serializable { + + private static final long serialVersionUID = 1L; + + private Integer task; + + private Integer version; + + private String name; + + @TableField("estStarted") + private LocalDate eststarted; + + private LocalDate deadline; + + +} diff --git a/src/main/java/com/sa/zentao/entity/ZtTaskteam.java b/src/main/java/com/sa/zentao/entity/ZtTaskteam.java new file mode 100644 index 0000000..b9a7cdd --- /dev/null +++ b/src/main/java/com/sa/zentao/entity/ZtTaskteam.java @@ -0,0 +1,44 @@ +package com.sa.zentao.entity; + +import java.math.BigDecimal; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import java.io.Serializable; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + *

+ * + *

+ * + * @author gqb + * @since 2024-07-17 + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class ZtTaskteam implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + private Integer task; + + private String account; + + private BigDecimal estimate; + + private BigDecimal consumed; + + private BigDecimal left; + + private String transfer; + + private String status; + + private Integer order; + + +} diff --git a/src/main/java/com/sa/zentao/entity/ZtTeam.java b/src/main/java/com/sa/zentao/entity/ZtTeam.java new file mode 100644 index 0000000..8b666c9 --- /dev/null +++ b/src/main/java/com/sa/zentao/entity/ZtTeam.java @@ -0,0 +1,60 @@ +package com.sa.zentao.entity; + +import java.math.BigDecimal; +import com.baomidou.mybatisplus.annotation.IdType; +import java.time.LocalDate; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import java.io.Serializable; +import java.util.Date; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + *

+ * + *

+ * + * @author gqb + * @since 2024-07-05 + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class ZtTeam implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + private Integer root; + + private String type; + + private String account; + + private String role; + + private String position; + + private String limited; + + @TableField("`join`") + private Date join; + + private Integer days; + + private Float hours; + + private BigDecimal estimate; + + private BigDecimal consumed; + @TableField("`left`") + private BigDecimal left; + @TableField("`order`") + private Integer order; + + +} diff --git a/src/main/java/com/sa/zentao/entity/ZtTestresult.java b/src/main/java/com/sa/zentao/entity/ZtTestresult.java new file mode 100644 index 0000000..41c084c --- /dev/null +++ b/src/main/java/com/sa/zentao/entity/ZtTestresult.java @@ -0,0 +1,63 @@ +package com.sa.zentao.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.TableField; +import java.io.Serializable; +import java.util.Date; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + *

+ * + *

+ * + * @author gqb + * @since 2024-07-29 + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class ZtTestresult implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + private Integer run; + + private Integer caseId; + + private Integer version; + + private Integer job; + + private Integer compile; + + @TableField("caseResult") + private String caseresult; + + @TableField("stepResults") + private String stepresults; + + @TableField("ZTFResult") + private String ztfresult; + + private Integer node; + + @TableField("lastRunner") + private String lastrunner; + + private Date date; + + private Float duration; + + private String xml; + + private Integer deploy; + + +} diff --git a/src/main/java/com/sa/zentao/entity/ZtTesttask.java b/src/main/java/com/sa/zentao/entity/ZtTesttask.java new file mode 100644 index 0000000..5d4d5a9 --- /dev/null +++ b/src/main/java/com/sa/zentao/entity/ZtTesttask.java @@ -0,0 +1,80 @@ +package com.sa.zentao.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import java.time.LocalDate; +import com.baomidou.mybatisplus.annotation.TableId; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.TableField; +import java.io.Serializable; +import java.util.Date; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + *

+ * + *

+ * + * @author gqb + * @since 2024-10-21 + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class ZtTesttask implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + private Integer project; + + private Integer product; + @TableField("`name`") + private String name; + + private Integer execution; + + private String build; + + private String type; + @TableField("`owner`") + private String owner; + + private Integer pri; + @TableField("`begin`") + private Date begin; + @TableField("`end`") + private Date end; + + @TableField("`realFinishedDate`") + private Date realfinisheddate; + + private String mailto; + @TableField("`desc`") + private String desc; + + private String report; + + private String members; + @TableField("`desc`") + private String status; + + private Integer testreport; + + private String auto; + + @TableField("`subStatus`") + private String substatus; + + @TableField("`createdBy`") + private String createdby; + + @TableField("`createdDate`") + private Date createddate; + + private String deleted; + + +} diff --git a/src/main/java/com/sa/zentao/entity/ZtUser.java b/src/main/java/com/sa/zentao/entity/ZtUser.java new file mode 100644 index 0000000..17b3908 --- /dev/null +++ b/src/main/java/com/sa/zentao/entity/ZtUser.java @@ -0,0 +1,132 @@ +package com.sa.zentao.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import java.time.LocalDate; +import com.baomidou.mybatisplus.annotation.TableId; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.TableField; +import java.io.Serializable; +import java.util.Date; + +import com.sa.zentao.enums.UserType; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + *

+ * + *

+ * + * @author gqb + * @since 2024-06-18 + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class ZtUser implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + private Integer company; + + private String type; + + private Integer dept; + + private String account; + + @TableField("`password`") + private String password; + + private String role; + + private String realname; + + private String pinyin; + + private String nickname; + + private String commiter; + + private String avatar; + + private Date birthday; + + private String gender; + + private String email; + + private String skype; + + private String qq; + + private String mobile; + + private String phone; + + private String weixin; + + private String dingding; + + private String slack; + + private String whatsapp; + + private String address; + + private String zipcode; + + private String nature; + + private String analysis; + + private String strategy; + + @TableField("`join`") + private Date join; + + private Integer visits; + + private String visions; + + private String ip; + + private Integer last; + + private Integer fails; + + private Date locked; + + private String feedback; + + private String ranzhi; + + private String ldap; + + private Integer score; + + @TableField("scoreLevel") + private Integer scoreLevel; + + @TableField("resetToken") + private String resetToken; + + private String deleted; + + @TableField("clientStatus") + private String clientStatus; + + @TableField("clientLang") + private String clientLang; + + + private UserType userType; + + private String productIds; + + @TableField(exist = false) + private String code; + +} diff --git a/src/main/java/com/sa/zentao/entity/ZtYwBackups.java b/src/main/java/com/sa/zentao/entity/ZtYwBackups.java new file mode 100644 index 0000000..2548427 --- /dev/null +++ b/src/main/java/com/sa/zentao/entity/ZtYwBackups.java @@ -0,0 +1,67 @@ +package com.sa.zentao.entity; + +import java.time.LocalDateTime; +import java.io.Serializable; +import java.util.Date; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + *

+ * + *

+ * + * @author gqb + * @since 2024-11-18 + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class ZtYwBackups implements Serializable { + + private static final long serialVersionUID = 1L; + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + /** + * 系统名称 + */ + private String name; + + /** + * 备份日期 + */ + private Date backupsDate; + + /** + * 备份文件名称 + */ + private String backupsFileName; + + /** + * 文件存储 + */ + private String saveRemark; + + /** + * 文件大小 + */ + private Double fileSize; + + /** + * 是否正常 + */ + private Integer normalFlag; + + /** + * 异常描述 + */ + private String errorRemark; + + private Date createDate; + + private String createUser; + + +} diff --git a/src/main/java/com/sa/zentao/entity/ZtYwChange.java b/src/main/java/com/sa/zentao/entity/ZtYwChange.java new file mode 100644 index 0000000..edef60c --- /dev/null +++ b/src/main/java/com/sa/zentao/entity/ZtYwChange.java @@ -0,0 +1,114 @@ +package com.sa.zentao.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import java.time.LocalDateTime; +import java.io.Serializable; +import java.util.Date; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + *

+ * + *

+ * + * @author gqb + * @since 2024-11-19 + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class ZtYwChange implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + /** + * 申请日期 + */ + private Date applyDate; + + /** + * 变更内容 + */ + private String changeContent; + + /** + * 便跟范围 + */ + private String changeRange; + + /** + * 期望实施时间 + */ + private Date effectDate; + + /** + * 风险等级 123 中低搞 + */ + private String level; + + /** + * 应急方案 + */ + private String emergencyPlan; + + /** + * 1审批中 2审批通过 3实施中 4实施完成 1 2 3 4 5拒绝 + */ + private Integer changeStatus; + + /** + * 同意 不同意 + */ + private String result; + + /** + * 审批人 + */ + private String approvalUser; + + /** + * 审批日期 + */ + private Date approvalDate; + + /** + * 变更实施日期 + */ + private Date changeEffectDate; + + /** + * 变更实施结果 + */ + private String changeEffectResult; + + private String changeEffectUser; + + /** + * 1不通过 0通过 + */ + private Integer ysFlag; + + /** + * 验收备注 + */ + private String ysRemark; + + /** + * 验收人 + */ + private String ysUser; + + /** + * 验收日期 + */ + private Date ysDate; + + private Date createDate; + + private String createUser; +} diff --git a/src/main/java/com/sa/zentao/entity/ZtYwFault.java b/src/main/java/com/sa/zentao/entity/ZtYwFault.java new file mode 100644 index 0000000..d45ee0f --- /dev/null +++ b/src/main/java/com/sa/zentao/entity/ZtYwFault.java @@ -0,0 +1,54 @@ +package com.sa.zentao.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import java.time.LocalDateTime; +import java.io.Serializable; +import java.util.Date; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + *

+ * + *

+ * + * @author gqb + * @since 2024-11-19 + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class ZtYwFault implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + private String eventName; + + private String eventRemark; + + private String eventLevel; + + private String eventRange; + + private String eventHandle; + + private Date repairStartDate; + + private Date repairEndDate; + + private Date createDate; + + private String createUser; + + private String result; + + //最终结果 + private String lastResult; + + //发生原因分析 + private String analyse; +} diff --git a/src/main/java/com/sa/zentao/entity/ZtYwFaultList.java b/src/main/java/com/sa/zentao/entity/ZtYwFaultList.java new file mode 100644 index 0000000..f007848 --- /dev/null +++ b/src/main/java/com/sa/zentao/entity/ZtYwFaultList.java @@ -0,0 +1,31 @@ +package com.sa.zentao.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import java.io.Serializable; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + *

+ * + *

+ * + * @author gqb + * @since 2024-11-19 + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class ZtYwFaultList implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + private Integer faultId; + + private String remark; + + private String userName; +} diff --git a/src/main/java/com/sa/zentao/entity/ZtYwFwqsearch.java b/src/main/java/com/sa/zentao/entity/ZtYwFwqsearch.java new file mode 100644 index 0000000..f44f949 --- /dev/null +++ b/src/main/java/com/sa/zentao/entity/ZtYwFwqsearch.java @@ -0,0 +1,67 @@ +package com.sa.zentao.entity; + +import java.time.LocalDateTime; +import java.io.Serializable; +import java.util.Date; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + *

+ * + *

+ * + * @author gqb + * @since 2024-11-19 + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class ZtYwFwqsearch implements Serializable { + + private static final long serialVersionUID = 1L; + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + private String name; + + /** + * 1正常 0异常网络 + */ + private Integer networkError; + private Integer network; + /** + * 资源服务器是否异常 + */ + private Integer serverError; + + /** + * 资源异常描述 + */ + private String serverRemark; + + /** + * 是否有报警 + */ + private Integer alarmError; + + /** + * 描述 + */ + private String alarmRemark; + + /** + * 报警内容 + */ + private String alarmContent; + + private Date createDate; + + private String createUser; + + private String ipJson; + + +} diff --git a/src/main/java/com/sa/zentao/entity/ZtYwMachineRoom.java b/src/main/java/com/sa/zentao/entity/ZtYwMachineRoom.java new file mode 100644 index 0000000..117027a --- /dev/null +++ b/src/main/java/com/sa/zentao/entity/ZtYwMachineRoom.java @@ -0,0 +1,94 @@ +package com.sa.zentao.entity; + +import java.time.LocalDateTime; +import java.io.Serializable; +import java.util.Date; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + *

+ * + *

+ * + * @author gqb + * @since 2024-11-19 + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class ZtYwMachineRoom implements Serializable { + + private static final long serialVersionUID = 1L; + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + private String roomName; + + /** + * 巡检日期 + */ + private Date inspectDate; + + /** + * 巡检人 + */ + private String inspectUser; + + /** + * 温度 + */ + private String temperature; + + /** + * 湿度 + */ + private String humidity; + + /** + * 服务器情况 正常 异常 + */ + private Integer errorFlag; + + /** + * 服务器异常描述 + */ + private String errorRemark; + + /** + * 网络异常 + */ + private Integer networkFlag; + + /** + * 网络异常描述 + */ + private String networkRemark; + + /** + * ups是否异常 + */ + private Integer upsFlag; + + /** + * ups异常描述 + */ + private String upsRemark; + + /** + * 消防是否异常 + */ + private Integer xiaofangFlag; + + /** + * 消防异常描述 + */ + private String xiaofangRemark; + + private String url; + + private String createUser; + private Date createDate; +} diff --git a/src/main/java/com/sa/zentao/entity/ZtYwPatrol.java b/src/main/java/com/sa/zentao/entity/ZtYwPatrol.java new file mode 100644 index 0000000..573f389 --- /dev/null +++ b/src/main/java/com/sa/zentao/entity/ZtYwPatrol.java @@ -0,0 +1,78 @@ +package com.sa.zentao.entity; + +import java.time.LocalDateTime; +import java.io.Serializable; +import java.util.Date; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + *

+ * + *

+ * + * @author gqb + * @since 2024-11-18 + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class ZtYwPatrol implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + /** + * 巡检日期 + */ + private Date patrolDate; + + private String patrolUser; + + /** + * 是否使用电器 + */ + private Integer dqFlag; + + private String dqRemark; + + /** + * 是否违规wifi + */ + private Integer wifiFlag; + + private String wifiRemark; + + /** + * 私拉电线 + */ + private Integer dxFlag; + + private String dxRemark; + + /** + * 桌面整洁 + */ + private Integer zmzjFlag; + + private String zmzjRemark; + + /** + * 安全风险 + */ + private Integer safeFlag; + + private String safeRemark; + + /** + * 连接 + */ + private String url; + + private Date createDate; + + private String createUser; +} diff --git a/src/main/java/com/sa/zentao/entity/ZtYwTask.java b/src/main/java/com/sa/zentao/entity/ZtYwTask.java new file mode 100644 index 0000000..e0c9317 --- /dev/null +++ b/src/main/java/com/sa/zentao/entity/ZtYwTask.java @@ -0,0 +1,99 @@ +package com.sa.zentao.entity; + +import java.time.LocalDateTime; +import java.io.Serializable; +import java.util.Date; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + *

+ * + *

+ * + * @author gqb + * @since 2024-11-19 + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class ZtYwTask implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + /** + * 任务事项 + */ + private String name; + + /** + * 任务描述 + */ + private String remark; + + /** + * 任务提醒时间 + */ + private Date taskRemindDate; + + /** + * 任务开始时间 + */ + private Date taskStartDate; + + /** + * 任务结束时间 + */ + private Date taskEndDate; + + /** + * 所属人归属人负责人 + */ + private String belongToUser; + + /** + * 邮箱 + */ + private String mail; + + /** + * 状态 1.等待中 2.已提醒 3.进行中 4.已完成 + */ + private Integer taskStatus; + + /** + * 任务完成时间 + */ + private Date finishDate; + + /** + * 验收物 + */ + private String deliver; + + /** + * 1.不通过 0通过 + */ + private Integer ysFlag; + + /** + * 验收人 + */ + private String ysUser; + + /** + * 验收日期 + */ + private Date ysDate; + private Date createDate; + + private String createUser; + + private String result; + private String copyToUser; + private String copyMail; +} diff --git a/src/main/java/com/sa/zentao/enums/ActionStatus.java b/src/main/java/com/sa/zentao/enums/ActionStatus.java new file mode 100644 index 0000000..f34bc5c --- /dev/null +++ b/src/main/java/com/sa/zentao/enums/ActionStatus.java @@ -0,0 +1,64 @@ +package com.sa.zentao.enums; + +import com.baomidou.mybatisplus.annotation.EnumValue; + +public enum ActionStatus { + + XJ(1, "opened","新建"), + KS(2, "started","开始"), + FP(3, "assigned","分配"), + BJ(4, "edited","编辑"), + GB(5, "closed","关闭"), + SC(6, "deleted","删除"), + JH(7, "activated","激活"), + GQ(8, "suspended","挂起"), + PS(9, "submitreview","提交评审人"), + CX(9, "recalled","撤销评审"), + WC(10, "finished","完成"), + QX(11, "canceled","取消"), + TJBZ(12, "commented","添加备注"), + PSTG(13, "reviewpassed","评审通过"), + PSYDMQ(14, "reviewclarified","评审有待明确"), + PSBTG(15, "reviewrejected","评审不通过"), + YSTG(16, "ystg","验收通过"), + YSBTG(17, "ysbtg","验收不通过"), + FB(18, "fb","发布"), + + QR(19, "qr","确认"), + + LOGIN(100, "login","登录"), + ; + + @EnumValue + private int code; + private String value; + private String desc; + + private ActionStatus(int code, String value, String desc) { + this.code = code; + this.value = value; + this.desc = desc; + } + + public int getCode() { + return this.code; + } + + public String getValue() { + return this.value; + } + + public String getDesc() { + return this.desc; + } + + public static String valueForDesc(String v) { + ActionStatus[] values = values(); + for (ActionStatus actionStatus:values) { + if( actionStatus.value.equals(v)){ + return actionStatus.getDesc(); + } + } + return ""; + } +} diff --git a/src/main/java/com/sa/zentao/enums/ActionType.java b/src/main/java/com/sa/zentao/enums/ActionType.java new file mode 100644 index 0000000..56e2c5d --- /dev/null +++ b/src/main/java/com/sa/zentao/enums/ActionType.java @@ -0,0 +1,44 @@ +package com.sa.zentao.enums; + +import com.baomidou.mybatisplus.annotation.EnumValue; + +public enum ActionType { + + XMJ(1, "program","项目集"), + XM(2, "project","项目"), + CP(3, "product","产品"), + ZX(3, "execution","执行"), + + XQ(4, "story","需求"), + + USERXQ(14, "user-story","用户需求"), + + WTFK(15, "story-feedback","问题反馈"), + + RW(5, "task","任务"), + + BUG(6, "bug","BUG"), + + LOGIN(7, "LOGIN","登录"), + USER(8, "user","用户"), + ; + + + private int code; + @EnumValue + private String value; + private String desc; + + private ActionType(int code, String value,String desc) { + this.code = code; + this.value = value; + } + + public int getCode() { + return this.code; + } + + public String getValue() { + return this.value; + } +} diff --git a/src/main/java/com/sa/zentao/enums/DeleteFlagEnum.java b/src/main/java/com/sa/zentao/enums/DeleteFlagEnum.java new file mode 100644 index 0000000..3163b7e --- /dev/null +++ b/src/main/java/com/sa/zentao/enums/DeleteFlagEnum.java @@ -0,0 +1,25 @@ +package com.sa.zentao.enums; + +import com.baomidou.mybatisplus.annotation.EnumValue; + +public enum DeleteFlagEnum { + USED(0, "使用"), + DELETED(1, "删除"); + + @EnumValue + private int code; + private String value; + + private DeleteFlagEnum(int code, String value) { + this.code = code; + this.value = value; + } + + public int getCode() { + return this.code; + } + + public String getValue() { + return this.value; + } +} diff --git a/src/main/java/com/sa/zentao/enums/ProductBug.java b/src/main/java/com/sa/zentao/enums/ProductBug.java new file mode 100644 index 0000000..186096c --- /dev/null +++ b/src/main/java/com/sa/zentao/enums/ProductBug.java @@ -0,0 +1,30 @@ +package com.sa.zentao.enums; + +import com.baomidou.mybatisplus.annotation.EnumValue; + +public enum ProductBug { + + WJJ(1,"激活"), + CLOSE(2, "关闭"), + fixed(3, "固定"), + TOTAL(3, "总"), + ; + + @EnumValue + private int code; + private String value; + private String desc; + + private ProductBug(int code, String desc) { + this.code = code; + this.value = value; + } + + public int getCode() { + return this.code; + } + + public String getValue() { + return this.value; + } +} diff --git a/src/main/java/com/sa/zentao/enums/ProductStoryStatus.java b/src/main/java/com/sa/zentao/enums/ProductStoryStatus.java new file mode 100644 index 0000000..d6ab93f --- /dev/null +++ b/src/main/java/com/sa/zentao/enums/ProductStoryStatus.java @@ -0,0 +1,32 @@ +package com.sa.zentao.enums; + +import com.baomidou.mybatisplus.annotation.EnumValue; + +public enum ProductStoryStatus { + + CG(1,"草稿"), + JH(2, "激活"), + BG(3, "变更"), + PS(4, "评审中"), + WC(5, "完成"), + GB(7, "关闭"), + ; + + @EnumValue + private int code; + private String value; + private String desc; + + private ProductStoryStatus(int code, String desc) { + this.code = code; + this.value = value; + } + + public int getCode() { + return this.code; + } + + public String getValue() { + return this.value; + } +} diff --git a/src/main/java/com/sa/zentao/enums/UserType.java b/src/main/java/com/sa/zentao/enums/UserType.java new file mode 100644 index 0000000..930210d --- /dev/null +++ b/src/main/java/com/sa/zentao/enums/UserType.java @@ -0,0 +1,39 @@ +package com.sa.zentao.enums; + +import com.baomidou.mybatisplus.annotation.EnumValue; + +public enum UserType { + + CP(1,"产品"), + XMGLY(2, "项目管理员"), + KFZ(3, "开发者"), + GSGC(4, "公司高层"), + ; + + @EnumValue + private int code; + private String value; + + private UserType(int code, String value) { + this.code = code; + this.value = value; + } + + public int getCode() { + return this.code; + } + + public String getValue() { + return this.value; + } + + public static UserType transferType(Integer code){ + UserType[] values = values(); + for (UserType v:values ) { + if(v.code==code){ + return v; + } + } + return null; + } +} diff --git a/src/main/java/com/sa/zentao/mapper/FestivalConfigMapper.java b/src/main/java/com/sa/zentao/mapper/FestivalConfigMapper.java new file mode 100644 index 0000000..8ee450c --- /dev/null +++ b/src/main/java/com/sa/zentao/mapper/FestivalConfigMapper.java @@ -0,0 +1,22 @@ +package com.sa.zentao.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.sa.zentao.dao.FestivalConfigDTO; +import com.sa.zentao.entity.FestivalConfig; +import com.sa.zentao.qo.FestivalConfigQo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * Mapper 接口 + *

+ * + * @author gqb + * @since 2023-03-20 + */ +public interface FestivalConfigMapper extends BaseMapper { + + List pageList(@Param("qo") FestivalConfigQo qo); +} diff --git a/src/main/java/com/sa/zentao/mapper/VerificationCodeMapper.java b/src/main/java/com/sa/zentao/mapper/VerificationCodeMapper.java new file mode 100644 index 0000000..1db847b --- /dev/null +++ b/src/main/java/com/sa/zentao/mapper/VerificationCodeMapper.java @@ -0,0 +1,16 @@ +package com.sa.zentao.mapper; + +import com.sa.zentao.entity.VerificationCode; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * Mapper 接口 + *

+ * + * @author gqb + * @since 2024-09-14 + */ +public interface VerificationCodeMapper extends BaseMapper { + +} diff --git a/src/main/java/com/sa/zentao/mapper/ZtActionMapper.java b/src/main/java/com/sa/zentao/mapper/ZtActionMapper.java new file mode 100644 index 0000000..ea45a5c --- /dev/null +++ b/src/main/java/com/sa/zentao/mapper/ZtActionMapper.java @@ -0,0 +1,16 @@ +package com.sa.zentao.mapper; + +import com.sa.zentao.entity.ZtAction; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * Mapper 接口 + *

+ * + * @author gqb + * @since 2024-06-27 + */ +public interface ZtActionMapper extends BaseMapper { + +} diff --git a/src/main/java/com/sa/zentao/mapper/ZtActionrecentMapper.java b/src/main/java/com/sa/zentao/mapper/ZtActionrecentMapper.java new file mode 100644 index 0000000..9372d8b --- /dev/null +++ b/src/main/java/com/sa/zentao/mapper/ZtActionrecentMapper.java @@ -0,0 +1,16 @@ +package com.sa.zentao.mapper; + +import com.sa.zentao.entity.ZtActionrecent; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * Mapper 接口 + *

+ * + * @author gqb + * @since 2024-06-27 + */ +public interface ZtActionrecentMapper extends BaseMapper { + +} diff --git a/src/main/java/com/sa/zentao/mapper/ZtBugMapper.java b/src/main/java/com/sa/zentao/mapper/ZtBugMapper.java new file mode 100644 index 0000000..f286fe2 --- /dev/null +++ b/src/main/java/com/sa/zentao/mapper/ZtBugMapper.java @@ -0,0 +1,25 @@ +package com.sa.zentao.mapper; + +import com.sa.zentao.dao.ZtBugDTO; +import com.sa.zentao.entity.ZtBug; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.sa.zentao.qo.ZtProjectQo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * Mapper 接口 + *

+ * + * @author gqb + * @since 2024-07-04 + */ +public interface ZtBugMapper extends BaseMapper { + + List bugPageList(@Param("qo") ZtProjectQo qo); + + List myBugPageList(@Param("qo") ZtProjectQo qo); + +} diff --git a/src/main/java/com/sa/zentao/mapper/ZtCaseMapper.java b/src/main/java/com/sa/zentao/mapper/ZtCaseMapper.java new file mode 100644 index 0000000..f8b027d --- /dev/null +++ b/src/main/java/com/sa/zentao/mapper/ZtCaseMapper.java @@ -0,0 +1,22 @@ +package com.sa.zentao.mapper; + +import com.sa.zentao.dao.ZtCaseDTO; +import com.sa.zentao.entity.ZtCase; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.sa.zentao.qo.ZtProjectQo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * Mapper 接口 + *

+ * + * @author gqb + * @since 2024-07-03 + */ +public interface ZtCaseMapper extends BaseMapper { + + List casePageList(@Param("qo") ZtProjectQo qo); +} diff --git a/src/main/java/com/sa/zentao/mapper/ZtCasestepMapper.java b/src/main/java/com/sa/zentao/mapper/ZtCasestepMapper.java new file mode 100644 index 0000000..f9c1d21 --- /dev/null +++ b/src/main/java/com/sa/zentao/mapper/ZtCasestepMapper.java @@ -0,0 +1,16 @@ +package com.sa.zentao.mapper; + +import com.sa.zentao.entity.ZtCasestep; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * Mapper 接口 + *

+ * + * @author gqb + * @since 2024-07-03 + */ +public interface ZtCasestepMapper extends BaseMapper { + +} diff --git a/src/main/java/com/sa/zentao/mapper/ZtCronDevopsMapper.java b/src/main/java/com/sa/zentao/mapper/ZtCronDevopsMapper.java new file mode 100644 index 0000000..b824acb --- /dev/null +++ b/src/main/java/com/sa/zentao/mapper/ZtCronDevopsMapper.java @@ -0,0 +1,23 @@ +package com.sa.zentao.mapper; + +import com.sa.zentao.dao.ZtCronDevopsDTO; +import com.sa.zentao.entity.ZtCronDevops; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.sa.zentao.qo.ZtUserQo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * Mapper 接口 + *

+ * + * @author gqb + * @since 2024-10-22 + */ +public interface ZtCronDevopsMapper extends BaseMapper { + + List pageList(@Param("qo") ZtUserQo qo); + +} diff --git a/src/main/java/com/sa/zentao/mapper/ZtCronDevopsUserMapper.java b/src/main/java/com/sa/zentao/mapper/ZtCronDevopsUserMapper.java new file mode 100644 index 0000000..6d7bfeb --- /dev/null +++ b/src/main/java/com/sa/zentao/mapper/ZtCronDevopsUserMapper.java @@ -0,0 +1,16 @@ +package com.sa.zentao.mapper; + +import com.sa.zentao.entity.ZtCronDevopsUser; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * Mapper 接口 + *

+ * + * @author gqb + * @since 2024-10-23 + */ +public interface ZtCronDevopsUserMapper extends BaseMapper { + +} diff --git a/src/main/java/com/sa/zentao/mapper/ZtEffortMapper.java b/src/main/java/com/sa/zentao/mapper/ZtEffortMapper.java new file mode 100644 index 0000000..4f765c7 --- /dev/null +++ b/src/main/java/com/sa/zentao/mapper/ZtEffortMapper.java @@ -0,0 +1,16 @@ +package com.sa.zentao.mapper; + +import com.sa.zentao.entity.ZtEffort; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * Mapper 接口 + *

+ * + * @author gqb + * @since 2024-08-13 + */ +public interface ZtEffortMapper extends BaseMapper { + +} diff --git a/src/main/java/com/sa/zentao/mapper/ZtExecutionprojectMapper.java b/src/main/java/com/sa/zentao/mapper/ZtExecutionprojectMapper.java new file mode 100644 index 0000000..cf2cff9 --- /dev/null +++ b/src/main/java/com/sa/zentao/mapper/ZtExecutionprojectMapper.java @@ -0,0 +1,16 @@ +package com.sa.zentao.mapper; + +import com.sa.zentao.entity.ZtExecutionproject; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * Mapper 接口 + *

+ * + * @author gqb + * @since 2024-08-01 + */ +public interface ZtExecutionprojectMapper extends BaseMapper { + +} diff --git a/src/main/java/com/sa/zentao/mapper/ZtKanbanMapper.java b/src/main/java/com/sa/zentao/mapper/ZtKanbanMapper.java new file mode 100644 index 0000000..2c03375 --- /dev/null +++ b/src/main/java/com/sa/zentao/mapper/ZtKanbanMapper.java @@ -0,0 +1,16 @@ +package com.sa.zentao.mapper; + +import com.sa.zentao.entity.ZtKanban; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * Mapper 接口 + *

+ * + * @author gqb + * @since 2024-07-09 + */ +public interface ZtKanbanMapper extends BaseMapper { + +} diff --git a/src/main/java/com/sa/zentao/mapper/ZtKanbancardMapper.java b/src/main/java/com/sa/zentao/mapper/ZtKanbancardMapper.java new file mode 100644 index 0000000..5981bba --- /dev/null +++ b/src/main/java/com/sa/zentao/mapper/ZtKanbancardMapper.java @@ -0,0 +1,16 @@ +package com.sa.zentao.mapper; + +import com.sa.zentao.entity.ZtKanbancard; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * Mapper 接口 + *

+ * + * @author gqb + * @since 2024-07-09 + */ +public interface ZtKanbancardMapper extends BaseMapper { + +} diff --git a/src/main/java/com/sa/zentao/mapper/ZtKanbancellMapper.java b/src/main/java/com/sa/zentao/mapper/ZtKanbancellMapper.java new file mode 100644 index 0000000..896677f --- /dev/null +++ b/src/main/java/com/sa/zentao/mapper/ZtKanbancellMapper.java @@ -0,0 +1,16 @@ +package com.sa.zentao.mapper; + +import com.sa.zentao.entity.ZtKanbancell; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * Mapper 接口 + *

+ * + * @author gqb + * @since 2024-07-08 + */ +public interface ZtKanbancellMapper extends BaseMapper { + +} diff --git a/src/main/java/com/sa/zentao/mapper/ZtKanbancolumnMapper.java b/src/main/java/com/sa/zentao/mapper/ZtKanbancolumnMapper.java new file mode 100644 index 0000000..4ecdf6e --- /dev/null +++ b/src/main/java/com/sa/zentao/mapper/ZtKanbancolumnMapper.java @@ -0,0 +1,21 @@ +package com.sa.zentao.mapper; + +import com.sa.zentao.dao.ZtKanbancolumnDTO; +import com.sa.zentao.entity.ZtKanbancolumn; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * Mapper 接口 + *

+ * + * @author gqb + * @since 2024-07-09 + */ +public interface ZtKanbancolumnMapper extends BaseMapper { + + List listByLaneIds(@Param("laneIds") List laneIds); +} diff --git a/src/main/java/com/sa/zentao/mapper/ZtKanbangroupMapper.java b/src/main/java/com/sa/zentao/mapper/ZtKanbangroupMapper.java new file mode 100644 index 0000000..e7b307f --- /dev/null +++ b/src/main/java/com/sa/zentao/mapper/ZtKanbangroupMapper.java @@ -0,0 +1,16 @@ +package com.sa.zentao.mapper; + +import com.sa.zentao.entity.ZtKanbangroup; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * Mapper 接口 + *

+ * + * @author gqb + * @since 2024-07-09 + */ +public interface ZtKanbangroupMapper extends BaseMapper { + +} diff --git a/src/main/java/com/sa/zentao/mapper/ZtKanbanlaneMapper.java b/src/main/java/com/sa/zentao/mapper/ZtKanbanlaneMapper.java new file mode 100644 index 0000000..a5bacdf --- /dev/null +++ b/src/main/java/com/sa/zentao/mapper/ZtKanbanlaneMapper.java @@ -0,0 +1,25 @@ +package com.sa.zentao.mapper; + +import com.sa.zentao.entity.ZtKanbancell; +import com.sa.zentao.entity.ZtKanbanlane; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * Mapper 接口 + *

+ * + * @author gqb + * @since 2024-07-09 + */ +public interface ZtKanbanlaneMapper extends BaseMapper { + + ZtKanbancell getZtKanbanlane(@Param("type") String type, @Param("status")String status, @Param("id") Integer id); + + List getZtKanbanlaneList(@Param("type") String type,@Param("id") String id); + + +} diff --git a/src/main/java/com/sa/zentao/mapper/ZtKanbanregionMapper.java b/src/main/java/com/sa/zentao/mapper/ZtKanbanregionMapper.java new file mode 100644 index 0000000..113fbb1 --- /dev/null +++ b/src/main/java/com/sa/zentao/mapper/ZtKanbanregionMapper.java @@ -0,0 +1,16 @@ +package com.sa.zentao.mapper; + +import com.sa.zentao.entity.ZtKanbanregion; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * Mapper 接口 + *

+ * + * @author gqb + * @since 2024-07-09 + */ +public interface ZtKanbanregionMapper extends BaseMapper { + +} diff --git a/src/main/java/com/sa/zentao/mapper/ZtKanbanspaceMapper.java b/src/main/java/com/sa/zentao/mapper/ZtKanbanspaceMapper.java new file mode 100644 index 0000000..20a89b8 --- /dev/null +++ b/src/main/java/com/sa/zentao/mapper/ZtKanbanspaceMapper.java @@ -0,0 +1,16 @@ +package com.sa.zentao.mapper; + +import com.sa.zentao.entity.ZtKanbanspace; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * Mapper 接口 + *

+ * + * @author gqb + * @since 2024-07-09 + */ +public interface ZtKanbanspaceMapper extends BaseMapper { + +} diff --git a/src/main/java/com/sa/zentao/mapper/ZtModuleMapper.java b/src/main/java/com/sa/zentao/mapper/ZtModuleMapper.java new file mode 100644 index 0000000..9b02fd3 --- /dev/null +++ b/src/main/java/com/sa/zentao/mapper/ZtModuleMapper.java @@ -0,0 +1,16 @@ +package com.sa.zentao.mapper; + +import com.sa.zentao.entity.ZtModule; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * Mapper 接口 + *

+ * + * @author gqb + * @since 2024-08-05 + */ +public interface ZtModuleMapper extends BaseMapper { + +} diff --git a/src/main/java/com/sa/zentao/mapper/ZtProductMapper.java b/src/main/java/com/sa/zentao/mapper/ZtProductMapper.java new file mode 100644 index 0000000..f60cac7 --- /dev/null +++ b/src/main/java/com/sa/zentao/mapper/ZtProductMapper.java @@ -0,0 +1,25 @@ +package com.sa.zentao.mapper; + +import com.sa.zentao.dao.ZtProductDTO; +import com.sa.zentao.entity.ZtProduct; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.sa.zentao.qo.ZtProjectQo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * Mapper 接口 + *

+ * + * @author gqb + * @since 2024-06-13 + */ +@Mapper +public interface ZtProductMapper extends BaseMapper { + + List productPageList(@Param("qo") ZtProjectQo qo); + +} diff --git a/src/main/java/com/sa/zentao/mapper/ZtProjectMapper.java b/src/main/java/com/sa/zentao/mapper/ZtProjectMapper.java new file mode 100644 index 0000000..f8b97b3 --- /dev/null +++ b/src/main/java/com/sa/zentao/mapper/ZtProjectMapper.java @@ -0,0 +1,32 @@ +package com.sa.zentao.mapper; + +import com.sa.zentao.dao.ZtProjectDTO; +import com.sa.zentao.entity.ZtProject; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.sa.zentao.qo.ZtProjectQo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * Mapper 接口 + *

+ * + * @author gqb + * @since 2024-06-13 + */ +@Mapper +public interface ZtProjectMapper extends BaseMapper { + + List groupPageList(@Param("qo") ZtProjectQo qo); + + List pageProject(@Param("qo") ZtProjectQo qo); + + List implementPageList(@Param("qo")ZtProjectQo qo); + + List getProjectByProduct(@Param("qo") ZtProjectQo qo); + + List executionListByProduct(@Param("qo")ZtProjectQo qo); +} diff --git a/src/main/java/com/sa/zentao/mapper/ZtProjectproductMapper.java b/src/main/java/com/sa/zentao/mapper/ZtProjectproductMapper.java new file mode 100644 index 0000000..2931ba1 --- /dev/null +++ b/src/main/java/com/sa/zentao/mapper/ZtProjectproductMapper.java @@ -0,0 +1,16 @@ +package com.sa.zentao.mapper; + +import com.sa.zentao.entity.ZtProjectproduct; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * Mapper 接口 + *

+ * + * @author gqb + * @since 2024-06-18 + */ +public interface ZtProjectproductMapper extends BaseMapper { + +} diff --git a/src/main/java/com/sa/zentao/mapper/ZtProjectstoryMapper.java b/src/main/java/com/sa/zentao/mapper/ZtProjectstoryMapper.java new file mode 100644 index 0000000..abf63cd --- /dev/null +++ b/src/main/java/com/sa/zentao/mapper/ZtProjectstoryMapper.java @@ -0,0 +1,16 @@ +package com.sa.zentao.mapper; + +import com.sa.zentao.entity.ZtProjectstory; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * Mapper 接口 + *

+ * + * @author gqb + * @since 2024-07-02 + */ +public interface ZtProjectstoryMapper extends BaseMapper { + +} diff --git a/src/main/java/com/sa/zentao/mapper/ZtSearchindexMapper.java b/src/main/java/com/sa/zentao/mapper/ZtSearchindexMapper.java new file mode 100644 index 0000000..344846e --- /dev/null +++ b/src/main/java/com/sa/zentao/mapper/ZtSearchindexMapper.java @@ -0,0 +1,16 @@ +package com.sa.zentao.mapper; + +import com.sa.zentao.entity.ZtSearchindex; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * Mapper 接口 + *

+ * + * @author gqb + * @since 2024-06-24 + */ +public interface ZtSearchindexMapper extends BaseMapper { + +} diff --git a/src/main/java/com/sa/zentao/mapper/ZtStoryFeedbackMapper.java b/src/main/java/com/sa/zentao/mapper/ZtStoryFeedbackMapper.java new file mode 100644 index 0000000..76ea537 --- /dev/null +++ b/src/main/java/com/sa/zentao/mapper/ZtStoryFeedbackMapper.java @@ -0,0 +1,23 @@ +package com.sa.zentao.mapper; + +import com.sa.zentao.dao.ZtStoryFeedbackDTO; +import com.sa.zentao.entity.ZtStoryFeedback; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.sa.zentao.qo.ZtProjectQo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * Mapper 接口 + *

+ * + * @author gqb + * @since 2024-10-15 + */ +public interface ZtStoryFeedbackMapper extends BaseMapper { + + List pageList(@Param("qo") ZtProjectQo qo); + +} diff --git a/src/main/java/com/sa/zentao/mapper/ZtStoryMapper.java b/src/main/java/com/sa/zentao/mapper/ZtStoryMapper.java new file mode 100644 index 0000000..6739ae0 --- /dev/null +++ b/src/main/java/com/sa/zentao/mapper/ZtStoryMapper.java @@ -0,0 +1,25 @@ +package com.sa.zentao.mapper; + +import com.sa.zentao.dao.ZtStoryDTO; +import com.sa.zentao.entity.ZtStory; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.sa.zentao.qo.ZtProjectQo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * Mapper 接口 + *

+ * + * @author gqb + * @since 2024-06-24 + */ +public interface ZtStoryMapper extends BaseMapper { + + List pageList(@Param("qo") ZtProjectQo qo); + + List projectStoryPageList(@Param("qo") ZtProjectQo qo); + +} diff --git a/src/main/java/com/sa/zentao/mapper/ZtStoryUserMapper.java b/src/main/java/com/sa/zentao/mapper/ZtStoryUserMapper.java new file mode 100644 index 0000000..e1ad03f --- /dev/null +++ b/src/main/java/com/sa/zentao/mapper/ZtStoryUserMapper.java @@ -0,0 +1,22 @@ +package com.sa.zentao.mapper; + +import com.sa.zentao.dao.ZtStoryUserDTO; +import com.sa.zentao.entity.ZtStoryUser; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.sa.zentao.qo.StoryQo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * Mapper 接口 + *

+ * + * @author gqb + * @since 2024-10-21 + */ +public interface ZtStoryUserMapper extends BaseMapper { + + List pageList(@Param("qo") StoryQo qo); +} diff --git a/src/main/java/com/sa/zentao/mapper/ZtStoryreviewMapper.java b/src/main/java/com/sa/zentao/mapper/ZtStoryreviewMapper.java new file mode 100644 index 0000000..fe23bf3 --- /dev/null +++ b/src/main/java/com/sa/zentao/mapper/ZtStoryreviewMapper.java @@ -0,0 +1,16 @@ +package com.sa.zentao.mapper; + +import com.sa.zentao.entity.ZtStoryreview; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * Mapper 接口 + *

+ * + * @author gqb + * @since 2024-06-24 + */ +public interface ZtStoryreviewMapper extends BaseMapper { + +} diff --git a/src/main/java/com/sa/zentao/mapper/ZtStoryspecMapper.java b/src/main/java/com/sa/zentao/mapper/ZtStoryspecMapper.java new file mode 100644 index 0000000..de9c12f --- /dev/null +++ b/src/main/java/com/sa/zentao/mapper/ZtStoryspecMapper.java @@ -0,0 +1,16 @@ +package com.sa.zentao.mapper; + +import com.sa.zentao.entity.ZtStoryspec; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * Mapper 接口 + *

+ * + * @author gqb + * @since 2024-07-03 + */ +public interface ZtStoryspecMapper extends BaseMapper { + +} diff --git a/src/main/java/com/sa/zentao/mapper/ZtTaskMapper.java b/src/main/java/com/sa/zentao/mapper/ZtTaskMapper.java new file mode 100644 index 0000000..0f41b51 --- /dev/null +++ b/src/main/java/com/sa/zentao/mapper/ZtTaskMapper.java @@ -0,0 +1,22 @@ +package com.sa.zentao.mapper; + +import com.sa.zentao.dao.ZtTaskDTO; +import com.sa.zentao.entity.ZtTask; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.sa.zentao.qo.ZtProjectQo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * Mapper 接口 + *

+ * + * @author gqb + * @since 2024-06-25 + */ +public interface ZtTaskMapper extends BaseMapper { + + List taskPageList(@Param("qo") ZtProjectQo qo); +} diff --git a/src/main/java/com/sa/zentao/mapper/ZtTaskestimateMapper.java b/src/main/java/com/sa/zentao/mapper/ZtTaskestimateMapper.java new file mode 100644 index 0000000..4fd39d1 --- /dev/null +++ b/src/main/java/com/sa/zentao/mapper/ZtTaskestimateMapper.java @@ -0,0 +1,16 @@ +package com.sa.zentao.mapper; + +import com.sa.zentao.entity.ZtTaskestimate; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * Mapper 接口 + *

+ * + * @author gqb + * @since 2024-06-25 + */ +public interface ZtTaskestimateMapper extends BaseMapper { + +} diff --git a/src/main/java/com/sa/zentao/mapper/ZtTaskspecMapper.java b/src/main/java/com/sa/zentao/mapper/ZtTaskspecMapper.java new file mode 100644 index 0000000..e298d11 --- /dev/null +++ b/src/main/java/com/sa/zentao/mapper/ZtTaskspecMapper.java @@ -0,0 +1,16 @@ +package com.sa.zentao.mapper; + +import com.sa.zentao.entity.ZtTaskspec; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * Mapper 接口 + *

+ * + * @author gqb + * @since 2024-06-25 + */ +public interface ZtTaskspecMapper extends BaseMapper { + +} diff --git a/src/main/java/com/sa/zentao/mapper/ZtTaskteamMapper.java b/src/main/java/com/sa/zentao/mapper/ZtTaskteamMapper.java new file mode 100644 index 0000000..7dba634 --- /dev/null +++ b/src/main/java/com/sa/zentao/mapper/ZtTaskteamMapper.java @@ -0,0 +1,16 @@ +package com.sa.zentao.mapper; + +import com.sa.zentao.entity.ZtTaskteam; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * Mapper 接口 + *

+ * + * @author gqb + * @since 2024-06-25 + */ +public interface ZtTaskteamMapper extends BaseMapper { + +} diff --git a/src/main/java/com/sa/zentao/mapper/ZtTeamMapper.java b/src/main/java/com/sa/zentao/mapper/ZtTeamMapper.java new file mode 100644 index 0000000..1696d6c --- /dev/null +++ b/src/main/java/com/sa/zentao/mapper/ZtTeamMapper.java @@ -0,0 +1,16 @@ +package com.sa.zentao.mapper; + +import com.sa.zentao.entity.ZtTeam; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * Mapper 接口 + *

+ * + * @author gqb + * @since 2024-07-05 + */ +public interface ZtTeamMapper extends BaseMapper { + +} diff --git a/src/main/java/com/sa/zentao/mapper/ZtTestresultMapper.java b/src/main/java/com/sa/zentao/mapper/ZtTestresultMapper.java new file mode 100644 index 0000000..2756c10 --- /dev/null +++ b/src/main/java/com/sa/zentao/mapper/ZtTestresultMapper.java @@ -0,0 +1,16 @@ +package com.sa.zentao.mapper; + +import com.sa.zentao.entity.ZtTestresult; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * Mapper 接口 + *

+ * + * @author gqb + * @since 2024-07-29 + */ +public interface ZtTestresultMapper extends BaseMapper { + +} diff --git a/src/main/java/com/sa/zentao/mapper/ZtTesttaskMapper.java b/src/main/java/com/sa/zentao/mapper/ZtTesttaskMapper.java new file mode 100644 index 0000000..b678619 --- /dev/null +++ b/src/main/java/com/sa/zentao/mapper/ZtTesttaskMapper.java @@ -0,0 +1,16 @@ +package com.sa.zentao.mapper; + +import com.sa.zentao.entity.ZtTesttask; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * Mapper 接口 + *

+ * + * @author gqb + * @since 2024-07-17 + */ +public interface ZtTesttaskMapper extends BaseMapper { + +} diff --git a/src/main/java/com/sa/zentao/mapper/ZtUserMapper.java b/src/main/java/com/sa/zentao/mapper/ZtUserMapper.java new file mode 100644 index 0000000..ff36a6a --- /dev/null +++ b/src/main/java/com/sa/zentao/mapper/ZtUserMapper.java @@ -0,0 +1,21 @@ +package com.sa.zentao.mapper; + +import com.sa.zentao.entity.ZtUser; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.sa.zentao.qo.ZtUserQo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * Mapper 接口 + *

+ * + * @author gqb + * @since 2024-06-18 + */ +public interface ZtUserMapper extends BaseMapper { + + List pageList(@Param("qo") ZtUserQo qo); +} diff --git a/src/main/java/com/sa/zentao/mapper/ZtYwBackupsMapper.java b/src/main/java/com/sa/zentao/mapper/ZtYwBackupsMapper.java new file mode 100644 index 0000000..4315dab --- /dev/null +++ b/src/main/java/com/sa/zentao/mapper/ZtYwBackupsMapper.java @@ -0,0 +1,22 @@ +package com.sa.zentao.mapper; + +import com.sa.zentao.dao.ZtYwBackupsDTO; +import com.sa.zentao.entity.ZtYwBackups; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.sa.zentao.qo.ZtYwPatrolQo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * Mapper 接口 + *

+ * + * @author gqb + * @since 2024-11-18 + */ +public interface ZtYwBackupsMapper extends BaseMapper { + + List pageList(@Param("qo") ZtYwPatrolQo qo); +} diff --git a/src/main/java/com/sa/zentao/mapper/ZtYwChangeMapper.java b/src/main/java/com/sa/zentao/mapper/ZtYwChangeMapper.java new file mode 100644 index 0000000..bdccb2b --- /dev/null +++ b/src/main/java/com/sa/zentao/mapper/ZtYwChangeMapper.java @@ -0,0 +1,22 @@ +package com.sa.zentao.mapper; + +import com.sa.zentao.dao.ZtYwChangeDTO; +import com.sa.zentao.entity.ZtYwChange; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.sa.zentao.qo.ZtYwPatrolQo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * Mapper 接口 + *

+ * + * @author gqb + * @since 2024-11-19 + */ +public interface ZtYwChangeMapper extends BaseMapper { + + List pageList(@Param("qo") ZtYwPatrolQo qo); +} diff --git a/src/main/java/com/sa/zentao/mapper/ZtYwFaultListMapper.java b/src/main/java/com/sa/zentao/mapper/ZtYwFaultListMapper.java new file mode 100644 index 0000000..a9ebd6b --- /dev/null +++ b/src/main/java/com/sa/zentao/mapper/ZtYwFaultListMapper.java @@ -0,0 +1,16 @@ +package com.sa.zentao.mapper; + +import com.sa.zentao.entity.ZtYwFaultList; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * Mapper 接口 + *

+ * + * @author gqb + * @since 2024-11-19 + */ +public interface ZtYwFaultListMapper extends BaseMapper { + +} diff --git a/src/main/java/com/sa/zentao/mapper/ZtYwFaultMapper.java b/src/main/java/com/sa/zentao/mapper/ZtYwFaultMapper.java new file mode 100644 index 0000000..9de94ee --- /dev/null +++ b/src/main/java/com/sa/zentao/mapper/ZtYwFaultMapper.java @@ -0,0 +1,22 @@ +package com.sa.zentao.mapper; + +import com.sa.zentao.dao.ZtYwFaultDTO; +import com.sa.zentao.entity.ZtYwFault; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.sa.zentao.qo.ZtYwPatrolQo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * Mapper 接口 + *

+ * + * @author gqb + * @since 2024-11-19 + */ +public interface ZtYwFaultMapper extends BaseMapper { + + List pageList(@Param("qo") ZtYwPatrolQo qo); +} diff --git a/src/main/java/com/sa/zentao/mapper/ZtYwFwqsearchMapper.java b/src/main/java/com/sa/zentao/mapper/ZtYwFwqsearchMapper.java new file mode 100644 index 0000000..e7f3ce6 --- /dev/null +++ b/src/main/java/com/sa/zentao/mapper/ZtYwFwqsearchMapper.java @@ -0,0 +1,22 @@ +package com.sa.zentao.mapper; + +import com.sa.zentao.dao.ZtYwFwqsearchDTO; +import com.sa.zentao.entity.ZtYwFwqsearch; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.sa.zentao.qo.ZtYwPatrolQo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * Mapper 接口 + *

+ * + * @author gqb + * @since 2024-11-19 + */ +public interface ZtYwFwqsearchMapper extends BaseMapper { + + List pageList(@Param("qo") ZtYwPatrolQo qo); +} diff --git a/src/main/java/com/sa/zentao/mapper/ZtYwMachineRoomMapper.java b/src/main/java/com/sa/zentao/mapper/ZtYwMachineRoomMapper.java new file mode 100644 index 0000000..ce7883b --- /dev/null +++ b/src/main/java/com/sa/zentao/mapper/ZtYwMachineRoomMapper.java @@ -0,0 +1,23 @@ +package com.sa.zentao.mapper; + +import com.sa.zentao.dao.ZtYwMachineRoomDTO; +import com.sa.zentao.entity.ZtYwMachineRoom; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.sa.zentao.qo.ZtYwPatrolQo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * Mapper 接口 + *

+ * + * @author gqb + * @since 2024-11-19 + */ +public interface ZtYwMachineRoomMapper extends BaseMapper { + + List pageList(@Param("qo") ZtYwPatrolQo qo); + +} diff --git a/src/main/java/com/sa/zentao/mapper/ZtYwPatrolMapper.java b/src/main/java/com/sa/zentao/mapper/ZtYwPatrolMapper.java new file mode 100644 index 0000000..4d0a36b --- /dev/null +++ b/src/main/java/com/sa/zentao/mapper/ZtYwPatrolMapper.java @@ -0,0 +1,23 @@ +package com.sa.zentao.mapper; + +import com.sa.zentao.dao.ZtYwPatrolDTO; +import com.sa.zentao.entity.ZtYwPatrol; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.sa.zentao.qo.ZtYwPatrolQo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * Mapper 接口 + *

+ * + * @author gqb + * @since 2024-11-18 + */ +public interface ZtYwPatrolMapper extends BaseMapper { + + List pageList(@Param("qo") ZtYwPatrolQo qo); + +} diff --git a/src/main/java/com/sa/zentao/mapper/ZtYwTaskMapper.java b/src/main/java/com/sa/zentao/mapper/ZtYwTaskMapper.java new file mode 100644 index 0000000..e529499 --- /dev/null +++ b/src/main/java/com/sa/zentao/mapper/ZtYwTaskMapper.java @@ -0,0 +1,22 @@ +package com.sa.zentao.mapper; + +import com.sa.zentao.dao.ZtYwTaskDTO; +import com.sa.zentao.entity.ZtYwTask; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.sa.zentao.qo.ZtYwPatrolQo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * Mapper 接口 + *

+ * + * @author gqb + * @since 2024-11-19 + */ +public interface ZtYwTaskMapper extends BaseMapper { + + List pageList(@Param("qo") ZtYwPatrolQo qo); +} diff --git a/src/main/java/com/sa/zentao/qo/ActionQo.java b/src/main/java/com/sa/zentao/qo/ActionQo.java new file mode 100644 index 0000000..b46faab --- /dev/null +++ b/src/main/java/com/sa/zentao/qo/ActionQo.java @@ -0,0 +1,18 @@ +package com.sa.zentao.qo; + +import com.alibaba.excel.annotation.ExcelIgnore; +import com.sa.zentao.enums.ActionType; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.Date; + +@Data +@EqualsAndHashCode(callSuper = false) +public class ActionQo extends BaseQo { + + + private ActionType type; + + private Integer id; +} diff --git a/src/main/java/com/sa/zentao/qo/BaseQo.java b/src/main/java/com/sa/zentao/qo/BaseQo.java new file mode 100644 index 0000000..b5f7a9c --- /dev/null +++ b/src/main/java/com/sa/zentao/qo/BaseQo.java @@ -0,0 +1,18 @@ +package com.sa.zentao.qo; + +import com.alibaba.excel.annotation.ExcelIgnore; +import lombok.Data; + +import java.util.Date; + +@Data +public class BaseQo { + @ExcelIgnore + private Integer currentPage = 1; + @ExcelIgnore + private Integer pageSize = 20; + @ExcelIgnore + private Date startDate; + @ExcelIgnore + private Date endDate; +} diff --git a/src/main/java/com/sa/zentao/qo/EffortQo.java b/src/main/java/com/sa/zentao/qo/EffortQo.java new file mode 100644 index 0000000..641aa88 --- /dev/null +++ b/src/main/java/com/sa/zentao/qo/EffortQo.java @@ -0,0 +1,15 @@ +package com.sa.zentao.qo; + +import com.sa.zentao.enums.ActionType; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@EqualsAndHashCode(callSuper = false) +public class EffortQo extends BaseQo { + + + private String type; + + private Integer id; +} diff --git a/src/main/java/com/sa/zentao/qo/FestivalConfigQo.java b/src/main/java/com/sa/zentao/qo/FestivalConfigQo.java new file mode 100644 index 0000000..100e213 --- /dev/null +++ b/src/main/java/com/sa/zentao/qo/FestivalConfigQo.java @@ -0,0 +1,27 @@ +package com.sa.zentao.qo; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.List; + +@Data +@EqualsAndHashCode(callSuper = false) +public class FestivalConfigQo extends BaseQo{ + + //节日名称 + private String name; + //假期 + List vacationDate; + + //补班 + List repairDate; + + //f法定节假日 + List legalVacationDate; + + //年份 + private Integer year; + + private Integer id; +} diff --git a/src/main/java/com/sa/zentao/qo/KanbanQo.java b/src/main/java/com/sa/zentao/qo/KanbanQo.java new file mode 100644 index 0000000..4c501ea --- /dev/null +++ b/src/main/java/com/sa/zentao/qo/KanbanQo.java @@ -0,0 +1,38 @@ +package com.sa.zentao.qo; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.List; + +/** + *

+ * + *

+ * + * @author gqb + * @since 2024-06-13 + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class KanbanQo extends BaseQo { + + private static final long serialVersionUID = 1L; + + //业务id + private Integer id; + + private String statusType; + + private String tabType; + private Integer moveId; + private Integer fromId; + private Integer toId; + +} diff --git a/src/main/java/com/sa/zentao/qo/StoryQo.java b/src/main/java/com/sa/zentao/qo/StoryQo.java new file mode 100644 index 0000000..70e3cf4 --- /dev/null +++ b/src/main/java/com/sa/zentao/qo/StoryQo.java @@ -0,0 +1,19 @@ +package com.sa.zentao.qo; + +import com.sa.zentao.enums.ActionType; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@EqualsAndHashCode(callSuper = false) +public class StoryQo extends BaseQo { + + + private Integer id; + + private String userName; + private String module; + private String searchVal; + + private Integer productId; +} diff --git a/src/main/java/com/sa/zentao/qo/ZtBugQo.java b/src/main/java/com/sa/zentao/qo/ZtBugQo.java new file mode 100644 index 0000000..a2080da --- /dev/null +++ b/src/main/java/com/sa/zentao/qo/ZtBugQo.java @@ -0,0 +1,43 @@ +package com.sa.zentao.qo; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.List; + +/** + *

+ * + *

+ * + * @author gqb + * @since 2024-06-13 + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class ZtBugQo extends BaseQo { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + // unconfirmed +// confirmed +// fixing +// fixed +// testing +// tested +// closed + private String status; + + private String remark; + + private String step; + + private String assignedto; + + private String desc; +} diff --git a/src/main/java/com/sa/zentao/qo/ZtCaseQo.java b/src/main/java/com/sa/zentao/qo/ZtCaseQo.java new file mode 100644 index 0000000..0bfe418 --- /dev/null +++ b/src/main/java/com/sa/zentao/qo/ZtCaseQo.java @@ -0,0 +1,51 @@ +package com.sa.zentao.qo; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.List; + +/** + *

+ * + *

+ * + * @author gqb + * @since 2024-06-13 + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class ZtCaseQo extends BaseQo { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + + private Integer productId; + + private List productIds; + + private Integer project; + + private Integer charter; + + private String model; + + private String type; + + private String deleted; + + + private String searchVal; + + private Integer implementId; + + private String userName; + private String execution; + + private String status; +} diff --git a/src/main/java/com/sa/zentao/qo/ZtCountQo.java b/src/main/java/com/sa/zentao/qo/ZtCountQo.java new file mode 100644 index 0000000..0729b66 --- /dev/null +++ b/src/main/java/com/sa/zentao/qo/ZtCountQo.java @@ -0,0 +1,40 @@ +package com.sa.zentao.qo; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.Date; + +/** + *

+ * + *

+ * + * @author gqb + * @since 2024-06-13 + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class ZtCountQo extends BaseQo { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + private Integer project; + // unconfirmed +// confirmed +// fixing +// fixed +// testing +// tested +// closed + private String status; + + private String remark; + + private Date date; +} diff --git a/src/main/java/com/sa/zentao/qo/ZtModuleQo.java b/src/main/java/com/sa/zentao/qo/ZtModuleQo.java new file mode 100644 index 0000000..28190c4 --- /dev/null +++ b/src/main/java/com/sa/zentao/qo/ZtModuleQo.java @@ -0,0 +1,24 @@ +package com.sa.zentao.qo; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + *

+ * + *

+ * + * @author gqb + * @since 2024-06-13 + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class ZtModuleQo extends BaseQo { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; +} diff --git a/src/main/java/com/sa/zentao/qo/ZtProjectQo.java b/src/main/java/com/sa/zentao/qo/ZtProjectQo.java new file mode 100644 index 0000000..a11fc0f --- /dev/null +++ b/src/main/java/com/sa/zentao/qo/ZtProjectQo.java @@ -0,0 +1,67 @@ +package com.sa.zentao.qo; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.Date; +import java.util.List; + +/** + *

+ * + *

+ * + * @author gqb + * @since 2024-06-13 + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class ZtProjectQo extends BaseQo { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + + private Integer productId; + + private List productIds; + + private List projectIds; + + private Integer project; + + private Integer charter; + + private String model; + + private String type; + + private String deleted; + + + private String searchVal; + + private Integer implementId; + + private String userName; + private String execution; + + private String status; + + private String title; + + private Integer module; + + private Date date; + + private List teamList; +} diff --git a/src/main/java/com/sa/zentao/qo/ZtUserQo.java b/src/main/java/com/sa/zentao/qo/ZtUserQo.java new file mode 100644 index 0000000..d84ff4e --- /dev/null +++ b/src/main/java/com/sa/zentao/qo/ZtUserQo.java @@ -0,0 +1,37 @@ +package com.sa.zentao.qo; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + *

+ * + *

+ * + * @author gqb + * @since 2024-06-13 + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class ZtUserQo extends BaseQo { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + // unconfirmed +// confirmed +// fixing +// fixed +// testing +// tested +// closed + private String account; + + private String remark; + + private String userName; +} diff --git a/src/main/java/com/sa/zentao/qo/ZtYwPatrolQo.java b/src/main/java/com/sa/zentao/qo/ZtYwPatrolQo.java new file mode 100644 index 0000000..637a033 --- /dev/null +++ b/src/main/java/com/sa/zentao/qo/ZtYwPatrolQo.java @@ -0,0 +1,16 @@ +package com.sa.zentao.qo; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@EqualsAndHashCode(callSuper = false) +public class ZtYwPatrolQo extends BaseQo { + + private Integer changeStatus; + private String result; + + private Integer id; + + private String changeEffectResult; +} diff --git a/src/main/java/com/sa/zentao/service/IFestivalConfigService.java b/src/main/java/com/sa/zentao/service/IFestivalConfigService.java new file mode 100644 index 0000000..4355699 --- /dev/null +++ b/src/main/java/com/sa/zentao/service/IFestivalConfigService.java @@ -0,0 +1,26 @@ +package com.sa.zentao.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.github.pagehelper.PageInfo; +import com.sa.zentao.dao.FestivalConfigDTO; +import com.sa.zentao.entity.FestivalConfig; +import com.sa.zentao.qo.FestivalConfigQo; + +/** + *

+ * 服务类 + *

+ * + * @author gqb + * @since 2023-03-20 + */ +public interface IFestivalConfigService extends IService { + + void add(FestivalConfigQo qo); + + void updateFestivalConfig(FestivalConfigQo qo); + + PageInfo pageList(FestivalConfigQo qo); + + public void initfestivalAndHoliday(); +} diff --git a/src/main/java/com/sa/zentao/service/IVerificationCodeService.java b/src/main/java/com/sa/zentao/service/IVerificationCodeService.java new file mode 100644 index 0000000..84f8d35 --- /dev/null +++ b/src/main/java/com/sa/zentao/service/IVerificationCodeService.java @@ -0,0 +1,16 @@ +package com.sa.zentao.service; + +import com.sa.zentao.entity.VerificationCode; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 服务类 + *

+ * + * @author gqb + * @since 2024-09-14 + */ +public interface IVerificationCodeService extends IService { + +} diff --git a/src/main/java/com/sa/zentao/service/IZtActionService.java b/src/main/java/com/sa/zentao/service/IZtActionService.java new file mode 100644 index 0000000..367f20d --- /dev/null +++ b/src/main/java/com/sa/zentao/service/IZtActionService.java @@ -0,0 +1,42 @@ +package com.sa.zentao.service; + +import com.sa.zentao.dao.ZtActionDTO; +import com.sa.zentao.entity.ZtAction; +import com.baomidou.mybatisplus.extension.service.IService; +import com.sa.zentao.enums.ActionStatus; +import com.sa.zentao.enums.ActionType; +import com.sa.zentao.qo.ActionQo; + +import java.util.List; + +/** + *

+ * 服务类 + *

+ * + * @author gqb + * @since 2024-06-27 + */ +public interface IZtActionService extends IService { + + /** + * + * @param type 类型 + * @param status 状态 + * @param objectId 原id + * @param product 产品 + * @param project 项目 + * @param exection 执行? + * @param actor 操作者 + * @param comment 描述 + * @param extra 指派者 + */ + void addAction(ActionType type, ActionStatus status, Integer objectId, + String product, Integer project, + Integer exection, String actor, String comment, String extra); + + + List actionList(ActionQo qo); + + List todayActionList(ActionQo qo); +} diff --git a/src/main/java/com/sa/zentao/service/IZtActionrecentService.java b/src/main/java/com/sa/zentao/service/IZtActionrecentService.java new file mode 100644 index 0000000..d6f9235 --- /dev/null +++ b/src/main/java/com/sa/zentao/service/IZtActionrecentService.java @@ -0,0 +1,16 @@ +package com.sa.zentao.service; + +import com.sa.zentao.entity.ZtActionrecent; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 服务类 + *

+ * + * @author gqb + * @since 2024-06-27 + */ +public interface IZtActionrecentService extends IService { + +} diff --git a/src/main/java/com/sa/zentao/service/IZtBugService.java b/src/main/java/com/sa/zentao/service/IZtBugService.java new file mode 100644 index 0000000..48a1c52 --- /dev/null +++ b/src/main/java/com/sa/zentao/service/IZtBugService.java @@ -0,0 +1,35 @@ +package com.sa.zentao.service; + +import com.github.pagehelper.PageInfo; +import com.sa.zentao.dao.ZtBugDTO; +import com.sa.zentao.entity.ZtBug; +import com.baomidou.mybatisplus.extension.service.IService; +import com.sa.zentao.qo.ZtBugQo; +import com.sa.zentao.qo.ZtProjectQo; + +/** + *

+ * 服务类 + *

+ * + * @author gqb + * @since 2024-07-04 + */ +public interface IZtBugService extends IService { + + PageInfo bugPageList(ZtProjectQo qo); + + void addBug(ZtBugDTO dto); + + void editBug(ZtBugDTO dto); + + void changeStatus(ZtBugQo qo); + + void resolved(ZtBugDTO dto); + + void reActive(ZtBugDTO dto); + + PageInfo myBugPageList(ZtProjectQo qo); + + ZtBugDTO bugInfoById(Integer id); +} diff --git a/src/main/java/com/sa/zentao/service/IZtCaseService.java b/src/main/java/com/sa/zentao/service/IZtCaseService.java new file mode 100644 index 0000000..d14f6d8 --- /dev/null +++ b/src/main/java/com/sa/zentao/service/IZtCaseService.java @@ -0,0 +1,25 @@ +package com.sa.zentao.service; + +import com.github.pagehelper.PageInfo; +import com.sa.zentao.dao.ZtCaseDTO; +import com.sa.zentao.dao.ZtProjectDTO; +import com.sa.zentao.entity.ZtCase; +import com.baomidou.mybatisplus.extension.service.IService; +import com.sa.zentao.qo.ZtProjectQo; + +/** + *

+ * 服务类 + *

+ * + * @author gqb + * @since 2024-07-03 + */ +public interface IZtCaseService extends IService { + + PageInfo casePageList(ZtProjectQo qo); + + void addCase(ZtCaseDTO dto); + + void modify(ZtCaseDTO dto); +} diff --git a/src/main/java/com/sa/zentao/service/IZtCasestepService.java b/src/main/java/com/sa/zentao/service/IZtCasestepService.java new file mode 100644 index 0000000..9666558 --- /dev/null +++ b/src/main/java/com/sa/zentao/service/IZtCasestepService.java @@ -0,0 +1,20 @@ +package com.sa.zentao.service; + +import com.sa.zentao.dao.ZtCaseDTO; +import com.sa.zentao.entity.ZtCasestep; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 服务类 + *

+ * + * @author gqb + * @since 2024-07-03 + */ +public interface IZtCasestepService extends IService { + + void execCase(ZtCaseDTO dto); + + +} diff --git a/src/main/java/com/sa/zentao/service/IZtCronDevopsService.java b/src/main/java/com/sa/zentao/service/IZtCronDevopsService.java new file mode 100644 index 0000000..2aa5254 --- /dev/null +++ b/src/main/java/com/sa/zentao/service/IZtCronDevopsService.java @@ -0,0 +1,28 @@ +package com.sa.zentao.service; + +import com.github.pagehelper.PageInfo; +import com.sa.zentao.dao.ZtCronDevopsDTO; +import com.sa.zentao.entity.ZtCronDevops; +import com.baomidou.mybatisplus.extension.service.IService; +import com.sa.zentao.qo.ZtUserQo; + +import java.text.ParseException; + +/** + *

+ * 服务类 + *

+ * + * @author gqb + * @since 2024-10-22 + */ +public interface IZtCronDevopsService extends IService { + + void add(ZtCronDevopsDTO dto) throws ParseException; + + void modify(ZtCronDevopsDTO dto) throws ParseException; + + PageInfo pageList(ZtUserQo dto); + + void close(ZtCronDevopsDTO dto); +} diff --git a/src/main/java/com/sa/zentao/service/IZtCronDevopsUserService.java b/src/main/java/com/sa/zentao/service/IZtCronDevopsUserService.java new file mode 100644 index 0000000..3c75ef7 --- /dev/null +++ b/src/main/java/com/sa/zentao/service/IZtCronDevopsUserService.java @@ -0,0 +1,16 @@ +package com.sa.zentao.service; + +import com.sa.zentao.entity.ZtCronDevopsUser; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 服务类 + *

+ * + * @author gqb + * @since 2024-10-23 + */ +public interface IZtCronDevopsUserService extends IService { + +} diff --git a/src/main/java/com/sa/zentao/service/IZtEffortService.java b/src/main/java/com/sa/zentao/service/IZtEffortService.java new file mode 100644 index 0000000..4d6f90b --- /dev/null +++ b/src/main/java/com/sa/zentao/service/IZtEffortService.java @@ -0,0 +1,25 @@ +package com.sa.zentao.service; + +import com.sa.zentao.dao.ZtEffortDTO; +import com.sa.zentao.entity.ZtEffort; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; +import java.util.Map; + +/** + *

+ * 服务类 + *

+ * + * @author gqb + * @since 2024-08-13 + */ +public interface IZtEffortService extends IService { + + void batchAdd(ZtEffortDTO dto); + + void add(ZtEffortDTO dto); + + Map timeWork(ZtEffortDTO dto); +} diff --git a/src/main/java/com/sa/zentao/service/IZtExecutionprojectService.java b/src/main/java/com/sa/zentao/service/IZtExecutionprojectService.java new file mode 100644 index 0000000..883f523 --- /dev/null +++ b/src/main/java/com/sa/zentao/service/IZtExecutionprojectService.java @@ -0,0 +1,16 @@ +package com.sa.zentao.service; + +import com.sa.zentao.entity.ZtExecutionproject; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 服务类 + *

+ * + * @author gqb + * @since 2024-08-01 + */ +public interface IZtExecutionprojectService extends IService { + +} diff --git a/src/main/java/com/sa/zentao/service/IZtKanbanService.java b/src/main/java/com/sa/zentao/service/IZtKanbanService.java new file mode 100644 index 0000000..66845d2 --- /dev/null +++ b/src/main/java/com/sa/zentao/service/IZtKanbanService.java @@ -0,0 +1,16 @@ +package com.sa.zentao.service; + +import com.sa.zentao.entity.ZtKanban; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 服务类 + *

+ * + * @author gqb + * @since 2024-07-09 + */ +public interface IZtKanbanService extends IService { + +} diff --git a/src/main/java/com/sa/zentao/service/IZtKanbancardService.java b/src/main/java/com/sa/zentao/service/IZtKanbancardService.java new file mode 100644 index 0000000..9cab6cd --- /dev/null +++ b/src/main/java/com/sa/zentao/service/IZtKanbancardService.java @@ -0,0 +1,16 @@ +package com.sa.zentao.service; + +import com.sa.zentao.entity.ZtKanbancard; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 服务类 + *

+ * + * @author gqb + * @since 2024-07-09 + */ +public interface IZtKanbancardService extends IService { + +} diff --git a/src/main/java/com/sa/zentao/service/IZtKanbancellService.java b/src/main/java/com/sa/zentao/service/IZtKanbancellService.java new file mode 100644 index 0000000..d47c81b --- /dev/null +++ b/src/main/java/com/sa/zentao/service/IZtKanbancellService.java @@ -0,0 +1,16 @@ +package com.sa.zentao.service; + +import com.sa.zentao.entity.ZtKanbancell; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 服务类 + *

+ * + * @author gqb + * @since 2024-07-09 + */ +public interface IZtKanbancellService extends IService { + +} diff --git a/src/main/java/com/sa/zentao/service/IZtKanbancolumnService.java b/src/main/java/com/sa/zentao/service/IZtKanbancolumnService.java new file mode 100644 index 0000000..e9b41f6 --- /dev/null +++ b/src/main/java/com/sa/zentao/service/IZtKanbancolumnService.java @@ -0,0 +1,20 @@ +package com.sa.zentao.service; + +import com.sa.zentao.dao.ZtKanbancolumnDTO; +import com.sa.zentao.entity.ZtKanbancolumn; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 服务类 + *

+ * + * @author gqb + * @since 2024-07-09 + */ +public interface IZtKanbancolumnService extends IService { + + List listByLaneIds(List laneIds); +} diff --git a/src/main/java/com/sa/zentao/service/IZtKanbangroupService.java b/src/main/java/com/sa/zentao/service/IZtKanbangroupService.java new file mode 100644 index 0000000..75468ba --- /dev/null +++ b/src/main/java/com/sa/zentao/service/IZtKanbangroupService.java @@ -0,0 +1,16 @@ +package com.sa.zentao.service; + +import com.sa.zentao.entity.ZtKanbangroup; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 服务类 + *

+ * + * @author gqb + * @since 2024-07-09 + */ +public interface IZtKanbangroupService extends IService { + +} diff --git a/src/main/java/com/sa/zentao/service/IZtKanbanlaneService.java b/src/main/java/com/sa/zentao/service/IZtKanbanlaneService.java new file mode 100644 index 0000000..e47cc93 --- /dev/null +++ b/src/main/java/com/sa/zentao/service/IZtKanbanlaneService.java @@ -0,0 +1,43 @@ +package com.sa.zentao.service; + +import com.sa.zentao.dao.ZtKanbanlaneDTO; +import com.sa.zentao.entity.*; +import com.baomidou.mybatisplus.extension.service.IService; +import com.sa.zentao.qo.KanbanQo; +import com.sa.zentao.qo.ZtProjectQo; + +import java.util.List; + +/** + *

+ * 服务类 + *

+ * + * @author gqb + * @since 2024-07-09 + */ +public interface IZtKanbanlaneService extends IService { + + List lookInfoByExec(ZtProjectQo qo); + + void changeStatus(KanbanQo qo); + + //执行id bussId :业务id type story bug task toStatus:toStatus + void changeStatus(Integer execId,Integer bussId,String type,String toStatus); + + + void addStory(Integer id, List ztStories); + + void addTask(Integer execution, List asList); + + public void addBug(Integer id, List asList); + + /** + * + * @param type bug task story + * @param status + * @param id + * @return + */ + public ZtKanbancell getZtKanbanlane(String type, String status, Integer id); +} diff --git a/src/main/java/com/sa/zentao/service/IZtKanbanregionService.java b/src/main/java/com/sa/zentao/service/IZtKanbanregionService.java new file mode 100644 index 0000000..61faa6b --- /dev/null +++ b/src/main/java/com/sa/zentao/service/IZtKanbanregionService.java @@ -0,0 +1,16 @@ +package com.sa.zentao.service; + +import com.sa.zentao.entity.ZtKanbanregion; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 服务类 + *

+ * + * @author gqb + * @since 2024-07-09 + */ +public interface IZtKanbanregionService extends IService { + +} diff --git a/src/main/java/com/sa/zentao/service/IZtKanbanspaceService.java b/src/main/java/com/sa/zentao/service/IZtKanbanspaceService.java new file mode 100644 index 0000000..cde6244 --- /dev/null +++ b/src/main/java/com/sa/zentao/service/IZtKanbanspaceService.java @@ -0,0 +1,16 @@ +package com.sa.zentao.service; + +import com.sa.zentao.entity.ZtKanbanspace; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 服务类 + *

+ * + * @author gqb + * @since 2024-07-09 + */ +public interface IZtKanbanspaceService extends IService { + +} diff --git a/src/main/java/com/sa/zentao/service/IZtModuleService.java b/src/main/java/com/sa/zentao/service/IZtModuleService.java new file mode 100644 index 0000000..36e982c --- /dev/null +++ b/src/main/java/com/sa/zentao/service/IZtModuleService.java @@ -0,0 +1,23 @@ +package com.sa.zentao.service; + +import com.sa.zentao.dao.ZtModuleDTO; +import com.sa.zentao.entity.ZtModule; +import com.baomidou.mybatisplus.extension.service.IService; +import com.sa.zentao.qo.ZtModuleQo; + +import java.util.List; + +/** + *

+ * 服务类 + *

+ * + * @author gqb + * @since 2024-08-05 + */ +public interface IZtModuleService extends IService { + + void modifyModule(ZtModuleDTO dto); + + List getModuleByStoryId(ZtModuleQo qo); +} diff --git a/src/main/java/com/sa/zentao/service/IZtProductService.java b/src/main/java/com/sa/zentao/service/IZtProductService.java new file mode 100644 index 0000000..a70e8e1 --- /dev/null +++ b/src/main/java/com/sa/zentao/service/IZtProductService.java @@ -0,0 +1,40 @@ +package com.sa.zentao.service; + +import com.github.pagehelper.PageInfo; +import com.sa.zentao.dao.ZtProductDTO; +import com.sa.zentao.dao.ZtProjectDTO; +import com.sa.zentao.entity.ZtProduct; +import com.baomidou.mybatisplus.extension.service.IService; +import com.sa.zentao.enums.ProductStoryStatus; +import com.sa.zentao.qo.ZtProjectQo; + +import java.util.List; + +/** + *

+ * 服务类 + *

+ * + * @author gqb + * @since 2024-06-13 + */ +public interface IZtProductService extends IService { + + PageInfo pageList(ZtProjectQo qo); + + void addProduct(ZtProductDTO dto); + + PageInfo productPageList(ZtProjectQo qo); + + List productList(ZtProjectQo qo); + + List productListByProductId(ZtProjectQo qo); + + void modifyProduct(ZtProductDTO dto); + + void productClose(ZtProductDTO dto); + + void productDeleted(ZtProductDTO dto); + + void productChangeStatus(Integer pId, ProductStoryStatus oldStatus, ProductStoryStatus newStatus); +} diff --git a/src/main/java/com/sa/zentao/service/IZtProjectService.java b/src/main/java/com/sa/zentao/service/IZtProjectService.java new file mode 100644 index 0000000..a45a5f4 --- /dev/null +++ b/src/main/java/com/sa/zentao/service/IZtProjectService.java @@ -0,0 +1,99 @@ +package com.sa.zentao.service; + +import com.github.pagehelper.PageInfo; +import com.sa.zentao.dao.ZtProjectDTO; +import com.sa.zentao.dao.ZtStoryDTO; +import com.sa.zentao.entity.ZtProject; +import com.baomidou.mybatisplus.extension.service.IService; +import com.sa.zentao.entity.ZtUser; +import com.sa.zentao.qo.ZtProjectQo; + +import java.util.List; +import java.util.Map; + +/** + *

+ * 服务类 + *

+ * + * @author gqb + * @since 2024-06-13 + */ +public interface IZtProjectService extends IService { + + void addProject(ZtProjectDTO dto); + + List parentList(ZtProjectDTO dto); + + PageInfo groupPageList(ZtProjectQo qo); + + PageInfo pageProject(ZtProjectQo qo); + + List treeParentList(ZtProjectDTO dto); + + List authTreeParentList(ZtProjectDTO dto); + + List typeProductList(ZtProjectQo qo); + + PageInfo implementPageList(ZtProjectQo qo); + + void modifyProgram(ZtProjectDTO dto); + + void modifyProject(ZtProjectDTO dto); + + void projectStart(ZtProjectDTO dto); + + void projectClose(ZtProjectDTO dto); + + void projectDeleted(ZtProjectDTO dto); + + void projectActivated(ZtProjectDTO dto); + + void projectSuspended(ZtProjectDTO dto); + + List getStoryByImplementId(ZtProjectDTO dto); + + void implementSyncStory(ZtProjectDTO dto); + + void implementSyncProduct(ZtProjectDTO dto); + + + List getProjectByProduct(ZtProjectQo qo); + + List executionListByProduct(ZtProjectQo qo); + + void projectSyncStory(ZtProjectDTO dto); + + List implementByProject(ZtProjectQo qo); + + Map> countProject(ZtProjectQo qo); + + void executionSyncStory(ZtProjectDTO dto); + + //产品集权限 + List authList(); + //项目权限合集 + List projectAuthList(); + + List execAuthList(); + + List executionListByProject(ZtProjectQo qo); + + List execTeamById(ZtProjectQo qo); + + void execTeamUpdate(ZtProjectQo qo); + + List execTeamList(ZtProjectQo qo); + + Map>> projectTeamTimeWork(ZtProjectQo qo); + + void editImplement(ZtProjectDTO dto); + + void changeStatusImplement(ZtProjectDTO dto); + + List copyExecList(ZtProjectDTO dto); + + ZtProjectDTO copyExecInfoById(ZtProjectDTO dto); + + List projectByExecution(ZtProjectDTO dto); +} diff --git a/src/main/java/com/sa/zentao/service/IZtProjectproductService.java b/src/main/java/com/sa/zentao/service/IZtProjectproductService.java new file mode 100644 index 0000000..9f424ef --- /dev/null +++ b/src/main/java/com/sa/zentao/service/IZtProjectproductService.java @@ -0,0 +1,16 @@ +package com.sa.zentao.service; + +import com.sa.zentao.entity.ZtProjectproduct; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 服务类 + *

+ * + * @author gqb + * @since 2024-06-18 + */ +public interface IZtProjectproductService extends IService { + +} diff --git a/src/main/java/com/sa/zentao/service/IZtProjectstoryService.java b/src/main/java/com/sa/zentao/service/IZtProjectstoryService.java new file mode 100644 index 0000000..bd315fb --- /dev/null +++ b/src/main/java/com/sa/zentao/service/IZtProjectstoryService.java @@ -0,0 +1,16 @@ +package com.sa.zentao.service; + +import com.sa.zentao.entity.ZtProjectstory; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 服务类 + *

+ * + * @author gqb + * @since 2024-07-02 + */ +public interface IZtProjectstoryService extends IService { + +} diff --git a/src/main/java/com/sa/zentao/service/IZtSearchindexService.java b/src/main/java/com/sa/zentao/service/IZtSearchindexService.java new file mode 100644 index 0000000..f3ea103 --- /dev/null +++ b/src/main/java/com/sa/zentao/service/IZtSearchindexService.java @@ -0,0 +1,16 @@ +package com.sa.zentao.service; + +import com.sa.zentao.entity.ZtSearchindex; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 服务类 + *

+ * + * @author gqb + * @since 2024-06-24 + */ +public interface IZtSearchindexService extends IService { + +} diff --git a/src/main/java/com/sa/zentao/service/IZtStoryFeedbackService.java b/src/main/java/com/sa/zentao/service/IZtStoryFeedbackService.java new file mode 100644 index 0000000..636de26 --- /dev/null +++ b/src/main/java/com/sa/zentao/service/IZtStoryFeedbackService.java @@ -0,0 +1,28 @@ +package com.sa.zentao.service; + +import com.github.pagehelper.PageInfo; +import com.sa.zentao.dao.ZtStoryFeedbackDTO; +import com.sa.zentao.entity.ZtStoryFeedback; +import com.baomidou.mybatisplus.extension.service.IService; +import com.sa.zentao.qo.ZtProjectQo; + +import java.util.List; + +/** + *

+ * 服务类 + *

+ * + * @author gqb + * @since 2024-10-15 + */ +public interface IZtStoryFeedbackService extends IService { + + PageInfo pageList(ZtProjectQo qo); + + void addFeedback(ZtStoryFeedbackDTO dto); + + void editFeedback(ZtStoryFeedbackDTO dto); + + void changeStatus(ZtStoryFeedbackDTO dto); +} diff --git a/src/main/java/com/sa/zentao/service/IZtStoryService.java b/src/main/java/com/sa/zentao/service/IZtStoryService.java new file mode 100644 index 0000000..52b82a0 --- /dev/null +++ b/src/main/java/com/sa/zentao/service/IZtStoryService.java @@ -0,0 +1,66 @@ +package com.sa.zentao.service; + +import com.github.pagehelper.PageInfo; +import com.sa.zentao.dao.ZtStoryDTO; +import com.sa.zentao.entity.ZtProject; +import com.sa.zentao.entity.ZtStory; +import com.baomidou.mybatisplus.extension.service.IService; +import com.sa.zentao.qo.ZtProjectQo; + +import java.util.List; + +/** + *

+ * 服务类 + *

+ * + * @author gqb + * @since 2024-06-24 + */ +public interface IZtStoryService extends IService { + + PageInfo pageList(ZtProjectQo qo); + + void addStory(ZtStoryDTO dto); + + void closeStory(ZtStoryDTO dto); + //指派 + void assignedTo(ZtStoryDTO dto); + + void cancelReview(ZtStoryDTO dto); + + void addReview(ZtStoryDTO dto); + + void userReview(ZtStoryDTO dto); + + List storyListByProductId(ZtProjectQo qo); + + + List storyListByExecution(ZtProjectQo qo); + + void editStory(ZtStoryDTO dto); + + PageInfo projectStoryPageList(ZtProjectQo qo); + + List storyNoSyncProject(ZtProjectQo qo); + + void startStory(Integer story,Integer execution); + + void finishStory(Integer story,Integer execution); + + void changeStatus(ZtStoryDTO dto); + + List execNoSyncProject(ZtProjectQo qo); + + List storyListByProject(ZtProjectQo qo); + + void storyYs(ZtStoryDTO dto); + + ZtStoryDTO getStoryById(Integer id); + + List execListByProject(ZtStoryDTO dto); + + void changeAssignedTo(ZtStoryDTO dto); + + void changeExecution(ZtStoryDTO dto); +} diff --git a/src/main/java/com/sa/zentao/service/IZtStoryUserService.java b/src/main/java/com/sa/zentao/service/IZtStoryUserService.java new file mode 100644 index 0000000..ce0b332 --- /dev/null +++ b/src/main/java/com/sa/zentao/service/IZtStoryUserService.java @@ -0,0 +1,26 @@ +package com.sa.zentao.service; + +import com.github.pagehelper.PageInfo; +import com.sa.zentao.dao.ZtStoryUserDTO; +import com.sa.zentao.entity.ZtStoryUser; +import com.baomidou.mybatisplus.extension.service.IService; +import com.sa.zentao.qo.StoryQo; + +/** + *

+ * 服务类 + *

+ * + * @author gqb + * @since 2024-10-21 + */ +public interface IZtStoryUserService extends IService { + + void addStory(ZtStoryUserDTO dto); + + public void editStory(ZtStoryUserDTO dto); + + PageInfo pageList(StoryQo dto); + + void changeStatus(ZtStoryUserDTO dto); +} diff --git a/src/main/java/com/sa/zentao/service/IZtStoryreviewService.java b/src/main/java/com/sa/zentao/service/IZtStoryreviewService.java new file mode 100644 index 0000000..63c9dfa --- /dev/null +++ b/src/main/java/com/sa/zentao/service/IZtStoryreviewService.java @@ -0,0 +1,16 @@ +package com.sa.zentao.service; + +import com.sa.zentao.entity.ZtStoryreview; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 服务类 + *

+ * + * @author gqb + * @since 2024-06-24 + */ +public interface IZtStoryreviewService extends IService { + +} diff --git a/src/main/java/com/sa/zentao/service/IZtStoryspecService.java b/src/main/java/com/sa/zentao/service/IZtStoryspecService.java new file mode 100644 index 0000000..7251d88 --- /dev/null +++ b/src/main/java/com/sa/zentao/service/IZtStoryspecService.java @@ -0,0 +1,16 @@ +package com.sa.zentao.service; + +import com.sa.zentao.entity.ZtStoryspec; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 服务类 + *

+ * + * @author gqb + * @since 2024-07-03 + */ +public interface IZtStoryspecService extends IService { + +} diff --git a/src/main/java/com/sa/zentao/service/IZtTaskService.java b/src/main/java/com/sa/zentao/service/IZtTaskService.java new file mode 100644 index 0000000..f927795 --- /dev/null +++ b/src/main/java/com/sa/zentao/service/IZtTaskService.java @@ -0,0 +1,40 @@ +package com.sa.zentao.service; + +import com.github.pagehelper.PageInfo; +import com.sa.zentao.dao.ZtProjectDTO; +import com.sa.zentao.dao.ZtTaskDTO; +import com.sa.zentao.entity.ZtTask; +import com.baomidou.mybatisplus.extension.service.IService; +import com.sa.zentao.qo.ZtProjectQo; + +import java.util.List; + +/** + *

+ * 服务类 + *

+ * + * @author gqb + * @since 2024-06-25 + */ +public interface IZtTaskService extends IService { + + PageInfo taskPageList(ZtProjectQo qo); + + void addTask(ZtTaskDTO dto); + + void modifyTask(ZtTaskDTO dto); + + void startTask(ZtTaskDTO dto); + + void finishTask(ZtTaskDTO dto); + + List taskListByExecution(ZtTaskDTO dto); + + void closeTask(ZtTaskDTO dto); + + void cancelTask(ZtTaskDTO dto); + + void batchAddTask(ZtTaskDTO dto); + +} diff --git a/src/main/java/com/sa/zentao/service/IZtTaskestimateService.java b/src/main/java/com/sa/zentao/service/IZtTaskestimateService.java new file mode 100644 index 0000000..128a4b6 --- /dev/null +++ b/src/main/java/com/sa/zentao/service/IZtTaskestimateService.java @@ -0,0 +1,16 @@ +package com.sa.zentao.service; + +import com.sa.zentao.entity.ZtTaskestimate; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 服务类 + *

+ * + * @author gqb + * @since 2024-06-25 + */ +public interface IZtTaskestimateService extends IService { + +} diff --git a/src/main/java/com/sa/zentao/service/IZtTaskspecService.java b/src/main/java/com/sa/zentao/service/IZtTaskspecService.java new file mode 100644 index 0000000..bbecf80 --- /dev/null +++ b/src/main/java/com/sa/zentao/service/IZtTaskspecService.java @@ -0,0 +1,16 @@ +package com.sa.zentao.service; + +import com.sa.zentao.entity.ZtTaskspec; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 服务类 + *

+ * + * @author gqb + * @since 2024-06-25 + */ +public interface IZtTaskspecService extends IService { + +} diff --git a/src/main/java/com/sa/zentao/service/IZtTaskteamService.java b/src/main/java/com/sa/zentao/service/IZtTaskteamService.java new file mode 100644 index 0000000..f0a2ed8 --- /dev/null +++ b/src/main/java/com/sa/zentao/service/IZtTaskteamService.java @@ -0,0 +1,20 @@ +package com.sa.zentao.service; + +import com.sa.zentao.entity.ZtTask; +import com.sa.zentao.entity.ZtTaskteam; +import com.baomidou.mybatisplus.extension.service.IService; +import com.sa.zentao.qo.ZtProjectQo; + +import java.util.List; + +/** + *

+ * 服务类 + *

+ * + * @author gqb + * @since 2024-07-17 + */ +public interface IZtTaskteamService extends IService { + +} diff --git a/src/main/java/com/sa/zentao/service/IZtTeamService.java b/src/main/java/com/sa/zentao/service/IZtTeamService.java new file mode 100644 index 0000000..2aeee16 --- /dev/null +++ b/src/main/java/com/sa/zentao/service/IZtTeamService.java @@ -0,0 +1,16 @@ +package com.sa.zentao.service; + +import com.sa.zentao.entity.ZtTeam; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 服务类 + *

+ * + * @author gqb + * @since 2024-07-05 + */ +public interface IZtTeamService extends IService { + +} diff --git a/src/main/java/com/sa/zentao/service/IZtTestresultService.java b/src/main/java/com/sa/zentao/service/IZtTestresultService.java new file mode 100644 index 0000000..7fb94c4 --- /dev/null +++ b/src/main/java/com/sa/zentao/service/IZtTestresultService.java @@ -0,0 +1,16 @@ +package com.sa.zentao.service; + +import com.sa.zentao.entity.ZtTestresult; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 服务类 + *

+ * + * @author gqb + * @since 2024-07-29 + */ +public interface IZtTestresultService extends IService { + +} diff --git a/src/main/java/com/sa/zentao/service/IZtTesttaskService.java b/src/main/java/com/sa/zentao/service/IZtTesttaskService.java new file mode 100644 index 0000000..699dbc5 --- /dev/null +++ b/src/main/java/com/sa/zentao/service/IZtTesttaskService.java @@ -0,0 +1,22 @@ +package com.sa.zentao.service; + +import com.sa.zentao.dao.ZtTesttaskDTO; +import com.sa.zentao.entity.ZtTesttask; +import com.baomidou.mybatisplus.extension.service.IService; +import com.sa.zentao.qo.ZtProjectQo; + +import java.util.List; + +/** + *

+ * 服务类 + *

+ * + * @author gqb + * @since 2024-10-21 + */ +public interface IZtTesttaskService extends IService { + + + List testtaskByProject(ZtProjectQo qo); +} diff --git a/src/main/java/com/sa/zentao/service/IZtUserService.java b/src/main/java/com/sa/zentao/service/IZtUserService.java new file mode 100644 index 0000000..6360880 --- /dev/null +++ b/src/main/java/com/sa/zentao/service/IZtUserService.java @@ -0,0 +1,35 @@ +package com.sa.zentao.service; + +import com.github.pagehelper.PageInfo; +import com.sa.zentao.dao.ZtProjectDTO; +import com.sa.zentao.dao.ZtUserDTO; +import com.sa.zentao.entity.ZtUser; +import com.baomidou.mybatisplus.extension.service.IService; +import com.sa.zentao.qo.ZtUserQo; + +import java.util.List; +import java.util.Map; + +/** + *

+ * 服务类 + *

+ * + * @author gqb + * @since 2024-06-18 + */ +public interface IZtUserService extends IService { + + PageInfo pageList(ZtUserQo qo); + + + ZtUser selectByName(String name); + + List storyReviewList(ZtProjectDTO dto); + + Map userMapByIds(List accounts); + + void sendCode(ZtUser user); + + ZtUser login(ZtUser user); +} diff --git a/src/main/java/com/sa/zentao/service/IZtYwBackupsService.java b/src/main/java/com/sa/zentao/service/IZtYwBackupsService.java new file mode 100644 index 0000000..30111c1 --- /dev/null +++ b/src/main/java/com/sa/zentao/service/IZtYwBackupsService.java @@ -0,0 +1,25 @@ +package com.sa.zentao.service; + +import com.github.pagehelper.PageInfo; +import com.sa.zentao.dao.ZtYwBackupsDTO; +import com.sa.zentao.dao.ZtYwPatrolDTO; +import com.sa.zentao.entity.ZtYwBackups; +import com.baomidou.mybatisplus.extension.service.IService; +import com.sa.zentao.qo.ZtYwPatrolQo; + +/** + *

+ * 服务类 + *

+ * + * @author gqb + * @since 2024-11-18 + */ +public interface IZtYwBackupsService extends IService { + + void add(ZtYwBackupsDTO dto); + + PageInfo pageList(ZtYwPatrolQo qo); + + void modify(ZtYwBackupsDTO dto); +} diff --git a/src/main/java/com/sa/zentao/service/IZtYwChangeService.java b/src/main/java/com/sa/zentao/service/IZtYwChangeService.java new file mode 100644 index 0000000..11d33d2 --- /dev/null +++ b/src/main/java/com/sa/zentao/service/IZtYwChangeService.java @@ -0,0 +1,32 @@ +package com.sa.zentao.service; + +import com.github.pagehelper.PageInfo; +import com.sa.zentao.dao.ZtYwChangeDTO; +import com.sa.zentao.entity.ZtYwChange; +import com.baomidou.mybatisplus.extension.service.IService; +import com.sa.zentao.qo.ZtYwPatrolQo; + +/** + *

+ * 服务类 + *

+ * + * @author gqb + * @since 2024-11-19 + */ +public interface IZtYwChangeService extends IService { + + void add(ZtYwChangeDTO dto); + + PageInfo pageList(ZtYwPatrolQo qo); + + void approval(ZtYwPatrolQo qo); + + void changeStart(ZtYwPatrolQo qo); + + void ssResult(ZtYwPatrolQo qo); + + void check(ZtYwPatrolQo qo); + + void modify(ZtYwChangeDTO dto); +} diff --git a/src/main/java/com/sa/zentao/service/IZtYwFaultListService.java b/src/main/java/com/sa/zentao/service/IZtYwFaultListService.java new file mode 100644 index 0000000..316b121 --- /dev/null +++ b/src/main/java/com/sa/zentao/service/IZtYwFaultListService.java @@ -0,0 +1,16 @@ +package com.sa.zentao.service; + +import com.sa.zentao.entity.ZtYwFaultList; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 服务类 + *

+ * + * @author gqb + * @since 2024-11-19 + */ +public interface IZtYwFaultListService extends IService { + +} diff --git a/src/main/java/com/sa/zentao/service/IZtYwFaultService.java b/src/main/java/com/sa/zentao/service/IZtYwFaultService.java new file mode 100644 index 0000000..f0515b8 --- /dev/null +++ b/src/main/java/com/sa/zentao/service/IZtYwFaultService.java @@ -0,0 +1,27 @@ +package com.sa.zentao.service; + +import com.github.pagehelper.PageInfo; +import com.sa.zentao.dao.ZtYwFaultDTO; +import com.sa.zentao.entity.ZtYwFault; +import com.baomidou.mybatisplus.extension.service.IService; +import com.sa.zentao.qo.ZtYwPatrolQo; + +/** + *

+ * 服务类 + *

+ * + * @author gqb + * @since 2024-11-19 + */ +public interface IZtYwFaultService extends IService { + + void add(ZtYwFaultDTO dto); + + PageInfo pageList(ZtYwPatrolQo qo); + + void modify(ZtYwFaultDTO dto); + + void handle(ZtYwFaultDTO dto); + +} diff --git a/src/main/java/com/sa/zentao/service/IZtYwFwqsearchService.java b/src/main/java/com/sa/zentao/service/IZtYwFwqsearchService.java new file mode 100644 index 0000000..cece0c2 --- /dev/null +++ b/src/main/java/com/sa/zentao/service/IZtYwFwqsearchService.java @@ -0,0 +1,24 @@ +package com.sa.zentao.service; + +import com.github.pagehelper.PageInfo; +import com.sa.zentao.dao.ZtYwFwqsearchDTO; +import com.sa.zentao.entity.ZtYwFwqsearch; +import com.baomidou.mybatisplus.extension.service.IService; +import com.sa.zentao.qo.ZtYwPatrolQo; + +/** + *

+ * 服务类 + *

+ * + * @author gqb + * @since 2024-11-19 + */ +public interface IZtYwFwqsearchService extends IService { + + void add(ZtYwFwqsearchDTO dto); + + PageInfo pageList(ZtYwPatrolQo qo); + + void modify(ZtYwFwqsearchDTO dto); +} diff --git a/src/main/java/com/sa/zentao/service/IZtYwMachineRoomService.java b/src/main/java/com/sa/zentao/service/IZtYwMachineRoomService.java new file mode 100644 index 0000000..a93ab86 --- /dev/null +++ b/src/main/java/com/sa/zentao/service/IZtYwMachineRoomService.java @@ -0,0 +1,24 @@ +package com.sa.zentao.service; + +import com.github.pagehelper.PageInfo; +import com.sa.zentao.dao.ZtYwMachineRoomDTO; +import com.sa.zentao.entity.ZtYwMachineRoom; +import com.baomidou.mybatisplus.extension.service.IService; +import com.sa.zentao.qo.ZtYwPatrolQo; + +/** + *

+ * 服务类 + *

+ * + * @author gqb + * @since 2024-11-19 + */ +public interface IZtYwMachineRoomService extends IService { + + PageInfo pageList(ZtYwPatrolQo qo); + + void modify(ZtYwMachineRoomDTO dto); + + void add(ZtYwMachineRoomDTO dto); +} diff --git a/src/main/java/com/sa/zentao/service/IZtYwPatrolService.java b/src/main/java/com/sa/zentao/service/IZtYwPatrolService.java new file mode 100644 index 0000000..4191e16 --- /dev/null +++ b/src/main/java/com/sa/zentao/service/IZtYwPatrolService.java @@ -0,0 +1,25 @@ +package com.sa.zentao.service; + +import com.github.pagehelper.PageInfo; +import com.sa.zentao.dao.ZtYwPatrolDTO; +import com.sa.zentao.entity.ZtYwPatrol; +import com.baomidou.mybatisplus.extension.service.IService; +import com.sa.zentao.qo.ZtYwPatrolQo; + +/** + *

+ * 服务类 + *

+ * + * @author gqb + * @since 2024-11-18 + */ +public interface IZtYwPatrolService extends IService { + + void add(ZtYwPatrolDTO dto); + + + PageInfo pageList(ZtYwPatrolQo qo); + + void modify(ZtYwPatrolDTO dto); +} diff --git a/src/main/java/com/sa/zentao/service/IZtYwTaskService.java b/src/main/java/com/sa/zentao/service/IZtYwTaskService.java new file mode 100644 index 0000000..ba0d781 --- /dev/null +++ b/src/main/java/com/sa/zentao/service/IZtYwTaskService.java @@ -0,0 +1,32 @@ +package com.sa.zentao.service; + +import com.github.pagehelper.PageInfo; +import com.sa.zentao.dao.ZtYwTaskDTO; +import com.sa.zentao.entity.ZtYwTask; +import com.baomidou.mybatisplus.extension.service.IService; +import com.sa.zentao.qo.ZtYwPatrolQo; + +/** + *

+ * 服务类 + *

+ * + * @author gqb + * @since 2024-11-19 + */ +public interface IZtYwTaskService extends IService { + + void add(ZtYwTaskDTO dto); + + void modify(ZtYwTaskDTO dto); + + PageInfo pageList(ZtYwPatrolQo qo); + + void start(ZtYwTaskDTO dto); + + void finish(ZtYwTaskDTO dto); + + void check(ZtYwTaskDTO dto); + + void remindMail(); +} diff --git a/src/main/java/com/sa/zentao/service/impl/FestivalConfigServiceImpl.java b/src/main/java/com/sa/zentao/service/impl/FestivalConfigServiceImpl.java new file mode 100644 index 0000000..c4c67e9 --- /dev/null +++ b/src/main/java/com/sa/zentao/service/impl/FestivalConfigServiceImpl.java @@ -0,0 +1,187 @@ +package com.sa.zentao.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.github.pagehelper.Page; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.sa.zentao.conf.RiskUserThreadLocal; +import com.sa.zentao.dao.BusinessException; +import com.sa.zentao.dao.FestivalConfigDTO; +import com.sa.zentao.entity.FestivalConfig; +import com.sa.zentao.enums.DeleteFlagEnum; +import com.sa.zentao.mapper.FestivalConfigMapper; +import com.sa.zentao.qo.FestivalConfigQo; +import com.sa.zentao.service.IFestivalConfigService; +import com.sa.zentao.utils.Constant; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Arrays; +import java.util.Date; +import java.util.List; + +/** + *

+ * 服务实现类 + *

+ * + * @author gqb + * @since 2023-03-20 + */ +@Service +public class FestivalConfigServiceImpl extends ServiceImpl implements IFestivalConfigService { + + @Override + public void add(FestivalConfigQo qo) { + List repairDate = qo.getRepairDate(); + for (String str:qo.getVacationDate()) { + if(repairDate.contains(str)){ + throw new BusinessException("补班与假期重复"); + } + } + + + + List festivalConfigs = this.baseMapper.selectList(new QueryWrapper().lambda().eq(FestivalConfig::getName, qo.getName()). + eq(FestivalConfig::getDeleteFlag, DeleteFlagEnum.USED)); + if(!CollectionUtils.isEmpty(festivalConfigs)){ + throw new BusinessException("已存在"); + } + FestivalConfig festivalConfig = new FestivalConfig(); + festivalConfig.setName(qo.getName()); + festivalConfig.setDays(qo.getVacationDate().size()); + festivalConfig.setRepairDate(StringUtils.join(qo.getRepairDate(),",")); + festivalConfig.setVacationDate(StringUtils.join(qo.getVacationDate(),",")); + festivalConfig.setLegalVacationDate(StringUtils.join(qo.getLegalVacationDate(),",")); + festivalConfig.setCreateDate(new Date()); + festivalConfig.setUpdateDate(new Date()); + festivalConfig.setDeleteFlag(DeleteFlagEnum.USED); + festivalConfig.setYear(qo.getYear()); + this.baseMapper.insert(festivalConfig); + this.initfestivalAndHoliday();; + } + + @Override + public void updateFestivalConfig(FestivalConfigQo qo) { + + List repairDate = qo.getRepairDate(); + for (String str:qo.getVacationDate()) { + if(repairDate.contains(str)){ + throw new BusinessException("补班与假期重复"); + } + } + + List festivalConfigs = this.baseMapper.selectList(new QueryWrapper().lambda().eq(FestivalConfig::getName, qo.getName()). + eq(FestivalConfig::getDeleteFlag, DeleteFlagEnum.USED).notIn(FestivalConfig::getId, Arrays.asList(qo.getId()))); + if(!CollectionUtils.isEmpty(festivalConfigs)){ + throw new BusinessException("已存在"); + } + FestivalConfig festivalConfig = new FestivalConfig(); + festivalConfig.setId(qo.getId()); + festivalConfig.setName(qo.getName()); + festivalConfig.setDays(qo.getVacationDate().size()); + festivalConfig.setRepairDate(StringUtils.join(qo.getRepairDate(),",")); + festivalConfig.setVacationDate(StringUtils.join(qo.getVacationDate(),",")); + festivalConfig.setLegalVacationDate(StringUtils.join(qo.getLegalVacationDate(),",")); + festivalConfig.setCreateDate(new Date()); + festivalConfig.setUpdateDate(new Date()); + this.baseMapper.updateById(festivalConfig); + this.initfestivalAndHoliday();; + } + + @Override + public PageInfo pageList(FestivalConfigQo qo) { + + Page page = PageHelper.startPage(qo.getCurrentPage(), qo.getPageSize()).doSelectPage(() ->this.baseMapper.pageList(qo)); + + List result = page.getResult(); + + + if(!CollectionUtils.isEmpty(result)){ + SimpleDateFormat f=new SimpleDateFormat("yyyy-MM-dd"); + SimpleDateFormat f2=new SimpleDateFormat("MM月dd"); + for (FestivalConfigDTO config:result) { + if(!StringUtils.isEmpty(config.getRepairDate())){ + String[] split = config.getRepairDate().split(","); + StringBuilder build=new StringBuilder(); + for (String s:split) { + try { + Date parse = f.parse(s); + build.append(f2.format(parse)+","); + } catch (ParseException e) { + e.printStackTrace(); + } + } + build.delete(build.length()-1,build.length()); + config.setRepairDateValue(build.toString()); + } + if(!StringUtils.isEmpty(config.getVacationDate())){ + String[] split = config.getVacationDate().split(","); + StringBuilder build=new StringBuilder(); + for (String s:split) { + try { + Date parse = f.parse(s); + build.append(f2.format(parse)+","); + } catch (ParseException e) { + e.printStackTrace(); + } + } + build.delete(build.length()-1,build.length()); + config.setVacationDateValue(build.toString()); + } + if(!StringUtils.isEmpty(config.getLegalVacationDate())){ + String[] split = config.getLegalVacationDate().split(","); + StringBuilder build=new StringBuilder(); + for (String s:split) { + try { + Date parse = f.parse(s); + build.append(f2.format(parse)+","); + } catch (ParseException e) { + e.printStackTrace(); + } + } + build.delete(build.length()-1,build.length()); + config.setLegalVacationDateValue(build.toString()); + } + } + } + + return new PageInfo(result); + } + + + public void initfestivalAndHoliday() { + Constant.vacationDateMap.clear();; + Constant.repairDateMap.clear();; + Constant.legalRepairDateMap.clear();; + List list = this.list(); + for (FestivalConfig l:list) { + if(!StringUtils.isEmpty(l.getVacationDate())){ + String[] split = l.getVacationDate().split(","); + for (String s:split) { + Constant.vacationDateMap.put(s,s); + } + } + if(!StringUtils.isEmpty(l.getRepairDate())){ + if(!StringUtils.isEmpty(l.getRepairDate())){ + String[] split = l.getRepairDate().split(","); + for (String s:split) { + Constant.repairDateMap.put(s,s); + } + } + } + if(!StringUtils.isEmpty(l.getLegalVacationDate())){ + if(!StringUtils.isEmpty(l.getLegalVacationDate())){ + String[] split = l.getLegalVacationDate().split(","); + for (String s:split) { + Constant.legalRepairDateMap.put(s,s); + } + } + } + } + } +} diff --git a/src/main/java/com/sa/zentao/service/impl/IZtCountService.java b/src/main/java/com/sa/zentao/service/impl/IZtCountService.java new file mode 100644 index 0000000..1d7d401 --- /dev/null +++ b/src/main/java/com/sa/zentao/service/impl/IZtCountService.java @@ -0,0 +1,572 @@ +package com.sa.zentao.service.impl; + +import com.alibaba.excel.EasyExcel; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.sa.zentao.conf.LoginRiskUser; +import com.sa.zentao.conf.RiskUserThreadLocal; +import com.sa.zentao.dao.*; +import com.sa.zentao.entity.*; +import com.sa.zentao.enums.UserType; +import com.sa.zentao.qo.ZtCountQo; +import com.sa.zentao.service.*; +import com.sa.zentao.utils.DateUtils; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.ByteArrayOutputStream; +import java.math.BigDecimal; +import java.util.*; +import java.util.stream.Collectors; + +@Service +@Slf4j +public class IZtCountService { + + @Autowired + private IZtStoryService storyService; + + @Autowired + private IZtBugService bugService; + + @Autowired + private IZtTaskService taskService; + + public Map todayWorkCount(ZtCaseDTO dto) { + String name = RiskUserThreadLocal.get().getName(); + if (StringUtils.isEmpty(name)) { + throw new BusinessException("未查询到"); + } + + Map result = new HashMap<>(); + + List storyList = storyService.list(new QueryWrapper().lambda() + .eq(ZtStory::getAssignedTo, name).ne(ZtStory::getStatus, "closed")); + long storyCount = storyList.stream().filter(o->o.getAssignedTo().equals(name)).filter(o->!o.getStage().equals("verified")).count(); + + //已经验收 +// long noFinishStoryCount = storyService.count(new QueryWrapper().lambda() +// .eq(ZtStory::getAssignedTo, name).eq(ZtStory::getStatus, "active") +// .eq(ZtStory::getStage,"verified") +// ); + Date date = new Date(); + + result.put("storyCount", storyCount); + result.put("storyTimeOutCount", storyList.stream().filter(o -> !"verified".equalsIgnoreCase(o.getStage())) + .filter(o->o.getAssignedTo().equals(name)) + .filter(o -> o.getPlanEndDate() != null && o.getPlanEndDate().getTime() < date.getTime()).count()); + + List bugList = bugService.list(new QueryWrapper().lambda().eq(ZtBug::getAssignedto, name) + .ne(ZtBug::getStatus, "closed") + ); + long bugCount = bugList.stream().filter(o->o.getStatus().equals("active")).count(); + + long resolvedBugCount = bugService.count(new QueryWrapper().lambda().eq(ZtBug::getAssignedto, name) + .eq(ZtBug::getStatus, "resolved") + ); + + result.put("bugCount", bugCount); + result.put("bugTimeOutCount", bugList.stream().filter(o -> o.getDeadline() != null && o.getDeadline().getTime() < date.getTime()).filter(o -> "active".equalsIgnoreCase(o.getStatus())).count()); + + + List taskList = taskService.list(new QueryWrapper().lambda() + .eq(ZtTask::getAssignedTo, name).ne(ZtTask::getStatus, "closed")); + + long taskCount=taskList.stream().filter(o->o.getStatus().equals("doing")||o.getStatus().equals("wait")).count(); + long resolvedTaskCount = taskList.stream().filter(o->o.getStatus().equals("done")).count(); +// taskService.count(new QueryWrapper().lambda() +// .eq(ZtTask::getAssignedTo, name).eq(ZtTask::getStatus, "done")); + + result.put("taskCount", taskCount); + result.put("taskTimeOutCount", taskList.stream().filter(o -> o.getDeadline() != null && o.getDeadline().getTime() < date.getTime()) + .filter(o -> o.getStatus().equalsIgnoreCase("doing")||o.getStatus().equalsIgnoreCase("wait")).count()); + if (taskCount == 0 && bugCount == 0) { + + + result.put("process", 0L); + } else { + BigDecimal divide = BigDecimal.valueOf(resolvedTaskCount + resolvedBugCount).divide(BigDecimal.valueOf(taskList.size() + bugList.size()), 2, BigDecimal.ROUND_HALF_UP); + + + result.put("process", divide.multiply(BigDecimal.valueOf(100))); + } + + return result; + } + + + + public ZtStoryCountDTO storyCount(ZtCaseDTO dto) { + LoginRiskUser loginRiskUser = RiskUserThreadLocal.get(); + + + UserType userType = loginRiskUser.getUserType(); + ZtStoryCountDTO result = new ZtStoryCountDTO(); + if (userType == UserType.GSGC) { + List ztStory = storyService.list(new QueryWrapper() + .lambda().eq(ZtStory::getDeleted, "0") + .ne(ZtStory::getStatus, "closed") + ); + result.setDpsCount(BigDecimal.valueOf(ztStory.stream().filter(o -> "reviewing".equals(o.getStatus())).count())); + result.setPstgCount(BigDecimal.valueOf(ztStory.stream().filter(o -> "active".equals(o.getStatus())) + .filter(o -> o.getStage().equals("wait")).count())); + result.setJxzCount(BigDecimal.valueOf(ztStory.stream().filter(o -> "active".equals(o.getStatus())) + .filter(o -> o.getStage().equals("developing")).count())); + result.setYqCount(BigDecimal.valueOf(ztStory.stream().filter(o -> "active".equals(o.getStatus())) + .filter(o -> !o.getStage().equals("verified") && !o.getStage().equals("verified")) + .filter(o -> o.getPlanEndDate() != null && o.getPlanEndDate().getTime() < new Date().getTime()) + .count())); + result.setCswbCount(BigDecimal.valueOf(ztStory.stream().filter(o -> "active".equals(o.getStatus())) + .filter(o -> o.getStage().equals("tested")) + .count())); + result.setDysCount(BigDecimal.valueOf(ztStory.stream().filter(o -> "active".equals(o.getStatus())) + .filter(o -> o.getStage().equals("released")) + .count())); + result.setYsNoCount(BigDecimal.valueOf(ztStory.stream().filter(o -> "active".equals(o.getStatus())) + .filter(o -> o.getStage().equals("verified")) + .filter(o -> o.getYsFlag() == 2) + .count())); + result.setYsYesCount(BigDecimal.valueOf(ztStory.stream().filter(o -> "active".equals(o.getStatus())) + .filter(o -> o.getStage().equals("verified")) + .filter(o -> o.getYsFlag() == 1||o.getYsFlag() == 0) + .count())); + } else if (userType == UserType.CP) { + //产品看自己的需求 + List ztStory = storyService.list(new QueryWrapper() + .lambda().eq(ZtStory::getDeleted, "0") + .ne(ZtStory::getStatus, "closed") + .eq(ZtStory::getOpenedby,loginRiskUser.getName()) + ); + result.setDpsCount(BigDecimal.valueOf(ztStory.stream().filter(o -> "reviewing".equals(o.getStatus())).count())); + result.setPstgCount(BigDecimal.valueOf(ztStory.stream().filter(o -> "active".equals(o.getStatus())) + .filter(o -> o.getStage().equals("wait")).count())); + result.setJxzCount(BigDecimal.valueOf(ztStory.stream().filter(o -> "active".equals(o.getStatus())) + .filter(o -> o.getStage().equals("developing")).count())); + result.setYqCount(BigDecimal.valueOf(ztStory.stream().filter(o -> "active".equals(o.getStatus())) + .filter(o -> !o.getStage().equals("verified") && !o.getStage().equals("verified")) + .filter(o -> o.getPlanEndDate() != null && o.getPlanEndDate().getTime() < new Date().getTime()) + .count())); + result.setCswbCount(BigDecimal.valueOf(ztStory.stream().filter(o -> "active".equals(o.getStatus())) + .filter(o -> o.getStage().equals("tested")) + .count())); + result.setDysCount(BigDecimal.valueOf(ztStory.stream().filter(o -> "active".equals(o.getStatus())) + .filter(o -> o.getStage().equals("released")) + .count())); + result.setYsNoCount(BigDecimal.valueOf(ztStory.stream().filter(o -> "active".equals(o.getStatus())) + .filter(o -> o.getStage().equals("verified")) + .filter(o -> o.getYsFlag() == 2) + .count())); + result.setYsYesCount(BigDecimal.valueOf(ztStory.stream().filter(o -> "active".equals(o.getStatus())) + .filter(o -> o.getStage().equals("verified")) + .filter(o -> o.getYsFlag() == 1) + .count())); + } else if (userType == UserType.XMGLY) { + + List ztStory = storyService.list(new QueryWrapper() + .lambda().eq(ZtStory::getDeleted, "0") + .ne(ZtStory::getStatus, "closed") + ); + result.setDpsCount(BigDecimal.valueOf(ztStory.stream().filter(o -> "reviewing".equals(o.getStatus())).count())); + result.setPstgCount(BigDecimal.valueOf(ztStory.stream().filter(o -> "active".equals(o.getStatus())) + .filter(o -> o.getStage().equals("wait")).count())); + result.setJxzCount(BigDecimal.valueOf(ztStory.stream().filter(o -> "active".equals(o.getStatus())) + .filter(o -> o.getStage().equals("developing")).count())); + result.setYqCount(BigDecimal.valueOf(ztStory.stream().filter(o -> "active".equals(o.getStatus())) + .filter(o -> !o.getStage().equals("verified") && !o.getStage().equals("verified")) + .filter(o -> o.getPlanEndDate() != null && o.getPlanEndDate().getTime() < new Date().getTime()) + .count())); + result.setCswbCount(BigDecimal.valueOf(ztStory.stream().filter(o -> "active".equals(o.getStatus())) + .filter(o -> o.getStage().equals("tested")) + .count())); + result.setDysCount(BigDecimal.valueOf(ztStory.stream().filter(o -> "active".equals(o.getStatus())) + .filter(o -> o.getStage().equals("released")) + .count())); + result.setYsNoCount(BigDecimal.valueOf(ztStory.stream().filter(o -> "active".equals(o.getStatus())) + .filter(o -> o.getStage().equals("verified")) + .filter(o -> o.getYsFlag() == 2) + .count())); + result.setYsYesCount(BigDecimal.valueOf(ztStory.stream().filter(o -> "active".equals(o.getStatus())) + .filter(o -> o.getStage().equals("verified")) + .filter(o -> o.getYsFlag() == 1) + .count())); + long bugCount = bugService.count(new QueryWrapper().lambda().eq(ZtBug::getStatus, "active")); + + result.setBugCount(BigDecimal.valueOf(bugCount)); + } + + + if (userType == null) { + throw new BusinessException("当前未设置角色"); + } + + + return result; + } + + @Autowired + private IZtExecutionprojectService executionprojectService; + + @Autowired + private IZtProjectService projectService; + + @Autowired + private IZtProjectstoryService projectstoryService; + + @Autowired + private IZtUserService userService; + + @Autowired + private IZtTeamService teamService; + + +// @Autowired +// private IZtBugService bugService; + + + + public void exportProjectCount(ZtCountQo qo,jakarta.servlet.ServletRequest request, jakarta.servlet.ServletResponse response) { + + + + try { + List workDetailsDTOS = projectWorkCount(qo,request,response); + + ByteArrayOutputStream os = new ByteArrayOutputStream(); + EasyExcel.write(os, ProjectWorkDetailsDTO.class) + .sheet("导出").doWrite(workDetailsDTOS); + + + response.setContentType("application/vnd.ms-excel;charset=UTF-8"); + response.getOutputStream().write(os.toByteArray()); + response.getOutputStream().close(); + response.flushBuffer(); + }catch (Exception e){ + log.error("",e); + } + } + + private List getStoryIds(Integer project) { + List list1 = this.projectstoryService.list(new QueryWrapper().lambda() + .eq(ZtProjectstory::getProject, project) + ); + return list1.stream().map(o->o.getStory()).collect(Collectors.toList()); + } + + public List projectWorkCount(ZtCountQo qo,jakarta.servlet.ServletRequest request, jakarta.servlet.ServletResponse response){ + Date d = qo.getDate(); + Date firstDayOfMonth = DateUtils.getFirstDayOfMonth(d); + Date lastDayOfMonth = DateUtils.getLastDayOfMonth(d); + + List pList = this.projectService.list(new QueryWrapper().lambda().eq(ZtProject::getStatus, "doing").eq(ZtProject::getType, "project")); + + List result=new ArrayList<>(); + + for (ZtProject p:pList) { + + ProjectWorkDetailsDTO dto=new ProjectWorkDetailsDTO(); + result.add(dto); + dto.setProjectName(p.getName()); + + //项目id + Integer project = p.getId(); + List list = executionprojectService.list(new QueryWrapper().lambda() + .eq(ZtExecutionproject::getProject, project)); + if (CollectionUtils.isEmpty(list)) { + continue; +// return new ArrayList<>(); + } + List ztProjects = this.projectService.listByIds(list.stream().map(o -> o.getExecution()).collect(Collectors.toList())); +// ztProjects = ztProjects.stream() +// .filter(o -> +// (o.getBegin().getTime() > firstDayOfMonth.getTime() && o.getBegin().getTime() < lastDayOfMonth.getTime()) +// || (o.getEnd().getTime() > firstDayOfMonth.getTime() && o.getEnd().getTime() < lastDayOfMonth.getTime()) +// || (o.getBegin().getTime() < firstDayOfMonth.getTime() && o.getEnd().getTime() > lastDayOfMonth.getTime()) +// ).collect(Collectors.toList()); + if (CollectionUtils.isEmpty(ztProjects)) { + continue; + } + //项目的需求 + List storyIds=getStoryIds(project); + + + + + List storyList = this.projectstoryService.list(new QueryWrapper().lambda() + .in(ZtProjectstory::getExecution, ztProjects.stream().map(o -> o.getId()).collect(Collectors.toList())) + .in(ZtProjectstory::getStory,storyIds) + ); + + List ztStories = CollectionUtils.isEmpty(storyList)?new ArrayList<>():this.storyService.listByIds(storyList.stream().map(o -> o.getStory()).collect(Collectors.toList())); + + + //完成需求总量 released已发布 verified已验收 closed + List finishStoryList = ztStories.stream().filter(o -> Arrays.asList("released","verified","closed"). + contains(o.getStage())).filter(o->o.getEndDate()!=null&&(firstDayOfMonth.getTime()=o.getEndDate().getTime()) + ).collect(Collectors.toList()); + dto.setFinishCount(finishStoryList.size()); + //完成任务总量 + List taskList = CollectionUtils.isEmpty(storyList)?new ArrayList<>():this.taskService.list(new QueryWrapper().lambda() + .in(ZtTask::getStory, storyList.stream().map(o -> o.getStory()).collect(Collectors.toList()))); + // 完成后可能会被关闭 + List done = taskList.stream().filter(o -> o.getStatus().equals("done")||o.getStatus().equals("closed")) + .filter(o->o.getFinishedDate()!=null&&(firstDayOfMonth.getTime()<=o.getFinishedDate().getTime()&& + lastDayOfMonth.getTime()>=o.getFinishedDate().getTime())).collect(Collectors.toList()); + dto.setFinishTaskCount(done.size()); + //完成需求总工时 +// double sum = taskList.stream().map(o -> o.getEstimate()).mapToDouble(e -> Double.valueOf(e)).sum(); + double sum = done.stream().map(o->o.getEstimate()).mapToDouble(e -> Double.valueOf(e)).sum(); + dto.setStoryTotalTime(BigDecimal.valueOf(sum)); + //实际产出工时 + double sum2 = done.stream().map(o -> o.getConsumed()).mapToDouble(e -> Double.valueOf(e)).sum(); + dto.setUseStoryTotalTime(BigDecimal.valueOf(sum2)); +// 上月剩余未完成需求量 + +// 上月未完成需求量预计工时 + + //已验收需求总量 + List ysVerified = ztStories.stream().filter(o -> o.getStage().equals("verified")||o.getStage().equals("closed")) + .filter(o->o.getEndDate()!=null&&(firstDayOfMonth.getTime()<=o.getEndDate().getTime()&& + lastDayOfMonth.getTime()>=o.getEndDate().getTime())).collect(Collectors.toList()); + dto.setYsTaskCount(ysVerified.size()); + //验收通过率 + List tg = ysVerified.stream().filter(o -> o.getStage().equals("verified")&&o.getYsFlag()==1).collect(Collectors.toList()); + int size = tg.size(); + if(size==0){ + dto.setYsYesRate(BigDecimal.ZERO); + }else{ + dto.setYsYesRate(BigDecimal.valueOf(size).divide(BigDecimal.valueOf(ysVerified.size()),2,BigDecimal.ROUND_HALF_UP)); + } + if(CollectionUtils.isEmpty(ysVerified)){ + dto.setYsNoRate(BigDecimal.ZERO); + }else{ + dto.setYsNoRate(BigDecimal.valueOf(1).subtract(dto.getYsYesRate())); + } + } + + + return result; + } + + public List workDetailsCount(ZtCountQo qo) { + + + Date d = qo.getDate(); + int time = DateUtils.getWorkDaysInCurrentMonth(d) * 6; + + if(d==null){ + d=new Date(); + } + Date firstDayOfMonth = DateUtils.getFirstDayOfMonth(d); + Date lastDayOfMonth = DateUtils.getLastDayOfMonth(d); + + //项目id + Integer project = qo.getProject(); + List list = executionprojectService.list(new QueryWrapper().lambda() + .eq(ZtExecutionproject::getProject, project)); + if (CollectionUtils.isEmpty(list)) { + return new ArrayList<>(); + } + List ztProjects = this.projectService.listByIds(list.stream().map(o -> o.getExecution()).collect(Collectors.toList())); +// ztProjects = ztProjects.stream() +// .filter(o -> +// (o.getBegin().getTime() > firstDayOfMonth.getTime() && o.getBegin().getTime() < lastDayOfMonth.getTime()) +// || (o.getEnd().getTime() > firstDayOfMonth.getTime() && o.getEnd().getTime() < lastDayOfMonth.getTime()) +// || (o.getBegin().getTime() < firstDayOfMonth.getTime() && o.getEnd().getTime() > lastDayOfMonth.getTime()) +// ).collect(Collectors.toList()); + if (CollectionUtils.isEmpty(ztProjects)) { + return new ArrayList<>(); + } + List executionIds = ztProjects.stream().map(o -> o.getId()).collect(Collectors.toList()); + //所有任务 + List taskList = this.taskService.list(new QueryWrapper().lambda().in(ZtTask::getExecution, executionIds)); + if (CollectionUtils.isEmpty(taskList)) { + return new ArrayList<>(); + } + taskList = taskList.stream() + .filter(o->o.getFinishedDate()!=null) + .filter(o -> + (o.getFinishedDate().getTime() >= firstDayOfMonth.getTime() && o.getFinishedDate().getTime() <= lastDayOfMonth.getTime()) +// || (o.getDeadline().getTime() >=firstDayOfMonth.getTime() && o.getDeadline().getTime() <= lastDayOfMonth.getTime()) +// || (o.getEstStarted().getTime()<=firstDayOfMonth.getTime() && o.getDeadline().getTime() > firstDayOfMonth.getTime()) + ).collect(Collectors.toList()); + + List teamList = this.teamService.list(new QueryWrapper().lambda().eq(ZtTeam::getType, "execution") + .in(ZtTeam::getRoot, ztProjects.stream().map(o -> o.getId()).collect(Collectors.toList()))); + if(CollectionUtils.isEmpty(teamList)){ + return new ArrayList<>(); + } + List userList = this.userService.list(new QueryWrapper().lambda().in(ZtUser::getAccount,teamList.stream().map(o->o.getAccount()).collect(Collectors.toList()))); + + //根据项目 获取本月迭代 + List result=new ArrayList<>(); + + //项目 + //迭代 + for (ZtUser u : userList) { + List fTask = taskList.stream().filter(o -> o.getAssignedTo().equals(u.getAccount())).collect(Collectors.toList()); + + + WorkDetailsDTO dto = new WorkDetailsDTO(); + dto.setUserName(u.getNickname()); + dto.setTaskCount(BigDecimal.valueOf(taskList.stream().filter(o -> o.getAssignedTo().equals(u.getAccount())).count())); + //预计工时 + dto.setStoryTotalTime(BigDecimal.valueOf(fTask.stream().map(o -> o.getEstimate()).mapToDouble(e -> Double.valueOf(e)).sum())); +// + dto.setWorkTime(BigDecimal.valueOf(fTask.stream().map(o -> o.getConsumed()).mapToDouble(e -> Double.valueOf(e)).sum())); +// 6*实际工作天数 + dto.setHaveTime(BigDecimal.valueOf(time)); + dto.setSaturation(dto.getWorkTime().compareTo(BigDecimal.ZERO)==0?BigDecimal.ZERO:dto.getWorkTime().divide(dto.getHaveTime(),2,BigDecimal.ROUND_HALF_UP)); + long count =0; + if(!CollectionUtils.isEmpty(fTask)){ + count = bugService.count(new QueryWrapper().lambda().in(ZtBug::getTotask, fTask.stream().map(o -> o.getId()).collect(Collectors.toList()))); + } + dto.setBugCount(BigDecimal.valueOf(count)); + result.add(dto); + } + return result; + } + + public Object projectInfoById(Integer id) { + + ZtProject byId = this.projectService.getById(id); + + List list = this.projectstoryService.list(new QueryWrapper().lambda() + .eq(ZtProjectstory::getProject, id)); + Map map=new HashMap<>(); + Map objMap=new HashMap<>(); + if(CollectionUtils.isEmpty(list)){ + return zeroMap(map,objMap); + } + List ztStories = this.storyService.list(new QueryWrapper().lambda().in(ZtStory::getId, + list.stream().map(o -> o.getStory()).collect(Collectors.toList())).ne(ZtStory::getStatus,"closed")); + if(CollectionUtils.isEmpty(ztStories)){ + return zeroMap(map,objMap); + } + long count = ztStories.stream().filter(o -> !"closed".equals(o.getStatus())).count(); + long finish = ztStories.stream().filter(o -> "verified".equals(o.getStage()) && o.getYsFlag() == 1).count(); + + objMap.put("count",count); + objMap.put("finish",finish); + objMap.put("balance",count-finish); + map.put("story",objMap); + + //项目成员 项目迭代下所有人员 + + List taskList = this.taskService.list(new QueryWrapper().lambda().in(ZtTask::getStory, ztStories.stream().map(o -> o.getId()).collect(Collectors.toList()))); + if(CollectionUtils.isEmpty(taskList)){ + return zeroTaskMap(map,objMap); + } + + + objMap=new HashMap<>(); + objMap.put("totalUser",taskList.stream().map(o->o.getAssignedTo()).distinct().count()); + objMap.put("planTime",taskList.stream().map(o->o.getEstimate()).mapToDouble(e->Double.valueOf(e)).sum()); + objMap.put("useTime",taskList.stream().map(o->o.getConsumed()).mapToDouble(e->Double.valueOf(e)).sum()); + map.put("zy",objMap); + objMap=new HashMap<>(); + + objMap.put("wait",taskList.stream().filter(o->"wait".equals(o.getStatus())).count()); + objMap.put("process",taskList.stream().filter(o->"doing".equals(o.getStatus())).count()); + objMap.put("finish",taskList.stream().filter(o->"done".equals(o.getStatus())).count()); + objMap.put("totalCount",taskList.size()); + map.put("task",objMap); + + List bugList = this.bugService.list(new QueryWrapper().lambda().eq(ZtBug::getProject, id)); + + + objMap=new HashMap<>(); + objMap.put("totalBug",bugList.stream().filter(o->!o.getStatus().equals("closed")).count()); + objMap.put("solve",bugList.stream().filter(o->o.getStatus().equals("resolved")).count()); + objMap.put("noSolve",bugList.stream().filter(o->o.getStatus().equals("active")).count()); + map.put("bug",objMap); + + objMap=new HashMap<>(); + objMap.put("online",ztStories.stream().filter(o->o.getStage().equals("released")||o.getStage().equals("verified")).count()); + objMap.put("ysAll",ztStories.stream().filter(o->o.getStage().equals("verified")).count()); + objMap.put("ysNo",ztStories.stream().filter(o->o.getStage().equals("verified")&&o.getYsFlag()==2).count()); + map.put("ys",objMap); + + return map; + } + + private Object zeroTaskMap(Map map, Map objMap) { + objMap=new HashMap<>(); + objMap.put("totalUser",0); + objMap.put("planTime",0); + objMap.put("useTime",0); + map.put("zy",objMap); + objMap=new HashMap<>(); + objMap.put("wait",0); + objMap.put("process",0); + objMap.put("finish",0); + objMap.put("totalCount",0); + map.put("task",objMap); + objMap=new HashMap<>(); + objMap.put("totalBug",0); + objMap.put("solve",0); + objMap.put("noSolve",0); + map.put("bug",objMap); + + objMap=new HashMap<>(); + objMap.put("online",0); + objMap.put("ysAll",0); + objMap.put("ysNo",0); + map.put("ys",objMap); + + return map; + } + + private Object zeroMap(Map map, Map objMap) { + + objMap.put("count",0); + objMap.put("finish",0); + objMap.put("balance",0); + + map.put("story",objMap); + objMap=new HashMap<>(); + objMap.put("totalUser",0); + objMap.put("planTime",0); + objMap.put("useTime",0); + map.put("zy",objMap); + objMap=new HashMap<>(); + objMap.put("wait",0); + objMap.put("process",0); + objMap.put("finish",0); + map.put("task",objMap); + objMap=new HashMap<>(); + objMap.put("totalBug",0); + objMap.put("solve",0); + objMap.put("noSolve",0); + map.put("bug",objMap); + + return map; + } + + public void exportWorkDetailsCount(ZtCountQo qo, jakarta.servlet.ServletRequest request, jakarta.servlet.ServletResponse response) { + try { + List workDetailsDTOS =workDetailsCount(qo); + + ByteArrayOutputStream os = new ByteArrayOutputStream(); + EasyExcel.write(os, WorkDetailsDTO.class) + .sheet("导出").doWrite(workDetailsDTOS); + +// response.h +// response.add("Content-Disposition", "attachment;filename=" + new String("错误".getBytes(), "iso-8859-1")); + response.setContentType("application/vnd.ms-excel;charset=UTF-8"); +// response.setHeader("Pragma", "no-cache"); +// response.setHeader("Cache-Control", "no-cache"); +// response.setDateHeader("Expires", 0); + response.getOutputStream().write(os.toByteArray()); + response.getOutputStream().close(); + response.flushBuffer(); + }catch (Exception e){ + log.error("",e); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/sa/zentao/service/impl/VerificationCodeServiceImpl.java b/src/main/java/com/sa/zentao/service/impl/VerificationCodeServiceImpl.java new file mode 100644 index 0000000..15a91c1 --- /dev/null +++ b/src/main/java/com/sa/zentao/service/impl/VerificationCodeServiceImpl.java @@ -0,0 +1,20 @@ +package com.sa.zentao.service.impl; + +import com.sa.zentao.entity.VerificationCode; +import com.sa.zentao.mapper.VerificationCodeMapper; +import com.sa.zentao.service.IVerificationCodeService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 服务实现类 + *

+ * + * @author gqb + * @since 2024-09-14 + */ +@Service +public class VerificationCodeServiceImpl extends ServiceImpl implements IVerificationCodeService { + +} diff --git a/src/main/java/com/sa/zentao/service/impl/ZtActionServiceImpl.java b/src/main/java/com/sa/zentao/service/impl/ZtActionServiceImpl.java new file mode 100644 index 0000000..3e5bbe3 --- /dev/null +++ b/src/main/java/com/sa/zentao/service/impl/ZtActionServiceImpl.java @@ -0,0 +1,179 @@ +package com.sa.zentao.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.sa.zentao.dao.ZtActionDTO; +import com.sa.zentao.entity.*; +import com.sa.zentao.enums.ActionStatus; +import com.sa.zentao.enums.ActionType; +import com.sa.zentao.mapper.ZtActionMapper; +import com.sa.zentao.qo.ActionQo; +import com.sa.zentao.service.*; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.sa.zentao.utils.BeanCopyUtil; +import com.sa.zentao.utils.BeanCopyUtilCallBack; +import com.sa.zentao.utils.DateUtils; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + *

+ * 服务实现类 + *

+ * + * @author gqb + * @since 2024-06-27 + */ +@Service +public class ZtActionServiceImpl extends ServiceImpl implements IZtActionService { + + + @Autowired + private IZtActionrecentService actionrecentService; + + @Autowired + private IZtStoryService storyService; + @Autowired + private IZtTaskService taskService; + @Autowired + private IZtBugService bugService; + @Autowired + private IZtProjectService projectService; + @Autowired + private IZtProductService productService; + @Autowired + private IZtUserService userService; + + /** + * + * @param type 类型 + * @param status 状态 + * @param objectId 原id + * @param product 产品 + * @param project 项目 + * @param exection 执行? + * @param actor 操作者 + * @param comment 描述 + * @param extra 指派者 + */ + @Override + public void addAction(ActionType type, ActionStatus status,Integer objectId,String product,Integer project, + Integer exection,String actor,String comment,String extra + ) { + ZtAction ztAction = new ZtAction(); + ztAction.setObjecttype(type.getValue()); + ztAction.setObjectid(objectId); + ztAction.setProduct(product); + ztAction.setProject(project); + ztAction.setExecution(exection); + ztAction.setActor(actor); + ztAction.setComment(comment); + ztAction.setExtra(extra); + ztAction.setDate(new Date()); + ztAction.setVision("rnd"); + ztAction.setAction(status.getValue()); + this.baseMapper.insert(ztAction); + ZtActionrecent ztActionrecent = new ZtActionrecent(); + BeanUtils.copyProperties(ztAction,ztActionrecent); + actionrecentService.save(ztActionrecent); + } + + @Override + public List actionList(ActionQo qo) { + + ActionType type = qo.getType(); + + Integer id = qo.getId(); + + List list = this.list(new QueryWrapper().lambda().eq(ZtAction::getObjecttype, type.getValue()) + .eq(ZtAction::getObjectid, id) + ); + if(CollectionUtils.isEmpty(list)){ + return new ArrayList<>(); + }else{ + List ztActionDTOS = BeanCopyUtil.copyListProperties(list, ZtActionDTO::new); + + for (ZtActionDTO dto:ztActionDTOS) { + dto.setActionValue(ActionStatus.valueForDesc(dto.getAction())); + } + return ztActionDTOS; + } + + } + + + @Override + public List todayActionList(ActionQo qo) { + + + Map map=getUserMap(); + + + Date date = new Date(); + Date dayStartDate = DateUtils.getDayStartDate(date); + Date dayEndDate = DateUtils.getDayEndDate(date); + List list = this.list(new QueryWrapper().lambda().gt(ZtAction::getDate,dayStartDate) + .lt(ZtAction::getDate,dayEndDate).orderByDesc(ZtAction::getId)); + + List ztActionDTOS = BeanCopyUtil.copyListProperties(list, ZtActionDTO::new, new BeanCopyUtilCallBack() { + @Override + public void callBack(ZtAction t, ZtActionDTO s) { + + s.setActionValue(ActionStatus.valueForDesc(t.getAction())); + if(ActionType.XQ.getValue().equals(t.getObjecttype())){ + ZtStory story = storyService.getById(t.getObjectid()); + s.setActionValue("需求:"+story.getTitle()+"-"+s.getActionValue()); + } + if(ActionType.RW.getValue().equals(t.getObjecttype())){ + ZtTask task = taskService.getById(t.getObjectid()); + s.setActionValue("任务:"+task.getName()+"-"+s.getActionValue()); + } + if(ActionType.BUG.getValue().equals(t.getObjecttype())){ + ZtBug bug = bugService.getById(t.getObjectid()); + s.setActionValue("BUG:"+bug.getTitle()+"-"+s.getActionValue()); + } + if(ActionType.ZX.getValue().equals(t.getObjecttype())||ActionType.XM.getValue().equals(t.getObjecttype())||ActionType.XMJ.getValue().equals(t.getObjecttype())){ + ZtProject project = projectService.getById(t.getObjectid()); + if(ActionType.ZX.getValue().equals(t.getObjecttype())){ + s.setActionValue("迭代:"+project.getName()+"-"+s.getActionValue()); + } + if(ActionType.XM.getValue().equals(t.getObjecttype())){ + s.setActionValue("项目:"+project.getName()+"-"+s.getActionValue()); + } + if(ActionType.XMJ.getValue().equals(t.getObjecttype())){ + s.setActionValue("产品集:"+project.getName()+"-"+s.getActionValue()); + } + } + if(ActionType.CP.getValue().equals(t.getObjecttype())){ + ZtProduct product = productService.getById(t.getObjectid()); + s.setActionValue("产品:"+product.getName()+"-"+s.getActionValue()); + + } + ZtUser ztUser = map.get(s.getActor()); + if(ztUser!=null){ + s.setActor(ztUser.getNickname()); + } + ztUser = map.get(s.getExtra()); + if(ztUser!=null){ + s.setExtra(ztUser.getNickname()); + } + + } + }); + return ztActionDTOS; + } + + private Map getUserMap() { + List list1 = this.userService.list(); + + return list1.stream().collect(Collectors.toMap(ZtUser::getAccount,o->o)); + } +} diff --git a/src/main/java/com/sa/zentao/service/impl/ZtActionrecentServiceImpl.java b/src/main/java/com/sa/zentao/service/impl/ZtActionrecentServiceImpl.java new file mode 100644 index 0000000..2eafb1e --- /dev/null +++ b/src/main/java/com/sa/zentao/service/impl/ZtActionrecentServiceImpl.java @@ -0,0 +1,20 @@ +package com.sa.zentao.service.impl; + +import com.sa.zentao.entity.ZtActionrecent; +import com.sa.zentao.mapper.ZtActionrecentMapper; +import com.sa.zentao.service.IZtActionrecentService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 服务实现类 + *

+ * + * @author gqb + * @since 2024-06-27 + */ +@Service +public class ZtActionrecentServiceImpl extends ServiceImpl implements IZtActionrecentService { + +} diff --git a/src/main/java/com/sa/zentao/service/impl/ZtBugServiceImpl.java b/src/main/java/com/sa/zentao/service/impl/ZtBugServiceImpl.java new file mode 100644 index 0000000..13588c3 --- /dev/null +++ b/src/main/java/com/sa/zentao/service/impl/ZtBugServiceImpl.java @@ -0,0 +1,301 @@ +package com.sa.zentao.service.impl; + +import ch.qos.logback.core.util.StringUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.github.pagehelper.Page; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.sa.zentao.conf.RiskUserThreadLocal; +import com.sa.zentao.dao.BusinessException; +import com.sa.zentao.dao.ZtBugDTO; +import com.sa.zentao.dao.ZtCaseDTO; +import com.sa.zentao.entity.*; +import com.sa.zentao.enums.ActionStatus; +import com.sa.zentao.enums.ActionType; +import com.sa.zentao.mapper.ZtBugMapper; +import com.sa.zentao.qo.ZtBugQo; +import com.sa.zentao.qo.ZtProjectQo; +import com.sa.zentao.service.*; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; + +import java.util.Arrays; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + *

+ * 服务实现类 + *

+ * + * @author gqb + * @since 2024-07-04 + */ +@Service +public class ZtBugServiceImpl extends ServiceImpl implements IZtBugService { + + + @Autowired + private IZtKanbanlaneService kanbanlaneService; + + @Autowired + private IZtActionService actionService; + + @Autowired + private IZtUserService userService; + + @Override + public PageInfo bugPageList(ZtProjectQo qo) { + Page page = PageHelper.startPage(qo.getCurrentPage(), qo.getPageSize()); + qo.setUserName(RiskUserThreadLocal.get().getName()); + List result = this.baseMapper.bugPageList(qo); + if(!CollectionUtils.isEmpty(result)){ + List fIds = result.stream().map(o -> o.getOpenedby()).collect(Collectors.toList()); + fIds.addAll(result.stream().map(o->o.getAssignedto()).collect(Collectors.toList())); + Map userMap = userService.userMapByIds(fIds); + + for (ZtBugDTO bug:result ) { + + ZtUser ztUser = userMap.get(bug.getOpenedby()); + if(ztUser!=null){ + bug.setOpenedbyName(ztUser.getNickname()); + } + ztUser = userMap.get(bug.getAssignedto()); + + if(ztUser!=null){ + bug.setAssignedtoName(ztUser.getNickname()); + } + + } + } + return new PageInfo(result); + } + + @Override + public PageInfo myBugPageList(ZtProjectQo qo) { + Page page = PageHelper.startPage(qo.getCurrentPage(), qo.getPageSize()); + qo.setUserName(RiskUserThreadLocal.get().getName()); + List result = this.baseMapper.myBugPageList(qo); + if(!CollectionUtils.isEmpty(result)){ + List fIds = result.stream().map(o -> o.getOpenedby()).collect(Collectors.toList()); + fIds.addAll(result.stream().map(o->o.getAssignedto()).collect(Collectors.toList())); + Map userMap = userService.userMapByIds(fIds); + + for (ZtBugDTO bug:result ) { + + ZtUser ztUser = userMap.get(bug.getOpenedby()); + if(ztUser!=null){ + bug.setOpenedbyName(ztUser.getNickname()); + } + ztUser = userMap.get(bug.getAssignedto()); + + if(ztUser!=null){ + bug.setAssignedtoName(ztUser.getNickname()); + } + + } + } + return new PageInfo(result); + } + + @Autowired + private IZtProjectService projectService; + + @Autowired + private IZtTaskService taskService; + + + @Override + public ZtBugDTO bugInfoById(Integer id) { + ZtBug ztBug = this.getById(id); + + Integer project = ztBug.getProject(); + + Integer execution = ztBug.getExecution(); + + Integer totask = ztBug.getTotask(); + + Integer tostory = ztBug.getTostory(); + ZtBugDTO d=new ZtBugDTO(); + BeanUtils.copyProperties(ztBug,d); + if(project!=null&&project!=0){ + d.setZtProject(this.projectService.getById(project)); + } + if(execution!=null&&execution!=0){ + d.setZtExecution(this.projectService.getById(execution)); + } + if(totask!=null&&totask!=0){ + d.setZtTask(this.taskService.getById(totask)); + } + if(tostory!=null&&tostory!=0){ + d.setZtStory(this.storyService.getById(tostory)); + } + + return d; + } + + @Autowired + private IZtProjectstoryService projectstoryService; + + @Autowired + private IZtStoryService storyService; + + + @Override + @Transactional + public void addBug(ZtBugDTO dto) { + ZtBug ztBug = new ZtBug(); + BeanUtils.copyProperties(dto,ztBug); + ztBug.setOpenedby(RiskUserThreadLocal.get().getName()); + ztBug.setOpeneddate(new Date()); + ztBug.setStatus("active"); + if(dto.getProject()==null||dto.getProject()==0){ + if(dto.getTostory()!=null&&dto.getTostory()!=0){ + ZtProjectstory projectstory = this.projectstoryService.getOne(new QueryWrapper().lambda().eq(ZtProjectstory::getStory, dto.getTostory()) + .ne(ZtProjectstory::getProject,0) + ); + if(projectstory!=null){ + ztBug.setProject(projectstory.getProject()); + } + } + ZtStory story = storyService.getById(dto.getTostory()); + ztBug.setProduct(story.getProduct()); + + + } + this.baseMapper.insert(ztBug); + if(dto.getExecution()!=null&&dto.getExecution()!=0){ + kanbanlaneService.addBug(dto.getExecution(), Arrays.asList(ztBug)); + } + this.actionService.addAction(ActionType.BUG, ActionStatus.XJ,ztBug.getId(),ztBug.getProject()+"",ztBug.getProject(),ztBug.getExecution() + ,RiskUserThreadLocal.get().getName(),ztBug.getSteps(),"" + ); + } + + @Override + public void editBug(ZtBugDTO dto) { + ZtBug ztBug = this.baseMapper.selectById(dto.getId()); + BeanUtils.copyProperties(dto,ztBug,"execution"); + + + ztBug.setLasteditedby(RiskUserThreadLocal.get().getName()); + ztBug.setLastediteddate(new Date()); + ztBug.setStatus("active"); + this.baseMapper.updateById(ztBug); + this.actionService.addAction(ActionType.BUG, ActionStatus.BJ,ztBug.getId(),ztBug.getProject()+"",ztBug.getProject(),ztBug.getExecution() + ,RiskUserThreadLocal.get().getName(),ztBug.getSteps(),"" + ); + } + + @Override + @Transactional + public void changeStatus(ZtBugQo qo) { + Integer id = qo.getId(); + //bug + ZtBug ztBug = this.baseMapper.selectById(id); + if(!StringUtils.isEmpty(qo.getAssignedto())){ + ztBug.setAssignedto(qo.getAssignedto()); + } + if("confirmed".equalsIgnoreCase(qo.getStatus())){ + // + ztBug.setConfirmed(true); + this.actionService.addAction(ActionType.BUG, ActionStatus.QR,ztBug.getId(),ztBug.getProject()+"",ztBug.getProject(),ztBug.getExecution() + ,RiskUserThreadLocal.get().getName(),qo.getStep(),"" + ); + } + + //解决中 + if("fixing".equalsIgnoreCase(qo.getStatus())){ + // + } + //完成 + if("fixed".equalsIgnoreCase(qo.getStatus())){ + // + ztBug.setStatus("resolved"); + this.actionService.addAction(ActionType.BUG, ActionStatus.WC,ztBug.getId(),ztBug.getProject()+"",ztBug.getProject(),ztBug.getExecution() + ,RiskUserThreadLocal.get().getName(),qo.getRemark(),"" + ); + } + + //测试进行中 + if("testing".equalsIgnoreCase(qo.getStatus())){ + // + } + if("tested".equalsIgnoreCase(qo.getStatus())){ + // + } + if("closed".equalsIgnoreCase(qo.getStatus())){ + // + ztBug.setStatus("closed"); + this.actionService.addAction(ActionType.BUG, ActionStatus.GB,ztBug.getId(),ztBug.getProject()+"",ztBug.getProject(),ztBug.getExecution() + ,RiskUserThreadLocal.get().getName(),qo.getRemark(),"" + ); + } + //1.active 2.confire=1 3.解决进行中 不变 4 resolved 完成 5.测试中不变 6.测试完毕不变 + ztBug.setLastediteddate(new Date()); + ztBug.setLasteditedby(RiskUserThreadLocal.get().getName()); + this.baseMapper.updateById(ztBug); + if(ztBug.getExecution()==null||ztBug.getExecution().intValue()==0){ + return; + } + if(ztBug.getExecution()!=null&&ztBug.getExecution()!=0){ + kanbanlaneService.changeStatus(ztBug.getExecution(),ztBug.getId(),"bug",qo.getStatus()); + } + + + + + } + + @Override + @Transactional + public void resolved(ZtBugDTO dto) { + + ZtBug ztBug = this.baseMapper.selectById(dto.getId()); + if("resolved".equals(ztBug.getStatus())){ + throw new BusinessException("当前bug已完成"); + } + ztBug.setStatus("resolved"); + ztBug.setResolvedby(RiskUserThreadLocal.get().getName()); + ztBug.setResolution(dto.getResolution()); + ztBug.setResolveddate(new Date()); + ztBug.setAssignedto(dto.getAssignedto()); + this.baseMapper.updateById(ztBug); + if(ztBug.getExecution()!=null&&ztBug.getExecution()!=0) { + kanbanlaneService.changeStatus(ztBug.getExecution(), ztBug.getId(), "bug", "fixed"); + } + + this.actionService.addAction(ActionType.BUG, ActionStatus.WC,ztBug.getId(),ztBug.getProject()+"",ztBug.getProject(),ztBug.getExecution() + ,RiskUserThreadLocal.get().getName(),dto.getRemark(),"" + ); + } + + @Override + public void reActive(ZtBugDTO dto) { + ZtBug ztBug = this.baseMapper.selectById(dto.getId()); + if(ztBug.getStatus().equals("closed")){ + throw new BusinessException("已关闭"); + } + ztBug.setStatus("active"); + ztBug.setLastediteddate(new Date()); + ztBug.setLasteditedby(RiskUserThreadLocal.get().getName()); + this.baseMapper.updateById(ztBug); + if(ztBug.getExecution()!=null&&ztBug.getExecution()!=0) { + kanbanlaneService.changeStatus(ztBug.getExecution(), ztBug.getId(), "bug", "resolving"); + } + + this.actionService.addAction(ActionType.BUG, ActionStatus.JH,ztBug.getId(),ztBug.getProject()+"",ztBug.getProject(),ztBug.getExecution() + ,RiskUserThreadLocal.get().getName(),dto.getRemark(),"" + ); + } + + + +} diff --git a/src/main/java/com/sa/zentao/service/impl/ZtCaseServiceImpl.java b/src/main/java/com/sa/zentao/service/impl/ZtCaseServiceImpl.java new file mode 100644 index 0000000..d1327f0 --- /dev/null +++ b/src/main/java/com/sa/zentao/service/impl/ZtCaseServiceImpl.java @@ -0,0 +1,114 @@ +package com.sa.zentao.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.github.pagehelper.Page; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.sa.zentao.conf.RiskUserThreadLocal; +import com.sa.zentao.dao.*; +import com.sa.zentao.entity.ZtCase; +import com.sa.zentao.entity.ZtCasestep; +import com.sa.zentao.mapper.ZtCaseMapper; +import com.sa.zentao.qo.ZtProjectQo; +import com.sa.zentao.service.IZtCaseService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.sa.zentao.service.IZtCasestepService; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + *

+ * 服务实现类 + *

+ * + * @author gqb + * @since 2024-07-03 + */ +@Service +public class ZtCaseServiceImpl extends ServiceImpl implements IZtCaseService { + + @Autowired + private IZtCasestepService casestepService; + + @Override + public PageInfo casePageList(ZtProjectQo qo) { + Page page = PageHelper.startPage(qo.getCurrentPage(), qo.getPageSize()); + List result = this.baseMapper.casePageList(qo); + return new PageInfo(result); + } + + @Override + @Transactional + public void modify(ZtCaseDTO dto) { + ZtCase ztCase = this.baseMapper.selectById(dto.getId()); + if(ztCase==null){ + throw new BusinessException("未查询到数据"); + } + BeanUtils.copyProperties(dto,ztCase); + this.baseMapper.updateById(ztCase); + List list = dto.getList(); + if(CollectionUtils.isEmpty(list)){ + this.casestepService.remove(new QueryWrapper() + .lambda().eq(ZtCasestep::getCaseId,ztCase.getId())); + return; + }else{ + LambdaQueryWrapper eq = new QueryWrapper() + .lambda().eq(ZtCasestep::getCaseId, ztCase.getId()); + if(!CollectionUtils.isEmpty(list.stream().map(o -> o.getId()).filter(o->o!=null).collect(Collectors.toList()))){ + eq.notIn(ZtCasestep::getId, list.stream().map(o -> o.getId()).filter(o->o!=null).collect(Collectors.toList())); + } + + this.casestepService.remove(eq); + List saveList=new ArrayList<>(); + + for (ZtCasestepDTO l:list) { + ZtCasestep ztCasestep = new ZtCasestep(); + BeanUtils.copyProperties(l,ztCasestep); + ztCasestep.setCaseId(ztCase.getId()); + + if(l.getId()!=null){ + this.casestepService.updateById(ztCasestep); + }else{ + saveList.add(ztCasestep); + } + } + this.casestepService.saveBatch(saveList); + } + + + } + + @Override + @Transactional + public void addCase(ZtCaseDTO dto) { + ZtCase ztCase = new ZtCase(); + + BeanUtils.copyProperties(dto,ztCase); + ztCase.setOpenedby(RiskUserThreadLocal.get().getName()); + ztCase.setOpeneddate(new Date()); + this.baseMapper.insert(ztCase); + + List list = dto.getList(); + List saveList=new ArrayList<>(); + for (ZtCasestepDTO l:list) { + ZtCasestep ztCasestep = new ZtCasestep(); + BeanUtils.copyProperties(l,ztCasestep); + ztCasestep.setCaseId(ztCase.getId()); + saveList.add(ztCasestep); + } + this.casestepService.saveBatch(saveList); + + } + + +} diff --git a/src/main/java/com/sa/zentao/service/impl/ZtCasestepServiceImpl.java b/src/main/java/com/sa/zentao/service/impl/ZtCasestepServiceImpl.java new file mode 100644 index 0000000..371ed4c --- /dev/null +++ b/src/main/java/com/sa/zentao/service/impl/ZtCasestepServiceImpl.java @@ -0,0 +1,87 @@ +package com.sa.zentao.service.impl; + +import com.alibaba.fastjson.JSON; +import com.sa.zentao.conf.RiskUserThreadLocal; +import com.sa.zentao.dao.BusinessException; +import com.sa.zentao.dao.ZtCaseDTO; +import com.sa.zentao.dao.ZtCasestepDTO; +import com.sa.zentao.entity.ZtCase; +import com.sa.zentao.entity.ZtCasestep; +import com.sa.zentao.entity.ZtTestresult; +import com.sa.zentao.mapper.ZtCasestepMapper; +import com.sa.zentao.service.IZtCaseService; +import com.sa.zentao.service.IZtCasestepService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.sa.zentao.service.IZtTestresultService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +/** + *

+ * 服务实现类 + *

+ * + * @author gqb + * @since 2024-07-03 + */ +@Service +public class ZtCasestepServiceImpl extends ServiceImpl implements IZtCasestepService { + + @Autowired + private IZtTestresultService testresultService; + + @Autowired + private IZtCaseService caseService; + + + @Override + @Transactional + public void execCase(ZtCaseDTO dto) { + List list = dto.getList(); + if(CollectionUtils.isEmpty(list)){ + throw new BusinessException("请检查数据"); + } + + long count = list.stream().filter(o -> o.getStatus() == 0).count(); + ZtTestresult r=new ZtTestresult(); + r.setCaseId(list.get(0).getCaseId()); + r.setCaseresult(count>0?"fail":"pass"); + r.setDate(new Date()); + r.setLastrunner(RiskUserThreadLocal.get().getName()); + ZtCase ztCase = this.caseService.getById(list.get(0).getCaseId()); + + + for (ZtCasestepDTO caseDTO:list) { + Integer caseId = caseDTO.getCaseId(); + Integer status = caseDTO.getStatus(); + String result=null; + if(status==1){ + result="pass"; + }else{ + result="fail"; + } + String desc = caseDTO.getDesc(); + caseDTO.setCaseResult(result); + } + + r.setStepresults(JSON.toJSONString(list)); + + ztCase.setLastrunresult(count>0?"pass":"fail"); + testresultService.save(r); + + ZtCase mCase = this.caseService.getById(list.get(0).getCaseId()); + mCase.setLastrunresult(count>0?"fail":"pass"); + mCase.setLasteditedby(RiskUserThreadLocal.get().getName()); + mCase.setLastediteddate(new Date()); + mCase.setLastrundate(new Date()); + mCase.setLastrunner(RiskUserThreadLocal.get().getName()); + ztCase.setStatus("normal"); + this.caseService.updateById(ztCase); + } +} diff --git a/src/main/java/com/sa/zentao/service/impl/ZtCronDevopsServiceImpl.java b/src/main/java/com/sa/zentao/service/impl/ZtCronDevopsServiceImpl.java new file mode 100644 index 0000000..667d1fb --- /dev/null +++ b/src/main/java/com/sa/zentao/service/impl/ZtCronDevopsServiceImpl.java @@ -0,0 +1,228 @@ +package com.sa.zentao.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.github.pagehelper.Page; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.sa.zentao.conf.RiskUserThreadLocal; +import com.sa.zentao.dao.BusinessException; +import com.sa.zentao.dao.ZtCronDevopsDTO; +import com.sa.zentao.entity.ZtCronDevops; +import com.sa.zentao.entity.ZtCronDevopsUser; +import com.sa.zentao.entity.ZtUser; +import com.sa.zentao.mapper.ZtCronDevopsMapper; +import com.sa.zentao.qo.ZtUserQo; +import com.sa.zentao.service.IZtCronDevopsService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.sa.zentao.service.IZtCronDevopsUserService; +import com.sa.zentao.service.IZtUserService; +import com.sa.zentao.utils.Constant; +import com.sa.zentao.utils.DateUtils; +import org.quartz.CronExpression; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; + +import java.text.ParseException; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + *

+ * 服务实现类 + *

+ * + * @author gqb + * @since 2024-10-22 + */ +@Service +public class ZtCronDevopsServiceImpl extends ServiceImpl implements IZtCronDevopsService { + + @Autowired + private IZtUserService userService; + + @Autowired + private IZtCronDevopsUserService cronDevopsUserService; + + + @Override + @Transactional + public void add(ZtCronDevopsDTO dto) throws ParseException { + if(CollectionUtils.isEmpty(dto.getItemList())){ + throw new BusinessException("请检查数据"); + } + if(!CollectionUtils.isEmpty(dto.getItemList().stream().filter(o-> StringUtils.isEmpty(o.getUsername())||StringUtils.isEmpty(o.getMail())).collect(Collectors.toList()))){ + throw new BusinessException("请检查数据"); + } + + try { + boolean validExpression = CronExpression.isValidExpression(dto.getCron()); + if(!validExpression){ + throw new BusinessException("请检查cron表达式"); + } + }catch (Exception e){ + throw new BusinessException("请检查cron表达式"); + } + + ZtCronDevops devops=new ZtCronDevops(); + + BeanUtils.copyProperties(dto,devops); + devops.setCreateDate(new Date()); + devops.setCreateUser(RiskUserThreadLocal.get().getName()); + devops.setUpdateDate(new Date()); + devops.setUpdateUser(RiskUserThreadLocal.get().getName()); + this.baseMapper.insert(devops); + + + List itemList = dto.getItemList(); + for (ZtCronDevopsUser u:itemList) { + u.setCreateDate(new Date()); + u.setCreateUser(RiskUserThreadLocal.get().getName()); + u.setDevopsId(devops.getId()); + } + cronDevopsUserService.saveBatch(itemList); + + + Date date = new Date(); + Date dayStartDate = new Date(DateUtils.getDayStartDate(date).getTime()-1000); + Date endDate = DateUtils.getDayStartDate(DateUtils.dateAddDay(date, 1)); + + CronExpression cron = new CronExpression(devops.getCron()); + Date nextExecutionTime = cron.getNextValidTimeAfter(new Date()); + String sDate = DateUtils.formatDate(nextExecutionTime, "yyyy-MM-dd HH:mm:00"); + + if(dayStartDate.getTime()<=nextExecutionTime.getTime()&&endDate.getTime()>=endDate.getTime()){ + List ztCronDevops = Constant.devMap.get(sDate); + if(CollectionUtils.isEmpty(ztCronDevops)){ + ztCronDevops=new ArrayList<>(); + } + ztCronDevops.add(devops); + Constant.devMap.put(sDate,ztCronDevops); + } + } + + @Override + public void modify(ZtCronDevopsDTO dto) throws ParseException { + if(CollectionUtils.isEmpty(dto.getItemList())){ + throw new BusinessException("请检查数据"); + } + if(!CollectionUtils.isEmpty(dto.getItemList().stream().filter(o-> StringUtils.isEmpty(o.getUsername())||StringUtils.isEmpty(o.getMail())).collect(Collectors.toList()))){ + throw new BusinessException("请检查数据"); + } + + try { + boolean validExpression = CronExpression.isValidExpression(dto.getCron()); + if(!validExpression){ + throw new BusinessException("请检查cron表达式"); + } + }catch (Exception e){ + throw new BusinessException("请检查cron表达式"); + } + + ZtCronDevops ztCronDevop = this.baseMapper.selectById(dto.getId()); + if(ztCronDevop==null){ + throw new BusinessException("未查询到数据"); + } + BeanUtils.copyProperties(dto,ztCronDevop); + ztCronDevop.setUpdateUser(RiskUserThreadLocal.get().getName()); + ztCronDevop.setUpdateDate(new Date()); + this.baseMapper.updateById(ztCronDevop); + + this.cronDevopsUserService.remove(new QueryWrapper().lambda().eq(ZtCronDevopsUser::getDevopsId,ztCronDevop.getId())); + List itemList = dto.getItemList(); + for (ZtCronDevopsUser u:itemList) { + u.setCreateDate(new Date()); + u.setCreateUser(RiskUserThreadLocal.get().getName()); + u.setDevopsId(ztCronDevop.getId()); + } + cronDevopsUserService.saveBatch(itemList); + + + + Date date = new Date(); + Date dayStartDate = new Date(DateUtils.getDayStartDate(date).getTime()-1000); + Date endDate = DateUtils.getDayStartDate(DateUtils.dateAddDay(date, 1)); + + CronExpression cron = new CronExpression(ztCronDevop.getCron()); + Date nextExecutionTime = cron.getNextValidTimeAfter(new Date()); + String sDate = DateUtils.formatDate(nextExecutionTime, "yyyy-MM-dd HH:mm:00"); + + if(dayStartDate.getTime()<=nextExecutionTime.getTime()&&endDate.getTime()>=endDate.getTime()){ + List ztCronDevops = Constant.devMap.get(sDate); + if(CollectionUtils.isEmpty(ztCronDevops)){ + ztCronDevops=new ArrayList<>(); + ztCronDevops.add(ztCronDevop); + }else{ + boolean flag=false; + for (ZtCronDevops d:ztCronDevops) { + if(d.getId().intValue()==ztCronDevop.getId().intValue()){ + flag=true; + } + } + if(!flag){ + ztCronDevops.add(ztCronDevop); + } + + } + + Constant.devMap.put(sDate,ztCronDevops); + } + + } + + @Override + public PageInfo pageList(ZtUserQo qo) { + + qo.setUserName(RiskUserThreadLocal.get().getName()); + + Page page = PageHelper.startPage(qo.getCurrentPage(), qo.getPageSize() + + ).doSelectPage(()->this.baseMapper.pageList(qo)); + List result = page.getResult(); + + if(!CollectionUtils.isEmpty(result)){ + + Map userMap = this.userService.userMapByIds(result.stream().map(o -> o.getCreateUser()).collect(Collectors.toList())); + + + for (ZtCronDevopsDTO dto:result) { + ZtUser ztUser = userMap.get(dto.getCreateUser()); + List list = this.cronDevopsUserService.list(new QueryWrapper().lambda().eq(ZtCronDevopsUser::getDevopsId, dto.getId())); + if(!CollectionUtils.isEmpty(list)){ + StringBuilder b=new StringBuilder(); + for (ZtCronDevopsUser u:list) { + b.append("
").append("提醒人:").append(u.getUsername()).append(",").append("提醒邮箱:").append(u.getMail()).append("
"); + } + dto.setMail(b.toString()); + } + dto.setItemList(list); + if(ztUser!=null){ + dto.setCreateUser(ztUser.getNickname()); + } + } + } + + + return new PageInfo<>(result); + } + + @Override + public void close(ZtCronDevopsDTO dto) { + ZtCronDevops ztCronDevops = this.baseMapper.selectById(dto.getId()); + if(ztCronDevops==null){ + throw new BusinessException("未查询到数据"); + } + if(ztCronDevops.getStatus()==1){ + throw new BusinessException("已关闭"); + } + ztCronDevops.setStatus(1); + this.baseMapper.updateById(ztCronDevops); + + } +} diff --git a/src/main/java/com/sa/zentao/service/impl/ZtCronDevopsUserServiceImpl.java b/src/main/java/com/sa/zentao/service/impl/ZtCronDevopsUserServiceImpl.java new file mode 100644 index 0000000..1350f82 --- /dev/null +++ b/src/main/java/com/sa/zentao/service/impl/ZtCronDevopsUserServiceImpl.java @@ -0,0 +1,20 @@ +package com.sa.zentao.service.impl; + +import com.sa.zentao.entity.ZtCronDevopsUser; +import com.sa.zentao.mapper.ZtCronDevopsUserMapper; +import com.sa.zentao.service.IZtCronDevopsUserService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 服务实现类 + *

+ * + * @author gqb + * @since 2024-10-23 + */ +@Service +public class ZtCronDevopsUserServiceImpl extends ServiceImpl implements IZtCronDevopsUserService { + +} diff --git a/src/main/java/com/sa/zentao/service/impl/ZtEffortServiceImpl.java b/src/main/java/com/sa/zentao/service/impl/ZtEffortServiceImpl.java new file mode 100644 index 0000000..0459002 --- /dev/null +++ b/src/main/java/com/sa/zentao/service/impl/ZtEffortServiceImpl.java @@ -0,0 +1,146 @@ +package com.sa.zentao.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.sa.zentao.conf.RiskUserThreadLocal; +import com.sa.zentao.dao.BusinessException; +import com.sa.zentao.dao.ZtEffortDTO; +import com.sa.zentao.entity.ZtEffort; +import com.sa.zentao.entity.ZtTask; +import com.sa.zentao.mapper.ZtEffortMapper; +import com.sa.zentao.service.IZtEffortService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.sa.zentao.service.IZtTaskService; +import com.sa.zentao.utils.DateUtils; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; + +import java.math.BigDecimal; +import java.util.*; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +/** + *

+ * 服务实现类 + *

+ * + * @author gqb + * @since 2024-08-13 + */ +@Service +public class ZtEffortServiceImpl extends ServiceImpl implements IZtEffortService { + + @Autowired + private IZtTaskService taskService; + + @Override + @Transactional + public void batchAdd(ZtEffortDTO dto) { + ZtTask ztTask = taskService.getById(dto.getObjectid()); + + //getConsumed 已完成 left剩余 + List list = dto.getList(); + list=list.stream().filter(o->(o.getLeft()!=null&&o.getLeft()!=0)||(o.getConsumed()!=null&&o.getConsumed()!=0)).collect(Collectors.toList()); + if(CollectionUtils.isEmpty(list)){ + throw new BusinessException("请检查数据"); + } + if(!CollectionUtils.isEmpty(list.stream().filter(o->(o.getLeft()!=null&&o.getLeft()<0)||(o.getConsumed()!=null&&o.getConsumed()<0)).collect(Collectors.toList()))){ + throw new BusinessException("请填写正确数值"); + } + + List saveList=new ArrayList(); + Float consumed =0f; + for (ZtEffortDTO d:list) { + if(d.getLeft()==0&&d.getConsumed()==0){ + continue; + } + ZtEffort ztEffort = new ZtEffort(); + BeanUtils.copyProperties(d,ztEffort); + ztEffort.setObjecttype("task"); + ztEffort.setObjectid(dto.getObjectid()); + ztEffort.setExecution(dto.getExecution()); + ztEffort.setAccount(RiskUserThreadLocal.get().getName()); + ztEffort.setDeleted("0"); + ztEffort.setProject(ztTask.getProject()); + saveList.add(ztEffort); + consumed=d.getLeft(); + } + if(CollectionUtils.isEmpty(saveList)){ + throw new BusinessException("请检查工时"); + } + //消耗 + List timeList = list.stream().map(o -> o.getConsumed()).collect(Collectors.toList()); + //已经消耗 + Float f=0f; + for (int i=0;itime&&list.get(i).getLeft()!=0) { // 如果当前元素大于最大值,则更新最大值 + max = list.get(i); + } + } + //剩余 + ztTask.setLeft(max.getLeft()); + ztTask.setConsumed(ztTask.getConsumed()+f); + this.saveBatch(saveList); + taskService.updateById(ztTask); + } + + @Override + public void add(ZtEffortDTO dto) { + ZtEffort ztEffort = new ZtEffort(); + BeanUtils.copyProperties(dto,ztEffort); + ztEffort.setId(null); + ztEffort.setObjecttype("task"); + ztEffort.setObjectid(dto.getObjectid()); + ztEffort.setExecution(dto.getExecution()); + ztEffort.setAccount(RiskUserThreadLocal.get().getName()); + ztEffort.setDeleted("0"); + ztEffort.setDate(new Date()); + ztEffort.setLeft(dto.getLeft()); + ztEffort.setConsumed(dto.getConsumed()); + this.baseMapper.insert(ztEffort); + } + + @Override + public Map timeWork(ZtEffortDTO dto) { + String name = RiskUserThreadLocal.get().getName(); + + + Date date = new Date(); + Date sDate = DateUtils.getMonthStartDate(date); + Date startDate=new Date(sDate.getTime()-1000*60); + Date endDate = DateUtils.getMonthEndDate(date); + + + List ztEfforts = this.baseMapper.selectList(new QueryWrapper().lambda().eq(ZtEffort::getAccount, name) + .gt(ZtEffort::getDate, startDate).lt(ZtEffort::getDate, endDate)); + Map map=new HashMap<>(); + int days = DateUtils.getDays(date); + + for (int i=0;i collect = ztEfforts.stream().filter(o -> DateUtils.formatDate(o.getDate(), "yyyy-MM-dd") + .equals(s)).collect(Collectors.toList()); + + + map.put(s,collect.stream().map(o -> o.getConsumed()).reduce(0F, (a, b) -> a + b)+""); + + } + + return map; + } +} diff --git a/src/main/java/com/sa/zentao/service/impl/ZtExecutionprojectServiceImpl.java b/src/main/java/com/sa/zentao/service/impl/ZtExecutionprojectServiceImpl.java new file mode 100644 index 0000000..251d5f4 --- /dev/null +++ b/src/main/java/com/sa/zentao/service/impl/ZtExecutionprojectServiceImpl.java @@ -0,0 +1,20 @@ +package com.sa.zentao.service.impl; + +import com.sa.zentao.entity.ZtExecutionproject; +import com.sa.zentao.mapper.ZtExecutionprojectMapper; +import com.sa.zentao.service.IZtExecutionprojectService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 服务实现类 + *

+ * + * @author gqb + * @since 2024-08-01 + */ +@Service +public class ZtExecutionprojectServiceImpl extends ServiceImpl implements IZtExecutionprojectService { + +} diff --git a/src/main/java/com/sa/zentao/service/impl/ZtKanbanServiceImpl.java b/src/main/java/com/sa/zentao/service/impl/ZtKanbanServiceImpl.java new file mode 100644 index 0000000..ba82fba --- /dev/null +++ b/src/main/java/com/sa/zentao/service/impl/ZtKanbanServiceImpl.java @@ -0,0 +1,20 @@ +package com.sa.zentao.service.impl; + +import com.sa.zentao.entity.ZtKanban; +import com.sa.zentao.mapper.ZtKanbanMapper; +import com.sa.zentao.service.IZtKanbanService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 服务实现类 + *

+ * + * @author gqb + * @since 2024-07-09 + */ +@Service +public class ZtKanbanServiceImpl extends ServiceImpl implements IZtKanbanService { + +} diff --git a/src/main/java/com/sa/zentao/service/impl/ZtKanbancardServiceImpl.java b/src/main/java/com/sa/zentao/service/impl/ZtKanbancardServiceImpl.java new file mode 100644 index 0000000..1daa45e --- /dev/null +++ b/src/main/java/com/sa/zentao/service/impl/ZtKanbancardServiceImpl.java @@ -0,0 +1,20 @@ +package com.sa.zentao.service.impl; + +import com.sa.zentao.entity.ZtKanbancard; +import com.sa.zentao.mapper.ZtKanbancardMapper; +import com.sa.zentao.service.IZtKanbancardService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 服务实现类 + *

+ * + * @author gqb + * @since 2024-07-09 + */ +@Service +public class ZtKanbancardServiceImpl extends ServiceImpl implements IZtKanbancardService { + +} diff --git a/src/main/java/com/sa/zentao/service/impl/ZtKanbancellServiceImpl.java b/src/main/java/com/sa/zentao/service/impl/ZtKanbancellServiceImpl.java new file mode 100644 index 0000000..8e6ff38 --- /dev/null +++ b/src/main/java/com/sa/zentao/service/impl/ZtKanbancellServiceImpl.java @@ -0,0 +1,20 @@ +package com.sa.zentao.service.impl; + +import com.sa.zentao.entity.ZtKanbancell; +import com.sa.zentao.mapper.ZtKanbancellMapper; +import com.sa.zentao.service.IZtKanbancellService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 服务实现类 + *

+ * + * @author gqb + * @since 2024-07-09 + */ +@Service +public class ZtKanbancellServiceImpl extends ServiceImpl implements IZtKanbancellService { + +} diff --git a/src/main/java/com/sa/zentao/service/impl/ZtKanbancolumnServiceImpl.java b/src/main/java/com/sa/zentao/service/impl/ZtKanbancolumnServiceImpl.java new file mode 100644 index 0000000..cafbd33 --- /dev/null +++ b/src/main/java/com/sa/zentao/service/impl/ZtKanbancolumnServiceImpl.java @@ -0,0 +1,44 @@ +package com.sa.zentao.service.impl; + +import com.sa.zentao.dao.ZtKanbancolumnDTO; +import com.sa.zentao.entity.ZtKanbancolumn; +import com.sa.zentao.mapper.ZtKanbancolumnMapper; +import com.sa.zentao.service.IZtKanbancolumnService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + *

+ * 服务实现类 + *

+ * + * @author gqb + * @since 2024-07-09 + */ +@Service +public class ZtKanbancolumnServiceImpl extends ServiceImpl implements IZtKanbancolumnService { + + @Override + public List listByLaneIds(List laneIds) { + List ztKanbancolumnDTOS = this.baseMapper.listByLaneIds(laneIds); + if(!CollectionUtils.isEmpty(ztKanbancolumnDTOS)){ + List ids = ztKanbancolumnDTOS.stream().filter(o -> o.getParent().intValue() != 0 && o.getParent().intValue() != -1).map(o -> o.getParent()).collect(Collectors.toList()); + if(CollectionUtils.isEmpty(ids)){ + return ztKanbancolumnDTOS; + } + List ztKanbancolumns = listByIds(ids); + Map map = ztKanbancolumns.stream().collect(Collectors.toMap(ZtKanbancolumn::getId, o -> o)); + for (ZtKanbancolumnDTO c:ztKanbancolumnDTOS) { + if(c.getParent()!=0&&c.getParent()!=-1){ + c.setParentName(map.get(c.getParent()).getName()); + } + } + } + return ztKanbancolumnDTOS; + } +} diff --git a/src/main/java/com/sa/zentao/service/impl/ZtKanbangroupServiceImpl.java b/src/main/java/com/sa/zentao/service/impl/ZtKanbangroupServiceImpl.java new file mode 100644 index 0000000..2b6777e --- /dev/null +++ b/src/main/java/com/sa/zentao/service/impl/ZtKanbangroupServiceImpl.java @@ -0,0 +1,20 @@ +package com.sa.zentao.service.impl; + +import com.sa.zentao.entity.ZtKanbangroup; +import com.sa.zentao.mapper.ZtKanbangroupMapper; +import com.sa.zentao.service.IZtKanbangroupService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 服务实现类 + *

+ * + * @author gqb + * @since 2024-07-09 + */ +@Service +public class ZtKanbangroupServiceImpl extends ServiceImpl implements IZtKanbangroupService { + +} diff --git a/src/main/java/com/sa/zentao/service/impl/ZtKanbanlaneServiceImpl.java b/src/main/java/com/sa/zentao/service/impl/ZtKanbanlaneServiceImpl.java new file mode 100644 index 0000000..3b6ff35 --- /dev/null +++ b/src/main/java/com/sa/zentao/service/impl/ZtKanbanlaneServiceImpl.java @@ -0,0 +1,307 @@ +package com.sa.zentao.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.sa.zentao.conf.RiskUserThreadLocal; +import com.sa.zentao.dao.Result; +import com.sa.zentao.dao.ZtKanbancolumnDTO; +import com.sa.zentao.dao.ZtKanbanlaneDTO; +import com.sa.zentao.entity.*; +import com.sa.zentao.enums.ActionStatus; +import com.sa.zentao.enums.ActionType; +import com.sa.zentao.mapper.ZtKanbancolumnMapper; +import com.sa.zentao.mapper.ZtKanbanlaneMapper; +import com.sa.zentao.qo.KanbanQo; +import com.sa.zentao.qo.ZtProjectQo; +import com.sa.zentao.service.*; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.sa.zentao.utils.BeanCopyUtil; +import com.sa.zentao.utils.KanBanConstant; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +/** + *

+ * 服务实现类 + *

+ * + * @author gqb + * @since 2024-07-09 + */ +@Service +public class ZtKanbanlaneServiceImpl extends ServiceImpl implements IZtKanbanlaneService { + + @Autowired + private IZtKanbancolumnService kanbancolumnService; + @Autowired + private IZtKanbancellService kanbancellService; + + @Autowired + private IZtStoryService storyService; + @Autowired + private IZtTaskService taskService; + @Autowired + private IZtBugService bugService; + @Autowired + private ZtKanbancolumnMapper kanbancolumnMapper; + + @Autowired + private IZtActionService actionService; + + + + @Override + public List lookInfoByExec(ZtProjectQo qo) { + List list = list(new QueryWrapper() + .lambda().eq(ZtKanbanlane::getExecution, qo.getId())); + + if(CollectionUtils.isEmpty(list)){ + return new ArrayList<>(); + } + List ztKanbanlanes = BeanCopyUtil.copyListProperties(list, ZtKanbanlaneDTO::new); + + + List listColumn =kanbancolumnService.listByLaneIds(ztKanbanlanes.stream().map(o->o.getId()).collect(Collectors.toList())); + for (ZtKanbanlaneDTO dto:ztKanbanlanes) { + List collect = listColumn.stream().filter(o -> o.getLane().intValue() == dto.getId().intValue()).collect(Collectors.toList()); + for (ZtKanbancolumnDTO d:collect) { + String s = KanBanConstant.columnTypeMap.get(dto.getType() + "-" + d.getType()); + d.setSame(s); + String cards = d.getCards(); + if(!StringUtils.isEmpty(cards)){ + List ids = (List)CollectionUtils.arrayToList(cards.split(",")).stream().filter(o -> !StringUtils.isEmpty(String.valueOf(o))).collect(Collectors.toList()); + if("story".equalsIgnoreCase(d.getCardType())){ + List ztStories = this.storyService.listByIds(ids); + d.setList(ztStories); + }else if("bug".equalsIgnoreCase(d.getCardType())){ + List ztBugs = bugService.listByIds(ids); + d.setList(ztBugs); + }else if("task".equalsIgnoreCase(d.getCardType())){ + List ztTasks = taskService.listByIds(ids); + d.setList(ztTasks); + } + } + } + dto.setList(collect); + } + return ztKanbanlanes; + } + + @Override + public void changeStatus(KanbanQo qo) { + + Integer id = qo.getId(); + + String tabType = qo.getTabType(); + + String statusType = qo.getStatusType(); + + Integer fromId = qo.getFromId(); + ZtKanbancell fromkanbancell = this.kanbancellService.getOne(new QueryWrapper().lambda() + .eq(ZtKanbancell::getColumn, fromId)); + + List carIds = new ArrayList<>(Arrays.asList(fromkanbancell.getCards().split(","))); + carIds.remove(qo.getId().toString()); + + + fromkanbancell.setCards(StringUtils.join(carIds,",")); + + + + this.kanbancellService.updateById(fromkanbancell); + + Integer toId = qo.getToId(); + ZtKanbancell tokanbancell = this.kanbancellService.getOne(new QueryWrapper().lambda() + .eq(ZtKanbancell::getColumn, toId)); + if(StringUtils.isEmpty(tokanbancell.getCards())){ + tokanbancell.setCards(qo.getId().toString()); + }else{ + carIds = new ArrayList<>(Arrays.asList(tokanbancell.getCards().split(","))); + carIds.add(qo.getId().toString()); + tokanbancell.setCards(StringUtils.join(carIds,",")); + } + + this.kanbancellService.updateById(tokanbancell); + + ActionType type= null; + if("story".equalsIgnoreCase(tabType)){ + type=ActionType.XQ; + //需求 +// storyChange(qo); + + //testing 测试中 + } + if("bug".equalsIgnoreCase(tabType)){ + type=ActionType.BUG; + //bug +// bugChange(qo); + //active 已确认 confirmetd =1 + + //resolved 完成 + + //closed 关闭 + + } + if("task".equalsIgnoreCase(tabType)){ + type=ActionType.RW; + //task +// taskChange(qo); + + // 任务开始 story developing task doing + //任务完成 story developed task done + //任务回退 story developing task doing + + //完成有新任务回退到进行中 + + // +// if("canceled".equalsIgnoreCase(statusType)){ +// //取消 +// } + + } + + +// ActionStatus status=null; +// +// +// this.actionService.addAction(type,status, +// qo.getId(),null,null,null, +// RiskUserThreadLocal.get().getName(),qo.get +// ); + + } + + @Override + public void changeStatus(Integer execId, Integer bussId, String type, String toStatus) { + //执行id bussId :业务id type story bug task toStatus:toStatus + List ztKanbanlaneList = this.baseMapper.getZtKanbanlaneList(type,execId.toString()); + ZtKanbancell thisZtKanbancell=null; + for (ZtKanbancell cell:ztKanbanlaneList) { + if(StringUtils.isEmpty(cell.getCards())){ + continue; + } + + List carIds = new ArrayList<>(Arrays.asList(cell.getCards().split(","))); + if(carIds.contains(bussId.toString())){ + thisZtKanbancell=cell; + continue; + } + } + + List carIds = new ArrayList<>(Arrays.asList(thisZtKanbancell.getCards().split(","))); + carIds.remove(bussId.toString()); + + if(CollectionUtils.isEmpty(carIds)){ + thisZtKanbancell.setCards(""); + + }else{ + thisZtKanbancell.setCards(StringUtils.join(carIds,",")); + + } + this.kanbancellService.updateById(thisZtKanbancell); + + ZtKanbancell ztKanbanlane = this.baseMapper.getZtKanbanlane(type, toStatus, execId); + String cards = ztKanbanlane.getCards(); + List l=StringUtils.isEmpty(cards)?new ArrayList<>():new ArrayList<>(Arrays.asList(cards.split(","))); + l.add(bussId.toString()); + ztKanbanlane.setCards(StringUtils.join(l,",")); + this.kanbancellService.updateById(ztKanbanlane); + } + + @Override + public void addStory(Integer id, List ztStories) { + ZtKanbanlane lane = this.baseMapper.selectOne(new QueryWrapper().lambda() + .eq(ZtKanbanlane::getExecution, id).eq(ZtKanbanlane::getType, "story")); + + List ztKanbancolumnDTOS = this.kanbancolumnMapper.listByLaneIds(Arrays.asList(lane.getId())); + + List backlog = ztKanbancolumnDTOS.stream().filter(o -> o.getType().equals("backlog")).collect(Collectors.toList()); + ZtKanbancolumnDTO ztKanbancolumnDTO = backlog.get(0); + + ZtKanbancell kanbancell = this.kanbancellService.getOne(new QueryWrapper().lambda() + .eq(ZtKanbancell::getKanban, id).eq(ZtKanbancell::getColumn, ztKanbancolumnDTO.getId())); + + if(StringUtils.isEmpty(kanbancell.getCards())){ + kanbancell.setCards(StringUtils.join(ztStories.stream().map(o->o.getId()).collect(Collectors.toList()),",")); + }else{ + kanbancell.setCards(kanbancell.getCards()+","+StringUtils.join(ztStories.stream().map(o->o.getId()).collect(Collectors.toList()),",")); + } + + kanbancellService.updateById(kanbancell); + + } + + @Override + public void addTask(Integer id, List asList) { + ZtKanbanlane lane = this.baseMapper.selectOne(new QueryWrapper().lambda() + .eq(ZtKanbanlane::getExecution, id).eq(ZtKanbanlane::getType, "task")); + + List ztKanbancolumnDTOS = this.kanbancolumnMapper.listByLaneIds(Arrays.asList(lane.getId())); + + List backlog = ztKanbancolumnDTOS.stream().filter(o -> o.getType().equals("wait")) + .collect(Collectors.toList()); + ZtKanbancolumnDTO ztKanbancolumnDTO = backlog.get(0); + + ZtKanbancell kanbancell = this.kanbancellService.getOne(new QueryWrapper().lambda() + .eq(ZtKanbancell::getKanban, id).eq(ZtKanbancell::getColumn, ztKanbancolumnDTO.getId())); + if(StringUtils.isEmpty(kanbancell.getCards())){ + kanbancell.setCards(StringUtils.join(asList.stream().map(o->o.getId()).collect(Collectors.toList()),",")); + }else{ + kanbancell.setCards(kanbancell.getCards()+","+StringUtils.join(asList.stream().map(o->o.getId()).collect(Collectors.toList()),",")); + } + kanbancellService.updateById(kanbancell); + } + @Override + public void addBug(Integer id, List asList) { + ZtKanbanlane lane = this.baseMapper.selectOne(new QueryWrapper().lambda() + .eq(ZtKanbanlane::getExecution, id).eq(ZtKanbanlane::getType, "bug")); + + List ztKanbancolumnDTOS = this.kanbancolumnMapper.listByLaneIds(Arrays.asList(lane.getId())); + + List backlog = ztKanbancolumnDTOS.stream().filter(o -> o.getType().equals("unconfirmed")).collect(Collectors.toList()); + ZtKanbancolumnDTO ztKanbancolumnDTO = backlog.get(0); + + ZtKanbancell kanbancell = this.kanbancellService.getOne(new QueryWrapper().lambda() + .eq(ZtKanbancell::getKanban, id).eq(ZtKanbancell::getColumn, ztKanbancolumnDTO.getId())); + + if(StringUtils.isEmpty(kanbancell.getCards())){ + kanbancell.setCards(StringUtils.join(asList.stream().map(o->o.getId()).collect(Collectors.toList()),",")); + }else{ + kanbancell.setCards(kanbancell.getCards()+","+StringUtils.join(asList.stream().map(o->o.getId()).collect(Collectors.toList()),",")); + } + kanbancellService.updateById(kanbancell); + } + + /** + * + * @param type bug task story + * @param status + * @param id + * @return + */ + @Override + public ZtKanbancell getZtKanbanlane(String type, String status, Integer id) { + return this.baseMapper.getZtKanbanlane(type,status,id); + } + + private void taskChange(KanbanQo qo) { + ZtTask ztTask = this.taskService.getById(qo.getId()); + ztTask.setStatus(qo.getStatusType()); + this.taskService.updateById(ztTask); + } + + private void bugChange(KanbanQo qo) { + + } + + private void storyChange(KanbanQo qo) { + + + } +} diff --git a/src/main/java/com/sa/zentao/service/impl/ZtKanbanregionServiceImpl.java b/src/main/java/com/sa/zentao/service/impl/ZtKanbanregionServiceImpl.java new file mode 100644 index 0000000..c41b3fc --- /dev/null +++ b/src/main/java/com/sa/zentao/service/impl/ZtKanbanregionServiceImpl.java @@ -0,0 +1,20 @@ +package com.sa.zentao.service.impl; + +import com.sa.zentao.entity.ZtKanbanregion; +import com.sa.zentao.mapper.ZtKanbanregionMapper; +import com.sa.zentao.service.IZtKanbanregionService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 服务实现类 + *

+ * + * @author gqb + * @since 2024-07-09 + */ +@Service +public class ZtKanbanregionServiceImpl extends ServiceImpl implements IZtKanbanregionService { + +} diff --git a/src/main/java/com/sa/zentao/service/impl/ZtKanbanspaceServiceImpl.java b/src/main/java/com/sa/zentao/service/impl/ZtKanbanspaceServiceImpl.java new file mode 100644 index 0000000..c99965e --- /dev/null +++ b/src/main/java/com/sa/zentao/service/impl/ZtKanbanspaceServiceImpl.java @@ -0,0 +1,20 @@ +package com.sa.zentao.service.impl; + +import com.sa.zentao.entity.ZtKanbanspace; +import com.sa.zentao.mapper.ZtKanbanspaceMapper; +import com.sa.zentao.service.IZtKanbanspaceService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 服务实现类 + *

+ * + * @author gqb + * @since 2024-07-09 + */ +@Service +public class ZtKanbanspaceServiceImpl extends ServiceImpl implements IZtKanbanspaceService { + +} diff --git a/src/main/java/com/sa/zentao/service/impl/ZtModuleServiceImpl.java b/src/main/java/com/sa/zentao/service/impl/ZtModuleServiceImpl.java new file mode 100644 index 0000000..514fd6b --- /dev/null +++ b/src/main/java/com/sa/zentao/service/impl/ZtModuleServiceImpl.java @@ -0,0 +1,69 @@ +package com.sa.zentao.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.sa.zentao.dao.ZtModuleDTO; +import com.sa.zentao.entity.ZtModule; +import com.sa.zentao.entity.ZtStory; +import com.sa.zentao.mapper.ZtModuleMapper; +import com.sa.zentao.qo.ZtModuleQo; +import com.sa.zentao.service.IZtModuleService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.sa.zentao.service.IZtStoryService; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +/** + *

+ * 服务实现类 + *

+ * + * @author gqb + * @since 2024-08-05 + */ +@Service +public class ZtModuleServiceImpl extends ServiceImpl implements IZtModuleService { + + @Autowired + private IZtStoryService storyService; + + + @Override + public void modifyModule(ZtModuleDTO dto) { + + List list = dto.getList(); + List saveList=new ArrayList<>(); + for (ZtModuleDTO d:list) { + if(StringUtils.isEmpty(d.getName())){ + continue; + } + ZtModule ztModule = new ZtModule(); + BeanUtils.copyProperties(d,ztModule); + saveList.add(ztModule); + } + this.saveOrUpdateBatch(saveList); + } + + @Override + public List getModuleByStoryId(ZtModuleQo qo) { + ZtStory story = storyService.getById(qo.getId()); + + Integer rootId=null; + String type=null; + if(story.getProduct()!=null&&story.getProduct()!=0){ + rootId = story.getProduct(); + type="story"; + }else{ + rootId = story.getProject(); + type="project-story"; + } + List list = list(new QueryWrapper().lambda().eq(ZtModule::getRoot, rootId) + .eq(ZtModule::getType, type) + ); + return list; + } +} diff --git a/src/main/java/com/sa/zentao/service/impl/ZtProductServiceImpl.java b/src/main/java/com/sa/zentao/service/impl/ZtProductServiceImpl.java new file mode 100644 index 0000000..484fc31 --- /dev/null +++ b/src/main/java/com/sa/zentao/service/impl/ZtProductServiceImpl.java @@ -0,0 +1,326 @@ +package com.sa.zentao.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.github.pagehelper.Page; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.sa.zentao.conf.RiskUserThreadLocal; +import com.sa.zentao.dao.BusinessException; +import com.sa.zentao.dao.ZtProductDTO; +import com.sa.zentao.dao.ZtProjectDTO; +import com.sa.zentao.entity.ZtProduct; +import com.sa.zentao.entity.ZtProject; +import com.sa.zentao.entity.ZtProjectproduct; +import com.sa.zentao.entity.ZtUser; +import com.sa.zentao.enums.ActionStatus; +import com.sa.zentao.enums.ActionType; +import com.sa.zentao.enums.ProductStoryStatus; +import com.sa.zentao.mapper.ZtProductMapper; +import com.sa.zentao.mapper.ZtProjectMapper; +import com.sa.zentao.qo.ZtProjectQo; +import com.sa.zentao.service.IZtActionService; +import com.sa.zentao.service.IZtProductService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.sa.zentao.service.IZtProjectService; +import com.sa.zentao.service.IZtUserService; +import com.sa.zentao.utils.BeanCopyUtil; +import com.sa.zentao.utils.BeanCopyUtilCallBack; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + +import java.lang.reflect.Array; +import java.util.*; +import java.util.stream.Collectors; + +/** + *

+ * 服务实现类 + *

+ * + * @author gqb + * @since 2024-06-13 + */ +@Service +public class ZtProductServiceImpl extends ServiceImpl implements IZtProductService { + + @Autowired + private ZtProjectMapper projectMapper; + + @Autowired + private IZtProjectService ztProjectService; + + + @Autowired + private IZtActionService actionService; + + @Autowired + private IZtUserService userService; + + + @Override + public PageInfo pageList(ZtProjectQo qo) { + Page page = PageHelper.startPage(qo.getCurrentPage(), qo.getPageSize()); + List result = this.projectMapper.groupPageList(qo); + if(!CollectionUtils.isEmpty(result)){ + + Map> m= getChildrenMap(result); + + + + for (ZtProjectDTO d:result) { + + d.setChildren( m.get(d.getId())); + //前端渲染id不可以重复 + d.setId(1000000000+d.getId()); + } + } + + + return new PageInfo(result); + } + + @Override + public void addProduct(ZtProductDTO dto) { + ZtProduct ztProduct = new ZtProduct(); + + BeanUtils.copyProperties(dto,ztProduct); + ztProduct.setShadow(false); + ztProduct.setStatus("normal"); + if(!CollectionUtils.isEmpty(dto.getApprovalList())){ + ztProduct.setReviewer(StringUtils.join(dto.getApprovalList(),",")); + } + + ztProduct.setCreatedBy(RiskUserThreadLocal.get().getName()); + ztProduct.setCreatedDate(new Date()); + ztProduct.setCreatedVersion("18.9"); + if(!CollectionUtils.isEmpty(dto.getAuthList())){ + ztProduct.setWhitelist(","+StringUtils.join(dto.getAuthList(),",")); + } + this.baseMapper.insert(ztProduct); + actionService.addAction(ActionType.CP, ActionStatus.XJ,ztProduct.getId(),ztProduct.getId()+"",null,null,RiskUserThreadLocal.get().getName(),dto.getDesc(),null); + + } + + + @Override + public PageInfo productPageList(ZtProjectQo qo) { + List integers = ztProjectService.authList(); + if(CollectionUtils.isEmpty(integers)){ + return new PageInfo(); + } + qo.setProjectIds(integers); + Page page = PageHelper.startPage(qo.getCurrentPage(), qo.getPageSize()).doSelectPage(() ->this.baseMapper.productPageList(qo)); + + List result = page.getResult(); + + + + + + + + if(!CollectionUtils.isEmpty(result)){ + List programIds = result.stream().map(ZtProductDTO::getProgram).collect(Collectors.toList()); + + List ztProjects = this.projectMapper.selectBatchIds(programIds); + List ztProjectDTOS = BeanCopyUtil.copyListProperties(ztProjects, ZtProjectDTO::new); + ztProjectDTOS=ztProjectDTOS.stream().filter(o->o.getStatus().equals("doing")).collect(Collectors.toList()); + List userList = ztProjectDTOS.stream().map(o -> o.getPm()).collect(Collectors.toList()); + userList.addAll(result.stream().filter(o->!StringUtils.isEmpty(o.getPo())).map(o->o.getPo()).collect(Collectors.toList())); + Map userMap = this.userService.userMapByIds(userList); + for (ZtProductDTO p:result ) { + if(!StringUtils.isEmpty(p.getPo())){ + ZtUser ztUser = userMap.get(p.getPo()); + if(ztUser!=null){ + p.setPoValue(ztUser.getNickname()); + } + } + + } + for (ZtProjectDTO d:ztProjectDTOS) { + d.setChildren(result.stream().filter(o->o.getProgram()==d.getId()).collect(Collectors.toList())); + d.setId(100000000+d.getId()); + if(!StringUtils.isEmpty(d.getPm())){ + ZtUser ztUser = userMap.get(d.getPm()); + if(ztUser!=null){ + d.setPoValue(ztUser.getNickname()); + } + } + + if(!CollectionUtils.isEmpty(d.getChildren())){ +// d.setHasChildren(true); + } + + } + PageInfo ztProjectDTOPageInfo = new PageInfo<>(ztProjectDTOS); + ztProjectDTOPageInfo.setTotal(page.getTotal()); + return ztProjectDTOPageInfo; + } + + + return new PageInfo(); + } + + @Override + public List productList(ZtProjectQo qo) { + List ztProducts = this.baseMapper.selectList(new QueryWrapper() + .lambda().eq(ZtProduct::getDeleted,"0") + .notIn(ZtProduct::getStatus, Arrays.asList("closed")) + ); + if(CollectionUtils.isEmpty(ztProducts)){ + return new ArrayList<>(); + }else{ + List ztProductDTOS = BeanCopyUtil.copyListProperties(ztProducts, ZtProductDTO::new); + + for (ZtProductDTO p:ztProductDTOS) { + ZtProject ztProject = this.projectMapper.selectById(p.getProgram()); + + p.setName(ztProject.getName()+"/"+p.getName()); + } + return ztProductDTOS; + } + + } + + @Override + public List productListByProductId(ZtProjectQo qo) { + Integer productId = qo.getProductId(); + ZtProduct ztProduct = this.baseMapper.selectById(productId); + List ztProducts = this.baseMapper.selectList(new QueryWrapper() + .lambda().eq(ZtProduct::getProgram, ztProduct.getProgram())); + + if(CollectionUtils.isEmpty(ztProducts)){ + return new ArrayList<>(); + }else{ + return BeanCopyUtil.copyListProperties(ztProducts,ZtProductDTO::new); + } + } + + @Override + public void modifyProduct(ZtProductDTO dto) { + ZtProduct ztProduct = new ZtProduct(); + BeanUtils.copyProperties(dto,ztProduct); + if(!CollectionUtils.isEmpty(dto.getAuthList())){ + ztProduct.setWhitelist(","+StringUtils.join(dto.getAuthList(),",")); + } + if(dto.getAcl()=="open"){ + ztProduct.setWhitelist(""); + } + if(!CollectionUtils.isEmpty(dto.getApprovalList())){ + ztProduct.setReviewer(StringUtils.join(dto.getApprovalList(),",")); + } + this.baseMapper.updateById(ztProduct); + actionService.addAction(ActionType.CP, ActionStatus.BJ,ztProduct.getId(),ztProduct.getId()+"",null,null,RiskUserThreadLocal.get().getName(),dto.getDesc(),null); + + } + + @Override + public void productClose(ZtProductDTO dto) { + ZtProduct ztProduct = this.baseMapper.selectById(dto.getId()); + if(ztProduct==null){ + throw new BusinessException("未查询到"); + } + ztProduct.setStatus("closed"); + this.baseMapper.updateById(ztProduct); + ActionType type=null; + String product=null; + Integer project=null; + Integer exection=null; + type=ActionType.CP; + product=ztProduct.getId()+""; + + actionService.addAction(type, ActionStatus.GB,ztProduct.getId(),product,project,exection,RiskUserThreadLocal.get().getName(),dto.getDesc(),null); + + } + + @Override + public void productDeleted(ZtProductDTO dto) { + ZtProduct ztProduct = this.baseMapper.selectById(dto.getId()); + if(ztProduct==null){ + throw new BusinessException("未查询到"); + } + ztProduct.setDeleted("1"); + this.baseMapper.updateById(ztProduct); + ActionType type=null; + String product=null; + Integer project=null; + Integer exection=null; + type=ActionType.CP; + product=ztProduct.getId()+""; + + actionService.addAction(type, ActionStatus.SC,ztProduct.getId(),product,project,exection,RiskUserThreadLocal.get().getName(),dto.getDesc(),null); + + } + + @Override + public void productChangeStatus(Integer pId, ProductStoryStatus oldStatus, ProductStoryStatus newStatus) { + ZtProduct ztProduct = this.baseMapper.selectById(pId); + + if(oldStatus!=null){ + if(newStatus==ProductStoryStatus.CG){ + ztProduct.setDraftStories(ztProduct.getDraftStories()-1); + } + if(newStatus==ProductStoryStatus.JH){ + ztProduct.setActiveStories(ztProduct.getActiveStories()-1); + } + if(newStatus==ProductStoryStatus.BG){ + ztProduct.setChangingStories(ztProduct.getChangingStories()-1); + } + if(newStatus==ProductStoryStatus.PS){ + ztProduct.setReviewingStories(ztProduct.getReviewingStories()-1); + } + if(newStatus==ProductStoryStatus.WC){ + ztProduct.setFinishedStories(ztProduct.getFinishedStories()-1); + } + if(newStatus==ProductStoryStatus.GB){ + ztProduct.setClosedStories(ztProduct.getChangingStories()-1); + } + + } + + if(newStatus==ProductStoryStatus.CG){ + ztProduct.setDraftStories(ztProduct.getDraftStories()+1); + } + if(newStatus==ProductStoryStatus.JH){ + ztProduct.setActiveStories(ztProduct.getActiveStories()+1); + } + if(newStatus==ProductStoryStatus.BG){ + ztProduct.setChangingStories(ztProduct.getChangingStories()+1); + } + if(newStatus==ProductStoryStatus.PS){ + ztProduct.setReviewingStories(ztProduct.getReviewingStories()+1); + } + if(newStatus==ProductStoryStatus.WC){ + ztProduct.setFinishedStories(ztProduct.getFinishedStories()+1); + } + if(newStatus==ProductStoryStatus.GB){ + ztProduct.setClosedStories(ztProduct.getChangingStories()+1); + } + if(newStatus==ProductStoryStatus.GB){ + ztProduct.setClosedStories(ztProduct.getChangingStories()+1); + } + this.baseMapper.updateById(ztProduct); + } + + private Map> getChildrenMap(List result) { + + List ztProjects = this.baseMapper.selectList( + new QueryWrapper().lambda().in(ZtProduct::getProgram, + result.stream().map(o -> o.getId()).collect(Collectors.toList()))); + if(CollectionUtils.isEmpty(ztProjects)){ + return new HashMap<>(); + } + List ztProjectDTOS = BeanCopyUtil.copyListProperties(ztProjects, ZtProductDTO::new,new BeanCopyUtilCallBack(){ + + @Override + public void callBack(ZtProduct t, ZtProductDTO s) { + s.setPm(t.getPo()); + } + }); + + return ztProjectDTOS.stream().collect(Collectors.groupingBy(ZtProductDTO::getProgram)); + } +} diff --git a/src/main/java/com/sa/zentao/service/impl/ZtProjectServiceImpl.java b/src/main/java/com/sa/zentao/service/impl/ZtProjectServiceImpl.java new file mode 100644 index 0000000..d28b766 --- /dev/null +++ b/src/main/java/com/sa/zentao/service/impl/ZtProjectServiceImpl.java @@ -0,0 +1,1658 @@ +package com.sa.zentao.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.github.pagehelper.Page; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.sa.zentao.conf.RiskUserThreadLocal; +import com.sa.zentao.dao.BusinessException; +import com.sa.zentao.dao.ZtProjectDTO; +import com.sa.zentao.dao.ZtStoryDTO; +import com.sa.zentao.entity.*; +import com.sa.zentao.enums.ActionStatus; +import com.sa.zentao.enums.ActionType; +import com.sa.zentao.enums.UserType; +import com.sa.zentao.mapper.ZtProjectMapper; +import com.sa.zentao.qo.ZtProjectQo; +import com.sa.zentao.service.*; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.sa.zentao.utils.BeanCopyUtil; +import com.sa.zentao.utils.DateUtils; +import com.sa.zentao.utils.KanBanConstant; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; + +import java.math.BigDecimal; +import java.util.*; +import java.util.stream.Collectors; +import java.util.stream.DoubleStream; + +/** + *

+ * 服务实现类 + *

+ * + * @author gqb + * @since 2024-06-13 + */ +@Service +public class ZtProjectServiceImpl extends ServiceImpl implements IZtProjectService { + + + @Autowired + private IZtProjectproductService projectproductService; + + @Autowired + private IZtActionService actionService; + + @Autowired + private IZtStoryService storyService; + + @Autowired + private IZtProjectstoryService projectstoryService; + + @Autowired + private IZtTaskService taskService; + + + @Autowired + private IZtTeamService teamService; + + @Autowired + private IZtKanbanlaneService kanbanlaneService; + + @Autowired + private IZtKanbancolumnService kanbancolumnService; + + @Autowired + private IZtKanbancellService kanbancellService; + + @Autowired + private IZtExecutionprojectService executionprojectService; + + @Autowired + private IZtProductService productService; + + @Autowired + private IZtUserService userService; + + @Autowired + private IZtBugService bugService; + + List pLis=new ArrayList<>(){{ + add("develop"); + add("test"); + add("resolving"); + }}; + + + + @Override + @Transactional + public void addProject(ZtProjectDTO dto) { + + ZtProject ztProject = new ZtProject(); + BeanUtils.copyProperties(dto,ztProject); + ztProject.setFirstEnd(ztProject.getEnd()); + ztProject.setRealBegan(ztProject.getBegin()); + ztProject.setDays(DateUtils.getbetweenDays(ztProject.getBegin(),ztProject.getEnd())); + ztProject.setStatus("wait"); + ztProject.setPri("1"); + ztProject.setType(dto.getType()); + ztProject.setVersion(0); + ztProject.setParentVersion(0); + ztProject.setPlanDuration(0); + ztProject.setRealDuration(0); + ztProject.setProgress(new BigDecimal(66)); + ztProject.setEstimate(0f); +// ztProject.setTeamCount(); + ztProject.setMarket(0); + + ztProject.setOpenedBy(RiskUserThreadLocal.get().getName()); + ztProject.setOpenedDate(new Date()); + ztProject.setPm(dto.getPm()); + + + + Integer exection=null; + ActionType type=null; + + if(!CollectionUtils.isEmpty(dto.getAuthList())){ + ztProject.setWhitelist(","+StringUtils.join(dto.getAuthList(),",")); + } + + if("sprint".equalsIgnoreCase(ztProject.getType())){ + exection=ztProject.getId(); + type=ActionType.ZX; + ztProject.setParent(dto.getProject()); + } + + this.baseMapper.insert(ztProject); + if(ztProject.getParent()==null||ztProject.getParent()==0){ + ztProject.setPath(String.format(",%d,",ztProject.getId())); + ztProject.setGrade(1); + ztProject.setLeft(0f); + ztProject.setConsumed(0f); + ztProject.setOrder(0); + ztProject.setParent(0); + }else{ + ZtProject pProject = this.baseMapper.selectById(ztProject.getParent()); + + ztProject.setPath(pProject.getPath()+""+String.format("%d,",ztProject.getId())); + ztProject.setGrade(pProject.getGrade()+1); + ztProject.setLeft(2f); + ztProject.setConsumed(4f); + ztProject.setOrder(pProject.getOrder()+5); + } + this.baseMapper.updateById(ztProject); + + if("program".equalsIgnoreCase(ztProject.getType())){ + type=ActionType.XMJ; + } + String product =null; + Integer project=null; + if("project".equalsIgnoreCase(ztProject.getType())||"sprint".equalsIgnoreCase(ztProject.getType())){ + if(!CollectionUtils.isEmpty(dto.getProductIds())){ + List productIds = dto.getProductIds(); + for (Integer i :productIds) { + ZtProjectproduct p=new ZtProjectproduct(); + p.setProject(ztProject.getId()); + p.setProduct(i); + projectproductService.save(p); + product=p.getProduct()+""; + } + } + type=ActionType.XM; + project=ztProject.getId(); + + + //执行 要加看板 + if("sprint".equalsIgnoreCase(ztProject.getType())){ + //执行手动加 关联产品 + List projectList = dto.getProjectList(); + List saveList=new ArrayList(); + for (Integer pId :projectList) { + ZtExecutionproject p=new ZtExecutionproject(); + p.setExecution(ztProject.getId()); + p.setProject(pId); + saveList.add(p); + } + this.executionprojectService.saveBatch(saveList); +// ZtProjectproduct projectproduct = this.projectproductService.getOne(new QueryWrapper().lambda() +// .eq(ZtProjectproduct::getProject, ztProject.getParent())); + +// ZtProjectproduct p=new ZtProjectproduct(); +// p.setProject(ztProject.getId()); +// p.setProduct(projectproduct.getProduct()); +// this.projectproductService.save(p); + // addKanbanLane 执行 三行 + //addColumn 几十列 + int index=5; + + + for (int i=0;i< 3;i++) { + List list = KanBanConstant.LANEMAP.get(i); + ZtKanbanlane ztKanbanlane = new ZtKanbanlane(); + ztKanbanlane.setExecution(ztProject.getId()); + ztKanbanlane.setType(list.get(0)); + ztKanbanlane.setName(list.get(1)); + ztKanbanlane.setOrder(index); + kanbanlaneService.save(ztKanbanlane); + index+=5; + + Map cMap = KanBanConstant.columnMap.get(i); + + int pIndex=0; + int pId=0; + for (Map.Entry e :cMap.entrySet()) { + String key = e.getKey(); + String value = e.getValue(); + + if(pLis.contains(key)){ + ZtKanbancolumn ztKanbancolumn = new ZtKanbancolumn(); + ztKanbancolumn.setParent(-1); + ztKanbancolumn.setType(key); + ztKanbancolumn.setName(value); + kanbancolumnService.save(ztKanbancolumn); + pIndex=2; + pId=ztKanbancolumn.getId(); + }else{ + + ZtKanbancolumn ztKanbancolumn = new ZtKanbancolumn(); + ztKanbancolumn.setParent(pId); + ztKanbancolumn.setType(key); + ztKanbancolumn.setName(value); + kanbancolumnService.save(ztKanbancolumn); + if(pIndex!=0){ + pIndex=pIndex-1; + if(pIndex==0){ + pId=0; + } + } + ZtKanbancell cell=new ZtKanbancell(); + cell.setKanban(ztProject.getId()); + cell.setLane(ztKanbanlane.getId()); + cell.setColumn(ztKanbancolumn.getId()); + cell.setType(ztKanbanlane.getType()); + kanbancellService.save(cell); + + } + } + } + } + } + addTeam(dto,ztProject); + + + //添加action + actionService.addAction(type,ActionStatus.XJ,ztProject.getId(),product,project,exection,RiskUserThreadLocal.get().getName(),null,null); + } + + private void addTeam(ZtProjectDTO dto, ZtProject ztProject) { + if("project".equalsIgnoreCase(dto.getType())){ + if(StringUtils.isEmpty(dto.getPm())){ + return; + } + ZtTeam ztTeam = new ZtTeam(); + ztTeam.setRoot(ztProject.getId()); + ztTeam.setAccount(ztProject.getPm()); + ztTeam.setLimited("no"); + ztTeam.setJoin(new Date()); + ztTeam.setDays(ztProject.getDays()); + ztTeam.setType("project"); + this.teamService.save(ztTeam); + } + if("sprint".equalsIgnoreCase(dto.getType())){ + if(CollectionUtils.isEmpty(dto.getTeamList())){ + return; + } + for (String user:(List )dto.getTeamList()) { + ZtTeam ztTeam = new ZtTeam(); + ztTeam.setRoot(ztProject.getId()); + ztTeam.setAccount(user); + ztTeam.setLimited("no"); + ztTeam.setJoin(new Date()); + ztTeam.setDays(ztProject.getDays()); + ztTeam.setType("execution"); + this.teamService.save(ztTeam); + } + + + } + } + + @Override + @Transactional + public void projectClose(ZtProjectDTO dto) { + + ZtProject ztProject = this.baseMapper.selectById(dto.getId()); + if(ztProject==null||"closed".equalsIgnoreCase(ztProject.getStatus())){ + throw new BusinessException("未查询到"); + } + ztProject.setRealEnd(dto.getClosedDate()); + ztProject.setLastEditedDate(new Date()); + ztProject.setStatus("closed"); + ztProject.setLastEditedBy(RiskUserThreadLocal.get().getName()); + this.baseMapper.updateById(ztProject); + ActionType type=null; + String product=null; + Integer project=null; + Integer exection=null; + if("program".equalsIgnoreCase(ztProject.getType())){ + type=ActionType.XMJ; + }else if("project".equalsIgnoreCase(ztProject.getType())){ + type=ActionType.XM; + ZtProjectproduct projectproduct = this.projectproductService.getOne(new QueryWrapper().lambda().eq(ZtProjectproduct::getProject, ztProject.getId())); + if(projectproduct!=null){ + product=projectproduct.getProduct()+""; + project=projectproduct.getProject(); + } + + }else if("execution".equalsIgnoreCase(ztProject.getType())){ + type=ActionType.ZX; + project=ztProject.getProject(); + exection=ztProject.getId(); + } + + actionService.addAction(type,ActionStatus.GB,ztProject.getId(),product,project,exection,RiskUserThreadLocal.get().getName(),dto.getDesc(),null); + + } + + + @Override + public void projectStart(ZtProjectDTO dto) { + ZtProject ztProject = this.baseMapper.selectById(dto.getId()); + if(ztProject==null||!"wait".equalsIgnoreCase(ztProject.getStatus())){ + throw new BusinessException("未查询到"); + } + ztProject.setStatus("doing"); + ztProject.setLastEditedBy(RiskUserThreadLocal.get().getName()); + this.baseMapper.updateById(ztProject); + ActionType type=null; + String product=null; + Integer project=null; + Integer exection=null; + if("program".equalsIgnoreCase(ztProject.getType())){ + type=ActionType.XMJ; + }else if("project".equalsIgnoreCase(ztProject.getType())){ + type=ActionType.XM; + ZtProjectproduct projectproduct = this.projectproductService.getOne(new QueryWrapper().lambda().eq(ZtProjectproduct::getProject, ztProject.getId())); + if(projectproduct!=null){ + product=projectproduct.getProduct()+""; + project=projectproduct.getProject(); + } + + }else if("execution".equalsIgnoreCase(ztProject.getType())){ + type=ActionType.ZX; + project=ztProject.getProject(); + exection=ztProject.getId(); + } + + actionService.addAction(type,ActionStatus.KS,ztProject.getId(),product,project,exection,RiskUserThreadLocal.get().getName(),dto.getDesc(),null); + + } + + @Override + public void projectDeleted(ZtProjectDTO dto) { + ZtProject ztProject = this.baseMapper.selectById(dto.getId()); + if(ztProject==null||"1".equalsIgnoreCase(ztProject.getDeleted())){ + throw new BusinessException("未查询到"); + } + ztProject.setDeleted("1"); + ztProject.setLastEditedBy(RiskUserThreadLocal.get().getName()); + ztProject.setLastEditedDate(new Date()); + this.baseMapper.updateById(ztProject); + ActionType type=null; + String product=null; + Integer project=null; + Integer exection=null; + if("program".equalsIgnoreCase(ztProject.getType())){ + type=ActionType.XMJ; + }else if("project".equalsIgnoreCase(ztProject.getType())){ + type=ActionType.XM; + ZtProjectproduct projectproduct = this.projectproductService.getOne(new QueryWrapper().lambda().eq(ZtProjectproduct::getProject, ztProject.getId())); + if(projectproduct!=null){ + product=projectproduct.getProduct()+""; + project=projectproduct.getProject(); + } + + }else if("execution".equalsIgnoreCase(ztProject.getType())){ + type=ActionType.ZX; + project=ztProject.getProject(); + exection=ztProject.getId(); + } + + actionService.addAction(type,ActionStatus.SC,ztProject.getId(),product,project,exection,RiskUserThreadLocal.get().getName(),dto.getDesc(),null); + + } + + @Override + public void projectActivated(ZtProjectDTO dto) { + ZtProject ztProject = this.baseMapper.selectById(dto.getId()); + if(ztProject==null||!"closed".equalsIgnoreCase(ztProject.getStatus())){ + throw new BusinessException("未查询到"); + } + ztProject.setStatus("doing"); + ztProject.setLastEditedBy(RiskUserThreadLocal.get().getName()); + this.baseMapper.updateById(ztProject); + ActionType type=null; + String product=null; + Integer project=null; + Integer exection=null; + if("program".equalsIgnoreCase(ztProject.getType())){ + type=ActionType.XMJ; + }else if("project".equalsIgnoreCase(ztProject.getType())){ + type=ActionType.XM; + ZtProjectproduct projectproduct = this.projectproductService.getOne(new QueryWrapper().lambda().eq(ZtProjectproduct::getProject, ztProject.getId())); + if(projectproduct!=null){ + product=projectproduct.getProduct()+""; + project=projectproduct.getProject(); + } + + }else if("execution".equalsIgnoreCase(ztProject.getType())){ + type=ActionType.ZX; + project=ztProject.getProject(); + exection=ztProject.getId(); + } + + actionService.addAction(type,ActionStatus.JH,ztProject.getId(),product,project,exection,RiskUserThreadLocal.get().getName(),dto.getDesc(),null); + + } + + @Override + public void projectSuspended(ZtProjectDTO dto) { + ZtProject ztProject = this.baseMapper.selectById(dto.getId()); + if(ztProject==null||!"wait".equalsIgnoreCase(ztProject.getStatus())){ + throw new BusinessException("未查询到"); + } + ztProject.setStatus("suspended"); + ztProject.setLastEditedBy(RiskUserThreadLocal.get().getName()); + this.baseMapper.updateById(ztProject); + ActionType type=null; + String product=null; + Integer project=null; + Integer exection=null; + if("program".equalsIgnoreCase(ztProject.getType())){ + type=ActionType.XMJ; + }else if("project".equalsIgnoreCase(ztProject.getType())){ + type=ActionType.XM; + ZtProjectproduct projectproduct = this.projectproductService.getOne(new QueryWrapper().lambda().eq(ZtProjectproduct::getProject, ztProject.getId())); + if(projectproduct!=null){ + product=projectproduct.getProduct()+""; + project=projectproduct.getProject(); + } + + }else if("execution".equalsIgnoreCase(ztProject.getType())){ + type=ActionType.ZX; + project=ztProject.getProject(); + exection=ztProject.getId(); + } + + actionService.addAction(type,ActionStatus.GQ,ztProject.getId(),product,project,exection,RiskUserThreadLocal.get().getName(),dto.getDesc(),null); + + } + + @Override + public List getStoryByImplementId(ZtProjectDTO dto) { + + + + + + + + + + + Integer id = dto.getId(); + + LambdaQueryWrapper eq1 = new QueryWrapper().lambda() + .eq(ZtProjectproduct::getProject, id); + + + List products = this.projectproductService.list(eq1); + if(CollectionUtils.isEmpty(products)){ + return new ArrayList<>(); + } + + + ZtProject project = this.getById(id); + + Integer pject = project.getProject(); + + //查询项目需求 + List pStoryList = this.projectstoryService.list(new QueryWrapper().lambda().eq(ZtProjectstory::getProject, pject)); + if(CollectionUtils.isEmpty(pStoryList)){ + return new ArrayList<>(); + } + //忽略掉有的 + List list = this.projectstoryService.list(new QueryWrapper().lambda().eq(ZtProjectstory::getProject, id)); + + LambdaQueryWrapper eq = new QueryWrapper().lambda() + .eq(ZtStory::getDeleted, "0") + + .in(ZtStory::getId, pStoryList.stream().map(o->o.getStory()).collect(Collectors.toList())); + + if(dto.getStatus()!=null){ + eq.eq(ZtStory::getStatus, dto.getStatus()); + } + + if(!CollectionUtils.isEmpty(list)){ + eq.notIn(ZtStory::getId,list.stream().map(o->o.getStory()).collect(Collectors.toList())); + } + + List active = this.storyService.list( + eq + ); + + + + + if(CollectionUtils.isEmpty(active)){ + return new ArrayList<>(); + }else{ + return BeanCopyUtil.copyListProperties(active,ZtStoryDTO::new); + } + + } + + @Override + @Transactional + public void implementSyncStory(ZtProjectDTO dto) { + //项目 + ZtProject ztProject = this.baseMapper.selectById(dto.getId()); + + //需求 + List saveList=new ArrayList(); + List storyIds= dto.getStoryIds(); + + List list = projectstoryService.list(new QueryWrapper().lambda() + .eq(ZtProjectstory::getProject, dto.getId())); + Integer order=0; + if(!CollectionUtils.isEmpty(list)){ + order=list.stream().map(o->o.getOrder()).sorted((p1,p2)->p1-p2).collect(Collectors.toList()).get(0); + } + List projectstoryList = projectstoryService.list(new QueryWrapper().lambda() + .eq(ZtProjectstory::getProject, ztProject.getId()).in(ZtProjectstory::getStory,storyIds)); + if(!CollectionUtils.isEmpty(projectstoryList)){ + throw new BusinessException("请勿重复添加"); + } + List ztStories = this.storyService.listByIds(storyIds); + + for (ZtStory i:ztStories) { + ZtProjectstory ztProjectstory = new ZtProjectstory(); + ztProjectstory.setProject(ztProject.getId()); + ztProjectstory.setProduct(i.getProduct()); + ztProjectstory.setStory(i.getId()); + ztProjectstory.setVersion(1); + ztProjectstory.setOrder(order); + order +=1; + saveList.add(ztProjectstory); + } + + //执行id + Integer id = dto.getId(); + //需求ids + //查看板 + + projectstoryService.saveBatch(saveList); + kanbanlaneService.addStory(id,ztStories); +// actionService.addAction(ActionType.,ActionStatus.GQ,ztProject.getId(),product,project,exection,RiskUserThreadLocal.get().getName(),dto.getDesc(),null); + + } + + @Override + @Transactional + public void implementSyncProduct(ZtProjectDTO dto) { + + ZtProject ztProject = this.baseMapper.selectById(dto.getId()); + if(ztProject==null){ + throw new BusinessException("未查询到数据"); + } + List list = this.projectproductService.list(new QueryWrapper() + .lambda().eq(ZtProjectproduct::getProject, ztProject.getId())); + if(!CollectionUtils.isEmpty(list)){ + throw new BusinessException("重复添加"); + } + List productIds = dto.getProductIds(); + for (Integer i:productIds) { + ZtProjectproduct ztProjectproduct = new ZtProjectproduct(); + ztProjectproduct.setProduct(i); + ztProjectproduct.setProject(ztProject.getId()); + ztProjectproduct.setBranch(0); + ztProjectproduct.setPlan("0"); + this.projectproductService.save(ztProjectproduct); + } + + } + //搜索项目根据产品 + @Override + public List getProjectByProduct(ZtProjectQo qo) { + return this.baseMapper.getProjectByProduct(qo); + } + + //搜索执行根据产品 和 项目 + @Override + public List executionListByProduct(ZtProjectQo qo) { + return this.baseMapper.executionListByProduct(qo); + } + + @Override + @Transactional + public void projectSyncStory(ZtProjectDTO dto) { + List storyIds = dto.getStoryIds(); + + Integer project = dto.getProject(); + + ZtProject ztProject = this.baseMapper.selectById(project); + + List list = this.projectstoryService.list(new QueryWrapper().lambda() + .eq(ZtProjectstory::getProject, project) + .in(ZtProjectstory::getStory, storyIds) + ); + if(!CollectionUtils.isEmpty(list)){ + throw new BusinessException("重复添加"); + } + + list = this.projectstoryService.list(new QueryWrapper().lambda() + .eq(ZtProjectstory::getProject, project) + ); + int order=0; + if(!CollectionUtils.isEmpty(list)){ + ZtProjectstory ztProjectstory = list.get(list.size() - 1); + order=ztProjectstory.getOrder()+5; + } + List saveList=new ArrayList(); + for (Integer sId:storyIds) { + ZtProjectstory ztProjectstory = new ZtProjectstory(); + ztProjectstory.setOrder(order); + ztProjectstory.setStory(sId); + ztProjectstory.setProduct(ztProject.getParent()); + ztProjectstory.setProject(project); + saveList.add(ztProjectstory); + order+=5; + } + + this.projectstoryService.saveBatch(saveList); + + } + + @Override + public List implementByProject(ZtProjectQo qo) { + + List list = this.executionprojectService.list(new QueryWrapper().lambda() + .eq(ZtExecutionproject::getProject, qo.getId())); + if(CollectionUtils.isEmpty(list)){ + return new ArrayList<>(); + }else{ + List pList = this.baseMapper.selectBatchIds(list.stream().map(o -> o.getExecution()).collect(Collectors.toList())); + List result = BeanCopyUtil.copyListProperties(pList, ZtProjectDTO::new); + Map> projectMap =null; + Map userMap = this.userService.userMapByIds(result.stream().map(o -> o.getPm()).collect(Collectors.toList())); + + if(CollectionUtils.isEmpty(list)){ + projectMap=new HashMap<>(); + }else{ + projectMap=getProjectMapByExec(list,this.baseMapper + .selectBatchIds(list.stream().map(o -> o.getProject()).collect(Collectors.toList()))); + } + + Map> ztProjectproductMap = getZtProjectproductMap(result); + + + Map> taskMap= execTaskMap(result); + + + + for (ZtProjectDTO d:result ) { + List ztProjects = projectMap.get(d.getId()); + if(!CollectionUtils.isEmpty(ztProjects)){ + d.setProjectName(StringUtils.join(ztProjects.stream().map(o->o.getName()).collect(Collectors.toList()), ",")); + } + + List ztProjectproducts = ztProjectproductMap.get(d.getId()); + if(!CollectionUtils.isEmpty(ztProjectproducts)){ + d.setProductIds(ztProjectproducts.stream().map(o->o.getProject()).collect(Collectors.toList())); + } + List tasks = taskMap.get(d.getId()); + if(!CollectionUtils.isEmpty(tasks)){ + List leftList = tasks.stream().map(o -> o.getLeft()).collect(Collectors.toList()); + List consumedList = tasks.stream().map(o -> o.getConsumed()).collect(Collectors.toList()); + List planList = tasks.stream().map(o -> o.getEstimate()).collect(Collectors.toList()); + + + d.setLeft(floatBatchAdd(leftList)); + d.setPlan(floatBatchAdd(planList)); + d.setConsumed(floatBatchAdd(consumedList)); + } + ZtUser ztUser = userMap.get(d.getPm()); + if(ztUser!=null){ + d.setPoValue(ztUser.getNickname()); + } + } + return result; + } + } + + + + + @Override + public Map> countProject(ZtProjectQo qo) { + Integer id = qo.getId(); + + + + Map> result=new HashMap>(); + + Map story=new HashMap<>(); + + List list = projectstoryService.list(new QueryWrapper().lambda().eq(ZtProjectstory::getProject, id)); + if(CollectionUtils.isEmpty(list)){ + story.put("total",0); + story.put("finish",0); + story.put("residue",0); + }else{ + List ztStories = storyService.listByIds(list.stream().map(o -> o.getStory()).collect(Collectors.toList())); + story.put("total",ztStories.size()); + long developed = ztStories.stream().filter(o -> o.getStage().equalsIgnoreCase("developed")).count(); + story.put("finish",(int)developed); + story.put("residue",ztStories.size()-(int)developed); + } + + result.put("story",story); + + //投入 + List execList = this.executionprojectService.list(new QueryWrapper().lambda().eq(ZtExecutionproject::getProject, id)); + long trCount =0; + if(!CollectionUtils.isEmpty(execList)){ + trCount = this.teamService.count(new QueryWrapper().lambda().in(ZtTeam::getRoot, execList.stream().map(o->o.getExecution()).collect(Collectors.toList())).eq(ZtTeam::getType, "execution")); + } + List tList = this.taskService.list(new QueryWrapper().lambda().eq(ZtTask::getProject, id)); + + Map tr=new HashMap<>(); + tr.put("total",Integer.valueOf(trCount+"")); + +// List planList = tasks.stream().map(o -> o.getEstimate()).collect(Collectors.toList()); +// +// +// d.setLeft(floatBatchAdd(leftList)); +// d.setPlan(floatBatchAdd(planList)); + List planList = tList.stream().map(o -> o.getEstimate()).collect(Collectors.toList()); + List consumeList = tList.stream().map(o -> o.getEstimate()).collect(Collectors.toList()); + tr.put("beExpectedTo",floatBatchAdd(planList).intValue()); + tr.put("consume",floatBatchAdd(consumeList).intValue()); + result.put("tr",tr); + + Map task=new HashMap<>(); + List taskList = taskService.list(new QueryWrapper().lambda().eq(ZtTask::getProject, id)); + if(CollectionUtils.isEmpty(taskList)){ + task.put("noStart",0); + task.put("process",0); + task.put("finish",0); + }else{ + int finish = (int)taskList.stream().filter(o -> o.getStatus().equalsIgnoreCase("done")).count(); + int process = (int)taskList.stream().filter(o -> o.getStatus().equalsIgnoreCase("doing")).count(); + int wait = (int)taskList.stream().filter(o -> o.getStatus().equalsIgnoreCase("wait")).count(); + task.put("noStart",wait); + task.put("process",process); + task.put("finish",finish); + } + + result.put("task",task); + + Map bug=new HashMap<>(); + List bugList = bugService.list(new QueryWrapper().lambda().eq(ZtBug::getProject, id)); + if(CollectionUtils.isEmpty(bugList)){ + bug.put("total",0); + bug.put("solve",0); + bug.put("noSolve",0); + }else{ + int solve = (int)bugList.stream().filter(o -> o.getStatus().equalsIgnoreCase("resolved")).count(); + int noSolve = (int)bugList.stream().filter(o -> o.getStatus().equalsIgnoreCase("active")).count(); + + bug.put("total",bugList.size()); + bug.put("solve",solve); + bug.put("noSolve",noSolve); + } + + result.put("bug",bug); + + return result; + } + + + @Override + @Transactional + public void executionSyncStory(ZtProjectDTO dto) { + List storyIds = dto.getStoryIds(); + + Integer excludeId = dto.getExcludeId(); + + ZtProject ztProject = this.baseMapper.selectById(excludeId); + + + List syncStoryList = this.projectstoryService.list(new QueryWrapper() + .lambda().ne(ZtProjectstory::getExecution, 0) + .in(ZtProjectstory::getStory, storyIds) + ); + if(!CollectionUtils.isEmpty(syncStoryList)){ + throw new BusinessException("当前已关联请刷新"); + } + Integer order=0; + List saveList=new ArrayList(); + for (Integer sId:storyIds) { + ZtProjectstory ztProjectstory = new ZtProjectstory(); + ztProjectstory.setStory(sId); + ztProjectstory.setExecution(excludeId); + saveList.add(ztProjectstory); + order+=5; + } + + this.projectstoryService.saveBatch(saveList); + + this.kanbanlaneService.addStory(excludeId,storyService.listByIds(storyIds)); + } + + + @Override + public List authList() { + ZtUser user = userService.selectByName(RiskUserThreadLocal.get().getName()); + if(user.getAccount().equals("admin")){ + return this.baseMapper.selectList(new QueryWrapper() + .lambda().eq(ZtProject::getType,"program")).stream().map(o->o.getId()).collect(Collectors.toList()); + } + String productIds = user.getProductIds(); + if(StringUtils.isEmpty(productIds)){ + return new ArrayList<>(); + }else{ + String[] split = productIds.split(","); + List result=new ArrayList(); + for (String s:split) { + result.add(Integer.valueOf(s)); + } + return result; + } + + } + + + //项目list + @Override + public List projectAuthList() { + ZtUser user = userService.selectByName(RiskUserThreadLocal.get().getName()); + if(user.getAccount().equals("admin")||user.getUserType()== UserType.XMGLY){ + return this.baseMapper.selectList(new QueryWrapper() + .lambda().eq(ZtProject::getType,"project")).stream().map(o->o.getId()).collect(Collectors.toList()); + } + String productIds = user.getProductIds(); + if(StringUtils.isEmpty(productIds)){ + return new ArrayList<>(); + }else{ + String[] split = productIds.split(","); + List result=new ArrayList(); + for (String s:split) { + result.add(Integer.valueOf(s)); + } + List list = this.productService.list(new QueryWrapper().lambda().in(ZtProduct::getProgram, result)); + if(CollectionUtils.isEmpty(list)){ + return new ArrayList<>(); + } + List projectList = this.projectproductService.list(new QueryWrapper().lambda() + .in(ZtProjectproduct::getProduct, list.stream().map(o -> o.getId()).collect(Collectors.toList()))); + if(CollectionUtils.isEmpty(projectList)){ + return new ArrayList<>(); + } + return projectList.stream().map(o->o.getProject()).collect(Collectors.toList()); + } + } + + @Override + public List execAuthList() { + + ZtUser user = userService.selectByName(RiskUserThreadLocal.get().getName()); + if(user.getAccount().equals("admin")||user.getUserType()== UserType.XMGLY){ + return this.baseMapper.selectList(new QueryWrapper() + .lambda().eq(ZtProject::getType,"sprint")).stream().map(o->o.getId()).collect(Collectors.toList()); + } + List ids =null; + String productIds = user.getProductIds(); + if(StringUtils.isEmpty(productIds)){ + return new ArrayList<>(); + }else{ + String[] split = productIds.split(","); + List result=new ArrayList(); + for (String s:split) { + result.add(Integer.valueOf(s)); + } + List list = this.productService.list(new QueryWrapper().lambda().in(ZtProduct::getProgram, result)); + if(CollectionUtils.isEmpty(list)){ + return new ArrayList<>(); + } + List projectList = this.projectproductService.list(new QueryWrapper().lambda() + .in(ZtProjectproduct::getProduct, list.stream().map(o -> o.getId()).collect(Collectors.toList()))); + if(CollectionUtils.isEmpty(projectList)){ + return new ArrayList<>(); + } + ids= projectList.stream().map(o->o.getProject()).collect(Collectors.toList()); + } + + if(CollectionUtils.isEmpty(ids)){ + return ids; + } + List list = this.executionprojectService.list(new QueryWrapper().lambda().in(ZtExecutionproject::getProject, ids)); + if(CollectionUtils.isEmpty(list)){ + return new ArrayList<>(); + } + + return list.stream().map(o->o.getExecution()).collect(Collectors.toList()); + } + + + @Override + public List executionListByProject(ZtProjectQo qo) { + //项目id + Integer id = qo.getId(); + List list = executionprojectService.list(new QueryWrapper().lambda().eq(ZtExecutionproject::getProject, id)); + if(CollectionUtils.isEmpty(list)){ + return new ArrayList<>(); + } + return this.baseMapper.selectList(new QueryWrapper().lambda().in(ZtProject::getId,list.stream().map(o->o.getExecution()).collect(Collectors.toList()))); + } + + @Override + public List execTeamById(ZtProjectQo qo) { + List execution = this.teamService.list(new QueryWrapper().lambda().eq(ZtTeam::getType, "execution").eq(ZtTeam::getRoot, qo.getId())); + if(CollectionUtils.isEmpty(execution)){ + return new ArrayList<>(); + } + return execution.stream().map(o->o.getAccount()).collect(Collectors.toList()); + } + + @Override + @Transactional + public void execTeamUpdate(ZtProjectQo qo) { + List teamList = qo.getTeamList(); + if(CollectionUtils.isEmpty(teamList)){ + throw new BusinessException("请选择"); + } + + List saveList=new ArrayList(); + + List oldTeam = this.teamService.list(new QueryWrapper() + .lambda().eq(ZtTeam::getRoot, qo.getId()) + .eq(ZtTeam::getType, "execution")); + + for (ZtTeam t:oldTeam) { + if(!teamList.contains(t.getAccount())){ + this.teamService.removeById(t.getId()); + } + } + + + for (String s:teamList) { + List execution = this.teamService.list(new QueryWrapper() + .lambda().eq(ZtTeam::getAccount, s).eq(ZtTeam::getRoot, qo.getId()) + .eq(ZtTeam::getType, "execution")); + if(CollectionUtils.isEmpty(execution)){ + ZtTeam t=new ZtTeam(); + t.setType("execution"); + t.setAccount(s); + t.setRoot(qo.getId()); + t.setJoin(new Date()); + saveList.add(t); + } + } + if(!CollectionUtils.isEmpty(saveList)){ + this.teamService.saveBatch(saveList); + } + + } + + @Override + public List execTeamList(ZtProjectQo qo) { + + List teamList = this.teamService.list(new QueryWrapper().lambda().eq(ZtTeam::getRoot, qo.getId()) + .eq(ZtTeam::getType, "execution")); + if(CollectionUtils.isEmpty(teamList)){ + return new ArrayList<>(); + } + + + return this.userService.list(new QueryWrapper().lambda().in(ZtUser::getAccount,teamList.stream().map(o->o.getAccount()).collect(Collectors.toList())) + ); + } + + @Autowired + private IZtEffortService effortService; + + //按照每月多少天 1-31 每天的工作 + @Override + public Map>> projectTeamTimeWork(ZtProjectQo qo) { + Map>> map=new HashMap<>(); + + Date date = qo.getDate(); + + Date firstDayOfMonth = DateUtils.getFirstDayOfMonth(date); + Date lastDayOfMonth = new Date(DateUtils.getLastDayOfMonth(date).getTime()+1000*2); + + List list = this.taskService.list(new QueryWrapper().lambda().eq(ZtTask::getProject, qo.getProject())); + + + List efforts = this.effortService.list(new QueryWrapper().lambda().eq(ZtEffort::getProject, qo.getProject()) + .gt(ZtEffort::getDate, new Date(firstDayOfMonth.getTime() - 2000)).lt(ZtEffort::getDate, lastDayOfMonth) + ); + + + + //项目关联的执行 + List execList = this.executionprojectService.list(new QueryWrapper().lambda() + .eq(ZtExecutionproject::getProject, qo.getProject())); + if(CollectionUtils.isEmpty(execList)){ + return new HashMap<>(); + } +// 时间 T1 T2 +// 任务 T3 T4 + List ztProjects = this.listByIds(execList.stream().map(o -> o.getExecution()).collect(Collectors.toList())); + ztProjects=ztProjects.stream().filter(o-> + ( firstDayOfMonth .getTime()>=o.getBegin().getTime() &&lastDayOfMonth.getTime()>o.getEnd().getTime())|| + ( firstDayOfMonth .getTime()<=o.getBegin().getTime() &&lastDayOfMonth.getTime()>=o.getEnd().getTime())|| + ( firstDayOfMonth .getTime()<=o.getBegin().getTime() &&lastDayOfMonth.getTime()<=o.getEnd().getTime()) + ).collect(Collectors.toList()); + if(CollectionUtils.isEmpty(ztProjects)){ + return map; + } + List teams = this.teamService.list(new QueryWrapper().lambda().eq(ZtTeam::getType, "execution") + .in(ZtTeam::getRoot, ztProjects.stream().map(o -> o.getId()).collect(Collectors.toList()))); + + List accountIds = teams.stream().map(o -> o.getAccount()).distinct().collect(Collectors.toList()); + + List userList = this.userService.list(); + Map uMap = userList.stream().collect(Collectors.toMap(ZtUser::getAccount, O -> O)); + + + for (int i =0;i> l=new ArrayList<>(); + for (String s:accountIds) { + ZtUser ztUser = uMap.get(s); + List fList = efforts.stream().filter(o -> o.getAccount().equals(s)) + .filter(o->DateUtils.formatDate(o.getDate()).equals(DateUtils.formatDate(d))) + .collect(Collectors.toList()); + + Map m=new HashMap<>(); + //分配 + m.put("allocation","0"); + //使用 + double sum = fList.stream().mapToDouble(o -> o.getConsumed()).sum(); + m.put("use",sum+""); + m.put("name",ztUser.getNickname()); + l.add(m); + + } + map.put(DateUtils.formatDate(d,"dd"),l); + } + return map; + +// //项目id +// Integer project = qo.getProject(); +// Date date = qo.getDate(); +// +// Date sDate = DateUtils.getMonthStartDate(date); +// Date startDate=new Date(sDate.getTime()-1000*60); +// Date endDate = DateUtils.getMonthEndDate(date); +// +// +// +// //执行下的所有任务 +// List effortList = this.effortService +// .list(new QueryWrapper().lambda().in(ZtEffort::getExecution, execList.stream().map(o -> o.getExecution()).collect(Collectors.toList())) +// .gt(ZtEffort::getDate, startDate).lt(ZtEffort::getDate, endDate)); +// if(CollectionUtils.isEmpty(effortList)){ +// return new ArrayList<>(); +// } +// List> result=new ArrayList<>(); +// +// for (String account:accountIds){ +// Map m=new HashMap<>(); +// List fList = effortList.stream().filter(o -> o.getAccount().equals(account)).collect(Collectors.toList()); +// if(CollectionUtils.isEmpty(fList)){ +// m.put(account,0+""); +// }else{ +// double sum = fList.stream().mapToDouble(o -> o.getConsumed()).sum(); +// m.put(account,sum+""); +// } +// result.add(m); +// } +// return result; + } + + @Override + public void editImplement(ZtProjectDTO dto) { + ZtProject ztProject = this.baseMapper.selectById(dto.getId()); + ztProject.setBegin(dto.getBegin()); + ztProject.setEnd(dto.getEnd()); + ztProject.setDays(dto.getDays()); + ztProject.setName(dto.getName()); + ztProject.setLastEditedDate(new Date()); + ztProject.setLastEditedBy(RiskUserThreadLocal.get().getName()); + this.baseMapper.updateById(ztProject); + actionService.addAction(ActionType.ZX,ActionStatus.BJ,ztProject.getId(),null,null,ztProject.getId(),RiskUserThreadLocal.get().getName(),null,null); + + } + + @Override + @Transactional + public void changeStatusImplement(ZtProjectDTO dto) { + ZtProject ztProject = this.baseMapper.selectById(dto.getId()); + + if(ztProject==null||!ztProject.getType().equals("sprint")){ + throw new BusinessException("未查询到数据"); + } + long count = this.taskService.count(new QueryWrapper().lambda().eq(ZtTask::getExecution, ztProject.getId())); + if(count>0&&dto.getStatus().equals("wait")){ + throw new BusinessException("当前已开始无法更改"); + } + ztProject.setStatus( + dto.getStatus()); + ztProject.setLastEditedBy(RiskUserThreadLocal.get().getName()); + ztProject.setLastEditedDate(new Date()); + this.baseMapper.updateById(ztProject); + } + + @Override + public List copyExecList(ZtProjectDTO dto) { + + List integers = execAuthList(); + + if(CollectionUtils.isEmpty(integers)){ + return new ArrayList<>(); + } + List sprint = this.listByIds(integers); + + if(CollectionUtils.isEmpty(sprint)){ + return new ArrayList<>(); + } + List ztProjectDTOS = BeanCopyUtil.copyListProperties(sprint, ZtProjectDTO::new); + + + return ztProjectDTOS; + } + + @Override + public ZtProjectDTO copyExecInfoById(ZtProjectDTO dto) { + ZtProject ztProject = this.baseMapper.selectById(dto.getId()); + ZtProjectDTO objectZtProjectDTO = new ZtProjectDTO(); + BeanUtils.copyProperties(ztProject,objectZtProjectDTO); + List execution = this.teamService.list(new QueryWrapper().lambda().eq(ZtTeam::getRoot, ztProject.getId()).eq(ZtTeam::getType, "execution")); + + if(CollectionUtils.isEmpty(execution)){ + objectZtProjectDTO.setTeamList(new ArrayList<>()); + }else{ + objectZtProjectDTO.setTeamList(execution.stream().map(o->o.getAccount()).collect(Collectors.toList())); + } + List list = this.executionprojectService.list(new QueryWrapper().lambda().eq(ZtExecutionproject::getExecution, objectZtProjectDTO.getId())); + + + objectZtProjectDTO.setProjectList(list.stream().map(o->o.getProject()).collect(Collectors.toList())); + + return objectZtProjectDTO; + } + + + @Override + public List projectByExecution(ZtProjectDTO dto) { + + List list = this.executionprojectService.list(new QueryWrapper().lambda().eq(ZtExecutionproject::getExecution, dto.getId())); + List ztProjects = this.baseMapper.selectBatchIds(list.stream().map(o -> o.getProject()).collect(Collectors.toList())); + return ztProjects; + } + + + //修改项目集 + @Override + @Transactional + public void modifyProgram(ZtProjectDTO dto) { + ZtProject ztProject = this.baseMapper.selectById(dto); + BeanUtils.copyProperties(dto,ztProject); + if(ztProject.getParent()==null||ztProject.getParent()==0){ + ztProject.setPath(String.format(",%d,",ztProject.getId())); + ztProject.setGrade(1); + ztProject.setLeft(0f); + ztProject.setConsumed(0f); + ztProject.setOrder(0); + ztProject.setParent(0); + }else{ + ZtProject pProject = this.baseMapper.selectById(ztProject.getParent()); + + ztProject.setPath(pProject.getPath()+""+String.format("%d,",ztProject.getId())); + ztProject.setGrade(pProject.getGrade()+1); + ztProject.setLeft(2f); + ztProject.setConsumed(4f); + ztProject.setOrder(pProject.getOrder()+5); + } + if(!CollectionUtils.isEmpty(dto.getAuthList())){ + ztProject.setWhitelist(","+StringUtils.join(dto.getAuthList(),",")); + } + + this.baseMapper.updateById(ztProject); + + actionService.addAction(ActionType.XMJ,ActionStatus.BJ,ztProject.getId(),null,null,ztProject.getId(),RiskUserThreadLocal.get().getName(),null,null); + + } + + @Override + @Transactional + public void modifyProject(ZtProjectDTO dto) { + ZtProject ztProject = this.baseMapper.selectById(dto.getId()); + BeanUtils.copyProperties(dto,ztProject); + if(ztProject.getParent()==null||ztProject.getParent()==0){ + ztProject.setPath(String.format(",%d,",ztProject.getId())); + ztProject.setGrade(1); + ztProject.setLeft(0f); + ztProject.setConsumed(0f); + ztProject.setOrder(0); + ztProject.setParent(0); + }else{ + ZtProject pProject = this.baseMapper.selectById(ztProject.getParent()); + + ztProject.setPath(pProject.getPath()+""+String.format("%d,",ztProject.getId())); + ztProject.setGrade(pProject.getGrade()+1); + ztProject.setLeft(2f); + ztProject.setConsumed(4f); + ztProject.setOrder(pProject.getOrder()+5); + } + this.projectproductService.remove(new QueryWrapper().lambda().eq(ZtProjectproduct::getProject,dto.getId())); + + if(!CollectionUtils.isEmpty(dto.getProductIds())){ + for (Integer i:(List)dto.getProductIds()) { + ZtProjectproduct p=new ZtProjectproduct(); + p.setProject(ztProject.getId()); + p.setProduct(i); + projectproductService.save(p); + } + + } + if(!CollectionUtils.isEmpty(dto.getAuthList())){ + ztProject.setWhitelist(","+StringUtils.join(dto.getAuthList(),",")); + } + this.baseMapper.updateById(ztProject); + + actionService.addAction(ActionType.XM,ActionStatus.BJ,ztProject.getId(),null,null,ztProject.getId(),RiskUserThreadLocal.get().getName(),null,null); + + } + + + + @Override + public List parentList(ZtProjectDTO dto) { + List pIds = authList(); + + List ztProjects = this.baseMapper.selectList(new QueryWrapper().lambda() + .eq(ZtProject::getType,"program") + .eq(ZtProject::getDeleted,"0") + .in(ZtProject::getId,pIds) + ); + if(CollectionUtils.isEmpty(ztProjects)){ + return new ArrayList<>(); + }else{ + return BeanCopyUtil.copyListProperties(ztProjects,ZtProjectDTO::new); + } + } + + @Override + public PageInfo groupPageList(ZtProjectQo qo) { + + qo.setProductIds(authList()); + if(CollectionUtils.isEmpty(qo.getProductIds())){ + return new PageInfo(); + } + Page page = PageHelper.startPage(qo.getCurrentPage(), qo.getPageSize()); + + + if(CollectionUtils.isEmpty(qo.getProductIds())){ + return new PageInfo(); + } + + List result = this.baseMapper.groupPageList(qo); + + + if(!CollectionUtils.isEmpty(result)){ + + Map userMap = this.userService.userMapByIds(result.stream().map(o->o.getPm()).collect(Collectors.toList())); + + + Map> m= getChildrenMap(result,qo); + + + + for (ZtProjectDTO d:result) { + if(!StringUtils.isEmpty(d.getPm())){ + ZtUser ztUser = userMap.get(d.getPm()); + if(ztUser!=null){ + d.setPoValue(ztUser.getNickname()); + } + } + d.setChildren( getChild(d.getId(),m)); + if(!CollectionUtils.isEmpty(d.getChildren())){ +// d.setHasChildren(true); + } + } + } + + return new PageInfo(result); + } + List getChild(Integer id,Map> m){ + List ztProjectDTOS = m.get(id); + if(CollectionUtils.isEmpty(ztProjectDTOS)){ + return new ArrayList(); + } + for (ZtProjectDTO d:ztProjectDTOS) { + List ztProjectDTOS1 = m.get(d.getId()); + if(CollectionUtils.isEmpty(ztProjectDTOS1)){ + continue; + }else { + d.setChildren(getChild(d.getId(),m)); +// d.setHasChildren(true); + } + } + return ztProjectDTOS; + } + + //执行列表 + @Override + public PageInfo implementPageList(ZtProjectQo qo) { + + List pIds = execAuthList(); + if(CollectionUtils.isEmpty(pIds)){ + return new PageInfo(); + } + qo.setProjectIds(pIds); + Page page = PageHelper.startPage(qo.getCurrentPage(), qo.getPageSize()); + if(!"admin".equals(RiskUserThreadLocal.get().getName())){ + qo.setUserName(RiskUserThreadLocal.get().getName()); + } + + List result = this.baseMapper.implementPageList(qo); + if(!CollectionUtils.isEmpty(result)){ + + Map userMap = this.userService.userMapByIds(result.stream().map(o -> o.getPm()).collect(Collectors.toList())); + + List list = executionprojectService.list(new QueryWrapper().lambda() + .in(ZtExecutionproject:: + getExecution, result.stream().map(o -> o.getId()).collect(Collectors.toList()) + )); + Map> projectMap =null; + if(CollectionUtils.isEmpty(list)){ + projectMap=new HashMap<>(); + }else{ + projectMap=getProjectMapByExec(list,this.baseMapper + .selectBatchIds(list.stream().map(o -> o.getProject()).collect(Collectors.toList()))); + } + + Map> ztProjectproductMap = getZtProjectproductMap(result); + + + Map> taskMap= execTaskMap(result); + + + + for (ZtProjectDTO d:result ) { + List ztProjects = projectMap.get(d.getId()); + if(!CollectionUtils.isEmpty(ztProjects)){ + d.setProjectName(StringUtils.join(ztProjects.stream().map(o->o.getName()).collect(Collectors.toList()), ",")); + } + + List ztProjectproducts = ztProjectproductMap.get(d.getId()); + if(!CollectionUtils.isEmpty(ztProjectproducts)){ + d.setProductIds(ztProjectproducts.stream().map(o->o.getProject()).collect(Collectors.toList())); + } + List tasks = taskMap.get(d.getId()); + if(!CollectionUtils.isEmpty(tasks)){ + List leftList = tasks.stream().map(o -> o.getLeft()).collect(Collectors.toList()); + List consumedList = tasks.stream().map(o -> o.getConsumed()).collect(Collectors.toList()); + List planList = tasks.stream().map(o -> o.getEstimate()).collect(Collectors.toList()); + + + d.setLeft(floatBatchAdd(leftList)); + d.setPlan(floatBatchAdd(planList)); + d.setConsumed(floatBatchAdd(consumedList)); + } + ZtUser ztUser = userMap.get(d.getPm()); + if(ztUser!=null){ + d.setPoValue(ztUser.getNickname()); + } + } + } + return new PageInfo(result); + } + + private Map> execTaskMap(List result) { + + List list = this.taskService.list(new QueryWrapper().lambda().in(ZtTask::getExecution, result.stream().map(o -> o.getId()).collect(Collectors.toList()))); + if(CollectionUtils.isEmpty(list)){ + return new HashMap<>(); + } + return list.stream().collect(Collectors.groupingBy(ZtTask::getExecution)); + } + + + @Override + public PageInfo pageProject(ZtProjectQo qo) { + List pIds = projectAuthList(); + if(CollectionUtils.isEmpty(pIds)){ + return new PageInfo<>(); + } + qo.setProjectIds(pIds); + Page page = PageHelper.startPage(qo.getCurrentPage(), qo.getPageSize()); + List result = this.baseMapper.pageProject(qo); + + if(!CollectionUtils.isEmpty(result)){ + + Map> p =getZtProjectproductMap(result); + List ids=new ArrayList(); + for (List item:p.values()) { + ids.addAll(item.stream().map(o->o.getProduct()).collect(Collectors.toList())); + } + List listProduct =new ArrayList<>(); + if(!CollectionUtils.isEmpty(ids)){ + listProduct=productService.listByIds(ids); + } + + Map pMap = listProduct.stream().collect(Collectors.toMap(ZtProduct::getId, o -> o)); + + Map userMap = this.userService.userMapByIds(result.stream().map(o -> o.getPm()).collect(Collectors.toList())); + for (ZtProjectDTO d:result) { + String pm = d.getPm(); + ZtUser ztUser = userMap.get(pm); + if(ztUser!=null){ + d.setPoValue(ztUser.getNickname()); + } + + List ppList = p.get(d.getId()); + if(!CollectionUtils.isEmpty(ppList)){ + ZtProjectproduct ztProjectproduct = ppList.get(0); + d.setProductId(ztProjectproduct.getProduct()); + ZtProduct ztProduct = pMap.get(ztProjectproduct.getProduct()); + if(ztProduct!=null){ + d.setProductName(ztProduct.getName()); + } + } + } + } + + return new PageInfo(result); + } + + private List userAuth() { + + return null; + } + + private Map> getZtProjectproductMap(List result) { + List list = this.projectproductService.list(new QueryWrapper() + .lambda().in(ZtProjectproduct::getProject, result.stream().map(o -> o.getId()).collect(Collectors.toList()))); + if(CollectionUtils.isEmpty(list)){ + return new HashMap<>(); + }else{ + return list.stream().collect(Collectors.groupingBy(ZtProjectproduct::getProject)); + } + } + + @Override + public List treeParentList(ZtProjectDTO dto) { + + LambdaQueryWrapper lambda = new QueryWrapper().lambda(); + + + + lambda.eq(ZtProject::getType,"program"); + lambda.eq(ZtProject::getDeleted,"0"); + + if(dto.getExcludeId()!=null){ + List program = this.baseMapper.selectList(new QueryWrapper().lambda() + .eq(ZtProject::getDeleted, "0").eq(ZtProject::getType, "program")); + if(CollectionUtils.isEmpty(program)){ + return new ArrayList<>(); + } + Map> map = program.stream().collect(Collectors.groupingBy(ZtProject::getParent)); + List ids=new ArrayList<>(); + ids.add(dto.getExcludeId()); + ids=programChildListIds(ids,map,dto.getExcludeId()); + + lambda.notIn(ZtProject::getId,ids); + } + List ztProjects = this.baseMapper.selectList( + lambda + ); + if(CollectionUtils.isEmpty(ztProjects)){ + return new ArrayList<>(); + } + List result=new ArrayList(); + Map map = getProjectMap(ztProjects); + for (ZtProject p:ztProjects) { + ZtProjectDTO ztProjectDTO = new ZtProjectDTO(); + BeanUtils.copyProperties(p,ztProjectDTO); + List split = Arrays.asList(ztProjectDTO.getPath().split(",")); + split=split.stream().filter(o-> !StringUtils.isEmpty(o)).filter(o->!p.getId().toString().equalsIgnoreCase(o)).collect(Collectors.toList()); + if(!CollectionUtils.isEmpty(split)){ + String name = ztProjectDTO.getName(); + + ztProjectDTO.setName(""); + for (String s:split) { + ZtProject ztProject = map.get(Integer.valueOf(s)); + if(ztProject!=null){ + ztProjectDTO.setName(ztProjectDTO.getName()+"/"+ztProject.getName()); + } + + } + ztProjectDTO.setName(ztProjectDTO.getName()+"/"+name); + } + result.add(ztProjectDTO); + } + return result; + } + @Override + public List authTreeParentList(ZtProjectDTO dto) { + LambdaQueryWrapper lambda = new QueryWrapper().lambda(); + + + lambda.eq(ZtProject::getGrade,"1"); + lambda.eq(ZtProject::getType,"program"); + lambda.eq(ZtProject::getDeleted,"0"); + + if(dto.getExcludeId()!=null){ + List program = this.baseMapper.selectList(new QueryWrapper().lambda() + .eq(ZtProject::getDeleted, "0").eq(ZtProject::getType, "program")); + if(CollectionUtils.isEmpty(program)){ + return new ArrayList<>(); + } + Map> map = program.stream().collect(Collectors.groupingBy(ZtProject::getParent)); + List ids=new ArrayList<>(); + ids.add(dto.getExcludeId()); + ids=programChildListIds(ids,map,dto.getExcludeId()); + + lambda.notIn(ZtProject::getId,ids); + } + List ztProjects = this.baseMapper.selectList( + lambda + ); + if(CollectionUtils.isEmpty(ztProjects)){ + return new ArrayList<>(); + } + return BeanCopyUtil.copyListProperties(ztProjects,ZtProjectDTO::new); + } + + + private List programChildListIds(List list, Map> map,Integer id){ + List ztProjects = map.get(id); + if(CollectionUtils.isEmpty(ztProjects)){ + return list; + } + + for (ZtProject i:ztProjects) { + list.add(i.getId()); + List ztProjects1 = map.get(i.getId()); + if(CollectionUtils.isEmpty(ztProjects1)){ + continue; + }else{ + for (ZtProject p:ztProjects1) { + list.add(p.getId()); + programChildListIds(list,map,p.getId()); + } + } + + } + + return list; + } + + @Override + public List typeProductList(ZtProjectQo qo) { + + LambdaQueryWrapper eq = new QueryWrapper().lambda() + .eq(ZtProject::getType, "project") + .eq(ZtProject::getDeleted, "0"); + + if(qo.getStatus()!=null){ + eq.eq(ZtProject::getStatus,qo.getStatus()); + } + + List project = this.baseMapper.selectList( + eq + ); + if(CollectionUtils.isEmpty(project)){ + return new ArrayList<>(); + } + + List listAuth = project.stream().map(o -> o.getPath()).collect(Collectors.toList()); + List ids =new ArrayList<>(); + for (String str:listAuth) { + ids.add(Integer.valueOf(Arrays.asList(str.split(",")).stream().filter(o->!StringUtils.isEmpty(o)).collect(Collectors.toList()).get(0))); + } + Map projectMap = getProjectMap(this.baseMapper.selectBatchIds(ids)); + List ztProjectDTOS = BeanCopyUtil.copyListProperties(project, ZtProjectDTO::new); + for (ZtProjectDTO p:ztProjectDTOS ) { + ZtProject ztProject = projectMap.get(Integer.valueOf(Arrays.asList(p.getPath().split(",")).stream().filter(o -> !StringUtils.isEmpty(o)).collect(Collectors.toList()).get(0))); + if(ztProject.getId().intValue()!=p.getId().intValue()){ + p.setName(ztProject.getName()+"/"+p.getName()); + } + } + + + return ztProjectDTOS; + } + + + + private Map getProjectMap(List ztProjects) { + if(CollectionUtils.isEmpty(ztProjects)){ + return new HashMap<>(); + } + return ztProjects.stream().collect(Collectors.toMap(ZtProject::getId,o->o)); + } + + private Map> getProjectMapByExec(List list,List ztProjects) { + if(CollectionUtils.isEmpty(ztProjects)){ + return new HashMap<>(); + } + Map> result=new HashMap<>(); + for (ZtExecutionproject e:list) { + List collect = list.stream().filter(o -> o.getExecution().intValue() == e.getExecution()).collect(Collectors.toList()); + if(CollectionUtils.isEmpty(collect)){ + continue; + } + List list1 = collect.stream().map(o -> o.getProject().intValue()).collect(Collectors.toList()); + result.put(e.getExecution(),ztProjects.stream().filter(o->list1.contains(o.getId())).collect(Collectors.toList())); + } + return result; + } + + private Map> getChildrenMap(List result,ZtProjectQo qo) { + + List ztProjects = this.baseMapper.selectList( + new QueryWrapper().lambda().eq(ZtProject::getDeleted,"0") + .eq(ZtProject::getType,"program").ne(ZtProject::getParent,0) + ); + if(CollectionUtils.isEmpty(ztProjects)){ + return new HashMap<>(); + } + List ztProjectDTOS = BeanCopyUtil.copyListProperties(ztProjects, ZtProjectDTO::new); + + return ztProjectDTOS.stream().collect(Collectors.groupingBy(ZtProjectDTO::getParent)); + } + + private Float floatBatchAdd(List list){ + Float f=0f; + for (Float i:list ) { + f+=i; + } + return f; + } + +} diff --git a/src/main/java/com/sa/zentao/service/impl/ZtProjectproductServiceImpl.java b/src/main/java/com/sa/zentao/service/impl/ZtProjectproductServiceImpl.java new file mode 100644 index 0000000..eee06b6 --- /dev/null +++ b/src/main/java/com/sa/zentao/service/impl/ZtProjectproductServiceImpl.java @@ -0,0 +1,20 @@ +package com.sa.zentao.service.impl; + +import com.sa.zentao.entity.ZtProjectproduct; +import com.sa.zentao.mapper.ZtProjectproductMapper; +import com.sa.zentao.service.IZtProjectproductService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 服务实现类 + *

+ * + * @author gqb + * @since 2024-06-18 + */ +@Service +public class ZtProjectproductServiceImpl extends ServiceImpl implements IZtProjectproductService { + +} diff --git a/src/main/java/com/sa/zentao/service/impl/ZtProjectstoryServiceImpl.java b/src/main/java/com/sa/zentao/service/impl/ZtProjectstoryServiceImpl.java new file mode 100644 index 0000000..78ee3df --- /dev/null +++ b/src/main/java/com/sa/zentao/service/impl/ZtProjectstoryServiceImpl.java @@ -0,0 +1,20 @@ +package com.sa.zentao.service.impl; + +import com.sa.zentao.entity.ZtProjectstory; +import com.sa.zentao.mapper.ZtProjectstoryMapper; +import com.sa.zentao.service.IZtProjectstoryService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 服务实现类 + *

+ * + * @author gqb + * @since 2024-07-02 + */ +@Service +public class ZtProjectstoryServiceImpl extends ServiceImpl implements IZtProjectstoryService { + +} diff --git a/src/main/java/com/sa/zentao/service/impl/ZtSearchindexServiceImpl.java b/src/main/java/com/sa/zentao/service/impl/ZtSearchindexServiceImpl.java new file mode 100644 index 0000000..fa65682 --- /dev/null +++ b/src/main/java/com/sa/zentao/service/impl/ZtSearchindexServiceImpl.java @@ -0,0 +1,20 @@ +package com.sa.zentao.service.impl; + +import com.sa.zentao.entity.ZtSearchindex; +import com.sa.zentao.mapper.ZtSearchindexMapper; +import com.sa.zentao.service.IZtSearchindexService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 服务实现类 + *

+ * + * @author gqb + * @since 2024-06-24 + */ +@Service +public class ZtSearchindexServiceImpl extends ServiceImpl implements IZtSearchindexService { + +} diff --git a/src/main/java/com/sa/zentao/service/impl/ZtStoryFeedbackServiceImpl.java b/src/main/java/com/sa/zentao/service/impl/ZtStoryFeedbackServiceImpl.java new file mode 100644 index 0000000..e1123c7 --- /dev/null +++ b/src/main/java/com/sa/zentao/service/impl/ZtStoryFeedbackServiceImpl.java @@ -0,0 +1,143 @@ +package com.sa.zentao.service.impl; + +import ch.qos.logback.core.util.StringUtil; +import com.github.pagehelper.Page; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.sa.zentao.conf.RiskUserThreadLocal; +import com.sa.zentao.dao.BusinessException; +import com.sa.zentao.dao.ZtStoryFeedbackDTO; +import com.sa.zentao.entity.ZtStory; +import com.sa.zentao.entity.ZtStoryFeedback; +import com.sa.zentao.entity.ZtUser; +import com.sa.zentao.enums.ActionStatus; +import com.sa.zentao.enums.ActionType; +import com.sa.zentao.mapper.ZtStoryFeedbackMapper; +import com.sa.zentao.qo.ZtProjectQo; +import com.sa.zentao.service.IZtActionService; +import com.sa.zentao.service.IZtStoryFeedbackService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.sa.zentao.service.IZtStoryService; +import com.sa.zentao.service.IZtUserService; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; + +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + *

+ * 服务实现类 + *

+ * + * @author gqb + * @since 2024-10-15 + */ +@Service +public class ZtStoryFeedbackServiceImpl extends ServiceImpl implements IZtStoryFeedbackService { + + @Autowired + private IZtUserService userService; + + @Autowired + private IZtStoryService storyService; + + @Autowired + private IZtActionService actionService; + + @Override + public PageInfo pageList(ZtProjectQo qo) { + + Page page = PageHelper.startPage(qo.getCurrentPage(), qo.getPageSize()); + qo.setUserName(RiskUserThreadLocal.get().getName()); + List list = this.baseMapper.pageList(qo); + Map userMap = userService.userMapByIds(null); + + if(!CollectionUtils.isEmpty(list)){ + Map sMap =getStoryMap(list); + + for (ZtStoryFeedbackDTO dto:list) { + ZtStory ztStory = sMap.get(dto.getStoryId()); + if(ztStory!=null){ + dto.setStoryName(ztStory.getTitle()); + } + + + ZtUser ztUser = userMap.get(dto.getOpenedBy()); + if(ztUser!=null){ + dto.setOpenedByName(ztUser.getNickname()); + } + + ztUser = userMap.get(dto.getAssignedTo()); + if(ztUser!=null){ + dto.setAssignedToName(ztUser.getNickname()); + } + } + } + + return new PageInfo(list); + + } + + private Map getStoryMap(List list) { + + List collect = list.stream().filter(o -> o.getStoryId() != null).map(o -> o.getStoryId()).collect(Collectors.toList()); + if(CollectionUtils.isEmpty(collect)){ + return new HashMap<>(); + } + + List ztStories = this.storyService.listByIds(collect); + return ztStories.stream().collect(Collectors.toMap(ZtStory::getId,o->o)); + } + + @Override + @Transactional + public void addFeedback(ZtStoryFeedbackDTO dto) { + + ZtStoryFeedback ztStoryFeedback = new ZtStoryFeedback(); + BeanUtils.copyProperties(dto,ztStoryFeedback); + ztStoryFeedback.setOpenedBy(RiskUserThreadLocal.get().getName()); + ztStoryFeedback.setOpenedDate(new Date()); + ztStoryFeedback.setUpdateDate(new Date()); + ztStoryFeedback.setUpdateUser(RiskUserThreadLocal.get().getName()); + ztStoryFeedback.setStatus("wait"); + + this.baseMapper.insert(ztStoryFeedback); + actionService.addAction(ActionType.WTFK, ActionStatus.XJ, dto.getId(), dto.getProduct()+"", null, null, + RiskUserThreadLocal.get().getName(), dto.getSpec(), ""); + } + + @Override + public void editFeedback(ZtStoryFeedbackDTO dto) { + ZtStoryFeedback ztStoryFeedback = this.baseMapper.selectById(dto.getId()); + + BeanUtils.copyProperties(dto,ztStoryFeedback); + ztStoryFeedback.setUpdateUser(RiskUserThreadLocal.get().getName()); + ztStoryFeedback.setUpdateDate(new Date()); + this.baseMapper.updateById(ztStoryFeedback); + actionService.addAction(ActionType.WTFK, ActionStatus.BJ, dto.getId(), dto.getProduct()+"", null, null, + RiskUserThreadLocal.get().getName(), null, ""); + } + + @Override + public void changeStatus(ZtStoryFeedbackDTO dto) { + ZtStoryFeedback ztStoryFeedback = this.baseMapper.selectById(dto.getId()); + if(ztStoryFeedback.getStatus().equals("finished")|| ztStoryFeedback.getStatus().equals("closed")){ + throw new BusinessException("无法更改"); + } + ztStoryFeedback.setStatus(dto.getStatus()); + ztStoryFeedback.setCloseRemark(dto.getCloseRemark()); + this.baseMapper.updateById(ztStoryFeedback); + if(!StringUtils.isEmpty(dto.getCloseRemark())){ + actionService.addAction(ActionType.WTFK, ActionStatus.BJ, dto.getId(), dto.getProduct()+"", null, null, + RiskUserThreadLocal.get().getName(), dto.getCloseRemark(), ""); + } + } +} diff --git a/src/main/java/com/sa/zentao/service/impl/ZtStoryServiceImpl.java b/src/main/java/com/sa/zentao/service/impl/ZtStoryServiceImpl.java new file mode 100644 index 0000000..05a3bdd --- /dev/null +++ b/src/main/java/com/sa/zentao/service/impl/ZtStoryServiceImpl.java @@ -0,0 +1,1159 @@ +package com.sa.zentao.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.github.pagehelper.Page; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.sa.zentao.conf.RiskUserThreadLocal; +import com.sa.zentao.dao.*; +import com.sa.zentao.entity.*; +import com.sa.zentao.enums.ActionStatus; +import com.sa.zentao.enums.ActionType; +import com.sa.zentao.enums.ProductStoryStatus; +import com.sa.zentao.mapper.ZtStoryMapper; +import com.sa.zentao.qo.KanbanQo; +import com.sa.zentao.qo.ZtBugQo; +import com.sa.zentao.qo.ZtProjectQo; +import com.sa.zentao.service.*; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.sa.zentao.utils.BeanCopyUtil; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; + +import java.util.*; +import java.util.stream.Collectors; + +/** + *

+ * 服务实现类 + *

+ * + * @author gqb + * @since 2024-06-24 + */ +@Service +public class ZtStoryServiceImpl extends ServiceImpl implements IZtStoryService { + + @Autowired + private IZtStoryreviewService storyreviewService; + + @Autowired + private IZtProjectService projectService; + + @Autowired + private IZtProductService productService; + + @Autowired + private IZtActionService actionService; + + @Autowired + private IZtStoryspecService storyspecService; + + @Autowired + private IZtTaskService taskService; + + @Autowired + private IZtBugService bugService; + + + @Autowired + private IZtProjectproductService projectproductService; + + @Autowired + private IZtKanbanlaneService kanbanlaneService; + + @Autowired + private IZtStoryService IZtStoryService; + + @Autowired + private IZtUserService userService; + + @Autowired + private IZtProjectstoryService projectstoryService; + + @Autowired + private IZtExecutionprojectService executionprojectService; + + @Autowired + private IZtStoryUserService storyUserService; + + + + + @Override + public PageInfo pageList(ZtProjectQo qo) { + Page page = PageHelper.startPage(qo.getCurrentPage(), qo.getPageSize()); + Integer productId = qo.getProductId(); + qo.setUserName(RiskUserThreadLocal.get().getName()); + List list = this.baseMapper.pageList(qo); + if (!CollectionUtils.isEmpty(list)) { + List userIds = list.stream().map(o -> o.getAssignedTo()).collect(Collectors.toList()); + userIds.addAll(list.stream().map(o -> o.getOpenedby()).collect(Collectors.toList())); + + + Map userMap = this.userService.userMapByIds(userIds); + + + Map> rMap = getReviewMap(list); + + Map executionMapByStory = getExecutionMapByStory(list); + + + for (ZtStoryDTO d : list) { + d.setRevieweUser(d.getReviewedby().replaceAll(",", " ")); + d.setViews(rMap.get(d.getId())); + ZtUser ztUser = userMap.get(d.getAssignedTo()); + if(ztUser!=null){ + d.setAssignedToName(ztUser.getNickname()); + } + + ztUser = userMap.get(d.getOpenedby()); + if(ztUser!=null){ + d.setOpenedbyName(ztUser.getNickname()); + } + ZtProject ztProject = executionMapByStory.get(d.getId()); + if(ztProject!=null){ + d.setExecution(ztProject.getId()); + d.setExecutionName(ztProject.getName()); + } + } + } + return new PageInfo(list); + } + + private Map> getReviewMap(List list) { + List list1 = storyreviewService.list(new QueryWrapper().lambda().in(ZtStoryreview::getStory + , list.stream().map(o -> o.getId()).collect(Collectors.toList()) + )); + + if (CollectionUtils.isEmpty(list1)) { + return new HashMap<>(); + } else { + list1 = list1.stream().filter(o -> StringUtils.isEmpty(o.getResult())).collect(Collectors.toList()); + if(CollectionUtils.isEmpty(list1)){ + return new HashMap<>(); + } + + Map userMap = this.userService.userMapByIds(list1.stream().map(o -> o.getReviewer()).collect(Collectors.toList())); + List ztStoryreviewDTOS = BeanCopyUtil.copyListProperties(list1, ZtStoryreviewDTO::new); + for (ZtStoryreviewDTO view:ztStoryreviewDTOS) { + ZtUser ztUser = userMap.get(view.getReviewer()); + if(ztUser!=null){ + view.setReviewerName(ztUser.getNickname()); + } + } + + return ztStoryreviewDTOS.stream().collect(Collectors.groupingBy(ZtStoryreviewDTO::getStory)); + + } + } + @Autowired + private IZtStoryFeedbackService storyFeedbackService; + + @Override + @Transactional + public void addStory(ZtStoryDTO dto) { + + + + + ZtStory s = new ZtStory(); + BeanUtils.copyProperties(dto, s); + s.setVersion(1); + s.setOpenedby(RiskUserThreadLocal.get().getName()); + s.setOpenedDate(new Date()); + if(!"draft".equals(dto.getStatus())){ + if(dto.getPsFlag()!=null&&dto.getPsFlag()){ + s.setStatus("active"); + }else{ + s.setStatus("reviewing"); + } + + } + + s.setStage("wait"); + this.baseMapper.insert(s); + + + + ZtStoryspec spec = new ZtStoryspec(); + spec.setStory(s.getId()); + spec.setVersion(1); + spec.setTitle(s.getTitle()); + spec.setSpec(dto.getSpec()); + spec.setVerify(dto.getVerify()); + spec.setFiles(dto.getFileUrl()); + storyspecService.save(spec); + + + if(dto.getFeedbackId()!=null&&dto.getFeedbackId()!=0){ + ZtStoryFeedback storyFeedback = this.storyFeedbackService.getById(dto.getFeedbackId()); + if(!storyFeedback.getStatus().equals("wait")){ + throw new BusinessException("问题反馈已被处理"); + } + storyFeedback.setStatus("doing"); + storyFeedback.setStoryId(s.getId()); + storyFeedback.setUpdateDate(new Date()); + storyFeedback.setUpdateUser(RiskUserThreadLocal.get().getName()); + this.storyFeedbackService.updateById(storyFeedback); + } + if(dto.getUserStory()!=null&&dto.getUserStory()!=0){ + ZtStoryUser storyUser = storyUserService.getById(dto.getUserStory()); + if(storyUser!=null&&"wait".equals(storyUser.getStatus())){ + storyUser.setStatus("active"); + storyUserService.updateById(storyUser); + } + + } + + actionService.addAction(ActionType.XQ, ActionStatus.XJ, s.getId(), "", dto.getProduct(), null, + RiskUserThreadLocal.get().getName(), dto.getClosedreason(), ""); + + if (!CollectionUtils.isEmpty(dto.getUserViewId())) { + for (String str : dto.getUserViewId()) { + ZtStoryreview v = new ZtStoryreview(); + v.setStory(s.getId()); + v.setVersion(s.getVersion()); + v.setReviewer(str); + this.storyreviewService.save(v); + actionService.addAction(ActionType.XQ, ActionStatus.PS, s.getId(), s.getProduct() + "", s.getProject(), null, + RiskUserThreadLocal.get().getName(), dto.getClosedreason(), str); + } + + } + + + + if (s.getProduct() != null&&s.getProduct()!=0) { + ZtProduct product = productService.getById(s.getProduct()); + if("draft".equals(dto.getStatus())){ + product.setDraftStories(product.getDraftStories()+1); + }else{ + product.setReviewingStories(product.getReviewingStories() + 1); + } + + product.setTotalStories(product.getTotalStories() + 1); + this.productService.updateById(product); + } + + if (s.getProduct() == null) { + List list = this.projectstoryService.list(new QueryWrapper().lambda() + .eq(ZtProjectstory::getProject, s.getProject()) + ); + int order = 0; + if (!CollectionUtils.isEmpty(list)) { + ZtProjectstory ztProjectstory = list.get(list.size() - 1); + order = ztProjectstory.getOrder() + 5; + } + ZtProjectstory ztProjectstory = new ZtProjectstory(); + ztProjectstory.setOrder(order); + ztProjectstory.setStory(s.getId()); + ztProjectstory.setProject(s.getProject()); + this.projectstoryService.save(ztProjectstory); + } + + // 1.如果是产品 那么关联 项目 执行 2.如果是项目 关联执行 + if(dto.getExecution()!=null&&dto.getExecution()!=0){ + List syncList = this.projectstoryService.list(new QueryWrapper().lambda().eq(ZtProjectstory::getStory, s.getId()) + .eq(ZtProjectstory::getExecution, dto.getExecution())); + if(CollectionUtils.isEmpty(syncList)){ + if (s.getProduct() != null&&s.getProduct()!=0) { + + List execlist = this.executionprojectService.list(new QueryWrapper().lambda() + .eq(ZtExecutionproject::getExecution, dto.getExecution())); + if(CollectionUtils.isEmpty(execlist)){ + List list = this.projectproductService.list(new QueryWrapper() + .lambda().eq(ZtProjectproduct::getProduct, s.getProduct())); + ZtProjectproduct ztProjectproduct = list.get(0); + + + ZtProjectstory ztProjectstory = new ZtProjectstory(); + ztProjectstory.setOrder(1); + ztProjectstory.setStory(s.getId()); + ztProjectstory.setProject(ztProjectproduct.getProject()); + this.projectstoryService.save(ztProjectstory); + //添加执行 + }else{ + + ZtProjectstory ztProjectstory = new ZtProjectstory(); + ztProjectstory.setOrder(1); + ztProjectstory.setStory(s.getId()); + ztProjectstory.setProject(execlist.get(0).getProject()); + this.projectstoryService.save(ztProjectstory); + } + + + + } + } + + ZtProjectDTO d=new ZtProjectDTO(); + d.setExcludeId(dto.getExecution()); + d.setStoryIds(new ArrayList<>(){{add(s.getId());}}); + projectService.executionSyncStory(d); + } + + + + } + + @Override + @Transactional + public void editStory(ZtStoryDTO dto) { + Integer id = dto.getId(); + ZtStory ztStory = this.baseMapper.selectById(id); + if("closed".equals(ztStory.getStatus())){ + throw new BusinessException("当前已关闭"); + } + BeanUtils.copyProperties(dto, ztStory); + if("draft".equalsIgnoreCase(ztStory.getStatus())){ + ztStory.setStatus("reviewing"); + if (ztStory.getProduct() != null&&ztStory.getProduct()!=0) { + ZtProduct product = productService.getById(ztStory.getProduct()); + product.setDraftStories(product.getDraftStories() - 1); + product.setReviewingStories(product.getReviewingStories() + 1); + this.productService.updateById(product); + } + } + if(!StringUtils.isEmpty(dto.getFileUrl())){ + ZtStoryspec spec = this.storyspecService.getOne(new QueryWrapper().lambda().eq(ZtStoryspec::getStory, id)); + if(spec==null){ + spec = new ZtStoryspec(); + spec.setStory(id); + spec.setVersion(1); + spec.setTitle(ztStory.getTitle()); + spec.setSpec(dto.getSpec()); + spec.setVerify(dto.getVerify()); + spec.setFiles(dto.getFileUrl()); + storyspecService.save(spec); + }else{ + spec.setFiles(dto.getFileUrl()); + storyspecService.update(new UpdateWrapper().lambda().eq(ZtStoryspec::getStory,id).set(ZtStoryspec::getFiles,dto.getFileUrl()) + ); + } + } + + this.baseMapper.updateById(ztStory); + + List userViewId = dto.getUserViewId(); + if(!CollectionUtils.isEmpty(userViewId)){ + storyreviewService.remove(new QueryWrapper().lambda().eq(ZtStoryreview::getStory + , id + )); + + for (String str : dto.getUserViewId()) { + ZtStoryreview v = new ZtStoryreview(); + v.setStory(ztStory.getId()); + v.setVersion(ztStory.getVersion()); + v.setReviewer(str); + this.storyreviewService.save(v); + actionService.addAction(ActionType.XQ, ActionStatus.PS, ztStory.getId(), ztStory.getProduct() + "", ztStory.getProject(), null, + RiskUserThreadLocal.get().getName(), dto.getClosedreason(), str); + } + + } + + if(!StringUtils.isEmpty(dto.getRemark())){ + actionService.addAction(ActionType.XQ, ActionStatus.TJBZ, dto.getId(), dto.getProduct() + "", dto.getProject(), null, + RiskUserThreadLocal.get().getName(), dto.getRemark(), ""); + }else{ + actionService.addAction(ActionType.XQ, ActionStatus.BJ, dto.getId(), dto.getProduct() + "", dto.getProject(), null, + RiskUserThreadLocal.get().getName(), dto.getRemark(), ""); + } + + + + + + + + + + + // 1.如果是产品 那么关联 项目 执行 2.如果是项目 关联执行 + if(dto.getExecution()!=null&&dto.getExecution()!=0){ + + + ZtProjectstory execStory = this.projectstoryService.getOne(new QueryWrapper().lambda().eq(ZtProjectstory::getStory, ztStory.getId()) + .ne(ZtProjectstory::getExecution, 0)); + //如果没有关联过迭代 + if(execStory==null){ + //如果是产品型需求 加项目 加迭代 如果是项目型产品 加迭代 + + if (ztStory.getProduct() != null&&ztStory.getProduct()!=0) { + List execlist = this.executionprojectService.list(new QueryWrapper().lambda() + .eq(ZtExecutionproject::getExecution, dto.getExecution())); + if(CollectionUtils.isEmpty(execlist)){ + List list = this.projectproductService.list(new QueryWrapper() + .lambda().eq(ZtProjectproduct::getProduct, ztStory.getProduct())); + ZtProjectproduct ztProjectproduct = list.get(0); + + + ZtProjectstory ztProjectstory = new ZtProjectstory(); + ztProjectstory.setOrder(1); + ztProjectstory.setStory(ztStory.getId()); + ztProjectstory.setProject(ztProjectproduct.getProject()); + this.projectstoryService.save(ztProjectstory); + //添加执行 + }else{ + + ZtProjectstory ztProjectstory = new ZtProjectstory(); + ztProjectstory.setOrder(1); + ztProjectstory.setStory(ztStory.getId()); + ztProjectstory.setProject(execlist.get(0).getProject()); + this.projectstoryService.save(ztProjectstory); + } + } + ZtProjectDTO d=new ZtProjectDTO(); + d.setExcludeId(dto.getExecution()); + d.setStoryIds(new ArrayList<>(){{add(ztStory.getId());}}); + projectService.executionSyncStory(d); + } + + + } + + } + + + @Override + public PageInfo projectStoryPageList(ZtProjectQo qo) { + Page page = PageHelper.startPage(qo.getCurrentPage(), qo.getPageSize()); + Integer productId = qo.getProductId(); + qo.setUserName(RiskUserThreadLocal.get().getName()); + List list = this.baseMapper.projectStoryPageList(qo); + if (!CollectionUtils.isEmpty(list)) { + Map> rMap = getReviewMap(list); + + + Map execMap= getExecutionMapByStory(list); + List userIds = list.stream().map(o -> o.getAssignedTo()).collect(Collectors.toList()); + userIds.addAll(list.stream().map(o -> o.getOpenedby()).collect(Collectors.toList())); + + + Map userMap = this.userService.userMapByIds(userIds); + + + for (ZtStoryDTO d : list) { + d.setRevieweUser(d.getReviewedby().replaceAll(",", " ")); + d.setViews(rMap.get(d.getId())); + ZtProject ztProject = execMap.get(d.getId()); + if(ztProject!=null){ + d.setPlan(ztProject.getName()); + } + ZtUser ztUser = userMap.get(d.getAssignedTo()); + if(ztUser!=null){ + d.setAssignedToName(ztUser.getNickname()); + } + + ztUser = userMap.get(d.getOpenedby()); + if(ztUser!=null){ + d.setOpenedbyName(ztUser.getNickname()); + } + } + } + + return new PageInfo(list); + } + + //需求id 执行 + private Map getExecutionMapByStory(List list) { + List pStoryList = projectstoryService.list(new QueryWrapper().lambda().ne(ZtProjectstory::getExecution, 0) + .in(ZtProjectstory::getStory, list.stream().map(o -> o.getId()).collect(Collectors.toList())) + ); + + if(CollectionUtils.isEmpty(pStoryList)){ + return new HashMap<>(); + } + + List execIds = pStoryList.stream().map(o -> o.getExecution()).collect(Collectors.toList()); + List ztProjects = this.projectService.listByIds(execIds); + + Map result =new HashMap<>(); + for (ZtProjectstory st:pStoryList) { + Integer execution = st.getExecution(); + List fExecution = ztProjects.stream().filter(o -> o.getId().intValue() == execution.intValue()).collect(Collectors.toList()); + ZtProject ztProject = fExecution.get(0); + result.put(st.getStory(),ztProject); + + } + + return result; + } + + + + @Override + public List execNoSyncProject(ZtProjectQo qo) { + String execution = qo.getExecution(); + + List execList = this.executionprojectService.list(new QueryWrapper().lambda().eq(ZtExecutionproject::getExecution, execution)); + + + if(CollectionUtils.isEmpty(execList)){ + return new ArrayList<>(); + } + + //项目下所有需求 + List allList = this.projectstoryService + .list(new QueryWrapper().lambda() + .in(ZtProjectstory::getProject, execList.stream().map(o->o.getProject()).collect(Collectors.toList())) + .eq(ZtProjectstory::getExecution,0) + ); + if(CollectionUtils.isEmpty(allList)){ + return new ArrayList<>(); + } + //需求已经被绑定的列表 + List syncList = this.projectstoryService + .list(new QueryWrapper().lambda() + .in(ZtProjectstory::getStory, + allList.stream().map(o->o.getStory()).collect(Collectors.toList())) + .ne(ZtProjectstory::getExecution,0) + ); + List syncIds = syncList.stream().map(o -> o.getStory()).collect(Collectors.toList()); + + List resultIds=new ArrayList<>(); + for (ZtProjectstory all:allList) { + if(!syncIds.contains(all.getStory())){ + resultIds.add(all.getStory()); + } + } + if(CollectionUtils.isEmpty(resultIds)){ + return new ArrayList<>(); + } + LambdaQueryWrapper lambda = new QueryWrapper().lambda(); + lambda.eq(ZtStory::getStatus, "active"); + lambda.in(ZtStory::getId,resultIds); + List ztStories = this.baseMapper.selectList(lambda); + if (CollectionUtils.isEmpty(ztStories)) { + return new ArrayList<>(); + } + return BeanCopyUtil.copyListProperties(ztStories, ZtStoryDTO::new); + } + + + @Override + public List storyNoSyncProject(ZtProjectQo qo) { + Integer project = qo.getProject(); + ZtProjectproduct projectproduct = this.projectproductService.getOne(new QueryWrapper() + .lambda().eq(ZtProjectproduct::getProject, project)); + + List list = this.projectstoryService + .list(new QueryWrapper().lambda() +// .eq(ZtProjectstory::getProject, project) + ); + LambdaQueryWrapper lambda = new QueryWrapper().lambda(); + lambda.eq(ZtStory::getProduct, projectproduct.getProduct()); + if (!CollectionUtils.isEmpty(list)) { + lambda.notIn(ZtStory::getId, list.stream().map(o -> o.getStory()).collect(Collectors.toList())); + } + lambda.eq(ZtStory::getStatus, "active"); + List ztStories = this.baseMapper.selectList(lambda); + if (CollectionUtils.isEmpty(ztStories)) { + return new ArrayList<>(); + } + return BeanCopyUtil.copyListProperties(ztStories, ZtStoryDTO::new); + } + + @Override + @Transactional + public void startStory(Integer id, Integer execution) { + + ZtStory ztStory = this.baseMapper.selectById(id); + + if("closed".equals(ztStory.getStatus())){ + throw new BusinessException("当前已关闭"); + } + + List stateList = Arrays.asList("wait", "projected"); + + + if ("active".equalsIgnoreCase(ztStory.getStatus())) { + if (!stateList.contains(ztStory.getStage())) { + //已经开始 + return; + } + } + + ztStory.setStage("developing"); + ztStory.setStartDate(new Date()); + this.baseMapper.updateById(ztStory); + if(execution!=null&&execution!=0){ + //查 ready + //backlog + ZtKanbancell backlog = this.kanbanlaneService.getZtKanbanlane("story", "backlog", execution); + ZtKanbancell ready = this.kanbanlaneService.getZtKanbanlane("story", "ready", execution); + ZtKanbancell toCell = this.kanbanlaneService.getZtKanbanlane("story", "developing", execution); + Integer fromId = backlog.getCards().contains(id.toString()) ? backlog.getColumn() : ready.getColumn(); + + + KanbanQo qo = new KanbanQo(); + qo.setStatusType("developing"); + qo.setTabType("story"); + qo.setId(ztStory.getId()); + qo.setFromId(fromId); + qo.setToId(toCell.getColumn()); + kanbanlaneService.changeStatus(qo); + } + actionService.addAction(ActionType.XQ, ActionStatus.KS, ztStory.getId(), ztStory.getProduct() + "", ztStory.getProject(), null, + RiskUserThreadLocal.get().getName(), null, ""); + + } + + @Override + @Transactional + public void finishStory(Integer id, Integer execution) { + ZtStory ztStory = this.baseMapper.selectById(id); + + if(!Arrays.asList("wait","projected","developing").contains(ztStory.getStage())){ + return; + } + List list = taskService.list(new QueryWrapper().lambda().eq(ZtTask::getStory, id) + .in(ZtTask::getStatus, Arrays.asList("wait", "doing", "pause"))); + + if (!CollectionUtils.isEmpty(list)) { + return; + } + ztStory.setStage("developed"); + this.baseMapper.updateById(ztStory); + kanbanlaneService.changeStatus(execution,id,"story","developed"); + actionService.addAction(ActionType.XQ, ActionStatus.WC, ztStory.getId(), ztStory.getProduct() + "", ztStory.getProject(), null, + RiskUserThreadLocal.get().getName(), null, ""); + } + + @Override + @Transactional + public void changeStatus(ZtStoryDTO dto) { + +// {key:'研发中',value:'developing'} +// ,{key:'研发完毕',value:'developed'} +// ,{key:'测试中',value:'testing'} +// ,{key:'测试完毕',value:'tested'} +// ,{key:'已发布',value:'released'} +// ,{key:'已验收',value:'verified'} +// ,{key:'已关闭',value:'closed'} +// String status = dto.getStage(); + List idList = dto.getIdList(); + for (Integer i : idList) { + ZtStory ztStory = this.baseMapper.selectById(i); + if("closed".equals(ztStory.getStatus())){ + throw new BusinessException("当前已关闭"); + } + List execIds = getExecutionId(ztStory); + if(CollectionUtils.isEmpty(execIds)&&!"closed".equalsIgnoreCase(dto.getStage())){ + throw new BusinessException("当前无迭代,不可以更改"); + } + + String oldStatus = ztStory.getStage(); + + + String newStatus =dto.getStage(); + + if("closed".equalsIgnoreCase(newStatus)){ + ztStory.setStatus("closed"); + ztStory.setStage("closed"); + ztStory.setClosedby(RiskUserThreadLocal.get().getName()); + ztStory.setCloseddate(new Date()); + //关闭所有任务 //所有bug + this.closeTaskBug(i); + actionService.addAction(ActionType.XQ, ActionStatus.GB, ztStory.getId(), ztStory.getProduct() + "", ztStory.getProject(), null, + RiskUserThreadLocal.get().getName(), null, ""); + }else{ + ztStory.setStage(newStatus); + } + if("released".equals(newStatus)&&ztStory.getEndDate()==null){ + ztStory.setEndDate(new Date()); + actionService.addAction(ActionType.XQ, ActionStatus.FB, ztStory.getId(), ztStory.getProduct() + "", ztStory.getProject(), null, + RiskUserThreadLocal.get().getName(), null, ""); + } + if("developing".equals(newStatus)&&ztStory.getStartDate()==null){ + ztStory.setStartDate(new Date()); + actionService.addAction(ActionType.XQ, ActionStatus.KS, ztStory.getId(), ztStory.getProduct() + "", ztStory.getProject(), null, + RiskUserThreadLocal.get().getName(), null, ""); + } + this.baseMapper.updateById(ztStory); + + for (Integer execId : execIds) { + if(execId!=null){ + this.kanbanlaneService.changeStatus(execId, i, "story", dto.getStage()); + if (!oldStatus.equalsIgnoreCase(newStatus)&&ztStory.getProduct()!=0) { + + ProductStoryStatus oldPStatus = null; + ProductStoryStatus newPStatus = null; + + oldPStatus = getProductStatus(oldStatus); + + newPStatus = getProductStatus(newStatus); + + this.productService.productChangeStatus(ztStory.getProduct(), oldPStatus, newPStatus); + } + } + } + } + + } + + + @Override + @Transactional + public void changeAssignedTo(ZtStoryDTO dto) { + List idList = dto.getIdList(); + for (Integer i : idList) { + ZtStory ztStory = this.baseMapper.selectById(i); + if("closed".equals(ztStory.getStatus())){ + throw new BusinessException("当前已关闭"); + } + ztStory.setAssignedTo(dto.getAssignedTo()); + ztStory.setLasteditedby(RiskUserThreadLocal.get().getName()); + ztStory.setLastediteddate(new Date()); + this.baseMapper.updateById(ztStory); + } + } + + @Override + @Transactional + public void changeExecution(ZtStoryDTO dto) { + List idList = dto.getIdList(); + for (Integer i : idList) { + ZtStory ztStory = this.baseMapper.selectById(i); + if("closed".equals(ztStory.getStatus())){ + throw new BusinessException("当前已关闭"); + } + ztStory.setLasteditedby(RiskUserThreadLocal.get().getName()); + ztStory.setLastediteddate(new Date()); + this.baseMapper.updateById(ztStory); + + + // 1.如果是产品 那么关联 项目 执行 2.如果是项目 关联执行 + if(dto.getExecution()!=null&&dto.getExecution()!=0){ + + + ZtProjectstory execStory = this.projectstoryService.getOne(new QueryWrapper().lambda().eq(ZtProjectstory::getStory, ztStory.getId()) + .ne(ZtProjectstory::getExecution, 0)); + //如果没有关联过迭代 + if(execStory==null){ + //如果是产品型需求 加项目 加迭代 如果是项目型产品 加迭代 + + if (ztStory.getProduct() != null&&ztStory.getProduct()!=0) { + List execlist = this.executionprojectService.list(new QueryWrapper().lambda() + .eq(ZtExecutionproject::getExecution, dto.getExecution())); + if(CollectionUtils.isEmpty(execlist)){ + List list = this.projectproductService.list(new QueryWrapper() + .lambda().eq(ZtProjectproduct::getProduct, ztStory.getProduct())); + ZtProjectproduct ztProjectproduct = list.get(0); + + + ZtProjectstory ztProjectstory = new ZtProjectstory(); + ztProjectstory.setOrder(1); + ztProjectstory.setStory(ztStory.getId()); + ztProjectstory.setProject(ztProjectproduct.getProject()); + this.projectstoryService.save(ztProjectstory); + //添加执行 + }else{ + + ZtProjectstory ztProjectstory = new ZtProjectstory(); + ztProjectstory.setOrder(1); + ztProjectstory.setStory(ztStory.getId()); + ztProjectstory.setProject(execlist.get(0).getProject()); + this.projectstoryService.save(ztProjectstory); + } + } + ZtProjectDTO d=new ZtProjectDTO(); + d.setExcludeId(dto.getExecution()); + d.setStoryIds(new ArrayList<>(){{add(ztStory.getId());}}); + projectService.executionSyncStory(d); + } + + + } + + } + } + + private void closeTaskBug(Integer i) { + List taskList = this.taskService.list(new QueryWrapper().lambda().eq(ZtTask::getStory,i).ne(ZtTask::getStatus,"closed")); + + if(!CollectionUtils.isEmpty(taskList)){ + for (ZtTask t:taskList) { + + ZtTaskDTO dto=new ZtTaskDTO(); + dto.setId(t.getId()); + this.taskService.closeTask(dto); + } + } + + + List bugList = this.bugService.list(new QueryWrapper().lambda().eq(ZtBug::getStory,i).ne(ZtBug::getStatus,"closed")); + for (ZtBug bug:bugList) { + ZtBugQo qo=new ZtBugQo(); + qo.setId(bug.getId()); + qo.setStatus("closed"); + this.bugService.changeStatus(qo); + } + + + } + + + //获取执行列表 + private List getExecutionId(ZtStory ztStory) { + + List list = this.projectstoryService.list(new QueryWrapper().lambda() + .eq(ZtProjectstory::getStory, ztStory.getId()) + .ne(ZtProjectstory::getExecution, 0) + ); + if(CollectionUtils.isEmpty(list)){ + return new ArrayList<>(); + }else{ + return list.stream().map(o->o.getExecution()).collect(Collectors.toList()); + } + } + + @Override + @Transactional + public void closeStory(ZtStoryDTO dto) { + ZtStory ztStory = this.baseMapper.selectById(dto.getId()); + if (ztStory == null) { + throw new BusinessException("未查询到"); + } + if("closed".equals(ztStory.getStatus())){ + throw new BusinessException("当前已关闭"); + } + String status = ztStory.getStatus(); + + ztStory.setClosedby(RiskUserThreadLocal.get().getName()); + ztStory.setClosedreason(dto.getClosedreason()); + ztStory.setStage("closed"); + ztStory.setStatus("closed"); + this.baseMapper.updateById(ztStory); + actionService.addAction(ActionType.XQ, ActionStatus.GB, ztStory.getId(), ztStory.getProduct() + "", null, null, + RiskUserThreadLocal.get().getName(), dto.getClosedreason(), "Done|draft"); + if(ztStory.getProduct()!=null&&ztStory.getProduct().intValue()!=0){ + ProductStoryStatus oldPStatus = getProductStatus(status); + this.productService.productChangeStatus(ztStory.getProduct(), oldPStatus, ProductStoryStatus.GB); + } + + } + + //指派 + @Override + public void assignedTo(ZtStoryDTO dto) { + ZtStory ztStory = this.baseMapper.selectById(dto.getId()); + if (ztStory == null) { + throw new BusinessException("未查询到"); + } + if("closed".equals(ztStory.getStatus())){ + throw new BusinessException("当前已关闭"); + } + ztStory.setAssignedTo(StringUtils.isEmpty(dto.getAssignedTo()) ? "" : dto.getAssignedTo()); + ztStory.setAssigneddate(new Date()); + this.baseMapper.updateById(ztStory); + + actionService.addAction(ActionType.XQ, ActionStatus.FP, ztStory.getId(), ztStory.getProduct() + "", null, null, + RiskUserThreadLocal.get().getName(), dto.getDesc(), ztStory.getAssignedTo()); + + } + + //撤销评审 + @Override + public void cancelReview(ZtStoryDTO dto) { + ZtStory ztStory = this.baseMapper.selectById(dto.getId()); + + if("closed".equals(ztStory.getStatus())){ + throw new BusinessException("当前已关闭"); + } + //删除评审表 + this.storyreviewService.remove(new QueryWrapper().lambda() + .eq(ZtStoryreview::getStory, ztStory.getId())); + + //更新表 + this.baseMapper.update(new UpdateWrapper() + .lambda().set(ZtStory::getStatus, "draft") + .eq(ZtStory::getId, ztStory.getId())); + //添加action + actionService.addAction(ActionType.XQ, ActionStatus.CX, ztStory.getId(), ztStory.getProduct() + "", null, null, + RiskUserThreadLocal.get().getName(), dto.getDesc(), ztStory.getAssignedTo()); + } + + //添加评审 + @Override + public void addReview(ZtStoryDTO dto) { + ZtStory ztStory = this.baseMapper.selectById(dto.getId()); + if("closed".equals(ztStory.getStatus())){ + throw new BusinessException("当前已关闭"); + } + if (!"draft".equalsIgnoreCase(ztStory.getStatus())) { + throw new BusinessException("当前状态无法添加"); + } + ztStory.setStatus("reviewing"); + this.baseMapper.updateById(ztStory); + if (!CollectionUtils.isEmpty(dto.getUserViewId())) { + for (String str : dto.getUserViewId()) { + ZtStoryreview v = new ZtStoryreview(); + v.setStory(ztStory.getId()); + v.setVersion(ztStory.getVersion()); + v.setReviewer(str); + this.storyreviewService.save(v); + } + } + //添加action + actionService.addAction(ActionType.XQ, ActionStatus.PS, ztStory.getId(), ztStory.getProduct() + "", null, null, + RiskUserThreadLocal.get().getName(), dto.getDesc(), ztStory.getAssignedTo()); + } + //验收 + @Override + public void storyYs(ZtStoryDTO dto) { + ZtStory ztStory = this.baseMapper.selectById(dto.getId()); + if("closed".equals(ztStory.getStatus())){ + throw new BusinessException("当前已关闭"); + } + //已发布 + Integer revieweResult = dto.getRevieweResult(); + ztStory.setStage("verified"); + ztStory.setYsFlag(revieweResult); + this.baseMapper.updateById(ztStory); + ActionStatus status; + if(revieweResult==1){ + status=ActionStatus.YSTG; + }else{ + status=ActionStatus.YSBTG; + } + + //添加action + actionService.addAction(ActionType.XQ, status, ztStory.getId(), ztStory.getProduct() + "", null, null, + RiskUserThreadLocal.get().getName(), dto.getDesc(), ztStory.getAssignedTo()); + } + + @Override + public ZtStoryDTO getStoryById(Integer id) { + ZtStory ztStory = this.baseMapper.selectById(id); + ZtStoryDTO d=new ZtStoryDTO(); + BeanUtils.copyProperties(ztStory,d); + List userIds = new ArrayList<>(); + userIds.add(ztStory.getAssignedTo()); + userIds.add(ztStory.getOpenedby()); + + Map userMap = this.userService.userMapByIds(userIds); + + + Map> rMap = getReviewMap(Arrays.asList(d)); + + + d.setRevieweUser(d.getReviewedby().replaceAll(",", " ")); + d.setViews(rMap.get(d.getId())); + ZtUser ztUser = userMap.get(d.getAssignedTo()); + if(ztUser!=null){ + d.setAssignedToName(ztUser.getNickname()); + } + + ztUser = userMap.get(d.getOpenedby()); + if(ztUser!=null){ + d.setOpenedbyName(ztUser.getNickname()); + } + + ZtStoryspec storyspec = this.storyspecService.getOne(new QueryWrapper().lambda().eq(ZtStoryspec::getStory, d.getId())); + + if(storyspec!=null){ + d.setFiles(storyspec.getFiles()); + d.setFileUrl(storyspec.getFiles()); + d.setSpec(storyspec.getSpec()); + d.setVerify(storyspec.getVerify()); + } + return d; + } + + @Override + public List execListByProject(ZtStoryDTO dto) { + + List projects = dto.getProjects(); + + List list = this.executionprojectService.list(new QueryWrapper().lambda() + .in(ZtExecutionproject::getProject, projects)); + if(CollectionUtils.isEmpty(list)){ + return new ArrayList<>(); + } + + return this.projectService.listByIds(list.stream().map(o->o.getExecution()).collect(Collectors.toList())); + } + + + + @Override + public void userReview(ZtStoryDTO dto) { + ZtStory ztStory = this.baseMapper.selectById(dto.getId()); + if("closed".equals(ztStory.getStatus())){ + throw new BusinessException("当前已关闭"); + } + ZtStoryreview view = this.storyreviewService.getOne(new QueryWrapper().lambda() + .eq(ZtStoryreview::getStory, ztStory.getId()) + .eq(ZtStoryreview::getReviewer, RiskUserThreadLocal.get().getName()) + ); + if (view == null) { + throw new BusinessException("当前无评审"); + } + LambdaUpdateWrapper lambda = new UpdateWrapper + ().lambda(); + ActionStatus actionStatus = null; + if (dto.getRevieweResult() == 1) { + //通过 + lambda.set(ZtStoryreview::getResult, "pass"); + actionStatus=ActionStatus.PSTG; + } else if (dto.getRevieweResult() == 2) { + lambda.set(ZtStoryreview::getResult, "reject"); + actionStatus=ActionStatus.PSYDMQ; + } else { + lambda.set(ZtStoryreview::getResult, "reject"); + actionStatus=ActionStatus.PSBTG; + } + lambda.set(ZtStoryreview::getReviewdate, new Date()); + lambda.eq(ZtStoryreview::getStory, ztStory.getId()); + lambda.eq(ZtStoryreview::getReviewer, RiskUserThreadLocal.get().getName()); + this.storyreviewService.update(lambda); + + + ztStory.setReviewedby(StringUtils.isEmpty(ztStory.getReviewedby()) ? "," + RiskUserThreadLocal.get().getName() : ztStory.getReviewedby() + "," + RiskUserThreadLocal.get().getName()); + List list = this.storyreviewService.list(new QueryWrapper().lambda() + .eq(ZtStoryreview::getStory, ztStory.getId()) + ); + + if (list.stream().filter(o -> o.getReviewdate() != null).collect(Collectors.toList()).size() >= list.size()) { + //end + List rejectList = list.stream().filter(o -> "reject".equalsIgnoreCase(o.getResult())).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(rejectList)) { + ztStory.setStatus("closed"); + } else { + ztStory.setStatus("active"); + ztStory.setStage("wait"); + ztStory.setRevieweddate( + new Date() + ); + } + } + if (dto.getRevieweResult() == 2 || dto.getRevieweResult() == 0) { + ztStory.setStatus("closed"); + ztStory.setClosedreason(dto.getClosedreason()); + } + this.baseMapper.updateById(ztStory); + + //添加action + actionService.addAction(ActionType.XQ, actionStatus, ztStory.getId(), ztStory.getProduct() + "", ztStory.getProject(), null, + RiskUserThreadLocal.get().getName(), dto.getDesc(), ztStory.getAssignedTo()); + + + if("active".equalsIgnoreCase(ztStory.getStatus())||"closed".equalsIgnoreCase(ztStory.getStatus())){ + Integer product = ztStory.getProduct(); + if(product!=null&&product!=0){ + ZtProduct ztProduct = this.productService.getById(product); + ztProduct.setReviewingStories(ztProduct.getReviewingStories()-1); + if("active".equalsIgnoreCase(ztStory.getStatus())){ + ztProduct.setActiveStories(ztProduct.getActiveStories()+1); + }else{ + ztProduct.setClosedStories(ztProduct.getClosedStories()+1); + } + this.productService.updateById(ztProduct); + } + + } + + + } + + @Override + public List storyListByProductId(ZtProjectQo qo) { + LambdaQueryWrapper eq = new QueryWrapper() + .lambda().eq(ZtStory::getProduct, qo.getProductId()) + .eq(ZtStory::getDeleted, "0"); + if (qo.getProject() != null) { + List list = taskService.list(new QueryWrapper().lambda() + .eq(ZtTask::getExecution, qo.getProject())); + if (CollectionUtils.isEmpty(list)) { + return new ArrayList<>(); + } + eq.in(ZtStory::getId, list.stream().map(o -> o.getStory()).collect(Collectors.toList())); + } + + List ztStories = this.baseMapper.selectList(eq); + if (CollectionUtils.isEmpty(ztStories)) { + return new ArrayList<>(); + } else { + return BeanCopyUtil.copyListProperties(ztStories, ZtStoryDTO::new); + } + } + + @Override + public List storyListByProject(ZtProjectQo qo) { + LambdaQueryWrapper eq = new QueryWrapper() + .lambda().eq(ZtStory::getProject, qo.getId()) + .eq(ZtStory::getDeleted, "0"); + if (qo.getProject() != null) { + List list = taskService.list(new QueryWrapper().lambda() + .eq(ZtTask::getExecution, qo.getProject())); + if (CollectionUtils.isEmpty(list)) { + return new ArrayList<>(); + } + eq.in(ZtStory::getId, list.stream().map(o -> o.getStory()).collect(Collectors.toList())); + } + + List ztStories = this.baseMapper.selectList(eq); + if (CollectionUtils.isEmpty(ztStories)) { + return new ArrayList<>(); + } else { + return BeanCopyUtil.copyListProperties(ztStories, ZtStoryDTO::new); + } + } + + + + + @Override + public List storyListByExecution(ZtProjectQo qo) { + List list = projectstoryService.list(new QueryWrapper().lambda().eq(ZtProjectstory::getExecution, qo.getId())); + + if (CollectionUtils.isEmpty(list)) { + return new ArrayList<>(); + } + List ztStories = IZtStoryService.listByIds(list.stream().map(o -> o.getStory()).collect(Collectors.toList())); + + List storyList = BeanCopyUtil.copyListProperties(ztStories, ZtStoryDTO::new); + + return storyList; + } + + + public ProductStoryStatus getProductStatus(String status) { + + + // {key:'研发中',value:'developing'} +// ,{key:'研发完毕',value:'developed'} +// ,{key:'测试中',value:'testing'} +// ,{key:'测试完毕',value:'tested'} +// ,{key:'已发布',value:'released'} +// ,{key:'已验收',value:'verified'} +// ,{key:'已关闭',value:'closed'} + + ProductStoryStatus oldPStatus = null; + if (status.equalsIgnoreCase("developing")||status.equalsIgnoreCase("testing") + ||status.equalsIgnoreCase("tested") + ) { + + oldPStatus = ProductStoryStatus.JH; + } + if (status.equalsIgnoreCase("released")||status.equalsIgnoreCase("verified")) { + oldPStatus = ProductStoryStatus.WC; + } + if (status.equalsIgnoreCase("closed")) { + oldPStatus = ProductStoryStatus.GB; + } + return oldPStatus; + } + + +} diff --git a/src/main/java/com/sa/zentao/service/impl/ZtStoryUserServiceImpl.java b/src/main/java/com/sa/zentao/service/impl/ZtStoryUserServiceImpl.java new file mode 100644 index 0000000..6f6e40d --- /dev/null +++ b/src/main/java/com/sa/zentao/service/impl/ZtStoryUserServiceImpl.java @@ -0,0 +1,165 @@ +package com.sa.zentao.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.github.pagehelper.Page; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.sa.zentao.conf.RiskUserThreadLocal; +import com.sa.zentao.dao.*; +import com.sa.zentao.entity.*; +import com.sa.zentao.enums.ActionStatus; +import com.sa.zentao.enums.ActionType; +import com.sa.zentao.mapper.ZtStoryUserMapper; +import com.sa.zentao.qo.StoryQo; +import com.sa.zentao.service.IZtActionService; +import com.sa.zentao.service.IZtStoryService; +import com.sa.zentao.service.IZtStoryUserService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.sa.zentao.service.IZtUserService; +import com.sa.zentao.utils.Constant; +import com.sa.zentao.utils.DateUtils; +import org.apache.commons.lang3.StringUtils; +import org.quartz.CronExpression; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; + +import java.util.*; +import java.util.stream.Collectors; + +/** + *

+ * 服务实现类 + *

+ * + * @author gqb + * @since 2024-10-21 + */ +@Service +public class ZtStoryUserServiceImpl extends ServiceImpl implements IZtStoryUserService { + + @Autowired + private IZtActionService actionService; + + @Autowired + private IZtUserService userService; + + @Autowired + private IZtStoryService storyService; + + + @Override + @Transactional + public void addStory(ZtStoryUserDTO dto) { + + + ZtStoryUser s = new ZtStoryUser(); + BeanUtils.copyProperties(dto, s); + s.setOpeneddate(new Date()); + s.setOpenedby(RiskUserThreadLocal.get().getName()); + s.setVersion(1); + s.setLasteditedby(RiskUserThreadLocal.get().getName()); + s.setLastediteddate(new Date()); + s.setStatus("active"); + s.setStage("wait"); + this.baseMapper.insert(s); + + + + actionService.addAction(ActionType.USERXQ, ActionStatus.XJ, s.getId(), dto.getProduct()+"", null, null, + RiskUserThreadLocal.get().getName(), dto.getClosedreason(), ""); + } + + @Override + @Transactional + public void editStory(ZtStoryUserDTO dto) { + Integer id = dto.getId(); + ZtStoryUser ztStory = this.baseMapper.selectById(id); + + if(ztStory.getStatus().equals("closed")||ztStory.getStatus().equals("finished")){ + throw new BusinessException("当前状态无法更改"); + } + + if("closed".equals(ztStory.getStatus())){ + throw new BusinessException("当前已关闭"); + } + BeanUtils.copyProperties(dto, ztStory); + ztStory.setLasteditedby(RiskUserThreadLocal.get().getName()); + ztStory.setLastediteddate(new Date()); + this.baseMapper.updateById(ztStory); + + actionService.addAction(ActionType.USERXQ, ActionStatus.BJ, dto.getId(), dto.getProduct() + "", dto.getProject(), null, + RiskUserThreadLocal.get().getName(), dto.getRemark(), ""); + + } + + @Override + public PageInfo pageList(StoryQo qo) { + Page page = PageHelper.startPage(qo.getCurrentPage(), qo.getPageSize()); + + qo.setUserName(RiskUserThreadLocal.get().getName()); + List list = this.baseMapper.pageList(qo); + if (!CollectionUtils.isEmpty(list)) { + + + List userIds = list.stream().map(o -> o.getOpenedby()).collect(Collectors.toList()); + userIds.addAll(list.stream().map(o -> o.getLasteditedby()).collect(Collectors.toList())); + + + Map userMap = this.userService.userMapByIds(userIds); + + Map> storyUserMap = getStoryUserMap(list); + + + for (ZtStoryUserDTO d : list) { + ZtUser ztUser = userMap.get(d.getOpenedby()); + if(ztUser!=null){ + d.setOpenedby(ztUser.getNickname()); + } + + ztUser = userMap.get(d.getLasteditedby()); + if(ztUser!=null){ + d.setLasteditedby(ztUser.getNickname()); + } + List ztStories = storyUserMap.get(d.getId()); + if(!CollectionUtils.isEmpty(ztStories)){ + d.setStoryList(ztStories.stream().map(o->o.getTitle()).collect(Collectors.joining(","))); + } + + } + } + + return new PageInfo(list); + } + + @Override + @Transactional + public void changeStatus(ZtStoryUserDTO dto) { + ZtStoryUser ztStoryUser = this.baseMapper.selectById(dto.getId()); + if(ztStoryUser==null||ztStoryUser.getStatus().equals("closed")||ztStoryUser.getStatus().equals("finished")){ + throw new BusinessException("当前状态无法更改"); + } + ztStoryUser.setLastediteddate(new Date()); + ztStoryUser.setLasteditedby(RiskUserThreadLocal.get().getName()); + ztStoryUser.setStatus(dto.getStatus()); + this.baseMapper.updateById(ztStoryUser); + + actionService.addAction(ActionType.USERXQ, ActionStatus.BJ, dto.getId(), dto.getProduct() + "", dto.getProject(), null, + RiskUserThreadLocal.get().getName(), dto.getRemark(), ""); + } + + private Map> getStoryUserMap(List list) { + List ids = list.stream().map(o -> o.getId()).collect(Collectors.toList()); + + List list1 = storyService.list(new QueryWrapper().lambda().in(ZtStory::getUserStory,ids )); + if(CollectionUtils.isEmpty(list1)){ + return new HashMap<>(); + }else{ + return list1.stream().collect(Collectors.groupingBy(ZtStory::getUserStory)); + } + } + +} diff --git a/src/main/java/com/sa/zentao/service/impl/ZtStoryreviewServiceImpl.java b/src/main/java/com/sa/zentao/service/impl/ZtStoryreviewServiceImpl.java new file mode 100644 index 0000000..c35ae1d --- /dev/null +++ b/src/main/java/com/sa/zentao/service/impl/ZtStoryreviewServiceImpl.java @@ -0,0 +1,20 @@ +package com.sa.zentao.service.impl; + +import com.sa.zentao.entity.ZtStoryreview; +import com.sa.zentao.mapper.ZtStoryreviewMapper; +import com.sa.zentao.service.IZtStoryreviewService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 服务实现类 + *

+ * + * @author gqb + * @since 2024-06-24 + */ +@Service +public class ZtStoryreviewServiceImpl extends ServiceImpl implements IZtStoryreviewService { + +} diff --git a/src/main/java/com/sa/zentao/service/impl/ZtStoryspecServiceImpl.java b/src/main/java/com/sa/zentao/service/impl/ZtStoryspecServiceImpl.java new file mode 100644 index 0000000..56bbbbf --- /dev/null +++ b/src/main/java/com/sa/zentao/service/impl/ZtStoryspecServiceImpl.java @@ -0,0 +1,20 @@ +package com.sa.zentao.service.impl; + +import com.sa.zentao.entity.ZtStoryspec; +import com.sa.zentao.mapper.ZtStoryspecMapper; +import com.sa.zentao.service.IZtStoryspecService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 服务实现类 + *

+ * + * @author gqb + * @since 2024-07-03 + */ +@Service +public class ZtStoryspecServiceImpl extends ServiceImpl implements IZtStoryspecService { + +} diff --git a/src/main/java/com/sa/zentao/service/impl/ZtTaskServiceImpl.java b/src/main/java/com/sa/zentao/service/impl/ZtTaskServiceImpl.java new file mode 100644 index 0000000..d73416f --- /dev/null +++ b/src/main/java/com/sa/zentao/service/impl/ZtTaskServiceImpl.java @@ -0,0 +1,441 @@ +package com.sa.zentao.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.github.pagehelper.Page; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.sa.zentao.conf.RiskUserThreadLocal; +import com.sa.zentao.dao.BusinessException; +import com.sa.zentao.dao.ZtEffortDTO; +import com.sa.zentao.dao.ZtStoryDTO; +import com.sa.zentao.dao.ZtTaskDTO; +import com.sa.zentao.entity.*; +import com.sa.zentao.enums.ActionStatus; +import com.sa.zentao.enums.ActionType; +import com.sa.zentao.mapper.ZtTaskMapper; +import com.sa.zentao.qo.KanbanQo; +import com.sa.zentao.qo.ZtProjectQo; +import com.sa.zentao.service.*; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.sa.zentao.utils.BeanCopyUtil; +import com.sa.zentao.utils.KanBanConstant; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; + +import java.util.*; +import java.util.stream.Collectors; + +/** + *

+ * 服务实现类 + *

+ * + * @author gqb + * @since 2024-06-25 + */ +@Service +public class ZtTaskServiceImpl extends ServiceImpl implements IZtTaskService { + + + @Autowired + private IZtActionService actionService; + + @Autowired + private IZtKanbanlaneService kanbanlaneService; + + + @Autowired + private IZtProjectService ztProjectService; + + @Autowired + private IZtProjectproductService projectproductService; + + @Autowired + private IZtStoryService storyService; + + @Autowired + private IZtUserService userService; + + @Autowired + private IZtEffortService effortService; + + + + @Override + public PageInfo taskPageList(ZtProjectQo qo) { + Page page = PageHelper.startPage(qo.getCurrentPage(), qo.getPageSize()); + qo.setUserName(RiskUserThreadLocal.get().getName()); + List list = this.baseMapper.taskPageList(qo); + if(!CollectionUtils.isEmpty(list)){ + List userIds = list.stream().map(o -> o.getFinishedby()).collect(Collectors.toList()); + userIds.addAll(list.stream().map(o -> o.getAssignedTo()).collect(Collectors.toList())); + Map userMap = this.userService.userMapByIds(userIds); + + for (ZtTaskDTO task:list) { + ZtUser ztUser = userMap.get(task.getFinishedby()); + if(ztUser!=null){ + task.setFinishedbyName(ztUser.getNickname()); + } + ztUser = userMap.get(task.getAssignedTo()); + if(ztUser!=null){ + task.setAssignedToName(ztUser.getNickname()); + } + + + } + + } + return new PageInfo(list); + } + + @Autowired + private IZtProjectstoryService projectstoryService; + + @Override + @Transactional + public void addTask(ZtTaskDTO dto) { + ZtTask ztTask = new ZtTask(); + BeanUtils.copyProperties(dto,ztTask); + ztTask.setOpenedby(RiskUserThreadLocal.get().getName()); + ztTask.setOpeneddate(new Date()); + ztTask.setEstimate(dto.getLeft()); + //getExecution()执行 + //项目 + Integer story = ztTask.getStory(); + if(story!=null&&story!=0){ + List list = projectstoryService.list(new QueryWrapper().lambda().eq(ZtProjectstory::getStory, story) + .ne(ZtProjectstory::getProject,0) + ); + + if(!CollectionUtils.isEmpty(list)){ + ztTask.setProject(list.get(0).getProject()); + } + } + ztTask.setStatus("wait"); + this.baseMapper.insert(ztTask); + if(ztTask.getExecution()!=null&&ztTask.getExecution()!=0){ + kanbanlaneService.addTask( dto.getExecution(), Arrays.asList(ztTask)); + } + + ZtProjectproduct projectproduct = projectproductService.getOne(new QueryWrapper().lambda().eq(ZtProjectproduct::getProject, ztTask.getProject())); + + actionService.addAction(ActionType.RW, ActionStatus.XJ,ztTask.getId() + ,projectproduct==null?null:projectproduct.getProduct().toString(),projectproduct==null?null:projectproduct.getProject(),ztTask.getExecution(), + RiskUserThreadLocal.get().getName(),dto.getDesc(),null); + } + + @Override + @Transactional + public void modifyTask(ZtTaskDTO dto) { + ZtTask ztTask = this.baseMapper.selectById(dto.getId()); + if(ztTask==null){ + throw new BusinessException("未查询到数据"); + } + BeanUtils.copyProperties(dto,ztTask); + this.baseMapper.updateById(ztTask); + + Integer storyId = ztTask.getStory(); + ZtStory story = this.storyService.getById(storyId); + + + actionService.addAction(ActionType.RW, ActionStatus.BJ,ztTask.getId(),story.getProduct()==null?"":story.getProduct().toString(),ztTask.getProject(),ztTask.getExecution(), + RiskUserThreadLocal.get().getName(),dto.getDesc(),null); + if(!StringUtils.isEmpty(dto.getRemark())){ + actionService.addAction(ActionType.RW, ActionStatus.TJBZ,ztTask.getId(),story.getProduct()==null?"":story.getProduct().toString(),ztTask.getProject(),ztTask.getExecution(), + RiskUserThreadLocal.get().getName(),dto.getRemark(),null); + } + } + + @Override + @Transactional + public void startTask(ZtTaskDTO dto) { + if(dto.getLeft()().lambda() + .eq(ZtProjectproduct::getProject, ztTask.getProject())); + + actionService.addAction(ActionType.RW, ActionStatus.KS,dto.getId(),projectproduct==null?null:projectproduct.getProduct().toString(),projectproduct==null?null:projectproduct.getProject(),ztTask.getExecution(), + RiskUserThreadLocal.get().getName(),dto.getRemark(),null); + + if(ztTask.getExecution()!=null&&ztTask.getExecution()!=0){ + if(StringUtils.isEmpty(dto.getTabType())){ + KanbanQo qo =new KanbanQo(); + qo.setStatusType("wait"); + qo.setTabType("task"); + qo.setId(dto.getId()); + //查 + ZtKanbancell ztKanbanlane = this.kanbanlaneService.getZtKanbanlane("task", "wait", dto.getExecution()); + + qo.setFromId(ztKanbanlane.getColumn()); + //查 + ztKanbanlane = this.kanbanlaneService.getZtKanbanlane("task", "developing", dto.getExecution()); + qo.setToId(ztKanbanlane.getColumn()); + kanbanlaneService.changeStatus(qo); + }else{ + KanbanQo qo =new KanbanQo(); + qo.setStatusType(dto.getStatusType()); + qo.setTabType(dto.getTabType()); + qo.setId(dto.getId()); + qo.setFromId(dto.getFromId()); + qo.setToId(dto.getToId()); + kanbanlaneService.changeStatus(qo); + } + } + + //处理需求 + this.storyService.startStory(ztTask.getStory(),ztTask.getExecution()); + + + Integer execution = ztTask.getExecution(); + ZtProject project = this.ztProjectService.getById(execution); + if(project!=null&&"wait".equalsIgnoreCase(project.getStatus())){ + project.setStatus("doing"); + this.ztProjectService.updateById(project); + } + + + } + + @Override + @Transactional + public void finishTask(ZtTaskDTO dto) { + ZtTask ztTask = this.baseMapper.selectById(dto.getId()); + if("done".equalsIgnoreCase(ztTask.getStatus())){ + throw new BusinessException("未查询到数据"); + } + ztTask.setConsumed(dto.getConsumed()+ztTask.getConsumed()); + ztTask.setLeft(0f); + ztTask.setStatus("done"); + ztTask.setRealstarted(dto.getRealstarted()); + ztTask.setFinishedby(RiskUserThreadLocal.get().getName()); + ztTask.setFinishedDate(dto.getFinishedDate()); + ztTask.setLasteditedby(RiskUserThreadLocal.get().getName()); + ztTask.setLastediteddate(new Date()); + this.baseMapper.updateById(ztTask); + + ZtEffortDTO e=new ZtEffortDTO(); + BeanUtils.copyProperties(ztTask,e); + e.setObjectid(ztTask.getId()); + e.setLeft(0F); + e.setConsumed(dto.getConsumed()); + this.effortService.add(e); + + //添加action + ZtProjectproduct projectproduct = projectproductService.getOne(new QueryWrapper().lambda().eq(ZtProjectproduct::getProject, ztTask.getProject())); + actionService.addAction(ActionType.RW, ActionStatus.WC,dto.getId(),projectproduct==null?null:projectproduct.getProduct().toString(),projectproduct==null?null:projectproduct.getProject(),ztTask.getExecution(), + RiskUserThreadLocal.get().getName(),dto.getRemark(),null); + if(ztTask.getExecution()!=null&&ztTask.getExecution()!=0){ + if(StringUtils.isEmpty(dto.getTabType())){ + KanbanQo qo =new KanbanQo(); + qo.setStatusType("developed"); + qo.setTabType("task"); + qo.setId(dto.getId()); + //查 + ZtKanbancell ztKanbanlane = this.kanbanlaneService.getZtKanbanlane("task", "developing", ztTask.getExecution()); + + qo.setFromId(ztKanbanlane.getColumn()); + //查 + ztKanbanlane = this.kanbanlaneService.getZtKanbanlane("task", "developed", ztTask.getExecution()); + qo.setToId(ztKanbanlane.getColumn()); + kanbanlaneService.changeStatus(qo); + }else{ + KanbanQo qo =new KanbanQo(); + qo.setStatusType(dto.getStatusType()); + qo.setTabType(dto.getTabType()); + qo.setId(dto.getId()); + qo.setFromId(dto.getFromId()); + qo.setToId(dto.getToId()); + kanbanlaneService.changeStatus(qo); + } + } + + this.storyService.finishStory(ztTask.getStory(),ztTask.getExecution()); + } + + @Override + @Transactional + public void closeTask(ZtTaskDTO dto) { + ZtTask ztTask = this.baseMapper.selectById(dto.getId()); + String status = ztTask.getStatus(); + if("closed".equalsIgnoreCase(ztTask.getStatus())){ + throw new BusinessException("未查询到数据"); + } + ztTask.setLeft(0f); + ztTask.setStatus("closed"); + ztTask.setLasteditedby(RiskUserThreadLocal.get().getName()); + ztTask.setLastediteddate(new Date()); + this.baseMapper.updateById(ztTask); + ZtProjectproduct projectproduct = projectproductService.getOne(new QueryWrapper().lambda().eq(ZtProjectproduct::getProject, ztTask.getProject())); + + //添加action + actionService.addAction(ActionType.RW, ActionStatus.QX,dto.getId(),projectproduct==null?null:projectproduct.getProduct().toString(),ztTask.getProject(),ztTask.getExecution(), + RiskUserThreadLocal.get().getName(),dto.getDesc(),null); + if(ztTask.getExecution()!=null&&ztTask.getExecution()!=0){ + if(StringUtils.isEmpty(dto.getTabType())){ +// KanbanQo qo =new KanbanQo(); +// qo.setStatusType("developed"); +// qo.setTabType("task"); +// qo.setId(dto.getId()); +// // 完成才能取消 +// String cellStatus="developed"; +// ZtKanbancell ztKanbanlane = this.kanbanlaneService.getZtKanbanlane("task", cellStatus, ztTask.getExecution()); +// +// qo.setFromId(ztKanbanlane.getColumn()); +// //查 +// ztKanbanlane = this.kanbanlaneService.getZtKanbanlane("task", "closed", ztTask.getExecution()); +// qo.setToId(ztKanbanlane.getColumn()); + kanbanlaneService.changeStatus(ztTask.getExecution(),ztTask.getId(),"task","closed"); + }else{ + KanbanQo qo =new KanbanQo(); + qo.setStatusType(dto.getStatusType()); + qo.setTabType(dto.getTabType()); + qo.setId(dto.getId()); + qo.setFromId(dto.getFromId()); + qo.setToId(dto.getToId()); + kanbanlaneService.changeStatus(qo); + } + } + + + } + + @Override + public void cancelTask(ZtTaskDTO dto) { + ZtTask ztTask = this.baseMapper.selectById(dto.getId()); + String status = ztTask.getStatus(); + if("cancel".equalsIgnoreCase(ztTask.getStatus())){ + throw new BusinessException("未查询到数据"); + } + ztTask.setLeft(0f); + ztTask.setStatus("cancel"); + ztTask.setLasteditedby(RiskUserThreadLocal.get().getName()); + ztTask.setLastediteddate(new Date()); + this.baseMapper.updateById(ztTask); + ZtProjectproduct projectproduct = projectproductService.getOne(new QueryWrapper().lambda().eq(ZtProjectproduct::getProject, ztTask.getProject())); + + //添加action + actionService.addAction(ActionType.RW, ActionStatus.QX,dto.getId(),projectproduct==null?null:projectproduct.getProduct().toString(),ztTask.getProject(),ztTask.getExecution(), + RiskUserThreadLocal.get().getName(),dto.getDesc(),null); + + if(ztTask.getExecution()!=null&&ztTask.getExecution()!=0){ + if(StringUtils.isEmpty(dto.getTabType())){ + + String cellStatus = KanBanConstant.TaskMap.get(status); + + + KanbanQo qo =new KanbanQo(); + qo.setStatusType("canceled"); + qo.setTabType("task"); + qo.setId(dto.getId()); + ZtKanbancell ztKanbanlane = this.kanbanlaneService.getZtKanbanlane("task", cellStatus, ztTask.getExecution()); + + qo.setFromId(ztKanbanlane.getColumn()); + //查 + ztKanbanlane = this.kanbanlaneService.getZtKanbanlane("task", "canceled", ztTask.getExecution()); + qo.setToId(ztKanbanlane.getColumn()); + kanbanlaneService.changeStatus(qo); + }else{ + KanbanQo qo =new KanbanQo(); + qo.setStatusType(dto.getStatusType()); + qo.setTabType(dto.getTabType()); + qo.setId(dto.getId()); + qo.setFromId(dto.getFromId()); + qo.setToId(dto.getToId()); + kanbanlaneService.changeStatus(qo); + } + } + + } + + + @Override + @Transactional + public void batchAddTask(ZtTaskDTO dto) { + if(CollectionUtils.isEmpty(dto.getList())){ + throw new BusinessException("请检查数据"); + } + long count = dto.getList().stream().filter(o -> StringUtils.isEmpty(o.getName())).count(); + if(count>0){ + throw new BusinessException("请检查数据"); + } + + Integer storyId = dto.getList().get(0).getStory(); + ZtProjectstory projectstory = projectstoryService.getOne(new QueryWrapper().lambda().eq(ZtProjectstory::getStory, storyId) + .ne(ZtProjectstory::getProject, 0) + ); + + + List list = dto.getList(); + List saveList =new ArrayList(); + for (ZtTaskDTO d:list) { + ZtTask ztTask = new ZtTask(); + + BeanUtils.copyProperties(d,ztTask); + ztTask.setProject(projectstory.getProject()); + ztTask.setOpenedby(RiskUserThreadLocal.get().getName()); + ztTask.setOpeneddate(new Date()); + ztTask.setStatus("wait"); + saveList.add(ztTask); + } + this.saveBatch(saveList); + + kanbanlaneService.addTask( list.get(0).getExecution(),saveList); + ZtStory story = storyService.getById(list.get(0).getStory()); + for (ZtTask t:saveList) { + + ZtProjectproduct projectproduct = projectproductService.getOne(new QueryWrapper().lambda().eq(ZtProjectproduct::getProject, story.getProject())); + + actionService.addAction(ActionType.RW, ActionStatus.XJ,t.getId(),projectproduct==null?null:projectproduct.getProduct().toString(),projectproduct==null?null:projectproduct.getProject(),t.getExecution(), + RiskUserThreadLocal.get().getName(),dto.getDesc(),null); + } + + } + + @Override + public List taskListByExecution(ZtTaskDTO dto) { + LambdaQueryWrapper eq = new QueryWrapper().lambda(); + + if(dto.getExecution()!=null){ + eq.eq(ZtTask::getExecution, dto.getExecution()); + } + + + if(dto.getStory()!=null){ + eq.eq(ZtTask::getStory,dto.getStory()); + } + List ztTasks = this.baseMapper.selectList(eq); + if(CollectionUtils.isEmpty(ztTasks)){ + return new ArrayList<>(); + }else{ + return BeanCopyUtil.copyListProperties(ztTasks, ZtTaskDTO::new); + } + } + + +} diff --git a/src/main/java/com/sa/zentao/service/impl/ZtTaskestimateServiceImpl.java b/src/main/java/com/sa/zentao/service/impl/ZtTaskestimateServiceImpl.java new file mode 100644 index 0000000..40b1f57 --- /dev/null +++ b/src/main/java/com/sa/zentao/service/impl/ZtTaskestimateServiceImpl.java @@ -0,0 +1,20 @@ +package com.sa.zentao.service.impl; + +import com.sa.zentao.entity.ZtTaskestimate; +import com.sa.zentao.mapper.ZtTaskestimateMapper; +import com.sa.zentao.service.IZtTaskestimateService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 服务实现类 + *

+ * + * @author gqb + * @since 2024-06-25 + */ +@Service +public class ZtTaskestimateServiceImpl extends ServiceImpl implements IZtTaskestimateService { + +} diff --git a/src/main/java/com/sa/zentao/service/impl/ZtTaskspecServiceImpl.java b/src/main/java/com/sa/zentao/service/impl/ZtTaskspecServiceImpl.java new file mode 100644 index 0000000..6e4f84e --- /dev/null +++ b/src/main/java/com/sa/zentao/service/impl/ZtTaskspecServiceImpl.java @@ -0,0 +1,20 @@ +package com.sa.zentao.service.impl; + +import com.sa.zentao.entity.ZtTaskspec; +import com.sa.zentao.mapper.ZtTaskspecMapper; +import com.sa.zentao.service.IZtTaskspecService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 服务实现类 + *

+ * + * @author gqb + * @since 2024-06-25 + */ +@Service +public class ZtTaskspecServiceImpl extends ServiceImpl implements IZtTaskspecService { + +} diff --git a/src/main/java/com/sa/zentao/service/impl/ZtTaskteamServiceImpl.java b/src/main/java/com/sa/zentao/service/impl/ZtTaskteamServiceImpl.java new file mode 100644 index 0000000..4707b1a --- /dev/null +++ b/src/main/java/com/sa/zentao/service/impl/ZtTaskteamServiceImpl.java @@ -0,0 +1,25 @@ +package com.sa.zentao.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.sa.zentao.entity.ZtTask; +import com.sa.zentao.entity.ZtTaskteam; +import com.sa.zentao.mapper.ZtTaskteamMapper; +import com.sa.zentao.qo.ZtProjectQo; +import com.sa.zentao.service.IZtTaskteamService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + *

+ * 服务实现类 + *

+ * + * @author gqb + * @since 2024-07-17 + */ +@Service +public class ZtTaskteamServiceImpl extends ServiceImpl implements IZtTaskteamService { + +} diff --git a/src/main/java/com/sa/zentao/service/impl/ZtTeamServiceImpl.java b/src/main/java/com/sa/zentao/service/impl/ZtTeamServiceImpl.java new file mode 100644 index 0000000..e040710 --- /dev/null +++ b/src/main/java/com/sa/zentao/service/impl/ZtTeamServiceImpl.java @@ -0,0 +1,20 @@ +package com.sa.zentao.service.impl; + +import com.sa.zentao.entity.ZtTeam; +import com.sa.zentao.mapper.ZtTeamMapper; +import com.sa.zentao.service.IZtTeamService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 服务实现类 + *

+ * + * @author gqb + * @since 2024-07-05 + */ +@Service +public class ZtTeamServiceImpl extends ServiceImpl implements IZtTeamService { + +} diff --git a/src/main/java/com/sa/zentao/service/impl/ZtTestresultServiceImpl.java b/src/main/java/com/sa/zentao/service/impl/ZtTestresultServiceImpl.java new file mode 100644 index 0000000..83d42da --- /dev/null +++ b/src/main/java/com/sa/zentao/service/impl/ZtTestresultServiceImpl.java @@ -0,0 +1,20 @@ +package com.sa.zentao.service.impl; + +import com.sa.zentao.entity.ZtTestresult; +import com.sa.zentao.mapper.ZtTestresultMapper; +import com.sa.zentao.service.IZtTestresultService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 服务实现类 + *

+ * + * @author gqb + * @since 2024-07-29 + */ +@Service +public class ZtTestresultServiceImpl extends ServiceImpl implements IZtTestresultService { + +} diff --git a/src/main/java/com/sa/zentao/service/impl/ZtTesttaskServiceImpl.java b/src/main/java/com/sa/zentao/service/impl/ZtTesttaskServiceImpl.java new file mode 100644 index 0000000..2059821 --- /dev/null +++ b/src/main/java/com/sa/zentao/service/impl/ZtTesttaskServiceImpl.java @@ -0,0 +1,55 @@ +package com.sa.zentao.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.sa.zentao.dao.ZtTesttaskDTO; +import com.sa.zentao.entity.ZtTesttask; +import com.sa.zentao.mapper.ZtTesttaskMapper; +import com.sa.zentao.qo.ZtProjectQo; +import com.sa.zentao.service.IZtProductService; +import com.sa.zentao.service.IZtProjectService; +import com.sa.zentao.service.IZtTesttaskService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +/** + *

+ * 服务实现类 + *

+ * + * @author gqb + * @since 2024-10-21 + */ +@Service +public class ZtTesttaskServiceImpl extends ServiceImpl implements IZtTesttaskService { + @Autowired + private IZtProductService productService; + + @Autowired + private IZtProjectService projectService; + + @Override + public List testtaskByProject(ZtProjectQo qo) { + List ztTesttasks = this.baseMapper.selectList(new QueryWrapper().lambda() + .eq(ZtTesttask::getProject, qo.getProject())); + return new ArrayList<>(); +// if(CollectionUtils.isEmpty(ztTesttasks)){ +// return new ArrayList<>(); +// }else{ +// List ztTesttaskDTOS = BeanCopyUtil.copyListProperties(ztTesttasks, ZtTesttaskDTO::new); +// +// for (ZtTesttaskDTO d:ztTesttaskDTOS ) { +// ZtProduct product = productService.getById(d.getProduct()); +// d.setProductName(product.getName()); +// ZtProject project = projectService.getById(d.getProject()); +// +// d.setProjectName(project.getName()); +// } +// +// return ztTesttaskDTOS; +// } + } +} diff --git a/src/main/java/com/sa/zentao/service/impl/ZtUserServiceImpl.java b/src/main/java/com/sa/zentao/service/impl/ZtUserServiceImpl.java new file mode 100644 index 0000000..12da12a --- /dev/null +++ b/src/main/java/com/sa/zentao/service/impl/ZtUserServiceImpl.java @@ -0,0 +1,245 @@ +package com.sa.zentao.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.github.pagehelper.Page; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.sa.zentao.dao.BusinessException; +import com.sa.zentao.dao.ZtProjectDTO; +import com.sa.zentao.dao.ZtStoryDTO; +import com.sa.zentao.dao.ZtUserDTO; +import com.sa.zentao.entity.VerificationCode; +import com.sa.zentao.entity.ZtProduct; +import com.sa.zentao.entity.ZtProject; +import com.sa.zentao.entity.ZtUser; +import com.sa.zentao.mapper.ZtUserMapper; +import com.sa.zentao.qo.ZtUserQo; +import com.sa.zentao.service.*; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.sa.zentao.utils.BeanCopyUtil; +import com.tencentcloudapi.common.Credential; +import com.tencentcloudapi.common.exception.TencentCloudSDKException; +import com.tencentcloudapi.sms.v20190711.SmsClient; +import com.tencentcloudapi.sms.v20190711.models.SendSmsRequest; +import com.tencentcloudapi.sms.v20190711.models.SendSmsResponse; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; + +import java.time.LocalDateTime; +import java.util.*; +import java.util.stream.Collectors; + +/** + *

+ * 服务实现类 + *

+ * + * @author gqb + * @since 2024-06-18 + */ +@Service +public class ZtUserServiceImpl extends ServiceImpl implements IZtUserService { + + private String TemplateId="2132799"; + private final String tSecretId = "AKIDEWVewIbm5UuCUsqlbZWoGiCe0PqO2fP4"; + private final String tSecretKey = "odMtBQnFoGb4Rq7HUZUFGA61nYFkHd8Z"; + String SmsSdkAppId="1400904325" ; + String signName="中道汽车救援"; + @Autowired + private IZtProjectService projectService; + + @Autowired + private IZtProductService productService; + + @Autowired + private IVerificationCodeService verificationCodeService; + + + + @Override + @Transactional + public PageInfo pageList(ZtUserQo qo) { + Page page = PageHelper.startPage(qo.getCurrentPage(), qo.getPageSize() + + ).doSelectPage(()->this.baseMapper.pageList(qo)); + List list = page.getResult(); + if(CollectionUtils.isEmpty(list)){ + return new PageInfo(); + } + List ztUserDTOS = BeanCopyUtil.copyListProperties(list, ZtUserDTO::new); + PageInfo ztUserDTOPageInfo = new PageInfo<>(ztUserDTOS); + ztUserDTOPageInfo.setTotal(page.getTotal()); + for (ZtUserDTO dto:ztUserDTOS) { + if(dto.getUserType()!=null){ + dto.setUserTypeValue(dto.getUserType().getValue()); + } + if(!StringUtils.isEmpty(dto.getProductIds())){ + String[] split = dto.getProductIds().split(","); + List ztProjects = projectService.listByIds(Arrays.asList(split)); + dto.setProductNames(ztProjects.stream().map(o->o.getName()).collect(Collectors.joining(","))); + + } + } + + return ztUserDTOPageInfo; + } + + @Override + public ZtUser selectByName(String name) { + ZtUser ztUser = this.baseMapper.selectOne(new QueryWrapper().lambda().eq(ZtUser::getAccount, name)); + return ztUser; + } + + @Override + public List storyReviewList(ZtProjectDTO dto) { + + //项目 或者产品id + Integer id = dto.getId(); + if(id==null){ + return new ArrayList<>(); + } + //product project + String type = dto.getType(); + ZtProduct product = this.productService.getById(id); + String reviewer = product.getReviewer(); + if(StringUtils.isEmpty(reviewer)){ + return new ArrayList<>(); + }else{ + String[] split = reviewer.split(","); + List ztUsers = this.list(new QueryWrapper().lambda().in(ZtUser::getAccount,Arrays.asList(split))); + return ztUsers; + } + } + + @Override + public Map userMapByIds(List accounts) { + List ztUsers =null; + if(CollectionUtils.isEmpty(accounts)){ + ztUsers = this.baseMapper.selectList(new QueryWrapper()); + }else{ + ztUsers = this.baseMapper.selectList(new QueryWrapper().lambda().in(ZtUser::getAccount, accounts)); + } + if(CollectionUtils.isEmpty(ztUsers)){ + return new HashMap<>(); + }else{ + return ztUsers.stream().collect(Collectors.toMap(ZtUser::getAccount,o->o)); + } + } + + @Override + @Transactional + public void sendCode(ZtUser user) { + + String account = user.getAccount(); + if(StringUtils.isEmpty(account)){ + throw new BusinessException("请输入账号"); + } + ZtUser ztUser = this.baseMapper.selectOne(new QueryWrapper().lambda().eq(ZtUser::getAccount, account)); + if(ztUser==null){ + throw new BusinessException("未查询到用户"); + } + String phone = ztUser.getPhone(); + + + //如果有就 + List list = verificationCodeService.list(new QueryWrapper().lambda() + .eq(VerificationCode::getPhoneNumber, phone).gt(VerificationCode::getExpirationTime, LocalDateTime.now())); + if(!CollectionUtils.isEmpty(list)){ + throw new BusinessException("重复发送"); + } + String code = generateRandomCode(); + this.sendSms(phone,code); + + + LocalDateTime expirationTime = LocalDateTime.now().plusMinutes(3); + VerificationCode entity = new VerificationCode(); + entity.setPhoneNumber(phone); + entity.setCode(code); + entity.setExpirationTime(expirationTime); + verificationCodeService.save(entity); + + + } + + @Override + public ZtUser login(ZtUser user) { + ZtUser login = getOne(new QueryWrapper().lambda().eq(ZtUser::getAccount, user.getAccount())); + + if(login==null){ + throw new BusinessException("未查询到"); + } + String userPass = login.getPassword(); + String loginPass = user.getPassword(); + if(!userPass.equalsIgnoreCase(loginPass)){ + throw new BusinessException("密码错误"); + } + if(!user.getCode().equals("000000")){ + //如果有就 + List list = verificationCodeService.list(new QueryWrapper().lambda() + .eq(VerificationCode::getPhoneNumber, login.getPhone()).gt(VerificationCode::getExpirationTime, LocalDateTime.now()) + .orderByDesc(VerificationCode::getId) + ); + if(CollectionUtils.isEmpty(list)){ + throw new BusinessException("未查询到验证码"); + } + VerificationCode verificationCode = list.get(0); + if(!verificationCode.getCode().equals(user.getCode())){ + throw new BusinessException("验证码不正确"); + } + } + + + return login; + } + + public boolean sendSms(String phoneNumber, String verificationCode) { + try { + // 初始化腾讯云短信服务客户端 + Credential cred = new Credential(tSecretId, tSecretKey); + SmsClient client = new SmsClient(cred, "ap-guangzhou"); + + SendSmsRequest req = new SendSmsRequest(); + String[] phoneNumberSet = {"+86" + phoneNumber}; // 手机号码格式,+86为中国区号 + req.setPhoneNumberSet(phoneNumberSet); + req.setTemplateID(TemplateId); + req.setSmsSdkAppid(SmsSdkAppId); + req.setSign(signName); + + // 短信模板中的参数,需按短信模板中定义的顺序传递 + String[] templateParams = {verificationCode}; + req.setTemplateParamSet(templateParams); + + // 发送短信 + SendSmsResponse res = client.SendSms(req); + + if (res != null && res.getSendStatusSet().length > 0) { + return "OK".equalsIgnoreCase(res.getSendStatusSet()[0].getCode()); + } else { + return false; + } + + } catch (TencentCloudSDKException e) { + e.printStackTrace(); + return false; + } + } + + public static void main(String[] args) { + ZtUserServiceImpl ztUserService = new ZtUserServiceImpl(); + + ztUserService.sendSms("16601765363","1111"); + } + private String generateRandomCode() { + Random random = new Random(); + StringBuilder sb = new StringBuilder(); + + // 生成6位数字验证码 + for (int i = 0; i < 6; i++) { + sb.append(random.nextInt(10)); + } + return sb.toString(); + } +} diff --git a/src/main/java/com/sa/zentao/service/impl/ZtYwBackupsServiceImpl.java b/src/main/java/com/sa/zentao/service/impl/ZtYwBackupsServiceImpl.java new file mode 100644 index 0000000..145947d --- /dev/null +++ b/src/main/java/com/sa/zentao/service/impl/ZtYwBackupsServiceImpl.java @@ -0,0 +1,85 @@ +package com.sa.zentao.service.impl; + +import com.github.pagehelper.Page; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.sa.zentao.conf.RiskUserThreadLocal; +import com.sa.zentao.dao.ZtYwBackupsDTO; +import com.sa.zentao.dao.ZtYwPatrolDTO; +import com.sa.zentao.entity.ZtUser; +import com.sa.zentao.entity.ZtYwBackups; +import com.sa.zentao.entity.ZtYwPatrol; +import com.sa.zentao.mapper.ZtYwBackupsMapper; +import com.sa.zentao.qo.ZtYwPatrolQo; +import com.sa.zentao.service.IZtUserService; +import com.sa.zentao.service.IZtYwBackupsService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + +import java.util.Date; +import java.util.List; +import java.util.Map; + +/** + *

+ * 服务实现类 + *

+ * + * @author gqb + * @since 2024-11-18 + */ +@Service +public class ZtYwBackupsServiceImpl extends ServiceImpl implements IZtYwBackupsService { + + @Autowired + private IZtUserService userService; + + @Override + public void add(ZtYwBackupsDTO dto) { + ZtYwBackups backups = new ZtYwBackups(); + + BeanUtils.copyProperties(dto,backups); + backups.setCreateUser(RiskUserThreadLocal.get().getName()); + backups.setCreateDate(new Date()); + + this.baseMapper.insert(backups); + + } + + @Override + public PageInfo pageList(ZtYwPatrolQo qo) { + Page page = PageHelper.startPage(qo.getCurrentPage(), qo.getPageSize() + + ).doSelectPage(()->this.baseMapper.pageList(qo)); + List list = page.getResult(); + if(CollectionUtils.isEmpty(list)){ + return new PageInfo(); + } + Map userMap = userService.userMapByIds(null); + for (ZtYwBackupsDTO dto:list) { + ZtUser ztUser = userMap.get(dto.getCreateUser()); + if(ztUser!=null){ + dto.setCreateUser(ztUser.getNickname()); + } + + } + + return new PageInfo(list); + } + + @Override + public void modify(ZtYwBackupsDTO dto) { + ZtYwBackups ztYwBackups = this.baseMapper.selectById( + dto.getId() + ); + if(ztYwBackups!=null){ + + BeanUtils.copyProperties(dto,ztYwBackups); + this.baseMapper.updateById(ztYwBackups); + } + + } +} diff --git a/src/main/java/com/sa/zentao/service/impl/ZtYwChangeServiceImpl.java b/src/main/java/com/sa/zentao/service/impl/ZtYwChangeServiceImpl.java new file mode 100644 index 0000000..08751b9 --- /dev/null +++ b/src/main/java/com/sa/zentao/service/impl/ZtYwChangeServiceImpl.java @@ -0,0 +1,155 @@ +package com.sa.zentao.service.impl; + +import com.github.pagehelper.Page; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.sa.zentao.conf.RiskUserThreadLocal; +import com.sa.zentao.dao.BusinessException; +import com.sa.zentao.dao.ZtYwBackupsDTO; +import com.sa.zentao.dao.ZtYwChangeDTO; +import com.sa.zentao.entity.ZtUser; +import com.sa.zentao.entity.ZtYwChange; +import com.sa.zentao.mapper.ZtYwChangeMapper; +import com.sa.zentao.qo.ZtYwPatrolQo; +import com.sa.zentao.service.IZtUserService; +import com.sa.zentao.service.IZtYwChangeService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + +import java.util.Date; +import java.util.List; +import java.util.Map; + +/** + *

+ * 服务实现类 + *

+ * + * @author gqb + * @since 2024-11-19 + */ +@Service +public class ZtYwChangeServiceImpl extends ServiceImpl implements IZtYwChangeService { + + @Autowired + private IZtUserService userService; + + @Override + public void add(ZtYwChangeDTO dto) { + ZtYwChange ztYwChange = new ZtYwChange(); + + BeanUtils.copyProperties(dto,ztYwChange); + ztYwChange.setCreateDate(new Date()); + ztYwChange.setApplyDate(new Date()); + ztYwChange.setCreateUser(RiskUserThreadLocal.get().getName()); + ztYwChange.setChangeStatus(1); + this.baseMapper.insert(ztYwChange); + } + @Override + public void modify(ZtYwChangeDTO dto) { + ZtYwChange ztYwChange = this.baseMapper.selectById(dto.getId()); + if(ztYwChange==null){ + throw new BusinessException("未查询到数据"); + } + BeanUtils.copyProperties(dto,ztYwChange); + this.baseMapper.updateById(ztYwChange); + } + @Override + public PageInfo pageList(ZtYwPatrolQo qo) { + Page page = PageHelper.startPage(qo.getCurrentPage(), qo.getPageSize() + + ).doSelectPage(()->this.baseMapper.pageList(qo)); + List list = page.getResult(); + if(CollectionUtils.isEmpty(list)){ + return new PageInfo(); + } + Map userMap = userService.userMapByIds(null); + for (ZtYwChangeDTO dto:list) { + ZtUser ztUser = userMap.get(dto.getCreateUser()); + if(ztUser!=null){ + dto.setCreateUser(ztUser.getNickname()); + } + ztUser = userMap.get(dto.getApprovalUser()); + if(ztUser!=null){ + dto.setApprovalUser(ztUser.getNickname()); + } + + ztUser = userMap.get(dto.getChangeEffectUser()); + if(ztUser!=null){ + dto.setChangeEffectUser(ztUser.getNickname()); + } + ztUser = userMap.get(dto.getYsUser()); + if(ztUser!=null){ + dto.setYsUser(ztUser.getNickname()); + } + + } + + return new PageInfo(list); + } + + @Override + public void approval(ZtYwPatrolQo qo) { + ZtYwChange ztYwChange = this.baseMapper.selectById(qo.getId()); + if(ztYwChange==null||ztYwChange.getChangeStatus()!=1){ + throw new BusinessException("请检查"); + } + if(qo.getChangeStatus()==0){ + ztYwChange.setChangeStatus(5); + ztYwChange.setResult("拒绝:"+qo.getResult()); + }else{ + ztYwChange.setChangeStatus(2); + ztYwChange.setResult("通过"); + } + ztYwChange.setApprovalUser(RiskUserThreadLocal.get().getName()); + ztYwChange.setApprovalDate(new Date()); + this.baseMapper.updateById(ztYwChange); + } + + @Override + public void changeStart(ZtYwPatrolQo qo) { + ZtYwChange ztYwChange = this.baseMapper.selectById(qo.getId()); + if(ztYwChange==null||ztYwChange.getChangeStatus()!=2){ + throw new BusinessException("请检查"); + } + ztYwChange.setChangeStatus(3); + ztYwChange.setChangeEffectUser(RiskUserThreadLocal.get().getName()); + ztYwChange.setChangeEffectDate(new Date()); + this.baseMapper.updateById(ztYwChange); + } + + @Override + public void ssResult(ZtYwPatrolQo qo) { + ZtYwChange ztYwChange = this.baseMapper.selectById(qo.getId()); + if(ztYwChange==null||ztYwChange.getChangeStatus()!=3){ + throw new BusinessException("请检查"); + } + ztYwChange.setChangeStatus(4); + ztYwChange.setChangeEffectResult(qo.getChangeEffectResult()); + this.baseMapper.updateById(ztYwChange); + } + + @Override + public void check(ZtYwPatrolQo qo) { + ZtYwChange ztYwChange = this.baseMapper.selectById(qo.getId()); + if(ztYwChange==null||ztYwChange.getChangeStatus()!=4){ + throw new BusinessException("请检查"); + } + //0不通过 + Integer changeStatus = qo.getChangeStatus(); + ztYwChange.setYsDate(new Date()); + if(changeStatus==0){ + ztYwChange.setYsRemark(qo.getResult()); + ztYwChange.setYsFlag(1); + }else{ + ztYwChange.setYsFlag(0); + } + ztYwChange.setYsUser(RiskUserThreadLocal.get().getName()); + this.baseMapper.updateById(ztYwChange); + } + + +} diff --git a/src/main/java/com/sa/zentao/service/impl/ZtYwFaultListServiceImpl.java b/src/main/java/com/sa/zentao/service/impl/ZtYwFaultListServiceImpl.java new file mode 100644 index 0000000..900f52f --- /dev/null +++ b/src/main/java/com/sa/zentao/service/impl/ZtYwFaultListServiceImpl.java @@ -0,0 +1,20 @@ +package com.sa.zentao.service.impl; + +import com.sa.zentao.entity.ZtYwFaultList; +import com.sa.zentao.mapper.ZtYwFaultListMapper; +import com.sa.zentao.service.IZtYwFaultListService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 服务实现类 + *

+ * + * @author gqb + * @since 2024-11-19 + */ +@Service +public class ZtYwFaultListServiceImpl extends ServiceImpl implements IZtYwFaultListService { + +} diff --git a/src/main/java/com/sa/zentao/service/impl/ZtYwFaultServiceImpl.java b/src/main/java/com/sa/zentao/service/impl/ZtYwFaultServiceImpl.java new file mode 100644 index 0000000..0267690 --- /dev/null +++ b/src/main/java/com/sa/zentao/service/impl/ZtYwFaultServiceImpl.java @@ -0,0 +1,99 @@ +package com.sa.zentao.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.github.pagehelper.Page; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.sa.zentao.conf.RiskUserThreadLocal; +import com.sa.zentao.dao.BusinessException; +import com.sa.zentao.dao.ZtYwFaultDTO; +import com.sa.zentao.entity.ZtUser; +import com.sa.zentao.entity.ZtYwFault; +import com.sa.zentao.entity.ZtYwFaultList; +import com.sa.zentao.mapper.ZtYwFaultMapper; +import com.sa.zentao.qo.ZtYwPatrolQo; +import com.sa.zentao.service.IZtUserService; +import com.sa.zentao.service.IZtYwFaultListService; +import com.sa.zentao.service.IZtYwFaultService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + +import java.util.Date; +import java.util.List; +import java.util.Map; + +/** + *

+ * 服务实现类 + *

+ * + * @author gqb + * @since 2024-11-19 + */ +@Service +public class ZtYwFaultServiceImpl extends ServiceImpl implements IZtYwFaultService { + @Autowired + private IZtUserService userService; + + @Autowired + private IZtYwFaultListService ywFaultListService; + + @Override + public void add(ZtYwFaultDTO dto) { + ZtYwFault ywFault=new ZtYwFault(); + BeanUtils.copyProperties(dto,ywFault); + ywFault.setCreateDate(new Date()); + ywFault.setCreateUser(RiskUserThreadLocal.get().getName()); + this.baseMapper.insert(ywFault); + } + @Override + public void modify(ZtYwFaultDTO dto) { + ZtYwFault ztYwFault = this.baseMapper.selectById(dto.getId()); + if(ztYwFault==null){ + throw new BusinessException("未查询到数据"); + } + BeanUtils.copyProperties(dto,ztYwFault); + this.baseMapper.updateById(ztYwFault); + } + + @Override + public void handle(ZtYwFaultDTO dto) { + String userName = dto.getUserName(); + String result1 = dto.getResult(); + + + String result = dto.getResult(); + ZtYwFault ztYwFault = this.baseMapper.selectById(dto.getId()); + ZtYwFaultList ztYwFaultList = new ZtYwFaultList(); + ztYwFaultList.setFaultId(ztYwFault.getId()); + ztYwFaultList.setUserName(userName); + ztYwFaultList.setRemark(result1); + ywFaultListService.save(ztYwFaultList); + } + + @Override + public PageInfo pageList(ZtYwPatrolQo qo) { + Page page = PageHelper.startPage(qo.getCurrentPage(), qo.getPageSize() + + ).doSelectPage(()->this.baseMapper.pageList(qo)); + List list = page.getResult(); + if(CollectionUtils.isEmpty(list)){ + return new PageInfo(); + } + Map userMap = userService.userMapByIds(null); + for (ZtYwFaultDTO dto:list) { + ZtUser ztUser = userMap.get(dto.getCreateUser()); + if(ztUser!=null){ + dto.setCreateUser(ztUser.getNickname()); + } + + } + + return new PageInfo(list); + } + + +} diff --git a/src/main/java/com/sa/zentao/service/impl/ZtYwFwqsearchServiceImpl.java b/src/main/java/com/sa/zentao/service/impl/ZtYwFwqsearchServiceImpl.java new file mode 100644 index 0000000..abe491e --- /dev/null +++ b/src/main/java/com/sa/zentao/service/impl/ZtYwFwqsearchServiceImpl.java @@ -0,0 +1,135 @@ +package com.sa.zentao.service.impl; + +import com.alibaba.fastjson.JSON; +import com.github.pagehelper.Page; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.sa.zentao.conf.RiskUserThreadLocal; +import com.sa.zentao.dao.ServerListDTO; +import com.sa.zentao.dao.ZtYwBackupsDTO; +import com.sa.zentao.dao.ZtYwFwqsearchDTO; +import com.sa.zentao.entity.ZtUser; +import com.sa.zentao.entity.ZtYwFwqsearch; +import com.sa.zentao.mapper.ZtYwFwqsearchMapper; +import com.sa.zentao.qo.ZtYwPatrolQo; +import com.sa.zentao.service.IZtUserService; +import com.sa.zentao.service.IZtYwFwqsearchService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + +import java.util.Date; +import java.util.List; +import java.util.Map; + +/** + *

+ * 服务实现类 + *

+ * + * @author gqb + * @since 2024-11-19 + */ +@Service +public class ZtYwFwqsearchServiceImpl extends ServiceImpl implements IZtYwFwqsearchService { + + @Autowired + private IZtUserService userService; + + @Override + public void add(ZtYwFwqsearchDTO dto) { + ZtYwFwqsearch ztYwFwqsearch = new ZtYwFwqsearch(); + BeanUtils.copyProperties(dto,ztYwFwqsearch); + ztYwFwqsearch.setCreateUser(RiskUserThreadLocal.get().getName()); + ztYwFwqsearch.setCreateDate(new Date()); + ztYwFwqsearch.setIpJson(JSON.toJSONString(dto.getServerList())); + StringBuilder b=new StringBuilder(); + for (ServerListDTO d:dto.getServerList()) { + if(d.getCpu()!=null&&d.getCpu()>100){ + b.append("ip:"+d.getIp() +" cpu :" +d.getCpu() +"%
"); + } + if(d.getMemory()!=null&&d.getMemory()>1){ + b.append("ip:"+d.getIp() +" 内存 :" +d.getMemory() +"%
"); + } + if(d.getAverage()!=null&&d.getAverage()>1){ + b.append("ip:"+d.getIp() +" 负载 :" +d.getAverage() +"%
"); + } + if(d.getDisk()!=null&&d.getDisk()>1){ + b.append("ip:"+d.getIp() +" 硬盘 :" +d.getDisk() +"%
"); + } + } + if(!StringUtils.isEmpty(b.toString())){ + ztYwFwqsearch.setServerError(0); + ztYwFwqsearch.setServerRemark(b.toString()); + }else{ + ztYwFwqsearch.setServerError(1); + } + if(dto.getNetwork()!=null&&dto.getNetwork()>100){ + ztYwFwqsearch.setNetworkError(0); + }else{ + ztYwFwqsearch.setNetworkError(1); + } + + this.baseMapper.insert(ztYwFwqsearch); + } + + @Override + public PageInfo pageList(ZtYwPatrolQo qo) { + Page page = PageHelper.startPage(qo.getCurrentPage(), qo.getPageSize() + + ).doSelectPage(()->this.baseMapper.pageList(qo)); + List list = page.getResult(); + if(CollectionUtils.isEmpty(list)){ + return new PageInfo(); + } + Map userMap = userService.userMapByIds(null); + for (ZtYwFwqsearchDTO dto:list) { + ZtUser ztUser = userMap.get(dto.getCreateUser()); + if(ztUser!=null){ + dto.setCreateUser(ztUser.getNickname()); + } + + } + + return new PageInfo(list); + } + + @Override + public void modify(ZtYwFwqsearchDTO dto) { + ZtYwFwqsearch ztYwFwqsearch = this.baseMapper.selectById(dto.getId()); + ztYwFwqsearch.setIpJson(JSON.toJSONString(dto.getServerList())); + StringBuilder b=new StringBuilder(); + for (ServerListDTO d:dto.getServerList()) { + if(d.getCpu()!=null&&d.getCpu()>100){ + b.append("ip:"+d.getIp() +" cpu :" +d.getCpu() +"%
"); + } + if(d.getMemory()!=null&&d.getMemory()>1){ + b.append("ip:"+d.getIp() +" 内存 :" +d.getMemory() +"%
"); + } + if(d.getAverage()!=null&&d.getAverage()>1){ + b.append("ip:"+d.getIp() +" 负载 :" +d.getAverage() +"%
"); + } + if(d.getDisk()!=null&&d.getDisk()>1){ + b.append("ip:"+d.getIp() +" 硬盘 :" +d.getDisk() +"%
"); + } + } + if(!StringUtils.isEmpty(b.toString())){ + ztYwFwqsearch.setServerError(0); + ztYwFwqsearch.setServerRemark(b.toString()); + }else{ + ztYwFwqsearch.setServerError(1); + } + if(dto.getNetwork()!=null&&dto.getNetwork()>100){ + ztYwFwqsearch.setNetworkError(0); + }else{ + ztYwFwqsearch.setNetworkError(1); + } + ztYwFwqsearch.setAlarmError(dto.getAlarmError()); + ztYwFwqsearch.setAlarmContent(dto.getAlarmContent()); + ztYwFwqsearch.setAlarmRemark(dto.getAlarmRemark()); + this.baseMapper.updateById(ztYwFwqsearch); + } +} diff --git a/src/main/java/com/sa/zentao/service/impl/ZtYwMachineRoomServiceImpl.java b/src/main/java/com/sa/zentao/service/impl/ZtYwMachineRoomServiceImpl.java new file mode 100644 index 0000000..fa64fb7 --- /dev/null +++ b/src/main/java/com/sa/zentao/service/impl/ZtYwMachineRoomServiceImpl.java @@ -0,0 +1,78 @@ +package com.sa.zentao.service.impl; + +import com.github.pagehelper.Page; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.sa.zentao.conf.RiskUserThreadLocal; +import com.sa.zentao.dao.BusinessException; +import com.sa.zentao.dao.ZtYwFwqsearchDTO; +import com.sa.zentao.dao.ZtYwMachineRoomDTO; +import com.sa.zentao.entity.ZtUser; +import com.sa.zentao.entity.ZtYwMachineRoom; +import com.sa.zentao.mapper.ZtYwMachineRoomMapper; +import com.sa.zentao.qo.ZtYwPatrolQo; +import com.sa.zentao.service.IZtUserService; +import com.sa.zentao.service.IZtYwMachineRoomService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + +import java.util.Date; +import java.util.List; +import java.util.Map; + +/** + *

+ * 服务实现类 + *

+ * + * @author gqb + * @since 2024-11-19 + */ +@Service +public class ZtYwMachineRoomServiceImpl extends ServiceImpl implements IZtYwMachineRoomService { + @Autowired + private IZtUserService userService; + @Override + public PageInfo pageList(ZtYwPatrolQo qo) { + Page page = PageHelper.startPage(qo.getCurrentPage(), qo.getPageSize() + + ).doSelectPage(()->this.baseMapper.pageList(qo)); + List list = page.getResult(); + if(CollectionUtils.isEmpty(list)){ + return new PageInfo(); + } + Map userMap = userService.userMapByIds(null); + for (ZtYwMachineRoomDTO dto:list) { + ZtUser ztUser = userMap.get(dto.getCreateUser()); + if(ztUser!=null){ + dto.setCreateUser(ztUser.getNickname()); + } + + } + + return new PageInfo(list); + } + + @Override + public void modify(ZtYwMachineRoomDTO dto) { + ZtYwMachineRoom ztYwMachineRoom = this.baseMapper.selectById(dto.getId()); + + if(ztYwMachineRoom==null){ + throw new BusinessException("未查询到数据"); + } + BeanUtils.copyProperties(dto,ztYwMachineRoom); + this.baseMapper.updateById(ztYwMachineRoom); + } + + @Override + public void add(ZtYwMachineRoomDTO dto) { + ZtYwMachineRoom ztYwMachineRoom = new ZtYwMachineRoom(); + BeanUtils.copyProperties(dto,ztYwMachineRoom); + ztYwMachineRoom.setCreateDate(new Date()); + ztYwMachineRoom.setCreateUser(RiskUserThreadLocal.get().getName()); + this.baseMapper.insert(ztYwMachineRoom); + } +} diff --git a/src/main/java/com/sa/zentao/service/impl/ZtYwPatrolServiceImpl.java b/src/main/java/com/sa/zentao/service/impl/ZtYwPatrolServiceImpl.java new file mode 100644 index 0000000..1bb6acf --- /dev/null +++ b/src/main/java/com/sa/zentao/service/impl/ZtYwPatrolServiceImpl.java @@ -0,0 +1,93 @@ +package com.sa.zentao.service.impl; + +import com.github.pagehelper.Page; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.sa.zentao.conf.RiskUserThreadLocal; +import com.sa.zentao.dao.BusinessException; +import com.sa.zentao.dao.ZtUserDTO; +import com.sa.zentao.dao.ZtYwPatrolDTO; +import com.sa.zentao.entity.ZtProject; +import com.sa.zentao.entity.ZtUser; +import com.sa.zentao.entity.ZtYwPatrol; +import com.sa.zentao.mapper.ZtYwPatrolMapper; +import com.sa.zentao.qo.ZtYwPatrolQo; +import com.sa.zentao.service.IZtUserService; +import com.sa.zentao.service.IZtYwPatrolService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.sa.zentao.utils.BeanCopyUtil; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + +import java.util.Arrays; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + *

+ * 服务实现类 + *

+ * + * @author gqb + * @since 2024-11-18 + */ +@Service +public class ZtYwPatrolServiceImpl extends ServiceImpl implements IZtYwPatrolService { + + @Autowired + private IZtUserService userService; + + @Override + public void add(ZtYwPatrolDTO dto) { + + ZtYwPatrol ztYwPatrol = new ZtYwPatrol(); + BeanUtils.copyProperties(dto,ztYwPatrol); + ztYwPatrol.setPatrolUser(RiskUserThreadLocal.get().getName()); + ztYwPatrol.setCreateDate(new Date()); + ztYwPatrol.setCreateUser(RiskUserThreadLocal.get().getName()); + this.baseMapper.insert(ztYwPatrol); + + } + + @Override + public PageInfo pageList(ZtYwPatrolQo qo) { + Page page = PageHelper.startPage(qo.getCurrentPage(), qo.getPageSize() + + ).doSelectPage(()->this.baseMapper.pageList(qo)); + List list = page.getResult(); + if(CollectionUtils.isEmpty(list)){ + return new PageInfo(); + } + Map userMap = userService.userMapByIds(null); + for (ZtYwPatrolDTO dto:list) { + ZtUser ztUser = userMap.get(dto.getPatrolUser()); + if(ztUser!=null){ + dto.setPatrolUserName(ztUser.getNickname()); + } + ztUser = userMap.get(dto.getCreateUser()); + if(ztUser!=null){ + dto.setCreateUser(ztUser.getNickname()); + } + } + + return new PageInfo(list); + } + + @Override + public void modify(ZtYwPatrolDTO dto) { + + if(dto.getId()==null||this.baseMapper.selectById(dto.getId())==null){ + throw new BusinessException("为查询数据"); + } + + ZtYwPatrol ztYwPatrol = new ZtYwPatrol(); + BeanUtils.copyProperties(dto,ztYwPatrol); + this.baseMapper.updateById(ztYwPatrol); + + } +} diff --git a/src/main/java/com/sa/zentao/service/impl/ZtYwTaskServiceImpl.java b/src/main/java/com/sa/zentao/service/impl/ZtYwTaskServiceImpl.java new file mode 100644 index 0000000..4cc9cf6 --- /dev/null +++ b/src/main/java/com/sa/zentao/service/impl/ZtYwTaskServiceImpl.java @@ -0,0 +1,163 @@ +package com.sa.zentao.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.github.pagehelper.Page; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.sa.zentao.conf.RiskUserThreadLocal; +import com.sa.zentao.dao.BusinessException; +import com.sa.zentao.dao.ZtYwPatrolDTO; +import com.sa.zentao.dao.ZtYwTaskDTO; +import com.sa.zentao.entity.ZtCronDevops; +import com.sa.zentao.entity.ZtCronDevopsUser; +import com.sa.zentao.entity.ZtUser; +import com.sa.zentao.entity.ZtYwTask; +import com.sa.zentao.mapper.ZtYwTaskMapper; +import com.sa.zentao.qo.ZtYwPatrolQo; +import com.sa.zentao.service.IZtUserService; +import com.sa.zentao.service.IZtYwTaskService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.sa.zentao.utils.DateUtils; +import com.sa.zentao.utils.SendEmail; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + +import java.util.Arrays; +import java.util.Date; +import java.util.List; +import java.util.Map; + +/** + *

+ * 服务实现类 + *

+ * + * @author gqb + * @since 2024-11-19 + */ +@Service +public class ZtYwTaskServiceImpl extends ServiceImpl implements IZtYwTaskService { + + @Autowired + private IZtUserService userService; + + @Override + public void add(ZtYwTaskDTO dto) { + + ZtYwTask ztYwTask = new ZtYwTask(); + + BeanUtils.copyProperties(dto,ztYwTask); + ztYwTask.setCreateDate(new Date()); + ztYwTask.setCreateUser(RiskUserThreadLocal.get().getName()); + ztYwTask.setTaskStatus(1); + this.baseMapper.insert(ztYwTask); + } + + @Override + public void modify(ZtYwTaskDTO dto) { + ZtYwTask ztYwTask = this.baseMapper.selectById(dto.getId()); + if(ztYwTask==null){ + throw new BusinessException("未查询到"); + } + BeanUtils.copyProperties(dto,ztYwTask); + this.baseMapper.updateById(ztYwTask); + } + + @Override + public PageInfo pageList(ZtYwPatrolQo qo) { + Page page = PageHelper.startPage(qo.getCurrentPage(), qo.getPageSize() + + ).doSelectPage(()->this.baseMapper.pageList(qo)); + List list = page.getResult(); + if(CollectionUtils.isEmpty(list)){ + return new PageInfo(); + } + Map userMap = userService.userMapByIds(null); + for (ZtYwTaskDTO dto:list) { + ZtUser ztUser = userMap.get(dto.getCreateUser()); + if(ztUser!=null){ + dto.setCreateUser(ztUser.getNickname()); + } + ztUser = userMap.get(dto.getYsUser()); + if(ztUser!=null){ + dto.setYsUser(ztUser.getNickname()); + } + } + + return new PageInfo(list); + } + + @Override + public void start(ZtYwTaskDTO dto) { + + ZtYwTask ztYwTask = this.baseMapper.selectById(dto.getId()); + if(ztYwTask==null||ztYwTask.getTaskStatus()!=2){ + throw new BusinessException("当前任务已开始或不存在"); + } + ztYwTask.setTaskStatus(3); + this.baseMapper.updateById(ztYwTask); + } + + @Override + public void finish(ZtYwTaskDTO dto) { + ZtYwTask ztYwTask = this.baseMapper.selectById(dto.getId()); + if(ztYwTask==null||ztYwTask.getTaskStatus()!=3){ + throw new BusinessException("当前任务已完成或不存在"); + } + ztYwTask.setTaskStatus(4); + ztYwTask.setDeliver(dto.getDeliver()); + this.baseMapper.updateById(ztYwTask); + } + + @Override + public void check(ZtYwTaskDTO dto) { + ZtYwTask ywTask = this.baseMapper.selectById(dto.getId()); + if(ywTask==null||ywTask.getTaskStatus()!=4){ + throw new BusinessException("请检查"); + } + //0不通过 + Integer changeStatus = dto.getTaskStatus(); + ywTask.setYsDate(new Date()); + if(changeStatus==0){ + ywTask.setYsFlag(1); + }else{ + ywTask.setYsFlag(0); + } + ywTask.setResult(dto.getResult()); + ywTask.setYsDate(new Date()); + ywTask.setYsUser(RiskUserThreadLocal.get().getName()); + this.baseMapper.updateById(ywTask); + + } + + @Override + public void remindMail() { + List ztYwTasks = this.baseMapper.selectList(new QueryWrapper().lambda().in(ZtYwTask::getTaskStatus, 1, 2)); + if(!CollectionUtils.isEmpty(ztYwTasks)){ + for (ZtYwTask t:ztYwTasks) { + String mail = t.getMail(); + if(t.getTaskRemindDate().getTime()<(System.currentTimeMillis()+1000)){ + try { + String content ="
${userName}:

        任务描述:${remark}。

        任务开始时间:${date1}。
        任务截止时间:${date2}。

      请及时开启和完成该项工作,并登录IT工作台提交交付物。

       Best Regards.
 
"; + + content=content.replace("${userName}",t.getBelongToUser()); + content= content.replace("${remark}",t.getRemark()); + content= content.replace("${date1}", DateUtils.formatDate(t.getTaskStartDate(),"yy-MM-dd")); + content=content.replace("${date2}",DateUtils.formatDate(t.getTaskEndDate(),"yy-MM-dd")); + SendEmail.sendMessage("任务提醒:"+t.getName(),Arrays.asList(mail), + StringUtils.isEmpty(t.getCopyMail())?null:Arrays.asList(t.getCopyMail()), + content); + }catch (Exception e){ + + } + } + t.setTaskStatus(2); + this.baseMapper.updateById(t); + } + + } + } +} diff --git a/src/main/java/com/sa/zentao/task/SpringTaskJob.java b/src/main/java/com/sa/zentao/task/SpringTaskJob.java new file mode 100644 index 0000000..f8347b1 --- /dev/null +++ b/src/main/java/com/sa/zentao/task/SpringTaskJob.java @@ -0,0 +1,76 @@ +package com.sa.zentao.task; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.sa.zentao.entity.ZtCronDevops; +import com.sa.zentao.service.IZtCronDevopsService; +import com.sa.zentao.service.IZtYwTaskService; +import com.sa.zentao.utils.Constant; +import com.sa.zentao.utils.DateUtils; +import lombok.extern.slf4j.Slf4j; +import org.quartz.CronExpression; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.stream.Collectors; + +@Component +@Slf4j +public class SpringTaskJob { + + + @Autowired + private IZtCronDevopsService cronDevopsService; + + @Autowired + private IZtYwTaskService ywTaskService; + + //每天凌晨一点去 + @Scheduled(cron ="0 0 0 * * ?") + public void dkEveryDay(){ + Constant.devMap.clear(); + List list = cronDevopsService.list(new QueryWrapper().lambda().eq(ZtCronDevops::getStatus, 0)); + Date date = new Date(); + Date dayStartDate = new Date(DateUtils.getDayStartDate(date).getTime()-1000); + Date endDate = DateUtils.getDayStartDate(DateUtils.dateAddDay(date, 1)); + + try { + if(!CollectionUtils.isEmpty(list)){ + for (ZtCronDevops dev:list) { + CronExpression cron = new CronExpression(dev.getCron()); + Date nextExecutionTime = cron.getNextValidTimeAfter(new Date()); + String sDate = DateUtils.formatDate(nextExecutionTime, "yyyy-MM-dd HH:mm:00"); + + if(dayStartDate.getTime()<=nextExecutionTime.getTime()&&endDate.getTime()>=endDate.getTime()){ + List ztCronDevops = Constant.devMap.get(sDate); + if(CollectionUtils.isEmpty(ztCronDevops)){ + ztCronDevops=new ArrayList<>(); + } + ztCronDevops.add(dev); + Constant.devMap.put(sDate,ztCronDevops); + } + } + } + }catch (Exception e){ + + } + + + } + + + // + @Scheduled(cron ="0 0 0 * * ?") + public void ywTask(){ + + ywTaskService.remindMail(); + + } + +} \ No newline at end of file diff --git a/src/main/java/com/sa/zentao/utils/BeanCopyUtil.java b/src/main/java/com/sa/zentao/utils/BeanCopyUtil.java new file mode 100644 index 0000000..640179e --- /dev/null +++ b/src/main/java/com/sa/zentao/utils/BeanCopyUtil.java @@ -0,0 +1,30 @@ +package com.sa.zentao.utils; + +import org.springframework.beans.BeanUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.function.Supplier; + +public class BeanCopyUtil extends BeanUtils { + public BeanCopyUtil() { + } + + public static List copyListProperties(List sources, Supplier target) { + return copyListProperties(sources, target, (BeanCopyUtilCallBack)null); + } + + public static List copyListProperties(List sources, Supplier target, BeanCopyUtilCallBack callBack) { + List list = new ArrayList<>(sources.size()); + for (S source : sources) { + T t = target.get(); + copyProperties(source, t); + list.add(t); + if (callBack != null) { + // 回调 + callBack.callBack(source, t); + } + } + return list; + } +} \ No newline at end of file diff --git a/src/main/java/com/sa/zentao/utils/BeanCopyUtilCallBack.java b/src/main/java/com/sa/zentao/utils/BeanCopyUtilCallBack.java new file mode 100644 index 0000000..d592375 --- /dev/null +++ b/src/main/java/com/sa/zentao/utils/BeanCopyUtilCallBack.java @@ -0,0 +1,6 @@ +package com.sa.zentao.utils; + +@FunctionalInterface +public interface BeanCopyUtilCallBack { + void callBack(S t, T s); +} \ No newline at end of file diff --git a/src/main/java/com/sa/zentao/utils/Constant.java b/src/main/java/com/sa/zentao/utils/Constant.java new file mode 100644 index 0000000..61c9e95 --- /dev/null +++ b/src/main/java/com/sa/zentao/utils/Constant.java @@ -0,0 +1,34 @@ +package com.sa.zentao.utils; + + + +import com.sa.zentao.entity.ZtCronDevops; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class Constant { + + + //假期 + public static final Map vacationDateMap=new HashMap(){ + { + } + }; + //补班 + public static final Map repairDateMap=new HashMap(){ + { + } + }; + //法定节假日 + public static final Map legalRepairDateMap=new HashMap(){ + { + } + }; + + + //运维数据 + public static Map> devMap =new HashMap<>(); +} diff --git a/src/main/java/com/sa/zentao/utils/DateUtils.java b/src/main/java/com/sa/zentao/utils/DateUtils.java new file mode 100644 index 0000000..9e9ef40 --- /dev/null +++ b/src/main/java/com/sa/zentao/utils/DateUtils.java @@ -0,0 +1,530 @@ +package com.sa.zentao.utils; + +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.time.DayOfWeek; +import java.time.LocalDate; +import java.time.ZoneId; +import java.time.temporal.ChronoUnit; +import java.util.*; + +@Slf4j +public class DateUtils { + static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + + public DateUtils() { + } + + + public static int getDays(Date date ){ + if(date==null){ + return 0; + } + int year = date.getYear(); + int month = date.getMonth()+1; // 1代表一月份 + + Calendar calendar = Calendar.getInstance(); + calendar.set(year, month - 1, 1); // 设置年份和月份 + + int daysInMonth = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); + + return daysInMonth; + + } + + public static int getWorkDaysInCurrentMonth(Date date) { + + Date startDate = DateUtils.getMonthStartDate(date); + int days = DateUtils.getDays(startDate); + int j=0; + for (int i=0;i time2) { + between_days = (time1 - time2) / 1000L; + return Integer.parseInt(String.valueOf(between_days)); + } else { + between_days = (time2 - time1) / 1000L; + return Integer.parseInt(String.valueOf(between_days)); + } + } + + public static String formatDate(Date smdate) { + return smdate == null ? null : sdf.format(smdate); + } + public static Date parseDate(String smdate, String f) { + SimpleDateFormat sdf = new SimpleDateFormat(f); + try { + return sdf.parse(smdate); + } catch (ParseException e) { + e.printStackTrace(); + } + return null; + } + public static String formatDate(Date smdate, String format) { + SimpleDateFormat s = new SimpleDateFormat(format); + return smdate == null ? null : s.format(smdate); + } + public static Date getThisWeekMonday(Date date) { + Calendar cal = Calendar.getInstance(); + cal.setTime(date); + int dayWeek = cal.get(7); + if (1 == dayWeek) { + cal.add(5, -1); + } + + cal.setFirstDayOfWeek(2); + int day = cal.get(7); + cal.add(5, cal.getFirstDayOfWeek() - day); + cal.set(11, 0); + cal.set(12, 0); + cal.set(13, 0); + return cal.getTime(); + } + + public static Date getThisWeekLastday(Date date) { + Calendar cal = Calendar.getInstance(); + cal.setTime(date); + cal.setFirstDayOfWeek(2); + cal.set(7, 1); + cal.set(11, 23); + cal.set(12, 59); + cal.set(13, 59); + return cal.getTime(); + } + + public static Date getLastDate(Date date) { + Calendar cal = Calendar.getInstance(); + cal.setTime(date); + cal.setFirstDayOfWeek(2); + cal.add(7, -7); + Date sundayDate = cal.getTime(); + return sundayDate; + } + + public static Date getFirstDayOfMonth(Date d) { + if(d==null){ + return null; + } + Calendar calendar = Calendar.getInstance(); + calendar.setTime(d); + calendar.set(5, calendar.getActualMinimum(5)); + calendar.set(11, 0); + calendar.set(12, 0); + calendar.set(13, 0); + return calendar.getTime(); + } + + + /** + * 判断是否是周末 + * @return + */ + private boolean isWeekend(Date d){ + + + Calendar cal = Calendar.getInstance(); + cal.setTime(d); + int week=cal.get(Calendar.DAY_OF_WEEK)-1; + if(week ==6 || week==0){//0代表周日,6代表周六 + return true; + } + return false; + } + + public static Date getLastDayOfMonth(Date d) { + if(d==null){ + return null; + } + Calendar calendar2 = Calendar.getInstance(); + calendar2.setTime(d); + calendar2.set(5, calendar2.getActualMaximum(5)); + calendar2.set(11, 23); + calendar2.set(12, 59); + calendar2.set(13, 59); + calendar2.set(14, 999); + return calendar2.getTime(); + } + + public static Date getYearStartDate(Date date) { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); + calendar.add(1, 0); + calendar.add(5, 0); + calendar.add(2, 0); + calendar.set(6, 1); + calendar.set(11, 0); + calendar.set(12, 0); + calendar.set(13, 0); + calendar.set(14, 0); + return calendar.getTime(); + } + + public static Date getYearEndDate(Date date) { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); + int year = calendar.get(1); + calendar.clear(); + calendar.set(1, year); + calendar.set(11, 23); + calendar.set(12, 59); + calendar.set(13, 59); + calendar.set(14, 999); + calendar.roll(6, -1); + return calendar.getTime(); + } + + public static Date getMonthStartDate(Date d) { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(d); + calendar.add(2, 0); + calendar.set(5, 1); + calendar.set(11, 0); + calendar.set(12, 0); + calendar.set(13, 0); + calendar.set(14, 0); + return calendar.getTime(); + } + + public static Date getMonthEndDate(Date d) { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(d); + calendar.set(5, Calendar.getInstance().getActualMaximum(5)); + calendar.set(11, 0); + calendar.set(12, 0); + calendar.set(13, 0); + calendar.set(14, 0); + return DateUtils.getDayEndDate(calendar.getTime()); + } + + public static Date getDayStartDate(Date d) { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(d); + calendar.set(11, 0); + calendar.set(12, 0); + calendar.set(13, 0); + return calendar.getTime(); + } + + public static Date getDayEndDate(Date d) { + Calendar todayEnd = Calendar.getInstance(); + todayEnd.setTime(d); + todayEnd.set(11, 23); + todayEnd.set(12, 59); + todayEnd.set(13, 59); + todayEnd.set(14, 999); + return todayEnd.getTime(); + } + + public static Date getBeforeOneDay(Date date) { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); + calendar.add(5, -1); + calendar.set(11, 23); + calendar.set(12, 59); + calendar.set(13, 0); + return calendar.getTime(); + } + + public static Date dateSubMonth(Date date, Integer subNum) { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); + calendar.add(2, -subNum); + return calendar.getTime(); + } + + public static Date dateAddMonth(Date date, Integer subNum) { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); + calendar.add(2, subNum); + return calendar.getTime(); + } + + public static Date dateAddDay(Date date, Integer addNum) { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); + calendar.add(5, addNum); + return calendar.getTime(); + } + public static boolean weekFlag(Date date) { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); + int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK); + return dayOfWeek == Calendar.SATURDAY || dayOfWeek == Calendar.SUNDAY; + } + public static Date dateSubDay(Date date, Integer subNum) { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); + calendar.add(5, -subNum); + return calendar.getTime(); + } + + public static Date getDateLastMonth(Date date, Integer subNum) { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); + calendar.add(2, -subNum); + return calendar.getTime(); + } + + public static Integer getMonthLastDay(Date date) { + GregorianCalendar cal = new GregorianCalendar(); + cal.setTime(date); + return cal.getActualMaximum(5); + } + + public static Date beforeDay(Date date, int num) { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); + calendar.add(5, num); + calendar.set(11, 0); + calendar.set(12, 0); + calendar.set(13, 0); + return calendar.getTime(); + } + + public static List getBetweenMonth(Date startDate, Date endDate) { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(startDate); + int startYear = calendar.get(1); + int startMonth = calendar.get(2); + calendar.setTime(endDate); + int endYear = calendar.get(1); + int endMonth = calendar.get(2); + List list = new ArrayList(); + + for(int i = startYear; i <= endYear; ++i) { + String date = ""; + int j; + if (startYear == endYear) { + for(j = startMonth; j <= endMonth; ++j) { + if (j < 9) { + date = "_" + i + "0" + (j + 1); + } else { + date = "_" + i + "" + (j + 1); + } + + list.add(date); + } + } else if (i == startYear) { + for(j = startMonth; j < 12; ++j) { + if (j < 9) { + date = "_" + i + "0" + (j + 1); + } else { + date = "_" + i + "" + (j + 1); + } + + list.add(date); + } + } else if (i == endYear) { + for(j = 0; j <= endMonth; ++j) { + if (j < 9) { + date = "_" + i + "0" + (j + 1); + } else { + date = "_" + i + "" + (j + 1); + } + + list.add(date); + } + } else { + for(j = 0; j < 12; ++j) { + if (j < 9) { + date = "_" + i + "0" + (j + 1); + } else { + date = "_" + i + "" + (j + 1); + } + + list.add(date); + } + } + } + + return list; + } + public static int getbetweenYears(Date startDate, Date endDate) { + long time = endDate.getTime(); + long time1 = startDate.getTime(); + long time3=0l; + if(time>time1){ + time3=time-time1; + }else{ + time3=time1-time; + } + long days=time3/1000/60/60/24; + return (int) days/365; + } + public static int getbetweenDays(Date startDate, Date endDate) { + LocalDate beginDate = startDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); + LocalDate nowDate = endDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); + return (int) ChronoUnit.DAYS.between(beginDate, nowDate)+1; + } + public static int getDaysInMonth(Date date) { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); + return calendar.getActualMaximum(Calendar.DAY_OF_MONTH); } + + public static Boolean getBetweenMonthEquals(Date date) { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM"); + String start1 = sdf.format(new Date()); + String start2 = sdf.format(getDateLastMonth(new Date(), 1)); + String end = sdf.format(date); + return Objects.equals(start1, end) || Objects.equals(start2, end); + } + + + + public static Date getYearFirst(Date date){ + Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); + calendar.clear(Calendar.MONTH); + calendar.set(Calendar.DAY_OF_MONTH, 1); + //将小时至0 + calendar.set(Calendar.HOUR_OF_DAY, 0); + //将分钟至0 + calendar.set(Calendar.MINUTE, 0); + //将秒至0 + calendar.set(Calendar.SECOND, 0); + //将毫秒至0 + calendar.set(Calendar.MILLISECOND, 0); + return calendar.getTime(); + } + + /** + * 功能:得到当前月份月初 格式为:xxxx-yy-zz (eg: 2007-12-01)
+ * @return String + * @author pure + */ + /** + * 获取本月第一天 + * @return + */ + public static Date getMonthFirstDay(Date d) { + Calendar cale = Calendar.getInstance(); + cale.setTime(d); + int lastDay = cale.getActualMinimum(Calendar.DAY_OF_MONTH);//获取月最大天数 + + cale.set(Calendar.DAY_OF_MONTH, lastDay);//设置日历中月份的最大天数 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");//格式化日期yyyy-MM-dd + return cale.getTime(); + } + + public static int getBetweenYear(Date smallDate , Date bigDate){ + Calendar bef = Calendar.getInstance(); + Calendar aft = Calendar.getInstance(); + bef.setTime(bigDate); + aft.setTime(smallDate); + int surplus = aft.get(Calendar.DATE) - bef.get(Calendar.DATE); + int result = aft.get(Calendar.MONTH) - bef.get(Calendar.MONTH); + int year = aft.get(Calendar.YEAR) - bef.get(Calendar.YEAR); + + return year; + } + public static int getDaysOfMonth(Date date) { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); + return calendar.getActualMaximum(Calendar.DAY_OF_MONTH); + } + //本月试用期天数 + public static int getTryDate(Date tryStartDate, Date tryEndDate, Date monthStart , Date monthEnd){ + if(tryStartDate==null||tryEndDate==null){ + return 0; + } + Date startDate; + Date endDate; + if(monthStart.getTime()>=tryStartDate.getTime()){ + startDate=monthStart; + }else{ + startDate=tryStartDate; + } + if(tryEndDate.getTime()>=monthEnd.getTime()){ + endDate=monthEnd; + }else{ + endDate=tryEndDate; + } + return DateUtils.daysBetween(startDate, endDate); + } + + public static int getAge(Date birthDay){ + Calendar cal = Calendar.getInstance(); + if (cal.before(birthDay)) { //出生日期晚于当前时间,无法计算 + throw new IllegalArgumentException( + "The birthDay is before Now.It's unbelievable!"); + } + int yearNow = cal.get(Calendar.YEAR); //当前年份 + int monthNow = cal.get(Calendar.MONTH); //当前月份 + int dayOfMonthNow = cal.get(Calendar.DAY_OF_MONTH); //当前日期 + cal.setTime(birthDay); + int yearBirth = cal.get(Calendar.YEAR); + int monthBirth = cal.get(Calendar.MONTH); + int dayOfMonthBirth = cal.get(Calendar.DAY_OF_MONTH); + int age = yearNow - yearBirth; //计算整岁数 + if (monthNow <= monthBirth) { + if (monthNow == monthBirth) { + if (dayOfMonthNow < dayOfMonthBirth) age--;//当前日期在生日之前,年龄减一 + }else{ + age--;//当前月份在生日之前,年龄减一 + } } return age; + } + public static Date parse(String date, String format){ + SimpleDateFormat f=new SimpleDateFormat(format); + try { + return f.parse(date); + } catch (ParseException e) { + e.printStackTrace(); + } + return null; + } + public static void main(String[] args) { + } + + + +} diff --git a/src/main/java/com/sa/zentao/utils/JwtUtil.java b/src/main/java/com/sa/zentao/utils/JwtUtil.java new file mode 100644 index 0000000..4a877e7 --- /dev/null +++ b/src/main/java/com/sa/zentao/utils/JwtUtil.java @@ -0,0 +1,77 @@ +package com.sa.zentao.utils; + +import com.auth0.jwt.JWT; +import com.auth0.jwt.algorithms.Algorithm; +import com.auth0.jwt.interfaces.DecodedJWT; +import com.auth0.jwt.interfaces.JWTVerifier; +import com.sa.zentao.conf.LoginRiskUser; +import com.sa.zentao.dao.ZtUserDTO; +import com.sa.zentao.enums.UserType; + +import java.util.HashMap; +import java.util.Objects; + +public class JwtUtil { + private static final String TOKEN_SECRET = "2F407B885247180969BA367932F47C4EBE850D7E"; + + public JwtUtil() { + } + + public static String sign(ZtUserDTO userLoginVo) { + Algorithm algorithm = Algorithm.HMAC256("2F407B885247180969BA367932F47C4EBE850D7E"); + HashMap header = new HashMap(2); + header.put("typ", "JWT"); + header.put("alg", "HS256"); + return JWT.create().withHeader(header) + .withClaim("account", userLoginVo.getAccount()) + .withClaim("password", userLoginVo.getPassword()) + .withClaim("userType", userLoginVo.getUserType().getCode()) + .sign(algorithm); + } + + public static ZtUserDTO verity(String token) { + Algorithm algorithm = Algorithm.HMAC256("2F407B885247180969BA367932F47C4EBE850D7E"); + JWTVerifier verifier = JWT.require(algorithm).build(); + DecodedJWT jwt = verifier.verify(token); + ZtUserDTO user = new ZtUserDTO(); + user.setAccount(jwt.getClaim("account").asString()); + user.setPassword(jwt.getClaim("password").asString()); + user.setUserType(UserType.transferType(jwt.getClaim("userType").asInt())); + return user; + } + + + private static DecodedJWT parseToken(String token) { + Algorithm algorithm = Algorithm.HMAC256("2F407B885247180969BA367932F47C4EBE850D7E"); + JWTVerifier verifier = JWT.require(algorithm).build(); + return verifier.verify(token); + } + + public static String getUserKey(String token) { + return getValue(token, "userKey"); + } + + public static String getUserId(String token) { + return getValue(token, "userId"); + } + + private static String getValue(String token, String key) { + try { + DecodedJWT jwt = parseToken(token); + return Objects.isNull(jwt) ? "" : jwt.getClaim(key).asString(); + } catch (Exception var3) { + return ""; + } + } + public static ZtUserDTO checkToken(String token) { + ZtUserDTO user = null; + + try { + user = verity(token); + } catch (Exception var3) { + var3.printStackTrace(); + } + + return user; + } +} \ No newline at end of file diff --git a/src/main/java/com/sa/zentao/utils/KanBanConstant.java b/src/main/java/com/sa/zentao/utils/KanBanConstant.java new file mode 100644 index 0000000..9142e0b --- /dev/null +++ b/src/main/java/com/sa/zentao/utils/KanBanConstant.java @@ -0,0 +1,93 @@ +package com.sa.zentao.utils; + +import java.util.*; + +public class KanBanConstant { + public static Map> LANEMAP=new HashMap<>(){{ + put(0,new ArrayList(){{add("story");add("研发需求");}}); + put(1,new ArrayList(){{add("bug");add("bug");}}); + put(2,new ArrayList(){{add("task");add("任务");}}); + }}; + + + + + public static Map> columnMap=new LinkedHashMap<>(){{ + put(0,new LinkedHashMap<>(){{ + put("backlog","Backlog"); + put("ready","准备好"); + put("develop","开发"); + put("developing","进行中"); + put("developed","完成"); + put("test","测试"); + put("testing","进行中"); + put("tested","完成"); + put("released","已发布"); + put("verified","已验收"); + put("closed","已关闭"); + }}); + put(1,new LinkedHashMap<>(){{ + put("unconfirmed","待确认"); + put("confirmed","已确认"); + put("resolving","解决中"); + put("fixing","进行中"); + put("fixed","完成"); + put("test","测试"); + put("testing","测试中"); + put("tested","测试完毕"); + put("closed","已关闭"); + }}); + put(2,new LinkedHashMap<>(){{ + put("wait","未开始"); + put("develop","开发"); + put("developing","研发中"); + put("developed","研发完毕"); + put("pause","已暂停"); + put("canceled","已取消"); + put("closed","已关闭"); + }}); + }}; + + public static Map columnTypeMap=new LinkedHashMap<>(){{ + put("story-backlog","backlog"); + put("story-ready","backlog"); + put("story-develop","develop"); + put("story-developing","develop"); + put("story-developed","develop"); + put("story-test","test"); + put("story-testing","test"); + put("story-tested","test"); + put("story-verified","verified"); + put("story-released","released"); + put("story-closed","closed"); + + put("bug-unconfirmed","待确认"); + put("bug-confirmed","已确认"); + put("bug-resolving","解决中"); + put("bug-fixing","进行中"); + put("bug-fixed","完成"); + put("bug-test","测试"); + put("bug-testing","测试中"); + put("bug-tested","测试完毕"); + put("bug-closed","已关闭"); + + put("task-wait","未开始"); + put("task-develop","开发"); + put("task-developing","研发中"); + put("task-developed","研发完毕"); + put("task-pause","已暂停"); + put("task-canceled","已取消"); + put("task-closed","已关闭"); + }}; + + + + public static Map TaskMap=new HashMap<>(){{ + put("wait","wait"); + put("doing","developing"); + put("done","developed"); + put("pause","pause"); + put("cancel","canceled"); + put("closed","closed"); + }}; +} diff --git a/src/main/java/com/sa/zentao/utils/SendEmail.java b/src/main/java/com/sa/zentao/utils/SendEmail.java new file mode 100644 index 0000000..afe498c --- /dev/null +++ b/src/main/java/com/sa/zentao/utils/SendEmail.java @@ -0,0 +1,234 @@ +package com.sa.zentao.utils; + +import com.sa.zentao.dao.BusinessException; +import com.tencentcloudapi.ses.v20201002.models.EmailSender; +import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.util.CollectionUtils; + +import javax.activation.DataHandler; +import javax.activation.DataSource; +import javax.activation.FileDataSource; +import javax.mail.*; +import javax.mail.internet.*; +import javax.mail.util.ByteArrayDataSource; +import java.io.IOException; +import java.io.InputStream; +import java.io.UnsupportedEncodingException; +import java.util.List; +import java.util.Properties; + +@Slf4j +public class SendEmail { + + + public static void sendMail(String mail, String content) { + String host = "smtp.qiye.163.com"; + String port = "587"; + String username = "sino-employee@sino-assistance.com"; + String password = "A112233a"; + + Properties props = new Properties(); + props.put("mail.smtp.host", host); + props.put("mail.smtp.port", port); + props.put("mail.smtp.auth", "true"); + + Session session = Session.getInstance(props, new Authenticator() { + protected PasswordAuthentication getPasswordAuthentication() { + return new PasswordAuthentication(username, password); + } + }); + + try { + MimeMessage message = new MimeMessage(session); + message.setFrom(new InternetAddress(username)); + message.addRecipient(Message.RecipientType.TO, new InternetAddress(mail)); + message.setSubject("运维提醒", "GBK"); + + Multipart multipart = new MimeMultipart(); + + // 邮件正文部分 + MimeBodyPart messageBodyPart = new MimeBodyPart(); + String htmlContent = "" + content + ""; + messageBodyPart.setContent(new String(htmlContent.getBytes(),"ISO8859-1"), "text/html"); + multipart.addBodyPart(messageBodyPart); + + + + message.setContent(multipart); + + Transport.send(message); + } catch (MessagingException e) { + throw new BusinessException("邮件发送失败"); + } catch (IOException e) { + throw new BusinessException("附件处理失败"); + } + } + public static void sendMessage(String title,List mails, List copyTo, String content){ + + // 邮件相关信息 +// String host = "smtp.qiye.163.com"; +// String port = "587"; +// String username = "qinglin.yin@do-tec.com.cn"; +// String password = "A112233a"; + + String host = "smtp.qiye.163.com"; + String port = "587"; + String username = "sino-employee@sino-assistance.com"; + String password = "A112233a"; + + + // 创建Properties对象,设置SMTP服务器相关信息 + Properties props = new Properties(); + props.put("mail.smtp.host", host); + props.put("mail.smtp.port", port); + props.put("mail.smtp.auth", "true"); + + // 创建Session对象,并通过用户名和密码进行验证 + Session session = Session.getInstance(props, new Authenticator() { + protected PasswordAuthentication getPasswordAuthentication() { + return new PasswordAuthentication(username, password); + } + }); + + try { + // 创建MimeMessage对象 + MimeMessage message = new MimeMessage(session); + + // 设置发件人和收件人地址 + message.setFrom(new InternetAddress(username)); + + for (String str:mails) { + message.addRecipient(Message.RecipientType.TO, new InternetAddress(str)); + } + if(!CollectionUtils.isEmpty(copyTo)){ + for (String str:copyTo ) { + message.setRecipients(Message.RecipientType.CC, InternetAddress + .parse(str)); + } + } + + if(StringUtils.isEmpty(title)){ + // 设置邮件主题 + message.setSubject("消息提醒","GBK"); + }else{ + // 设置邮件主题 + message.setSubject(title,"GBK"); + } + + + // 构建HTML格式的邮件内容(包含加粗文本) + String htmlContent = "" + content + ""; + + // 设置邮件内容和格式 + message.setContent(new String(htmlContent.getBytes(),"ISO8859-1"), "text/html"); + + + + + // 发送邮件 + Transport.send(message); + + System.out.println("邮件发送成功!"); + } catch (UnsupportedEncodingException e) { + throw new BusinessException("邮件发送失败"); + }catch (MessagingException e) { + throw new BusinessException("邮件发送失败"); + } + } + + public static void careStaff(String mail, String mail2, String content, String title, List files){ + + // 邮件相关信息 + String host = "smtp.qiye.163.com"; + String port = "587"; +// String username = "sino-employee@sino-assistance.com"; +// String password = "A112233a"; + String toAddress = mail; + + String username = "qinglin.yin@do-tec.com.cn"; + String password = "A112233a"; + + // 创建Properties对象,设置SMTP服务器相关信息 + Properties props = new Properties(); + props.put("mail.smtp.host", host); + props.put("mail.smtp.port", port); + props.put("mail.smtp.auth", "true"); + + // 创建Session对象,并通过用户名和密码进行验证 + Session session = Session.getInstance(props, new Authenticator() { + protected PasswordAuthentication getPasswordAuthentication() { + return new PasswordAuthentication(username, password); + } + }); + + try { + // 创建MimeMessage对象 + MimeMessage message = new MimeMessage(session); + + // 设置发件人和收件人地址 + message.setFrom(new InternetAddress(username)); + message.addRecipient(Message.RecipientType.TO, new InternetAddress(toAddress)); + message.setRecipients(Message.RecipientType.CC, new InternetAddress[] {new InternetAddress(mail2) }); // 抄送 + + // 设置邮件主题 + message.setSubject(title,"GBK"); + + // 构建HTML格式的邮件内容(包含加粗文本) + String htmlContent = "" + content + ""; + + + //正文 + BodyPart textpart = new MimeBodyPart(); + StringBuilder contain = new StringBuilder(); + contain.append(htmlContent); + textpart.setContent(contain.toString(),"text/html;charset=utf-8"); + + + // 将正文+附件组装成multipart对象 + Multipart multipart = new MimeMultipart(); + //设置文字 + multipart.addBodyPart(textpart); + + + if(!CollectionUtils.isEmpty(files)){ + for (String str:files) { + BodyPart bp = new MimeBodyPart(); + FileDataSource fileds = new FileDataSource(str); + bp.setDataHandler(new DataHandler(fileds)); + bp.setFileName(MimeUtility.encodeWord(fileds.getName(), "GB2312", + null)); + // bp.setFileName(fileds.getName()); + //设置文件 + multipart.addBodyPart(bp); + } + } + + + //将multipart对象放入邮箱 + message.setContent(multipart); + // 设置邮件内容和格式 +// message.setContent(new String(htmlContent.getBytes(),"ISO8859-1"), "text/html"); + + // 发送邮件 + Transport.send(message); + + System.out.println("邮件发送成功!"); + } catch (UnsupportedEncodingException e) { + log.error("",e); + throw new BusinessException("邮件发送失败"); + }catch (MessagingException e) { + log.error("",e); + throw new BusinessException("邮件发送失败"); + } + } + + @SneakyThrows + public static void main(String[] args) { +// String str="4468058@qq.com;294438420@qq.com;"; +// sendMessage(Arrays.asList(str.split(";")),Arrays.asList(""),"22"); + + sendMail("4468058@qq.com","123"); + } +} \ No newline at end of file diff --git a/src/main/java/com/sa/zentao/utils/UploadUtil.java b/src/main/java/com/sa/zentao/utils/UploadUtil.java new file mode 100644 index 0000000..bd8b6a8 --- /dev/null +++ b/src/main/java/com/sa/zentao/utils/UploadUtil.java @@ -0,0 +1,154 @@ +package com.sa.zentao.utils; + +import com.alibaba.fastjson.JSONObject; +import lombok.SneakyThrows; +import org.apache.http.HttpEntity; +import org.apache.http.ParseException; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.entity.ContentType; +import org.apache.http.entity.mime.MultipartEntityBuilder; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.util.EntityUtils; +import org.quartz.CronExpression; + +import java.io.ByteArrayOutputStream; +import java.io.InputStream; +import java.net.URL; +import java.net.URLConnection; +import java.util.Date; + +/** + * @Auther: JiangHeng + * @Date: 2022/9/21 11:24 + */ +public class UploadUtil { + + private static final String FAST_DFS_URL = "http://api.sinoassist.com/order/uploadImage"; + + public static String uploadImage(byte[] b){ + String url = ""; + try { + HttpEntity entity = MultipartEntityBuilder.create().addBinaryBody("file",b, ContentType.DEFAULT_BINARY,"file.jpg").build(); + HttpPost httpPost = new HttpPost(FAST_DFS_URL); + httpPost.setEntity(entity); + //绕过https证书验证,正规途径,我们需要将证书导入到密钥库中 + CloseableHttpClient httpclient = HttpClients.custom() + .build(); + CloseableHttpResponse resp = httpclient.execute(httpPost); + try { + HttpEntity responseentity = resp.getEntity(); + if (responseentity != null) { + String result = EntityUtils.toString(responseentity); + JSONObject pointObject= JSONObject.parseObject(result); + url= pointObject.getString("data"); + } + }catch (Exception e){ + e.getStackTrace(); + return url; + }finally { + resp.close(); + } + } catch (Exception e){ + e.getStackTrace(); + } + return url; + } + public static String vxDownUpload(String httpUrl){ + + // 下载网络文件 + int bytesum = 0; + int byteread = 0; + URL url = null; + try { + url = new URL(httpUrl); + URLConnection conn = url.openConnection(); + InputStream inStream = conn.getInputStream(); + + + ByteArrayOutputStream outStream = new ByteArrayOutputStream(); + + byte[] buffer = new byte[10240]; + + int len = 0; + + while ((len = inStream.read(buffer)) != -1) { + + outStream.write(buffer, 0, len); + + } + + inStream.close(); + + byte[] bytes = outStream.toByteArray(); + + + String fieldValue = conn.getHeaderField("Content-Disposition"); + String filename = fieldValue.substring(fieldValue.indexOf("filename=") + 9, fieldValue.length() ); + filename=filename.replaceAll("\"",""); + return upload(bytes,filename); + } catch (Exception e) { + e.printStackTrace(); + } + return null; + + } + + public static String upload(byte[] b, String name){ + String url = ""; + try { + HttpEntity entity = MultipartEntityBuilder.create().addBinaryBody("file",b, ContentType.DEFAULT_BINARY,name).build(); + HttpPost httpPost = new HttpPost(FAST_DFS_URL); + httpPost.setEntity(entity); + //绕过https证书验证,正规途径,我们需要将证书导入到密钥库中 + CloseableHttpClient httpclient = HttpClients.custom() + .build(); + CloseableHttpResponse resp = httpclient.execute(httpPost); + try { + HttpEntity responseentity = resp.getEntity(); + if (responseentity != null) { + String result = EntityUtils.toString(responseentity); + JSONObject pointObject= JSONObject.parseObject(result); + url= pointObject.getString("data"); + } + }catch (Exception e){ + e.getStackTrace(); + return url; + }finally { + resp.close(); + } + } catch (Exception e){ + e.getStackTrace(); + } + return url; + } + +// @SneakyThrows +// public static void main(String[] args) { +// +// String cronExpression = "11 22 14 * * ? "; // 每两分钟执行一次 +// try { +// +// CronExpression cron = new CronExpression(cronExpression); +// Date nextExecutionTime = cron.getNextValidTimeAfter(new Date()); +// +// boolean validExpression = CronExpression.isValidExpression(cronExpression); +// System.out.println(validExpression); +//// ; +//// System.out.println("下次执行时间: " + DateUtils.formatDate(nextExecutionTime)); +// } catch (ParseException e) { +// System.out.println("Cron表达式解析异常: " + e.getMessage()); +// } +// +// +// } + + + public static void main(String[] args) { + System.out.print("11"); +// SendEmail.sendMail("4468058@qq.com","123123123"); + System.out.print("22"); + } + +} diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml new file mode 100644 index 0000000..f7fc091 --- /dev/null +++ b/src/main/resources/application-dev.yml @@ -0,0 +1,17 @@ +#spring: +# datasource: +# url: jdbc:mysql://192.168.1.161:3306/zentao_dev?useUnicode=true&characterEncoding=UTF8&useSSL=false&serverTimezone=Asia/Shanghai&allowMultiQueries=true&allowPublicKeyRetrieval=true +# username: devgps +# password: dev@2021GPS + + +spring: + datasource: + url: jdbc:mysql://127.0.0.1:3306/zentao_dev?useUnicode=true&characterEncoding=UTF8&useSSL=false&serverTimezone=Asia/Shanghai&allowMultiQueries=true&allowPublicKeyRetrieval=true + username: oa_user + password: PX4fTAAsJ#T! + driver-class-name: com.mysql.cj.jdbc.Driver + + +file: + baseUrl: http://192.168.3.200:8013 \ No newline at end of file diff --git a/src/main/resources/application-local.yml b/src/main/resources/application-local.yml new file mode 100644 index 0000000..9f123ad --- /dev/null +++ b/src/main/resources/application-local.yml @@ -0,0 +1,10 @@ +spring: + datasource: + url: jdbc:mysql://192.168.1.161:3306/zentao?useUnicode=true&characterEncoding=UTF8&useSSL=false&serverTimezone=Asia/Shanghai&allowMultiQueries=true&allowPublicKeyRetrieval=true + username: devgps + password: dev@2021GPS + driver-class-name: com.mysql.cj.jdbc.Driver + + +file: + baseUrl: http://127.0.0.1:8085 \ No newline at end of file diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml new file mode 100644 index 0000000..72a3b50 --- /dev/null +++ b/src/main/resources/application.yml @@ -0,0 +1,39 @@ +server: + port: 8085 + servlet: + context-path: /zentao + + +spring: + profiles: + active: local + application: + name: oasystem + main: + allow-bean-definition-overriding: true + allow-circular-references: true #循环依赖 + jackson: + time-zone: GMT+8 + servlet: + multipart: + max-file-size: 1000MB + max-request-size: 1000MB + + + +logging: + level: + com.example.classroomrealtimefeedback.mapper: debug + + +mybatis: + configuration: + log-impl: org.apache.ibatis.logging.stdout.StdOutImpl + + + + +file: + path: + windows: D:\files + linux: /files \ No newline at end of file diff --git a/src/main/resources/logback-spring.xml b/src/main/resources/logback-spring.xml new file mode 100644 index 0000000..79a920e --- /dev/null +++ b/src/main/resources/logback-spring.xml @@ -0,0 +1,62 @@ + + + ${APP_NAME} + + + + + + + + + + + + + + + + + + + + true + + ${CONSOLE_LOG_PATTERN} + UTF-8 + + + + + ${LOG_FILE}/${APP_NAME}.log + + ${CONSOLE_LOG_PATTERN_NO_COLOR} + UTF-8 + + + + ${LOG_FILE}/${APP_NAME}.%d{yyyy-MM-dd}.%i.log + + ${LOG_FILEMAXDAY} + + ${LOG_MAXFILESIZE} + + + + INFO + + + + + 0 + + + + + + + + + + diff --git a/src/main/resources/mapper/FestivalConfigMapper.xml b/src/main/resources/mapper/FestivalConfigMapper.xml new file mode 100644 index 0000000..5c8211f --- /dev/null +++ b/src/main/resources/mapper/FestivalConfigMapper.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/mapper/VerificationCodeMapper.xml b/src/main/resources/mapper/VerificationCodeMapper.xml new file mode 100644 index 0000000..2cb240f --- /dev/null +++ b/src/main/resources/mapper/VerificationCodeMapper.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/main/resources/mapper/ZtActionMapper.xml b/src/main/resources/mapper/ZtActionMapper.xml new file mode 100644 index 0000000..cf19673 --- /dev/null +++ b/src/main/resources/mapper/ZtActionMapper.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/mapper/ZtActionrecentMapper.xml b/src/main/resources/mapper/ZtActionrecentMapper.xml new file mode 100644 index 0000000..b960924 --- /dev/null +++ b/src/main/resources/mapper/ZtActionrecentMapper.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/mapper/ZtBugMapper.xml b/src/main/resources/mapper/ZtBugMapper.xml new file mode 100644 index 0000000..a6329ce --- /dev/null +++ b/src/main/resources/mapper/ZtBugMapper.xml @@ -0,0 +1,153 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/mapper/ZtCaseMapper.xml b/src/main/resources/mapper/ZtCaseMapper.xml new file mode 100644 index 0000000..f0ee7a3 --- /dev/null +++ b/src/main/resources/mapper/ZtCaseMapper.xml @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/mapper/ZtCasestepMapper.xml b/src/main/resources/mapper/ZtCasestepMapper.xml new file mode 100644 index 0000000..01c575f --- /dev/null +++ b/src/main/resources/mapper/ZtCasestepMapper.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/src/main/resources/mapper/ZtCronDevopsMapper.xml b/src/main/resources/mapper/ZtCronDevopsMapper.xml new file mode 100644 index 0000000..5171bf3 --- /dev/null +++ b/src/main/resources/mapper/ZtCronDevopsMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/mapper/ZtCronDevopsUserMapper.xml b/src/main/resources/mapper/ZtCronDevopsUserMapper.xml new file mode 100644 index 0000000..b10e603 --- /dev/null +++ b/src/main/resources/mapper/ZtCronDevopsUserMapper.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/main/resources/mapper/ZtEffortMapper.xml b/src/main/resources/mapper/ZtEffortMapper.xml new file mode 100644 index 0000000..1b07b40 --- /dev/null +++ b/src/main/resources/mapper/ZtEffortMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/mapper/ZtExecutionprojectMapper.xml b/src/main/resources/mapper/ZtExecutionprojectMapper.xml new file mode 100644 index 0000000..e2bfe4a --- /dev/null +++ b/src/main/resources/mapper/ZtExecutionprojectMapper.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/main/resources/mapper/ZtKanbanMapper.xml b/src/main/resources/mapper/ZtKanbanMapper.xml new file mode 100644 index 0000000..a6f3d58 --- /dev/null +++ b/src/main/resources/mapper/ZtKanbanMapper.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/mapper/ZtKanbancardMapper.xml b/src/main/resources/mapper/ZtKanbancardMapper.xml new file mode 100644 index 0000000..6e3ebae --- /dev/null +++ b/src/main/resources/mapper/ZtKanbancardMapper.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/mapper/ZtKanbancellMapper.xml b/src/main/resources/mapper/ZtKanbancellMapper.xml new file mode 100644 index 0000000..f659086 --- /dev/null +++ b/src/main/resources/mapper/ZtKanbancellMapper.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/main/resources/mapper/ZtKanbancolumnMapper.xml b/src/main/resources/mapper/ZtKanbancolumnMapper.xml new file mode 100644 index 0000000..133b80a --- /dev/null +++ b/src/main/resources/mapper/ZtKanbancolumnMapper.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/mapper/ZtKanbangroupMapper.xml b/src/main/resources/mapper/ZtKanbangroupMapper.xml new file mode 100644 index 0000000..b3e5a8f --- /dev/null +++ b/src/main/resources/mapper/ZtKanbangroupMapper.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/main/resources/mapper/ZtKanbanlaneMapper.xml b/src/main/resources/mapper/ZtKanbanlaneMapper.xml new file mode 100644 index 0000000..fcf039c --- /dev/null +++ b/src/main/resources/mapper/ZtKanbanlaneMapper.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/mapper/ZtKanbanregionMapper.xml b/src/main/resources/mapper/ZtKanbanregionMapper.xml new file mode 100644 index 0000000..4806a3c --- /dev/null +++ b/src/main/resources/mapper/ZtKanbanregionMapper.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/mapper/ZtKanbanspaceMapper.xml b/src/main/resources/mapper/ZtKanbanspaceMapper.xml new file mode 100644 index 0000000..9006c85 --- /dev/null +++ b/src/main/resources/mapper/ZtKanbanspaceMapper.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/mapper/ZtModuleMapper.xml b/src/main/resources/mapper/ZtModuleMapper.xml new file mode 100644 index 0000000..9c96717 --- /dev/null +++ b/src/main/resources/mapper/ZtModuleMapper.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/mapper/ZtProductMapper.xml b/src/main/resources/mapper/ZtProductMapper.xml new file mode 100644 index 0000000..5e7f5cd --- /dev/null +++ b/src/main/resources/mapper/ZtProductMapper.xml @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/mapper/ZtProjectMapper.xml b/src/main/resources/mapper/ZtProjectMapper.xml new file mode 100644 index 0000000..6f62295 --- /dev/null +++ b/src/main/resources/mapper/ZtProjectMapper.xml @@ -0,0 +1,224 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/mapper/ZtProjectproductMapper.xml b/src/main/resources/mapper/ZtProjectproductMapper.xml new file mode 100644 index 0000000..c123850 --- /dev/null +++ b/src/main/resources/mapper/ZtProjectproductMapper.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/main/resources/mapper/ZtProjectstoryMapper.xml b/src/main/resources/mapper/ZtProjectstoryMapper.xml new file mode 100644 index 0000000..9de09c2 --- /dev/null +++ b/src/main/resources/mapper/ZtProjectstoryMapper.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/main/resources/mapper/ZtSearchindexMapper.xml b/src/main/resources/mapper/ZtSearchindexMapper.xml new file mode 100644 index 0000000..0e0f893 --- /dev/null +++ b/src/main/resources/mapper/ZtSearchindexMapper.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/main/resources/mapper/ZtStoryFeedbackMapper.xml b/src/main/resources/mapper/ZtStoryFeedbackMapper.xml new file mode 100644 index 0000000..2b78fa6 --- /dev/null +++ b/src/main/resources/mapper/ZtStoryFeedbackMapper.xml @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/mapper/ZtStoryMapper.xml b/src/main/resources/mapper/ZtStoryMapper.xml new file mode 100644 index 0000000..01c38cd --- /dev/null +++ b/src/main/resources/mapper/ZtStoryMapper.xml @@ -0,0 +1,190 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/mapper/ZtStoryUserMapper.xml b/src/main/resources/mapper/ZtStoryUserMapper.xml new file mode 100644 index 0000000..fec5fb6 --- /dev/null +++ b/src/main/resources/mapper/ZtStoryUserMapper.xml @@ -0,0 +1,101 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/mapper/ZtStoryreviewMapper.xml b/src/main/resources/mapper/ZtStoryreviewMapper.xml new file mode 100644 index 0000000..48aca10 --- /dev/null +++ b/src/main/resources/mapper/ZtStoryreviewMapper.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/main/resources/mapper/ZtStoryspecMapper.xml b/src/main/resources/mapper/ZtStoryspecMapper.xml new file mode 100644 index 0000000..c49602f --- /dev/null +++ b/src/main/resources/mapper/ZtStoryspecMapper.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/main/resources/mapper/ZtTaskMapper.xml b/src/main/resources/mapper/ZtTaskMapper.xml new file mode 100644 index 0000000..28c30af --- /dev/null +++ b/src/main/resources/mapper/ZtTaskMapper.xml @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/mapper/ZtTaskestimateMapper.xml b/src/main/resources/mapper/ZtTaskestimateMapper.xml new file mode 100644 index 0000000..4596efb --- /dev/null +++ b/src/main/resources/mapper/ZtTaskestimateMapper.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/main/resources/mapper/ZtTaskspecMapper.xml b/src/main/resources/mapper/ZtTaskspecMapper.xml new file mode 100644 index 0000000..74f0043 --- /dev/null +++ b/src/main/resources/mapper/ZtTaskspecMapper.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/main/resources/mapper/ZtTaskteamMapper.xml b/src/main/resources/mapper/ZtTaskteamMapper.xml new file mode 100644 index 0000000..7775788 --- /dev/null +++ b/src/main/resources/mapper/ZtTaskteamMapper.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/src/main/resources/mapper/ZtTeamMapper.xml b/src/main/resources/mapper/ZtTeamMapper.xml new file mode 100644 index 0000000..2701f98 --- /dev/null +++ b/src/main/resources/mapper/ZtTeamMapper.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/mapper/ZtTestresultMapper.xml b/src/main/resources/mapper/ZtTestresultMapper.xml new file mode 100644 index 0000000..729afc2 --- /dev/null +++ b/src/main/resources/mapper/ZtTestresultMapper.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/mapper/ZtTesttaskMapper.xml b/src/main/resources/mapper/ZtTesttaskMapper.xml new file mode 100644 index 0000000..29c75c8 --- /dev/null +++ b/src/main/resources/mapper/ZtTesttaskMapper.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/mapper/ZtUserMapper.xml b/src/main/resources/mapper/ZtUserMapper.xml new file mode 100644 index 0000000..75c21d6 --- /dev/null +++ b/src/main/resources/mapper/ZtUserMapper.xml @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/mapper/ZtYwBackupsMapper.xml b/src/main/resources/mapper/ZtYwBackupsMapper.xml new file mode 100644 index 0000000..1ee95b7 --- /dev/null +++ b/src/main/resources/mapper/ZtYwBackupsMapper.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/mapper/ZtYwChangeMapper.xml b/src/main/resources/mapper/ZtYwChangeMapper.xml new file mode 100644 index 0000000..45dd5ac --- /dev/null +++ b/src/main/resources/mapper/ZtYwChangeMapper.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/mapper/ZtYwFaultListMapper.xml b/src/main/resources/mapper/ZtYwFaultListMapper.xml new file mode 100644 index 0000000..4d5fafa --- /dev/null +++ b/src/main/resources/mapper/ZtYwFaultListMapper.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/main/resources/mapper/ZtYwFaultMapper.xml b/src/main/resources/mapper/ZtYwFaultMapper.xml new file mode 100644 index 0000000..860671a --- /dev/null +++ b/src/main/resources/mapper/ZtYwFaultMapper.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/mapper/ZtYwFwqsearchMapper.xml b/src/main/resources/mapper/ZtYwFwqsearchMapper.xml new file mode 100644 index 0000000..00a9757 --- /dev/null +++ b/src/main/resources/mapper/ZtYwFwqsearchMapper.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/mapper/ZtYwMachineRoomMapper.xml b/src/main/resources/mapper/ZtYwMachineRoomMapper.xml new file mode 100644 index 0000000..b0b9db3 --- /dev/null +++ b/src/main/resources/mapper/ZtYwMachineRoomMapper.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/mapper/ZtYwPatrolMapper.xml b/src/main/resources/mapper/ZtYwPatrolMapper.xml new file mode 100644 index 0000000..b2cc2a2 --- /dev/null +++ b/src/main/resources/mapper/ZtYwPatrolMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/mapper/ZtYwTaskMapper.xml b/src/main/resources/mapper/ZtYwTaskMapper.xml new file mode 100644 index 0000000..ad1dd36 --- /dev/null +++ b/src/main/resources/mapper/ZtYwTaskMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/templates/EntityService.ftl b/src/main/resources/templates/EntityService.ftl new file mode 100644 index 0000000..c4f9275 --- /dev/null +++ b/src/main/resources/templates/EntityService.ftl @@ -0,0 +1,8 @@ +package api; + +import com.sa.common.core.base.BaseBiz; +import + +public interface Biz { + +} diff --git a/src/main/resources/templates/entity.java.btl b/src/main/resources/templates/entity.java.btl new file mode 100644 index 0000000..2b52463 --- /dev/null +++ b/src/main/resources/templates/entity.java.btl @@ -0,0 +1,166 @@ +package ${package.Entity}; +<% for(pkg in table.importPackages){ %> +import ${pkg}; +<% } %> +<% if(swagger2){ %> +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +<% } %> +<% if(entityLombokModel){ %> +import lombok.Data; +import lombok.EqualsAndHashCode; +<% if(chainModel){ %> +import lombok.experimental.Accessors; +<% } %> +<% } %> +/** + *

+ * ${table.comment!} + *

+ * + * @author ${author} + * @since ${date} + */ +<% if(entityLombokModel){ %> +@Data + <% if(isNotEmpty(superEntityClass)){ %> +@EqualsAndHashCode(callSuper = true) + <% }else{ %> +@EqualsAndHashCode(callSuper = false) + <% } %> + <% if(chainModel){ %> +@Accessors(chain = true) + <% } %> +<% } %> +<% if(table.convert){ %> +@TableName("${table.name}") +<% } %> +<% if(swagger2){ %> +@ApiModel(value="${entity}对象", description="${table.comment!''}") +<% } %> +<% if(isNotEmpty(superEntityClass)){ %> +public class ${entity} extends ${superEntityClass}<% if(activeRecord){ %><${entity}><%}%>{ +<% }else if(activeRecord){ %> +public class ${entity} extends Model<${entity}> { +<% }else{ %> +public class ${entity} implements Serializable { +<% } %> + +<% if(entitySerialVersionUID){ %> + private static final long serialVersionUID = 1L; +<% } %> +<% /** -----------BEGIN 字段循环遍历----------- **/ %> +<% for(field in table.fields){ %> + <% + if(field.keyFlag){ + var keyPropertyName = field.propertyName; + } + %> + + <% if(isNotEmpty(field.comment)){ %> + <% if(swagger2){ %> + @ApiModelProperty(value = "${field.comment}") + <% }else{ %> + /** + * ${field.comment} + */ + <% } %> + <% } %> + <% if(field.keyFlag){ %> + <% + /*主键*/ + %> + <% if(field.keyIdentityFlag){ %> + @TableId(value = "${field.annotationColumnName}", type = IdType.AUTO) + <% }else if(isNotEmpty(idType)){ %> + @TableId(value = "${field.annotationColumnName}", type = IdType.${idType}) + <% }else if(field.convert){ %> + @TableId("${field.annotationColumnName}") + <% } %> + <% + /*普通字段*/ + %> + <% }else if(isNotEmpty(field.fill)){ %> + <% if(field.convert){ %> + @TableField(value = "${field.annotationColumnName}", fill = FieldFill.${field.fill}) + <% }else{ %> + @TableField(fill = FieldFill.${field.fill}) + <% } %> + <% }else if(field.convert){ %> + @TableField("${field.annotationColumnName}") + <% } %> + <% + /*乐观锁注解*/ + %> + <% if(versionFieldName!'' == field.name){ %> + @Version + <% } %> + <% + /*逻辑删除注解*/ + %> + <% if(logicDeleteFieldName!'' == field.name){ %> + @TableLogic + <% } %> + private ${field.propertyType} ${field.propertyName}; +<% } %> +<% /** -----------END 字段循环遍历----------- **/ %> + +<% if(!entityLombokModel){ %> + <% for(field in table.fields){ %> + <% + var getprefix =''; + if(field.propertyType=='boolean'){ + getprefix='is'; + }else{ + getprefix='get'; + } + %> + public ${field.propertyType} ${getprefix}${field.capitalName}() { + return ${field.propertyName}; + } + + <% if(chainModel){ %> + public ${entity} set${field.capitalName}(${field.propertyType} ${field.propertyName}) { + <% }else{ %> + public void set${field.capitalName}(${field.propertyType} ${field.propertyName}) { + <% } %> + this.${field.propertyName} = ${field.propertyName}; + <% if(chainModel){ %> + return this; + <% } %> + } + + <% } %> +<% } %> +<% if(entityColumnConstant){ %> + <% for(field in table.fields){ %> + public static final String ${strutil.toUpperCase(field.name)} = "${field.name}"; + + <% } %> +<% } %> +<% if(activeRecord){ %> + @Override + protected Serializable pkVal() { + <% if(isNotEmpty(keyPropertyName)){ %> + return this.${keyPropertyName}; + <% }else{ %> + return null; + <% } %> + } + +<% } %> +<% if(!entityLombokModel){ %> + @Override + public String toString() { + return "${entity}{" + + <% for(field in table.fields){ %> + <% if(fieldLP.index==0){ %> + "${field.propertyName}=" + ${field.propertyName} + + <% }else{ %> + ", ${field.propertyName}=" + ${field.propertyName} + + <% } %> + <% } %> + "}"; + } +<% } %> +} diff --git a/src/main/resources/templates/entity.java.ftl b/src/main/resources/templates/entity.java.ftl new file mode 100644 index 0000000..c63bcc4 --- /dev/null +++ b/src/main/resources/templates/entity.java.ftl @@ -0,0 +1,156 @@ +package ${package.Entity}; + +<#list table.importPackages as pkg> +import ${pkg}; + +<#if swagger2> +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +<#if entityLombokModel> +import lombok.Data; +import lombok.EqualsAndHashCode; + <#if chainModel> +import lombok.experimental.Accessors; + + + +/** + *

+ * ${table.comment!} + *

+ * + * @author ${author} + * @since ${date} + */ +<#if entityLombokModel> +@Data + <#if superEntityClass??> +@EqualsAndHashCode(callSuper = true) + <#else> +@EqualsAndHashCode(callSuper = false) + + <#if chainModel> +@Accessors(chain = true) + + +<#if table.convert> +@TableName("${table.name}") + +<#if swagger2> +@ApiModel(value="${entity}对象", description="${table.comment!}") + +<#if superEntityClass??> +public class ${entity} extends ${superEntityClass}<#if activeRecord><${entity}> { +<#elseif activeRecord> +public class ${entity} extends Model<${entity}> { +<#else> +public class ${entity} implements Serializable { + + +<#if entitySerialVersionUID> + private static final long serialVersionUID = 1L; + +<#-- ---------- BEGIN 字段循环遍历 ----------> +<#list table.fields as field> + <#if field.keyFlag> + <#assign keyPropertyName="${field.propertyName}"/> + + + <#if field.comment!?length gt 0> + <#if swagger2> + @ApiModelProperty(value = "${field.comment}") + <#else> + /** + * ${field.comment} + */ + + + <#if field.keyFlag> + <#-- 主键 --> + <#if field.keyIdentityFlag> + @TableId(value = "${field.annotationColumnName}", type = IdType.AUTO) + <#elseif idType??> + @TableId(value = "${field.annotationColumnName}", type = IdType.${idType}) + <#elseif field.convert> + @TableId("${field.annotationColumnName}") + + <#-- 普通字段 --> + <#elseif field.fill??> + <#-- ----- 存在字段填充设置 -----> + <#if field.convert> + @TableField(value = "${field.annotationColumnName}", fill = FieldFill.${field.fill}) + <#else> + @TableField(fill = FieldFill.${field.fill}) + + <#elseif field.convert> + @TableField("${field.annotationColumnName}") + + <#-- 乐观锁注解 --> + <#if (versionFieldName!"") == field.name> + @Version + + <#-- 逻辑删除注解 --> + <#if (logicDeleteFieldName!"") == field.name> + @TableLogic + + private ${field.propertyType} ${field.propertyName}; + +<#------------ END 字段循环遍历 ----------> + +<#if !entityLombokModel> + <#list table.fields as field> + <#if field.propertyType == "boolean"> + <#assign getprefix="is"/> + <#else> + <#assign getprefix="get"/> + + public ${field.propertyType} ${getprefix}${field.capitalName}() { + return ${field.propertyName}; + } + + <#if chainModel> + public ${entity} set${field.capitalName}(${field.propertyType} ${field.propertyName}) { + <#else> + public void set${field.capitalName}(${field.propertyType} ${field.propertyName}) { + + this.${field.propertyName} = ${field.propertyName}; + <#if chainModel> + return this; + + } + + + +<#if entityColumnConstant> + <#list table.fields as field> + public static final String ${field.name?upper_case} = "${field.name}"; + + + +<#if activeRecord> + @Override + protected Serializable pkVal() { + <#if keyPropertyName??> + return this.${keyPropertyName}; + <#else> + return null; + + } + + +<#if !entityLombokModel> + @Override + public String toString() { + return "${entity}{" + + <#list table.fields as field> + <#if field_index==0> + "${field.propertyName}=" + ${field.propertyName} + + <#else> + ", ${field.propertyName}=" + ${field.propertyName} + + + + "}"; + } + +} diff --git a/src/main/resources/templates/entity.java.vm b/src/main/resources/templates/entity.java.vm new file mode 100644 index 0000000..e69de29 diff --git a/src/main/resources/templates/mapper.java.vm b/src/main/resources/templates/mapper.java.vm new file mode 100644 index 0000000..e69de29 diff --git a/src/main/resources/templates/mapper.xml.ftl b/src/main/resources/templates/mapper.xml.ftl new file mode 100644 index 0000000..48c89c7 --- /dev/null +++ b/src/main/resources/templates/mapper.xml.ftl @@ -0,0 +1,15 @@ + + + +<#-- --> +<#-- <#list table.tableFields as tableField>--> +<#-- --> +<#-- --> +<#-- --> + + <#list table.fields as field> + + + + + diff --git a/src/main/resources/templates/paySlips.xls b/src/main/resources/templates/paySlips.xls new file mode 100644 index 0000000000000000000000000000000000000000..98caaaa7a067f63070128dbc2c69e30578d5a32b GIT binary patch literal 37888 zcmeHw2UrwW*YMq?Edo+hL@ca`ib@9s1?dEoj;IhtL|BRhJa30);FliG4`4R~xnQJiI14tA88(BbK02QgLL%xnYt#^X(iLQW< zI=F7uJ_Nsn+=DojWTPL1iL%56V&VUv;7{q0#6ukpg5&jtJ8iNQpr)h^rI{J^+k*Pt zMB(kDe)|$LA}NuS42|38<^j}%@JJlrm%^J#{aRDM&Ec0vex_({P!MO*lH3A(0jWe+ zC*Kf0uiy9s6aSO&?Z8)3(pdgNk`9`9$n+6V`UpuF$slPYo#YYJ&5p+doPB62C7rd^ zz;8jhx$v>pTW@_MWYT#a+ za31mDluL*=C%!iL9=9FzIq_BP&_UaR=#UnKSl3v0vg_2z$rEmd+Ece3wA({Fvrxzz z5+h1UP(2~oq zU0pCepx}Ctq}t0HWjM@dX!s=(MM!Bg247zp4!thT2M`#1A>gaRS^Nzce3_rn_B3SR zEPNvdF2kqmy*UHFM3M-ZFVj;O`cA4`tn%tY2hIgIX86oAHLW(NHXzyyDEpx2Q~2{z zQx8}jup-(&Q*cuT&eGFN4IG9p#y-R07Wz)69rfVUM;FElETxTRfA9attvjt|CgGYnj4ry zy)35qfSS-Rfwh^gN!l-=KTvRFh(QSs$mrM@l;FU}!_?GQ=qogl!V!hyEO=(eToFNd43;8Hy& zNXsk5r{%&NjHQo^52yZ6FHWXBRXr&cXu%!KFhMs|&jea}W0;_8s%L_Oaw9ZBcU8{>N90B@K^Iof z1c&cNFhRFg&jiQ%FEXhOYq)lBV$cXC4c88K=8a&|aP45%-3TTP*A7gy8pEXF+JR+k zW0*8tJM9|7#KpDY+G*c7CJomP>~nm%I4-UY*N#==m^55F!p1RaxOO@=j)`*Zut$1p zVA5b$$R_BdM1Z5R;?#hr+U?mWsmUhb3#5~bhU>p`W0**M8fMa^F-+K=$S!|ZU?Mk| zN^w-nZ!43EbDpI{SE6VzK8_ujAvtzNBJbkZQoAWh#X(z%iK^7@fI@d7$Q;&)+)|Ie zP?S25HSF~ON^SMSo*qZlDOM-5^{+Zzv;)R+BQ|1wY5ygHDwgUFK%hsdj^+PYtfu_0 zU%!@F9gBm=B_$;iMs+L>8>X)S19U1hniGV#n>#3yX(!s29F|{LkvQ$A$b`|#mCUU<+%PU!vVZ!Biiq*;3 zL=o2bDrPI?&Qhv?TPaEHB3a4)^NoSsrFkgT4=yW|ET!s3y#Yl&FM@FavNy8Hf@5V7vo=C8L%mDv@xjN>B=q)>tB+Z17{orW*qHffykYbt?%Qwai^N)Xsof}o}neAQHf;HDCU zG?k!VQwjPvl_0dK1Yu1j2yZGu#Fq%zBUU63$a_T2Hm5~IsSS4_QU3`h(f<`D>=7a6 zOXX)13}`ArY*PsaHkDw|mk8K(I2Z_;Sch}@ZD2dO8R5CWu61W3B=!(}$L35H!ZYtV zf?$ZiR2q2N9VE@**}W+jw!bs7Y;eroO0;N zA0<^5}|E54}9jEvE&y95)U*-8tppv{EWZPn3G{ z*+1NJT5`+j$sxyqQw}{FrR*jUrM^D%f?G~2ZaKX;TgychYM3CN4qwxto8}FoYvfOxcsdXryNCps||a9Yy-C(3vM}F{??UKj-tOo zdG5{PmeYn?4wt|6;FP22Z?$3bZvD+I$C6tPm%ll3%2D*U+OR*C-R73lmRk;&zqxYC zQS`UkupJM+=a$nB<@9QlzX?GO7pC0bTwDXU)p5&d&n<_`-)uPLDEga=>#KET+;Tc_ z%i;1jTTVHO{^sHud@-I|jup2YE`PJ*l%wcxF0M(Z{^FJ+W<{^sI3>v}Gi9BpDG)6tP=k%Aoy_6NxrO zkGbf(Y#w|)(i{eBLRt-<423|Bo#hrDIn)NAyBRR;gRaIHKpNS`KC*dc+ncD!k_ja|GyLSQT{O@!CpwneB(50>R}ztM#{(I$4K+E6G<U0G2*evUw_Ou#n>wwQza12~_-n!)`qro^}*NR=41#!TFR zrL~r)1WI}ON~yVgW8w%#;2lh_Pa8NOAlfT^jv$|5V+{plyGx(=TzvP+vIz*#wEDe8yE?+Nnc`HTlKg_YL6 z5p)C4U!+#_kEOY=S`Oa;S`L$|$OH6bJjfU({-6u`DPtEOmM#{ci#(s{cTg8uy`cXf z05@o9|8XtV0?+86%t}WK6bcv+9;q8MZvmDReaNj;7cgyDn7R@@8K$xy^+Z47SK3F+ z5x6T8@!EkOVUA+U!Od94k8sCU)^d6wpSiO?MyvW`E8v4Uiawy|k64i^J|Oo;%*KP- zv`y%gq7U$(-1@|wmM`Lv-;$CqQj(8buS_|7d zcs{?pfYp7$2JC|2#f$-sNN;pL`J&QOxiYldLtQhuOohnDCRj*9{mU8?4pn{R{BWpZ z^Xn+%r#PV^w5mUUGgoOtJZOlkroWAQ57` zOuC?Dm$$E+AJzh!pS_Hq;zWp$6+Py1>*p=!hm#*RKW7;~#R(4~5o;W{`02x&4A4Lx zW}d8?BNzt!u)WfO$8QD>ia7-P4rzyt`?gH~jC-!~_CTkY_CTkY_CTj*3F62s1qqcP z$Q1r!VXPZLGKq)`fLBwBsJn1TrNHYd`D8ToT~TmXK*W$M$54Ekr571ay^u2nPDGaA zejCx@)h7hbOiJ@gH%?qEupo;SY?G0qG@jG5gttp5p^ETg#fcY6fr3N ze3dGDX=a10>l4bCb0fes0a>R<{}D4NUX{5tyIuUV+}`RnuTOX<5>0!aph_=QPCsJ( z6t$T)oS9Oq6+~Z&5KZ$QrAn=UkUXLR1oL?B(cEU0a%euTd2E9s5P@5SE^WQ1Iac{m zLvrJ}OeCOD>Juy@<6^r#K7zq)#4k zHo9mbn}bx3@zK1}+mRUy1QOImm5&t7b3k=|BhZ}VEh8F2)1wQY8U3Q@e3d$pQXlCa z(R`e$U1a79oas57DZDD0LRBt{TM?sLd zQlS+Q!BO1)BSrWv{|g9xO8$sxki&aXeF8VaR9fMpoE|Z6Dw?NS!gBb1#luYFr24d8 zqP4@z3+SHFP*N}~tMGOtrm{ufEo>fvdCP_bE$Af@MgLvUWjx=h8Da42BE`dBC!C$w zIl?RbcI43^+VQ%1hLZOcHSy&GZ%3{iZzwT}m^A&@Oqc5G6R&`uA?@j^Nz>0I_bEaR z=&mv;txrTxXgDJhjS~$eW25!c3}gF^znoc-7$RB{gEX{m_7UX;z9aP0uwH@(*8@M( zOx`eDJQzv_!pyQyL_joRTP0b~SUdc~5YrJ)BkB`|MwS;iig?M*BXslbPdAh#6d_DM z=}96_rS+IFe){(SOUZbW41>#PcwaS%WWfLw0oTzm02R~2oiEH!0j%$Ju`=$DehElU9hYJnR^X5y^OqJZ>_Of{^U zOV!TK5f@~nh`4z%wLT&#S6wTyq1*6y(hu727-;Aj&~J!HJVfk4Vj)d;I(fs`IN?+W zkq57C7ZU+B=}byv5BE~`dm<`e!XYI1haH8OjFpKfCditGDYImtfuKqe2&osb*)vwi z%^w{oO36>ogZfdaLJ8>)E8SGI=p}pY*PY7(p zErRniYvFLr6*vM@4-323aEgTor%OzI2ob_ITC%_#qO{k7i@EfcPZkKy87@%B@iNyU zQK4Ge_}(XiJCa9tj1Rz81!)IzTflWl0CYN{th~h7qHIxafphL z99g(@P5(`={d?FvX&anS^SgWG^`8b!pJZv_l~iNA@XelI_Sw2mE$ugbaZJtl2ia+1 zTl>zc%(1Fmec_`A|5VR{E~TGJo1e~)zGd-bdX>lh69HH2wRUc9AJ_MJ{fC7%_bRvV z@#z(@p?`p&Y}>&(m!7Wu@YM-(e}|L1yS{Z;-DCR7)A5I6KeXBWaG0p)`JQX<2wxk_ zFgvo@aC+j|G+`V22M0WtO@DgxN_^(N+q1ULn$T-lZNwo-%i(W*9=5nxTQZ~sEFytz zOJ#f2Tv_wyL9kOVs4v(8Ac;Am%v?tY{4Jk-cH|K!!>KQ(>@PcC9DU)4Mdt#?n#usj zRmG&vwj|xU?aj7NZblx{ZMIiXzWT-cb$vf?toTqj?@yum;`O>m?gjXqO0O&Ed!S_U zi7BhsbQTOL%>HK8_?tTt_eGsw<#pP*ZB58dr}<{a)2>JEi`nR(a{h$Lh5kV|-A34y ztf?B4c-3m*vNm^ngiE()Y9+RiVMqcUah}h=6>e)mY0`=8pYc!)ie55 zblPFs&o3v~t!caVMo7Eg>@w?)wR-TV(Bj1QnJs?rcRV+`xYOmzDL?JFExfX$$K{SM z>~0U+Z8NfOMeyK<7vFcg7xbh@mu7qqZspgtJFzbWS_;1--5M0sriRe zY*VG>x!}Id=dzmB$E)Vp+9yBH@r&7+Z!l*-^a|fe+mF}yo)0w+ zI!}zwt?2tE;jy*fV(-AIe~b+3ANy|^2{$;_JAIw_8>_T$TvuIx;vQl4&8%sa^VYmw zJK?969p@AjR{!v6T;8S~A5P?yuRfg7+I88Sac(v)d$xRh6@2y8x8L^jH#xp0N9XFQ zxOJJLtcZf)ZBC8y>eOw*)%(_mnso>&+1TTy^TY6KLu+E!pXt2t2h;vz_#@ws>wBZ) z!?V=~_J4SO-D9cjqX2x`W>pyk+4|gUNPS(BI*KSmKyOT@8R&=U;Y?^ts z{+NBv_tw8|j(r)_xBH@!^S2(q?Y(b~fpgD*D^)k$Bssf>t{5NZJpS8>d#`Q3wARjX zp1~*GgO}VkZrLDdR;*j<+1_Ja{k_L_j)Ou^&2RUl^y#tE=Qm=C?i};{_~#mr>QR^9 zo}9eq_tFiYr*xZ;vF*yWxHm6#Q(jdJ_IKz5_TE$a#^YwQ!=o;b%*g08b#}CgQBd9^`*B_aw~eqrWW4*DcB!t*hV*YQ zId$rLYtryxr&?C0mz|tZmsIYuG)MnbP5<47D}Rn!-?HTBy}~KOgTMZZ-z8^czrXyp zc1r)@@%i@WEPGcDc1&F6J#oy(zpF2Hjf}98l<&;&88m2q*Po|c{H4eHcmFs_K0h%1 z_~cLV@7|xf&!~3z{C4*8{h!~yAG>bqkG*>R_T#4I2PVGy_wqK!JO93PTTvW-cc+2) ze0j+B&{^ksk#|dvw)8H!VBUIe`fm%znR)2m=3O>wHU8l3j;S4Q^?4OunCQDepC>lz zFmC9QEf%(x*FIz|Ej-x%%=JF4{j_df9^czM%jm+y!d&O%99-_y6cQF(l+}p0VxQr+WfCCx_k{@Q@euWT9^Oh3`i@Rvz^q z;>J5*7@&RV^0Ltd&sXK2@n3UC80>AfQ74u6+WxSY>z%_|Q|4BlG>=#~>gDJS_e@Sa zh{_u}G@$#-yyZ@_EEB9nA*qoEi`uXG{kO_%le2zLI`V69vmoPuK0iDE>5x-qb!Wzy zIa4-=FFxw9me^&j^@pE9fLJ{NDl@Am3eae?(NJ^eE^Zp}?To%Yq9 zP*joaIB`k9l_NIuL{|duiLUnaD?7i%`{DSN`@;oCj_nE+>>2BMaQJs=%T6C#{o>ck zfjdKNH$NZlGw5w@e;dCaHZ6*%x*0pJ<4v1l@3OOJvaMekj#)h1IrJ}w!rMEFR@vWm z(LJ;KSf8m5+13871+UE9PA=1KACZ0b(jKeiO$CqA+RVDT^5wr{mwD>Gf4wsJe!KT( zDaWUXgj@Eyyx1OY;3_T~b8x#;(9M;32G+~|IcB|QqvaOAsEvOn-q_N1h4br=-x(g!UbGqh+ekv=`1ZYwE{t z*|lMlUzUse=1Zqr+65iUKGq}qk@clR@qHg3x@F5E?~U7S;{I-eS`w7RAHk|Ddg+3K|aEB4yKqLXJ0b@RjK3_e_t zI5_U=+F`xzM^@K6ZF{=RezpCdDW}Jre{p+~RE$?~QL3*{8c` zr{fIq&3&G=J}wz8X1?8>)xYPQ8okw1)8DV|Fwp;*X(=9ZOeHZib@RaiFZN|Ouzc#}>VEg40)3!dp%oB&%K3jKa`|g^%7q_>n zdwbyExtqPh(+2-BELn271f~V569=R7mCJWRPFt8(bY)E(=-CoA8Y@g6q_d~+W`~_x zmcO4oRv;E%++$MJ<@U65KV8x)|D&f-FCUxer_YQw+6f${CjGJ~V{i3$Ct4)C+;L7{ zZz<^WX#SYRheq#uI?Ff4JYxEF&y>x>C(jbQKWmj%6>1ya#U{qq!Fgd$^RE5pE#`ontF4}Qn@o(p-OU%cYg65fR0Z1#^Z8Go6ySrD~Yvh9NZ2Eb-0zz`4Q5c>0LCQ6@QGvK$xY%1Wy_81&V$R9=E z-6wd!1M4w9>{c05_oncRA0iNtf7iXb5I!QxCy|18r{H+jfRM=)q?B4sQ7lPkc!~?3 zS>R2AoI|kEg7YU3%P8z}>bDDEr&8g8PgjL|TN#&!KHU`V!-)g12#0lVGOT}bGfYfU zVLMC+&wFwJio0n-h++y7Nbr2RYT#*W>E0qyEwvosoCVP*iw)caDR5^DpKrsG$MNx4 zqaPea{Lclf8w_|wYvC22at8Mspd==+U&KIba-7&`*_rwzjGqW-Y6HG%LO*F!i=xT+ zA8rB0uNqU#s6t8W0#3MqnE*N0f_qQAydbSD7(RMEu-HWKIU` zr6l1V5Q&P6iH-5=7fWJ9x#G-x3I?~4*?8wn0>qi(oN#f9h`vK@m4lrrJm+)^3}?!| zv{|+__FqpS!e$Zq$cq%XJs2Ba_FONd^}(K#&H)VH!N5FOXQGhqE`?*hFT_EZhONs$ z=tq*N=gIUw{Xpn%M9|Mf!IoDp{EdbD9OxreF(V-_tC6??z@rGZ_VG!zh?0jr89vq4 z1dRnW7SLEgV*!l?G#1cUKw|-o1vD1WSU_U|jRiCo&{&``7FbEFVTTiUH}Q`Tdz*25 zS1MfeVXi!~RL}*YdVXH`Dg+e<0uKQk_rcRTgp`{2!iGPg(#U_HkuSBoiTUu#4H?)< zp05S_FY}G%`Py)1p6JWdW^fYUw}r8cUrTtH(8^ezZVjK;CkAwy@bSx?^l=Q_0maio zc-9Q>&r{n%2YLP!3==w}y%G%fUv*$#8u1Cwn8L%oA2tkkuh}q^1#eJNw7ybWv;Z51 zZ=JAVXka!B4lk*|aKE07ha3KE7}fzBX2bzQTe0zsIbdi(HXdxXsld!QV0dDRO^ZAJ z42-D{d;-9R;VCT!#@H0GK=sdnso|Zx$`q)$zF+mLh$p@G1cNg-V~SqkaUbCFH}bp2p2 zm`))y5L-5trw@{Y;eA#ng>>lMNT*N9bC#wM8c10O^RPaG;T={Qvl&%B^lUm0^~86* zFoo?Rkm@t&6w=wr@=zXP(0NFQ9T}$3VFIal&FB=;*~{{f4l(FFEwD8{q`?$w5kjos z7wgrC(vyZGjZg;Hg8g!YqptC$sZbnRDcPhIWfOc_fZSUF9c?eH zO*r@sJP?jOQXo}#bczRc?j@x$2M)3DtdQnl4jcv%IEG5mq0IuRIzhVDAUOp7!4Iut zYoHqle_9kKS}BsWhhLOzAuE>!U`4_!b~KHJQn}D8V&FRhm}dw+!h;n4(Hyb7p~N44 zkz-rP4I@{<#^%rk2>3$qO$+MJ1D@C@{y9P0#pgiupBr%SfEMcpHuvV6k)7}_y9m|O zz=gV2z!T;Q>>gynAIf1&wCGPp@}M%{POF}bql|=D*ezlgMCUPAKETbvNH|fzD^3vb z9`o@Yuhb*~uErEE`igXIsp{o{5zr`FRKXA*i-`Fzpi9sp_y$9opfyB5k_PCy@wuy3 zApKmN0c)=Rk1g<7f(FOhRSxJEcc(0W{UI{lCtuDbsS7qL&U)g^L-)WkP-qB zt1=EEc0`#Fv70W3h#hk!MC@pmLPSYx!HKZzK$`1&ukRJ^-$bR6CPb8#ChVV)l$A!~ zU`HCBk(?vW6{qG2g9?*HnUq{|+v#=vk2iR}kWViDQW&@M1`mBx6EqgkSU_U|jRiCo z&{#lY0gVMT7SLEgV*!l?G#1cUK-B^bt^fI#PhVc@(AH#bHLU;bK5WGG|E~~nGa1+a zQ4n#%4cGm+#g+mQw{>y-kL&h4h`8>b01>zDnEikmaF1*KRS*^T1GFKHfnLX(P`ogW zJTb7Z9Y6@`f$-g{ub!-ZyX)1-{lpN!$QHL4aH|5c-fwwEaYbxR&{#lY0gVMT7SLEg zV*!l?G#1cUKw|-o1vD1WSm1x31#m@-i)CDMjBXYA|3|ALv(P2ggV@Y2i5S<9Ae;QY5W|w z5K4}pX~37Bn-a|71Ko^$(2s=peLx5Ysb9*J^qs;l+LTESre4+_1)mK^Jw`F$MqkYc zUnU>*Xe?oMCXJ~B$4&9mXK$K59{+{%`zXl&KaX*&bN~PV literal 0 HcmV?d00001 diff --git a/src/main/resources/templates/service.java.ftl b/src/main/resources/templates/service.java.ftl new file mode 100644 index 0000000..e3232f3 --- /dev/null +++ b/src/main/resources/templates/service.java.ftl @@ -0,0 +1,20 @@ +package ${package.Service}; + +import ${package.Entity}.${entity}; +import ${superServiceClassPackage}; + +/** + *

+ * ${table.comment!} 服务类 + *

+ * + * @author ${author} + * @since ${date} + */ +<#if kotlin> +interface ${table.serviceName} : ${superServiceClass}<${entity}> +<#else> +public interface ${table.serviceName} extends ${superServiceClass}<${entity}> { + +} + diff --git a/src/main/resources/templates/service.java.vm b/src/main/resources/templates/service.java.vm new file mode 100644 index 0000000..e6f7828 --- /dev/null +++ b/src/main/resources/templates/service.java.vm @@ -0,0 +1,20 @@ +package ${package.Service}; + +import ${package.Entity}.${entity}; +import ${superServiceClassPackage}; + +/** + *

+ * $!{table.comment} 服务类 + *

+ * + * @author ${author} + * @since ${date} + */ +#if(${kotlin}) +interface ${table.serviceName} : ${superServiceClass}<${entity}> +#else +public interface ${table.serviceName} extends ${superServiceClass}<${entity}> { + +} +#end diff --git a/src/test/java/com/sa/zentao/NetworkMonitor.java b/src/test/java/com/sa/zentao/NetworkMonitor.java new file mode 100644 index 0000000..29be65d --- /dev/null +++ b/src/test/java/com/sa/zentao/NetworkMonitor.java @@ -0,0 +1,22 @@ +//package com.sa.zentao; +// +//import java.net.NetworkInterface; +//import java.net.InetAddress; +//import java.net.SocketException; +// +//public class NetworkMonitor { +// public static void main(String[] args) { +// try { +// NetworkInterface networkInterface = NetworkInterface.getByInetAddress(InetAddress.getLocalHost()); +// long startBytes = networkInterface.getParent().getInBytes(); +// while (true) { +// long currentBytes = networkInterface.getNetworkInterface().getInBytes(); +// long bytesTransferred = currentBytes - startBytes; +// System.out.println("Bytes transferred: " + bytesTransferred); +// Thread.sleep(1000); +// } +// } catch (SocketException e) { +// e.printStackTrace(); +// } +// } +//} \ No newline at end of file diff --git a/src/test/java/com/sa/zentao/ZentaoApplicationTests.java b/src/test/java/com/sa/zentao/ZentaoApplicationTests.java new file mode 100644 index 0000000..04c41a2 --- /dev/null +++ b/src/test/java/com/sa/zentao/ZentaoApplicationTests.java @@ -0,0 +1,19 @@ +package com.sa.zentao; + +import com.sa.zentao.task.SpringTaskJob; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +class ZentaoApplicationTests { + + @Autowired + private com.sa.zentao.task.SpringTaskJob springTaskJob; + + @Test + void contextLoads() { + springTaskJob.ywTask();; + } + +}