From 1faf38893e62c094d5e16cdba769d43c1219b91c Mon Sep 17 00:00:00 2001 From: fangyang2021 <3020949587@qq.com> Date: Thu, 21 Nov 2024 11:15:48 +0800 Subject: [PATCH] first commit --- .gitignore | 51 + admin/pom.xml | 90 + admin/src/main/java/com/yyy/Application.java | 17 + .../com/yyy/web/config/SwaggerConfig.java | 72 + .../controller/common/CommonController.java | 154 + .../web/controller/ums/OauthController.java | 88 + .../web/controller/ums/UmsMenuController.java | 104 + .../ums/UmsOrganizationController.java | 112 + .../web/controller/ums/UmsRoleController.java | 101 + .../web/controller/ums/UmsUserController.java | 233 ++ admin/src/main/resources/application-dev.yml | 69 + admin/src/main/resources/application-prod.yml | 60 + admin/src/main/resources/application.yml | 54 + admin/src/main/resources/banner.txt | 22 + admin/src/main/resources/logback-spring.xml | 152 + .../main/resources/mybatis/mybatis-config.xml | 20 + common/pom.xml | 100 + .../java/com/yyy/common/annotation/Excel.java | 188 + .../com/yyy/common/annotation/Excels.java | 17 + .../java/com/yyy/common/config/AppConfig.java | 102 + .../java/com/yyy/common/config/QRConfig.java | 30 + .../com/yyy/common/config/ServerConfig.java | 33 + .../com/yyy/common/constant/Constants.java | 146 + .../yyy/common/constant/ShiroConstants.java | 77 + .../core/controller/BaseController.java | 249 ++ .../com/yyy/common/core/domain/Result.java | 69 + .../yyy/common/core/domain/ResultCode.java | 32 + .../yyy/common/core/domain/dto/LoginDto.java | 34 + .../common/core/domain/dto/UmsMenuDto.java | 54 + .../core/domain/dto/UmsOrganizationDto.java | 44 + .../common/core/domain/dto/UmsRoleDto.java | 44 + .../common/core/domain/dto/UmsUserAddDto.java | 60 + .../core/domain/dto/UmsUserPasswordDto.java | 33 + .../core/domain/dto/UmsUserQueryDto.java | 46 + .../core/domain/dto/UmsUserSelfDto.java | 39 + .../common/core/domain/entity/UmsMenu.java | 118 + .../core/domain/entity/UmsOrganization.java | 100 + .../common/core/domain/entity/UmsRole.java | 104 + .../core/domain/entity/UmsRoleMenu.java | 34 + .../common/core/domain/entity/UmsUser.java | 177 + .../domain/entity/UmsUserOrganization.java | 34 + .../core/domain/entity/UmsUserRole.java | 34 + .../yyy/common/core/domain/vo/LoginVo.java | 47 + .../yyy/common/core/domain/vo/UmsMenuVo.java | 68 + .../core/domain/vo/UmsOrganizationVo.java | 52 + .../yyy/common/core/domain/vo/UmsRoleVo.java | 60 + .../yyy/common/core/domain/vo/UmsUserVo.java | 69 + .../com/yyy/common/core/page/PageDomain.java | 89 + .../yyy/common/core/page/TableDataInfo.java | 85 + .../yyy/common/core/page/TableSupport.java | 56 + .../com/yyy/common/core/qr/PdfCellUtill.java | 118 + .../common/core/qr/QrCodeManageAction.java | 197 + .../com/yyy/common/core/text/CharsetKit.java | 88 + .../com/yyy/common/core/text/Convert.java | 1007 +++++ .../yyy/common/core/text/StrFormatter.java | 93 + .../com/yyy/common/enums/AssetStatusEnum.java | 40 + .../yyy/common/enums/BusinessStatusEnum.java | 29 + .../java/com/yyy/common/enums/ConfigEnum.java | 23 + .../com/yyy/common/enums/DetectTypeEnum.java | 37 + .../com/yyy/common/enums/EncodingEum.java | 43 + .../common/enums/OrganizationTypeEnum.java | 39 + .../com/yyy/common/enums/ScrapTypeEnum.java | 35 + .../java/com/yyy/common/enums/SexEnum.java | 29 + .../enums/StockTackingDetailStatusEnum.java | 28 + .../common/enums/StocktakingStatusEnum.java | 24 + .../com/yyy/common/enums/UserStatusEnum.java | 28 + .../yyy/common/exception/CustomException.java | 41 + .../common/exception/DemoModeException.java | 13 + .../yyy/common/exception/GlobalException.java | 56 + .../common/exception/ServiceException.java | 56 + .../yyy/common/exception/UtilException.java | 24 + .../common/exception/base/BaseException.java | 21 + .../common/exception/file/FileException.java | 17 + .../FileNameLengthLimitExceededException.java | 13 + .../file/FileSizeLimitExceededException.java | 14 + .../exception/file/FileUploadException.java | 59 + .../file/InvalidExtensionException.java | 78 + .../common/exception/job/TaskException.java | 32 + .../exception/user/BlackListException.java | 14 + .../exception/user/CaptchaException.java | 16 + .../exception/user/RoleBlockedException.java | 14 + .../exception/user/UserBlockedException.java | 14 + .../exception/user/UserDeleteException.java | 14 + .../common/exception/user/UserException.java | 16 + .../user/UserNotExistsException.java | 14 + .../user/UserPasswordNotMatchException.java | 14 + .../UserPasswordRetryLimitCountException.java | 14 + ...UserPasswordRetryLimitExceedException.java | 14 + .../com/yyy/common/utils/bean/BeanUtils.java | 104 + .../yyy/common/utils/common/DateUtils.java | 217 + .../yyy/common/utils/common/DictUtils.java | 191 + .../com/yyy/common/utils/common/MD5Utils.java | 48 + .../yyy/common/utils/common/PageUtils.java | 34 + .../yyy/common/utils/common/ServletUtils.java | 217 + .../yyy/common/utils/common/StringUtils.java | 636 +++ .../com/yyy/common/utils/common/Threads.java | 94 + .../yyy/common/utils/eam/DocumentsUtil.java | 4 + .../utils/eam/ResidualValueCalculator.java | 71 + .../yyy/common/utils/file/FileTypeUtils.java | 77 + .../common/utils/file/FileUploadUtils.java | 231 ++ .../com/yyy/common/utils/file/FileUtils.java | 285 ++ .../com/yyy/common/utils/file/ImageUtils.java | 98 + .../yyy/common/utils/file/MimeTypeUtils.java | 59 + .../common/utils/poi/ExcelHandlerAdapter.java | 25 + .../com/yyy/common/utils/poi/ExcelUtil.java | 1714 ++++++++ .../common/utils/reflect/ReflectUtils.java | 405 ++ .../yyy/common/utils/security/JwtUtils.java | 58 + .../common/utils/security/SessionHolder.java | 22 + .../yyy/common/utils/spring/SpringUtils.java | 157 + .../com/yyy/common/utils/sql/SqlUtil.java | 76 + .../com/yyy/common/utils/uuid/IdUtils.java | 47 + .../java/com/yyy/common/utils/uuid/Seq.java | 87 + .../yyy/common/utils/uuid/SnowFlakeUtil.java | 75 + .../java/com/yyy/common/utils/uuid/UUID.java | 485 +++ flowable/pom.xml | 84 + .../common/constant/ProcessConstants.java | 77 + .../flowable/common/enums/FlowComment.java | 40 + .../yyy/flowable/common/enums/FlowStatus.java | 40 + .../yyy/flowable/config/FlowableConfig.java | 30 + .../config/MyDefaultProcessDiagramCanvas.java | 95 + .../flowable/controller/FlFormController.java | 120 + .../controller/FlFormItemController.java | 98 + .../controller/FlowDefinitionController.java | 202 + .../controller/FlowInstanceController.java | 62 + .../controller/FlowTaskController.java | 259 ++ .../flowable/domain/dto/FlowCommentDto.java | 21 + .../flowable/domain/dto/FlowFromFieldDTO.java | 11 + .../yyy/flowable/domain/dto/FlowNextDto.java | 17 + .../flowable/domain/dto/FlowSaveXmlVo.java | 24 + .../yyy/flowable/domain/dto/FlowTaskDto.java | 103 + .../flowable/domain/dto/FlowViewerDto.java | 19 + .../yyy/flowable/domain/vo/FlowQueryVo.java | 28 + .../yyy/flowable/domain/vo/FlowTaskVo.java | 54 + .../flowable/domain/vo/ReturnTaskNodeVo.java | 20 + .../flowable/factory/FlowServiceFactory.java | 39 + .../flow/CustomProcessDiagramCanvas.java | 366 ++ .../flow/CustomProcessDiagramGenerator.java | 400 ++ .../yyy/flowable/flow/FindNextNodeUtil.java | 253 ++ .../com/yyy/flowable/flow/FlowableUtils.java | 585 +++ .../listener/FlowExecutionListener.java | 34 + .../flowable/listener/FlowTaskListener.java | 30 + .../flowable/service/EamFormLinkService.java | 12 + .../service/IFlowDefinitionService.java | 82 + .../service/IFlowInstanceService.java | 50 + .../flowable/service/IFlowTaskService.java | 211 + .../service/impl/EamFormLinkServiceImpl.java | 59 + .../impl/FlowDefinitionServiceImpl.java | 252 ++ .../service/impl/FlowInstanceServiceImpl.java | 139 + .../service/impl/FlowTaskServiceImpl.java | 1312 ++++++ framework/pom.xml | 52 + .../aspect/GlobalExceptionHandler.java | 78 + .../framework/aspect/GlobalRequestAspect.java | 100 + .../aspect/GlobalResponseAspect.java | 63 + .../com/yyy/framework/aspect/SqlHandler.java | 35 + .../framework/config/MyBatisPlusConfig.java | 27 + .../shiro/service/SysPasswordService.java | 79 + modules/pom.xml | 28 + .../com/yyy/minio/config/MinioConfig.java | 45 + pom.xml | 317 ++ sql/eam.sql | 3506 +++++++++++++++++ system/pom.xml | 22 + .../system/controller/EamAssetController.java | 327 ++ .../controller/EamAssetLogController.java | 58 + .../EamBasicCategoryController.java | 115 + .../EamBasicFinancialCategoryController.java | 104 + .../EamBasicMaintenanceVendorController.java | 98 + ...EamBasicManufacturersVendorController.java | 93 + .../EamBasicPositionController.java | 104 + .../EamBasicSupplierVendorController.java | 97 + .../EamBasicWarehouseController.java | 98 + .../EamBusinessAllocateController.java | 153 + .../EamBusinessBorrowController.java | 156 + .../EamBusinessCollectionController.java | 160 + .../EamBusinessOutboundController.java | 154 + .../EamBusinessRetirementController.java | 174 + .../EamBusinessReturnController.java | 158 + .../EamBusinessReturnInventoryController.java | 153 + .../EamBusinessStorageController.java | 170 + .../EamBusinessTransferController.java | 157 + .../system/controller/EamHomeController.java | 31 + .../controller/EamRepairController.java | 142 + .../controller/EamRepairFaultController.java | 136 + .../controller/EamRepairTypeController.java | 100 + .../EamStocktakingDetailsController.java | 107 + .../EamStocktakingJobController.java | 207 + .../EamStocktakingPlanController.java | 121 + .../system/controller/QrCodeController.java | 37 + .../yyy/system/entity/dto/EamAssetDto.java | 152 + .../yyy/system/entity/dto/EamAssetLogDto.java | 35 + .../system/entity/dto/EamAssetQueryDto.java | 64 + .../entity/dto/EamBasicCategoryDto.java | 45 + .../dto/EamBasicFinancialCategoryDto.java | 42 + .../dto/EamBasicMaintenanceVendorDto.java | 52 + .../dto/EamBasicManufacturersVendorDto.java | 38 + .../entity/dto/EamBasicPositionDto.java | 36 + .../entity/dto/EamBasicSupplierVendorDto.java | 52 + .../entity/dto/EamBasicWarehouseDto.java | 32 + .../entity/dto/EamBusinessAllocateDto.java | 63 + .../entity/dto/EamBusinessBorrowDto.java | 64 + .../entity/dto/EamBusinessCollectionDto.java | 70 + .../entity/dto/EamBusinessOutboundDto.java | 86 + .../dto/EamBusinessRegistrationDto.java | 59 + .../entity/dto/EamBusinessRetirementDto.java | 61 + .../entity/dto/EamBusinessReturnDto.java | 64 + .../dto/EamBusinessReturnInventoryDto.java | 71 + .../entity/dto/EamBusinessStorageDto.java | 68 + .../entity/dto/EamBusinessTransferDto.java | 72 + .../yyy/system/entity/dto/EamRepairDto.java | 52 + .../system/entity/dto/EamRepairFaultDto.java | 42 + .../system/entity/dto/EamRepairTypeDto.java | 34 + .../system/entity/dto/EamSparePartsDto.java | 23 + .../entity/dto/EamStocktakingDetailsDto.java | 43 + .../entity/dto/EamStocktakingJobDto.java | 87 + .../entity/dto/EamStocktakingPlanDto.java | 72 + .../entity/dto/EamWarehouseAssetDto.java | 29 + .../entity/dto/EamWarehouseInventoryDto.java | 43 + .../com/yyy/system/entity/dto/FlFormDto.java | 49 + .../yyy/system/entity/dto/FlFormItemDto.java | 57 + .../yyy/system/entity/dto/FlListenerDto.java | 56 + .../yyy/system/entity/dto/FlowProcDefDto.java | 56 + .../system/entity/excel/EamAssetExcel.java | 197 + .../com/yyy/system/entity/pojo/EamAsset.java | 398 ++ .../yyy/system/entity/pojo/EamAssetLog.java | 89 + .../system/entity/pojo/EamBasicCategory.java | 101 + .../pojo/EamBasicFinancialCategory.java | 95 + .../pojo/EamBasicMaintenanceVendor.java | 119 + .../pojo/EamBasicManufacturersVendor.java | 89 + .../system/entity/pojo/EamBasicPosition.java | 82 + .../entity/pojo/EamBasicSupplierVendor.java | 118 + .../system/entity/pojo/EamBasicWarehouse.java | 77 + .../entity/pojo/EamBusinessAllocate.java | 136 + .../system/entity/pojo/EamBusinessBorrow.java | 132 + .../entity/pojo/EamBusinessCollection.java | 151 + .../entity/pojo/EamBusinessOutbound.java | 152 + .../entity/pojo/EamBusinessRegistration.java | 97 + .../entity/pojo/EamBusinessRetirement.java | 141 + .../system/entity/pojo/EamBusinessReturn.java | 149 + .../pojo/EamBusinessReturnInventory.java | 151 + .../entity/pojo/EamBusinessStorage.java | 144 + .../entity/pojo/EamBusinessTransfer.java | 156 + .../com/yyy/system/entity/pojo/EamRepair.java | 116 + .../system/entity/pojo/EamRepairFault.java | 101 + .../yyy/system/entity/pojo/EamRepairType.java | 83 + .../entity/pojo/EamStocktakingDetails.java | 101 + .../system/entity/pojo/EamStocktakingJob.java | 181 + .../entity/pojo/EamStocktakingPlan.java | 181 + .../system/entity/pojo/EamWarehouseAsset.java | 40 + .../entity/pojo/EamWarehouseInventory.java | 44 + .../com/yyy/system/entity/pojo/FlForm.java | 117 + .../yyy/system/entity/pojo/FlFormItem.java | 101 + .../yyy/system/entity/pojo/FlListener.java | 100 + .../yyy/system/entity/vo/EamAssetLogVo.java | 57 + .../com/yyy/system/entity/vo/EamAssetVo.java | 181 + .../system/entity/vo/EamBasicCategoryVo.java | 64 + .../vo/EamBasicFinancialCategoryVo.java | 64 + .../vo/EamBasicMaintenanceVendorVo.java | 75 + .../vo/EamBasicManufacturersVendorVo.java | 60 + .../system/entity/vo/EamBasicPositionVo.java | 57 + .../entity/vo/EamBasicSupplierVendorVo.java | 75 + .../system/entity/vo/EamBasicWarehouseVo.java | 52 + .../entity/vo/EamBusinessAllocateVo.java | 84 + .../system/entity/vo/EamBusinessBorrowVo.java | 82 + .../entity/vo/EamBusinessCollectionVo.java | 90 + .../entity/vo/EamBusinessOutboundVo.java | 91 + .../entity/vo/EamBusinessRegistrationVo.java | 65 + .../entity/vo/EamBusinessRetirementVo.java | 89 + .../vo/EamBusinessReturnInventoryVo.java | 93 + .../system/entity/vo/EamBusinessReturnVo.java | 89 + .../entity/vo/EamBusinessStorageVo.java | 97 + .../entity/vo/EamBusinessTransferVo.java | 93 + .../com/yyy/system/entity/vo/EamChartVo.java | 23 + .../com/yyy/system/entity/vo/EamHomeVo.java | 55 + .../system/entity/vo/EamRepairFaultVo.java | 69 + .../yyy/system/entity/vo/EamRepairTypeVo.java | 57 + .../com/yyy/system/entity/vo/EamRepairVo.java | 77 + .../entity/vo/EamStocktakingDetailsVo.java | 71 + .../system/entity/vo/EamStocktakingJobVo.java | 115 + .../entity/vo/EamStocktakingPlanVo.java | 102 + .../com/yyy/system/entity/vo/EamTotalVo.java | 26 + .../system/entity/vo/EamWarehouseAssetVo.java | 50 + .../entity/vo/EamWarehouseInventoryVo.java | 85 + .../system/entity/vo/EamWarningBorrowVo.java | 95 + .../yyy/system/entity/vo/FlFormItemVo.java | 82 + .../com/yyy/system/entity/vo/FlFormVo.java | 77 + .../yyy/system/entity/vo/FlListenerVo.java | 82 + .../yyy/system/mapper/EamAssetLogMapper.java | 18 + .../com/yyy/system/mapper/EamAssetMapper.java | 32 + .../system/mapper/EamBasicCategoryMapper.java | 16 + .../EamBasicFinancialCategoryMapper.java | 15 + .../EamBasicMaintenanceVendorMapper.java | 15 + .../EamBasicManufacturersVendorMapper.java | 18 + .../system/mapper/EamBasicPositionMapper.java | 15 + .../mapper/EamBasicSupplierVendorMapper.java | 15 + .../mapper/EamBasicWarehouseMapper.java | 15 + .../mapper/EamBusinessAllocateMapper.java | 15 + .../mapper/EamBusinessBorrowMapper.java | 15 + .../mapper/EamBusinessCollectionMapper.java | 15 + .../mapper/EamBusinessOutboundMapper.java | 15 + .../mapper/EamBusinessRegistrationMapper.java | 15 + .../mapper/EamBusinessRetirementMapper.java | 15 + .../EamBusinessReturnInventoryMapper.java | 15 + .../mapper/EamBusinessReturnMapper.java | 15 + .../mapper/EamBusinessStorageMapper.java | 15 + .../mapper/EamBusinessTransferMapper.java | 15 + .../system/mapper/EamRepairFaultMapper.java | 15 + .../yyy/system/mapper/EamRepairMapper.java | 15 + .../system/mapper/EamRepairTypeMapper.java | 15 + .../mapper/EamStocktakingDetailsMapper.java | 15 + .../mapper/EamStocktakingJobMapper.java | 15 + .../mapper/EamStocktakingPlanMapper.java | 15 + .../mapper/EamWarehouseAssetMapper.java | 19 + .../mapper/EamWarehouseInventoryMapper.java | 23 + .../yyy/system/mapper/FlFormItemMapper.java | 15 + .../com/yyy/system/mapper/FlFormMapper.java | 15 + .../yyy/system/mapper/FlListenerMapper.java | 15 + .../yyy/system/mapper/FlowDeployMapper.java | 29 + .../com/yyy/system/mapper/UmsMenuMapper.java | 24 + .../system/mapper/UmsOrganizationMapper.java | 14 + .../com/yyy/system/mapper/UmsRoleMapper.java | 22 + .../yyy/system/mapper/UmsRoleMenuMapper.java | 15 + .../com/yyy/system/mapper/UmsUserMapper.java | 17 + .../mapper/UmsUserOrganizationMapper.java | 14 + .../yyy/system/mapper/UmsUserRoleMapper.java | 14 + .../system/service/EamAssetLogService.java | 21 + .../yyy/system/service/EamAssetService.java | 51 + .../service/EamBasicCategoryService.java | 18 + .../EamBasicFinancialCategoryService.java | 15 + .../EamBasicMaintenanceVendorService.java | 15 + .../EamBasicManufacturersVendorService.java | 18 + .../service/EamBasicPositionService.java | 15 + .../EamBasicSupplierVendorService.java | 15 + .../service/EamBasicWarehouseService.java | 15 + .../service/EamBusinessAllocateService.java | 20 + .../service/EamBusinessBorrowService.java | 19 + .../service/EamBusinessCollectionService.java | 22 + .../service/EamBusinessOutboundService.java | 19 + .../EamBusinessRegistrationService.java | 20 + .../service/EamBusinessRetirementService.java | 22 + .../EamBusinessReturnInventoryService.java | 22 + .../service/EamBusinessReturnService.java | 23 + .../service/EamBusinessStorageService.java | 19 + .../service/EamBusinessTransferService.java | 22 + .../system/service/EamRepairFaultService.java | 23 + .../yyy/system/service/EamRepairService.java | 24 + .../system/service/EamRepairTypeService.java | 15 + .../service/EamStocktakingDetailsService.java | 17 + .../service/EamStocktakingJobService.java | 17 + .../service/EamStocktakingPlanService.java | 17 + .../service/EamWarehouseAssetService.java | 20 + .../yyy/system/service/FlFormItemService.java | 17 + .../com/yyy/system/service/FlFormService.java | 19 + .../yyy/system/service/FlListenerService.java | 15 + .../yyy/system/service/UmsMenuService.java | 27 + .../service/UmsOrganizationService.java | 13 + .../system/service/UmsRoleMenuService.java | 12 + .../yyy/system/service/UmsRoleService.java | 33 + .../yyy/system/service/UmsUserService.java | 55 + .../service/impl/EamAssetLogServiceImpl.java | 45 + .../service/impl/EamAssetServiceImpl.java | 313 ++ .../impl/EamBasicCategoryServiceImpl.java | 38 + .../EamBasicFinancialCategoryServiceImpl.java | 35 + .../EamBasicMaintenanceVendorServiceImpl.java | 35 + ...amBasicManufacturersVendorServiceImpl.java | 40 + .../impl/EamBasicPositionServiceImpl.java | 35 + .../EamBasicSupplierVendorServiceImpl.java | 39 + .../impl/EamBasicWarehouseServiceImpl.java | 35 + .../impl/EamBusinessAllocateServiceImpl.java | 72 + .../impl/EamBusinessBorrowServiceImpl.java | 66 + .../EamBusinessCollectionServiceImpl.java | 103 + .../impl/EamBusinessOutboundServiceImpl.java | 77 + .../EamBusinessRegistrationServiceImpl.java | 52 + .../EamBusinessRetirementServiceImpl.java | 88 + ...EamBusinessReturnInventoryServiceImpl.java | 81 + .../impl/EamBusinessReturnServiceImpl.java | 74 + .../impl/EamBusinessStorageServiceImpl.java | 81 + .../impl/EamBusinessTransferServiceImpl.java | 99 + .../impl/EamRepairFaultServiceImpl.java | 60 + .../service/impl/EamRepairServiceImpl.java | 95 + .../impl/EamRepairTypeServiceImpl.java | 35 + .../EamStocktakingDetailsServiceImpl.java | 56 + .../impl/EamStocktakingJobServiceImpl.java | 80 + .../impl/EamStocktakingPlanServiceImpl.java | 81 + .../impl/EamWarehouseAssetServiceImpl.java | 96 + .../service/impl/FlFormItemServiceImpl.java | 49 + .../service/impl/FlFormServiceImpl.java | 59 + .../service/impl/FlListenerServiceImpl.java | 35 + .../service/impl/UmsMenuServiceImpl.java | 62 + .../impl/UmsOrganizationServiceImpl.java | 29 + .../service/impl/UmsRoleMenuServiceImpl.java | 25 + .../service/impl/UmsRoleServiceImpl.java | 89 + .../service/impl/UmsUserServiceImpl.java | 184 + .../resources/mapper/EamAssetLogMapper.xml | 63 + .../main/resources/mapper/EamAssetMapper.xml | 411 ++ .../mapper/EamBasicCategoryMapper.xml | 71 + .../EamBasicFinancialCategoryMapper.xml | 67 + .../EamBasicMaintenanceVendorMapper.xml | 82 + .../EamBasicManufacturersVendorMapper.xml | 63 + .../mapper/EamBasicPositionMapper.xml | 58 + .../mapper/EamBasicSupplierVendorMapper.xml | 82 + .../mapper/EamBasicWarehouseMapper.xml | 54 + .../mapper/EamBusinessAllocateMapper.xml | 88 + .../mapper/EamBusinessBorrowMapper.xml | 88 + .../mapper/EamBusinessCollectionMapper.xml | 96 + .../mapper/EamBusinessOutboundMapper.xml | 96 + .../mapper/EamBusinessRegistrationMapper.xml | 72 + .../mapper/EamBusinessRetirementMapper.xml | 96 + .../EamBusinessReturnInventoryMapper.xml | 96 + .../mapper/EamBusinessReturnMapper.xml | 96 + .../mapper/EamBusinessStorageMapper.xml | 92 + .../mapper/EamBusinessTransferMapper.xml | 100 + .../resources/mapper/EamRepairFaultMapper.xml | 72 + .../main/resources/mapper/EamRepairMapper.xml | 80 + .../resources/mapper/EamRepairTypeMapper.xml | 59 + .../mapper/EamStocktakingDetailsMapper.xml | 72 + .../mapper/EamStocktakingJobMapper.xml | 108 + .../mapper/EamStocktakingPlanMapper.xml | 108 + .../mapper/EamWarehouseAssetMapper.xml | 49 + .../mapper/EamWarehouseInventoryMapper.xml | 125 + .../resources/mapper/FlFormItemMapper.xml | 71 + .../main/resources/mapper/FlFormMapper.xml | 79 + .../resources/mapper/FlListenerMapper.xml | 71 + .../main/resources/mapper/UmsMenuMapper.xml | 47 + .../mapper/UmsOrganizationMapper.xml | 79 + .../main/resources/mapper/UmsRoleMapper.xml | 42 + .../resources/mapper/UmsRoleMenuMapper.xml | 15 + .../main/resources/mapper/UmsUserMapper.xml | 78 + .../mapper/UmsUserOrganizationMapper.xml | 31 + .../resources/mapper/UmsUserRoleMapper.xml | 31 + .../mapper/flowable/FlowDeployMapper.xml | 67 + system/src/main/resources/test.bpmn20.xml | 40 + .../resources/员工资产交接.bpmn20.xml | 40 + .../resources/员工资产报修.bpmn20.xml | 40 + .../resources/员工资产报失.bpmn20.xml | 40 + .../resources/员工资产申请.bpmn20.xml | 40 + .../resources/物品领用申请.bpmn20.xml | 40 + .../resources/设备报修申请.bpmn20.xml | 40 + .../resources/资产设备报废.bpmn20.xml | 40 + .../resources/资产采购申请.bpmn20.xml | 40 + 438 files changed, 40596 insertions(+) create mode 100644 .gitignore create mode 100644 admin/pom.xml create mode 100644 admin/src/main/java/com/yyy/Application.java create mode 100644 admin/src/main/java/com/yyy/web/config/SwaggerConfig.java create mode 100644 admin/src/main/java/com/yyy/web/controller/common/CommonController.java create mode 100644 admin/src/main/java/com/yyy/web/controller/ums/OauthController.java create mode 100644 admin/src/main/java/com/yyy/web/controller/ums/UmsMenuController.java create mode 100644 admin/src/main/java/com/yyy/web/controller/ums/UmsOrganizationController.java create mode 100644 admin/src/main/java/com/yyy/web/controller/ums/UmsRoleController.java create mode 100644 admin/src/main/java/com/yyy/web/controller/ums/UmsUserController.java create mode 100644 admin/src/main/resources/application-dev.yml create mode 100644 admin/src/main/resources/application-prod.yml create mode 100644 admin/src/main/resources/application.yml create mode 100644 admin/src/main/resources/banner.txt create mode 100644 admin/src/main/resources/logback-spring.xml create mode 100644 admin/src/main/resources/mybatis/mybatis-config.xml create mode 100644 common/pom.xml create mode 100644 common/src/main/java/com/yyy/common/annotation/Excel.java create mode 100644 common/src/main/java/com/yyy/common/annotation/Excels.java create mode 100644 common/src/main/java/com/yyy/common/config/AppConfig.java create mode 100644 common/src/main/java/com/yyy/common/config/QRConfig.java create mode 100644 common/src/main/java/com/yyy/common/config/ServerConfig.java create mode 100644 common/src/main/java/com/yyy/common/constant/Constants.java create mode 100644 common/src/main/java/com/yyy/common/constant/ShiroConstants.java create mode 100644 common/src/main/java/com/yyy/common/core/controller/BaseController.java create mode 100644 common/src/main/java/com/yyy/common/core/domain/Result.java create mode 100644 common/src/main/java/com/yyy/common/core/domain/ResultCode.java create mode 100644 common/src/main/java/com/yyy/common/core/domain/dto/LoginDto.java create mode 100644 common/src/main/java/com/yyy/common/core/domain/dto/UmsMenuDto.java create mode 100644 common/src/main/java/com/yyy/common/core/domain/dto/UmsOrganizationDto.java create mode 100644 common/src/main/java/com/yyy/common/core/domain/dto/UmsRoleDto.java create mode 100644 common/src/main/java/com/yyy/common/core/domain/dto/UmsUserAddDto.java create mode 100644 common/src/main/java/com/yyy/common/core/domain/dto/UmsUserPasswordDto.java create mode 100644 common/src/main/java/com/yyy/common/core/domain/dto/UmsUserQueryDto.java create mode 100644 common/src/main/java/com/yyy/common/core/domain/dto/UmsUserSelfDto.java create mode 100644 common/src/main/java/com/yyy/common/core/domain/entity/UmsMenu.java create mode 100644 common/src/main/java/com/yyy/common/core/domain/entity/UmsOrganization.java create mode 100644 common/src/main/java/com/yyy/common/core/domain/entity/UmsRole.java create mode 100644 common/src/main/java/com/yyy/common/core/domain/entity/UmsRoleMenu.java create mode 100644 common/src/main/java/com/yyy/common/core/domain/entity/UmsUser.java create mode 100644 common/src/main/java/com/yyy/common/core/domain/entity/UmsUserOrganization.java create mode 100644 common/src/main/java/com/yyy/common/core/domain/entity/UmsUserRole.java create mode 100644 common/src/main/java/com/yyy/common/core/domain/vo/LoginVo.java create mode 100644 common/src/main/java/com/yyy/common/core/domain/vo/UmsMenuVo.java create mode 100644 common/src/main/java/com/yyy/common/core/domain/vo/UmsOrganizationVo.java create mode 100644 common/src/main/java/com/yyy/common/core/domain/vo/UmsRoleVo.java create mode 100644 common/src/main/java/com/yyy/common/core/domain/vo/UmsUserVo.java create mode 100644 common/src/main/java/com/yyy/common/core/page/PageDomain.java create mode 100644 common/src/main/java/com/yyy/common/core/page/TableDataInfo.java create mode 100644 common/src/main/java/com/yyy/common/core/page/TableSupport.java create mode 100644 common/src/main/java/com/yyy/common/core/qr/PdfCellUtill.java create mode 100644 common/src/main/java/com/yyy/common/core/qr/QrCodeManageAction.java create mode 100644 common/src/main/java/com/yyy/common/core/text/CharsetKit.java create mode 100644 common/src/main/java/com/yyy/common/core/text/Convert.java create mode 100644 common/src/main/java/com/yyy/common/core/text/StrFormatter.java create mode 100644 common/src/main/java/com/yyy/common/enums/AssetStatusEnum.java create mode 100644 common/src/main/java/com/yyy/common/enums/BusinessStatusEnum.java create mode 100644 common/src/main/java/com/yyy/common/enums/ConfigEnum.java create mode 100644 common/src/main/java/com/yyy/common/enums/DetectTypeEnum.java create mode 100644 common/src/main/java/com/yyy/common/enums/EncodingEum.java create mode 100644 common/src/main/java/com/yyy/common/enums/OrganizationTypeEnum.java create mode 100644 common/src/main/java/com/yyy/common/enums/ScrapTypeEnum.java create mode 100644 common/src/main/java/com/yyy/common/enums/SexEnum.java create mode 100644 common/src/main/java/com/yyy/common/enums/StockTackingDetailStatusEnum.java create mode 100644 common/src/main/java/com/yyy/common/enums/StocktakingStatusEnum.java create mode 100644 common/src/main/java/com/yyy/common/enums/UserStatusEnum.java create mode 100644 common/src/main/java/com/yyy/common/exception/CustomException.java create mode 100644 common/src/main/java/com/yyy/common/exception/DemoModeException.java create mode 100644 common/src/main/java/com/yyy/common/exception/GlobalException.java create mode 100644 common/src/main/java/com/yyy/common/exception/ServiceException.java create mode 100644 common/src/main/java/com/yyy/common/exception/UtilException.java create mode 100644 common/src/main/java/com/yyy/common/exception/base/BaseException.java create mode 100644 common/src/main/java/com/yyy/common/exception/file/FileException.java create mode 100644 common/src/main/java/com/yyy/common/exception/file/FileNameLengthLimitExceededException.java create mode 100644 common/src/main/java/com/yyy/common/exception/file/FileSizeLimitExceededException.java create mode 100644 common/src/main/java/com/yyy/common/exception/file/FileUploadException.java create mode 100644 common/src/main/java/com/yyy/common/exception/file/InvalidExtensionException.java create mode 100644 common/src/main/java/com/yyy/common/exception/job/TaskException.java create mode 100644 common/src/main/java/com/yyy/common/exception/user/BlackListException.java create mode 100644 common/src/main/java/com/yyy/common/exception/user/CaptchaException.java create mode 100644 common/src/main/java/com/yyy/common/exception/user/RoleBlockedException.java create mode 100644 common/src/main/java/com/yyy/common/exception/user/UserBlockedException.java create mode 100644 common/src/main/java/com/yyy/common/exception/user/UserDeleteException.java create mode 100644 common/src/main/java/com/yyy/common/exception/user/UserException.java create mode 100644 common/src/main/java/com/yyy/common/exception/user/UserNotExistsException.java create mode 100644 common/src/main/java/com/yyy/common/exception/user/UserPasswordNotMatchException.java create mode 100644 common/src/main/java/com/yyy/common/exception/user/UserPasswordRetryLimitCountException.java create mode 100644 common/src/main/java/com/yyy/common/exception/user/UserPasswordRetryLimitExceedException.java create mode 100644 common/src/main/java/com/yyy/common/utils/bean/BeanUtils.java create mode 100644 common/src/main/java/com/yyy/common/utils/common/DateUtils.java create mode 100644 common/src/main/java/com/yyy/common/utils/common/DictUtils.java create mode 100644 common/src/main/java/com/yyy/common/utils/common/MD5Utils.java create mode 100644 common/src/main/java/com/yyy/common/utils/common/PageUtils.java create mode 100644 common/src/main/java/com/yyy/common/utils/common/ServletUtils.java create mode 100644 common/src/main/java/com/yyy/common/utils/common/StringUtils.java create mode 100644 common/src/main/java/com/yyy/common/utils/common/Threads.java create mode 100644 common/src/main/java/com/yyy/common/utils/eam/DocumentsUtil.java create mode 100644 common/src/main/java/com/yyy/common/utils/eam/ResidualValueCalculator.java create mode 100644 common/src/main/java/com/yyy/common/utils/file/FileTypeUtils.java create mode 100644 common/src/main/java/com/yyy/common/utils/file/FileUploadUtils.java create mode 100644 common/src/main/java/com/yyy/common/utils/file/FileUtils.java create mode 100644 common/src/main/java/com/yyy/common/utils/file/ImageUtils.java create mode 100644 common/src/main/java/com/yyy/common/utils/file/MimeTypeUtils.java create mode 100644 common/src/main/java/com/yyy/common/utils/poi/ExcelHandlerAdapter.java create mode 100644 common/src/main/java/com/yyy/common/utils/poi/ExcelUtil.java create mode 100644 common/src/main/java/com/yyy/common/utils/reflect/ReflectUtils.java create mode 100644 common/src/main/java/com/yyy/common/utils/security/JwtUtils.java create mode 100644 common/src/main/java/com/yyy/common/utils/security/SessionHolder.java create mode 100644 common/src/main/java/com/yyy/common/utils/spring/SpringUtils.java create mode 100644 common/src/main/java/com/yyy/common/utils/sql/SqlUtil.java create mode 100644 common/src/main/java/com/yyy/common/utils/uuid/IdUtils.java create mode 100644 common/src/main/java/com/yyy/common/utils/uuid/Seq.java create mode 100644 common/src/main/java/com/yyy/common/utils/uuid/SnowFlakeUtil.java create mode 100644 common/src/main/java/com/yyy/common/utils/uuid/UUID.java create mode 100644 flowable/pom.xml create mode 100644 flowable/src/main/java/com/yyy/flowable/common/constant/ProcessConstants.java create mode 100644 flowable/src/main/java/com/yyy/flowable/common/enums/FlowComment.java create mode 100644 flowable/src/main/java/com/yyy/flowable/common/enums/FlowStatus.java create mode 100644 flowable/src/main/java/com/yyy/flowable/config/FlowableConfig.java create mode 100644 flowable/src/main/java/com/yyy/flowable/config/MyDefaultProcessDiagramCanvas.java create mode 100644 flowable/src/main/java/com/yyy/flowable/controller/FlFormController.java create mode 100644 flowable/src/main/java/com/yyy/flowable/controller/FlFormItemController.java create mode 100644 flowable/src/main/java/com/yyy/flowable/controller/FlowDefinitionController.java create mode 100644 flowable/src/main/java/com/yyy/flowable/controller/FlowInstanceController.java create mode 100644 flowable/src/main/java/com/yyy/flowable/controller/FlowTaskController.java create mode 100644 flowable/src/main/java/com/yyy/flowable/domain/dto/FlowCommentDto.java create mode 100644 flowable/src/main/java/com/yyy/flowable/domain/dto/FlowFromFieldDTO.java create mode 100644 flowable/src/main/java/com/yyy/flowable/domain/dto/FlowNextDto.java create mode 100644 flowable/src/main/java/com/yyy/flowable/domain/dto/FlowSaveXmlVo.java create mode 100644 flowable/src/main/java/com/yyy/flowable/domain/dto/FlowTaskDto.java create mode 100644 flowable/src/main/java/com/yyy/flowable/domain/dto/FlowViewerDto.java create mode 100644 flowable/src/main/java/com/yyy/flowable/domain/vo/FlowQueryVo.java create mode 100644 flowable/src/main/java/com/yyy/flowable/domain/vo/FlowTaskVo.java create mode 100644 flowable/src/main/java/com/yyy/flowable/domain/vo/ReturnTaskNodeVo.java create mode 100644 flowable/src/main/java/com/yyy/flowable/factory/FlowServiceFactory.java create mode 100644 flowable/src/main/java/com/yyy/flowable/flow/CustomProcessDiagramCanvas.java create mode 100644 flowable/src/main/java/com/yyy/flowable/flow/CustomProcessDiagramGenerator.java create mode 100644 flowable/src/main/java/com/yyy/flowable/flow/FindNextNodeUtil.java create mode 100644 flowable/src/main/java/com/yyy/flowable/flow/FlowableUtils.java create mode 100644 flowable/src/main/java/com/yyy/flowable/listener/FlowExecutionListener.java create mode 100644 flowable/src/main/java/com/yyy/flowable/listener/FlowTaskListener.java create mode 100644 flowable/src/main/java/com/yyy/flowable/service/EamFormLinkService.java create mode 100644 flowable/src/main/java/com/yyy/flowable/service/IFlowDefinitionService.java create mode 100644 flowable/src/main/java/com/yyy/flowable/service/IFlowInstanceService.java create mode 100644 flowable/src/main/java/com/yyy/flowable/service/IFlowTaskService.java create mode 100644 flowable/src/main/java/com/yyy/flowable/service/impl/EamFormLinkServiceImpl.java create mode 100644 flowable/src/main/java/com/yyy/flowable/service/impl/FlowDefinitionServiceImpl.java create mode 100644 flowable/src/main/java/com/yyy/flowable/service/impl/FlowInstanceServiceImpl.java create mode 100644 flowable/src/main/java/com/yyy/flowable/service/impl/FlowTaskServiceImpl.java create mode 100644 framework/pom.xml create mode 100644 framework/src/main/java/com/yyy/framework/aspect/GlobalExceptionHandler.java create mode 100644 framework/src/main/java/com/yyy/framework/aspect/GlobalRequestAspect.java create mode 100644 framework/src/main/java/com/yyy/framework/aspect/GlobalResponseAspect.java create mode 100644 framework/src/main/java/com/yyy/framework/aspect/SqlHandler.java create mode 100644 framework/src/main/java/com/yyy/framework/config/MyBatisPlusConfig.java create mode 100644 framework/src/main/java/com/yyy/framework/shiro/service/SysPasswordService.java create mode 100644 modules/pom.xml create mode 100644 modules/src/main/java/com/yyy/minio/config/MinioConfig.java create mode 100644 pom.xml create mode 100644 sql/eam.sql create mode 100644 system/pom.xml create mode 100644 system/src/main/java/com/yyy/system/controller/EamAssetController.java create mode 100644 system/src/main/java/com/yyy/system/controller/EamAssetLogController.java create mode 100644 system/src/main/java/com/yyy/system/controller/EamBasicCategoryController.java create mode 100644 system/src/main/java/com/yyy/system/controller/EamBasicFinancialCategoryController.java create mode 100644 system/src/main/java/com/yyy/system/controller/EamBasicMaintenanceVendorController.java create mode 100644 system/src/main/java/com/yyy/system/controller/EamBasicManufacturersVendorController.java create mode 100644 system/src/main/java/com/yyy/system/controller/EamBasicPositionController.java create mode 100644 system/src/main/java/com/yyy/system/controller/EamBasicSupplierVendorController.java create mode 100644 system/src/main/java/com/yyy/system/controller/EamBasicWarehouseController.java create mode 100644 system/src/main/java/com/yyy/system/controller/EamBusinessAllocateController.java create mode 100644 system/src/main/java/com/yyy/system/controller/EamBusinessBorrowController.java create mode 100644 system/src/main/java/com/yyy/system/controller/EamBusinessCollectionController.java create mode 100644 system/src/main/java/com/yyy/system/controller/EamBusinessOutboundController.java create mode 100644 system/src/main/java/com/yyy/system/controller/EamBusinessRetirementController.java create mode 100644 system/src/main/java/com/yyy/system/controller/EamBusinessReturnController.java create mode 100644 system/src/main/java/com/yyy/system/controller/EamBusinessReturnInventoryController.java create mode 100644 system/src/main/java/com/yyy/system/controller/EamBusinessStorageController.java create mode 100644 system/src/main/java/com/yyy/system/controller/EamBusinessTransferController.java create mode 100644 system/src/main/java/com/yyy/system/controller/EamHomeController.java create mode 100644 system/src/main/java/com/yyy/system/controller/EamRepairController.java create mode 100644 system/src/main/java/com/yyy/system/controller/EamRepairFaultController.java create mode 100644 system/src/main/java/com/yyy/system/controller/EamRepairTypeController.java create mode 100644 system/src/main/java/com/yyy/system/controller/EamStocktakingDetailsController.java create mode 100644 system/src/main/java/com/yyy/system/controller/EamStocktakingJobController.java create mode 100644 system/src/main/java/com/yyy/system/controller/EamStocktakingPlanController.java create mode 100644 system/src/main/java/com/yyy/system/controller/QrCodeController.java create mode 100644 system/src/main/java/com/yyy/system/entity/dto/EamAssetDto.java create mode 100644 system/src/main/java/com/yyy/system/entity/dto/EamAssetLogDto.java create mode 100644 system/src/main/java/com/yyy/system/entity/dto/EamAssetQueryDto.java create mode 100644 system/src/main/java/com/yyy/system/entity/dto/EamBasicCategoryDto.java create mode 100644 system/src/main/java/com/yyy/system/entity/dto/EamBasicFinancialCategoryDto.java create mode 100644 system/src/main/java/com/yyy/system/entity/dto/EamBasicMaintenanceVendorDto.java create mode 100644 system/src/main/java/com/yyy/system/entity/dto/EamBasicManufacturersVendorDto.java create mode 100644 system/src/main/java/com/yyy/system/entity/dto/EamBasicPositionDto.java create mode 100644 system/src/main/java/com/yyy/system/entity/dto/EamBasicSupplierVendorDto.java create mode 100644 system/src/main/java/com/yyy/system/entity/dto/EamBasicWarehouseDto.java create mode 100644 system/src/main/java/com/yyy/system/entity/dto/EamBusinessAllocateDto.java create mode 100644 system/src/main/java/com/yyy/system/entity/dto/EamBusinessBorrowDto.java create mode 100644 system/src/main/java/com/yyy/system/entity/dto/EamBusinessCollectionDto.java create mode 100644 system/src/main/java/com/yyy/system/entity/dto/EamBusinessOutboundDto.java create mode 100644 system/src/main/java/com/yyy/system/entity/dto/EamBusinessRegistrationDto.java create mode 100644 system/src/main/java/com/yyy/system/entity/dto/EamBusinessRetirementDto.java create mode 100644 system/src/main/java/com/yyy/system/entity/dto/EamBusinessReturnDto.java create mode 100644 system/src/main/java/com/yyy/system/entity/dto/EamBusinessReturnInventoryDto.java create mode 100644 system/src/main/java/com/yyy/system/entity/dto/EamBusinessStorageDto.java create mode 100644 system/src/main/java/com/yyy/system/entity/dto/EamBusinessTransferDto.java create mode 100644 system/src/main/java/com/yyy/system/entity/dto/EamRepairDto.java create mode 100644 system/src/main/java/com/yyy/system/entity/dto/EamRepairFaultDto.java create mode 100644 system/src/main/java/com/yyy/system/entity/dto/EamRepairTypeDto.java create mode 100644 system/src/main/java/com/yyy/system/entity/dto/EamSparePartsDto.java create mode 100644 system/src/main/java/com/yyy/system/entity/dto/EamStocktakingDetailsDto.java create mode 100644 system/src/main/java/com/yyy/system/entity/dto/EamStocktakingJobDto.java create mode 100644 system/src/main/java/com/yyy/system/entity/dto/EamStocktakingPlanDto.java create mode 100644 system/src/main/java/com/yyy/system/entity/dto/EamWarehouseAssetDto.java create mode 100644 system/src/main/java/com/yyy/system/entity/dto/EamWarehouseInventoryDto.java create mode 100644 system/src/main/java/com/yyy/system/entity/dto/FlFormDto.java create mode 100644 system/src/main/java/com/yyy/system/entity/dto/FlFormItemDto.java create mode 100644 system/src/main/java/com/yyy/system/entity/dto/FlListenerDto.java create mode 100644 system/src/main/java/com/yyy/system/entity/dto/FlowProcDefDto.java create mode 100644 system/src/main/java/com/yyy/system/entity/excel/EamAssetExcel.java create mode 100644 system/src/main/java/com/yyy/system/entity/pojo/EamAsset.java create mode 100644 system/src/main/java/com/yyy/system/entity/pojo/EamAssetLog.java create mode 100644 system/src/main/java/com/yyy/system/entity/pojo/EamBasicCategory.java create mode 100644 system/src/main/java/com/yyy/system/entity/pojo/EamBasicFinancialCategory.java create mode 100644 system/src/main/java/com/yyy/system/entity/pojo/EamBasicMaintenanceVendor.java create mode 100644 system/src/main/java/com/yyy/system/entity/pojo/EamBasicManufacturersVendor.java create mode 100644 system/src/main/java/com/yyy/system/entity/pojo/EamBasicPosition.java create mode 100644 system/src/main/java/com/yyy/system/entity/pojo/EamBasicSupplierVendor.java create mode 100644 system/src/main/java/com/yyy/system/entity/pojo/EamBasicWarehouse.java create mode 100644 system/src/main/java/com/yyy/system/entity/pojo/EamBusinessAllocate.java create mode 100644 system/src/main/java/com/yyy/system/entity/pojo/EamBusinessBorrow.java create mode 100644 system/src/main/java/com/yyy/system/entity/pojo/EamBusinessCollection.java create mode 100644 system/src/main/java/com/yyy/system/entity/pojo/EamBusinessOutbound.java create mode 100644 system/src/main/java/com/yyy/system/entity/pojo/EamBusinessRegistration.java create mode 100644 system/src/main/java/com/yyy/system/entity/pojo/EamBusinessRetirement.java create mode 100644 system/src/main/java/com/yyy/system/entity/pojo/EamBusinessReturn.java create mode 100644 system/src/main/java/com/yyy/system/entity/pojo/EamBusinessReturnInventory.java create mode 100644 system/src/main/java/com/yyy/system/entity/pojo/EamBusinessStorage.java create mode 100644 system/src/main/java/com/yyy/system/entity/pojo/EamBusinessTransfer.java create mode 100644 system/src/main/java/com/yyy/system/entity/pojo/EamRepair.java create mode 100644 system/src/main/java/com/yyy/system/entity/pojo/EamRepairFault.java create mode 100644 system/src/main/java/com/yyy/system/entity/pojo/EamRepairType.java create mode 100644 system/src/main/java/com/yyy/system/entity/pojo/EamStocktakingDetails.java create mode 100644 system/src/main/java/com/yyy/system/entity/pojo/EamStocktakingJob.java create mode 100644 system/src/main/java/com/yyy/system/entity/pojo/EamStocktakingPlan.java create mode 100644 system/src/main/java/com/yyy/system/entity/pojo/EamWarehouseAsset.java create mode 100644 system/src/main/java/com/yyy/system/entity/pojo/EamWarehouseInventory.java create mode 100644 system/src/main/java/com/yyy/system/entity/pojo/FlForm.java create mode 100644 system/src/main/java/com/yyy/system/entity/pojo/FlFormItem.java create mode 100644 system/src/main/java/com/yyy/system/entity/pojo/FlListener.java create mode 100644 system/src/main/java/com/yyy/system/entity/vo/EamAssetLogVo.java create mode 100644 system/src/main/java/com/yyy/system/entity/vo/EamAssetVo.java create mode 100644 system/src/main/java/com/yyy/system/entity/vo/EamBasicCategoryVo.java create mode 100644 system/src/main/java/com/yyy/system/entity/vo/EamBasicFinancialCategoryVo.java create mode 100644 system/src/main/java/com/yyy/system/entity/vo/EamBasicMaintenanceVendorVo.java create mode 100644 system/src/main/java/com/yyy/system/entity/vo/EamBasicManufacturersVendorVo.java create mode 100644 system/src/main/java/com/yyy/system/entity/vo/EamBasicPositionVo.java create mode 100644 system/src/main/java/com/yyy/system/entity/vo/EamBasicSupplierVendorVo.java create mode 100644 system/src/main/java/com/yyy/system/entity/vo/EamBasicWarehouseVo.java create mode 100644 system/src/main/java/com/yyy/system/entity/vo/EamBusinessAllocateVo.java create mode 100644 system/src/main/java/com/yyy/system/entity/vo/EamBusinessBorrowVo.java create mode 100644 system/src/main/java/com/yyy/system/entity/vo/EamBusinessCollectionVo.java create mode 100644 system/src/main/java/com/yyy/system/entity/vo/EamBusinessOutboundVo.java create mode 100644 system/src/main/java/com/yyy/system/entity/vo/EamBusinessRegistrationVo.java create mode 100644 system/src/main/java/com/yyy/system/entity/vo/EamBusinessRetirementVo.java create mode 100644 system/src/main/java/com/yyy/system/entity/vo/EamBusinessReturnInventoryVo.java create mode 100644 system/src/main/java/com/yyy/system/entity/vo/EamBusinessReturnVo.java create mode 100644 system/src/main/java/com/yyy/system/entity/vo/EamBusinessStorageVo.java create mode 100644 system/src/main/java/com/yyy/system/entity/vo/EamBusinessTransferVo.java create mode 100644 system/src/main/java/com/yyy/system/entity/vo/EamChartVo.java create mode 100644 system/src/main/java/com/yyy/system/entity/vo/EamHomeVo.java create mode 100644 system/src/main/java/com/yyy/system/entity/vo/EamRepairFaultVo.java create mode 100644 system/src/main/java/com/yyy/system/entity/vo/EamRepairTypeVo.java create mode 100644 system/src/main/java/com/yyy/system/entity/vo/EamRepairVo.java create mode 100644 system/src/main/java/com/yyy/system/entity/vo/EamStocktakingDetailsVo.java create mode 100644 system/src/main/java/com/yyy/system/entity/vo/EamStocktakingJobVo.java create mode 100644 system/src/main/java/com/yyy/system/entity/vo/EamStocktakingPlanVo.java create mode 100644 system/src/main/java/com/yyy/system/entity/vo/EamTotalVo.java create mode 100644 system/src/main/java/com/yyy/system/entity/vo/EamWarehouseAssetVo.java create mode 100644 system/src/main/java/com/yyy/system/entity/vo/EamWarehouseInventoryVo.java create mode 100644 system/src/main/java/com/yyy/system/entity/vo/EamWarningBorrowVo.java create mode 100644 system/src/main/java/com/yyy/system/entity/vo/FlFormItemVo.java create mode 100644 system/src/main/java/com/yyy/system/entity/vo/FlFormVo.java create mode 100644 system/src/main/java/com/yyy/system/entity/vo/FlListenerVo.java create mode 100644 system/src/main/java/com/yyy/system/mapper/EamAssetLogMapper.java create mode 100644 system/src/main/java/com/yyy/system/mapper/EamAssetMapper.java create mode 100644 system/src/main/java/com/yyy/system/mapper/EamBasicCategoryMapper.java create mode 100644 system/src/main/java/com/yyy/system/mapper/EamBasicFinancialCategoryMapper.java create mode 100644 system/src/main/java/com/yyy/system/mapper/EamBasicMaintenanceVendorMapper.java create mode 100644 system/src/main/java/com/yyy/system/mapper/EamBasicManufacturersVendorMapper.java create mode 100644 system/src/main/java/com/yyy/system/mapper/EamBasicPositionMapper.java create mode 100644 system/src/main/java/com/yyy/system/mapper/EamBasicSupplierVendorMapper.java create mode 100644 system/src/main/java/com/yyy/system/mapper/EamBasicWarehouseMapper.java create mode 100644 system/src/main/java/com/yyy/system/mapper/EamBusinessAllocateMapper.java create mode 100644 system/src/main/java/com/yyy/system/mapper/EamBusinessBorrowMapper.java create mode 100644 system/src/main/java/com/yyy/system/mapper/EamBusinessCollectionMapper.java create mode 100644 system/src/main/java/com/yyy/system/mapper/EamBusinessOutboundMapper.java create mode 100644 system/src/main/java/com/yyy/system/mapper/EamBusinessRegistrationMapper.java create mode 100644 system/src/main/java/com/yyy/system/mapper/EamBusinessRetirementMapper.java create mode 100644 system/src/main/java/com/yyy/system/mapper/EamBusinessReturnInventoryMapper.java create mode 100644 system/src/main/java/com/yyy/system/mapper/EamBusinessReturnMapper.java create mode 100644 system/src/main/java/com/yyy/system/mapper/EamBusinessStorageMapper.java create mode 100644 system/src/main/java/com/yyy/system/mapper/EamBusinessTransferMapper.java create mode 100644 system/src/main/java/com/yyy/system/mapper/EamRepairFaultMapper.java create mode 100644 system/src/main/java/com/yyy/system/mapper/EamRepairMapper.java create mode 100644 system/src/main/java/com/yyy/system/mapper/EamRepairTypeMapper.java create mode 100644 system/src/main/java/com/yyy/system/mapper/EamStocktakingDetailsMapper.java create mode 100644 system/src/main/java/com/yyy/system/mapper/EamStocktakingJobMapper.java create mode 100644 system/src/main/java/com/yyy/system/mapper/EamStocktakingPlanMapper.java create mode 100644 system/src/main/java/com/yyy/system/mapper/EamWarehouseAssetMapper.java create mode 100644 system/src/main/java/com/yyy/system/mapper/EamWarehouseInventoryMapper.java create mode 100644 system/src/main/java/com/yyy/system/mapper/FlFormItemMapper.java create mode 100644 system/src/main/java/com/yyy/system/mapper/FlFormMapper.java create mode 100644 system/src/main/java/com/yyy/system/mapper/FlListenerMapper.java create mode 100644 system/src/main/java/com/yyy/system/mapper/FlowDeployMapper.java create mode 100644 system/src/main/java/com/yyy/system/mapper/UmsMenuMapper.java create mode 100644 system/src/main/java/com/yyy/system/mapper/UmsOrganizationMapper.java create mode 100644 system/src/main/java/com/yyy/system/mapper/UmsRoleMapper.java create mode 100644 system/src/main/java/com/yyy/system/mapper/UmsRoleMenuMapper.java create mode 100644 system/src/main/java/com/yyy/system/mapper/UmsUserMapper.java create mode 100644 system/src/main/java/com/yyy/system/mapper/UmsUserOrganizationMapper.java create mode 100644 system/src/main/java/com/yyy/system/mapper/UmsUserRoleMapper.java create mode 100644 system/src/main/java/com/yyy/system/service/EamAssetLogService.java create mode 100644 system/src/main/java/com/yyy/system/service/EamAssetService.java create mode 100644 system/src/main/java/com/yyy/system/service/EamBasicCategoryService.java create mode 100644 system/src/main/java/com/yyy/system/service/EamBasicFinancialCategoryService.java create mode 100644 system/src/main/java/com/yyy/system/service/EamBasicMaintenanceVendorService.java create mode 100644 system/src/main/java/com/yyy/system/service/EamBasicManufacturersVendorService.java create mode 100644 system/src/main/java/com/yyy/system/service/EamBasicPositionService.java create mode 100644 system/src/main/java/com/yyy/system/service/EamBasicSupplierVendorService.java create mode 100644 system/src/main/java/com/yyy/system/service/EamBasicWarehouseService.java create mode 100644 system/src/main/java/com/yyy/system/service/EamBusinessAllocateService.java create mode 100644 system/src/main/java/com/yyy/system/service/EamBusinessBorrowService.java create mode 100644 system/src/main/java/com/yyy/system/service/EamBusinessCollectionService.java create mode 100644 system/src/main/java/com/yyy/system/service/EamBusinessOutboundService.java create mode 100644 system/src/main/java/com/yyy/system/service/EamBusinessRegistrationService.java create mode 100644 system/src/main/java/com/yyy/system/service/EamBusinessRetirementService.java create mode 100644 system/src/main/java/com/yyy/system/service/EamBusinessReturnInventoryService.java create mode 100644 system/src/main/java/com/yyy/system/service/EamBusinessReturnService.java create mode 100644 system/src/main/java/com/yyy/system/service/EamBusinessStorageService.java create mode 100644 system/src/main/java/com/yyy/system/service/EamBusinessTransferService.java create mode 100644 system/src/main/java/com/yyy/system/service/EamRepairFaultService.java create mode 100644 system/src/main/java/com/yyy/system/service/EamRepairService.java create mode 100644 system/src/main/java/com/yyy/system/service/EamRepairTypeService.java create mode 100644 system/src/main/java/com/yyy/system/service/EamStocktakingDetailsService.java create mode 100644 system/src/main/java/com/yyy/system/service/EamStocktakingJobService.java create mode 100644 system/src/main/java/com/yyy/system/service/EamStocktakingPlanService.java create mode 100644 system/src/main/java/com/yyy/system/service/EamWarehouseAssetService.java create mode 100644 system/src/main/java/com/yyy/system/service/FlFormItemService.java create mode 100644 system/src/main/java/com/yyy/system/service/FlFormService.java create mode 100644 system/src/main/java/com/yyy/system/service/FlListenerService.java create mode 100644 system/src/main/java/com/yyy/system/service/UmsMenuService.java create mode 100644 system/src/main/java/com/yyy/system/service/UmsOrganizationService.java create mode 100644 system/src/main/java/com/yyy/system/service/UmsRoleMenuService.java create mode 100644 system/src/main/java/com/yyy/system/service/UmsRoleService.java create mode 100644 system/src/main/java/com/yyy/system/service/UmsUserService.java create mode 100644 system/src/main/java/com/yyy/system/service/impl/EamAssetLogServiceImpl.java create mode 100644 system/src/main/java/com/yyy/system/service/impl/EamAssetServiceImpl.java create mode 100644 system/src/main/java/com/yyy/system/service/impl/EamBasicCategoryServiceImpl.java create mode 100644 system/src/main/java/com/yyy/system/service/impl/EamBasicFinancialCategoryServiceImpl.java create mode 100644 system/src/main/java/com/yyy/system/service/impl/EamBasicMaintenanceVendorServiceImpl.java create mode 100644 system/src/main/java/com/yyy/system/service/impl/EamBasicManufacturersVendorServiceImpl.java create mode 100644 system/src/main/java/com/yyy/system/service/impl/EamBasicPositionServiceImpl.java create mode 100644 system/src/main/java/com/yyy/system/service/impl/EamBasicSupplierVendorServiceImpl.java create mode 100644 system/src/main/java/com/yyy/system/service/impl/EamBasicWarehouseServiceImpl.java create mode 100644 system/src/main/java/com/yyy/system/service/impl/EamBusinessAllocateServiceImpl.java create mode 100644 system/src/main/java/com/yyy/system/service/impl/EamBusinessBorrowServiceImpl.java create mode 100644 system/src/main/java/com/yyy/system/service/impl/EamBusinessCollectionServiceImpl.java create mode 100644 system/src/main/java/com/yyy/system/service/impl/EamBusinessOutboundServiceImpl.java create mode 100644 system/src/main/java/com/yyy/system/service/impl/EamBusinessRegistrationServiceImpl.java create mode 100644 system/src/main/java/com/yyy/system/service/impl/EamBusinessRetirementServiceImpl.java create mode 100644 system/src/main/java/com/yyy/system/service/impl/EamBusinessReturnInventoryServiceImpl.java create mode 100644 system/src/main/java/com/yyy/system/service/impl/EamBusinessReturnServiceImpl.java create mode 100644 system/src/main/java/com/yyy/system/service/impl/EamBusinessStorageServiceImpl.java create mode 100644 system/src/main/java/com/yyy/system/service/impl/EamBusinessTransferServiceImpl.java create mode 100644 system/src/main/java/com/yyy/system/service/impl/EamRepairFaultServiceImpl.java create mode 100644 system/src/main/java/com/yyy/system/service/impl/EamRepairServiceImpl.java create mode 100644 system/src/main/java/com/yyy/system/service/impl/EamRepairTypeServiceImpl.java create mode 100644 system/src/main/java/com/yyy/system/service/impl/EamStocktakingDetailsServiceImpl.java create mode 100644 system/src/main/java/com/yyy/system/service/impl/EamStocktakingJobServiceImpl.java create mode 100644 system/src/main/java/com/yyy/system/service/impl/EamStocktakingPlanServiceImpl.java create mode 100644 system/src/main/java/com/yyy/system/service/impl/EamWarehouseAssetServiceImpl.java create mode 100644 system/src/main/java/com/yyy/system/service/impl/FlFormItemServiceImpl.java create mode 100644 system/src/main/java/com/yyy/system/service/impl/FlFormServiceImpl.java create mode 100644 system/src/main/java/com/yyy/system/service/impl/FlListenerServiceImpl.java create mode 100644 system/src/main/java/com/yyy/system/service/impl/UmsMenuServiceImpl.java create mode 100644 system/src/main/java/com/yyy/system/service/impl/UmsOrganizationServiceImpl.java create mode 100644 system/src/main/java/com/yyy/system/service/impl/UmsRoleMenuServiceImpl.java create mode 100644 system/src/main/java/com/yyy/system/service/impl/UmsRoleServiceImpl.java create mode 100644 system/src/main/java/com/yyy/system/service/impl/UmsUserServiceImpl.java create mode 100644 system/src/main/resources/mapper/EamAssetLogMapper.xml create mode 100644 system/src/main/resources/mapper/EamAssetMapper.xml create mode 100644 system/src/main/resources/mapper/EamBasicCategoryMapper.xml create mode 100644 system/src/main/resources/mapper/EamBasicFinancialCategoryMapper.xml create mode 100644 system/src/main/resources/mapper/EamBasicMaintenanceVendorMapper.xml create mode 100644 system/src/main/resources/mapper/EamBasicManufacturersVendorMapper.xml create mode 100644 system/src/main/resources/mapper/EamBasicPositionMapper.xml create mode 100644 system/src/main/resources/mapper/EamBasicSupplierVendorMapper.xml create mode 100644 system/src/main/resources/mapper/EamBasicWarehouseMapper.xml create mode 100644 system/src/main/resources/mapper/EamBusinessAllocateMapper.xml create mode 100644 system/src/main/resources/mapper/EamBusinessBorrowMapper.xml create mode 100644 system/src/main/resources/mapper/EamBusinessCollectionMapper.xml create mode 100644 system/src/main/resources/mapper/EamBusinessOutboundMapper.xml create mode 100644 system/src/main/resources/mapper/EamBusinessRegistrationMapper.xml create mode 100644 system/src/main/resources/mapper/EamBusinessRetirementMapper.xml create mode 100644 system/src/main/resources/mapper/EamBusinessReturnInventoryMapper.xml create mode 100644 system/src/main/resources/mapper/EamBusinessReturnMapper.xml create mode 100644 system/src/main/resources/mapper/EamBusinessStorageMapper.xml create mode 100644 system/src/main/resources/mapper/EamBusinessTransferMapper.xml create mode 100644 system/src/main/resources/mapper/EamRepairFaultMapper.xml create mode 100644 system/src/main/resources/mapper/EamRepairMapper.xml create mode 100644 system/src/main/resources/mapper/EamRepairTypeMapper.xml create mode 100644 system/src/main/resources/mapper/EamStocktakingDetailsMapper.xml create mode 100644 system/src/main/resources/mapper/EamStocktakingJobMapper.xml create mode 100644 system/src/main/resources/mapper/EamStocktakingPlanMapper.xml create mode 100644 system/src/main/resources/mapper/EamWarehouseAssetMapper.xml create mode 100644 system/src/main/resources/mapper/EamWarehouseInventoryMapper.xml create mode 100644 system/src/main/resources/mapper/FlFormItemMapper.xml create mode 100644 system/src/main/resources/mapper/FlFormMapper.xml create mode 100644 system/src/main/resources/mapper/FlListenerMapper.xml create mode 100644 system/src/main/resources/mapper/UmsMenuMapper.xml create mode 100644 system/src/main/resources/mapper/UmsOrganizationMapper.xml create mode 100644 system/src/main/resources/mapper/UmsRoleMapper.xml create mode 100644 system/src/main/resources/mapper/UmsRoleMenuMapper.xml create mode 100644 system/src/main/resources/mapper/UmsUserMapper.xml create mode 100644 system/src/main/resources/mapper/UmsUserOrganizationMapper.xml create mode 100644 system/src/main/resources/mapper/UmsUserRoleMapper.xml create mode 100644 system/src/main/resources/mapper/flowable/FlowDeployMapper.xml create mode 100644 system/src/main/resources/test.bpmn20.xml create mode 100644 system/src/main/resources/员工资产交接.bpmn20.xml create mode 100644 system/src/main/resources/员工资产报修.bpmn20.xml create mode 100644 system/src/main/resources/员工资产报失.bpmn20.xml create mode 100644 system/src/main/resources/员工资产申请.bpmn20.xml create mode 100644 system/src/main/resources/物品领用申请.bpmn20.xml create mode 100644 system/src/main/resources/设备报修申请.bpmn20.xml create mode 100644 system/src/main/resources/资产设备报废.bpmn20.xml create mode 100644 system/src/main/resources/资产采购申请.bpmn20.xml diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..13d57a2 --- /dev/null +++ b/.gitignore @@ -0,0 +1,51 @@ +HELP.md +target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/** +!**/src/test/** +doc/ +license/ +logs/ +script/ + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache +.log +*.exe + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr +.mvn +mvnw* + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ + +### VS Code ### +.vscode/ + +### generated files ### +bin/ +gen/ + +### MAC ### +.DS_Store + +### Other ### +logs/ +log +temp/ diff --git a/admin/pom.xml b/admin/pom.xml new file mode 100644 index 0000000..60bf0fb --- /dev/null +++ b/admin/pom.xml @@ -0,0 +1,90 @@ + + + + yyy + com.yyy + 1.0-SNAPSHOT + + 4.0.0 + jar + admin + + web服务入口,用户相关模板 + + + + com.yyy + framework + 1.0-SNAPSHOT + + + + com.yyy + flowable + 1.0-SNAPSHOT + + + + com.yyy + license + 1.0-SNAPSHOT + + + + org.springframework.boot + spring-boot-devtools + true + + + + org.springframework.boot + spring-boot-starter-web + + + + mysql + mysql-connector-java + + + org.springframework.boot + spring-boot-starter-jdbc + + + com.alibaba + druid-spring-boot-starter + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + 2.7.6 + + true + + + + + repackage + + + + + + org.apache.maven.plugins + maven-war-plugin + 3.0.0 + + false + ${project.artifactId} + + + + ${project.artifactId} + + \ No newline at end of file diff --git a/admin/src/main/java/com/yyy/Application.java b/admin/src/main/java/com/yyy/Application.java new file mode 100644 index 0000000..57c7987 --- /dev/null +++ b/admin/src/main/java/com/yyy/Application.java @@ -0,0 +1,17 @@ +package com.yyy; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.web.servlet.ServletComponentScan; + +/** + * @Author: fy + * @Date: 2024/03/21 + * @Description:主启动类 + */ +@SpringBootApplication +public class Application { + public static void main(String[] args) { + SpringApplication.run(Application.class,args); + } +} diff --git a/admin/src/main/java/com/yyy/web/config/SwaggerConfig.java b/admin/src/main/java/com/yyy/web/config/SwaggerConfig.java new file mode 100644 index 0000000..f5e4917 --- /dev/null +++ b/admin/src/main/java/com/yyy/web/config/SwaggerConfig.java @@ -0,0 +1,72 @@ +package com.yyy.web.config; + + +import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import springfox.documentation.builders.ApiInfoBuilder; +import springfox.documentation.builders.PathSelectors; +import springfox.documentation.builders.RequestHandlerSelectors; +import springfox.documentation.builders.RequestParameterBuilder; +import springfox.documentation.service.*; +import springfox.documentation.spi.DocumentationType; +import springfox.documentation.spring.web.plugins.Docket; + +import java.util.Collections; + +/** + * @Description knife4j配置类, 访问url:http://ip:port/doc.html + **/ +@EnableKnife4j +@Configuration +public class SwaggerConfig { + @Value("${swagger.base-package}") + private String basePackage; + @Value("${swagger.description}") + private String description; + @Value("${swagger.version}") + private String version; + @Value("${swagger.title}") + private String title; + @Value("${swagger.enabled}") + private boolean enabled; + + @Bean + public Docket api() { + return new Docket(DocumentationType.SWAGGER_2) + .enable(enabled) + .apiInfo(apiInfo()) + .globalRequestParameters( + Collections.singletonList(new RequestParameterBuilder() + .name("Authorization") + .in(ParameterType.HEADER) + .required(true) + .build())) + .produces(Collections.singleton("application/json")) + .consumes(Collections.singleton("application/json")).select() + .apis(RequestHandlerSelectors.basePackage(basePackage)) + .paths(PathSelectors.any()) + .build(); + } + + private ApiInfo apiInfo() { + return new ApiInfoBuilder() + .description(description) + .version(version) + .title(title) + .build(); + } + + @Bean + public Docket api_flowable() { + return new Docket(DocumentationType.SWAGGER_2) + .apiInfo(apiInfo()) + .select() + .apis(RequestHandlerSelectors.any()) + .paths(PathSelectors.ant("/api/flowable/**")) + .build() + .groupName("审批流相关接口") + .pathMapping("/"); + } +} diff --git a/admin/src/main/java/com/yyy/web/controller/common/CommonController.java b/admin/src/main/java/com/yyy/web/controller/common/CommonController.java new file mode 100644 index 0000000..cb0f52b --- /dev/null +++ b/admin/src/main/java/com/yyy/web/controller/common/CommonController.java @@ -0,0 +1,154 @@ +package com.yyy.web.controller.common; + +import com.alibaba.fastjson.JSONObject; +import com.yyy.common.config.AppConfig; +import com.yyy.common.config.ServerConfig; +import com.yyy.common.constant.Constants; +import com.yyy.common.core.domain.Result; +import com.yyy.common.core.domain.ResultCode; +import com.yyy.common.utils.common.StringUtils; +import com.yyy.common.utils.file.FileUploadUtils; +import com.yyy.common.utils.file.FileUtils; +import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.MediaType; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.ArrayList; +import java.util.List; + +/** + * @Author: fy + * @Date: 2024/03/21 + * @Description:通用请求处理 + */ +@Controller +@RequestMapping("/api/common") +public class CommonController { + private static final Logger log = LoggerFactory.getLogger(CommonController.class); + + private static final String FILE_DELIMETER = ","; + + @Autowired + private ServerConfig serverConfig; + + /** + * 通用下载请求 + * + * @param fileName 文件名称 + * @param delete 是否删除 + */ + @ApiOperation(value = "通用下载请求") + @PostMapping("/download") + public void fileDownload(String fileName, Boolean delete, HttpServletResponse response, HttpServletRequest request) { + try { + if (!FileUtils.checkAllowDownload(fileName)) { + throw new Exception(StringUtils.format("文件名称({})非法,不允许下载。 ", fileName)); + } + String realFileName = System.currentTimeMillis() + fileName.substring(fileName.indexOf("_") + 1); + String filePath = AppConfig.getDownloadPath() + fileName; + + response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE); + FileUtils.setAttachmentResponseHeader(response, realFileName); + FileUtils.writeBytes(filePath, response.getOutputStream()); + if (delete) { + FileUtils.deleteFile(filePath); + } + } catch (Exception e) { + log.error("下载文件失败", e); + } + } + + /** + * 通用上传请求(单个) + */ + @ApiOperation(value = "通用上传请求(单个)") + @PostMapping("/upload") + @ResponseBody + public Result uploadFile(MultipartFile file) throws Exception { + try { + // 上传文件路径 + String filePath = AppConfig.getUploadPath(); + // 上传并返回新文件名称 + String fileName = FileUploadUtils.upload(filePath, file); + String url = serverConfig.getUrl() + fileName; + + JSONObject result = new JSONObject(); + result.put("url", url); + result.put("fileName", fileName); + result.put("newFileName", FileUtils.getName(fileName)); + result.put("originalFilename", file.getOriginalFilename()); + return new Result(ResultCode.success, result); + } catch (Exception e) { + return new Result(ResultCode.operate_failure, e.getMessage()); + } + } + + /** + * 通用上传请求(多个) + */ + @ApiOperation(value = "通用上传请求(多个)") + @PostMapping("/uploads") + @ResponseBody + public Result uploadFiles(List files) throws Exception { + try { + // 上传文件路径 + String filePath = AppConfig.getUploadPath(); + List urls = new ArrayList(); + List fileNames = new ArrayList(); + List newFileNames = new ArrayList(); + List originalFilenames = new ArrayList(); + for (MultipartFile file : files) { + // 上传并返回新文件名称 + String fileName = FileUploadUtils.upload(filePath, file); + String url = serverConfig.getUrl() + fileName; + urls.add(url); + fileNames.add(fileName); + newFileNames.add(FileUtils.getName(fileName)); + originalFilenames.add(file.getOriginalFilename()); + } + JSONObject result = new JSONObject(); + result.put("urls", StringUtils.join(urls, FILE_DELIMETER)); + result.put("fileNames", StringUtils.join(fileNames, FILE_DELIMETER)); + result.put("newFileNames", StringUtils.join(newFileNames, FILE_DELIMETER)); + result.put("originalFilenames", StringUtils.join(originalFilenames, FILE_DELIMETER)); + return new Result(ResultCode.success, result); + } catch (Exception e) { + return new Result(ResultCode.operate_failure, e.getMessage()); + } + } + + /** + * 本地资源通用下载 + */ + @ApiOperation(value = "本地资源通用下载") + @PostMapping("/download/resource") + public void resourceDownload(String resource, HttpServletRequest request, HttpServletResponse response) + throws Exception { + try { + if (!FileUtils.checkAllowDownload(resource)) { + throw new Exception(StringUtils.format("资源文件({})非法,不允许下载。 ", resource)); + } + // 本地资源路径 + String localPath = AppConfig.getProfile(); + // 数据库资源地址 + String downloadPath = localPath + StringUtils.substringAfter(resource, Constants.RESOURCE_PREFIX); + // 下载名称 + String downloadName = StringUtils.substringAfterLast(downloadPath, "/"); + response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE); + FileUtils.setAttachmentResponseHeader(response, downloadName); + FileUtils.writeBytes(downloadPath, response.getOutputStream()); + } catch (Exception e) { + log.error("下载文件失败", e); + } + } +} diff --git a/admin/src/main/java/com/yyy/web/controller/ums/OauthController.java b/admin/src/main/java/com/yyy/web/controller/ums/OauthController.java new file mode 100644 index 0000000..e0479a7 --- /dev/null +++ b/admin/src/main/java/com/yyy/web/controller/ums/OauthController.java @@ -0,0 +1,88 @@ +package com.yyy.web.controller.ums; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.yyy.common.core.controller.BaseController; +import com.yyy.common.core.domain.Result; +import com.yyy.common.core.domain.dto.LoginDto; +import com.yyy.common.core.domain.entity.UmsUser; +import com.yyy.common.core.domain.vo.LoginVo; +import com.yyy.common.utils.common.MD5Utils; +import com.yyy.common.utils.security.JwtUtils; +import com.yyy.system.service.UmsMenuService; +import com.yyy.system.service.UmsOrganizationService; +import com.yyy.system.service.UmsRoleService; +import com.yyy.system.service.UmsUserService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.Set; + +/** + * @Description:登录授权相关接口 + */ +@RestController +@Api(tags = "登录授权相关接口") +@RequestMapping("api/oauth") +public class OauthController extends BaseController { + private static final Logger logger = LoggerFactory.getLogger(OauthController.class); + /** + * 服务对象 + */ + @Resource + private UmsOrganizationService umsOrganizationService; + @Resource + private UmsUserService umsUserService; + @Resource + private UmsRoleService roleService; + @Resource + private UmsMenuService umsMenuService; + + @Resource + private JwtUtils jwtUtils; + + /** + * 登录 TODO user_session表 + */ + @PostMapping("/login") + @ApiOperation(value = "登录") + public Result login(@RequestBody LoginDto loginDto, HttpServletRequest request) { + UmsUser user; + { + user = umsUserService.getOne(new QueryWrapper().eq("login_name", loginDto.getLoginName())); + if (user == null || !StringUtils.equals(user.getPassword(), MD5Utils.inputPassToDBPass(loginDto.getPassword(), user.getSalt()))) { + return Result.INVALID_USER_PASS; + } + } + Set roleSet = roleService.selectRoleKeys(user.getUserId()); + Set permsSet = umsMenuService.selectPermsByUserId(user.getUserId()); + String Authorization = jwtUtils.getToken(user.getUserId(), request.getSession().getId(), "1.0.0", "web"); + return success(LoginVo.builder() + .loginName(user.getLoginName()) + .userName(user.getUserName()) + .avatar(user.getAvatar()) + .phone(user.getPhone()) + .email(user.getEmail()) + .Authorization(Authorization) + .roles(roleSet) + .permissions(permsSet) + .build()); + } + + /** + * 登出 + */ + @PostMapping("/logout") + @ApiOperation(value = "登出") + public Result logout() { + return success(); + } +} diff --git a/admin/src/main/java/com/yyy/web/controller/ums/UmsMenuController.java b/admin/src/main/java/com/yyy/web/controller/ums/UmsMenuController.java new file mode 100644 index 0000000..15485c9 --- /dev/null +++ b/admin/src/main/java/com/yyy/web/controller/ums/UmsMenuController.java @@ -0,0 +1,104 @@ +package com.yyy.web.controller.ums; + + +import com.yyy.common.core.controller.BaseController; +import com.yyy.common.core.domain.Result; +import com.yyy.common.core.domain.dto.UmsMenuDto; +import com.yyy.common.core.domain.entity.UmsMenu; +import com.yyy.common.core.domain.vo.UmsMenuVo; +import com.yyy.common.core.page.TableDataInfo; +import com.yyy.common.utils.bean.BeanUtils; +import com.yyy.system.service.UmsMenuService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +/** + * 菜单表(ums_menu)表控制层 + * @author Fangy + * @since 2024-04-03 17:18:31 + */ +@RestController +@Api(tags = "菜单表") +@RequestMapping("api/umsMenu") +public class UmsMenuController extends BaseController { + + private static final Logger logger = LoggerFactory.getLogger(UmsMenuController.class); + /** + * 服务对象 + */ + @Resource + private UmsMenuService umsMenuService; + + /** + * 查询分页数据 + * + */ + @PostMapping("/list") + @ApiOperation(value = "查询分页数据") + public TableDataInfo list(@RequestBody UmsMenuDto umsMenuDto) { + startPage(); + List list = umsMenuService.query(umsMenuDto); + return getDataTable(UmsMenuVo.ToVo(list)); + } + + @PostMapping("/listAll") + @ApiOperation(value = "查询所有数据") + public Result listAll() { + return success(UmsMenuVo.ToVo(umsMenuService.query(new UmsMenuDto()))); + } + + + /** + * 查询详情数据 + * + */ + @PostMapping("/query") + @ApiOperation(value = "查询详情数据") + public Result query(@RequestParam Long id) { + return success(UmsMenuVo.ToVo(umsMenuService.getById(id))); + } + + /** + * 新增数据 + * + */ + @PostMapping("/add") + @ApiOperation(value = "新增数据") + public Result add(@Validated @RequestBody UmsMenuDto umsMenuDto) { + UmsMenu umsMenu = new UmsMenu(); + BeanUtils.copyProperties(umsMenuDto, umsMenu); + umsMenu.setCreateUser(getUserId()); + return umsMenuService.save(umsMenu)?success():error(); + } + + /** + * 修改数据 + * + */ + @PostMapping("/update") + @ApiOperation(value = "修改数据") + public Result update(@Validated @RequestBody UmsMenuDto umsMenuDto) { + UmsMenu umsMenu = new UmsMenu(); + BeanUtils.copyProperties(umsMenuDto, umsMenu); + umsMenu.setUpdateUser(getUserId()); + return umsMenuService.updateById(umsMenu) ? success() : error(); + } + + /** + * 删除数据 + * + */ + @PostMapping("/delete") + @ApiOperation(value = "删除数据") + public Result delete(@RequestBody List idList) { + return umsMenuService.removeBatchByIds(idList) ? success() : error(); + } +} + diff --git a/admin/src/main/java/com/yyy/web/controller/ums/UmsOrganizationController.java b/admin/src/main/java/com/yyy/web/controller/ums/UmsOrganizationController.java new file mode 100644 index 0000000..adafc24 --- /dev/null +++ b/admin/src/main/java/com/yyy/web/controller/ums/UmsOrganizationController.java @@ -0,0 +1,112 @@ +package com.yyy.web.controller.ums; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.yyy.common.core.controller.BaseController; +import com.yyy.common.core.domain.Result; +import com.yyy.common.core.domain.dto.UmsOrganizationDto; +import com.yyy.common.core.domain.entity.UmsOrganization; +import com.yyy.common.core.domain.vo.UmsOrganizationVo; +import com.yyy.common.core.page.TableDataInfo; +import com.yyy.common.enums.OrganizationTypeEnum; +import com.yyy.common.utils.bean.BeanUtils; +import com.yyy.common.utils.common.StringUtils; +import com.yyy.system.service.UmsOrganizationService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +/** + * 组织信息表(ums_organization)表控制层 + * + * @author Fangy + * @since 2024-04-03 09:47:06 + */ +@RestController +@Api(tags = "组织信息表") +@RequestMapping("api/umsOrganization") +public class UmsOrganizationController extends BaseController { + + private static final Logger logger = LoggerFactory.getLogger(UmsOrganizationController.class); + /** + * 服务对象 + */ + @Resource + private UmsOrganizationService umsOrganizationService; + + /** + * 组织树 + */ + @PostMapping("/tree") + @ApiOperation(value = "组织树") + public Result> tree() { + return success(UmsOrganizationVo.ToVo(umsOrganizationService.list(new QueryWrapper().eq("is_deleted", 0)))); + } + + /** + * 查询详情数据 + */ + @PostMapping("/query") + @ApiOperation(value = "查询详情数据") + public Result query(@RequestParam Long id) { + return success(UmsOrganizationVo.ToVo(umsOrganizationService.getById(id))); + } + + /** + * 新增数据 + */ + @PostMapping("/add") + @ApiOperation(value = "新增数据") + public Result add(@Validated @RequestBody UmsOrganizationDto umsOrganizationDto) { + if (umsOrganizationDto.getParentId()==null){ + umsOrganizationDto.setParentId(0L); + } + UmsOrganization parent = umsOrganizationService.getById(umsOrganizationDto.getParentId()); + if (parent!=null){ + String msg = OrganizationTypeEnum.enable(parent.getOrganizationType(),umsOrganizationDto.getOrganizationType()!=null?umsOrganizationDto.getOrganizationType():OrganizationTypeEnum.COMPANY.getCode()); + if (StringUtils.isNotEmpty(msg)){ + return error(msg); + } + } + + UmsOrganization umsOrganization = new UmsOrganization(); + BeanUtils.copyProperties(umsOrganizationDto, umsOrganization); + umsOrganization.setCreateUser(getUserId()); + return umsOrganizationService.save(umsOrganization) ? success() : error(); + } + + /** + * 修改数据 + */ + @PostMapping("/update") + @ApiOperation(value = "修改数据") + public Result update(@Validated @RequestBody UmsOrganizationDto umsOrganizationDto) { + UmsOrganization parent = umsOrganizationService.getById(umsOrganizationService.getById(umsOrganizationDto.getOrganizationId()).getParentId()); + if (parent!=null){ + String msg = OrganizationTypeEnum.enable(parent.getOrganizationType(),umsOrganizationDto.getOrganizationType()!=null?umsOrganizationDto.getOrganizationType():OrganizationTypeEnum.COMPANY.getCode()); + if (StringUtils.isNotEmpty(msg)){ + return error(msg); + } + } + UmsOrganization umsOrganization = new UmsOrganization(); + BeanUtils.copyProperties(umsOrganizationDto, umsOrganization); + umsOrganization.setUpdateUser(getUserId()); + return umsOrganizationService.updateById(umsOrganization) ? success() : error(); + } + + /** + * 删除数据 + */ + @PostMapping("/delete") + @ApiOperation(value = "删除数据") + public Result delete(@RequestBody List idList) { + return umsOrganizationService.removeBatchByIds(idList) ? success() : error(); + } +} + diff --git a/admin/src/main/java/com/yyy/web/controller/ums/UmsRoleController.java b/admin/src/main/java/com/yyy/web/controller/ums/UmsRoleController.java new file mode 100644 index 0000000..5283478 --- /dev/null +++ b/admin/src/main/java/com/yyy/web/controller/ums/UmsRoleController.java @@ -0,0 +1,101 @@ +package com.yyy.web.controller.ums; + +import com.yyy.common.core.controller.BaseController; +import com.yyy.common.core.domain.Result; +import com.yyy.common.core.domain.dto.UmsRoleDto; +import com.yyy.common.core.domain.entity.UmsRole; +import com.yyy.common.core.domain.vo.UmsRoleVo; +import com.yyy.common.core.page.TableDataInfo; +import com.yyy.common.utils.bean.BeanUtils; +import com.yyy.system.service.UmsRoleService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +/** + * 角色表(ums_role)表控制层 + * + * @author Fangy + * @since 2024-04-03 16:14:02 + */ +@RestController +@Api(tags = "角色表") +@RequestMapping("api/umsRole") +public class UmsRoleController extends BaseController { + + private static final Logger logger = LoggerFactory.getLogger(UmsRoleController.class); + /** + * 服务对象 + */ + @Resource + private UmsRoleService umsRoleService; + + /** + * 查询分页数据 + */ + @PostMapping("/list") + @ApiOperation(value = "查询分页数据") + public TableDataInfo list(@RequestBody UmsRoleDto umsRoleDto) { + startPage(); + List list = umsRoleService.query(umsRoleDto); + return getDataTable(UmsRoleVo.ToVo(list)); + } + + /** + * 查询详情数据 + */ + @PostMapping("/query") + @ApiOperation(value = "查询详情数据") + public Result query(@RequestParam Long id) { + return success(UmsRoleVo.ToVo(umsRoleService.getById(id))); + } + + /** + * 新增数据 + */ + @PostMapping("/add") + @ApiOperation(value = "新增数据") + public Result add(@Validated @RequestBody UmsRoleDto umsRoleDto) { + Long id = umsRoleService.selectLatestPrimaryKey() + 1; + UmsRole umsRole = new UmsRole(); + BeanUtils.copyProperties(umsRoleDto, umsRole); + umsRole.setCreateUser(getUserId()); + umsRole.setRoleId(id); + if (umsRoleService.save(umsRole)){ + umsRoleService.bindMenu(id, umsRoleDto.getMenuIdList()); + return success(); + }else { + return error(); + } + } + + /** + * 修改数据 + */ + @PostMapping("/update") + @ApiOperation(value = "修改数据") + public Result update(@Validated @RequestBody UmsRoleDto umsRoleDto) { + UmsRole umsRole = new UmsRole(); + BeanUtils.copyProperties(umsRoleDto, umsRole); + umsRole.setUpdateUser(getUserId()); + return umsRoleService.updateById(umsRole) && umsRoleService.bindMenu(umsRoleDto.getRoleId(), umsRoleDto.getMenuIdList()) ? success() : error(); + } + + /** + * 删除数据 + */ + @PostMapping("/delete") + @ApiOperation(value = "删除数据") + public Result delete(@RequestBody List idList) { + //TODO 删除角色关联的用户 + //TODO 删除角色和权限的关联 + return umsRoleService.removeBatchByIds(idList) ? success() : error(); + } +} + diff --git a/admin/src/main/java/com/yyy/web/controller/ums/UmsUserController.java b/admin/src/main/java/com/yyy/web/controller/ums/UmsUserController.java new file mode 100644 index 0000000..de8f270 --- /dev/null +++ b/admin/src/main/java/com/yyy/web/controller/ums/UmsUserController.java @@ -0,0 +1,233 @@ +package com.yyy.web.controller.ums; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.yyy.common.core.controller.BaseController; +import com.yyy.common.core.domain.Result; +import com.yyy.common.core.domain.dto.UmsUserAddDto; +import com.yyy.common.core.domain.dto.UmsUserPasswordDto; +import com.yyy.common.core.domain.dto.UmsUserQueryDto; +import com.yyy.common.core.domain.dto.UmsUserSelfDto; +import com.yyy.common.core.domain.entity.UmsUser; +import com.yyy.common.core.domain.vo.UmsUserVo; +import com.yyy.common.core.page.TableDataInfo; +import com.yyy.common.enums.ConfigEnum; +import com.yyy.common.utils.bean.BeanUtils; +import com.yyy.common.utils.common.MD5Utils; +import com.yyy.common.utils.common.StringUtils; +import com.yyy.common.utils.poi.ExcelUtil; +import com.yyy.system.service.UmsUserService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 用户表(ums_user)表控制层 + * + * @author Fangy + * @since 2024-03-22 17:31:32 + */ +@RestController +@Api(tags = "用户表") +@RequestMapping("api/umsUser") +public class UmsUserController extends BaseController { + + private static final Logger logger = LoggerFactory.getLogger(UmsUserController.class); + /** + * 服务对象 + */ + @Resource + private UmsUserService umsUserService; + + /** + * 分页查询 + */ + @PostMapping("/list") + @ApiOperation(value = "分页查询数据") + public TableDataInfo list(@RequestBody UmsUserQueryDto umsUserDto) { + startPage(); + List list = umsUserService.list(umsUserDto); + return getDataTable(UmsUserVo.ToVo(list)); + } + + /** + * 查询详情 + */ + @PostMapping("/query") + @ApiOperation(value = "查询详情") + public Result query(@RequestParam Long userId) { + return success(UmsUserVo.ToVo(umsUserService.getById(userId))); + } + + @PostMapping("/queryByIds") + @ApiOperation(value = "查询多个") + public Result queryByIds(@RequestBody List idList) { + return success(UmsUserVo.ToVo(umsUserService.listByIds(idList))); + } + + /** + * 新增 + */ + @PostMapping("/add") + @ApiOperation(value = "新增") + public Result add(@Validated @RequestBody UmsUserAddDto umsUserDto) { + if (!umsUserService.checkLoginNameUnique(null, umsUserDto.getLoginName())) { + return error("新增用户'" + umsUserDto.getLoginName() + "'失败,登录账号已存在"); + } else if (!umsUserService.checkPhoneUnique(null, umsUserDto.getPhone())) { + return error("新增用户'" + umsUserDto.getLoginName() + "'失败,手机号码已存在"); + } else if (StringUtils.isNotEmpty(umsUserDto.getEmail()) && !umsUserService.checkEmailUnique(null, umsUserDto.getEmail())) { + return error("新增用户'" + umsUserDto.getLoginName() + "'失败,邮箱账号已存在"); + } + String salt = MD5Utils.randomSalt(); + UmsUser user = new UmsUser(); + BeanUtils.copyProperties(umsUserDto, user); + user.setPassword(MD5Utils.inputPassToDBPass(umsUserDto.getPassword(), salt)); + user.setSalt(salt); + user.setCreateUser(getUserId()); + if (!umsUserService.save(user)) { + return error(); + } + Long userId = umsUserService.getOne(new QueryWrapper().eq("login_name", umsUserDto.getLoginName())).getUserId(); + if (umsUserDto.getOrganizationId() != null) { + umsUserService.bindPost(userId, umsUserDto.getOrganizationId()); + } + umsUserService.bindRole(userId, umsUserDto.getRoleId() != null ? umsUserDto.getRoleId() : Long.parseLong(ConfigEnum.DEFAULT_ROLE_ID.getInfo())); + return success(); + } + + /** + * 修改 + */ + @PostMapping("/update") + @ApiOperation(value = "修改") + public Result update(@Validated @RequestBody UmsUserAddDto umsUserDto) { + if (!umsUserService.checkLoginNameUnique(umsUserDto.getUserId(), umsUserDto.getLoginName())) { + return error("修改用户'" + umsUserDto.getLoginName() + "'失败,登录账号已存在"); + } else if (!umsUserService.checkPhoneUnique(umsUserDto.getUserId(), umsUserDto.getPhone())) { + return error("修改用户'" + umsUserDto.getLoginName() + "'失败,手机号码已存在"); + } else if (StringUtils.isNotEmpty(umsUserDto.getEmail()) && !umsUserService.checkEmailUnique(umsUserDto.getUserId(), umsUserDto.getEmail())) { + return error("修改用户'" + umsUserDto.getLoginName() + "'失败,邮箱账号已存在"); + } + if (!umsUserService.update(umsUserDto, getUserId())) { + return error(); + } + if (umsUserDto.getOrganizationId() != null) { + umsUserService.unbindPost(umsUserDto.getUserId()); + umsUserService.bindPost(umsUserDto.getUserId(), umsUserDto.getOrganizationId()); + } + if (umsUserDto.getRoleId() != null) { + umsUserService.unbindRole(umsUserDto.getUserId()); + umsUserService.bindRole(umsUserDto.getUserId(), umsUserDto.getRoleId()); + } + return success(); + } + + /** + * 修改个人基本信息 + */ + @PostMapping("/update/selfInfo") + @ApiOperation(value = "修改个人基本信息") + public Result selfInfo(@Validated @RequestBody UmsUserSelfDto userSelfDto) { + if (StringUtils.isNotEmpty(userSelfDto.getPhone()) && !umsUserService.checkPhoneUnique(getUserId(), userSelfDto.getPhone())) { + return error("操作失败,手机号码已存在"); + } else if (StringUtils.isNotEmpty(userSelfDto.getEmail()) && !umsUserService.checkEmailUnique(getUserId(), userSelfDto.getEmail())) { + return error("操作失败,邮箱账号已存在"); + } + UmsUserAddDto umsUserDto = new UmsUserAddDto(); + BeanUtils.copyProperties(userSelfDto, umsUserDto); + umsUserDto.setUserId(getUserId()); + return umsUserService.update(umsUserDto, getUserId()) ? success() : error(); + } + + /** + * 修改个人密码 + */ + @PostMapping("/update/selfPassword") + @ApiOperation(value = "修改个人密码") + public Result selfPassword(@Validated @RequestBody UmsUserPasswordDto umsUserPasswordDto) { + UmsUser user = umsUserService.getById(getUserId()); + if (!user.getPassword().equals(MD5Utils.inputPassToDBPass(umsUserPasswordDto.getOldPassword(), user.getSalt()))) { + return error("操作失败,旧密码错误,请重新输入!"); + } else if (umsUserPasswordDto.getOldPassword().equals(umsUserPasswordDto.getNewPassword())) { + return error("操作失败,旧密码与新密码一致,请重新输入!"); + } else if (!umsUserPasswordDto.getNewPassword().equals(umsUserPasswordDto.getCheckPassword())) { + return error("操作失败,两次输入的新密码不一致,请重新输入!"); + } + String salt = MD5Utils.randomSalt(); + user.setPassword(MD5Utils.inputPassToDBPass(umsUserPasswordDto.getNewPassword(), salt)); + user.setSalt(salt); + user.setCreateUser(getUserId()); + return umsUserService.updateById(user) ? success() : error(); + } + + /** + * 删除 + */ + @PostMapping("/delete") + @ApiOperation(value = "删除") + public Result delete(@RequestBody List idList) { + umsUserService.unbindRole(idList); + umsUserService.unbindPost(idList); + return umsUserService.removeBatchByIds(idList) ? success() : error(); + } + + /** + * 用户-导出 TODO 用户-导入 + */ + @PostMapping("/export") + @ApiOperation(value = "导出用户数据excel") + public void export(@RequestBody List idList, HttpServletResponse response) { + List list = umsUserService.listByIds(idList); + ExcelUtil util = new ExcelUtil(UmsUser.class); + util.exportExcel(response, list, "用户数据"); + } + + /** + * 用户-导入 + */ + @PostMapping("/importData") + @ApiOperation(value = "导入用户数据excel") + public Result importData(MultipartFile file) throws Exception { + ExcelUtil util = new ExcelUtil<>(UmsUser.class); + List userList = util.importExcel(file.getInputStream()); + String salt = MD5Utils.randomSalt(); + Long userId = umsUserService.selectLatestPrimaryKey() + 1; + userList.forEach(user -> { + + }); + for (UmsUser user : userList) { + user.setPassword(MD5Utils.inputPassToDBPass("123456", salt)); + user.setSalt(salt); + user.setCreateUser(getUserId()); + + if (user.get_umsOrganization().getOrganizationId() != null) { + umsUserService.bindPost(userId, user.get_umsOrganization().getOrganizationId()); + } + umsUserService.bindRole(userId, user.get_umsRole().getRoleId() != null ? user.get_umsRole().getRoleId() : Long.parseLong(ConfigEnum.DEFAULT_ROLE_ID.getInfo())); + userId++; + + } + umsUserService.saveBatch(userList); + + return success(); + } + + /** + * 用户-导入模板 + */ + @PostMapping("/importTemplate") + @ApiOperation(value = "导入用户数据excel模板") + public void importTemplate(HttpServletResponse response) { + ExcelUtil util = new ExcelUtil(UmsUser.class); + util.importTemplateExcel(response, "用户数据"); + } +} + diff --git a/admin/src/main/resources/application-dev.yml b/admin/src/main/resources/application-dev.yml new file mode 100644 index 0000000..42f77a2 --- /dev/null +++ b/admin/src/main/resources/application-dev.yml @@ -0,0 +1,69 @@ +# 项目相关配置 +app: + # 名称 + name: 名称 + # 版本 + version: 1.0.0 + # 版权 + copyright: yyy版权所有 + # 版权年份 + copyrightYear: 2024 + # 文件路径 + profile: "D:/data/eam" + +# 开发环境配置 +server: + # 服务器的HTTP端口,默认为80 + port: 80 + servlet: + # 应用的访问路径 + context-path: / + tomcat: + # tomcat的URI编码 + uri-encoding: UTF-8 + # 连接数满后的排队数,默认为100 + accept-count: 1000 + threads: + # tomcat最大线程数,默认为200 + max: 800 + # Tomcat启动初始化的线程数,默认值10 + min-spare: 100 + +# 日志配置 +logging: + level: + com.yyy: debug + org.springframework: warn + +# mysql连接信息 +spring: + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://localhost:3306/eam?nullDatabaseMeansCurrent=true + username: root + password: 123456 + type: com.mysql.cj.jdbc.MysqlDataSource + +#spring: +# datasource: +# driver-class-name: com.mysql.cj.jdbc.Driver +# url: jdbc:mysql://47.109.27.8:3306/eam?nullDatabaseMeansCurrent=true +# username: admin +# password: "@Jiluo2019" +# type: com.mysql.cj.jdbc.MysqlDataSource + +qr: + ttf: "/ttf/SimHei.ttf" + +# License 相关配置 +license: + # 主题 + subject: license_eam + # 公钥别称 + publicAlias: publicCert + # 访问公钥的密码 + storePass: jiluo2019 + # license 位置 + licensePath: D:/license/license.lic + # 公钥位置 + publicKeysStorePath: D:/license/publicCerts.keystore \ No newline at end of file diff --git a/admin/src/main/resources/application-prod.yml b/admin/src/main/resources/application-prod.yml new file mode 100644 index 0000000..02829c8 --- /dev/null +++ b/admin/src/main/resources/application-prod.yml @@ -0,0 +1,60 @@ +app: + # 名称 + name: 固定资产管理系统 + # 版本 + version: 1.0.0 + # 版权 + copyright: 成都积络科技版权所有 + # 版权年份 + copyrightYear: 2024 + # 文件路径 + profile: "/data/eam" + +# 开发环境配置 +server: + # 服务器的HTTP端口,默认为80 + port: 8280 + servlet: + # 应用的访问路径 + context-path: / + tomcat: + # tomcat的URI编码 + uri-encoding: UTF-8 + # 连接数满后的排队数,默认为100 + accept-count: 1000 + threads: + # tomcat最大线程数,默认为200 + max: 800 + # Tomcat启动初始化的线程数,默认值10 + min-spare: 100 + +# 日志配置 +logging: + level: + com.yyy: debug + org.springframework: warn + +# 数据源配置 +spring: + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://localhost:3306/eam?nullDatabaseMeansCurrent=true + username: admin + password: "@Jiluo2019" + type: com.mysql.cj.jdbc.MysqlDataSource + +qr: + ttf: "/ttf/SimHei.ttf" + +# License 相关配置 +license: + # 主题 + subject: license_eam + # 公钥别称 + publicAlias: publicCert + # 访问公钥的密码 + storePass: jiluo2019 + # license 位置 + licensePath: /data/eam/license/license.lic + # 公钥位置 + publicKeysStorePath: /data/eam/license/publicCerts.keystore \ No newline at end of file diff --git a/admin/src/main/resources/application.yml b/admin/src/main/resources/application.yml new file mode 100644 index 0000000..13bec19 --- /dev/null +++ b/admin/src/main/resources/application.yml @@ -0,0 +1,54 @@ + +# Spring配置 +spring: + application: + name: yyy + profiles: + active: prod + jackson: + time-zone: GMT+8 + date-format: yyyy-MM-dd HH:mm:ss + # 文件上传 + servlet: + multipart: + # 单个文件大小 + max-file-size: 10MB + # 设置总上传的文件大小 + max-request-size: 20MB + # mvc策略 + mvc: + pathmatch: + matching-strategy: ANT_PATH_MATCHER + +# MyBatis +mybatis: + # 搜索指定包别名 + typeAliasesPackage: com.yyy.common.core.domain.entity + # 配置mapper的扫描,找到所有的mapper.xml映射文件 + mapperLocations: classpath*:mapper/*Mapper.xml + # 加载全局的配置文件 + configLocation: classpath:mybatis/mybatis-config.xml + +# Swagger配置 +swagger: + base-package: "com.yyy" + description: "" + version: "1.0" + title: "接口文档" + enabled: true #是否开启swagger + +minio: + endpoint: http://localhost #Minio服务ip + port: 9000 + accessKey: minioadmin #访问的key + secretKey: minioadmin #访问的秘钥 + secure: false + bucketName: "defaultbucket" #默认存储桶名称 + enabled: false #是否开启minio + +jwt: + config: + header: Authorization + refreshTime: 3600000 # 刷新时间 1小时 + expiresTime: 7200000 # 过期 2小时 + secretKey: jiluo2019 \ No newline at end of file diff --git a/admin/src/main/resources/banner.txt b/admin/src/main/resources/banner.txt new file mode 100644 index 0000000..de2209a --- /dev/null +++ b/admin/src/main/resources/banner.txt @@ -0,0 +1,22 @@ +//////////////////////////////////////////////////////////////////// +// _ooOoo_ // +// o8888888o // +// 88" . "88 // +// (| ^_^ |) // +// O\ = /O // +// ____/`---'\____ // +// .' \\| |// `. // +// / \\||| : |||// \ // +// / _||||| -:- |||||- \ // +// | | \\\ - /// | | // +// | \_| ''\---/'' | | // +// \ .-\__ `-` ___/-. / // +// ___`. .' /--.--\ `. . ___ // +// ."" '< `.___\_<|>_/___.' >'"". // +// | | : `- \`.;`\ _ /`;.`/ - ` : | | // +// \ \ `-. \_ __\ /__ _/ .-` / / // +// ========`-.____`-.___\_____/___.-`____.-'======== // +// `=---=' // +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ // +// 佛祖保佑 永不宕机 永无BUG // +//////////////////////////////////////////////////////////////////// \ No newline at end of file diff --git a/admin/src/main/resources/logback-spring.xml b/admin/src/main/resources/logback-spring.xml new file mode 100644 index 0000000..d4b96e2 --- /dev/null +++ b/admin/src/main/resources/logback-spring.xml @@ -0,0 +1,152 @@ + + + + + + + eam + + + + + + + + + + + + + + + + + + + + + + + + + + + + ${log.level} + + + ${CONSOLE_LOG_PATTERN} + + UTF-8 + + + + + + + + ${log.path}/${log.name}/${log.name}-info.log + + + %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %.-${log.length}msg%n + UTF-8 + + + + ${log.path}/${log.name}/${log.name}-info-%d{yyyy-MM-dd}.%i.log + + ${log.max.file} + + ${log.max.history} + + ${log.max.size} + + + + INFO + ACCEPT + DENY + + + + + + ${log.path}/${log.name}/${log.name}-warn.log + + %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %.-${log.length}msg%n + UTF-8 + + + ${log.path}/${log.name}/${log.name}-warn-%d{yyyy-MM-dd}.%i.log + ${log.max.file} + ${log.max.history} + ${log.max.size} + + + WARN + ACCEPT + DENY + + + + + + ${log.path}/${log.name}/${log.name}-error.log + + %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %.-${log.length}msg%n + UTF-8 + + + ${log.path}/${log.name}/${log.name}-error-%d{yyyy-MM-dd}.%i.log + ${log.max.file} + ${log.max.history} + ${log.max.size} + + + ERROR + ACCEPT + DENY + + + + + + ${log.path}/${log.name}/${log.name}-protocol.log + + %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %.-${log.length}msg%n + UTF-8 + + + ${log.path}/${log.name}/${log.name}-protocol-%d{yyyy-MM-dd}.%i.log + ${log.max.file} + ${log.max.history} + ${log.max.size} + + + + + + ${log.path}/${log.name}/${log.name}-message.log + + %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %.-${log.length}msg%n + UTF-8 + + + ${log.path}/${log.name}/${log.name}-message-%d{yyyy-MM-dd}.%i.log + ${log.max.file} + ${log.max.history} + ${log.max.size} + + + + + + + + + + + + + + \ No newline at end of file diff --git a/admin/src/main/resources/mybatis/mybatis-config.xml b/admin/src/main/resources/mybatis/mybatis-config.xml new file mode 100644 index 0000000..ac47c03 --- /dev/null +++ b/admin/src/main/resources/mybatis/mybatis-config.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + diff --git a/common/pom.xml b/common/pom.xml new file mode 100644 index 0000000..895fd09 --- /dev/null +++ b/common/pom.xml @@ -0,0 +1,100 @@ + + + + yyy + com.yyy + 1.0-SNAPSHOT + + 4.0.0 + + common + 通用工具 + + + + + + org.springframework + spring-context-support + + + + + org.springframework + spring-web + + + + + org.apache.shiro + shiro-core + + + + + org.apache.shiro + shiro-ehcache + + + + org.springframework.boot + spring-boot-starter-validation + + + + + + javax.servlet + javax.servlet-api + + + + + com.github.pagehelper + pagehelper-spring-boot-starter + + + + + com.baomidou + mybatis-plus-boot-starter + + + + com.github.xiaoymin + knife4j-spring-boot-starter + + + + com.google.guava + guava + + + + + com.auth0 + java-jwt + + + + org.apache.poi + poi-ooxml + + + + com.itextpdf + itextpdf + + + com.google.zxing + core + + + com.google.zxing + javase + + + + \ No newline at end of file diff --git a/common/src/main/java/com/yyy/common/annotation/Excel.java b/common/src/main/java/com/yyy/common/annotation/Excel.java new file mode 100644 index 0000000..76f1729 --- /dev/null +++ b/common/src/main/java/com/yyy/common/annotation/Excel.java @@ -0,0 +1,188 @@ +package com.yyy.common.annotation; + +import com.yyy.common.utils.poi.ExcelHandlerAdapter; +import org.apache.poi.ss.usermodel.HorizontalAlignment; +import org.apache.poi.ss.usermodel.IndexedColors; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; +import java.math.BigDecimal; + +/** + * 自定义导出Excel数据注解 + * + * @author ruoyi + */ +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.FIELD) +public @interface Excel +{ + /** + * 导出时在excel中排序 + */ + public int sort() default Integer.MAX_VALUE; + + /** + * 导出到Excel中的名字. + */ + public String name() default ""; + + /** + * 日期格式, 如: yyyy-MM-dd + */ + public String dateFormat() default ""; + + /** + * 如果是字典类型,请设置字典的type值 (如: sys_user_sex) + */ + public String dictType() default ""; + + /** + * 读取内容转表达式 (如: 0=男,1=女,2=未知) + */ + public String readConverterExp() default ""; + + /** + * 分隔符,读取字符串组内容 + */ + public String separator() default ","; + + /** + * BigDecimal 精度 默认:-1(默认不开启BigDecimal格式化) + */ + public int scale() default -1; + + /** + * BigDecimal 舍入规则 默认:BigDecimal.ROUND_HALF_EVEN + */ + public int roundingMode() default BigDecimal.ROUND_HALF_EVEN; + + /** + * 导出时在excel中每个列的高度 + */ + public double height() default 14; + + /** + * 导出时在excel中每个列的宽度 + */ + public double width() default 16; + + /** + * 文字后缀,如% 90 变成90% + */ + public String suffix() default ""; + + /** + * 当值为空时,字段的默认值 + */ + public String defaultValue() default ""; + + /** + * 提示信息 + */ + public String prompt() default ""; + + /** + * 设置只能选择不能输入的列内容. + */ + public String[] combo() default {}; + + /** + * 是否需要纵向合并单元格,应对需求:含有list集合单元格) + */ + public boolean needMerge() default false; + + /** + * 是否导出数据,应对需求:有时我们需要导出一份模板,这是标题需要但内容需要用户手工填写. + */ + public boolean isExport() default true; + + /** + * 另一个类中的属性名称,支持多级获取,以小数点隔开 + */ + public String targetAttr() default ""; + + /** + * 是否自动统计数据,在最后追加一行统计数据总和 + */ + public boolean isStatistics() default false; + + /** + * 导出类型(0数字 1字符串 2图片) + */ + public ColumnType cellType() default ColumnType.STRING; + + /** + * 导出列头背景颜色 + */ + public IndexedColors headerBackgroundColor() default IndexedColors.SKY_BLUE; + + /** + * 导出列头字体颜色 + */ + public IndexedColors headerColor() default IndexedColors.WHITE; + + /** + * 导出单元格背景颜色 + */ + public IndexedColors backgroundColor() default IndexedColors.WHITE; + + /** + * 导出单元格字体颜色 + */ + public IndexedColors color() default IndexedColors.BLACK; + + /** + * 导出字段对齐方式 + */ + public HorizontalAlignment align() default HorizontalAlignment.CENTER; + + /** + * 自定义数据处理器 + */ + public Class handler() default ExcelHandlerAdapter.class; + + /** + * 自定义数据处理器参数 + */ + public String[] args() default {}; + + /** + * 字段类型(0:导出导入;1:仅导出;2:仅导入) + */ + Type type() default Type.ALL; + + public enum Type + { + ALL(0), EXPORT(1), IMPORT(2); + private final int value; + + Type(int value) + { + this.value = value; + } + + public int value() + { + return this.value; + } + } + + public enum ColumnType + { + NUMERIC(0), STRING(1), IMAGE(2); + private final int value; + + ColumnType(int value) + { + this.value = value; + } + + public int value() + { + return this.value; + } + } +} \ No newline at end of file diff --git a/common/src/main/java/com/yyy/common/annotation/Excels.java b/common/src/main/java/com/yyy/common/annotation/Excels.java new file mode 100644 index 0000000..f0c4492 --- /dev/null +++ b/common/src/main/java/com/yyy/common/annotation/Excels.java @@ -0,0 +1,17 @@ +package com.yyy.common.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * Excel注解集 + * + */ +@Target(ElementType.FIELD) +@Retention(RetentionPolicy.RUNTIME) +public @interface Excels +{ + Excel[] value(); +} \ No newline at end of file diff --git a/common/src/main/java/com/yyy/common/config/AppConfig.java b/common/src/main/java/com/yyy/common/config/AppConfig.java new file mode 100644 index 0000000..1d12fbc --- /dev/null +++ b/common/src/main/java/com/yyy/common/config/AppConfig.java @@ -0,0 +1,102 @@ +package com.yyy.common.config; + +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * @Author: fy + * @Date: 2024/03/22 + * @Description:全局配置类 + */ +@Component +@ConfigurationProperties(prefix = "app") +public class AppConfig { + /** 项目名称 */ + private static String name = "xxx"; + + /** 版本 */ + private static String version = "1.0.0"; + + /** 版权 */ + private static String copyright = "成都积络科技版权所有"; + + /** 版权年份 */ + private static String copyrightYear = "2024"; + + /** 上传路径 */ +// private static String profile = "D:\\"; + private static String profile = "/data/eam"; + + public static String getName() { + return name; + } + + public static void setName(String name) { + AppConfig.name = name; + } + + public static String getVersion() { + return version; + } + + public static void setVersion(String version) { + AppConfig.version = version; + } + + public static String getCopyright() { + return copyright; + } + + public static void setCopyright(String copyright) { + AppConfig.copyright = copyright; + } + + public static String getCopyrightYear() { + return copyrightYear; + } + + public static void setCopyrightYear(String copyrightYear) { + AppConfig.copyrightYear = copyrightYear; + } + + public static String getProfile() { + return profile; + } + + public static void setProfile(String profile) { + AppConfig.profile = profile; + } + + + /** + * 获取导入上传路径 + */ + public static String getImportPath() + { + return getProfile() + "/import"; + } + + /** + * 获取头像上传路径 + */ + public static String getAvatarPath() + { + return getProfile() + "/avatar"; + } + + /** + * 获取下载路径 + */ + public static String getDownloadPath() + { + return getProfile() + "/download/"; + } + + /** + * 获取上传路径 + */ + public static String getUploadPath() + { + return getProfile() + "/upload"; + } +} diff --git a/common/src/main/java/com/yyy/common/config/QRConfig.java b/common/src/main/java/com/yyy/common/config/QRConfig.java new file mode 100644 index 0000000..673ad81 --- /dev/null +++ b/common/src/main/java/com/yyy/common/config/QRConfig.java @@ -0,0 +1,30 @@ +package com.yyy.common.config; + +import cn.hutool.extra.qrcode.QrConfig; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import java.awt.*; + +/** + * @Author: fy + * @Date: 2024/03/20 + * @Description:采用JavaConfig的方式显示注入hutool中 生成二维码 + */ +@Configuration +public class QRConfig { + @Bean + public QrConfig qrConfig(){ + //初始宽度和高度 + QrConfig qrConfig=new QrConfig(300,300); + + //设置边距,即二维码和边框的距离 + qrConfig.setMargin(2); + //设置前景色 + qrConfig.setForeColor(Color.BLACK.getRGB()); + //设置背景色 + qrConfig.setBackColor(Color.WHITE.getRGB()); + + return qrConfig; + } +} diff --git a/common/src/main/java/com/yyy/common/config/ServerConfig.java b/common/src/main/java/com/yyy/common/config/ServerConfig.java new file mode 100644 index 0000000..3a5293b --- /dev/null +++ b/common/src/main/java/com/yyy/common/config/ServerConfig.java @@ -0,0 +1,33 @@ +package com.yyy.common.config; + +import com.yyy.common.utils.common.ServletUtils; +import org.springframework.stereotype.Component; + +import javax.servlet.http.HttpServletRequest; + +/** + * @Author: fy + * @Date: 2024/03/22 + * @Description:服务相关配置 + */ +@Component +public class ServerConfig +{ + /** + * 获取完整的请求路径,包括:域名,端口,上下文访问路径 + * + * @return 服务地址 + */ + public String getUrl() + { + HttpServletRequest request = ServletUtils.getRequest(); + return getDomain(request); + } + + public static String getDomain(HttpServletRequest request) + { + StringBuffer url = request.getRequestURL(); + String contextPath = request.getServletContext().getContextPath(); + return url.delete(url.length() - request.getRequestURI().length(), url.length()).append(contextPath).toString(); + } +} diff --git a/common/src/main/java/com/yyy/common/constant/Constants.java b/common/src/main/java/com/yyy/common/constant/Constants.java new file mode 100644 index 0000000..34e8fb6 --- /dev/null +++ b/common/src/main/java/com/yyy/common/constant/Constants.java @@ -0,0 +1,146 @@ +package com.yyy.common.constant; + +import com.google.common.collect.Lists; +import org.springframework.http.MediaType; + +import java.util.List; +import java.util.Locale; + +/** + * @Author: fy + * @Date: 2024/03/21 + * @Description:通用常量信息 + */ +public class Constants { + public static final String SESSION_USER_KEY = "user"; + + public static final List SUPPORTED_MEDIA_TYPES = Lists.newArrayList( + MediaType.APPLICATION_JSON, + MediaType.APPLICATION_ATOM_XML, + MediaType.APPLICATION_FORM_URLENCODED, + MediaType.APPLICATION_OCTET_STREAM, + MediaType.APPLICATION_PDF, + MediaType.APPLICATION_RSS_XML, + MediaType.APPLICATION_XHTML_XML, + MediaType.APPLICATION_XML, + MediaType.IMAGE_GIF, + MediaType.IMAGE_JPEG, + MediaType.IMAGE_PNG, + MediaType.TEXT_EVENT_STREAM, + MediaType.TEXT_HTML, + MediaType.TEXT_MARKDOWN, + MediaType.TEXT_PLAIN, + MediaType.TEXT_XML + ); + + /** + * UTF-8 字符集 + */ + public static final String UTF8 = "UTF-8"; + + /** + * GBK 字符集 + */ + public static final String GBK = "GBK"; + + /** + * 系统语言 + */ + public static final Locale DEFAULT_LOCALE = Locale.SIMPLIFIED_CHINESE; + + /** + * http请求 + */ + public static final String HTTP = "http://"; + + /** + * https请求 + */ + public static final String HTTPS = "https://"; + + /** + * 通用成功标识 + */ + public static final String SUCCESS = "0"; + + /** + * 通用失败标识 + */ + public static final String FAIL = "1"; + + /** + * 登录成功 + */ + public static final String LOGIN_SUCCESS = "Success"; + + /** + * 注销 + */ + public static final String LOGOUT = "Logout"; + + /** + * 注册 + */ + public static final String REGISTER = "Register"; + + /** + * 登录失败 + */ + public static final String LOGIN_FAIL = "Error"; + + /** + * 系统用户授权缓存 + */ + public static final String SYS_AUTH_CACHE = "sys-authCache"; + + /** + * 参数管理 cache name + */ + public static final String SYS_CONFIG_CACHE = "sys-config"; + + /** + * 参数管理 cache key + */ + public static final String SYS_CONFIG_KEY = "sys_config:"; + + /** + * 字典管理 cache name + */ + public static final String SYS_DICT_CACHE = "sys-dict"; + + /** + * 字典管理 cache key + */ + public static final String SYS_DICT_KEY = "sys_dict:"; + + /** + * 资源映射路径 前缀 + */ + public static final String RESOURCE_PREFIX = "/file"; + + /** + * RMI 远程方法调用 + */ + public static final String LOOKUP_RMI = "rmi:"; + + /** + * LDAP 远程方法调用 + */ + public static final String LOOKUP_LDAP = "ldap:"; + + /** + * LDAPS 远程方法调用 + */ + public static final String LOOKUP_LDAPS = "ldaps:"; +// +// /** +// * 定时任务白名单配置(仅允许访问的包名,如其他需要可以自行添加) +// */ +// public static final String[] JOB_WHITELIST_STR = { "com.ruoyi.quartz.task" }; +// +// /** +// * 定时任务违规的字符 +// */ +// public static final String[] JOB_ERROR_STR = { "java.net.URL", "javax.naming.InitialContext", "org.yaml.snakeyaml", +// "org.springframework", "org.apache", "com.ruoyi.common.utils.file", "com.ruoyi.common.config", "com.ruoyi.generator" }; +} diff --git a/common/src/main/java/com/yyy/common/constant/ShiroConstants.java b/common/src/main/java/com/yyy/common/constant/ShiroConstants.java new file mode 100644 index 0000000..a30ac8a --- /dev/null +++ b/common/src/main/java/com/yyy/common/constant/ShiroConstants.java @@ -0,0 +1,77 @@ +package com.yyy.common.constant; + +/** + * Shiro通用常量 + */ +public class ShiroConstants +{ + /** + * 当前登录的用户 + */ + public static final String CURRENT_USER = "currentUser"; + + /** + * 用户名字段 + */ + public static final String CURRENT_USERNAME = "username"; + + /** + * 锁定屏幕字段 + */ + public static final String LOCK_SCREEN = "lockscreen"; + + /** + * 消息key + */ + public static final String MESSAGE = "message"; + + /** + * 错误key + */ + public static final String ERROR = "errorMsg"; + + /** + * 编码格式 + */ + public static final String ENCODING = "UTF-8"; + + /** + * 当前在线会话 + */ + public static final String ONLINE_SESSION = "online_session"; + + /** + * 验证码key + */ + public static final String CURRENT_CAPTCHA = "captcha"; + + /** + * 验证码开关 + */ + public static final String CURRENT_ENABLED = "captchaEnabled"; + + /** + * 验证码类型 + */ + public static final String CURRENT_TYPE = "captchaType"; + + /** + * 验证码 + */ + public static final String CURRENT_VALIDATECODE = "validateCode"; + + /** + * 验证码错误 + */ + public static final String CAPTCHA_ERROR = "captchaError"; + + /** + * 登录记录缓存 + */ + public static final String LOGIN_RECORD_CACHE = "loginRecordCache"; + + /** + * 系统活跃用户缓存 + */ + public static final String SYS_USERCACHE = "sys-userCache"; +} diff --git a/common/src/main/java/com/yyy/common/core/controller/BaseController.java b/common/src/main/java/com/yyy/common/core/controller/BaseController.java new file mode 100644 index 0000000..057750b --- /dev/null +++ b/common/src/main/java/com/yyy/common/core/controller/BaseController.java @@ -0,0 +1,249 @@ +package com.yyy.common.core.controller; + +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.yyy.common.core.domain.Result; +import com.yyy.common.core.domain.ResultCode; +import com.yyy.common.core.domain.entity.UmsUser; +import com.yyy.common.core.page.PageDomain; +import com.yyy.common.core.page.TableDataInfo; +import com.yyy.common.core.page.TableSupport; +import com.yyy.common.utils.common.*; +import com.yyy.common.utils.security.JwtUtils; +import com.yyy.common.utils.sql.SqlUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.web.bind.WebDataBinder; +import org.springframework.web.bind.annotation.InitBinder; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; +import java.beans.PropertyEditorSupport; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * @Author: fy + * @Date: 2024/03/22 + * @Description:web层通用数据处理 + */ +@Component +public class BaseController { + protected final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Autowired + JwtUtils jwtUtils; + + /** + * 将前台传递过来的日期格式的字符串,自动转化为Date类型 + */ + @InitBinder + public void initBinder(WebDataBinder binder) + { + // Date 类型转换 + binder.registerCustomEditor(Date.class, new PropertyEditorSupport() + { + @Override + public void setAsText(String text) + { + setValue(DateUtils.parseDate(text)); + } + }); + } + + /** + * 设置请求分页数据 + */ + protected void startPage() + { + //PageUtils.startPage(); + } + + /** + * 设置请求排序数据 + */ + protected void startOrderBy() + { + PageDomain pageDomain = TableSupport.buildPageRequest(); + if (StringUtils.isNotEmpty(pageDomain.getOrderBy())) + { + String orderBy = SqlUtil.escapeOrderBySql(pageDomain.getOrderBy()); + PageHelper.orderBy(orderBy); + } + } + + /** + * 清理分页的线程变量 + */ + protected void clearPage() + { + PageUtils.clearPage(); + } + + /** + * 获取request + */ + public HttpServletRequest getRequest() + { + return ServletUtils.getRequest(); + } + + /** + * 获取response + */ + public HttpServletResponse getResponse() + { + return ServletUtils.getResponse(); + } + + /** + * 获取session + */ + public HttpSession getSession() + { + return getRequest().getSession(); + } + + /** + * 响应请求分页数据 + */ + @SuppressWarnings({ "rawtypes", "unchecked" }) + protected TableDataInfo getDataTable(List list) + { +// TableDataInfo rspData = new TableDataInfo(); +// rspData.setCode(0); +// rspData.setRows(list); +// rspData.setTotal(new PageInfo(list).getTotal()); +// return rspData; + + //TODO 优化成sql的limit + PageDomain pageDomain = TableSupport.buildPageRequest(); + Integer pageNum = pageDomain.getPageNum(); + Integer pageSize = pageDomain.getPageSize(); + + int num = list.size(); + list = list.stream().skip((pageNum - 1) * pageSize).limit(pageSize).collect(Collectors.toList()); + TableDataInfo rspData = new TableDataInfo(); + rspData.setCode(0); + rspData.setRows(list); + rspData.setTotal(num); + return rspData; + } + + + /** + * 响应返回结果 + * + * @param rows 影响行数 + * @return 操作结果 + */ + protected Result toResult(int rows) + { + return rows > 0 ? success() : error(); + } + + /** + * 响应返回结果 + * + * @param result 结果 + * @return 操作结果 + */ + protected Result toResult(boolean result) + { + return result ? success() : error(); + } + + /** + * 返回成功 + */ + public Result success() + { + return Result.SUCCESS; + } + + /** + * 返回失败消息 + */ + public Result error() + { + return Result.FAILURE; + } + + /** + * 返回成功消息 + */ + public Result success(String message) + { + return new Result(ResultCode.success,message); + } + + /** + * 返回成功数据 + */ + public static Result success(Object data) + { + return new Result(ResultCode.success,data); + } + + /** + * 返回失败消息 + */ + public Result error(String message) + { + return new Result(ResultCode.operate_failure.getCode(),message); + } + + /** + * 返回错误码消息 + */ + public Result error(ResultCode code, String message) + { + return new Result(code, message); + } + + /** + * 页面跳转 + */ + public String redirect(String url) + { + return StringUtils.format("redirect:{}", url); + } + + /** + * TODO 获取用户缓存信息 + */ + public UmsUser getUser() + { +// return ShiroUtils.getUser(); + return new UmsUser(); + } + + /** + * TODO 设置用户缓存信息 + */ + public void setUser(UmsUser user) + { +// ShiroUtils.setUser(user); + } + + /** + * 获取登录用户id + */ + public Long getUserId() + { + return Long.parseLong(jwtUtils.parseToken(ServletUtils.getRequest().getHeader("Authorization")).get("uid")); + } + + /** + * 获取登录用户名 + */ + public String getLoginName() + { + return getUser().getLoginName(); + } +} diff --git a/common/src/main/java/com/yyy/common/core/domain/Result.java b/common/src/main/java/com/yyy/common/core/domain/Result.java new file mode 100644 index 0000000..4f43abb --- /dev/null +++ b/common/src/main/java/com/yyy/common/core/domain/Result.java @@ -0,0 +1,69 @@ +package com.yyy.common.core.domain; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.io.Serializable; + +/** + * @Author: fy + * @Date: 2024/03/21 + * @Description:统一返回结果 + */ +@ApiModel("统一返回结果") +@ToString +public class Result implements Serializable { + + private static final long serialVersionUID = 1L; + public static final Result NOT_SUPPORT = new Result(ResultCode.not_support_operate); + public static final Result NOT_PRIVILEGED = new Result(ResultCode.not_privileged); + public static final Result INVALID_USER_PASS = new Result(ResultCode.invalidUserOrPassword); + public static final Result ILLEGAL_ARGUMENT = new Result(ResultCode.illegal_argument); + public static final Result FAILURE = new Result(ResultCode.operate_failure); + public static final Result ERROR = new Result(ResultCode.system_error); + public static final Result NOT_LOGIN = new Result(ResultCode.need_login); + public static final Result SUCCESS = new Result(ResultCode.success); + public static final Result INVALID_LICENSE = new Result(ResultCode.invalid_license); + + @Getter + @Setter + @ApiModelProperty("状态码") + private int code; + @Getter + @Setter + @ApiModelProperty("描述信息") + private String desc; + @Getter + @Setter + @ApiModelProperty("响应结果数据") + private T body; + + public Result(ResultCode resultCode) { + setCode(resultCode.getCode()); + setDesc(resultCode.getDesc()); + } + + public Result(int code, String msg) { + setCode(code); + setDesc(msg); + } + + /** + * 使用通用结果码生成对象 + */ + public Result(ResultCode resultCode, T body) { + setCode(resultCode.getCode()); + setDesc(resultCode.getDesc()); + setBody(body); + } + + /** + * 判断执行结果是否成功 + */ + public boolean isSuccess() { + return ResultCode.success.getCode() == code; + } +} \ No newline at end of file diff --git a/common/src/main/java/com/yyy/common/core/domain/ResultCode.java b/common/src/main/java/com/yyy/common/core/domain/ResultCode.java new file mode 100644 index 0000000..7bf0657 --- /dev/null +++ b/common/src/main/java/com/yyy/common/core/domain/ResultCode.java @@ -0,0 +1,32 @@ +package com.yyy.common.core.domain; + +import lombok.Getter; + +/** + * @Author: fy + * @Date: 2024/03/21 + * @Description:统一结果码定义 + */ +public enum ResultCode { + success(200, "成功"), + + invalidUserOrPassword(300, "用户名或者密码错误!"), + illegal_argument(400, "参数错误!"), + need_login(401, "未登录!"), + not_support_operate(404, "不支持的请求!"), + not_privileged(405, "无权限执行该操作!"), + invalid_license(406, "您的证书无效,请核查服务器是否取得授权或重新申请证书!"), + system_error(500, "系统异常!"), + operate_failure(503, "操作失败!"); + + @Getter + private final int code; + @Getter + private final String desc; + + ResultCode(int code, String desc) { + this.code = code; + this.desc = desc; + } + +} diff --git a/common/src/main/java/com/yyy/common/core/domain/dto/LoginDto.java b/common/src/main/java/com/yyy/common/core/domain/dto/LoginDto.java new file mode 100644 index 0000000..2ed106d --- /dev/null +++ b/common/src/main/java/com/yyy/common/core/domain/dto/LoginDto.java @@ -0,0 +1,34 @@ +package com.yyy.common.core.domain.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.validation.constraints.NotBlank; +import java.io.Serializable; + +/** + * @Author: fy + * @Date: 2024/04/03 + * @Description: + */ +@ApiModel("登录") +@Data +@NoArgsConstructor +@AllArgsConstructor +public class LoginDto implements Serializable { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(notes = "账号", required = true) + @NotBlank(message = "账号不能为空") + private String loginName; + + @ApiModelProperty(notes = "密码", required = true) + @NotBlank(message = "密码不能为空") + private String password; + + @ApiModelProperty(notes = "验证码") + private String code; +} diff --git a/common/src/main/java/com/yyy/common/core/domain/dto/UmsMenuDto.java b/common/src/main/java/com/yyy/common/core/domain/dto/UmsMenuDto.java new file mode 100644 index 0000000..a411f5a --- /dev/null +++ b/common/src/main/java/com/yyy/common/core/domain/dto/UmsMenuDto.java @@ -0,0 +1,54 @@ +package com.yyy.common.core.domain.dto; + +import java.util.Date; +import java.io.Serializable; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.AllArgsConstructor; +import lombok.NoArgsConstructor; +import lombok.Builder; + +import javax.validation.constraints.NotBlank; + +@ApiModel("菜单表(UmsMenuDto)传输数据类") +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class UmsMenuDto implements Serializable { + private static final long serialVersionUID = -26115459430198770L; + + @ApiModelProperty(notes = "菜单ID") + private Long menuId; + + @ApiModelProperty(notes = "菜单名称", required = true) + @NotBlank(message = "菜单名称不能为空") + private String menuName; + + @ApiModelProperty(notes = "父主键ID") + private Long parentId; + + @ApiModelProperty(notes = "排序") + private Integer sort; + + @ApiModelProperty(notes = "请求路径") + private String url; + + @ApiModelProperty(notes = "菜单类型(M目录 C菜单 F按钮)") + private String menuType; + + @ApiModelProperty(notes = "菜单状态(1隐藏 0显示)") + private String visible; + + @ApiModelProperty(notes = "权限标识") + private String permission; + + @ApiModelProperty(notes = "菜单图标") + private String icon; + + @ApiModelProperty(notes = "备注") + private String remark; + +} diff --git a/common/src/main/java/com/yyy/common/core/domain/dto/UmsOrganizationDto.java b/common/src/main/java/com/yyy/common/core/domain/dto/UmsOrganizationDto.java new file mode 100644 index 0000000..77d0d39 --- /dev/null +++ b/common/src/main/java/com/yyy/common/core/domain/dto/UmsOrganizationDto.java @@ -0,0 +1,44 @@ +package com.yyy.common.core.domain.dto; + +import java.io.Serializable; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.AllArgsConstructor; +import lombok.NoArgsConstructor; +import lombok.Builder; + +import javax.validation.constraints.NotBlank; + +@ApiModel("组织信息表(UmsOrganizationDto)传输数据类") +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class UmsOrganizationDto implements Serializable { + private static final long serialVersionUID = -22653557155840114L; + + @ApiModelProperty(notes = "组织ID") + private Long organizationId; + + @ApiModelProperty(notes = "组织名称", required = true) + @NotBlank(message = "组织名称不能为空") + private String organizationName; + + @ApiModelProperty(notes = "组织类型(0:公司/1:部门/2:岗位)") + private String organizationType; + + @ApiModelProperty(notes = "显示顺序") + private Integer orderNum; + + @ApiModelProperty(notes = "父组织id") + private Long parentId; + + @ApiModelProperty(notes = "深度") + private String depth; + + @ApiModelProperty(notes = "状态(0:正常/1:停用)") + private String status; + +} diff --git a/common/src/main/java/com/yyy/common/core/domain/dto/UmsRoleDto.java b/common/src/main/java/com/yyy/common/core/domain/dto/UmsRoleDto.java new file mode 100644 index 0000000..12b29ef --- /dev/null +++ b/common/src/main/java/com/yyy/common/core/domain/dto/UmsRoleDto.java @@ -0,0 +1,44 @@ +package com.yyy.common.core.domain.dto; + +import java.io.Serializable; +import java.util.List; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.AllArgsConstructor; +import lombok.NoArgsConstructor; +import lombok.Builder; + +import javax.validation.constraints.NotBlank; + +@ApiModel("角色表(UmsRoleDto)传输数据类") +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class UmsRoleDto implements Serializable { + private static final long serialVersionUID = 154065236903833980L; + + @ApiModelProperty("角色ID") + private Long roleId; + + @ApiModelProperty(notes = "角色名称", required = true) + @NotBlank(message = "角色名称不能为空") + private String roleName; + + @ApiModelProperty(notes = "角色权限字符串") + private String roleKey; + + @ApiModelProperty(notes = "角色状态(0:正常/1:停用)") + private String status; + + @ApiModelProperty("显示顺序") + private Integer roleSort; + + @ApiModelProperty("备注") + private String remark; + + @ApiModelProperty("菜单权限idList") + private List menuIdList; +} diff --git a/common/src/main/java/com/yyy/common/core/domain/dto/UmsUserAddDto.java b/common/src/main/java/com/yyy/common/core/domain/dto/UmsUserAddDto.java new file mode 100644 index 0000000..90da20c --- /dev/null +++ b/common/src/main/java/com/yyy/common/core/domain/dto/UmsUserAddDto.java @@ -0,0 +1,60 @@ +package com.yyy.common.core.domain.dto; + +import java.io.Serializable; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.AllArgsConstructor; +import lombok.NoArgsConstructor; +import org.hibernate.validator.constraints.Length; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Pattern; + + +@ApiModel("用户表(UmsUserDto)传输数据类") +@Data +@NoArgsConstructor +@AllArgsConstructor +public class UmsUserAddDto implements Serializable { + private static final long serialVersionUID = -65838283669796140L; + + @ApiModelProperty(notes = "主键") + private Long userId; + + @ApiModelProperty(notes = "账号名", required = true) + @NotBlank(message = "账号名不能为空") + private String loginName; + + @ApiModelProperty(notes = "姓名", required = true) + @NotBlank(message = "姓名不能为空") + private String userName; + + @ApiModelProperty(notes = "用户邮箱") + private String email; + + @ApiModelProperty(notes = "联系电话", required = true) + @NotBlank(message = "手机号码不能为空") + @Length(min = 11, max = 11, message = "手机号只能为11位") + @Pattern(regexp = "^[1][3,4,5,6,7,8,9][0-9]{9}$", message = "手机号格式有误") + private String phone; + + @ApiModelProperty(notes = "状态(0-在职 1-离职)") + private String status; + + @ApiModelProperty(notes = "密码") + private String password; + + @ApiModelProperty(notes = "用户性别(0-男 1-女 2-未知)") + private String sex; + + @ApiModelProperty(notes = "头像路径") + private String avatar; + + @ApiModelProperty(notes = "岗位id") + private Long organizationId; + + @ApiModelProperty(notes = "角色id") + private Long roleId; +} diff --git a/common/src/main/java/com/yyy/common/core/domain/dto/UmsUserPasswordDto.java b/common/src/main/java/com/yyy/common/core/domain/dto/UmsUserPasswordDto.java new file mode 100644 index 0000000..fa86a31 --- /dev/null +++ b/common/src/main/java/com/yyy/common/core/domain/dto/UmsUserPasswordDto.java @@ -0,0 +1,33 @@ +package com.yyy.common.core.domain.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.hibernate.validator.constraints.Length; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Pattern; +import java.io.Serializable; + + +@ApiModel("个人密码修改") +@Data +@NoArgsConstructor +@AllArgsConstructor +public class UmsUserPasswordDto implements Serializable { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(notes = "旧密码", required = true) + @NotBlank(message = "旧密码不能为空") + private String oldPassword; + + @ApiModelProperty(notes = "新密码", required = true) + @NotBlank(message = "新密码不能为空") + private String newPassword; + + @ApiModelProperty(notes = "确认密码", required = true) + @NotBlank(message = "确认密码不能为空") + private String checkPassword; +} diff --git a/common/src/main/java/com/yyy/common/core/domain/dto/UmsUserQueryDto.java b/common/src/main/java/com/yyy/common/core/domain/dto/UmsUserQueryDto.java new file mode 100644 index 0000000..f4c6272 --- /dev/null +++ b/common/src/main/java/com/yyy/common/core/domain/dto/UmsUserQueryDto.java @@ -0,0 +1,46 @@ +package com.yyy.common.core.domain.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * @Author: fy + * @Date: 2024/04/02 + * @Description: + */ +@ApiModel("用户查询") +@Data +@NoArgsConstructor +@AllArgsConstructor +public class UmsUserQueryDto implements Serializable { + private static final long serialVersionUID = -65838283669796140L; + + @ApiModelProperty(notes = "账号名") + private String loginName; + + @ApiModelProperty(notes = "姓名") + private String userName; + + @ApiModelProperty(notes = "联系电话") + private String phone; + + @ApiModelProperty(notes = "状态(0-在职 1-离职)") + private String status; + + @ApiModelProperty(notes = "用户性别(0-男 1-女 2-未知)") + private String sex; + + @ApiModelProperty(notes = "公司/部门/岗位id") + private Long organizationId; + + @ApiModelProperty(notes = "角色id") + private Long roleId; + + @ApiModelProperty(notes = "查询公司/部门下所有的人员信息") + private boolean tree = false; +} diff --git a/common/src/main/java/com/yyy/common/core/domain/dto/UmsUserSelfDto.java b/common/src/main/java/com/yyy/common/core/domain/dto/UmsUserSelfDto.java new file mode 100644 index 0000000..ccfd611 --- /dev/null +++ b/common/src/main/java/com/yyy/common/core/domain/dto/UmsUserSelfDto.java @@ -0,0 +1,39 @@ +package com.yyy.common.core.domain.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.hibernate.validator.constraints.Length; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Pattern; +import java.io.Serializable; + + +@ApiModel("个人基本信息修改") +@Data +@NoArgsConstructor +@AllArgsConstructor +public class UmsUserSelfDto implements Serializable { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(notes = "姓名", required = true) + @NotBlank(message = "姓名不能为空") + private String userName; + + @ApiModelProperty(notes = "用户邮箱") + private String email; + + @ApiModelProperty(notes = "联系电话") + @Length(min = 11, max = 11, message = "手机号只能为11位") + @Pattern(regexp = "^[1][3,4,5,6,7,8,9][0-9]{9}$", message = "手机号格式有误") + private String phone; + + @ApiModelProperty(notes = "用户性别(0-男 1-女 2-未知)") + private String sex; + + @ApiModelProperty(notes = "头像路径") + private String avatar; +} diff --git a/common/src/main/java/com/yyy/common/core/domain/entity/UmsMenu.java b/common/src/main/java/com/yyy/common/core/domain/entity/UmsMenu.java new file mode 100644 index 0000000..c79b464 --- /dev/null +++ b/common/src/main/java/com/yyy/common/core/domain/entity/UmsMenu.java @@ -0,0 +1,118 @@ +package com.yyy.common.core.domain.entity; + +import java.util.Date; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import lombok.*; +import com.baomidou.mybatisplus.annotation.*; +import com.fasterxml.jackson.annotation.JsonFormat; + +/** + * 菜单表(UmsMenu)表实体类 + * + * @author Fangy + * @since 2024-03-25 15:50:12 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@TableName(value = "ums_menu") +public class UmsMenu { + private static final long serialVersionUID = -97647718306147532L; + + /** + * 菜单ID(主键) + */ + @JsonIgnore + @TableId(value = "menu_id", type = IdType.AUTO) + private Long menuId; + + /** + * 菜单名称 + */ + @TableField("menu_name") + private String menuName; + + /** + * 父主键ID + */ + @TableField("parent_id") + private Long parentId; + + /** + * 排序 + */ + @TableField("sort") + private Integer sort; + + /** + * 请求路径 + */ + @TableField("url") + private String url; + + /** + * 菜单类型(M目录 C菜单 F按钮) + */ + @TableField("menu_type") + private String menuType; + + /** + * 菜单状态(1隐藏 0显示) + */ + @TableField("visible") + private String visible; + + /** + * 权限标识 + */ + @TableField("permission") + private String permission; + + /** + * 菜单图标 + */ + @TableField("icon") + private String icon; + + /** + * 创建人 + */ + @TableField("create_user") + private Long createUser; + + /** + * 创建时间 + */ + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @TableField(fill = FieldFill.INSERT) + private Date createTime; + + /** + * 修改人 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 修改时间 + */ + + @JsonIgnore + @TableField(fill = FieldFill.INSERT_UPDATE) + private Date updateTime; + + /** + * 是否删除(0:正常/1:删除) + */ + @TableField("is_deleted") + private Object isDeleted; + + /** + * 备注 + */ + @TableField("remark") + private String remark; +} diff --git a/common/src/main/java/com/yyy/common/core/domain/entity/UmsOrganization.java b/common/src/main/java/com/yyy/common/core/domain/entity/UmsOrganization.java new file mode 100644 index 0000000..f0729ad --- /dev/null +++ b/common/src/main/java/com/yyy/common/core/domain/entity/UmsOrganization.java @@ -0,0 +1,100 @@ +package com.yyy.common.core.domain.entity; + +import java.util.Date; + +import lombok.*; +import com.baomidou.mybatisplus.annotation.*; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonIgnore; + +/** + * 组织信息表(UmsOrganization)表实体类 + * + * @author Fangy + * @since 2024-04-03 09:47:07 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@TableName(value = "ums_organization") +public class UmsOrganization { + private static final long serialVersionUID = -27479820178077875L; + + /** + * 组织ID(主键) + */ + @JsonIgnore + @TableId(value = "organization_id", type = IdType.AUTO) + private Long organizationId; + + /** + * 组织名称 + */ + @TableField("organization_name") + private String organizationName; + + /** + * 组织类型(0:公司/1:部门/2:岗位) + */ + @TableField("organization_type") + private String organizationType; + + /** + * 显示顺序 + */ + @TableField("order_num") + private Integer orderNum; + + /** + * 父组织id + */ + @TableField("parent_id") + private Long parentId; + + /** + * 深度 + */ + @TableField("depth") + private String depth; + + /** + * 状态(0:正常/1:停用) + */ + @TableField("status") + private String status; + + /** + * 是否删除有效(0:正常/1:删除有效) + */ + @TableField("is_deleted") + private String isDeleted; + + /** + * 创建人 + */ + @TableField("create_user") + private Long createUser; + + /** + * 创建时间 + */ + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @TableField(fill = FieldFill.INSERT) + private Date createTime; + + /** + * 修改人 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 修改时间 + */ + + @JsonIgnore + @TableField(fill = FieldFill.INSERT_UPDATE) + private Date updateTime; +} diff --git a/common/src/main/java/com/yyy/common/core/domain/entity/UmsRole.java b/common/src/main/java/com/yyy/common/core/domain/entity/UmsRole.java new file mode 100644 index 0000000..e2a2c08 --- /dev/null +++ b/common/src/main/java/com/yyy/common/core/domain/entity/UmsRole.java @@ -0,0 +1,104 @@ +package com.yyy.common.core.domain.entity; + +import java.util.Date; +import java.util.List; + +import lombok.*; +import com.baomidou.mybatisplus.annotation.*; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonIgnore; + +/** + * 角色表(UmsRole)表实体类 + * + * @author Fangy + * @since 2024-04-03 16:14:03 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@TableName(value = "ums_role") +public class UmsRole { + private static final long serialVersionUID = -51781180838006152L; + + /** + * 角色ID(主键) + */ + @JsonIgnore + @TableId(value = "role_id", type = IdType.AUTO) + private Long roleId; + + /** + * 角色名称 + */ + @TableField("role_name") + private String roleName; + + /** + * 角色权限字符串 + */ + @TableField("role_key") + private String roleKey; + + /** + * 显示顺序 + */ + @TableField("role_sort") + private Integer roleSort; + + /** + * 数据范围(1:全部数据权限 2:自定数据权限 3:本部门数据权限 4:本部门及以下数据权限) + */ + @TableField("data_scope") + private String dataScope; + + /** + * 角色状态(0:正常/1:停用) + */ + @TableField("status") + private String status; + + /** + * 是否删除(0:正常/1:删除) + */ + @TableField("is_deleted") + private String isDeleted; + + /** + * 创建人 + */ + @TableField("create_user") + private Long createUser; + + /** + * 创建时间 + */ + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @TableField(fill = FieldFill.INSERT) + private Date createTime; + + /** + * 修改人 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 修改时间 + */ + + @JsonIgnore + @TableField(fill = FieldFill.INSERT_UPDATE) + private Date updateTime; + + /** + * 备注 + */ + @TableField("remark") + private String remark; + + @TableField(exist = false) + private List _menus; +} diff --git a/common/src/main/java/com/yyy/common/core/domain/entity/UmsRoleMenu.java b/common/src/main/java/com/yyy/common/core/domain/entity/UmsRoleMenu.java new file mode 100644 index 0000000..4adc75c --- /dev/null +++ b/common/src/main/java/com/yyy/common/core/domain/entity/UmsRoleMenu.java @@ -0,0 +1,34 @@ +package com.yyy.common.core.domain.entity; + +import lombok.*; +import com.baomidou.mybatisplus.annotation.*; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonIgnore; + +/** + * 角色权限关联表(UmsRoleMenu)表实体类 + * + * @author Fangy + * @since 2024-04-12 20:42:25 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@TableName(value = "ums_role_menu") +public class UmsRoleMenu { + private static final long serialVersionUID = 686031140857580486L; + + + /** + * 角色ID(主键) + */ + @TableField("role_id") + private Long roleId; + + /** + * 菜单ID(主键) + */ + @TableField("menu_id") + private Long menuId; +} diff --git a/common/src/main/java/com/yyy/common/core/domain/entity/UmsUser.java b/common/src/main/java/com/yyy/common/core/domain/entity/UmsUser.java new file mode 100644 index 0000000..b3467c5 --- /dev/null +++ b/common/src/main/java/com/yyy/common/core/domain/entity/UmsUser.java @@ -0,0 +1,177 @@ +package com.yyy.common.core.domain.entity; + +import java.util.Date; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.yyy.common.annotation.Excel; +import com.yyy.common.annotation.Excels; +import lombok.*; +import com.baomidou.mybatisplus.annotation.*; + +/** + * 用户表(UmsUser)表实体类 + * + * @author Fangy + * @since 2024-03-22 17:47:19 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@TableName(value = "ums_user") +public class UmsUser { + private static final long serialVersionUID = -73936105573664937L; + + /** + * 用户ID(主键) + */ + @JsonIgnore + @TableId(value = "user_id", type = IdType.AUTO) + @Excel(name = "用户序号", cellType = Excel.ColumnType.NUMERIC, prompt = "用户编号") + private Long userId; + + /** + * 登录账号 + */ + @TableField("login_name") + @Excel(name = "登录账号") + private String loginName; + + /** + * 用户昵称 + */ + @TableField("user_name") + @Excel(name = "用户名称") + private String userName; + + /** + * 用户邮箱 + */ + @Excel(name = "用户邮箱") + @TableField("email") + private String email; + + /** + * 联系电话 + */ + @TableField("phone") + @Excel(name = "联系电话") + private String phone; + + /** + * 密码 + */ + @TableField("password") + private String password; + + /** + * 盐加密 + */ + @TableField("salt") + private String salt; + + /** + * 状态(0:正常/1:停用) + */ + @TableField("status") + @Excel(name = "帐号状态", readConverterExp = "0=正常,1=停用") + private String status; + + /** + * 是否删除(0:正常/1:删除) + */ + @TableField("is_deleted") + private Integer isDeleted; + + /** + * 最后登录IP + */ + @TableField("login_ip") + private String loginIp; + + /** + * 最后登录时间 + */ + @TableField("login_date") + private Date loginDate; + + /** + * 密码最后更新时间 + */ + @TableField("pwd_update_date") + private Date pwdUpdateDate; + + /** + * 创建人 + */ + @TableField("create_user") + private Long createUser; + + /** + * 创建时间 + */ + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @TableField(fill = FieldFill.INSERT) + private Date createTime; + + /** + * 修改人 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 修改时间 + */ + + @JsonIgnore + @TableField(fill = FieldFill.INSERT_UPDATE) + private Date updateTime; + + /** + * 备注 + */ + @Excel(name = "备注") + @TableField("remark") + private String remark; + + /** + * 用户性别(0-男 1-女 2-未知) + */ + @Excel(name = "用户性别", readConverterExp = "0=男,1=女,2=未知") + @TableField("sex") + private String sex; + + /** + * 头像路径 + */ + @TableField("avatar") + private String avatar; + + /** + * 部门对象 + */ + @Excels({ + @Excel(name = "部门id", targetAttr = "organizationId", type = Excel.Type.EXPORT), + @Excel(name = "部门名称", targetAttr = "organizationName", type = Excel.Type.EXPORT) + }) + @TableField(exist = false) + private UmsOrganization _umsOrganization; + + @Excels({ + @Excel(name = "角色id", targetAttr = "roleId", type = Excel.Type.EXPORT), + @Excel(name = "角色名称", targetAttr = "roleName", type = Excel.Type.EXPORT) + }) + @TableField(exist = false) + private UmsRole _umsRole; + + public boolean isAdmin() { + return isAdmin(this.userId); + } + + public static boolean isAdmin(Long userId) { + return userId != null && 1L == userId; + } +} diff --git a/common/src/main/java/com/yyy/common/core/domain/entity/UmsUserOrganization.java b/common/src/main/java/com/yyy/common/core/domain/entity/UmsUserOrganization.java new file mode 100644 index 0000000..6adb25b --- /dev/null +++ b/common/src/main/java/com/yyy/common/core/domain/entity/UmsUserOrganization.java @@ -0,0 +1,34 @@ +package com.yyy.common.core.domain.entity; + +import lombok.*; +import com.baomidou.mybatisplus.annotation.*; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonIgnore; + +/** + * 组织信息关联表(UmsUserOrganization)表实体类 + * + * @author Fangy + * @since 2024-04-03 14:51:55 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@TableName(value = "ums_user_organization") +public class UmsUserOrganization { + private static final long serialVersionUID = 453006522982935793L; + + + /** + * 组织ID(主键) + */ + @JsonIgnore + private Long organizationId; + + /** + * 员工ID(主键) + */ + @JsonIgnore + private Long userId; +} diff --git a/common/src/main/java/com/yyy/common/core/domain/entity/UmsUserRole.java b/common/src/main/java/com/yyy/common/core/domain/entity/UmsUserRole.java new file mode 100644 index 0000000..81371dc --- /dev/null +++ b/common/src/main/java/com/yyy/common/core/domain/entity/UmsUserRole.java @@ -0,0 +1,34 @@ +package com.yyy.common.core.domain.entity; + +import lombok.*; +import com.baomidou.mybatisplus.annotation.*; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonIgnore; + +/** + * 用户角色关联表(UmsUserRole)表实体类 + * + * @author Fangy + * @since 2024-04-03 15:06:35 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@TableName(value = "ums_user_role") +public class UmsUserRole { + private static final long serialVersionUID = 767125177028822730L; + + + /** + * 用户ID(主键) + */ + @JsonIgnore + private Long userId; + + /** + * 角色ID(主键) + */ + @JsonIgnore + private Long roleId; +} diff --git a/common/src/main/java/com/yyy/common/core/domain/vo/LoginVo.java b/common/src/main/java/com/yyy/common/core/domain/vo/LoginVo.java new file mode 100644 index 0000000..af6b947 --- /dev/null +++ b/common/src/main/java/com/yyy/common/core/domain/vo/LoginVo.java @@ -0,0 +1,47 @@ +package com.yyy.common.core.domain.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Set; + +/** + * @Author: fy + * @Date: 2024/04/03 + * @Description: + */ +@ApiModel("登陆成功返回信息") +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class LoginVo { + + @ApiModelProperty("登录账号") + private String loginName; + + @ApiModelProperty("用户名称") + private String userName; + + @ApiModelProperty("用户头像地址") + private String avatar; + + @ApiModelProperty("手机号") + private String phone; + + @ApiModelProperty("邮箱") + private String email; + + @ApiModelProperty("Token信息") + private String Authorization; + + @ApiModelProperty("角色keySet") + private Set roles; + + @ApiModelProperty("权限标识Set") + private Set permissions; +} diff --git a/common/src/main/java/com/yyy/common/core/domain/vo/UmsMenuVo.java b/common/src/main/java/com/yyy/common/core/domain/vo/UmsMenuVo.java new file mode 100644 index 0000000..4e58ee6 --- /dev/null +++ b/common/src/main/java/com/yyy/common/core/domain/vo/UmsMenuVo.java @@ -0,0 +1,68 @@ +package com.yyy.common.core.domain.vo; + +import java.util.Date; +import java.util.List; +import java.util.stream.Collectors; + +import com.yyy.common.core.domain.entity.UmsMenu; +import com.yyy.common.utils.bean.BeanUtils; +import lombok.Data; +import lombok.Builder; +import lombok.NoArgsConstructor; +import lombok.AllArgsConstructor; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +/** + * 菜单表(UmsMenu)视图数据类 + * + * @author Fangy + * @since 2024-04-03 17:18:31 + */ +@ApiModel("UmsMenuVo菜单表视图数据类") +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class UmsMenuVo { + + @ApiModelProperty("菜单ID") + private Long menuId; + + @ApiModelProperty("菜单名称") + private String menuName; + + @ApiModelProperty("父主键ID") + private Long parentId; + + @ApiModelProperty("排序") + private Integer sort; + + @ApiModelProperty("请求路径") + private String url; + + @ApiModelProperty("菜单类型(M目录 C菜单 F按钮)") + private String menuType; + + @ApiModelProperty("菜单状态(1隐藏 0显示)") + private String visible; + + @ApiModelProperty("权限标识") + private String permission; + + @ApiModelProperty("菜单图标") + private String icon; + + @ApiModelProperty("备注") + private String remark; + + public static UmsMenuVo ToVo(UmsMenu umsMenu) { + UmsMenuVo umsMenuVo = new UmsMenuVo(); + BeanUtils.copyProperties(umsMenu, umsMenuVo); + return umsMenuVo; + } + + public static List ToVo(List umsMenus) { + return umsMenus.stream().map(UmsMenuVo::ToVo).collect(Collectors.toList()); + } +} diff --git a/common/src/main/java/com/yyy/common/core/domain/vo/UmsOrganizationVo.java b/common/src/main/java/com/yyy/common/core/domain/vo/UmsOrganizationVo.java new file mode 100644 index 0000000..064cfc6 --- /dev/null +++ b/common/src/main/java/com/yyy/common/core/domain/vo/UmsOrganizationVo.java @@ -0,0 +1,52 @@ +package com.yyy.common.core.domain.vo; + +import java.util.List; +import java.util.stream.Collectors; + +import com.yyy.common.core.domain.entity.UmsOrganization; +import com.yyy.common.utils.bean.BeanUtils; +import lombok.Data; +import lombok.Builder; +import lombok.NoArgsConstructor; +import lombok.AllArgsConstructor; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +/** + * 组织信息表(UmsOrganization)视图数据类 + * + * @author Fangy + * @since 2024-04-03 09:47:09 + */ +@ApiModel("UmsOrganizationVo组织信息表视图数据类") +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class UmsOrganizationVo { + + @ApiModelProperty("组织ID") + private Long organizationId; + @ApiModelProperty("组织名称") + private String organizationName; + @ApiModelProperty("组织类型(0:公司/1:部门/2:岗位)") + private String organizationType; + @ApiModelProperty("显示顺序") + private Integer orderNum; + @ApiModelProperty("父组织id") + private Long parentId; + @ApiModelProperty("深度") + private String depth; + @ApiModelProperty("状态(0:正常/1:停用)") + private String status; + + public static UmsOrganizationVo ToVo(UmsOrganization umsOrganization) { + UmsOrganizationVo umsOrganizationVo = new UmsOrganizationVo(); + BeanUtils.copyProperties(umsOrganization, umsOrganizationVo); + return umsOrganizationVo; + } + + public static List ToVo(List umsOrganizations) { + return umsOrganizations.stream().map(UmsOrganizationVo::ToVo).collect(Collectors.toList()); + } +} diff --git a/common/src/main/java/com/yyy/common/core/domain/vo/UmsRoleVo.java b/common/src/main/java/com/yyy/common/core/domain/vo/UmsRoleVo.java new file mode 100644 index 0000000..7f2757e --- /dev/null +++ b/common/src/main/java/com/yyy/common/core/domain/vo/UmsRoleVo.java @@ -0,0 +1,60 @@ +package com.yyy.common.core.domain.vo; + +import java.util.Date; +import java.util.List; +import java.util.stream.Collectors; + +import com.yyy.common.core.domain.entity.UmsMenu; +import com.yyy.common.core.domain.entity.UmsRole; +import com.yyy.common.utils.bean.BeanUtils; +import lombok.Data; +import lombok.Builder; +import lombok.NoArgsConstructor; +import lombok.AllArgsConstructor; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +/** + * 角色表(UmsRole)视图数据类 + * + * @author Fangy + * @since 2024-04-03 16:33:28 + */ +@ApiModel("UmsRoleVo角色表视图数据类") +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class UmsRoleVo { + + @ApiModelProperty("角色ID") + private Long roleId; + + @ApiModelProperty("角色名称") + private String roleName; + + @ApiModelProperty("角色权限字符串") + private String roleKey; + + @ApiModelProperty("显示顺序") + private Integer roleSort; + + @ApiModelProperty("角色状态(0:正常/1:停用)") + private String status; + + @ApiModelProperty("备注") + private String remark; + + @ApiModelProperty("菜单权限") + private List _menus; + + public static UmsRoleVo ToVo(UmsRole umsRole) { + UmsRoleVo umsRoleVo = new UmsRoleVo(); + BeanUtils.copyProperties(umsRole, umsRoleVo); + return umsRoleVo; + } + + public static List ToVo(List umsRoles) { + return umsRoles.stream().map(UmsRoleVo::ToVo).collect(Collectors.toList()); + } +} diff --git a/common/src/main/java/com/yyy/common/core/domain/vo/UmsUserVo.java b/common/src/main/java/com/yyy/common/core/domain/vo/UmsUserVo.java new file mode 100644 index 0000000..1973c4f --- /dev/null +++ b/common/src/main/java/com/yyy/common/core/domain/vo/UmsUserVo.java @@ -0,0 +1,69 @@ +package com.yyy.common.core.domain.vo; + +import com.yyy.common.core.domain.entity.UmsOrganization; +import com.yyy.common.core.domain.entity.UmsRole; +import com.yyy.common.core.domain.entity.UmsUser; +import com.yyy.common.utils.bean.BeanUtils; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.Builder; +import lombok.NoArgsConstructor; +import lombok.AllArgsConstructor; + +import java.util.List; +import java.util.stream.Collectors; + +/** + * 用户表(UmsUser)视图数据类 + * + * @author Fangy + * @since 2024-03-25 11:07:54 + */ +@ApiModel("用户表(UmsUser)视图数据类") +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class UmsUserVo { + + @ApiModelProperty("用户ID(主键)") + private Long userId; + + @ApiModelProperty("用户昵称") + private String userName; + + @ApiModelProperty("登录账号") + private String loginName; + + @ApiModelProperty("用户邮箱") + private String email; + + @ApiModelProperty("联系电话") + private String phone; + + @ApiModelProperty("状态(0-在职 1-离职)") + private String status; + + @ApiModelProperty("用户性别(0-男 1-女 2-未知)") + private String sex; + + @ApiModelProperty("头像路径") + private String avatar; + + @ApiModelProperty("岗位信息") + private UmsOrganization _umsOrganization; + + @ApiModelProperty("角色信息") + private UmsRole _umsRole; + + public static UmsUserVo ToVo(UmsUser umsUser) { + UmsUserVo umsUserVo = new UmsUserVo(); + BeanUtils.copyProperties(umsUser,umsUserVo); + return umsUserVo; + } + + public static List ToVo(List umsUsers) { + return umsUsers.stream().map(UmsUserVo::ToVo).collect(Collectors.toList()); + } +} diff --git a/common/src/main/java/com/yyy/common/core/page/PageDomain.java b/common/src/main/java/com/yyy/common/core/page/PageDomain.java new file mode 100644 index 0000000..4bf8409 --- /dev/null +++ b/common/src/main/java/com/yyy/common/core/page/PageDomain.java @@ -0,0 +1,89 @@ +package com.yyy.common.core.page; + +import com.yyy.common.utils.common.StringUtils; + +/** + * @Author: fy + * @Date: 2024/03/22 + * @Description:分页数据 + */ +public class PageDomain +{ + /** 当前记录起始索引 */ + private Integer pageNum; + + /** 每页显示记录数 */ + private Integer pageSize; + + /** 排序列 */ + private String orderByColumn; + + /** 排序的方向desc或者asc */ + private String isAsc = "asc"; + + /** 分页参数合理化 */ + private Boolean reasonable = true; + + public String getOrderBy() + { + if (StringUtils.isEmpty(orderByColumn)) + { + return ""; + } + return StringUtils.toUnderScoreCase(orderByColumn) + " " + isAsc; + } + + public Integer getPageNum() + { + return pageNum; + } + + public void setPageNum(Integer pageNum) + { + this.pageNum = pageNum; + } + + public Integer getPageSize() + { + return pageSize; + } + + public void setPageSize(Integer pageSize) + { + this.pageSize = pageSize; + } + + public String getOrderByColumn() + { + return orderByColumn; + } + + public void setOrderByColumn(String orderByColumn) + { + this.orderByColumn = orderByColumn; + } + + public String getIsAsc() + { + return isAsc; + } + + public void setIsAsc(String isAsc) + { + this.isAsc = isAsc; + } + + public Boolean getReasonable() + { + if (StringUtils.isNull(reasonable)) + { + return Boolean.TRUE; + } + return reasonable; + } + + public void setReasonable(Boolean reasonable) + { + this.reasonable = reasonable; + } +} \ No newline at end of file diff --git a/common/src/main/java/com/yyy/common/core/page/TableDataInfo.java b/common/src/main/java/com/yyy/common/core/page/TableDataInfo.java new file mode 100644 index 0000000..7e525c1 --- /dev/null +++ b/common/src/main/java/com/yyy/common/core/page/TableDataInfo.java @@ -0,0 +1,85 @@ +package com.yyy.common.core.page; + +import java.io.Serializable; +import java.util.List; + +/** + * @Author: fy + * @Date: 2024/03/22 + * @Description:表格分页数据对象 + */ +public class TableDataInfo implements Serializable +{ + private static final long serialVersionUID = 1L; + + /** 总记录数 */ + private long total; + + /** 列表数据 */ + private List rows; + + /** 消息状态码 */ + private int code; + + /** 消息内容 */ + private String msg; + + /** + * 表格数据对象 + */ + public TableDataInfo() + { + } + + /** + * 分页 + * + * @param list 列表数据 + * @param total 总记录数 + */ + public TableDataInfo(List list, int total) + { + this.rows = list; + this.total = total; + } + + public long getTotal() + { + return total; + } + + public void setTotal(long total) + { + this.total = total; + } + + public List getRows() + { + return rows; + } + + public void setRows(List rows) + { + this.rows = rows; + } + + public int getCode() + { + return code; + } + + public void setCode(int code) + { + this.code = code; + } + + public String getMsg() + { + return msg; + } + + public void setMsg(String msg) + { + this.msg = msg; + } +} \ No newline at end of file diff --git a/common/src/main/java/com/yyy/common/core/page/TableSupport.java b/common/src/main/java/com/yyy/common/core/page/TableSupport.java new file mode 100644 index 0000000..fbe2e8f --- /dev/null +++ b/common/src/main/java/com/yyy/common/core/page/TableSupport.java @@ -0,0 +1,56 @@ +package com.yyy.common.core.page; + +import com.yyy.common.core.text.Convert; +import com.yyy.common.utils.common.ServletUtils; + +/** + * @Author: fy + * @Date: 2024/03/22 + * @Description:表格数据处理 + */ +public class TableSupport +{ + /** + * 当前记录起始索引 + */ + public static final String PAGE_NUM = "pageNum"; + + /** + * 每页显示记录数 + */ + public static final String PAGE_SIZE = "pageSize"; + + /** + * 排序列 + */ + public static final String ORDER_BY_COLUMN = "orderByColumn"; + + /** + * 排序的方向 "desc" 或者 "asc". + */ + public static final String IS_ASC = "isAsc"; + + /** + * 分页参数合理化 + */ + public static final String REASONABLE = "reasonable"; + + /** + * 封装分页对象 + */ + public static PageDomain getPageDomain() + { + PageDomain pageDomain = new PageDomain(); + pageDomain.setPageNum(Convert.toInt(ServletUtils.getParameter(PAGE_NUM), 1)); + pageDomain.setPageSize(Convert.toInt(ServletUtils.getParameter(PAGE_SIZE), 10)); + pageDomain.setOrderByColumn(ServletUtils.getParameter(ORDER_BY_COLUMN)); + pageDomain.setIsAsc(ServletUtils.getParameter(IS_ASC)); + pageDomain.setReasonable(ServletUtils.getParameterToBool(REASONABLE)); + return pageDomain; + } + + public static PageDomain buildPageRequest() + { + return getPageDomain(); + } +} diff --git a/common/src/main/java/com/yyy/common/core/qr/PdfCellUtill.java b/common/src/main/java/com/yyy/common/core/qr/PdfCellUtill.java new file mode 100644 index 0000000..5ab7feb --- /dev/null +++ b/common/src/main/java/com/yyy/common/core/qr/PdfCellUtill.java @@ -0,0 +1,118 @@ +package com.yyy.common.core.qr; + +import com.itextpdf.text.Font; +import com.itextpdf.text.Paragraph; +import com.itextpdf.text.Phrase; +import com.itextpdf.text.pdf.PdfPCell; +/** + * @Author: fy + * @Date: 2024/03/19 + * @Description:二维码生成工具 + */ +public class PdfCellUtill { + private static PdfPCell pdfCell; + /** + * 创建PdfCell + * @param content 内容文本(短语) + * @param font 字体 + * @return 返回PdfCell + */ + public static PdfPCell createCell(String content,Font font){ + pdfCell = new PdfPCell(new Phrase(content, font)); + pdfCell.setHorizontalAlignment(PdfPCell.ALIGN_CENTER); + pdfCell.setVerticalAlignment(PdfPCell.ALIGN_MIDDLE); + pdfCell.setBorder(0); + return pdfCell; + } + /** + * + * 创建PdfCell + * @param content 内容文本(短语) + * @param font 字体 + * @param horizontalAlignment 水平位置对齐 + * @param verticalAlignment 垂直位置对齐 + * @return 返回PdfCell + */ + public static PdfPCell createCell(String content,Font font,int horizontalAlignment,int verticalAlignment){ + pdfCell = new PdfPCell(new Phrase(content, font)); + pdfCell.setHorizontalAlignment(horizontalAlignment); + pdfCell.setVerticalAlignment(verticalAlignment); + pdfCell.setBorder(0); + return pdfCell; + } + /** + * + * 创建PdfCell + * @param content 内容文本(短语) + * @param font 字体 + * @param horizontalAlignment 水平位置对齐 + * @param verticalAlignment 垂直位置对齐 + * @param colspan 合并列数 + * @param rowspan 合并行数 + * @return 返回PdfCell + */ + public static PdfPCell createCell(String content,Font font,int horizontalAlignment,int verticalAlignment ,int colspan,int rowspan){ + pdfCell = new PdfPCell(new Phrase(content, font)); + pdfCell.setHorizontalAlignment(horizontalAlignment); + pdfCell.setVerticalAlignment(verticalAlignment); + if(colspan>0){ + pdfCell.setColspan(colspan); + } + if(rowspan>0){ + pdfCell.setRowspan(rowspan); + } + pdfCell.setBorder(0); + return pdfCell; + } + /** + * + * @param content 内容文本(段落) + * @param font 字体 + * @return 返回PdfCell + */ + public static PdfPCell createCellParagraph(String content,Font font){ + pdfCell = new PdfPCell(new Paragraph(content, font)); + pdfCell.setHorizontalAlignment(PdfPCell.ALIGN_CENTER); + pdfCell.setVerticalAlignment(PdfPCell.ALIGN_MIDDLE); + pdfCell.setBorder(0); + return pdfCell; + } + /** + * + * @param content 内容文本(段落) + * @param font 字体 + * @param horizontalAlignment 水平对齐 + * @param verticalAlignment 垂直位置对齐 + * @return 返回PdfCell + */ + public static PdfPCell createCellParagraph(String content,Font font,int horizontalAlignment,int verticalAlignment){ + pdfCell = new PdfPCell(new Paragraph(content, font)); + pdfCell.setHorizontalAlignment(horizontalAlignment); + pdfCell.setVerticalAlignment(verticalAlignment); + pdfCell.setBorder(0); + return pdfCell; + } + /** + * + * @param content 内容文本(段落) + * @param font 字体 + * @param horizontalAlignment 水平对齐 + * @param verticalAlignment 垂直位置对齐 + * @param colspan 合并列数 + * @param rowspan 合并行数 + * @return 返回PdfCell + */ + public static PdfPCell createCellParagraph(String content,Font font,int horizontalAlignment,int verticalAlignment,int colspan,int rowspan){ + pdfCell = new PdfPCell(new Paragraph(content, font)); + pdfCell.setHorizontalAlignment(horizontalAlignment); + pdfCell.setVerticalAlignment(verticalAlignment); + if(colspan>0){ + pdfCell.setColspan(colspan); + } + if(rowspan>0){ + pdfCell.setRowspan(rowspan); + } + pdfCell.setBorder(0); + return pdfCell; + } +} diff --git a/common/src/main/java/com/yyy/common/core/qr/QrCodeManageAction.java b/common/src/main/java/com/yyy/common/core/qr/QrCodeManageAction.java new file mode 100644 index 0000000..3ce847d --- /dev/null +++ b/common/src/main/java/com/yyy/common/core/qr/QrCodeManageAction.java @@ -0,0 +1,197 @@ +package com.yyy.common.core.qr; + +import cn.hutool.extra.qrcode.QrCodeUtil; +import cn.hutool.extra.qrcode.QrConfig; +import com.itextpdf.text.*; +import com.itextpdf.text.pdf.*; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.OutputStream; +import java.net.MalformedURLException; + +/** + * @Author: fy + * @Date: 2024/03/19 + * @Description: + */ +@Component +public class QrCodeManageAction { + @Autowired + private QrConfig config; + + @Value("${app.profile}") + private String path; + + @Value("${qr.ttf}") + private String ttf; + + + /** + * 预览二维码信息,并可批量打印 + * + * @return + */ + public void printQr(String name, String code, String date, String organization, HttpServletResponse response) { + + response.setContentType("application/pdf"); + try { + response.setHeader("content-disposition", "filename=qr.pdf"); + OutputStream out = response.getOutputStream(); + float[] rectSize = {4, 1, 4, 2}; + printQrInfo(out, rectSize, name, code, date, organization); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 预览、打印二维码pdf + * + */ + public void printQrInfo(OutputStream out, float[] rectSize, String name, String code, String date, String organization) throws IOException, DocumentException { + + // SIMHEI.TTF 文件字体文件,可下载至本地 ,此处更改为相应本地地址 + BaseFont bfChinese = BaseFont.createFont(path + ttf, BaseFont.IDENTITY_H, BaseFont.EMBEDDED); + Rectangle rect = new Rectangle(170F, 85.0F);// A4纸张 + rect.setBackgroundColor(BaseColor.WHITE); + //方正小标送简 常规 -标签标题 + BaseFont bfChinese1 = BaseFont.createFont(path + ttf, BaseFont.IDENTITY_H, BaseFont.EMBEDDED); + + Font song22 = new Font(bfChinese1, 8, Font.BOLD); + + BaseFont bfChinese2 = BaseFont.createFont(path + ttf, BaseFont.IDENTITY_H, BaseFont.EMBEDDED); + Font fang16 = new Font(bfChinese2, 6, Font.BOLD); + BaseFont bfChinese3 = BaseFont.createFont(path + ttf, BaseFont.IDENTITY_H, BaseFont.EMBEDDED); + Font kai16 = new Font(bfChinese3, 7, Font.BOLD); + //西文 16号 Times New Roman + BaseFont bfChinese4 = BaseFont.createFont(path + ttf, BaseFont.IDENTITY_H, BaseFont.EMBEDDED); + Font roman16 = new Font(bfChinese4, 7, Font.BOLD); + + //人名 方正行楷 FZXKJW.TTF + BaseFont bfChinese5 = BaseFont.createFont(path + ttf, BaseFont.IDENTITY_H, BaseFont.EMBEDDED); + Font fzxk16 = new Font(bfChinese5, 9); + + Document doc = new Document(rect, rectSize[0], rectSize[1], rectSize[2], rectSize[3]); + + PdfWriter writer = PdfWriter.getInstance(doc, out); + + writer.setPdfVersion(PdfWriter.PDF_VERSION_1_2); + //文档属性 + doc.addTitle("资产信息"); + doc.open(); + + //加入内容 + PdfPTable tab = new PdfPTable(1); + PdfPCell cell = new PdfPCell(); + +// for (int i = 0; i < infos.size(); i++) { +// createPrintQrInfo(doc, tab, cell, song22, fang16, kai16, roman16, fzxk16); +// } + createPrintQrInfo(doc, tab, cell, song22, fang16, kai16, roman16, fzxk16, name, code, date, organization); + doc.newPage(); + doc.close(); + } + + private void createPrintQrInfo(Document doc, PdfPTable tab, PdfPCell cell, Font titleFont1, Font valueFont, Font kai16, Font roman16, Font fzxk16, String name, String code, String date, String organization) throws DocumentException { + //这里打印的是 60mm * 30mm 大小的标签,故这里参数很重要 + int[] cellWidth = {35, 70, 65}; + tab = new PdfPTable(3); + tab.setLockedWidth(true); + tab.setTotalWidth(165); + tab.getDefaultCell().setMinimumHeight(15f); + tab.setHorizontalAlignment(Element.ALIGN_CENTER); + tab.setWidths(cellWidth); + + //cell = PdfCellUtill.createCell(ObjUtils.defaultIfNull("", titleFont1, PdfPCell.ALIGN_CENTER, PdfPCell.ALIGN_MIDDLE, 3, 0)); +// String content = (titleFont1 != null) ? titleFont1.toString() : ""; + String content = ""; + cell = PdfCellUtill.createCell(content, titleFont1); + cell.setFixedHeight(15f); + cell.setBorderWidthTop(0.5f); + cell.setBorderWidthLeft(0.5f); + cell.setBorderWidthRight(0.5f); + cell.setUseAscender(true); + cell.setVerticalAlignment(cell.ALIGN_MIDDLE); + cell.setHorizontalAlignment(Element.ALIGN_CENTER); //水平居中 + cell.setVerticalAlignment(Element.ALIGN_MIDDLE); //垂直居中 + tab.addCell(cell); + + cell = PdfCellUtill.createCell("资产名称", kai16, PdfPCell.ALIGN_CENTER, PdfPCell.ALIGN_MIDDLE, 1, 0); + cell.setFixedHeight(15f); + cell.setBorderWidthTop(0.5f); + cell.setBorderWidthLeft(0.5f); + tab.addCell(cell); + cell = PdfCellUtill.createCell(name, valueFont, PdfPCell.ALIGN_LEFT, PdfPCell.ALIGN_MIDDLE, 1, 0); + cell.setBorderWidthTop(0.5f); + cell.setBorderWidthLeft(0.5f); + cell.setBorderWidthRight(0.5f); + tab.addCell(cell); + + Image imageQjPhoto = null; + // 二维码图片路径 + try { + imageQjPhoto = Image.getInstance(QrCodeUtil.generate(code, config), null); + // 调整二维码图片大小 + imageQjPhoto.scaleAbsolute(30, 30); // 设置宽度和高度 + } catch (MalformedURLException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + cell = PdfCellUtill.createCell("", valueFont, PdfPCell.ALIGN_CENTER, PdfPCell.ALIGN_MIDDLE, 1, 4); + cell.setBorderWidthTop(0.5f); + cell.setBorderWidthLeft(0.5f); + cell.setBorderWidthRight(0.5f); + cell.setBorderWidthBottom(0.5f); + cell.addElement(imageQjPhoto); + tab.addCell(cell); + + cell = PdfCellUtill.createCell("资产编号", kai16, PdfPCell.ALIGN_CENTER, PdfPCell.ALIGN_MIDDLE, 1, 0); + cell.setFixedHeight(15f); + cell.setBorderWidthTop(0.5f); + cell.setBorderWidthLeft(0.5f); + tab.addCell(cell); + cell = PdfCellUtill.createCell(code, roman16, PdfPCell.ALIGN_LEFT, PdfPCell.ALIGN_MIDDLE, 1, 0); + cell.setBorderWidthTop(0.5f); + cell.setBorderWidthLeft(0.5f); + cell.setBorderWidthRight(0.5f); + tab.addCell(cell); + + cell = PdfCellUtill.createCell("购置日期", kai16, PdfPCell.ALIGN_CENTER, PdfPCell.ALIGN_MIDDLE, 1, 0); + cell.setFixedHeight(15f); + cell.setBorderWidthTop(0.5f); + cell.setBorderWidthLeft(0.5f); + tab.addCell(cell); + + cell = PdfCellUtill.createCell(date, roman16, PdfPCell.ALIGN_LEFT, PdfPCell.ALIGN_MIDDLE, 1, 0); + cell.setBorderWidthTop(0.5f); + cell.setBorderWidthLeft(0.5f); + cell.setBorderWidthRight(0.5f); + tab.addCell(cell); + + cell = PdfCellUtill.createCell("使用部门", kai16, PdfPCell.ALIGN_CENTER, PdfPCell.ALIGN_MIDDLE, 1, 0); + cell.setFixedHeight(15f); + cell.setBorderWidthTop(0.5f); + cell.setBorderWidthLeft(0.5f); + cell.setUseAscender(true); + cell.setVerticalAlignment(cell.ALIGN_MIDDLE); + cell.setHorizontalAlignment(Element.ALIGN_CENTER); //水平居中 + cell.setVerticalAlignment(Element.ALIGN_MIDDLE); //垂直居中 + cell.setBorderWidthBottom(0.5f); + tab.addCell(cell); + + cell = PdfCellUtill.createCell(organization, fzxk16, PdfPCell.ALIGN_LEFT, PdfPCell.ALIGN_MIDDLE, 1, 0); + cell.setBorderWidthTop(0.5f); + cell.setBorderWidthLeft(0.5f); + cell.setBorderWidthRight(0.5f); + cell.setBorderWidthBottom(0.5f); + tab.addCell(cell); + + doc.add(tab); + } + +} diff --git a/common/src/main/java/com/yyy/common/core/text/CharsetKit.java b/common/src/main/java/com/yyy/common/core/text/CharsetKit.java new file mode 100644 index 0000000..f8d2c01 --- /dev/null +++ b/common/src/main/java/com/yyy/common/core/text/CharsetKit.java @@ -0,0 +1,88 @@ +package com.yyy.common.core.text; + + +import com.yyy.common.utils.common.StringUtils; + +import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; + +/** + * 字符集工具类 + * + * @author ruoyi + */ +public class CharsetKit +{ + /** ISO-8859-1 */ + public static final String ISO_8859_1 = "ISO-8859-1"; + /** UTF-8 */ + public static final String UTF_8 = "UTF-8"; + /** GBK */ + public static final String GBK = "GBK"; + + /** ISO-8859-1 */ + public static final Charset CHARSET_ISO_8859_1 = Charset.forName(ISO_8859_1); + /** UTF-8 */ + public static final Charset CHARSET_UTF_8 = Charset.forName(UTF_8); + /** GBK */ + public static final Charset CHARSET_GBK = Charset.forName(GBK); + + /** + * 转换为Charset对象 + * + * @param charset 字符集,为空则返回默认字符集 + * @return Charset + */ + public static Charset charset(String charset) + { + return StringUtils.isEmpty(charset) ? Charset.defaultCharset() : Charset.forName(charset); + } + + /** + * 转换字符串的字符集编码 + * + * @param source 字符串 + * @param srcCharset 源字符集,默认ISO-8859-1 + * @param destCharset 目标字符集,默认UTF-8 + * @return 转换后的字符集 + */ + public static String convert(String source, String srcCharset, String destCharset) + { + return convert(source, Charset.forName(srcCharset), Charset.forName(destCharset)); + } + + /** + * 转换字符串的字符集编码 + * + * @param source 字符串 + * @param srcCharset 源字符集,默认ISO-8859-1 + * @param destCharset 目标字符集,默认UTF-8 + * @return 转换后的字符集 + */ + public static String convert(String source, Charset srcCharset, Charset destCharset) + { + if (null == srcCharset) + { + srcCharset = StandardCharsets.ISO_8859_1; + } + + if (null == destCharset) + { + destCharset = StandardCharsets.UTF_8; + } + + if (StringUtils.isEmpty(source) || srcCharset.equals(destCharset)) + { + return source; + } + return new String(source.getBytes(srcCharset), destCharset); + } + + /** + * @return 系统字符集编码 + */ + public static String systemCharset() + { + return Charset.defaultCharset().name(); + } +} diff --git a/common/src/main/java/com/yyy/common/core/text/Convert.java b/common/src/main/java/com/yyy/common/core/text/Convert.java new file mode 100644 index 0000000..2d6a166 --- /dev/null +++ b/common/src/main/java/com/yyy/common/core/text/Convert.java @@ -0,0 +1,1007 @@ +package com.yyy.common.core.text; + +import com.yyy.common.utils.common.StringUtils; +import org.apache.commons.lang3.ArrayUtils; + +import java.math.BigDecimal; +import java.math.BigInteger; +import java.math.RoundingMode; +import java.nio.ByteBuffer; +import java.nio.charset.Charset; +import java.text.NumberFormat; +import java.util.Set; + +/** + * 类型转换器 + * + * @author ruoyi + */ +public class Convert +{ + /** + * 转换为字符串
+ * 如果给定的值为null,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * @return 结果 + */ + public static String toStr(Object value, String defaultValue) + { + if (null == value) + { + return defaultValue; + } + if (value instanceof String) + { + return (String) value; + } + return value.toString(); + } + + /** + * 转换为字符串
+ * 如果给定的值为null,或者转换失败,返回默认值null
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @return 结果 + */ + public static String toStr(Object value) + { + return toStr(value, null); + } + + /** + * 转换为字符
+ * 如果给定的值为null,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * @return 结果 + */ + public static Character toChar(Object value, Character defaultValue) + { + if (null == value) + { + return defaultValue; + } + if (value instanceof Character) + { + return (Character) value; + } + + final String valueStr = toStr(value, null); + return StringUtils.isEmpty(valueStr) ? defaultValue : valueStr.charAt(0); + } + + /** + * 转换为字符
+ * 如果给定的值为null,或者转换失败,返回默认值null
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @return 结果 + */ + public static Character toChar(Object value) + { + return toChar(value, null); + } + + /** + * 转换为byte
+ * 如果给定的值为null,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * @return 结果 + */ + public static Byte toByte(Object value, Byte defaultValue) + { + if (value == null) + { + return defaultValue; + } + if (value instanceof Byte) + { + return (Byte) value; + } + if (value instanceof Number) + { + return ((Number) value).byteValue(); + } + final String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) + { + return defaultValue; + } + try + { + return Byte.parseByte(valueStr); + } + catch (Exception e) + { + return defaultValue; + } + } + + /** + * 转换为byte
+ * 如果给定的值为null,或者转换失败,返回默认值null
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @return 结果 + */ + public static Byte toByte(Object value) + { + return toByte(value, null); + } + + /** + * 转换为Short
+ * 如果给定的值为null,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * @return 结果 + */ + public static Short toShort(Object value, Short defaultValue) + { + if (value == null) + { + return defaultValue; + } + if (value instanceof Short) + { + return (Short) value; + } + if (value instanceof Number) + { + return ((Number) value).shortValue(); + } + final String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) + { + return defaultValue; + } + try + { + return Short.parseShort(valueStr.trim()); + } + catch (Exception e) + { + return defaultValue; + } + } + + /** + * 转换为Short
+ * 如果给定的值为null,或者转换失败,返回默认值null
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @return 结果 + */ + public static Short toShort(Object value) + { + return toShort(value, null); + } + + /** + * 转换为Number
+ * 如果给定的值为空,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * @return 结果 + */ + public static Number toNumber(Object value, Number defaultValue) + { + if (value == null) + { + return defaultValue; + } + if (value instanceof Number) + { + return (Number) value; + } + final String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) + { + return defaultValue; + } + try + { + return NumberFormat.getInstance().parse(valueStr); + } + catch (Exception e) + { + return defaultValue; + } + } + + /** + * 转换为Number
+ * 如果给定的值为空,或者转换失败,返回默认值null
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @return 结果 + */ + public static Number toNumber(Object value) + { + return toNumber(value, null); + } + + /** + * 转换为int
+ * 如果给定的值为空,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * @return 结果 + */ + public static Integer toInt(Object value, Integer defaultValue) + { + if (value == null) + { + return defaultValue; + } + if (value instanceof Integer) + { + return (Integer) value; + } + if (value instanceof Number) + { + return ((Number) value).intValue(); + } + final String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) + { + return defaultValue; + } + try + { + return Integer.parseInt(valueStr.trim()); + } + catch (Exception e) + { + return defaultValue; + } + } + + /** + * 转换为int
+ * 如果给定的值为null,或者转换失败,返回默认值null
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @return 结果 + */ + public static Integer toInt(Object value) + { + return toInt(value, null); + } + + /** + * 转换为Integer数组
+ * + * @param str 被转换的值 + * @return 结果 + */ + public static Integer[] toIntArray(String str) + { + return toIntArray(",", str); + } + + /** + * 转换为Long数组
+ * + * @param str 被转换的值 + * @return 结果 + */ + public static Long[] toLongArray(String str) + { + return toLongArray(",", str); + } + + /** + * 转换为Integer数组
+ * + * @param split 分隔符 + * @param split 被转换的值 + * @return 结果 + */ + public static Integer[] toIntArray(String split, String str) + { + if (StringUtils.isEmpty(str)) + { + return new Integer[] {}; + } + String[] arr = str.split(split); + final Integer[] ints = new Integer[arr.length]; + for (int i = 0; i < arr.length; i++) + { + final Integer v = toInt(arr[i], 0); + ints[i] = v; + } + return ints; + } + + /** + * 转换为Long数组
+ * + * @param split 分隔符 + * @param str 被转换的值 + * @return 结果 + */ + public static Long[] toLongArray(String split, String str) + { + if (StringUtils.isEmpty(str)) + { + return new Long[] {}; + } + String[] arr = str.split(split); + final Long[] longs = new Long[arr.length]; + for (int i = 0; i < arr.length; i++) + { + final Long v = toLong(arr[i], null); + longs[i] = v; + } + return longs; + } + + /** + * 转换为String数组
+ * + * @param str 被转换的值 + * @return 结果 + */ + public static String[] toStrArray(String str) + { + return toStrArray(",", str); + } + + /** + * 转换为String数组
+ * + * @param split 分隔符 + * @param split 被转换的值 + * @return 结果 + */ + public static String[] toStrArray(String split, String str) + { + return str.split(split); + } + + /** + * 转换为long
+ * 如果给定的值为空,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * @return 结果 + */ + public static Long toLong(Object value, Long defaultValue) + { + if (value == null) + { + return defaultValue; + } + if (value instanceof Long) + { + return (Long) value; + } + if (value instanceof Number) + { + return ((Number) value).longValue(); + } + final String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) + { + return defaultValue; + } + try + { + // 支持科学计数法 + return new BigDecimal(valueStr.trim()).longValue(); + } + catch (Exception e) + { + return defaultValue; + } + } + + /** + * 转换为long
+ * 如果给定的值为null,或者转换失败,返回默认值null
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @return 结果 + */ + public static Long toLong(Object value) + { + return toLong(value, null); + } + + /** + * 转换为double
+ * 如果给定的值为空,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * @return 结果 + */ + public static Double toDouble(Object value, Double defaultValue) + { + if (value == null) + { + return defaultValue; + } + if (value instanceof Double) + { + return (Double) value; + } + if (value instanceof Number) + { + return ((Number) value).doubleValue(); + } + final String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) + { + return defaultValue; + } + try + { + // 支持科学计数法 + return new BigDecimal(valueStr.trim()).doubleValue(); + } + catch (Exception e) + { + return defaultValue; + } + } + + /** + * 转换为double
+ * 如果给定的值为空,或者转换失败,返回默认值null
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @return 结果 + */ + public static Double toDouble(Object value) + { + return toDouble(value, null); + } + + /** + * 转换为Float
+ * 如果给定的值为空,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * @return 结果 + */ + public static Float toFloat(Object value, Float defaultValue) + { + if (value == null) + { + return defaultValue; + } + if (value instanceof Float) + { + return (Float) value; + } + if (value instanceof Number) + { + return ((Number) value).floatValue(); + } + final String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) + { + return defaultValue; + } + try + { + return Float.parseFloat(valueStr.trim()); + } + catch (Exception e) + { + return defaultValue; + } + } + + /** + * 转换为Float
+ * 如果给定的值为空,或者转换失败,返回默认值null
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @return 结果 + */ + public static Float toFloat(Object value) + { + return toFloat(value, null); + } + + /** + * 转换为boolean
+ * String支持的值为:true、false、yes、ok、no,1,0 如果给定的值为空,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * @return 结果 + */ + public static Boolean toBool(Object value, Boolean defaultValue) + { + if (value == null) + { + return defaultValue; + } + if (value instanceof Boolean) + { + return (Boolean) value; + } + String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) + { + return defaultValue; + } + valueStr = valueStr.trim().toLowerCase(); + switch (valueStr) + { + case "true": + case "yes": + case "ok": + case "1": + return true; + case "false": + case "no": + case "0": + return false; + default: + return defaultValue; + } + } + + /** + * 转换为boolean
+ * 如果给定的值为空,或者转换失败,返回默认值null
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @return 结果 + */ + public static Boolean toBool(Object value) + { + return toBool(value, null); + } + + /** + * 转换为Enum对象
+ * 如果给定的值为空,或者转换失败,返回默认值
+ * + * @param clazz Enum的Class + * @param value 值 + * @param defaultValue 默认值 + * @return Enum + */ + public static > E toEnum(Class clazz, Object value, E defaultValue) + { + if (value == null) + { + return defaultValue; + } + if (clazz.isAssignableFrom(value.getClass())) + { + @SuppressWarnings("unchecked") + E myE = (E) value; + return myE; + } + final String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) + { + return defaultValue; + } + try + { + return Enum.valueOf(clazz, valueStr); + } + catch (Exception e) + { + return defaultValue; + } + } + + /** + * 转换为Enum对象
+ * 如果给定的值为空,或者转换失败,返回默认值null
+ * + * @param clazz Enum的Class + * @param value 值 + * @return Enum + */ + public static > E toEnum(Class clazz, Object value) + { + return toEnum(clazz, value, null); + } + + /** + * 转换为BigInteger
+ * 如果给定的值为空,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * @return 结果 + */ + public static BigInteger toBigInteger(Object value, BigInteger defaultValue) + { + if (value == null) + { + return defaultValue; + } + if (value instanceof BigInteger) + { + return (BigInteger) value; + } + if (value instanceof Long) + { + return BigInteger.valueOf((Long) value); + } + final String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) + { + return defaultValue; + } + try + { + return new BigInteger(valueStr); + } + catch (Exception e) + { + return defaultValue; + } + } + + /** + * 转换为BigInteger
+ * 如果给定的值为空,或者转换失败,返回默认值null
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @return 结果 + */ + public static BigInteger toBigInteger(Object value) + { + return toBigInteger(value, null); + } + + /** + * 转换为BigDecimal
+ * 如果给定的值为空,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * @return 结果 + */ + public static BigDecimal toBigDecimal(Object value, BigDecimal defaultValue) + { + if (value == null) + { + return defaultValue; + } + if (value instanceof BigDecimal) + { + return (BigDecimal) value; + } + if (value instanceof Long) + { + return new BigDecimal((Long) value); + } + if (value instanceof Double) + { + return BigDecimal.valueOf((Double) value); + } + if (value instanceof Integer) + { + return new BigDecimal((Integer) value); + } + final String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) + { + return defaultValue; + } + try + { + return new BigDecimal(valueStr); + } + catch (Exception e) + { + return defaultValue; + } + } + + /** + * 转换为BigDecimal
+ * 如果给定的值为空,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @return 结果 + */ + public static BigDecimal toBigDecimal(Object value) + { + return toBigDecimal(value, null); + } + + /** + * 将对象转为字符串
+ * 1、Byte数组和ByteBuffer会被转换为对应字符串的数组 2、对象数组会调用Arrays.toString方法 + * + * @param obj 对象 + * @return 字符串 + */ + public static String utf8Str(Object obj) + { + return str(obj, CharsetKit.CHARSET_UTF_8); + } + + /** + * 将对象转为字符串
+ * 1、Byte数组和ByteBuffer会被转换为对应字符串的数组 2、对象数组会调用Arrays.toString方法 + * + * @param obj 对象 + * @param charsetName 字符集 + * @return 字符串 + */ + public static String str(Object obj, String charsetName) + { + return str(obj, Charset.forName(charsetName)); + } + + /** + * 将对象转为字符串
+ * 1、Byte数组和ByteBuffer会被转换为对应字符串的数组 2、对象数组会调用Arrays.toString方法 + * + * @param obj 对象 + * @param charset 字符集 + * @return 字符串 + */ + public static String str(Object obj, Charset charset) + { + if (null == obj) + { + return null; + } + + if (obj instanceof String) + { + return (String) obj; + } + else if (obj instanceof byte[]) + { + return str((byte[]) obj, charset); + } + else if (obj instanceof Byte[]) + { + byte[] bytes = ArrayUtils.toPrimitive((Byte[]) obj); + return str(bytes, charset); + } + else if (obj instanceof ByteBuffer) + { + return str((ByteBuffer) obj, charset); + } + return obj.toString(); + } + + /** + * 将byte数组转为字符串 + * + * @param bytes byte数组 + * @param charset 字符集 + * @return 字符串 + */ + public static String str(byte[] bytes, String charset) + { + return str(bytes, StringUtils.isEmpty(charset) ? Charset.defaultCharset() : Charset.forName(charset)); + } + + /** + * 解码字节码 + * + * @param data 字符串 + * @param charset 字符集,如果此字段为空,则解码的结果取决于平台 + * @return 解码后的字符串 + */ + public static String str(byte[] data, Charset charset) + { + if (data == null) + { + return null; + } + + if (null == charset) + { + return new String(data); + } + return new String(data, charset); + } + + /** + * 将编码的byteBuffer数据转换为字符串 + * + * @param data 数据 + * @param charset 字符集,如果为空使用当前系统字符集 + * @return 字符串 + */ + public static String str(ByteBuffer data, String charset) + { + if (data == null) + { + return null; + } + + return str(data, Charset.forName(charset)); + } + + /** + * 将编码的byteBuffer数据转换为字符串 + * + * @param data 数据 + * @param charset 字符集,如果为空使用当前系统字符集 + * @return 字符串 + */ + public static String str(ByteBuffer data, Charset charset) + { + if (null == charset) + { + charset = Charset.defaultCharset(); + } + return charset.decode(data).toString(); + } + + // ----------------------------------------------------------------------- 全角半角转换 + /** + * 半角转全角 + * + * @param input String. + * @return 全角字符串. + */ + public static String toSBC(String input) + { + return toSBC(input, null); + } + + /** + * 半角转全角 + * + * @param input String + * @param notConvertSet 不替换的字符集合 + * @return 全角字符串. + */ + public static String toSBC(String input, Set notConvertSet) + { + char[] c = input.toCharArray(); + for (int i = 0; i < c.length; i++) + { + if (null != notConvertSet && notConvertSet.contains(c[i])) + { + // 跳过不替换的字符 + continue; + } + + if (c[i] == ' ') + { + c[i] = '\u3000'; + } + else if (c[i] < '\177') + { + c[i] = (char) (c[i] + 65248); + + } + } + return new String(c); + } + + /** + * 全角转半角 + * + * @param input String. + * @return 半角字符串 + */ + public static String toDBC(String input) + { + return toDBC(input, null); + } + + /** + * 替换全角为半角 + * + * @param text 文本 + * @param notConvertSet 不替换的字符集合 + * @return 替换后的字符 + */ + public static String toDBC(String text, Set notConvertSet) + { + char[] c = text.toCharArray(); + for (int i = 0; i < c.length; i++) + { + if (null != notConvertSet && notConvertSet.contains(c[i])) + { + // 跳过不替换的字符 + continue; + } + + if (c[i] == '\u3000') + { + c[i] = ' '; + } + else if (c[i] > '\uFF00' && c[i] < '\uFF5F') + { + c[i] = (char) (c[i] - 65248); + } + } + String returnString = new String(c); + + return returnString; + } + + /** + * 数字金额大写转换 先写个完整的然后将如零拾替换成零 + * + * @param n 数字 + * @return 中文大写数字 + */ + public static String digitUppercase(double n) + { + String[] fraction = { "角", "分" }; + String[] digit = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" }; + String[][] unit = { { "元", "万", "亿" }, { "", "拾", "佰", "仟" } }; + + String head = n < 0 ? "负" : ""; + n = Math.abs(n); + + String s = ""; + for (int i = 0; i < fraction.length; i++) + { + // 优化double计算精度丢失问题 + BigDecimal nNum = new BigDecimal(n); + BigDecimal decimal = new BigDecimal(10); + BigDecimal scale = nNum.multiply(decimal).setScale(2, RoundingMode.HALF_EVEN); + double d = scale.doubleValue(); + s += (digit[(int) (Math.floor(d * Math.pow(10, i)) % 10)] + fraction[i]).replaceAll("(零.)+", ""); + } + if (s.length() < 1) + { + s = "整"; + } + int integerPart = (int) Math.floor(n); + + for (int i = 0; i < unit[0].length && integerPart > 0; i++) + { + String p = ""; + for (int j = 0; j < unit[1].length && n > 0; j++) + { + p = digit[integerPart % 10] + unit[1][j] + p; + integerPart = integerPart / 10; + } + s = p.replaceAll("(零.)*零$", "").replaceAll("^$", "零") + unit[0][i] + s; + } + return head + s.replaceAll("(零.)*零元", "元").replaceFirst("(零.)+", "").replaceAll("(零.)+", "零").replaceAll("^整$", "零元整"); + } +} diff --git a/common/src/main/java/com/yyy/common/core/text/StrFormatter.java b/common/src/main/java/com/yyy/common/core/text/StrFormatter.java new file mode 100644 index 0000000..9a987e7 --- /dev/null +++ b/common/src/main/java/com/yyy/common/core/text/StrFormatter.java @@ -0,0 +1,93 @@ +package com.yyy.common.core.text; + + +import com.yyy.common.utils.common.StringUtils; + +/** + * 字符串格式化 + * + * @author ruoyi + */ +public class StrFormatter +{ + public static final String EMPTY_JSON = "{}"; + public static final char C_BACKSLASH = '\\'; + public static final char C_DELIM_START = '{'; + public static final char C_DELIM_END = '}'; + + /** + * 格式化字符串
+ * 此方法只是简单将占位符 {} 按照顺序替换为参数
+ * 如果想输出 {} 使用 \\转义 { 即可,如果想输出 {} 之前的 \ 使用双转义符 \\\\ 即可
+ * 例:
+ * 通常使用:format("this is {} for {}", "a", "b") -> this is a for b
+ * 转义{}: format("this is \\{} for {}", "a", "b") -> this is \{} for a
+ * 转义\: format("this is \\\\{} for {}", "a", "b") -> this is \a for b
+ * + * @param strPattern 字符串模板 + * @param argArray 参数列表 + * @return 结果 + */ + public static String format(final String strPattern, final Object... argArray) + { + if (StringUtils.isEmpty(strPattern) || StringUtils.isEmpty(argArray)) + { + return strPattern; + } + final int strPatternLength = strPattern.length(); + + // 初始化定义好的长度以获得更好的性能 + StringBuilder sbuf = new StringBuilder(strPatternLength + 50); + + int handledPosition = 0; + int delimIndex;// 占位符所在位置 + for (int argIndex = 0; argIndex < argArray.length; argIndex++) + { + delimIndex = strPattern.indexOf(EMPTY_JSON, handledPosition); + if (delimIndex == -1) + { + if (handledPosition == 0) + { + return strPattern; + } + else + { // 字符串模板剩余部分不再包含占位符,加入剩余部分后返回结果 + sbuf.append(strPattern, handledPosition, strPatternLength); + return sbuf.toString(); + } + } + else + { + if (delimIndex > 0 && strPattern.charAt(delimIndex - 1) == C_BACKSLASH) + { + if (delimIndex > 1 && strPattern.charAt(delimIndex - 2) == C_BACKSLASH) + { + // 转义符之前还有一个转义符,占位符依旧有效 + sbuf.append(strPattern, handledPosition, delimIndex - 1); + sbuf.append(Convert.utf8Str(argArray[argIndex])); + handledPosition = delimIndex + 2; + } + else + { + // 占位符被转义 + argIndex--; + sbuf.append(strPattern, handledPosition, delimIndex - 1); + sbuf.append(C_DELIM_START); + handledPosition = delimIndex + 1; + } + } + else + { + // 正常占位符 + sbuf.append(strPattern, handledPosition, delimIndex); + sbuf.append(Convert.utf8Str(argArray[argIndex])); + handledPosition = delimIndex + 2; + } + } + } + // 加入最后一个占位符后所有的字符 + sbuf.append(strPattern, handledPosition, strPattern.length()); + + return sbuf.toString(); + } +} diff --git a/common/src/main/java/com/yyy/common/enums/AssetStatusEnum.java b/common/src/main/java/com/yyy/common/enums/AssetStatusEnum.java new file mode 100644 index 0000000..6efbeb8 --- /dev/null +++ b/common/src/main/java/com/yyy/common/enums/AssetStatusEnum.java @@ -0,0 +1,40 @@ +package com.yyy.common.enums; + +public enum AssetStatusEnum { + UN_USEd(0, "闲置"), + IN_USE(1, "在用"), + BORROW(2, "借用中"), + REPAIR(3,"维修中"), + ALLOCATE(4, "调拨中"), + TOBE_SCRAPPED(5, "待报废"), + DISPOSED(6,"已处置"), + INVENTORY(7, "库存"), + SCRAPPED(8, "已报废"); + private final Integer code; + private final String info; + + AssetStatusEnum(Integer code, String info) + { + this.code = code; + this.info = info; + } + + public Integer getCode() + { + return code; + } + + public String getInfo() + { + return info; + } + + public static String getInfoByCode(int code) { + for (AssetStatusEnum status : AssetStatusEnum.values()) { + if (status.getCode() == code) { + return status.getInfo(); + } + } + return "Unknown"; + } +} diff --git a/common/src/main/java/com/yyy/common/enums/BusinessStatusEnum.java b/common/src/main/java/com/yyy/common/enums/BusinessStatusEnum.java new file mode 100644 index 0000000..b212cd8 --- /dev/null +++ b/common/src/main/java/com/yyy/common/enums/BusinessStatusEnum.java @@ -0,0 +1,29 @@ +package com.yyy.common.enums; + +public enum BusinessStatusEnum { + DRAFT(0, "草稿"), + COMPLETED(1, "已完成"), + REJECTED(2, "拒绝"), + APPROVED(3,"审批中"), + CANCELED(4, "取消"), + UNKNOWN(5, "未知"); + + private final Integer code; + private final String info; + + BusinessStatusEnum(Integer code, String info) + { + this.code = code; + this.info = info; + } + + public Integer getCode() + { + return code; + } + + public String getInfo() + { + return info; + } +} diff --git a/common/src/main/java/com/yyy/common/enums/ConfigEnum.java b/common/src/main/java/com/yyy/common/enums/ConfigEnum.java new file mode 100644 index 0000000..ded709d --- /dev/null +++ b/common/src/main/java/com/yyy/common/enums/ConfigEnum.java @@ -0,0 +1,23 @@ +package com.yyy.common.enums; + +public enum ConfigEnum { + DEFAULT_ROLE_ID(0, "3"); + private final Integer code; + private final String info; + + ConfigEnum(Integer code, String info) + { + this.code = code; + this.info = info; + } + + public Integer getCode() + { + return code; + } + + public String getInfo() + { + return info; + } +} diff --git a/common/src/main/java/com/yyy/common/enums/DetectTypeEnum.java b/common/src/main/java/com/yyy/common/enums/DetectTypeEnum.java new file mode 100644 index 0000000..b26b2b6 --- /dev/null +++ b/common/src/main/java/com/yyy/common/enums/DetectTypeEnum.java @@ -0,0 +1,37 @@ +package com.yyy.common.enums; + +public enum DetectTypeEnum { + ALLOCATE("allocate", "资产调拨"), + BORROW("borrow", "资产借用"), + COLLECTION("collection", "资产领用"), + OUTBOUND("outbound", "资产出库"), + REGISTRATION("registration","资产登记"), + RETURN("return", "资产归还"), + RETURN_INVENTORY("return_inventory", "资产退库"), + STORAGE("storage", "资产入库"), + TRANSFER("transfer", "资产转移"), + REPAIR_FAULT("repair_fault", "故障登记"), + REPAIR("repair", "设备报修"), + RETIREMENT("retirement", "资产报废"), + CLEAN("clean", "资产清理"), + UNKNOWN("null", "未知操作"); + + private final String code; + private final String info; + + DetectTypeEnum(String code, String info) + { + this.code = code; + this.info = info; + } + + public String getCode() + { + return code; + } + + public String getInfo() + { + return info; + } +} diff --git a/common/src/main/java/com/yyy/common/enums/EncodingEum.java b/common/src/main/java/com/yyy/common/enums/EncodingEum.java new file mode 100644 index 0000000..86812fb --- /dev/null +++ b/common/src/main/java/com/yyy/common/enums/EncodingEum.java @@ -0,0 +1,43 @@ +package com.yyy.common.enums; + +import com.yyy.common.utils.uuid.SnowFlakeUtil; + +public enum EncodingEum { + ASSET("AS", "资产信息"), + ALLOCATE("AL", "资产调拨"), + BORROW("BR", "资产借用"), + COLLECTION("CO", "资产领用"), + OUTBOUND("OU", "资产出库"), + REGISTRATION("REG","资产登记"), + RETURN("RET", "资产归还"), + RETURN_INVENTORY("REI", "资产退库"), + STORAGE("ST", "资产入库"), + TRANSFER("TR", "资产转移"), + REPAIR_FAULT("REF", "故障登记"), + REPAIR("REP", "设备报修"), + RETIREMENT("REM", "资产报废"), + UNKNOWN("null", "未知操作"); + + private final String code; + private final String info; + + EncodingEum(String code, String info) + { + this.code = code; + this.info = info; + } + + public String getCode() + { + return code; + } + + public String getInfo() + { + return info; + } + + public String getBusinessId(){ + return this.code + SnowFlakeUtil.getDefaultSnowFlakeId(); + } +} diff --git a/common/src/main/java/com/yyy/common/enums/OrganizationTypeEnum.java b/common/src/main/java/com/yyy/common/enums/OrganizationTypeEnum.java new file mode 100644 index 0000000..cc8a379 --- /dev/null +++ b/common/src/main/java/com/yyy/common/enums/OrganizationTypeEnum.java @@ -0,0 +1,39 @@ +package com.yyy.common.enums; + +/** + * 用户状态 + */ +public enum OrganizationTypeEnum { + COMPANY("0", "公司"), + DEPARTMENT("1", "部门"), + POST("2", "岗位"); + + private final String code; + private final String info; + + OrganizationTypeEnum(String code, String info) { + this.code = code; + this.info = info; + } + + public String getCode() { + return code; + } + + public String getInfo() { + return info; + } + + public static String enable(String parentCode, String childrenCode) { + if (parentCode.equals(DEPARTMENT.code) && childrenCode.equals(COMPANY.code)){ + return "部门下不能创建公司!"; + }else if(parentCode.equals(POST.code)){ + if (childrenCode.equals(COMPANY.code)){ + return "岗位下不能创建公司!"; + }else if (childrenCode.equals(DEPARTMENT.code)){ + return "岗位下不能创建部门!"; + } + } + return null; + } +} diff --git a/common/src/main/java/com/yyy/common/enums/ScrapTypeEnum.java b/common/src/main/java/com/yyy/common/enums/ScrapTypeEnum.java new file mode 100644 index 0000000..4e866a2 --- /dev/null +++ b/common/src/main/java/com/yyy/common/enums/ScrapTypeEnum.java @@ -0,0 +1,35 @@ +package com.yyy.common.enums; + +public enum ScrapTypeEnum { + DAMAGED(1, "损坏"), + EXPIRED(2, "过期"), + LOST(3,"丢失"); + + private final Integer code; + private final String info; + + ScrapTypeEnum(Integer code, String info) + { + this.code = code; + this.info = info; + } + + public Integer getCode() + { + return code; + } + + public String getInfo() + { + return info; + } + + public static String getInfoByCode(int code) { + for (ScrapTypeEnum status : ScrapTypeEnum.values()) { + if (status.getCode() == code) { + return status.getInfo(); + } + } + return "其他"; + } +} diff --git a/common/src/main/java/com/yyy/common/enums/SexEnum.java b/common/src/main/java/com/yyy/common/enums/SexEnum.java new file mode 100644 index 0000000..52276e7 --- /dev/null +++ b/common/src/main/java/com/yyy/common/enums/SexEnum.java @@ -0,0 +1,29 @@ +package com.yyy.common.enums; + +/** + * @Author: fy + * @Date: 2024/04/02 + * @Description: + */ +public enum SexEnum { + MAN("0", "男"), WOMAN("1", "女"), UNKNOWN("2", "未知"); + + private final String code; + private final String info; + + SexEnum(String code, String info) + { + this.code = code; + this.info = info; + } + + public String getCode() + { + return code; + } + + public String getInfo() + { + return info; + } +} diff --git a/common/src/main/java/com/yyy/common/enums/StockTackingDetailStatusEnum.java b/common/src/main/java/com/yyy/common/enums/StockTackingDetailStatusEnum.java new file mode 100644 index 0000000..084c93d --- /dev/null +++ b/common/src/main/java/com/yyy/common/enums/StockTackingDetailStatusEnum.java @@ -0,0 +1,28 @@ +package com.yyy.common.enums; + +public enum StockTackingDetailStatusEnum { + SURPLUS(0, "盘盈"), + SHORTAGE(1, "盘亏"), + COMPLETED(2, "已盘点"), + PENDING(3, "待盘点"), + EXCEPTION(4, "异常"); + + private final Integer code; + private final String info; + + StockTackingDetailStatusEnum(Integer code, String info) { + this.code = code; + this.info = info; + } + + public Integer getCode() { + return code; + } + + public String getInfo() { + return info; + } + + +} + diff --git a/common/src/main/java/com/yyy/common/enums/StocktakingStatusEnum.java b/common/src/main/java/com/yyy/common/enums/StocktakingStatusEnum.java new file mode 100644 index 0000000..e5a618f --- /dev/null +++ b/common/src/main/java/com/yyy/common/enums/StocktakingStatusEnum.java @@ -0,0 +1,24 @@ +package com.yyy.common.enums; + +public enum StocktakingStatusEnum { + NOT_STARTED(0, "未开始"), + IN_PROGRESS(1, "进行中"), + CANCELLED(2, "取消"), + COMPLETED(3, "已完成"); + + private final Integer code; + private final String info; + + StocktakingStatusEnum(Integer code, String info) { + this.code = code; + this.info = info; + } + + public Integer getCode() { + return code; + } + + public String getInfo() { + return info; + } +} diff --git a/common/src/main/java/com/yyy/common/enums/UserStatusEnum.java b/common/src/main/java/com/yyy/common/enums/UserStatusEnum.java new file mode 100644 index 0000000..3260f4b --- /dev/null +++ b/common/src/main/java/com/yyy/common/enums/UserStatusEnum.java @@ -0,0 +1,28 @@ +package com.yyy.common.enums; + +/** + * 用户状态 + */ +public enum UserStatusEnum +{ + OK("0", "正常"), DISABLE("1", "停用"), DELETED("2", "删除"); + + private final String code; + private final String info; + + UserStatusEnum(String code, String info) + { + this.code = code; + this.info = info; + } + + public String getCode() + { + return code; + } + + public String getInfo() + { + return info; + } +} diff --git a/common/src/main/java/com/yyy/common/exception/CustomException.java b/common/src/main/java/com/yyy/common/exception/CustomException.java new file mode 100644 index 0000000..142affc --- /dev/null +++ b/common/src/main/java/com/yyy/common/exception/CustomException.java @@ -0,0 +1,41 @@ +package com.yyy.common.exception; + +/** + * 自定义异常 + */ +public class CustomException extends RuntimeException +{ + private static final long serialVersionUID = 1L; + + private Integer code; + + private String message; + + public CustomException(String message) + { + this.message = message; + } + + public CustomException(String message, Integer code) + { + this.message = message; + this.code = code; + } + + public CustomException(String message, Throwable e) + { + super(message, e); + this.message = message; + } + + @Override + public String getMessage() + { + return message; + } + + public Integer getCode() + { + return code; + } +} diff --git a/common/src/main/java/com/yyy/common/exception/DemoModeException.java b/common/src/main/java/com/yyy/common/exception/DemoModeException.java new file mode 100644 index 0000000..285aa29 --- /dev/null +++ b/common/src/main/java/com/yyy/common/exception/DemoModeException.java @@ -0,0 +1,13 @@ +package com.yyy.common.exception; + +/** + * 演示模式异常 + */ +public class DemoModeException extends RuntimeException +{ + private static final long serialVersionUID = 1L; + + public DemoModeException() + { + } +} diff --git a/common/src/main/java/com/yyy/common/exception/GlobalException.java b/common/src/main/java/com/yyy/common/exception/GlobalException.java new file mode 100644 index 0000000..e0063c0 --- /dev/null +++ b/common/src/main/java/com/yyy/common/exception/GlobalException.java @@ -0,0 +1,56 @@ +package com.yyy.common.exception; + +/** + * 全局异常 + */ +public class GlobalException extends RuntimeException +{ + private static final long serialVersionUID = 1L; + + /** + * 错误提示 + */ + private String message; + + /** + * 错误明细,内部调试错误 + * + * 和 {@link CommonResult#getDetailMessage()} 一致的设计 + */ + private String detailMessage; + + /** + * 空构造方法,避免反序列化问题 + */ + public GlobalException() + { + } + + public GlobalException(String message) + { + this.message = message; + } + + public String getDetailMessage() + { + return detailMessage; + } + + public GlobalException setDetailMessage(String detailMessage) + { + this.detailMessage = detailMessage; + return this; + } + + @Override + public String getMessage() + { + return message; + } + + public GlobalException setMessage(String message) + { + this.message = message; + return this; + } +} \ No newline at end of file diff --git a/common/src/main/java/com/yyy/common/exception/ServiceException.java b/common/src/main/java/com/yyy/common/exception/ServiceException.java new file mode 100644 index 0000000..94d7684 --- /dev/null +++ b/common/src/main/java/com/yyy/common/exception/ServiceException.java @@ -0,0 +1,56 @@ +package com.yyy.common.exception; + +/** + * 业务异常 + */ +public final class ServiceException extends RuntimeException +{ + private static final long serialVersionUID = 1L; + + /** + * 错误提示 + */ + private String message; + + /** + * 错误明细,内部调试错误 + * + * 和 {@link CommonResult#getDetailMessage()} 一致的设计 + */ + private String detailMessage; + + /** + * 空构造方法,避免反序列化问题 + */ + public ServiceException() + { + } + + public ServiceException(String message) + { + this.message = message; + } + + public String getDetailMessage() + { + return detailMessage; + } + + public ServiceException setDetailMessage(String detailMessage) + { + this.detailMessage = detailMessage; + return this; + } + + @Override + public String getMessage() + { + return message; + } + + public ServiceException setMessage(String message) + { + this.message = message; + return this; + } +} \ No newline at end of file diff --git a/common/src/main/java/com/yyy/common/exception/UtilException.java b/common/src/main/java/com/yyy/common/exception/UtilException.java new file mode 100644 index 0000000..2760923 --- /dev/null +++ b/common/src/main/java/com/yyy/common/exception/UtilException.java @@ -0,0 +1,24 @@ +package com.yyy.common.exception; + +/** + * 工具类异常 + */ +public class UtilException extends RuntimeException +{ + private static final long serialVersionUID = 8247610319171014183L; + + public UtilException(Throwable e) + { + super(e.getMessage(), e); + } + + public UtilException(String message) + { + super(message); + } + + public UtilException(String message, Throwable throwable) + { + super(message, throwable); + } +} diff --git a/common/src/main/java/com/yyy/common/exception/base/BaseException.java b/common/src/main/java/com/yyy/common/exception/base/BaseException.java new file mode 100644 index 0000000..34babc7 --- /dev/null +++ b/common/src/main/java/com/yyy/common/exception/base/BaseException.java @@ -0,0 +1,21 @@ +package com.yyy.common.exception.base; + +import com.yyy.common.core.domain.Result; +import lombok.Getter; + +/** + * @Author: fy + * @Date: 2024/03/21 + * @Description:通用异常 + */ +@Getter +public class BaseException extends RuntimeException { + + private static final long serialVersionUID = 1L; + + private final Result result; + + public BaseException(Result result) { + this.result = result; + } +} diff --git a/common/src/main/java/com/yyy/common/exception/file/FileException.java b/common/src/main/java/com/yyy/common/exception/file/FileException.java new file mode 100644 index 0000000..ea5ac16 --- /dev/null +++ b/common/src/main/java/com/yyy/common/exception/file/FileException.java @@ -0,0 +1,17 @@ +package com.yyy.common.exception.file; + + +import com.yyy.common.core.domain.Result; +import com.yyy.common.exception.base.BaseException; + +/** + * 文件信息异常类 + */ +public class FileException extends BaseException { + private static final long serialVersionUID = 1L; + + public FileException(String code, Object[] args) { + super(new Result(Integer.parseInt(code), "[FileException]:" + args.toString())); + } + +} diff --git a/common/src/main/java/com/yyy/common/exception/file/FileNameLengthLimitExceededException.java b/common/src/main/java/com/yyy/common/exception/file/FileNameLengthLimitExceededException.java new file mode 100644 index 0000000..e5d5c72 --- /dev/null +++ b/common/src/main/java/com/yyy/common/exception/file/FileNameLengthLimitExceededException.java @@ -0,0 +1,13 @@ +package com.yyy.common.exception.file; + +/** + * 文件名称超长限制异常类 + * + */ +public class FileNameLengthLimitExceededException extends FileException { + private static final long serialVersionUID = 1L; + + public FileNameLengthLimitExceededException(int defaultFileNameLength) { + super("upload.filename.exceed.length", new Object[]{defaultFileNameLength}); + } +} diff --git a/common/src/main/java/com/yyy/common/exception/file/FileSizeLimitExceededException.java b/common/src/main/java/com/yyy/common/exception/file/FileSizeLimitExceededException.java new file mode 100644 index 0000000..c76cf69 --- /dev/null +++ b/common/src/main/java/com/yyy/common/exception/file/FileSizeLimitExceededException.java @@ -0,0 +1,14 @@ +package com.yyy.common.exception.file; + +/** + * 文件名大小限制异常类 + */ +public class FileSizeLimitExceededException extends FileException +{ + private static final long serialVersionUID = 1L; + + public FileSizeLimitExceededException(long defaultMaxSize) + { + super("upload.exceed.maxSize", new Object[] { defaultMaxSize }); + } +} diff --git a/common/src/main/java/com/yyy/common/exception/file/FileUploadException.java b/common/src/main/java/com/yyy/common/exception/file/FileUploadException.java new file mode 100644 index 0000000..6d8b7c7 --- /dev/null +++ b/common/src/main/java/com/yyy/common/exception/file/FileUploadException.java @@ -0,0 +1,59 @@ +package com.yyy.common.exception.file; + +import java.io.PrintStream; +import java.io.PrintWriter; + +/** + * 文件上传异常类 + */ +public class FileUploadException extends Exception +{ + + private static final long serialVersionUID = 1L; + + private final Throwable cause; + + public FileUploadException() + { + this(null, null); + } + + public FileUploadException(final String msg) + { + this(msg, null); + } + + public FileUploadException(String msg, Throwable cause) + { + super(msg); + this.cause = cause; + } + + @Override + public void printStackTrace(PrintStream stream) + { + super.printStackTrace(stream); + if (cause != null) + { + stream.println("Caused by:"); + cause.printStackTrace(stream); + } + } + + @Override + public void printStackTrace(PrintWriter writer) + { + super.printStackTrace(writer); + if (cause != null) + { + writer.println("Caused by:"); + cause.printStackTrace(writer); + } + } + + @Override + public Throwable getCause() + { + return cause; + } +} diff --git a/common/src/main/java/com/yyy/common/exception/file/InvalidExtensionException.java b/common/src/main/java/com/yyy/common/exception/file/InvalidExtensionException.java new file mode 100644 index 0000000..274f112 --- /dev/null +++ b/common/src/main/java/com/yyy/common/exception/file/InvalidExtensionException.java @@ -0,0 +1,78 @@ +package com.yyy.common.exception.file; + +import java.util.Arrays; + +/** + * 文件上传 误异常类 + */ +public class InvalidExtensionException extends FileUploadException +{ + private static final long serialVersionUID = 1L; + + private String[] allowedExtension; + private String extension; + private String filename; + + public InvalidExtensionException(String[] allowedExtension, String extension, String filename) + { + super("文件[" + filename + "]后缀[" + extension + "]不正确,请上传" + Arrays.toString(allowedExtension) + "格式"); + this.allowedExtension = allowedExtension; + this.extension = extension; + this.filename = filename; + } + + public String[] getAllowedExtension() + { + return allowedExtension; + } + + public String getExtension() + { + return extension; + } + + public String getFilename() + { + return filename; + } + + public static class InvalidImageExtensionException extends InvalidExtensionException + { + private static final long serialVersionUID = 1L; + + public InvalidImageExtensionException(String[] allowedExtension, String extension, String filename) + { + super(allowedExtension, extension, filename); + } + } + + public static class InvalidFlashExtensionException extends InvalidExtensionException + { + private static final long serialVersionUID = 1L; + + public InvalidFlashExtensionException(String[] allowedExtension, String extension, String filename) + { + super(allowedExtension, extension, filename); + } + } + + public static class InvalidMediaExtensionException extends InvalidExtensionException + { + private static final long serialVersionUID = 1L; + + public InvalidMediaExtensionException(String[] allowedExtension, String extension, String filename) + { + super(allowedExtension, extension, filename); + } + } + + public static class InvalidVideoExtensionException extends InvalidExtensionException + { + private static final long serialVersionUID = 1L; + + public InvalidVideoExtensionException(String[] allowedExtension, String extension, String filename) + { + super(allowedExtension, extension, filename); + } + } +} diff --git a/common/src/main/java/com/yyy/common/exception/job/TaskException.java b/common/src/main/java/com/yyy/common/exception/job/TaskException.java new file mode 100644 index 0000000..bda250e --- /dev/null +++ b/common/src/main/java/com/yyy/common/exception/job/TaskException.java @@ -0,0 +1,32 @@ +package com.yyy.common.exception.job; + +/** + * 计划策略异常 + */ +public class TaskException extends Exception +{ + private static final long serialVersionUID = 1L; + + private Code code; + + public TaskException(String msg, Code code) + { + this(msg, code, null); + } + + public TaskException(String msg, Code code, Exception nestedEx) + { + super(msg, nestedEx); + this.code = code; + } + + public Code getCode() + { + return code; + } + + public enum Code + { + TASK_EXISTS, NO_TASK_EXISTS, TASK_ALREADY_STARTED, UNKNOWN, CONFIG_ERROR, TASK_NODE_NOT_AVAILABLE + } +} \ No newline at end of file diff --git a/common/src/main/java/com/yyy/common/exception/user/BlackListException.java b/common/src/main/java/com/yyy/common/exception/user/BlackListException.java new file mode 100644 index 0000000..bb2c0e6 --- /dev/null +++ b/common/src/main/java/com/yyy/common/exception/user/BlackListException.java @@ -0,0 +1,14 @@ +package com.yyy.common.exception.user; + +/** + * 黑名单IP异常类 + */ +public class BlackListException extends UserException +{ + private static final long serialVersionUID = 1L; + + public BlackListException() + { + super("login.blocked", null); + } +} diff --git a/common/src/main/java/com/yyy/common/exception/user/CaptchaException.java b/common/src/main/java/com/yyy/common/exception/user/CaptchaException.java new file mode 100644 index 0000000..86c3fb6 --- /dev/null +++ b/common/src/main/java/com/yyy/common/exception/user/CaptchaException.java @@ -0,0 +1,16 @@ +package com.yyy.common.exception.user; + +/** + * 验证码错误异常类 + * + * @author ruoyi + */ +public class CaptchaException extends UserException +{ + private static final long serialVersionUID = 1L; + + public CaptchaException() + { + super("user.jcaptcha.error", null); + } +} diff --git a/common/src/main/java/com/yyy/common/exception/user/RoleBlockedException.java b/common/src/main/java/com/yyy/common/exception/user/RoleBlockedException.java new file mode 100644 index 0000000..ed20b0a --- /dev/null +++ b/common/src/main/java/com/yyy/common/exception/user/RoleBlockedException.java @@ -0,0 +1,14 @@ +package com.yyy.common.exception.user; + +/** + * 角色锁定异常类 + */ +public class RoleBlockedException extends UserException +{ + private static final long serialVersionUID = 1L; + + public RoleBlockedException() + { + super("role.blocked", null); + } +} diff --git a/common/src/main/java/com/yyy/common/exception/user/UserBlockedException.java b/common/src/main/java/com/yyy/common/exception/user/UserBlockedException.java new file mode 100644 index 0000000..eafde86 --- /dev/null +++ b/common/src/main/java/com/yyy/common/exception/user/UserBlockedException.java @@ -0,0 +1,14 @@ +package com.yyy.common.exception.user; + +/** + * 用户锁定异常类 + */ +public class UserBlockedException extends UserException +{ + private static final long serialVersionUID = 1L; + + public UserBlockedException() + { + super("user.blocked", null); + } +} diff --git a/common/src/main/java/com/yyy/common/exception/user/UserDeleteException.java b/common/src/main/java/com/yyy/common/exception/user/UserDeleteException.java new file mode 100644 index 0000000..0911591 --- /dev/null +++ b/common/src/main/java/com/yyy/common/exception/user/UserDeleteException.java @@ -0,0 +1,14 @@ +package com.yyy.common.exception.user; + +/** + * 用户账号已被删除 + */ +public class UserDeleteException extends UserException +{ + private static final long serialVersionUID = 1L; + + public UserDeleteException() + { + super("user.password.delete", null); + } +} diff --git a/common/src/main/java/com/yyy/common/exception/user/UserException.java b/common/src/main/java/com/yyy/common/exception/user/UserException.java new file mode 100644 index 0000000..116c506 --- /dev/null +++ b/common/src/main/java/com/yyy/common/exception/user/UserException.java @@ -0,0 +1,16 @@ +package com.yyy.common.exception.user; + + +import com.yyy.common.core.domain.Result; +import com.yyy.common.exception.base.BaseException; + +/** + * 用户信息异常类 + */ +public class UserException extends BaseException { + private static final long serialVersionUID = 1L; + + public UserException(String code, Object[] args) { + super(new Result(Integer.parseInt(code), "[UserException]:" + args.toString())); + } +} diff --git a/common/src/main/java/com/yyy/common/exception/user/UserNotExistsException.java b/common/src/main/java/com/yyy/common/exception/user/UserNotExistsException.java new file mode 100644 index 0000000..c489293 --- /dev/null +++ b/common/src/main/java/com/yyy/common/exception/user/UserNotExistsException.java @@ -0,0 +1,14 @@ +package com.yyy.common.exception.user; + +/** + * 用户不存在异常类 + */ +public class UserNotExistsException extends UserException +{ + private static final long serialVersionUID = 1L; + + public UserNotExistsException() + { + super("user.not.exists", null); + } +} diff --git a/common/src/main/java/com/yyy/common/exception/user/UserPasswordNotMatchException.java b/common/src/main/java/com/yyy/common/exception/user/UserPasswordNotMatchException.java new file mode 100644 index 0000000..8e07c00 --- /dev/null +++ b/common/src/main/java/com/yyy/common/exception/user/UserPasswordNotMatchException.java @@ -0,0 +1,14 @@ +package com.yyy.common.exception.user; + +/** + * 用户密码不正确或不符合规范异常类 + */ +public class UserPasswordNotMatchException extends UserException +{ + private static final long serialVersionUID = 1L; + + public UserPasswordNotMatchException() + { + super("user.password.not.match", null); + } +} diff --git a/common/src/main/java/com/yyy/common/exception/user/UserPasswordRetryLimitCountException.java b/common/src/main/java/com/yyy/common/exception/user/UserPasswordRetryLimitCountException.java new file mode 100644 index 0000000..4c79090 --- /dev/null +++ b/common/src/main/java/com/yyy/common/exception/user/UserPasswordRetryLimitCountException.java @@ -0,0 +1,14 @@ +package com.yyy.common.exception.user; + +/** + * 用户错误记数异常类 + */ +public class UserPasswordRetryLimitCountException extends UserException +{ + private static final long serialVersionUID = 1L; + + public UserPasswordRetryLimitCountException(int retryLimitCount) + { + super("user.password.retry.limit.count", new Object[] { retryLimitCount }); + } +} diff --git a/common/src/main/java/com/yyy/common/exception/user/UserPasswordRetryLimitExceedException.java b/common/src/main/java/com/yyy/common/exception/user/UserPasswordRetryLimitExceedException.java new file mode 100644 index 0000000..dfaf2e9 --- /dev/null +++ b/common/src/main/java/com/yyy/common/exception/user/UserPasswordRetryLimitExceedException.java @@ -0,0 +1,14 @@ +package com.yyy.common.exception.user; + +/** + * 用户错误最大次数异常类 + */ +public class UserPasswordRetryLimitExceedException extends UserException +{ + private static final long serialVersionUID = 1L; + + public UserPasswordRetryLimitExceedException(int retryLimitCount) + { + super("user.password.retry.limit.exceed", new Object[] { retryLimitCount }); + } +} diff --git a/common/src/main/java/com/yyy/common/utils/bean/BeanUtils.java b/common/src/main/java/com/yyy/common/utils/bean/BeanUtils.java new file mode 100644 index 0000000..fb50e9c --- /dev/null +++ b/common/src/main/java/com/yyy/common/utils/bean/BeanUtils.java @@ -0,0 +1,104 @@ +package com.yyy.common.utils.bean; + +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * @Author: fy + * @Date: 2024/03/25 + * @Description: Bean 工具类 + */ +public class BeanUtils extends org.springframework.beans.BeanUtils { + /** + * Bean方法名中属性名开始的下标 + */ + private static final int BEAN_METHOD_PROP_INDEX = 3; + + /** + * 匹配getter方法的正则表达式 + */ + private static final Pattern GET_PATTERN = Pattern.compile("get(\\p{javaUpperCase}\\w*)"); + + /** + * 匹配setter方法的正则表达式 + */ + private static final Pattern SET_PATTERN = Pattern.compile("set(\\p{javaUpperCase}\\w*)"); + + /** + * Bean属性复制工具方法。 + * + * @param dest 目标对象 + * @param src 源对象 + */ + public static void copyBeanProp(Object dest, Object src) { + try { + copyProperties(src, dest); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 获取对象的setter方法。 + * + * @param obj 对象 + * @return 对象的setter方法列表 + */ + public static List getSetterMethods(Object obj) { + // setter方法列表 + List setterMethods = new ArrayList(); + + // 获取所有方法 + Method[] methods = obj.getClass().getMethods(); + + // 查找setter方法 + + for (Method method : methods) { + Matcher m = SET_PATTERN.matcher(method.getName()); + if (m.matches() && (method.getParameterTypes().length == 1)) { + setterMethods.add(method); + } + } + // 返回setter方法列表 + return setterMethods; + } + + /** + * 获取对象的getter方法。 + * + * @param obj 对象 + * @return 对象的getter方法列表 + */ + + public static List getGetterMethods(Object obj) { + // getter方法列表 + List getterMethods = new ArrayList(); + // 获取所有方法 + Method[] methods = obj.getClass().getMethods(); + // 查找getter方法 + for (Method method : methods) { + Matcher m = GET_PATTERN.matcher(method.getName()); + if (m.matches() && (method.getParameterTypes().length == 0)) { + getterMethods.add(method); + } + } + // 返回getter方法列表 + return getterMethods; + } + + /** + * 检查Bean方法名中的属性名是否相等。
+ * 如getName()和setName()属性名一样,getName()和setAge()属性名不一样。 + * + * @param m1 方法名1 + * @param m2 方法名2 + * @return 属性名一样返回true,否则返回false + */ + + public static boolean isMethodPropEquals(String m1, String m2) { + return m1.substring(BEAN_METHOD_PROP_INDEX).equals(m2.substring(BEAN_METHOD_PROP_INDEX)); + } +} \ No newline at end of file diff --git a/common/src/main/java/com/yyy/common/utils/common/DateUtils.java b/common/src/main/java/com/yyy/common/utils/common/DateUtils.java new file mode 100644 index 0000000..9941392 --- /dev/null +++ b/common/src/main/java/com/yyy/common/utils/common/DateUtils.java @@ -0,0 +1,217 @@ +package com.yyy.common.utils.common; + +import org.apache.commons.lang3.time.DateFormatUtils; + +import java.lang.management.ManagementFactory; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.time.*; +import java.util.Date; +import java.util.TimeZone; + +/** + * @Author: fy + * @Date: 2024/03/22 + * @Description:时间工具类 + */ +public class DateUtils extends org.apache.commons.lang3.time.DateUtils +{ + public static String YYYY = "yyyy"; + + public static String YYYY_MM = "yyyy-MM"; + + public static String YYYY_MM_DD = "yyyy-MM-dd"; + + public static String YYYYMMDDHHMMSS = "yyyyMMddHHmmss"; + + public static String YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss"; + + private static String[] parsePatterns = { + "yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy-MM", + "yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm", "yyyy/MM", + "yyyy.MM.dd", "yyyy.MM.dd HH:mm:ss", "yyyy.MM.dd HH:mm", "yyyy.MM"}; + + /** + * 获取当前Date型日期 + * + * @return Date() 当前日期 + */ + public static Date getNowDate() + { + return new Date(); + } + + /** + * 获取当前日期, 默认格式为yyyy-MM-dd + * + * @return String + */ + public static String getDate() + { + return dateTimeNow(YYYY_MM_DD); + } + + public static final String getTime() + { + return dateTimeNow(YYYY_MM_DD_HH_MM_SS); + } + + public static final String dateTimeNow() + { + return dateTimeNow(YYYYMMDDHHMMSS); + } + + public static final String dateTimeNow(final String format) + { + return parseDateToStr(format, new Date()); + } + + public static final String dateTime(final Date date) + { + return parseDateToStr(YYYY_MM_DD, date); + } + + public static final String parseDateToStr(final String format, final Date date) + { + return new SimpleDateFormat(format).format(date); + } + + public static final Date dateTime(final String format, final String ts) + { + try + { + return new SimpleDateFormat(format).parse(ts); + } + catch (ParseException e) + { + throw new RuntimeException(e); + } + } + + /** + * 日期路径 即年/月/日 如2018/08/08 + */ + public static final String datePath() + { + Date now = new Date(); + return DateFormatUtils.format(now, "yyyy/MM/dd"); + } + + /** + * 日期路径 即年/月/日 如20180808 + */ + public static final String dateTime() + { + Date now = new Date(); + return DateFormatUtils.format(now, "yyyyMMdd"); + } + + /** + * 日期型字符串转化为日期 格式 + */ + public static Date parseDate(Object str) + { + if (str == null) + { + return null; + } + try + { + return parseDate(str.toString(), parsePatterns); + } + catch (ParseException e) + { + return null; + } + } + + public static Date parseDate(String dateString, String format) + { + SimpleDateFormat dateFormat = new SimpleDateFormat(format); + dateFormat.setTimeZone(TimeZone.getTimeZone("UTC")); + + try { + return dateFormat.parse(dateString); + } catch (ParseException e) { + return null; + } + } + + /** + * 日期型字符串转化为日期 格式 + */ + public static Date parseDate1(Date date) + { + + SimpleDateFormat sdf = new SimpleDateFormat(YYYY_MM_DD_HH_MM_SS); + String formattedDateStr = sdf.format(date); + try { + return sdf.parse(formattedDateStr); + } catch (ParseException e) { + return null; + } + } + + /** + * 获取服务器启动时间 + */ + public static Date getServerStartDate() + { + long time = ManagementFactory.getRuntimeMXBean().getStartTime(); + return new Date(time); + } + + /** + * 计算相差天数 + */ + public static int differentDaysByMillisecond(Date date1, Date date2) + { + return Math.abs((int) ((date2.getTime() - date1.getTime()) / (1000 * 3600 * 24))); + } + + /** + * 计算时间差 + * + * @param endDate 最后时间 + * @param startTime 开始时间 + * @return 时间差(天/小时/分钟) + */ + public static String timeDistance(Date endDate, Date startTime) + { + long nd = 1000 * 24 * 60 * 60; + long nh = 1000 * 60 * 60; + long nm = 1000 * 60; + // long ns = 1000; + // 获得两个时间的毫秒时间差异 + long diff = endDate.getTime() - startTime.getTime(); + // 计算差多少天 + long day = diff / nd; + // 计算差多少小时 + long hour = diff % nd / nh; + // 计算差多少分钟 + long min = diff % nd % nh / nm; + // 计算差多少秒//输出结果 + // long sec = diff % nd % nh % nm / ns; + return day + "天" + hour + "小时" + min + "分钟"; + } + + /** + * 增加 LocalDateTime ==> Date + */ + public static Date toDate(LocalDateTime temporalAccessor) + { + ZonedDateTime zdt = temporalAccessor.atZone(ZoneId.systemDefault()); + return Date.from(zdt.toInstant()); + } + + /** + * 增加 LocalDate ==> Date + */ + public static Date toDate(LocalDate temporalAccessor) + { + LocalDateTime localDateTime = LocalDateTime.of(temporalAccessor, LocalTime.of(0, 0, 0)); + ZonedDateTime zdt = localDateTime.atZone(ZoneId.systemDefault()); + return Date.from(zdt.toInstant()); + } + +} diff --git a/common/src/main/java/com/yyy/common/utils/common/DictUtils.java b/common/src/main/java/com/yyy/common/utils/common/DictUtils.java new file mode 100644 index 0000000..c0fd108 --- /dev/null +++ b/common/src/main/java/com/yyy/common/utils/common/DictUtils.java @@ -0,0 +1,191 @@ +package com.yyy.common.utils.common; + +import com.yyy.common.constant.Constants; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * 字典工具类 + * + */ +@Component +public class DictUtils +{ + /** + * 分隔符 + */ + public static final String SEPARATOR = ","; + +// /** +// * 设置字典缓存 +// * +// * @param key 参数键 +// * @param dictDatas 字典数据列表 +// */ +// public static void setDictCache(String key, List dictDatas) +// { +// CacheUtils.put(getCacheName(), getCacheKey(key), dictDatas); +// } +// +// /** +// * 获取字典缓存 +// * +// * @param key 参数键 +// * @return dictDatas 字典数据列表 +// */ +// public static List getDictCache(String key) +// { +// Object cacheObj = CacheUtils.get(getCacheName(), getCacheKey(key)); +// if (StringUtils.isNotNull(cacheObj)) +// { +// return StringUtils.cast(cacheObj); +// } +// return null; +// } + + /** + * 根据字典类型和字典值获取字典标签 + * + * @param dictType 字典类型 + * @param dictValue 字典值 + * @return 字典标签 + */ + public static String getDictLabel(String dictType, String dictValue) + { + return getDictLabel(dictType, dictValue, SEPARATOR); + } + + /** + * 根据字典类型和字典标签获取字典值 + * + * @param dictType 字典类型 + * @param dictLabel 字典标签 + * @return 字典值 + */ + public static String getDictValue(String dictType, String dictLabel) + { + return getDictValue(dictType, dictLabel, SEPARATOR); + } + + /** + * 根据字典类型和字典值获取字典标签 + * + * @param dictType 字典类型 + * @param dictValue 字典值 + * @param separator 分隔符 + * @return 字典标签 + */ + public static String getDictLabel(String dictType, String dictValue, String separator) + { + return dictType+separator+dictValue; +// StringBuilder propertyString = new StringBuilder(); +// List datas = getDictCache(dictType); +// +// if (StringUtils.containsAny(dictValue, separator) && StringUtils.isNotEmpty(datas)) +// { +// for (SysDictData dict : datas) +// { +// for (String value : dictValue.split(separator)) +// { +// if (value.equals(dict.getDictValue())) +// { +// propertyString.append(dict.getDictLabel()).append(separator); +// break; +// } +// } +// } +// } +// else +// { +// for (SysDictData dict : datas) +// { +// if (dictValue.equals(dict.getDictValue())) +// { +// return dict.getDictLabel(); +// } +// } +// } +// return StringUtils.stripEnd(propertyString.toString(), separator); + } + + /** + * 根据字典类型和字典标签获取字典值 + * + * @param dictType 字典类型 + * @param dictLabel 字典标签 + * @param separator 分隔符 + * @return 字典值 + */ + public static String getDictValue(String dictType, String dictLabel, String separator) + { + return dictType+separator+dictLabel; +// StringBuilder propertyString = new StringBuilder(); +// List datas = getDictCache(dictType); +// +// if (StringUtils.containsAny(dictLabel, separator) && StringUtils.isNotEmpty(datas)) +// { +// for (SysDictData dict : datas) +// { +// for (String label : dictLabel.split(separator)) +// { +// if (label.equals(dict.getDictLabel())) +// { +// propertyString.append(dict.getDictValue()).append(separator); +// break; +// } +// } +// } +// } +// else +// { +// for (SysDictData dict : datas) +// { +// if (dictLabel.equals(dict.getDictLabel())) +// { +// return dict.getDictValue(); +// } +// } +// } +// return StringUtils.stripEnd(propertyString.toString(), separator); + } + +// /** +// * 删除指定字典缓存 +// * +// * @param key 字典键 +// */ +// public static void removeDictCache(String key) +// { +// CacheUtils.remove(getCacheName(), getCacheKey(key)); +// } +// +// /** +// * 清空字典缓存 +// */ +// public static void clearDictCache() +// { +// CacheUtils.removeAll(getCacheName()); +// } + + /** + * 获取cache name + * + * @return 缓存名 + */ + public static String getCacheName() + { + return Constants.SYS_DICT_CACHE; + } + + /** + * 设置cache key + * + * @param configKey 参数键 + * @return 缓存键key + */ + public static String getCacheKey(String configKey) + { + return Constants.SYS_DICT_KEY + configKey; + } +} diff --git a/common/src/main/java/com/yyy/common/utils/common/MD5Utils.java b/common/src/main/java/com/yyy/common/utils/common/MD5Utils.java new file mode 100644 index 0000000..02a3a42 --- /dev/null +++ b/common/src/main/java/com/yyy/common/utils/common/MD5Utils.java @@ -0,0 +1,48 @@ +package com.yyy.common.utils.common; + +import org.springframework.stereotype.Component; +import org.springframework.util.DigestUtils; + +import java.security.SecureRandom; +import java.util.Base64; + +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/04/19/10:09 + * @Description:MD5密码加密 + */ +public class MD5Utils { + public static String md5(String src) { + return DigestUtils.md5DigestAsHex(src.getBytes()); + } + + //第一次加密 + public static String inputPassToFormPass(String inputPass, String salt) { + //md5加密密码前,先对密码进行处理,按以下salt的规则处理密码 + String str = "" + salt.charAt(0) + salt.charAt(2) + inputPass + salt.charAt(5) + salt.charAt(4); + return md5(str); + } + + //第二次加密 + public static String formPassToDBPass(String formPass, String salt) { + String str = "" + salt.charAt(0) + salt.charAt(2) + formPass + salt.charAt(5) + salt.charAt(4); + return md5(str); + } + + //实际调用的方法,将第一次加密和第二次加密合并,结果应该一致 + public static String inputPassToDBPass(String inputPass, String salt) { + String formPass = inputPassToFormPass(inputPass, salt); + String dbPass = formPassToDBPass(formPass, salt); + return dbPass; + } + + public static String randomSalt() { + int length = 16; + SecureRandom random = new SecureRandom(); + byte[] salt = new byte[length]; + random.nextBytes(salt); + return Base64.getEncoder().encodeToString(salt); + } +} diff --git a/common/src/main/java/com/yyy/common/utils/common/PageUtils.java b/common/src/main/java/com/yyy/common/utils/common/PageUtils.java new file mode 100644 index 0000000..cec6358 --- /dev/null +++ b/common/src/main/java/com/yyy/common/utils/common/PageUtils.java @@ -0,0 +1,34 @@ +package com.yyy.common.utils.common; + +import com.github.pagehelper.PageHelper; +import com.yyy.common.core.page.PageDomain; +import com.yyy.common.core.page.TableSupport; +import com.yyy.common.utils.sql.SqlUtil; + +/** + * @Author: fy + * @Date: 2024/03/22 + * @Description:分页工具类 + */ +public class PageUtils extends PageHelper { + /** + * 设置请求分页数据 + */ + public static void startPage() + { + PageDomain pageDomain = TableSupport.buildPageRequest(); + Integer pageNum = pageDomain.getPageNum(); + Integer pageSize = pageDomain.getPageSize(); + String orderBy = SqlUtil.escapeOrderBySql(pageDomain.getOrderBy()); + Boolean reasonable = pageDomain.getReasonable(); + PageHelper.startPage(pageNum, pageSize, orderBy).setReasonable(reasonable); + } + + /** + * 清理分页的线程变量 + */ + public static void clearPage() + { + PageHelper.clearPage(); + } +} diff --git a/common/src/main/java/com/yyy/common/utils/common/ServletUtils.java b/common/src/main/java/com/yyy/common/utils/common/ServletUtils.java new file mode 100644 index 0000000..6644b7d --- /dev/null +++ b/common/src/main/java/com/yyy/common/utils/common/ServletUtils.java @@ -0,0 +1,217 @@ +package com.yyy.common.utils.common; + +import com.yyy.common.constant.Constants; +import com.yyy.common.core.text.Convert; +import org.springframework.web.context.request.RequestAttributes; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.net.URLDecoder; +import java.net.URLEncoder; + +/** + * @Author: fy + * @Date: 2024/03/22 + * @Description:客户端工具类 + */ +public class ServletUtils +{ + /** + * 定义移动端请求的所有可能类型 + */ + private final static String[] agent = { "Android", "iPhone", "iPod", "iPad", "Windows Phone", "MQQBrowser" }; + + /** + * 获取String参数 + */ + public static String getParameter(String name) + { + return getRequest().getParameter(name); + } + + /** + * 获取String参数 + */ + public static String getParameter(String name, String defaultValue) + { + return Convert.toStr(getRequest().getParameter(name), defaultValue); + } + + /** + * 获取Integer参数 + */ + public static Integer getParameterToInt(String name) + { + return Convert.toInt(getRequest().getParameter(name)); + } + + /** + * 获取Integer参数 + */ + public static Integer getParameterToInt(String name, Integer defaultValue) + { + return Convert.toInt(getRequest().getParameter(name), defaultValue); + } + + /** + * 获取Boolean参数 + */ + public static Boolean getParameterToBool(String name) + { + return Convert.toBool(getRequest().getParameter(name)); + } + + /** + * 获取Boolean参数 + */ + public static Boolean getParameterToBool(String name, Boolean defaultValue) + { + return Convert.toBool(getRequest().getParameter(name), defaultValue); + } + + /** + * 获取request + */ + public static HttpServletRequest getRequest() + { + return getRequestAttributes().getRequest(); + } + + /** + * 获取response + */ + public static HttpServletResponse getResponse() + { + return getRequestAttributes().getResponse(); + } + + /** + * 获取session + */ + public static HttpSession getSession() + { + return getRequest().getSession(); + } + + public static ServletRequestAttributes getRequestAttributes() + { + RequestAttributes attributes = RequestContextHolder.getRequestAttributes(); + return (ServletRequestAttributes) attributes; + } + + /** + * 将字符串渲染到客户端 + * + * @param response 渲染对象 + * @param string 待渲染的字符串 + * @return null + */ + public static String renderString(HttpServletResponse response, String string) + { + try + { + response.setContentType("application/json"); + response.setCharacterEncoding("utf-8"); + response.getWriter().print(string); + } + catch (IOException e) + { + e.printStackTrace(); + } + return null; + } + + /** + * 是否是Ajax异步请求 + * + * @param request + */ + public static boolean isAjaxRequest(HttpServletRequest request) + { + String accept = request.getHeader("accept"); + if (accept != null && accept.contains("application/json")) + { + return true; + } + + String xRequestedWith = request.getHeader("X-Requested-With"); + if (xRequestedWith != null && xRequestedWith.contains("XMLHttpRequest")) + { + return true; + } + + String uri = request.getRequestURI(); + if (StringUtils.inStringIgnoreCase(uri, ".json", ".xml")) + { + return true; + } + + String ajax = request.getParameter("__ajax"); + return StringUtils.inStringIgnoreCase(ajax, "json", "xml"); + } + + /** + * 判断User-Agent 是不是来自于手机 + */ + public static boolean checkAgentIsMobile(String ua) + { + boolean flag = false; + if (!ua.contains("Windows NT") || (ua.contains("Windows NT") && ua.contains("compatible; MSIE 9.0;"))) + { + // 排除 苹果桌面系统 + if (!ua.contains("Windows NT") && !ua.contains("Macintosh")) + { + for (String item : agent) + { + if (ua.contains(item)) + { + flag = true; + break; + } + } + } + } + return flag; + } + + /** + * 内容编码 + * + * @param str 内容 + * @return 编码后的内容 + */ + public static String urlEncode(String str) + { + try + { + return URLEncoder.encode(str, Constants.UTF8); + } + catch (UnsupportedEncodingException e) + { + return StringUtils.EMPTY; + } + } + + /** + * 内容解码 + * + * @param str 内容 + * @return 解码后的内容 + */ + public static String urlDecode(String str) + { + try + { + return URLDecoder.decode(str, Constants.UTF8); + } + catch (UnsupportedEncodingException e) + { + return StringUtils.EMPTY; + } + } +} diff --git a/common/src/main/java/com/yyy/common/utils/common/StringUtils.java b/common/src/main/java/com/yyy/common/utils/common/StringUtils.java new file mode 100644 index 0000000..230bd4d --- /dev/null +++ b/common/src/main/java/com/yyy/common/utils/common/StringUtils.java @@ -0,0 +1,636 @@ +package com.yyy.common.utils.common; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import com.yyy.common.constant.Constants; +import com.yyy.common.core.text.StrFormatter; +import org.springframework.util.AntPathMatcher; +/** + * @Author: fy + * @Date: 2024/03/22 + * @Description: + */ + +/** + * 字符串工具类 + * + * @author ruoyi + */ +public class StringUtils extends org.apache.commons.lang3.StringUtils +{ + /** 空字符串 */ + private static final String NULLSTR = ""; + + /** 下划线 */ + private static final char SEPARATOR = '_'; + + /** + * 获取参数不为空值 + * + * @param value defaultValue 要判断的value + * @return value 返回值 + */ + public static T nvl(T value, T defaultValue) + { + return value != null ? value : defaultValue; + } + + /** + * * 判断一个Collection是否为空, 包含List,Set,Queue + * + * @param coll 要判断的Collection + * @return true:为空 false:非空 + */ + public static boolean isEmpty(Collection coll) + { + return isNull(coll) || coll.isEmpty(); + } + + /** + * * 判断一个Collection是否非空,包含List,Set,Queue + * + * @param coll 要判断的Collection + * @return true:非空 false:空 + */ + public static boolean isNotEmpty(Collection coll) + { + return !isEmpty(coll); + } + + /** + * * 判断一个对象数组是否为空 + * + * @param objects 要判断的对象数组 + ** @return true:为空 false:非空 + */ + public static boolean isEmpty(Object[] objects) + { + return isNull(objects) || (objects.length == 0); + } + + /** + * * 判断一个对象数组是否非空 + * + * @param objects 要判断的对象数组 + * @return true:非空 false:空 + */ + public static boolean isNotEmpty(Object[] objects) + { + return !isEmpty(objects); + } + + /** + * * 判断一个Map是否为空 + * + * @param map 要判断的Map + * @return true:为空 false:非空 + */ + public static boolean isEmpty(Map map) + { + return isNull(map) || map.isEmpty(); + } + + /** + * * 判断一个Map是否为空 + * + * @param map 要判断的Map + * @return true:非空 false:空 + */ + public static boolean isNotEmpty(Map map) + { + return !isEmpty(map); + } + + /** + * * 判断一个字符串是否为空串 + * + * @param str String + * @return true:为空 false:非空 + */ + public static boolean isEmpty(String str) + { + return isNull(str) || NULLSTR.equals(str.trim()); + } + + /** + * * 判断一个字符串是否为非空串 + * + * @param str String + * @return true:非空串 false:空串 + */ + public static boolean isNotEmpty(String str) + { + return !isEmpty(str); + } + + /** + * * 判断一个对象是否为空 + * + * @param object Object + * @return true:为空 false:非空 + */ + public static boolean isNull(Object object) + { + return object == null; + } + + /** + * * 判断一个对象是否非空 + * + * @param object Object + * @return true:非空 false:空 + */ + public static boolean isNotNull(Object object) + { + return !isNull(object); + } + + /** + * * 判断一个对象是否是数组类型(Java基本型别的数组) + * + * @param object 对象 + * @return true:是数组 false:不是数组 + */ + public static boolean isArray(Object object) + { + return isNotNull(object) && object.getClass().isArray(); + } + + /** + * 去空格 + */ + public static String trim(String str) + { + return (str == null ? "" : str.trim()); + } + + /** + * 截取字符串 + * + * @param str 字符串 + * @param start 开始 + * @return 结果 + */ + public static String substring(final String str, int start) + { + if (str == null) + { + return NULLSTR; + } + + if (start < 0) + { + start = str.length() + start; + } + + if (start < 0) + { + start = 0; + } + if (start > str.length()) + { + return NULLSTR; + } + + return str.substring(start); + } + + /** + * 截取字符串 + * + * @param str 字符串 + * @param start 开始 + * @param end 结束 + * @return 结果 + */ + public static String substring(final String str, int start, int end) + { + if (str == null) + { + return NULLSTR; + } + + if (end < 0) + { + end = str.length() + end; + } + if (start < 0) + { + start = str.length() + start; + } + + if (end > str.length()) + { + end = str.length(); + } + + if (start > end) + { + return NULLSTR; + } + + if (start < 0) + { + start = 0; + } + if (end < 0) + { + end = 0; + } + + return str.substring(start, end); + } + + /** + * 格式化文本, {} 表示占位符
+ * 此方法只是简单将占位符 {} 按照顺序替换为参数
+ * 如果想输出 {} 使用 \\转义 { 即可,如果想输出 {} 之前的 \ 使用双转义符 \\\\ 即可
+ * 例:
+ * 通常使用:format("this is {} for {}", "a", "b") -> this is a for b
+ * 转义{}: format("this is \\{} for {}", "a", "b") -> this is \{} for a
+ * 转义\: format("this is \\\\{} for {}", "a", "b") -> this is \a for b
+ * + * @param template 文本模板,被替换的部分用 {} 表示 + * @param params 参数值 + * @return 格式化后的文本 + */ + public static String format(String template, Object... params) + { + if (isEmpty(params) || isEmpty(template)) + { + return template; + } + return StrFormatter.format(template, params); + } + + /** + * 是否为http(s)://开头 + * + * @param link 链接 + * @return 结果 + */ + public static boolean ishttp(String link) + { + return StringUtils.startsWithAny(link, Constants.HTTP, Constants.HTTPS); + } + + /** + * 字符串转set + * + * @param str 字符串 + * @param sep 分隔符 + * @return set集合 + */ + public static final Set str2Set(String str, String sep) + { + return new HashSet(str2List(str, sep, true, false)); + } + + /** + * 字符串转list + * + * @param str 字符串 + * @param sep 分隔符 + * @param filterBlank 过滤纯空白 + * @param trim 去掉首尾空白 + * @return list集合 + */ + public static final List str2List(String str, String sep, boolean filterBlank, boolean trim) + { + List list = new ArrayList(); + if (StringUtils.isEmpty(str)) + { + return list; + } + + // 过滤空白字符串 + if (filterBlank && StringUtils.isBlank(str)) + { + return list; + } + String[] split = str.split(sep); + for (String string : split) + { + if (filterBlank && StringUtils.isBlank(string)) + { + continue; + } + if (trim) + { + string = string.trim(); + } + list.add(string); + } + + return list; + } + + /** + * 判断给定的collection列表中是否包含数组array 判断给定的数组array中是否包含给定的元素value + * + * @param collection 给定的集合 + * @param array 给定的数组 + * @return boolean 结果 + */ + public static boolean containsAny(Collection collection, String... array) + { + if (isEmpty(collection) || isEmpty(array)) + { + return false; + } + else + { + for (String str : array) + { + if (collection.contains(str)) + { + return true; + } + } + return false; + } + } + + /** + * 查找指定字符串是否包含指定字符串列表中的任意一个字符串同时串忽略大小写 + * + * @param cs 指定字符串 + * @param searchCharSequences 需要检查的字符串数组 + * @return 是否包含任意一个字符串 + */ + public static boolean containsAnyIgnoreCase(CharSequence cs, CharSequence... searchCharSequences) + { + if (isEmpty(cs) || isEmpty(searchCharSequences)) + { + return false; + } + for (CharSequence testStr : searchCharSequences) + { + if (containsIgnoreCase(cs, testStr)) + { + return true; + } + } + return false; + } + + /** + * 驼峰转下划线命名 + */ + public static String toUnderScoreCase(String str) + { + if (str == null) + { + return null; + } + StringBuilder sb = new StringBuilder(); + // 前置字符是否大写 + boolean preCharIsUpperCase = true; + // 当前字符是否大写 + boolean curreCharIsUpperCase = true; + // 下一字符是否大写 + boolean nexteCharIsUpperCase = true; + for (int i = 0; i < str.length(); i++) + { + char c = str.charAt(i); + if (i > 0) + { + preCharIsUpperCase = Character.isUpperCase(str.charAt(i - 1)); + } + else + { + preCharIsUpperCase = false; + } + + curreCharIsUpperCase = Character.isUpperCase(c); + + if (i < (str.length() - 1)) + { + nexteCharIsUpperCase = Character.isUpperCase(str.charAt(i + 1)); + } + + if (preCharIsUpperCase && curreCharIsUpperCase && !nexteCharIsUpperCase) + { + sb.append(SEPARATOR); + } + else if ((i != 0 && !preCharIsUpperCase) && curreCharIsUpperCase) + { + sb.append(SEPARATOR); + } + sb.append(Character.toLowerCase(c)); + } + + return sb.toString(); + } + + /** + * 是否包含字符串 + * + * @param str 验证字符串 + * @param strs 字符串组 + * @return 包含返回true + */ + public static boolean inStringIgnoreCase(String str, String... strs) + { + if (str != null && strs != null) + { + for (String s : strs) + { + if (str.equalsIgnoreCase(trim(s))) + { + return true; + } + } + } + return false; + } + + /** + * 删除最后一个字符串 + * + * @param str 输入字符串 + * @param spit 以什么类型结尾的 + * @return 截取后的字符串 + */ + public static String lastStringDel(String str, String spit) + { + if (!StringUtils.isEmpty(str) && str.endsWith(spit)) + { + return str.subSequence(0, str.length() - 1).toString(); + } + return str; + } + + /** + * 将下划线大写方式命名的字符串转换为驼峰式。如果转换前的下划线大写方式命名的字符串为空,则返回空字符串。 例如:HELLO_WORLD->HelloWorld + * + * @param name 转换前的下划线大写方式命名的字符串 + * @return 转换后的驼峰式命名的字符串 + */ + public static String convertToCamelCase(String name) + { + StringBuilder result = new StringBuilder(); + // 快速检查 + if (name == null || name.isEmpty()) + { + // 没必要转换 + return ""; + } + else if (!name.contains("_")) + { + // 不含下划线,仅将首字母大写 + return name.substring(0, 1).toUpperCase() + name.substring(1); + } + // 用下划线将原始字符串分割 + String[] camels = name.split("_"); + for (String camel : camels) + { + // 跳过原始字符串中开头、结尾的下换线或双重下划线 + if (camel.isEmpty()) + { + continue; + } + // 首字母大写 + result.append(camel.substring(0, 1).toUpperCase()); + result.append(camel.substring(1).toLowerCase()); + } + return result.toString(); + } + + /** + * 驼峰式命名法 + * 例如:user_name->userName + */ + public static String toCamelCase(String s) + { + if (s == null) + { + return null; + } + if (s.indexOf(SEPARATOR) == -1) + { + return s; + } + s = s.toLowerCase(); + StringBuilder sb = new StringBuilder(s.length()); + boolean upperCase = false; + for (int i = 0; i < s.length(); i++) + { + char c = s.charAt(i); + + if (c == SEPARATOR) + { + upperCase = true; + } + else if (upperCase) + { + sb.append(Character.toUpperCase(c)); + upperCase = false; + } + else + { + sb.append(c); + } + } + return sb.toString(); + } + + /** + * 查找指定字符串是否匹配指定字符串列表中的任意一个字符串 + * + * @param str 指定字符串 + * @param strs 需要检查的字符串数组 + * @return 是否匹配 + */ + public static boolean matches(String str, List strs) + { + if (isEmpty(str) || isEmpty(strs)) + { + return false; + } + for (String pattern : strs) + { + if (isMatch(pattern, str)) + { + return true; + } + } + return false; + } + + /** + * 判断url是否与规则配置: + * ? 表示单个字符; + * * 表示一层路径内的任意字符串,不可跨层级; + * ** 表示任意层路径; + * + * @param pattern 匹配规则 + * @param url 需要匹配的url + * @return + */ + public static boolean isMatch(String pattern, String url) + { + AntPathMatcher matcher = new AntPathMatcher(); + return matcher.match(pattern, url); + } + + @SuppressWarnings("unchecked") + public static T cast(Object obj) + { + return (T) obj; + } + + /** + * 数字左边补齐0,使之达到指定长度。注意,如果数字转换为字符串后,长度大于size,则只保留 最后size个字符。 + * + * @param num 数字对象 + * @param size 字符串指定长度 + * @return 返回数字的字符串格式,该字符串为指定长度。 + */ + public static final String padl(final Number num, final int size) + { + return padl(num.toString(), size, '0'); + } + + /** + * 字符串左补齐。如果原始字符串s长度大于size,则只保留最后size个字符。 + * + * @param s 原始字符串 + * @param size 字符串指定长度 + * @param c 用于补齐的字符 + * @return 返回指定长度的字符串,由原字符串左补齐或截取得到。 + */ + public static final String padl(final String s, final int size, final char c) + { + final StringBuilder sb = new StringBuilder(size); + if (s != null) + { + final int len = s.length(); + if (s.length() <= size) + { + for (int i = size - len; i > 0; i--) + { + sb.append(c); + } + sb.append(s); + } + else + { + return s.substring(len - size, len); + } + } + else + { + for (int i = size; i > 0; i--) + { + sb.append(c); + } + } + return sb.toString(); + } +} diff --git a/common/src/main/java/com/yyy/common/utils/common/Threads.java b/common/src/main/java/com/yyy/common/utils/common/Threads.java new file mode 100644 index 0000000..fbb7014 --- /dev/null +++ b/common/src/main/java/com/yyy/common/utils/common/Threads.java @@ -0,0 +1,94 @@ +package com.yyy.common.utils.common; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.concurrent.*; + +/** + * 线程相关工具类. + */ +public class Threads +{ + private static final Logger logger = LoggerFactory.getLogger(Threads.class); + + /** + * sleep等待,单位为毫秒 + */ + public static void sleep(long milliseconds) + { + try + { + Thread.sleep(milliseconds); + } + catch (InterruptedException e) + { + return; + } + } + + /** + * 停止线程池 + * 先使用shutdown, 停止接收新任务并尝试完成所有已存在任务. + * 如果超时, 则调用shutdownNow, 取消在workQueue中Pending的任务,并中断所有阻塞函数. + * 如果仍人超時,則強制退出. + * 另对在shutdown时线程本身被调用中断做了处理. + */ + public static void shutdownAndAwaitTermination(ExecutorService pool) + { + if (pool != null && !pool.isShutdown()) + { + pool.shutdown(); + try + { + if (!pool.awaitTermination(120, TimeUnit.SECONDS)) + { + pool.shutdownNow(); + if (!pool.awaitTermination(120, TimeUnit.SECONDS)) + { + logger.info("Pool did not terminate"); + } + } + } + catch (InterruptedException ie) + { + pool.shutdownNow(); + Thread.currentThread().interrupt(); + } + } + } + + /** + * 打印线程异常信息 + */ + public static void printException(Runnable r, Throwable t) + { + if (t == null && r instanceof Future) + { + try + { + Future future = (Future) r; + if (future.isDone()) + { + future.get(); + } + } + catch (CancellationException ce) + { + t = ce; + } + catch (ExecutionException ee) + { + t = ee.getCause(); + } + catch (InterruptedException ie) + { + Thread.currentThread().interrupt(); + } + } + if (t != null) + { + logger.error(t.getMessage(), t); + } + } +} diff --git a/common/src/main/java/com/yyy/common/utils/eam/DocumentsUtil.java b/common/src/main/java/com/yyy/common/utils/eam/DocumentsUtil.java new file mode 100644 index 0000000..70cdf9c --- /dev/null +++ b/common/src/main/java/com/yyy/common/utils/eam/DocumentsUtil.java @@ -0,0 +1,4 @@ +package com.yyy.common.utils.eam; + +public class DocumentsUtil { +} diff --git a/common/src/main/java/com/yyy/common/utils/eam/ResidualValueCalculator.java b/common/src/main/java/com/yyy/common/utils/eam/ResidualValueCalculator.java new file mode 100644 index 0000000..9cd433d --- /dev/null +++ b/common/src/main/java/com/yyy/common/utils/eam/ResidualValueCalculator.java @@ -0,0 +1,71 @@ +package com.yyy.common.utils.eam; + +import java.math.BigDecimal; + +public class ResidualValueCalculator { + // 年限平均法 + public static BigDecimal calculateResidualValueByAverageLife(BigDecimal originalValue, int usefulLife, int yearsDepreciated) { + BigDecimal depreciationPerYear = originalValue.divide(BigDecimal.valueOf(usefulLife), 2, BigDecimal.ROUND_HALF_UP); + BigDecimal accumulatedDepreciation = depreciationPerYear.multiply(BigDecimal.valueOf(yearsDepreciated)); + BigDecimal residualValue = originalValue.subtract(accumulatedDepreciation); + return residualValue; + } + + // 按月折旧的年限平均法 + public static BigDecimal calculateMonthlyDepreciationByAverageLife(BigDecimal originalValue, int usefulLifeInMonths, int monthsDepreciated) { + BigDecimal depreciationPerMonth = originalValue.divide(BigDecimal.valueOf(usefulLifeInMonths), 2, BigDecimal.ROUND_HALF_UP); + BigDecimal accumulatedDepreciation = depreciationPerMonth.multiply(BigDecimal.valueOf(monthsDepreciated)); + BigDecimal residualValue = originalValue.subtract(accumulatedDepreciation); + return residualValue; + } + + // 工作量法 + public static BigDecimal calculateResidualValueByUnitsOfWork(BigDecimal originalValue, BigDecimal totalUnitsOfWork, BigDecimal unitsOfWorkDone) { + BigDecimal depreciationPerUnit = originalValue.divide(totalUnitsOfWork, 2, BigDecimal.ROUND_HALF_UP); + BigDecimal accumulatedDepreciation = depreciationPerUnit.multiply(unitsOfWorkDone); + BigDecimal residualValue = originalValue.subtract(accumulatedDepreciation); + return residualValue; + } + + // 双倍余额递减法 + public static BigDecimal calculateResidualValueByDoubleDecliningBalance(BigDecimal originalValue, BigDecimal depreciationRate, int usefulLife, int yearsDepreciated) { + BigDecimal bookValue = originalValue; + for (int i = 1; i <= yearsDepreciated; i++) { + BigDecimal depreciationExpense = bookValue.multiply(depreciationRate).setScale(2, BigDecimal.ROUND_HALF_UP); + bookValue = bookValue.subtract(depreciationExpense); + } + return bookValue; + } + + // 年数总和法 + public static BigDecimal calculateResidualValueBySumOfTheYearsDigits(BigDecimal originalValue, int usefulLife, int yearsDepreciated) { + int sumOfYears = usefulLife * (usefulLife + 1) / 2; + BigDecimal depreciationPerYear = originalValue.divide(BigDecimal.valueOf(sumOfYears), 2, BigDecimal.ROUND_HALF_UP); + BigDecimal accumulatedDepreciation = BigDecimal.ZERO; + for (int i = 1; i <= yearsDepreciated; i++) { + accumulatedDepreciation = accumulatedDepreciation.add(depreciationPerYear.multiply(BigDecimal.valueOf(usefulLife - i + 1))); + } + BigDecimal residualValue = originalValue.subtract(accumulatedDepreciation); + return residualValue; + } + + public static void main(String[] args) { + BigDecimal originalValue = new BigDecimal("3000000.00"); // 资产原值 + int usefulLife = 5; // 使用年限 + int yearsDepreciated = 3; // 已折旧年限 + BigDecimal totalUnitsOfWork = new BigDecimal("1000"); // 总工作量 + BigDecimal unitsOfWorkDone = new BigDecimal("500"); // 完成的工作量 + BigDecimal depreciationRate = new BigDecimal("0.2"); // 折旧率 + + BigDecimal residualValueAverageLife = calculateResidualValueByAverageLife(originalValue, usefulLife, yearsDepreciated); + BigDecimal residualValueUnitsOfWork = calculateResidualValueByUnitsOfWork(new BigDecimal("60.00"), new BigDecimal("50.00"), new BigDecimal("0.40")); + BigDecimal residualValueDoubleDecliningBalance = calculateResidualValueByDoubleDecliningBalance(originalValue, depreciationRate, usefulLife, yearsDepreciated); + BigDecimal residualValueSumOfTheYearsDigits = calculateResidualValueBySumOfTheYearsDigits(originalValue, usefulLife, yearsDepreciated); + + System.out.println("资产残值 - 年限平均法: " + residualValueAverageLife); + System.out.println("年限平均法(按月): 资产残值 - " + calculateMonthlyDepreciationByAverageLife(originalValue,5*12,9)); + System.out.println("资产残值 - 工作量法: " + residualValueUnitsOfWork); + System.out.println("资产残值 - 双倍余额递减法: " + residualValueDoubleDecliningBalance); + System.out.println("资产残值 - 年数总和法: " + residualValueSumOfTheYearsDigits); + } +} diff --git a/common/src/main/java/com/yyy/common/utils/file/FileTypeUtils.java b/common/src/main/java/com/yyy/common/utils/file/FileTypeUtils.java new file mode 100644 index 0000000..8a3d64d --- /dev/null +++ b/common/src/main/java/com/yyy/common/utils/file/FileTypeUtils.java @@ -0,0 +1,77 @@ +package com.yyy.common.utils.file; + +import org.apache.commons.lang3.StringUtils; + +import java.io.File; + +/** + * @Author: fy + * @Date: 2024/03/22 + * @Description:文件类型工具类 + */ +public class FileTypeUtils +{ + /** + * 获取文件类型 + *

+ * 例如: ruoyi.txt, 返回: txt + * + * @param file 文件名 + * @return 后缀(不含".") + */ + public static String getFileType(File file) + { + if (null == file) + { + return StringUtils.EMPTY; + } + return getFileType(file.getName()); + } + + /** + * 获取文件类型 + *

+ * 例如: ruoyi.txt, 返回: txt + * + * @param fileName 文件名 + * @return 后缀(不含".") + */ + public static String getFileType(String fileName) + { + int separatorIndex = fileName.lastIndexOf("."); + if (separatorIndex < 0) + { + return ""; + } + return fileName.substring(separatorIndex + 1).toLowerCase(); + } + + /** + * 获取文件类型 + * + * @param photoByte 文件字节码 + * @return 后缀(不含".") + */ + public static String getFileExtendName(byte[] photoByte) + { + String strFileExtendName = "JPG"; + if ((photoByte[0] == 71) && (photoByte[1] == 73) && (photoByte[2] == 70) && (photoByte[3] == 56) + && ((photoByte[4] == 55) || (photoByte[4] == 57)) && (photoByte[5] == 97)) + { + strFileExtendName = "GIF"; + } + else if ((photoByte[6] == 74) && (photoByte[7] == 70) && (photoByte[8] == 73) && (photoByte[9] == 70)) + { + strFileExtendName = "JPG"; + } + else if ((photoByte[0] == 66) && (photoByte[1] == 77)) + { + strFileExtendName = "BMP"; + } + else if ((photoByte[1] == 80) && (photoByte[2] == 78) && (photoByte[3] == 71)) + { + strFileExtendName = "PNG"; + } + return strFileExtendName; + } +} diff --git a/common/src/main/java/com/yyy/common/utils/file/FileUploadUtils.java b/common/src/main/java/com/yyy/common/utils/file/FileUploadUtils.java new file mode 100644 index 0000000..36129f4 --- /dev/null +++ b/common/src/main/java/com/yyy/common/utils/file/FileUploadUtils.java @@ -0,0 +1,231 @@ +package com.yyy.common.utils.file; + +import com.yyy.common.config.AppConfig; +import com.yyy.common.constant.Constants; +import com.yyy.common.exception.file.FileNameLengthLimitExceededException; +import com.yyy.common.exception.file.FileSizeLimitExceededException; +import com.yyy.common.exception.file.InvalidExtensionException; +import com.yyy.common.utils.common.DateUtils; +import com.yyy.common.utils.common.StringUtils; +import com.yyy.common.utils.uuid.Seq; +import org.apache.commons.io.FilenameUtils; +import org.springframework.web.multipart.MultipartFile; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Paths; +import java.util.Objects; + +/** + * 文件上传工具类 + */ +public class FileUploadUtils +{ + /** + * 默认大小 50M + */ + public static final long DEFAULT_MAX_SIZE = 50 * 1024 * 1024; + + /** + * 默认的文件名最大长度 100 + */ + public static final int DEFAULT_FILE_NAME_LENGTH = 100; + + /** + * 默认上传的地址 + */ + private static String defaultBaseDir = AppConfig.getProfile(); + + public static void setDefaultBaseDir(String defaultBaseDir) + { + FileUploadUtils.defaultBaseDir = defaultBaseDir; + } + + public static String getDefaultBaseDir() + { + return defaultBaseDir; + } + + /** + * 以默认配置进行文件上传 + * + * @param file 上传的文件 + * @return 文件名称 + * @throws Exception + */ + public static final String upload(MultipartFile file) throws IOException + { + try + { + return upload(getDefaultBaseDir(), file, MimeTypeUtils.DEFAULT_ALLOWED_EXTENSION); + } + catch (Exception e) + { + throw new IOException(e.getMessage(), e); + } + } + + /** + * 根据文件路径上传 + * + * @param baseDir 相对应用的基目录 + * @param file 上传的文件 + * @return 文件名称 + * @throws IOException + */ + public static final String upload(String baseDir, MultipartFile file) throws IOException + { + try + { + return upload(baseDir, file, MimeTypeUtils.DEFAULT_ALLOWED_EXTENSION); + } + catch (Exception e) + { + throw new IOException(e.getMessage(), e); + } + } + + /** + * 文件上传 + * + * @param baseDir 相对应用的基目录 + * @param file 上传的文件 + * @param allowedExtension 上传文件类型 + * @return 返回上传成功的文件名 + * @throws FileSizeLimitExceededException 如果超出最大大小 + * @throws FileNameLengthLimitExceededException 文件名太长 + * @throws IOException 比如读写文件出错时 + * @throws InvalidExtensionException 文件校验异常 + */ + public static final String upload(String baseDir, MultipartFile file, String[] allowedExtension) + throws FileSizeLimitExceededException, IOException, FileNameLengthLimitExceededException, + InvalidExtensionException + { + int fileNameLength = Objects.requireNonNull(file.getOriginalFilename()).length(); + if (fileNameLength > FileUploadUtils.DEFAULT_FILE_NAME_LENGTH) + { + throw new FileNameLengthLimitExceededException(FileUploadUtils.DEFAULT_FILE_NAME_LENGTH); + } + + assertAllowed(file, allowedExtension); + + String fileName = extractFilename(file); + + String absPath = getAbsoluteFile(baseDir, fileName).getAbsolutePath(); + file.transferTo(Paths.get(absPath)); + return getPathFileName(baseDir, fileName); + } + + /** + * 编码文件名 + */ + public static final String extractFilename(MultipartFile file) + { + return StringUtils.format("{}/{}_{}.{}", DateUtils.datePath(), + FilenameUtils.getBaseName(file.getOriginalFilename()), Seq.getId(Seq.uploadSeqType), getExtension(file)); + } + + public static final File getAbsoluteFile(String uploadDir, String fileName) throws IOException + { + File desc = new File(uploadDir + File.separator + fileName); + + if (!desc.exists()) + { + if (!desc.getParentFile().exists()) + { + desc.getParentFile().mkdirs(); + } + } + return desc; + } + + public static final String getPathFileName(String uploadDir, String fileName) throws IOException + { + int dirLastIndex = AppConfig.getProfile().length() + 1; + String currentDir = StringUtils.substring(uploadDir, dirLastIndex); + return Constants.RESOURCE_PREFIX + "/" + currentDir + "/" + fileName; + } + + /** + * 文件大小校验 + * + * @param file 上传的文件 + * @return + * @throws FileSizeLimitExceededException 如果超出最大大小 + * @throws InvalidExtensionException + */ + public static final void assertAllowed(MultipartFile file, String[] allowedExtension) + throws FileSizeLimitExceededException, InvalidExtensionException + { + long size = file.getSize(); + if (size > DEFAULT_MAX_SIZE) + { + throw new FileSizeLimitExceededException(DEFAULT_MAX_SIZE / 1024 / 1024); + } + + String fileName = file.getOriginalFilename(); + String extension = getExtension(file); + if (allowedExtension != null && !isAllowedExtension(extension, allowedExtension)) + { + if (allowedExtension == MimeTypeUtils.IMAGE_EXTENSION) + { + throw new InvalidExtensionException.InvalidImageExtensionException(allowedExtension, extension, + fileName); + } + else if (allowedExtension == MimeTypeUtils.FLASH_EXTENSION) + { + throw new InvalidExtensionException.InvalidFlashExtensionException(allowedExtension, extension, + fileName); + } + else if (allowedExtension == MimeTypeUtils.MEDIA_EXTENSION) + { + throw new InvalidExtensionException.InvalidMediaExtensionException(allowedExtension, extension, + fileName); + } + else if (allowedExtension == MimeTypeUtils.VIDEO_EXTENSION) + { + throw new InvalidExtensionException.InvalidVideoExtensionException(allowedExtension, extension, + fileName); + } + else + { + throw new InvalidExtensionException(allowedExtension, extension, fileName); + } + } + } + + /** + * 判断MIME类型是否是允许的MIME类型 + * + * @param extension + * @param allowedExtension + * @return + */ + public static final boolean isAllowedExtension(String extension, String[] allowedExtension) + { + for (String str : allowedExtension) + { + if (str.equalsIgnoreCase(extension)) + { + return true; + } + } + return false; + } + + /** + * 获取文件名的后缀 + * + * @param file 表单文件 + * @return 后缀名 + */ + public static final String getExtension(MultipartFile file) + { + String extension = FilenameUtils.getExtension(file.getOriginalFilename()); + if (StringUtils.isEmpty(extension)) + { + extension = MimeTypeUtils.getExtension(Objects.requireNonNull(file.getContentType())); + } + return extension; + } +} \ No newline at end of file diff --git a/common/src/main/java/com/yyy/common/utils/file/FileUtils.java b/common/src/main/java/com/yyy/common/utils/file/FileUtils.java new file mode 100644 index 0000000..4d4fd54 --- /dev/null +++ b/common/src/main/java/com/yyy/common/utils/file/FileUtils.java @@ -0,0 +1,285 @@ +package com.yyy.common.utils.file; + +import com.yyy.common.config.AppConfig; +import com.yyy.common.utils.common.DateUtils; +import com.yyy.common.utils.common.StringUtils; +import com.yyy.common.utils.uuid.IdUtils; +import org.apache.commons.io.FilenameUtils; +import org.apache.commons.io.IOUtils; +import org.apache.commons.lang3.ArrayUtils; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.*; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; + +/** + * @Author: fy + * @Date: 2024/03/22 + * @Description:文件处理工具类 + */ +public class FileUtils +{ + public static String FILENAME_PATTERN = "[a-zA-Z0-9_\\-\\|\\.\\u4e00-\\u9fa5]+"; + + /** + * 输出指定文件的byte数组 + * + * @param filePath 文件路径 + * @param os 输出流 + * @return + */ + public static void writeBytes(String filePath, OutputStream os) throws IOException + { + FileInputStream fis = null; + try + { + File file = new File(filePath); + if (!file.exists()) + { + throw new FileNotFoundException(filePath); + } + fis = new FileInputStream(file); + byte[] b = new byte[1024]; + int length; + while ((length = fis.read(b)) > 0) + { + os.write(b, 0, length); + } + } + catch (IOException e) + { + throw e; + } + finally + { + IOUtils.close(os); + IOUtils.close(fis); + } + } + + /** + * 写数据到文件中 + * + * @param data 数据 + * @return 目标文件 + * @throws IOException IO异常 + */ + public static String writeImportBytes(byte[] data) throws IOException + { + return writeBytes(data, AppConfig.getImportPath()); + } + + /** + * 写数据到文件中 + * + * @param data 数据 + * @param uploadDir 目标文件 + * @return 目标文件 + * @throws IOException IO异常 + */ + public static String writeBytes(byte[] data, String uploadDir) throws IOException + { + FileOutputStream fos = null; + String pathName = ""; + try + { + String extension = getFileExtendName(data); + pathName = DateUtils.datePath() + "/" + IdUtils.fastUUID() + "." + extension; + File file = FileUploadUtils.getAbsoluteFile(uploadDir, pathName); + fos = new FileOutputStream(file); + fos.write(data); + } + finally + { + IOUtils.close(fos); + } + return FileUploadUtils.getPathFileName(uploadDir, pathName); + } + + /** + * 删除文件 + * + * @param filePath 文件 + * @return + */ + public static boolean deleteFile(String filePath) + { + boolean flag = false; + File file = new File(filePath); + // 路径为文件且不为空则进行删除 + if (file.isFile() && file.exists()) + { + flag = file.delete(); + } + return flag; + } + + /** + * 文件名称验证 + * + * @param filename 文件名称 + * @return true 正常 false 非法 + */ + public static boolean isValidFilename(String filename) + { + return filename.matches(FILENAME_PATTERN); + } + + /** + * 检查文件是否可下载 + * + * @param resource 需要下载的文件 + * @return true 正常 false 非法 + */ + public static boolean checkAllowDownload(String resource) + { + // 禁止目录上跳级别 + if (StringUtils.contains(resource, "..")) + { + return false; + } + + // 检查允许下载的文件规则 + if (ArrayUtils.contains(MimeTypeUtils.DEFAULT_ALLOWED_EXTENSION, FileTypeUtils.getFileType(resource))) + { + return true; + } + + // 不在允许下载的文件规则 + return false; + } + + /** + * 下载文件名重新编码 + * + * @param request 请求对象 + * @param fileName 文件名 + * @return 编码后的文件名 + */ + public static String setFileDownloadHeader(HttpServletRequest request, String fileName) throws UnsupportedEncodingException + { + final String agent = request.getHeader("USER-AGENT"); + String filename = fileName; + if (agent.contains("MSIE")) + { + // IE浏览器 + filename = URLEncoder.encode(filename, "utf-8"); + filename = filename.replace("+", " "); + } + else if (agent.contains("Firefox")) + { + // 火狐浏览器 + filename = new String(fileName.getBytes(), "ISO8859-1"); + } + else if (agent.contains("Chrome")) + { + // google浏览器 + filename = URLEncoder.encode(filename, "utf-8"); + } + else + { + // 其它浏览器 + filename = URLEncoder.encode(filename, "utf-8"); + } + return filename; + } + + /** + * 下载文件名重新编码 + * + * @param response 响应对象 + * @param realFileName 真实文件名 + * @return + */ + public static void setAttachmentResponseHeader(HttpServletResponse response, String realFileName) throws UnsupportedEncodingException + { + String percentEncodedFileName = percentEncode(realFileName); + + StringBuilder contentDispositionValue = new StringBuilder(); + contentDispositionValue.append("attachment; filename=") + .append(percentEncodedFileName) + .append(";") + .append("filename*=") + .append("utf-8''") + .append(percentEncodedFileName); + + response.setHeader("Content-disposition", contentDispositionValue.toString()); + } + + /** + * 百分号编码工具方法 + * + * @param s 需要百分号编码的字符串 + * @return 百分号编码后的字符串 + */ + public static String percentEncode(String s) throws UnsupportedEncodingException + { + String encode = URLEncoder.encode(s, StandardCharsets.UTF_8.toString()); + return encode.replaceAll("\\+", "%20"); + } + + /** + * 获取图像后缀 + * + * @param photoByte 图像数据 + * @return 后缀名 + */ + public static String getFileExtendName(byte[] photoByte) + { + String strFileExtendName = "jpg"; + if ((photoByte[0] == 71) && (photoByte[1] == 73) && (photoByte[2] == 70) && (photoByte[3] == 56) + && ((photoByte[4] == 55) || (photoByte[4] == 57)) && (photoByte[5] == 97)) + { + strFileExtendName = "gif"; + } + else if ((photoByte[6] == 74) && (photoByte[7] == 70) && (photoByte[8] == 73) && (photoByte[9] == 70)) + { + strFileExtendName = "jpg"; + } + else if ((photoByte[0] == 66) && (photoByte[1] == 77)) + { + strFileExtendName = "bmp"; + } + else if ((photoByte[1] == 80) && (photoByte[2] == 78) && (photoByte[3] == 71)) + { + strFileExtendName = "png"; + } + return strFileExtendName; + } + + /** + * 获取文件名称 /profile/upload/2022/04/16/ruoyi.png -- ruoyi.png + * + * @param fileName 路径名称 + * @return 没有文件路径的名称 + */ + public static String getName(String fileName) + { + if (fileName == null) + { + return null; + } + int lastUnixPos = fileName.lastIndexOf('/'); + int lastWindowsPos = fileName.lastIndexOf('\\'); + int index = Math.max(lastUnixPos, lastWindowsPos); + return fileName.substring(index + 1); + } + + /** + * 获取不带后缀文件名称 /profile/upload/2022/04/16/ruoyi.png -- ruoyi + * + * @param fileName 路径名称 + * @return 没有文件路径和后缀的名称 + */ + public static String getNameNotSuffix(String fileName) + { + if (fileName == null) + { + return null; + } + String baseName = FilenameUtils.getBaseName(fileName); + return baseName; + } +} \ No newline at end of file diff --git a/common/src/main/java/com/yyy/common/utils/file/ImageUtils.java b/common/src/main/java/com/yyy/common/utils/file/ImageUtils.java new file mode 100644 index 0000000..7f977db --- /dev/null +++ b/common/src/main/java/com/yyy/common/utils/file/ImageUtils.java @@ -0,0 +1,98 @@ +package com.yyy.common.utils.file; + + +import com.yyy.common.config.AppConfig; +import com.yyy.common.constant.Constants; +import com.yyy.common.utils.common.StringUtils; +import org.apache.commons.io.IOUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.ByteArrayInputStream; +import java.io.FileInputStream; +import java.io.InputStream; +import java.net.URL; +import java.net.URLConnection; +import java.util.Arrays; + +/** + * 图片处理工具类 + */ +public class ImageUtils +{ + private static final Logger log = LoggerFactory.getLogger(ImageUtils.class); + + public static byte[] getImage(String imagePath) + { + InputStream is = getFile(imagePath); + try + { + return IOUtils.toByteArray(is); + } + catch (Exception e) + { + log.error("图片加载异常 {}", e); + return null; + } + finally + { + IOUtils.closeQuietly(is); + } + } + + public static InputStream getFile(String imagePath) + { + try + { + byte[] result = readFile(imagePath); + result = Arrays.copyOf(result, result.length); + return new ByteArrayInputStream(result); + } + catch (Exception e) + { + log.error("获取图片异常 {}", e); + } + return null; + } + + /** + * 读取文件为字节数据 + * + * @param url 地址 + * @return 字节数据 + */ + public static byte[] readFile(String url) + { + InputStream in = null; + try + { + if (url.startsWith("http")) + { + // 网络地址 + URL urlObj = new URL(url); + URLConnection urlConnection = urlObj.openConnection(); + urlConnection.setConnectTimeout(30 * 1000); + urlConnection.setReadTimeout(60 * 1000); + urlConnection.setDoInput(true); + in = urlConnection.getInputStream(); + } + else + { + // 本机地址 + String localPath = AppConfig.getProfile(); + String downloadPath = localPath + StringUtils.substringAfter(url, Constants.RESOURCE_PREFIX); + in = new FileInputStream(downloadPath); + } + return IOUtils.toByteArray(in); + } + catch (Exception e) + { + log.error("获取文件路径异常 {}", e); + return null; + } + finally + { + IOUtils.closeQuietly(in); + } + } +} diff --git a/common/src/main/java/com/yyy/common/utils/file/MimeTypeUtils.java b/common/src/main/java/com/yyy/common/utils/file/MimeTypeUtils.java new file mode 100644 index 0000000..77eb820 --- /dev/null +++ b/common/src/main/java/com/yyy/common/utils/file/MimeTypeUtils.java @@ -0,0 +1,59 @@ +package com.yyy.common.utils.file; + +/** + * @Author: fy + * @Date: 2024/03/22 + * @Description:媒体类型工具类 + */ +public class MimeTypeUtils +{ + public static final String IMAGE_PNG = "image/png"; + + public static final String IMAGE_JPG = "image/jpg"; + + public static final String IMAGE_JPEG = "image/jpeg"; + + public static final String IMAGE_BMP = "image/bmp"; + + public static final String IMAGE_GIF = "image/gif"; + + public static final String[] IMAGE_EXTENSION = { "bmp", "gif", "jpg", "jpeg", "png" }; + + public static final String[] FLASH_EXTENSION = { "swf", "flv" }; + + public static final String[] MEDIA_EXTENSION = { "swf", "flv", "mp3", "wav", "wma", "wmv", "mid", "avi", "mpg", + "asf", "rm", "rmvb" }; + + public static final String[] VIDEO_EXTENSION = { "mp4", "avi", "rmvb" }; + + public static final String[] DEFAULT_ALLOWED_EXTENSION = { + // 图片 + "bmp", "gif", "jpg", "jpeg", "png", + // word excel powerpoint + "doc", "docx", "xls", "xlsx", "ppt", "pptx", "html", "htm", "txt", + // 压缩文件 + "rar", "zip", "gz", "bz2", + // 视频格式 + "mp4", "avi", "rmvb", + // pdf + "pdf" }; + + public static String getExtension(String prefix) + { + switch (prefix) + { + case IMAGE_PNG: + return "png"; + case IMAGE_JPG: + return "jpg"; + case IMAGE_JPEG: + return "jpeg"; + case IMAGE_BMP: + return "bmp"; + case IMAGE_GIF: + return "gif"; + default: + return ""; + } + } +} \ No newline at end of file diff --git a/common/src/main/java/com/yyy/common/utils/poi/ExcelHandlerAdapter.java b/common/src/main/java/com/yyy/common/utils/poi/ExcelHandlerAdapter.java new file mode 100644 index 0000000..0e01bc7 --- /dev/null +++ b/common/src/main/java/com/yyy/common/utils/poi/ExcelHandlerAdapter.java @@ -0,0 +1,25 @@ +package com.yyy.common.utils.poi; + + +import org.apache.poi.ss.usermodel.Cell; +import org.apache.poi.ss.usermodel.Workbook; + +/** + * @Author: fy + * @Date: 2024/04/08 + * @Description:Excel数据格式处理适配器 + */ +public interface ExcelHandlerAdapter +{ + /** + * 格式化 + * + * @param value 单元格数据值 + * @param args excel注解args参数组 + * @param cell 单元格对象 + * @param wb 工作簿对象 + * + * @return 处理后的值 + */ + Object format(Object value, String[] args, Cell cell, Workbook wb); +} \ No newline at end of file diff --git a/common/src/main/java/com/yyy/common/utils/poi/ExcelUtil.java b/common/src/main/java/com/yyy/common/utils/poi/ExcelUtil.java new file mode 100644 index 0000000..e4b7ecb --- /dev/null +++ b/common/src/main/java/com/yyy/common/utils/poi/ExcelUtil.java @@ -0,0 +1,1714 @@ +package com.yyy.common.utils.poi; + +import com.yyy.common.annotation.Excel; +import com.yyy.common.annotation.Excel.ColumnType; +import com.yyy.common.annotation.Excel.Type; +import com.yyy.common.annotation.Excels; +import com.yyy.common.config.AppConfig; +import com.yyy.common.core.domain.Result; +import com.yyy.common.core.domain.ResultCode; +import com.yyy.common.core.text.Convert; +import com.yyy.common.exception.UtilException; +import com.yyy.common.utils.common.DateUtils; +import com.yyy.common.utils.common.DictUtils; +import com.yyy.common.utils.common.StringUtils; +import com.yyy.common.utils.file.FileTypeUtils; +import com.yyy.common.utils.file.FileUtils; +import com.yyy.common.utils.file.ImageUtils; +import com.yyy.common.utils.reflect.ReflectUtils; +import org.apache.commons.io.IOUtils; +import org.apache.commons.lang3.ArrayUtils; +import org.apache.commons.lang3.RegExUtils; +import org.apache.commons.lang3.reflect.FieldUtils; +import org.apache.poi.hssf.usermodel.*; +import org.apache.poi.ooxml.POIXMLDocumentPart; +import org.apache.poi.ss.usermodel.*; +import org.apache.poi.ss.util.CellRangeAddress; +import org.apache.poi.ss.util.CellRangeAddressList; +import org.apache.poi.xssf.streaming.SXSSFWorkbook; +import org.apache.poi.xssf.usermodel.*; +import org.openxmlformats.schemas.drawingml.x2006.spreadsheetDrawing.CTMarker; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.servlet.http.HttpServletResponse; +import java.io.*; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.lang.reflect.ParameterizedType; +import java.math.BigDecimal; +import java.text.DecimalFormat; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.*; +import java.util.stream.Collectors; + +/** + * Excel相关处理 + * + */ +public class ExcelUtil { + private static final Logger log = LoggerFactory.getLogger(ExcelUtil.class); + + public static final String FORMULA_REGEX_STR = "=|-|\\+|@"; + + public static final String[] FORMULA_STR = { "=", "-", "+", "@" }; + + /** + * 用于dictType属性数据存储,避免重复查缓存 + */ + public Map sysDictMap = new HashMap(); + + /** + * Excel sheet最大行数,默认65536 + */ + public static final int sheetSize = 65536; + + /** + * 工作表名称 + */ + private String sheetName; + + /** + * 导出类型(EXPORT:导出数据;IMPORT:导入模板) + */ + private Excel.Type type; + + /** + * 工作薄对象 + */ + private Workbook wb; + + /** + * 工作表对象 + */ + private Sheet sheet; + + /** + * 样式列表 + */ + private Map styles; + + /** + * 导入导出数据列表 + */ + private List list; + + /** + * 注解列表 + */ + private List fields; + + /** + * 当前行号 + */ + private int rownum; + + /** + * 标题 + */ + private String title; + + /** + * 最大高度 + */ + private short maxHeight; + + /** + * 合并后最后行数 + */ + private int subMergedLastRowNum = 0; + + /** + * 合并后开始行数 + */ + private int subMergedFirstRowNum = 1; + + /** + * 对象的子列表方法 + */ + private Method subMethod; + + /** + * 对象的子列表属性 + */ + private List subFields; + + /** + * 统计列表 + */ + private Map statistics = new HashMap(); + + /** + * 数字格式 + */ + private static final DecimalFormat DOUBLE_FORMAT = new DecimalFormat("######0.00"); + + /** + * 实体对象 + */ + public Class clazz; + + /** + * 需要排除列属性 + */ + public String[] excludeFields; + + public ExcelUtil(Class clazz) + { + this.clazz = clazz; + } + + /** + * 隐藏Excel中列属性 + * + * @param fields 列属性名 示例[单个"name"/多个"id","name"] + * @throws Exception + */ + public void hideColumn(String... fields) + { + this.excludeFields = fields; + } + + public void init(List list, String sheetName, String title, Excel.Type type) + { + if (list == null) + { + list = new ArrayList(); + } + this.list = list; + this.sheetName = sheetName; + this.type = type; + this.title = title; + createExcelField(); + createWorkbook(); + createTitle(); + createSubHead(); + } + + /** + * 创建excel第一行标题 + */ + public void createTitle() + { + if (StringUtils.isNotEmpty(title)) + { + subMergedFirstRowNum++; + subMergedLastRowNum++; + int titleLastCol = this.fields.size() - 1; + if (isSubList()) + { + titleLastCol = titleLastCol + subFields.size() - 1; + } + Row titleRow = sheet.createRow(rownum == 0 ? rownum++ : 0); + titleRow.setHeightInPoints(30); + Cell titleCell = titleRow.createCell(0); + titleCell.setCellStyle(styles.get("title")); + titleCell.setCellValue(title); + sheet.addMergedRegion(new CellRangeAddress(titleRow.getRowNum(), titleRow.getRowNum(), titleRow.getRowNum(), titleLastCol)); + } + } + + /** + * 创建对象的子列表名称 + */ + public void createSubHead() + { + if (isSubList()) + { + subMergedFirstRowNum++; + subMergedLastRowNum++; + Row subRow = sheet.createRow(rownum); + int excelNum = 0; + for (Object[] objects : fields) + { + Excel attr = (Excel) objects[1]; + Cell headCell1 = subRow.createCell(excelNum); + headCell1.setCellValue(attr.name()); + headCell1.setCellStyle(styles.get(StringUtils.format("header_{}_{}", attr.headerColor(), attr.headerBackgroundColor()))); + excelNum++; + } + int headFirstRow = excelNum - 1; + int headLastRow = headFirstRow + subFields.size() - 1; + if (headLastRow > headFirstRow) + { + sheet.addMergedRegion(new CellRangeAddress(rownum, rownum, headFirstRow, headLastRow)); + } + rownum++; + } + } + + /** + * 对excel表单默认第一个索引名转换成list + * + * @param is 输入流 + * @return 转换后集合 + */ + public List importExcel(InputStream is) + { + List list = null; + try + { + list = importExcel(is, 0); + } + catch (Exception e) + { + log.error("导入Excel异常{}", e.getMessage()); + throw new UtilException(e.getMessage()); + } + finally + { + IOUtils.closeQuietly(is); + } + return list; + } + + /** + * 对excel表单默认第一个索引名转换成list + * + * @param is 输入流 + * @param titleNum 标题占用行数 + * @return 转换后集合 + */ + public List importExcel(InputStream is, int titleNum) throws Exception + { + return importExcel(StringUtils.EMPTY, is, titleNum); + } + + /** + * 对excel表单指定表格索引名转换成list + * + * @param sheetName 表格索引名 + * @param titleNum 标题占用行数 + * @param is 输入流 + * @return 转换后集合 + */ + public List importExcel(String sheetName, InputStream is, int titleNum) throws Exception + { + this.type = Excel.Type.IMPORT; + this.wb = WorkbookFactory.create(is); + List list = new ArrayList(); + // 如果指定sheet名,则取指定sheet中的内容 否则默认指向第1个sheet + Sheet sheet = StringUtils.isNotEmpty(sheetName) ? wb.getSheet(sheetName) : wb.getSheetAt(0); + if (sheet == null) + { + throw new IOException("文件sheet不存在"); + } + boolean isXSSFWorkbook = !(wb instanceof HSSFWorkbook); + Map pictures; + if (isXSSFWorkbook) + { + pictures = getSheetPictures07((XSSFSheet) sheet, (XSSFWorkbook) wb); + } + else + { + pictures = getSheetPictures03((HSSFSheet) sheet, (HSSFWorkbook) wb); + } + // 获取最后一个非空行的行下标,比如总行数为n,则返回的为n-1 + int rows = sheet.getLastRowNum(); + if (rows > 0) + { + // 定义一个map用于存放excel列的序号和field. + Map cellMap = new HashMap(); + // 获取表头 + Row heard = sheet.getRow(titleNum); + for (int i = 0; i < heard.getPhysicalNumberOfCells(); i++) + { + Cell cell = heard.getCell(i); + if (StringUtils.isNotNull(cell)) + { + String value = this.getCellValue(heard, i).toString(); + cellMap.put(value, i); + } + else + { + cellMap.put(null, i); + } + } + // 有数据时才处理 得到类的所有field. + List fields = this.getFields(); + Map fieldsMap = new HashMap(); + for (Object[] objects : fields) + { + Excel attr = (Excel) objects[1]; + Integer column = cellMap.get(attr.name()); + if (column != null) + { + fieldsMap.put(column, objects); + } + } + for (int i = titleNum + 1; i <= rows; i++) + { + // 从第2行开始取数据,默认第一行是表头. + Row row = sheet.getRow(i); + // 判断当前行是否是空行 + if (isRowEmpty(row)) + { + continue; + } + T entity = null; + for (Map.Entry entry : fieldsMap.entrySet()) + { + Object val = this.getCellValue(row, entry.getKey()); + + // 如果不存在实例则新建. + entity = (entity == null ? clazz.newInstance() : entity); + // 从map中得到对应列的field. + Field field = (Field) entry.getValue()[0]; + Excel attr = (Excel) entry.getValue()[1]; + // 取得类型,并根据对象类型设置值. + Class fieldType = field.getType(); + if (String.class == fieldType) + { + String s = Convert.toStr(val); + if (StringUtils.endsWith(s, ".0")) + { + val = StringUtils.substringBefore(s, ".0"); + } + else + { + String dateFormat = field.getAnnotation(Excel.class).dateFormat(); + if (StringUtils.isNotEmpty(dateFormat)) + { + val = parseDateToStr(dateFormat, val); + } + else + { + val = Convert.toStr(val); + } + } + } + else if ((Integer.TYPE == fieldType || Integer.class == fieldType) && StringUtils.isNumeric(Convert.toStr(val))) + { + val = Convert.toInt(val); + } + else if ((Long.TYPE == fieldType || Long.class == fieldType) && StringUtils.isNumeric(Convert.toStr(val))) + { + val = Convert.toLong(val); + } + else if (Double.TYPE == fieldType || Double.class == fieldType) + { + val = Convert.toDouble(val); + } + else if (Float.TYPE == fieldType || Float.class == fieldType) + { + val = Convert.toFloat(val); + } + else if (BigDecimal.class == fieldType) + { + val = Convert.toBigDecimal(val); + } + else if (Date.class == fieldType) + { + if (val instanceof String) + { + val = DateUtils.parseDate(val); + } + else if (val instanceof Double) + { + val = DateUtil.getJavaDate((Double) val); + } + } + else if (Boolean.TYPE == fieldType || Boolean.class == fieldType) + { + val = Convert.toBool(val, false); + } + if (StringUtils.isNotNull(fieldType)) + { + String propertyName = field.getName(); + if (StringUtils.isNotEmpty(attr.targetAttr())) + { + propertyName = field.getName() + "." + attr.targetAttr(); + } + if (StringUtils.isNotEmpty(attr.readConverterExp())) + { + val = reverseByExp(Convert.toStr(val), attr.readConverterExp(), attr.separator()); + } + else if (StringUtils.isNotEmpty(attr.dictType())) + { + val = reverseDictByExp(Convert.toStr(val), attr.dictType(), attr.separator()); + } + else if (!attr.handler().equals(ExcelHandlerAdapter.class)) + { + val = dataFormatHandlerAdapter(val, attr, null); + } + else if (Excel.ColumnType.IMAGE == attr.cellType() && StringUtils.isNotEmpty(pictures)) + { + PictureData image = pictures.get(row.getRowNum() + "_" + entry.getKey()); + if (image == null) + { + val = ""; + } + else + { + byte[] data = image.getData(); + val = FileUtils.writeImportBytes(data); + } + } + ReflectUtils.invokeSetter(entity, propertyName, val); + } + } + list.add(entity); + } + } + return list; + } + + /** + * 对list数据源将其里面的数据导入到excel表单 + * + * @param list 导出数据集合 + * @param sheetName 工作表的名称 + * @return 结果 + */ + public Result exportExcel(List list, String sheetName) + { + return exportExcel(list, sheetName, StringUtils.EMPTY); + } + + /** + * 对list数据源将其里面的数据导入到excel表单 + * + * @param list 导出数据集合 + * @param sheetName 工作表的名称 + * @param title 标题 + * @return 结果 + */ + public Result exportExcel(List list, String sheetName, String title) + { + this.init(list, sheetName, title, Excel.Type.EXPORT); + return exportExcel(); + } + + /** + * 对list数据源将其里面的数据导入到excel表单 + * + * @param response 返回数据 + * @param list 导出数据集合 + * @param sheetName 工作表的名称 + * @return 结果 + */ + public void exportExcel(HttpServletResponse response, List list, String sheetName) + { + exportExcel(response, list, sheetName, StringUtils.EMPTY); + } + + /** + * 对list数据源将其里面的数据导入到excel表单 + * + * @param response 返回数据 + * @param list 导出数据集合 + * @param sheetName 工作表的名称 + * @param title 标题 + * @return 结果 + */ + public void exportExcel(HttpServletResponse response, List list, String sheetName, String title) + { + response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); + response.setCharacterEncoding("utf-8"); + this.init(list, sheetName, title, Excel.Type.EXPORT); + exportExcel(response); + } + + /** + * 对list数据源将其里面的数据导入到excel表单 + * + * @param sheetName 工作表的名称 + * @return 结果 + */ + public Result importTemplateExcel(String sheetName) + { + return importTemplateExcel(sheetName, StringUtils.EMPTY); + } + + /** + * 对list数据源将其里面的数据导入到excel表单 + * + * @param sheetName 工作表的名称 + * @param title 标题 + * @return 结果 + */ + public Result importTemplateExcel(String sheetName, String title) + { + this.init(null, sheetName, title, Excel.Type.IMPORT); + return exportExcel(); + } + + /** + * 对list数据源将其里面的数据导入到excel表单 + * + * @param sheetName 工作表的名称 + * @return 结果 + */ + public void importTemplateExcel(HttpServletResponse response, String sheetName) + { + importTemplateExcel(response, sheetName, StringUtils.EMPTY); + } + + /** + * 对list数据源将其里面的数据导入到excel表单 + * + * @param sheetName 工作表的名称 + * @param title 标题 + * @return 结果 + */ + public void importTemplateExcel(HttpServletResponse response, String sheetName, String title) + { + response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); + response.setCharacterEncoding("utf-8"); + this.init(null, sheetName, title, Excel.Type.IMPORT); + exportExcel(response); + } + + /** + * 对list数据源将其里面的数据导入到excel表单 + * + * @return 结果 + */ + public void exportExcel(HttpServletResponse response) + { + try + { + writeSheet(); + wb.write(response.getOutputStream()); + } + catch (Exception e) + { + log.error("导出Excel异常{}", e.getMessage()); + } + finally + { + IOUtils.closeQuietly(wb); + } + } + + /** + * 对list数据源将其里面的数据导入到excel表单 + * + * @return 结果 + */ + public Result exportExcel() + { + OutputStream out = null; + try + { + writeSheet(); + String filename = encodingFilename(sheetName); + out = new FileOutputStream(getAbsoluteFile(filename)); + wb.write(out); + return new Result(ResultCode.success,filename); + } + catch (Exception e) + { + log.error("导出Excel异常{}", e.getMessage()); + throw new UtilException("导出Excel失败,请联系网站管理员!"); + } + finally + { + IOUtils.closeQuietly(wb); + IOUtils.closeQuietly(out); + } + } + + /** + * 创建写入数据到Sheet + */ + public void writeSheet() + { + // 取出一共有多少个sheet. + int sheetNo = Math.max(1, (int) Math.ceil(list.size() * 1.0 / sheetSize)); + for (int index = 0; index < sheetNo; index++) + { + createSheet(sheetNo, index); + + // 产生一行 + Row row = sheet.createRow(rownum); + int column = 0; + // 写入各个字段的列头名称 + for (Object[] os : fields) + { + Field field = (Field) os[0]; + Excel excel = (Excel) os[1]; + if (Collection.class.isAssignableFrom(field.getType())) + { + for (Field subField : subFields) + { + Excel subExcel = subField.getAnnotation(Excel.class); + this.createHeadCell(subExcel, row, column++); + } + } + else + { + this.createHeadCell(excel, row, column++); + } + } + if (Excel.Type.EXPORT.equals(type)) + { + fillExcelData(index, row); + addStatisticsRow(); + } + } + } + + /** + * 填充excel数据 + * + * @param index 序号 + * @param row 单元格行 + */ + @SuppressWarnings("unchecked") + public void fillExcelData(int index, Row row) + { + int startNo = index * sheetSize; + int endNo = Math.min(startNo + sheetSize, list.size()); + int rowNo = (1 + rownum) - startNo; + for (int i = startNo; i < endNo; i++) + { + rowNo = isSubList() ? (i > 1 ? rowNo + 1 : rowNo + i) : i + 1 + rownum - startNo; + row = sheet.createRow(rowNo); + // 得到导出对象. + T vo = (T) list.get(i); + Collection subList = null; + if (isSubList()) + { + if (isSubListValue(vo)) + { + subList = getListCellValue(vo); + subMergedLastRowNum = subMergedLastRowNum + subList.size(); + } + else + { + subMergedFirstRowNum++; + subMergedLastRowNum++; + } + } + int column = 0; + for (Object[] os : fields) + { + Field field = (Field) os[0]; + Excel excel = (Excel) os[1]; + if (Collection.class.isAssignableFrom(field.getType()) && StringUtils.isNotNull(subList)) + { + boolean subFirst = false; + for (Object obj : subList) + { + if (subFirst) + { + rowNo++; + row = sheet.createRow(rowNo); + } + List subFields = FieldUtils.getFieldsListWithAnnotation(obj.getClass(), Excel.class); + int subIndex = 0; + for (Field subField : subFields) + { + if (subField.isAnnotationPresent(Excel.class)) + { + subField.setAccessible(true); + Excel attr = subField.getAnnotation(Excel.class); + this.addCell(attr, row, (T) obj, subField, column + subIndex); + } + subIndex++; + } + subFirst = true; + } + this.subMergedFirstRowNum = this.subMergedFirstRowNum + subList.size(); + } + else + { + this.addCell(excel, row, vo, field, column++); + } + } + } + } + + /** + * 创建表格样式 + * + * @param wb 工作薄对象 + * @return 样式列表 + */ + private Map createStyles(Workbook wb) + { + // 写入各条记录,每条记录对应excel表中的一行 + Map styles = new HashMap(); + CellStyle style = wb.createCellStyle(); + style.setAlignment(HorizontalAlignment.CENTER); + style.setVerticalAlignment(VerticalAlignment.CENTER); + Font titleFont = wb.createFont(); + titleFont.setFontName("Arial"); + titleFont.setFontHeightInPoints((short) 16); + titleFont.setBold(true); + style.setFont(titleFont); + styles.put("title", style); + + style = wb.createCellStyle(); + style.setAlignment(HorizontalAlignment.CENTER); + style.setVerticalAlignment(VerticalAlignment.CENTER); + style.setBorderRight(BorderStyle.THIN); + style.setRightBorderColor(IndexedColors.GREY_50_PERCENT.getIndex()); + style.setBorderLeft(BorderStyle.THIN); + style.setLeftBorderColor(IndexedColors.GREY_50_PERCENT.getIndex()); + style.setBorderTop(BorderStyle.THIN); + style.setTopBorderColor(IndexedColors.GREY_50_PERCENT.getIndex()); + style.setBorderBottom(BorderStyle.THIN); + style.setBottomBorderColor(IndexedColors.GREY_50_PERCENT.getIndex()); + Font dataFont = wb.createFont(); + dataFont.setFontName("Arial"); + dataFont.setFontHeightInPoints((short) 10); + style.setFont(dataFont); + styles.put("data", style); + + style = wb.createCellStyle(); + style.setAlignment(HorizontalAlignment.CENTER); + style.setVerticalAlignment(VerticalAlignment.CENTER); + Font totalFont = wb.createFont(); + totalFont.setFontName("Arial"); + totalFont.setFontHeightInPoints((short) 10); + style.setFont(totalFont); + styles.put("total", style); + + styles.putAll(annotationHeaderStyles(wb, styles)); + + styles.putAll(annotationDataStyles(wb)); + + return styles; + } + + /** + * 根据Excel注解创建表格头样式 + * + * @param wb 工作薄对象 + * @return 自定义样式列表 + */ + private Map annotationHeaderStyles(Workbook wb, Map styles) + { + Map headerStyles = new HashMap(); + for (Object[] os : fields) + { + Excel excel = (Excel) os[1]; + String key = StringUtils.format("header_{}_{}", excel.headerColor(), excel.headerBackgroundColor()); + if (!headerStyles.containsKey(key)) + { + CellStyle style = wb.createCellStyle(); + style.cloneStyleFrom(styles.get("data")); + style.setAlignment(HorizontalAlignment.CENTER); + style.setVerticalAlignment(VerticalAlignment.CENTER); + style.setFillForegroundColor(excel.headerBackgroundColor().index); + style.setFillPattern(FillPatternType.SOLID_FOREGROUND); + Font headerFont = wb.createFont(); + headerFont.setFontName("Arial"); + headerFont.setFontHeightInPoints((short) 10); + headerFont.setBold(true); + headerFont.setColor(excel.headerColor().index); + style.setFont(headerFont); + headerStyles.put(key, style); + } + } + return headerStyles; + } + + /** + * 根据Excel注解创建表格列样式 + * + * @param wb 工作薄对象 + * @return 自定义样式列表 + */ + private Map annotationDataStyles(Workbook wb) + { + Map styles = new HashMap(); + for (Object[] os : fields) + { + Excel excel = (Excel) os[1]; + String key = StringUtils.format("data_{}_{}_{}", excel.align(), excel.color(), excel.backgroundColor()); + if (!styles.containsKey(key)) + { + CellStyle style = wb.createCellStyle(); + style.setAlignment(excel.align()); + style.setVerticalAlignment(VerticalAlignment.CENTER); + style.setBorderRight(BorderStyle.THIN); + style.setRightBorderColor(IndexedColors.GREY_50_PERCENT.getIndex()); + style.setBorderLeft(BorderStyle.THIN); + style.setLeftBorderColor(IndexedColors.GREY_50_PERCENT.getIndex()); + style.setBorderTop(BorderStyle.THIN); + style.setTopBorderColor(IndexedColors.GREY_50_PERCENT.getIndex()); + style.setBorderBottom(BorderStyle.THIN); + style.setBottomBorderColor(IndexedColors.GREY_50_PERCENT.getIndex()); + style.setFillPattern(FillPatternType.SOLID_FOREGROUND); + style.setFillForegroundColor(excel.backgroundColor().getIndex()); + Font dataFont = wb.createFont(); + dataFont.setFontName("Arial"); + dataFont.setFontHeightInPoints((short) 10); + dataFont.setColor(excel.color().index); + style.setFont(dataFont); + styles.put(key, style); + } + } + return styles; + } + + /** + * 创建单元格 + */ + public Cell createHeadCell(Excel attr, Row row, int column) + { + // 创建列 + Cell cell = row.createCell(column); + // 写入列信息 + cell.setCellValue(attr.name()); + setDataValidation(attr, row, column); + cell.setCellStyle(styles.get(StringUtils.format("header_{}_{}", attr.headerColor(), attr.headerBackgroundColor()))); + if (isSubList()) + { + // 填充默认样式,防止合并单元格样式失效 + sheet.setDefaultColumnStyle(column, styles.get(StringUtils.format("data_{}_{}_{}", attr.align(), attr.color(), attr.backgroundColor()))); + if (attr.needMerge()) + { + sheet.addMergedRegion(new CellRangeAddress(rownum - 1, rownum, column, column)); + } + } + return cell; + } + + /** + * 设置单元格信息 + * + * @param value 单元格值 + * @param attr 注解相关 + * @param cell 单元格信息 + */ + public void setCellVo(Object value, Excel attr, Cell cell) + { + if (Excel.ColumnType.STRING == attr.cellType()) + { + String cellValue = Convert.toStr(value); + // 对于任何以表达式触发字符 =-+@开头的单元格,直接使用tab字符作为前缀,防止CSV注入。 + if (StringUtils.startsWithAny(cellValue, FORMULA_STR)) + { + cellValue = RegExUtils.replaceFirst(cellValue, FORMULA_REGEX_STR, "\t$0"); + } + if (value instanceof Collection && StringUtils.equals("[]", cellValue)) + { + cellValue = StringUtils.EMPTY; + } + cell.setCellValue(StringUtils.isNull(cellValue) ? attr.defaultValue() : cellValue + attr.suffix()); + } + else if (Excel.ColumnType.NUMERIC == attr.cellType()) + { + if (StringUtils.isNotNull(value)) + { + cell.setCellValue(StringUtils.contains(Convert.toStr(value), ".") ? Convert.toDouble(value) : Convert.toInt(value)); + } + } + else if (ColumnType.IMAGE == attr.cellType()) + { + ClientAnchor anchor = new XSSFClientAnchor(0, 0, 0, 0, (short) cell.getColumnIndex(), cell.getRow().getRowNum(), (short) (cell.getColumnIndex() + 1), cell.getRow().getRowNum() + 1); + String imagePath = Convert.toStr(value); + if (StringUtils.isNotEmpty(imagePath)) + { + byte[] data = ImageUtils.getImage(imagePath); + getDrawingPatriarch(cell.getSheet()).createPicture(anchor, + cell.getSheet().getWorkbook().addPicture(data, getImageType(data))); + } + } + } + + /** + * 获取画布 + */ + public static Drawing getDrawingPatriarch(Sheet sheet) + { + if (sheet.getDrawingPatriarch() == null) + { + sheet.createDrawingPatriarch(); + } + return sheet.getDrawingPatriarch(); + } + + /** + * 获取图片类型,设置图片插入类型 + */ + public int getImageType(byte[] value) + { + String type = FileTypeUtils.getFileExtendName(value); + if ("JPG".equalsIgnoreCase(type)) + { + return Workbook.PICTURE_TYPE_JPEG; + } + else if ("PNG".equalsIgnoreCase(type)) + { + return Workbook.PICTURE_TYPE_PNG; + } + return Workbook.PICTURE_TYPE_JPEG; + } + + /** + * 创建表格样式 + */ + public void setDataValidation(Excel attr, Row row, int column) + { + if (attr.name().indexOf("注:") >= 0) + { + sheet.setColumnWidth(column, 6000); + } + else + { + // 设置列宽 + sheet.setColumnWidth(column, (int) ((attr.width() + 0.72) * 256)); + } + if (StringUtils.isNotEmpty(attr.prompt()) || attr.combo().length > 0) + { + if (attr.combo().length > 15 || StringUtils.join(attr.combo()).length() > 255) + { + // 如果下拉数大于15或字符串长度大于255,则使用一个新sheet存储,避免生成的模板下拉值获取不到 + setXSSFValidationWithHidden(sheet, attr.combo(), attr.prompt(), 1, 100, column, column); + } + else + { + // 提示信息或只能选择不能输入的列内容. + setPromptOrValidation(sheet, attr.combo(), attr.prompt(), 1, 100, column, column); + } + } + } + + /** + * 添加单元格 + */ + public Cell addCell(Excel attr, Row row, T vo, Field field, int column) + { + Cell cell = null; + try + { + // 设置行高 + row.setHeight(maxHeight); + // 根据Excel中设置情况决定是否导出,有些情况需要保持为空,希望用户填写这一列. + if (attr.isExport()) + { + // 创建cell + cell = row.createCell(column); + if (isSubListValue(vo) && getListCellValue(vo).size() > 1 && attr.needMerge()) + { + CellRangeAddress cellAddress = new CellRangeAddress(subMergedFirstRowNum, subMergedLastRowNum, column, column); + sheet.addMergedRegion(cellAddress); + } + cell.setCellStyle(styles.get(StringUtils.format("data_{}_{}_{}", attr.align(), attr.color(), attr.backgroundColor()))); + + // 用于读取对象中的属性 + Object value = getTargetValue(vo, field, attr); + String dateFormat = attr.dateFormat(); + String readConverterExp = attr.readConverterExp(); + String separator = attr.separator(); + String dictType = attr.dictType(); + if (StringUtils.isNotEmpty(dateFormat) && StringUtils.isNotNull(value)) + { + cell.setCellValue(parseDateToStr(dateFormat, value)); + } + else if (StringUtils.isNotEmpty(readConverterExp) && StringUtils.isNotNull(value)) + { + cell.setCellValue(convertByExp(Convert.toStr(value), readConverterExp, separator)); + } + else if (StringUtils.isNotEmpty(dictType) && StringUtils.isNotNull(value)) + { + if (!sysDictMap.containsKey(dictType + value)) + { + String lable = convertDictByExp(Convert.toStr(value), dictType, separator); + sysDictMap.put(dictType + value, lable); + } + cell.setCellValue(sysDictMap.get(dictType + value)); + } + else if (value instanceof BigDecimal && -1 != attr.scale()) + { + cell.setCellValue((((BigDecimal) value).setScale(attr.scale(), attr.roundingMode())).doubleValue()); + } + else if (!attr.handler().equals(ExcelHandlerAdapter.class)) + { + cell.setCellValue(dataFormatHandlerAdapter(value, attr, cell)); + } + else + { + // 设置列类型 + setCellVo(value, attr, cell); + } + addStatisticsData(column, Convert.toStr(value), attr); + } + } + catch (Exception e) + { + log.error("导出Excel失败{}", e); + } + return cell; + } + + /** + * 设置 POI XSSFSheet 单元格提示或选择框 + * + * @param sheet 表单 + * @param textlist 下拉框显示的内容 + * @param promptContent 提示内容 + * @param firstRow 开始行 + * @param endRow 结束行 + * @param firstCol 开始列 + * @param endCol 结束列 + */ + public void setPromptOrValidation(Sheet sheet, String[] textlist, String promptContent, int firstRow, int endRow, + int firstCol, int endCol) + { + DataValidationHelper helper = sheet.getDataValidationHelper(); + DataValidationConstraint constraint = textlist.length > 0 ? helper.createExplicitListConstraint(textlist) : helper.createCustomConstraint("DD1"); + CellRangeAddressList regions = new CellRangeAddressList(firstRow, endRow, firstCol, endCol); + DataValidation dataValidation = helper.createValidation(constraint, regions); + if (StringUtils.isNotEmpty(promptContent)) + { + // 如果设置了提示信息则鼠标放上去提示 + dataValidation.createPromptBox("", promptContent); + dataValidation.setShowPromptBox(true); + } + // 处理Excel兼容性问题 + if (dataValidation instanceof XSSFDataValidation) + { + dataValidation.setSuppressDropDownArrow(true); + dataValidation.setShowErrorBox(true); + } + else + { + dataValidation.setSuppressDropDownArrow(false); + } + sheet.addValidationData(dataValidation); + } + + /** + * 设置某些列的值只能输入预制的数据,显示下拉框(兼容超出一定数量的下拉框). + * + * @param sheet 要设置的sheet. + * @param textlist 下拉框显示的内容 + * @param promptContent 提示内容 + * @param firstRow 开始行 + * @param endRow 结束行 + * @param firstCol 开始列 + * @param endCol 结束列 + */ + public void setXSSFValidationWithHidden(Sheet sheet, String[] textlist, String promptContent, int firstRow, int endRow, int firstCol, int endCol) + { + String hideSheetName = "combo_" + firstCol + "_" + endCol; + Sheet hideSheet = wb.createSheet(hideSheetName); // 用于存储 下拉菜单数据 + for (int i = 0; i < textlist.length; i++) + { + hideSheet.createRow(i).createCell(0).setCellValue(textlist[i]); + } + // 创建名称,可被其他单元格引用 + Name name = wb.createName(); + name.setNameName(hideSheetName + "_data"); + name.setRefersToFormula(hideSheetName + "!$A$1:$A$" + textlist.length); + DataValidationHelper helper = sheet.getDataValidationHelper(); + // 加载下拉列表内容 + DataValidationConstraint constraint = helper.createFormulaListConstraint(hideSheetName + "_data"); + // 设置数据有效性加载在哪个单元格上,四个参数分别是:起始行、终止行、起始列、终止列 + CellRangeAddressList regions = new CellRangeAddressList(firstRow, endRow, firstCol, endCol); + // 数据有效性对象 + DataValidation dataValidation = helper.createValidation(constraint, regions); + if (StringUtils.isNotEmpty(promptContent)) + { + // 如果设置了提示信息则鼠标放上去提示 + dataValidation.createPromptBox("", promptContent); + dataValidation.setShowPromptBox(true); + } + // 处理Excel兼容性问题 + if (dataValidation instanceof XSSFDataValidation) + { + dataValidation.setSuppressDropDownArrow(true); + dataValidation.setShowErrorBox(true); + } + else + { + dataValidation.setSuppressDropDownArrow(false); + } + + sheet.addValidationData(dataValidation); + // 设置hiddenSheet隐藏 + wb.setSheetHidden(wb.getSheetIndex(hideSheet), true); + } + + /** + * 解析导出值 0=男,1=女,2=未知 + * + * @param propertyValue 参数值 + * @param converterExp 翻译注解 + * @param separator 分隔符 + * @return 解析后值 + */ + public static String convertByExp(String propertyValue, String converterExp, String separator) + { + StringBuilder propertyString = new StringBuilder(); + String[] convertSource = converterExp.split(","); + for (String item : convertSource) + { + String[] itemArray = item.split("="); + if (StringUtils.containsAny(propertyValue, separator)) + { + for (String value : propertyValue.split(separator)) + { + if (itemArray[0].equals(value)) + { + propertyString.append(itemArray[1] + separator); + break; + } + } + } + else + { + if (itemArray[0].equals(propertyValue)) + { + return itemArray[1]; + } + } + } + return StringUtils.stripEnd(propertyString.toString(), separator); + } + + /** + * 反向解析值 男=0,女=1,未知=2 + * + * @param propertyValue 参数值 + * @param converterExp 翻译注解 + * @param separator 分隔符 + * @return 解析后值 + */ + public static String reverseByExp(String propertyValue, String converterExp, String separator) + { + StringBuilder propertyString = new StringBuilder(); + String[] convertSource = converterExp.split(","); + for (String item : convertSource) + { + String[] itemArray = item.split("="); + if (StringUtils.containsAny(propertyValue, separator)) + { + for (String value : propertyValue.split(separator)) + { + if (itemArray[1].equals(value)) + { + propertyString.append(itemArray[0] + separator); + break; + } + } + } + else + { + if (itemArray[1].equals(propertyValue)) + { + return itemArray[0]; + } + } + } + return StringUtils.stripEnd(propertyString.toString(), separator); + } + + /** + * 解析字典值 + * + * @param dictValue 字典值 + * @param dictType 字典类型 + * @param separator 分隔符 + * @return 字典标签 + */ + public static String convertDictByExp(String dictValue, String dictType, String separator) + { + return DictUtils.getDictLabel(dictType, dictValue, separator); + } + + /** + * 反向解析值字典值 + * + * @param dictLabel 字典标签 + * @param dictType 字典类型 + * @param separator 分隔符 + * @return 字典值 + */ + public static String reverseDictByExp(String dictLabel, String dictType, String separator) + { + return DictUtils.getDictValue(dictType, dictLabel, separator); + } + + /** + * 数据处理器 + * + * @param value 数据值 + * @param excel 数据注解 + * @return + */ + public String dataFormatHandlerAdapter(Object value, Excel excel, Cell cell) + { + try + { + Object instance = excel.handler().newInstance(); + Method formatMethod = excel.handler().getMethod("format", new Class[] { Object.class, String[].class, Cell.class, Workbook.class }); + value = formatMethod.invoke(instance, value, excel.args(), cell, this.wb); + } + catch (Exception e) + { + log.error("不能格式化数据 " + excel.handler(), e.getMessage()); + } + return Convert.toStr(value); + } + + /** + * 合计统计信息 + */ + private void addStatisticsData(Integer index, String text, Excel entity) + { + if (entity != null && entity.isStatistics()) + { + Double temp = 0D; + if (!statistics.containsKey(index)) + { + statistics.put(index, temp); + } + try + { + temp = Double.valueOf(text); + } + catch (NumberFormatException e) + { + } + statistics.put(index, statistics.get(index) + temp); + } + } + + /** + * 创建统计行 + */ + public void addStatisticsRow() + { + if (statistics.size() > 0) + { + Row row = sheet.createRow(sheet.getLastRowNum() + 1); + Set keys = statistics.keySet(); + Cell cell = row.createCell(0); + cell.setCellStyle(styles.get("total")); + cell.setCellValue("合计"); + + for (Integer key : keys) + { + cell = row.createCell(key); + cell.setCellStyle(styles.get("total")); + cell.setCellValue(DOUBLE_FORMAT.format(statistics.get(key))); + } + statistics.clear(); + } + } + + /** + * 编码文件名 + */ + public String encodingFilename(String filename) + { + filename = UUID.randomUUID() + "_" + filename + ".xlsx"; + return filename; + } + + /** + * 获取下载路径 + * + * @param filename 文件名称 + */ + public String getAbsoluteFile(String filename) + { + String downloadPath = AppConfig.getDownloadPath() + filename; + File desc = new File(downloadPath); + if (!desc.getParentFile().exists()) + { + desc.getParentFile().mkdirs(); + } + return downloadPath; + } + + /** + * 获取bean中的属性值 + * + * @param vo 实体对象 + * @param field 字段 + * @param excel 注解 + * @return 最终的属性值 + * @throws Exception + */ + private Object getTargetValue(T vo, Field field, Excel excel) throws Exception + { + Object o = field.get(vo); + if (StringUtils.isNotEmpty(excel.targetAttr())) + { + String target = excel.targetAttr(); + if (target.contains(".")) + { + String[] targets = target.split("[.]"); + for (String name : targets) + { + o = getValue(o, name); + } + } + else + { + o = getValue(o, target); + } + } + return o; + } + + /** + * 以类的属性的get方法方法形式获取值 + * + * @param o + * @param name + * @return value + * @throws Exception + */ + private Object getValue(Object o, String name) throws Exception + { + if (StringUtils.isNotNull(o) && StringUtils.isNotEmpty(name)) + { + Class clazz = o.getClass(); + Field field = clazz.getDeclaredField(name); + field.setAccessible(true); + o = field.get(o); + } + return o; + } + + /** + * 得到所有定义字段 + */ + private void createExcelField() + { + this.fields = getFields(); + this.fields = this.fields.stream().sorted(Comparator.comparing(objects -> ((Excel) objects[1]).sort())).collect(Collectors.toList()); + this.maxHeight = getRowHeight(); + } + + /** + * 获取字段注解信息 + */ + public List getFields() + { + List fields = new ArrayList(); + List tempFields = new ArrayList<>(); + tempFields.addAll(Arrays.asList(clazz.getSuperclass().getDeclaredFields())); + tempFields.addAll(Arrays.asList(clazz.getDeclaredFields())); + for (Field field : tempFields) + { + if (!ArrayUtils.contains(this.excludeFields, field.getName())) + { + // 单注解 + if (field.isAnnotationPresent(Excel.class)) + { + Excel attr = field.getAnnotation(Excel.class); + if (attr != null && (attr.type() == Type.ALL || attr.type() == type)) + { + field.setAccessible(true); + fields.add(new Object[] { field, attr }); + } + if (Collection.class.isAssignableFrom(field.getType())) + { + subMethod = getSubMethod(field.getName(), clazz); + ParameterizedType pt = (ParameterizedType) field.getGenericType(); + Class subClass = (Class) pt.getActualTypeArguments()[0]; + this.subFields = FieldUtils.getFieldsListWithAnnotation(subClass, Excel.class); + } + } + + // 多注解 + if (field.isAnnotationPresent(Excels.class)) + { + Excels attrs = field.getAnnotation(Excels.class); + Excel[] excels = attrs.value(); + for (Excel attr : excels) + { + if (!ArrayUtils.contains(this.excludeFields, field.getName() + "." + attr.targetAttr()) + && (attr != null && (attr.type() == Type.ALL || attr.type() == type))) + { + field.setAccessible(true); + fields.add(new Object[] { field, attr }); + } + } + } + } + } + return fields; + } + + /** + * 根据注解获取最大行高 + */ + public short getRowHeight() + { + double maxHeight = 0; + for (Object[] os : this.fields) + { + Excel excel = (Excel) os[1]; + maxHeight = Math.max(maxHeight, excel.height()); + } + return (short) (maxHeight * 20); + } + + /** + * 创建一个工作簿 + */ + public void createWorkbook() + { + this.wb = new SXSSFWorkbook(500); + this.sheet = wb.createSheet(); + wb.setSheetName(0, sheetName); + this.styles = createStyles(wb); + } + + /** + * 创建工作表 + * + * @param sheetNo sheet数量 + * @param index 序号 + */ + public void createSheet(int sheetNo, int index) + { + // 设置工作表的名称. + if (sheetNo > 1 && index > 0) + { + this.sheet = wb.createSheet(); + this.createTitle(); + wb.setSheetName(index, sheetName + index); + } + } + + /** + * 获取单元格值 + * + * @param row 获取的行 + * @param column 获取单元格列号 + * @return 单元格值 + */ + public Object getCellValue(Row row, int column) + { + if (row == null) + { + return row; + } + Object val = ""; + try + { + Cell cell = row.getCell(column); + if (StringUtils.isNotNull(cell)) + { + if (cell.getCellType() == CellType.NUMERIC || cell.getCellType() == CellType.FORMULA) + { + val = cell.getNumericCellValue(); + if (DateUtil.isCellDateFormatted(cell)) + { + val = DateUtil.getJavaDate((Double) val); // POI Excel 日期格式转换 + } + else + { + if ((Double) val % 1 != 0) + { + val = new BigDecimal(val.toString()); + } + else + { + val = new DecimalFormat("0").format(val); + } + } + } + else if (cell.getCellType() == CellType.STRING) + { + val = cell.getStringCellValue(); + } + else if (cell.getCellType() == CellType.BOOLEAN) + { + val = cell.getBooleanCellValue(); + } + else if (cell.getCellType() == CellType.ERROR) + { + val = cell.getErrorCellValue(); + } + + } + } + catch (Exception e) + { + return val; + } + return val; + } + + /** + * 判断是否是空行 + * + * @param row 判断的行 + * @return + */ + private boolean isRowEmpty(Row row) + { + if (row == null) + { + return true; + } + for (int i = row.getFirstCellNum(); i < row.getLastCellNum(); i++) + { + Cell cell = row.getCell(i); + if (cell != null && cell.getCellType() != CellType.BLANK) + { + return false; + } + } + return true; + } + + /** + * 获取Excel2003图片 + * + * @param sheet 当前sheet对象 + * @param workbook 工作簿对象 + * @return Map key:图片单元格索引(1_1)String,value:图片流PictureData + */ + public static Map getSheetPictures03(HSSFSheet sheet, HSSFWorkbook workbook) + { + Map sheetIndexPicMap = new HashMap(); + List pictures = workbook.getAllPictures(); + if (!pictures.isEmpty()) + { + for (HSSFShape shape : sheet.getDrawingPatriarch().getChildren()) + { + HSSFClientAnchor anchor = (HSSFClientAnchor) shape.getAnchor(); + if (shape instanceof HSSFPicture) + { + HSSFPicture pic = (HSSFPicture) shape; + int pictureIndex = pic.getPictureIndex() - 1; + HSSFPictureData picData = pictures.get(pictureIndex); + String picIndex = anchor.getRow1() + "_" + anchor.getCol1(); + sheetIndexPicMap.put(picIndex, picData); + } + } + return sheetIndexPicMap; + } + else + { + return sheetIndexPicMap; + } + } + + /** + * 获取Excel2007图片 + * + * @param sheet 当前sheet对象 + * @param workbook 工作簿对象 + * @return Map key:图片单元格索引(1_1)String,value:图片流PictureData + */ + public static Map getSheetPictures07(XSSFSheet sheet, XSSFWorkbook workbook) + { + Map sheetIndexPicMap = new HashMap(); + for (POIXMLDocumentPart dr : sheet.getRelations()) + { + if (dr instanceof XSSFDrawing) + { + XSSFDrawing drawing = (XSSFDrawing) dr; + List shapes = drawing.getShapes(); + for (XSSFShape shape : shapes) + { + if (shape instanceof XSSFPicture) + { + XSSFPicture pic = (XSSFPicture) shape; + XSSFClientAnchor anchor = pic.getPreferredSize(); + CTMarker ctMarker = anchor.getFrom(); + String picIndex = ctMarker.getRow() + "_" + ctMarker.getCol(); + sheetIndexPicMap.put(picIndex, pic.getPictureData()); + } + } + } + } + return sheetIndexPicMap; + } + + /** + * 格式化不同类型的日期对象 + * + * @param dateFormat 日期格式 + * @param val 被格式化的日期对象 + * @return 格式化后的日期字符 + */ + public String parseDateToStr(String dateFormat, Object val) + { + if (val == null) + { + return ""; + } + String str; + if (val instanceof Date) + { + str = DateUtils.parseDateToStr(dateFormat, (Date) val); + } + else if (val instanceof LocalDateTime) + { + str = DateUtils.parseDateToStr(dateFormat, DateUtils.toDate((LocalDateTime) val)); + } + else if (val instanceof LocalDate) + { + str = DateUtils.parseDateToStr(dateFormat, DateUtils.toDate((LocalDate) val)); + } + else + { + str = val.toString(); + } + return str; + } + + /** + * 是否有对象的子列表 + */ + public boolean isSubList() + { + return StringUtils.isNotNull(subFields) && subFields.size() > 0; + } + + /** + * 是否有对象的子列表,集合不为空 + */ + public boolean isSubListValue(T vo) + { + return StringUtils.isNotNull(subFields) && subFields.size() > 0 && StringUtils.isNotNull(getListCellValue(vo)) && getListCellValue(vo).size() > 0; + } + + /** + * 获取集合的值 + */ + public Collection getListCellValue(Object obj) + { + Object value; + try + { + value = subMethod.invoke(obj, new Object[] {}); + } + catch (Exception e) + { + return new ArrayList(); + } + return (Collection) value; + } + + /** + * 获取对象的子列表方法 + * + * @param name 名称 + * @param pojoClass 类对象 + * @return 子列表方法 + */ + public Method getSubMethod(String name, Class pojoClass) + { + StringBuffer getMethodName = new StringBuffer("get"); + getMethodName.append(name.substring(0, 1).toUpperCase()); + getMethodName.append(name.substring(1)); + Method method = null; + try + { + method = pojoClass.getMethod(getMethodName.toString(), new Class[] {}); + } + catch (Exception e) + { + log.error("获取对象异常{}", e.getMessage()); + } + return method; + } +} diff --git a/common/src/main/java/com/yyy/common/utils/reflect/ReflectUtils.java b/common/src/main/java/com/yyy/common/utils/reflect/ReflectUtils.java new file mode 100644 index 0000000..27c4a17 --- /dev/null +++ b/common/src/main/java/com/yyy/common/utils/reflect/ReflectUtils.java @@ -0,0 +1,405 @@ +package com.yyy.common.utils.reflect; + +import com.yyy.common.core.text.Convert; +import com.yyy.common.utils.common.DateUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.Validate; +import org.apache.poi.ss.usermodel.DateUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.lang.reflect.*; +import java.util.Date; + +/** + * 反射工具类. 提供调用getter/setter方法, 访问私有变量, 调用私有方法, 获取泛型类型Class, 被AOP过的真实类等工具函数. + * + */ +@SuppressWarnings("rawtypes") +public class ReflectUtils +{ + private static final String SETTER_PREFIX = "set"; + + private static final String GETTER_PREFIX = "get"; + + private static final String CGLIB_CLASS_SEPARATOR = "$$"; + + private static Logger logger = LoggerFactory.getLogger(ReflectUtils.class); + + /** + * 调用Getter方法. + * 支持多级,如:对象名.对象名.方法 + */ + @SuppressWarnings("unchecked") + public static E invokeGetter(Object obj, String propertyName) + { + Object object = obj; + for (String name : StringUtils.split(propertyName, ".")) + { + String getterMethodName = GETTER_PREFIX + StringUtils.capitalize(name); + object = invokeMethod(object, getterMethodName, new Class[] {}, new Object[] {}); + } + return (E) object; + } + + /** + * 调用Setter方法, 仅匹配方法名。 + * 支持多级,如:对象名.对象名.方法 + */ + public static void invokeSetter(Object obj, String propertyName, E value) + { + Object object = obj; + String[] names = StringUtils.split(propertyName, "."); + for (int i = 0; i < names.length; i++) + { + if (i < names.length - 1) + { + String getterMethodName = GETTER_PREFIX + StringUtils.capitalize(names[i]); + object = invokeMethod(object, getterMethodName, new Class[] {}, new Object[] {}); + } + else + { + String setterMethodName = SETTER_PREFIX + StringUtils.capitalize(names[i]); + invokeMethodByName(object, setterMethodName, new Object[] { value }); + } + } + } + + /** + * 直接读取对象属性值, 无视private/protected修饰符, 不经过getter函数. + */ + @SuppressWarnings("unchecked") + public static E getFieldValue(final Object obj, final String fieldName) + { + Field field = getAccessibleField(obj, fieldName); + if (field == null) + { + logger.debug("在 [" + obj.getClass() + "] 中,没有找到 [" + fieldName + "] 字段 "); + return null; + } + E result = null; + try + { + result = (E) field.get(obj); + } + catch (IllegalAccessException e) + { + logger.error("不可能抛出的异常{}", e.getMessage()); + } + return result; + } + + /** + * 直接设置对象属性值, 无视private/protected修饰符, 不经过setter函数. + */ + public static void setFieldValue(final Object obj, final String fieldName, final E value) + { + Field field = getAccessibleField(obj, fieldName); + if (field == null) + { + // throw new IllegalArgumentException("在 [" + obj.getClass() + "] 中,没有找到 [" + fieldName + "] 字段 "); + logger.debug("在 [" + obj.getClass() + "] 中,没有找到 [" + fieldName + "] 字段 "); + return; + } + try + { + field.set(obj, value); + } + catch (IllegalAccessException e) + { + logger.error("不可能抛出的异常: {}", e.getMessage()); + } + } + + /** + * 直接调用对象方法, 无视private/protected修饰符. + * 用于一次性调用的情况,否则应使用getAccessibleMethod()函数获得Method后反复调用. + * 同时匹配方法名+参数类型, + */ + @SuppressWarnings("unchecked") + public static E invokeMethod(final Object obj, final String methodName, final Class[] parameterTypes, + final Object[] args) + { + if (obj == null || methodName == null) + { + return null; + } + Method method = getAccessibleMethod(obj, methodName, parameterTypes); + if (method == null) + { + logger.debug("在 [" + obj.getClass() + "] 中,没有找到 [" + methodName + "] 方法 "); + return null; + } + try + { + return (E) method.invoke(obj, args); + } + catch (Exception e) + { + String msg = "method: " + method + ", obj: " + obj + ", args: " + args + ""; + throw convertReflectionExceptionToUnchecked(msg, e); + } + } + + /** + * 直接调用对象方法, 无视private/protected修饰符, + * 用于一次性调用的情况,否则应使用getAccessibleMethodByName()函数获得Method后反复调用. + * 只匹配函数名,如果有多个同名函数调用第一个。 + */ + @SuppressWarnings("unchecked") + public static E invokeMethodByName(final Object obj, final String methodName, final Object[] args) + { + Method method = getAccessibleMethodByName(obj, methodName, args.length); + if (method == null) + { + // 如果为空不报错,直接返回空。 + logger.debug("在 [" + obj.getClass() + "] 中,没有找到 [" + methodName + "] 方法 "); + return null; + } + try + { + // 类型转换(将参数数据类型转换为目标方法参数类型) + Class[] cs = method.getParameterTypes(); + for (int i = 0; i < cs.length; i++) + { + if (args[i] != null && !args[i].getClass().equals(cs[i])) + { + if (cs[i] == String.class) + { + args[i] = Convert.toStr(args[i]); + if (StringUtils.endsWith((String) args[i], ".0")) + { + args[i] = StringUtils.substringBefore((String) args[i], ".0"); + } + } + else if (cs[i] == Integer.class) + { + args[i] = Convert.toInt(args[i]); + } + else if (cs[i] == Long.class) + { + args[i] = Convert.toLong(args[i]); + } + else if (cs[i] == Double.class) + { + args[i] = Convert.toDouble(args[i]); + } + else if (cs[i] == Float.class) + { + args[i] = Convert.toFloat(args[i]); + } + else if (cs[i] == Date.class) + { + if (args[i] instanceof String) + { + args[i] = DateUtils.parseDate(args[i]); + } + else + { + args[i] = DateUtil.getJavaDate((Double) args[i]); + } + } + else if (cs[i] == boolean.class || cs[i] == Boolean.class) + { + args[i] = Convert.toBool(args[i]); + } + } + } + return (E) method.invoke(obj, args); + } + catch (Exception e) + { + String msg = "method: " + method + ", obj: " + obj + ", args: " + args + ""; + throw convertReflectionExceptionToUnchecked(msg, e); + } + } + + /** + * 循环向上转型, 获取对象的DeclaredField, 并强制设置为可访问. + * 如向上转型到Object仍无法找到, 返回null. + */ + public static Field getAccessibleField(final Object obj, final String fieldName) + { + // 为空不报错。直接返回 null + if (obj == null) + { + return null; + } + Validate.notBlank(fieldName, "fieldName can't be blank"); + for (Class superClass = obj.getClass(); superClass != Object.class; superClass = superClass.getSuperclass()) + { + try + { + Field field = superClass.getDeclaredField(fieldName); + makeAccessible(field); + return field; + } + catch (NoSuchFieldException e) + { + continue; + } + } + return null; + } + + /** + * 循环向上转型, 获取对象的DeclaredMethod,并强制设置为可访问. + * 如向上转型到Object仍无法找到, 返回null. + * 匹配函数名+参数类型。 + * 用于方法需要被多次调用的情况. 先使用本函数先取得Method,然后调用Method.invoke(Object obj, Object... args) + */ + public static Method getAccessibleMethod(final Object obj, final String methodName, + final Class... parameterTypes) + { + // 为空不报错。直接返回 null + if (obj == null) + { + return null; + } + Validate.notBlank(methodName, "methodName can't be blank"); + for (Class searchType = obj.getClass(); searchType != Object.class; searchType = searchType.getSuperclass()) + { + try + { + Method method = searchType.getDeclaredMethod(methodName, parameterTypes); + makeAccessible(method); + return method; + } + catch (NoSuchMethodException e) + { + continue; + } + } + return null; + } + + /** + * 循环向上转型, 获取对象的DeclaredMethod,并强制设置为可访问. + * 如向上转型到Object仍无法找到, 返回null. + * 只匹配函数名。 + * 用于方法需要被多次调用的情况. 先使用本函数先取得Method,然后调用Method.invoke(Object obj, Object... args) + */ + public static Method getAccessibleMethodByName(final Object obj, final String methodName, int argsNum) + { + // 为空不报错。直接返回 null + if (obj == null) + { + return null; + } + Validate.notBlank(methodName, "methodName can't be blank"); + for (Class searchType = obj.getClass(); searchType != Object.class; searchType = searchType.getSuperclass()) + { + Method[] methods = searchType.getDeclaredMethods(); + for (Method method : methods) + { + if (method.getName().equals(methodName) && method.getParameterTypes().length == argsNum) + { + makeAccessible(method); + return method; + } + } + } + return null; + } + + /** + * 改变private/protected的方法为public,尽量不调用实际改动的语句,避免JDK的SecurityManager抱怨。 + */ + public static void makeAccessible(Method method) + { + if ((!Modifier.isPublic(method.getModifiers()) || !Modifier.isPublic(method.getDeclaringClass().getModifiers())) + && !method.isAccessible()) + { + method.setAccessible(true); + } + } + + /** + * 改变private/protected的成员变量为public,尽量不调用实际改动的语句,避免JDK的SecurityManager抱怨。 + */ + public static void makeAccessible(Field field) + { + if ((!Modifier.isPublic(field.getModifiers()) || !Modifier.isPublic(field.getDeclaringClass().getModifiers()) + || Modifier.isFinal(field.getModifiers())) && !field.isAccessible()) + { + field.setAccessible(true); + } + } + + /** + * 通过反射, 获得Class定义中声明的泛型参数的类型, 注意泛型必须定义在父类处 + * 如无法找到, 返回Object.class. + */ + @SuppressWarnings("unchecked") + public static Class getClassGenricType(final Class clazz) + { + return getClassGenricType(clazz, 0); + } + + /** + * 通过反射, 获得Class定义中声明的父类的泛型参数的类型. + * 如无法找到, 返回Object.class. + */ + public static Class getClassGenricType(final Class clazz, final int index) + { + Type genType = clazz.getGenericSuperclass(); + + if (!(genType instanceof ParameterizedType)) + { + logger.debug(clazz.getSimpleName() + "'s superclass not ParameterizedType"); + return Object.class; + } + + Type[] params = ((ParameterizedType) genType).getActualTypeArguments(); + + if (index >= params.length || index < 0) + { + logger.debug("Index: " + index + ", Size of " + clazz.getSimpleName() + "'s Parameterized Type: " + + params.length); + return Object.class; + } + if (!(params[index] instanceof Class)) + { + logger.debug(clazz.getSimpleName() + " not set the actual class on superclass generic parameter"); + return Object.class; + } + + return (Class) params[index]; + } + + public static Class getUserClass(Object instance) + { + if (instance == null) + { + throw new RuntimeException("Instance must not be null"); + } + Class clazz = instance.getClass(); + if (clazz != null && clazz.getName().contains(CGLIB_CLASS_SEPARATOR)) + { + Class superClass = clazz.getSuperclass(); + if (superClass != null && !Object.class.equals(superClass)) + { + return superClass; + } + } + return clazz; + + } + + /** + * 将反射时的checked exception转换为unchecked exception. + */ + public static RuntimeException convertReflectionExceptionToUnchecked(String msg, Exception e) + { + if (e instanceof IllegalAccessException || e instanceof IllegalArgumentException + || e instanceof NoSuchMethodException) + { + return new IllegalArgumentException(msg, e); + } + else if (e instanceof InvocationTargetException) + { + return new RuntimeException(msg, ((InvocationTargetException) e).getTargetException()); + } + return new RuntimeException(msg, e); + } +} diff --git a/common/src/main/java/com/yyy/common/utils/security/JwtUtils.java b/common/src/main/java/com/yyy/common/utils/security/JwtUtils.java new file mode 100644 index 0000000..9593910 --- /dev/null +++ b/common/src/main/java/com/yyy/common/utils/security/JwtUtils.java @@ -0,0 +1,58 @@ +package com.yyy.common.utils.security; + +import com.auth0.jwt.JWT; +import com.auth0.jwt.algorithms.Algorithm; +import com.auth0.jwt.interfaces.Claim; +import com.auth0.jwt.interfaces.DecodedJWT; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +import java.util.HashMap; +import java.util.Map; + +/** + * @Author: fy + * @Date: 2024/03/22 + * @Description:生成token + */ +@Component +public class JwtUtils { + + @Value("${jwt.config.secretKey}") + private String secretKey; + /** + * 加密token. + */ + public String getToken(Long uid,String sid, String clientVersion, String clientType) { + //这个是放到负载payLoad 里面,魔法值可以使用常量类进行封装. + String token = JWT + .create() + .withClaim("uid" ,uid) + .withClaim("sid",sid) + .withClaim("clientVersion", clientVersion) + .withClaim("clientType", clientType) + .withClaim("timeStamp", System.currentTimeMillis()) + .sign(Algorithm.HMAC256(secretKey)); + return token; + } + /** + * 解析token. + */ + public Map parseToken(String token) { + HashMap map = new HashMap(); + DecodedJWT decodedjwt = JWT.require(Algorithm.HMAC256(secretKey)) + .build().verify(token); + Claim uid = decodedjwt.getClaim("uid"); + Claim sid = decodedjwt.getClaim("sid"); + Claim clientVersion = decodedjwt.getClaim("clientVersion"); + Claim clientType = decodedjwt.getClaim("clientType"); + Claim timeStamp = decodedjwt.getClaim("timeStamp"); + + map.put("uid", uid.asLong().toString()); + map.put("sid", sid.asString()); + map.put("clientVersion", clientVersion.asString()); + map.put("clientType", clientType.asString()); + map.put("timeStamp", timeStamp.asLong().toString()); + return map; + } +} diff --git a/common/src/main/java/com/yyy/common/utils/security/SessionHolder.java b/common/src/main/java/com/yyy/common/utils/security/SessionHolder.java new file mode 100644 index 0000000..38bdac9 --- /dev/null +++ b/common/src/main/java/com/yyy/common/utils/security/SessionHolder.java @@ -0,0 +1,22 @@ +package com.yyy.common.utils.security; + +/** + * @Author: fy + * @Date: 2024/03/22 + * @Description: + */ +public class SessionHolder { + private static final ThreadLocal USER_SESSION = new ThreadLocal<>(); + + public static void setUserSession(String userSession) { + USER_SESSION.set(userSession); + } + + public static String getUserSession() { + return USER_SESSION.get(); + } + + public static void clearSession() { + USER_SESSION.remove(); + } +} diff --git a/common/src/main/java/com/yyy/common/utils/spring/SpringUtils.java b/common/src/main/java/com/yyy/common/utils/spring/SpringUtils.java new file mode 100644 index 0000000..3e2ec66 --- /dev/null +++ b/common/src/main/java/com/yyy/common/utils/spring/SpringUtils.java @@ -0,0 +1,157 @@ +package com.yyy.common.utils.spring; + +import com.yyy.common.utils.common.StringUtils; +import org.springframework.aop.framework.AopContext; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.NoSuchBeanDefinitionException; +import org.springframework.beans.factory.config.BeanFactoryPostProcessor; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.stereotype.Component; + +/** + * spring工具类 方便在非spring管理环境中获取bean + */ +@Component +public final class SpringUtils implements BeanFactoryPostProcessor, ApplicationContextAware +{ + /** Spring应用上下文环境 */ + private static ConfigurableListableBeanFactory beanFactory; + + private static ApplicationContext applicationContext; + + @Override + public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException + { + SpringUtils.beanFactory = beanFactory; + } + + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException + { + SpringUtils.applicationContext = applicationContext; + } + + /** + * 获取对象 + * + * @param name + * @return Object 一个以所给名字注册的bean的实例 + * @throws BeansException + * + */ + @SuppressWarnings("unchecked") + public static T getBean(String name) throws BeansException + { + return (T) beanFactory.getBean(name); + } + + /** + * 获取类型为requiredType的对象 + * + * @param clz + * @return + * @throws BeansException + * + */ + public static T getBean(Class clz) throws BeansException + { + T result = (T) beanFactory.getBean(clz); + return result; + } + + /** + * 如果BeanFactory包含一个与所给名称匹配的bean定义,则返回true + * + * @param name + * @return boolean + */ + public static boolean containsBean(String name) + { + return beanFactory.containsBean(name); + } + + /** + * 判断以给定名字注册的bean定义是一个singleton还是一个prototype。 如果与给定名字相应的bean定义没有被找到,将会抛出一个异常(NoSuchBeanDefinitionException) + * + * @param name + * @return boolean + * @throws NoSuchBeanDefinitionException + * + */ + public static boolean isSingleton(String name) throws NoSuchBeanDefinitionException + { + return beanFactory.isSingleton(name); + } + + /** + * @param name + * @return Class 注册对象的类型 + * @throws NoSuchBeanDefinitionException + * + */ + public static Class getType(String name) throws NoSuchBeanDefinitionException + { + return beanFactory.getType(name); + } + + /** + * 如果给定的bean名字在bean定义中有别名,则返回这些别名 + * + * @param name + * @return + * @throws NoSuchBeanDefinitionException + * + */ + public static String[] getAliases(String name) throws NoSuchBeanDefinitionException + { + return beanFactory.getAliases(name); + } + + /** + * 获取aop代理对象 + * + * @param invoker + * @return + */ + @SuppressWarnings("unchecked") + public static T getAopProxy(T invoker) + { + return (T) AopContext.currentProxy(); + } + + /** + * 获取当前的环境配置,无配置返回null + * + * @return 当前的环境配置 + */ + public static String[] getActiveProfiles() + { + return applicationContext.getEnvironment().getActiveProfiles(); + } + + /** + * 获取当前的环境配置,当有多个环境配置时,只获取第一个 + * + * @return 当前的环境配置 + */ + public static String getActiveProfile() + { + final String[] activeProfiles = getActiveProfiles(); + return StringUtils.isNotEmpty(activeProfiles) ? activeProfiles[0] : null; + } + + /** + * 获取配置文件中的值 + * + * @param key 配置文件的key + * @return 当前的配置文件的值 + * + */ + public static String getRequiredProperty(String key) + { + return applicationContext.getEnvironment().getRequiredProperty(key); + } + +} diff --git a/common/src/main/java/com/yyy/common/utils/sql/SqlUtil.java b/common/src/main/java/com/yyy/common/utils/sql/SqlUtil.java new file mode 100644 index 0000000..b2baa0b --- /dev/null +++ b/common/src/main/java/com/yyy/common/utils/sql/SqlUtil.java @@ -0,0 +1,76 @@ +package com.yyy.common.utils.sql; + +import com.yyy.common.core.domain.Result; +import com.yyy.common.exception.base.BaseException; +import com.yyy.common.utils.common.StringUtils; + +/** + * @Author: fy + * @Date: 2024/03/22 + * @Description:sql操作工具类 + */ +public class SqlUtil +{ + /** + * 定义常用的 sql关键字 + */ + public static String SQL_REGEX = "and |extractvalue|updatexml|exec |insert |select |delete |update |drop |count |chr |mid |master |truncate |char |declare |or |+|user()"; + + /** + * 仅支持字母、数字、下划线、空格、逗号、小数点(支持多个字段排序) + */ + public static String SQL_PATTERN = "[a-zA-Z0-9_\\ \\,\\.]+"; + + /** + * 限制orderBy最大长度 + */ + private static final int ORDER_BY_MAX_LENGTH = 500; + + /** + * 检查字符,防止注入绕过 + */ + public static String escapeOrderBySql(String value) + { + if (StringUtils.isNotEmpty(value) && !isValidOrderBySql(value)) + { + + throw new BaseException(Result.ILLEGAL_ARGUMENT); + } + if (StringUtils.length(value) > ORDER_BY_MAX_LENGTH) + { + Result result = Result.FAILURE; + result.setDesc("参数已超过最大限制,不能进行查询"); + throw new BaseException(result); + } + return value; + } + + /** + * 验证 order by 语法是否符合规范 + */ + public static boolean isValidOrderBySql(String value) + { + return value.matches(SQL_PATTERN); + } + + /** + * SQL关键字检查 + */ + public static void filterKeyword(String value) + { + if (StringUtils.isEmpty(value)) + { + return; + } + String[] sqlKeywords = StringUtils.split(SQL_REGEX, "\\|"); + for (String sqlKeyword : sqlKeywords) + { + if (StringUtils.indexOfIgnoreCase(value, sqlKeyword) > -1) + { + Result result = Result.FAILURE; + result.setDesc("参数存在SQL注入风险"); + throw new BaseException(result); + } + } + } +} \ No newline at end of file diff --git a/common/src/main/java/com/yyy/common/utils/uuid/IdUtils.java b/common/src/main/java/com/yyy/common/utils/uuid/IdUtils.java new file mode 100644 index 0000000..408aac4 --- /dev/null +++ b/common/src/main/java/com/yyy/common/utils/uuid/IdUtils.java @@ -0,0 +1,47 @@ +package com.yyy.common.utils.uuid; + +/** + * ID生成器工具类 + */ +public class IdUtils +{ + /** + * 获取随机UUID + * + * @return 随机UUID + */ + public static String randomUUID() + { + return UUID.randomUUID().toString(); + } + + /** + * 简化的UUID,去掉了横线 + * + * @return 简化的UUID,去掉了横线 + */ + public static String simpleUUID() + { + return UUID.randomUUID().toString(true); + } + + /** + * 获取随机UUID,使用性能更好的ThreadLocalRandom生成UUID + * + * @return 随机UUID + */ + public static String fastUUID() + { + return UUID.fastUUID().toString(); + } + + /** + * 简化的UUID,去掉了横线,使用性能更好的ThreadLocalRandom生成UUID + * + * @return 简化的UUID,去掉了横线 + */ + public static String fastSimpleUUID() + { + return UUID.fastUUID().toString(true); + } +} diff --git a/common/src/main/java/com/yyy/common/utils/uuid/Seq.java b/common/src/main/java/com/yyy/common/utils/uuid/Seq.java new file mode 100644 index 0000000..9da9561 --- /dev/null +++ b/common/src/main/java/com/yyy/common/utils/uuid/Seq.java @@ -0,0 +1,87 @@ +package com.yyy.common.utils.uuid; + +import com.yyy.common.utils.common.DateUtils; +import com.yyy.common.utils.common.StringUtils; + +import java.util.concurrent.atomic.AtomicInteger; + +/** + * 序列生成类 + */ +public class Seq +{ + // 通用序列类型 + public static final String commSeqType = "COMMON"; + + // 上传序列类型 + public static final String uploadSeqType = "UPLOAD"; + + // 通用接口序列数 + private static AtomicInteger commSeq = new AtomicInteger(1); + + // 上传接口序列数 + private static AtomicInteger uploadSeq = new AtomicInteger(1); + + // 机器标识 + private static final String machineCode = "A"; + + /** + * 获取通用序列号 + * + * @return 序列值 + */ + public static String getId() + { + return getId(commSeqType); + } + + /** + * 默认16位序列号 yyMMddHHmmss + 一位机器标识 + 3长度循环递增字符串 + * + * @return 序列值 + */ + public static String getId(String type) + { + AtomicInteger atomicInt = commSeq; + if (uploadSeqType.equals(type)) + { + atomicInt = uploadSeq; + } + return getId(atomicInt, 3); + } + + /** + * 通用接口序列号 yyMMddHHmmss + 一位机器标识 + length长度循环递增字符串 + * + * @param atomicInt 序列数 + * @param length 数值长度 + * @return 序列值 + */ + public static String getId(AtomicInteger atomicInt, int length) + { + String result = DateUtils.dateTimeNow(); + result += machineCode; + result += getSeq(atomicInt, length); + return result; + } + + /** + * 序列循环递增字符串[1, 10 的 (length)幂次方), 用0左补齐length位数 + * + * @return 序列值 + */ + private synchronized static String getSeq(AtomicInteger atomicInt, int length) + { + // 先取值再+1 + int value = atomicInt.getAndIncrement(); + + // 如果更新后值>=10 的 (length)幂次方则重置为1 + int maxSeq = (int) Math.pow(10, length); + if (atomicInt.get() >= maxSeq) + { + atomicInt.set(1); + } + // 转字符串,用0左补齐 + return StringUtils.padl(value, length); + } +} diff --git a/common/src/main/java/com/yyy/common/utils/uuid/SnowFlakeUtil.java b/common/src/main/java/com/yyy/common/utils/uuid/SnowFlakeUtil.java new file mode 100644 index 0000000..a9e1afc --- /dev/null +++ b/common/src/main/java/com/yyy/common/utils/uuid/SnowFlakeUtil.java @@ -0,0 +1,75 @@ +package com.yyy.common.utils.uuid; +import cn.hutool.core.lang.Singleton; + +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/05/09/15:41 + * @Description:雪花算法工具类 + */ +public class SnowFlakeUtil { + private static final long START_STMP = 1420041600000L; + private static final long SEQUENCE_BIT = 9L; + private static final long MACHINE_BIT = 2L; + private static final long DATACENTER_BIT = 2L; + private static final long MAX_SEQUENCE = 511L; + private static final long MAX_MACHINE_NUM = 3L; + private static final long MAX_DATACENTER_NUM = 3L; + private static final long MACHINE_LEFT = 9L; + private static final long DATACENTER_LEFT = 11L; + private static final long TIMESTMP_LEFT = 13L; + private long datacenterId; + private long machineId; + private long sequence = 0L; + private long lastStmp = -1L; + + public SnowFlakeUtil(long datacenterId, long machineId) { + if (datacenterId <= 3L && datacenterId >= 0L) { + if (machineId <= 3L && machineId >= 0L) { + this.datacenterId = datacenterId; + this.machineId = machineId; + } else { + throw new IllegalArgumentException("machineId can't be greater than MAX_MACHINE_NUM or less than 0"); + } + } else { + throw new IllegalArgumentException("datacenterId can't be greater than MAX_DATACENTER_NUM or less than 0"); + } + } + + public synchronized long nextId() { + long currStmp = this.getNewstmp(); + if (currStmp < this.lastStmp) { + throw new RuntimeException("Clock moved backwards. Refusing to generate id"); + } else { + if (currStmp == this.lastStmp) { + this.sequence = this.sequence + 1L & 511L; + if (this.sequence == 0L) { + currStmp = this.getNextMill(); + } + } else { + this.sequence = 0L; + } + + this.lastStmp = currStmp; + return currStmp - 1420041600000L << 13 | this.datacenterId << 11 | this.machineId << 9 | this.sequence; + } + } + + private long getNextMill() { + long mill; + for(mill = this.getNewstmp(); mill <= this.lastStmp; mill = this.getNewstmp()) { + } + + return mill; + } + + private long getNewstmp() { + return System.currentTimeMillis(); + } + + public static Long getDefaultSnowFlakeId() { + return ((SnowFlakeUtil)Singleton.get(SnowFlakeUtil.class, new Object[]{1L, 1L})).nextId(); + } + +} diff --git a/common/src/main/java/com/yyy/common/utils/uuid/UUID.java b/common/src/main/java/com/yyy/common/utils/uuid/UUID.java new file mode 100644 index 0000000..64eb7c3 --- /dev/null +++ b/common/src/main/java/com/yyy/common/utils/uuid/UUID.java @@ -0,0 +1,485 @@ +package com.yyy.common.utils.uuid; + + +import com.yyy.common.exception.UtilException; + +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.security.SecureRandom; +import java.util.Random; +import java.util.concurrent.ThreadLocalRandom; + +/** + * 提供通用唯一识别码(universally unique identifier)(UUID)实现 + */ +public final class UUID implements java.io.Serializable, Comparable +{ + private static final long serialVersionUID = -1185015143654744140L; + + /** + * SecureRandom 的单例 + * + */ + private static class Holder + { + static final SecureRandom numberGenerator = getSecureRandom(); + } + + /** 此UUID的最高64有效位 */ + private final long mostSigBits; + + /** 此UUID的最低64有效位 */ + private final long leastSigBits; + + /** + * 私有构造 + * + * @param data 数据 + */ + private UUID(byte[] data) + { + long msb = 0; + long lsb = 0; + assert data.length == 16 : "data must be 16 bytes in length"; + for (int i = 0; i < 8; i++) + { + msb = (msb << 8) | (data[i] & 0xff); + } + for (int i = 8; i < 16; i++) + { + lsb = (lsb << 8) | (data[i] & 0xff); + } + this.mostSigBits = msb; + this.leastSigBits = lsb; + } + + /** + * 使用指定的数据构造新的 UUID。 + * + * @param mostSigBits 用于 {@code UUID} 的最高有效 64 位 + * @param leastSigBits 用于 {@code UUID} 的最低有效 64 位 + */ + public UUID(long mostSigBits, long leastSigBits) + { + this.mostSigBits = mostSigBits; + this.leastSigBits = leastSigBits; + } + + /** + * 获取类型 4(伪随机生成的)UUID 的静态工厂。 + * + * @return 随机生成的 {@code UUID} + */ + public static UUID fastUUID() + { + return randomUUID(false); + } + + /** + * 获取类型 4(伪随机生成的)UUID 的静态工厂。 使用加密的强伪随机数生成器生成该 UUID。 + * + * @return 随机生成的 {@code UUID} + */ + public static UUID randomUUID() + { + return randomUUID(true); + } + + /** + * 获取类型 4(伪随机生成的)UUID 的静态工厂。 使用加密的强伪随机数生成器生成该 UUID。 + * + * @param isSecure 是否使用{@link SecureRandom}如果是可以获得更安全的随机码,否则可以得到更好的性能 + * @return 随机生成的 {@code UUID} + */ + public static UUID randomUUID(boolean isSecure) + { + final Random ng = isSecure ? Holder.numberGenerator : getRandom(); + + byte[] randomBytes = new byte[16]; + ng.nextBytes(randomBytes); + randomBytes[6] &= 0x0f; /* clear version */ + randomBytes[6] |= 0x40; /* set to version 4 */ + randomBytes[8] &= 0x3f; /* clear variant */ + randomBytes[8] |= 0x80; /* set to IETF variant */ + return new UUID(randomBytes); + } + + /** + * 根据指定的字节数组获取类型 3(基于名称的)UUID 的静态工厂。 + * + * @param name 用于构造 UUID 的字节数组。 + * + * @return 根据指定数组生成的 {@code UUID} + */ + public static UUID nameUUIDFromBytes(byte[] name) + { + MessageDigest md; + try + { + md = MessageDigest.getInstance("MD5"); + } + catch (NoSuchAlgorithmException nsae) + { + throw new InternalError("MD5 not supported"); + } + byte[] md5Bytes = md.digest(name); + md5Bytes[6] &= 0x0f; /* clear version */ + md5Bytes[6] |= 0x30; /* set to version 3 */ + md5Bytes[8] &= 0x3f; /* clear variant */ + md5Bytes[8] |= 0x80; /* set to IETF variant */ + return new UUID(md5Bytes); + } + + /** + * 根据 {@link #toString()} 方法中描述的字符串标准表示形式创建{@code UUID}。 + * + * @param name 指定 {@code UUID} 字符串 + * @return 具有指定值的 {@code UUID} + * @throws IllegalArgumentException 如果 name 与 {@link #toString} 中描述的字符串表示形式不符抛出此异常 + * + */ + public static UUID fromString(String name) + { + String[] components = name.split("-"); + if (components.length != 5) + { + throw new IllegalArgumentException("Invalid UUID string: " + name); + } + for (int i = 0; i < 5; i++) + { + components[i] = "0x" + components[i]; + } + + long mostSigBits = Long.decode(components[0]).longValue(); + mostSigBits <<= 16; + mostSigBits |= Long.decode(components[1]).longValue(); + mostSigBits <<= 16; + mostSigBits |= Long.decode(components[2]).longValue(); + + long leastSigBits = Long.decode(components[3]).longValue(); + leastSigBits <<= 48; + leastSigBits |= Long.decode(components[4]).longValue(); + + return new UUID(mostSigBits, leastSigBits); + } + + /** + * 返回此 UUID 的 128 位值中的最低有效 64 位。 + * + * @return 此 UUID 的 128 位值中的最低有效 64 位。 + */ + public long getLeastSignificantBits() + { + return leastSigBits; + } + + /** + * 返回此 UUID 的 128 位值中的最高有效 64 位。 + * + * @return 此 UUID 的 128 位值中最高有效 64 位。 + */ + public long getMostSignificantBits() + { + return mostSigBits; + } + + /** + * 与此 {@code UUID} 相关联的版本号. 版本号描述此 {@code UUID} 是如何生成的。 + *

+ * 版本号具有以下含意: + *

    + *
  • 1 基于时间的 UUID + *
  • 2 DCE 安全 UUID + *
  • 3 基于名称的 UUID + *
  • 4 随机生成的 UUID + *
+ * + * @return 此 {@code UUID} 的版本号 + */ + public int version() + { + // Version is bits masked by 0x000000000000F000 in MS long + return (int) ((mostSigBits >> 12) & 0x0f); + } + + /** + * 与此 {@code UUID} 相关联的变体号。变体号描述 {@code UUID} 的布局。 + *

+ * 变体号具有以下含意: + *

    + *
  • 0 为 NCS 向后兼容保留 + *
  • 2 IETF RFC 4122(Leach-Salz), 用于此类 + *
  • 6 保留,微软向后兼容 + *
  • 7 保留供以后定义使用 + *
+ * + * @return 此 {@code UUID} 相关联的变体号 + */ + public int variant() + { + // This field is composed of a varying number of bits. + // 0 - - Reserved for NCS backward compatibility + // 1 0 - The IETF aka Leach-Salz variant (used by this class) + // 1 1 0 Reserved, Microsoft backward compatibility + // 1 1 1 Reserved for future definition. + return (int) ((leastSigBits >>> (64 - (leastSigBits >>> 62))) & (leastSigBits >> 63)); + } + + /** + * 与此 UUID 相关联的时间戳值。 + * + *

+ * 60 位的时间戳值根据此 {@code UUID} 的 time_low、time_mid 和 time_hi 字段构造。
+ * 所得到的时间戳以 100 毫微秒为单位,从 UTC(通用协调时间) 1582 年 10 月 15 日零时开始。 + * + *

+ * 时间戳值仅在在基于时间的 UUID(其 version 类型为 1)中才有意义。
+ * 如果此 {@code UUID} 不是基于时间的 UUID,则此方法抛出 UnsupportedOperationException。 + * + * @throws UnsupportedOperationException 如果此 {@code UUID} 不是 version 为 1 的 UUID。 + */ + public long timestamp() throws UnsupportedOperationException + { + checkTimeBase(); + return (mostSigBits & 0x0FFFL) << 48// + | ((mostSigBits >> 16) & 0x0FFFFL) << 32// + | mostSigBits >>> 32; + } + + /** + * 与此 UUID 相关联的时钟序列值。 + * + *

+ * 14 位的时钟序列值根据此 UUID 的 clock_seq 字段构造。clock_seq 字段用于保证在基于时间的 UUID 中的时间唯一性。 + *

+ * {@code clockSequence} 值仅在基于时间的 UUID(其 version 类型为 1)中才有意义。 如果此 UUID 不是基于时间的 UUID,则此方法抛出 + * UnsupportedOperationException。 + * + * @return 此 {@code UUID} 的时钟序列 + * + * @throws UnsupportedOperationException 如果此 UUID 的 version 不为 1 + */ + public int clockSequence() throws UnsupportedOperationException + { + checkTimeBase(); + return (int) ((leastSigBits & 0x3FFF000000000000L) >>> 48); + } + + /** + * 与此 UUID 相关的节点值。 + * + *

+ * 48 位的节点值根据此 UUID 的 node 字段构造。此字段旨在用于保存机器的 IEEE 802 地址,该地址用于生成此 UUID 以保证空间唯一性。 + *

+ * 节点值仅在基于时间的 UUID(其 version 类型为 1)中才有意义。
+ * 如果此 UUID 不是基于时间的 UUID,则此方法抛出 UnsupportedOperationException。 + * + * @return 此 {@code UUID} 的节点值 + * + * @throws UnsupportedOperationException 如果此 UUID 的 version 不为 1 + */ + public long node() throws UnsupportedOperationException + { + checkTimeBase(); + return leastSigBits & 0x0000FFFFFFFFFFFFL; + } + + /** + * 返回此{@code UUID} 的字符串表现形式。 + * + *

+ * UUID 的字符串表示形式由此 BNF 描述: + * + *

+     * {@code
+     * UUID                   = ----
+     * time_low               = 4*
+     * time_mid               = 2*
+     * time_high_and_version  = 2*
+     * variant_and_sequence   = 2*
+     * node                   = 6*
+     * hexOctet               = 
+     * hexDigit               = [0-9a-fA-F]
+     * }
+     * 
+ * + * + * + * @return 此{@code UUID} 的字符串表现形式 + * @see #toString(boolean) + */ + @Override + public String toString() + { + return toString(false); + } + + /** + * 返回此{@code UUID} 的字符串表现形式。 + * + *

+ * UUID 的字符串表示形式由此 BNF 描述: + * + *

+     * {@code
+     * UUID                   = ----
+     * time_low               = 4*
+     * time_mid               = 2*
+     * time_high_and_version  = 2*
+     * variant_and_sequence   = 2*
+     * node                   = 6*
+     * hexOctet               = 
+     * hexDigit               = [0-9a-fA-F]
+     * }
+     * 
+ * + * + * + * @param isSimple 是否简单模式,简单模式为不带'-'的UUID字符串 + * @return 此{@code UUID} 的字符串表现形式 + */ + public String toString(boolean isSimple) + { + final StringBuilder builder = new StringBuilder(isSimple ? 32 : 36); + // time_low + builder.append(digits(mostSigBits >> 32, 8)); + if (false == isSimple) + { + builder.append('-'); + } + // time_mid + builder.append(digits(mostSigBits >> 16, 4)); + if (false == isSimple) + { + builder.append('-'); + } + // time_high_and_version + builder.append(digits(mostSigBits, 4)); + if (false == isSimple) + { + builder.append('-'); + } + // variant_and_sequence + builder.append(digits(leastSigBits >> 48, 4)); + if (false == isSimple) + { + builder.append('-'); + } + // node + builder.append(digits(leastSigBits, 12)); + + return builder.toString(); + } + + /** + * 返回此 UUID 的哈希码。 + * + * @return UUID 的哈希码值。 + */ + @Override + public int hashCode() + { + long hilo = mostSigBits ^ leastSigBits; + return ((int) (hilo >> 32)) ^ (int) hilo; + } + + /** + * 将此对象与指定对象比较。 + *

+ * 当且仅当参数不为 {@code null}、而是一个 UUID 对象、具有与此 UUID 相同的 varriant、包含相同的值(每一位均相同)时,结果才为 {@code true}。 + * + * @param obj 要与之比较的对象 + * + * @return 如果对象相同,则返回 {@code true};否则返回 {@code false} + */ + @Override + public boolean equals(Object obj) + { + if ((null == obj) || (obj.getClass() != UUID.class)) + { + return false; + } + UUID id = (UUID) obj; + return (mostSigBits == id.mostSigBits && leastSigBits == id.leastSigBits); + } + + // Comparison Operations + + /** + * 将此 UUID 与指定的 UUID 比较。 + * + *

+ * 如果两个 UUID 不同,且第一个 UUID 的最高有效字段大于第二个 UUID 的对应字段,则第一个 UUID 大于第二个 UUID。 + * + * @param val 与此 UUID 比较的 UUID + * + * @return 在此 UUID 小于、等于或大于 val 时,分别返回 -1、0 或 1。 + * + */ + @Override + public int compareTo(UUID val) + { + // The ordering is intentionally set up so that the UUIDs + // can simply be numerically compared as two numbers + return (this.mostSigBits < val.mostSigBits ? -1 : // + (this.mostSigBits > val.mostSigBits ? 1 : // + (this.leastSigBits < val.leastSigBits ? -1 : // + (this.leastSigBits > val.leastSigBits ? 1 : // + 0)))); + } + + // ------------------------------------------------------------------------------------------------------------------- + // Private method start + /** + * 返回指定数字对应的hex值 + * + * @param val 值 + * @param digits 位 + * @return 值 + */ + private static String digits(long val, int digits) + { + long hi = 1L << (digits * 4); + return Long.toHexString(hi | (val & (hi - 1))).substring(1); + } + + /** + * 检查是否为time-based版本UUID + */ + private void checkTimeBase() + { + if (version() != 1) + { + throw new UnsupportedOperationException("Not a time-based UUID"); + } + } + + /** + * 获取{@link SecureRandom},类提供加密的强随机数生成器 (RNG) + * + * @return {@link SecureRandom} + */ + public static SecureRandom getSecureRandom() + { + try + { + return SecureRandom.getInstance("SHA1PRNG"); + } + catch (NoSuchAlgorithmException e) + { + + throw new UtilException(e); + } + } + + /** + * 获取随机数生成器对象
+ * ThreadLocalRandom是JDK 7之后提供并发产生随机数,能够解决多个线程发生的竞争争夺。 + * + * @return {@link ThreadLocalRandom} + */ + public static ThreadLocalRandom getRandom() + { + return ThreadLocalRandom.current(); + } +} diff --git a/flowable/pom.xml b/flowable/pom.xml new file mode 100644 index 0000000..83ff18e --- /dev/null +++ b/flowable/pom.xml @@ -0,0 +1,84 @@ + + + + yyy + com.yyy + 1.0-SNAPSHOT + + 4.0.0 + + flowable + + + + com.yyy + framework + 1.0-SNAPSHOT + + + + com.yyy + system + 1.0-SNAPSHOT + + + + com.yyy + common + 1.0-SNAPSHOT + + + + + org.apache.commons + commons-lang3 + + + + + com.alibaba + fastjson + + + + org.projectlombok + lombok + true + + + com.github.xiaoymin + knife4j-spring-boot-starter + + + org.flowable + flowable-spring-boot-starter + + + + org.flowable + flowable-spring-security + + + + + com.baomidou + mybatis-plus-boot-starter + + + + + + + + + + + com.googlecode.aviator + aviator + 5.3.3 + + + + \ No newline at end of file diff --git a/flowable/src/main/java/com/yyy/flowable/common/constant/ProcessConstants.java b/flowable/src/main/java/com/yyy/flowable/common/constant/ProcessConstants.java new file mode 100644 index 0000000..bf1e1f2 --- /dev/null +++ b/flowable/src/main/java/com/yyy/flowable/common/constant/ProcessConstants.java @@ -0,0 +1,77 @@ +package com.yyy.flowable.common.constant; + +/** + * 流程常量信息 + */ +public class ProcessConstants { + + /** + * 动态数据 + */ + public static final String DYNAMIC = "dynamic"; + + /** + * 固定任务接收 + */ + public static final String FIXED = "fixed"; + + /** + * 单个审批人 + */ + public static final String ASSIGNEE = "assignee"; + + + /** + * 候选人 + */ + public static final String CANDIDATE_USERS = "candidateUsers"; + + + /** + * 审批组 + */ + public static final String CANDIDATE_GROUPS = "candidateGroups"; + + /** + * 单个审批人 + */ + public static final String PROCESS_APPROVAL = "approval"; + + /** + * 会签人员 + */ + public static final String PROCESS_MULTI_INSTANCE_USER = "userList"; + + /** + * nameapace + */ + public static final String NAMASPASE = "http://flowable.org/bpmn"; + + /** + * 会签节点 + */ + public static final String PROCESS_MULTI_INSTANCE = "multiInstance"; + + /** + * 自定义属性 dataType + */ + public static final String PROCESS_CUSTOM_DATA_TYPE = "dataType"; + + /** + * 自定义属性 userType + */ + public static final String PROCESS_CUSTOM_USER_TYPE = "userType"; + + /** + * 初始化人员 + */ + public static final String PROCESS_INITIATOR = "INITIATOR"; + + + /** + * 流程跳过 + */ + public static final String FLOWABLE_SKIP_EXPRESSION_ENABLED = "_FLOWABLE_SKIP_EXPRESSION_ENABLED"; + + +} diff --git a/flowable/src/main/java/com/yyy/flowable/common/enums/FlowComment.java b/flowable/src/main/java/com/yyy/flowable/common/enums/FlowComment.java new file mode 100644 index 0000000..bba1392 --- /dev/null +++ b/flowable/src/main/java/com/yyy/flowable/common/enums/FlowComment.java @@ -0,0 +1,40 @@ +package com.yyy.flowable.common.enums; + +/** + * 流程意见类型 + */ +public enum FlowComment { + + /** + * 说明 + */ + NORMAL("1", "正常意见"), + REBACK("2", "退回意见"), + REJECT("3", "驳回意见"), + DELEGATE("4", "委派意见"), + ASSIGN("5", "转办意见"), + STOP("6", "终止流程"); + + /** + * 类型 + */ + private final String type; + + /** + * 说明 + */ + private final String remark; + + FlowComment(String type, String remark) { + this.type = type; + this.remark = remark; + } + + public String getType() { + return type; + } + + public String getRemark() { + return remark; + } +} diff --git a/flowable/src/main/java/com/yyy/flowable/common/enums/FlowStatus.java b/flowable/src/main/java/com/yyy/flowable/common/enums/FlowStatus.java new file mode 100644 index 0000000..8c861f8 --- /dev/null +++ b/flowable/src/main/java/com/yyy/flowable/common/enums/FlowStatus.java @@ -0,0 +1,40 @@ +package com.yyy.flowable.common.enums; + +/** + * 流程状态类型 + */ +public enum FlowStatus { + + /** + * 说明 + */ + DRAFTING(1, "起草中"), + APPROVAL(2, "审批中"), + COMPLETED(3, "已结束"), + REJECTED(4, "已驳回"), + DISCARDED(5, "已废弃"), + EXCEPTION(6, "流程异常"); + + /** + * 类型 + */ + private final Integer code; + + /** + * 说明 + */ + private final String info; + + FlowStatus(Integer code, String info) { + this.code = code; + this.info = info; + } + + public Integer getCode() { + return code; + } + + public String getInfo() { + return info; + } +} diff --git a/flowable/src/main/java/com/yyy/flowable/config/FlowableConfig.java b/flowable/src/main/java/com/yyy/flowable/config/FlowableConfig.java new file mode 100644 index 0000000..2f0c43e --- /dev/null +++ b/flowable/src/main/java/com/yyy/flowable/config/FlowableConfig.java @@ -0,0 +1,30 @@ +package com.yyy.flowable.config; + +import org.flowable.engine.impl.db.DbIdGenerator; +import org.flowable.spring.SpringProcessEngineConfiguration; +import org.flowable.spring.boot.EngineConfigurationConfigurer; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.task.AsyncListenableTaskExecutor; +import org.springframework.core.task.SimpleAsyncTaskExecutor; + +/** + * Flowable配置信息 + */ +@Configuration +public class FlowableConfig implements EngineConfigurationConfigurer { + + @Bean + public AsyncListenableTaskExecutor applicationTaskExecutor() { + return new SimpleAsyncTaskExecutor(); + } + + @Override + public void configure(SpringProcessEngineConfiguration engineConfiguration) { + engineConfiguration.setActivityFontName("宋体"); + engineConfiguration.setLabelFontName("宋体"); + engineConfiguration.setAnnotationFontName("宋体"); + engineConfiguration.setIdGenerator(new DbIdGenerator()); + } + +} diff --git a/flowable/src/main/java/com/yyy/flowable/config/MyDefaultProcessDiagramCanvas.java b/flowable/src/main/java/com/yyy/flowable/config/MyDefaultProcessDiagramCanvas.java new file mode 100644 index 0000000..5973d87 --- /dev/null +++ b/flowable/src/main/java/com/yyy/flowable/config/MyDefaultProcessDiagramCanvas.java @@ -0,0 +1,95 @@ +package com.yyy.flowable.config;//package com.ruoyi.flowable.config; +// +//import com.sun.prism.paint.Color; +//import org.flowable.bpmn.model.AssociationDirection; +//import org.flowable.image.impl.DefaultProcessDiagramCanvas; +// +//import java.awt.*; +//import java.awt.geom.Line2D; +//import java.awt.geom.RoundRectangle2D; +// +///** +// * @author Tony +// * @date 2021-04-03 +// */ +//public class MyDefaultProcessDiagramCanvas extends DefaultProcessDiagramCanvas { +// //设置高亮线的颜色 这里我设置成绿色 +// protected static Color HIGHLIGHT_SEQUENCEFLOW_COLOR = Color.GREEN; +// +// public MyDefaultProcessDiagramCanvas(int width, int height, int minX, int minY, String imageType, String activityFontName, String labelFontName, String annotationFontName, ClassLoader customClassLoader) { +// super(width, height, minX, minY, imageType, activityFontName, labelFontName, annotationFontName, customClassLoader); +// } +// +// public MyDefaultProcessDiagramCanvas(int width, int height, int minX, int minY, String imageType) { +// super(width, height, minX, minY, imageType); +// } +// +// +// /** +// * 画线颜色设置 +// */ +// @Override +// public void drawConnection(int[] xPoints, int[] yPoints, boolean conditional, boolean isDefault, String connectionType, +// AssociationDirection associationDirection, boolean highLighted, double scaleFactor) { +// +// Paint originalPaint = g.getPaint(); +// Stroke originalStroke = g.getStroke(); +// +// g.setPaint(CONNECTION_COLOR); +// if (connectionType.equals("association")) { +// g.setStroke(ASSOCIATION_STROKE); +// } else if (highLighted) { +// //设置线的颜色 +// g.setPaint(originalPaint); +// g.setStroke(HIGHLIGHT_FLOW_STROKE); +// } +// +// for (int i = 1; i < xPoints.length; i++) { +// Integer sourceX = xPoints[i - 1]; +// Integer sourceY = yPoints[i - 1]; +// Integer targetX = xPoints[i]; +// Integer targetY = yPoints[i]; +// Line2D.Double line = new Line2D.Double(sourceX, sourceY, targetX, targetY); +// g.draw(line); +// } +// +// if (isDefault) { +// Line2D.Double line = new Line2D.Double(xPoints[0], yPoints[0], xPoints[1], yPoints[1]); +// drawDefaultSequenceFlowIndicator(line, scaleFactor); +// } +// +// if (conditional) { +// Line2D.Double line = new Line2D.Double(xPoints[0], yPoints[0], xPoints[1], yPoints[1]); +// drawConditionalSequenceFlowIndicator(line, scaleFactor); +// } +// +// if (associationDirection == AssociationDirection.ONE || associationDirection == AssociationDirection.BOTH) { +// Line2D.Double line = new Line2D.Double(xPoints[xPoints.length - 2], yPoints[xPoints.length - 2], xPoints[xPoints.length - 1], yPoints[xPoints.length - 1]); +// drawArrowHead(line, scaleFactor); +// } +// if (associationDirection == AssociationDirection.BOTH) { +// Line2D.Double line = new Line2D.Double(xPoints[1], yPoints[1], xPoints[0], yPoints[0]); +// drawArrowHead(line, scaleFactor); +// } +// g.setPaint(originalPaint); +// g.setStroke(originalStroke); +// } +// +// /** +// * 高亮节点设置 +// */ +// @Override +// public void drawHighLight(int x, int y, int width, int height) { +// Paint originalPaint = g.getPaint(); +// Stroke originalStroke = g.getStroke(); +// //设置高亮节点的颜色 +// g.setPaint(HIGHLIGHT_COLOR); +// g.setStroke(THICK_TASK_BORDER_STROKE); +// +// RoundRectangle2D rect = new RoundRectangle2D.Double(x, y, width, height, 20, 20); +// g.draw(rect); +// +// g.setPaint(originalPaint); +// g.setStroke(originalStroke); +// } +//} diff --git a/flowable/src/main/java/com/yyy/flowable/controller/FlFormController.java b/flowable/src/main/java/com/yyy/flowable/controller/FlFormController.java new file mode 100644 index 0000000..461cecc --- /dev/null +++ b/flowable/src/main/java/com/yyy/flowable/controller/FlFormController.java @@ -0,0 +1,120 @@ +package com.yyy.flowable.controller; + + +import com.alibaba.fastjson.JSONObject; +import com.yyy.common.core.controller.BaseController; +import com.yyy.common.core.domain.Result; +import com.yyy.common.core.page.TableDataInfo; +import com.yyy.common.utils.bean.BeanUtils; +import com.yyy.system.entity.pojo.FlForm; +import com.yyy.system.entity.dto.FlFormDto; +import com.yyy.system.entity.vo.FlFormVo; +import com.yyy.system.service.FlFormService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; + +import javax.annotation.Resource; +import java.util.List; + +/** + * 流程表单对象(fl_form)表控制层 + * + * @author Fangy + * @since 2024-04-24 10:55:58 + */ +@RestController +@Api(tags = "流程表单模板相关接口") +@RequestMapping("api/flForm") +public class FlFormController extends BaseController { + + private static final Logger logger = LoggerFactory.getLogger(FlFormController.class); + /** + * 服务对象 + */ + @Resource + private FlFormService flFormService; + + /** + * 查询分页数据 + */ + @PostMapping("/list") + @ApiOperation(value = "查询分页数据") + public TableDataInfo list(@RequestBody FlFormDto flFormDto) { + startPage(); + List list = flFormService.query(flFormDto); + return getDataTable(FlFormVo.ToVo(list)); + } + + /** + * 查询所有 + */ + @PostMapping("/all") + @ApiOperation(value = "查询所有数据") + public Result all() { + return success(FlFormVo.ToVo(flFormService.query(new FlFormDto()))); + } + + /** + * 设置审批人 + */ + @PostMapping("/assignee") + @ApiOperation(value = "设置审批人") + public Result assignee(@RequestParam Long formId, @RequestParam Long userId) { + FlForm flForm = flFormService.getById(formId); + JSONObject config = JSONObject.parseObject(flForm.getConfig()); + config.put("assignee",userId); + flForm.setConfig(config.toJSONString()); + flForm.setUpdateUser(getUserId()); + return flFormService.updateById(flForm) ? success() : error(); + } + + + /** + * 查询详情数据 + */ + @PostMapping("/query") + @ApiOperation(value = "查询详情数据") + public Result query(@RequestParam Long id) { + return success(FlFormVo.ToVo(flFormService.getById(id))); + } + + /** + * 新增数据 + */ + @PostMapping("/add") + @ApiOperation(value = "新增数据(开发环境使用)") + public Result add(@Validated @RequestBody FlFormDto flFormDto) { + FlForm flForm = new FlForm(); + BeanUtils.copyProperties(flFormDto, flForm); + flForm.setCreateUser(getUserId()); + flForm.setConfig("{\"assignee\":\"1\"}"); + return flFormService.save(flForm) ? success() : error(); + } + + /** + * 修改数据 + */ + @PostMapping("/update") + @ApiOperation(value = "修改数据(开发环境使用)") + public Result update(@Validated @RequestBody FlFormDto flFormDto) { + FlForm flForm = new FlForm(); + BeanUtils.copyProperties(flFormDto, flForm); + flForm.setUpdateUser(getUserId()); + return flFormService.updateById(flForm) ? success() : error(); + } + + + /** + * 删除数据 + */ + @PostMapping("/delete") + @ApiOperation(value = "删除数据(开发环境使用)") + public Result delete(@RequestBody List idList) { + return flFormService.removeBatchByIds(idList) ? success() : error(); + } +} + diff --git a/flowable/src/main/java/com/yyy/flowable/controller/FlFormItemController.java b/flowable/src/main/java/com/yyy/flowable/controller/FlFormItemController.java new file mode 100644 index 0000000..c3802e4 --- /dev/null +++ b/flowable/src/main/java/com/yyy/flowable/controller/FlFormItemController.java @@ -0,0 +1,98 @@ +package com.yyy.flowable.controller; + + + +import com.yyy.common.core.controller.BaseController; +import com.yyy.common.core.domain.Result; +import com.yyy.common.core.page.TableDataInfo; +import com.yyy.common.utils.bean.BeanUtils; +import com.yyy.system.entity.pojo.FlFormItem; +import com.yyy.system.entity.dto.FlFormItemDto; +import com.yyy.system.entity.vo.FlFormItemVo; +import com.yyy.system.service.FlFormItemService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; + +import javax.annotation.Resource; +import java.util.List; + +/** + * 流程实例对象(fl_form_item)表控制层 + * @author Fangy + * @since 2024-04-30 12:17:53 + */ +@RestController +@Api(tags = "流程实例对象相关接口") +@RequestMapping("api/flFormItem") +public class FlFormItemController extends BaseController { + + private static final Logger logger = LoggerFactory.getLogger(FlFormItemController.class); + /** + * 服务对象 + */ + @Resource + private FlFormItemService flFormItemService; + + /** + * 查询分页数据 + * + */ + @PostMapping("/list") + @ApiOperation(value = "查询分页数据") + public TableDataInfo list(@RequestBody FlFormItemDto flFormItemDto) { + startPage(); + List list = flFormItemService.query(flFormItemDto); + return getDataTable(FlFormItemVo.ToVo(list)); + } + + /** + * 查询详情数据 + * + */ + @PostMapping("/query") + @ApiOperation(value = "查询详情数据") + public Result query(@RequestParam Long id) { + return success(FlFormItemVo.ToVo(flFormItemService.getById(id))); + } + +// /** +// * 新增数据 +// * +// */ +// @PostMapping("/add") +// @ApiOperation(value = "新增数据") +// public Result add(@Validated @RequestBody FlFormItemDto flFormItemDto) { +// FlFormItem flFormItem = new FlFormItem(); +// BeanUtils.copyProperties(flFormItemDto, flFormItem); +// flFormItem.setCreateUser(getUserId()); +// return flFormItemService.save(flFormItem)?success():error(); +// } +// +// /** +// * 修改数据 +// * +// */ +// @PostMapping("/update") +// @ApiOperation(value = "修改数据") +// public Result update(@Validated @RequestBody FlFormItemDto flFormItemDto) { +// FlFormItem flFormItem = new FlFormItem(); +// BeanUtils.copyProperties(flFormItemDto, flFormItem); +// flFormItem.setUpdateUser(getUserId()); +// return flFormItemService.updateById(flFormItem) ? success() : error(); +// } +// +// /** +// * 删除数据 +// * +// */ +// @PostMapping("/delete") +// @ApiOperation(value = "删除数据") +// public Result delete(@RequestBody List idList) { +// return flFormItemService.removeBatchByIds(idList) ? success() : error(); +// } +} + diff --git a/flowable/src/main/java/com/yyy/flowable/controller/FlowDefinitionController.java b/flowable/src/main/java/com/yyy/flowable/controller/FlowDefinitionController.java new file mode 100644 index 0000000..c0a1a95 --- /dev/null +++ b/flowable/src/main/java/com/yyy/flowable/controller/FlowDefinitionController.java @@ -0,0 +1,202 @@ +package com.yyy.flowable.controller; + +import com.yyy.common.core.controller.BaseController; +import com.yyy.common.core.domain.Result; +import com.yyy.flowable.domain.dto.FlowSaveXmlVo; +import com.yyy.flowable.service.IFlowDefinitionService; +import com.yyy.system.entity.dto.FlowProcDefDto; +import com.yyy.system.entity.pojo.FlForm; +import com.yyy.system.service.FlFormService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.imageio.ImageIO; +import javax.servlet.http.HttpServletResponse; +import java.awt.image.BufferedImage; +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.nio.charset.StandardCharsets; +import java.util.List; +import java.util.Map; +import java.util.Objects; + +/** + *

+ * 工作流程定义 + *

+ */ +@Slf4j +@Api(tags = "flowable-流程定义") +@RestController +@RequestMapping("/api/flowable/definition") +public class FlowDefinitionController extends BaseController { + + @Autowired + private IFlowDefinitionService flowDefinitionService; + + @Autowired + private FlFormService flFormService; + + @GetMapping(value = "/list") + @ApiOperation(value = "流程定义列表", response = FlowProcDefDto.class) + public Result> list(@ApiParam(value = "当前页码", required = true) @RequestParam Integer pageNum, + @ApiParam(value = "每页条数", required = true) @RequestParam Integer pageSize, + @ApiParam(value = "流程名称", required = false) @RequestParam(required = false) String name) { + return success(flowDefinitionService.list(name, pageNum, pageSize)); + } + + @ApiOperation(value = "导入流程文件", notes = "上传bpmn20的xml文件") + @PostMapping("/import") + public Result importFile(@RequestParam String form_key, MultipartFile file) { + InputStream in = null; + try { + in = file.getInputStream(); + FlForm flForm = flFormService.selectByKey(form_key); + if (Objects.isNull(flForm)){ + return error("表单标识信息错误"); + } + String deployId = flowDefinitionService.importFile(flForm.getName(), form_key, in); + flForm.setDeployId(deployId); + flFormService.updateById(flForm); + } catch (Exception e) { + log.error("导入失败:", e); + return error(e.getMessage()); + } finally { + try { + if (in != null) { + in.close(); + } + } catch (IOException e) { + log.error("关闭输入流出错", e); + } + } + + return success("导入成功"); + } + + @ApiOperation(value = "读取xml文件") + @GetMapping("/readXml/{form_key}") + public Result readXml(@ApiParam(value = "表单标识") @PathVariable(value = "form_key") String form_key) { + try { + FlForm flForm = flFormService.selectByKey(form_key); + if (Objects.isNull(flForm)){ + return error("表单标识信息错误"); + } + return flowDefinitionService.readXml(flForm.getDeployId()); + } catch (Exception e) { + return error("加载xml文件异常"); + } + + } + + @ApiOperation(value = "读取图片文件") + @GetMapping("/readImage/{form_key}") + public void readImage(@ApiParam(value = "表单标识") @PathVariable(value = "form_key") String form_key, HttpServletResponse response) { + OutputStream os = null; + BufferedImage image = null; + FlForm flForm = flFormService.selectByKey(form_key); + try { + if (Objects.isNull(flForm)){ + log.error("表单标识信息错误"); + os.close(); + return ; + } + image = ImageIO.read(flowDefinitionService.readImage(flFormService.selectByKey(form_key).getDeployId())); + response.setContentType("image/png"); + os = response.getOutputStream(); + if (image != null) { + ImageIO.write(image, "png", os); + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + try { + if (os != null) { + os.flush(); + os.close(); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + + } + + + @ApiOperation(value = "保存流程设计器内的xml文件") + @PostMapping("/save") + public Result save(@RequestBody FlowSaveXmlVo vo) { + InputStream in = null; + try { +// in = new ByteArrayInputStream(vo.getXml().getBytes(StandardCharsets.UTF_8)); +// flowDefinitionService.importFile(vo.getName(), vo.getCategory(), in); + FlForm flForm = flFormService.selectByKey(vo.getCategory()); + if (Objects.isNull(flForm)){ + return error("流程分类信息错误"); + } + String deployId = flowDefinitionService.importFile(flForm.getName(), vo.getCategory(), in); + flForm.setDeployId(deployId); + flFormService.updateById(flForm); + } catch (Exception e) { + log.error("导入失败:", e); + return error(e.getMessage()); + } finally { + try { + if (in != null) { + in.close(); + } + } catch (IOException e) { + log.error("关闭输入流出错", e); + } + } + + return success("导入成功"); + } + + + @ApiOperation(value = "发起流程") + @PostMapping("/start/{form_key}") + public Result start(@ApiParam(value = "表单标识") @PathVariable(value = "form_key") String form_key, + @ApiParam(value = "变量集合,json对象") @RequestBody Map variables) { + FlForm flForm = flFormService.selectByKey(form_key); + if (Objects.isNull(flForm)){ + return error("表单标识信息错误"); + } + + FlowProcDefDto flowProcDefDto = flowDefinitionService.getByDeployId(flForm.getDeployId()); + if (Objects.isNull(flowProcDefDto)){ + return error(form_key+"流程未部署"); + } + + return flowDefinitionService.startProcessInstanceById(flowProcDefDto.getId(), variables); + + } + + @ApiOperation(value = "激活或挂起流程定义") + @PutMapping(value = "/updateState") + public Result updateState(@ApiParam(value = "1:激活,2:挂起", required = true) @RequestParam Integer state, + @ApiParam(value = "表单标识", required = true) @RequestParam String form_key) { + FlForm flForm = flFormService.selectByKey(form_key); + if (Objects.isNull(flForm)){ + return error("表单标识信息错误"); + } + flowDefinitionService.updateState(state, flForm.getDeployId()); + return success(); + } + + @ApiOperation(value = "删除流程") + @DeleteMapping(value = "/{deployIds}") + public Result delete(@PathVariable String[] deployIds) { + for (String deployId : deployIds) { + flowDefinitionService.delete(deployId); + } + return success(); + } +} diff --git a/flowable/src/main/java/com/yyy/flowable/controller/FlowInstanceController.java b/flowable/src/main/java/com/yyy/flowable/controller/FlowInstanceController.java new file mode 100644 index 0000000..1fa635f --- /dev/null +++ b/flowable/src/main/java/com/yyy/flowable/controller/FlowInstanceController.java @@ -0,0 +1,62 @@ +package com.yyy.flowable.controller; + + +import com.yyy.common.core.controller.BaseController; +import com.yyy.common.core.domain.Result; +import com.yyy.flowable.domain.vo.FlowTaskVo; +import com.yyy.flowable.service.IFlowInstanceService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; + +/** + *

工作流流程实例管理

+ */ +@Slf4j +@Api(tags = "flowable-实例管理") +@RestController +@RequestMapping("/api/flowable/instance") +public class FlowInstanceController extends BaseController { + + @Autowired + private IFlowInstanceService flowInstanceService; + + @ApiOperation(value = "根据流程定义id启动流程实例") + @PostMapping("/startBy/{procDefId}") + public Result startById(@ApiParam(value = "流程定义id") @PathVariable(value = "procDefId") String procDefId, + @ApiParam(value = "变量集合,json对象") @RequestBody Map variables) { + return flowInstanceService.startProcessInstanceById(procDefId, variables); + + } + + + @ApiOperation(value = "激活或挂起流程实例") + @PostMapping(value = "/updateState") + public Result updateState(@ApiParam(value = "1:激活,2:挂起", required = true) @RequestParam Integer state, + @ApiParam(value = "流程实例ID", required = true) @RequestParam String instanceId) { + flowInstanceService.updateState(state, instanceId); + return success(); + } + + @ApiOperation("结束流程实例") + @PostMapping(value = "/stopProcessInstance") + public Result stopProcessInstance(@RequestBody FlowTaskVo flowTaskVo) { + flowInstanceService.stopProcessInstance(flowTaskVo); + return success(); + } + + @ApiOperation(value = "删除流程实例") + @DeleteMapping(value = "/delete/{instanceIds}") + public Result delete(@ApiParam(value = "流程实例ID", required = true) @PathVariable String[] instanceIds, + @ApiParam(value = "删除原因") @RequestParam(required = false) String deleteReason) { + for (String instanceId : instanceIds) { + flowInstanceService.delete(instanceId, deleteReason); + } + return success(); + } +} \ No newline at end of file diff --git a/flowable/src/main/java/com/yyy/flowable/controller/FlowTaskController.java b/flowable/src/main/java/com/yyy/flowable/controller/FlowTaskController.java new file mode 100644 index 0000000..0153bca --- /dev/null +++ b/flowable/src/main/java/com/yyy/flowable/controller/FlowTaskController.java @@ -0,0 +1,259 @@ +package com.yyy.flowable.controller; + +import com.yyy.common.core.controller.BaseController; +import com.yyy.common.core.domain.Result; +import com.yyy.flowable.domain.dto.FlowTaskDto; +import com.yyy.flowable.domain.vo.FlowQueryVo; +import com.yyy.flowable.domain.vo.FlowTaskVo; +import com.yyy.flowable.service.IFlowTaskService; +import com.yyy.system.service.EamBusinessBorrowService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.imageio.ImageIO; +import javax.servlet.http.HttpServletResponse; +import java.awt.image.BufferedImage; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.util.List; + +/** + *

工作流任务管理

+ */ +@Slf4j +@Api(tags = "flowable-任务管理") +@RestController +@RequestMapping("/api/flowable/task") +public class FlowTaskController extends BaseController { + + @Autowired + private IFlowTaskService flowTaskService; + + + @ApiOperation(value = "我发起的流程") + @PostMapping(value = "/myProcess") + public Result> myProcess(@RequestBody FlowQueryVo queryVo) { + return flowTaskService.myProcess(queryVo); + } + + @ApiOperation(value = "取消申请", response = FlowTaskDto.class) + @PostMapping(value = "/stopProcess") + public Result stopProcess(@RequestBody FlowTaskVo flowTaskVo) { + return flowTaskService.stopProcess(flowTaskVo); + } + + @ApiOperation(value = "发起人撤回流程", response = FlowTaskDto.class) + @PostMapping(value = "/revokeProcess") + public Result revokeProcess(@RequestBody FlowTaskVo flowTaskVo) { + return flowTaskService.revokeProcess(flowTaskVo); + } + + @ApiOperation(value = "获取待办列表") + @PostMapping(value = "/todoList") + public Result> todoList(@RequestBody FlowQueryVo queryVo) { + return flowTaskService.todoList(queryVo); + } + + @ApiOperation(value = "获取待办列表数量(主页待我处理)") + @PostMapping(value = "/todoListCount") + public Result todoListCount() { + return success(flowTaskService.todoListCount()); + } + + @ApiOperation(value = "获取已办任务") + @PostMapping(value = "/finishedList") + public Result> finishedList(@RequestBody FlowQueryVo queryVo) { + return flowTaskService.finishedList(queryVo); + } + + + @ApiOperation(value = "流程历史流转记录", response = FlowTaskDto.class) + @GetMapping(value = "/flowRecord") + public Result flowRecord(String procInsId, String deployId) { + return flowTaskService.flowRecord(procInsId, deployId); + } + + + @ApiOperation(value = "流程初始化表单", response = FlowTaskDto.class) + @GetMapping(value = "/flowFormData") + public Result flowFormData(String deployId) { + return flowTaskService.flowFormData(deployId); + } + + @ApiOperation(value = "获取流程变量", response = FlowTaskDto.class) + @GetMapping(value = "/processVariables/{taskId}") + public Result processVariables(@ApiParam(value = "流程任务Id") @PathVariable(value = "taskId") String taskId) { + return flowTaskService.processVariables(taskId); + } + + @ApiOperation(value = "审批任务") + @PostMapping(value = "/complete") + public Result complete(@RequestBody FlowTaskVo flowTaskVo) { + return flowTaskService.complete(flowTaskVo); + } + + @ApiOperation(value = "驳回任务") + @PostMapping(value = "/reject") + public Result taskReject(@RequestBody FlowTaskVo flowTaskVo) { + flowTaskService.taskReject(flowTaskVo); + return success(); + } + + @ApiOperation(value = "退回任务") + @PostMapping(value = "/return") + public Result taskReturn(@RequestBody FlowTaskVo flowTaskVo) { + flowTaskService.taskReturn(flowTaskVo); + return success(); + } + + @ApiOperation(value = "获取所有可回退的节点") + @PostMapping(value = "/returnList") + public Result findReturnTaskList(@RequestBody FlowTaskVo flowTaskVo) { + return flowTaskService.findReturnTaskList(flowTaskVo); + } + + @ApiOperation(value = "删除任务") + @DeleteMapping(value = "/delete") + public Result delete(@RequestBody FlowTaskVo flowTaskVo) { + flowTaskService.deleteTask(flowTaskVo); + return success(); + } + + @ApiOperation(value = "认领/签收任务") + @PostMapping(value = "/claim") + public Result claim(@RequestBody FlowTaskVo flowTaskVo) { + flowTaskService.claim(flowTaskVo); + return success(); + } + + @ApiOperation(value = "取消认领/签收任务") + @PostMapping(value = "/unClaim") + public Result unClaim(@RequestBody FlowTaskVo flowTaskVo) { + flowTaskService.unClaim(flowTaskVo); + return success(); + } + + @ApiOperation(value = "委派任务") + @PostMapping(value = "/delegateTask") + public Result delegate(@RequestBody FlowTaskVo flowTaskVo) { + flowTaskService.delegateTask(flowTaskVo); + return success(); + } + + @ApiOperation(value = "任务归还") + @PostMapping(value = "/resolveTask") + public Result resolveTask(@RequestBody FlowTaskVo flowTaskVo) { + flowTaskService.resolveTask(flowTaskVo); + return success(); + } + + @ApiOperation(value = "转办任务") + @PostMapping(value = "/assignTask") + public Result assign(@RequestBody FlowTaskVo flowTaskVo) { + flowTaskService.assignTask(flowTaskVo); + return success(); + } + + @PostMapping(value = "/addMultiInstanceExecution") + @ApiOperation(value = "多实例加签") + public Result addMultiInstanceExecution(@RequestBody FlowTaskVo flowTaskVo) { + flowTaskService.addMultiInstanceExecution(flowTaskVo); + return success("加签成功"); + } + + @PostMapping(value = "/deleteMultiInstanceExecution") + @ApiOperation(value = "多实例减签") + public Result deleteMultiInstanceExecution(@RequestBody FlowTaskVo flowTaskVo) { + flowTaskService.deleteMultiInstanceExecution(flowTaskVo); + return success("减签成功"); + } + + @ApiOperation(value = "获取下一节点") + @PostMapping(value = "/nextFlowNode") + public Result getNextFlowNode(@RequestBody FlowTaskVo flowTaskVo) { + return flowTaskService.getNextFlowNode(flowTaskVo); + } + + @ApiOperation(value = "流程发起时获取下一节点") + @PostMapping(value = "/nextFlowNodeByStart") + public Result getNextFlowNodeByStart(@RequestBody FlowTaskVo flowTaskVo) { + return flowTaskService.getNextFlowNodeByStart(flowTaskVo); + } + + /** + * 生成流程图 + * + * @param processId 任务ID + */ + @ApiOperation(value = "生成流程图") + @GetMapping("/diagram/{processId}") + public void genProcessDiagram(HttpServletResponse response, + @PathVariable("processId") String processId) { + InputStream inputStream = flowTaskService.diagram(processId); + OutputStream os = null; + BufferedImage image = null; + try { + image = ImageIO.read(inputStream); + response.setContentType("image/png"); + os = response.getOutputStream(); + if (image != null) { + ImageIO.write(image, "png", os); + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + try { + if (os != null) { + os.flush(); + os.close(); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + } + + /** + * 获取流程执行节点 + * + * @param procInsId 流程实例编号 + * @param procInsId 任务执行编号 + */ + @ApiOperation(value = "获取流程执行节点") + @GetMapping("/flowViewer/{procInsId}/{executionId}") + public Result getFlowViewer(@PathVariable("procInsId") String procInsId, + @PathVariable("executionId") String executionId) { + return flowTaskService.getFlowViewer(procInsId, executionId); + } + + /** + * 流程节点信息 + * + * @param procInsId 流程实例id + * @return + */ + @ApiOperation(value = "流程节点信息") + @GetMapping("/flowXmlAndNode") + public Result flowXmlAndNode(@RequestParam(value = "procInsId", required = false) String procInsId, + @RequestParam(value = "deployId", required = false) String deployId) { + return flowTaskService.flowXmlAndNode(procInsId, deployId); + } + + /** + * 流程节点表单 + * + * @param taskId 流程任务编号 + * @return + */ + @ApiOperation(value = "流程节点表单") + @GetMapping("/flowTaskForm") + public Result flowTaskForm(@RequestParam(value = "taskId", required = false) String taskId) throws Exception { + return flowTaskService.flowTaskForm(taskId); + } + +} diff --git a/flowable/src/main/java/com/yyy/flowable/domain/dto/FlowCommentDto.java b/flowable/src/main/java/com/yyy/flowable/domain/dto/FlowCommentDto.java new file mode 100644 index 0000000..b1408f1 --- /dev/null +++ b/flowable/src/main/java/com/yyy/flowable/domain/dto/FlowCommentDto.java @@ -0,0 +1,21 @@ +package com.yyy.flowable.domain.dto; + +import lombok.Builder; +import lombok.Data; + +import java.io.Serializable; + +@Data +@Builder +public class FlowCommentDto implements Serializable { + + /** + * 意见类别 0 正常意见 1 退回意见 2 驳回意见 + */ + private String type; + + /** + * 意见内容 + */ + private String comment; +} diff --git a/flowable/src/main/java/com/yyy/flowable/domain/dto/FlowFromFieldDTO.java b/flowable/src/main/java/com/yyy/flowable/domain/dto/FlowFromFieldDTO.java new file mode 100644 index 0000000..457af8f --- /dev/null +++ b/flowable/src/main/java/com/yyy/flowable/domain/dto/FlowFromFieldDTO.java @@ -0,0 +1,11 @@ +package com.yyy.flowable.domain.dto; + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class FlowFromFieldDTO implements Serializable { + + private Object fields; +} diff --git a/flowable/src/main/java/com/yyy/flowable/domain/dto/FlowNextDto.java b/flowable/src/main/java/com/yyy/flowable/domain/dto/FlowNextDto.java new file mode 100644 index 0000000..497d1b4 --- /dev/null +++ b/flowable/src/main/java/com/yyy/flowable/domain/dto/FlowNextDto.java @@ -0,0 +1,17 @@ +package com.yyy.flowable.domain.dto; + +import lombok.Data; + +import java.io.Serializable; + +/** + * 动态人员、组 + */ +@Data +public class FlowNextDto implements Serializable { + + private String type; + private String dataType; + private String vars; + +} diff --git a/flowable/src/main/java/com/yyy/flowable/domain/dto/FlowSaveXmlVo.java b/flowable/src/main/java/com/yyy/flowable/domain/dto/FlowSaveXmlVo.java new file mode 100644 index 0000000..f99c6f5 --- /dev/null +++ b/flowable/src/main/java/com/yyy/flowable/domain/dto/FlowSaveXmlVo.java @@ -0,0 +1,24 @@ +package com.yyy.flowable.domain.dto; + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class FlowSaveXmlVo implements Serializable { + + /** + * 流程名称 + */ + private String name; + + /** + * 流程分类 + */ + private String category; + + /** + * xml 文件 + */ + private String xml; +} diff --git a/flowable/src/main/java/com/yyy/flowable/domain/dto/FlowTaskDto.java b/flowable/src/main/java/com/yyy/flowable/domain/dto/FlowTaskDto.java new file mode 100644 index 0000000..54dd82b --- /dev/null +++ b/flowable/src/main/java/com/yyy/flowable/domain/dto/FlowTaskDto.java @@ -0,0 +1,103 @@ +package com.yyy.flowable.domain.dto; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.yyy.flowable.common.enums.FlowStatus; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

工作流任务

+ */ +@Getter +@Setter +@ApiModel("工作流任务相关-返回参数") +public class FlowTaskDto implements Serializable { + + @ApiModelProperty("任务编号") + private String taskId; + + @ApiModelProperty("任务执行编号") + private String executionId; + + @ApiModelProperty("任务名称") + private String taskName; + + @ApiModelProperty("任务Key") + private String taskDefKey; + + @ApiModelProperty("任务执行人Id") + private Long assigneeId; + + @ApiModelProperty("部门名称") + private String deptName; + + @ApiModelProperty("流程发起人部门名称") + private String startDeptName; + + @ApiModelProperty("任务执行人名称") + private String assigneeName; + + @ApiModelProperty("任务执行人部门") + private String assigneeDeptName;; + + @ApiModelProperty("流程发起人Id") + private String startUserId; + + @ApiModelProperty("流程发起人名称") + private String startUserName; + + @ApiModelProperty("流程类型") + private String category; + + @ApiModelProperty("流程变量信息") + private Object procVars; + + @ApiModelProperty("局部变量信息") + private Object taskLocalVars; + + @ApiModelProperty("流程部署编号") + private String deployId; + + @ApiModelProperty("流程ID") + private String procDefId; + + @ApiModelProperty("流程key") + private String procDefKey; + + @ApiModelProperty("流程定义名称") + private String procDefName; + + @ApiModelProperty("流程定义内置使用版本") + private int procDefVersion; + + @ApiModelProperty("流程实例ID") + private String procInsId; + + @ApiModelProperty("历史流程实例ID") + private String hisProcInsId; + + @ApiModelProperty("任务耗时") + private String duration; + + @ApiModelProperty("任务意见") + private FlowCommentDto comment; + + @ApiModelProperty("候选执行人") + private String candidate; + + @ApiModelProperty("任务创建时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date createTime; + + @ApiModelProperty("任务完成时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date finishTime; + + @ApiModelProperty("流程状态(1-起草中,2-审批中,3-已结束,4-已驳回,5-已废弃,6-流程异常)") + private Integer status; +} diff --git a/flowable/src/main/java/com/yyy/flowable/domain/dto/FlowViewerDto.java b/flowable/src/main/java/com/yyy/flowable/domain/dto/FlowViewerDto.java new file mode 100644 index 0000000..8734ec7 --- /dev/null +++ b/flowable/src/main/java/com/yyy/flowable/domain/dto/FlowViewerDto.java @@ -0,0 +1,19 @@ +package com.yyy.flowable.domain.dto; + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class FlowViewerDto implements Serializable { + + /** + * 流程key + */ + private String key; + + /** + * 是否完成(已经审批) + */ + private boolean completed; +} diff --git a/flowable/src/main/java/com/yyy/flowable/domain/vo/FlowQueryVo.java b/flowable/src/main/java/com/yyy/flowable/domain/vo/FlowQueryVo.java new file mode 100644 index 0000000..81f1887 --- /dev/null +++ b/flowable/src/main/java/com/yyy/flowable/domain/vo/FlowQueryVo.java @@ -0,0 +1,28 @@ +package com.yyy.flowable.domain.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + *

流程任务

+ */ +@Data +@ApiModel("工作流任务相关--请求参数") +public class FlowQueryVo { + + @ApiModelProperty("流程名称") + private String name; + + @ApiModelProperty("开始时间") + private String startTime; + + @ApiModelProperty("结束时间") + private String endTime; + + @ApiModelProperty("当前页码") + private Integer pageNum = 1; + + @ApiModelProperty("每页条数") + private Integer pageSize = 10; +} diff --git a/flowable/src/main/java/com/yyy/flowable/domain/vo/FlowTaskVo.java b/flowable/src/main/java/com/yyy/flowable/domain/vo/FlowTaskVo.java new file mode 100644 index 0000000..b1a6ac7 --- /dev/null +++ b/flowable/src/main/java/com/yyy/flowable/domain/vo/FlowTaskVo.java @@ -0,0 +1,54 @@ +package com.yyy.flowable.domain.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; +import java.util.Map; + +/** + *

流程任务

+ */ +@Data +@ApiModel("工作流任务相关--请求参数") +public class FlowTaskVo { + + @ApiModelProperty(value = "任务Id", required = true) + private String taskId; + + @ApiModelProperty(value = "用户Id") + private String userId; + + @ApiModelProperty(value = "任务意见") + private String comment; + + @ApiModelProperty(value = "流程实例Id", required = true) + private String instanceId; + + @ApiModelProperty(value = "节点") + private String targetKey; + + private String deploymentId; + + @ApiModelProperty(value = "流程环节定义ID") + private String defId; + + @ApiModelProperty(value = "子执行流ID") + private String currentChildExecutionId; + + @ApiModelProperty(value = "子执行流是否已执行") + private Boolean flag; + + @ApiModelProperty(value = "流程变量信息") + private Map variables; + + @ApiModelProperty(value = "审批人") + private String assignee; + + @ApiModelProperty(value = "候选人") + private List candidateUsers; + + @ApiModelProperty(value = "审批组") + private List candidateGroups; +} diff --git a/flowable/src/main/java/com/yyy/flowable/domain/vo/ReturnTaskNodeVo.java b/flowable/src/main/java/com/yyy/flowable/domain/vo/ReturnTaskNodeVo.java new file mode 100644 index 0000000..6ab9845 --- /dev/null +++ b/flowable/src/main/java/com/yyy/flowable/domain/vo/ReturnTaskNodeVo.java @@ -0,0 +1,20 @@ +package com.yyy.flowable.domain.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + *

可退回节点

+ */ +@Data +@ApiModel("可退回节点") +public class ReturnTaskNodeVo { + + @ApiModelProperty("任务Id") + private String id; + + @ApiModelProperty("用户Id") + private String name; + +} diff --git a/flowable/src/main/java/com/yyy/flowable/factory/FlowServiceFactory.java b/flowable/src/main/java/com/yyy/flowable/factory/FlowServiceFactory.java new file mode 100644 index 0000000..fb6bde7 --- /dev/null +++ b/flowable/src/main/java/com/yyy/flowable/factory/FlowServiceFactory.java @@ -0,0 +1,39 @@ +package com.yyy.flowable.factory; + +import lombok.Getter; +import org.flowable.engine.*; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; + +/** + * flowable 引擎注入封装 + */ +@Component +@Getter +public class FlowServiceFactory { + + @Resource + protected RepositoryService repositoryService; + + @Resource + protected RuntimeService runtimeService; + + @Resource + protected IdentityService identityService; + + @Resource + protected TaskService taskService; + + @Resource + protected HistoryService historyService; + + @Resource + protected ManagementService managementService; + + @Qualifier("processEngine") + @Resource + protected ProcessEngine processEngine; + +} diff --git a/flowable/src/main/java/com/yyy/flowable/flow/CustomProcessDiagramCanvas.java b/flowable/src/main/java/com/yyy/flowable/flow/CustomProcessDiagramCanvas.java new file mode 100644 index 0000000..c2c50b4 --- /dev/null +++ b/flowable/src/main/java/com/yyy/flowable/flow/CustomProcessDiagramCanvas.java @@ -0,0 +1,366 @@ +package com.yyy.flowable.flow; + +import org.flowable.bpmn.model.AssociationDirection; +import org.flowable.bpmn.model.GraphicInfo; +import org.flowable.image.impl.DefaultProcessDiagramCanvas; +import org.flowable.image.util.ReflectUtil; + +import javax.imageio.ImageIO; +import java.awt.*; +import java.awt.font.FontRenderContext; +import java.awt.font.LineBreakMeasurer; +import java.awt.font.TextAttribute; +import java.awt.font.TextLayout; +import java.awt.geom.Ellipse2D; +import java.awt.geom.Rectangle2D; +import java.awt.geom.RoundRectangle2D; +import java.awt.image.BufferedImage; +import java.io.IOException; +import java.text.AttributedCharacterIterator; +import java.text.AttributedString; + +public class CustomProcessDiagramCanvas extends DefaultProcessDiagramCanvas { + //定义走过流程连线颜色为绿色 + protected static Color HIGHLIGHT_SequenceFlow_COLOR = Color.GREEN; + //设置未走过流程的连接线颜色 + protected static Color CONNECTION_COLOR = Color.BLACK; + //设置flows连接线字体颜色red + protected static Color LABEL_COLOR = new Color(0, 0, 0); + //高亮显示task框颜色 + protected static Color HIGHLIGHT_COLOR = Color.GREEN; + protected static Color HIGHLIGHT_COLOR1 = Color.RED; + + public CustomProcessDiagramCanvas(int width, int height, int minX, int minY, String imageType, String activityFontName, String labelFontName, String annotationFontName, ClassLoader customClassLoader) { + super(width, height, minX, minY, imageType, activityFontName, labelFontName, annotationFontName, customClassLoader); + this.initialize(imageType); + } + + /** + * 重写绘制连线的方式,设置绘制颜色 + * @param xPoints + * @param yPoints + * @param conditional + * @param isDefault + * @param connectionType + * @param associationDirection + * @param highLighted + * @param scaleFactor + */ + @Override + public void drawConnection(int[] xPoints, int[] yPoints, boolean conditional, boolean isDefault, String connectionType, AssociationDirection associationDirection, boolean highLighted, double scaleFactor) { + Paint originalPaint = this.g.getPaint(); + Stroke originalStroke = this.g.getStroke(); + this.g.setPaint(CONNECTION_COLOR); + if (connectionType.equals("association")) { + this.g.setStroke(ASSOCIATION_STROKE); + } else if (highLighted) { + this.g.setPaint(HIGHLIGHT_SequenceFlow_COLOR); + this.g.setStroke(HIGHLIGHT_FLOW_STROKE); + } + + for (int i = 1; i < xPoints.length; ++i) { + Integer sourceX = xPoints[i - 1]; + Integer sourceY = yPoints[i - 1]; + Integer targetX = xPoints[i]; + Integer targetY = yPoints[i]; + java.awt.geom.Line2D.Double line = new java.awt.geom.Line2D.Double((double) sourceX, (double) sourceY, (double) targetX, (double) targetY); + this.g.draw(line); + } + + java.awt.geom.Line2D.Double line; + if (isDefault) { + line = new java.awt.geom.Line2D.Double((double) xPoints[0], (double) yPoints[0], (double) xPoints[1], (double) yPoints[1]); + this.drawDefaultSequenceFlowIndicator(line, scaleFactor); + } + + if (conditional) { + line = new java.awt.geom.Line2D.Double((double) xPoints[0], (double) yPoints[0], (double) xPoints[1], (double) yPoints[1]); + this.drawConditionalSequenceFlowIndicator(line, scaleFactor); + } + + if (associationDirection.equals(AssociationDirection.ONE) || associationDirection.equals(AssociationDirection.BOTH)) { + line = new java.awt.geom.Line2D.Double((double) xPoints[xPoints.length - 2], (double) yPoints[xPoints.length - 2], (double) xPoints[xPoints.length - 1], (double) yPoints[xPoints.length - 1]); + this.drawArrowHead(line, scaleFactor); + } + + if (associationDirection.equals(AssociationDirection.BOTH)) { + line = new java.awt.geom.Line2D.Double((double) xPoints[1], (double) yPoints[1], (double) xPoints[0], (double) yPoints[0]); + this.drawArrowHead(line, scaleFactor); + } + + this.g.setPaint(originalPaint); + this.g.setStroke(originalStroke); + } + + /** + * 设置字体大小图标颜色 + * @param imageType + */ + @Override + public void initialize(String imageType) { + if ("png".equalsIgnoreCase(imageType)) { + this.processDiagram = new BufferedImage(this.canvasWidth, this.canvasHeight, 2); + } else { + this.processDiagram = new BufferedImage(this.canvasWidth, this.canvasHeight, 1); + } + + this.g = this.processDiagram.createGraphics(); + if (!"png".equalsIgnoreCase(imageType)) { + this.g.setBackground(new Color(255, 255, 255, 0)); + this.g.clearRect(0, 0, this.canvasWidth, this.canvasHeight); + } + + this.g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); + //修改图标颜色,修改图标字体大小 + this.g.setPaint(Color.black); + Font font = new Font(this.activityFontName, 10, 14); + this.g.setFont(font); + this.fontMetrics = this.g.getFontMetrics(); + //修改连接线字体大小 + LABEL_FONT = new Font(this.labelFontName, 10, 15); + ANNOTATION_FONT = new Font(this.annotationFontName, 0, 11); + + try { + USERTASK_IMAGE = ImageIO.read(ReflectUtil.getResource("org/flowable/icons/userTask.png", this.customClassLoader)); + SCRIPTTASK_IMAGE = ImageIO.read(ReflectUtil.getResource("org/flowable/icons/scriptTask.png", this.customClassLoader)); + SERVICETASK_IMAGE = ImageIO.read(ReflectUtil.getResource("org/flowable/icons/serviceTask.png", this.customClassLoader)); + RECEIVETASK_IMAGE = ImageIO.read(ReflectUtil.getResource("org/flowable/icons/receiveTask.png", this.customClassLoader)); + SENDTASK_IMAGE = ImageIO.read(ReflectUtil.getResource("org/flowable/icons/sendTask.png", this.customClassLoader)); + MANUALTASK_IMAGE = ImageIO.read(ReflectUtil.getResource("org/flowable/icons/manualTask.png", this.customClassLoader)); + BUSINESS_RULE_TASK_IMAGE = ImageIO.read(ReflectUtil.getResource("org/flowable/icons/businessRuleTask.png", this.customClassLoader)); + SHELL_TASK_IMAGE = ImageIO.read(ReflectUtil.getResource("org/flowable/icons/shellTask.png", this.customClassLoader)); + DMN_TASK_IMAGE = ImageIO.read(ReflectUtil.getResource("org/flowable/icons/dmnTask.png", this.customClassLoader)); + CAMEL_TASK_IMAGE = ImageIO.read(ReflectUtil.getResource("org/flowable/icons/camelTask.png", this.customClassLoader)); + MULE_TASK_IMAGE = ImageIO.read(ReflectUtil.getResource("org/flowable/icons/muleTask.png", this.customClassLoader)); + HTTP_TASK_IMAGE = ImageIO.read(ReflectUtil.getResource("org/flowable/icons/httpTask.png", this.customClassLoader)); + TIMER_IMAGE = ImageIO.read(ReflectUtil.getResource("org/flowable/icons/timer.png", this.customClassLoader)); + COMPENSATE_THROW_IMAGE = ImageIO.read(ReflectUtil.getResource("org/flowable/icons/compensate-throw.png", this.customClassLoader)); + COMPENSATE_CATCH_IMAGE = ImageIO.read(ReflectUtil.getResource("org/flowable/icons/compensate.png", this.customClassLoader)); + ERROR_THROW_IMAGE = ImageIO.read(ReflectUtil.getResource("org/flowable/icons/error-throw.png", this.customClassLoader)); + ERROR_CATCH_IMAGE = ImageIO.read(ReflectUtil.getResource("org/flowable/icons/error.png", this.customClassLoader)); + MESSAGE_THROW_IMAGE = ImageIO.read(ReflectUtil.getResource("org/flowable/icons/message-throw.png", this.customClassLoader)); + MESSAGE_CATCH_IMAGE = ImageIO.read(ReflectUtil.getResource("org/flowable/icons/message.png", this.customClassLoader)); + SIGNAL_THROW_IMAGE = ImageIO.read(ReflectUtil.getResource("org/flowable/icons/signal-throw.png", this.customClassLoader)); + SIGNAL_CATCH_IMAGE = ImageIO.read(ReflectUtil.getResource("org/flowable/icons/signal.png", this.customClassLoader)); + } catch (IOException var4) { + LOGGER.warn("Could not load image for process diagram creation: {}", var4.getMessage()); + } + + } + + /** + * 设置连接线字体 + * @param text + * @param graphicInfo + * @param centered + */ + @Override + public void drawLabel(String text, GraphicInfo graphicInfo, boolean centered) { + float interline = 1.0f; + + // text + if (text != null && text.length() > 0) { + Paint originalPaint = g.getPaint(); + Font originalFont = g.getFont(); + + g.setPaint(LABEL_COLOR); + g.setFont(LABEL_FONT); + + int wrapWidth = 100; + int textY = (int) graphicInfo.getY(); + + // TODO: use drawMultilineText() + AttributedString as = new AttributedString(text); + as.addAttribute(TextAttribute.FOREGROUND, g.getPaint()); + as.addAttribute(TextAttribute.FONT, g.getFont()); + AttributedCharacterIterator aci = as.getIterator(); + FontRenderContext frc = new FontRenderContext(null, true, false); + LineBreakMeasurer lbm = new LineBreakMeasurer(aci, frc); + + while (lbm.getPosition() < text.length()) { + TextLayout tl = lbm.nextLayout(wrapWidth); + textY += tl.getAscent(); + + Rectangle2D bb = tl.getBounds(); + double tX = graphicInfo.getX(); + + if (centered) { + tX += (int) (graphicInfo.getWidth() / 2 - bb.getWidth() / 2); + } + tl.draw(g, (float) tX, textY); + textY += tl.getDescent() + tl.getLeading() + (interline - 1.0f) * tl.getAscent(); + } + + // restore originals + g.setFont(originalFont); + g.setPaint(originalPaint); + } + } + + /** + * 高亮显示task框完成的 + * @param x + * @param y + * @param width + * @param height + */ + @Override + public void drawHighLight(int x, int y, int width, int height) { + Paint originalPaint = g.getPaint(); + Stroke originalStroke = g.getStroke(); + + g.setPaint(HIGHLIGHT_COLOR); + g.setStroke(THICK_TASK_BORDER_STROKE); + + RoundRectangle2D rect = new RoundRectangle2D.Double(x, y, width, height, 20, 20); + g.draw(rect); + + g.setPaint(originalPaint); + g.setStroke(originalStroke); + } + + /** + * 自定义task框当前的位置 + * @param x + * @param y + * @param width + * @param height + */ + public void drawHighLightNow(int x, int y, int width, int height) { + Paint originalPaint = g.getPaint(); + Stroke originalStroke = g.getStroke(); + + g.setPaint(HIGHLIGHT_COLOR1); + g.setStroke(THICK_TASK_BORDER_STROKE); + + RoundRectangle2D rect = new RoundRectangle2D.Double(x, y, width, height, 20, 20); + g.draw(rect); + + g.setPaint(originalPaint); + g.setStroke(originalStroke); + } + + /** + * 自定义结束节点 + * @param x + * @param y + * @param width + * @param height + */ + public void drawHighLightEnd(int x, int y, int width, int height) { + Paint originalPaint = g.getPaint(); + Stroke originalStroke = g.getStroke(); + + g.setPaint(HIGHLIGHT_COLOR); + g.setStroke(THICK_TASK_BORDER_STROKE); + + RoundRectangle2D rect = new RoundRectangle2D.Double(x, y, width, height, 20, 20); + g.draw(rect); + + g.setPaint(originalPaint); + g.setStroke(originalStroke); + } + + /** + * task框自定义文字 + * @param name + * @param graphicInfo + * @param thickBorder + * @param scaleFactor + */ + @Override + protected void drawTask(String name, GraphicInfo graphicInfo, boolean thickBorder, double scaleFactor) { + + Paint originalPaint = g.getPaint(); + int x = (int) graphicInfo.getX(); + int y = (int) graphicInfo.getY(); + int width = (int) graphicInfo.getWidth(); + int height = (int) graphicInfo.getHeight(); + + // Create a new gradient paint for every task box, gradient depends on x and y and is not relative + g.setPaint(TASK_BOX_COLOR); + + int arcR = 6; + if (thickBorder) { + arcR = 3; + } + + // shape + RoundRectangle2D rect = new RoundRectangle2D.Double(x, y, width, height, arcR, arcR); + g.fill(rect); + g.setPaint(TASK_BORDER_COLOR); + + if (thickBorder) { + Stroke originalStroke = g.getStroke(); + g.setStroke(THICK_TASK_BORDER_STROKE); + g.draw(rect); + g.setStroke(originalStroke); + } else { + g.draw(rect); + } + + g.setPaint(originalPaint); + // text + if (scaleFactor == 1.0 && name != null && name.length() > 0) { + int boxWidth = width - (2 * TEXT_PADDING); + int boxHeight = height - 16 - ICON_PADDING - ICON_PADDING - MARKER_WIDTH - 2 - 2; + int boxX = x + width / 2 - boxWidth / 2; + int boxY = y + height / 2 - boxHeight / 2 + ICON_PADDING + ICON_PADDING - 2 - 2; + + drawMultilineCentredText(name, boxX, boxY, boxWidth, boxHeight); + } + } + + protected static Color EVENT_COLOR = new Color(255, 255, 255); + + /** + * 重写开始事件 + * @param graphicInfo + * @param image + * @param scaleFactor + */ + @Override + public void drawStartEvent(GraphicInfo graphicInfo, BufferedImage image, double scaleFactor) { + Paint originalPaint = g.getPaint(); + g.setPaint(EVENT_COLOR); + Ellipse2D circle = new Ellipse2D.Double(graphicInfo.getX(), graphicInfo.getY(), + graphicInfo.getWidth(), graphicInfo.getHeight()); + g.fill(circle); + g.setPaint(EVENT_BORDER_COLOR); + g.draw(circle); + g.setPaint(originalPaint); + if (image != null) { + // calculate coordinates to center image + int imageX = (int) Math.round(graphicInfo.getX() + (graphicInfo.getWidth() / 2) - (image.getWidth() / (2 * scaleFactor))); + int imageY = (int) Math.round(graphicInfo.getY() + (graphicInfo.getHeight() / 2) - (image.getHeight() / (2 * scaleFactor))); + g.drawImage(image, imageX, imageY, + (int) (image.getWidth() / scaleFactor), (int) (image.getHeight() / scaleFactor), null); + } + + } + + /** + * 重写结束事件 + * @param graphicInfo + * @param scaleFactor + */ + @Override + public void drawNoneEndEvent(GraphicInfo graphicInfo, double scaleFactor) { + Paint originalPaint = g.getPaint(); + Stroke originalStroke = g.getStroke(); + g.setPaint(EVENT_COLOR); + Ellipse2D circle = new Ellipse2D.Double(graphicInfo.getX(), graphicInfo.getY(), + graphicInfo.getWidth(), graphicInfo.getHeight()); + g.fill(circle); + g.setPaint(EVENT_BORDER_COLOR); +// g.setPaint(HIGHLIGHT_COLOR); + if (scaleFactor == 1.0) { + g.setStroke(END_EVENT_STROKE); + } else { + g.setStroke(new BasicStroke(2.0f)); + } + g.draw(circle); + g.setStroke(originalStroke); + g.setPaint(originalPaint); + } +} diff --git a/flowable/src/main/java/com/yyy/flowable/flow/CustomProcessDiagramGenerator.java b/flowable/src/main/java/com/yyy/flowable/flow/CustomProcessDiagramGenerator.java new file mode 100644 index 0000000..a320e17 --- /dev/null +++ b/flowable/src/main/java/com/yyy/flowable/flow/CustomProcessDiagramGenerator.java @@ -0,0 +1,400 @@ +package com.yyy.flowable.flow; + + +import org.flowable.bpmn.model.Process; +import org.flowable.bpmn.model.*; +import org.flowable.image.impl.DefaultProcessDiagramCanvas; +import org.flowable.image.impl.DefaultProcessDiagramGenerator; + +import java.util.Iterator; +import java.util.List; + +public class CustomProcessDiagramGenerator extends DefaultProcessDiagramGenerator { + @Override + protected DefaultProcessDiagramCanvas generateProcessDiagram(BpmnModel bpmnModel, String imageType, List highLightedActivities, List highLightedFlows, String activityFontName, String labelFontName, String annotationFontName, ClassLoader customClassLoader, double scaleFactor, boolean drawSequenceFlowNameWithNoLabelDI) { + this.prepareBpmnModel(bpmnModel); + DefaultProcessDiagramCanvas processDiagramCanvas = initProcessDiagramCanvas(bpmnModel, imageType, activityFontName, labelFontName, annotationFontName, customClassLoader); + Iterator var13 = bpmnModel.getPools().iterator(); + + while (var13.hasNext()) { + Pool process = (Pool) var13.next(); + GraphicInfo subProcesses = bpmnModel.getGraphicInfo(process.getId()); + processDiagramCanvas.drawPoolOrLane(process.getName(), subProcesses, scaleFactor); + } + + var13 = bpmnModel.getProcesses().iterator(); + + Process process1; + Iterator subProcesses1; + while (var13.hasNext()) { + process1 = (Process) var13.next(); + subProcesses1 = process1.getLanes().iterator(); + + while (subProcesses1.hasNext()) { + Lane artifact = (Lane) subProcesses1.next(); + GraphicInfo subProcess = bpmnModel.getGraphicInfo(artifact.getId()); + processDiagramCanvas.drawPoolOrLane(artifact.getName(), subProcess, scaleFactor); + } + } + + var13 = bpmnModel.getProcesses().iterator(); + + while (var13.hasNext()) { + process1 = (Process) var13.next(); + subProcesses1 = process1.findFlowElementsOfType(FlowNode.class).iterator(); + + while (subProcesses1.hasNext()) { + FlowNode artifact1 = (FlowNode) subProcesses1.next(); + if (!this.isPartOfCollapsedSubProcess(artifact1, bpmnModel)) { + this.drawActivity(processDiagramCanvas, bpmnModel, artifact1, highLightedActivities, highLightedFlows, scaleFactor, Boolean.valueOf(drawSequenceFlowNameWithNoLabelDI)); + } + } + } + + var13 = bpmnModel.getProcesses().iterator(); + + label75: + while (true) { + List subProcesses2; + do { + if (!var13.hasNext()) { + return processDiagramCanvas; + } + + process1 = (Process) var13.next(); + subProcesses1 = process1.getArtifacts().iterator(); + + while (subProcesses1.hasNext()) { + Artifact artifact2 = (Artifact) subProcesses1.next(); + this.drawArtifact(processDiagramCanvas, bpmnModel, artifact2); + } + + subProcesses2 = process1.findFlowElementsOfType(SubProcess.class, true); + } while (subProcesses2 == null); + + Iterator artifact3 = subProcesses2.iterator(); + + while (true) { + GraphicInfo graphicInfo; + SubProcess subProcess1; + do { + do { + if (!artifact3.hasNext()) { + continue label75; + } + + subProcess1 = (SubProcess) artifact3.next(); + graphicInfo = bpmnModel.getGraphicInfo(subProcess1.getId()); + } while (graphicInfo != null && graphicInfo.getExpanded() != null && !graphicInfo.getExpanded().booleanValue()); + } while (this.isPartOfCollapsedSubProcess(subProcess1, bpmnModel)); + + Iterator var19 = subProcess1.getArtifacts().iterator(); + + while (var19.hasNext()) { + Artifact subProcessArtifact = (Artifact) var19.next(); + this.drawArtifact(processDiagramCanvas, bpmnModel, subProcessArtifact); + } + } + } + } + + protected static DefaultProcessDiagramCanvas initProcessDiagramCanvas(BpmnModel bpmnModel, String imageType, String activityFontName, String labelFontName, String annotationFontName, ClassLoader customClassLoader) { + double minX = 1.7976931348623157E308D; + double maxX = 0.0D; + double minY = 1.7976931348623157E308D; + double maxY = 0.0D; + + GraphicInfo nrOfLanes; + for (Iterator flowNodes = bpmnModel.getPools().iterator(); flowNodes.hasNext(); maxY = nrOfLanes.getY() + nrOfLanes.getHeight()) { + Pool artifacts = (Pool) flowNodes.next(); + nrOfLanes = bpmnModel.getGraphicInfo(artifacts.getId()); + minX = nrOfLanes.getX(); + maxX = nrOfLanes.getX() + nrOfLanes.getWidth(); + minY = nrOfLanes.getY(); + } + + List var23 = gatherAllFlowNodes(bpmnModel); + Iterator var24 = var23.iterator(); + + label155: + while (var24.hasNext()) { + FlowNode var26 = (FlowNode) var24.next(); + GraphicInfo artifact = bpmnModel.getGraphicInfo(var26.getId()); + if (artifact.getX() + artifact.getWidth() > maxX) { + maxX = artifact.getX() + artifact.getWidth(); + } + + if (artifact.getX() < minX) { + minX = artifact.getX(); + } + + if (artifact.getY() + artifact.getHeight() > maxY) { + maxY = artifact.getY() + artifact.getHeight(); + } + + if (artifact.getY() < minY) { + minY = artifact.getY(); + } + + Iterator process = var26.getOutgoingFlows().iterator(); + + while (true) { + List l; + do { + if (!process.hasNext()) { + continue label155; + } + + SequenceFlow graphicInfoList = (SequenceFlow) process.next(); + l = bpmnModel.getFlowLocationGraphicInfo(graphicInfoList.getId()); + } while (l == null); + + Iterator graphicInfo = l.iterator(); + + while (graphicInfo.hasNext()) { + GraphicInfo graphicInfo1 = (GraphicInfo) graphicInfo.next(); + if (graphicInfo1.getX() > maxX) { + maxX = graphicInfo1.getX(); + } + + if (graphicInfo1.getX() < minX) { + minX = graphicInfo1.getX(); + } + + if (graphicInfo1.getY() > maxY) { + maxY = graphicInfo1.getY(); + } + + if (graphicInfo1.getY() < minY) { + minY = graphicInfo1.getY(); + } + } + } + } + + List var25 = gatherAllArtifacts(bpmnModel); + Iterator var27 = var25.iterator(); + + GraphicInfo var37; + while (var27.hasNext()) { + Artifact var29 = (Artifact) var27.next(); + GraphicInfo var31 = bpmnModel.getGraphicInfo(var29.getId()); + if (var31 != null) { + if (var31.getX() + var31.getWidth() > maxX) { + maxX = var31.getX() + var31.getWidth(); + } + + if (var31.getX() < minX) { + minX = var31.getX(); + } + + if (var31.getY() + var31.getHeight() > maxY) { + maxY = var31.getY() + var31.getHeight(); + } + + if (var31.getY() < minY) { + minY = var31.getY(); + } + } + + List var33 = bpmnModel.getFlowLocationGraphicInfo(var29.getId()); + if (var33 != null) { + Iterator var35 = var33.iterator(); + + while (var35.hasNext()) { + var37 = (GraphicInfo) var35.next(); + if (var37.getX() > maxX) { + maxX = var37.getX(); + } + + if (var37.getX() < minX) { + minX = var37.getX(); + } + + if (var37.getY() > maxY) { + maxY = var37.getY(); + } + + if (var37.getY() < minY) { + minY = var37.getY(); + } + } + } + } + + int var28 = 0; + Iterator var30 = bpmnModel.getProcesses().iterator(); + + while (var30.hasNext()) { + Process var32 = (Process) var30.next(); + Iterator var34 = var32.getLanes().iterator(); + + while (var34.hasNext()) { + Lane var36 = (Lane) var34.next(); + ++var28; + var37 = bpmnModel.getGraphicInfo(var36.getId()); + if (var37.getX() + var37.getWidth() > maxX) { + maxX = var37.getX() + var37.getWidth(); + } + + if (var37.getX() < minX) { + minX = var37.getX(); + } + + if (var37.getY() + var37.getHeight() > maxY) { + maxY = var37.getY() + var37.getHeight(); + } + + if (var37.getY() < minY) { + minY = var37.getY(); + } + } + } + + if (var23.isEmpty() && bpmnModel.getPools().isEmpty() && var28 == 0) { + minX = 0.0D; + minY = 0.0D; + } + + return new CustomProcessDiagramCanvas((int) maxX + 10, (int) maxY + 10, (int) minX, (int) minY, imageType, activityFontName, labelFontName, annotationFontName, customClassLoader); + } + + + private static void drawHighLight(DefaultProcessDiagramCanvas processDiagramCanvas, GraphicInfo graphicInfo) { + processDiagramCanvas.drawHighLight((int) graphicInfo.getX(), (int) graphicInfo.getY(), (int) graphicInfo.getWidth(), (int) graphicInfo.getHeight()); + + } + + private static void drawHighLightNow(CustomProcessDiagramCanvas processDiagramCanvas, GraphicInfo graphicInfo) { + processDiagramCanvas.drawHighLightNow((int) graphicInfo.getX(), (int) graphicInfo.getY(), (int) graphicInfo.getWidth(), (int) graphicInfo.getHeight()); + + } + + private static void drawHighLightEnd(CustomProcessDiagramCanvas processDiagramCanvas, GraphicInfo graphicInfo) { + processDiagramCanvas.drawHighLightEnd((int) graphicInfo.getX(), (int) graphicInfo.getY(), (int) graphicInfo.getWidth(), (int) graphicInfo.getHeight()); + + } + + @Override + protected void drawActivity(DefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, + FlowNode flowNode, List highLightedActivities, List highLightedFlows, double scaleFactor, Boolean drawSequenceFlowNameWithNoLabelDI) { + + ActivityDrawInstruction drawInstruction = activityDrawInstructions.get(flowNode.getClass()); + if (drawInstruction != null) { + + drawInstruction.draw(processDiagramCanvas, bpmnModel, flowNode); + + // Gather info on the multi instance marker + boolean multiInstanceSequential = false; + boolean multiInstanceParallel = false; + boolean collapsed = false; + if (flowNode instanceof Activity) { + Activity activity = (Activity) flowNode; + MultiInstanceLoopCharacteristics multiInstanceLoopCharacteristics = activity.getLoopCharacteristics(); + if (multiInstanceLoopCharacteristics != null) { + multiInstanceSequential = multiInstanceLoopCharacteristics.isSequential(); + multiInstanceParallel = !multiInstanceSequential; + } + } + + // Gather info on the collapsed marker + GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); + if (flowNode instanceof SubProcess) { + collapsed = graphicInfo.getExpanded() != null && !graphicInfo.getExpanded(); + } else if (flowNode instanceof CallActivity) { + collapsed = true; + } + + if (scaleFactor == 1.0) { + // Actually draw the markers + processDiagramCanvas.drawActivityMarkers((int) graphicInfo.getX(), (int) graphicInfo.getY(), (int) graphicInfo.getWidth(), (int) graphicInfo.getHeight(), + multiInstanceSequential, multiInstanceParallel, collapsed); + } + + // Draw highlighted activities + if (highLightedActivities.contains(flowNode.getId())) { + + if (highLightedActivities.get(highLightedActivities.size() - 1).equals(flowNode.getId()) + && !"endenv".equals(flowNode.getId())) { + if ((flowNode.getId().contains("Event_"))) { + drawHighLightEnd((CustomProcessDiagramCanvas) processDiagramCanvas, bpmnModel.getGraphicInfo(flowNode.getId())); + } else { + drawHighLightNow((CustomProcessDiagramCanvas) processDiagramCanvas, bpmnModel.getGraphicInfo(flowNode.getId())); + } + } else { + drawHighLight(processDiagramCanvas, bpmnModel.getGraphicInfo(flowNode.getId())); + } + + + } + + } + + // Outgoing transitions of activity + for (SequenceFlow sequenceFlow : flowNode.getOutgoingFlows()) { + boolean highLighted = (highLightedFlows.contains(sequenceFlow.getId())); + String defaultFlow = null; + if (flowNode instanceof Activity) { + defaultFlow = ((Activity) flowNode).getDefaultFlow(); + } else if (flowNode instanceof Gateway) { + defaultFlow = ((Gateway) flowNode).getDefaultFlow(); + } + + boolean isDefault = false; + if (defaultFlow != null && defaultFlow.equalsIgnoreCase(sequenceFlow.getId())) { + isDefault = true; + } + boolean drawConditionalIndicator = sequenceFlow.getConditionExpression() != null && !(flowNode instanceof Gateway); + + String sourceRef = sequenceFlow.getSourceRef(); + String targetRef = sequenceFlow.getTargetRef(); + FlowElement sourceElement = bpmnModel.getFlowElement(sourceRef); + FlowElement targetElement = bpmnModel.getFlowElement(targetRef); + List graphicInfoList = bpmnModel.getFlowLocationGraphicInfo(sequenceFlow.getId()); + if (graphicInfoList != null && graphicInfoList.size() > 0) { + graphicInfoList = connectionPerfectionizer(processDiagramCanvas, bpmnModel, sourceElement, targetElement, graphicInfoList); + int xPoints[] = new int[graphicInfoList.size()]; + int yPoints[] = new int[graphicInfoList.size()]; + + for (int i = 1; i < graphicInfoList.size(); i++) { + GraphicInfo graphicInfo = graphicInfoList.get(i); + GraphicInfo previousGraphicInfo = graphicInfoList.get(i - 1); + + if (i == 1) { + xPoints[0] = (int) previousGraphicInfo.getX(); + yPoints[0] = (int) previousGraphicInfo.getY(); + } + xPoints[i] = (int) graphicInfo.getX(); + yPoints[i] = (int) graphicInfo.getY(); + + } + + processDiagramCanvas.drawSequenceflow(xPoints, yPoints, drawConditionalIndicator, isDefault, highLighted, scaleFactor); + + + // Draw sequenceflow label + GraphicInfo labelGraphicInfo = bpmnModel.getLabelGraphicInfo(sequenceFlow.getId()); + if (labelGraphicInfo != null) { + processDiagramCanvas.drawLabel(sequenceFlow.getName(), labelGraphicInfo, false); + } else { + if (drawSequenceFlowNameWithNoLabelDI) { + GraphicInfo lineCenter = getLineCenter(graphicInfoList); + processDiagramCanvas.drawLabel(sequenceFlow.getName(), lineCenter, false); + } + + } + } + } + + // Nested elements + if (flowNode instanceof FlowElementsContainer) { + for (FlowElement nestedFlowElement : ((FlowElementsContainer) flowNode).getFlowElements()) { + if (nestedFlowElement instanceof FlowNode && !isPartOfCollapsedSubProcess(nestedFlowElement, bpmnModel)) { + drawActivity(processDiagramCanvas, bpmnModel, (FlowNode) nestedFlowElement, + highLightedActivities, highLightedFlows, scaleFactor, drawSequenceFlowNameWithNoLabelDI); + } + } + } + } +} + diff --git a/flowable/src/main/java/com/yyy/flowable/flow/FindNextNodeUtil.java b/flowable/src/main/java/com/yyy/flowable/flow/FindNextNodeUtil.java new file mode 100644 index 0000000..49a94d2 --- /dev/null +++ b/flowable/src/main/java/com/yyy/flowable/flow/FindNextNodeUtil.java @@ -0,0 +1,253 @@ +package com.yyy.flowable.flow; + +import com.googlecode.aviator.AviatorEvaluator; +import com.googlecode.aviator.Expression; +import org.flowable.bpmn.model.Process; +import org.flowable.bpmn.model.*; +import org.flowable.engine.RepositoryService; +import org.flowable.engine.repository.ProcessDefinition; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.Map; + +public class FindNextNodeUtil { + + /** + * 获取下一步骤的用户任务 + * + * @param repositoryService + * @param map + * @return + */ + public static List getNextUserTasks(RepositoryService repositoryService, org.flowable.task.api.Task task, Map map) { + List data = new ArrayList<>(); + ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionId(task.getProcessDefinitionId()).singleResult(); + BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinition.getId()); + Process mainProcess = bpmnModel.getMainProcess(); + Collection flowElements = mainProcess.getFlowElements(); + String key = task.getTaskDefinitionKey(); + FlowElement flowElement = bpmnModel.getFlowElement(key); + next(flowElements, flowElement, map, data); + return data; + } + + /** + * 启动流程时获取下一步骤的用户任务 + * + * @param repositoryService + * @param map + * @return + */ + public static List getNextUserTasksByStart(RepositoryService repositoryService, ProcessDefinition processDefinition, Map map) { + List data = new ArrayList<>(); + BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinition.getId()); + Process mainProcess = bpmnModel.getMainProcess(); + Collection flowElements = mainProcess.getFlowElements(); + String key = null; + // 找到开始节点 并获取唯一key + for (FlowElement flowElement : flowElements) { + if (flowElement instanceof StartEvent) { + key = flowElement.getId(); + break; + } + } + FlowElement flowElement = bpmnModel.getFlowElement(key); + next(flowElements, flowElement, map, data); + return data; + } + + + + /** + * 查找下一节点 + * + * @param flowElements + * @param flowElement + * @param map + * @param nextUser + */ + public static void next(Collection flowElements, FlowElement flowElement, Map map, List nextUser) { + //如果是结束节点 + if (flowElement instanceof EndEvent) { + //如果是子任务的结束节点 + if (getSubProcess(flowElements, flowElement) != null) { + flowElement = getSubProcess(flowElements, flowElement); + } + } + //获取Task的出线信息--可以拥有多个 + List outGoingFlows = null; + if (flowElement instanceof Task) { + outGoingFlows = ((Task) flowElement).getOutgoingFlows(); + } else if (flowElement instanceof Gateway) { + outGoingFlows = ((Gateway) flowElement).getOutgoingFlows(); + } else if (flowElement instanceof StartEvent) { + outGoingFlows = ((StartEvent) flowElement).getOutgoingFlows(); + } else if (flowElement instanceof SubProcess) { + outGoingFlows = ((SubProcess) flowElement).getOutgoingFlows(); + } else if (flowElement instanceof CallActivity) { + outGoingFlows = ((CallActivity) flowElement).getOutgoingFlows(); + } + if (outGoingFlows != null && outGoingFlows.size() > 0) { + //遍历所有的出线--找到可以正确执行的那一条 + for (SequenceFlow sequenceFlow : outGoingFlows) { + //1.有表达式,且为true + //2.无表达式 + String expression = sequenceFlow.getConditionExpression(); + if (expression == null || + expressionResult(map, expression.substring(expression.lastIndexOf("{") + 1, expression.lastIndexOf("}")))) { + //出线的下一节点 + String nextFlowElementID = sequenceFlow.getTargetRef(); + if (checkSubProcess(nextFlowElementID, flowElements, nextUser)) { + continue; + } + + //查询下一节点的信息 + FlowElement nextFlowElement = getFlowElementById(nextFlowElementID, flowElements); + //调用流程 + if (nextFlowElement instanceof CallActivity) { + CallActivity ca = (CallActivity) nextFlowElement; + if (ca.getLoopCharacteristics() != null) { + UserTask userTask = new UserTask(); + userTask.setId(ca.getId()); + + userTask.setId(ca.getId()); + userTask.setLoopCharacteristics(ca.getLoopCharacteristics()); + userTask.setName(ca.getName()); + nextUser.add(userTask); + } + next(flowElements, nextFlowElement, map, nextUser); + } + //用户任务 + if (nextFlowElement instanceof UserTask) { + nextUser.add((UserTask) nextFlowElement); + } + //排他网关 + else if (nextFlowElement instanceof ExclusiveGateway) { + next(flowElements, nextFlowElement, map, nextUser); + } + //并行网关 + else if (nextFlowElement instanceof ParallelGateway) { + next(flowElements, nextFlowElement, map, nextUser); + } + //接收任务 + else if (nextFlowElement instanceof ReceiveTask) { + next(flowElements, nextFlowElement, map, nextUser); + } + //服务任务 + else if (nextFlowElement instanceof ServiceTask) { + next(flowElements, nextFlowElement, map, nextUser); + } + //子任务的起点 + else if (nextFlowElement instanceof StartEvent) { + next(flowElements, nextFlowElement, map, nextUser); + } + //结束节点 + else if (nextFlowElement instanceof EndEvent) { + next(flowElements, nextFlowElement, map, nextUser); + } + } + } + } + } + + /** + * 判断是否是多实例子流程并且需要设置集合类型变量 + */ + public static boolean checkSubProcess(String Id, Collection flowElements, List nextUser) { + for (FlowElement flowElement1 : flowElements) { + if (flowElement1 instanceof SubProcess && flowElement1.getId().equals(Id)) { + + SubProcess sp = (SubProcess) flowElement1; + if (sp.getLoopCharacteristics() != null) { + String inputDataItem = sp.getLoopCharacteristics().getInputDataItem(); + UserTask userTask = new UserTask(); + userTask.setId(sp.getId()); + userTask.setLoopCharacteristics(sp.getLoopCharacteristics()); + userTask.setName(sp.getName()); + nextUser.add(userTask); + return true; + } + } + } + + return false; + + } + + /** + * 查询一个节点的是否子任务中的节点,如果是,返回子任务 + * + * @param flowElements 全流程的节点集合 + * @param flowElement 当前节点 + * @return + */ + public static FlowElement getSubProcess(Collection flowElements, FlowElement flowElement) { + for (FlowElement flowElement1 : flowElements) { + if (flowElement1 instanceof SubProcess) { + for (FlowElement flowElement2 : ((SubProcess) flowElement1).getFlowElements()) { + if (flowElement.equals(flowElement2)) { + return flowElement1; + } + } + } + } + return null; + } + + + /** + * 根据ID查询流程节点对象, 如果是子任务,则返回子任务的开始节点 + * + * @param Id 节点ID + * @param flowElements 流程节点集合 + * @return + */ + public static FlowElement getFlowElementById(String Id, Collection flowElements) { + for (FlowElement flowElement : flowElements) { + if (flowElement.getId().equals(Id)) { + //如果是子任务,则查询出子任务的开始节点 + if (flowElement instanceof SubProcess) { + return getStartFlowElement(((SubProcess) flowElement).getFlowElements()); + } + return flowElement; + } + if (flowElement instanceof SubProcess) { + FlowElement flowElement1 = getFlowElementById(Id, ((SubProcess) flowElement).getFlowElements()); + if (flowElement1 != null) { + return flowElement1; + } + } + } + return null; + } + + /** + * 返回流程的开始节点 + * + * @param flowElements 节点集合 + * @description: + */ + public static FlowElement getStartFlowElement(Collection flowElements) { + for (FlowElement flowElement : flowElements) { + if (flowElement instanceof StartEvent) { + return flowElement; + } + } + return null; + } + + /** + * 校验el表达式 + * + * @param map + * @param expression + * @return + */ + public static boolean expressionResult(Map map, String expression) { + Expression exp = AviatorEvaluator.compile(expression); + final Object execute = exp.execute(map); + return Boolean.parseBoolean(String.valueOf(execute)); + } +} diff --git a/flowable/src/main/java/com/yyy/flowable/flow/FlowableUtils.java b/flowable/src/main/java/com/yyy/flowable/flow/FlowableUtils.java new file mode 100644 index 0000000..cb09ebc --- /dev/null +++ b/flowable/src/main/java/com/yyy/flowable/flow/FlowableUtils.java @@ -0,0 +1,585 @@ +package com.yyy.flowable.flow; + +import lombok.extern.slf4j.Slf4j; +import org.flowable.bpmn.model.*; +import org.flowable.engine.impl.bpmn.behavior.ParallelMultiInstanceBehavior; +import org.flowable.engine.impl.bpmn.behavior.SequentialMultiInstanceBehavior; +import org.flowable.task.api.history.HistoricTaskInstance; + +import java.util.*; + +@Slf4j +public class FlowableUtils { + + /** + * 根据节点,获取入口连线 + * @param source + * @return + */ + public static List getElementIncomingFlows(FlowElement source) { + List sequenceFlows = null; + if (source instanceof FlowNode) { + sequenceFlows = ((FlowNode) source).getIncomingFlows(); + } else if (source instanceof Gateway) { + sequenceFlows = ((Gateway) source).getIncomingFlows(); + } else if (source instanceof SubProcess) { + sequenceFlows = ((SubProcess) source).getIncomingFlows(); + } else if (source instanceof StartEvent) { + sequenceFlows = ((StartEvent) source).getIncomingFlows(); + } else if (source instanceof EndEvent) { + sequenceFlows = ((EndEvent) source).getIncomingFlows(); + } + return sequenceFlows; + } + + /** + * 根据节点,获取出口连线 + * @param source + * @return + */ + public static List getElementOutgoingFlows(FlowElement source) { + List sequenceFlows = null; + if (source instanceof FlowNode) { + sequenceFlows = ((FlowNode) source).getOutgoingFlows(); + } else if (source instanceof Gateway) { + sequenceFlows = ((Gateway) source).getOutgoingFlows(); + } else if (source instanceof SubProcess) { + sequenceFlows = ((SubProcess) source).getOutgoingFlows(); + } else if (source instanceof StartEvent) { + sequenceFlows = ((StartEvent) source).getOutgoingFlows(); + } else if (source instanceof EndEvent) { + sequenceFlows = ((EndEvent) source).getOutgoingFlows(); + } + return sequenceFlows; + } + + /** + * 获取全部节点列表,包含子流程节点 + * @param flowElements + * @param allElements + * @return + */ + public static Collection getAllElements(Collection flowElements, Collection allElements) { + allElements = allElements == null ? new ArrayList<>() : allElements; + + for (FlowElement flowElement : flowElements) { + allElements.add(flowElement); + if (flowElement instanceof SubProcess) { + // 继续深入子流程,进一步获取子流程 + allElements = FlowableUtils.getAllElements(((SubProcess) flowElement).getFlowElements(), allElements); + } + } + return allElements; + } + + /** + * 迭代获取父级任务节点列表,向前找 + * @param source 起始节点 + * @param hasSequenceFlow 已经经过的连线的 ID,用于判断线路是否重复 + * @param userTaskList 已找到的用户任务节点 + * @return + */ + public static List iteratorFindParentUserTasks(FlowElement source, Set hasSequenceFlow, List userTaskList) { + userTaskList = userTaskList == null ? new ArrayList<>() : userTaskList; + hasSequenceFlow = hasSequenceFlow == null ? new HashSet<>() : hasSequenceFlow; + + // 如果该节点为开始节点,且存在上级子节点,则顺着上级子节点继续迭代 + if (source instanceof StartEvent && source.getSubProcess() != null) { + userTaskList = iteratorFindParentUserTasks(source.getSubProcess(), hasSequenceFlow, userTaskList); + } + + // 根据类型,获取入口连线 + List sequenceFlows = getElementIncomingFlows(source); + + if (sequenceFlows != null) { + // 循环找到目标元素 + for (SequenceFlow sequenceFlow: sequenceFlows) { + // 如果发现连线重复,说明循环了,跳过这个循环 + if (hasSequenceFlow.contains(sequenceFlow.getId())) { + continue; + } + // 添加已经走过的连线 + hasSequenceFlow.add(sequenceFlow.getId()); + // 类型为用户节点,则新增父级节点 + if (sequenceFlow.getSourceFlowElement() instanceof UserTask) { + userTaskList.add((UserTask) sequenceFlow.getSourceFlowElement()); + continue; + } + // 类型为子流程,则添加子流程开始节点出口处相连的节点 + if (sequenceFlow.getSourceFlowElement() instanceof SubProcess) { + // 获取子流程用户任务节点 + List childUserTaskList = findChildProcessUserTasks((StartEvent) ((SubProcess) sequenceFlow.getSourceFlowElement()).getFlowElements().toArray()[0], null, null); + // 如果找到节点,则说明该线路找到节点,不继续向下找,反之继续 + if (childUserTaskList != null && childUserTaskList.size() > 0) { + userTaskList.addAll(childUserTaskList); + continue; + } + } + // 继续迭代 + userTaskList = iteratorFindParentUserTasks(sequenceFlow.getSourceFlowElement(), hasSequenceFlow, userTaskList); + } + } + return userTaskList; + } + + /** + * 根据正在运行的任务节点,迭代获取子级任务节点列表,向后找 + * @param source 起始节点(退回节点) + * @param runTaskKeyList 正在运行的任务 Key,用于校验任务节点是否是正在运行的节点 + * @param hasSequenceFlow 已经经过的连线的 ID,用于判断线路是否重复 + * @param userTaskList 需要撤回的用户任务列表 + * @return + */ + public static List iteratorFindChildUserTasks(FlowElement source, List runTaskKeyList, Set hasSequenceFlow, List userTaskList) { + hasSequenceFlow = hasSequenceFlow == null ? new HashSet<>() : hasSequenceFlow; + userTaskList = userTaskList == null ? new ArrayList<>() : userTaskList; + + // 如果该节点为开始节点,且存在上级子节点,则顺着上级子节点继续迭代 + if (source instanceof EndEvent && source.getSubProcess() != null) { + userTaskList = iteratorFindChildUserTasks(source.getSubProcess(), runTaskKeyList, hasSequenceFlow, userTaskList); + } + + // 根据类型,获取出口连线 + List sequenceFlows = getElementOutgoingFlows(source); + + if (sequenceFlows != null) { + // 循环找到目标元素 + for (SequenceFlow sequenceFlow: sequenceFlows) { + // 如果发现连线重复,说明循环了,跳过这个循环 + if (hasSequenceFlow.contains(sequenceFlow.getId())) { + continue; + } + // 添加已经走过的连线 + hasSequenceFlow.add(sequenceFlow.getId()); + // 如果为用户任务类型,且任务节点的 Key 正在运行的任务中存在,添加 + if (sequenceFlow.getTargetFlowElement() instanceof UserTask && runTaskKeyList.contains((sequenceFlow.getTargetFlowElement()).getId())) { + userTaskList.add((UserTask) sequenceFlow.getTargetFlowElement()); + continue; + } + // 如果节点为子流程节点情况,则从节点中的第一个节点开始获取 + if (sequenceFlow.getTargetFlowElement() instanceof SubProcess) { + List childUserTaskList = iteratorFindChildUserTasks((FlowElement) (((SubProcess) sequenceFlow.getTargetFlowElement()).getFlowElements().toArray()[0]), runTaskKeyList, hasSequenceFlow, null); + // 如果找到节点,则说明该线路找到节点,不继续向下找,反之继续 + if (childUserTaskList != null && childUserTaskList.size() > 0) { + userTaskList.addAll(childUserTaskList); + continue; + } + } + // 继续迭代 + userTaskList = iteratorFindChildUserTasks(sequenceFlow.getTargetFlowElement(), runTaskKeyList, hasSequenceFlow, userTaskList); + } + } + return userTaskList; + } + + /** + * 迭代获取子流程用户任务节点 + * @param source 起始节点 + * @param hasSequenceFlow 已经经过的连线的 ID,用于判断线路是否重复 + * @param userTaskList 需要撤回的用户任务列表 + * @return + */ + public static List findChildProcessUserTasks(FlowElement source, Set hasSequenceFlow, List userTaskList) { + hasSequenceFlow = hasSequenceFlow == null ? new HashSet<>() : hasSequenceFlow; + userTaskList = userTaskList == null ? new ArrayList<>() : userTaskList; + + // 根据类型,获取出口连线 + List sequenceFlows = getElementOutgoingFlows(source); + + if (sequenceFlows != null) { + // 循环找到目标元素 + for (SequenceFlow sequenceFlow: sequenceFlows) { + // 如果发现连线重复,说明循环了,跳过这个循环 + if (hasSequenceFlow.contains(sequenceFlow.getId())) { + continue; + } + // 添加已经走过的连线 + hasSequenceFlow.add(sequenceFlow.getId()); + // 如果为用户任务类型,且任务节点的 Key 正在运行的任务中存在,添加 + if (sequenceFlow.getTargetFlowElement() instanceof UserTask) { + userTaskList.add((UserTask) sequenceFlow.getTargetFlowElement()); + continue; + } + // 如果节点为子流程节点情况,则从节点中的第一个节点开始获取 + if (sequenceFlow.getTargetFlowElement() instanceof SubProcess) { + List childUserTaskList = findChildProcessUserTasks((FlowElement) (((SubProcess) sequenceFlow.getTargetFlowElement()).getFlowElements().toArray()[0]), hasSequenceFlow, null); + // 如果找到节点,则说明该线路找到节点,不继续向下找,反之继续 + if (childUserTaskList != null && childUserTaskList.size() > 0) { + userTaskList.addAll(childUserTaskList); + continue; + } + } + // 继续迭代 + userTaskList = findChildProcessUserTasks(sequenceFlow.getTargetFlowElement(), hasSequenceFlow, userTaskList); + } + } + return userTaskList; + } + + /** + * 从后向前寻路,获取所有脏线路上的点 + * @param source 起始节点 + * @param passRoads 已经经过的点集合 + * @param hasSequenceFlow 已经经过的连线的 ID,用于判断线路是否重复 + * @param targets 目标脏线路终点 + * @param dirtyRoads 确定为脏数据的点,因为不需要重复,因此使用 set 存储 + * @return + */ + public static Set iteratorFindDirtyRoads(FlowElement source, List passRoads, Set hasSequenceFlow, List targets, Set dirtyRoads) { + passRoads = passRoads == null ? new ArrayList<>() : passRoads; + dirtyRoads = dirtyRoads == null ? new HashSet<>() : dirtyRoads; + hasSequenceFlow = hasSequenceFlow == null ? new HashSet<>() : hasSequenceFlow; + + // 如果该节点为开始节点,且存在上级子节点,则顺着上级子节点继续迭代 + if (source instanceof StartEvent && source.getSubProcess() != null) { + dirtyRoads = iteratorFindDirtyRoads(source.getSubProcess(), passRoads, hasSequenceFlow, targets, dirtyRoads); + } + + // 根据类型,获取入口连线 + List sequenceFlows = getElementIncomingFlows(source); + + if (sequenceFlows != null) { + // 循环找到目标元素 + for (SequenceFlow sequenceFlow: sequenceFlows) { + // 如果发现连线重复,说明循环了,跳过这个循环 + if (hasSequenceFlow.contains(sequenceFlow.getId())) { + continue; + } + // 添加已经走过的连线 + hasSequenceFlow.add(sequenceFlow.getId()); + // 新增经过的路线 + passRoads.add(sequenceFlow.getSourceFlowElement().getId()); + // 如果此点为目标点,确定经过的路线为脏线路,添加点到脏线路中,然后找下个连线 + if (targets.contains(sequenceFlow.getSourceFlowElement().getId())) { + dirtyRoads.addAll(passRoads); + continue; + } + // 如果该节点为开始节点,且存在上级子节点,则顺着上级子节点继续迭代 + if (sequenceFlow.getSourceFlowElement() instanceof SubProcess) { + dirtyRoads = findChildProcessAllDirtyRoad((StartEvent) ((SubProcess) sequenceFlow.getSourceFlowElement()).getFlowElements().toArray()[0], null, dirtyRoads); + // 是否存在子流程上,true 是,false 否 + Boolean isInChildProcess = dirtyTargetInChildProcess((StartEvent) ((SubProcess) sequenceFlow.getSourceFlowElement()).getFlowElements().toArray()[0], null, targets, null); + if (isInChildProcess) { + // 已在子流程上找到,该路线结束 + continue; + } + } + // 继续迭代 + dirtyRoads = iteratorFindDirtyRoads(sequenceFlow.getSourceFlowElement(), passRoads, hasSequenceFlow, targets, dirtyRoads); + } + } + return dirtyRoads; + } + + /** + * 迭代获取子流程脏路线 + * 说明,假如回退的点就是子流程,那么也肯定会回退到子流程最初的用户任务节点,因此子流程中的节点全是脏路线 + * @param source 起始节点 + * @param hasSequenceFlow 已经经过的连线的 ID,用于判断线路是否重复 + * @param dirtyRoads 确定为脏数据的点,因为不需要重复,因此使用 set 存储 + * @return + */ + public static Set findChildProcessAllDirtyRoad(FlowElement source, Set hasSequenceFlow, Set dirtyRoads) { + hasSequenceFlow = hasSequenceFlow == null ? new HashSet<>() : hasSequenceFlow; + dirtyRoads = dirtyRoads == null ? new HashSet<>() : dirtyRoads; + + // 根据类型,获取出口连线 + List sequenceFlows = getElementOutgoingFlows(source); + + if (sequenceFlows != null) { + // 循环找到目标元素 + for (SequenceFlow sequenceFlow: sequenceFlows) { + // 如果发现连线重复,说明循环了,跳过这个循环 + if (hasSequenceFlow.contains(sequenceFlow.getId())) { + continue; + } + // 添加已经走过的连线 + hasSequenceFlow.add(sequenceFlow.getId()); + // 添加脏路线 + dirtyRoads.add(sequenceFlow.getTargetFlowElement().getId()); + // 如果节点为子流程节点情况,则从节点中的第一个节点开始获取 + if (sequenceFlow.getTargetFlowElement() instanceof SubProcess) { + dirtyRoads = findChildProcessAllDirtyRoad((FlowElement) (((SubProcess) sequenceFlow.getTargetFlowElement()).getFlowElements().toArray()[0]), hasSequenceFlow, dirtyRoads); + } + // 继续迭代 + dirtyRoads = findChildProcessAllDirtyRoad(sequenceFlow.getTargetFlowElement(), hasSequenceFlow, dirtyRoads); + } + } + return dirtyRoads; + } + + /** + * 判断脏路线结束节点是否在子流程上 + * @param source 起始节点 + * @param hasSequenceFlow 已经经过的连线的 ID,用于判断线路是否重复 + * @param targets 判断脏路线节点是否存在子流程上,只要存在一个,说明脏路线只到子流程为止 + * @param inChildProcess 是否存在子流程上,true 是,false 否 + * @return + */ + public static Boolean dirtyTargetInChildProcess(FlowElement source, Set hasSequenceFlow, List targets, Boolean inChildProcess) { + hasSequenceFlow = hasSequenceFlow == null ? new HashSet<>() : hasSequenceFlow; + inChildProcess = inChildProcess != null && inChildProcess; + + // 根据类型,获取出口连线 + List sequenceFlows = getElementOutgoingFlows(source); + + if (sequenceFlows != null && !inChildProcess) { + // 循环找到目标元素 + for (SequenceFlow sequenceFlow: sequenceFlows) { + // 如果发现连线重复,说明循环了,跳过这个循环 + if (hasSequenceFlow.contains(sequenceFlow.getId())) { + continue; + } + // 添加已经走过的连线 + hasSequenceFlow.add(sequenceFlow.getId()); + // 如果发现目标点在子流程上存在,说明只到子流程为止 + if (targets.contains(sequenceFlow.getTargetFlowElement().getId())) { + inChildProcess = true; + break; + } + // 如果节点为子流程节点情况,则从节点中的第一个节点开始获取 + if (sequenceFlow.getTargetFlowElement() instanceof SubProcess) { + inChildProcess = dirtyTargetInChildProcess((FlowElement) (((SubProcess) sequenceFlow.getTargetFlowElement()).getFlowElements().toArray()[0]), hasSequenceFlow, targets, inChildProcess); + } + // 继续迭代 + inChildProcess = dirtyTargetInChildProcess(sequenceFlow.getTargetFlowElement(), hasSequenceFlow, targets, inChildProcess); + } + } + return inChildProcess; + } + + /** + * 迭代从后向前扫描,判断目标节点相对于当前节点是否是串行 + * 不存在直接回退到子流程中的情况,但存在从子流程出去到父流程情况 + * @param source 起始节点 + * @param isSequential 是否串行 + * @param hasSequenceFlow 已经经过的连线的 ID,用于判断线路是否重复 + * @param targetKsy 目标节点 + * @return + */ + public static Boolean iteratorCheckSequentialReferTarget(FlowElement source, String targetKsy, Set hasSequenceFlow, Boolean isSequential) { + isSequential = isSequential == null || isSequential; + hasSequenceFlow = hasSequenceFlow == null ? new HashSet<>() : hasSequenceFlow; + + // 如果该节点为开始节点,且存在上级子节点,则顺着上级子节点继续迭代 + if (source instanceof StartEvent && source.getSubProcess() != null) { + isSequential = iteratorCheckSequentialReferTarget(source.getSubProcess(), targetKsy, hasSequenceFlow, isSequential); + } + + // 根据类型,获取入口连线 + List sequenceFlows = getElementIncomingFlows(source); + + if (sequenceFlows != null) { + // 循环找到目标元素 + for (SequenceFlow sequenceFlow: sequenceFlows) { + // 如果发现连线重复,说明循环了,跳过这个循环 + if (hasSequenceFlow.contains(sequenceFlow.getId())) { + continue; + } + // 添加已经走过的连线 + hasSequenceFlow.add(sequenceFlow.getId()); + // 如果目标节点已被判断为并行,后面都不需要执行,直接返回 + if (!isSequential) { + break; + } + // 这条线路存在目标节点,这条线路完成,进入下个线路 + if (targetKsy.equals(sequenceFlow.getSourceFlowElement().getId())) { + continue; + } + if (sequenceFlow.getSourceFlowElement() instanceof StartEvent) { + isSequential = false; + break; + } + // 否则就继续迭代 + isSequential = iteratorCheckSequentialReferTarget(sequenceFlow.getSourceFlowElement(), targetKsy, hasSequenceFlow, isSequential); + } + } + return isSequential; + } + + /** + * 从后向前寻路,获取到达节点的所有路线 + * 不存在直接回退到子流程,但是存在回退到父级流程的情况 + * @param source 起始节点 + * @param passRoads 已经经过的点集合 + * @param roads 路线 + * @return + */ + public static List> findRoad(FlowElement source, List passRoads, Set hasSequenceFlow, List> roads) { + passRoads = passRoads == null ? new ArrayList<>() : passRoads; + roads = roads == null ? new ArrayList<>() : roads; + hasSequenceFlow = hasSequenceFlow == null ? new HashSet<>() : hasSequenceFlow; + + // 如果该节点为开始节点,且存在上级子节点,则顺着上级子节点继续迭代 + if (source instanceof StartEvent && source.getSubProcess() != null) { + roads = findRoad(source.getSubProcess(), passRoads, hasSequenceFlow, roads); + } + + // 根据类型,获取入口连线 + List sequenceFlows = getElementIncomingFlows(source); + + if (sequenceFlows != null && sequenceFlows.size() != 0) { + for (SequenceFlow sequenceFlow: sequenceFlows) { + // 如果发现连线重复,说明循环了,跳过这个循环 + if (hasSequenceFlow.contains(sequenceFlow.getId())) { + continue; + } + // 添加已经走过的连线 + hasSequenceFlow.add(sequenceFlow.getId()); + // 添加经过路线 + if (sequenceFlow.getSourceFlowElement() instanceof UserTask) { + passRoads.add((UserTask) sequenceFlow.getSourceFlowElement()); + } + // 继续迭代 + roads = findRoad(sequenceFlow.getSourceFlowElement(), passRoads, hasSequenceFlow, roads); + } + } else { + // 添加路线 + roads.add(passRoads); + } + return roads; + } + + /** + * 历史节点数据清洗,清洗掉又回滚导致的脏数据 + * @param allElements 全部节点信息 + * @param historicTaskInstanceList 历史任务实例信息,数据采用开始时间升序 + * @return + */ + public static List historicTaskInstanceClean(Collection allElements, List historicTaskInstanceList) { + // 会签节点收集 + List multiTask = new ArrayList<>(); + allElements.forEach(flowElement -> { + if (flowElement instanceof UserTask) { + // 如果该节点的行为为会签行为,说明该节点为会签节点 + if (((UserTask) flowElement).getBehavior() instanceof ParallelMultiInstanceBehavior || ((UserTask) flowElement).getBehavior() instanceof SequentialMultiInstanceBehavior) { + multiTask.add(flowElement.getId()); + } + } + }); + // 循环放入栈,栈 LIFO:后进先出 + Stack stack = new Stack<>(); + historicTaskInstanceList.forEach(stack::push); + // 清洗后的历史任务实例 + List lastHistoricTaskInstanceList = new ArrayList<>(); + // 网关存在可能只走了部分分支情况,且还存在跳转废弃数据以及其他分支数据的干扰,因此需要对历史节点数据进行清洗 + // 临时用户任务 key + StringBuilder userTaskKey = null; + // 临时被删掉的任务 key,存在并行情况 + List deleteKeyList = new ArrayList<>(); + // 临时脏数据线路 + List> dirtyDataLineList = new ArrayList<>(); + // 由某个点跳到会签点,此时出现多个会签实例对应 1 个跳转情况,需要把这些连续脏数据都找到 + // 会签特殊处理下标 + int multiIndex = -1; + // 会签特殊处理 key + StringBuilder multiKey = null; + // 会签特殊处理操作标识 + boolean multiOpera = false; + while (!stack.empty()) { + // 从这里开始 userTaskKey 都还是上个栈的 key + // 是否是脏数据线路上的点 + final boolean[] isDirtyData = {false}; + for (Set oldDirtyDataLine : dirtyDataLineList) { + if (oldDirtyDataLine.contains(stack.peek().getTaskDefinitionKey())) { + isDirtyData[0] = true; + } + } + // 删除原因不为空,说明从这条数据开始回跳或者回退的 + // MI_END:会签完成后,其他未签到节点的删除原因,不在处理范围内 + if (stack.peek().getDeleteReason() != null && !"MI_END".equals(stack.peek().getDeleteReason())) { + // 可以理解为脏线路起点 + String dirtyPoint = ""; + if (stack.peek().getDeleteReason().contains("Change activity to ")) { + dirtyPoint = stack.peek().getDeleteReason().replace("Change activity to ", ""); + } + // 会签回退删除原因有点不同 + if (stack.peek().getDeleteReason().contains("Change parent activity to ")) { + dirtyPoint = stack.peek().getDeleteReason().replace("Change parent activity to ", ""); + } + FlowElement dirtyTask = null; + // 获取变更节点的对应的入口处连线 + // 如果是网关并行回退情况,会变成两条脏数据路线,效果一样 + for (FlowElement flowElement : allElements) { + if (flowElement.getId().equals(stack.peek().getTaskDefinitionKey())) { + dirtyTask = flowElement; + } + } + // 获取脏数据线路 + Set dirtyDataLine = FlowableUtils.iteratorFindDirtyRoads(dirtyTask, null, null, Arrays.asList(dirtyPoint.split(",")), null); + // 自己本身也是脏线路上的点,加进去 + dirtyDataLine.add(stack.peek().getTaskDefinitionKey()); + log.info(stack.peek().getTaskDefinitionKey() + "点脏路线集合:" + dirtyDataLine); + // 是全新的需要添加的脏线路 + boolean isNewDirtyData = true; + for (int i = 0; i < dirtyDataLineList.size(); i++) { + // 如果发现他的上个节点在脏线路内,说明这个点可能是并行的节点,或者连续驳回 + // 这时,都以之前的脏线路节点为标准,只需合并脏线路即可,也就是路线补全 + if (dirtyDataLineList.get(i).contains(userTaskKey.toString())) { + isNewDirtyData = false; + dirtyDataLineList.get(i).addAll(dirtyDataLine); + } + } + // 已确定时全新的脏线路 + if (isNewDirtyData) { + // deleteKey 单一路线驳回到并行,这种同时生成多个新实例记录情况,这时 deleteKey 其实是由多个值组成 + // 按照逻辑,回退后立刻生成的实例记录就是回退的记录 + // 至于驳回所生成的 Key,直接从删除原因中获取,因为存在驳回到并行的情况 + deleteKeyList.add(dirtyPoint + ","); + dirtyDataLineList.add(dirtyDataLine); + } + // 添加后,现在这个点变成脏线路上的点了 + isDirtyData[0] = true; + } + // 如果不是脏线路上的点,说明是有效数据,添加历史实例 Key + if (!isDirtyData[0]) { + lastHistoricTaskInstanceList.add(stack.peek().getTaskDefinitionKey()); + } + // 校验脏线路是否结束 + for (int i = 0; i < deleteKeyList.size(); i ++) { + // 如果发现脏数据属于会签,记录下下标与对应 Key,以备后续比对,会签脏数据范畴开始 + if (multiKey == null && multiTask.contains(stack.peek().getTaskDefinitionKey()) + && deleteKeyList.get(i).contains(stack.peek().getTaskDefinitionKey())) { + multiIndex = i; + multiKey = new StringBuilder(stack.peek().getTaskDefinitionKey()); + } + // 会签脏数据处理,节点退回会签清空 + // 如果在会签脏数据范畴中发现 Key改变,说明会签脏数据在上个节点就结束了,可以把会签脏数据删掉 + if (multiKey != null && !multiKey.toString().equals(stack.peek().getTaskDefinitionKey())) { + deleteKeyList.set(multiIndex , deleteKeyList.get(multiIndex).replace(stack.peek().getTaskDefinitionKey() + ",", "")); + multiKey = null; + // 结束进行下校验删除 + multiOpera = true; + } + // 其他脏数据处理 + // 发现该路线最后一条脏数据,说明这条脏数据线路处理完了,删除脏数据信息 + // 脏数据产生的新实例中是否包含这条数据 + if (multiKey == null && deleteKeyList.get(i).contains(stack.peek().getTaskDefinitionKey())) { + // 删除匹配到的部分 + deleteKeyList.set(i , deleteKeyList.get(i).replace(stack.peek().getTaskDefinitionKey() + ",", "")); + } + // 如果每组中的元素都以匹配过,说明脏数据结束 + if ("".equals(deleteKeyList.get(i))) { + // 同时删除脏数据 + deleteKeyList.remove(i); + dirtyDataLineList.remove(i); + break; + } + } + // 会签数据处理需要在循环外处理,否则可能导致溢出 + // 会签的数据肯定是之前放进去的所以理论上不会溢出,但还是校验下 + if (multiOpera && deleteKeyList.size() > multiIndex && "".equals(deleteKeyList.get(multiIndex))) { + // 同时删除脏数据 + deleteKeyList.remove(multiIndex); + dirtyDataLineList.remove(multiIndex); + multiIndex = -1; + multiOpera = false; + } + // pop() 方法与 peek() 方法不同,在返回值的同时,会把值从栈中移除 + // 保存新的 userTaskKey 在下个循环中使用 + userTaskKey = new StringBuilder(stack.pop().getTaskDefinitionKey()); + } + log.info("清洗后的历史节点数据:" + lastHistoricTaskInstanceList); + return lastHistoricTaskInstanceList; + } +} diff --git a/flowable/src/main/java/com/yyy/flowable/listener/FlowExecutionListener.java b/flowable/src/main/java/com/yyy/flowable/listener/FlowExecutionListener.java new file mode 100644 index 0000000..7b87239 --- /dev/null +++ b/flowable/src/main/java/com/yyy/flowable/listener/FlowExecutionListener.java @@ -0,0 +1,34 @@ +package com.yyy.flowable.listener; + +import lombok.extern.slf4j.Slf4j; +import org.flowable.common.engine.api.delegate.Expression; +import org.flowable.engine.delegate.DelegateExecution; +import org.flowable.engine.delegate.ExecutionListener; +import org.springframework.stereotype.Component; + +/** + * 执行监听器 + * + * 执行监听器允许在执行过程中执行Java代码。 + * 执行监听器可以捕获事件的类型: + * 流程实例启动,结束 + * 输出流捕获 + * 获取启动,结束 + * 路由开始,结束 + * 中间事件开始,结束 + * 触发开始事件,触发结束事件 + * + */ +@Slf4j +@Component +public class FlowExecutionListener implements ExecutionListener { + /** + * 流程设计器添加的参数 + */ + private Expression param; + + @Override + public void notify(DelegateExecution execution) { + log.info("执行监听器:{}", execution); + } +} diff --git a/flowable/src/main/java/com/yyy/flowable/listener/FlowTaskListener.java b/flowable/src/main/java/com/yyy/flowable/listener/FlowTaskListener.java new file mode 100644 index 0000000..350e315 --- /dev/null +++ b/flowable/src/main/java/com/yyy/flowable/listener/FlowTaskListener.java @@ -0,0 +1,30 @@ +package com.yyy.flowable.listener; + +import lombok.extern.slf4j.Slf4j; +import org.flowable.engine.delegate.TaskListener; +import org.flowable.task.service.delegate.DelegateTask; +import org.springframework.stereotype.Component; + +/** + * 任务监听器 + * + * create(创建):在任务被创建且所有的任务属性设置完成后才触发 + * assignment(指派):在任务被分配给某个办理人之后触发 + * complete(完成):在配置了监听器的上一个任务完成时触发 + * delete(删除):在任务即将被删除前触发。请注意任务由completeTask正常完成时也会触发 + * + */ +@Slf4j +@Component +public class FlowTaskListener implements TaskListener{ + + @Override + public void notify(DelegateTask delegateTask) { + + log.info("任务监听器:{}", delegateTask); + // TODO 获取事件类型 delegateTask.getEventName(),可以通过监听器给任务执行人发送相应的通知消息 + + + } + +} diff --git a/flowable/src/main/java/com/yyy/flowable/service/EamFormLinkService.java b/flowable/src/main/java/com/yyy/flowable/service/EamFormLinkService.java new file mode 100644 index 0000000..14101e4 --- /dev/null +++ b/flowable/src/main/java/com/yyy/flowable/service/EamFormLinkService.java @@ -0,0 +1,12 @@ +package com.yyy.flowable.service; + +import java.util.Map; + +public interface EamFormLinkService { + /** + * + * @param formKey + * @param variables + */ + void formLink(String formKey, Map variables); +} diff --git a/flowable/src/main/java/com/yyy/flowable/service/IFlowDefinitionService.java b/flowable/src/main/java/com/yyy/flowable/service/IFlowDefinitionService.java new file mode 100644 index 0000000..69d2b55 --- /dev/null +++ b/flowable/src/main/java/com/yyy/flowable/service/IFlowDefinitionService.java @@ -0,0 +1,82 @@ +package com.yyy.flowable.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.yyy.common.core.domain.Result; +import com.yyy.system.entity.dto.FlowProcDefDto; + +import java.io.IOException; +import java.io.InputStream; +import java.util.Map; + +public interface IFlowDefinitionService { + + boolean exist(String processDefinitionKey); + + + /** + * 流程定义列表 + * + * @param pageNum 当前页码 + * @param pageSize 每页条数 + * @return 流程定义分页列表数据 + */ + Page list(String name, Integer pageNum, Integer pageSize); + + /** + * 流程定义列表 + * + */ + FlowProcDefDto getByDeployId(String deployId); + + /** + * 导入流程文件 + * 当每个key的流程第一次部署时,指定版本为1。对其后所有使用相同key的流程定义, + * 部署时版本会在该key当前已部署的最高版本号基础上加1。key参数用于区分流程定义 + * @param name + * @param category + * @param in + */ + String importFile(String name, String category, InputStream in); + + /** + * 读取xml + * @param deployId + * @return + */ + Result readXml(String deployId) throws IOException; + + /** + * 根据流程定义ID启动流程实例 + * + * @param procDefId + * @param variables + * @return + */ + + Result startProcessInstanceById(String procDefId, Map variables); + + + /** + * 激活或挂起流程定义 + * + * @param state 状态 + * @param deployId 流程部署ID + */ + void updateState(Integer state, String deployId); + + + /** + * 删除流程定义 + * + * @param deployId 流程部署ID act_ge_bytearray 表中 deployment_id值 + */ + void delete(String deployId); + + + /** + * 读取图片文件 + * @param deployId + * @return + */ + InputStream readImage(String deployId); +} diff --git a/flowable/src/main/java/com/yyy/flowable/service/IFlowInstanceService.java b/flowable/src/main/java/com/yyy/flowable/service/IFlowInstanceService.java new file mode 100644 index 0000000..efd9440 --- /dev/null +++ b/flowable/src/main/java/com/yyy/flowable/service/IFlowInstanceService.java @@ -0,0 +1,50 @@ +package com.yyy.flowable.service; + +import com.yyy.common.core.domain.Result; +import com.yyy.flowable.domain.vo.FlowTaskVo; +import org.flowable.engine.history.HistoricProcessInstance; + +import java.util.Map; + +public interface IFlowInstanceService { + + /** + * 结束流程实例 + * + * @param vo + */ + void stopProcessInstance(FlowTaskVo vo); + + /** + * 激活或挂起流程实例 + * + * @param state 状态 + * @param instanceId 流程实例ID + */ + void updateState(Integer state, String instanceId); + + /** + * 删除流程实例ID + * + * @param instanceId 流程实例ID + * @param deleteReason 删除原因 + */ + void delete(String instanceId, String deleteReason); + + /** + * 根据实例ID查询历史实例数据 + * + * @param processInstanceId + * @return + */ + HistoricProcessInstance getHistoricProcessInstanceById(String processInstanceId); + + /** + * 根据流程定义ID启动流程实例 + * + * @param procDefId 流程定义Id + * @param variables 流程变量 + * @return + */ + Result startProcessInstanceById(String procDefId, Map variables); +} diff --git a/flowable/src/main/java/com/yyy/flowable/service/IFlowTaskService.java b/flowable/src/main/java/com/yyy/flowable/service/IFlowTaskService.java new file mode 100644 index 0000000..7f203a0 --- /dev/null +++ b/flowable/src/main/java/com/yyy/flowable/service/IFlowTaskService.java @@ -0,0 +1,211 @@ +package com.yyy.flowable.service; + +import com.yyy.common.core.domain.Result; +import com.yyy.flowable.domain.vo.FlowQueryVo; +import com.yyy.flowable.domain.vo.FlowTaskVo; +import org.flowable.task.api.Task; + +import java.io.InputStream; + +/** + * @author Tony + * @date 2021-04-03 14:42 + */ +public interface IFlowTaskService { + + /** + * 审批任务 + * + * @param task 请求实体参数 + */ + Result complete(FlowTaskVo task); + + /** + * 驳回任务 + * + * @param flowTaskVo + */ + void taskReject(FlowTaskVo flowTaskVo); + + + /** + * 退回任务 + * + * @param flowTaskVo 请求实体参数 + */ + void taskReturn(FlowTaskVo flowTaskVo); + + /** + * 获取所有可回退的节点 + * + * @param flowTaskVo + * @return + */ + Result findReturnTaskList(FlowTaskVo flowTaskVo); + + /** + * 删除任务 + * + * @param flowTaskVo 请求实体参数 + */ + void deleteTask(FlowTaskVo flowTaskVo); + + /** + * 认领/签收任务 + * + * @param flowTaskVo 请求实体参数 + */ + void claim(FlowTaskVo flowTaskVo); + + /** + * 取消认领/签收任务 + * + * @param flowTaskVo 请求实体参数 + */ + void unClaim(FlowTaskVo flowTaskVo); + + /** + * 委派任务 + * + * @param flowTaskVo 请求实体参数 + */ + void delegateTask(FlowTaskVo flowTaskVo); + + /** + * 任务归还 + * + * @param flowTaskVo 请求实体参数 + */ + void resolveTask(FlowTaskVo flowTaskVo); + + + /** + * 转办任务 + * + * @param flowTaskVo 请求实体参数 + */ + void assignTask(FlowTaskVo flowTaskVo); + + + /** + * 多实例加签 + * @param flowTaskVo + */ + void addMultiInstanceExecution(FlowTaskVo flowTaskVo); + + /** + * 多实例减签 + * @param flowTaskVo + */ + void deleteMultiInstanceExecution(FlowTaskVo flowTaskVo); + + /** + * 我发起的流程 + * @param queryVo 请求参数 + * @return + */ + Result myProcess(FlowQueryVo queryVo); + + + /** + * 取消申请 + * 目前实现方式: 直接将当前流程变更为已完成 + * @param flowTaskVo + * @return + */ + Result stopProcess(FlowTaskVo flowTaskVo); + + /** + * 撤回流程 + * @param flowTaskVo + * @return + */ + Result revokeProcess(FlowTaskVo flowTaskVo); + + + /** + * 代办任务列表 + * + * @param queryVo 请求参数 + * @return + */ + Result todoList(FlowQueryVo queryVo); + + + long todoListCount(); + + /** + * 已办任务列表 + * + * @param queryVo 请求参数 + * @return + */ + Result finishedList(FlowQueryVo queryVo); + + /** + * 流程历史流转记录 + * + * @param procInsId 流程实例Id + * @return + */ + Result flowRecord(String procInsId,String deployId); + + /** + * 根据任务ID查询挂载的表单信息 + * + * @param taskId 任务Id + * @return + */ + Task getTaskForm(String taskId); + + /** + * 获取流程过程图 + * @param processId + * @return + */ + InputStream diagram(String processId); + + /** + * 获取流程执行节点 + * @param procInsId + * @return + */ + Result getFlowViewer(String procInsId,String executionId); + + /** + * 获取流程变量 + * @param taskId + * @return + */ + Result processVariables(String taskId); + + /** + * 获取下一节点 + * @param flowTaskVo 任务 + * @return + */ + Result getNextFlowNode(FlowTaskVo flowTaskVo); + + Result getNextFlowNodeByStart(FlowTaskVo flowTaskVo); + + /** + * 流程初始化表单 + * @param deployId + * @return + */ + Result flowFormData(String deployId); + + /** + * 流程节点信息 + * @param procInsId + * @return + */ + Result flowXmlAndNode(String procInsId,String deployId); + + /** + * 流程节点表单 + * @param taskId 流程任务编号 + * @return + */ + Result flowTaskForm(String taskId) throws Exception; +} diff --git a/flowable/src/main/java/com/yyy/flowable/service/impl/EamFormLinkServiceImpl.java b/flowable/src/main/java/com/yyy/flowable/service/impl/EamFormLinkServiceImpl.java new file mode 100644 index 0000000..b7bb5ee --- /dev/null +++ b/flowable/src/main/java/com/yyy/flowable/service/impl/EamFormLinkServiceImpl.java @@ -0,0 +1,59 @@ +package com.yyy.flowable.service.impl; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.yyy.flowable.service.EamFormLinkService; +import com.yyy.system.entity.dto.EamWarehouseAssetDto; +import com.yyy.system.service.*; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Map; + +@Service +@Slf4j +public class EamFormLinkServiceImpl implements EamFormLinkService { + + @Autowired + EamRepairFaultService eamRepairFaultService; + + @Autowired + EamBusinessRetirementService eamBusinessRetirementService; + + @Autowired + EamRepairService eamRepairService; + + @Autowired + EamBusinessTransferService eamBusinessTransferService; + + @Autowired + EamBusinessCollectionService eamBusinessCollectionService; + + @Override + public void formLink(String formKey, Map variables) { + if (variables.containsKey("assetIdList")) { + JSONArray assetListArray = (JSONArray) variables.get("assetIdList"); + if (assetListArray != null && assetListArray.size() > 0) { + List eamWarehouseAssetDtoList = assetListArray.toJavaList(EamWarehouseAssetDto.class); + variables.put("assetIdList", JSON.toJSONString(eamWarehouseAssetDtoList)); + } + } + + + if (formKey.equals("eam_asset_employee_repair")) { + eamRepairFaultService.formLink(variables); + } else if (formKey.equals("eam_asset_scrap")) { + eamBusinessRetirementService.formLink(variables); + } else if (formKey.equals("eam_asset_equipment_repair")) { + eamRepairService.formLink(variables); + } else if (formKey.equals("eam_asset_employee_handover")) { + eamBusinessTransferService.formLink(variables); + } else if (formKey.equals("eam_asset_stock_goods_use")) { + eamBusinessCollectionService.formLink(variables); + } else { + //流程没有对应的业务表单 + } + } +} diff --git a/flowable/src/main/java/com/yyy/flowable/service/impl/FlowDefinitionServiceImpl.java b/flowable/src/main/java/com/yyy/flowable/service/impl/FlowDefinitionServiceImpl.java new file mode 100644 index 0000000..7c15421 --- /dev/null +++ b/flowable/src/main/java/com/yyy/flowable/service/impl/FlowDefinitionServiceImpl.java @@ -0,0 +1,252 @@ +package com.yyy.flowable.service.impl; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.yyy.common.core.domain.Result; +import com.yyy.common.core.domain.ResultCode; +import com.yyy.common.utils.common.ServletUtils; +import com.yyy.common.utils.security.JwtUtils; +import com.yyy.flowable.common.constant.ProcessConstants; +import com.yyy.flowable.common.enums.FlowComment; +import com.yyy.flowable.common.enums.FlowStatus; +import com.yyy.flowable.service.EamFormLinkService; +import com.yyy.system.entity.dto.FlowProcDefDto; +import com.yyy.flowable.factory.FlowServiceFactory; +import com.yyy.flowable.service.IFlowDefinitionService; +import com.yyy.system.entity.pojo.FlForm; +import com.yyy.system.entity.pojo.FlFormItem; +import com.yyy.system.mapper.FlowDeployMapper; +import com.yyy.system.service.FlFormItemService; +import com.yyy.system.service.FlFormService; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.io.IOUtils; +import org.flowable.bpmn.model.BpmnModel; +import org.flowable.engine.repository.Deployment; +import org.flowable.engine.repository.ProcessDefinition; +import org.flowable.engine.repository.ProcessDefinitionQuery; +import org.flowable.engine.runtime.ProcessInstance; +import org.flowable.image.impl.DefaultProcessDiagramGenerator; +import org.flowable.task.api.DelegationState; +import org.flowable.task.api.Task; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.io.IOException; +import java.io.InputStream; +import java.nio.charset.StandardCharsets; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.Objects; + +/** + * 流程定义 + */ +@Service +@Slf4j +public class FlowDefinitionServiceImpl extends FlowServiceFactory implements IFlowDefinitionService { + + @Resource + private FlFormService flFormService; + + @Resource + private FlowDeployMapper flowDeployMapper; + + @Resource + private FlFormItemService flFormItemService; + + @Resource + private EamFormLinkService eamFormLinkService; + + private static final String BPMN_FILE_SUFFIX = ".bpmn"; + + @Autowired + JwtUtils jwtUtils; + + @Override + public boolean exist(String processDefinitionKey) { + ProcessDefinitionQuery processDefinitionQuery = repositoryService.createProcessDefinitionQuery().processDefinitionKey(processDefinitionKey); + long count = processDefinitionQuery.count(); + return count > 0 ? true : false; + } + + + /** + * 流程定义列表 + * + * @param pageNum 当前页码 + * @param pageSize 每页条数 + * @return 流程定义分页列表数据 + */ + @Override + public Page list(String name, Integer pageNum, Integer pageSize) { + Page page = new Page<>(); + PageHelper.startPage(pageNum, pageSize); + final List dataList = flowDeployMapper.selectDeployList(name); + + // 加载挂表单 + for (FlowProcDefDto procDef : dataList) { + FlForm sysForm = flFormService.selectByDeployId(procDef.getDeploymentId()); + if (Objects.nonNull(sysForm)) { + procDef.setFormName(sysForm.getName()); + procDef.setFormId(sysForm.getFormId()); + } + } + page.setTotal(new PageInfo(dataList).getTotal()); + page.setRecords(dataList); + return page; + } + + @Override + public FlowProcDefDto getByDeployId(String deployId) { + return flowDeployMapper.getByDeployId(deployId); + } + + + /** + * 导入流程文件 + *

+ * 当每个key的流程第一次部署时,指定版本为1。对其后所有使用相同key的流程定义, + * 部署时版本会在该key当前已部署的最高版本号基础上加1。key参数用于区分流程定义 + * + * @param name + * @param category + * @param in + */ + @Override + public String importFile(String name, String category, InputStream in) { + Deployment deploy = repositoryService.createDeployment().addInputStream(name + BPMN_FILE_SUFFIX, in).name(name).category(category).deploy(); + ProcessDefinition definition = repositoryService.createProcessDefinitionQuery().deploymentId(deploy.getId()).singleResult(); + repositoryService.setProcessDefinitionCategory(definition.getId(), category); + return definition.getDeploymentId(); + } + + /** + * 读取xml + * + * @param deployId + * @return + */ + @Override + public Result readXml(String deployId) throws IOException { + ProcessDefinition definition = repositoryService.createProcessDefinitionQuery().deploymentId(deployId).singleResult(); + InputStream inputStream = repositoryService.getResourceAsStream(definition.getDeploymentId(), definition.getResourceName()); + String result = IOUtils.toString(inputStream, StandardCharsets.UTF_8.name()); + return new Result(ResultCode.success, result); + } + + /** + * 读取xml + * + * @param deployId + * @return + */ + @Override + public InputStream readImage(String deployId) { + ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().deploymentId(deployId).singleResult(); + //获得图片流 + DefaultProcessDiagramGenerator diagramGenerator = new DefaultProcessDiagramGenerator(); + BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinition.getId()); + //输出为图片 + return diagramGenerator.generateDiagram( + bpmnModel, + "png", + Collections.emptyList(), + Collections.emptyList(), + "宋体", + "宋体", + "宋体", + null, + 1.0, + false); + + } + + /** + * 根据流程定义ID启动流程实例 + * + * @param procDefId 流程模板ID + * @param variables 流程变量 + * @return + */ + @Override + public Result startProcessInstanceById(String procDefId, Map variables) { + try { + ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionId(procDefId) + .latestVersion().singleResult(); + if (Objects.nonNull(processDefinition) && processDefinition.isSuspended()) { + return new Result(ResultCode.operate_failure.getCode(), "流程已被挂起,请先激活流程"); + } + // 设置流程发起人Id和审批人Id到流程中 + String uid = jwtUtils.parseToken(ServletUtils.getRequest().getHeader("Authorization")).get("uid"); + identityService.setAuthenticatedUserId(uid); + JSONObject config = JSONObject.parseObject(flFormService.selectByKey(processDefinition.getKey()).getConfig()); + if (!config.containsKey("assignee")) { + return new Result(ResultCode.operate_failure.getCode(), "流程未配置审批人,请联系管理员"); + } + variables.put(ProcessConstants.ASSIGNEE, config.get("assignee")); + variables.put(ProcessConstants.PROCESS_INITIATOR, Long.parseLong(uid)); + ProcessInstance processInstance = runtimeService.startProcessInstanceById(procDefId, variables); + + // 流程发起时 跳过发起人节点 + // 给第一步申请人节点设置任务执行人和意见 + Task task = taskService.createTaskQuery().processInstanceId(processInstance.getProcessInstanceId()).singleResult(); + if (Objects.nonNull(task)) { + taskService.addComment(task.getId(), processInstance.getProcessInstanceId(), FlowComment.NORMAL.getType(), "发起流程申请"); + taskService.complete(task.getId(), variables); + //跳过起草阶段直接审批 FlowStatus.DRAFTING + } + + flFormItemService.save(FlFormItem.builder().name(processDefinition.getName()) + .formKey(processDefinition.getKey()) + .procInsId(processInstance.getProcessInstanceId()) + .contents(JSON.toJSONString(variables)) + .status(FlowStatus.APPROVAL.getCode()) + .createUser(Long.parseLong(uid)).build()); + eamFormLinkService.formLink(processDefinition.getKey(),variables); + + return new Result(ResultCode.success, "流程启动成功"); + } catch (Exception e) { + log.error(e.getMessage(), e); + return new Result(ResultCode.operate_failure.getCode(), "流程启动错误"); + } + } + + + /** + * 激活或挂起流程定义 + * + * @param state 状态 + * @param deployId 流程部署ID + */ + @Override + public void updateState(Integer state, String deployId) { + ProcessDefinition procDef = repositoryService.createProcessDefinitionQuery().deploymentId(deployId).singleResult(); + // 激活 + if (state == 1) { + repositoryService.activateProcessDefinitionById(procDef.getId(), true, null); + } + // 挂起 + if (state == 2) { + repositoryService.suspendProcessDefinitionById(procDef.getId(), true, null); + } + } + + + /** + * 删除流程定义 + * + * @param deployId 流程部署ID act_ge_bytearray 表中 deployment_id值 + */ + @Override + public void delete(String deployId) { + // true 允许级联删除 ,不设置会导致数据库外键关联异常 + repositoryService.deleteDeployment(deployId, true); + } + + +} diff --git a/flowable/src/main/java/com/yyy/flowable/service/impl/FlowInstanceServiceImpl.java b/flowable/src/main/java/com/yyy/flowable/service/impl/FlowInstanceServiceImpl.java new file mode 100644 index 0000000..b9c91be --- /dev/null +++ b/flowable/src/main/java/com/yyy/flowable/service/impl/FlowInstanceServiceImpl.java @@ -0,0 +1,139 @@ +package com.yyy.flowable.service.impl; + + +import com.alibaba.fastjson.JSON; +import com.yyy.common.core.domain.Result; +import com.yyy.common.core.domain.ResultCode; +import com.yyy.common.utils.common.ServletUtils; +import com.yyy.common.utils.security.JwtUtils; +import com.yyy.flowable.domain.vo.FlowTaskVo; +import com.yyy.flowable.factory.FlowServiceFactory; +import com.yyy.flowable.service.IFlowInstanceService; +import com.yyy.system.entity.pojo.FlFormItem; +import com.yyy.system.service.FlFormItemService; +import com.yyy.system.service.FlFormService; +import lombok.extern.slf4j.Slf4j; +import org.flowable.common.engine.api.FlowableObjectNotFoundException; +import org.flowable.engine.history.HistoricProcessInstance; +import org.flowable.engine.runtime.ProcessInstance; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Map; +import java.util.Objects; + +/** + *

工作流流程实例管理

+ */ +@Service +@Slf4j +public class FlowInstanceServiceImpl extends FlowServiceFactory implements IFlowInstanceService { + + @Autowired + JwtUtils jwtUtils; + + @Autowired + FlFormItemService flFormItemService; + + @Autowired + FlFormService flFormService; + + /** + * 结束流程实例 + * + * @param vo + */ + @Override + public void stopProcessInstance(FlowTaskVo vo) { + String taskId = vo.getTaskId(); + + } + + /** + * 激活或挂起流程实例 + * + * @param state 状态 + * @param instanceId 流程实例ID + */ + @Override + public void updateState(Integer state, String instanceId) { + + // 激活 + if (state == 1) { + runtimeService.activateProcessInstanceById(instanceId); + } + // 挂起 + if (state == 2) { + runtimeService.suspendProcessInstanceById(instanceId); + } + } + + /** + * 删除流程实例ID + * + * @param instanceId 流程实例ID + * @param deleteReason 删除原因 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public void delete(String instanceId, String deleteReason) { + + // 查询历史数据 + HistoricProcessInstance historicProcessInstance = getHistoricProcessInstanceById(instanceId); + if (historicProcessInstance.getEndTime() != null) { + historyService.deleteHistoricProcessInstance(historicProcessInstance.getId()); + return; + } + // 删除流程实例 + runtimeService.deleteProcessInstance(instanceId, deleteReason); + // 删除历史流程实例 + historyService.deleteHistoricProcessInstance(instanceId); + } + + /** + * 根据实例ID查询历史实例数据 + * + * @param processInstanceId + * @return + */ + @Override + public HistoricProcessInstance getHistoricProcessInstanceById(String processInstanceId) { + HistoricProcessInstance historicProcessInstance = + historyService.createHistoricProcessInstanceQuery().processInstanceId(processInstanceId).singleResult(); + if (Objects.isNull(historicProcessInstance)) { + throw new FlowableObjectNotFoundException("流程实例不存在: " + processInstanceId); + } + return historicProcessInstance; + } + + /** + * 根据流程定义ID启动流程实例 + * + * @param procDefId 流程定义Id + * @param variables 流程变量 + * @return + */ + @Override + public Result startProcessInstanceById(String procDefId, Map variables) { + + try { + // 设置流程发起人Id到流程中 + Long userId = Long.parseLong(jwtUtils.parseToken(ServletUtils.getRequest().getHeader("Authorization")).get("uid")); +// identityService.setAuthenticatedUserId(userId.toString()); + variables.put("initiator", userId); + variables.put("_FLOWABLE_SKIP_EXPRESSION_ENABLED", true); + ProcessInstance processInstance = runtimeService.startProcessInstanceById(procDefId, variables); + + flFormItemService.save(FlFormItem.builder().name(processInstance.getProcessDefinitionName()) + .formKey(processInstance.getProcessDefinitionKey()) + .procInsId(processInstance.getProcessInstanceId()) + .contents(JSON.toJSONString(variables)) + .createUser(userId).build()); + return new Result(ResultCode.success, "流程启动成功"); + } catch (Exception e) { + log.error(e.getMessage(), e); + return new Result(ResultCode.operate_failure.getCode(), "流程启动错误"); + } + } +} \ No newline at end of file diff --git a/flowable/src/main/java/com/yyy/flowable/service/impl/FlowTaskServiceImpl.java b/flowable/src/main/java/com/yyy/flowable/service/impl/FlowTaskServiceImpl.java new file mode 100644 index 0000000..d2fd568 --- /dev/null +++ b/flowable/src/main/java/com/yyy/flowable/service/impl/FlowTaskServiceImpl.java @@ -0,0 +1,1312 @@ +package com.yyy.flowable.service.impl; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.alibaba.fastjson.TypeReference; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.yyy.common.core.domain.Result; +import com.yyy.common.core.domain.ResultCode; +import com.yyy.common.core.domain.entity.UmsRole; +import com.yyy.common.core.domain.entity.UmsUser; +import com.yyy.common.exception.CustomException; +import com.yyy.common.utils.common.ServletUtils; +import com.yyy.common.utils.security.JwtUtils; +import com.yyy.flowable.common.constant.ProcessConstants; +import com.yyy.flowable.common.enums.FlowComment; +import com.yyy.flowable.common.enums.FlowStatus; +import com.yyy.flowable.domain.dto.FlowCommentDto; +import com.yyy.flowable.domain.dto.FlowNextDto; +import com.yyy.flowable.domain.dto.FlowTaskDto; +import com.yyy.flowable.domain.dto.FlowViewerDto; +import com.yyy.flowable.domain.vo.FlowQueryVo; +import com.yyy.flowable.domain.vo.FlowTaskVo; +import com.yyy.flowable.factory.FlowServiceFactory; +import com.yyy.flowable.flow.CustomProcessDiagramGenerator; +import com.yyy.flowable.flow.FindNextNodeUtil; +import com.yyy.flowable.flow.FlowableUtils; +import com.yyy.flowable.service.IFlowTaskService; +import com.yyy.system.entity.dto.FlFormItemDto; +import com.yyy.system.entity.pojo.FlForm; +import com.yyy.system.entity.pojo.FlFormItem; +import com.yyy.system.service.FlFormItemService; +import com.yyy.system.service.FlFormService; +import com.yyy.system.service.UmsRoleService; +import com.yyy.system.service.UmsUserService; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.io.IOUtils; +import org.apache.commons.lang3.StringUtils; +import org.flowable.bpmn.model.Process; +import org.flowable.bpmn.model.*; +import org.flowable.common.engine.api.FlowableException; +import org.flowable.common.engine.api.FlowableObjectNotFoundException; +import org.flowable.engine.ProcessEngineConfiguration; +import org.flowable.engine.history.HistoricActivityInstance; +import org.flowable.engine.history.HistoricProcessInstance; +import org.flowable.engine.history.HistoricProcessInstanceQuery; +import org.flowable.engine.impl.cmd.AddMultiInstanceExecutionCmd; +import org.flowable.engine.impl.cmd.DeleteMultiInstanceExecutionCmd; +import org.flowable.engine.repository.ProcessDefinition; +import org.flowable.engine.runtime.Execution; +import org.flowable.engine.runtime.ProcessInstance; +import org.flowable.engine.task.Comment; +import org.flowable.identitylink.api.history.HistoricIdentityLink; +import org.flowable.image.ProcessDiagramGenerator; +import org.flowable.task.api.DelegationState; +import org.flowable.task.api.Task; +import org.flowable.task.api.TaskQuery; +import org.flowable.task.api.history.HistoricTaskInstance; +import org.flowable.task.api.history.HistoricTaskInstanceQuery; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.io.InputStream; +import java.lang.reflect.Field; +import java.nio.charset.StandardCharsets; +import java.util.*; +import java.util.concurrent.ConcurrentHashMap; +import java.util.function.Function; +import java.util.function.Predicate; + +@Service +@Slf4j +public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTaskService { + + @Resource + private UmsUserService userService; + @Resource + private UmsRoleService roleService; + @Resource + private FlFormService flFormService; + @Resource + private FlFormItemService flFormItemService; + + @Autowired + JwtUtils jwtUtils; + + + /** + * 完成任务 + * + * @param taskVo 请求实体参数 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public Result complete(FlowTaskVo taskVo) { + Task task = taskService.createTaskQuery().taskId(taskVo.getTaskId()).singleResult(); + if (Objects.isNull(task)) { + return new Result(ResultCode.operate_failure, "任务不存在"); + } + String comment = "无"; + if (StringUtils.isNotBlank(taskVo.getComment())) { + comment = taskVo.getComment(); + } + if (DelegationState.PENDING.equals(task.getDelegationState())) { + taskService.addComment(taskVo.getTaskId(), taskVo.getInstanceId(), FlowComment.DELEGATE.getType(), comment); + taskService.resolveTask(taskVo.getTaskId(), taskVo.getVariables()); + } else { + taskService.addComment(taskVo.getTaskId(), taskVo.getInstanceId(), FlowComment.NORMAL.getType(), comment); + Long userId = Long.parseLong(jwtUtils.parseToken(ServletUtils.getRequest().getHeader("Authorization")).get("uid")); + taskService.setAssignee(taskVo.getTaskId(), userId.toString()); + taskService.complete(taskVo.getTaskId(), taskVo.getVariables()); + } + + flFormItemService.update(FlFormItemDto.builder().procInsId(taskVo.getInstanceId()).status(FlowStatus.COMPLETED.getCode()).build()); + return Result.SUCCESS; + } + + /** + * 驳回任务 + * + * @param flowTaskVo + */ + @Override + public void taskReject(FlowTaskVo flowTaskVo) { + if (taskService.createTaskQuery().taskId(flowTaskVo.getTaskId()).singleResult().isSuspended()) { + throw new CustomException("任务处于挂起状态!"); + } + // 当前任务 task + Task task = taskService.createTaskQuery().taskId(flowTaskVo.getTaskId()).singleResult(); + // 获取流程定义信息 + ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionId(task.getProcessDefinitionId()).singleResult(); + // 获取所有节点信息 + Process process = repositoryService.getBpmnModel(processDefinition.getId()).getProcesses().get(0); + // 获取全部节点列表,包含子节点 + Collection allElements = FlowableUtils.getAllElements(process.getFlowElements(), null); + // 获取当前任务节点元素 + FlowElement source = null; + if (allElements != null) { + for (FlowElement flowElement : allElements) { + // 类型为用户节点 + if (flowElement.getId().equals(task.getTaskDefinitionKey())) { + // 获取节点信息 + source = flowElement; + } + } + } + + // 目的获取所有跳转到的节点 targetIds + // 获取当前节点的所有父级用户任务节点 + // 深度优先算法思想:延边迭代深入 + List parentUserTaskList = FlowableUtils.iteratorFindParentUserTasks(source, null, null); + if (parentUserTaskList == null || parentUserTaskList.size() == 0) { + throw new CustomException("当前节点为初始任务节点,不能驳回"); + } + // 获取活动 ID 即节点 Key + List parentUserTaskKeyList = new ArrayList<>(); + parentUserTaskList.forEach(item -> parentUserTaskKeyList.add(item.getId())); + // 获取全部历史节点活动实例,即已经走过的节点历史,数据采用开始时间升序 + List historicTaskInstanceList = historyService.createHistoricTaskInstanceQuery().processInstanceId(task.getProcessInstanceId()).orderByHistoricTaskInstanceStartTime().asc().list(); + // 数据清洗,将回滚导致的脏数据清洗掉 + List lastHistoricTaskInstanceList = FlowableUtils.historicTaskInstanceClean(allElements, historicTaskInstanceList); + // 此时历史任务实例为倒序,获取最后走的节点 + List targetIds = new ArrayList<>(); + // 循环结束标识,遇到当前目标节点的次数 + int number = 0; + StringBuilder parentHistoricTaskKey = new StringBuilder(); + for (String historicTaskInstanceKey : lastHistoricTaskInstanceList) { + // 当会签时候会出现特殊的,连续都是同一个节点历史数据的情况,这种时候跳过 + if (parentHistoricTaskKey.toString().equals(historicTaskInstanceKey)) { + continue; + } + parentHistoricTaskKey = new StringBuilder(historicTaskInstanceKey); + if (historicTaskInstanceKey.equals(task.getTaskDefinitionKey())) { + number++; + } + // 在数据清洗后,历史节点就是唯一一条从起始到当前节点的历史记录,理论上每个点只会出现一次 + // 在流程中如果出现循环,那么每次循环中间的点也只会出现一次,再出现就是下次循环 + // number == 1,第一次遇到当前节点 + // number == 2,第二次遇到,代表最后一次的循环范围 + if (number == 2) { + break; + } + // 如果当前历史节点,属于父级的节点,说明最后一次经过了这个点,需要退回这个点 + if (parentUserTaskKeyList.contains(historicTaskInstanceKey)) { + targetIds.add(historicTaskInstanceKey); + } + } + + + // 目的获取所有需要被跳转的节点 currentIds + // 取其中一个父级任务,因为后续要么存在公共网关,要么就是串行公共线路 + UserTask oneUserTask = parentUserTaskList.get(0); + // 获取所有正常进行的任务节点 Key,这些任务不能直接使用,需要找出其中需要撤回的任务 + List runTaskList = taskService.createTaskQuery().processInstanceId(task.getProcessInstanceId()).list(); + List runTaskKeyList = new ArrayList<>(); + runTaskList.forEach(item -> runTaskKeyList.add(item.getTaskDefinitionKey())); + // 需驳回任务列表 + List currentIds = new ArrayList<>(); + // 通过父级网关的出口连线,结合 runTaskList 比对,获取需要撤回的任务 + List currentUserTaskList = FlowableUtils.iteratorFindChildUserTasks(oneUserTask, runTaskKeyList, null, null); + currentUserTaskList.forEach(item -> currentIds.add(item.getId())); + + + // 规定:并行网关之前节点必须需存在唯一用户任务节点,如果出现多个任务节点,则并行网关节点默认为结束节点,原因为不考虑多对多情况 + if (targetIds.size() > 1 && currentIds.size() > 1) { + throw new CustomException("任务出现多对多情况,无法撤回"); + } + + // 循环获取那些需要被撤回的节点的ID,用来设置驳回原因 + List currentTaskIds = new ArrayList<>(); + currentIds.forEach(currentId -> runTaskList.forEach(runTask -> { + if (currentId.equals(runTask.getTaskDefinitionKey())) { + currentTaskIds.add(runTask.getId()); + } + })); + // 设置驳回意见 + currentTaskIds.forEach(item -> taskService.addComment(item, task.getProcessInstanceId(), FlowComment.REJECT.getType(), flowTaskVo.getComment() != null ? flowTaskVo.getComment() : "驳回")); + + try { + // 如果父级任务多于 1 个,说明当前节点不是并行节点,原因为不考虑多对多情况 + if (targetIds.size() > 1) { + // 1 对 多任务跳转,currentIds 当前节点(1),targetIds 跳转到的节点(多) + runtimeService.createChangeActivityStateBuilder() + .processInstanceId(task.getProcessInstanceId()). + moveSingleActivityIdToActivityIds(currentIds.get(0), targetIds).changeState(); + } + // 如果父级任务只有一个,因此当前任务可能为网关中的任务 + if (targetIds.size() == 1) { + // 1 对 1 或 多 对 1 情况,currentIds 当前要跳转的节点列表(1或多),targetIds.get(0) 跳转到的节点(1) + runtimeService.createChangeActivityStateBuilder() + .processInstanceId(task.getProcessInstanceId()) + .moveActivityIdsToSingleActivityId(currentIds, targetIds.get(0)).changeState(); + } + } catch (FlowableObjectNotFoundException e) { + throw new CustomException("未找到流程实例,流程可能已发生变化"); + } catch (FlowableException e) { + throw new CustomException("无法取消或开始活动"); + } + + flFormItemService.update(FlFormItemDto.builder().procInsId(flowTaskVo.getInstanceId()).status(FlowStatus.REJECTED.getCode()).build()); + } + + /** + * 退回任务 + * + * @param flowTaskVo 请求实体参数 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public void taskReturn(FlowTaskVo flowTaskVo) { + if (taskService.createTaskQuery().taskId(flowTaskVo.getTaskId()).singleResult().isSuspended()) { + throw new CustomException("任务处于挂起状态"); + } + // 当前任务 task + Task task = taskService.createTaskQuery().taskId(flowTaskVo.getTaskId()).singleResult(); + // 获取流程定义信息 + ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionId(task.getProcessDefinitionId()).singleResult(); + // 获取所有节点信息 + Process process = repositoryService.getBpmnModel(processDefinition.getId()).getProcesses().get(0); + // 获取全部节点列表,包含子节点 + Collection allElements = FlowableUtils.getAllElements(process.getFlowElements(), null); + // 获取当前任务节点元素 + FlowElement source = null; + // 获取跳转的节点元素 + FlowElement target = null; + if (allElements != null) { + for (FlowElement flowElement : allElements) { + // 当前任务节点元素 + if (flowElement.getId().equals(task.getTaskDefinitionKey())) { + source = flowElement; + } + // 跳转的节点元素 + if (flowElement.getId().equals(flowTaskVo.getTargetKey())) { + target = flowElement; + } + } + } + + // 从当前节点向前扫描 + // 如果存在路线上不存在目标节点,说明目标节点是在网关上或非同一路线上,不可跳转 + // 否则目标节点相对于当前节点,属于串行 + Boolean isSequential = FlowableUtils.iteratorCheckSequentialReferTarget(source, flowTaskVo.getTargetKey(), null, null); + if (!isSequential) { + throw new CustomException("当前节点相对于目标节点,不属于串行关系,无法回退"); + } + + + // 获取所有正常进行的任务节点 Key,这些任务不能直接使用,需要找出其中需要撤回的任务 + List runTaskList = taskService.createTaskQuery().processInstanceId(task.getProcessInstanceId()).list(); + List runTaskKeyList = new ArrayList<>(); + runTaskList.forEach(item -> runTaskKeyList.add(item.getTaskDefinitionKey())); + // 需退回任务列表 + List currentIds = new ArrayList<>(); + // 通过父级网关的出口连线,结合 runTaskList 比对,获取需要撤回的任务 + List currentUserTaskList = FlowableUtils.iteratorFindChildUserTasks(target, runTaskKeyList, null, null); + currentUserTaskList.forEach(item -> currentIds.add(item.getId())); + + // 循环获取那些需要被撤回的节点的ID,用来设置驳回原因 + List currentTaskIds = new ArrayList<>(); + currentIds.forEach(currentId -> runTaskList.forEach(runTask -> { + if (currentId.equals(runTask.getTaskDefinitionKey())) { + currentTaskIds.add(runTask.getId()); + } + })); + // 设置回退意见 + currentTaskIds.forEach(currentTaskId -> taskService.addComment(currentTaskId, task.getProcessInstanceId(), FlowComment.REBACK.getType(), flowTaskVo.getComment())); + + try { + // 1 对 1 或 多 对 1 情况,currentIds 当前要跳转的节点列表(1或多),targetKey 跳转到的节点(1) + runtimeService.createChangeActivityStateBuilder() + .processInstanceId(task.getProcessInstanceId()) + .moveActivityIdsToSingleActivityId(currentIds, flowTaskVo.getTargetKey()).changeState(); + } catch (FlowableObjectNotFoundException e) { + throw new CustomException("未找到流程实例,流程可能已发生变化"); + } catch (FlowableException e) { + throw new CustomException("无法取消或开始活动"); + } + } + + + /** + * 获取所有可回退的节点 + * + * @param flowTaskVo + * @return + */ + @Override + public Result findReturnTaskList(FlowTaskVo flowTaskVo) { +// // 当前任务 task +// Task task = taskService.createTaskQuery().taskId(flowTaskVo.getTaskId()).singleResult(); +// // 从流程历史任务中获取可退回节点 +//// List hisActIns = historyService.createHistoricActivityInstanceQuery() +//// .executionId(task.getExecutionId()) +//// .activityType("userTask") +//// .orderByHistoricActivityInstanceStartTime() +//// .finished() +//// .desc() +//// .list(); +//// +//// // 可回退的节点列表 +//// List returnTaskNodeList = new ArrayList<>(); +//// ReturnTaskNodeVo returnTaskNodeVo; +//// for (HistoricActivityInstance activityInstance : hisActIns) { +//// returnTaskNodeVo = new ReturnTaskNodeVo(); +//// returnTaskNodeVo.setId(activityInstance.getActivityId()); +//// // 根据流程节点处理时间校验改节点是否已完成 +//// returnTaskNodeVo.setName(activityInstance.getActivityName()); +//// returnTaskNodeList.add(returnTaskNodeVo); +//// } +// List userTaskList = new ArrayList<>(); +// // 获取流程定义信息 +// ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionId(task.getProcessDefinitionId()).singleResult(); +// // 获取所有节点信息,暂不考虑子流程情况 +// Process process = repositoryService.getBpmnModel(processDefinition.getId()).getProcesses().get(0); +// Collection flowElements = process.getFlowElements(); +// // 获取当前任务节点元素 +// UserTask source = null; +// if (flowElements != null) { +// for (FlowElement flowElement : flowElements) { +// // 类型为用户节点 +// if (flowElement.getId().equals(task.getTaskDefinitionKey())) { +// source = (UserTask) flowElement; +// } +// } +// } +// // 获取节点的所有路线 +// List> roads = FlowableUtils.findRoad(source, null, null, null); +// +// for (List road : roads) { +// if (userTaskList.size() == 0) { +// // 还没有可回退节点直接添加 +// userTaskList = road; +// } else { +// // 如果已有回退节点,则比对取交集部分 +// userTaskList.retainAll(road); +// } +// } +// return AjaxResult.success(userTaskList); + // 当前任务 task + Task task = taskService.createTaskQuery().taskId(flowTaskVo.getTaskId()).singleResult(); + // 获取流程定义信息 + ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionId(task.getProcessDefinitionId()).singleResult(); + // 获取所有节点信息,暂不考虑子流程情况 + Process process = repositoryService.getBpmnModel(processDefinition.getId()).getProcesses().get(0); + Collection flowElements = process.getFlowElements(); + // 获取当前任务节点元素 + UserTask source = null; + if (flowElements != null) { + for (FlowElement flowElement : flowElements) { + // 类型为用户节点 + if (flowElement.getId().equals(task.getTaskDefinitionKey())) { + source = (UserTask) flowElement; + } + } + } + // 获取节点的所有路线 + List> roads = FlowableUtils.findRoad(source, null, null, null); + // 可回退的节点列表 + List userTaskList = new ArrayList<>(); + for (List road : roads) { + if (userTaskList.size() == 0) { + // 还没有可回退节点直接添加 + userTaskList = road; + } else { + // 如果已有回退节点,则比对取交集部分 + userTaskList.retainAll(road); + } + } + return new Result(ResultCode.success, userTaskList); + } + + /** + * 删除任务 + * + * @param flowTaskVo 请求实体参数 + */ + @Override + public void deleteTask(FlowTaskVo flowTaskVo) { + // todo 待确认删除任务是物理删除任务 还是逻辑删除,让这个任务直接通过? + taskService.deleteTask(flowTaskVo.getTaskId(), flowTaskVo.getComment()); + } + + /** + * 认领/签收任务 + * 认领以后,这个用户就会成为任务的执行人,任务会从其他成员的任务列表中消失 + * + * @param flowTaskVo 请求实体参数 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public void claim(FlowTaskVo flowTaskVo) { + taskService.claim(flowTaskVo.getTaskId(), flowTaskVo.getUserId()); + } + + /** + * 取消认领/签收任务 + * + * @param flowTaskVo 请求实体参数 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public void unClaim(FlowTaskVo flowTaskVo) { + taskService.unclaim(flowTaskVo.getTaskId()); + } + + /** + * 委派任务 + * 任务委派只是委派人将当前的任务交给被委派人进行审批,处理任务后又重新回到委派人身上。 + * + * @param flowTaskVo 请求实体参数 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public void delegateTask(FlowTaskVo flowTaskVo) { + taskService.delegateTask(flowTaskVo.getTaskId(), flowTaskVo.getAssignee()); + } + + /** + * 任务归还 + * 被委派人完成任务之后,将任务归还委派人 + * + * @param flowTaskVo 请求实体参数 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public void resolveTask(FlowTaskVo flowTaskVo) { + taskService.resolveTask(flowTaskVo.getTaskId()); + } + + + /** + * 转办任务 + * 直接将办理人换成别人,这时任务的拥有者不再是转办人 + * + * @param flowTaskVo 请求实体参数 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public void assignTask(FlowTaskVo flowTaskVo) { + // 直接转派就可以覆盖掉之前的 + taskService.setAssignee(flowTaskVo.getTaskId(), flowTaskVo.getAssignee()); +// // 删除指派人重新指派 +// taskService.deleteCandidateUser(flowTaskVo.getTaskId(),flowTaskVo.getAssignee()); +// taskService.addCandidateUser(flowTaskVo.getTaskId(),flowTaskVo.getAssignee()); +// // 如果要查询转给他人处理的任务,可以同时将OWNER进行设置: +// taskService.setOwner(flowTaskVo.getTaskId(), flowTaskVo.getAssignee()); + + } + + /** + * 多实例加签 + * act_ru_task、act_ru_identitylink各生成一条记录 + * + * @param flowTaskVo + */ + @Override + public void addMultiInstanceExecution(FlowTaskVo flowTaskVo) { + managementService.executeCommand(new AddMultiInstanceExecutionCmd(flowTaskVo.getDefId(), flowTaskVo.getInstanceId(), flowTaskVo.getVariables())); + } + + /** + * 多实例减签 + * act_ru_task减1、act_ru_identitylink不变 + * + * @param flowTaskVo + */ + @Override + public void deleteMultiInstanceExecution(FlowTaskVo flowTaskVo) { + managementService.executeCommand(new DeleteMultiInstanceExecutionCmd(flowTaskVo.getCurrentChildExecutionId(), flowTaskVo.getFlag())); + } + + /** + * 我发起的流程 + * + * @param queryVo 请求参数 + * @return + */ + @Override + public Result myProcess(FlowQueryVo queryVo) { + Page page = new Page<>(); + Long userId = Long.parseLong(jwtUtils.parseToken(ServletUtils.getRequest().getHeader("Authorization")).get("uid")); + HistoricProcessInstanceQuery historicProcessInstanceQuery = historyService.createHistoricProcessInstanceQuery() + .startedBy(userId.toString()) + .orderByProcessInstanceStartTime() + .desc(); + List historicProcessInstances = historicProcessInstanceQuery.listPage(queryVo.getPageSize() * (queryVo.getPageNum() - 1), queryVo.getPageSize()); + page.setTotal(historicProcessInstanceQuery.count()); + List flowList = new ArrayList<>(); + for (HistoricProcessInstance hisIns : historicProcessInstances) { + FlowTaskDto flowTask = new FlowTaskDto(); + flowTask.setCreateTime(hisIns.getStartTime()); + flowTask.setFinishTime(hisIns.getEndTime()); + flowTask.setProcInsId(hisIns.getId()); + + //设置变量信息 + FlFormItem flFormItem = flFormItemService.query(FlFormItemDto.builder().procInsId(hisIns.getId()).build()).stream().findFirst().orElse(null); + flowTask.setProcVars(JSONObject.parseObject(flFormItem != null ? flFormItem.getContents() : "{}")); + flowTask.setStatus(flFormItem != null && flFormItem.getStatus() != null ? flFormItem.getStatus() : FlowStatus.EXCEPTION.getCode()); + + + // 计算耗时 + if (Objects.nonNull(hisIns.getEndTime())) { + long time = hisIns.getEndTime().getTime() - hisIns.getStartTime().getTime(); + flowTask.setDuration(getDate(time)); + } else { + long time = System.currentTimeMillis() - hisIns.getStartTime().getTime(); + flowTask.setDuration(getDate(time)); + } + // 流程定义信息 + ProcessDefinition pd = repositoryService.createProcessDefinitionQuery() + .processDefinitionId(hisIns.getProcessDefinitionId()) + .singleResult(); + flowTask.setDeployId(pd.getDeploymentId()); + + flowTask.setProcDefKey(pd.getKey()); + flowTask.setProcDefName(pd.getName()); + flowTask.setProcDefVersion(pd.getVersion()); + flowTask.setCategory(pd.getCategory()); + flowTask.setProcDefVersion(pd.getVersion()); + + // 当前所处流程 + List taskList = taskService.createTaskQuery().processInstanceId(hisIns.getId()).list(); + if (CollectionUtils.isNotEmpty(taskList)) { + flowTask.setTaskId(taskList.get(0).getId()); + flowTask.setTaskName(taskList.get(0).getName()); + if (StringUtils.isNotBlank(taskList.get(0).getAssignee())) { + // 当前任务节点办理人信息 + UmsUser sysUser = userService.getById(Long.parseLong(taskList.get(0).getAssignee())); + if (Objects.nonNull(sysUser)) { + flowTask.setAssigneeId(sysUser.getUserId()); + flowTask.setAssigneeName(sysUser.getUserName()); + flowTask.setAssigneeDeptName(Objects.nonNull(sysUser.get_umsOrganization()) ? sysUser.get_umsOrganization().getOrganizationName() : ""); + } + } + } else { + List historicTaskInstance = historyService.createHistoricTaskInstanceQuery().processInstanceId(hisIns.getId()).orderByHistoricTaskInstanceEndTime().desc().list(); + flowTask.setTaskId(historicTaskInstance.get(0).getId()); + flowTask.setTaskName(historicTaskInstance.get(0).getName()); + if (StringUtils.isNotBlank(historicTaskInstance.get(0).getAssignee())) { + // 当前任务节点办理人信息 + UmsUser sysUser = userService.getById(Long.parseLong(historicTaskInstance.get(0).getAssignee())); + if (Objects.nonNull(sysUser)) { + flowTask.setAssigneeId(sysUser.getUserId()); + flowTask.setAssigneeName(sysUser.getUserName()); + flowTask.setAssigneeDeptName(Objects.nonNull(sysUser.get_umsOrganization()) ? sysUser.get_umsOrganization().getOrganizationName() : ""); + } + } + } + flowList.add(flowTask); + } + page.setRecords(flowList); + return new Result(ResultCode.success, page); + } + + /** + * 取消申请 + * 目前实现方式: 直接将当前流程变更为已完成 + * + * @param flowTaskVo + * @return + */ + @Override + public Result stopProcess(FlowTaskVo flowTaskVo) { + List task = taskService.createTaskQuery().processInstanceId(flowTaskVo.getInstanceId()).list(); + if (CollectionUtils.isEmpty(task)) { + throw new CustomException("流程未启动或已执行完成,操作失败"); + } + // 获取当前流程实例 + ProcessInstance processInstance = runtimeService.createProcessInstanceQuery() + .processInstanceId(flowTaskVo.getInstanceId()) + .singleResult(); + BpmnModel bpmnModel = repositoryService.getBpmnModel(processInstance.getProcessDefinitionId()); + if (Objects.nonNull(bpmnModel)) { + Process process = bpmnModel.getMainProcess(); + List endNodes = process.findFlowElementsOfType(EndEvent.class, false); + if (CollectionUtils.isNotEmpty(endNodes)) { + // TODO 取消流程为什么要设置流程发起人? +// SysUser loginUser = SecurityUtils.getLoginUser().getUser(); +// Authentication.setAuthenticatedUserId(loginUser.getUserId().toString()); + +// taskService.addComment(task.getId(), processInstance.getProcessInstanceId(), FlowComment.STOP.getType(), +// StringUtils.isBlank(flowTaskVo.getComment()) ? "取消申请" : flowTaskVo.getComment()); + // 获取当前流程最后一个节点 + String endId = endNodes.get(0).getId(); + List executions = runtimeService.createExecutionQuery() + .parentId(processInstance.getProcessInstanceId()).list(); + List executionIds = new ArrayList<>(); + executions.forEach(execution -> executionIds.add(execution.getId())); + // 变更流程为已结束状态 + runtimeService.createChangeActivityStateBuilder().moveExecutionsToSingleActivityId(executionIds, endId).changeState(); + } + } + flFormItemService.update(FlFormItemDto.builder().procInsId(flowTaskVo.getInstanceId()).status(FlowStatus.DISCARDED.getCode()).build()); + return Result.SUCCESS; + } + + /** + * 撤回流程 目前存在错误 + * + * @param flowTaskVo + * @return + */ + @Override + public Result revokeProcess(FlowTaskVo flowTaskVo) { + Task task = taskService.createTaskQuery().processInstanceId(flowTaskVo.getInstanceId()).singleResult(); + if (task == null) { + throw new CustomException("流程未启动或已执行完成,无法撤回"); + } + + String userId = jwtUtils.parseToken(ServletUtils.getRequest().getHeader("Authorization")).get("uid"); + List htiList = historyService.createHistoricTaskInstanceQuery() + .processInstanceId(task.getProcessInstanceId()) + .orderByTaskCreateTime() + .asc() + .list(); + String myTaskId = null; + HistoricTaskInstance myTask = null; + for (HistoricTaskInstance hti : htiList) { + if (userId.equals(hti.getAssignee())) { + myTaskId = hti.getId(); + myTask = hti; + break; + } + } + if (null == myTaskId) { + throw new CustomException("该任务非当前用户提交,无法撤回"); + } + + String processDefinitionId = myTask.getProcessDefinitionId(); + BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinitionId); + + //变量 +// Map variables = runtimeService.getVariableInstances(currentTask.getExecutionId()); + String myActivityId = null; + List haiList = historyService.createHistoricActivityInstanceQuery() + .executionId(myTask.getExecutionId()).finished().list(); + for (HistoricActivityInstance hai : haiList) { + if (myTaskId.equals(hai.getTaskId())) { + myActivityId = hai.getActivityId(); + break; + } + } + FlowNode myFlowNode = (FlowNode) bpmnModel.getMainProcess().getFlowElement(myActivityId); + + Execution execution = runtimeService.createExecutionQuery().executionId(task.getExecutionId()).singleResult(); + String activityId = execution.getActivityId(); + FlowNode flowNode = (FlowNode) bpmnModel.getMainProcess().getFlowElement(activityId); + + //记录原活动方向 + List oriSequenceFlows = new ArrayList<>(flowNode.getOutgoingFlows()); + + + return Result.SUCCESS; + } + + /** + * 待办任务列表 + * + * @param queryVo 请求参数 + * @return + */ + @Override + public Result todoList(FlowQueryVo queryVo) { + Page page = new Page<>(); + // 只查看自己的数据 + Long userId = Long.parseLong(jwtUtils.parseToken(ServletUtils.getRequest().getHeader("Authorization")).get("uid")); + UmsUser sysUser = userService.getById(userId); + + List roles = new ArrayList<>(); + roles.add(sysUser.getUserId().toString()); + + TaskQuery taskQuery = taskService.createTaskQuery() + .active() + .includeProcessVariables() + .taskCandidateGroupIn(roles) + //.taskCandidateGroupIn(sysUser.getRoles().stream().map(role -> role.getRoleId().toString()).collect(Collectors.toList())) + .taskCandidateOrAssigned(sysUser.getUserId().toString()) + .orderByTaskCreateTime().desc(); + +// TODO 传入名称查询不到数据? +// if (StringUtils.isNotBlank(queryVo.getName())){ +// taskQuery.processDefinitionNameLike(queryVo.getName()); +// } + page.setTotal(taskQuery.count()); + List taskList = taskQuery.listPage(queryVo.getPageSize() * (queryVo.getPageNum() - 1), queryVo.getPageSize()); + List flowList = new ArrayList<>(); + for (Task task : taskList) { + FlowTaskDto flowTask = new FlowTaskDto(); + // 当前流程信息 + flowTask.setTaskId(task.getId()); + flowTask.setTaskDefKey(task.getTaskDefinitionKey()); + flowTask.setCreateTime(task.getCreateTime()); + flowTask.setProcDefId(task.getProcessDefinitionId()); + flowTask.setExecutionId(task.getExecutionId()); + flowTask.setTaskName(task.getName()); + + // 流程定义信息 + ProcessDefinition pd = repositoryService.createProcessDefinitionQuery() + .processDefinitionId(task.getProcessDefinitionId()) + .singleResult(); + flowTask.setDeployId(pd.getDeploymentId()); + + flowTask.setProcDefKey(pd.getKey()); + flowTask.setProcDefName(pd.getName()); + flowTask.setProcDefVersion(pd.getVersion()); + flowTask.setProcInsId(task.getProcessInstanceId()); + flowTask.setProcVars(task.getProcessVariables()); + flowTask.setTaskLocalVars(task.getTaskLocalVariables()); + + FlFormItem flFormItem = flFormItemService.query(FlFormItemDto.builder().procInsId(task.getProcessInstanceId()).build()).stream().findFirst().orElse(null); + flowTask.setStatus(flFormItem != null && flFormItem.getStatus() != null ? flFormItem.getStatus() : FlowStatus.EXCEPTION.getCode()); + + // 流程发起人信息 + HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery() + .processInstanceId(task.getProcessInstanceId()) + .singleResult(); + UmsUser startUser = userService.getById(Long.parseLong(historicProcessInstance.getStartUserId())); + flowTask.setStartUserId(startUser.getUserId().toString()); + flowTask.setStartUserName(startUser.getUserName()); + flowTask.setStartDeptName(Objects.nonNull(startUser.get_umsOrganization()) ? startUser.get_umsOrganization().getOrganizationName() : ""); + flowList.add(flowTask); + } + + page.setRecords(flowList); + return new Result<>(ResultCode.success, page); + } + + @Override + public long todoListCount() { + Long userId = Long.parseLong(jwtUtils.parseToken(ServletUtils.getRequest().getHeader("Authorization")).get("uid")); + UmsUser sysUser = userService.getById(userId); + List roles = new ArrayList<>(); + roles.add(sysUser.getUserId().toString()); + TaskQuery taskQuery = taskService.createTaskQuery() + .active() + .includeProcessVariables() + .taskCandidateGroupIn(roles) + .taskCandidateOrAssigned(sysUser.getUserId().toString()) + .orderByTaskCreateTime().desc(); + return taskQuery.count(); + } + + + /** + * 已办任务列表 + * + * @param queryVo 请求参数 + * @return + */ + @Override + public Result finishedList(FlowQueryVo queryVo) { + Page page = new Page<>(); + Long userId = Long.parseLong(jwtUtils.parseToken(ServletUtils.getRequest().getHeader("Authorization")).get("uid")); + HistoricTaskInstanceQuery taskInstanceQuery = historyService.createHistoricTaskInstanceQuery() + .includeProcessVariables() + .finished() + .taskAssignee(userId.toString()) + .orderByHistoricTaskInstanceEndTime() + .desc(); + List historicTaskInstanceList = taskInstanceQuery.listPage(queryVo.getPageSize() * (queryVo.getPageNum() - 1), queryVo.getPageSize()); + List hisTaskList = new ArrayList<>(); + for (HistoricTaskInstance histTask : historicTaskInstanceList) { + FlowTaskDto flowTask = new FlowTaskDto(); + + FlFormItem flFormItem = flFormItemService.query(FlFormItemDto.builder().procInsId(histTask.getProcessInstanceId()).build()).stream().findFirst().orElse(null); + flowTask.setStatus(flFormItem != null && flFormItem.getStatus() != null ? flFormItem.getStatus() : FlowStatus.EXCEPTION.getCode()); + // 当前流程信息 + flowTask.setTaskId(histTask.getId()); + // 审批人员信息 + flowTask.setCreateTime(histTask.getCreateTime()); + flowTask.setFinishTime(histTask.getEndTime()); + flowTask.setDuration(getDate(histTask.getDurationInMillis())); + flowTask.setProcDefId(histTask.getProcessDefinitionId()); + flowTask.setTaskDefKey(histTask.getTaskDefinitionKey()); + flowTask.setTaskName(histTask.getName()); + + // 流程定义信息 + ProcessDefinition pd = repositoryService.createProcessDefinitionQuery() + .processDefinitionId(histTask.getProcessDefinitionId()) + .singleResult(); + flowTask.setDeployId(pd.getDeploymentId()); + flowTask.setProcDefKey(pd.getKey()); + flowTask.setProcDefName(pd.getName()); + flowTask.setProcDefVersion(pd.getVersion()); + flowTask.setProcInsId(histTask.getProcessInstanceId()); + flowTask.setHisProcInsId(histTask.getProcessInstanceId()); + flowTask.setProcVars(histTask.getProcessVariables()); + flowTask.setTaskLocalVars(histTask.getTaskLocalVariables()); + + + // 流程发起人信息 + HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery() + .processInstanceId(histTask.getProcessInstanceId()) + .singleResult(); + UmsUser startUser = userService.getById(Long.parseLong(historicProcessInstance.getStartUserId())); + flowTask.setStartUserId(startUser.getUserId().toString()); + flowTask.setStartUserName(startUser.getUserName()); + flowTask.setStartDeptName(startUser.get_umsOrganization().getOrganizationName()); + hisTaskList.add(flowTask); + + } + page.setTotal(taskInstanceQuery.count()); + page.setRecords(hisTaskList); + return new Result<>(ResultCode.success, page); + } + + private static Predicate distinctByKey(Function keyExtractor) { + Set seen = ConcurrentHashMap.newKeySet(); + return t -> seen.add(keyExtractor.apply(t)); + } + + /** + * 流程历史流转记录 + * + * @param procInsId 流程实例Id + * @return + */ + @Override + public Result flowRecord(String procInsId, String deployId) { + Map map = new HashMap(); + if (StringUtils.isNotBlank(procInsId)) { + List list = historyService + .createHistoricActivityInstanceQuery() + .processInstanceId(procInsId) + .orderByHistoricActivityInstanceStartTime() + .desc().list(); + List hisFlowList = new ArrayList<>(); + for (HistoricActivityInstance histIns : list) { + // 展示开始节点 +// if ("startEvent".equals(histIns.getActivityType())) { +// FlowTaskDto flowTask = new FlowTaskDto(); +// // 流程发起人信息 +// HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery() +// .processInstanceId(histIns.getProcessInstanceId()) +// .singleResult(); +// SysUser startUser = userService.selectUserById(Long.parseLong(historicProcessInstance.getStartUserId())); +// flowTask.setTaskName(startUser.getNickName() + "(" + startUser.getDept().getDeptName() + ")发起申请"); +// flowTask.setFinishTime(histIns.getEndTime()); +// hisFlowList.add(flowTask); +// } else if ("endEvent".equals(histIns.getActivityType())) { +// FlowTaskDto flowTask = new FlowTaskDto(); +// flowTask.setTaskName(StringUtils.isNotBlank(histIns.getActivityName()) ? histIns.getActivityName() : "结束"); +// flowTask.setFinishTime(histIns.getEndTime()); +// hisFlowList.add(flowTask); +// } else + if (StringUtils.isNotBlank(histIns.getTaskId())) { + FlowTaskDto flowTask = new FlowTaskDto(); + flowTask.setTaskId(histIns.getTaskId()); + flowTask.setTaskName(histIns.getActivityName()); + flowTask.setCreateTime(histIns.getStartTime()); + flowTask.setFinishTime(histIns.getEndTime()); + if (StringUtils.isNotBlank(histIns.getAssignee())) { + UmsUser sysUser = userService.getById(Long.parseLong(histIns.getAssignee())); + flowTask.setAssigneeId(sysUser.getUserId()); + flowTask.setAssigneeName(sysUser.getUserName()); + flowTask.setDeptName(Objects.nonNull(sysUser.get_umsOrganization()) ? sysUser.get_umsOrganization().getOrganizationName() : ""); + } + // 展示审批人员 + List linksForTask = historyService.getHistoricIdentityLinksForTask(histIns.getTaskId()); + StringBuilder stringBuilder = new StringBuilder(); + for (HistoricIdentityLink identityLink : linksForTask) { + // 获选人,候选组/角色(多个) + if ("candidate".equals(identityLink.getType())) { + if (StringUtils.isNotBlank(identityLink.getUserId())) { + UmsUser sysUser = userService.getById(Long.parseLong(identityLink.getUserId())); + stringBuilder.append(sysUser.getUserName()).append(","); + } + if (StringUtils.isNotBlank(identityLink.getGroupId())) { + UmsRole sysRole = roleService.getById(Long.parseLong(identityLink.getGroupId())); + stringBuilder.append(sysRole.getRoleName()).append(","); + } + } + } + if (StringUtils.isNotBlank(stringBuilder)) { + flowTask.setCandidate(stringBuilder.substring(0, stringBuilder.length() - 1)); + } + + flowTask.setDuration(histIns.getDurationInMillis() == null || histIns.getDurationInMillis() == 0 ? null : getDate(histIns.getDurationInMillis())); + // 获取意见评论内容 + List commentList = taskService.getProcessInstanceComments(histIns.getProcessInstanceId()); + commentList.forEach(comment -> { + if (histIns.getTaskId().equals(comment.getTaskId())) { + flowTask.setComment(FlowCommentDto.builder().type(comment.getType()).comment(comment.getFullMessage()).build()); + } + }); + hisFlowList.add(flowTask); + } + } + map.put("flowList", hisFlowList); + } + // 第一次申请获取初始化表单 + if (StringUtils.isNotBlank(deployId)) { + FlForm sysForm = flFormService.selectByDeployId(deployId); + if (Objects.isNull(sysForm)) { + return new Result(ResultCode.operate_failure.getCode(), "请先配置流程表单"); + } + map.put("formData", JSONObject.parseObject(sysForm.getConfig())); + } + return new Result(ResultCode.success, map); + } + + /** + * 根据任务ID查询挂载的表单信息 + * + * @param taskId 任务Id + * @return + */ + @Override + public Task getTaskForm(String taskId) { + Task task = taskService.createTaskQuery().taskId(taskId).singleResult(); + return task; + } + + /** + * 获取流程过程图 + * + * @param processId + * @return + */ + @Override + public InputStream diagram(String processId) { + String processDefinitionId; + // 获取当前的流程实例 + ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(processId).singleResult(); + // 如果流程已经结束,则得到结束节点 + if (Objects.isNull(processInstance)) { + HistoricProcessInstance pi = historyService.createHistoricProcessInstanceQuery().processInstanceId(processId).singleResult(); + + processDefinitionId = pi.getProcessDefinitionId(); + } else {// 如果流程没有结束,则取当前活动节点 + // 根据流程实例ID获得当前处于活动状态的ActivityId合集 + ProcessInstance pi = runtimeService.createProcessInstanceQuery().processInstanceId(processId).singleResult(); + processDefinitionId = pi.getProcessDefinitionId(); + } + + // 获得活动的节点 + List highLightedFlowList = historyService.createHistoricActivityInstanceQuery().processInstanceId(processId).orderByHistoricActivityInstanceStartTime().asc().list(); + + List highLightedFlows = new ArrayList<>(); + List highLightedNodes = new ArrayList<>(); + //高亮线 + for (HistoricActivityInstance tempActivity : highLightedFlowList) { + if ("sequenceFlow".equals(tempActivity.getActivityType())) { + //高亮线 + highLightedFlows.add(tempActivity.getActivityId()); + } else { + //高亮节点 + highLightedNodes.add(tempActivity.getActivityId()); + } + } + + //获取流程图 + BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinitionId); + ProcessEngineConfiguration configuration = processEngine.getProcessEngineConfiguration(); + //获取自定义图片生成器 + ProcessDiagramGenerator diagramGenerator = new CustomProcessDiagramGenerator(); + InputStream in = diagramGenerator.generateDiagram(bpmnModel, "png", highLightedNodes, highLightedFlows, configuration.getActivityFontName(), + configuration.getLabelFontName(), configuration.getAnnotationFontName(), configuration.getClassLoader(), 1.0, true); + return in; + + } + + /** + * 获取流程执行节点 + * + * @param procInsId 流程实例id + * @return + */ + @Override + public Result getFlowViewer(String procInsId, String executionId) { + List flowViewerList = new ArrayList<>(); + FlowViewerDto flowViewerDto; + // 获取任务开始节点(临时处理方式) + List startNodeList = historyService.createHistoricActivityInstanceQuery() + .processInstanceId(procInsId) + .orderByHistoricActivityInstanceStartTime() + .asc().listPage(0, 3); + for (HistoricActivityInstance startInstance : startNodeList) { + if (!"sequenceFlow".equals(startInstance.getActivityType())) { + flowViewerDto = new FlowViewerDto(); + if (!"sequenceFlow".equals(startInstance.getActivityType())) { + flowViewerDto.setKey(startInstance.getActivityId()); + // 根据流程节点处理时间校验改节点是否已完成 + flowViewerDto.setCompleted(!Objects.isNull(startInstance.getEndTime())); + flowViewerList.add(flowViewerDto); + } + } + } + // 历史节点 + List hisActIns = historyService.createHistoricActivityInstanceQuery() + .executionId(executionId) + .orderByHistoricActivityInstanceStartTime() + .asc().list(); + for (HistoricActivityInstance activityInstance : hisActIns) { + if (!"sequenceFlow".equals(activityInstance.getActivityType())) { + flowViewerDto = new FlowViewerDto(); + flowViewerDto.setKey(activityInstance.getActivityId()); + // 根据流程节点处理时间校验改节点是否已完成 + flowViewerDto.setCompleted(!Objects.isNull(activityInstance.getEndTime())); + flowViewerList.add(flowViewerDto); + } + } + return new Result(ResultCode.success, flowViewerList); + } + + /** + * 获取流程变量 + * + * @param taskId + * @return + */ + @Override + public Result processVariables(String taskId) { +// HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery() +// .processInstanceId(task.getProcessInstanceId()) +// .singleResult(); +// SysUser startUser = userService.selectUserById(Long.parseLong(historicProcessInstance.getStartUserId())); + + // 流程变量 + HistoricTaskInstance historicTaskInstance = historyService.createHistoricTaskInstanceQuery().includeProcessVariables().finished().taskId(taskId).singleResult(); + if (Objects.nonNull(historicTaskInstance)) { + return new Result(ResultCode.success, historicTaskInstance.getProcessVariables()); + } else { + Map variables = taskService.getVariables(taskId); + return new Result(ResultCode.success, variables); + } + } + + /** + * 获取下一节点 + * + * @param flowTaskVo 任务 + * @return + */ + @Override + public Result getNextFlowNode(FlowTaskVo flowTaskVo) { + // Step 1. 获取当前节点并找到下一步节点 + Task task = taskService.createTaskQuery().taskId(flowTaskVo.getTaskId()).singleResult(); + FlowNextDto flowNextDto = new FlowNextDto(); + if (Objects.nonNull(task)) { + // Step 2. 获取当前流程所有流程变量(网关节点时需要校验表达式) + Map variables = taskService.getVariables(task.getId()); + List nextUserTask = FindNextNodeUtil.getNextUserTasks(repositoryService, task, variables); + if (CollectionUtils.isNotEmpty(nextUserTask)) { + for (UserTask userTask : nextUserTask) { + MultiInstanceLoopCharacteristics multiInstance = userTask.getLoopCharacteristics(); + // 会签节点 + if (Objects.nonNull(multiInstance)) { + flowNextDto.setVars(multiInstance.getInputDataItem()); + flowNextDto.setType(ProcessConstants.PROCESS_MULTI_INSTANCE); + flowNextDto.setDataType(ProcessConstants.DYNAMIC); + } else { + // 读取自定义节点属性 判断是否是否需要动态指定任务接收人员、组 + String dataType = userTask.getAttributeValue(ProcessConstants.NAMASPASE, ProcessConstants.PROCESS_CUSTOM_DATA_TYPE); + String userType = userTask.getAttributeValue(ProcessConstants.NAMASPASE, ProcessConstants.PROCESS_CUSTOM_USER_TYPE); + flowNextDto.setVars(ProcessConstants.PROCESS_APPROVAL); + flowNextDto.setType(userType); + flowNextDto.setDataType(dataType); + } + } + } else { + return new Result(ResultCode.success, "流程已完结"); + } + } + return new Result(ResultCode.success, flowNextDto); + } + + /** + * 获取下一节点 + * + * @param flowTaskVo 任务 + * @return + */ + @Override + public Result getNextFlowNodeByStart(FlowTaskVo flowTaskVo) { + ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().deploymentId(flowTaskVo.getDeploymentId()).singleResult(); + // Step 1. 获取当前节点并找到下一步节点 + FlowNextDto flowNextDto = new FlowNextDto(); + // Step 2. 获取当前流程所有流程变量(网关节点时需要校验表达式) + List nextUserTask = FindNextNodeUtil.getNextUserTasksByStart(repositoryService, processDefinition, flowTaskVo.getVariables()); + if (CollectionUtils.isNotEmpty(nextUserTask)) { + for (UserTask userTask : nextUserTask) { + MultiInstanceLoopCharacteristics multiInstance = userTask.getLoopCharacteristics(); + // 会签节点 + if (Objects.nonNull(multiInstance)) { + flowNextDto.setVars(multiInstance.getInputDataItem()); + flowNextDto.setType(ProcessConstants.PROCESS_MULTI_INSTANCE); + flowNextDto.setDataType(ProcessConstants.DYNAMIC); + } else { + // 读取自定义节点属性 判断是否是否需要动态指定任务接收人员、组 + String dataType = userTask.getAttributeValue(ProcessConstants.NAMASPASE, ProcessConstants.PROCESS_CUSTOM_DATA_TYPE); + String userType = userTask.getAttributeValue(ProcessConstants.NAMASPASE, ProcessConstants.PROCESS_CUSTOM_USER_TYPE); + flowNextDto.setVars(ProcessConstants.PROCESS_APPROVAL); + flowNextDto.setType(userType); + flowNextDto.setDataType(dataType); + } + } + } + return new Result(ResultCode.success, flowNextDto); + } + + /** + * 流程初始化表单 + * + * @param deployId + * @return + */ + @Override + public Result flowFormData(String deployId) { + // 第一次申请获取初始化表单 + if (StringUtils.isNotBlank(deployId)) { + FlForm sysForm = flFormService.selectByDeployId(deployId); + if (Objects.isNull(sysForm)) { + return new Result(ResultCode.operate_failure.getCode(), "请先配置流程表单!"); + } + return new Result(ResultCode.success, JSONObject.parseObject(sysForm.getConfig())); + } else { + return new Result(ResultCode.operate_failure.getCode(), "参数错误"); + } + } + + /** + * 流程节点信息 + * + * @param procInsId + * @return + */ + @Override + public Result flowXmlAndNode(String procInsId, String deployId) { + try { + List flowViewerList = new ArrayList<>(); + // 获取已经完成的节点 + List listFinished = historyService.createHistoricActivityInstanceQuery() + .processInstanceId(procInsId) + .finished() + .list(); + + // 保存已经完成的流程节点编号 + listFinished.forEach(s -> { + FlowViewerDto flowViewerDto = new FlowViewerDto(); + flowViewerDto.setKey(s.getActivityId()); + flowViewerDto.setCompleted(true); + flowViewerList.add(flowViewerDto); + }); + + // 获取代办节点 + List listUnFinished = historyService.createHistoricActivityInstanceQuery() + .processInstanceId(procInsId) + .unfinished() + .list(); + + // 保存需要代办的节点编号 + listUnFinished.forEach(s -> { + FlowViewerDto flowViewerDto = new FlowViewerDto(); + flowViewerDto.setKey(s.getActivityId()); + flowViewerDto.setCompleted(false); + flowViewerList.add(flowViewerDto); + }); + Map result = new HashMap(); + // xmlData 数据 + ProcessDefinition definition = repositoryService.createProcessDefinitionQuery().deploymentId(deployId).singleResult(); + InputStream inputStream = repositoryService.getResourceAsStream(definition.getDeploymentId(), definition.getResourceName()); + String xmlData = IOUtils.toString(inputStream, StandardCharsets.UTF_8); + result.put("nodeData", flowViewerList); + result.put("xmlData", xmlData); + return new Result(ResultCode.success, result); + } catch (Exception e) { + return new Result(ResultCode.operate_failure.getCode(), "高亮历史任务失败"); + } + } + + /** + * 流程节点表单 + * + * @param taskId 流程任务编号 + * @return + */ + @Override + public Result flowTaskForm(String taskId) throws Exception { + JSONObject result = new JSONObject(); + result.put("formKeyExist", false); + Task task = taskService.createTaskQuery().taskId(taskId).singleResult(); + BpmnModel bpmnModel = repositoryService.getBpmnModel(task.getProcessDefinitionId()); + FlowElement flowElement = bpmnModel.getFlowElement(task.getTaskDefinitionKey()); + // 流程变量 + Map parameters = new HashMap<>(); + HistoricTaskInstance historicTaskInstance = historyService.createHistoricTaskInstanceQuery().includeProcessVariables().finished().taskId(taskId).singleResult(); + if (Objects.nonNull(historicTaskInstance)) { + parameters = historicTaskInstance.getProcessVariables(); + } else { + parameters = taskService.getVariables(taskId); + } + // TODO 暂时只处理用户任务上的表单 + if (flowElement instanceof UserTask) { + String formKey = ((UserTask) flowElement).getFormKey(); + if (StringUtils.isNotBlank(formKey)) { + FlForm sysForm = flFormService.getById(Long.parseLong(formKey)); + + JSONObject oldVariables = JSONObject.parseObject(JSON.toJSONString(parameters.get("variables"))); + List oldFields = JSON.parseObject(JSON.toJSONString(oldVariables.get("fields")), new TypeReference>() { + }); + oldFields.forEach(obj -> obj.put("disabled", true)); + + JSONObject data = JSONObject.parseObject(sysForm.getConfig()); + List newFields = JSON.parseObject(JSON.toJSONString(data.get("fields")), new TypeReference>() { + }); + + oldFields.addAll(newFields); + oldVariables.put("fields", oldFields); + oldVariables.put("disabled", false); + oldVariables.put("formBtns", true); + result.put("formData", oldVariables); + result.put("formKeyExist", true); + return new Result<>(ResultCode.success, result); + } else { + result.put("formData", parameters.get("variables")); + return new Result<>(ResultCode.success, result); + } + } else { + result.put("formData", parameters.get("variables")); + return new Result<>(ResultCode.success, result); + } + } + + /** + * 将Object类型的数据转化成Map + * + * @param obj + * @return + * @throws Exception + */ + public Map obj2Map(Object obj) throws Exception { + Map map = new HashMap(); + Field[] fields = obj.getClass().getDeclaredFields(); + for (Field field : fields) { + field.setAccessible(true); + map.put(field.getName(), field.get(obj)); + } + return map; + } + + /** + * 流程完成时间处理 + * + * @param ms + * @return + */ + private String getDate(long ms) { + + long day = ms / (24 * 60 * 60 * 1000); + long hour = (ms / (60 * 60 * 1000) - day * 24); + long minute = ((ms / (60 * 1000)) - day * 24 * 60 - hour * 60); + long second = (ms / 1000 - day * 24 * 60 * 60 - hour * 60 * 60 - minute * 60); + + if (day > 0) { + return day + "天" + hour + "小时" + minute + "分钟"; + } + if (hour > 0) { + return hour + "小时" + minute + "分钟"; + } + if (minute > 0) { + return minute + "分钟"; + } + if (second > 0) { + return second + "秒"; + } else { + return 0 + "秒"; + } + } +} diff --git a/framework/pom.xml b/framework/pom.xml new file mode 100644 index 0000000..b97994b --- /dev/null +++ b/framework/pom.xml @@ -0,0 +1,52 @@ + + + + yyy + com.yyy + 1.0-SNAPSHOT + + 4.0.0 + + framework + + + framework框架核心 + + + + + + com.yyy + system + 1.0-SNAPSHOT + + + + + org.springframework.boot + spring-boot-starter-web + + + + + org.springframework.boot + spring-boot-starter-aop + + + + + com.alibaba + druid-spring-boot-starter + + + + + org.apache.shiro + shiro-spring + + + + + \ No newline at end of file diff --git a/framework/src/main/java/com/yyy/framework/aspect/GlobalExceptionHandler.java b/framework/src/main/java/com/yyy/framework/aspect/GlobalExceptionHandler.java new file mode 100644 index 0000000..a7d5a94 --- /dev/null +++ b/framework/src/main/java/com/yyy/framework/aspect/GlobalExceptionHandler.java @@ -0,0 +1,78 @@ +package com.yyy.framework.aspect; + +/** + * @Author: fy + * @Date: 2024/03/21 + * @Description:全局异常处理 + */ + +import com.yyy.common.core.domain.Result; +import com.yyy.common.core.domain.ResultCode; +import com.yyy.common.exception.base.BaseException; +import lombok.extern.slf4j.Slf4j; +import org.apache.catalina.connector.ClientAbortException; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.*; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; +import org.springframework.web.multipart.MultipartException; + +import javax.servlet.http.HttpServletRequest; + +@Slf4j +@Controller +@ControllerAdvice +public class GlobalExceptionHandler { + + @ResponseBody + @ExceptionHandler(BaseException.class) + public Result errorHandler(BaseException e) { + return _innerHandler(e.getResult(), e, false); + } + + @ResponseBody + @ExceptionHandler({MissingServletRequestParameterException.class, MissingPathVariableException.class, MissingRequestCookieException.class, MissingRequestHeaderException.class, MissingServletRequestParameterException.class}) + public Result errorHandler(MissingServletRequestParameterException e) { + return _innerHandler(Result.ILLEGAL_ARGUMENT, e, false); + } + + /** + * 参数校验异常处理 + */ + @ResponseBody + @ExceptionHandler(MethodArgumentNotValidException.class) + public Result errorHandler(MethodArgumentNotValidException e) { + return _innerHandler(new Result(Result.ILLEGAL_ARGUMENT.getCode(),e.getFieldError().getDefaultMessage()), e, false); + } + + @ResponseBody + @ExceptionHandler({MultipartException.class}) + public Result errorHandler(MultipartException e) { + return _innerHandler(Result.NOT_SUPPORT, e, false); + } + + @ResponseBody + @ExceptionHandler + public Result errorHandler(Exception e) { + return _innerHandler(new Result(Result.ERROR.getCode(),e.getMessage()), e, true); + } + + private Result _innerHandler(Result result, Exception e, boolean needExceptionTrace) { + ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); + if (requestAttributes != null) { + if (requestAttributes.getResponse() != null) { + requestAttributes.getResponse().setStatus(result.getCode()); + } + HttpServletRequest request = requestAttributes.getRequest(); + if (!needExceptionTrace) { + log.error("[GlobalExceptionHandler:" + request.getServletPath() + "] exception:" + e.getMessage()); + } else { + log.error("[GlobalExceptionHandler:" + request.getServletPath() + "] exception:" + e.getMessage(), e); + } + } + return result; + } +} \ No newline at end of file diff --git a/framework/src/main/java/com/yyy/framework/aspect/GlobalRequestAspect.java b/framework/src/main/java/com/yyy/framework/aspect/GlobalRequestAspect.java new file mode 100644 index 0000000..c8c9ace --- /dev/null +++ b/framework/src/main/java/com/yyy/framework/aspect/GlobalRequestAspect.java @@ -0,0 +1,100 @@ +package com.yyy.framework.aspect; + +import com.alibaba.fastjson.JSON; +import com.yyy.common.constant.Constants; +import com.yyy.common.core.domain.Result; +import com.yyy.common.exception.base.BaseException; +import com.yyy.common.utils.security.JwtUtils; +import com.yyy.common.utils.security.SessionHolder; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.method.HandlerMethod; +import org.springframework.web.servlet.HandlerInterceptor; +import org.springframework.web.servlet.config.annotation.InterceptorRegistry; +import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; +import org.springframework.web.servlet.resource.ResourceHttpRequestHandler; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.util.Map; + +/** + * @Author: fy + * @Date: 2024/03/21 + * @Description:全局请求拦截 + */ +@Slf4j +@Configuration +@ControllerAdvice +public class GlobalRequestAspect implements HandlerInterceptor, WebMvcConfigurer { + + @Autowired + JwtUtils jwtUtils; + @Value("${jwt.config.refreshTime}") + private Long refreshTime; + @Value("${jwt.config.expiresTime}") + private Long expiresTime; + @Value("${app.profile}") + private String profile; + + /** + * 拦截器白名单 + */ + @Override + public void addInterceptors(InterceptorRegistry registry) { + registry.addInterceptor(this).addPathPatterns("/api/**") + .excludePathPatterns("/api/oauth/**"); + } + + @Override + public void addResourceHandlers(ResourceHandlerRegistry registry) { + registry.addResourceHandler(Constants.RESOURCE_PREFIX+"/**") + .addResourceLocations("file:"+profile+"/"); + } + + @Override + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws IOException { + if (handler instanceof ResourceHttpRequestHandler) { + response.setStatus(Result.NOT_SUPPORT.getCode()); + response.setCharacterEncoding("UTF-8"); + response.setContentType("text/json; charset=utf-8"); + response.getOutputStream().write(JSON.toJSONString(Result.NOT_SUPPORT).getBytes(StandardCharsets.UTF_8)); + return false; + } + + // 如果不是映射到方法直接通过,可以访问资源. + if (!(handler instanceof HandlerMethod)) { + return true; + } + + //为空就返回错误 + String token = request.getHeader("Authorization"); + if (null == token || "".equals(token.trim())) { + throw new BaseException(Result.NOT_LOGIN); + } + + Map map = jwtUtils.parseToken(token); + String uid = map.get("uid"); + String sid = map.get("sid"); + String clientVersion = map.get("clientVersion"); + String clientType = map.get("clientType"); + + long timeOfUse = System.currentTimeMillis() - Long.parseLong(map.get("timeStamp")); + + if (timeOfUse < refreshTime) { + SessionHolder.setUserSession(uid); + return true; + } else if (timeOfUse >= refreshTime && timeOfUse < expiresTime) { + response.setHeader("Authorization", jwtUtils.getToken(Long.parseLong(uid), sid, clientVersion, clientType)); + return true; + } else { + throw new BaseException(Result.NOT_LOGIN); + } + } +} diff --git a/framework/src/main/java/com/yyy/framework/aspect/GlobalResponseAspect.java b/framework/src/main/java/com/yyy/framework/aspect/GlobalResponseAspect.java new file mode 100644 index 0000000..c1a4531 --- /dev/null +++ b/framework/src/main/java/com/yyy/framework/aspect/GlobalResponseAspect.java @@ -0,0 +1,63 @@ +package com.yyy.framework.aspect; + +import com.alibaba.fastjson.serializer.SerializerFeature; +import com.alibaba.fastjson.support.config.FastJsonConfig; +import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter; +import com.yyy.common.constant.Constants; +import com.yyy.common.core.controller.BaseController; +import com.yyy.common.core.domain.Result; +import com.yyy.common.core.domain.ResultCode; +import com.yyy.common.utils.security.SessionHolder; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.MethodParameter; +import org.springframework.http.MediaType; +import org.springframework.http.converter.HttpMessageConverter; +import org.springframework.http.server.ServerHttpRequest; +import org.springframework.http.server.ServerHttpResponse; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice; + +import java.nio.charset.StandardCharsets; + +/** + * @Author: fy + * @Date: 2024/03/22 + * @Description: + */ + +@Slf4j +@Configuration +@ControllerAdvice(assignableTypes = BaseController.class) +public class GlobalResponseAspect implements ResponseBodyAdvice { + + @Override + public boolean supports(MethodParameter methodParameter, Class clazz) { + return true; + } + + @Bean + FastJsonHttpMessageConverter fastJsonHttpMessageConverters() { + FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter(); + FastJsonConfig jsonConfig = new FastJsonConfig(); + jsonConfig.setCharset(StandardCharsets.UTF_8); + jsonConfig.setDateFormat("yyyy-MM-dd HH:mm:ss"); + jsonConfig.setSerializerFeatures(SerializerFeature.BrowserCompatible); + jsonConfig.setSerializerFeatures(SerializerFeature.WriteEnumUsingToString); + jsonConfig.setSerializerFeatures(SerializerFeature.WriteMapNullValue);//输出为null的字段 + converter.setFastJsonConfig(jsonConfig); + converter.setDefaultCharset(StandardCharsets.UTF_8); + converter.setSupportedMediaTypes(Constants.SUPPORTED_MEDIA_TYPES); + return converter; + } + + @Override + public Object beforeBodyWrite(Object result, MethodParameter methodParameter, MediaType mediaType, Class> clazz, ServerHttpRequest serverHttpRequest, ServerHttpResponse serverHttpResponse) { + SessionHolder.clearSession(); + if (result instanceof Result) { + return result; + } + return new Result(ResultCode.success, result); + } +} \ No newline at end of file diff --git a/framework/src/main/java/com/yyy/framework/aspect/SqlHandler.java b/framework/src/main/java/com/yyy/framework/aspect/SqlHandler.java new file mode 100644 index 0000000..7775bd7 --- /dev/null +++ b/framework/src/main/java/com/yyy/framework/aspect/SqlHandler.java @@ -0,0 +1,35 @@ +package com.yyy.framework.aspect; + +import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; +import org.apache.ibatis.reflection.MetaObject; +import org.springframework.stereotype.Component; + +import java.util.Date; + +/** + * @Author: fy + * @Date: 2024/03/22 + * @Description:自动生成创建和修改日期 + */ +@Component +public class SqlHandler implements MetaObjectHandler { + /** + * 使用mp做添加操作时候,这个方法执行 + * @param metaObject + */ + @Override + public void insertFill(MetaObject metaObject) { + //设置属性值 + this.setFieldValByName("createTime",new Date(),metaObject); + this.setFieldValByName("updateTime",new Date(),metaObject); + } + + /** + * 使用mp做修改操作时候,这个方法执行 + * @param metaObject + */ + @Override + public void updateFill(MetaObject metaObject) { + this.setFieldValByName("updateTime",new Date(),metaObject); + } +} \ No newline at end of file diff --git a/framework/src/main/java/com/yyy/framework/config/MyBatisPlusConfig.java b/framework/src/main/java/com/yyy/framework/config/MyBatisPlusConfig.java new file mode 100644 index 0000000..e00d1bd --- /dev/null +++ b/framework/src/main/java/com/yyy/framework/config/MyBatisPlusConfig.java @@ -0,0 +1,27 @@ +package com.yyy.framework.config; + +import com.baomidou.mybatisplus.annotation.DbType; +import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; +import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @Author: fy + * @Date: 2024/03/22 + * @Description: + */ +@Configuration +@MapperScan("com.yyy.system.mapper") +public class MyBatisPlusConfig { + /** + * 分页插件 + */ + @Bean + public MybatisPlusInterceptor mybatisPlusInterceptor() { + MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); + interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.H2)); + return interceptor; + } +} \ No newline at end of file diff --git a/framework/src/main/java/com/yyy/framework/shiro/service/SysPasswordService.java b/framework/src/main/java/com/yyy/framework/shiro/service/SysPasswordService.java new file mode 100644 index 0000000..85669fa --- /dev/null +++ b/framework/src/main/java/com/yyy/framework/shiro/service/SysPasswordService.java @@ -0,0 +1,79 @@ +package com.yyy.framework.shiro.service; + +import com.yyy.common.constant.Constants; +import com.yyy.common.constant.ShiroConstants; +import com.yyy.common.core.domain.entity.UmsUser; +import org.apache.shiro.cache.Cache; +import org.apache.shiro.cache.CacheManager; +import org.apache.shiro.crypto.hash.Md5Hash; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; +import java.util.concurrent.atomic.AtomicInteger; + +/** + * 登录密码方法 + */ +@Component +public class SysPasswordService +{ +// @Autowired +// private CacheManager cacheManager; +// +// private Cache loginRecordCache; + +// @Value(value = "${user.password.maxRetryCount}") +// private String maxRetryCount; + +// @PostConstruct +// public void init() +// { +// loginRecordCache = cacheManager.getCache(ShiroConstants.LOGIN_RECORD_CACHE); +// } + +// public void validate(UmsUser user, String password) +// { +// String loginName = user.getLoginName(); +// +// AtomicInteger retryCount = loginRecordCache.get(loginName); +// +// if (retryCount == null) +// { +// retryCount = new AtomicInteger(0); +// loginRecordCache.put(loginName, retryCount); +// } +// if (retryCount.incrementAndGet() > Integer.valueOf(maxRetryCount).intValue()) +// { +// AsyncManager.me().execute(AsyncFactory.recordLogininfor(loginName, Constants.LOGIN_FAIL, MessageUtils.message("user.password.retry.limit.exceed", maxRetryCount))); +// throw new UserPasswordRetryLimitExceedException(Integer.valueOf(maxRetryCount).intValue()); +// } +// +// if (!matches(user, password)) +// { +// AsyncManager.me().execute(AsyncFactory.recordLogininfor(loginName, Constants.LOGIN_FAIL, MessageUtils.message("user.password.retry.limit.count", retryCount))); +// loginRecordCache.put(loginName, retryCount); +// throw new UserPasswordNotMatchException(); +// } +// else +// { +// clearLoginRecordCache(loginName); +// } +// } + + public boolean matches(UmsUser user, String newPassword) + { + return user.getPassword().equals(encryptPassword(user.getLoginName(), newPassword, user.getSalt())); + } + +// public void clearLoginRecordCache(String loginName) +// { +// loginRecordCache.remove(loginName); +// } + + public String encryptPassword(String loginName, String password, String salt) + { + return new Md5Hash(loginName + password + salt).toHex(); + } +} diff --git a/modules/pom.xml b/modules/pom.xml new file mode 100644 index 0000000..99a2311 --- /dev/null +++ b/modules/pom.xml @@ -0,0 +1,28 @@ + + + + yyy + com.yyy + 1.0-SNAPSHOT + + 4.0.0 + + modules + + + + + org.springframework.boot + spring-boot-starter-web + + + + io.minio + minio + 7.0.2 + + + + \ No newline at end of file diff --git a/modules/src/main/java/com/yyy/minio/config/MinioConfig.java b/modules/src/main/java/com/yyy/minio/config/MinioConfig.java new file mode 100644 index 0000000..2eda591 --- /dev/null +++ b/modules/src/main/java/com/yyy/minio/config/MinioConfig.java @@ -0,0 +1,45 @@ +package com.yyy.minio.config; + +import io.minio.MinioClient; +import io.minio.errors.InvalidEndpointException; +import io.minio.errors.InvalidPortException; +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.stereotype.Component; + +/** + * @Author: fy + * @Date: 2024/03/22 + * @Description: + */ +@Data +@Component +@ConfigurationProperties(prefix = "minio") +public class MinioConfig { + + // endPoint是一个URL,域名,IPv4或者IPv6地址 + private String endpoint; + + // TCP/IP端口号 + private int port; + + private String accessKey; + + private String secretKey; + + // 如果是true,则用的是https而不是http,默认值是true + private Boolean secure; + + // 默认存储桶 + private String bucketName; + + private boolean enabled; + + @Bean + public MinioClient getMinioClient() throws InvalidEndpointException, InvalidPortException { + + MinioClient minioClient = new MinioClient(endpoint, port, accessKey, secretKey, secure); + return minioClient; + } +} \ No newline at end of file diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..6f13815 --- /dev/null +++ b/pom.xml @@ -0,0 +1,317 @@ + + + 4.0.0 + + com.yyy + yyy + 1.0-SNAPSHOT + + eam + http://127.0.0.1:80 + 系统基础模板 + + + UTF-8 + UTF-8 + 1.8 + 2.7.6 + 3.1.1 + 8.0.32 + 3.5.1 + 1.2.20 + 3.0.3 + 1.13.0 + 1.4.7 + 1.2.83 + 2.13.0 + 3.9 + 4.6.10 + 4.1.2 + 1.18.12 + 1.7.25 + 31.1-jre + 3.10.3 + 5.5.13.3 + 3.3.3 + 6.8.0 + 1.33 + + + + admin + common + system + modules + framework + flowable + license + + + pom + + + + + + + org.springframework.boot + spring-boot-dependencies + 2.7.6 + pom + import + + + + + mysql + mysql-connector-java + ${mysql.version} + + + com.alibaba + druid-spring-boot-starter + ${druid.version} + + + + org.flowable + flowable-spring-boot-starter + ${flowable.version} + + + + + com.baomidou + mybatis-plus-boot-starter + ${mybatis-plus.version} + + + + + com.github.xiaoymin + knife4j-spring-boot-starter + ${knife4j.version} + + + + + org.apache.shiro + shiro-core + ${shiro.version} + + + + + org.apache.shiro + shiro-spring + ${shiro.version} + + + + + org.apache.shiro + shiro-ehcache + ${shiro.version} + + + + + com.alibaba + fastjson + ${fastjson.version} + + + + + org.projectlombok + lombok + ${lombok.version} + provided + + + + + org.slf4j + slf4j-api + ${slf4j.version} + + + + + com.github.pagehelper + pagehelper-spring-boot-starter + ${pagehelper.boot.version} + + + + + com.google.guava + guava + ${guava.version} + + + + + com.auth0 + java-jwt + ${jwt.version} + + + + + commons-io + commons-io + ${commons.io.version} + + + org.apache.commons + commons-lang3 + ${commons-lang3.version} + + + cn.hutool + hutool-all + ${hutool.version} + + + org.apache.poi + poi-ooxml + ${poi.version} + + + + + org.apache.poi + poi-ooxml + ${poi.version} + + + + + com.itextpdf + itextpdf + ${itextpdf.version} + + + com.google.zxing + core + ${zxing.version} + + + com.google.zxing + javase + ${zxing.version} + + + + + com.aliyun + aliyun-java-sdk-core + 4.5.16 + + + + com.aliyun + aliyun-java-sdk-dysmsapi + 2.1.0 + + + + de.schlichtherle.truelicense + truelicense-core + ${truelicense.version} + provided + + + de.schlichtherle.truelicense + truelicense-xml + ${truelicense.version} + + + de.schlichtherle.truelicense + truelicense-swing + ${truelicense.version} + + + de.schlichtherle.truelicense + truelicense + ${truelicense.version} + pom + + + + + + + + org.projectlombok + lombok + provided + + + + org.slf4j + slf4j-api + + + + com.alibaba + fastjson + + + + commons-io + commons-io + + + org.apache.commons + commons-lang3 + + + cn.hutool + hutool-all + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.1 + + ${java.version} + ${java.version} + ${project.build.sourceEncoding} + + + + + + + + public + aliyun nexus + https://maven.aliyun.com/repository/public + + true + + + + + + + public + aliyun nexus + https://maven.aliyun.com/repository/public + + true + + + false + + + + \ No newline at end of file diff --git a/sql/eam.sql b/sql/eam.sql new file mode 100644 index 0000000..88c8d95 --- /dev/null +++ b/sql/eam.sql @@ -0,0 +1,3506 @@ +/* + Navicat Premium Data Transfer + + Source Server : localhost + Source Server Type : MySQL + Source Server Version : 80033 + Source Host : localhost:3306 + Source Schema : eam_insert + + Target Server Type : MySQL + Target Server Version : 80033 + File Encoding : 65001 + + Date: 23/08/2024 17:12:33 +*/ + +SET NAMES utf8mb4; +SET FOREIGN_KEY_CHECKS = 0; + +-- ---------------------------- +-- Table structure for act_app_appdef +-- ---------------------------- +DROP TABLE IF EXISTS `act_app_appdef`; +CREATE TABLE `act_app_appdef` ( + `ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `REV_` int NOT NULL, + `NAME_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `KEY_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `VERSION_` int NOT NULL, + `CATEGORY_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `DEPLOYMENT_ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `RESOURCE_NAME_` varchar(4000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `DESCRIPTION_` varchar(4000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `TENANT_ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '', + PRIMARY KEY (`ID_`) USING BTREE, + UNIQUE INDEX `ACT_IDX_APP_DEF_UNIQ`(`KEY_` ASC, `VERSION_` ASC, `TENANT_ID_` ASC) USING BTREE, + INDEX `ACT_IDX_APP_DEF_DPLY`(`DEPLOYMENT_ID_` ASC) USING BTREE, + CONSTRAINT `ACT_FK_APP_DEF_DPLY` FOREIGN KEY (`DEPLOYMENT_ID_`) REFERENCES `act_app_deployment` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of act_app_appdef +-- ---------------------------- + +-- ---------------------------- +-- Table structure for act_app_databasechangelog +-- ---------------------------- +DROP TABLE IF EXISTS `act_app_databasechangelog`; +CREATE TABLE `act_app_databasechangelog` ( + `ID` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `AUTHOR` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `FILENAME` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `DATEEXECUTED` datetime NOT NULL, + `ORDEREXECUTED` int NOT NULL, + `EXECTYPE` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `MD5SUM` varchar(35) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `DESCRIPTION` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `COMMENTS` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `TAG` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `LIQUIBASE` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `CONTEXTS` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `LABELS` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `DEPLOYMENT_ID` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of act_app_databasechangelog +-- ---------------------------- +INSERT INTO `act_app_databasechangelog` VALUES ('1', 'flowable', 'org/flowable/app/db/liquibase/flowable-app-db-changelog.xml', '2024-08-23 17:04:30', 1, 'EXECUTED', '8:496fc778bdf2ab13f2e1926d0e63e0a2', 'createTable tableName=ACT_APP_DEPLOYMENT; createTable tableName=ACT_APP_DEPLOYMENT_RESOURCE; addForeignKeyConstraint baseTableName=ACT_APP_DEPLOYMENT_RESOURCE, constraintName=ACT_FK_APP_RSRC_DPL, referencedTableName=ACT_APP_DEPLOYMENT; createIndex...', '', NULL, '4.9.1', NULL, NULL, '4403870645'); +INSERT INTO `act_app_databasechangelog` VALUES ('2', 'flowable', 'org/flowable/app/db/liquibase/flowable-app-db-changelog.xml', '2024-08-23 17:04:30', 2, 'EXECUTED', '8:ccea9ebfb6c1f8367ca4dd473fcbb7db', 'modifyDataType columnName=DEPLOY_TIME_, tableName=ACT_APP_DEPLOYMENT', '', NULL, '4.9.1', NULL, NULL, '4403870645'); +INSERT INTO `act_app_databasechangelog` VALUES ('3', 'flowable', 'org/flowable/app/db/liquibase/flowable-app-db-changelog.xml', '2024-08-23 17:04:30', 3, 'EXECUTED', '8:f1f8aff320aade831944ebad24355f3d', 'createIndex indexName=ACT_IDX_APP_DEF_UNIQ, tableName=ACT_APP_APPDEF', '', NULL, '4.9.1', NULL, NULL, '4403870645'); + +-- ---------------------------- +-- Table structure for act_app_databasechangeloglock +-- ---------------------------- +DROP TABLE IF EXISTS `act_app_databasechangeloglock`; +CREATE TABLE `act_app_databasechangeloglock` ( + `ID` int NOT NULL, + `LOCKED` bit(1) NOT NULL, + `LOCKGRANTED` datetime NULL DEFAULT NULL, + `LOCKEDBY` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + PRIMARY KEY (`ID`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of act_app_databasechangeloglock +-- ---------------------------- +INSERT INTO `act_app_databasechangeloglock` VALUES (1, b'0', NULL, NULL); + +-- ---------------------------- +-- Table structure for act_app_deployment +-- ---------------------------- +DROP TABLE IF EXISTS `act_app_deployment`; +CREATE TABLE `act_app_deployment` ( + `ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `NAME_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `CATEGORY_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `KEY_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `DEPLOY_TIME_` datetime(3) NULL DEFAULT NULL, + `TENANT_ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '', + PRIMARY KEY (`ID_`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of act_app_deployment +-- ---------------------------- + +-- ---------------------------- +-- Table structure for act_app_deployment_resource +-- ---------------------------- +DROP TABLE IF EXISTS `act_app_deployment_resource`; +CREATE TABLE `act_app_deployment_resource` ( + `ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `NAME_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `DEPLOYMENT_ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `RESOURCE_BYTES_` longblob NULL, + PRIMARY KEY (`ID_`) USING BTREE, + INDEX `ACT_IDX_APP_RSRC_DPL`(`DEPLOYMENT_ID_` ASC) USING BTREE, + CONSTRAINT `ACT_FK_APP_RSRC_DPL` FOREIGN KEY (`DEPLOYMENT_ID_`) REFERENCES `act_app_deployment` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of act_app_deployment_resource +-- ---------------------------- + +-- ---------------------------- +-- Table structure for act_cmmn_casedef +-- ---------------------------- +DROP TABLE IF EXISTS `act_cmmn_casedef`; +CREATE TABLE `act_cmmn_casedef` ( + `ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `REV_` int NOT NULL, + `NAME_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `KEY_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `VERSION_` int NOT NULL, + `CATEGORY_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `DEPLOYMENT_ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `RESOURCE_NAME_` varchar(4000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `DESCRIPTION_` varchar(4000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `HAS_GRAPHICAL_NOTATION_` bit(1) NULL DEFAULT NULL, + `TENANT_ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '', + `DGRM_RESOURCE_NAME_` varchar(4000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `HAS_START_FORM_KEY_` bit(1) NULL DEFAULT NULL, + PRIMARY KEY (`ID_`) USING BTREE, + UNIQUE INDEX `ACT_IDX_CASE_DEF_UNIQ`(`KEY_` ASC, `VERSION_` ASC, `TENANT_ID_` ASC) USING BTREE, + INDEX `ACT_IDX_CASE_DEF_DPLY`(`DEPLOYMENT_ID_` ASC) USING BTREE, + CONSTRAINT `ACT_FK_CASE_DEF_DPLY` FOREIGN KEY (`DEPLOYMENT_ID_`) REFERENCES `act_cmmn_deployment` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of act_cmmn_casedef +-- ---------------------------- + +-- ---------------------------- +-- Table structure for act_cmmn_databasechangelog +-- ---------------------------- +DROP TABLE IF EXISTS `act_cmmn_databasechangelog`; +CREATE TABLE `act_cmmn_databasechangelog` ( + `ID` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `AUTHOR` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `FILENAME` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `DATEEXECUTED` datetime NOT NULL, + `ORDEREXECUTED` int NOT NULL, + `EXECTYPE` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `MD5SUM` varchar(35) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `DESCRIPTION` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `COMMENTS` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `TAG` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `LIQUIBASE` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `CONTEXTS` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `LABELS` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `DEPLOYMENT_ID` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of act_cmmn_databasechangelog +-- ---------------------------- +INSERT INTO `act_cmmn_databasechangelog` VALUES ('1', 'flowable', 'org/flowable/cmmn/db/liquibase/flowable-cmmn-db-changelog.xml', '2024-08-23 17:04:29', 1, 'EXECUTED', '8:8b4b922d90b05ff27483abefc9597aa6', 'createTable tableName=ACT_CMMN_DEPLOYMENT; createTable tableName=ACT_CMMN_DEPLOYMENT_RESOURCE; addForeignKeyConstraint baseTableName=ACT_CMMN_DEPLOYMENT_RESOURCE, constraintName=ACT_FK_CMMN_RSRC_DPL, referencedTableName=ACT_CMMN_DEPLOYMENT; create...', '', NULL, '4.9.1', NULL, NULL, '4403869199'); +INSERT INTO `act_cmmn_databasechangelog` VALUES ('2', 'flowable', 'org/flowable/cmmn/db/liquibase/flowable-cmmn-db-changelog.xml', '2024-08-23 17:04:29', 2, 'EXECUTED', '8:65e39b3d385706bb261cbeffe7533cbe', 'addColumn tableName=ACT_CMMN_CASEDEF; addColumn tableName=ACT_CMMN_DEPLOYMENT_RESOURCE; addColumn tableName=ACT_CMMN_RU_CASE_INST; addColumn tableName=ACT_CMMN_RU_PLAN_ITEM_INST', '', NULL, '4.9.1', NULL, NULL, '4403869199'); +INSERT INTO `act_cmmn_databasechangelog` VALUES ('3', 'flowable', 'org/flowable/cmmn/db/liquibase/flowable-cmmn-db-changelog.xml', '2024-08-23 17:04:29', 3, 'EXECUTED', '8:c01f6e802b49436b4489040da3012359', 'addColumn tableName=ACT_CMMN_RU_PLAN_ITEM_INST; addColumn tableName=ACT_CMMN_RU_CASE_INST; createIndex indexName=ACT_IDX_PLAN_ITEM_STAGE_INST, tableName=ACT_CMMN_RU_PLAN_ITEM_INST; addColumn tableName=ACT_CMMN_RU_PLAN_ITEM_INST; addColumn tableNam...', '', NULL, '4.9.1', NULL, NULL, '4403869199'); +INSERT INTO `act_cmmn_databasechangelog` VALUES ('4', 'flowable', 'org/flowable/cmmn/db/liquibase/flowable-cmmn-db-changelog.xml', '2024-08-23 17:04:29', 4, 'EXECUTED', '8:e40d29cb79345b7fb5afd38a7f0ba8fc', 'createTable tableName=ACT_CMMN_HI_PLAN_ITEM_INST; addColumn tableName=ACT_CMMN_RU_MIL_INST; addColumn tableName=ACT_CMMN_HI_MIL_INST', '', NULL, '4.9.1', NULL, NULL, '4403869199'); +INSERT INTO `act_cmmn_databasechangelog` VALUES ('5', 'flowable', 'org/flowable/cmmn/db/liquibase/flowable-cmmn-db-changelog.xml', '2024-08-23 17:04:30', 5, 'EXECUTED', '8:70349de472f87368dcdec971a10311a0', 'modifyDataType columnName=DEPLOY_TIME_, tableName=ACT_CMMN_DEPLOYMENT; modifyDataType columnName=START_TIME_, tableName=ACT_CMMN_RU_CASE_INST; modifyDataType columnName=START_TIME_, tableName=ACT_CMMN_RU_PLAN_ITEM_INST; modifyDataType columnName=T...', '', NULL, '4.9.1', NULL, NULL, '4403869199'); +INSERT INTO `act_cmmn_databasechangelog` VALUES ('6', 'flowable', 'org/flowable/cmmn/db/liquibase/flowable-cmmn-db-changelog.xml', '2024-08-23 17:04:30', 6, 'EXECUTED', '8:10e82e26a7fee94c32a92099c059c18c', 'createIndex indexName=ACT_IDX_CASE_DEF_UNIQ, tableName=ACT_CMMN_CASEDEF', '', NULL, '4.9.1', NULL, NULL, '4403869199'); +INSERT INTO `act_cmmn_databasechangelog` VALUES ('7', 'flowable', 'org/flowable/cmmn/db/liquibase/flowable-cmmn-db-changelog.xml', '2024-08-23 17:04:30', 7, 'EXECUTED', '8:530bc81a1e30618ccf4a2da1f7c6c043', 'renameColumn newColumnName=CREATE_TIME_, oldColumnName=START_TIME_, tableName=ACT_CMMN_RU_PLAN_ITEM_INST; renameColumn newColumnName=CREATE_TIME_, oldColumnName=CREATED_TIME_, tableName=ACT_CMMN_HI_PLAN_ITEM_INST; addColumn tableName=ACT_CMMN_RU_P...', '', NULL, '4.9.1', NULL, NULL, '4403869199'); +INSERT INTO `act_cmmn_databasechangelog` VALUES ('8', 'flowable', 'org/flowable/cmmn/db/liquibase/flowable-cmmn-db-changelog.xml', '2024-08-23 17:04:30', 8, 'EXECUTED', '8:e8c2eb1ce28bc301efe07e0e29757781', 'addColumn tableName=ACT_CMMN_HI_PLAN_ITEM_INST', '', NULL, '4.9.1', NULL, NULL, '4403869199'); +INSERT INTO `act_cmmn_databasechangelog` VALUES ('9', 'flowable', 'org/flowable/cmmn/db/liquibase/flowable-cmmn-db-changelog.xml', '2024-08-23 17:04:30', 9, 'EXECUTED', '8:4cb4782b9bdec5ced2a64c525aa7b3a0', 'addColumn tableName=ACT_CMMN_RU_PLAN_ITEM_INST; addColumn tableName=ACT_CMMN_HI_PLAN_ITEM_INST', '', NULL, '4.9.1', NULL, NULL, '4403869199'); +INSERT INTO `act_cmmn_databasechangelog` VALUES ('10', 'flowable', 'org/flowable/cmmn/db/liquibase/flowable-cmmn-db-changelog.xml', '2024-08-23 17:04:30', 10, 'EXECUTED', '8:341c16be247f5d17badc9809da8691f9', 'addColumn tableName=ACT_CMMN_RU_CASE_INST; addColumn tableName=ACT_CMMN_RU_CASE_INST; createIndex indexName=ACT_IDX_CASE_INST_REF_ID_, tableName=ACT_CMMN_RU_CASE_INST; addColumn tableName=ACT_CMMN_HI_CASE_INST; addColumn tableName=ACT_CMMN_HI_CASE...', '', NULL, '4.9.1', NULL, NULL, '4403869199'); +INSERT INTO `act_cmmn_databasechangelog` VALUES ('11', 'flowable', 'org/flowable/cmmn/db/liquibase/flowable-cmmn-db-changelog.xml', '2024-08-23 17:04:30', 11, 'EXECUTED', '8:d7c4da9276bcfffbfb0ebfb25e3f7b05', 'addColumn tableName=ACT_CMMN_RU_PLAN_ITEM_INST; addColumn tableName=ACT_CMMN_HI_PLAN_ITEM_INST', '', NULL, '4.9.1', NULL, NULL, '4403869199'); +INSERT INTO `act_cmmn_databasechangelog` VALUES ('12', 'flowable', 'org/flowable/cmmn/db/liquibase/flowable-cmmn-db-changelog.xml', '2024-08-23 17:04:30', 12, 'EXECUTED', '8:adf4ecc45f2aa9a44a5626b02e1d6f98', 'addColumn tableName=ACT_CMMN_RU_CASE_INST', '', NULL, '4.9.1', NULL, NULL, '4403869199'); +INSERT INTO `act_cmmn_databasechangelog` VALUES ('13', 'flowable', 'org/flowable/cmmn/db/liquibase/flowable-cmmn-db-changelog.xml', '2024-08-23 17:04:30', 13, 'EXECUTED', '8:7550626f964ab5518464709408333ec1', 'addColumn tableName=ACT_CMMN_RU_PLAN_ITEM_INST; addColumn tableName=ACT_CMMN_HI_PLAN_ITEM_INST', '', NULL, '4.9.1', NULL, NULL, '4403869199'); +INSERT INTO `act_cmmn_databasechangelog` VALUES ('14', 'flowable', 'org/flowable/cmmn/db/liquibase/flowable-cmmn-db-changelog.xml', '2024-08-23 17:04:30', 14, 'EXECUTED', '8:086b40b3a05596dcc8a8d7479922d494', 'addColumn tableName=ACT_CMMN_RU_CASE_INST; addColumn tableName=ACT_CMMN_HI_CASE_INST', '', NULL, '4.9.1', NULL, NULL, '4403869199'); +INSERT INTO `act_cmmn_databasechangelog` VALUES ('16', 'flowable', 'org/flowable/cmmn/db/liquibase/flowable-cmmn-db-changelog.xml', '2024-08-23 17:04:30', 15, 'EXECUTED', '8:a697a222ddd99dd15b36516a252f1c63', 'addColumn tableName=ACT_CMMN_RU_CASE_INST; addColumn tableName=ACT_CMMN_HI_CASE_INST', '', NULL, '4.9.1', NULL, NULL, '4403869199'); +INSERT INTO `act_cmmn_databasechangelog` VALUES ('17', 'flowable', 'org/flowable/cmmn/db/liquibase/flowable-cmmn-db-changelog.xml', '2024-08-23 17:04:30', 16, 'EXECUTED', '8:d3706c5813a9b97fd2a59d12a9523946', 'createIndex indexName=ACT_IDX_HI_CASE_INST_END, tableName=ACT_CMMN_HI_CASE_INST', '', NULL, '4.9.1', NULL, NULL, '4403869199'); + +-- ---------------------------- +-- Table structure for act_cmmn_databasechangeloglock +-- ---------------------------- +DROP TABLE IF EXISTS `act_cmmn_databasechangeloglock`; +CREATE TABLE `act_cmmn_databasechangeloglock` ( + `ID` int NOT NULL, + `LOCKED` bit(1) NOT NULL, + `LOCKGRANTED` datetime NULL DEFAULT NULL, + `LOCKEDBY` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + PRIMARY KEY (`ID`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of act_cmmn_databasechangeloglock +-- ---------------------------- +INSERT INTO `act_cmmn_databasechangeloglock` VALUES (1, b'0', NULL, NULL); + +-- ---------------------------- +-- Table structure for act_cmmn_deployment +-- ---------------------------- +DROP TABLE IF EXISTS `act_cmmn_deployment`; +CREATE TABLE `act_cmmn_deployment` ( + `ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `NAME_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `CATEGORY_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `KEY_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `DEPLOY_TIME_` datetime(3) NULL DEFAULT NULL, + `PARENT_DEPLOYMENT_ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `TENANT_ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '', + PRIMARY KEY (`ID_`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of act_cmmn_deployment +-- ---------------------------- + +-- ---------------------------- +-- Table structure for act_cmmn_deployment_resource +-- ---------------------------- +DROP TABLE IF EXISTS `act_cmmn_deployment_resource`; +CREATE TABLE `act_cmmn_deployment_resource` ( + `ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `NAME_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `DEPLOYMENT_ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `RESOURCE_BYTES_` longblob NULL, + `GENERATED_` bit(1) NULL DEFAULT NULL, + PRIMARY KEY (`ID_`) USING BTREE, + INDEX `ACT_IDX_CMMN_RSRC_DPL`(`DEPLOYMENT_ID_` ASC) USING BTREE, + CONSTRAINT `ACT_FK_CMMN_RSRC_DPL` FOREIGN KEY (`DEPLOYMENT_ID_`) REFERENCES `act_cmmn_deployment` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of act_cmmn_deployment_resource +-- ---------------------------- + +-- ---------------------------- +-- Table structure for act_cmmn_hi_case_inst +-- ---------------------------- +DROP TABLE IF EXISTS `act_cmmn_hi_case_inst`; +CREATE TABLE `act_cmmn_hi_case_inst` ( + `ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `REV_` int NOT NULL, + `BUSINESS_KEY_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `NAME_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `PARENT_ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `CASE_DEF_ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `STATE_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `START_TIME_` datetime(3) NULL DEFAULT NULL, + `END_TIME_` datetime(3) NULL DEFAULT NULL, + `START_USER_ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `CALLBACK_ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `CALLBACK_TYPE_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `TENANT_ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '', + `REFERENCE_ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `REFERENCE_TYPE_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `LAST_REACTIVATION_TIME_` datetime(3) NULL DEFAULT NULL, + `LAST_REACTIVATION_USER_ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `BUSINESS_STATUS_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + PRIMARY KEY (`ID_`) USING BTREE, + INDEX `ACT_IDX_HI_CASE_INST_END`(`END_TIME_` ASC) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of act_cmmn_hi_case_inst +-- ---------------------------- + +-- ---------------------------- +-- Table structure for act_cmmn_hi_mil_inst +-- ---------------------------- +DROP TABLE IF EXISTS `act_cmmn_hi_mil_inst`; +CREATE TABLE `act_cmmn_hi_mil_inst` ( + `ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `REV_` int NOT NULL, + `NAME_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `TIME_STAMP_` datetime(3) NULL DEFAULT NULL, + `CASE_INST_ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `CASE_DEF_ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `ELEMENT_ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `TENANT_ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '', + PRIMARY KEY (`ID_`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of act_cmmn_hi_mil_inst +-- ---------------------------- + +-- ---------------------------- +-- Table structure for act_cmmn_hi_plan_item_inst +-- ---------------------------- +DROP TABLE IF EXISTS `act_cmmn_hi_plan_item_inst`; +CREATE TABLE `act_cmmn_hi_plan_item_inst` ( + `ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `REV_` int NOT NULL, + `NAME_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `STATE_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `CASE_DEF_ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `CASE_INST_ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `STAGE_INST_ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `IS_STAGE_` bit(1) NULL DEFAULT NULL, + `ELEMENT_ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `ITEM_DEFINITION_ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `ITEM_DEFINITION_TYPE_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `CREATE_TIME_` datetime(3) NULL DEFAULT NULL, + `LAST_AVAILABLE_TIME_` datetime(3) NULL DEFAULT NULL, + `LAST_ENABLED_TIME_` datetime(3) NULL DEFAULT NULL, + `LAST_DISABLED_TIME_` datetime(3) NULL DEFAULT NULL, + `LAST_STARTED_TIME_` datetime(3) NULL DEFAULT NULL, + `LAST_SUSPENDED_TIME_` datetime(3) NULL DEFAULT NULL, + `COMPLETED_TIME_` datetime(3) NULL DEFAULT NULL, + `OCCURRED_TIME_` datetime(3) NULL DEFAULT NULL, + `TERMINATED_TIME_` datetime(3) NULL DEFAULT NULL, + `EXIT_TIME_` datetime(3) NULL DEFAULT NULL, + `ENDED_TIME_` datetime(3) NULL DEFAULT NULL, + `LAST_UPDATED_TIME_` datetime(3) NULL DEFAULT NULL, + `START_USER_ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `REFERENCE_ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `REFERENCE_TYPE_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `TENANT_ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '', + `ENTRY_CRITERION_ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `EXIT_CRITERION_ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `SHOW_IN_OVERVIEW_` bit(1) NULL DEFAULT NULL, + `EXTRA_VALUE_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `DERIVED_CASE_DEF_ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `LAST_UNAVAILABLE_TIME_` datetime(3) NULL DEFAULT NULL, + PRIMARY KEY (`ID_`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of act_cmmn_hi_plan_item_inst +-- ---------------------------- + +-- ---------------------------- +-- Table structure for act_cmmn_ru_case_inst +-- ---------------------------- +DROP TABLE IF EXISTS `act_cmmn_ru_case_inst`; +CREATE TABLE `act_cmmn_ru_case_inst` ( + `ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `REV_` int NOT NULL, + `BUSINESS_KEY_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `NAME_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `PARENT_ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `CASE_DEF_ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `STATE_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `START_TIME_` datetime(3) NULL DEFAULT NULL, + `START_USER_ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `CALLBACK_ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `CALLBACK_TYPE_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `TENANT_ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '', + `LOCK_TIME_` datetime(3) NULL DEFAULT NULL, + `IS_COMPLETEABLE_` bit(1) NULL DEFAULT NULL, + `REFERENCE_ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `REFERENCE_TYPE_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `LOCK_OWNER_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `LAST_REACTIVATION_TIME_` datetime(3) NULL DEFAULT NULL, + `LAST_REACTIVATION_USER_ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `BUSINESS_STATUS_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + PRIMARY KEY (`ID_`) USING BTREE, + INDEX `ACT_IDX_CASE_INST_CASE_DEF`(`CASE_DEF_ID_` ASC) USING BTREE, + INDEX `ACT_IDX_CASE_INST_PARENT`(`PARENT_ID_` ASC) USING BTREE, + INDEX `ACT_IDX_CASE_INST_REF_ID_`(`REFERENCE_ID_` ASC) USING BTREE, + CONSTRAINT `ACT_FK_CASE_INST_CASE_DEF` FOREIGN KEY (`CASE_DEF_ID_`) REFERENCES `act_cmmn_casedef` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of act_cmmn_ru_case_inst +-- ---------------------------- + +-- ---------------------------- +-- Table structure for act_cmmn_ru_mil_inst +-- ---------------------------- +DROP TABLE IF EXISTS `act_cmmn_ru_mil_inst`; +CREATE TABLE `act_cmmn_ru_mil_inst` ( + `ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `NAME_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `TIME_STAMP_` datetime(3) NULL DEFAULT NULL, + `CASE_INST_ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `CASE_DEF_ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `ELEMENT_ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `TENANT_ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '', + PRIMARY KEY (`ID_`) USING BTREE, + INDEX `ACT_IDX_MIL_CASE_DEF`(`CASE_DEF_ID_` ASC) USING BTREE, + INDEX `ACT_IDX_MIL_CASE_INST`(`CASE_INST_ID_` ASC) USING BTREE, + CONSTRAINT `ACT_FK_MIL_CASE_DEF` FOREIGN KEY (`CASE_DEF_ID_`) REFERENCES `act_cmmn_casedef` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT, + CONSTRAINT `ACT_FK_MIL_CASE_INST` FOREIGN KEY (`CASE_INST_ID_`) REFERENCES `act_cmmn_ru_case_inst` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of act_cmmn_ru_mil_inst +-- ---------------------------- + +-- ---------------------------- +-- Table structure for act_cmmn_ru_plan_item_inst +-- ---------------------------- +DROP TABLE IF EXISTS `act_cmmn_ru_plan_item_inst`; +CREATE TABLE `act_cmmn_ru_plan_item_inst` ( + `ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `REV_` int NOT NULL, + `CASE_DEF_ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `CASE_INST_ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `STAGE_INST_ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `IS_STAGE_` bit(1) NULL DEFAULT NULL, + `ELEMENT_ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `NAME_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `STATE_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `CREATE_TIME_` datetime(3) NULL DEFAULT NULL, + `START_USER_ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `REFERENCE_ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `REFERENCE_TYPE_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `TENANT_ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '', + `ITEM_DEFINITION_ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `ITEM_DEFINITION_TYPE_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `IS_COMPLETEABLE_` bit(1) NULL DEFAULT NULL, + `IS_COUNT_ENABLED_` bit(1) NULL DEFAULT NULL, + `VAR_COUNT_` int NULL DEFAULT NULL, + `SENTRY_PART_INST_COUNT_` int NULL DEFAULT NULL, + `LAST_AVAILABLE_TIME_` datetime(3) NULL DEFAULT NULL, + `LAST_ENABLED_TIME_` datetime(3) NULL DEFAULT NULL, + `LAST_DISABLED_TIME_` datetime(3) NULL DEFAULT NULL, + `LAST_STARTED_TIME_` datetime(3) NULL DEFAULT NULL, + `LAST_SUSPENDED_TIME_` datetime(3) NULL DEFAULT NULL, + `COMPLETED_TIME_` datetime(3) NULL DEFAULT NULL, + `OCCURRED_TIME_` datetime(3) NULL DEFAULT NULL, + `TERMINATED_TIME_` datetime(3) NULL DEFAULT NULL, + `EXIT_TIME_` datetime(3) NULL DEFAULT NULL, + `ENDED_TIME_` datetime(3) NULL DEFAULT NULL, + `ENTRY_CRITERION_ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `EXIT_CRITERION_ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `EXTRA_VALUE_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `DERIVED_CASE_DEF_ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `LAST_UNAVAILABLE_TIME_` datetime(3) NULL DEFAULT NULL, + PRIMARY KEY (`ID_`) USING BTREE, + INDEX `ACT_IDX_PLAN_ITEM_CASE_DEF`(`CASE_DEF_ID_` ASC) USING BTREE, + INDEX `ACT_IDX_PLAN_ITEM_CASE_INST`(`CASE_INST_ID_` ASC) USING BTREE, + INDEX `ACT_IDX_PLAN_ITEM_STAGE_INST`(`STAGE_INST_ID_` ASC) USING BTREE, + CONSTRAINT `ACT_FK_PLAN_ITEM_CASE_DEF` FOREIGN KEY (`CASE_DEF_ID_`) REFERENCES `act_cmmn_casedef` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT, + CONSTRAINT `ACT_FK_PLAN_ITEM_CASE_INST` FOREIGN KEY (`CASE_INST_ID_`) REFERENCES `act_cmmn_ru_case_inst` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of act_cmmn_ru_plan_item_inst +-- ---------------------------- + +-- ---------------------------- +-- Table structure for act_cmmn_ru_sentry_part_inst +-- ---------------------------- +DROP TABLE IF EXISTS `act_cmmn_ru_sentry_part_inst`; +CREATE TABLE `act_cmmn_ru_sentry_part_inst` ( + `ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `REV_` int NOT NULL, + `CASE_DEF_ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `CASE_INST_ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `PLAN_ITEM_INST_ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `ON_PART_ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `IF_PART_ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `TIME_STAMP_` datetime(3) NULL DEFAULT NULL, + PRIMARY KEY (`ID_`) USING BTREE, + INDEX `ACT_IDX_SENTRY_CASE_DEF`(`CASE_DEF_ID_` ASC) USING BTREE, + INDEX `ACT_IDX_SENTRY_CASE_INST`(`CASE_INST_ID_` ASC) USING BTREE, + INDEX `ACT_IDX_SENTRY_PLAN_ITEM`(`PLAN_ITEM_INST_ID_` ASC) USING BTREE, + CONSTRAINT `ACT_FK_SENTRY_CASE_DEF` FOREIGN KEY (`CASE_DEF_ID_`) REFERENCES `act_cmmn_casedef` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT, + CONSTRAINT `ACT_FK_SENTRY_CASE_INST` FOREIGN KEY (`CASE_INST_ID_`) REFERENCES `act_cmmn_ru_case_inst` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT, + CONSTRAINT `ACT_FK_SENTRY_PLAN_ITEM` FOREIGN KEY (`PLAN_ITEM_INST_ID_`) REFERENCES `act_cmmn_ru_plan_item_inst` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of act_cmmn_ru_sentry_part_inst +-- ---------------------------- + +-- ---------------------------- +-- Table structure for act_co_content_item +-- ---------------------------- +DROP TABLE IF EXISTS `act_co_content_item`; +CREATE TABLE `act_co_content_item` ( + `ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `NAME_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `MIME_TYPE_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `TASK_ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `PROC_INST_ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `CONTENT_STORE_ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `CONTENT_STORE_NAME_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `FIELD_` varchar(400) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `CONTENT_AVAILABLE_` bit(1) NULL DEFAULT b'0', + `CREATED_` timestamp(6) NULL DEFAULT NULL, + `CREATED_BY_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `LAST_MODIFIED_` timestamp(6) NULL DEFAULT NULL, + `LAST_MODIFIED_BY_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `CONTENT_SIZE_` bigint NULL DEFAULT 0, + `TENANT_ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `SCOPE_ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `SCOPE_TYPE_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + PRIMARY KEY (`ID_`) USING BTREE, + INDEX `idx_contitem_taskid`(`TASK_ID_` ASC) USING BTREE, + INDEX `idx_contitem_procid`(`PROC_INST_ID_` ASC) USING BTREE, + INDEX `idx_contitem_scope`(`SCOPE_ID_` ASC, `SCOPE_TYPE_` ASC) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of act_co_content_item +-- ---------------------------- + +-- ---------------------------- +-- Table structure for act_co_databasechangelog +-- ---------------------------- +DROP TABLE IF EXISTS `act_co_databasechangelog`; +CREATE TABLE `act_co_databasechangelog` ( + `ID` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `AUTHOR` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `FILENAME` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `DATEEXECUTED` datetime NOT NULL, + `ORDEREXECUTED` int NOT NULL, + `EXECTYPE` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `MD5SUM` varchar(35) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `DESCRIPTION` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `COMMENTS` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `TAG` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `LIQUIBASE` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `CONTEXTS` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `LABELS` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `DEPLOYMENT_ID` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of act_co_databasechangelog +-- ---------------------------- +INSERT INTO `act_co_databasechangelog` VALUES ('1', 'activiti', 'org/flowable/content/db/liquibase/flowable-content-db-changelog.xml', '2024-08-23 17:04:28', 1, 'EXECUTED', '8:7644d7165cfe799200a2abdd3419e8b6', 'createTable tableName=ACT_CO_CONTENT_ITEM; createIndex indexName=idx_contitem_taskid, tableName=ACT_CO_CONTENT_ITEM; createIndex indexName=idx_contitem_procid, tableName=ACT_CO_CONTENT_ITEM', '', NULL, '4.9.1', NULL, NULL, '4403868873'); +INSERT INTO `act_co_databasechangelog` VALUES ('2', 'flowable', 'org/flowable/content/db/liquibase/flowable-content-db-changelog.xml', '2024-08-23 17:04:28', 2, 'EXECUTED', '8:fe7b11ac7dbbf9c43006b23bbab60bab', 'addColumn tableName=ACT_CO_CONTENT_ITEM; createIndex indexName=idx_contitem_scope, tableName=ACT_CO_CONTENT_ITEM', '', NULL, '4.9.1', NULL, NULL, '4403868873'); + +-- ---------------------------- +-- Table structure for act_co_databasechangeloglock +-- ---------------------------- +DROP TABLE IF EXISTS `act_co_databasechangeloglock`; +CREATE TABLE `act_co_databasechangeloglock` ( + `ID` int NOT NULL, + `LOCKED` bit(1) NOT NULL, + `LOCKGRANTED` datetime NULL DEFAULT NULL, + `LOCKEDBY` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + PRIMARY KEY (`ID`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of act_co_databasechangeloglock +-- ---------------------------- +INSERT INTO `act_co_databasechangeloglock` VALUES (1, b'0', NULL, NULL); + +-- ---------------------------- +-- Table structure for act_dmn_databasechangelog +-- ---------------------------- +DROP TABLE IF EXISTS `act_dmn_databasechangelog`; +CREATE TABLE `act_dmn_databasechangelog` ( + `ID` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `AUTHOR` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `FILENAME` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `DATEEXECUTED` datetime NOT NULL, + `ORDEREXECUTED` int NOT NULL, + `EXECTYPE` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `MD5SUM` varchar(35) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `DESCRIPTION` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `COMMENTS` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `TAG` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `LIQUIBASE` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `CONTEXTS` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `LABELS` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `DEPLOYMENT_ID` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of act_dmn_databasechangelog +-- ---------------------------- +INSERT INTO `act_dmn_databasechangelog` VALUES ('1', 'activiti', 'org/flowable/dmn/db/liquibase/flowable-dmn-db-changelog.xml', '2024-08-23 17:04:27', 1, 'EXECUTED', '8:c8701f1c71018b55029f450b2e9a10a1', 'createTable tableName=ACT_DMN_DEPLOYMENT; createTable tableName=ACT_DMN_DEPLOYMENT_RESOURCE; createTable tableName=ACT_DMN_DECISION_TABLE', '', NULL, '4.9.1', NULL, NULL, '4403867942'); +INSERT INTO `act_dmn_databasechangelog` VALUES ('2', 'flowable', 'org/flowable/dmn/db/liquibase/flowable-dmn-db-changelog.xml', '2024-08-23 17:04:27', 2, 'EXECUTED', '8:47f94b27feb7df8a30d4e338c7bd5fb8', 'createTable tableName=ACT_DMN_HI_DECISION_EXECUTION', '', NULL, '4.9.1', NULL, NULL, '4403867942'); +INSERT INTO `act_dmn_databasechangelog` VALUES ('3', 'flowable', 'org/flowable/dmn/db/liquibase/flowable-dmn-db-changelog.xml', '2024-08-23 17:04:27', 3, 'EXECUTED', '8:ac17eae89fbdccb6e08daf3c7797b579', 'addColumn tableName=ACT_DMN_HI_DECISION_EXECUTION', '', NULL, '4.9.1', NULL, NULL, '4403867942'); +INSERT INTO `act_dmn_databasechangelog` VALUES ('4', 'flowable', 'org/flowable/dmn/db/liquibase/flowable-dmn-db-changelog.xml', '2024-08-23 17:04:28', 4, 'EXECUTED', '8:f73aabc4529e7292c2942073d1cff6f9', 'dropColumn columnName=PARENT_DEPLOYMENT_ID_, tableName=ACT_DMN_DECISION_TABLE', '', NULL, '4.9.1', NULL, NULL, '4403867942'); +INSERT INTO `act_dmn_databasechangelog` VALUES ('5', 'flowable', 'org/flowable/dmn/db/liquibase/flowable-dmn-db-changelog.xml', '2024-08-23 17:04:28', 5, 'EXECUTED', '8:3e03528582dd4eeb4eb41f9b9539140d', 'modifyDataType columnName=DEPLOY_TIME_, tableName=ACT_DMN_DEPLOYMENT; modifyDataType columnName=START_TIME_, tableName=ACT_DMN_HI_DECISION_EXECUTION; modifyDataType columnName=END_TIME_, tableName=ACT_DMN_HI_DECISION_EXECUTION', '', NULL, '4.9.1', NULL, NULL, '4403867942'); +INSERT INTO `act_dmn_databasechangelog` VALUES ('6', 'flowable', 'org/flowable/dmn/db/liquibase/flowable-dmn-db-changelog.xml', '2024-08-23 17:04:28', 6, 'EXECUTED', '8:646c6a061e0b6e8a62e69844ff96abb0', 'createIndex indexName=ACT_IDX_DEC_TBL_UNIQ, tableName=ACT_DMN_DECISION_TABLE', '', NULL, '4.9.1', NULL, NULL, '4403867942'); +INSERT INTO `act_dmn_databasechangelog` VALUES ('7', 'flowable', 'org/flowable/dmn/db/liquibase/flowable-dmn-db-changelog.xml', '2024-08-23 17:04:28', 7, 'EXECUTED', '8:215a499ff7ae77685b55355245b8b708', 'dropIndex indexName=ACT_IDX_DEC_TBL_UNIQ, tableName=ACT_DMN_DECISION_TABLE; renameTable newTableName=ACT_DMN_DECISION, oldTableName=ACT_DMN_DECISION_TABLE; createIndex indexName=ACT_IDX_DMN_DEC_UNIQ, tableName=ACT_DMN_DECISION', '', NULL, '4.9.1', NULL, NULL, '4403867942'); +INSERT INTO `act_dmn_databasechangelog` VALUES ('8', 'flowable', 'org/flowable/dmn/db/liquibase/flowable-dmn-db-changelog.xml', '2024-08-23 17:04:28', 8, 'EXECUTED', '8:5355bee389318afed91a11702f2df032', 'addColumn tableName=ACT_DMN_DECISION', '', NULL, '4.9.1', NULL, NULL, '4403867942'); +INSERT INTO `act_dmn_databasechangelog` VALUES ('9', 'flowable', 'org/flowable/dmn/db/liquibase/flowable-dmn-db-changelog.xml', '2024-08-23 17:04:28', 9, 'EXECUTED', '8:0fe82086431b1953d293f0199f805876', 'createIndex indexName=ACT_IDX_DMN_INSTANCE_ID, tableName=ACT_DMN_HI_DECISION_EXECUTION', '', NULL, '4.9.1', NULL, NULL, '4403867942'); + +-- ---------------------------- +-- Table structure for act_dmn_databasechangeloglock +-- ---------------------------- +DROP TABLE IF EXISTS `act_dmn_databasechangeloglock`; +CREATE TABLE `act_dmn_databasechangeloglock` ( + `ID` int NOT NULL, + `LOCKED` bit(1) NOT NULL, + `LOCKGRANTED` datetime NULL DEFAULT NULL, + `LOCKEDBY` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + PRIMARY KEY (`ID`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of act_dmn_databasechangeloglock +-- ---------------------------- +INSERT INTO `act_dmn_databasechangeloglock` VALUES (1, b'0', NULL, NULL); + +-- ---------------------------- +-- Table structure for act_dmn_decision +-- ---------------------------- +DROP TABLE IF EXISTS `act_dmn_decision`; +CREATE TABLE `act_dmn_decision` ( + `ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `NAME_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `VERSION_` int NULL DEFAULT NULL, + `KEY_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `CATEGORY_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `DEPLOYMENT_ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `TENANT_ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `RESOURCE_NAME_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `DESCRIPTION_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `DECISION_TYPE_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + PRIMARY KEY (`ID_`) USING BTREE, + UNIQUE INDEX `ACT_IDX_DMN_DEC_UNIQ`(`KEY_` ASC, `VERSION_` ASC, `TENANT_ID_` ASC) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of act_dmn_decision +-- ---------------------------- + +-- ---------------------------- +-- Table structure for act_dmn_deployment +-- ---------------------------- +DROP TABLE IF EXISTS `act_dmn_deployment`; +CREATE TABLE `act_dmn_deployment` ( + `ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `NAME_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `CATEGORY_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `DEPLOY_TIME_` datetime(3) NULL DEFAULT NULL, + `TENANT_ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `PARENT_DEPLOYMENT_ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + PRIMARY KEY (`ID_`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of act_dmn_deployment +-- ---------------------------- + +-- ---------------------------- +-- Table structure for act_dmn_deployment_resource +-- ---------------------------- +DROP TABLE IF EXISTS `act_dmn_deployment_resource`; +CREATE TABLE `act_dmn_deployment_resource` ( + `ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `NAME_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `DEPLOYMENT_ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `RESOURCE_BYTES_` longblob NULL, + PRIMARY KEY (`ID_`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of act_dmn_deployment_resource +-- ---------------------------- + +-- ---------------------------- +-- Table structure for act_dmn_hi_decision_execution +-- ---------------------------- +DROP TABLE IF EXISTS `act_dmn_hi_decision_execution`; +CREATE TABLE `act_dmn_hi_decision_execution` ( + `ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `DECISION_DEFINITION_ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `DEPLOYMENT_ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `START_TIME_` datetime(3) NULL DEFAULT NULL, + `END_TIME_` datetime(3) NULL DEFAULT NULL, + `INSTANCE_ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `EXECUTION_ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `ACTIVITY_ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `FAILED_` bit(1) NULL DEFAULT b'0', + `TENANT_ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `EXECUTION_JSON_` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL, + `SCOPE_TYPE_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + PRIMARY KEY (`ID_`) USING BTREE, + INDEX `ACT_IDX_DMN_INSTANCE_ID`(`INSTANCE_ID_` ASC) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of act_dmn_hi_decision_execution +-- ---------------------------- + +-- ---------------------------- +-- Table structure for act_evt_log +-- ---------------------------- +DROP TABLE IF EXISTS `act_evt_log`; +CREATE TABLE `act_evt_log` ( + `LOG_NR_` bigint NOT NULL AUTO_INCREMENT, + `TYPE_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `PROC_DEF_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `PROC_INST_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `EXECUTION_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `TASK_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `TIME_STAMP_` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `USER_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `DATA_` longblob NULL, + `LOCK_OWNER_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `LOCK_TIME_` timestamp(3) NULL DEFAULT NULL, + `IS_PROCESSED_` tinyint NULL DEFAULT 0, + PRIMARY KEY (`LOG_NR_`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb3 COLLATE = utf8mb3_bin ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of act_evt_log +-- ---------------------------- + +-- ---------------------------- +-- Table structure for act_fo_databasechangelog +-- ---------------------------- +DROP TABLE IF EXISTS `act_fo_databasechangelog`; +CREATE TABLE `act_fo_databasechangelog` ( + `ID` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `AUTHOR` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `FILENAME` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `DATEEXECUTED` datetime NOT NULL, + `ORDEREXECUTED` int NOT NULL, + `EXECTYPE` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `MD5SUM` varchar(35) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `DESCRIPTION` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `COMMENTS` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `TAG` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `LIQUIBASE` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `CONTEXTS` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `LABELS` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `DEPLOYMENT_ID` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of act_fo_databasechangelog +-- ---------------------------- +INSERT INTO `act_fo_databasechangelog` VALUES ('1', 'activiti', 'org/flowable/form/db/liquibase/flowable-form-db-changelog.xml', '2024-08-23 17:04:28', 1, 'EXECUTED', '8:033ebf9380889aed7c453927ecc3250d', 'createTable tableName=ACT_FO_FORM_DEPLOYMENT; createTable tableName=ACT_FO_FORM_RESOURCE; createTable tableName=ACT_FO_FORM_DEFINITION; createTable tableName=ACT_FO_FORM_INSTANCE', '', NULL, '4.9.1', NULL, NULL, '4403868304'); +INSERT INTO `act_fo_databasechangelog` VALUES ('2', 'flowable', 'org/flowable/form/db/liquibase/flowable-form-db-changelog.xml', '2024-08-23 17:04:28', 2, 'EXECUTED', '8:986365ceb40445ce3b27a8e6b40f159b', 'addColumn tableName=ACT_FO_FORM_INSTANCE', '', NULL, '4.9.1', NULL, NULL, '4403868304'); +INSERT INTO `act_fo_databasechangelog` VALUES ('3', 'flowable', 'org/flowable/form/db/liquibase/flowable-form-db-changelog.xml', '2024-08-23 17:04:28', 3, 'EXECUTED', '8:abf482518ceb09830ef674e52c06bf15', 'dropColumn columnName=PARENT_DEPLOYMENT_ID_, tableName=ACT_FO_FORM_DEFINITION', '', NULL, '4.9.1', NULL, NULL, '4403868304'); +INSERT INTO `act_fo_databasechangelog` VALUES ('4', 'flowable', 'org/flowable/form/db/liquibase/flowable-form-db-changelog.xml', '2024-08-23 17:04:28', 4, 'EXECUTED', '8:2087829f22a4b2298dbf530681c74854', 'modifyDataType columnName=DEPLOY_TIME_, tableName=ACT_FO_FORM_DEPLOYMENT; modifyDataType columnName=SUBMITTED_DATE_, tableName=ACT_FO_FORM_INSTANCE', '', NULL, '4.9.1', NULL, NULL, '4403868304'); +INSERT INTO `act_fo_databasechangelog` VALUES ('5', 'flowable', 'org/flowable/form/db/liquibase/flowable-form-db-changelog.xml', '2024-08-23 17:04:28', 5, 'EXECUTED', '8:b4be732b89e5ca028bdd520c6ad4d446', 'createIndex indexName=ACT_IDX_FORM_DEF_UNIQ, tableName=ACT_FO_FORM_DEFINITION', '', NULL, '4.9.1', NULL, NULL, '4403868304'); +INSERT INTO `act_fo_databasechangelog` VALUES ('6', 'flowable', 'org/flowable/form/db/liquibase/flowable-form-db-changelog.xml', '2024-08-23 17:04:28', 6, 'EXECUTED', '8:384bbd364a649b67c3ca1bcb72fe537f', 'createIndex indexName=ACT_IDX_FORM_TASK, tableName=ACT_FO_FORM_INSTANCE; createIndex indexName=ACT_IDX_FORM_PROC, tableName=ACT_FO_FORM_INSTANCE; createIndex indexName=ACT_IDX_FORM_SCOPE, tableName=ACT_FO_FORM_INSTANCE', '', NULL, '4.9.1', NULL, NULL, '4403868304'); + +-- ---------------------------- +-- Table structure for act_fo_databasechangeloglock +-- ---------------------------- +DROP TABLE IF EXISTS `act_fo_databasechangeloglock`; +CREATE TABLE `act_fo_databasechangeloglock` ( + `ID` int NOT NULL, + `LOCKED` bit(1) NOT NULL, + `LOCKGRANTED` datetime NULL DEFAULT NULL, + `LOCKEDBY` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + PRIMARY KEY (`ID`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of act_fo_databasechangeloglock +-- ---------------------------- +INSERT INTO `act_fo_databasechangeloglock` VALUES (1, b'0', NULL, NULL); + +-- ---------------------------- +-- Table structure for act_fo_form_definition +-- ---------------------------- +DROP TABLE IF EXISTS `act_fo_form_definition`; +CREATE TABLE `act_fo_form_definition` ( + `ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `NAME_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `VERSION_` int NULL DEFAULT NULL, + `KEY_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `CATEGORY_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `DEPLOYMENT_ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `TENANT_ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `RESOURCE_NAME_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `DESCRIPTION_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + PRIMARY KEY (`ID_`) USING BTREE, + UNIQUE INDEX `ACT_IDX_FORM_DEF_UNIQ`(`KEY_` ASC, `VERSION_` ASC, `TENANT_ID_` ASC) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of act_fo_form_definition +-- ---------------------------- + +-- ---------------------------- +-- Table structure for act_fo_form_deployment +-- ---------------------------- +DROP TABLE IF EXISTS `act_fo_form_deployment`; +CREATE TABLE `act_fo_form_deployment` ( + `ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `NAME_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `CATEGORY_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `DEPLOY_TIME_` datetime(3) NULL DEFAULT NULL, + `TENANT_ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `PARENT_DEPLOYMENT_ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + PRIMARY KEY (`ID_`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of act_fo_form_deployment +-- ---------------------------- + +-- ---------------------------- +-- Table structure for act_fo_form_instance +-- ---------------------------- +DROP TABLE IF EXISTS `act_fo_form_instance`; +CREATE TABLE `act_fo_form_instance` ( + `ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `FORM_DEFINITION_ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `TASK_ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `PROC_INST_ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `PROC_DEF_ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `SUBMITTED_DATE_` datetime(3) NULL DEFAULT NULL, + `SUBMITTED_BY_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `FORM_VALUES_ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `TENANT_ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `SCOPE_ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `SCOPE_TYPE_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `SCOPE_DEFINITION_ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + PRIMARY KEY (`ID_`) USING BTREE, + INDEX `ACT_IDX_FORM_TASK`(`TASK_ID_` ASC) USING BTREE, + INDEX `ACT_IDX_FORM_PROC`(`PROC_INST_ID_` ASC) USING BTREE, + INDEX `ACT_IDX_FORM_SCOPE`(`SCOPE_ID_` ASC, `SCOPE_TYPE_` ASC) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of act_fo_form_instance +-- ---------------------------- + +-- ---------------------------- +-- Table structure for act_fo_form_resource +-- ---------------------------- +DROP TABLE IF EXISTS `act_fo_form_resource`; +CREATE TABLE `act_fo_form_resource` ( + `ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `NAME_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `DEPLOYMENT_ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `RESOURCE_BYTES_` longblob NULL, + PRIMARY KEY (`ID_`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of act_fo_form_resource +-- ---------------------------- + +-- ---------------------------- +-- Table structure for act_ge_bytearray +-- ---------------------------- +DROP TABLE IF EXISTS `act_ge_bytearray`; +CREATE TABLE `act_ge_bytearray` ( + `ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `REV_` int NULL DEFAULT NULL, + `NAME_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `DEPLOYMENT_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `BYTES_` longblob NULL, + `GENERATED_` tinyint NULL DEFAULT NULL, + PRIMARY KEY (`ID_`) USING BTREE, + INDEX `ACT_FK_BYTEARR_DEPL`(`DEPLOYMENT_ID_` ASC) USING BTREE, + CONSTRAINT `ACT_FK_BYTEARR_DEPL` FOREIGN KEY (`DEPLOYMENT_ID_`) REFERENCES `act_re_deployment` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT +) ENGINE = InnoDB CHARACTER SET = utf8mb3 COLLATE = utf8mb3_bin ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of act_ge_bytearray +-- ---------------------------- +INSERT INTO `act_ge_bytearray` VALUES ('10', 1, '员工资产报失.bpmn', '9', 0x3C3F786D6C2076657273696F6E3D22312E302220656E636F64696E673D225554462D38223F3E0D0A3C646566696E6974696F6E7320786D6C6E733D22687474703A2F2F7777772E6F6D672E6F72672F737065632F42504D4E2F32303130303532342F4D4F44454C2220786D6C6E733A7873693D22687474703A2F2F7777772E77332E6F72672F323030312F584D4C536368656D612D696E7374616E63652220786D6C6E733A7873643D22687474703A2F2F7777772E77332E6F72672F323030312F584D4C536368656D612220786D6C6E733A61637469766974693D22687474703A2F2F61637469766974692E6F72672F62706D6E2220786D6C6E733A62706D6E64693D22687474703A2F2F7777772E6F6D672E6F72672F737065632F42504D4E2F32303130303532342F44492220786D6C6E733A6F6D6764633D22687474703A2F2F7777772E6F6D672E6F72672F737065632F44442F32303130303532342F44432220786D6C6E733A6F6D6764693D22687474703A2F2F7777772E6F6D672E6F72672F737065632F44442F32303130303532342F44492220747970654C616E67756167653D22687474703A2F2F7777772E77332E6F72672F323030312F584D4C536368656D61222065787072657373696F6E4C616E67756167653D22687474703A2F2F7777772E77332E6F72672F313939392F585061746822207461726765744E616D6573706163653D22687474703A2F2F7777772E61637469766974692E6F72672F70726F63657373646566223E0D0A20203C70726F636573732069643D2265616D5F61737365745F656D706C6F7965655F6C6F737322206E616D653D22E59198E5B7A5E8B584E4BAA7E68AA5E5A4B12220697345786563757461626C653D2274727565223E0D0A202020203C73746172744576656E742069643D227369642D33386161356139372D323537332D343164652D616639342D38386237356464653866346322206E616D653D22E5BC80E5A78B222F3E0D0A202020203C757365725461736B2069643D227369642D65626463326162652D303165622D346430342D613935382D333463353330326535626261222061637469766974693A61737369676E65653D22237B61737369676E65657D22206E616D653D22E7AEA1E79086E59198E5AEA1E689B9222F3E0D0A202020203C656E644576656E742069643D227369642D33663532643231622D313637392D346436382D383161332D64383261303431643766333422206E616D653D22E7BB93E69D9F222F3E0D0A202020203C73657175656E6365466C6F772069643D227369642D63646461393630302D636530662D343536332D616230312D3536393163363535336166382220736F757263655265663D227369642D33386161356139372D323537332D343164652D616639342D38386237356464653866346322207461726765745265663D227369642D35623330666433622D623163612D343930392D386636372D633362353237663461343261222F3E0D0A202020203C73657175656E6365466C6F772069643D227369642D38346336393936662D616266622D346635312D393737642D6233653939373431313038342220736F757263655265663D227369642D65626463326162652D303165622D346430342D613935382D33346335333032653562626122207461726765745265663D227369642D33663532643231622D313637392D346436382D383161332D643832613034316437663334222F3E0D0A202020203C757365725461736B2069643D227369642D35623330666433622D623163612D343930392D386636372D63336235323766346134326122206E616D653D22E8B5B7E88D89222F3E0D0A202020203C73657175656E6365466C6F772069643D227369642D35306434346164612D666338372D346364612D393438392D6138663166653738643566612220736F757263655265663D227369642D35623330666433622D623163612D343930392D386636372D63336235323766346134326122207461726765745265663D227369642D65626463326162652D303165622D346430342D613935382D333463353330326535626261222F3E0D0A20203C2F70726F636573733E0D0A20203C62706D6E64693A42504D4E4469616772616D2069643D2242504D4E4469616772616D5F74657374223E0D0A202020203C62706D6E64693A42504D4E506C616E652062706D6E456C656D656E743D2274657374222069643D2242504D4E506C616E655F74657374223E0D0A2020202020203C62706D6E64693A42504D4E53686170652069643D2273686170652D64643531363464352D386330362D343537302D393466622D346565346233333633656538222062706D6E456C656D656E743D227369642D33386161356139372D323537332D343164652D616639342D383862373564646538663463223E0D0A20202020202020203C6F6D6764633A426F756E647320783D223636302E302220793D222D3231352E30222077696474683D2233302E3022206865696768743D2233302E30222F3E0D0A2020202020203C2F62706D6E64693A42504D4E53686170653E0D0A2020202020203C62706D6E64693A42504D4E53686170652069643D2273686170652D39376136303639362D393930392D343536312D626163612D306539346262353933326435222062706D6E456C656D656E743D227369642D65626463326162652D303165622D346430342D613935382D333463353330326535626261223E0D0A20202020202020203C6F6D6764633A426F756E647320783D223632352E302220793D2231302E343335393336222077696474683D223130302E3022206865696768743D2238302E30222F3E0D0A2020202020203C2F62706D6E64693A42504D4E53686170653E0D0A2020202020203C62706D6E64693A42504D4E53686170652069643D2273686170652D39616566633864642D396566352D343830312D626161302D666339323337373762666334222062706D6E456C656D656E743D227369642D33663532643231622D313637392D346436382D383161332D643832613034316437663334223E0D0A20202020202020203C6F6D6764633A426F756E647320783D223636302E302220793D223135302E30222077696474683D2233302E3022206865696768743D2233302E30222F3E0D0A2020202020203C2F62706D6E64693A42504D4E53686170653E0D0A2020202020203C62706D6E64693A42504D4E456467652069643D22656467652D62666436376533332D383836342D346531392D626262392D363162643562636331363530222062706D6E456C656D656E743D227369642D63646461393630302D636530662D343536332D616230312D353639316336353533616638223E0D0A20202020202020203C6F6D6764693A776179706F696E7420783D223637352E302220793D222D3138352E30222F3E0D0A20202020202020203C6F6D6764693A776179706F696E7420783D223637342E393939392220793D222D3133352E30222F3E0D0A2020202020203C2F62706D6E64693A42504D4E456467653E0D0A2020202020203C62706D6E64693A42504D4E456467652069643D22656467652D62313564303134392D326137382D346564352D393562642D613863326261396338376265222062706D6E456C656D656E743D227369642D38346336393936662D616266622D346635312D393737642D623365393937343131303834223E0D0A20202020202020203C6F6D6764693A776179706F696E7420783D223637352E302220793D2239302E3433353934222F3E0D0A20202020202020203C6F6D6764693A776179706F696E7420783D223637352E302220793D223135302E30222F3E0D0A2020202020203C2F62706D6E64693A42504D4E456467653E0D0A2020202020203C62706D6E64693A42504D4E53686170652069643D2273686170652D38356466613065622D306631322D343562322D386138632D373635376565626665366137222062706D6E456C656D656E743D227369642D35623330666433622D623163612D343930392D386636372D633362353237663461343261223E0D0A20202020202020203C6F6D6764633A426F756E647320783D223632342E39393939342220793D222D3133352E30222077696474683D223130302E3022206865696768743D2238302E30222F3E0D0A2020202020203C2F62706D6E64693A42504D4E53686170653E0D0A2020202020203C62706D6E64693A42504D4E456467652069643D22656467652D33363765346630642D373063362D343133332D623833342D373139663166336666616130222062706D6E456C656D656E743D227369642D35306434346164612D666338372D346364612D393438392D613866316665373864356661223E0D0A20202020202020203C6F6D6764693A776179706F696E7420783D223637342E39393939342220793D222D35352E30222F3E0D0A20202020202020203C6F6D6764693A776179706F696E7420783D223637352E302220793D2231302E343335393336222F3E0D0A2020202020203C2F62706D6E64693A42504D4E456467653E0D0A202020203C2F62706D6E64693A42504D4E506C616E653E0D0A20203C2F62706D6E64693A42504D4E4469616772616D3E0D0A3C2F646566696E6974696F6E733E0D0A, 0); +INSERT INTO `act_ge_bytearray` VALUES ('11', 1, '员工资产报失.eam_asset_employee_loss.png', '9', 0x89504E470D0A1A0A0000000D49484452000002DF00000195080600000026219D53000016EC4944415478DAEDDD7F6C95F5BDC0719261B2654BCC922D8BF12E5E738DD7BF961BC3328D99694C966D89095B266B4F6958D331CA76D53186896E1A8C6CB9B81FD98C264C63541C77CC10C2582F82B4457E88108B0E2B8883091228601D41C2A020E8F73E9F273CCDE92F28785A4ACFEB957CD2C3734E5B7C387FBCFDE67B9E67C2040000186129A54F767676362F5CB870DDFCF9F38FDE7DF7DDA71B1B1B535D5D5D6A6868F8E8873FFCE1A99FFFFCE7BB1F7EF8E145D9FCA7330600001711DD4B972E7D76DEBC79A767CD9A951E7FFCF1B479F3E6D4D5D5957A7A7A5288AFDDDDDDE9D5575F4D599CA71FFFF8C71FFDE4273F7967C68C19D39D41000018862CB29B7EF18B5F9CBCE79E7BF2B03E73E64C1AAEAD5BB7A67BEFBDF74C7373F38E2953A65CE76C0200C020B2769EB87CF9F2353367CE4C2D2D2D1714DDFDAD5AB52A3535359DB00A0E00008384F7DAB56B5FB9EBAEBBD2CE9D3B5325BCF3CE3B290BF913D3A74FFF6F67180000CE8A15EF08EFD8C35D49F1F366CC9871AC542A3538CB000054BDD8E31D5B4D2AB5E23DD80AF8B469D38E64017E83B30D0040D58AAB9A3CF4D043A7628FF7485AB162C589A953A76E72C60100A85ACB962DFBDFB8AAC9071F7C9046DA8F7EF4A343B69F0000509562D53BAEE31D97131C0DAFBFFEFA29ABDF000054A5B873657CC8F2E35C52F0423535351DAAABABFB77671F0080AA12B78C7FF2C927D368FADDEF7EB7358BEF39CE3E00005565FEFCF947E396F1A3E9E5975F7E278BEF16671F0080AA72F7DD779F3E78F0E0A8C6F7A14387BAB3F8DEE7EC030050551A1B1B534F4FCFA8C677FCBE2CBE7B9C7D0000AA4A16C1E95288DFEBEC03005055BEF7BDEF7D34DA2BDF274E9C3864E51B0080AA73D75D779D1AED3DDF070E1CF8BB3DDF0000549D071E7860D7685FEDE485175E78DED54E0000A83ABFFEF5AF9F1CEDEB7CCF9D3B7785EB7C03005075EEBFFFFEFFB8F3CE3B3F1CC53B5CF6D4D7D7BFED0E97000054A5D9B367FFE3D5575F1DAD2D278BB2F0DEE0AC03005095BEFFFDEF4FF9E94F7F7A7A1456BF8FD4D7D7BF562A951A9C750000AA56737373674B4BCB889677EC2F8F55EF9A9A9A89CE380000552BF6603735359DD8B973E78884776767E7F2EC771C2C954A3738DB000054BD868686A9CDCDCDC7BBBBBB2B1ADEFBF7EF7FA9BEBE7EAFED2600005066EAD4A94D3366CC3856A915F058F18EF0AEADADBDD7D90500807EB250AE6B686838FA97BFFCE55F1FE34398477EFBDBDF3E1D5B4DB269745601006008B107BCBEBEBEBDB9B9F9D06BAFBD76E242AEE3BD7AF5EAC559BC77C4872BEDF1060080E147F81D11E18D8D8DDDF3E7CFDFFED24B2FEDEDEAEA3AD8D3D39397F68913270E1D3870E0EF6D6D6DFFF7E0830FAE9C3A75EAEE88EE58ED7655130000B8085954FF5BA9549A9545F5926CF664D3934D3AFB755F362D71CB7877AE0400801110F1ED2C000080F8060000F10D0000886F000010DF000020BE010000F10D0000E21B000010DF000020BE0100407C030000E21B0000C437000020BE0100407C030080F8060000C4370000886F0000407C030080F8060000F10D0000886F000010DF000080F8060000F10D0000E21B000010DF000020BE010000F10D0000E21B0000C437000020BE0100407C030000E21B0000C4370000886F0000407C030080F8060000C43700005CDAD06E89D83ECF7438530000F0F1E37B5236A7CF15DFB5B5B5B73B5300005099005F798EF8DE54535333D159020080CAC4F7A4A1E2BB542A7DCB19020080CA06F8607BBF3BAC7A030040E5E37BC0DE6F7BBD0100608464B1BDCCAA3700008C4E7CDF54B6D7FB1BCE0800008CA062EFB7556F000018F9F89EE40E9700008C6929A589BB77EF5EB279F3E60FDBDBDB536B6BAB19E5696B6B4BEBD7AFFF67360DDE910000E35884F7860D1B527777773A75EA94B944F3DE7BEFA575EBD61DCD42FC0EEF4A0080712A56BC85F79809F053ADADAD3BBC2B0100C6A9D86A227CC7CE64F17DDABB1200609C8A3DC7A2774CC5B70F8D0200547B7CFFEBFD836977C7D3697BDB43F9C4E3382698C5370000158CEF6347BAD2B6171E48AFAFB8A7CFC4B1784E348B6F00002A14DFFBB6FF75407817B37F7B8B6816DF0000542ABE77BCF8F090F11DCF8966F10D004085E27B5BEB8343C6773C279AC5370000E25B7C03007079C5775CDD64A8F88EE744B3F80600A042F1BD6BE36343C6773C279AC5370000158AEFC35D9D69DBEAB903B79C64C7E239D12CBE0100A8507CC7ECD9F2EC80F88E6382597C030050C9F83E7932ED7A79C1C02D27D9B1784E348B6F00002A10DF7107CB9D1B1F1D72CF773CE72E97E21B00808F13DF274FA683BBD6A43756FD6CC8F02E265E13AFB50A2EBE0100B8C0F83EDF6AB75570F10D004085E27B38ABDDE75A0517D1E21B008061C6F7C5867731225A7C030030CCF836E21B0000F12DBE010010DF467C030020BEC5370000E2DB886F0000F16DC4370000E25B7C030020BE8DF80600407C8B6F0000C4B711DF0000E2DB886F0000C4B7F80600407C1BF10D0080F816DF0000886F23BE0100C4B711DF0000886FF10D0080F836E21B0000F12DBE010010DF467C030088EFB134575C71459A3E7DFA057D4FF69F96962C59D2FB78D1A245E21B0000F13DD4BCF6DA6B69F9F2E5E9139FF844FAE52F7F9947F49E3D7BD237BFF9CDFCF8D7BEF6B53473E6CCFCB53D3D3DE92B5FF94A3EF15CBC76DAB469BD8F9F7AEAA97CE2F19B6FBE29BE010010DFE513415DAC5C3736360E38BE72E5CA74E59557F639FECA2BAFA4A54B970E88EF5B6EB925AD5BB7CECA370000E2BBFF1C3E7C38DD7AEBAD7D56BEAFBEFAEA3CACBFFBDDEFE6C7AFBAEAAA3479F2E43EDF17C76EBEF9E6B46FDFBEDE63478E1CC9B79DC4F7886F0000C4F72073ECD8B1FCEB97BEF4A574E38D37E68F0F1C3890AF644750BFF5D65BF9947F4F44F6A73FFDE9347BF6EC7CE5BB7CF57BD6AC59E21B0000F13DD8B4B4B4A4EBAEBB2EFFE0E435D75C934F6767671ED245981F3D7AB4CFF73CF3CC33E21B0000F17DA173EDB5D7A665CB96E5DB4C9A9A9AFAAC7C17DB4A8AAD24FBF7EFCF1FC7D694DB6EBB2D7F7CDF7DF7A5CF7DEE73F9E3D8F3FDC4134FE4DF3B96FF9BC5370080F8BE2413A11C011E2BDF4564C74A771C8F55F03FFCE10FF9E3471E79A4CF07318B89EF8B9573D7F90600407C0F23BEB76DDB967F8D696F6FEFDD6E32D85551FACF73CF3D97AEBFFE7AF10D0080F83ED76CD9B225EDDDBBB7F7CF5BB76E4DBFFAD5AFF22D28719DEF88EA22CAE3CA2883FD8C581DEF7F3514F10D0080F836E21B00407C1BF10D0080F816DF0000886F23BE010010DFE21B0000F16DC4370080F836E21B0000F12DBE010010DF467C030020BEC5370000E2DB886F0000F16DC4370000E25B7C030020BE8DF80600407C8B6F0000C4B711DF0000E2DB886F0000C4B7F80600407C1BF10D0080F816DF0000886F23BE0100C4B711DF0000886FF10D0080F836E21B0000F12DBE010010DF467C03008C63EDEDEDA277EC4C4F16DFA7BD2B0100C6A9F5EBD71FECEEEE16BE6360BABABAFE9CC5F70EEF4A0080716ACD9A3593D7AE5DFBFEBBEFBE7B42005FBA15EF08EFB6B6B6BDD9DCE15D0900308E65C1777B6B6B6B476C79883DC797EBD4D5D55DAE7FF738EF3B84370000978D886F67010000C4370000886F0000407C030080F8060000F10D0000886F000010DF000080F8060000F10D0000E21B000010DF000020BE010000F10D0000E21B0000C437000020BE0100407C030000E21B0000C4370000886F0000407C030080F8060000C4370000886F000010DF000080F8060000F10D0000886F000010DF000020BE010000F10D0000E21B000010DF000020BE0100407C030000E21B0000C437000020BE0100407C030080F8060000C4370000886F0000407C030080F8060000F10D0000886F000010DF000080F8060000F10D0000E21B000010DF000020BE010000F10D00009730B45B22B6CF331DCE1400007CFCF89E94CDE973C5776D6DEDEDCE1400005426C0579E23BE37D5D4D44C74960000A032F13D69A8F82E954ADF72860000A0B2013ED8DEEF0EABDE000050F9F81EB0F7DB5E6F00001821596C2FB3EA0D0000A313DF3795EDF5FE863302000023A8D8FB6DD51B0000463EBE27B9C3250000635E4A69E2EEDDBB976CDEBCF9C3F6F6F6D4DADA7A594EC4F7E5FA776F6B6B4BEBD7AFFF67360DDE910000E35884F7860D1B527777773A75EA94B944F3DE7BEFA575EBD61DCD42FC0EEF4A0080712A56BC85F79809F053ADADAD3BBC2B0100C6A9D86A227CC7CE64F17DDABB1200609C8A3DC7A2774CC5B70F8E0200547B7CFFEBFD836977C7D3697BDB43F9C4E3382698C5370000158CEF6347BAD2B6171E48AFAFB8A7CFC4B1784E348B6F00002A14DFFBB6FF75407817B37F7B8B6816DF0000542ABE77BCF8F090F11DCF8966F10D004085E27B5BEB8343C6773C279AC5370000E25B7C03007079C5775CDD64A8F88EE744B3F80600A042F1BD6BE36343C6773C279AC5370000158AEFC35D9D69DBEAB903B79C64C7E239D12CBE0100A8507CC7ECD9F2EC80F88E6382597C030050C9F83E7932ED7A79C1C02D27D9B1784E348B6F00002A10DF7107CB9D1B1F1D72CF773CE72E97E21B00808F13DF274FA683BBD6A43756FD6CC8F02E265E13AFB50A2EBE0100B8C0F83EDF6AB75570F10D004085E27B38ABDDE75A0517D1E21B008061C6F7C5867731225A7C030030CCF836E21B0000F12DBE010010DF467C030020BEC5370000E2DB886F0000F16DC4370000E25B7C030020BE8DF80600407C8B6F0000C4B711DF0000E2DB886F0000C4B7F80600407C1BF10D0080F816DF0000886F23BE0100C4B711DF0000886FF10D0080F836E21B0000F12DBE010010DF467C030088EF4ACC934F3E9956AC58D1E758F62BD3B265CB2A1AABCB972F4FD3A64DCB271EC7EF78F1C517CFF97DF19ADFFCE637E77DCD9C3973F2C7CF3DF75CEAE9E9E93DBE68D122F10D00C0D889EF88D4EBAFBF3E0FE2ABAFBE3ABDF2CA2BF9B1EF7CE73BBD917CFCF8F174E8D0A174DB6DB7E5C7226A6FBEF9E6545757D71BD5F1F5D9679F4D9FFAD4A706FD1D4B962C396FE0AF5BB7AECFCFBBEAAAABD257BFFAD5FC71CCD2A54BD3B5D75E3BE0E7C4FF40148FE3EF503C8E1817DF00008C89F88E50DDB66D5B7AEAA9A7D2AE5DBBF295E82258CB43B69888F0385EAC94C7E3F8DEF81AC11C51FEC52F7E71D0F8BEE5965B06AC7C6FDCB871C0EBCA8339FE3C6FDEBCDE3F5F71C515E9BEFBEECB1FEFD9B3A7F7E7DC7AEBADF9DF351EBFF5D65BBDDFDBD9D9997F7DE49147C43700009736BE6325390236569723A2236C3FFFF9CFE7C76EB8E186F4A73FFD298FD7FDFBF7F709E278BE781CF11E5FE3B5070E1CC81FEFDBB7AFF7F5EDEDEDF9B1A6A6A63EF11DBF277E47F9DFE7D8B163F9EB8B95EEE2FBE2F1B7BFFDEDFC7B070BFBF295EF2F7CE10B69F5EAD5F9E358258FD5742BDF00005CD2F88E6D24453C3FF3CC3303F6645F73CD35E9CD37DFCC5F13ABE2478F1EED0DE288DD471F7DB4773BC98473AC7C17CFC5E3B7DF7E3BFF99E7DB8E521C2B0FFD952B57A62BAFBC72D0F88E95EF2D5BB6E48F376DDAD47B3CFE8EB69D000070C9E33B2682BA08D52F7FF9CBBDE11D2BE2712C62B9FFCA741C8F95E5E2FB8AD5EE58F98EE723D4FBC771636363EF3697F2801E2ABE638B4AFF95EFD8FF3D79F2E4DED7C59692F8A065BCE689279E1834DCEDF9060060CCC4F750111C570C890F5E0EF5DA62353A22BC88E458F5FEFAD7BF3E606BC884B295EF783C7BF6EC8AC477ACDCC7FF1C4CE8B70DA63CBE8B3DDFE5DB66C4370000973CBE8B95EF62F53B3EDCB875EBD601AFFDEC673F9B6EBCF1C67C2F75F9CA79AC7C0FF5B36325FDF0E1C3F9E39696967CBFF7DEBD7B070DFCD85E3258E8C70729CBB7AC0CB5E73B82BBD882121FCA8C182F2E3F28BE01001893F13DA1DFD5488A55E6B82C616C3589CB0E16971E9C707675BB781CB15DFEF323B4E3F8EF7FFFFBFCCFF181CC86868641AF7832D42A7BFF892D2EC53698D8B35EBC3E26623BBECE9D3B37FF5A5C21457C03003026E23B56A4FB1FEB1FC611BBE55B53CEF533E3F9B87249AC3CC787378B55F2FEBF63D6AC591715DFC5D55A26F4FB9065F1D81D2E01001893F16DC4370000E25B7C030020BEC5370000E2DB886F0000C4B7F80600407C1BF10D0080F816DF0000886FF10D0080F836E21B0000F12DBE010010DF467C030020BEC5370000E25B7C030020BE8DF80600407C8B6F0000C4B711DF0000886FF10D0080F816DF0000886F23BE010010DFE21B0000F16DC4370000E25B7C030020BEC5370000E2DB886F0000C4B7F80600407C1BF10D00C08409EDEDEDA277EC4C4F16DFA7BD2B0100C6A9F5EBD71FECEEEE16BE6360BABABAFE9CC5F70EEF4A0080716ACD9A3593D7AE5DFBFEBBEFBE7B42005FBA15EF08EFB6B6B6BDD9DCE15D0900308E65C1777B6B6B6B476C79883DC797E3D4D5D5A5CBF5EF7EF6BCEF10DE00005C1622BE9D05000010DF000020BE010000F10D0000E21B0000C437000020BE0100407C030000E21B0000C4370000886F0000407C030080F8060000C4370000886F000010DF000080F8060000F10D0000886F000010DF000020BE010000F10D0000E21B000010DF000020BE0100407C030000E21B0000C437000020BE0100407C030080F8060000C4370000886F0000407C030080F8060000F10D0000886F000010DF000080F8060000F10D0000E21B000010DF000020BE010000F10D0000E21B0000C437000020BE0100407C030000E21B00002E6568B7446C9F673A9C290000F8F8F13D299BD3E78AEFDADADADB9D290000A84C80AF3C477C6FAAA9A999E82C01004065E27BD250F15D2A95BEE50C01004065037CB0BDDF1D56BD0100A0F2F13D60EFB7BDDE00003042B2D85E66D51B00004627BE6F2ADBEBFD0D670400004650B1F7DBAA37000054587D7DFD7F65B1FD60A9545A9C7D7D239BE36757BF7BCEFE794936F36255DCD90200800BD4D8D8F8C92CA6EFCC82FB1FC3B8BB65F90730FF967D9D3965CA94CF388B0000701EB1973B9B772E24BA07997DD9D4389B0000308858EDCE82F9E92CBCCF948774763C3DF6D86369E3C68DA9ABAB2B1D3F7E3C859E9E9ED4DDDD9DB66EDD9A162C58909A9A9A068BF03FC6CF75760100E0ACF8F06416CA2F9587F3CC9933D3AA55ABD2071F7C9086E3CC9933A9B5B535FFBE7E01BEC43614000098D0BBE2DD27BC172E5CD8BBC27DA162457CF1E2C50302DCD5510000A87AB1D5A43C945B5A5A5225C42AF8D4A953FB6C4171B60100A85A673F5C79A6D2E15D1EE0FD56C06B9C750000AA4E6C3729BFAA496C351909FDB6A0ECB3FF1B0080AA13D7F12EFF70E5C5EEF11ECE1EF07E1FC29CE3EC03005055CA6FA01357351949FDB69FECF1E14B0000AAC6D95BC6F75EC77BB89713BC587119C21FFCE007E577C2742B7A0000AA4316C00F16211C37D0190D8F3FFE78F9EAF73CFF0A0000548552A9B4B808E1CD9B378F4A7CC79D30CBAFFBED5F010080AA90C5EF1B45081F3C787054E23B6E455F16DF3BFC2B0000502DF1DD5384F0485DE564B0AB9E94C5778F7F050000AA25BE7B43783495FF5EFF0A0000544B7C1FB3F20D0000A3A0B6B6F66FF67C0300C02870B5130000182559FCDEEF3ADF0000300A2EC51D2EA74F9FFE913B5C02005095B208EE286278D5AA55231ADFADADADE5ABDE7B6A6A6A26FA170000A06A944AA5E94510CF9C3973C4AE7A125739696E6EFEB02CBEE738FB00005495C6C6C64FC62A7411C50B172E1C91F85EBC7871F9AAF7BE2953A67CC6D90700A0EA64315C93CDE9228E9F7FFEF98A86F79A356BFADC58277E9FB30E00403507F8D3E5815CA9008FF09E366DDA99B29FFD47671B0080AA161F7E8C302E0FF0D882127BB52F768F77BFAD26F975BD639B8BB30D008000CF02BCFCC63BC58730E32A287199C0E15E4E3056BBFB7DB8320F6FFBBC0100A05F809FDD8272BA3C9EE33AE00B162C481D1D1DF9ADE88BABA2C40A77DC32BEB3B333BF814E16DD1FF58BEE7CAB89156F000018C2D90F61EE1924A42F64F6F9702500000C43AC56D7D6D6DE9905F4AE0B8CEE88F639B6990000C045C8627A5236F7C79EF02CC8FF963DEE391BDAF17547ECE9CE9EFB9FB865BC3B57020000000000000000000000000000000000000000000085FF0726F9FEF5CCE114690000000049454E44AE426082, 1); +INSERT INTO `act_ge_bytearray` VALUES ('14', 1, '员工资产报修.bpmn', '13', 0x3C3F786D6C2076657273696F6E3D22312E302220656E636F64696E673D225554462D38223F3E0D0A3C646566696E6974696F6E7320786D6C6E733D22687474703A2F2F7777772E6F6D672E6F72672F737065632F42504D4E2F32303130303532342F4D4F44454C2220786D6C6E733A7873693D22687474703A2F2F7777772E77332E6F72672F323030312F584D4C536368656D612D696E7374616E63652220786D6C6E733A7873643D22687474703A2F2F7777772E77332E6F72672F323030312F584D4C536368656D612220786D6C6E733A61637469766974693D22687474703A2F2F61637469766974692E6F72672F62706D6E2220786D6C6E733A62706D6E64693D22687474703A2F2F7777772E6F6D672E6F72672F737065632F42504D4E2F32303130303532342F44492220786D6C6E733A6F6D6764633D22687474703A2F2F7777772E6F6D672E6F72672F737065632F44442F32303130303532342F44432220786D6C6E733A6F6D6764693D22687474703A2F2F7777772E6F6D672E6F72672F737065632F44442F32303130303532342F44492220747970654C616E67756167653D22687474703A2F2F7777772E77332E6F72672F323030312F584D4C536368656D61222065787072657373696F6E4C616E67756167653D22687474703A2F2F7777772E77332E6F72672F313939392F585061746822207461726765744E616D6573706163653D22687474703A2F2F7777772E61637469766974692E6F72672F70726F63657373646566223E0D0A20203C70726F636573732069643D2265616D5F61737365745F656D706C6F7965655F72657061697222206E616D653D22E59198E5B7A5E8B584E4BAA7E68AA5E4BFAE2220697345786563757461626C653D2274727565223E0D0A202020203C73746172744576656E742069643D227369642D33386161356139372D323537332D343164652D616639342D38386237356464653866346322206E616D653D22E5BC80E5A78B222F3E0D0A202020203C757365725461736B2069643D227369642D65626463326162652D303165622D346430342D613935382D333463353330326535626261222061637469766974693A61737369676E65653D22237B61737369676E65657D22206E616D653D22E7AEA1E79086E59198E5AEA1E689B9222F3E0D0A202020203C656E644576656E742069643D227369642D33663532643231622D313637392D346436382D383161332D64383261303431643766333422206E616D653D22E7BB93E69D9F222F3E0D0A202020203C73657175656E6365466C6F772069643D227369642D63646461393630302D636530662D343536332D616230312D3536393163363535336166382220736F757263655265663D227369642D33386161356139372D323537332D343164652D616639342D38386237356464653866346322207461726765745265663D227369642D35623330666433622D623163612D343930392D386636372D633362353237663461343261222F3E0D0A202020203C73657175656E6365466C6F772069643D227369642D38346336393936662D616266622D346635312D393737642D6233653939373431313038342220736F757263655265663D227369642D65626463326162652D303165622D346430342D613935382D33346335333032653562626122207461726765745265663D227369642D33663532643231622D313637392D346436382D383161332D643832613034316437663334222F3E0D0A202020203C757365725461736B2069643D227369642D35623330666433622D623163612D343930392D386636372D63336235323766346134326122206E616D653D22E8B5B7E88D89222F3E0D0A202020203C73657175656E6365466C6F772069643D227369642D35306434346164612D666338372D346364612D393438392D6138663166653738643566612220736F757263655265663D227369642D35623330666433622D623163612D343930392D386636372D63336235323766346134326122207461726765745265663D227369642D65626463326162652D303165622D346430342D613935382D333463353330326535626261222F3E0D0A20203C2F70726F636573733E0D0A20203C62706D6E64693A42504D4E4469616772616D2069643D2242504D4E4469616772616D5F74657374223E0D0A202020203C62706D6E64693A42504D4E506C616E652062706D6E456C656D656E743D2274657374222069643D2242504D4E506C616E655F74657374223E0D0A2020202020203C62706D6E64693A42504D4E53686170652069643D2273686170652D64643531363464352D386330362D343537302D393466622D346565346233333633656538222062706D6E456C656D656E743D227369642D33386161356139372D323537332D343164652D616639342D383862373564646538663463223E0D0A20202020202020203C6F6D6764633A426F756E647320783D223636302E302220793D222D3231352E30222077696474683D2233302E3022206865696768743D2233302E30222F3E0D0A2020202020203C2F62706D6E64693A42504D4E53686170653E0D0A2020202020203C62706D6E64693A42504D4E53686170652069643D2273686170652D39376136303639362D393930392D343536312D626163612D306539346262353933326435222062706D6E456C656D656E743D227369642D65626463326162652D303165622D346430342D613935382D333463353330326535626261223E0D0A20202020202020203C6F6D6764633A426F756E647320783D223632352E302220793D2231302E343335393336222077696474683D223130302E3022206865696768743D2238302E30222F3E0D0A2020202020203C2F62706D6E64693A42504D4E53686170653E0D0A2020202020203C62706D6E64693A42504D4E53686170652069643D2273686170652D39616566633864642D396566352D343830312D626161302D666339323337373762666334222062706D6E456C656D656E743D227369642D33663532643231622D313637392D346436382D383161332D643832613034316437663334223E0D0A20202020202020203C6F6D6764633A426F756E647320783D223636302E302220793D223135302E30222077696474683D2233302E3022206865696768743D2233302E30222F3E0D0A2020202020203C2F62706D6E64693A42504D4E53686170653E0D0A2020202020203C62706D6E64693A42504D4E456467652069643D22656467652D62666436376533332D383836342D346531392D626262392D363162643562636331363530222062706D6E456C656D656E743D227369642D63646461393630302D636530662D343536332D616230312D353639316336353533616638223E0D0A20202020202020203C6F6D6764693A776179706F696E7420783D223637352E302220793D222D3138352E30222F3E0D0A20202020202020203C6F6D6764693A776179706F696E7420783D223637342E393939392220793D222D3133352E30222F3E0D0A2020202020203C2F62706D6E64693A42504D4E456467653E0D0A2020202020203C62706D6E64693A42504D4E456467652069643D22656467652D62313564303134392D326137382D346564352D393562642D613863326261396338376265222062706D6E456C656D656E743D227369642D38346336393936662D616266622D346635312D393737642D623365393937343131303834223E0D0A20202020202020203C6F6D6764693A776179706F696E7420783D223637352E302220793D2239302E3433353934222F3E0D0A20202020202020203C6F6D6764693A776179706F696E7420783D223637352E302220793D223135302E30222F3E0D0A2020202020203C2F62706D6E64693A42504D4E456467653E0D0A2020202020203C62706D6E64693A42504D4E53686170652069643D2273686170652D38356466613065622D306631322D343562322D386138632D373635376565626665366137222062706D6E456C656D656E743D227369642D35623330666433622D623163612D343930392D386636372D633362353237663461343261223E0D0A20202020202020203C6F6D6764633A426F756E647320783D223632342E39393939342220793D222D3133352E30222077696474683D223130302E3022206865696768743D2238302E30222F3E0D0A2020202020203C2F62706D6E64693A42504D4E53686170653E0D0A2020202020203C62706D6E64693A42504D4E456467652069643D22656467652D33363765346630642D373063362D343133332D623833342D373139663166336666616130222062706D6E456C656D656E743D227369642D35306434346164612D666338372D346364612D393438392D613866316665373864356661223E0D0A20202020202020203C6F6D6764693A776179706F696E7420783D223637342E39393939342220793D222D35352E30222F3E0D0A20202020202020203C6F6D6764693A776179706F696E7420783D223637352E302220793D2231302E343335393336222F3E0D0A2020202020203C2F62706D6E64693A42504D4E456467653E0D0A202020203C2F62706D6E64693A42504D4E506C616E653E0D0A20203C2F62706D6E64693A42504D4E4469616772616D3E0D0A3C2F646566696E6974696F6E733E0D0A, 0); +INSERT INTO `act_ge_bytearray` VALUES ('15', 1, '员工资产报修.eam_asset_employee_repair.png', '13', 0x89504E470D0A1A0A0000000D49484452000002DF00000195080600000026219D53000016EC4944415478DAEDDD7F6C95F5BDC0719261B2654BCC922D8BF12E5E738DD7BF961BC3328D99694C966D89095B266B4F6958D331CA76D53186896E1A8C6CB9B81FD98C264C63541C77CC10C2582F82B4457E88108B0E2B8883091228601D41C2A020E8F73E9F273CCDE92F28785A4ACFEB957CD2C3734E5B7C387FBCFDE67B9E67C2040000186129A54F767676362F5CB870DDFCF9F38FDE7DF7DDA71B1B1B535D5D5D6A6868F8E8873FFCE1A99FFFFCE7BB1F7EF8E145D9FCA7330600001711DD4B972E7D76DEBC79A767CD9A951E7FFCF1B479F3E6D4D5D5957A7A7A5288AFDDDDDDE9D5575F4D599CA71FFFF8C71FFDE4273F7967C68C19D39D41000018862CB29B7EF18B5F9CBCE79E7BF2B03E73E64C1AAEAD5BB7A67BEFBDF74C7373F38E2953A65CE76C0200C020B2769EB87CF9F2353367CE4C2D2D2D1714DDFDAD5AB52A3535359DB00A0E00008384F7DAB56B5FB9EBAEBBD2CE9D3B5325BCF3CE3B290BF913D3A74FFF6F67180000CE8A15EF08EFD8C35D49F1F366CC9871AC542A3538CB000054BDD8E31D5B4D2AB5E23DD80AF8B469D38E64017E83B30D0040D58AAB9A3CF4D043A7628FF7485AB162C589A953A76E72C60100A85ACB962DFBDFB8AAC9071F7C9046DA8F7EF4A343B69F0000509562D53BAEE31D97131C0DAFBFFEFA29ABDF000054A5B873657CC8F2E35C52F0423535351DAAABABFB77671F0080AA12B78C7FF2C927D368FADDEF7EB7358BEF39CE3E00005565FEFCF947E396F1A3E9E5975F7E278BEF16671F0080AA72F7DD779F3E78F0E0A8C6F7A14387BAB3F8DEE7EC030050551A1B1B534F4FCFA8C677FCBE2CBE7B9C7D0000AA4A16C1E95288DFEBEC03005055BEF7BDEF7D34DA2BDF274E9C3864E51B0080AA73D75D779D1AED3DDF070E1CF8BB3DDF0000549D071E7860D7685FEDE485175E78DED54E0000A83ABFFEF5AF9F1CEDEB7CCF9D3B7785EB7C03005075EEBFFFFEFFB8F3CE3B3F1CC53B5CF6D4D7D7BFED0E97000054A5D9B367FFE3D5575F1DAD2D278BB2F0DEE0AC03005095BEFFFDEF4FF9E94F7F7A7A1456BF8FD4D7D7BF562A951A9C750000AA56737373674B4BCB889677EC2F8F55EF9A9A9A89CE380000552BF6603735359DD8B973E78884776767E7F2EC771C2C954A3738DB000054BD868686A9CDCDCDC7BBBBBB2B1ADEFBF7EF7FA9BEBE7EAFED2600005066EAD4A94D3366CC3856A915F058F18EF0AEADADBDD7D90500807EB250AE6B686838FA97BFFCE55F1FE34398477EFBDBDF3E1D5B4DB269745601006008B107BCBEBEBEBDB9B9F9D06BAFBD76E242AEE3BD7AF5EAC559BC77C4872BEDF1060080E147F81D11E18D8D8DDDF3E7CFDFFED24B2FEDEDEAEA3AD8D3D39397F68913270E1D3870E0EF6D6D6DFFF7E0830FAE9C3A75EAEE88EE58ED7655130000B8085954FF5BA9549A9545F5926CF664D3934D3AFB755F362D71CB7877AE0400801110F1ED2C000080F8060000F10D0000886F000010DF000020BE010000F10D0000E21B000010DF000020BE0100407C030000E21B0000C437000020BE0100407C030080F8060000C4370000886F0000407C030080F8060000F10D0000886F000010DF000080F8060000F10D0000E21B000010DF000020BE010000F10D0000E21B0000C437000020BE0100407C030000E21B0000C4370000886F0000407C030080F8060000C43700005CDAD06E89D83ECF7438530000F0F1E37B5236A7CF15DFB5B5B5B73B5300005099005F798EF8DE54535333D159020080CAC4F7A4A1E2BB542A7DCB19020080CA06F8607BBF3BAC7A030040E5E37BC0DE6F7BBD0100608464B1BDCCAA3700008C4E7CDF54B6D7FB1BCE0800008CA062EFB7556F000018F9F89EE40E9700008C6929A589BB77EF5EB279F3E60FDBDBDB536B6BAB19E5696B6B4BEBD7AFFF67360DDE910000E35884F7860D1B527777773A75EA94B944F3DE7BEFA575EBD61DCD42FC0EEF4A0080712A56BC85F79809F053ADADAD3BBC2B0100C6A9D86A227CC7CE64F17DDABB1200609C8A3DC7A2774CC5B70F8D0200547B7CFFEBFD836977C7D3697BDB43F9C4E3382698C5370000158CEF6347BAD2B6171E48AFAFB8A7CFC4B1784E348B6F00002A14DFFBB6FF75407817B37F7B8B6816DF0000542ABE77BCF8F090F11DCF8966F10D004085E27B5BEB8343C6773C279AC5370000E25B7C03007079C5775CDD64A8F88EE744B3F80600A042F1BD6BE36343C6773C279AC5370000158AEFC35D9D69DBEAB903B79C64C7E239D12CBE0100A8507CC7ECD9F2EC80F88E6382597C030050C9F83E7932ED7A79C1C02D27D9B1784E348B6F00002A10DF7107CB9D1B1F1D72CF773CE72E97E21B00808F13DF274FA683BBD6A43756FD6CC8F02E265E13AFB50A2EBE0100B8C0F83EDF6AB75570F10D004085E27B38ABDDE75A0517D1E21B008061C6F7C5867731225A7C030030CCF836E21B0000F12DBE010010DF467C030020BEC5370000E2DB886F0000F16DC4370000E25B7C030020BE8DF80600407C8B6F0000C4B711DF0000E2DB886F0000C4B7F80600407C1BF10D0080F816DF0000886F23BE0100C4B711DF0000886FF10D0080F836E21B0000F12DBE010010DF467C030088EFB134575C71459A3E7DFA057D4FF69F96962C59D2FB78D1A245E21B0000F13DD4BCF6DA6B69F9F2E5E9139FF844FAE52F7F9947F49E3D7BD237BFF9CDFCF8D7BEF6B53473E6CCFCB53D3D3DE92B5FF94A3EF15CBC76DAB469BD8F9F7AEAA97CE2F19B6FBE29BE010010DFE513415DAC5C3736360E38BE72E5CA74E59557F639FECA2BAFA4A54B970E88EF5B6EB925AD5BB7CECA370000E2BBFF1C3E7C38DD7AEBAD7D56BEAFBEFAEA3CACBFFBDDEFE6C7AFBAEAAA3479F2E43EDF17C76EBEF9E6B46FDFBEDE63478E1CC9B79DC4F7886F0000C4F72073ECD8B1FCEB97BEF4A574E38D37E68F0F1C3890AF644750BFF5D65BF9947F4F44F6A73FFDE9347BF6EC7CE5BB7CF57BD6AC59E21B0000F13DD8B4B4B4A4EBAEBB2EFFE0E435D75C934F6767671ED245981F3D7AB4CFF73CF3CC33E21B0000F17DA173EDB5D7A665CB96E5DB4C9A9A9AFAAC7C17DB4A8AAD24FBF7EFCF1FC7D694DB6EBB2D7F7CDF7DF7A5CF7DEE73F9E3D8F3FDC4134FE4DF3B96FF9BC5370080F8BE2413A11C011E2BDF4564C74A771C8F55F03FFCE10FF9E3471E79A4CF07318B89EF8B9573D7F90600407C0F23BEB76DDB967F8D696F6FEFDD6E32D85551FACF73CF3D97AEBFFE7AF10D0080F83ED76CD9B225EDDDBBB7F7CF5BB76E4DBFFAD5AFF22D28719DEF88EA22CAE3CA2883FD8C581DEF7F3514F10D0080F836E21B00407C1BF10D0080F816DF0000886F23BE010010DFE21B0000F16DC4370080F836E21B0000F12DBE010010DF467C030020BEC5370000E2DB886F0000F16DC4370000E25B7C030020BE8DF80600407C8B6F0000C4B711DF0000E2DB886F0000C4B7F80600407C1BF10D0080F816DF0000886F23BE0100C4B711DF0000886FF10D0080F836E21B0000F12DBE010010DF467C03008C63EDEDEDA277EC4C4F16DFA7BD2B0100C6A9F5EBD71FECEEEE16BE6360BABABAFE9CC5F70EEF4A0080716ACD9A3593D7AE5DFBFEBBEFBE7B42005FBA15EF08EFB6B6B6BDD9DCE15D0900308E65C1777B6B6B6B476C79883DC797EBD4D5D55DAE7FF738EF3B84370000978D886F67010000C4370000886F0000407C030080F8060000F10D0000886F000010DF000080F8060000F10D0000E21B000010DF000020BE010000F10D0000E21B0000C437000020BE0100407C030000E21B0000C4370000886F0000407C030080F8060000C4370000886F000010DF000080F8060000F10D0000886F000010DF000020BE010000F10D0000E21B000010DF000020BE0100407C030000E21B0000C437000020BE0100407C030080F8060000C4370000886F0000407C030080F8060000F10D0000886F000010DF000080F8060000F10D0000E21B000010DF000020BE010000F10D00009730B45B22B6CF331DCE1400007CFCF89E94CDE973C5776D6DEDEDCE1400005426C0579E23BE37D5D4D44C74960000A032F13D69A8F82E954ADF72860000A0B2013ED8DEEF0EABDE000050F9F81EB0F7DB5E6F00001821596C2FB3EA0D0000A313DF3795EDF5FE863302000023A8D8FB6DD51B0000463EBE27B9C3250000635E4A69E2EEDDBB976CDEBCF9C3F6F6F6D4DADA7A594EC4F7E5FA776F6B6B4BEBD7AFFF67360DDE910000E35884F7860D1B527777773A75EA94B944F3DE7BEFA575EBD61DCD42FC0EEF4A0080712A56BC85F79809F053ADADAD3BBC2B0100C6A9D86A227CC7CE64F17DDABB1200609C8A3DC7A2774CC5B70F8E0200547B7CFFEBFD836977C7D3697BDB43F9C4E3382698C5370000158CEF6347BAD2B6171E48AFAFB8A7CFC4B1784E348B6F00002A14DFFBB6FF75407817B37F7B8B6816DF0000542ABE77BCF8F090F11DCF8966F10D004085E27B5BEB8343C6773C279AC5370000E25B7C03007079C5775CDD64A8F88EE744B3F80600A042F1BD6BE36343C6773C279AC5370000158AEFC35D9D69DBEAB903B79C64C7E239D12CBE0100A8507CC7ECD9F2EC80F88E6382597C030050C9F83E7932ED7A79C1C02D27D9B1784E348B6F00002A10DF7107CB9D1B1F1D72CF773CE72E97E21B00808F13DF274FA683BBD6A43756FD6CC8F02E265E13AFB50A2EBE0100B8C0F83EDF6AB75570F10D004085E27B38ABDDE75A0517D1E21B008061C6F7C5867731225A7C030030CCF836E21B0000F12DBE010010DF467C030020BEC5370000E2DB886F0000F16DC4370000E25B7C030020BE8DF80600407C8B6F0000C4B711DF0000E2DB886F0000C4B7F80600407C1BF10D0080F816DF0000886F23BE0100C4B711DF0000886FF10D0080F836E21B0000F12DBE010010DF467C030088EF4ACC934F3E9956AC58D1E758F62BD3B265CB2A1AABCB972F4FD3A64DCB271EC7EF78F1C517CFF97DF19ADFFCE637E77DCD9C3973F2C7CF3DF75CEAE9E9E93DBE68D122F10D00C0D889EF88D4EBAFBF3E0FE2ABAFBE3ABDF2CA2BF9B1EF7CE73BBD917CFCF8F174E8D0A174DB6DB7E5C7226A6FBEF9E6545757D71BD5F1F5D9679F4D9FFAD4A706FD1D4B962C396FE0AF5BB7AECFCFBBEAAAABD257BFFAD5FC71CCD2A54BD3B5D75E3BE0E7C4FF40148FE3EF503C8E1817DF00008C89F88E50DDB66D5B7AEAA9A7D2AE5DBBF295E82258CB43B69888F0385EAC94C7E3F8DEF81AC11C51FEC52F7E71D0F8BEE5965B06AC7C6FDCB871C0EBCA8339FE3C6FDEBCDE3F5F71C515E9BEFBEECB1FEFD9B3A7F7E7DC7AEBADF9DF351EBFF5D65BBDDFDBD9D9997F7DE49147C43700009736BE6325390236569723A2236C3FFFF9CFE7C76EB8E186F4A73FFD298FD7FDFBF7F709E278BE781CF11E5FE3B5070E1CC81FEFDBB7AFF7F5EDEDEDF9B1A6A6A63EF11DBF277E47F9DFE7D8B163F9EB8B95EEE2FBE2F1B7BFFDEDFC7B070BFBF295EF2F7CE10B69F5EAD5F9E358258FD5742BDF00005CD2F88E6D24453C3FF3CC3303F6645F73CD35E9CD37DFCC5F13ABE2478F1EED0DE288DD471F7DB4773BC98473AC7C17CFC5E3B7DF7E3BFF99E7DB8E521C2B0FFD952B57A62BAFBC72D0F88E95EF2D5BB6E48F376DDAD47B3CFE8EB69D000070C9E33B2682BA08D52F7FF9CBBDE11D2BE2712C62B9FFCA741C8F95E5E2FB8AD5EE58F98EE723D4FBC771636363EF3697F2801E2ABE638B4AFF95EFD8FF3D79F2E4DED7C59692F8A065BCE689279E1834DCEDF9060060CCC4F750111C570C890F5E0EF5DA62353A22BC88E458F5FEFAD7BF3E606BC884B295EF783C7BF6EC8AC477ACDCC7FF1C4CE8B70DA63CBE8B3DDFE5DB66C4370000973CBE8B95EF62F53B3EDCB875EBD601AFFDEC673F9B6EBCF1C67C2F75F9CA79AC7C0FF5B36325FDF0E1C3F9E39696967CBFF7DEBD7B070DFCD85E3258E8C70729CBB7AC0CB5E73B82BBD882121FCA8C182F2E3F28BE01001893F13DA1DFD5488A55E6B82C616C3589CB0E16971E9C707675BB781CB15DFEF323B4E3F8EF7FFFFBFCCFF181CC86868641AF7832D42A7BFF892D2EC53698D8B35EBC3E26623BBECE9D3B37FF5A5C21457C03003026E23B56A4FB1FEB1FC611BBE55B53CEF533E3F9B87249AC3CC787378B55F2FEBF63D6AC591715DFC5D55A26F4FB9065F1D81D2E01001893F16DC4370000E25B7C030020BEC5370000E2DB886F0000C4B7F80600407C1BF10D0080F816DF0000886FF10D0080F836E21B0000F12DBE010010DF467C030020BEC5370000E25B7C030020BE8DF80600407C8B6F0000C4B711DF0000886FF10D0080F816DF0000886F23BE010010DFE21B0000F16DC4370000E25B7C030020BEC5370000E2DB886F0000C4B7F80600407C1BF10D00C08409EDEDEDA277EC4C4F16DFA7BD2B0100C6A9F5EBD71FECEEEE16BE6360BABABAFE9CC5F70EEF4A0080716ACD9A3593D7AE5DFBFEBBEFBE7B42005FBA15EF08EFB6B6B6BDD9DCE15D0900308E65C1777B6B6B6B476C79883DC797E3D4D5D5A5CBF5EF7EF6BCEF10DE00005C1622BE9D05000010DF000020BE010000F10D0000E21B0000C437000020BE0100407C030000E21B0000C4370000886F0000407C030080F8060000C4370000886F000010DF000080F8060000F10D0000886F000010DF000020BE010000F10D0000E21B000010DF000020BE0100407C030000E21B0000C437000020BE0100407C030080F8060000C4370000886F0000407C030080F8060000F10D0000886F000010DF000080F8060000F10D0000E21B000010DF000020BE010000F10D0000E21B0000C437000020BE0100407C030000E21B00002E6568B7446C9F673A9C290000F8F8F13D299BD3E78AEFDADADADB9D290000A84C80AF3C477C6FAAA9A999E82C01004065E27BD250F15D2A95BEE50C01004065037CB0BDDF1D56BD0100A0F2F13D60EFB7BDDE00003042B2D85E66D51B00004627BE6F2ADBEBFD0D670400004650B1F7DBAA37000054587D7DFD7F65B1FD60A9545A9C7D7D239BE36757BF7BCEFE794936F36255DCD90200800BD4D8D8F8C92CA6EFCC82FB1FC3B8BB65F90730FF967D9D3965CA94CF388B0000701EB1973B9B772E24BA07997DD9D4389B0000308858EDCE82F9E92CBCCF948774763C3DF6D86369E3C68DA9ABAB2B1D3F7E3C859E9E9ED4DDDD9DB66EDD9A162C58909A9A9A068BF03FC6CF75760100E0ACF8F06416CA2F9587F3CC9933D3AA55ABD2071F7C9086E3CC9933A9B5B535FFBE7E01BEC43614000098D0BBE2DD27BC172E5CD8BBC27DA162457CF1E2C50302DCD5510000A87AB1D5A43C945B5A5A5225C42AF8D4A953FB6C4171B60100A85A673F5C79A6D2E15D1EE0FD56C06B9C750000AA4E6C3729BFAA496C351909FDB6A0ECB3FF1B0080AA13D7F12EFF70E5C5EEF11ECE1EF07E1FC29CE3EC03005055CA6FA01357351949FDB69FECF1E14B0000AAC6D95BC6F75EC77BB89713BC587119C21FFCE007E577C2742B7A0000AA4316C00F16211C37D0190D8F3FFE78F9EAF73CFF0A0000548552A9B4B808E1CD9B378F4A7CC79D30CBAFFBED5F010080AA90C5EF1B45081F3C787054E23B6E455F16DF3BFC2B0000502DF1DD5384F0485DE564B0AB9E94C5778F7F050000AA25BE7B43783495FF5EFF0A0000544B7C1FB3F20D0000A3A0B6B6F66FF67C0300C02870B5130000182559FCDEEF3ADF0000300A2EC51D2EA74F9FFE913B5C02005095B208EE286278D5AA55231ADFADADADE5ABDE7B6A6A6A26FA170000A06A944AA5E94510CF9C3973C4AE7A125739696E6EFEB02CBEE738FB00005495C6C6C64FC62A7411C50B172E1C91F85EBC7871F9AAF7BE2953A67CC6D90700A0EA64315C93CDE9228E9F7FFEF98A86F79A356BFADC58277E9FB30E00403507F8D3E5815CA9008FF09E366DDA99B29FFD47671B0080AA161F7E8C302E0FF0D882127BB52F768F77BFAD26F975BD639B8BB30D008000CF02BCFCC63BC58730E32A287199C0E15E4E3056BBFB7DB8320F6FFBBC0100A05F809FDD8272BA3C9EE33AE00B162C481D1D1DF9ADE88BABA2C40A77DC32BEB3B333BF814E16DD1FF58BEE7CAB89156F000018C2D90F61EE1924A42F64F6F9702500000C43AC56D7D6D6DE9905F4AE0B8CEE88F639B6990000C045C8627A5236F7C79EF02CC8FF963DEE391BDAF17547ECE9CE9EFB9FB865BC3B57020000000000000000000000000000000000000000000085FF0726F9FEF5CCE114690000000049454E44AE426082, 1); +INSERT INTO `act_ge_bytearray` VALUES ('18', 1, '员工资产交接.bpmn', '17', 0x3C3F786D6C2076657273696F6E3D22312E302220656E636F64696E673D225554462D38223F3E0D0A3C646566696E6974696F6E7320786D6C6E733D22687474703A2F2F7777772E6F6D672E6F72672F737065632F42504D4E2F32303130303532342F4D4F44454C2220786D6C6E733A7873693D22687474703A2F2F7777772E77332E6F72672F323030312F584D4C536368656D612D696E7374616E63652220786D6C6E733A7873643D22687474703A2F2F7777772E77332E6F72672F323030312F584D4C536368656D612220786D6C6E733A61637469766974693D22687474703A2F2F61637469766974692E6F72672F62706D6E2220786D6C6E733A62706D6E64693D22687474703A2F2F7777772E6F6D672E6F72672F737065632F42504D4E2F32303130303532342F44492220786D6C6E733A6F6D6764633D22687474703A2F2F7777772E6F6D672E6F72672F737065632F44442F32303130303532342F44432220786D6C6E733A6F6D6764693D22687474703A2F2F7777772E6F6D672E6F72672F737065632F44442F32303130303532342F44492220747970654C616E67756167653D22687474703A2F2F7777772E77332E6F72672F323030312F584D4C536368656D61222065787072657373696F6E4C616E67756167653D22687474703A2F2F7777772E77332E6F72672F313939392F585061746822207461726765744E616D6573706163653D22687474703A2F2F7777772E61637469766974692E6F72672F70726F63657373646566223E0D0A20203C70726F636573732069643D2265616D5F61737365745F656D706C6F7965655F68616E646F76657222206E616D653D22E59198E5B7A5E8B584E4BAA7E4BAA4E68EA52220697345786563757461626C653D2274727565223E0D0A202020203C73746172744576656E742069643D227369642D33386161356139372D323537332D343164652D616639342D38386237356464653866346322206E616D653D22E5BC80E5A78B222F3E0D0A202020203C757365725461736B2069643D227369642D65626463326162652D303165622D346430342D613935382D333463353330326535626261222061637469766974693A61737369676E65653D22237B61737369676E65657D22206E616D653D22E7AEA1E79086E59198E5AEA1E689B9222F3E0D0A202020203C656E644576656E742069643D227369642D33663532643231622D313637392D346436382D383161332D64383261303431643766333422206E616D653D22E7BB93E69D9F222F3E0D0A202020203C73657175656E6365466C6F772069643D227369642D63646461393630302D636530662D343536332D616230312D3536393163363535336166382220736F757263655265663D227369642D33386161356139372D323537332D343164652D616639342D38386237356464653866346322207461726765745265663D227369642D35623330666433622D623163612D343930392D386636372D633362353237663461343261222F3E0D0A202020203C73657175656E6365466C6F772069643D227369642D38346336393936662D616266622D346635312D393737642D6233653939373431313038342220736F757263655265663D227369642D65626463326162652D303165622D346430342D613935382D33346335333032653562626122207461726765745265663D227369642D33663532643231622D313637392D346436382D383161332D643832613034316437663334222F3E0D0A202020203C757365725461736B2069643D227369642D35623330666433622D623163612D343930392D386636372D63336235323766346134326122206E616D653D22E8B5B7E88D89222F3E0D0A202020203C73657175656E6365466C6F772069643D227369642D35306434346164612D666338372D346364612D393438392D6138663166653738643566612220736F757263655265663D227369642D35623330666433622D623163612D343930392D386636372D63336235323766346134326122207461726765745265663D227369642D65626463326162652D303165622D346430342D613935382D333463353330326535626261222F3E0D0A20203C2F70726F636573733E0D0A20203C62706D6E64693A42504D4E4469616772616D2069643D2242504D4E4469616772616D5F74657374223E0D0A202020203C62706D6E64693A42504D4E506C616E652062706D6E456C656D656E743D2274657374222069643D2242504D4E506C616E655F74657374223E0D0A2020202020203C62706D6E64693A42504D4E53686170652069643D2273686170652D64643531363464352D386330362D343537302D393466622D346565346233333633656538222062706D6E456C656D656E743D227369642D33386161356139372D323537332D343164652D616639342D383862373564646538663463223E0D0A20202020202020203C6F6D6764633A426F756E647320783D223636302E302220793D222D3231352E30222077696474683D2233302E3022206865696768743D2233302E30222F3E0D0A2020202020203C2F62706D6E64693A42504D4E53686170653E0D0A2020202020203C62706D6E64693A42504D4E53686170652069643D2273686170652D39376136303639362D393930392D343536312D626163612D306539346262353933326435222062706D6E456C656D656E743D227369642D65626463326162652D303165622D346430342D613935382D333463353330326535626261223E0D0A20202020202020203C6F6D6764633A426F756E647320783D223632352E302220793D2231302E343335393336222077696474683D223130302E3022206865696768743D2238302E30222F3E0D0A2020202020203C2F62706D6E64693A42504D4E53686170653E0D0A2020202020203C62706D6E64693A42504D4E53686170652069643D2273686170652D39616566633864642D396566352D343830312D626161302D666339323337373762666334222062706D6E456C656D656E743D227369642D33663532643231622D313637392D346436382D383161332D643832613034316437663334223E0D0A20202020202020203C6F6D6764633A426F756E647320783D223636302E302220793D223135302E30222077696474683D2233302E3022206865696768743D2233302E30222F3E0D0A2020202020203C2F62706D6E64693A42504D4E53686170653E0D0A2020202020203C62706D6E64693A42504D4E456467652069643D22656467652D62666436376533332D383836342D346531392D626262392D363162643562636331363530222062706D6E456C656D656E743D227369642D63646461393630302D636530662D343536332D616230312D353639316336353533616638223E0D0A20202020202020203C6F6D6764693A776179706F696E7420783D223637352E302220793D222D3138352E30222F3E0D0A20202020202020203C6F6D6764693A776179706F696E7420783D223637342E393939392220793D222D3133352E30222F3E0D0A2020202020203C2F62706D6E64693A42504D4E456467653E0D0A2020202020203C62706D6E64693A42504D4E456467652069643D22656467652D62313564303134392D326137382D346564352D393562642D613863326261396338376265222062706D6E456C656D656E743D227369642D38346336393936662D616266622D346635312D393737642D623365393937343131303834223E0D0A20202020202020203C6F6D6764693A776179706F696E7420783D223637352E302220793D2239302E3433353934222F3E0D0A20202020202020203C6F6D6764693A776179706F696E7420783D223637352E302220793D223135302E30222F3E0D0A2020202020203C2F62706D6E64693A42504D4E456467653E0D0A2020202020203C62706D6E64693A42504D4E53686170652069643D2273686170652D38356466613065622D306631322D343562322D386138632D373635376565626665366137222062706D6E456C656D656E743D227369642D35623330666433622D623163612D343930392D386636372D633362353237663461343261223E0D0A20202020202020203C6F6D6764633A426F756E647320783D223632342E39393939342220793D222D3133352E30222077696474683D223130302E3022206865696768743D2238302E30222F3E0D0A2020202020203C2F62706D6E64693A42504D4E53686170653E0D0A2020202020203C62706D6E64693A42504D4E456467652069643D22656467652D33363765346630642D373063362D343133332D623833342D373139663166336666616130222062706D6E456C656D656E743D227369642D35306434346164612D666338372D346364612D393438392D613866316665373864356661223E0D0A20202020202020203C6F6D6764693A776179706F696E7420783D223637342E39393939342220793D222D35352E30222F3E0D0A20202020202020203C6F6D6764693A776179706F696E7420783D223637352E302220793D2231302E343335393336222F3E0D0A2020202020203C2F62706D6E64693A42504D4E456467653E0D0A202020203C2F62706D6E64693A42504D4E506C616E653E0D0A20203C2F62706D6E64693A42504D4E4469616772616D3E0D0A3C2F646566696E6974696F6E733E0D0A, 0); +INSERT INTO `act_ge_bytearray` VALUES ('19', 1, '员工资产交接.eam_asset_employee_handover.png', '17', 0x89504E470D0A1A0A0000000D49484452000002DF00000195080600000026219D53000016EC4944415478DAEDDD7F6C95F5BDC0719261B2654BCC922D8BF12E5E738DD7BF961BC3328D99694C966D89095B266B4F6958D331CA76D53186896E1A8C6CB9B81FD98C264C63541C77CC10C2582F82B4457E88108B0E2B8883091228601D41C2A020E8F73E9F273CCDE92F28785A4ACFEB957CD2C3734E5B7C387FBCFDE67B9E67C2040000186129A54F767676362F5CB870DDFCF9F38FDE7DF7DDA71B1B1B535D5D5D6A6868F8E8873FFCE1A99FFFFCE7BB1F7EF8E145D9FCA7330600001711DD4B972E7D76DEBC79A767CD9A951E7FFCF1B479F3E6D4D5D5957A7A7A5288AFDDDDDDE9D5575F4D599CA71FFFF8C71FFDE4273F7967C68C19D39D41000018862CB29B7EF18B5F9CBCE79E7BF2B03E73E64C1AAEAD5BB7A67BEFBDF74C7373F38E2953A65CE76C0200C020B2769EB87CF9F2353367CE4C2D2D2D1714DDFDAD5AB52A3535359DB00A0E00008384F7DAB56B5FB9EBAEBBD2CE9D3B5325BCF3CE3B290BF913D3A74FFF6F67180000CE8A15EF08EFD8C35D49F1F366CC9871AC542A3538CB000054BDD8E31D5B4D2AB5E23DD80AF8B469D38E64017E83B30D0040D58AAB9A3CF4D043A7628FF7485AB162C589A953A76E72C60100A85ACB962DFBDFB8AAC9071F7C9046DA8F7EF4A343B69F0000509562D53BAEE31D97131C0DAFBFFEFA29ABDF000054A5B873657CC8F2E35C52F0423535351DAAABABFB77671F0080AA12B78C7FF2C927D368FADDEF7EB7358BEF39CE3E00005565FEFCF947E396F1A3E9E5975F7E278BEF16671F0080AA72F7DD779F3E78F0E0A8C6F7A14387BAB3F8DEE7EC030050551A1B1B534F4FCFA8C677FCBE2CBE7B9C7D0000AA4A16C1E95288DFEBEC03005055BEF7BDEF7D34DA2BDF274E9C3864E51B0080AA73D75D779D1AED3DDF070E1CF8BB3DDF0000549D071E7860D7685FEDE485175E78DED54E0000A83ABFFEF5AF9F1CEDEB7CCF9D3B7785EB7C03005075EEBFFFFEFFB8F3CE3B3F1CC53B5CF6D4D7D7BFED0E97000054A5D9B367FFE3D5575F1DAD2D278BB2F0DEE0AC03005095BEFFFDEF4FF9E94F7F7A7A1456BF8FD4D7D7BF562A951A9C750000AA56737373674B4BCB889677EC2F8F55EF9A9A9A89CE380000552BF6603735359DD8B973E78884776767E7F2EC771C2C954A3738DB000054BD868686A9CDCDCDC7BBBBBB2B1ADEFBF7EF7FA9BEBE7EAFED2600005066EAD4A94D3366CC3856A915F058F18EF0AEADADBDD7D90500807EB250AE6B686838FA97BFFCE55F1FE34398477EFBDBDF3E1D5B4DB269745601006008B107BCBEBEBEBDB9B9F9D06BAFBD76E242AEE3BD7AF5EAC559BC77C4872BEDF1060080E147F81D11E18D8D8DDDF3E7CFDFFED24B2FEDEDEAEA3AD8D3D39397F68913270E1D3870E0EF6D6D6DFFF7E0830FAE9C3A75EAEE88EE58ED7655130000B8085954FF5BA9549A9545F5926CF664D3934D3AFB755F362D71CB7877AE0400801110F1ED2C000080F8060000F10D0000886F000010DF000020BE010000F10D0000E21B000010DF000020BE0100407C030000E21B0000C437000020BE0100407C030080F8060000C4370000886F0000407C030080F8060000F10D0000886F000010DF000080F8060000F10D0000E21B000010DF000020BE010000F10D0000E21B0000C437000020BE0100407C030000E21B0000C4370000886F0000407C030080F8060000C43700005CDAD06E89D83ECF7438530000F0F1E37B5236A7CF15DFB5B5B5B73B5300005099005F798EF8DE54535333D159020080CAC4F7A4A1E2BB542A7DCB19020080CA06F8607BBF3BAC7A030040E5E37BC0DE6F7BBD0100608464B1BDCCAA3700008C4E7CDF54B6D7FB1BCE0800008CA062EFB7556F000018F9F89EE40E9700008C6929A589BB77EF5EB279F3E60FDBDBDB536B6BAB19E5696B6B4BEBD7AFFF67360DDE910000E35884F7860D1B527777773A75EA94B944F3DE7BEFA575EBD61DCD42FC0EEF4A0080712A56BC85F79809F053ADADAD3BBC2B0100C6A9D86A227CC7CE64F17DDABB1200609C8A3DC7A2774CC5B70F8D0200547B7CFFEBFD836977C7D3697BDB43F9C4E3382698C5370000158CEF6347BAD2B6171E48AFAFB8A7CFC4B1784E348B6F00002A14DFFBB6FF75407817B37F7B8B6816DF0000542ABE77BCF8F090F11DCF8966F10D004085E27B5BEB8343C6773C279AC5370000E25B7C03007079C5775CDD64A8F88EE744B3F80600A042F1BD6BE36343C6773C279AC5370000158AEFC35D9D69DBEAB903B79C64C7E239D12CBE0100A8507CC7ECD9F2EC80F88E6382597C030050C9F83E7932ED7A79C1C02D27D9B1784E348B6F00002A10DF7107CB9D1B1F1D72CF773CE72E97E21B00808F13DF274FA683BBD6A43756FD6CC8F02E265E13AFB50A2EBE0100B8C0F83EDF6AB75570F10D004085E27B38ABDDE75A0517D1E21B008061C6F7C5867731225A7C030030CCF836E21B0000F12DBE010010DF467C030020BEC5370000E2DB886F0000F16DC4370000E25B7C030020BE8DF80600407C8B6F0000C4B711DF0000E2DB886F0000C4B7F80600407C1BF10D0080F816DF0000886F23BE0100C4B711DF0000886FF10D0080F836E21B0000F12DBE010010DF467C030088EFB134575C71459A3E7DFA057D4FF69F96962C59D2FB78D1A245E21B0000F13DD4BCF6DA6B69F9F2E5E9139FF844FAE52F7F9947F49E3D7BD237BFF9CDFCF8D7BEF6B53473E6CCFCB53D3D3DE92B5FF94A3EF15CBC76DAB469BD8F9F7AEAA97CE2F19B6FBE29BE010010DFE513415DAC5C3736360E38BE72E5CA74E59557F639FECA2BAFA4A54B970E88EF5B6EB925AD5BB7CECA370000E2BBFF1C3E7C38DD7AEBAD7D56BEAFBEFAEA3CACBFFBDDEFE6C7AFBAEAAA3479F2E43EDF17C76EBEF9E6B46FDFBEDE63478E1CC9B79DC4F7886F0000C4F72073ECD8B1FCEB97BEF4A574E38D37E68F0F1C3890AF644750BFF5D65BF9947F4F44F6A73FFDE9347BF6EC7CE5BB7CF57BD6AC59E21B0000F13DD8B4B4B4A4EBAEBB2EFFE0E435D75C934F6767671ED245981F3D7AB4CFF73CF3CC33E21B0000F17DA173EDB5D7A665CB96E5DB4C9A9A9AFAAC7C17DB4A8AAD24FBF7EFCF1FC7D694DB6EBB2D7F7CDF7DF7A5CF7DEE73F9E3D8F3FDC4134FE4DF3B96FF9BC5370080F8BE2413A11C011E2BDF4564C74A771C8F55F03FFCE10FF9E3471E79A4CF07318B89EF8B9573D7F90600407C0F23BEB76DDB967F8D696F6FEFDD6E32D85551FACF73CF3D97AEBFFE7AF10D0080F83ED76CD9B225EDDDBBB7F7CF5BB76E4DBFFAD5AFF22D28719DEF88EA22CAE3CA2883FD8C581DEF7F3514F10D0080F836E21B00407C1BF10D0080F816DF0000886F23BE010010DFE21B0000F16DC4370080F836E21B0000F12DBE010010DF467C030020BEC5370000E2DB886F0000F16DC4370000E25B7C030020BE8DF80600407C8B6F0000C4B711DF0000E2DB886F0000C4B7F80600407C1BF10D0080F816DF0000886F23BE0100C4B711DF0000886FF10D0080F836E21B0000F12DBE010010DF467C03008C63EDEDEDA277EC4C4F16DFA7BD2B0100C6A9F5EBD71FECEEEE16BE6360BABABAFE9CC5F70EEF4A0080716ACD9A3593D7AE5DFBFEBBEFBE7B42005FBA15EF08EFB6B6B6BDD9DCE15D0900308E65C1777B6B6B6B476C79883DC797EBD4D5D55DAE7FF738EF3B84370000978D886F67010000C4370000886F0000407C030080F8060000F10D0000886F000010DF000080F8060000F10D0000E21B000010DF000020BE010000F10D0000E21B0000C437000020BE0100407C030000E21B0000C4370000886F0000407C030080F8060000C4370000886F000010DF000080F8060000F10D0000886F000010DF000020BE010000F10D0000E21B000010DF000020BE0100407C030000E21B0000C437000020BE0100407C030080F8060000C4370000886F0000407C030080F8060000F10D0000886F000010DF000080F8060000F10D0000E21B000010DF000020BE010000F10D00009730B45B22B6CF331DCE1400007CFCF89E94CDE973C5776D6DEDEDCE1400005426C0579E23BE37D5D4D44C74960000A032F13D69A8F82E954ADF72860000A0B2013ED8DEEF0EABDE000050F9F81EB0F7DB5E6F00001821596C2FB3EA0D0000A313DF3795EDF5FE863302000023A8D8FB6DD51B0000463EBE27B9C3250000635E4A69E2EEDDBB976CDEBCF9C3F6F6F6D4DADA7A594EC4F7E5FA776F6B6B4BEBD7AFFF67360DDE910000E35884F7860D1B527777773A75EA94B944F3DE7BEFA575EBD61DCD42FC0EEF4A0080712A56BC85F79809F053ADADAD3BBC2B0100C6A9D86A227CC7CE64F17DDABB1200609C8A3DC7A2774CC5B70F8E0200547B7CFFEBFD836977C7D3697BDB43F9C4E3382698C5370000158CEF6347BAD2B6171E48AFAFB8A7CFC4B1784E348B6F00002A14DFFBB6FF75407817B37F7B8B6816DF0000542ABE77BCF8F090F11DCF8966F10D004085E27B5BEB8343C6773C279AC5370000E25B7C03007079C5775CDD64A8F88EE744B3F80600A042F1BD6BE36343C6773C279AC5370000158AEFC35D9D69DBEAB903B79C64C7E239D12CBE0100A8507CC7ECD9F2EC80F88E6382597C030050C9F83E7932ED7A79C1C02D27D9B1784E348B6F00002A10DF7107CB9D1B1F1D72CF773CE72E97E21B00808F13DF274FA683BBD6A43756FD6CC8F02E265E13AFB50A2EBE0100B8C0F83EDF6AB75570F10D004085E27B38ABDDE75A0517D1E21B008061C6F7C5867731225A7C030030CCF836E21B0000F12DBE010010DF467C030020BEC5370000E2DB886F0000F16DC4370000E25B7C030020BE8DF80600407C8B6F0000C4B711DF0000E2DB886F0000C4B7F80600407C1BF10D0080F816DF0000886F23BE0100C4B711DF0000886FF10D0080F836E21B0000F12DBE010010DF467C030088EF4ACC934F3E9956AC58D1E758F62BD3B265CB2A1AABCB972F4FD3A64DCB271EC7EF78F1C517CFF97DF19ADFFCE637E77DCD9C3973F2C7CF3DF75CEAE9E9E93DBE68D122F10D00C0D889EF88D4EBAFBF3E0FE2ABAFBE3ABDF2CA2BF9B1EF7CE73BBD917CFCF8F174E8D0A174DB6DB7E5C7226A6FBEF9E6545757D71BD5F1F5D9679F4D9FFAD4A706FD1D4B962C396FE0AF5BB7AECFCFBBEAAAABD257BFFAD5FC71CCD2A54BD3B5D75E3BE0E7C4FF40148FE3EF503C8E1817DF00008C89F88E50DDB66D5B7AEAA9A7D2AE5DBBF295E82258CB43B69888F0385EAC94C7E3F8DEF81AC11C51FEC52F7E71D0F8BEE5965B06AC7C6FDCB871C0EBCA8339FE3C6FDEBCDE3F5F71C515E9BEFBEECB1FEFD9B3A7F7E7DC7AEBADF9DF351EBFF5D65BBDDFDBD9D9997F7DE49147C43700009736BE6325390236569723A2236C3FFFF9CFE7C76EB8E186F4A73FFD298FD7FDFBF7F709E278BE781CF11E5FE3B5070E1CC81FEFDBB7AFF7F5EDEDEDF9B1A6A6A63EF11DBF277E47F9DFE7D8B163F9EB8B95EEE2FBE2F1B7BFFDEDFC7B070BFBF295EF2F7CE10B69F5EAD5F9E358258FD5742BDF00005CD2F88E6D24453C3FF3CC3303F6645F73CD35E9CD37DFCC5F13ABE2478F1EED0DE288DD471F7DB4773BC98473AC7C17CFC5E3B7DF7E3BFF99E7DB8E521C2B0FFD952B57A62BAFBC72D0F88E95EF2D5BB6E48F376DDAD47B3CFE8EB69D000070C9E33B2682BA08D52F7FF9CBBDE11D2BE2712C62B9FFCA741C8F95E5E2FB8AD5EE58F98EE723D4FBC771636363EF3697F2801E2ABE638B4AFF95EFD8FF3D79F2E4DED7C59692F8A065BCE689279E1834DCEDF9060060CCC4F750111C570C890F5E0EF5DA62353A22BC88E458F5FEFAD7BF3E606BC884B295EF783C7BF6EC8AC477ACDCC7FF1C4CE8B70DA63CBE8B3DDFE5DB66C4370000973CBE8B95EF62F53B3EDCB875EBD601AFFDEC673F9B6EBCF1C67C2F75F9CA79AC7C0FF5B36325FDF0E1C3F9E39696967CBFF7DEBD7B070DFCD85E3258E8C70729CBB7AC0CB5E73B82BBD882121FCA8C182F2E3F28BE01001893F13DA1DFD5488A55E6B82C616C3589CB0E16971E9C707675BB781CB15DFEF323B4E3F8EF7FFFFBFCCFF181CC86868641AF7832D42A7BFF892D2EC53698D8B35EBC3E26623BBECE9D3B37FF5A5C21457C03003026E23B56A4FB1FEB1FC611BBE55B53CEF533E3F9B87249AC3CC787378B55F2FEBF63D6AC591715DFC5D55A26F4FB9065F1D81D2E01001893F16DC4370000E25B7C030020BEC5370000E2DB886F0000C4B7F80600407C1BF10D0080F816DF0000886FF10D0080F836E21B0000F12DBE010010DF467C030020BEC5370000E25B7C030020BE8DF80600407C8B6F0000C4B711DF0000886FF10D0080F816DF0000886F23BE010010DFE21B0000F16DC4370000E25B7C030020BEC5370000E2DB886F0000C4B7F80600407C1BF10D00C08409EDEDEDA277EC4C4F16DFA7BD2B0100C6A9F5EBD71FECEEEE16BE6360BABABAFE9CC5F70EEF4A0080716ACD9A3593D7AE5DFBFEBBEFBE7B42005FBA15EF08EFB6B6B6BDD9DCE15D0900308E65C1777B6B6B6B476C79883DC797E3D4D5D5A5CBF5EF7EF6BCEF10DE00005C1622BE9D05000010DF000020BE010000F10D0000E21B0000C437000020BE0100407C030000E21B0000C4370000886F0000407C030080F8060000C4370000886F000010DF000080F8060000F10D0000886F000010DF000020BE010000F10D0000E21B000010DF000020BE0100407C030000E21B0000C437000020BE0100407C030080F8060000C4370000886F0000407C030080F8060000F10D0000886F000010DF000080F8060000F10D0000E21B000010DF000020BE010000F10D0000E21B0000C437000020BE0100407C030000E21B00002E6568B7446C9F673A9C290000F8F8F13D299BD3E78AEFDADADADB9D290000A84C80AF3C477C6FAAA9A999E82C01004065E27BD250F15D2A95BEE50C01004065037CB0BDDF1D56BD0100A0F2F13D60EFB7BDDE00003042B2D85E66D51B00004627BE6F2ADBEBFD0D670400004650B1F7DBAA37000054587D7DFD7F65B1FD60A9545A9C7D7D239BE36757BF7BCEFE794936F36255DCD90200800BD4D8D8F8C92CA6EFCC82FB1FC3B8BB65F90730FF967D9D3965CA94CF388B0000701EB1973B9B772E24BA07997DD9D4389B0000308858EDCE82F9E92CBCCF948774763C3DF6D86369E3C68DA9ABAB2B1D3F7E3C859E9E9ED4DDDD9DB66EDD9A162C58909A9A9A068BF03FC6CF75760100E0ACF8F06416CA2F9587F3CC9933D3AA55ABD2071F7C9086E3CC9933A9B5B535FFBE7E01BEC43614000098D0BBE2DD27BC172E5CD8BBC27DA162457CF1E2C50302DCD5510000A87AB1D5A43C945B5A5A5225C42AF8D4A953FB6C4171B60100A85A673F5C79A6D2E15D1EE0FD56C06B9C750000AA4E6C3729BFAA496C351909FDB6A0ECB3FF1B0080AA13D7F12EFF70E5C5EEF11ECE1EF07E1FC29CE3EC03005055CA6FA01357351949FDB69FECF1E14B0000AAC6D95BC6F75EC77BB89713BC587119C21FFCE007E577C2742B7A0000AA4316C00F16211C37D0190D8F3FFE78F9EAF73CFF0A0000548552A9B4B808E1CD9B378F4A7CC79D30CBAFFBED5F010080AA90C5EF1B45081F3C787054E23B6E455F16DF3BFC2B0000502DF1DD5384F0485DE564B0AB9E94C5778F7F050000AA25BE7B43783495FF5EFF0A0000544B7C1FB3F20D0000A3A0B6B6F66FF67C0300C02870B5130000182559FCDEEF3ADF0000300A2EC51D2EA74F9FFE913B5C02005095B208EE286278D5AA55231ADFADADADE5ABDE7B6A6A6A26FA170000A06A944AA5E94510CF9C3973C4AE7A125739696E6EFEB02CBEE738FB00005495C6C6C64FC62A7411C50B172E1C91F85EBC7871F9AAF7BE2953A67CC6D90700A0EA64315C93CDE9228E9F7FFEF98A86F79A356BFADC58277E9FB30E00403507F8D3E5815CA9008FF09E366DDA99B29FFD47671B0080AA161F7E8C302E0FF0D882127BB52F768F77BFAD26F975BD639B8BB30D008000CF02BCFCC63BC58730E32A287199C0E15E4E3056BBFB7DB8320F6FFBBC0100A05F809FDD8272BA3C9EE33AE00B162C481D1D1DF9ADE88BABA2C40A77DC32BEB3B333BF814E16DD1FF58BEE7CAB89156F000018C2D90F61EE1924A42F64F6F9702500000C43AC56D7D6D6DE9905F4AE0B8CEE88F639B6990000C045C8627A5236F7C79EF02CC8FF963DEE391BDAF17547ECE9CE9EFB9FB865BC3B57020000000000000000000000000000000000000000000085FF0726F9FEF5CCE114690000000049454E44AE426082, 1); +INSERT INTO `act_ge_bytearray` VALUES ('2', 1, '设备报修申请.bpmn', '1', 0x3C3F786D6C2076657273696F6E3D22312E302220656E636F64696E673D225554462D38223F3E0D0A3C646566696E6974696F6E7320786D6C6E733D22687474703A2F2F7777772E6F6D672E6F72672F737065632F42504D4E2F32303130303532342F4D4F44454C2220786D6C6E733A7873693D22687474703A2F2F7777772E77332E6F72672F323030312F584D4C536368656D612D696E7374616E63652220786D6C6E733A7873643D22687474703A2F2F7777772E77332E6F72672F323030312F584D4C536368656D612220786D6C6E733A61637469766974693D22687474703A2F2F61637469766974692E6F72672F62706D6E2220786D6C6E733A62706D6E64693D22687474703A2F2F7777772E6F6D672E6F72672F737065632F42504D4E2F32303130303532342F44492220786D6C6E733A6F6D6764633D22687474703A2F2F7777772E6F6D672E6F72672F737065632F44442F32303130303532342F44432220786D6C6E733A6F6D6764693D22687474703A2F2F7777772E6F6D672E6F72672F737065632F44442F32303130303532342F44492220747970654C616E67756167653D22687474703A2F2F7777772E77332E6F72672F323030312F584D4C536368656D61222065787072657373696F6E4C616E67756167653D22687474703A2F2F7777772E77332E6F72672F313939392F585061746822207461726765744E616D6573706163653D22687474703A2F2F7777772E61637469766974692E6F72672F70726F63657373646566223E0D0A20203C70726F636573732069643D2265616D5F61737365745F65717569706D656E745F72657061697222206E616D653D22E8AEBEE5A487E68AA5E4BFAEE794B3E8AFB72220697345786563757461626C653D2274727565223E0D0A202020203C73746172744576656E742069643D227369642D33386161356139372D323537332D343164652D616639342D38386237356464653866346322206E616D653D22E5BC80E5A78B222F3E0D0A202020203C757365725461736B2069643D227369642D65626463326162652D303165622D346430342D613935382D333463353330326535626261222061637469766974693A61737369676E65653D22237B61737369676E65657D22206E616D653D22E7AEA1E79086E59198E5AEA1E689B9222F3E0D0A202020203C656E644576656E742069643D227369642D33663532643231622D313637392D346436382D383161332D64383261303431643766333422206E616D653D22E7BB93E69D9F222F3E0D0A202020203C73657175656E6365466C6F772069643D227369642D63646461393630302D636530662D343536332D616230312D3536393163363535336166382220736F757263655265663D227369642D33386161356139372D323537332D343164652D616639342D38386237356464653866346322207461726765745265663D227369642D35623330666433622D623163612D343930392D386636372D633362353237663461343261222F3E0D0A202020203C73657175656E6365466C6F772069643D227369642D38346336393936662D616266622D346635312D393737642D6233653939373431313038342220736F757263655265663D227369642D65626463326162652D303165622D346430342D613935382D33346335333032653562626122207461726765745265663D227369642D33663532643231622D313637392D346436382D383161332D643832613034316437663334222F3E0D0A202020203C757365725461736B2069643D227369642D35623330666433622D623163612D343930392D386636372D63336235323766346134326122206E616D653D22E8B5B7E88D89222F3E0D0A202020203C73657175656E6365466C6F772069643D227369642D35306434346164612D666338372D346364612D393438392D6138663166653738643566612220736F757263655265663D227369642D35623330666433622D623163612D343930392D386636372D63336235323766346134326122207461726765745265663D227369642D65626463326162652D303165622D346430342D613935382D333463353330326535626261222F3E0D0A20203C2F70726F636573733E0D0A20203C62706D6E64693A42504D4E4469616772616D2069643D2242504D4E4469616772616D5F74657374223E0D0A202020203C62706D6E64693A42504D4E506C616E652062706D6E456C656D656E743D2274657374222069643D2242504D4E506C616E655F74657374223E0D0A2020202020203C62706D6E64693A42504D4E53686170652069643D2273686170652D64643531363464352D386330362D343537302D393466622D346565346233333633656538222062706D6E456C656D656E743D227369642D33386161356139372D323537332D343164652D616639342D383862373564646538663463223E0D0A20202020202020203C6F6D6764633A426F756E647320783D223636302E302220793D222D3231352E30222077696474683D2233302E3022206865696768743D2233302E30222F3E0D0A2020202020203C2F62706D6E64693A42504D4E53686170653E0D0A2020202020203C62706D6E64693A42504D4E53686170652069643D2273686170652D39376136303639362D393930392D343536312D626163612D306539346262353933326435222062706D6E456C656D656E743D227369642D65626463326162652D303165622D346430342D613935382D333463353330326535626261223E0D0A20202020202020203C6F6D6764633A426F756E647320783D223632352E302220793D2231302E343335393336222077696474683D223130302E3022206865696768743D2238302E30222F3E0D0A2020202020203C2F62706D6E64693A42504D4E53686170653E0D0A2020202020203C62706D6E64693A42504D4E53686170652069643D2273686170652D39616566633864642D396566352D343830312D626161302D666339323337373762666334222062706D6E456C656D656E743D227369642D33663532643231622D313637392D346436382D383161332D643832613034316437663334223E0D0A20202020202020203C6F6D6764633A426F756E647320783D223636302E302220793D223135302E30222077696474683D2233302E3022206865696768743D2233302E30222F3E0D0A2020202020203C2F62706D6E64693A42504D4E53686170653E0D0A2020202020203C62706D6E64693A42504D4E456467652069643D22656467652D62666436376533332D383836342D346531392D626262392D363162643562636331363530222062706D6E456C656D656E743D227369642D63646461393630302D636530662D343536332D616230312D353639316336353533616638223E0D0A20202020202020203C6F6D6764693A776179706F696E7420783D223637352E302220793D222D3138352E30222F3E0D0A20202020202020203C6F6D6764693A776179706F696E7420783D223637342E393939392220793D222D3133352E30222F3E0D0A2020202020203C2F62706D6E64693A42504D4E456467653E0D0A2020202020203C62706D6E64693A42504D4E456467652069643D22656467652D62313564303134392D326137382D346564352D393562642D613863326261396338376265222062706D6E456C656D656E743D227369642D38346336393936662D616266622D346635312D393737642D623365393937343131303834223E0D0A20202020202020203C6F6D6764693A776179706F696E7420783D223637352E302220793D2239302E3433353934222F3E0D0A20202020202020203C6F6D6764693A776179706F696E7420783D223637352E302220793D223135302E30222F3E0D0A2020202020203C2F62706D6E64693A42504D4E456467653E0D0A2020202020203C62706D6E64693A42504D4E53686170652069643D2273686170652D38356466613065622D306631322D343562322D386138632D373635376565626665366137222062706D6E456C656D656E743D227369642D35623330666433622D623163612D343930392D386636372D633362353237663461343261223E0D0A20202020202020203C6F6D6764633A426F756E647320783D223632342E39393939342220793D222D3133352E30222077696474683D223130302E3022206865696768743D2238302E30222F3E0D0A2020202020203C2F62706D6E64693A42504D4E53686170653E0D0A2020202020203C62706D6E64693A42504D4E456467652069643D22656467652D33363765346630642D373063362D343133332D623833342D373139663166336666616130222062706D6E456C656D656E743D227369642D35306434346164612D666338372D346364612D393438392D613866316665373864356661223E0D0A20202020202020203C6F6D6764693A776179706F696E7420783D223637342E39393939342220793D222D35352E30222F3E0D0A20202020202020203C6F6D6764693A776179706F696E7420783D223637352E302220793D2231302E343335393336222F3E0D0A2020202020203C2F62706D6E64693A42504D4E456467653E0D0A202020203C2F62706D6E64693A42504D4E506C616E653E0D0A20203C2F62706D6E64693A42504D4E4469616772616D3E0D0A3C2F646566696E6974696F6E733E0D0A, 0); +INSERT INTO `act_ge_bytearray` VALUES ('22', 1, '员工资产申请.bpmn', '21', 0x3C3F786D6C2076657273696F6E3D22312E302220656E636F64696E673D225554462D38223F3E0D0A3C646566696E6974696F6E7320786D6C6E733D22687474703A2F2F7777772E6F6D672E6F72672F737065632F42504D4E2F32303130303532342F4D4F44454C2220786D6C6E733A7873693D22687474703A2F2F7777772E77332E6F72672F323030312F584D4C536368656D612D696E7374616E63652220786D6C6E733A7873643D22687474703A2F2F7777772E77332E6F72672F323030312F584D4C536368656D612220786D6C6E733A61637469766974693D22687474703A2F2F61637469766974692E6F72672F62706D6E2220786D6C6E733A62706D6E64693D22687474703A2F2F7777772E6F6D672E6F72672F737065632F42504D4E2F32303130303532342F44492220786D6C6E733A6F6D6764633D22687474703A2F2F7777772E6F6D672E6F72672F737065632F44442F32303130303532342F44432220786D6C6E733A6F6D6764693D22687474703A2F2F7777772E6F6D672E6F72672F737065632F44442F32303130303532342F44492220747970654C616E67756167653D22687474703A2F2F7777772E77332E6F72672F323030312F584D4C536368656D61222065787072657373696F6E4C616E67756167653D22687474703A2F2F7777772E77332E6F72672F313939392F585061746822207461726765744E616D6573706163653D22687474703A2F2F7777772E61637469766974692E6F72672F70726F63657373646566223E0D0A20203C70726F636573732069643D2265616D5F61737365745F656D706C6F7965655F6170706C7922206E616D653D22E59198E5B7A5E8B584E4BAA7E794B3E8AFB72220697345786563757461626C653D2274727565223E0D0A202020203C73746172744576656E742069643D227369642D33386161356139372D323537332D343164652D616639342D38386237356464653866346322206E616D653D22E5BC80E5A78B222F3E0D0A202020203C757365725461736B2069643D227369642D65626463326162652D303165622D346430342D613935382D333463353330326535626261222061637469766974693A61737369676E65653D22237B61737369676E65657D22206E616D653D22E7AEA1E79086E59198E5AEA1E689B9222F3E0D0A202020203C656E644576656E742069643D227369642D33663532643231622D313637392D346436382D383161332D64383261303431643766333422206E616D653D22E7BB93E69D9F222F3E0D0A202020203C73657175656E6365466C6F772069643D227369642D63646461393630302D636530662D343536332D616230312D3536393163363535336166382220736F757263655265663D227369642D33386161356139372D323537332D343164652D616639342D38386237356464653866346322207461726765745265663D227369642D35623330666433622D623163612D343930392D386636372D633362353237663461343261222F3E0D0A202020203C73657175656E6365466C6F772069643D227369642D38346336393936662D616266622D346635312D393737642D6233653939373431313038342220736F757263655265663D227369642D65626463326162652D303165622D346430342D613935382D33346335333032653562626122207461726765745265663D227369642D33663532643231622D313637392D346436382D383161332D643832613034316437663334222F3E0D0A202020203C757365725461736B2069643D227369642D35623330666433622D623163612D343930392D386636372D63336235323766346134326122206E616D653D22E8B5B7E88D89222F3E0D0A202020203C73657175656E6365466C6F772069643D227369642D35306434346164612D666338372D346364612D393438392D6138663166653738643566612220736F757263655265663D227369642D35623330666433622D623163612D343930392D386636372D63336235323766346134326122207461726765745265663D227369642D65626463326162652D303165622D346430342D613935382D333463353330326535626261222F3E0D0A20203C2F70726F636573733E0D0A20203C62706D6E64693A42504D4E4469616772616D2069643D2242504D4E4469616772616D5F74657374223E0D0A202020203C62706D6E64693A42504D4E506C616E652062706D6E456C656D656E743D2274657374222069643D2242504D4E506C616E655F74657374223E0D0A2020202020203C62706D6E64693A42504D4E53686170652069643D2273686170652D64643531363464352D386330362D343537302D393466622D346565346233333633656538222062706D6E456C656D656E743D227369642D33386161356139372D323537332D343164652D616639342D383862373564646538663463223E0D0A20202020202020203C6F6D6764633A426F756E647320783D223636302E302220793D222D3231352E30222077696474683D2233302E3022206865696768743D2233302E30222F3E0D0A2020202020203C2F62706D6E64693A42504D4E53686170653E0D0A2020202020203C62706D6E64693A42504D4E53686170652069643D2273686170652D39376136303639362D393930392D343536312D626163612D306539346262353933326435222062706D6E456C656D656E743D227369642D65626463326162652D303165622D346430342D613935382D333463353330326535626261223E0D0A20202020202020203C6F6D6764633A426F756E647320783D223632352E302220793D2231302E343335393336222077696474683D223130302E3022206865696768743D2238302E30222F3E0D0A2020202020203C2F62706D6E64693A42504D4E53686170653E0D0A2020202020203C62706D6E64693A42504D4E53686170652069643D2273686170652D39616566633864642D396566352D343830312D626161302D666339323337373762666334222062706D6E456C656D656E743D227369642D33663532643231622D313637392D346436382D383161332D643832613034316437663334223E0D0A20202020202020203C6F6D6764633A426F756E647320783D223636302E302220793D223135302E30222077696474683D2233302E3022206865696768743D2233302E30222F3E0D0A2020202020203C2F62706D6E64693A42504D4E53686170653E0D0A2020202020203C62706D6E64693A42504D4E456467652069643D22656467652D62666436376533332D383836342D346531392D626262392D363162643562636331363530222062706D6E456C656D656E743D227369642D63646461393630302D636530662D343536332D616230312D353639316336353533616638223E0D0A20202020202020203C6F6D6764693A776179706F696E7420783D223637352E302220793D222D3138352E30222F3E0D0A20202020202020203C6F6D6764693A776179706F696E7420783D223637342E393939392220793D222D3133352E30222F3E0D0A2020202020203C2F62706D6E64693A42504D4E456467653E0D0A2020202020203C62706D6E64693A42504D4E456467652069643D22656467652D62313564303134392D326137382D346564352D393562642D613863326261396338376265222062706D6E456C656D656E743D227369642D38346336393936662D616266622D346635312D393737642D623365393937343131303834223E0D0A20202020202020203C6F6D6764693A776179706F696E7420783D223637352E302220793D2239302E3433353934222F3E0D0A20202020202020203C6F6D6764693A776179706F696E7420783D223637352E302220793D223135302E30222F3E0D0A2020202020203C2F62706D6E64693A42504D4E456467653E0D0A2020202020203C62706D6E64693A42504D4E53686170652069643D2273686170652D38356466613065622D306631322D343562322D386138632D373635376565626665366137222062706D6E456C656D656E743D227369642D35623330666433622D623163612D343930392D386636372D633362353237663461343261223E0D0A20202020202020203C6F6D6764633A426F756E647320783D223632342E39393939342220793D222D3133352E30222077696474683D223130302E3022206865696768743D2238302E30222F3E0D0A2020202020203C2F62706D6E64693A42504D4E53686170653E0D0A2020202020203C62706D6E64693A42504D4E456467652069643D22656467652D33363765346630642D373063362D343133332D623833342D373139663166336666616130222062706D6E456C656D656E743D227369642D35306434346164612D666338372D346364612D393438392D613866316665373864356661223E0D0A20202020202020203C6F6D6764693A776179706F696E7420783D223637342E39393939342220793D222D35352E30222F3E0D0A20202020202020203C6F6D6764693A776179706F696E7420783D223637352E302220793D2231302E343335393336222F3E0D0A2020202020203C2F62706D6E64693A42504D4E456467653E0D0A202020203C2F62706D6E64693A42504D4E506C616E653E0D0A20203C2F62706D6E64693A42504D4E4469616772616D3E0D0A3C2F646566696E6974696F6E733E0D0A, 0); +INSERT INTO `act_ge_bytearray` VALUES ('23', 1, '员工资产申请.eam_asset_employee_apply.png', '21', 0x89504E470D0A1A0A0000000D49484452000002DF00000195080600000026219D53000016EC4944415478DAEDDD7F6C95F5BDC0719261B2654BCC922D8BF12E5E738DD7BF961BC3328D99694C966D89095B266B4F6958D331CA76D53186896E1A8C6CB9B81FD98C264C63541C77CC10C2582F82B4457E88108B0E2B8883091228601D41C2A020E8F73E9F273CCDE92F28785A4ACFEB957CD2C3734E5B7C387FBCFDE67B9E67C2040000186129A54F767676362F5CB870DDFCF9F38FDE7DF7DDA71B1B1B535D5D5D6A6868F8E8873FFCE1A99FFFFCE7BB1F7EF8E145D9FCA7330600001711DD4B972E7D76DEBC79A767CD9A951E7FFCF1B479F3E6D4D5D5957A7A7A5288AFDDDDDDE9D5575F4D599CA71FFFF8C71FFDE4273F7967C68C19D39D41000018862CB29B7EF18B5F9CBCE79E7BF2B03E73E64C1AAEAD5BB7A67BEFBDF74C7373F38E2953A65CE76C0200C020B2769EB87CF9F2353367CE4C2D2D2D1714DDFDAD5AB52A3535359DB00A0E00008384F7DAB56B5FB9EBAEBBD2CE9D3B5325BCF3CE3B290BF913D3A74FFF6F67180000CE8A15EF08EFD8C35D49F1F366CC9871AC542A3538CB000054BDD8E31D5B4D2AB5E23DD80AF8B469D38E64017E83B30D0040D58AAB9A3CF4D043A7628FF7485AB162C589A953A76E72C60100A85ACB962DFBDFB8AAC9071F7C9046DA8F7EF4A343B69F0000509562D53BAEE31D97131C0DAFBFFEFA29ABDF000054A5B873657CC8F2E35C52F0423535351DAAABABFB77671F0080AA12B78C7FF2C927D368FADDEF7EB7358BEF39CE3E00005565FEFCF947E396F1A3E9E5975F7E278BEF16671F0080AA72F7DD779F3E78F0E0A8C6F7A14387BAB3F8DEE7EC030050551A1B1B534F4FCFA8C677FCBE2CBE7B9C7D0000AA4A16C1E95288DFEBEC03005055BEF7BDEF7D34DA2BDF274E9C3864E51B0080AA73D75D779D1AED3DDF070E1CF8BB3DDF0000549D071E7860D7685FEDE485175E78DED54E0000A83ABFFEF5AF9F1CEDEB7CCF9D3B7785EB7C03005075EEBFFFFEFFB8F3CE3B3F1CC53B5CF6D4D7D7BFED0E97000054A5D9B367FFE3D5575F1DAD2D278BB2F0DEE0AC03005095BEFFFDEF4FF9E94F7F7A7A1456BF8FD4D7D7BF562A951A9C750000AA56737373674B4BCB889677EC2F8F55EF9A9A9A89CE380000552BF6603735359DD8B973E78884776767E7F2EC771C2C954A3738DB000054BD868686A9CDCDCDC7BBBBBB2B1ADEFBF7EF7FA9BEBE7EAFED2600005066EAD4A94D3366CC3856A915F058F18EF0AEADADBDD7D90500807EB250AE6B686838FA97BFFCE55F1FE34398477EFBDBDF3E1D5B4DB269745601006008B107BCBEBEBEBDB9B9F9D06BAFBD76E242AEE3BD7AF5EAC559BC77C4872BEDF1060080E147F81D11E18D8D8DDDF3E7CFDFFED24B2FEDEDEAEA3AD8D3D39397F68913270E1D3870E0EF6D6D6DFFF7E0830FAE9C3A75EAEE88EE58ED7655130000B8085954FF5BA9549A9545F5926CF664D3934D3AFB755F362D71CB7877AE0400801110F1ED2C000080F8060000F10D0000886F000010DF000020BE010000F10D0000E21B000010DF000020BE0100407C030000E21B0000C437000020BE0100407C030080F8060000C4370000886F0000407C030080F8060000F10D0000886F000010DF000080F8060000F10D0000E21B000010DF000020BE010000F10D0000E21B0000C437000020BE0100407C030000E21B0000C4370000886F0000407C030080F8060000C43700005CDAD06E89D83ECF7438530000F0F1E37B5236A7CF15DFB5B5B5B73B5300005099005F798EF8DE54535333D159020080CAC4F7A4A1E2BB542A7DCB19020080CA06F8607BBF3BAC7A030040E5E37BC0DE6F7BBD0100608464B1BDCCAA3700008C4E7CDF54B6D7FB1BCE0800008CA062EFB7556F000018F9F89EE40E9700008C6929A589BB77EF5EB279F3E60FDBDBDB536B6BAB19E5696B6B4BEBD7AFFF67360DDE910000E35884F7860D1B527777773A75EA94B944F3DE7BEFA575EBD61DCD42FC0EEF4A0080712A56BC85F79809F053ADADAD3BBC2B0100C6A9D86A227CC7CE64F17DDABB1200609C8A3DC7A2774CC5B70F8D0200547B7CFFEBFD836977C7D3697BDB43F9C4E3382698C5370000158CEF6347BAD2B6171E48AFAFB8A7CFC4B1784E348B6F00002A14DFFBB6FF75407817B37F7B8B6816DF0000542ABE77BCF8F090F11DCF8966F10D004085E27B5BEB8343C6773C279AC5370000E25B7C03007079C5775CDD64A8F88EE744B3F80600A042F1BD6BE36343C6773C279AC5370000158AEFC35D9D69DBEAB903B79C64C7E239D12CBE0100A8507CC7ECD9F2EC80F88E6382597C030050C9F83E7932ED7A79C1C02D27D9B1784E348B6F00002A10DF7107CB9D1B1F1D72CF773CE72E97E21B00808F13DF274FA683BBD6A43756FD6CC8F02E265E13AFB50A2EBE0100B8C0F83EDF6AB75570F10D004085E27B38ABDDE75A0517D1E21B008061C6F7C5867731225A7C030030CCF836E21B0000F12DBE010010DF467C030020BEC5370000E2DB886F0000F16DC4370000E25B7C030020BE8DF80600407C8B6F0000C4B711DF0000E2DB886F0000C4B7F80600407C1BF10D0080F816DF0000886F23BE0100C4B711DF0000886FF10D0080F836E21B0000F12DBE010010DF467C030088EFB134575C71459A3E7DFA057D4FF69F96962C59D2FB78D1A245E21B0000F13DD4BCF6DA6B69F9F2E5E9139FF844FAE52F7F9947F49E3D7BD237BFF9CDFCF8D7BEF6B53473E6CCFCB53D3D3DE92B5FF94A3EF15CBC76DAB469BD8F9F7AEAA97CE2F19B6FBE29BE010010DFE513415DAC5C3736360E38BE72E5CA74E59557F639FECA2BAFA4A54B970E88EF5B6EB925AD5BB7CECA370000E2BBFF1C3E7C38DD7AEBAD7D56BEAFBEFAEA3CACBFFBDDEFE6C7AFBAEAAA3479F2E43EDF17C76EBEF9E6B46FDFBEDE63478E1CC9B79DC4F7886F0000C4F72073ECD8B1FCEB97BEF4A574E38D37E68F0F1C3890AF644750BFF5D65BF9947F4F44F6A73FFDE9347BF6EC7CE5BB7CF57BD6AC59E21B0000F13DD8B4B4B4A4EBAEBB2EFFE0E435D75C934F6767671ED245981F3D7AB4CFF73CF3CC33E21B0000F17DA173EDB5D7A665CB96E5DB4C9A9A9AFAAC7C17DB4A8AAD24FBF7EFCF1FC7D694DB6EBB2D7F7CDF7DF7A5CF7DEE73F9E3D8F3FDC4134FE4DF3B96FF9BC5370080F8BE2413A11C011E2BDF4564C74A771C8F55F03FFCE10FF9E3471E79A4CF07318B89EF8B9573D7F90600407C0F23BEB76DDB967F8D696F6FEFDD6E32D85551FACF73CF3D97AEBFFE7AF10D0080F83ED76CD9B225EDDDBBB7F7CF5BB76E4DBFFAD5AFF22D28719DEF88EA22CAE3CA2883FD8C581DEF7F3514F10D0080F836E21B00407C1BF10D0080F816DF0000886F23BE010010DFE21B0000F16DC4370080F836E21B0000F12DBE010010DF467C030020BEC5370000E2DB886F0000F16DC4370000E25B7C030020BE8DF80600407C8B6F0000C4B711DF0000E2DB886F0000C4B7F80600407C1BF10D0080F816DF0000886F23BE0100C4B711DF0000886FF10D0080F836E21B0000F12DBE010010DF467C03008C63EDEDEDA277EC4C4F16DFA7BD2B0100C6A9F5EBD71FECEEEE16BE6360BABABAFE9CC5F70EEF4A0080716ACD9A3593D7AE5DFBFEBBEFBE7B42005FBA15EF08EFB6B6B6BDD9DCE15D0900308E65C1777B6B6B6B476C79883DC797EBD4D5D55DAE7FF738EF3B84370000978D886F67010000C4370000886F0000407C030080F8060000F10D0000886F000010DF000080F8060000F10D0000E21B000010DF000020BE010000F10D0000E21B0000C437000020BE0100407C030000E21B0000C4370000886F0000407C030080F8060000C4370000886F000010DF000080F8060000F10D0000886F000010DF000020BE010000F10D0000E21B000010DF000020BE0100407C030000E21B0000C437000020BE0100407C030080F8060000C4370000886F0000407C030080F8060000F10D0000886F000010DF000080F8060000F10D0000E21B000010DF000020BE010000F10D00009730B45B22B6CF331DCE1400007CFCF89E94CDE973C5776D6DEDEDCE1400005426C0579E23BE37D5D4D44C74960000A032F13D69A8F82E954ADF72860000A0B2013ED8DEEF0EABDE000050F9F81EB0F7DB5E6F00001821596C2FB3EA0D0000A313DF3795EDF5FE863302000023A8D8FB6DD51B0000463EBE27B9C3250000635E4A69E2EEDDBB976CDEBCF9C3F6F6F6D4DADA7A594EC4F7E5FA776F6B6B4BEBD7AFFF67360DDE910000E35884F7860D1B527777773A75EA94B944F3DE7BEFA575EBD61DCD42FC0EEF4A0080712A56BC85F79809F053ADADAD3BBC2B0100C6A9D86A227CC7CE64F17DDABB1200609C8A3DC7A2774CC5B70F8E0200547B7CFFEBFD836977C7D3697BDB43F9C4E3382698C5370000158CEF6347BAD2B6171E48AFAFB8A7CFC4B1784E348B6F00002A14DFFBB6FF75407817B37F7B8B6816DF0000542ABE77BCF8F090F11DCF8966F10D004085E27B5BEB8343C6773C279AC5370000E25B7C03007079C5775CDD64A8F88EE744B3F80600A042F1BD6BE36343C6773C279AC5370000158AEFC35D9D69DBEAB903B79C64C7E239D12CBE0100A8507CC7ECD9F2EC80F88E6382597C030050C9F83E7932ED7A79C1C02D27D9B1784E348B6F00002A10DF7107CB9D1B1F1D72CF773CE72E97E21B00808F13DF274FA683BBD6A43756FD6CC8F02E265E13AFB50A2EBE0100B8C0F83EDF6AB75570F10D004085E27B38ABDDE75A0517D1E21B008061C6F7C5867731225A7C030030CCF836E21B0000F12DBE010010DF467C030020BEC5370000E2DB886F0000F16DC4370000E25B7C030020BE8DF80600407C8B6F0000C4B711DF0000E2DB886F0000C4B7F80600407C1BF10D0080F816DF0000886F23BE0100C4B711DF0000886FF10D0080F836E21B0000F12DBE010010DF467C030088EF4ACC934F3E9956AC58D1E758F62BD3B265CB2A1AABCB972F4FD3A64DCB271EC7EF78F1C517CFF97DF19ADFFCE637E77DCD9C3973F2C7CF3DF75CEAE9E9E93DBE68D122F10D00C0D889EF88D4EBAFBF3E0FE2ABAFBE3ABDF2CA2BF9B1EF7CE73BBD917CFCF8F174E8D0A174DB6DB7E5C7226A6FBEF9E6545757D71BD5F1F5D9679F4D9FFAD4A706FD1D4B962C396FE0AF5BB7AECFCFBBEAAAABD257BFFAD5FC71CCD2A54BD3B5D75E3BE0E7C4FF40148FE3EF503C8E1817DF00008C89F88E50DDB66D5B7AEAA9A7D2AE5DBBF295E82258CB43B69888F0385EAC94C7E3F8DEF81AC11C51FEC52F7E71D0F8BEE5965B06AC7C6FDCB871C0EBCA8339FE3C6FDEBCDE3F5F71C515E9BEFBEECB1FEFD9B3A7F7E7DC7AEBADF9DF351EBFF5D65BBDDFDBD9D9997F7DE49147C43700009736BE6325390236569723A2236C3FFFF9CFE7C76EB8E186F4A73FFD298FD7FDFBF7F709E278BE781CF11E5FE3B5070E1CC81FEFDBB7AFF7F5EDEDEDF9B1A6A6A63EF11DBF277E47F9DFE7D8B163F9EB8B95EEE2FBE2F1B7BFFDEDFC7B070BFBF295EF2F7CE10B69F5EAD5F9E358258FD5742BDF00005CD2F88E6D24453C3FF3CC3303F6645F73CD35E9CD37DFCC5F13ABE2478F1EED0DE288DD471F7DB4773BC98473AC7C17CFC5E3B7DF7E3BFF99E7DB8E521C2B0FFD952B57A62BAFBC72D0F88E95EF2D5BB6E48F376DDAD47B3CFE8EB69D000070C9E33B2682BA08D52F7FF9CBBDE11D2BE2712C62B9FFCA741C8F95E5E2FB8AD5EE58F98EE723D4FBC771636363EF3697F2801E2ABE638B4AFF95EFD8FF3D79F2E4DED7C59692F8A065BCE689279E1834DCEDF9060060CCC4F750111C570C890F5E0EF5DA62353A22BC88E458F5FEFAD7BF3E606BC884B295EF783C7BF6EC8AC477ACDCC7FF1C4CE8B70DA63CBE8B3DDFE5DB66C4370000973CBE8B95EF62F53B3EDCB875EBD601AFFDEC673F9B6EBCF1C67C2F75F9CA79AC7C0FF5B36325FDF0E1C3F9E39696967CBFF7DEBD7B070DFCD85E3258E8C70729CBB7AC0CB5E73B82BBD882121FCA8C182F2E3F28BE01001893F13DA1DFD5488A55E6B82C616C3589CB0E16971E9C707675BB781CB15DFEF323B4E3F8EF7FFFFBFCCFF181CC86868641AF7832D42A7BFF892D2EC53698D8B35EBC3E26623BBECE9D3B37FF5A5C21457C03003026E23B56A4FB1FEB1FC611BBE55B53CEF533E3F9B87249AC3CC787378B55F2FEBF63D6AC591715DFC5D55A26F4FB9065F1D81D2E01001893F16DC4370000E25B7C030020BEC5370000E2DB886F0000C4B7F80600407C1BF10D0080F816DF0000886FF10D0080F836E21B0000F12DBE010010DF467C030020BEC5370000E25B7C030020BE8DF80600407C8B6F0000C4B711DF0000886FF10D0080F816DF0000886F23BE010010DFE21B0000F16DC4370000E25B7C030020BEC5370000E2DB886F0000C4B7F80600407C1BF10D00C08409EDEDEDA277EC4C4F16DFA7BD2B0100C6A9F5EBD71FECEEEE16BE6360BABABAFE9CC5F70EEF4A0080716ACD9A3593D7AE5DFBFEBBEFBE7B42005FBA15EF08EFB6B6B6BDD9DCE15D0900308E65C1777B6B6B6B476C79883DC797E3D4D5D5A5CBF5EF7EF6BCEF10DE00005C1622BE9D05000010DF000020BE010000F10D0000E21B0000C437000020BE0100407C030000E21B0000C4370000886F0000407C030080F8060000C4370000886F000010DF000080F8060000F10D0000886F000010DF000020BE010000F10D0000E21B000010DF000020BE0100407C030000E21B0000C437000020BE0100407C030080F8060000C4370000886F0000407C030080F8060000F10D0000886F000010DF000080F8060000F10D0000E21B000010DF000020BE010000F10D0000E21B0000C437000020BE0100407C030000E21B00002E6568B7446C9F673A9C290000F8F8F13D299BD3E78AEFDADADADB9D290000A84C80AF3C477C6FAAA9A999E82C01004065E27BD250F15D2A95BEE50C01004065037CB0BDDF1D56BD0100A0F2F13D60EFB7BDDE00003042B2D85E66D51B00004627BE6F2ADBEBFD0D670400004650B1F7DBAA37000054587D7DFD7F65B1FD60A9545A9C7D7D239BE36757BF7BCEFE794936F36255DCD90200800BD4D8D8F8C92CA6EFCC82FB1FC3B8BB65F90730FF967D9D3965CA94CF388B0000701EB1973B9B772E24BA07997DD9D4389B0000308858EDCE82F9E92CBCCF948774763C3DF6D86369E3C68DA9ABAB2B1D3F7E3C859E9E9ED4DDDD9DB66EDD9A162C58909A9A9A068BF03FC6CF75760100E0ACF8F06416CA2F9587F3CC9933D3AA55ABD2071F7C9086E3CC9933A9B5B535FFBE7E01BEC43614000098D0BBE2DD27BC172E5CD8BBC27DA162457CF1E2C50302DCD5510000A87AB1D5A43C945B5A5A5225C42AF8D4A953FB6C4171B60100A85A673F5C79A6D2E15D1EE0FD56C06B9C750000AA4E6C3729BFAA496C351909FDB6A0ECB3FF1B0080AA13D7F12EFF70E5C5EEF11ECE1EF07E1FC29CE3EC03005055CA6FA01357351949FDB69FECF1E14B0000AAC6D95BC6F75EC77BB89713BC587119C21FFCE007E577C2742B7A0000AA4316C00F16211C37D0190D8F3FFE78F9EAF73CFF0A0000548552A9B4B808E1CD9B378F4A7CC79D30CBAFFBED5F010080AA90C5EF1B45081F3C787054E23B6E455F16DF3BFC2B0000502DF1DD5384F0485DE564B0AB9E94C5778F7F050000AA25BE7B43783495FF5EFF0A0000544B7C1FB3F20D0000A3A0B6B6F66FF67C0300C02870B5130000182559FCDEEF3ADF0000300A2EC51D2EA74F9FFE913B5C02005095B208EE286278D5AA55231ADFADADADE5ABDE7B6A6A6A26FA170000A06A944AA5E94510CF9C3973C4AE7A125739696E6EFEB02CBEE738FB00005495C6C6C64FC62A7411C50B172E1C91F85EBC7871F9AAF7BE2953A67CC6D90700A0EA64315C93CDE9228E9F7FFEF98A86F79A356BFADC58277E9FB30E00403507F8D3E5815CA9008FF09E366DDA99B29FFD47671B0080AA161F7E8C302E0FF0D882127BB52F768F77BFAD26F975BD639B8BB30D008000CF02BCFCC63BC58730E32A287199C0E15E4E3056BBFB7DB8320F6FFBBC0100A05F809FDD8272BA3C9EE33AE00B162C481D1D1DF9ADE88BABA2C40A77DC32BEB3B333BF814E16DD1FF58BEE7CAB89156F000018C2D90F61EE1924A42F64F6F9702500000C43AC56D7D6D6DE9905F4AE0B8CEE88F639B6990000C045C8627A5236F7C79EF02CC8FF963DEE391BDAF17547ECE9CE9EFB9FB865BC3B57020000000000000000000000000000000000000000000085FF0726F9FEF5CCE114690000000049454E44AE426082, 1); +INSERT INTO `act_ge_bytearray` VALUES ('26', 1, '资产采购申请.bpmn', '25', 0x3C3F786D6C2076657273696F6E3D22312E302220656E636F64696E673D225554462D38223F3E0D0A3C646566696E6974696F6E7320786D6C6E733D22687474703A2F2F7777772E6F6D672E6F72672F737065632F42504D4E2F32303130303532342F4D4F44454C2220786D6C6E733A7873693D22687474703A2F2F7777772E77332E6F72672F323030312F584D4C536368656D612D696E7374616E63652220786D6C6E733A7873643D22687474703A2F2F7777772E77332E6F72672F323030312F584D4C536368656D612220786D6C6E733A61637469766974693D22687474703A2F2F61637469766974692E6F72672F62706D6E2220786D6C6E733A62706D6E64693D22687474703A2F2F7777772E6F6D672E6F72672F737065632F42504D4E2F32303130303532342F44492220786D6C6E733A6F6D6764633D22687474703A2F2F7777772E6F6D672E6F72672F737065632F44442F32303130303532342F44432220786D6C6E733A6F6D6764693D22687474703A2F2F7777772E6F6D672E6F72672F737065632F44442F32303130303532342F44492220747970654C616E67756167653D22687474703A2F2F7777772E77332E6F72672F323030312F584D4C536368656D61222065787072657373696F6E4C616E67756167653D22687474703A2F2F7777772E77332E6F72672F313939392F585061746822207461726765744E616D6573706163653D22687474703A2F2F7777772E61637469766974692E6F72672F70726F63657373646566223E0D0A20203C70726F636573732069643D2265616D5F61737365745F70757263686173655F6170706C7922206E616D653D22E8B584E4BAA7E98787E8B4ADE794B3E8AFB72220697345786563757461626C653D2274727565223E0D0A202020203C73746172744576656E742069643D227369642D33386161356139372D323537332D343164652D616639342D38386237356464653866346322206E616D653D22E5BC80E5A78B222F3E0D0A202020203C757365725461736B2069643D227369642D65626463326162652D303165622D346430342D613935382D333463353330326535626261222061637469766974693A61737369676E65653D22237B61737369676E65657D22206E616D653D22E7AEA1E79086E59198E5AEA1E689B9222F3E0D0A202020203C656E644576656E742069643D227369642D33663532643231622D313637392D346436382D383161332D64383261303431643766333422206E616D653D22E7BB93E69D9F222F3E0D0A202020203C73657175656E6365466C6F772069643D227369642D63646461393630302D636530662D343536332D616230312D3536393163363535336166382220736F757263655265663D227369642D33386161356139372D323537332D343164652D616639342D38386237356464653866346322207461726765745265663D227369642D35623330666433622D623163612D343930392D386636372D633362353237663461343261222F3E0D0A202020203C73657175656E6365466C6F772069643D227369642D38346336393936662D616266622D346635312D393737642D6233653939373431313038342220736F757263655265663D227369642D65626463326162652D303165622D346430342D613935382D33346335333032653562626122207461726765745265663D227369642D33663532643231622D313637392D346436382D383161332D643832613034316437663334222F3E0D0A202020203C757365725461736B2069643D227369642D35623330666433622D623163612D343930392D386636372D63336235323766346134326122206E616D653D22E8B5B7E88D89222F3E0D0A202020203C73657175656E6365466C6F772069643D227369642D35306434346164612D666338372D346364612D393438392D6138663166653738643566612220736F757263655265663D227369642D35623330666433622D623163612D343930392D386636372D63336235323766346134326122207461726765745265663D227369642D65626463326162652D303165622D346430342D613935382D333463353330326535626261222F3E0D0A20203C2F70726F636573733E0D0A20203C62706D6E64693A42504D4E4469616772616D2069643D2242504D4E4469616772616D5F74657374223E0D0A202020203C62706D6E64693A42504D4E506C616E652062706D6E456C656D656E743D2274657374222069643D2242504D4E506C616E655F74657374223E0D0A2020202020203C62706D6E64693A42504D4E53686170652069643D2273686170652D64643531363464352D386330362D343537302D393466622D346565346233333633656538222062706D6E456C656D656E743D227369642D33386161356139372D323537332D343164652D616639342D383862373564646538663463223E0D0A20202020202020203C6F6D6764633A426F756E647320783D223636302E302220793D222D3231352E30222077696474683D2233302E3022206865696768743D2233302E30222F3E0D0A2020202020203C2F62706D6E64693A42504D4E53686170653E0D0A2020202020203C62706D6E64693A42504D4E53686170652069643D2273686170652D39376136303639362D393930392D343536312D626163612D306539346262353933326435222062706D6E456C656D656E743D227369642D65626463326162652D303165622D346430342D613935382D333463353330326535626261223E0D0A20202020202020203C6F6D6764633A426F756E647320783D223632352E302220793D2231302E343335393336222077696474683D223130302E3022206865696768743D2238302E30222F3E0D0A2020202020203C2F62706D6E64693A42504D4E53686170653E0D0A2020202020203C62706D6E64693A42504D4E53686170652069643D2273686170652D39616566633864642D396566352D343830312D626161302D666339323337373762666334222062706D6E456C656D656E743D227369642D33663532643231622D313637392D346436382D383161332D643832613034316437663334223E0D0A20202020202020203C6F6D6764633A426F756E647320783D223636302E302220793D223135302E30222077696474683D2233302E3022206865696768743D2233302E30222F3E0D0A2020202020203C2F62706D6E64693A42504D4E53686170653E0D0A2020202020203C62706D6E64693A42504D4E456467652069643D22656467652D62666436376533332D383836342D346531392D626262392D363162643562636331363530222062706D6E456C656D656E743D227369642D63646461393630302D636530662D343536332D616230312D353639316336353533616638223E0D0A20202020202020203C6F6D6764693A776179706F696E7420783D223637352E302220793D222D3138352E30222F3E0D0A20202020202020203C6F6D6764693A776179706F696E7420783D223637342E393939392220793D222D3133352E30222F3E0D0A2020202020203C2F62706D6E64693A42504D4E456467653E0D0A2020202020203C62706D6E64693A42504D4E456467652069643D22656467652D62313564303134392D326137382D346564352D393562642D613863326261396338376265222062706D6E456C656D656E743D227369642D38346336393936662D616266622D346635312D393737642D623365393937343131303834223E0D0A20202020202020203C6F6D6764693A776179706F696E7420783D223637352E302220793D2239302E3433353934222F3E0D0A20202020202020203C6F6D6764693A776179706F696E7420783D223637352E302220793D223135302E30222F3E0D0A2020202020203C2F62706D6E64693A42504D4E456467653E0D0A2020202020203C62706D6E64693A42504D4E53686170652069643D2273686170652D38356466613065622D306631322D343562322D386138632D373635376565626665366137222062706D6E456C656D656E743D227369642D35623330666433622D623163612D343930392D386636372D633362353237663461343261223E0D0A20202020202020203C6F6D6764633A426F756E647320783D223632342E39393939342220793D222D3133352E30222077696474683D223130302E3022206865696768743D2238302E30222F3E0D0A2020202020203C2F62706D6E64693A42504D4E53686170653E0D0A2020202020203C62706D6E64693A42504D4E456467652069643D22656467652D33363765346630642D373063362D343133332D623833342D373139663166336666616130222062706D6E456C656D656E743D227369642D35306434346164612D666338372D346364612D393438392D613866316665373864356661223E0D0A20202020202020203C6F6D6764693A776179706F696E7420783D223637342E39393939342220793D222D35352E30222F3E0D0A20202020202020203C6F6D6764693A776179706F696E7420783D223637352E302220793D2231302E343335393336222F3E0D0A2020202020203C2F62706D6E64693A42504D4E456467653E0D0A202020203C2F62706D6E64693A42504D4E506C616E653E0D0A20203C2F62706D6E64693A42504D4E4469616772616D3E0D0A3C2F646566696E6974696F6E733E0D0A, 0); +INSERT INTO `act_ge_bytearray` VALUES ('27', 1, '资产采购申请.eam_asset_purchase_apply.png', '25', 0x89504E470D0A1A0A0000000D49484452000002DF00000195080600000026219D53000016EC4944415478DAEDDD7F6C95F5BDC0719261B2654BCC922D8BF12E5E738DD7BF961BC3328D99694C966D89095B266B4F6958D331CA76D53186896E1A8C6CB9B81FD98C264C63541C77CC10C2582F82B4457E88108B0E2B8883091228601D41C2A020E8F73E9F273CCDE92F28785A4ACFEB957CD2C3734E5B7C387FBCFDE67B9E67C2040000186129A54F767676362F5CB870DDFCF9F38FDE7DF7DDA71B1B1B535D5D5D6A6868F8E8873FFCE1A99FFFFCE7BB1F7EF8E145D9FCA7330600001711DD4B972E7D76DEBC79A767CD9A951E7FFCF1B479F3E6D4D5D5957A7A7A5288AFDDDDDDE9D5575F4D599CA71FFFF8C71FFDE4273F7967C68C19D39D41000018862CB29B7EF18B5F9CBCE79E7BF2B03E73E64C1AAEAD5BB7A67BEFBDF74C7373F38E2953A65CE76C0200C020B2769EB87CF9F2353367CE4C2D2D2D1714DDFDAD5AB52A3535359DB00A0E00008384F7DAB56B5FB9EBAEBBD2CE9D3B5325BCF3CE3B290BF913D3A74FFF6F67180000CE8A15EF08EFD8C35D49F1F366CC9871AC542A3538CB000054BDD8E31D5B4D2AB5E23DD80AF8B469D38E64017E83B30D0040D58AAB9A3CF4D043A7628FF7485AB162C589A953A76E72C60100A85ACB962DFBDFB8AAC9071F7C9046DA8F7EF4A343B69F0000509562D53BAEE31D97131C0DAFBFFEFA29ABDF000054A5B873657CC8F2E35C52F0423535351DAAABABFB77671F0080AA12B78C7FF2C927D368FADDEF7EB7358BEF39CE3E00005565FEFCF947E396F1A3E9E5975F7E278BEF16671F0080AA72F7DD779F3E78F0E0A8C6F7A14387BAB3F8DEE7EC030050551A1B1B534F4FCFA8C677FCBE2CBE7B9C7D0000AA4A16C1E95288DFEBEC03005055BEF7BDEF7D34DA2BDF274E9C3864E51B0080AA73D75D779D1AED3DDF070E1CF8BB3DDF0000549D071E7860D7685FEDE485175E78DED54E0000A83ABFFEF5AF9F1CEDEB7CCF9D3B7785EB7C03005075EEBFFFFEFFB8F3CE3B3F1CC53B5CF6D4D7D7BFED0E97000054A5D9B367FFE3D5575F1DAD2D278BB2F0DEE0AC03005095BEFFFDEF4FF9E94F7F7A7A1456BF8FD4D7D7BF562A951A9C750000AA56737373674B4BCB889677EC2F8F55EF9A9A9A89CE380000552BF6603735359DD8B973E78884776767E7F2EC771C2C954A3738DB000054BD868686A9CDCDCDC7BBBBBB2B1ADEFBF7EF7FA9BEBE7EAFED2600005066EAD4A94D3366CC3856A915F058F18EF0AEADADBDD7D90500807EB250AE6B686838FA97BFFCE55F1FE34398477EFBDBDF3E1D5B4DB269745601006008B107BCBEBEBEBDB9B9F9D06BAFBD76E242AEE3BD7AF5EAC559BC77C4872BEDF1060080E147F81D11E18D8D8DDDF3E7CFDFFED24B2FEDEDEAEA3AD8D3D39397F68913270E1D3870E0EF6D6D6DFFF7E0830FAE9C3A75EAEE88EE58ED7655130000B8085954FF5BA9549A9545F5926CF664D3934D3AFB755F362D71CB7877AE0400801110F1ED2C000080F8060000F10D0000886F000010DF000020BE010000F10D0000E21B000010DF000020BE0100407C030000E21B0000C437000020BE0100407C030080F8060000C4370000886F0000407C030080F8060000F10D0000886F000010DF000080F8060000F10D0000E21B000010DF000020BE010000F10D0000E21B0000C437000020BE0100407C030000E21B0000C4370000886F0000407C030080F8060000C43700005CDAD06E89D83ECF7438530000F0F1E37B5236A7CF15DFB5B5B5B73B5300005099005F798EF8DE54535333D159020080CAC4F7A4A1E2BB542A7DCB19020080CA06F8607BBF3BAC7A030040E5E37BC0DE6F7BBD0100608464B1BDCCAA3700008C4E7CDF54B6D7FB1BCE0800008CA062EFB7556F000018F9F89EE40E9700008C6929A589BB77EF5EB279F3E60FDBDBDB536B6BAB19E5696B6B4BEBD7AFFF67360DDE910000E35884F7860D1B527777773A75EA94B944F3DE7BEFA575EBD61DCD42FC0EEF4A0080712A56BC85F79809F053ADADAD3BBC2B0100C6A9D86A227CC7CE64F17DDABB1200609C8A3DC7A2774CC5B70F8D0200547B7CFFEBFD836977C7D3697BDB43F9C4E3382698C5370000158CEF6347BAD2B6171E48AFAFB8A7CFC4B1784E348B6F00002A14DFFBB6FF75407817B37F7B8B6816DF0000542ABE77BCF8F090F11DCF8966F10D004085E27B5BEB8343C6773C279AC5370000E25B7C03007079C5775CDD64A8F88EE744B3F80600A042F1BD6BE36343C6773C279AC5370000158AEFC35D9D69DBEAB903B79C64C7E239D12CBE0100A8507CC7ECD9F2EC80F88E6382597C030050C9F83E7932ED7A79C1C02D27D9B1784E348B6F00002A10DF7107CB9D1B1F1D72CF773CE72E97E21B00808F13DF274FA683BBD6A43756FD6CC8F02E265E13AFB50A2EBE0100B8C0F83EDF6AB75570F10D004085E27B38ABDDE75A0517D1E21B008061C6F7C5867731225A7C030030CCF836E21B0000F12DBE010010DF467C030020BEC5370000E2DB886F0000F16DC4370000E25B7C030020BE8DF80600407C8B6F0000C4B711DF0000E2DB886F0000C4B7F80600407C1BF10D0080F816DF0000886F23BE0100C4B711DF0000886FF10D0080F836E21B0000F12DBE010010DF467C030088EFB134575C71459A3E7DFA057D4FF69F96962C59D2FB78D1A245E21B0000F13DD4BCF6DA6B69F9F2E5E9139FF844FAE52F7F9947F49E3D7BD237BFF9CDFCF8D7BEF6B53473E6CCFCB53D3D3DE92B5FF94A3EF15CBC76DAB469BD8F9F7AEAA97CE2F19B6FBE29BE010010DFE513415DAC5C3736360E38BE72E5CA74E59557F639FECA2BAFA4A54B970E88EF5B6EB925AD5BB7CECA370000E2BBFF1C3E7C38DD7AEBAD7D56BEAFBEFAEA3CACBFFBDDEFE6C7AFBAEAAA3479F2E43EDF17C76EBEF9E6B46FDFBEDE63478E1CC9B79DC4F7886F0000C4F72073ECD8B1FCEB97BEF4A574E38D37E68F0F1C3890AF644750BFF5D65BF9947F4F44F6A73FFDE9347BF6EC7CE5BB7CF57BD6AC59E21B0000F13DD8B4B4B4A4EBAEBB2EFFE0E435D75C934F6767671ED245981F3D7AB4CFF73CF3CC33E21B0000F17DA173EDB5D7A665CB96E5DB4C9A9A9AFAAC7C17DB4A8AAD24FBF7EFCF1FC7D694DB6EBB2D7F7CDF7DF7A5CF7DEE73F9E3D8F3FDC4134FE4DF3B96FF9BC5370080F8BE2413A11C011E2BDF4564C74A771C8F55F03FFCE10FF9E3471E79A4CF07318B89EF8B9573D7F90600407C0F23BEB76DDB967F8D696F6FEFDD6E32D85551FACF73CF3D97AEBFFE7AF10D0080F83ED76CD9B225EDDDBBB7F7CF5BB76E4DBFFAD5AFF22D28719DEF88EA22CAE3CA2883FD8C581DEF7F3514F10D0080F836E21B00407C1BF10D0080F816DF0000886F23BE010010DFE21B0000F16DC4370080F836E21B0000F12DBE010010DF467C030020BEC5370000E2DB886F0000F16DC4370000E25B7C030020BE8DF80600407C8B6F0000C4B711DF0000E2DB886F0000C4B7F80600407C1BF10D0080F816DF0000886F23BE0100C4B711DF0000886FF10D0080F836E21B0000F12DBE010010DF467C03008C63EDEDEDA277EC4C4F16DFA7BD2B0100C6A9F5EBD71FECEEEE16BE6360BABABAFE9CC5F70EEF4A0080716ACD9A3593D7AE5DFBFEBBEFBE7B42005FBA15EF08EFB6B6B6BDD9DCE15D0900308E65C1777B6B6B6B476C79883DC797EBD4D5D55DAE7FF738EF3B84370000978D886F67010000C4370000886F0000407C030080F8060000F10D0000886F000010DF000080F8060000F10D0000E21B000010DF000020BE010000F10D0000E21B0000C437000020BE0100407C030000E21B0000C4370000886F0000407C030080F8060000C4370000886F000010DF000080F8060000F10D0000886F000010DF000020BE010000F10D0000E21B000010DF000020BE0100407C030000E21B0000C437000020BE0100407C030080F8060000C4370000886F0000407C030080F8060000F10D0000886F000010DF000080F8060000F10D0000E21B000010DF000020BE010000F10D00009730B45B22B6CF331DCE1400007CFCF89E94CDE973C5776D6DEDEDCE1400005426C0579E23BE37D5D4D44C74960000A032F13D69A8F82E954ADF72860000A0B2013ED8DEEF0EABDE000050F9F81EB0F7DB5E6F00001821596C2FB3EA0D0000A313DF3795EDF5FE863302000023A8D8FB6DD51B0000463EBE27B9C3250000635E4A69E2EEDDBB976CDEBCF9C3F6F6F6D4DADA7A594EC4F7E5FA776F6B6B4BEBD7AFFF67360DDE910000E35884F7860D1B527777773A75EA94B944F3DE7BEFA575EBD61DCD42FC0EEF4A0080712A56BC85F79809F053ADADAD3BBC2B0100C6A9D86A227CC7CE64F17DDABB1200609C8A3DC7A2774CC5B70F8E0200547B7CFFEBFD836977C7D3697BDB43F9C4E3382698C5370000158CEF6347BAD2B6171E48AFAFB8A7CFC4B1784E348B6F00002A14DFFBB6FF75407817B37F7B8B6816DF0000542ABE77BCF8F090F11DCF8966F10D004085E27B5BEB8343C6773C279AC5370000E25B7C03007079C5775CDD64A8F88EE744B3F80600A042F1BD6BE36343C6773C279AC5370000158AEFC35D9D69DBEAB903B79C64C7E239D12CBE0100A8507CC7ECD9F2EC80F88E6382597C030050C9F83E7932ED7A79C1C02D27D9B1784E348B6F00002A10DF7107CB9D1B1F1D72CF773CE72E97E21B00808F13DF274FA683BBD6A43756FD6CC8F02E265E13AFB50A2EBE0100B8C0F83EDF6AB75570F10D004085E27B38ABDDE75A0517D1E21B008061C6F7C5867731225A7C030030CCF836E21B0000F12DBE010010DF467C030020BEC5370000E2DB886F0000F16DC4370000E25B7C030020BE8DF80600407C8B6F0000C4B711DF0000E2DB886F0000C4B7F80600407C1BF10D0080F816DF0000886F23BE0100C4B711DF0000886FF10D0080F836E21B0000F12DBE010010DF467C030088EF4ACC934F3E9956AC58D1E758F62BD3B265CB2A1AABCB972F4FD3A64DCB271EC7EF78F1C517CFF97DF19ADFFCE637E77DCD9C3973F2C7CF3DF75CEAE9E9E93DBE68D122F10D00C0D889EF88D4EBAFBF3E0FE2ABAFBE3ABDF2CA2BF9B1EF7CE73BBD917CFCF8F174E8D0A174DB6DB7E5C7226A6FBEF9E6545757D71BD5F1F5D9679F4D9FFAD4A706FD1D4B962C396FE0AF5BB7AECFCFBBEAAAABD257BFFAD5FC71CCD2A54BD3B5D75E3BE0E7C4FF40148FE3EF503C8E1817DF00008C89F88E50DDB66D5B7AEAA9A7D2AE5DBBF295E82258CB43B69888F0385EAC94C7E3F8DEF81AC11C51FEC52F7E71D0F8BEE5965B06AC7C6FDCB871C0EBCA8339FE3C6FDEBCDE3F5F71C515E9BEFBEECB1FEFD9B3A7F7E7DC7AEBADF9DF351EBFF5D65BBDDFDBD9D9997F7DE49147C43700009736BE6325390236569723A2236C3FFFF9CFE7C76EB8E186F4A73FFD298FD7FDFBF7F709E278BE781CF11E5FE3B5070E1CC81FEFDBB7AFF7F5EDEDEDF9B1A6A6A63EF11DBF277E47F9DFE7D8B163F9EB8B95EEE2FBE2F1B7BFFDEDFC7B070BFBF295EF2F7CE10B69F5EAD5F9E358258FD5742BDF00005CD2F88E6D24453C3FF3CC3303F6645F73CD35E9CD37DFCC5F13ABE2478F1EED0DE288DD471F7DB4773BC98473AC7C17CFC5E3B7DF7E3BFF99E7DB8E521C2B0FFD952B57A62BAFBC72D0F88E95EF2D5BB6E48F376DDAD47B3CFE8EB69D000070C9E33B2682BA08D52F7FF9CBBDE11D2BE2712C62B9FFCA741C8F95E5E2FB8AD5EE58F98EE723D4FBC771636363EF3697F2801E2ABE638B4AFF95EFD8FF3D79F2E4DED7C59692F8A065BCE689279E1834DCEDF9060060CCC4F750111C570C890F5E0EF5DA62353A22BC88E458F5FEFAD7BF3E606BC884B295EF783C7BF6EC8AC477ACDCC7FF1C4CE8B70DA63CBE8B3DDFE5DB66C4370000973CBE8B95EF62F53B3EDCB875EBD601AFFDEC673F9B6EBCF1C67C2F75F9CA79AC7C0FF5B36325FDF0E1C3F9E39696967CBFF7DEBD7B070DFCD85E3258E8C70729CBB7AC0CB5E73B82BBD882121FCA8C182F2E3F28BE01001893F13DA1DFD5488A55E6B82C616C3589CB0E16971E9C707675BB781CB15DFEF323B4E3F8EF7FFFFBFCCFF181CC86868641AF7832D42A7BFF892D2EC53698D8B35EBC3E26623BBECE9D3B37FF5A5C21457C03003026E23B56A4FB1FEB1FC611BBE55B53CEF533E3F9B87249AC3CC787378B55F2FEBF63D6AC591715DFC5D55A26F4FB9065F1D81D2E01001893F16DC4370000E25B7C030020BEC5370000E2DB886F0000C4B7F80600407C1BF10D0080F816DF0000886FF10D0080F836E21B0000F12DBE010010DF467C030020BEC5370000E25B7C030020BE8DF80600407C8B6F0000C4B711DF0000886FF10D0080F816DF0000886F23BE010010DFE21B0000F16DC4370000E25B7C030020BEC5370000E2DB886F0000C4B7F80600407C1BF10D00C08409EDEDEDA277EC4C4F16DFA7BD2B0100C6A9F5EBD71FECEEEE16BE6360BABABAFE9CC5F70EEF4A0080716ACD9A3593D7AE5DFBFEBBEFBE7B42005FBA15EF08EFB6B6B6BDD9DCE15D0900308E65C1777B6B6B6B476C79883DC797E3D4D5D5A5CBF5EF7EF6BCEF10DE00005C1622BE9D05000010DF000020BE010000F10D0000E21B0000C437000020BE0100407C030000E21B0000C4370000886F0000407C030080F8060000C4370000886F000010DF000080F8060000F10D0000886F000010DF000020BE010000F10D0000E21B000010DF000020BE0100407C030000E21B0000C437000020BE0100407C030080F8060000C4370000886F0000407C030080F8060000F10D0000886F000010DF000080F8060000F10D0000E21B000010DF000020BE010000F10D0000E21B0000C437000020BE0100407C030000E21B00002E6568B7446C9F673A9C290000F8F8F13D299BD3E78AEFDADADADB9D290000A84C80AF3C477C6FAAA9A999E82C01004065E27BD250F15D2A95BEE50C01004065037CB0BDDF1D56BD0100A0F2F13D60EFB7BDDE00003042B2D85E66D51B00004627BE6F2ADBEBFD0D670400004650B1F7DBAA37000054587D7DFD7F65B1FD60A9545A9C7D7D239BE36757BF7BCEFE794936F36255DCD90200800BD4D8D8F8C92CA6EFCC82FB1FC3B8BB65F90730FF967D9D3965CA94CF388B0000701EB1973B9B772E24BA07997DD9D4389B0000308858EDCE82F9E92CBCCF948774763C3DF6D86369E3C68DA9ABAB2B1D3F7E3C859E9E9ED4DDDD9DB66EDD9A162C58909A9A9A068BF03FC6CF75760100E0ACF8F06416CA2F9587F3CC9933D3AA55ABD2071F7C9086E3CC9933A9B5B535FFBE7E01BEC43614000098D0BBE2DD27BC172E5CD8BBC27DA162457CF1E2C50302DCD5510000A87AB1D5A43C945B5A5A5225C42AF8D4A953FB6C4171B60100A85A673F5C79A6D2E15D1EE0FD56C06B9C750000AA4E6C3729BFAA496C351909FDB6A0ECB3FF1B0080AA13D7F12EFF70E5C5EEF11ECE1EF07E1FC29CE3EC03005055CA6FA01357351949FDB69FECF1E14B0000AAC6D95BC6F75EC77BB89713BC587119C21FFCE007E577C2742B7A0000AA4316C00F16211C37D0190D8F3FFE78F9EAF73CFF0A0000548552A9B4B808E1CD9B378F4A7CC79D30CBAFFBED5F010080AA90C5EF1B45081F3C787054E23B6E455F16DF3BFC2B0000502DF1DD5384F0485DE564B0AB9E94C5778F7F050000AA25BE7B43783495FF5EFF0A0000544B7C1FB3F20D0000A3A0B6B6F66FF67C0300C02870B5130000182559FCDEEF3ADF0000300A2EC51D2EA74F9FFE913B5C02005095B208EE286278D5AA55231ADFADADADE5ABDE7B6A6A6A26FA170000A06A944AA5E94510CF9C3973C4AE7A125739696E6EFEB02CBEE738FB00005495C6C6C64FC62A7411C50B172E1C91F85EBC7871F9AAF7BE2953A67CC6D90700A0EA64315C93CDE9228E9F7FFEF98A86F79A356BFADC58277E9FB30E00403507F8D3E5815CA9008FF09E366DDA99B29FFD47671B0080AA161F7E8C302E0FF0D882127BB52F768F77BFAD26F975BD639B8BB30D008000CF02BCFCC63BC58730E32A287199C0E15E4E3056BBFB7DB8320F6FFBBC0100A05F809FDD8272BA3C9EE33AE00B162C481D1D1DF9ADE88BABA2C40A77DC32BEB3B333BF814E16DD1FF58BEE7CAB89156F000018C2D90F61EE1924A42F64F6F9702500000C43AC56D7D6D6DE9905F4AE0B8CEE88F639B6990000C045C8627A5236F7C79EF02CC8FF963DEE391BDAF17547ECE9CE9EFB9FB865BC3B57020000000000000000000000000000000000000000000085FF0726F9FEF5CCE114690000000049454E44AE426082, 1); +INSERT INTO `act_ge_bytearray` VALUES ('3', 1, '设备报修申请.eam_asset_equipment_repair.png', '1', 0x89504E470D0A1A0A0000000D49484452000002DF00000195080600000026219D53000016EC4944415478DAEDDD7F6C95F5BDC0719261B2654BCC922D8BF12E5E738DD7BF961BC3328D99694C966D89095B266B4F6958D331CA76D53186896E1A8C6CB9B81FD98C264C63541C77CC10C2582F82B4457E88108B0E2B8883091228601D41C2A020E8F73E9F273CCDE92F28785A4ACFEB957CD2C3734E5B7C387FBCFDE67B9E67C2040000186129A54F767676362F5CB870DDFCF9F38FDE7DF7DDA71B1B1B535D5D5D6A6868F8E8873FFCE1A99FFFFCE7BB1F7EF8E145D9FCA7330600001711DD4B972E7D76DEBC79A767CD9A951E7FFCF1B479F3E6D4D5D5957A7A7A5288AFDDDDDDE9D5575F4D599CA71FFFF8C71FFDE4273F7967C68C19D39D41000018862CB29B7EF18B5F9CBCE79E7BF2B03E73E64C1AAEAD5BB7A67BEFBDF74C7373F38E2953A65CE76C0200C020B2769EB87CF9F2353367CE4C2D2D2D1714DDFDAD5AB52A3535359DB00A0E00008384F7DAB56B5FB9EBAEBBD2CE9D3B5325BCF3CE3B290BF913D3A74FFF6F67180000CE8A15EF08EFD8C35D49F1F366CC9871AC542A3538CB000054BDD8E31D5B4D2AB5E23DD80AF8B469D38E64017E83B30D0040D58AAB9A3CF4D043A7628FF7485AB162C589A953A76E72C60100A85ACB962DFBDFB8AAC9071F7C9046DA8F7EF4A343B69F0000509562D53BAEE31D97131C0DAFBFFEFA29ABDF000054A5B873657CC8F2E35C52F0423535351DAAABABFB77671F0080AA12B78C7FF2C927D368FADDEF7EB7358BEF39CE3E00005565FEFCF947E396F1A3E9E5975F7E278BEF16671F0080AA72F7DD779F3E78F0E0A8C6F7A14387BAB3F8DEE7EC030050551A1B1B534F4FCFA8C677FCBE2CBE7B9C7D0000AA4A16C1E95288DFEBEC03005055BEF7BDEF7D34DA2BDF274E9C3864E51B0080AA73D75D779D1AED3DDF070E1CF8BB3DDF0000549D071E7860D7685FEDE485175E78DED54E0000A83ABFFEF5AF9F1CEDEB7CCF9D3B7785EB7C03005075EEBFFFFEFFB8F3CE3B3F1CC53B5CF6D4D7D7BFED0E97000054A5D9B367FFE3D5575F1DAD2D278BB2F0DEE0AC03005095BEFFFDEF4FF9E94F7F7A7A1456BF8FD4D7D7BF562A951A9C750000AA56737373674B4BCB889677EC2F8F55EF9A9A9A89CE380000552BF6603735359DD8B973E78884776767E7F2EC771C2C954A3738DB000054BD868686A9CDCDCDC7BBBBBB2B1ADEFBF7EF7FA9BEBE7EAFED2600005066EAD4A94D3366CC3856A915F058F18EF0AEADADBDD7D90500807EB250AE6B686838FA97BFFCE55F1FE34398477EFBDBDF3E1D5B4DB269745601006008B107BCBEBEBEBDB9B9F9D06BAFBD76E242AEE3BD7AF5EAC559BC77C4872BEDF1060080E147F81D11E18D8D8DDDF3E7CFDFFED24B2FEDEDEAEA3AD8D3D39397F68913270E1D3870E0EF6D6D6DFFF7E0830FAE9C3A75EAEE88EE58ED7655130000B8085954FF5BA9549A9545F5926CF664D3934D3AFB755F362D71CB7877AE0400801110F1ED2C000080F8060000F10D0000886F000010DF000020BE010000F10D0000E21B000010DF000020BE0100407C030000E21B0000C437000020BE0100407C030080F8060000C4370000886F0000407C030080F8060000F10D0000886F000010DF000080F8060000F10D0000E21B000010DF000020BE010000F10D0000E21B0000C437000020BE0100407C030000E21B0000C4370000886F0000407C030080F8060000C43700005CDAD06E89D83ECF7438530000F0F1E37B5236A7CF15DFB5B5B5B73B5300005099005F798EF8DE54535333D159020080CAC4F7A4A1E2BB542A7DCB19020080CA06F8607BBF3BAC7A030040E5E37BC0DE6F7BBD0100608464B1BDCCAA3700008C4E7CDF54B6D7FB1BCE0800008CA062EFB7556F000018F9F89EE40E9700008C6929A589BB77EF5EB279F3E60FDBDBDB536B6BAB19E5696B6B4BEBD7AFFF67360DDE910000E35884F7860D1B527777773A75EA94B944F3DE7BEFA575EBD61DCD42FC0EEF4A0080712A56BC85F79809F053ADADAD3BBC2B0100C6A9D86A227CC7CE64F17DDABB1200609C8A3DC7A2774CC5B70F8D0200547B7CFFEBFD836977C7D3697BDB43F9C4E3382698C5370000158CEF6347BAD2B6171E48AFAFB8A7CFC4B1784E348B6F00002A14DFFBB6FF75407817B37F7B8B6816DF0000542ABE77BCF8F090F11DCF8966F10D004085E27B5BEB8343C6773C279AC5370000E25B7C03007079C5775CDD64A8F88EE744B3F80600A042F1BD6BE36343C6773C279AC5370000158AEFC35D9D69DBEAB903B79C64C7E239D12CBE0100A8507CC7ECD9F2EC80F88E6382597C030050C9F83E7932ED7A79C1C02D27D9B1784E348B6F00002A10DF7107CB9D1B1F1D72CF773CE72E97E21B00808F13DF274FA683BBD6A43756FD6CC8F02E265E13AFB50A2EBE0100B8C0F83EDF6AB75570F10D004085E27B38ABDDE75A0517D1E21B008061C6F7C5867731225A7C030030CCF836E21B0000F12DBE010010DF467C030020BEC5370000E2DB886F0000F16DC4370000E25B7C030020BE8DF80600407C8B6F0000C4B711DF0000E2DB886F0000C4B7F80600407C1BF10D0080F816DF0000886F23BE0100C4B711DF0000886FF10D0080F836E21B0000F12DBE010010DF467C030088EFB134575C71459A3E7DFA057D4FF69F96962C59D2FB78D1A245E21B0000F13DD4BCF6DA6B69F9F2E5E9139FF844FAE52F7F9947F49E3D7BD237BFF9CDFCF8D7BEF6B53473E6CCFCB53D3D3DE92B5FF94A3EF15CBC76DAB469BD8F9F7AEAA97CE2F19B6FBE29BE010010DFE513415DAC5C3736360E38BE72E5CA74E59557F639FECA2BAFA4A54B970E88EF5B6EB925AD5BB7CECA370000E2BBFF1C3E7C38DD7AEBAD7D56BEAFBEFAEA3CACBFFBDDEFE6C7AFBAEAAA3479F2E43EDF17C76EBEF9E6B46FDFBEDE63478E1CC9B79DC4F7886F0000C4F72073ECD8B1FCEB97BEF4A574E38D37E68F0F1C3890AF644750BFF5D65BF9947F4F44F6A73FFDE9347BF6EC7CE5BB7CF57BD6AC59E21B0000F13DD8B4B4B4A4EBAEBB2EFFE0E435D75C934F6767671ED245981F3D7AB4CFF73CF3CC33E21B0000F17DA173EDB5D7A665CB96E5DB4C9A9A9AFAAC7C17DB4A8AAD24FBF7EFCF1FC7D694DB6EBB2D7F7CDF7DF7A5CF7DEE73F9E3D8F3FDC4134FE4DF3B96FF9BC5370080F8BE2413A11C011E2BDF4564C74A771C8F55F03FFCE10FF9E3471E79A4CF07318B89EF8B9573D7F90600407C0F23BEB76DDB967F8D696F6FEFDD6E32D85551FACF73CF3D97AEBFFE7AF10D0080F83ED76CD9B225EDDDBBB7F7CF5BB76E4DBFFAD5AFF22D28719DEF88EA22CAE3CA2883FD8C581DEF7F3514F10D0080F836E21B00407C1BF10D0080F816DF0000886F23BE010010DFE21B0000F16DC4370080F836E21B0000F12DBE010010DF467C030020BEC5370000E2DB886F0000F16DC4370000E25B7C030020BE8DF80600407C8B6F0000C4B711DF0000E2DB886F0000C4B7F80600407C1BF10D0080F816DF0000886F23BE0100C4B711DF0000886FF10D0080F836E21B0000F12DBE010010DF467C03008C63EDEDEDA277EC4C4F16DFA7BD2B0100C6A9F5EBD71FECEEEE16BE6360BABABAFE9CC5F70EEF4A0080716ACD9A3593D7AE5DFBFEBBEFBE7B42005FBA15EF08EFB6B6B6BDD9DCE15D0900308E65C1777B6B6B6B476C79883DC797EBD4D5D55DAE7FF738EF3B84370000978D886F67010000C4370000886F0000407C030080F8060000F10D0000886F000010DF000080F8060000F10D0000E21B000010DF000020BE010000F10D0000E21B0000C437000020BE0100407C030000E21B0000C4370000886F0000407C030080F8060000C4370000886F000010DF000080F8060000F10D0000886F000010DF000020BE010000F10D0000E21B000010DF000020BE0100407C030000E21B0000C437000020BE0100407C030080F8060000C4370000886F0000407C030080F8060000F10D0000886F000010DF000080F8060000F10D0000E21B000010DF000020BE010000F10D00009730B45B22B6CF331DCE1400007CFCF89E94CDE973C5776D6DEDEDCE1400005426C0579E23BE37D5D4D44C74960000A032F13D69A8F82E954ADF72860000A0B2013ED8DEEF0EABDE000050F9F81EB0F7DB5E6F00001821596C2FB3EA0D0000A313DF3795EDF5FE863302000023A8D8FB6DD51B0000463EBE27B9C3250000635E4A69E2EEDDBB976CDEBCF9C3F6F6F6D4DADA7A594EC4F7E5FA776F6B6B4BEBD7AFFF67360DDE910000E35884F7860D1B527777773A75EA94B944F3DE7BEFA575EBD61DCD42FC0EEF4A0080712A56BC85F79809F053ADADAD3BBC2B0100C6A9D86A227CC7CE64F17DDABB1200609C8A3DC7A2774CC5B70F8E0200547B7CFFEBFD836977C7D3697BDB43F9C4E3382698C5370000158CEF6347BAD2B6171E48AFAFB8A7CFC4B1784E348B6F00002A14DFFBB6FF75407817B37F7B8B6816DF0000542ABE77BCF8F090F11DCF8966F10D004085E27B5BEB8343C6773C279AC5370000E25B7C03007079C5775CDD64A8F88EE744B3F80600A042F1BD6BE36343C6773C279AC5370000158AEFC35D9D69DBEAB903B79C64C7E239D12CBE0100A8507CC7ECD9F2EC80F88E6382597C030050C9F83E7932ED7A79C1C02D27D9B1784E348B6F00002A10DF7107CB9D1B1F1D72CF773CE72E97E21B00808F13DF274FA683BBD6A43756FD6CC8F02E265E13AFB50A2EBE0100B8C0F83EDF6AB75570F10D004085E27B38ABDDE75A0517D1E21B008061C6F7C5867731225A7C030030CCF836E21B0000F12DBE010010DF467C030020BEC5370000E2DB886F0000F16DC4370000E25B7C030020BE8DF80600407C8B6F0000C4B711DF0000E2DB886F0000C4B7F80600407C1BF10D0080F816DF0000886F23BE0100C4B711DF0000886FF10D0080F836E21B0000F12DBE010010DF467C030088EF4ACC934F3E9956AC58D1E758F62BD3B265CB2A1AABCB972F4FD3A64DCB271EC7EF78F1C517CFF97DF19ADFFCE637E77DCD9C3973F2C7CF3DF75CEAE9E9E93DBE68D122F10D00C0D889EF88D4EBAFBF3E0FE2ABAFBE3ABDF2CA2BF9B1EF7CE73BBD917CFCF8F174E8D0A174DB6DB7E5C7226A6FBEF9E6545757D71BD5F1F5D9679F4D9FFAD4A706FD1D4B962C396FE0AF5BB7AECFCFBBEAAAABD257BFFAD5FC71CCD2A54BD3B5D75E3BE0E7C4FF40148FE3EF503C8E1817DF00008C89F88E50DDB66D5B7AEAA9A7D2AE5DBBF295E82258CB43B69888F0385EAC94C7E3F8DEF81AC11C51FEC52F7E71D0F8BEE5965B06AC7C6FDCB871C0EBCA8339FE3C6FDEBCDE3F5F71C515E9BEFBEECB1FEFD9B3A7F7E7DC7AEBADF9DF351EBFF5D65BBDDFDBD9D9997F7DE49147C43700009736BE6325390236569723A2236C3FFFF9CFE7C76EB8E186F4A73FFD298FD7FDFBF7F709E278BE781CF11E5FE3B5070E1CC81FEFDBB7AFF7F5EDEDEDF9B1A6A6A63EF11DBF277E47F9DFE7D8B163F9EB8B95EEE2FBE2F1B7BFFDEDFC7B070BFBF295EF2F7CE10B69F5EAD5F9E358258FD5742BDF00005CD2F88E6D24453C3FF3CC3303F6645F73CD35E9CD37DFCC5F13ABE2478F1EED0DE288DD471F7DB4773BC98473AC7C17CFC5E3B7DF7E3BFF99E7DB8E521C2B0FFD952B57A62BAFBC72D0F88E95EF2D5BB6E48F376DDAD47B3CFE8EB69D000070C9E33B2682BA08D52F7FF9CBBDE11D2BE2712C62B9FFCA741C8F95E5E2FB8AD5EE58F98EE723D4FBC771636363EF3697F2801E2ABE638B4AFF95EFD8FF3D79F2E4DED7C59692F8A065BCE689279E1834DCEDF9060060CCC4F750111C570C890F5E0EF5DA62353A22BC88E458F5FEFAD7BF3E606BC884B295EF783C7BF6EC8AC477ACDCC7FF1C4CE8B70DA63CBE8B3DDFE5DB66C4370000973CBE8B95EF62F53B3EDCB875EBD601AFFDEC673F9B6EBCF1C67C2F75F9CA79AC7C0FF5B36325FDF0E1C3F9E39696967CBFF7DEBD7B070DFCD85E3258E8C70729CBB7AC0CB5E73B82BBD882121FCA8C182F2E3F28BE01001893F13DA1DFD5488A55E6B82C616C3589CB0E16971E9C707675BB781CB15DFEF323B4E3F8EF7FFFFBFCCFF181CC86868641AF7832D42A7BFF892D2EC53698D8B35EBC3E26623BBECE9D3B37FF5A5C21457C03003026E23B56A4FB1FEB1FC611BBE55B53CEF533E3F9B87249AC3CC787378B55F2FEBF63D6AC591715DFC5D55A26F4FB9065F1D81D2E01001893F16DC4370000E25B7C030020BEC5370000E2DB886F0000C4B7F80600407C1BF10D0080F816DF0000886FF10D0080F836E21B0000F12DBE010010DF467C030020BEC5370000E25B7C030020BE8DF80600407C8B6F0000C4B711DF0000886FF10D0080F816DF0000886F23BE010010DFE21B0000F16DC4370000E25B7C030020BEC5370000E2DB886F0000C4B7F80600407C1BF10D00C08409EDEDEDA277EC4C4F16DFA7BD2B0100C6A9F5EBD71FECEEEE16BE6360BABABAFE9CC5F70EEF4A0080716ACD9A3593D7AE5DFBFEBBEFBE7B42005FBA15EF08EFB6B6B6BDD9DCE15D0900308E65C1777B6B6B6B476C79883DC797E3D4D5D5A5CBF5EF7EF6BCEF10DE00005C1622BE9D05000010DF000020BE010000F10D0000E21B0000C437000020BE0100407C030000E21B0000C4370000886F0000407C030080F8060000C4370000886F000010DF000080F8060000F10D0000886F000010DF000020BE010000F10D0000E21B000010DF000020BE0100407C030000E21B0000C437000020BE0100407C030080F8060000C4370000886F0000407C030080F8060000F10D0000886F000010DF000080F8060000F10D0000E21B000010DF000020BE010000F10D0000E21B0000C437000020BE0100407C030000E21B00002E6568B7446C9F673A9C290000F8F8F13D299BD3E78AEFDADADADB9D290000A84C80AF3C477C6FAAA9A999E82C01004065E27BD250F15D2A95BEE50C01004065037CB0BDDF1D56BD0100A0F2F13D60EFB7BDDE00003042B2D85E66D51B00004627BE6F2ADBEBFD0D670400004650B1F7DBAA37000054587D7DFD7F65B1FD60A9545A9C7D7D239BE36757BF7BCEFE794936F36255DCD90200800BD4D8D8F8C92CA6EFCC82FB1FC3B8BB65F90730FF967D9D3965CA94CF388B0000701EB1973B9B772E24BA07997DD9D4389B0000308858EDCE82F9E92CBCCF948774763C3DF6D86369E3C68DA9ABAB2B1D3F7E3C859E9E9ED4DDDD9DB66EDD9A162C58909A9A9A068BF03FC6CF75760100E0ACF8F06416CA2F9587F3CC9933D3AA55ABD2071F7C9086E3CC9933A9B5B535FFBE7E01BEC43614000098D0BBE2DD27BC172E5CD8BBC27DA162457CF1E2C50302DCD5510000A87AB1D5A43C945B5A5A5225C42AF8D4A953FB6C4171B60100A85A673F5C79A6D2E15D1EE0FD56C06B9C750000AA4E6C3729BFAA496C351909FDB6A0ECB3FF1B0080AA13D7F12EFF70E5C5EEF11ECE1EF07E1FC29CE3EC03005055CA6FA01357351949FDB69FECF1E14B0000AAC6D95BC6F75EC77BB89713BC587119C21FFCE007E577C2742B7A0000AA4316C00F16211C37D0190D8F3FFE78F9EAF73CFF0A0000548552A9B4B808E1CD9B378F4A7CC79D30CBAFFBED5F010080AA90C5EF1B45081F3C787054E23B6E455F16DF3BFC2B0000502DF1DD5384F0485DE564B0AB9E94C5778F7F050000AA25BE7B43783495FF5EFF0A0000544B7C1FB3F20D0000A3A0B6B6F66FF67C0300C02870B5130000182559FCDEEF3ADF0000300A2EC51D2EA74F9FFE913B5C02005095B208EE286278D5AA55231ADFADADADE5ABDE7B6A6A6A26FA170000A06A944AA5E94510CF9C3973C4AE7A125739696E6EFEB02CBEE738FB00005495C6C6C64FC62A7411C50B172E1C91F85EBC7871F9AAF7BE2953A67CC6D90700A0EA64315C93CDE9228E9F7FFEF98A86F79A356BFADC58277E9FB30E00403507F8D3E5815CA9008FF09E366DDA99B29FFD47671B0080AA161F7E8C302E0FF0D882127BB52F768F77BFAD26F975BD639B8BB30D008000CF02BCFCC63BC58730E32A287199C0E15E4E3056BBFB7DB8320F6FFBBC0100A05F809FDD8272BA3C9EE33AE00B162C481D1D1DF9ADE88BABA2C40A77DC32BEB3B333BF814E16DD1FF58BEE7CAB89156F000018C2D90F61EE1924A42F64F6F9702500000C43AC56D7D6D6DE9905F4AE0B8CEE88F639B6990000C045C8627A5236F7C79EF02CC8FF963DEE391BDAF17547ECE9CE9EFB9FB865BC3B57020000000000000000000000000000000000000000000085FF0726F9FEF5CCE114690000000049454E44AE426082, 1); +INSERT INTO `act_ge_bytearray` VALUES ('30', 1, '资产设备报废.bpmn', '29', 0x3C3F786D6C2076657273696F6E3D22312E302220656E636F64696E673D225554462D38223F3E0D0A3C646566696E6974696F6E7320786D6C6E733D22687474703A2F2F7777772E6F6D672E6F72672F737065632F42504D4E2F32303130303532342F4D4F44454C2220786D6C6E733A7873693D22687474703A2F2F7777772E77332E6F72672F323030312F584D4C536368656D612D696E7374616E63652220786D6C6E733A7873643D22687474703A2F2F7777772E77332E6F72672F323030312F584D4C536368656D612220786D6C6E733A61637469766974693D22687474703A2F2F61637469766974692E6F72672F62706D6E2220786D6C6E733A62706D6E64693D22687474703A2F2F7777772E6F6D672E6F72672F737065632F42504D4E2F32303130303532342F44492220786D6C6E733A6F6D6764633D22687474703A2F2F7777772E6F6D672E6F72672F737065632F44442F32303130303532342F44432220786D6C6E733A6F6D6764693D22687474703A2F2F7777772E6F6D672E6F72672F737065632F44442F32303130303532342F44492220747970654C616E67756167653D22687474703A2F2F7777772E77332E6F72672F323030312F584D4C536368656D61222065787072657373696F6E4C616E67756167653D22687474703A2F2F7777772E77332E6F72672F313939392F585061746822207461726765744E616D6573706163653D22687474703A2F2F7777772E61637469766974692E6F72672F70726F63657373646566223E0D0A20203C70726F636573732069643D2265616D5F61737365745F736372617022206E616D653D22E8B584E4BAA7E8AEBEE5A487E68AA5E5BA9F2220697345786563757461626C653D2274727565223E0D0A202020203C73746172744576656E742069643D227369642D33386161356139372D323537332D343164652D616639342D38386237356464653866346322206E616D653D22E5BC80E5A78B222F3E0D0A202020203C757365725461736B2069643D227369642D65626463326162652D303165622D346430342D613935382D333463353330326535626261222061637469766974693A61737369676E65653D22237B61737369676E65657D22206E616D653D22E7AEA1E79086E59198E5AEA1E689B9222F3E0D0A202020203C656E644576656E742069643D227369642D33663532643231622D313637392D346436382D383161332D64383261303431643766333422206E616D653D22E7BB93E69D9F222F3E0D0A202020203C73657175656E6365466C6F772069643D227369642D63646461393630302D636530662D343536332D616230312D3536393163363535336166382220736F757263655265663D227369642D33386161356139372D323537332D343164652D616639342D38386237356464653866346322207461726765745265663D227369642D35623330666433622D623163612D343930392D386636372D633362353237663461343261222F3E0D0A202020203C73657175656E6365466C6F772069643D227369642D38346336393936662D616266622D346635312D393737642D6233653939373431313038342220736F757263655265663D227369642D65626463326162652D303165622D346430342D613935382D33346335333032653562626122207461726765745265663D227369642D33663532643231622D313637392D346436382D383161332D643832613034316437663334222F3E0D0A202020203C757365725461736B2069643D227369642D35623330666433622D623163612D343930392D386636372D63336235323766346134326122206E616D653D22E8B5B7E88D89222F3E0D0A202020203C73657175656E6365466C6F772069643D227369642D35306434346164612D666338372D346364612D393438392D6138663166653738643566612220736F757263655265663D227369642D35623330666433622D623163612D343930392D386636372D63336235323766346134326122207461726765745265663D227369642D65626463326162652D303165622D346430342D613935382D333463353330326535626261222F3E0D0A20203C2F70726F636573733E0D0A20203C62706D6E64693A42504D4E4469616772616D2069643D2242504D4E4469616772616D5F74657374223E0D0A202020203C62706D6E64693A42504D4E506C616E652062706D6E456C656D656E743D2274657374222069643D2242504D4E506C616E655F74657374223E0D0A2020202020203C62706D6E64693A42504D4E53686170652069643D2273686170652D64643531363464352D386330362D343537302D393466622D346565346233333633656538222062706D6E456C656D656E743D227369642D33386161356139372D323537332D343164652D616639342D383862373564646538663463223E0D0A20202020202020203C6F6D6764633A426F756E647320783D223636302E302220793D222D3231352E30222077696474683D2233302E3022206865696768743D2233302E30222F3E0D0A2020202020203C2F62706D6E64693A42504D4E53686170653E0D0A2020202020203C62706D6E64693A42504D4E53686170652069643D2273686170652D39376136303639362D393930392D343536312D626163612D306539346262353933326435222062706D6E456C656D656E743D227369642D65626463326162652D303165622D346430342D613935382D333463353330326535626261223E0D0A20202020202020203C6F6D6764633A426F756E647320783D223632352E302220793D2231302E343335393336222077696474683D223130302E3022206865696768743D2238302E30222F3E0D0A2020202020203C2F62706D6E64693A42504D4E53686170653E0D0A2020202020203C62706D6E64693A42504D4E53686170652069643D2273686170652D39616566633864642D396566352D343830312D626161302D666339323337373762666334222062706D6E456C656D656E743D227369642D33663532643231622D313637392D346436382D383161332D643832613034316437663334223E0D0A20202020202020203C6F6D6764633A426F756E647320783D223636302E302220793D223135302E30222077696474683D2233302E3022206865696768743D2233302E30222F3E0D0A2020202020203C2F62706D6E64693A42504D4E53686170653E0D0A2020202020203C62706D6E64693A42504D4E456467652069643D22656467652D62666436376533332D383836342D346531392D626262392D363162643562636331363530222062706D6E456C656D656E743D227369642D63646461393630302D636530662D343536332D616230312D353639316336353533616638223E0D0A20202020202020203C6F6D6764693A776179706F696E7420783D223637352E302220793D222D3138352E30222F3E0D0A20202020202020203C6F6D6764693A776179706F696E7420783D223637342E393939392220793D222D3133352E30222F3E0D0A2020202020203C2F62706D6E64693A42504D4E456467653E0D0A2020202020203C62706D6E64693A42504D4E456467652069643D22656467652D62313564303134392D326137382D346564352D393562642D613863326261396338376265222062706D6E456C656D656E743D227369642D38346336393936662D616266622D346635312D393737642D623365393937343131303834223E0D0A20202020202020203C6F6D6764693A776179706F696E7420783D223637352E302220793D2239302E3433353934222F3E0D0A20202020202020203C6F6D6764693A776179706F696E7420783D223637352E302220793D223135302E30222F3E0D0A2020202020203C2F62706D6E64693A42504D4E456467653E0D0A2020202020203C62706D6E64693A42504D4E53686170652069643D2273686170652D38356466613065622D306631322D343562322D386138632D373635376565626665366137222062706D6E456C656D656E743D227369642D35623330666433622D623163612D343930392D386636372D633362353237663461343261223E0D0A20202020202020203C6F6D6764633A426F756E647320783D223632342E39393939342220793D222D3133352E30222077696474683D223130302E3022206865696768743D2238302E30222F3E0D0A2020202020203C2F62706D6E64693A42504D4E53686170653E0D0A2020202020203C62706D6E64693A42504D4E456467652069643D22656467652D33363765346630642D373063362D343133332D623833342D373139663166336666616130222062706D6E456C656D656E743D227369642D35306434346164612D666338372D346364612D393438392D613866316665373864356661223E0D0A20202020202020203C6F6D6764693A776179706F696E7420783D223637342E39393939342220793D222D35352E30222F3E0D0A20202020202020203C6F6D6764693A776179706F696E7420783D223637352E302220793D2231302E343335393336222F3E0D0A2020202020203C2F62706D6E64693A42504D4E456467653E0D0A202020203C2F62706D6E64693A42504D4E506C616E653E0D0A20203C2F62706D6E64693A42504D4E4469616772616D3E0D0A3C2F646566696E6974696F6E733E0D0A, 0); +INSERT INTO `act_ge_bytearray` VALUES ('31', 1, '资产设备报废.eam_asset_scrap.png', '29', 0x89504E470D0A1A0A0000000D49484452000002DF00000195080600000026219D53000016EC4944415478DAEDDD7F6C95F5BDC0719261B2654BCC922D8BF12E5E738DD7BF961BC3328D99694C966D89095B266B4F6958D331CA76D53186896E1A8C6CB9B81FD98C264C63541C77CC10C2582F82B4457E88108B0E2B8883091228601D41C2A020E8F73E9F273CCDE92F28785A4ACFEB957CD2C3734E5B7C387FBCFDE67B9E67C2040000186129A54F767676362F5CB870DDFCF9F38FDE7DF7DDA71B1B1B535D5D5D6A6868F8E8873FFCE1A99FFFFCE7BB1F7EF8E145D9FCA7330600001711DD4B972E7D76DEBC79A767CD9A951E7FFCF1B479F3E6D4D5D5957A7A7A5288AFDDDDDDE9D5575F4D599CA71FFFF8C71FFDE4273F7967C68C19D39D41000018862CB29B7EF18B5F9CBCE79E7BF2B03E73E64C1AAEAD5BB7A67BEFBDF74C7373F38E2953A65CE76C0200C020B2769EB87CF9F2353367CE4C2D2D2D1714DDFDAD5AB52A3535359DB00A0E00008384F7DAB56B5FB9EBAEBBD2CE9D3B5325BCF3CE3B290BF913D3A74FFF6F67180000CE8A15EF08EFD8C35D49F1F366CC9871AC542A3538CB000054BDD8E31D5B4D2AB5E23DD80AF8B469D38E64017E83B30D0040D58AAB9A3CF4D043A7628FF7485AB162C589A953A76E72C60100A85ACB962DFBDFB8AAC9071F7C9046DA8F7EF4A343B69F0000509562D53BAEE31D97131C0DAFBFFEFA29ABDF000054A5B873657CC8F2E35C52F0423535351DAAABABFB77671F0080AA12B78C7FF2C927D368FADDEF7EB7358BEF39CE3E00005565FEFCF947E396F1A3E9E5975F7E278BEF16671F0080AA72F7DD779F3E78F0E0A8C6F7A14387BAB3F8DEE7EC030050551A1B1B534F4FCFA8C677FCBE2CBE7B9C7D0000AA4A16C1E95288DFEBEC03005055BEF7BDEF7D34DA2BDF274E9C3864E51B0080AA73D75D779D1AED3DDF070E1CF8BB3DDF0000549D071E7860D7685FEDE485175E78DED54E0000A83ABFFEF5AF9F1CEDEB7CCF9D3B7785EB7C03005075EEBFFFFEFFB8F3CE3B3F1CC53B5CF6D4D7D7BFED0E97000054A5D9B367FFE3D5575F1DAD2D278BB2F0DEE0AC03005095BEFFFDEF4FF9E94F7F7A7A1456BF8FD4D7D7BF562A951A9C750000AA56737373674B4BCB889677EC2F8F55EF9A9A9A89CE380000552BF6603735359DD8B973E78884776767E7F2EC771C2C954A3738DB000054BD868686A9CDCDCDC7BBBBBB2B1ADEFBF7EF7FA9BEBE7EAFED2600005066EAD4A94D3366CC3856A915F058F18EF0AEADADBDD7D90500807EB250AE6B686838FA97BFFCE55F1FE34398477EFBDBDF3E1D5B4DB269745601006008B107BCBEBEBEBDB9B9F9D06BAFBD76E242AEE3BD7AF5EAC559BC77C4872BEDF1060080E147F81D11E18D8D8DDDF3E7CFDFFED24B2FEDEDEAEA3AD8D3D39397F68913270E1D3870E0EF6D6D6DFFF7E0830FAE9C3A75EAEE88EE58ED7655130000B8085954FF5BA9549A9545F5926CF664D3934D3AFB755F362D71CB7877AE0400801110F1ED2C000080F8060000F10D0000886F000010DF000020BE010000F10D0000E21B000010DF000020BE0100407C030000E21B0000C437000020BE0100407C030080F8060000C4370000886F0000407C030080F8060000F10D0000886F000010DF000080F8060000F10D0000E21B000010DF000020BE010000F10D0000E21B0000C437000020BE0100407C030000E21B0000C4370000886F0000407C030080F8060000C43700005CDAD06E89D83ECF7438530000F0F1E37B5236A7CF15DFB5B5B5B73B5300005099005F798EF8DE54535333D159020080CAC4F7A4A1E2BB542A7DCB19020080CA06F8607BBF3BAC7A030040E5E37BC0DE6F7BBD0100608464B1BDCCAA3700008C4E7CDF54B6D7FB1BCE0800008CA062EFB7556F000018F9F89EE40E9700008C6929A589BB77EF5EB279F3E60FDBDBDB536B6BAB19E5696B6B4BEBD7AFFF67360DDE910000E35884F7860D1B527777773A75EA94B944F3DE7BEFA575EBD61DCD42FC0EEF4A0080712A56BC85F79809F053ADADAD3BBC2B0100C6A9D86A227CC7CE64F17DDABB1200609C8A3DC7A2774CC5B70F8D0200547B7CFFEBFD836977C7D3697BDB43F9C4E3382698C5370000158CEF6347BAD2B6171E48AFAFB8A7CFC4B1784E348B6F00002A14DFFBB6FF75407817B37F7B8B6816DF0000542ABE77BCF8F090F11DCF8966F10D004085E27B5BEB8343C6773C279AC5370000E25B7C03007079C5775CDD64A8F88EE744B3F80600A042F1BD6BE36343C6773C279AC5370000158AEFC35D9D69DBEAB903B79C64C7E239D12CBE0100A8507CC7ECD9F2EC80F88E6382597C030050C9F83E7932ED7A79C1C02D27D9B1784E348B6F00002A10DF7107CB9D1B1F1D72CF773CE72E97E21B00808F13DF274FA683BBD6A43756FD6CC8F02E265E13AFB50A2EBE0100B8C0F83EDF6AB75570F10D004085E27B38ABDDE75A0517D1E21B008061C6F7C5867731225A7C030030CCF836E21B0000F12DBE010010DF467C030020BEC5370000E2DB886F0000F16DC4370000E25B7C030020BE8DF80600407C8B6F0000C4B711DF0000E2DB886F0000C4B7F80600407C1BF10D0080F816DF0000886F23BE0100C4B711DF0000886FF10D0080F836E21B0000F12DBE010010DF467C030088EFB134575C71459A3E7DFA057D4FF69F96962C59D2FB78D1A245E21B0000F13DD4BCF6DA6B69F9F2E5E9139FF844FAE52F7F9947F49E3D7BD237BFF9CDFCF8D7BEF6B53473E6CCFCB53D3D3DE92B5FF94A3EF15CBC76DAB469BD8F9F7AEAA97CE2F19B6FBE29BE010010DFE513415DAC5C3736360E38BE72E5CA74E59557F639FECA2BAFA4A54B970E88EF5B6EB925AD5BB7CECA370000E2BBFF1C3E7C38DD7AEBAD7D56BEAFBEFAEA3CACBFFBDDEFE6C7AFBAEAAA3479F2E43EDF17C76EBEF9E6B46FDFBEDE63478E1CC9B79DC4F7886F0000C4F72073ECD8B1FCEB97BEF4A574E38D37E68F0F1C3890AF644750BFF5D65BF9947F4F44F6A73FFDE9347BF6EC7CE5BB7CF57BD6AC59E21B0000F13DD8B4B4B4A4EBAEBB2EFFE0E435D75C934F6767671ED245981F3D7AB4CFF73CF3CC33E21B0000F17DA173EDB5D7A665CB96E5DB4C9A9A9AFAAC7C17DB4A8AAD24FBF7EFCF1FC7D694DB6EBB2D7F7CDF7DF7A5CF7DEE73F9E3D8F3FDC4134FE4DF3B96FF9BC5370080F8BE2413A11C011E2BDF4564C74A771C8F55F03FFCE10FF9E3471E79A4CF07318B89EF8B9573D7F90600407C0F23BEB76DDB967F8D696F6FEFDD6E32D85551FACF73CF3D97AEBFFE7AF10D0080F83ED76CD9B225EDDDBBB7F7CF5BB76E4DBFFAD5AFF22D28719DEF88EA22CAE3CA2883FD8C581DEF7F3514F10D0080F836E21B00407C1BF10D0080F816DF0000886F23BE010010DFE21B0000F16DC4370080F836E21B0000F12DBE010010DF467C030020BEC5370000E2DB886F0000F16DC4370000E25B7C030020BE8DF80600407C8B6F0000C4B711DF0000E2DB886F0000C4B7F80600407C1BF10D0080F816DF0000886F23BE0100C4B711DF0000886FF10D0080F836E21B0000F12DBE010010DF467C03008C63EDEDEDA277EC4C4F16DFA7BD2B0100C6A9F5EBD71FECEEEE16BE6360BABABAFE9CC5F70EEF4A0080716ACD9A3593D7AE5DFBFEBBEFBE7B42005FBA15EF08EFB6B6B6BDD9DCE15D0900308E65C1777B6B6B6B476C79883DC797EBD4D5D55DAE7FF738EF3B84370000978D886F67010000C4370000886F0000407C030080F8060000F10D0000886F000010DF000080F8060000F10D0000E21B000010DF000020BE010000F10D0000E21B0000C437000020BE0100407C030000E21B0000C4370000886F0000407C030080F8060000C4370000886F000010DF000080F8060000F10D0000886F000010DF000020BE010000F10D0000E21B000010DF000020BE0100407C030000E21B0000C437000020BE0100407C030080F8060000C4370000886F0000407C030080F8060000F10D0000886F000010DF000080F8060000F10D0000E21B000010DF000020BE010000F10D00009730B45B22B6CF331DCE1400007CFCF89E94CDE973C5776D6DEDEDCE1400005426C0579E23BE37D5D4D44C74960000A032F13D69A8F82E954ADF72860000A0B2013ED8DEEF0EABDE000050F9F81EB0F7DB5E6F00001821596C2FB3EA0D0000A313DF3795EDF5FE863302000023A8D8FB6DD51B0000463EBE27B9C3250000635E4A69E2EEDDBB976CDEBCF9C3F6F6F6D4DADA7A594EC4F7E5FA776F6B6B4BEBD7AFFF67360DDE910000E35884F7860D1B527777773A75EA94B944F3DE7BEFA575EBD61DCD42FC0EEF4A0080712A56BC85F79809F053ADADAD3BBC2B0100C6A9D86A227CC7CE64F17DDABB1200609C8A3DC7A2774CC5B70F8E0200547B7CFFEBFD836977C7D3697BDB43F9C4E3382698C5370000158CEF6347BAD2B6171E48AFAFB8A7CFC4B1784E348B6F00002A14DFFBB6FF75407817B37F7B8B6816DF0000542ABE77BCF8F090F11DCF8966F10D004085E27B5BEB8343C6773C279AC5370000E25B7C03007079C5775CDD64A8F88EE744B3F80600A042F1BD6BE36343C6773C279AC5370000158AEFC35D9D69DBEAB903B79C64C7E239D12CBE0100A8507CC7ECD9F2EC80F88E6382597C030050C9F83E7932ED7A79C1C02D27D9B1784E348B6F00002A10DF7107CB9D1B1F1D72CF773CE72E97E21B00808F13DF274FA683BBD6A43756FD6CC8F02E265E13AFB50A2EBE0100B8C0F83EDF6AB75570F10D004085E27B38ABDDE75A0517D1E21B008061C6F7C5867731225A7C030030CCF836E21B0000F12DBE010010DF467C030020BEC5370000E2DB886F0000F16DC4370000E25B7C030020BE8DF80600407C8B6F0000C4B711DF0000E2DB886F0000C4B7F80600407C1BF10D0080F816DF0000886F23BE0100C4B711DF0000886FF10D0080F836E21B0000F12DBE010010DF467C030088EF4ACC934F3E9956AC58D1E758F62BD3B265CB2A1AABCB972F4FD3A64DCB271EC7EF78F1C517CFF97DF19ADFFCE637E77DCD9C3973F2C7CF3DF75CEAE9E9E93DBE68D122F10D00C0D889EF88D4EBAFBF3E0FE2ABAFBE3ABDF2CA2BF9B1EF7CE73BBD917CFCF8F174E8D0A174DB6DB7E5C7226A6FBEF9E6545757D71BD5F1F5D9679F4D9FFAD4A706FD1D4B962C396FE0AF5BB7AECFCFBBEAAAABD257BFFAD5FC71CCD2A54BD3B5D75E3BE0E7C4FF40148FE3EF503C8E1817DF00008C89F88E50DDB66D5B7AEAA9A7D2AE5DBBF295E82258CB43B69888F0385EAC94C7E3F8DEF81AC11C51FEC52F7E71D0F8BEE5965B06AC7C6FDCB871C0EBCA8339FE3C6FDEBCDE3F5F71C515E9BEFBEECB1FEFD9B3A7F7E7DC7AEBADF9DF351EBFF5D65BBDDFDBD9D9997F7DE49147C43700009736BE6325390236569723A2236C3FFFF9CFE7C76EB8E186F4A73FFD298FD7FDFBF7F709E278BE781CF11E5FE3B5070E1CC81FEFDBB7AFF7F5EDEDEDF9B1A6A6A63EF11DBF277E47F9DFE7D8B163F9EB8B95EEE2FBE2F1B7BFFDEDFC7B070BFBF295EF2F7CE10B69F5EAD5F9E358258FD5742BDF00005CD2F88E6D24453C3FF3CC3303F6645F73CD35E9CD37DFCC5F13ABE2478F1EED0DE288DD471F7DB4773BC98473AC7C17CFC5E3B7DF7E3BFF99E7DB8E521C2B0FFD952B57A62BAFBC72D0F88E95EF2D5BB6E48F376DDAD47B3CFE8EB69D000070C9E33B2682BA08D52F7FF9CBBDE11D2BE2712C62B9FFCA741C8F95E5E2FB8AD5EE58F98EE723D4FBC771636363EF3697F2801E2ABE638B4AFF95EFD8FF3D79F2E4DED7C59692F8A065BCE689279E1834DCEDF9060060CCC4F750111C570C890F5E0EF5DA62353A22BC88E458F5FEFAD7BF3E606BC884B295EF783C7BF6EC8AC477ACDCC7FF1C4CE8B70DA63CBE8B3DDFE5DB66C4370000973CBE8B95EF62F53B3EDCB875EBD601AFFDEC673F9B6EBCF1C67C2F75F9CA79AC7C0FF5B36325FDF0E1C3F9E39696967CBFF7DEBD7B070DFCD85E3258E8C70729CBB7AC0CB5E73B82BBD882121FCA8C182F2E3F28BE01001893F13DA1DFD5488A55E6B82C616C3589CB0E16971E9C707675BB781CB15DFEF323B4E3F8EF7FFFFBFCCFF181CC86868641AF7832D42A7BFF892D2EC53698D8B35EBC3E26623BBECE9D3B37FF5A5C21457C03003026E23B56A4FB1FEB1FC611BBE55B53CEF533E3F9B87249AC3CC787378B55F2FEBF63D6AC591715DFC5D55A26F4FB9065F1D81D2E01001893F16DC4370000E25B7C030020BEC5370000E2DB886F0000C4B7F80600407C1BF10D0080F816DF0000886FF10D0080F836E21B0000F12DBE010010DF467C030020BEC5370000E25B7C030020BE8DF80600407C8B6F0000C4B711DF0000886FF10D0080F816DF0000886F23BE010010DFE21B0000F16DC4370000E25B7C030020BEC5370000E2DB886F0000C4B7F80600407C1BF10D00C08409EDEDEDA277EC4C4F16DFA7BD2B0100C6A9F5EBD71FECEEEE16BE6360BABABAFE9CC5F70EEF4A0080716ACD9A3593D7AE5DFBFEBBEFBE7B42005FBA15EF08EFB6B6B6BDD9DCE15D0900308E65C1777B6B6B6B476C79883DC797E3D4D5D5A5CBF5EF7EF6BCEF10DE00005C1622BE9D05000010DF000020BE010000F10D0000E21B0000C437000020BE0100407C030000E21B0000C4370000886F0000407C030080F8060000C4370000886F000010DF000080F8060000F10D0000886F000010DF000020BE010000F10D0000E21B000010DF000020BE0100407C030000E21B0000C437000020BE0100407C030080F8060000C4370000886F0000407C030080F8060000F10D0000886F000010DF000080F8060000F10D0000E21B000010DF000020BE010000F10D0000E21B0000C437000020BE0100407C030000E21B00002E6568B7446C9F673A9C290000F8F8F13D299BD3E78AEFDADADADB9D290000A84C80AF3C477C6FAAA9A999E82C01004065E27BD250F15D2A95BEE50C01004065037CB0BDDF1D56BD0100A0F2F13D60EFB7BDDE00003042B2D85E66D51B00004627BE6F2ADBEBFD0D670400004650B1F7DBAA37000054587D7DFD7F65B1FD60A9545A9C7D7D239BE36757BF7BCEFE794936F36255DCD90200800BD4D8D8F8C92CA6EFCC82FB1FC3B8BB65F90730FF967D9D3965CA94CF388B0000701EB1973B9B772E24BA07997DD9D4389B0000308858EDCE82F9E92CBCCF948774763C3DF6D86369E3C68DA9ABAB2B1D3F7E3C859E9E9ED4DDDD9DB66EDD9A162C58909A9A9A068BF03FC6CF75760100E0ACF8F06416CA2F9587F3CC9933D3AA55ABD2071F7C9086E3CC9933A9B5B535FFBE7E01BEC43614000098D0BBE2DD27BC172E5CD8BBC27DA162457CF1E2C50302DCD5510000A87AB1D5A43C945B5A5A5225C42AF8D4A953FB6C4171B60100A85A673F5C79A6D2E15D1EE0FD56C06B9C750000AA4E6C3729BFAA496C351909FDB6A0ECB3FF1B0080AA13D7F12EFF70E5C5EEF11ECE1EF07E1FC29CE3EC03005055CA6FA01357351949FDB69FECF1E14B0000AAC6D95BC6F75EC77BB89713BC587119C21FFCE007E577C2742B7A0000AA4316C00F16211C37D0190D8F3FFE78F9EAF73CFF0A0000548552A9B4B808E1CD9B378F4A7CC79D30CBAFFBED5F010080AA90C5EF1B45081F3C787054E23B6E455F16DF3BFC2B0000502DF1DD5384F0485DE564B0AB9E94C5778F7F050000AA25BE7B43783495FF5EFF0A0000544B7C1FB3F20D0000A3A0B6B6F66FF67C0300C02870B5130000182559FCDEEF3ADF0000300A2EC51D2EA74F9FFE913B5C02005095B208EE286278D5AA55231ADFADADADE5ABDE7B6A6A6A26FA170000A06A944AA5E94510CF9C3973C4AE7A125739696E6EFEB02CBEE738FB00005495C6C6C64FC62A7411C50B172E1C91F85EBC7871F9AAF7BE2953A67CC6D90700A0EA64315C93CDE9228E9F7FFEF98A86F79A356BFADC58277E9FB30E00403507F8D3E5815CA9008FF09E366DDA99B29FFD47671B0080AA161F7E8C302E0FF0D882127BB52F768F77BFAD26F975BD639B8BB30D008000CF02BCFCC63BC58730E32A287199C0E15E4E3056BBFB7DB8320F6FFBBC0100A05F809FDD8272BA3C9EE33AE00B162C481D1D1DF9ADE88BABA2C40A77DC32BEB3B333BF814E16DD1FF58BEE7CAB89156F000018C2D90F61EE1924A42F64F6F9702500000C43AC56D7D6D6DE9905F4AE0B8CEE88F639B6990000C045C8627A5236F7C79EF02CC8FF963DEE391BDAF17547ECE9CE9EFB9FB865BC3B57020000000000000000000000000000000000000000000085FF0726F9FEF5CCE114690000000049454E44AE426082, 1); +INSERT INTO `act_ge_bytearray` VALUES ('6', 1, '物品领用申请.bpmn', '5', 0x3C3F786D6C2076657273696F6E3D22312E302220656E636F64696E673D225554462D38223F3E0D0A3C646566696E6974696F6E7320786D6C6E733D22687474703A2F2F7777772E6F6D672E6F72672F737065632F42504D4E2F32303130303532342F4D4F44454C2220786D6C6E733A7873693D22687474703A2F2F7777772E77332E6F72672F323030312F584D4C536368656D612D696E7374616E63652220786D6C6E733A7873643D22687474703A2F2F7777772E77332E6F72672F323030312F584D4C536368656D612220786D6C6E733A61637469766974693D22687474703A2F2F61637469766974692E6F72672F62706D6E2220786D6C6E733A62706D6E64693D22687474703A2F2F7777772E6F6D672E6F72672F737065632F42504D4E2F32303130303532342F44492220786D6C6E733A6F6D6764633D22687474703A2F2F7777772E6F6D672E6F72672F737065632F44442F32303130303532342F44432220786D6C6E733A6F6D6764693D22687474703A2F2F7777772E6F6D672E6F72672F737065632F44442F32303130303532342F44492220747970654C616E67756167653D22687474703A2F2F7777772E77332E6F72672F323030312F584D4C536368656D61222065787072657373696F6E4C616E67756167653D22687474703A2F2F7777772E77332E6F72672F313939392F585061746822207461726765744E616D6573706163653D22687474703A2F2F7777772E61637469766974692E6F72672F70726F63657373646566223E0D0A20203C70726F636573732069643D2265616D5F61737365745F73746F636B5F676F6F64735F75736522206E616D653D22E789A9E59381E9A286E794A8E794B3E8AFB72220697345786563757461626C653D2274727565223E0D0A202020203C73746172744576656E742069643D227369642D33386161356139372D323537332D343164652D616639342D38386237356464653866346322206E616D653D22E5BC80E5A78B222F3E0D0A202020203C757365725461736B2069643D227369642D65626463326162652D303165622D346430342D613935382D333463353330326535626261222061637469766974693A61737369676E65653D22237B61737369676E65657D22206E616D653D22E7AEA1E79086E59198E5AEA1E689B9222F3E0D0A202020203C656E644576656E742069643D227369642D33663532643231622D313637392D346436382D383161332D64383261303431643766333422206E616D653D22E7BB93E69D9F222F3E0D0A202020203C73657175656E6365466C6F772069643D227369642D63646461393630302D636530662D343536332D616230312D3536393163363535336166382220736F757263655265663D227369642D33386161356139372D323537332D343164652D616639342D38386237356464653866346322207461726765745265663D227369642D35623330666433622D623163612D343930392D386636372D633362353237663461343261222F3E0D0A202020203C73657175656E6365466C6F772069643D227369642D38346336393936662D616266622D346635312D393737642D6233653939373431313038342220736F757263655265663D227369642D65626463326162652D303165622D346430342D613935382D33346335333032653562626122207461726765745265663D227369642D33663532643231622D313637392D346436382D383161332D643832613034316437663334222F3E0D0A202020203C757365725461736B2069643D227369642D35623330666433622D623163612D343930392D386636372D63336235323766346134326122206E616D653D22E8B5B7E88D89222F3E0D0A202020203C73657175656E6365466C6F772069643D227369642D35306434346164612D666338372D346364612D393438392D6138663166653738643566612220736F757263655265663D227369642D35623330666433622D623163612D343930392D386636372D63336235323766346134326122207461726765745265663D227369642D65626463326162652D303165622D346430342D613935382D333463353330326535626261222F3E0D0A20203C2F70726F636573733E0D0A20203C62706D6E64693A42504D4E4469616772616D2069643D2242504D4E4469616772616D5F74657374223E0D0A202020203C62706D6E64693A42504D4E506C616E652062706D6E456C656D656E743D2274657374222069643D2242504D4E506C616E655F74657374223E0D0A2020202020203C62706D6E64693A42504D4E53686170652069643D2273686170652D64643531363464352D386330362D343537302D393466622D346565346233333633656538222062706D6E456C656D656E743D227369642D33386161356139372D323537332D343164652D616639342D383862373564646538663463223E0D0A20202020202020203C6F6D6764633A426F756E647320783D223636302E302220793D222D3231352E30222077696474683D2233302E3022206865696768743D2233302E30222F3E0D0A2020202020203C2F62706D6E64693A42504D4E53686170653E0D0A2020202020203C62706D6E64693A42504D4E53686170652069643D2273686170652D39376136303639362D393930392D343536312D626163612D306539346262353933326435222062706D6E456C656D656E743D227369642D65626463326162652D303165622D346430342D613935382D333463353330326535626261223E0D0A20202020202020203C6F6D6764633A426F756E647320783D223632352E302220793D2231302E343335393336222077696474683D223130302E3022206865696768743D2238302E30222F3E0D0A2020202020203C2F62706D6E64693A42504D4E53686170653E0D0A2020202020203C62706D6E64693A42504D4E53686170652069643D2273686170652D39616566633864642D396566352D343830312D626161302D666339323337373762666334222062706D6E456C656D656E743D227369642D33663532643231622D313637392D346436382D383161332D643832613034316437663334223E0D0A20202020202020203C6F6D6764633A426F756E647320783D223636302E302220793D223135302E30222077696474683D2233302E3022206865696768743D2233302E30222F3E0D0A2020202020203C2F62706D6E64693A42504D4E53686170653E0D0A2020202020203C62706D6E64693A42504D4E456467652069643D22656467652D62666436376533332D383836342D346531392D626262392D363162643562636331363530222062706D6E456C656D656E743D227369642D63646461393630302D636530662D343536332D616230312D353639316336353533616638223E0D0A20202020202020203C6F6D6764693A776179706F696E7420783D223637352E302220793D222D3138352E30222F3E0D0A20202020202020203C6F6D6764693A776179706F696E7420783D223637342E393939392220793D222D3133352E30222F3E0D0A2020202020203C2F62706D6E64693A42504D4E456467653E0D0A2020202020203C62706D6E64693A42504D4E456467652069643D22656467652D62313564303134392D326137382D346564352D393562642D613863326261396338376265222062706D6E456C656D656E743D227369642D38346336393936662D616266622D346635312D393737642D623365393937343131303834223E0D0A20202020202020203C6F6D6764693A776179706F696E7420783D223637352E302220793D2239302E3433353934222F3E0D0A20202020202020203C6F6D6764693A776179706F696E7420783D223637352E302220793D223135302E30222F3E0D0A2020202020203C2F62706D6E64693A42504D4E456467653E0D0A2020202020203C62706D6E64693A42504D4E53686170652069643D2273686170652D38356466613065622D306631322D343562322D386138632D373635376565626665366137222062706D6E456C656D656E743D227369642D35623330666433622D623163612D343930392D386636372D633362353237663461343261223E0D0A20202020202020203C6F6D6764633A426F756E647320783D223632342E39393939342220793D222D3133352E30222077696474683D223130302E3022206865696768743D2238302E30222F3E0D0A2020202020203C2F62706D6E64693A42504D4E53686170653E0D0A2020202020203C62706D6E64693A42504D4E456467652069643D22656467652D33363765346630642D373063362D343133332D623833342D373139663166336666616130222062706D6E456C656D656E743D227369642D35306434346164612D666338372D346364612D393438392D613866316665373864356661223E0D0A20202020202020203C6F6D6764693A776179706F696E7420783D223637342E39393939342220793D222D35352E30222F3E0D0A20202020202020203C6F6D6764693A776179706F696E7420783D223637352E302220793D2231302E343335393336222F3E0D0A2020202020203C2F62706D6E64693A42504D4E456467653E0D0A202020203C2F62706D6E64693A42504D4E506C616E653E0D0A20203C2F62706D6E64693A42504D4E4469616772616D3E0D0A3C2F646566696E6974696F6E733E0D0A, 0); +INSERT INTO `act_ge_bytearray` VALUES ('7', 1, '物品领用申请.eam_asset_stock_goods_use.png', '5', 0x89504E470D0A1A0A0000000D49484452000002DF00000195080600000026219D53000016EC4944415478DAEDDD7F6C95F5BDC0719261B2654BCC922D8BF12E5E738DD7BF961BC3328D99694C966D89095B266B4F6958D331CA76D53186896E1A8C6CB9B81FD98C264C63541C77CC10C2582F82B4457E88108B0E2B8883091228601D41C2A020E8F73E9F273CCDE92F28785A4ACFEB957CD2C3734E5B7C387FBCFDE67B9E67C2040000186129A54F767676362F5CB870DDFCF9F38FDE7DF7DDA71B1B1B535D5D5D6A6868F8E8873FFCE1A99FFFFCE7BB1F7EF8E145D9FCA7330600001711DD4B972E7D76DEBC79A767CD9A951E7FFCF1B479F3E6D4D5D5957A7A7A5288AFDDDDDDE9D5575F4D599CA71FFFF8C71FFDE4273F7967C68C19D39D41000018862CB29B7EF18B5F9CBCE79E7BF2B03E73E64C1AAEAD5BB7A67BEFBDF74C7373F38E2953A65CE76C0200C020B2769EB87CF9F2353367CE4C2D2D2D1714DDFDAD5AB52A3535359DB00A0E00008384F7DAB56B5FB9EBAEBBD2CE9D3B5325BCF3CE3B290BF913D3A74FFF6F67180000CE8A15EF08EFD8C35D49F1F366CC9871AC542A3538CB000054BDD8E31D5B4D2AB5E23DD80AF8B469D38E64017E83B30D0040D58AAB9A3CF4D043A7628FF7485AB162C589A953A76E72C60100A85ACB962DFBDFB8AAC9071F7C9046DA8F7EF4A343B69F0000509562D53BAEE31D97131C0DAFBFFEFA29ABDF000054A5B873657CC8F2E35C52F0423535351DAAABABFB77671F0080AA12B78C7FF2C927D368FADDEF7EB7358BEF39CE3E00005565FEFCF947E396F1A3E9E5975F7E278BEF16671F0080AA72F7DD779F3E78F0E0A8C6F7A14387BAB3F8DEE7EC030050551A1B1B534F4FCFA8C677FCBE2CBE7B9C7D0000AA4A16C1E95288DFEBEC03005055BEF7BDEF7D34DA2BDF274E9C3864E51B0080AA73D75D779D1AED3DDF070E1CF8BB3DDF0000549D071E7860D7685FEDE485175E78DED54E0000A83ABFFEF5AF9F1CEDEB7CCF9D3B7785EB7C03005075EEBFFFFEFFB8F3CE3B3F1CC53B5CF6D4D7D7BFED0E97000054A5D9B367FFE3D5575F1DAD2D278BB2F0DEE0AC03005095BEFFFDEF4FF9E94F7F7A7A1456BF8FD4D7D7BF562A951A9C750000AA56737373674B4BCB889677EC2F8F55EF9A9A9A89CE380000552BF6603735359DD8B973E78884776767E7F2EC771C2C954A3738DB000054BD868686A9CDCDCDC7BBBBBB2B1ADEFBF7EF7FA9BEBE7EAFED2600005066EAD4A94D3366CC3856A915F058F18EF0AEADADBDD7D90500807EB250AE6B686838FA97BFFCE55F1FE34398477EFBDBDF3E1D5B4DB269745601006008B107BCBEBEBEBDB9B9F9D06BAFBD76E242AEE3BD7AF5EAC559BC77C4872BEDF1060080E147F81D11E18D8D8DDDF3E7CFDFFED24B2FEDEDEAEA3AD8D3D39397F68913270E1D3870E0EF6D6D6DFFF7E0830FAE9C3A75EAEE88EE58ED7655130000B8085954FF5BA9549A9545F5926CF664D3934D3AFB755F362D71CB7877AE0400801110F1ED2C000080F8060000F10D0000886F000010DF000020BE010000F10D0000E21B000010DF000020BE0100407C030000E21B0000C437000020BE0100407C030080F8060000C4370000886F0000407C030080F8060000F10D0000886F000010DF000080F8060000F10D0000E21B000010DF000020BE010000F10D0000E21B0000C437000020BE0100407C030000E21B0000C4370000886F0000407C030080F8060000C43700005CDAD06E89D83ECF7438530000F0F1E37B5236A7CF15DFB5B5B5B73B5300005099005F798EF8DE54535333D159020080CAC4F7A4A1E2BB542A7DCB19020080CA06F8607BBF3BAC7A030040E5E37BC0DE6F7BBD0100608464B1BDCCAA3700008C4E7CDF54B6D7FB1BCE0800008CA062EFB7556F000018F9F89EE40E9700008C6929A589BB77EF5EB279F3E60FDBDBDB536B6BAB19E5696B6B4BEBD7AFFF67360DDE910000E35884F7860D1B527777773A75EA94B944F3DE7BEFA575EBD61DCD42FC0EEF4A0080712A56BC85F79809F053ADADAD3BBC2B0100C6A9D86A227CC7CE64F17DDABB1200609C8A3DC7A2774CC5B70F8D0200547B7CFFEBFD836977C7D3697BDB43F9C4E3382698C5370000158CEF6347BAD2B6171E48AFAFB8A7CFC4B1784E348B6F00002A14DFFBB6FF75407817B37F7B8B6816DF0000542ABE77BCF8F090F11DCF8966F10D004085E27B5BEB8343C6773C279AC5370000E25B7C03007079C5775CDD64A8F88EE744B3F80600A042F1BD6BE36343C6773C279AC5370000158AEFC35D9D69DBEAB903B79C64C7E239D12CBE0100A8507CC7ECD9F2EC80F88E6382597C030050C9F83E7932ED7A79C1C02D27D9B1784E348B6F00002A10DF7107CB9D1B1F1D72CF773CE72E97E21B00808F13DF274FA683BBD6A43756FD6CC8F02E265E13AFB50A2EBE0100B8C0F83EDF6AB75570F10D004085E27B38ABDDE75A0517D1E21B008061C6F7C5867731225A7C030030CCF836E21B0000F12DBE010010DF467C030020BEC5370000E2DB886F0000F16DC4370000E25B7C030020BE8DF80600407C8B6F0000C4B711DF0000E2DB886F0000C4B7F80600407C1BF10D0080F816DF0000886F23BE0100C4B711DF0000886FF10D0080F836E21B0000F12DBE010010DF467C030088EFB134575C71459A3E7DFA057D4FF69F96962C59D2FB78D1A245E21B0000F13DD4BCF6DA6B69F9F2E5E9139FF844FAE52F7F9947F49E3D7BD237BFF9CDFCF8D7BEF6B53473E6CCFCB53D3D3DE92B5FF94A3EF15CBC76DAB469BD8F9F7AEAA97CE2F19B6FBE29BE010010DFE513415DAC5C3736360E38BE72E5CA74E59557F639FECA2BAFA4A54B970E88EF5B6EB925AD5BB7CECA370000E2BBFF1C3E7C38DD7AEBAD7D56BEAFBEFAEA3CACBFFBDDEFE6C7AFBAEAAA3479F2E43EDF17C76EBEF9E6B46FDFBEDE63478E1CC9B79DC4F7886F0000C4F72073ECD8B1FCEB97BEF4A574E38D37E68F0F1C3890AF644750BFF5D65BF9947F4F44F6A73FFDE9347BF6EC7CE5BB7CF57BD6AC59E21B0000F13DD8B4B4B4A4EBAEBB2EFFE0E435D75C934F6767671ED245981F3D7AB4CFF73CF3CC33E21B0000F17DA173EDB5D7A665CB96E5DB4C9A9A9AFAAC7C17DB4A8AAD24FBF7EFCF1FC7D694DB6EBB2D7F7CDF7DF7A5CF7DEE73F9E3D8F3FDC4134FE4DF3B96FF9BC5370080F8BE2413A11C011E2BDF4564C74A771C8F55F03FFCE10FF9E3471E79A4CF07318B89EF8B9573D7F90600407C0F23BEB76DDB967F8D696F6FEFDD6E32D85551FACF73CF3D97AEBFFE7AF10D0080F83ED76CD9B225EDDDBBB7F7CF5BB76E4DBFFAD5AFF22D28719DEF88EA22CAE3CA2883FD8C581DEF7F3514F10D0080F836E21B00407C1BF10D0080F816DF0000886F23BE010010DFE21B0000F16DC4370080F836E21B0000F12DBE010010DF467C030020BEC5370000E2DB886F0000F16DC4370000E25B7C030020BE8DF80600407C8B6F0000C4B711DF0000E2DB886F0000C4B7F80600407C1BF10D0080F816DF0000886F23BE0100C4B711DF0000886FF10D0080F836E21B0000F12DBE010010DF467C03008C63EDEDEDA277EC4C4F16DFA7BD2B0100C6A9F5EBD71FECEEEE16BE6360BABABAFE9CC5F70EEF4A0080716ACD9A3593D7AE5DFBFEBBEFBE7B42005FBA15EF08EFB6B6B6BDD9DCE15D0900308E65C1777B6B6B6B476C79883DC797EBD4D5D55DAE7FF738EF3B84370000978D886F67010000C4370000886F0000407C030080F8060000F10D0000886F000010DF000080F8060000F10D0000E21B000010DF000020BE010000F10D0000E21B0000C437000020BE0100407C030000E21B0000C4370000886F0000407C030080F8060000C4370000886F000010DF000080F8060000F10D0000886F000010DF000020BE010000F10D0000E21B000010DF000020BE0100407C030000E21B0000C437000020BE0100407C030080F8060000C4370000886F0000407C030080F8060000F10D0000886F000010DF000080F8060000F10D0000E21B000010DF000020BE010000F10D00009730B45B22B6CF331DCE1400007CFCF89E94CDE973C5776D6DEDEDCE1400005426C0579E23BE37D5D4D44C74960000A032F13D69A8F82E954ADF72860000A0B2013ED8DEEF0EABDE000050F9F81EB0F7DB5E6F00001821596C2FB3EA0D0000A313DF3795EDF5FE863302000023A8D8FB6DD51B0000463EBE27B9C3250000635E4A69E2EEDDBB976CDEBCF9C3F6F6F6D4DADA7A594EC4F7E5FA776F6B6B4BEBD7AFFF67360DDE910000E35884F7860D1B527777773A75EA94B944F3DE7BEFA575EBD61DCD42FC0EEF4A0080712A56BC85F79809F053ADADAD3BBC2B0100C6A9D86A227CC7CE64F17DDABB1200609C8A3DC7A2774CC5B70F8E0200547B7CFFEBFD836977C7D3697BDB43F9C4E3382698C5370000158CEF6347BAD2B6171E48AFAFB8A7CFC4B1784E348B6F00002A14DFFBB6FF75407817B37F7B8B6816DF0000542ABE77BCF8F090F11DCF8966F10D004085E27B5BEB8343C6773C279AC5370000E25B7C03007079C5775CDD64A8F88EE744B3F80600A042F1BD6BE36343C6773C279AC5370000158AEFC35D9D69DBEAB903B79C64C7E239D12CBE0100A8507CC7ECD9F2EC80F88E6382597C030050C9F83E7932ED7A79C1C02D27D9B1784E348B6F00002A10DF7107CB9D1B1F1D72CF773CE72E97E21B00808F13DF274FA683BBD6A43756FD6CC8F02E265E13AFB50A2EBE0100B8C0F83EDF6AB75570F10D004085E27B38ABDDE75A0517D1E21B008061C6F7C5867731225A7C030030CCF836E21B0000F12DBE010010DF467C030020BEC5370000E2DB886F0000F16DC4370000E25B7C030020BE8DF80600407C8B6F0000C4B711DF0000E2DB886F0000C4B7F80600407C1BF10D0080F816DF0000886F23BE0100C4B711DF0000886FF10D0080F836E21B0000F12DBE010010DF467C030088EF4ACC934F3E9956AC58D1E758F62BD3B265CB2A1AABCB972F4FD3A64DCB271EC7EF78F1C517CFF97DF19ADFFCE637E77DCD9C3973F2C7CF3DF75CEAE9E9E93DBE68D122F10D00C0D889EF88D4EBAFBF3E0FE2ABAFBE3ABDF2CA2BF9B1EF7CE73BBD917CFCF8F174E8D0A174DB6DB7E5C7226A6FBEF9E6545757D71BD5F1F5D9679F4D9FFAD4A706FD1D4B962C396FE0AF5BB7AECFCFBBEAAAABD257BFFAD5FC71CCD2A54BD3B5D75E3BE0E7C4FF40148FE3EF503C8E1817DF00008C89F88E50DDB66D5B7AEAA9A7D2AE5DBBF295E82258CB43B69888F0385EAC94C7E3F8DEF81AC11C51FEC52F7E71D0F8BEE5965B06AC7C6FDCB871C0EBCA8339FE3C6FDEBCDE3F5F71C515E9BEFBEECB1FEFD9B3A7F7E7DC7AEBADF9DF351EBFF5D65BBDDFDBD9D9997F7DE49147C43700009736BE6325390236569723A2236C3FFFF9CFE7C76EB8E186F4A73FFD298FD7FDFBF7F709E278BE781CF11E5FE3B5070E1CC81FEFDBB7AFF7F5EDEDEDF9B1A6A6A63EF11DBF277E47F9DFE7D8B163F9EB8B95EEE2FBE2F1B7BFFDEDFC7B070BFBF295EF2F7CE10B69F5EAD5F9E358258FD5742BDF00005CD2F88E6D24453C3FF3CC3303F6645F73CD35E9CD37DFCC5F13ABE2478F1EED0DE288DD471F7DB4773BC98473AC7C17CFC5E3B7DF7E3BFF99E7DB8E521C2B0FFD952B57A62BAFBC72D0F88E95EF2D5BB6E48F376DDAD47B3CFE8EB69D000070C9E33B2682BA08D52F7FF9CBBDE11D2BE2712C62B9FFCA741C8F95E5E2FB8AD5EE58F98EE723D4FBC771636363EF3697F2801E2ABE638B4AFF95EFD8FF3D79F2E4DED7C59692F8A065BCE689279E1834DCEDF9060060CCC4F750111C570C890F5E0EF5DA62353A22BC88E458F5FEFAD7BF3E606BC884B295EF783C7BF6EC8AC477ACDCC7FF1C4CE8B70DA63CBE8B3DDFE5DB66C4370000973CBE8B95EF62F53B3EDCB875EBD601AFFDEC673F9B6EBCF1C67C2F75F9CA79AC7C0FF5B36325FDF0E1C3F9E39696967CBFF7DEBD7B070DFCD85E3258E8C70729CBB7AC0CB5E73B82BBD882121FCA8C182F2E3F28BE01001893F13DA1DFD5488A55E6B82C616C3589CB0E16971E9C707675BB781CB15DFEF323B4E3F8EF7FFFFBFCCFF181CC86868641AF7832D42A7BFF892D2EC53698D8B35EBC3E26623BBECE9D3B37FF5A5C21457C03003026E23B56A4FB1FEB1FC611BBE55B53CEF533E3F9B87249AC3CC787378B55F2FEBF63D6AC591715DFC5D55A26F4FB9065F1D81D2E01001893F16DC4370000E25B7C030020BEC5370000E2DB886F0000C4B7F80600407C1BF10D0080F816DF0000886FF10D0080F836E21B0000F12DBE010010DF467C030020BEC5370000E25B7C030020BE8DF80600407C8B6F0000C4B711DF0000886FF10D0080F816DF0000886F23BE010010DFE21B0000F16DC4370000E25B7C030020BEC5370000E2DB886F0000C4B7F80600407C1BF10D00C08409EDEDEDA277EC4C4F16DFA7BD2B0100C6A9F5EBD71FECEEEE16BE6360BABABAFE9CC5F70EEF4A0080716ACD9A3593D7AE5DFBFEBBEFBE7B42005FBA15EF08EFB6B6B6BDD9DCE15D0900308E65C1777B6B6B6B476C79883DC797E3D4D5D5A5CBF5EF7EF6BCEF10DE00005C1622BE9D05000010DF000020BE010000F10D0000E21B0000C437000020BE0100407C030000E21B0000C4370000886F0000407C030080F8060000C4370000886F000010DF000080F8060000F10D0000886F000010DF000020BE010000F10D0000E21B000010DF000020BE0100407C030000E21B0000C437000020BE0100407C030080F8060000C4370000886F0000407C030080F8060000F10D0000886F000010DF000080F8060000F10D0000E21B000010DF000020BE010000F10D0000E21B0000C437000020BE0100407C030000E21B00002E6568B7446C9F673A9C290000F8F8F13D299BD3E78AEFDADADADB9D290000A84C80AF3C477C6FAAA9A999E82C01004065E27BD250F15D2A95BEE50C01004065037CB0BDDF1D56BD0100A0F2F13D60EFB7BDDE00003042B2D85E66D51B00004627BE6F2ADBEBFD0D670400004650B1F7DBAA37000054587D7DFD7F65B1FD60A9545A9C7D7D239BE36757BF7BCEFE794936F36255DCD90200800BD4D8D8F8C92CA6EFCC82FB1FC3B8BB65F90730FF967D9D3965CA94CF388B0000701EB1973B9B772E24BA07997DD9D4389B0000308858EDCE82F9E92CBCCF948774763C3DF6D86369E3C68DA9ABAB2B1D3F7E3C859E9E9ED4DDDD9DB66EDD9A162C58909A9A9A068BF03FC6CF75760100E0ACF8F06416CA2F9587F3CC9933D3AA55ABD2071F7C9086E3CC9933A9B5B535FFBE7E01BEC43614000098D0BBE2DD27BC172E5CD8BBC27DA162457CF1E2C50302DCD5510000A87AB1D5A43C945B5A5A5225C42AF8D4A953FB6C4171B60100A85A673F5C79A6D2E15D1EE0FD56C06B9C750000AA4E6C3729BFAA496C351909FDB6A0ECB3FF1B0080AA13D7F12EFF70E5C5EEF11ECE1EF07E1FC29CE3EC03005055CA6FA01357351949FDB69FECF1E14B0000AAC6D95BC6F75EC77BB89713BC587119C21FFCE007E577C2742B7A0000AA4316C00F16211C37D0190D8F3FFE78F9EAF73CFF0A0000548552A9B4B808E1CD9B378F4A7CC79D30CBAFFBED5F010080AA90C5EF1B45081F3C787054E23B6E455F16DF3BFC2B0000502DF1DD5384F0485DE564B0AB9E94C5778F7F050000AA25BE7B43783495FF5EFF0A0000544B7C1FB3F20D0000A3A0B6B6F66FF67C0300C02870B5130000182559FCDEEF3ADF0000300A2EC51D2EA74F9FFE913B5C02005095B208EE286278D5AA55231ADFADADADE5ABDE7B6A6A6A26FA170000A06A944AA5E94510CF9C3973C4AE7A125739696E6EFEB02CBEE738FB00005495C6C6C64FC62A7411C50B172E1C91F85EBC7871F9AAF7BE2953A67CC6D90700A0EA64315C93CDE9228E9F7FFEF98A86F79A356BFADC58277E9FB30E00403507F8D3E5815CA9008FF09E366DDA99B29FFD47671B0080AA161F7E8C302E0FF0D882127BB52F768F77BFAD26F975BD639B8BB30D008000CF02BCFCC63BC58730E32A287199C0E15E4E3056BBFB7DB8320F6FFBBC0100A05F809FDD8272BA3C9EE33AE00B162C481D1D1DF9ADE88BABA2C40A77DC32BEB3B333BF814E16DD1FF58BEE7CAB89156F000018C2D90F61EE1924A42F64F6F9702500000C43AC56D7D6D6DE9905F4AE0B8CEE88F639B6990000C045C8627A5236F7C79EF02CC8FF963DEE391BDAF17547ECE9CE9EFB9FB865BC3B57020000000000000000000000000000000000000000000085FF0726F9FEF5CCE114690000000049454E44AE426082, 1); + +-- ---------------------------- +-- Table structure for act_ge_property +-- ---------------------------- +DROP TABLE IF EXISTS `act_ge_property`; +CREATE TABLE `act_ge_property` ( + `NAME_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `VALUE_` varchar(300) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `REV_` int NULL DEFAULT NULL, + PRIMARY KEY (`NAME_`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb3 COLLATE = utf8mb3_bin ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of act_ge_property +-- ---------------------------- +INSERT INTO `act_ge_property` VALUES ('batch.schema.version', '6.8.0.0', 1); +INSERT INTO `act_ge_property` VALUES ('cfg.execution-related-entities-count', 'true', 1); +INSERT INTO `act_ge_property` VALUES ('cfg.task-related-entities-count', 'true', 1); +INSERT INTO `act_ge_property` VALUES ('common.schema.version', '6.8.0.0', 1); +INSERT INTO `act_ge_property` VALUES ('entitylink.schema.version', '6.8.0.0', 1); +INSERT INTO `act_ge_property` VALUES ('eventsubscription.schema.version', '6.8.0.0', 1); +INSERT INTO `act_ge_property` VALUES ('identitylink.schema.version', '6.8.0.0', 1); +INSERT INTO `act_ge_property` VALUES ('job.schema.version', '6.8.0.0', 1); +INSERT INTO `act_ge_property` VALUES ('next.dbid', '2501', 2); +INSERT INTO `act_ge_property` VALUES ('schema.history', 'create(6.8.0.0)', 1); +INSERT INTO `act_ge_property` VALUES ('schema.version', '6.8.0.0', 1); +INSERT INTO `act_ge_property` VALUES ('task.schema.version', '6.8.0.0', 1); +INSERT INTO `act_ge_property` VALUES ('variable.schema.version', '6.8.0.0', 1); + +-- ---------------------------- +-- Table structure for act_hi_actinst +-- ---------------------------- +DROP TABLE IF EXISTS `act_hi_actinst`; +CREATE TABLE `act_hi_actinst` ( + `ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `REV_` int NULL DEFAULT 1, + `PROC_DEF_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `PROC_INST_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `EXECUTION_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `ACT_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `TASK_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `CALL_PROC_INST_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `ACT_NAME_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `ACT_TYPE_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `ASSIGNEE_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `START_TIME_` datetime(3) NOT NULL, + `END_TIME_` datetime(3) NULL DEFAULT NULL, + `TRANSACTION_ORDER_` int NULL DEFAULT NULL, + `DURATION_` bigint NULL DEFAULT NULL, + `DELETE_REASON_` varchar(4000) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `TENANT_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT '', + PRIMARY KEY (`ID_`) USING BTREE, + INDEX `ACT_IDX_HI_ACT_INST_START`(`START_TIME_` ASC) USING BTREE, + INDEX `ACT_IDX_HI_ACT_INST_END`(`END_TIME_` ASC) USING BTREE, + INDEX `ACT_IDX_HI_ACT_INST_PROCINST`(`PROC_INST_ID_` ASC, `ACT_ID_` ASC) USING BTREE, + INDEX `ACT_IDX_HI_ACT_INST_EXEC`(`EXECUTION_ID_` ASC, `ACT_ID_` ASC) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb3 COLLATE = utf8mb3_bin ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of act_hi_actinst +-- ---------------------------- + +-- ---------------------------- +-- Table structure for act_hi_attachment +-- ---------------------------- +DROP TABLE IF EXISTS `act_hi_attachment`; +CREATE TABLE `act_hi_attachment` ( + `ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `REV_` int NULL DEFAULT NULL, + `USER_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `NAME_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `DESCRIPTION_` varchar(4000) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `TYPE_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `TASK_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `PROC_INST_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `URL_` varchar(4000) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `CONTENT_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `TIME_` datetime(3) NULL DEFAULT NULL, + PRIMARY KEY (`ID_`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb3 COLLATE = utf8mb3_bin ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of act_hi_attachment +-- ---------------------------- + +-- ---------------------------- +-- Table structure for act_hi_comment +-- ---------------------------- +DROP TABLE IF EXISTS `act_hi_comment`; +CREATE TABLE `act_hi_comment` ( + `ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `TYPE_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `TIME_` datetime(3) NOT NULL, + `USER_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `TASK_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `PROC_INST_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `ACTION_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `MESSAGE_` varchar(4000) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `FULL_MSG_` longblob NULL, + PRIMARY KEY (`ID_`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb3 COLLATE = utf8mb3_bin ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of act_hi_comment +-- ---------------------------- + +-- ---------------------------- +-- Table structure for act_hi_detail +-- ---------------------------- +DROP TABLE IF EXISTS `act_hi_detail`; +CREATE TABLE `act_hi_detail` ( + `ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `TYPE_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `PROC_INST_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `EXECUTION_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `TASK_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `ACT_INST_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `NAME_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `VAR_TYPE_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `REV_` int NULL DEFAULT NULL, + `TIME_` datetime(3) NOT NULL, + `BYTEARRAY_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `DOUBLE_` double NULL DEFAULT NULL, + `LONG_` bigint NULL DEFAULT NULL, + `TEXT_` varchar(4000) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `TEXT2_` varchar(4000) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + PRIMARY KEY (`ID_`) USING BTREE, + INDEX `ACT_IDX_HI_DETAIL_PROC_INST`(`PROC_INST_ID_` ASC) USING BTREE, + INDEX `ACT_IDX_HI_DETAIL_ACT_INST`(`ACT_INST_ID_` ASC) USING BTREE, + INDEX `ACT_IDX_HI_DETAIL_TIME`(`TIME_` ASC) USING BTREE, + INDEX `ACT_IDX_HI_DETAIL_NAME`(`NAME_` ASC) USING BTREE, + INDEX `ACT_IDX_HI_DETAIL_TASK_ID`(`TASK_ID_` ASC) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb3 COLLATE = utf8mb3_bin ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of act_hi_detail +-- ---------------------------- + +-- ---------------------------- +-- Table structure for act_hi_entitylink +-- ---------------------------- +DROP TABLE IF EXISTS `act_hi_entitylink`; +CREATE TABLE `act_hi_entitylink` ( + `ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `LINK_TYPE_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `CREATE_TIME_` datetime(3) NULL DEFAULT NULL, + `SCOPE_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `SUB_SCOPE_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `SCOPE_TYPE_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `SCOPE_DEFINITION_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `PARENT_ELEMENT_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `REF_SCOPE_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `REF_SCOPE_TYPE_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `REF_SCOPE_DEFINITION_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `ROOT_SCOPE_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `ROOT_SCOPE_TYPE_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `HIERARCHY_TYPE_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + PRIMARY KEY (`ID_`) USING BTREE, + INDEX `ACT_IDX_HI_ENT_LNK_SCOPE`(`SCOPE_ID_` ASC, `SCOPE_TYPE_` ASC, `LINK_TYPE_` ASC) USING BTREE, + INDEX `ACT_IDX_HI_ENT_LNK_REF_SCOPE`(`REF_SCOPE_ID_` ASC, `REF_SCOPE_TYPE_` ASC, `LINK_TYPE_` ASC) USING BTREE, + INDEX `ACT_IDX_HI_ENT_LNK_ROOT_SCOPE`(`ROOT_SCOPE_ID_` ASC, `ROOT_SCOPE_TYPE_` ASC, `LINK_TYPE_` ASC) USING BTREE, + INDEX `ACT_IDX_HI_ENT_LNK_SCOPE_DEF`(`SCOPE_DEFINITION_ID_` ASC, `SCOPE_TYPE_` ASC, `LINK_TYPE_` ASC) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb3 COLLATE = utf8mb3_bin ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of act_hi_entitylink +-- ---------------------------- + +-- ---------------------------- +-- Table structure for act_hi_identitylink +-- ---------------------------- +DROP TABLE IF EXISTS `act_hi_identitylink`; +CREATE TABLE `act_hi_identitylink` ( + `ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `GROUP_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `TYPE_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `USER_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `TASK_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `CREATE_TIME_` datetime(3) NULL DEFAULT NULL, + `PROC_INST_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `SCOPE_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `SUB_SCOPE_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `SCOPE_TYPE_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `SCOPE_DEFINITION_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + PRIMARY KEY (`ID_`) USING BTREE, + INDEX `ACT_IDX_HI_IDENT_LNK_USER`(`USER_ID_` ASC) USING BTREE, + INDEX `ACT_IDX_HI_IDENT_LNK_SCOPE`(`SCOPE_ID_` ASC, `SCOPE_TYPE_` ASC) USING BTREE, + INDEX `ACT_IDX_HI_IDENT_LNK_SUB_SCOPE`(`SUB_SCOPE_ID_` ASC, `SCOPE_TYPE_` ASC) USING BTREE, + INDEX `ACT_IDX_HI_IDENT_LNK_SCOPE_DEF`(`SCOPE_DEFINITION_ID_` ASC, `SCOPE_TYPE_` ASC) USING BTREE, + INDEX `ACT_IDX_HI_IDENT_LNK_TASK`(`TASK_ID_` ASC) USING BTREE, + INDEX `ACT_IDX_HI_IDENT_LNK_PROCINST`(`PROC_INST_ID_` ASC) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb3 COLLATE = utf8mb3_bin ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of act_hi_identitylink +-- ---------------------------- + +-- ---------------------------- +-- Table structure for act_hi_procinst +-- ---------------------------- +DROP TABLE IF EXISTS `act_hi_procinst`; +CREATE TABLE `act_hi_procinst` ( + `ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `REV_` int NULL DEFAULT 1, + `PROC_INST_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `BUSINESS_KEY_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `PROC_DEF_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `START_TIME_` datetime(3) NOT NULL, + `END_TIME_` datetime(3) NULL DEFAULT NULL, + `DURATION_` bigint NULL DEFAULT NULL, + `START_USER_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `START_ACT_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `END_ACT_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `SUPER_PROCESS_INSTANCE_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `DELETE_REASON_` varchar(4000) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `TENANT_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT '', + `NAME_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `CALLBACK_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `CALLBACK_TYPE_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `REFERENCE_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `REFERENCE_TYPE_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `PROPAGATED_STAGE_INST_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `BUSINESS_STATUS_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + PRIMARY KEY (`ID_`) USING BTREE, + UNIQUE INDEX `PROC_INST_ID_`(`PROC_INST_ID_` ASC) USING BTREE, + INDEX `ACT_IDX_HI_PRO_INST_END`(`END_TIME_` ASC) USING BTREE, + INDEX `ACT_IDX_HI_PRO_I_BUSKEY`(`BUSINESS_KEY_` ASC) USING BTREE, + INDEX `ACT_IDX_HI_PRO_SUPER_PROCINST`(`SUPER_PROCESS_INSTANCE_ID_` ASC) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb3 COLLATE = utf8mb3_bin ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of act_hi_procinst +-- ---------------------------- + +-- ---------------------------- +-- Table structure for act_hi_taskinst +-- ---------------------------- +DROP TABLE IF EXISTS `act_hi_taskinst`; +CREATE TABLE `act_hi_taskinst` ( + `ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `REV_` int NULL DEFAULT 1, + `PROC_DEF_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `TASK_DEF_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `TASK_DEF_KEY_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `PROC_INST_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `EXECUTION_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `SCOPE_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `SUB_SCOPE_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `SCOPE_TYPE_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `SCOPE_DEFINITION_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `PROPAGATED_STAGE_INST_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `NAME_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `PARENT_TASK_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `DESCRIPTION_` varchar(4000) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `OWNER_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `ASSIGNEE_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `START_TIME_` datetime(3) NOT NULL, + `CLAIM_TIME_` datetime(3) NULL DEFAULT NULL, + `END_TIME_` datetime(3) NULL DEFAULT NULL, + `DURATION_` bigint NULL DEFAULT NULL, + `DELETE_REASON_` varchar(4000) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `PRIORITY_` int NULL DEFAULT NULL, + `DUE_DATE_` datetime(3) NULL DEFAULT NULL, + `FORM_KEY_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `CATEGORY_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `TENANT_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT '', + `LAST_UPDATED_TIME_` datetime(3) NULL DEFAULT NULL, + PRIMARY KEY (`ID_`) USING BTREE, + INDEX `ACT_IDX_HI_TASK_SCOPE`(`SCOPE_ID_` ASC, `SCOPE_TYPE_` ASC) USING BTREE, + INDEX `ACT_IDX_HI_TASK_SUB_SCOPE`(`SUB_SCOPE_ID_` ASC, `SCOPE_TYPE_` ASC) USING BTREE, + INDEX `ACT_IDX_HI_TASK_SCOPE_DEF`(`SCOPE_DEFINITION_ID_` ASC, `SCOPE_TYPE_` ASC) USING BTREE, + INDEX `ACT_IDX_HI_TASK_INST_PROCINST`(`PROC_INST_ID_` ASC) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb3 COLLATE = utf8mb3_bin ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of act_hi_taskinst +-- ---------------------------- + +-- ---------------------------- +-- Table structure for act_hi_tsk_log +-- ---------------------------- +DROP TABLE IF EXISTS `act_hi_tsk_log`; +CREATE TABLE `act_hi_tsk_log` ( + `ID_` bigint NOT NULL AUTO_INCREMENT, + `TYPE_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `TASK_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `TIME_STAMP_` timestamp(3) NOT NULL, + `USER_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `DATA_` varchar(4000) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `EXECUTION_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `PROC_INST_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `PROC_DEF_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `SCOPE_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `SCOPE_DEFINITION_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `SUB_SCOPE_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `SCOPE_TYPE_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `TENANT_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT '', + PRIMARY KEY (`ID_`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb3 COLLATE = utf8mb3_bin ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of act_hi_tsk_log +-- ---------------------------- + +-- ---------------------------- +-- Table structure for act_hi_varinst +-- ---------------------------- +DROP TABLE IF EXISTS `act_hi_varinst`; +CREATE TABLE `act_hi_varinst` ( + `ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `REV_` int NULL DEFAULT 1, + `PROC_INST_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `EXECUTION_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `TASK_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `NAME_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `VAR_TYPE_` varchar(100) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `SCOPE_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `SUB_SCOPE_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `SCOPE_TYPE_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `BYTEARRAY_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `DOUBLE_` double NULL DEFAULT NULL, + `LONG_` bigint NULL DEFAULT NULL, + `TEXT_` varchar(4000) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `TEXT2_` varchar(4000) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `CREATE_TIME_` datetime(3) NULL DEFAULT NULL, + `LAST_UPDATED_TIME_` datetime(3) NULL DEFAULT NULL, + PRIMARY KEY (`ID_`) USING BTREE, + INDEX `ACT_IDX_HI_PROCVAR_NAME_TYPE`(`NAME_` ASC, `VAR_TYPE_` ASC) USING BTREE, + INDEX `ACT_IDX_HI_VAR_SCOPE_ID_TYPE`(`SCOPE_ID_` ASC, `SCOPE_TYPE_` ASC) USING BTREE, + INDEX `ACT_IDX_HI_VAR_SUB_ID_TYPE`(`SUB_SCOPE_ID_` ASC, `SCOPE_TYPE_` ASC) USING BTREE, + INDEX `ACT_IDX_HI_PROCVAR_PROC_INST`(`PROC_INST_ID_` ASC) USING BTREE, + INDEX `ACT_IDX_HI_PROCVAR_TASK_ID`(`TASK_ID_` ASC) USING BTREE, + INDEX `ACT_IDX_HI_PROCVAR_EXE`(`EXECUTION_ID_` ASC) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb3 COLLATE = utf8mb3_bin ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of act_hi_varinst +-- ---------------------------- + +-- ---------------------------- +-- Table structure for act_id_bytearray +-- ---------------------------- +DROP TABLE IF EXISTS `act_id_bytearray`; +CREATE TABLE `act_id_bytearray` ( + `ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `REV_` int NULL DEFAULT NULL, + `NAME_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `BYTES_` longblob NULL, + PRIMARY KEY (`ID_`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb3 COLLATE = utf8mb3_bin ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of act_id_bytearray +-- ---------------------------- + +-- ---------------------------- +-- Table structure for act_id_group +-- ---------------------------- +DROP TABLE IF EXISTS `act_id_group`; +CREATE TABLE `act_id_group` ( + `ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `REV_` int NULL DEFAULT NULL, + `NAME_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `TYPE_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + PRIMARY KEY (`ID_`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb3 COLLATE = utf8mb3_bin ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of act_id_group +-- ---------------------------- + +-- ---------------------------- +-- Table structure for act_id_info +-- ---------------------------- +DROP TABLE IF EXISTS `act_id_info`; +CREATE TABLE `act_id_info` ( + `ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `REV_` int NULL DEFAULT NULL, + `USER_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `TYPE_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `KEY_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `VALUE_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `PASSWORD_` longblob NULL, + `PARENT_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + PRIMARY KEY (`ID_`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb3 COLLATE = utf8mb3_bin ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of act_id_info +-- ---------------------------- + +-- ---------------------------- +-- Table structure for act_id_membership +-- ---------------------------- +DROP TABLE IF EXISTS `act_id_membership`; +CREATE TABLE `act_id_membership` ( + `USER_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `GROUP_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + PRIMARY KEY (`USER_ID_`, `GROUP_ID_`) USING BTREE, + INDEX `ACT_FK_MEMB_GROUP`(`GROUP_ID_` ASC) USING BTREE, + CONSTRAINT `ACT_FK_MEMB_GROUP` FOREIGN KEY (`GROUP_ID_`) REFERENCES `act_id_group` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT, + CONSTRAINT `ACT_FK_MEMB_USER` FOREIGN KEY (`USER_ID_`) REFERENCES `act_id_user` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT +) ENGINE = InnoDB CHARACTER SET = utf8mb3 COLLATE = utf8mb3_bin ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of act_id_membership +-- ---------------------------- + +-- ---------------------------- +-- Table structure for act_id_priv +-- ---------------------------- +DROP TABLE IF EXISTS `act_id_priv`; +CREATE TABLE `act_id_priv` ( + `ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `NAME_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + PRIMARY KEY (`ID_`) USING BTREE, + UNIQUE INDEX `ACT_UNIQ_PRIV_NAME`(`NAME_` ASC) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb3 COLLATE = utf8mb3_bin ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of act_id_priv +-- ---------------------------- + +-- ---------------------------- +-- Table structure for act_id_priv_mapping +-- ---------------------------- +DROP TABLE IF EXISTS `act_id_priv_mapping`; +CREATE TABLE `act_id_priv_mapping` ( + `ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `PRIV_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `USER_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `GROUP_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + PRIMARY KEY (`ID_`) USING BTREE, + INDEX `ACT_FK_PRIV_MAPPING`(`PRIV_ID_` ASC) USING BTREE, + INDEX `ACT_IDX_PRIV_USER`(`USER_ID_` ASC) USING BTREE, + INDEX `ACT_IDX_PRIV_GROUP`(`GROUP_ID_` ASC) USING BTREE, + CONSTRAINT `ACT_FK_PRIV_MAPPING` FOREIGN KEY (`PRIV_ID_`) REFERENCES `act_id_priv` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT +) ENGINE = InnoDB CHARACTER SET = utf8mb3 COLLATE = utf8mb3_bin ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of act_id_priv_mapping +-- ---------------------------- + +-- ---------------------------- +-- Table structure for act_id_property +-- ---------------------------- +DROP TABLE IF EXISTS `act_id_property`; +CREATE TABLE `act_id_property` ( + `NAME_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `VALUE_` varchar(300) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `REV_` int NULL DEFAULT NULL, + PRIMARY KEY (`NAME_`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb3 COLLATE = utf8mb3_bin ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of act_id_property +-- ---------------------------- +INSERT INTO `act_id_property` VALUES ('schema.version', '6.8.0.0', 1); + +-- ---------------------------- +-- Table structure for act_id_token +-- ---------------------------- +DROP TABLE IF EXISTS `act_id_token`; +CREATE TABLE `act_id_token` ( + `ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `REV_` int NULL DEFAULT NULL, + `TOKEN_VALUE_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `TOKEN_DATE_` timestamp(3) NULL DEFAULT NULL, + `IP_ADDRESS_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `USER_AGENT_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `USER_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `TOKEN_DATA_` varchar(2000) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + PRIMARY KEY (`ID_`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb3 COLLATE = utf8mb3_bin ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of act_id_token +-- ---------------------------- + +-- ---------------------------- +-- Table structure for act_id_user +-- ---------------------------- +DROP TABLE IF EXISTS `act_id_user`; +CREATE TABLE `act_id_user` ( + `ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `REV_` int NULL DEFAULT NULL, + `FIRST_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `LAST_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `DISPLAY_NAME_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `EMAIL_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `PWD_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `PICTURE_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `TENANT_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT '', + PRIMARY KEY (`ID_`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb3 COLLATE = utf8mb3_bin ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of act_id_user +-- ---------------------------- + +-- ---------------------------- +-- Table structure for act_procdef_info +-- ---------------------------- +DROP TABLE IF EXISTS `act_procdef_info`; +CREATE TABLE `act_procdef_info` ( + `ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `PROC_DEF_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `REV_` int NULL DEFAULT NULL, + `INFO_JSON_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + PRIMARY KEY (`ID_`) USING BTREE, + UNIQUE INDEX `ACT_UNIQ_INFO_PROCDEF`(`PROC_DEF_ID_` ASC) USING BTREE, + INDEX `ACT_IDX_INFO_PROCDEF`(`PROC_DEF_ID_` ASC) USING BTREE, + INDEX `ACT_FK_INFO_JSON_BA`(`INFO_JSON_ID_` ASC) USING BTREE, + CONSTRAINT `ACT_FK_INFO_JSON_BA` FOREIGN KEY (`INFO_JSON_ID_`) REFERENCES `act_ge_bytearray` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT, + CONSTRAINT `ACT_FK_INFO_PROCDEF` FOREIGN KEY (`PROC_DEF_ID_`) REFERENCES `act_re_procdef` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT +) ENGINE = InnoDB CHARACTER SET = utf8mb3 COLLATE = utf8mb3_bin ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of act_procdef_info +-- ---------------------------- + +-- ---------------------------- +-- Table structure for act_re_deployment +-- ---------------------------- +DROP TABLE IF EXISTS `act_re_deployment`; +CREATE TABLE `act_re_deployment` ( + `ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `NAME_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `CATEGORY_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `KEY_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `TENANT_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT '', + `DEPLOY_TIME_` timestamp(3) NULL DEFAULT NULL, + `DERIVED_FROM_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `DERIVED_FROM_ROOT_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `PARENT_DEPLOYMENT_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `ENGINE_VERSION_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + PRIMARY KEY (`ID_`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb3 COLLATE = utf8mb3_bin ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of act_re_deployment +-- ---------------------------- +INSERT INTO `act_re_deployment` VALUES ('1', '设备报修申请', 'eam_asset_equipment_repair', NULL, '', '2024-08-23 17:09:27.276', NULL, NULL, '1', NULL); +INSERT INTO `act_re_deployment` VALUES ('13', '员工资产报修', 'eam_asset_employee_repair', NULL, '', '2024-08-23 17:10:53.588', NULL, NULL, '13', NULL); +INSERT INTO `act_re_deployment` VALUES ('17', '员工资产交接', 'eam_asset_employee_handover', NULL, '', '2024-08-23 17:11:11.573', NULL, NULL, '17', NULL); +INSERT INTO `act_re_deployment` VALUES ('21', '员工资产申请', 'eam_asset_employee_apply', NULL, '', '2024-08-23 17:11:28.218', NULL, NULL, '21', NULL); +INSERT INTO `act_re_deployment` VALUES ('25', '资产采购申请', 'eam_asset_purchase_apply', NULL, '', '2024-08-23 17:11:47.477', NULL, NULL, '25', NULL); +INSERT INTO `act_re_deployment` VALUES ('29', '资产设备报废', 'eam_asset_scrap', NULL, '', '2024-08-23 17:12:02.937', NULL, NULL, '29', NULL); +INSERT INTO `act_re_deployment` VALUES ('5', '物品领用申请', 'eam_asset_stock_goods_use', NULL, '', '2024-08-23 17:10:01.292', NULL, NULL, '5', NULL); +INSERT INTO `act_re_deployment` VALUES ('9', '员工资产报失', 'eam_asset_employee_loss', NULL, '', '2024-08-23 17:10:32.522', NULL, NULL, '9', NULL); + +-- ---------------------------- +-- Table structure for act_re_model +-- ---------------------------- +DROP TABLE IF EXISTS `act_re_model`; +CREATE TABLE `act_re_model` ( + `ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `REV_` int NULL DEFAULT NULL, + `NAME_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `KEY_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `CATEGORY_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `CREATE_TIME_` timestamp(3) NULL DEFAULT NULL, + `LAST_UPDATE_TIME_` timestamp(3) NULL DEFAULT NULL, + `VERSION_` int NULL DEFAULT NULL, + `META_INFO_` varchar(4000) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `DEPLOYMENT_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `EDITOR_SOURCE_VALUE_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `EDITOR_SOURCE_EXTRA_VALUE_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `TENANT_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT '', + PRIMARY KEY (`ID_`) USING BTREE, + INDEX `ACT_FK_MODEL_SOURCE`(`EDITOR_SOURCE_VALUE_ID_` ASC) USING BTREE, + INDEX `ACT_FK_MODEL_SOURCE_EXTRA`(`EDITOR_SOURCE_EXTRA_VALUE_ID_` ASC) USING BTREE, + INDEX `ACT_FK_MODEL_DEPLOYMENT`(`DEPLOYMENT_ID_` ASC) USING BTREE, + CONSTRAINT `ACT_FK_MODEL_DEPLOYMENT` FOREIGN KEY (`DEPLOYMENT_ID_`) REFERENCES `act_re_deployment` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT, + CONSTRAINT `ACT_FK_MODEL_SOURCE` FOREIGN KEY (`EDITOR_SOURCE_VALUE_ID_`) REFERENCES `act_ge_bytearray` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT, + CONSTRAINT `ACT_FK_MODEL_SOURCE_EXTRA` FOREIGN KEY (`EDITOR_SOURCE_EXTRA_VALUE_ID_`) REFERENCES `act_ge_bytearray` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT +) ENGINE = InnoDB CHARACTER SET = utf8mb3 COLLATE = utf8mb3_bin ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of act_re_model +-- ---------------------------- + +-- ---------------------------- +-- Table structure for act_re_procdef +-- ---------------------------- +DROP TABLE IF EXISTS `act_re_procdef`; +CREATE TABLE `act_re_procdef` ( + `ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `REV_` int NULL DEFAULT NULL, + `CATEGORY_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `NAME_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `KEY_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `VERSION_` int NOT NULL, + `DEPLOYMENT_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `RESOURCE_NAME_` varchar(4000) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `DGRM_RESOURCE_NAME_` varchar(4000) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `DESCRIPTION_` varchar(4000) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `HAS_START_FORM_KEY_` tinyint NULL DEFAULT NULL, + `HAS_GRAPHICAL_NOTATION_` tinyint NULL DEFAULT NULL, + `SUSPENSION_STATE_` int NULL DEFAULT NULL, + `TENANT_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT '', + `ENGINE_VERSION_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `DERIVED_FROM_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `DERIVED_FROM_ROOT_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `DERIVED_VERSION_` int NOT NULL DEFAULT 0, + PRIMARY KEY (`ID_`) USING BTREE, + UNIQUE INDEX `ACT_UNIQ_PROCDEF`(`KEY_` ASC, `VERSION_` ASC, `DERIVED_VERSION_` ASC, `TENANT_ID_` ASC) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb3 COLLATE = utf8mb3_bin ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of act_re_procdef +-- ---------------------------- +INSERT INTO `act_re_procdef` VALUES ('eam_asset_employee_apply:1:24', 2, 'eam_asset_employee_apply', '员工资产申请', 'eam_asset_employee_apply', 1, '21', '员工资产申请.bpmn', '员工资产申请.eam_asset_employee_apply.png', NULL, 0, 1, 1, '', NULL, NULL, NULL, 0); +INSERT INTO `act_re_procdef` VALUES ('eam_asset_employee_handover:1:20', 2, 'eam_asset_employee_handover', '员工资产交接', 'eam_asset_employee_handover', 1, '17', '员工资产交接.bpmn', '员工资产交接.eam_asset_employee_handover.png', NULL, 0, 1, 1, '', NULL, NULL, NULL, 0); +INSERT INTO `act_re_procdef` VALUES ('eam_asset_employee_loss:1:12', 2, 'eam_asset_employee_loss', '员工资产报失', 'eam_asset_employee_loss', 1, '9', '员工资产报失.bpmn', '员工资产报失.eam_asset_employee_loss.png', NULL, 0, 1, 1, '', NULL, NULL, NULL, 0); +INSERT INTO `act_re_procdef` VALUES ('eam_asset_employee_repair:1:16', 2, 'eam_asset_employee_repair', '员工资产报修', 'eam_asset_employee_repair', 1, '13', '员工资产报修.bpmn', '员工资产报修.eam_asset_employee_repair.png', NULL, 0, 1, 1, '', NULL, NULL, NULL, 0); +INSERT INTO `act_re_procdef` VALUES ('eam_asset_equipment_repair:1:4', 2, 'eam_asset_equipment_repair', '设备报修申请', 'eam_asset_equipment_repair', 1, '1', '设备报修申请.bpmn', '设备报修申请.eam_asset_equipment_repair.png', NULL, 0, 1, 1, '', NULL, NULL, NULL, 0); +INSERT INTO `act_re_procdef` VALUES ('eam_asset_purchase_apply:1:28', 2, 'eam_asset_purchase_apply', '资产采购申请', 'eam_asset_purchase_apply', 1, '25', '资产采购申请.bpmn', '资产采购申请.eam_asset_purchase_apply.png', NULL, 0, 1, 1, '', NULL, NULL, NULL, 0); +INSERT INTO `act_re_procdef` VALUES ('eam_asset_scrap:1:32', 2, 'eam_asset_scrap', '资产设备报废', 'eam_asset_scrap', 1, '29', '资产设备报废.bpmn', '资产设备报废.eam_asset_scrap.png', NULL, 0, 1, 1, '', NULL, NULL, NULL, 0); +INSERT INTO `act_re_procdef` VALUES ('eam_asset_stock_goods_use:1:8', 2, 'eam_asset_stock_goods_use', '物品领用申请', 'eam_asset_stock_goods_use', 1, '5', '物品领用申请.bpmn', '物品领用申请.eam_asset_stock_goods_use.png', NULL, 0, 1, 1, '', NULL, NULL, NULL, 0); + +-- ---------------------------- +-- Table structure for act_ru_actinst +-- ---------------------------- +DROP TABLE IF EXISTS `act_ru_actinst`; +CREATE TABLE `act_ru_actinst` ( + `ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `REV_` int NULL DEFAULT 1, + `PROC_DEF_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `PROC_INST_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `EXECUTION_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `ACT_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `TASK_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `CALL_PROC_INST_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `ACT_NAME_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `ACT_TYPE_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `ASSIGNEE_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `START_TIME_` datetime(3) NOT NULL, + `END_TIME_` datetime(3) NULL DEFAULT NULL, + `DURATION_` bigint NULL DEFAULT NULL, + `TRANSACTION_ORDER_` int NULL DEFAULT NULL, + `DELETE_REASON_` varchar(4000) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `TENANT_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT '', + PRIMARY KEY (`ID_`) USING BTREE, + INDEX `ACT_IDX_RU_ACTI_START`(`START_TIME_` ASC) USING BTREE, + INDEX `ACT_IDX_RU_ACTI_END`(`END_TIME_` ASC) USING BTREE, + INDEX `ACT_IDX_RU_ACTI_PROC`(`PROC_INST_ID_` ASC) USING BTREE, + INDEX `ACT_IDX_RU_ACTI_PROC_ACT`(`PROC_INST_ID_` ASC, `ACT_ID_` ASC) USING BTREE, + INDEX `ACT_IDX_RU_ACTI_EXEC`(`EXECUTION_ID_` ASC) USING BTREE, + INDEX `ACT_IDX_RU_ACTI_EXEC_ACT`(`EXECUTION_ID_` ASC, `ACT_ID_` ASC) USING BTREE, + INDEX `ACT_IDX_RU_ACTI_TASK`(`TASK_ID_` ASC) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb3 COLLATE = utf8mb3_bin ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of act_ru_actinst +-- ---------------------------- + +-- ---------------------------- +-- Table structure for act_ru_deadletter_job +-- ---------------------------- +DROP TABLE IF EXISTS `act_ru_deadletter_job`; +CREATE TABLE `act_ru_deadletter_job` ( + `ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `REV_` int NULL DEFAULT NULL, + `CATEGORY_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `TYPE_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `EXCLUSIVE_` tinyint(1) NULL DEFAULT NULL, + `EXECUTION_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `PROCESS_INSTANCE_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `PROC_DEF_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `ELEMENT_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `ELEMENT_NAME_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `SCOPE_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `SUB_SCOPE_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `SCOPE_TYPE_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `SCOPE_DEFINITION_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `CORRELATION_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `EXCEPTION_STACK_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `EXCEPTION_MSG_` varchar(4000) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `DUEDATE_` timestamp(3) NULL DEFAULT NULL, + `REPEAT_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `HANDLER_TYPE_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `HANDLER_CFG_` varchar(4000) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `CUSTOM_VALUES_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `CREATE_TIME_` timestamp(3) NULL DEFAULT NULL, + `TENANT_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT '', + PRIMARY KEY (`ID_`) USING BTREE, + INDEX `ACT_IDX_DEADLETTER_JOB_EXCEPTION_STACK_ID`(`EXCEPTION_STACK_ID_` ASC) USING BTREE, + INDEX `ACT_IDX_DEADLETTER_JOB_CUSTOM_VALUES_ID`(`CUSTOM_VALUES_ID_` ASC) USING BTREE, + INDEX `ACT_IDX_DEADLETTER_JOB_CORRELATION_ID`(`CORRELATION_ID_` ASC) USING BTREE, + INDEX `ACT_IDX_DJOB_SCOPE`(`SCOPE_ID_` ASC, `SCOPE_TYPE_` ASC) USING BTREE, + INDEX `ACT_IDX_DJOB_SUB_SCOPE`(`SUB_SCOPE_ID_` ASC, `SCOPE_TYPE_` ASC) USING BTREE, + INDEX `ACT_IDX_DJOB_SCOPE_DEF`(`SCOPE_DEFINITION_ID_` ASC, `SCOPE_TYPE_` ASC) USING BTREE, + INDEX `ACT_FK_DEADLETTER_JOB_EXECUTION`(`EXECUTION_ID_` ASC) USING BTREE, + INDEX `ACT_FK_DEADLETTER_JOB_PROCESS_INSTANCE`(`PROCESS_INSTANCE_ID_` ASC) USING BTREE, + INDEX `ACT_FK_DEADLETTER_JOB_PROC_DEF`(`PROC_DEF_ID_` ASC) USING BTREE, + CONSTRAINT `ACT_FK_DEADLETTER_JOB_CUSTOM_VALUES` FOREIGN KEY (`CUSTOM_VALUES_ID_`) REFERENCES `act_ge_bytearray` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT, + CONSTRAINT `ACT_FK_DEADLETTER_JOB_EXCEPTION` FOREIGN KEY (`EXCEPTION_STACK_ID_`) REFERENCES `act_ge_bytearray` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT, + CONSTRAINT `ACT_FK_DEADLETTER_JOB_EXECUTION` FOREIGN KEY (`EXECUTION_ID_`) REFERENCES `act_ru_execution` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT, + CONSTRAINT `ACT_FK_DEADLETTER_JOB_PROC_DEF` FOREIGN KEY (`PROC_DEF_ID_`) REFERENCES `act_re_procdef` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT, + CONSTRAINT `ACT_FK_DEADLETTER_JOB_PROCESS_INSTANCE` FOREIGN KEY (`PROCESS_INSTANCE_ID_`) REFERENCES `act_ru_execution` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT +) ENGINE = InnoDB CHARACTER SET = utf8mb3 COLLATE = utf8mb3_bin ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of act_ru_deadletter_job +-- ---------------------------- + +-- ---------------------------- +-- Table structure for act_ru_entitylink +-- ---------------------------- +DROP TABLE IF EXISTS `act_ru_entitylink`; +CREATE TABLE `act_ru_entitylink` ( + `ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `REV_` int NULL DEFAULT NULL, + `CREATE_TIME_` datetime(3) NULL DEFAULT NULL, + `LINK_TYPE_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `SCOPE_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `SUB_SCOPE_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `SCOPE_TYPE_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `SCOPE_DEFINITION_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `PARENT_ELEMENT_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `REF_SCOPE_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `REF_SCOPE_TYPE_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `REF_SCOPE_DEFINITION_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `ROOT_SCOPE_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `ROOT_SCOPE_TYPE_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `HIERARCHY_TYPE_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + PRIMARY KEY (`ID_`) USING BTREE, + INDEX `ACT_IDX_ENT_LNK_SCOPE`(`SCOPE_ID_` ASC, `SCOPE_TYPE_` ASC, `LINK_TYPE_` ASC) USING BTREE, + INDEX `ACT_IDX_ENT_LNK_REF_SCOPE`(`REF_SCOPE_ID_` ASC, `REF_SCOPE_TYPE_` ASC, `LINK_TYPE_` ASC) USING BTREE, + INDEX `ACT_IDX_ENT_LNK_ROOT_SCOPE`(`ROOT_SCOPE_ID_` ASC, `ROOT_SCOPE_TYPE_` ASC, `LINK_TYPE_` ASC) USING BTREE, + INDEX `ACT_IDX_ENT_LNK_SCOPE_DEF`(`SCOPE_DEFINITION_ID_` ASC, `SCOPE_TYPE_` ASC, `LINK_TYPE_` ASC) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb3 COLLATE = utf8mb3_bin ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of act_ru_entitylink +-- ---------------------------- + +-- ---------------------------- +-- Table structure for act_ru_event_subscr +-- ---------------------------- +DROP TABLE IF EXISTS `act_ru_event_subscr`; +CREATE TABLE `act_ru_event_subscr` ( + `ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `REV_` int NULL DEFAULT NULL, + `EVENT_TYPE_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `EVENT_NAME_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `EXECUTION_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `PROC_INST_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `ACTIVITY_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `CONFIGURATION_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `CREATED_` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `PROC_DEF_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `SUB_SCOPE_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `SCOPE_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `SCOPE_DEFINITION_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `SCOPE_TYPE_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `LOCK_TIME_` timestamp(3) NULL DEFAULT NULL, + `LOCK_OWNER_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `TENANT_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT '', + PRIMARY KEY (`ID_`) USING BTREE, + INDEX `ACT_IDX_EVENT_SUBSCR_CONFIG_`(`CONFIGURATION_` ASC) USING BTREE, + INDEX `ACT_IDX_EVENT_SUBSCR_SCOPEREF_`(`SCOPE_ID_` ASC, `SCOPE_TYPE_` ASC) USING BTREE, + INDEX `ACT_FK_EVENT_EXEC`(`EXECUTION_ID_` ASC) USING BTREE, + CONSTRAINT `ACT_FK_EVENT_EXEC` FOREIGN KEY (`EXECUTION_ID_`) REFERENCES `act_ru_execution` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT +) ENGINE = InnoDB CHARACTER SET = utf8mb3 COLLATE = utf8mb3_bin ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of act_ru_event_subscr +-- ---------------------------- + +-- ---------------------------- +-- Table structure for act_ru_execution +-- ---------------------------- +DROP TABLE IF EXISTS `act_ru_execution`; +CREATE TABLE `act_ru_execution` ( + `ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `REV_` int NULL DEFAULT NULL, + `PROC_INST_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `BUSINESS_KEY_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `PARENT_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `PROC_DEF_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `SUPER_EXEC_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `ROOT_PROC_INST_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `ACT_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `IS_ACTIVE_` tinyint NULL DEFAULT NULL, + `IS_CONCURRENT_` tinyint NULL DEFAULT NULL, + `IS_SCOPE_` tinyint NULL DEFAULT NULL, + `IS_EVENT_SCOPE_` tinyint NULL DEFAULT NULL, + `IS_MI_ROOT_` tinyint NULL DEFAULT NULL, + `SUSPENSION_STATE_` int NULL DEFAULT NULL, + `CACHED_ENT_STATE_` int NULL DEFAULT NULL, + `TENANT_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT '', + `NAME_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `START_ACT_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `START_TIME_` datetime(3) NULL DEFAULT NULL, + `START_USER_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `LOCK_TIME_` timestamp(3) NULL DEFAULT NULL, + `LOCK_OWNER_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `IS_COUNT_ENABLED_` tinyint NULL DEFAULT NULL, + `EVT_SUBSCR_COUNT_` int NULL DEFAULT NULL, + `TASK_COUNT_` int NULL DEFAULT NULL, + `JOB_COUNT_` int NULL DEFAULT NULL, + `TIMER_JOB_COUNT_` int NULL DEFAULT NULL, + `SUSP_JOB_COUNT_` int NULL DEFAULT NULL, + `DEADLETTER_JOB_COUNT_` int NULL DEFAULT NULL, + `EXTERNAL_WORKER_JOB_COUNT_` int NULL DEFAULT NULL, + `VAR_COUNT_` int NULL DEFAULT NULL, + `ID_LINK_COUNT_` int NULL DEFAULT NULL, + `CALLBACK_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `CALLBACK_TYPE_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `REFERENCE_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `REFERENCE_TYPE_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `PROPAGATED_STAGE_INST_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `BUSINESS_STATUS_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + PRIMARY KEY (`ID_`) USING BTREE, + INDEX `ACT_IDX_EXEC_BUSKEY`(`BUSINESS_KEY_` ASC) USING BTREE, + INDEX `ACT_IDC_EXEC_ROOT`(`ROOT_PROC_INST_ID_` ASC) USING BTREE, + INDEX `ACT_IDX_EXEC_REF_ID_`(`REFERENCE_ID_` ASC) USING BTREE, + INDEX `ACT_FK_EXE_PROCINST`(`PROC_INST_ID_` ASC) USING BTREE, + INDEX `ACT_FK_EXE_PARENT`(`PARENT_ID_` ASC) USING BTREE, + INDEX `ACT_FK_EXE_SUPER`(`SUPER_EXEC_` ASC) USING BTREE, + INDEX `ACT_FK_EXE_PROCDEF`(`PROC_DEF_ID_` ASC) USING BTREE, + CONSTRAINT `ACT_FK_EXE_PARENT` FOREIGN KEY (`PARENT_ID_`) REFERENCES `act_ru_execution` (`ID_`) ON DELETE CASCADE ON UPDATE RESTRICT, + CONSTRAINT `ACT_FK_EXE_PROCDEF` FOREIGN KEY (`PROC_DEF_ID_`) REFERENCES `act_re_procdef` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT, + CONSTRAINT `ACT_FK_EXE_PROCINST` FOREIGN KEY (`PROC_INST_ID_`) REFERENCES `act_ru_execution` (`ID_`) ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `ACT_FK_EXE_SUPER` FOREIGN KEY (`SUPER_EXEC_`) REFERENCES `act_ru_execution` (`ID_`) ON DELETE CASCADE ON UPDATE RESTRICT +) ENGINE = InnoDB CHARACTER SET = utf8mb3 COLLATE = utf8mb3_bin ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of act_ru_execution +-- ---------------------------- + +-- ---------------------------- +-- Table structure for act_ru_external_job +-- ---------------------------- +DROP TABLE IF EXISTS `act_ru_external_job`; +CREATE TABLE `act_ru_external_job` ( + `ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `REV_` int NULL DEFAULT NULL, + `CATEGORY_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `TYPE_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `LOCK_EXP_TIME_` timestamp(3) NULL DEFAULT NULL, + `LOCK_OWNER_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `EXCLUSIVE_` tinyint(1) NULL DEFAULT NULL, + `EXECUTION_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `PROCESS_INSTANCE_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `PROC_DEF_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `ELEMENT_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `ELEMENT_NAME_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `SCOPE_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `SUB_SCOPE_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `SCOPE_TYPE_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `SCOPE_DEFINITION_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `CORRELATION_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `RETRIES_` int NULL DEFAULT NULL, + `EXCEPTION_STACK_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `EXCEPTION_MSG_` varchar(4000) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `DUEDATE_` timestamp(3) NULL DEFAULT NULL, + `REPEAT_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `HANDLER_TYPE_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `HANDLER_CFG_` varchar(4000) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `CUSTOM_VALUES_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `CREATE_TIME_` timestamp(3) NULL DEFAULT NULL, + `TENANT_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT '', + PRIMARY KEY (`ID_`) USING BTREE, + INDEX `ACT_IDX_EXTERNAL_JOB_EXCEPTION_STACK_ID`(`EXCEPTION_STACK_ID_` ASC) USING BTREE, + INDEX `ACT_IDX_EXTERNAL_JOB_CUSTOM_VALUES_ID`(`CUSTOM_VALUES_ID_` ASC) USING BTREE, + INDEX `ACT_IDX_EXTERNAL_JOB_CORRELATION_ID`(`CORRELATION_ID_` ASC) USING BTREE, + INDEX `ACT_IDX_EJOB_SCOPE`(`SCOPE_ID_` ASC, `SCOPE_TYPE_` ASC) USING BTREE, + INDEX `ACT_IDX_EJOB_SUB_SCOPE`(`SUB_SCOPE_ID_` ASC, `SCOPE_TYPE_` ASC) USING BTREE, + INDEX `ACT_IDX_EJOB_SCOPE_DEF`(`SCOPE_DEFINITION_ID_` ASC, `SCOPE_TYPE_` ASC) USING BTREE, + CONSTRAINT `ACT_FK_EXTERNAL_JOB_CUSTOM_VALUES` FOREIGN KEY (`CUSTOM_VALUES_ID_`) REFERENCES `act_ge_bytearray` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT, + CONSTRAINT `ACT_FK_EXTERNAL_JOB_EXCEPTION` FOREIGN KEY (`EXCEPTION_STACK_ID_`) REFERENCES `act_ge_bytearray` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT +) ENGINE = InnoDB CHARACTER SET = utf8mb3 COLLATE = utf8mb3_bin ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of act_ru_external_job +-- ---------------------------- + +-- ---------------------------- +-- Table structure for act_ru_history_job +-- ---------------------------- +DROP TABLE IF EXISTS `act_ru_history_job`; +CREATE TABLE `act_ru_history_job` ( + `ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `REV_` int NULL DEFAULT NULL, + `LOCK_EXP_TIME_` timestamp(3) NULL DEFAULT NULL, + `LOCK_OWNER_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `RETRIES_` int NULL DEFAULT NULL, + `EXCEPTION_STACK_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `EXCEPTION_MSG_` varchar(4000) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `HANDLER_TYPE_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `HANDLER_CFG_` varchar(4000) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `CUSTOM_VALUES_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `ADV_HANDLER_CFG_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `CREATE_TIME_` timestamp(3) NULL DEFAULT NULL, + `SCOPE_TYPE_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `TENANT_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT '', + PRIMARY KEY (`ID_`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb3 COLLATE = utf8mb3_bin ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of act_ru_history_job +-- ---------------------------- + +-- ---------------------------- +-- Table structure for act_ru_identitylink +-- ---------------------------- +DROP TABLE IF EXISTS `act_ru_identitylink`; +CREATE TABLE `act_ru_identitylink` ( + `ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `REV_` int NULL DEFAULT NULL, + `GROUP_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `TYPE_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `USER_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `TASK_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `PROC_INST_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `PROC_DEF_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `SCOPE_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `SUB_SCOPE_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `SCOPE_TYPE_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `SCOPE_DEFINITION_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + PRIMARY KEY (`ID_`) USING BTREE, + INDEX `ACT_IDX_IDENT_LNK_USER`(`USER_ID_` ASC) USING BTREE, + INDEX `ACT_IDX_IDENT_LNK_GROUP`(`GROUP_ID_` ASC) USING BTREE, + INDEX `ACT_IDX_IDENT_LNK_SCOPE`(`SCOPE_ID_` ASC, `SCOPE_TYPE_` ASC) USING BTREE, + INDEX `ACT_IDX_IDENT_LNK_SUB_SCOPE`(`SUB_SCOPE_ID_` ASC, `SCOPE_TYPE_` ASC) USING BTREE, + INDEX `ACT_IDX_IDENT_LNK_SCOPE_DEF`(`SCOPE_DEFINITION_ID_` ASC, `SCOPE_TYPE_` ASC) USING BTREE, + INDEX `ACT_IDX_ATHRZ_PROCEDEF`(`PROC_DEF_ID_` ASC) USING BTREE, + INDEX `ACT_FK_TSKASS_TASK`(`TASK_ID_` ASC) USING BTREE, + INDEX `ACT_FK_IDL_PROCINST`(`PROC_INST_ID_` ASC) USING BTREE, + CONSTRAINT `ACT_FK_ATHRZ_PROCEDEF` FOREIGN KEY (`PROC_DEF_ID_`) REFERENCES `act_re_procdef` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT, + CONSTRAINT `ACT_FK_IDL_PROCINST` FOREIGN KEY (`PROC_INST_ID_`) REFERENCES `act_ru_execution` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT, + CONSTRAINT `ACT_FK_TSKASS_TASK` FOREIGN KEY (`TASK_ID_`) REFERENCES `act_ru_task` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT +) ENGINE = InnoDB CHARACTER SET = utf8mb3 COLLATE = utf8mb3_bin ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of act_ru_identitylink +-- ---------------------------- + +-- ---------------------------- +-- Table structure for act_ru_job +-- ---------------------------- +DROP TABLE IF EXISTS `act_ru_job`; +CREATE TABLE `act_ru_job` ( + `ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `REV_` int NULL DEFAULT NULL, + `CATEGORY_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `TYPE_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `LOCK_EXP_TIME_` timestamp(3) NULL DEFAULT NULL, + `LOCK_OWNER_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `EXCLUSIVE_` tinyint(1) NULL DEFAULT NULL, + `EXECUTION_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `PROCESS_INSTANCE_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `PROC_DEF_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `ELEMENT_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `ELEMENT_NAME_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `SCOPE_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `SUB_SCOPE_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `SCOPE_TYPE_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `SCOPE_DEFINITION_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `CORRELATION_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `RETRIES_` int NULL DEFAULT NULL, + `EXCEPTION_STACK_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `EXCEPTION_MSG_` varchar(4000) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `DUEDATE_` timestamp(3) NULL DEFAULT NULL, + `REPEAT_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `HANDLER_TYPE_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `HANDLER_CFG_` varchar(4000) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `CUSTOM_VALUES_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `CREATE_TIME_` timestamp(3) NULL DEFAULT NULL, + `TENANT_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT '', + PRIMARY KEY (`ID_`) USING BTREE, + INDEX `ACT_IDX_JOB_EXCEPTION_STACK_ID`(`EXCEPTION_STACK_ID_` ASC) USING BTREE, + INDEX `ACT_IDX_JOB_CUSTOM_VALUES_ID`(`CUSTOM_VALUES_ID_` ASC) USING BTREE, + INDEX `ACT_IDX_JOB_CORRELATION_ID`(`CORRELATION_ID_` ASC) USING BTREE, + INDEX `ACT_IDX_JOB_SCOPE`(`SCOPE_ID_` ASC, `SCOPE_TYPE_` ASC) USING BTREE, + INDEX `ACT_IDX_JOB_SUB_SCOPE`(`SUB_SCOPE_ID_` ASC, `SCOPE_TYPE_` ASC) USING BTREE, + INDEX `ACT_IDX_JOB_SCOPE_DEF`(`SCOPE_DEFINITION_ID_` ASC, `SCOPE_TYPE_` ASC) USING BTREE, + INDEX `ACT_FK_JOB_EXECUTION`(`EXECUTION_ID_` ASC) USING BTREE, + INDEX `ACT_FK_JOB_PROCESS_INSTANCE`(`PROCESS_INSTANCE_ID_` ASC) USING BTREE, + INDEX `ACT_FK_JOB_PROC_DEF`(`PROC_DEF_ID_` ASC) USING BTREE, + CONSTRAINT `ACT_FK_JOB_CUSTOM_VALUES` FOREIGN KEY (`CUSTOM_VALUES_ID_`) REFERENCES `act_ge_bytearray` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT, + CONSTRAINT `ACT_FK_JOB_EXCEPTION` FOREIGN KEY (`EXCEPTION_STACK_ID_`) REFERENCES `act_ge_bytearray` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT, + CONSTRAINT `ACT_FK_JOB_EXECUTION` FOREIGN KEY (`EXECUTION_ID_`) REFERENCES `act_ru_execution` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT, + CONSTRAINT `ACT_FK_JOB_PROC_DEF` FOREIGN KEY (`PROC_DEF_ID_`) REFERENCES `act_re_procdef` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT, + CONSTRAINT `ACT_FK_JOB_PROCESS_INSTANCE` FOREIGN KEY (`PROCESS_INSTANCE_ID_`) REFERENCES `act_ru_execution` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT +) ENGINE = InnoDB CHARACTER SET = utf8mb3 COLLATE = utf8mb3_bin ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of act_ru_job +-- ---------------------------- + +-- ---------------------------- +-- Table structure for act_ru_suspended_job +-- ---------------------------- +DROP TABLE IF EXISTS `act_ru_suspended_job`; +CREATE TABLE `act_ru_suspended_job` ( + `ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `REV_` int NULL DEFAULT NULL, + `CATEGORY_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `TYPE_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `EXCLUSIVE_` tinyint(1) NULL DEFAULT NULL, + `EXECUTION_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `PROCESS_INSTANCE_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `PROC_DEF_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `ELEMENT_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `ELEMENT_NAME_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `SCOPE_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `SUB_SCOPE_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `SCOPE_TYPE_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `SCOPE_DEFINITION_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `CORRELATION_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `RETRIES_` int NULL DEFAULT NULL, + `EXCEPTION_STACK_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `EXCEPTION_MSG_` varchar(4000) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `DUEDATE_` timestamp(3) NULL DEFAULT NULL, + `REPEAT_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `HANDLER_TYPE_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `HANDLER_CFG_` varchar(4000) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `CUSTOM_VALUES_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `CREATE_TIME_` timestamp(3) NULL DEFAULT NULL, + `TENANT_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT '', + PRIMARY KEY (`ID_`) USING BTREE, + INDEX `ACT_IDX_SUSPENDED_JOB_EXCEPTION_STACK_ID`(`EXCEPTION_STACK_ID_` ASC) USING BTREE, + INDEX `ACT_IDX_SUSPENDED_JOB_CUSTOM_VALUES_ID`(`CUSTOM_VALUES_ID_` ASC) USING BTREE, + INDEX `ACT_IDX_SUSPENDED_JOB_CORRELATION_ID`(`CORRELATION_ID_` ASC) USING BTREE, + INDEX `ACT_IDX_SJOB_SCOPE`(`SCOPE_ID_` ASC, `SCOPE_TYPE_` ASC) USING BTREE, + INDEX `ACT_IDX_SJOB_SUB_SCOPE`(`SUB_SCOPE_ID_` ASC, `SCOPE_TYPE_` ASC) USING BTREE, + INDEX `ACT_IDX_SJOB_SCOPE_DEF`(`SCOPE_DEFINITION_ID_` ASC, `SCOPE_TYPE_` ASC) USING BTREE, + INDEX `ACT_FK_SUSPENDED_JOB_EXECUTION`(`EXECUTION_ID_` ASC) USING BTREE, + INDEX `ACT_FK_SUSPENDED_JOB_PROCESS_INSTANCE`(`PROCESS_INSTANCE_ID_` ASC) USING BTREE, + INDEX `ACT_FK_SUSPENDED_JOB_PROC_DEF`(`PROC_DEF_ID_` ASC) USING BTREE, + CONSTRAINT `ACT_FK_SUSPENDED_JOB_CUSTOM_VALUES` FOREIGN KEY (`CUSTOM_VALUES_ID_`) REFERENCES `act_ge_bytearray` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT, + CONSTRAINT `ACT_FK_SUSPENDED_JOB_EXCEPTION` FOREIGN KEY (`EXCEPTION_STACK_ID_`) REFERENCES `act_ge_bytearray` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT, + CONSTRAINT `ACT_FK_SUSPENDED_JOB_EXECUTION` FOREIGN KEY (`EXECUTION_ID_`) REFERENCES `act_ru_execution` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT, + CONSTRAINT `ACT_FK_SUSPENDED_JOB_PROC_DEF` FOREIGN KEY (`PROC_DEF_ID_`) REFERENCES `act_re_procdef` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT, + CONSTRAINT `ACT_FK_SUSPENDED_JOB_PROCESS_INSTANCE` FOREIGN KEY (`PROCESS_INSTANCE_ID_`) REFERENCES `act_ru_execution` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT +) ENGINE = InnoDB CHARACTER SET = utf8mb3 COLLATE = utf8mb3_bin ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of act_ru_suspended_job +-- ---------------------------- + +-- ---------------------------- +-- Table structure for act_ru_task +-- ---------------------------- +DROP TABLE IF EXISTS `act_ru_task`; +CREATE TABLE `act_ru_task` ( + `ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `REV_` int NULL DEFAULT NULL, + `EXECUTION_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `PROC_INST_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `PROC_DEF_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `TASK_DEF_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `SCOPE_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `SUB_SCOPE_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `SCOPE_TYPE_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `SCOPE_DEFINITION_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `PROPAGATED_STAGE_INST_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `NAME_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `PARENT_TASK_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `DESCRIPTION_` varchar(4000) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `TASK_DEF_KEY_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `OWNER_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `ASSIGNEE_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `DELEGATION_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `PRIORITY_` int NULL DEFAULT NULL, + `CREATE_TIME_` timestamp(3) NULL DEFAULT NULL, + `DUE_DATE_` datetime(3) NULL DEFAULT NULL, + `CATEGORY_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `SUSPENSION_STATE_` int NULL DEFAULT NULL, + `TENANT_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT '', + `FORM_KEY_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `CLAIM_TIME_` datetime(3) NULL DEFAULT NULL, + `IS_COUNT_ENABLED_` tinyint NULL DEFAULT NULL, + `VAR_COUNT_` int NULL DEFAULT NULL, + `ID_LINK_COUNT_` int NULL DEFAULT NULL, + `SUB_TASK_COUNT_` int NULL DEFAULT NULL, + PRIMARY KEY (`ID_`) USING BTREE, + INDEX `ACT_IDX_TASK_CREATE`(`CREATE_TIME_` ASC) USING BTREE, + INDEX `ACT_IDX_TASK_SCOPE`(`SCOPE_ID_` ASC, `SCOPE_TYPE_` ASC) USING BTREE, + INDEX `ACT_IDX_TASK_SUB_SCOPE`(`SUB_SCOPE_ID_` ASC, `SCOPE_TYPE_` ASC) USING BTREE, + INDEX `ACT_IDX_TASK_SCOPE_DEF`(`SCOPE_DEFINITION_ID_` ASC, `SCOPE_TYPE_` ASC) USING BTREE, + INDEX `ACT_FK_TASK_EXE`(`EXECUTION_ID_` ASC) USING BTREE, + INDEX `ACT_FK_TASK_PROCINST`(`PROC_INST_ID_` ASC) USING BTREE, + INDEX `ACT_FK_TASK_PROCDEF`(`PROC_DEF_ID_` ASC) USING BTREE, + CONSTRAINT `ACT_FK_TASK_EXE` FOREIGN KEY (`EXECUTION_ID_`) REFERENCES `act_ru_execution` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT, + CONSTRAINT `ACT_FK_TASK_PROCDEF` FOREIGN KEY (`PROC_DEF_ID_`) REFERENCES `act_re_procdef` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT, + CONSTRAINT `ACT_FK_TASK_PROCINST` FOREIGN KEY (`PROC_INST_ID_`) REFERENCES `act_ru_execution` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT +) ENGINE = InnoDB CHARACTER SET = utf8mb3 COLLATE = utf8mb3_bin ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of act_ru_task +-- ---------------------------- + +-- ---------------------------- +-- Table structure for act_ru_timer_job +-- ---------------------------- +DROP TABLE IF EXISTS `act_ru_timer_job`; +CREATE TABLE `act_ru_timer_job` ( + `ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `REV_` int NULL DEFAULT NULL, + `CATEGORY_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `TYPE_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `LOCK_EXP_TIME_` timestamp(3) NULL DEFAULT NULL, + `LOCK_OWNER_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `EXCLUSIVE_` tinyint(1) NULL DEFAULT NULL, + `EXECUTION_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `PROCESS_INSTANCE_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `PROC_DEF_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `ELEMENT_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `ELEMENT_NAME_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `SCOPE_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `SUB_SCOPE_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `SCOPE_TYPE_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `SCOPE_DEFINITION_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `CORRELATION_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `RETRIES_` int NULL DEFAULT NULL, + `EXCEPTION_STACK_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `EXCEPTION_MSG_` varchar(4000) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `DUEDATE_` timestamp(3) NULL DEFAULT NULL, + `REPEAT_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `HANDLER_TYPE_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `HANDLER_CFG_` varchar(4000) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `CUSTOM_VALUES_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `CREATE_TIME_` timestamp(3) NULL DEFAULT NULL, + `TENANT_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT '', + PRIMARY KEY (`ID_`) USING BTREE, + INDEX `ACT_IDX_TIMER_JOB_EXCEPTION_STACK_ID`(`EXCEPTION_STACK_ID_` ASC) USING BTREE, + INDEX `ACT_IDX_TIMER_JOB_CUSTOM_VALUES_ID`(`CUSTOM_VALUES_ID_` ASC) USING BTREE, + INDEX `ACT_IDX_TIMER_JOB_CORRELATION_ID`(`CORRELATION_ID_` ASC) USING BTREE, + INDEX `ACT_IDX_TIMER_JOB_DUEDATE`(`DUEDATE_` ASC) USING BTREE, + INDEX `ACT_IDX_TJOB_SCOPE`(`SCOPE_ID_` ASC, `SCOPE_TYPE_` ASC) USING BTREE, + INDEX `ACT_IDX_TJOB_SUB_SCOPE`(`SUB_SCOPE_ID_` ASC, `SCOPE_TYPE_` ASC) USING BTREE, + INDEX `ACT_IDX_TJOB_SCOPE_DEF`(`SCOPE_DEFINITION_ID_` ASC, `SCOPE_TYPE_` ASC) USING BTREE, + INDEX `ACT_FK_TIMER_JOB_EXECUTION`(`EXECUTION_ID_` ASC) USING BTREE, + INDEX `ACT_FK_TIMER_JOB_PROCESS_INSTANCE`(`PROCESS_INSTANCE_ID_` ASC) USING BTREE, + INDEX `ACT_FK_TIMER_JOB_PROC_DEF`(`PROC_DEF_ID_` ASC) USING BTREE, + CONSTRAINT `ACT_FK_TIMER_JOB_CUSTOM_VALUES` FOREIGN KEY (`CUSTOM_VALUES_ID_`) REFERENCES `act_ge_bytearray` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT, + CONSTRAINT `ACT_FK_TIMER_JOB_EXCEPTION` FOREIGN KEY (`EXCEPTION_STACK_ID_`) REFERENCES `act_ge_bytearray` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT, + CONSTRAINT `ACT_FK_TIMER_JOB_EXECUTION` FOREIGN KEY (`EXECUTION_ID_`) REFERENCES `act_ru_execution` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT, + CONSTRAINT `ACT_FK_TIMER_JOB_PROC_DEF` FOREIGN KEY (`PROC_DEF_ID_`) REFERENCES `act_re_procdef` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT, + CONSTRAINT `ACT_FK_TIMER_JOB_PROCESS_INSTANCE` FOREIGN KEY (`PROCESS_INSTANCE_ID_`) REFERENCES `act_ru_execution` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT +) ENGINE = InnoDB CHARACTER SET = utf8mb3 COLLATE = utf8mb3_bin ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of act_ru_timer_job +-- ---------------------------- + +-- ---------------------------- +-- Table structure for act_ru_variable +-- ---------------------------- +DROP TABLE IF EXISTS `act_ru_variable`; +CREATE TABLE `act_ru_variable` ( + `ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `REV_` int NULL DEFAULT NULL, + `TYPE_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `NAME_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `EXECUTION_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `PROC_INST_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `TASK_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `SCOPE_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `SUB_SCOPE_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `SCOPE_TYPE_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `BYTEARRAY_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `DOUBLE_` double NULL DEFAULT NULL, + `LONG_` bigint NULL DEFAULT NULL, + `TEXT_` varchar(4000) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `TEXT2_` varchar(4000) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + PRIMARY KEY (`ID_`) USING BTREE, + INDEX `ACT_IDX_RU_VAR_SCOPE_ID_TYPE`(`SCOPE_ID_` ASC, `SCOPE_TYPE_` ASC) USING BTREE, + INDEX `ACT_IDX_RU_VAR_SUB_ID_TYPE`(`SUB_SCOPE_ID_` ASC, `SCOPE_TYPE_` ASC) USING BTREE, + INDEX `ACT_FK_VAR_BYTEARRAY`(`BYTEARRAY_ID_` ASC) USING BTREE, + INDEX `ACT_IDX_VARIABLE_TASK_ID`(`TASK_ID_` ASC) USING BTREE, + INDEX `ACT_FK_VAR_EXE`(`EXECUTION_ID_` ASC) USING BTREE, + INDEX `ACT_FK_VAR_PROCINST`(`PROC_INST_ID_` ASC) USING BTREE, + CONSTRAINT `ACT_FK_VAR_BYTEARRAY` FOREIGN KEY (`BYTEARRAY_ID_`) REFERENCES `act_ge_bytearray` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT, + CONSTRAINT `ACT_FK_VAR_EXE` FOREIGN KEY (`EXECUTION_ID_`) REFERENCES `act_ru_execution` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT, + CONSTRAINT `ACT_FK_VAR_PROCINST` FOREIGN KEY (`PROC_INST_ID_`) REFERENCES `act_ru_execution` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT +) ENGINE = InnoDB CHARACTER SET = utf8mb3 COLLATE = utf8mb3_bin ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of act_ru_variable +-- ---------------------------- + +-- ---------------------------- +-- Table structure for eam_asset +-- ---------------------------- +DROP TABLE IF EXISTS `eam_asset`; +CREATE TABLE `eam_asset` ( + `asset_id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', + `asset_code` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '资产编号', + `name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '资产名称', + `category_id` bigint NOT NULL COMMENT '资产分类编号', + `warehouse_id` bigint NULL DEFAULT NULL COMMENT '仓库id', + `own_company_id` bigint NOT NULL COMMENT '所属公司', + `status` tinyint NOT NULL DEFAULT 0 COMMENT '资产状态(0-闲置 1-在用 2-借用中 3-维修中 4-调拨中 5-待报废 6-已处置 7-库存 8-已报废)', + `use_organization_id` bigint NULL DEFAULT NULL COMMENT '使用组织', + `source_id` tinyint NULL DEFAULT NULL COMMENT '资产来源(0-捐赠 1-赠送 2-其他 3-采购 4-自建 5-自购)', + `manager` bigint NULL DEFAULT NULL COMMENT '管理人员id', + `supplier_vendor_id` bigint NULL DEFAULT NULL COMMENT '供应商id', + `manufacturers_vendor_id` bigint NULL DEFAULT NULL COMMENT '资产厂商id', + `model` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '规格型号', + `serial_number` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '序列号', + `use_user_id` bigint NULL DEFAULT NULL COMMENT '使用人员id', + `purpose` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '用途', + `position_id` bigint NULL DEFAULT NULL COMMENT '存放位置id', + `unit` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '计量单位', + `position_detail` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '详细位置', + `notes` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '资产备注', + `attachment` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '资产附件', + `maintenance_vendor` bigint NULL DEFAULT NULL COMMENT '维保信息_维保厂商id', + `contactor` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '维保信息_联系人id', + `maintenance_start_date` datetime NULL DEFAULT NULL COMMENT '维保信息_维保开始', + `maintenance_status` tinyint NULL DEFAULT 0 COMMENT '维保信息_维保状态(0-不需要 1-脱保 2-在保 3-未知)', + `contact` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '维保信息_联系方式', + `maintenance_end_date` datetime NULL DEFAULT NULL COMMENT '维保信息_维保到期', + `responsible_person` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '维保信息_负责人id', + `maintenance_type` tinyint NULL DEFAULT 0 COMMENT '维保信息_维保方式(0-原厂 1-第三方)', + `suggest_maintenance_type` tinyint NULL DEFAULT 0 COMMENT '维保信息_建议维保方式(0-原厂 1-第三方)', + `maintenance_notes` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '维保信息_维保备注', + `maintenance_attachment` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '维保信息_维保附件', + `financial_category_id` bigint NULL DEFAULT NULL COMMENT '财务信息_财务分类id', + `expense_item` bigint NULL DEFAULT NULL COMMENT '财务信息_费用项目id', + `total_amount_price` decimal(10, 2) NULL DEFAULT NULL COMMENT '财务信息_未税成本', + `customer_info` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '财务信息_客户信息', + `tax_amount_rate` decimal(10, 2) NULL DEFAULT NULL COMMENT '财务信息_资产税额', + `register_date` datetime NULL DEFAULT NULL COMMENT '财务信息_入账日期', + `financial_option` bigint NULL DEFAULT NULL COMMENT '财务信息_财务选项id', + `nav_price` decimal(10, 2) NULL DEFAULT NULL COMMENT '财务信息_资产净值', + `residuals_rate` decimal(10, 2) NULL DEFAULT NULL COMMENT '财务信息_残值率', + `financial_notes` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '财务信息_财务备注', + `financial_attachment` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '财务信息_附件', + `create_user` bigint NULL DEFAULT NULL COMMENT '创建人', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `update_user` bigint NULL DEFAULT NULL COMMENT '修改人', + `update_time` datetime NULL DEFAULT NULL COMMENT '修改时间', + `is_deleted` tinyint NULL DEFAULT 0 COMMENT '是否删除(0:正常/1:删除)', + PRIMARY KEY (`asset_id`) USING BTREE, + INDEX `idx_status`(`status` ASC) USING BTREE, + INDEX `idx_source_id`(`source_id` ASC) USING BTREE, + INDEX `idx_position_id`(`position_id` ASC) USING BTREE, + INDEX `idx_manufacturers_vendor_id`(`manufacturers_vendor_id` ASC) USING BTREE, + INDEX `idx_own_company_id`(`own_company_id` ASC) USING BTREE, + INDEX `idx_use_organization_id`(`use_organization_id` ASC) USING BTREE, + INDEX `idx_category_id`(`category_id` ASC) USING BTREE, + FULLTEXT INDEX `idx_name`(`name`) +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '资产信息表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of eam_asset +-- ---------------------------- + +-- ---------------------------- +-- Table structure for eam_asset_log +-- ---------------------------- +DROP TABLE IF EXISTS `eam_asset_log`; +CREATE TABLE `eam_asset_log` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', + `create_user` bigint NULL DEFAULT NULL COMMENT '创建人', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `update_user` bigint NULL DEFAULT NULL COMMENT '修改人', + `update_time` datetime NULL DEFAULT NULL COMMENT '修改时间', + `is_deleted` tinyint NULL DEFAULT 0 COMMENT '是否删除(0:正常/1:删除)', + `business_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '业务编号', + `operation_type` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '操作类型', + `operation_notes` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '操作内容', + `asset_id` bigint NULL DEFAULT NULL COMMENT '关联资产编号', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '资产操作日志' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of eam_asset_log +-- ---------------------------- + +-- ---------------------------- +-- Table structure for eam_asset_spare_parts +-- ---------------------------- +DROP TABLE IF EXISTS `eam_asset_spare_parts`; +CREATE TABLE `eam_asset_spare_parts` ( + `asset_id` bigint NULL DEFAULT NULL COMMENT '资产id', + `spare_parts_id` bigint NULL DEFAULT NULL COMMENT '备品备件id' +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '备品备件关联信息表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of eam_asset_spare_parts +-- ---------------------------- + +-- ---------------------------- +-- Table structure for eam_basic_category +-- ---------------------------- +DROP TABLE IF EXISTS `eam_basic_category`; +CREATE TABLE `eam_basic_category` ( + `category_id` bigint NOT NULL AUTO_INCREMENT COMMENT '资产分类编号', + `category_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '资产分类名称', + `depth` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '深度', + `parent_id` bigint NOT NULL COMMENT '父节点', + `upper_limit` int NULL DEFAULT NULL COMMENT '安全库存上限', + `lower_limit` int NULL DEFAULT NULL COMMENT '安全库存下限', + `safety_limit` int NULL DEFAULT NULL COMMENT '安全库存', + `create_user` bigint NULL DEFAULT NULL COMMENT '创建人', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `update_user` bigint NULL DEFAULT NULL COMMENT '修改人', + `update_time` datetime NULL DEFAULT NULL COMMENT '修改时间', + `is_deleted` tinyint NULL DEFAULT 0 COMMENT '是否删除(0:正常/1:删除)', + PRIMARY KEY (`category_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1000 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '资产分类信息表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of eam_basic_category +-- ---------------------------- +INSERT INTO `eam_basic_category` VALUES (79, '网络设备', '', 0, 0, 0, 0, 1, '2024-05-07 23:42:37', 1, '2024-06-05 10:01:09', 0); +INSERT INTO `eam_basic_category` VALUES (113, '台式计算机', '', 1, 0, 0, 0, 1, '2024-05-14 21:45:10', 1, '2024-05-14 21:45:40', 0); +INSERT INTO `eam_basic_category` VALUES (115, '特种设备', '', 0, 50, 0, 1, 1, '2024-05-14 21:45:42', 1, '2024-05-27 16:02:04', 0); +INSERT INTO `eam_basic_category` VALUES (117, '锅炉', '', 115, 5, 1, 2, 1, '2024-05-14 21:45:59', 1, '2024-08-19 16:08:05', 0); +INSERT INTO `eam_basic_category` VALUES (119, '电梯', '', 115, 5, 1, 2, 1, '2024-05-14 21:46:11', 1, '2024-08-19 16:08:11', 0); +INSERT INTO `eam_basic_category` VALUES (121, '笔记本电脑', '', 1, 100, 0, 50, 1, '2024-05-17 16:46:02', 1, '2024-06-03 10:43:48', 0); +INSERT INTO `eam_basic_category` VALUES (133, '交换机', '', 79, 10, 2, 5, 1, '2024-05-28 11:13:16', 1, '2024-08-19 16:06:46', 0); +INSERT INTO `eam_basic_category` VALUES (149, '五金工具', '', 0, 2000, 100, 1000, 1, '2024-06-03 10:59:58', 1, '2024-06-03 11:04:08', 0); +INSERT INTO `eam_basic_category` VALUES (161, '电钻', '', 149, 100, 5, 10, 1, '2024-06-05 09:59:44', 1, '2024-08-19 16:08:27', 0); +INSERT INTO `eam_basic_category` VALUES (163, '扳手', '', 149, 100, 10, 20, 1, '2024-06-05 09:59:53', 1, '2024-08-19 16:08:47', 0); +INSERT INTO `eam_basic_category` VALUES (165, '钳子', '', 149, 100, 10, 20, 1, '2024-06-05 10:00:06', 1, '2024-08-19 16:08:52', 0); +INSERT INTO `eam_basic_category` VALUES (167, '榔头', '', 149, 100, 10, 20, 1, '2024-06-05 10:00:08', 1, '2024-08-19 16:09:00', 0); +INSERT INTO `eam_basic_category` VALUES (169, '烙铁', '', 149, 100, 10, 20, 1, '2024-06-05 10:00:23', 1, '2024-08-19 16:09:05', 0); +INSERT INTO `eam_basic_category` VALUES (175, '路由器', '', 79, 5, 1, 2, 1, '2024-06-05 10:01:12', 1, '2024-08-19 16:07:25', 0); +INSERT INTO `eam_basic_category` VALUES (179, '防火墙', '', 79, 5, 1, 2, 1, '2024-06-05 10:01:57', 1, '2024-08-19 16:07:32', 0); +INSERT INTO `eam_basic_category` VALUES (181, '网关', '', 79, 5, 1, 2, 1, '2024-06-05 10:02:14', 1, '2024-08-19 16:07:43', 0); +INSERT INTO `eam_basic_category` VALUES (183, 'IT耗材', '', 0, 0, 0, 0, 1, '2024-06-05 10:03:26', 1, '2024-06-05 10:03:38', 0); +INSERT INTO `eam_basic_category` VALUES (185, '光纤跳线', '', 183, 100, 10, 20, 1, '2024-06-05 10:03:40', 1, '2024-08-19 16:09:38', 0); +INSERT INTO `eam_basic_category` VALUES (189, '光模块', '', 183, 100, 10, 20, 1, '2024-06-05 10:03:59', 1, '2024-08-19 16:09:45', 0); +INSERT INTO `eam_basic_category` VALUES (191, '6类网线跳线', '', 183, 100, 10, 20, 1, '2024-06-05 10:04:13', 1, '2024-08-19 16:09:51', 0); +INSERT INTO `eam_basic_category` VALUES (193, '插线板', '', 183, 100, 10, 20, 1, '2024-06-05 10:04:47', 1, '2024-08-19 16:09:57', 0); +INSERT INTO `eam_basic_category` VALUES (197, '办公设备', '', 0, 0, 0, 0, 1, '2024-06-11 15:47:52', 1, '2024-08-19 16:27:25', 0); +INSERT INTO `eam_basic_category` VALUES (207, '服务器', '', 79, 5, 1, 2, 1, '2024-08-19 16:05:54', 1, '2024-08-19 16:07:54', 0); +INSERT INTO `eam_basic_category` VALUES (213, '运输工具', '', 0, 0, 0, 0, 1, '2024-08-19 16:14:24', 1, '2024-08-19 16:14:49', 0); +INSERT INTO `eam_basic_category` VALUES (219, '汽车', '', 213, 0, 0, 0, 1, '2024-08-19 16:21:14', 1, '2024-08-19 16:22:32', 0); +INSERT INTO `eam_basic_category` VALUES (220, '货车', '', 219, 5, 1, 2, 1, '2024-08-19 16:22:36', 1, '2024-08-19 16:24:36', 0); +INSERT INTO `eam_basic_category` VALUES (221, '船舶', '', 213, 0, 0, 0, 1, '2024-08-19 16:22:41', 1, '2024-08-19 16:23:15', 0); +INSERT INTO `eam_basic_category` VALUES (223, '飞机', '', 213, 5, 1, 2, 1, '2024-08-19 16:23:51', 1, '2024-08-19 16:24:01', 0); +INSERT INTO `eam_basic_category` VALUES (224, '小轿车', '', 219, 5, 1, 2, 1, '2024-08-19 16:24:14', 1, '2024-08-19 16:24:42', 0); +INSERT INTO `eam_basic_category` VALUES (225, '客车', '', 219, 5, 1, 2, 1, '2024-08-19 16:24:16', 1, '2024-08-19 16:24:48', 0); +INSERT INTO `eam_basic_category` VALUES (226, '货船', '', 221, 5, 1, 2, 1, '2024-08-19 16:24:53', 1, '2024-08-19 16:25:09', 0); +INSERT INTO `eam_basic_category` VALUES (227, '渔船', '', 221, 5, 1, 2, 1, '2024-08-19 16:24:55', 1, '2024-08-19 16:25:41', 0); +INSERT INTO `eam_basic_category` VALUES (228, '游艇', '', 221, 5, 1, 2, 1, '2024-08-19 16:24:56', 1, '2024-08-19 16:26:06', 0); +INSERT INTO `eam_basic_category` VALUES (229, '客机', '', 223, 5, 1, 2, 1, '2024-08-19 16:26:12', 1, '2024-08-19 16:26:26', 0); +INSERT INTO `eam_basic_category` VALUES (230, '货机', '', 223, 5, 1, 2, 1, '2024-08-19 16:26:13', 1, '2024-08-19 16:26:39', 0); +INSERT INTO `eam_basic_category` VALUES (232, '计算机及配件', '', 197, 0, 0, 0, 1, '2024-08-19 16:28:24', 1, '2024-08-19 16:28:38', 0); +INSERT INTO `eam_basic_category` VALUES (233, '台式电脑', '', 232, 5, 1, 2, 1, '2024-08-19 16:28:40', 1, '2024-08-19 16:28:52', 0); +INSERT INTO `eam_basic_category` VALUES (234, '笔记本电脑', '', 232, 5, 1, 2, 1, '2024-08-19 16:28:56', 1, '2024-08-19 16:29:19', 0); +INSERT INTO `eam_basic_category` VALUES (235, '打印机', '', 232, 5, 1, 2, 1, '2024-08-19 16:29:21', 1, '2024-08-19 16:29:34', 0); +INSERT INTO `eam_basic_category` VALUES (236, '办公家具', '', 197, 0, 0, 0, 1, '2024-08-19 16:30:14', 1, '2024-08-19 16:30:57', 0); +INSERT INTO `eam_basic_category` VALUES (237, '办公桌', '', 236, 10, 2, 5, 1, '2024-08-19 16:31:08', 1, '2024-08-19 16:31:51', 0); +INSERT INTO `eam_basic_category` VALUES (238, '办公椅', '', 236, 10, 2, 5, 1, '2024-08-19 16:31:20', 1, '2024-08-19 16:32:07', 0); +INSERT INTO `eam_basic_category` VALUES (239, '文件柜', '', 236, 10, 2, 5, 1, '2024-08-19 16:31:22', 1, '2024-08-19 16:32:28', 0); +INSERT INTO `eam_basic_category` VALUES (240, '办公通信设备', '', 197, 0, 0, 0, 1, '2024-08-19 16:32:43', 1, '2024-08-19 16:33:18', 0); +INSERT INTO `eam_basic_category` VALUES (241, '电话机', '', 240, 5, 1, 2, 1, '2024-08-19 16:33:19', 1, '2024-08-19 16:33:42', 0); +INSERT INTO `eam_basic_category` VALUES (242, '传真机', '', 240, 5, 1, 2, 1, '2024-08-19 16:33:22', 1, '2024-08-19 16:33:54', 0); +INSERT INTO `eam_basic_category` VALUES (243, '投影仪', '', 240, 5, 1, 2, 1, '2024-08-19 16:33:23', 1, '2024-08-19 16:34:04', 0); + +-- ---------------------------- +-- Table structure for eam_basic_financial_category +-- ---------------------------- +DROP TABLE IF EXISTS `eam_basic_financial_category`; +CREATE TABLE `eam_basic_financial_category` ( + `financial_category_id` bigint NOT NULL AUTO_INCREMENT COMMENT '财务分类id', + `financial_category_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '财务分类名称', + `depth` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '深度', + `parent_id` bigint NULL DEFAULT NULL COMMENT '父节点', + `use_terms` int NOT NULL DEFAULT 36 COMMENT '使用期限(月)', + `notes` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', + `create_user` bigint NULL DEFAULT NULL COMMENT '创建人', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `update_user` bigint NULL DEFAULT NULL COMMENT '修改人', + `update_time` datetime NULL DEFAULT NULL COMMENT '修改时间', + `is_deleted` tinyint NULL DEFAULT 0 COMMENT '是否删除(0:正常/1:删除)', + PRIMARY KEY (`financial_category_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 10 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '财务分类信息表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of eam_basic_financial_category +-- ---------------------------- +INSERT INTO `eam_basic_financial_category` VALUES (1, '房屋建筑', NULL, NULL, 240, '折旧年限20年', NULL, NULL, NULL, NULL, 0); +INSERT INTO `eam_basic_financial_category` VALUES (2, '专用设备', NULL, NULL, 120, '折旧年限10年', NULL, NULL, NULL, NULL, 0); +INSERT INTO `eam_basic_financial_category` VALUES (3, '一般办公设备', NULL, NULL, 60, '折旧年限5年', NULL, NULL, NULL, NULL, 0); +INSERT INTO `eam_basic_financial_category` VALUES (4, '运输设备', NULL, NULL, 48, '折旧年限4年', NULL, NULL, NULL, NULL, 0); +INSERT INTO `eam_basic_financial_category` VALUES (5, '电子设备', NULL, NULL, 36, '折旧年限3年', NULL, NULL, NULL, NULL, 0); + +-- ---------------------------- +-- Table structure for eam_basic_maintenance_vendor +-- ---------------------------- +DROP TABLE IF EXISTS `eam_basic_maintenance_vendor`; +CREATE TABLE `eam_basic_maintenance_vendor` ( + `maintenance_vendor_id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', + `name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '名称', + `code` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '编码', + `uscc` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '统一社会信用代码', + `after_sales_contactor` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '售后联系人', + `after_sales_contact` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '售后联系方式', + `business_contactor` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '商务联系人', + `business_contact` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '商务联系方式', + `address` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '地址', + `notes` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '备注', + `create_user` bigint NULL DEFAULT NULL COMMENT '创建人', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `update_user` bigint NULL DEFAULT NULL COMMENT '修改人', + `update_time` datetime NULL DEFAULT NULL COMMENT '修改时间', + `is_deleted` tinyint NULL DEFAULT 0 COMMENT '是否删除(0:正常/1:删除)', + PRIMARY KEY (`maintenance_vendor_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 100 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '维保商' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of eam_basic_maintenance_vendor +-- ---------------------------- +INSERT INTO `eam_basic_maintenance_vendor` VALUES (9, '成都积络科技有限公司', '001', '91510100MA6BJ8U98K', '方杨', '19181752603', '李懿', '19181752603', '成都市武侯区科华北路62号 力宝大厦 s1113', '', 1, '2024-05-02 12:48:29', 1, '2024-08-19 16:41:57', 0); + +-- ---------------------------- +-- Table structure for eam_basic_manufacturers_vendor +-- ---------------------------- +DROP TABLE IF EXISTS `eam_basic_manufacturers_vendor`; +CREATE TABLE `eam_basic_manufacturers_vendor` ( + `manufacturers_vendor_id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', + `name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '名称', + `code` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '编码', + `address` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '地址', + `notes` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '备注', + `create_user` bigint NULL DEFAULT NULL COMMENT '创建人', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `update_user` bigint NULL DEFAULT NULL COMMENT '修改人', + `update_time` datetime NULL DEFAULT NULL COMMENT '修改时间', + `is_deleted` tinyint NULL DEFAULT 0 COMMENT '是否删除(0:正常/1:删除)', + PRIMARY KEY (`manufacturers_vendor_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 100 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '生产商' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of eam_basic_manufacturers_vendor +-- ---------------------------- +INSERT INTO `eam_basic_manufacturers_vendor` VALUES (19, '成都积络科技有限公司', '001', '成都市武侯区科华北路62号 力宝大厦 s1113', '19181752603', 1, '2024-08-19 16:38:46', 1, '2024-08-19 16:39:18', 0); + +-- ---------------------------- +-- Table structure for eam_basic_position +-- ---------------------------- +DROP TABLE IF EXISTS `eam_basic_position`; +CREATE TABLE `eam_basic_position` ( + `position_id` bigint NOT NULL AUTO_INCREMENT COMMENT '资产分类编号', + `name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '资产分类名称', + `depth` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '深度', + `parent_id` bigint NOT NULL COMMENT '父节点', + `create_user` bigint NULL DEFAULT NULL COMMENT '创建人', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `update_user` bigint NULL DEFAULT NULL COMMENT '修改人', + `update_time` datetime NULL DEFAULT NULL COMMENT '修改时间', + `is_deleted` tinyint NULL DEFAULT 0 COMMENT '是否删除(0:正常/1:删除)', + PRIMARY KEY (`position_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 100 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '存放位置信息表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of eam_basic_position +-- ---------------------------- +INSERT INTO `eam_basic_position` VALUES (1, '办公区域1', '1', 0, 1, '2024-04-09 17:21:09', 1, '2024-06-05 10:19:42', 0); +INSERT INTO `eam_basic_position` VALUES (2, '办公区域2', '', 0, 1, '2024-05-02 12:12:05', 1, '2024-06-05 10:19:55', 0); + +-- ---------------------------- +-- Table structure for eam_basic_supplier_vendor +-- ---------------------------- +DROP TABLE IF EXISTS `eam_basic_supplier_vendor`; +CREATE TABLE `eam_basic_supplier_vendor` ( + `supplier_vendor_id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', + `name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '名称', + `code` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '编码', + `uscc` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '统一社会信用代码', + `after_sales_contactor` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '售后联系人', + `after_sales_contact` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '售后联系方式', + `business_contactor` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '商务联系人', + `business_contact` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '商务联系方式', + `address` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '地址', + `notes` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '备注', + `create_user` bigint NULL DEFAULT NULL COMMENT '创建人', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `update_user` bigint NULL DEFAULT NULL COMMENT '修改人', + `update_time` datetime NULL DEFAULT NULL COMMENT '修改时间', + `is_deleted` tinyint NULL DEFAULT 0 COMMENT '是否删除(0:正常/1:删除)', + PRIMARY KEY (`supplier_vendor_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 100 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '供应商' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of eam_basic_supplier_vendor +-- ---------------------------- +INSERT INTO `eam_basic_supplier_vendor` VALUES (1, '积络科技', '001', '91510100MA6BJ8U98K', '方杨', '19181752603', '李懿', '19181752603', '成都市武侯区科华北路62号 力宝大厦 s1113', '', NULL, '2024-04-09 11:45:51', 1, '2024-08-19 16:40:54', 0); + +-- ---------------------------- +-- Table structure for eam_basic_warehouse +-- ---------------------------- +DROP TABLE IF EXISTS `eam_basic_warehouse`; +CREATE TABLE `eam_basic_warehouse` ( + `warehouse_id` bigint NOT NULL AUTO_INCREMENT COMMENT '仓库编号', + `create_user` bigint NULL DEFAULT NULL COMMENT '创建人', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `update_user` bigint NULL DEFAULT NULL COMMENT '修改人', + `update_time` datetime NULL DEFAULT NULL COMMENT '修改时间', + `is_deleted` tinyint NULL DEFAULT 0 COMMENT '是否删除(0:正常/1:删除)', + `name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '仓库名称', + `status` tinyint NOT NULL DEFAULT 0 COMMENT '状态(0:启用/1:禁用)', + PRIMARY KEY (`warehouse_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 100 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '仓库信息表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of eam_basic_warehouse +-- ---------------------------- +INSERT INTO `eam_basic_warehouse` VALUES (1, 1, '2024-05-02 14:24:38', 1, '2024-06-05 10:18:29', 0, '北京仓库', 0); +INSERT INTO `eam_basic_warehouse` VALUES (2, 1, '2024-05-02 14:25:13', 1, '2024-06-05 10:18:37', 0, '上海仓库', 0); +INSERT INTO `eam_basic_warehouse` VALUES (3, 1, '2024-05-07 23:54:10', 1, '2024-06-05 10:18:53', 0, '广东仓库', 0); +INSERT INTO `eam_basic_warehouse` VALUES (4, 1, '2024-05-14 20:48:31', NULL, '2024-05-14 20:48:31', 0, '成都仓库', 0); + +-- ---------------------------- +-- Table structure for eam_business_allocate +-- ---------------------------- +DROP TABLE IF EXISTS `eam_business_allocate`; +CREATE TABLE `eam_business_allocate` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', + `business_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '业务编号', + `name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '业务名称', + `applicant` bigint NOT NULL COMMENT '申请人', + `asset_id_List` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '资产编号List', + `business_generated_date` datetime NULL DEFAULT NULL COMMENT '业务生成日期', + `notes` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '备注', + `attach` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '附件', + `status` tinyint NULL DEFAULT NULL COMMENT '状态(0-草稿、1-已完成、2-拒绝、3-审批中、4-取消)', + `create_user` bigint NULL DEFAULT NULL COMMENT '创建人', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `update_user` bigint NULL DEFAULT NULL COMMENT '修改人', + `update_time` datetime NULL DEFAULT NULL COMMENT '修改时间', + `is_deleted` tinyint NULL DEFAULT 0 COMMENT '是否删除(0:正常/1:删除)', + `out_warehouse_id` bigint NULL DEFAULT NULL COMMENT '调出仓库', + `in_warehouse_id` bigint NULL DEFAULT NULL COMMENT '调入仓库', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '调拨信息表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of eam_business_allocate +-- ---------------------------- + +-- ---------------------------- +-- Table structure for eam_business_borrow +-- ---------------------------- +DROP TABLE IF EXISTS `eam_business_borrow`; +CREATE TABLE `eam_business_borrow` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', + `business_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '业务编号', + `name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '业务名称', + `applicant` bigint NOT NULL COMMENT '申请人', + `asset_id_List` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '资产编号List', + `business_generated_date` datetime NULL DEFAULT NULL COMMENT '业务生成日期', + `notes` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '备注', + `attach` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '附件', + `status` tinyint NULL DEFAULT NULL COMMENT '状态(0-草稿、1-已完成、2-拒绝、3-审批中、4-取消)', + `create_user` bigint NULL DEFAULT NULL COMMENT '创建人', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `update_user` bigint NULL DEFAULT NULL COMMENT '修改人', + `update_time` datetime NULL DEFAULT NULL COMMENT '修改时间', + `is_deleted` tinyint NULL DEFAULT 0 COMMENT '是否删除(0:正常/1:删除)', + `use_user_id` bigint NOT NULL COMMENT '借用人', + `return_time` datetime NOT NULL COMMENT '预计归还时间', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '借用信息表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of eam_business_borrow +-- ---------------------------- + +-- ---------------------------- +-- Table structure for eam_business_collection +-- ---------------------------- +DROP TABLE IF EXISTS `eam_business_collection`; +CREATE TABLE `eam_business_collection` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', + `business_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '业务编号', + `name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '业务名称', + `applicant` bigint NOT NULL COMMENT '申请人id', + `asset_id_List` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '资产编号List', + `business_generated_date` datetime NULL DEFAULT NULL COMMENT '业务生成日期', + `notes` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '备注', + `attach` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '附件', + `status` tinyint NULL DEFAULT NULL COMMENT '状态(0-草稿、1-已完成、2-拒绝、3-审批中、4-取消)', + `create_user` bigint NULL DEFAULT NULL COMMENT '创建人', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `update_user` bigint NULL DEFAULT NULL COMMENT '修改人', + `update_time` datetime NULL DEFAULT NULL COMMENT '修改时间', + `is_deleted` tinyint NULL DEFAULT 0 COMMENT '是否删除(0:正常/1:删除)', + `use_organization_id` bigint NOT NULL COMMENT '领用后公司/部门', + `position_id` bigint NULL DEFAULT NULL COMMENT '领用后存放位置', + `use_user_id` bigint NOT NULL COMMENT '使用人员id', + `position_detail` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '详细位置', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '资产领用信息表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of eam_business_collection +-- ---------------------------- + +-- ---------------------------- +-- Table structure for eam_business_outbound +-- ---------------------------- +DROP TABLE IF EXISTS `eam_business_outbound`; +CREATE TABLE `eam_business_outbound` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', + `business_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '业务编号', + `name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '业务名称', + `warehouse_id` bigint NOT NULL COMMENT '关联仓库id', + `asset_id_List` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '资产编号List', + `business_generated_date` datetime NULL DEFAULT NULL COMMENT '业务生成日期', + `notes` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '备注', + `attach` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '附件', + `status` tinyint NULL DEFAULT NULL COMMENT '状态(0-草稿、1-已完成、2-拒绝、3-审批中、4-取消)', + `create_user` bigint NULL DEFAULT NULL COMMENT '创建人', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `update_user` bigint NULL DEFAULT NULL COMMENT '修改人', + `update_time` datetime NULL DEFAULT NULL COMMENT '修改时间', + `is_deleted` tinyint NULL DEFAULT 0 COMMENT '是否删除(0:正常/1:删除)', + `own_company_id` bigint NOT NULL COMMENT '领用公司', + `use_organization_id` bigint NOT NULL COMMENT '领用部门', + `use_user_id` bigint NULL DEFAULT NULL COMMENT '领用人员', + `position_detail` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '出库位置', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '出库信息表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of eam_business_outbound +-- ---------------------------- + +-- ---------------------------- +-- Table structure for eam_business_registration +-- ---------------------------- +DROP TABLE IF EXISTS `eam_business_registration`; +CREATE TABLE `eam_business_registration` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', + `business_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '业务编号', + `name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '业务名称', + `applicant` bigint NULL DEFAULT NULL COMMENT '申请人id', + `status` tinyint NULL DEFAULT NULL COMMENT '状态(0-草稿、1-已完成、2-拒绝、3-审批中、4-取消)', + `asset_id` bigint NULL DEFAULT NULL COMMENT '资产id', + `config` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL, + `create_user` bigint NULL DEFAULT NULL COMMENT '创建人', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `update_user` bigint NULL DEFAULT NULL COMMENT '修改人', + `update_time` datetime NULL DEFAULT NULL COMMENT '修改时间', + `is_deleted` tinyint NULL DEFAULT 0 COMMENT '是否删除(0:正常/1:删除)', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '资产登记信息表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of eam_business_registration +-- ---------------------------- + +-- ---------------------------- +-- Table structure for eam_business_retirement +-- ---------------------------- +DROP TABLE IF EXISTS `eam_business_retirement`; +CREATE TABLE `eam_business_retirement` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', + `business_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '业务编号', + `name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '业务名称', + `applicant` bigint NOT NULL COMMENT '申请人id', + `asset_id_List` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '资产编号List', + `business_generated_date` datetime NULL DEFAULT NULL COMMENT '业务生成日期', + `notes` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '备注', + `attach` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '附件', + `status` tinyint NULL DEFAULT NULL COMMENT '状态(0-草稿、1-已完成、2-拒绝、3-审批中、4-取消)', + `create_user` bigint NULL DEFAULT NULL COMMENT '创建人', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `update_user` bigint NULL DEFAULT NULL COMMENT '修改人', + `update_time` datetime NULL DEFAULT NULL COMMENT '修改时间', + `is_deleted` tinyint NULL DEFAULT 0 COMMENT '是否删除(0:正常/1:删除)', + `type` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '报废方式', + `expedited_status` tinyint NULL DEFAULT 0 COMMENT '加急状态(0-普通、1:加急)', + `is_retirement` tinyint NULL DEFAULT 0 COMMENT '是否已报废(0-否、1:是)', + `is_clean` tinyint NULL DEFAULT 0 COMMENT '是否已清理(0-否、1:是)', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '资产报废' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of eam_business_retirement +-- ---------------------------- + +-- ---------------------------- +-- Table structure for eam_business_return +-- ---------------------------- +DROP TABLE IF EXISTS `eam_business_return`; +CREATE TABLE `eam_business_return` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', + `business_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '业务编号', + `name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '业务名称', + `applicant` bigint NOT NULL COMMENT '申请人id', + `asset_id_List` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '资产编号List', + `business_generated_date` datetime NULL DEFAULT NULL COMMENT '业务生成日期', + `notes` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '备注', + `attach` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '附件', + `status` tinyint NULL DEFAULT NULL COMMENT '状态(0-草稿、1-已完成、2-拒绝、3-审批中、4-取消)', + `create_user` bigint NULL DEFAULT NULL COMMENT '创建人', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `update_user` bigint NULL DEFAULT NULL COMMENT '修改人', + `update_time` datetime NULL DEFAULT NULL COMMENT '修改时间', + `is_deleted` tinyint NULL DEFAULT 0 COMMENT '是否删除(0:正常/1:删除)', + `position_id` bigint NULL DEFAULT NULL COMMENT '存放位置id', + `position_detail` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '详细位置', + `manager` bigint NULL DEFAULT NULL COMMENT '管理人员id', + `use_user_id` bigint NULL DEFAULT NULL COMMENT '使用人员id', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '归还信息表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of eam_business_return +-- ---------------------------- + +-- ---------------------------- +-- Table structure for eam_business_return_inventory +-- ---------------------------- +DROP TABLE IF EXISTS `eam_business_return_inventory`; +CREATE TABLE `eam_business_return_inventory` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', + `business_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '业务编号', + `name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '业务名称', + `applicant` bigint NOT NULL COMMENT '申请人', + `asset_id_List` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '资产编号List', + `business_generated_date` datetime NULL DEFAULT NULL COMMENT '业务生成日期', + `notes` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '备注', + `attach` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '附件', + `status` tinyint NULL DEFAULT NULL COMMENT '状态(0-草稿、1-已完成、2-拒绝、3-审批中、4-取消)', + `create_user` bigint NULL DEFAULT NULL COMMENT '创建人', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `update_user` bigint NULL DEFAULT NULL COMMENT '修改人', + `update_time` datetime NULL DEFAULT NULL COMMENT '修改时间', + `is_deleted` tinyint NULL DEFAULT 0 COMMENT '是否删除(0:正常/1:删除)', + `use_organization_id` bigint NOT NULL COMMENT '领用后公司/部门id', + `position_id` bigint NOT NULL COMMENT '领用后存放位置id', + `position_detail` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '详细位置id', + `warehouse_id` bigint NOT NULL COMMENT '关联仓库id', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '退库信息表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of eam_business_return_inventory +-- ---------------------------- + +-- ---------------------------- +-- Table structure for eam_business_storage +-- ---------------------------- +DROP TABLE IF EXISTS `eam_business_storage`; +CREATE TABLE `eam_business_storage` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', + `business_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '业务编号', + `name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '业务名称', + `warehouse_id` bigint NOT NULL COMMENT '关联仓库id', + `asset_id_List` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '资产编号List', + `business_generated_date` datetime NULL DEFAULT NULL COMMENT '业务生成日期', + `notes` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '备注', + `attach` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '附件', + `status` tinyint NULL DEFAULT NULL COMMENT '状态(0-草稿、1-已完成、2-拒绝、3-审批中、4-取消)', + `create_user` bigint NULL DEFAULT NULL COMMENT '创建人', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `update_user` bigint NULL DEFAULT NULL COMMENT '修改人', + `update_time` datetime NULL DEFAULT NULL COMMENT '修改时间', + `is_deleted` tinyint NULL DEFAULT 0 COMMENT '是否删除(0:正常/1:删除)', + `manager` bigint NULL DEFAULT NULL COMMENT '管理人员id', + `position_id` bigint NULL DEFAULT NULL COMMENT '存放位置id', + `supplier_vendor_id` bigint NULL DEFAULT NULL COMMENT '供应商id', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '入库信息表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of eam_business_storage +-- ---------------------------- + +-- ---------------------------- +-- Table structure for eam_business_transfer +-- ---------------------------- +DROP TABLE IF EXISTS `eam_business_transfer`; +CREATE TABLE `eam_business_transfer` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', + `business_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '业务编号', + `name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '业务名称', + `asset_id_List` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '资产编号List', + `business_generated_date` datetime NULL DEFAULT NULL COMMENT '业务生成日期', + `notes` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '备注', + `attach` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '附件', + `status` tinyint NULL DEFAULT NULL COMMENT '状态(0-草稿、1-已完成、2-拒绝、3-审批中、4-取消)', + `create_user` bigint NULL DEFAULT NULL COMMENT '创建人', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `update_user` bigint NULL DEFAULT NULL COMMENT '修改人', + `update_time` datetime NULL DEFAULT NULL COMMENT '修改时间', + `is_deleted` tinyint NULL DEFAULT 0 COMMENT '是否删除(0:正常/1:删除)', + `out_use_organization_id` bigint NOT NULL COMMENT '调出使用公司/部门id', + `in_use_organization_id` bigint NOT NULL COMMENT '调入使用公司/部门id', + `manager_id` bigint NOT NULL COMMENT '调入管理员id', + `use_user_id` bigint NOT NULL COMMENT '使用人员id', + `position_id` bigint NULL DEFAULT NULL COMMENT '存放位置id', + `position_detail` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '详细位置', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '资产转移信息表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of eam_business_transfer +-- ---------------------------- + +-- ---------------------------- +-- Table structure for eam_repair +-- ---------------------------- +DROP TABLE IF EXISTS `eam_repair`; +CREATE TABLE `eam_repair` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', + `business_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '业务编号', + `name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '业务名称', + `asset_id_List` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '资产编号List', + `notes` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '备注', + `attach` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '附件', + `status` tinyint NULL DEFAULT NULL COMMENT '状态(0-草稿、1-已完成、2-拒绝、3-审批中、4-取消)', + `create_user` bigint NULL DEFAULT NULL COMMENT '创建人', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `update_user` bigint NULL DEFAULT NULL COMMENT '修改人', + `update_time` datetime NULL DEFAULT NULL COMMENT '修改时间', + `is_deleted` tinyint NULL DEFAULT 0 COMMENT '是否删除(0:正常/1:删除)', + `planned_date` datetime NOT NULL COMMENT '计划完成时间', + `repair_type_id` bigint NOT NULL COMMENT '保养计划(维修类型)id', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '维修登记信息表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of eam_repair +-- ---------------------------- + +-- ---------------------------- +-- Table structure for eam_repair_fault +-- ---------------------------- +DROP TABLE IF EXISTS `eam_repair_fault`; +CREATE TABLE `eam_repair_fault` ( + `fault_id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', + `name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '名称', + `img` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '图片url', + `asset_id_List` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '资产编号List', + `attach` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '附件', + `notes` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '备注', + `status` tinyint NULL DEFAULT NULL COMMENT '状态(0-草稿、1-已完成、2-拒绝、3-审批中、4-取消)', + `create_user` bigint NULL DEFAULT NULL COMMENT '创建人', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `update_user` bigint NULL DEFAULT NULL COMMENT '修改人', + `update_time` datetime NULL DEFAULT NULL COMMENT '修改时间', + `is_deleted` tinyint NULL DEFAULT 0 COMMENT '是否删除(0:正常/1:删除)', + PRIMARY KEY (`fault_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '故障信息表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of eam_repair_fault +-- ---------------------------- + +-- ---------------------------- +-- Table structure for eam_repair_type +-- ---------------------------- +DROP TABLE IF EXISTS `eam_repair_type`; +CREATE TABLE `eam_repair_type` ( + `repair_type_id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', + `name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '名称', + `config` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '配置信息', + `notes` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '备注', + `create_user` bigint NULL DEFAULT NULL COMMENT '创建人', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `update_user` bigint NULL DEFAULT NULL COMMENT '修改人', + `update_time` datetime NULL DEFAULT NULL COMMENT '修改时间', + `is_deleted` tinyint NULL DEFAULT 0 COMMENT '是否删除(0:正常/1:删除)', + PRIMARY KEY (`repair_type_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 100 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '保养计划(维修类型)表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of eam_repair_type +-- ---------------------------- +INSERT INTO `eam_repair_type` VALUES (1, '预测性维护', '', '', 1, '2024-04-12 15:19:20', 1, '2024-08-19 16:42:54', 0); +INSERT INTO `eam_repair_type` VALUES (2, '计划性维护', '', '', 1, '2024-04-12 15:19:49', NULL, '2024-04-12 15:19:49', 0); +INSERT INTO `eam_repair_type` VALUES (3, '突发性维护', '', '', 1, '2024-04-12 15:19:59', NULL, '2024-04-12 15:19:59', 0); +INSERT INTO `eam_repair_type` VALUES (11, '维保期保养', '', NULL, 1, '2024-05-07 16:08:40', 1, '2024-08-19 16:43:00', 0); +INSERT INTO `eam_repair_type` VALUES (17, '大型维修', '', NULL, 1, '2024-05-27 13:48:47', NULL, '2024-05-27 13:48:47', 0); +INSERT INTO `eam_repair_type` VALUES (19, '发动机常规保养', '1.机油更换 2.滤芯更换 3.油封检查', NULL, 1, '2024-05-31 10:59:52', NULL, '2024-05-31 10:59:52', 0); + +-- ---------------------------- +-- Table structure for eam_stocktaking_details +-- ---------------------------- +DROP TABLE IF EXISTS `eam_stocktaking_details`; +CREATE TABLE `eam_stocktaking_details` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', + `stocktaking_job_id` bigint NULL DEFAULT NULL COMMENT '盘点任务id', + `asset_id` bigint NULL DEFAULT NULL COMMENT '盘点资产id', + `status` tinyint NULL DEFAULT NULL COMMENT '盘点状态(0-盘盈,1-盘亏,2-已盘点,3-待盘点,4-异常)', + `img` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `attachment` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '附件', + `notes` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '备注', + `create_user` bigint NULL DEFAULT NULL COMMENT '创建人', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `update_user` bigint NULL DEFAULT NULL COMMENT '修改人', + `update_time` datetime NULL DEFAULT NULL COMMENT '修改时间', + `is_deleted` tinyint NULL DEFAULT 0 COMMENT '是否删除(0:正常/1:删除)', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '盘点明细' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of eam_stocktaking_details +-- ---------------------------- + +-- ---------------------------- +-- Table structure for eam_stocktaking_job +-- ---------------------------- +DROP TABLE IF EXISTS `eam_stocktaking_job`; +CREATE TABLE `eam_stocktaking_job` ( + `stocktaking_job_id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', + `name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '业务名称', + `head` bigint NULL DEFAULT NULL COMMENT '负责人id', + `full_stocktaking` tinyint NULL DEFAULT NULL COMMENT '全员盘点(0-禁用,1-启用)', + `stocktaking_user_id` bigint NULL DEFAULT NULL COMMENT '盘点人id', + `stocktaking_start_date` datetime NULL DEFAULT NULL COMMENT '购置开始日期', + `stocktaking_end_date` datetime NULL DEFAULT NULL COMMENT '购置结束日期', + `asset_status` tinyint NULL DEFAULT 0 COMMENT '资产状态(0-闲置 1-在用 2-借用中 3-维修中 4-调拨中 5-待报废 6-已处置 7-库存 8-已报废)', + `own_company_id` bigint NULL DEFAULT NULL COMMENT '所属公司id', + `use_organization_id` bigint NULL DEFAULT NULL COMMENT '使用公司/部门id', + `use_user_id` bigint NULL DEFAULT NULL COMMENT '保管人id', + `category_id` bigint NULL DEFAULT NULL COMMENT '资产分类id', + `position_id` bigint NULL DEFAULT NULL COMMENT '存放位置id', + `warehouse_id` bigint NULL DEFAULT NULL COMMENT '仓库id', + `status` tinyint NULL DEFAULT NULL COMMENT '盘点状态(0-未开始,1-进行中,2-取消,3-已完成)', + `notes` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '备注', + `create_user` bigint NULL DEFAULT NULL COMMENT '创建人', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `update_user` bigint NULL DEFAULT NULL COMMENT '修改人', + `update_time` datetime NULL DEFAULT NULL COMMENT '修改时间', + `is_deleted` tinyint NULL DEFAULT 0 COMMENT '是否删除(0:正常/1:删除)', + PRIMARY KEY (`stocktaking_job_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '盘点任务表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of eam_stocktaking_job +-- ---------------------------- + +-- ---------------------------- +-- Table structure for eam_stocktaking_plan +-- ---------------------------- +DROP TABLE IF EXISTS `eam_stocktaking_plan`; +CREATE TABLE `eam_stocktaking_plan` ( + `stocktaking_plan_id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', + `name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '业务名称', + `head` bigint NULL DEFAULT NULL COMMENT '负责人id', + `full_stocktaking` tinyint NULL DEFAULT NULL COMMENT '全员盘点(0-禁用,1-启用)', + `stocktaking_user_id` bigint NULL DEFAULT NULL COMMENT '盘点人id', + `stocktaking_start_date` datetime NULL DEFAULT NULL COMMENT '购置开始日期', + `stocktaking_end_date` datetime NULL DEFAULT NULL COMMENT '购置结束日期', + `asset_status` tinyint NULL DEFAULT 0 COMMENT '资产状态(0-闲置 1-在用 2-借用中 3-维修中 4-调拨中 5-待报废 6-已处置 7-库存 8-已报废)', + `own_company_id` bigint NULL DEFAULT NULL COMMENT '所属公司id', + `use_organization_id` bigint NULL DEFAULT NULL COMMENT '使用公司/部门id', + `use_user_id` bigint NULL DEFAULT NULL COMMENT '保管人id', + `category_id` bigint NULL DEFAULT NULL COMMENT '资产分类id', + `position_id` bigint NULL DEFAULT NULL COMMENT '存放位置id', + `warehouse_id` bigint NULL DEFAULT NULL COMMENT '仓库id', + `status` tinyint NULL DEFAULT 0 COMMENT '启用状态(0-禁用,1-启用)', + `notes` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '备注', + `create_user` bigint NULL DEFAULT NULL COMMENT '创建人', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `update_user` bigint NULL DEFAULT NULL COMMENT '修改人', + `update_time` datetime NULL DEFAULT NULL COMMENT '修改时间', + `is_deleted` tinyint NULL DEFAULT 0 COMMENT '是否删除(0:正常/1:删除)', + PRIMARY KEY (`stocktaking_plan_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '盘点计划信息' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of eam_stocktaking_plan +-- ---------------------------- + +-- ---------------------------- +-- Table structure for eam_warehouse_asset +-- ---------------------------- +DROP TABLE IF EXISTS `eam_warehouse_asset`; +CREATE TABLE `eam_warehouse_asset` ( + `warehouse_id` bigint NULL DEFAULT NULL COMMENT '仓库id', + `asset_id` bigint NULL DEFAULT NULL COMMENT '资产id', + `count` int NULL DEFAULT NULL COMMENT '库存数量' +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '库存信息表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of eam_warehouse_asset +-- ---------------------------- + +-- ---------------------------- +-- Table structure for fl_form +-- ---------------------------- +DROP TABLE IF EXISTS `fl_form`; +CREATE TABLE `fl_form` ( + `form_id` bigint NOT NULL AUTO_INCREMENT COMMENT '表单ID', + `form_key` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '表单标识', + `type` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '表单类型', + `name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '表单名称', + `pc_icon` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'PC端图标', + `mobile_icon` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '移动端图标', + `config` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '表单内容', + `deploy_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '流程id', + `status` tinyint NULL DEFAULT NULL COMMENT '状态(0:有效/1:无效)', + `is_deleted` tinyint NULL DEFAULT 0 COMMENT '是否删除(0:正常/1:删除)', + `create_user` bigint NULL DEFAULT NULL COMMENT '创建人', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `update_user` bigint NULL DEFAULT NULL COMMENT '修改人', + `update_time` datetime NULL DEFAULT NULL COMMENT '修改时间', + PRIMARY KEY (`form_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 10 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '流程表单对象' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of fl_form +-- ---------------------------- +INSERT INTO `fl_form` VALUES (1, 'eam_asset_employee_apply', 'asset', '员工资产申请', NULL, NULL, '{\"assignee\":1}', '21', NULL, 0, NULL, NULL, 1, '2024-08-23 17:11:28'); +INSERT INTO `fl_form` VALUES (2, 'eam_asset_employee_loss', 'asset', '员工资产报失', NULL, NULL, '{\"assignee\":1}', '9', NULL, 0, NULL, NULL, 1, '2024-08-23 17:10:33'); +INSERT INTO `fl_form` VALUES (3, 'eam_asset_employee_repair', 'asset', '员工资产报修', NULL, NULL, '{\"assignee\":\"1\"}', '13', NULL, 0, NULL, NULL, NULL, '2024-08-23 17:10:54'); +INSERT INTO `fl_form` VALUES (4, 'eam_asset_scrap', 'asset', '资产设备报废', NULL, NULL, '{\"assignee\":\"1\"}', '29', NULL, 0, NULL, NULL, NULL, '2024-08-23 17:12:03'); +INSERT INTO `fl_form` VALUES (5, 'eam_asset_purchase_apply', 'asset', '资产采购申请', NULL, NULL, '{\"assignee\":\"1\"}', '25', NULL, 0, NULL, NULL, NULL, '2024-08-23 17:11:48'); +INSERT INTO `fl_form` VALUES (6, 'eam_asset_equipment_repair', 'asset', '设备报修申请', NULL, NULL, '{\"assignee\":\"1\"}', '1', NULL, 0, NULL, NULL, NULL, '2024-08-23 17:09:28'); +INSERT INTO `fl_form` VALUES (7, 'eam_asset_employee_handover', 'asset', '员工资产交接', NULL, NULL, '{\"assignee\":\"1\"}', '17', NULL, 0, NULL, NULL, NULL, '2024-08-23 17:11:12'); +INSERT INTO `fl_form` VALUES (8, 'eam_asset_stock_goods_use', 'asset', '物品领用申请', NULL, NULL, '{\"assignee\":1}', '5', NULL, 0, NULL, NULL, 1, '2024-08-23 17:10:01'); + +-- ---------------------------- +-- Table structure for fl_form_item +-- ---------------------------- +DROP TABLE IF EXISTS `fl_form_item`; +CREATE TABLE `fl_form_item` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', + `name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '名称', + `form_key` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '表单标识', + `proc_ins_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '流程实例id', + `contents` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '审批内容', + `logs` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '审批记录', + `status` int NULL DEFAULT 0 COMMENT '流程状态(1-起草中,2-审批中,3-已结束,4-已驳回,5-已废弃,6-流程异常)', + `is_deleted` tinyint NULL DEFAULT 0 COMMENT '是否删除(0:正常/1:删除)', + `create_user` bigint NULL DEFAULT NULL COMMENT '创建人', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `update_user` bigint NULL DEFAULT NULL COMMENT '修改人', + `update_time` datetime NULL DEFAULT NULL COMMENT '修改时间', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '流程实例对象' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of fl_form_item +-- ---------------------------- + +-- ---------------------------- +-- Table structure for flw_channel_definition +-- ---------------------------- +DROP TABLE IF EXISTS `flw_channel_definition`; +CREATE TABLE `flw_channel_definition` ( + `ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `NAME_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `VERSION_` int NULL DEFAULT NULL, + `KEY_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `CATEGORY_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `DEPLOYMENT_ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `CREATE_TIME_` datetime(3) NULL DEFAULT NULL, + `TENANT_ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `RESOURCE_NAME_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `DESCRIPTION_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `TYPE_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `IMPLEMENTATION_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + PRIMARY KEY (`ID_`) USING BTREE, + UNIQUE INDEX `ACT_IDX_CHANNEL_DEF_UNIQ`(`KEY_` ASC, `VERSION_` ASC, `TENANT_ID_` ASC) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of flw_channel_definition +-- ---------------------------- + +-- ---------------------------- +-- Table structure for flw_ev_databasechangelog +-- ---------------------------- +DROP TABLE IF EXISTS `flw_ev_databasechangelog`; +CREATE TABLE `flw_ev_databasechangelog` ( + `ID` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `AUTHOR` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `FILENAME` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `DATEEXECUTED` datetime NOT NULL, + `ORDEREXECUTED` int NOT NULL, + `EXECTYPE` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `MD5SUM` varchar(35) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `DESCRIPTION` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `COMMENTS` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `TAG` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `LIQUIBASE` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `CONTEXTS` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `LABELS` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `DEPLOYMENT_ID` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of flw_ev_databasechangelog +-- ---------------------------- +INSERT INTO `flw_ev_databasechangelog` VALUES ('1', 'flowable', 'org/flowable/eventregistry/db/liquibase/flowable-eventregistry-db-changelog.xml', '2024-08-23 17:04:27', 1, 'EXECUTED', '8:1b0c48c9cf7945be799d868a2626d687', 'createTable tableName=FLW_EVENT_DEPLOYMENT; createTable tableName=FLW_EVENT_RESOURCE; createTable tableName=FLW_EVENT_DEFINITION; createIndex indexName=ACT_IDX_EVENT_DEF_UNIQ, tableName=FLW_EVENT_DEFINITION; createTable tableName=FLW_CHANNEL_DEFIN...', '', NULL, '4.9.1', NULL, NULL, '4403867356'); +INSERT INTO `flw_ev_databasechangelog` VALUES ('2', 'flowable', 'org/flowable/eventregistry/db/liquibase/flowable-eventregistry-db-changelog.xml', '2024-08-23 17:04:27', 2, 'EXECUTED', '8:0ea825feb8e470558f0b5754352b9cda', 'addColumn tableName=FLW_CHANNEL_DEFINITION; addColumn tableName=FLW_CHANNEL_DEFINITION', '', NULL, '4.9.1', NULL, NULL, '4403867356'); +INSERT INTO `flw_ev_databasechangelog` VALUES ('3', 'flowable', 'org/flowable/eventregistry/db/liquibase/flowable-eventregistry-db-changelog.xml', '2024-08-23 17:04:27', 3, 'EXECUTED', '8:3c2bb293350b5cbe6504331980c9dcee', 'customChange', '', NULL, '4.9.1', NULL, NULL, '4403867356'); + +-- ---------------------------- +-- Table structure for flw_ev_databasechangeloglock +-- ---------------------------- +DROP TABLE IF EXISTS `flw_ev_databasechangeloglock`; +CREATE TABLE `flw_ev_databasechangeloglock` ( + `ID` int NOT NULL, + `LOCKED` bit(1) NOT NULL, + `LOCKGRANTED` datetime NULL DEFAULT NULL, + `LOCKEDBY` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + PRIMARY KEY (`ID`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of flw_ev_databasechangeloglock +-- ---------------------------- +INSERT INTO `flw_ev_databasechangeloglock` VALUES (1, b'0', NULL, NULL); + +-- ---------------------------- +-- Table structure for flw_event_definition +-- ---------------------------- +DROP TABLE IF EXISTS `flw_event_definition`; +CREATE TABLE `flw_event_definition` ( + `ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `NAME_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `VERSION_` int NULL DEFAULT NULL, + `KEY_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `CATEGORY_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `DEPLOYMENT_ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `TENANT_ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `RESOURCE_NAME_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `DESCRIPTION_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + PRIMARY KEY (`ID_`) USING BTREE, + UNIQUE INDEX `ACT_IDX_EVENT_DEF_UNIQ`(`KEY_` ASC, `VERSION_` ASC, `TENANT_ID_` ASC) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of flw_event_definition +-- ---------------------------- + +-- ---------------------------- +-- Table structure for flw_event_deployment +-- ---------------------------- +DROP TABLE IF EXISTS `flw_event_deployment`; +CREATE TABLE `flw_event_deployment` ( + `ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `NAME_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `CATEGORY_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `DEPLOY_TIME_` datetime(3) NULL DEFAULT NULL, + `TENANT_ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `PARENT_DEPLOYMENT_ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + PRIMARY KEY (`ID_`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of flw_event_deployment +-- ---------------------------- + +-- ---------------------------- +-- Table structure for flw_event_resource +-- ---------------------------- +DROP TABLE IF EXISTS `flw_event_resource`; +CREATE TABLE `flw_event_resource` ( + `ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `NAME_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `DEPLOYMENT_ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `RESOURCE_BYTES_` longblob NULL, + PRIMARY KEY (`ID_`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of flw_event_resource +-- ---------------------------- + +-- ---------------------------- +-- Table structure for flw_ru_batch +-- ---------------------------- +DROP TABLE IF EXISTS `flw_ru_batch`; +CREATE TABLE `flw_ru_batch` ( + `ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `REV_` int NULL DEFAULT NULL, + `TYPE_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `SEARCH_KEY_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `SEARCH_KEY2_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `CREATE_TIME_` datetime(3) NOT NULL, + `COMPLETE_TIME_` datetime(3) NULL DEFAULT NULL, + `STATUS_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `BATCH_DOC_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `TENANT_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT '', + PRIMARY KEY (`ID_`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb3 COLLATE = utf8mb3_bin ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of flw_ru_batch +-- ---------------------------- + +-- ---------------------------- +-- Table structure for flw_ru_batch_part +-- ---------------------------- +DROP TABLE IF EXISTS `flw_ru_batch_part`; +CREATE TABLE `flw_ru_batch_part` ( + `ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `REV_` int NULL DEFAULT NULL, + `BATCH_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `TYPE_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `SCOPE_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `SUB_SCOPE_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `SCOPE_TYPE_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `SEARCH_KEY_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `SEARCH_KEY2_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `CREATE_TIME_` datetime(3) NOT NULL, + `COMPLETE_TIME_` datetime(3) NULL DEFAULT NULL, + `STATUS_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `RESULT_DOC_ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL, + `TENANT_ID_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT '', + PRIMARY KEY (`ID_`) USING BTREE, + INDEX `FLW_IDX_BATCH_PART`(`BATCH_ID_` ASC) USING BTREE, + CONSTRAINT `FLW_FK_BATCH_PART_PARENT` FOREIGN KEY (`BATCH_ID_`) REFERENCES `flw_ru_batch` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT +) ENGINE = InnoDB CHARACTER SET = utf8mb3 COLLATE = utf8mb3_bin ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of flw_ru_batch_part +-- ---------------------------- + +-- ---------------------------- +-- Table structure for sys_config +-- ---------------------------- +DROP TABLE IF EXISTS `sys_config`; +CREATE TABLE `sys_config` ( + `config_id` int NOT NULL AUTO_INCREMENT COMMENT '参数主键', + `config_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '参数名称', + `config_key` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '参数键名', + `config_value` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '参数键值', + `create_user` bigint NULL DEFAULT NULL COMMENT '创建者', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `update_user` bigint NULL DEFAULT NULL COMMENT '更新者', + `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间', + `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', + PRIMARY KEY (`config_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '参数配置表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of sys_config +-- ---------------------------- + +-- ---------------------------- +-- Table structure for sys_dict_data +-- ---------------------------- +DROP TABLE IF EXISTS `sys_dict_data`; +CREATE TABLE `sys_dict_data` ( + `dict_code` bigint NOT NULL AUTO_INCREMENT COMMENT '字典编码', + `dict_sort` int NULL DEFAULT 0 COMMENT '字典排序', + `dict_label` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '字典标签', + `dict_value` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '字典键值', + `dict_type` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '字典类型', + `css_class` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '样式属性(其他样式扩展)', + `list_class` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '表格回显样式', + `is_default` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT 'N' COMMENT '是否默认(Y是 N否)', + `status` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '状态(0正常 1停用)', + `create_user` bigint NULL DEFAULT NULL COMMENT '创建者', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `update_user` bigint NULL DEFAULT NULL COMMENT '更新者', + `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间', + `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', + PRIMARY KEY (`dict_code`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '字典数据表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of sys_dict_data +-- ---------------------------- + +-- ---------------------------- +-- Table structure for sys_dict_type +-- ---------------------------- +DROP TABLE IF EXISTS `sys_dict_type`; +CREATE TABLE `sys_dict_type` ( + `dict_id` bigint NOT NULL AUTO_INCREMENT COMMENT '字典主键', + `dict_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '字典名称', + `dict_type` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '字典类型', + `status` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '状态(0正常 1停用)', + `create_user` bigint NULL DEFAULT NULL COMMENT '创建者', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `update_user` bigint NULL DEFAULT NULL COMMENT '更新者', + `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间', + `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', + PRIMARY KEY (`dict_id`) USING BTREE, + UNIQUE INDEX `dict_type`(`dict_type` ASC) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '字典类型表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of sys_dict_type +-- ---------------------------- + +-- ---------------------------- +-- Table structure for ums_menu +-- ---------------------------- +DROP TABLE IF EXISTS `ums_menu`; +CREATE TABLE `ums_menu` ( + `menu_id` bigint NOT NULL AUTO_INCREMENT COMMENT '菜单ID', + `menu_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '菜单名称', + `parent_id` bigint NULL DEFAULT NULL COMMENT '父主键ID', + `sort` tinyint NULL DEFAULT 0 COMMENT '排序', + `url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '请求路径', + `menu_type` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '菜单类型(M目录 C菜单 F按钮)', + `visible` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '菜单状态(1隐藏 0显示)', + `permission` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '权限标识', + `icon` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '菜单图标', + `create_user` bigint NULL DEFAULT NULL COMMENT '创建人', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `update_user` bigint NULL DEFAULT NULL COMMENT '修改人', + `update_time` datetime NULL DEFAULT NULL COMMENT '修改时间', + `is_deleted` tinyint UNSIGNED NULL DEFAULT 0 COMMENT '是否删除(0:正常/1:删除)', + `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', + PRIMARY KEY (`menu_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 89 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '菜单表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of ums_menu +-- ---------------------------- +INSERT INTO `ums_menu` VALUES (7, '控制台', 0, 0, '', '', '0', 'dashboard:view', '', 1, '2024-05-15 18:29:59', NULL, '2024-05-15 18:29:59', 0, ''); +INSERT INTO `ums_menu` VALUES (9, '固资台账-资产公共台账', 0, 0, '', '', '0', 'ledger-asset-search:view', '', 1, '2024-05-15 18:32:01', NULL, '2024-05-15 18:32:01', 0, ''); +INSERT INTO `ums_menu` VALUES (11, '固资台账-资产库存台账', 0, 0, '', '', '0', 'ledger-storage:view', '', 1, '2024-05-15 18:32:55', NULL, '2024-05-15 18:32:55', 0, ''); +INSERT INTO `ums_menu` VALUES (13, '固资台账-归属组织台账', 0, 0, '', '', '0', 'ledger-asset-belong:view', '', 1, '2024-05-15 18:33:22', NULL, '2024-05-15 18:33:22', 0, ''); +INSERT INTO `ums_menu` VALUES (15, '固资台账-使用组织台账', 0, 0, '', '', '0', 'ledger-asset-org:view', '', 1, '2024-05-15 18:33:46', NULL, '2024-05-15 18:33:46', 0, ''); +INSERT INTO `ums_menu` VALUES (17, '固资台账-存放位置台账', 0, 0, '', '', '0', 'ledger-asset-position:view', '', 1, '2024-05-15 18:34:07', NULL, '2024-05-15 18:34:07', 0, ''); +INSERT INTO `ums_menu` VALUES (19, '固资台账-分类查询台账', 0, 0, '', '', '0', 'ledger-asset-category:view', '', 1, '2024-05-15 18:34:30', NULL, '2024-05-15 18:34:30', 0, ''); +INSERT INTO `ums_menu` VALUES (21, '固资台账-所管资产台账', 0, 0, '', '', '0', 'ledger-asset-my-own:view', '', 1, '2024-05-15 18:34:53', NULL, '2024-05-15 18:34:53', 0, ''); +INSERT INTO `ums_menu` VALUES (23, '固资管理-资产管理', 0, 0, '', '', '0', 'fixed-asset-manage:view', '', 1, '2024-05-15 18:36:34', NULL, '2024-05-15 18:36:34', 0, ''); +INSERT INTO `ums_menu` VALUES (25, '固资管理-资产入库', 0, 0, '', '', '0', 'fixed-asset-manage-entry:view', '', 1, '2024-05-15 18:37:03', NULL, '2024-05-15 18:37:03', 0, ''); +INSERT INTO `ums_menu` VALUES (27, '固资管理-资产领用', 0, 0, '', '', '0', 'fixed-asset-manage-distribution:view', '', 1, '2024-05-15 18:37:19', NULL, '2024-05-15 18:37:19', 0, ''); +INSERT INTO `ums_menu` VALUES (29, '固资管理-资产退库', 0, 0, '', '', '0', 'fixed-asset-manage-return:view', '', 1, '2024-05-15 18:37:32', NULL, '2024-05-15 18:37:32', 0, ''); +INSERT INTO `ums_menu` VALUES (31, '固资管理-资产借用', 0, 0, '', '', '0', 'fixed-asset-manage-borrow:view', '', 1, '2024-05-15 18:37:43', NULL, '2024-05-15 18:37:43', 0, ''); +INSERT INTO `ums_menu` VALUES (33, '固资管理-资产归还', 0, 0, '', '', '0', 'fixed-asset-manage-revert:view', '', 1, '2024-05-15 18:38:23', NULL, '2024-05-15 18:38:23', 0, ''); +INSERT INTO `ums_menu` VALUES (35, '固资管理-资产调拨', 0, 0, '', '', '0', 'fixed-asset-manage-allot:view', '', 1, '2024-05-15 18:38:38', NULL, '2024-05-15 18:38:38', 0, ''); +INSERT INTO `ums_menu` VALUES (37, '固资管理-资产转换', 0, 0, '', '', '0', 'fixed-asset-manage-transfer:view', '', 1, '2024-05-15 18:38:51', NULL, '2024-05-15 18:38:51', 0, ''); +INSERT INTO `ums_menu` VALUES (39, '固资管理-资产报废', 0, 0, '', '', '0', 'fixed-asset-manage-scrap:view', '', 1, '2024-05-15 18:39:07', NULL, '2024-05-15 18:39:07', 0, ''); +INSERT INTO `ums_menu` VALUES (41, '维护维保-维修类型', 0, 0, '', '', '0', 'fixed-asset-repair-type:view', '', 1, '2024-05-15 18:39:46', NULL, '2024-05-15 18:39:46', 0, ''); +INSERT INTO `ums_menu` VALUES (43, '维护维保-维修登记', 0, 0, '', '', '0', 'fixed-asset-repair-list:view', '', 1, '2024-05-15 18:40:04', NULL, '2024-05-15 18:40:04', 0, ''); +INSERT INTO `ums_menu` VALUES (45, '维护维保-故障登记', 0, 0, '', '', '0', 'fixed-asset-repair-fault:view', '', 1, '2024-05-15 18:40:17', NULL, '2024-05-15 18:40:17', 0, ''); +INSERT INTO `ums_menu` VALUES (47, '盘点管理-盘点计划', 0, 0, '', '', '0', 'stocktaking-plan:view', '', 1, '2024-05-15 18:40:48', NULL, '2024-05-15 18:40:48', 0, ''); +INSERT INTO `ums_menu` VALUES (49, '盘点管理-盘点任务', 0, 0, '', '', '0', 'stocktaking-job:view', '', 1, '2024-05-15 18:41:03', NULL, '2024-05-15 18:41:03', 0, ''); +INSERT INTO `ums_menu` VALUES (51, '预警中心-借用预警', 0, 0, '', '', '0', 'alert-borrow:view', '', 1, '2024-05-15 18:41:49', NULL, '2024-05-15 18:41:49', 0, ''); +INSERT INTO `ums_menu` VALUES (53, '预警中心-维保到期预警', 0, 0, '', '', '0', 'alert-maintenance:view', '', 1, '2024-05-15 18:42:28', NULL, '2024-05-15 18:42:28', 0, ''); +INSERT INTO `ums_menu` VALUES (55, '预警中心-安全库存预警', 0, 0, '', '', '0', 'alert-inventory-safety:view', '', 1, '2024-05-15 18:42:54', NULL, '2024-05-15 18:42:54', 0, ''); +INSERT INTO `ums_menu` VALUES (57, '预警中心-安全库存上限', 0, 0, '', '', '0', 'alert-inventory-up:view', '', 1, '2024-05-15 18:43:10', NULL, '2024-05-15 18:43:10', 0, ''); +INSERT INTO `ums_menu` VALUES (59, '预警中心-安全库存下限', 0, 0, '', '', '0', 'alert-inventory-down:view', '', 1, '2024-05-15 18:43:56', NULL, '2024-05-15 18:43:56', 0, ''); +INSERT INTO `ums_menu` VALUES (61, '基础数据-物品管理', 0, 0, '', '', '0', 'basic-category:view', '', 1, '2024-05-15 18:45:48', 1, '2024-05-15 18:56:30', 0, ''); +INSERT INTO `ums_menu` VALUES (63, '基础数据-生产商', 0, 0, '', '', '0', 'basic-manufacturer:view', '', 1, '2024-05-15 18:46:54', NULL, '2024-05-15 18:46:54', 0, ''); +INSERT INTO `ums_menu` VALUES (65, '基础数据-供应商', 0, 0, '', '', '0', 'basic-supplier:view', '', 1, '2024-05-15 18:47:09', NULL, '2024-05-15 18:47:09', 0, ''); +INSERT INTO `ums_menu` VALUES (67, '基础数据-维保商', 0, 0, '', '', '0', 'basic-maintainer:view', '', 1, '2024-05-15 18:47:26', NULL, '2024-05-15 18:47:26', 0, ''); +INSERT INTO `ums_menu` VALUES (69, '基础数据-存放位置', 0, 0, '', '', '0', 'basic-save-position:view', '', 1, '2024-05-15 18:47:43', NULL, '2024-05-15 18:47:43', 0, ''); +INSERT INTO `ums_menu` VALUES (71, '基础数据-存放仓库', 0, 0, '', '', '0', 'basic-warehouse:view', '', 1, '2024-05-15 18:47:57', NULL, '2024-05-15 18:47:57', 0, ''); +INSERT INTO `ums_menu` VALUES (73, '固资流程-流程首页', 0, 0, '', '', '0', 'asset-flow-home:view', '', 1, '2024-05-15 18:48:41', NULL, '2024-05-15 18:48:41', 0, ''); +INSERT INTO `ums_menu` VALUES (75, '固资流程-我的申请', 0, 0, '', '', '0', 'asset-flow-my-apply:view', '', 1, '2024-05-15 18:48:54', NULL, '2024-05-15 18:48:54', 0, ''); +INSERT INTO `ums_menu` VALUES (77, '固资流程-待我处理', 0, 0, '', '', '0', 'asset-flow-my-todo:view', '', 1, '2024-05-15 18:49:09', NULL, '2024-05-15 18:49:09', 0, ''); +INSERT INTO `ums_menu` VALUES (79, '固资流程-我已处理', 0, 0, '', '', '0', 'asset-flow-my-finished:view', '', 1, '2024-05-15 18:49:22', NULL, '2024-05-15 18:49:22', 0, ''); +INSERT INTO `ums_menu` VALUES (81, '系统管理-组织架构', 0, 0, '', '', '0', 'system-user:view', '', 1, '2024-05-15 18:50:19', NULL, '2024-05-15 18:50:19', 0, ''); +INSERT INTO `ums_menu` VALUES (83, '系统管理-角色管理', 0, 0, '', '', '0', 'system-role:view', '', 1, '2024-05-15 18:50:32', NULL, '2024-05-15 18:50:32', 0, ''); +INSERT INTO `ums_menu` VALUES (85, '系统管理-表单定义', 0, 0, '', '', '0', 'system-flow-form:view', '', 1, '2024-05-15 18:50:49', NULL, '2024-05-15 18:50:49', 0, ''); +INSERT INTO `ums_menu` VALUES (87, '系统管理-授权证书', 0, 0, '', '', '0', 'system-license:view', '', 1, '2024-05-27 22:01:51', NULL, '2024-05-27 22:01:51', 0, ''); + +-- ---------------------------- +-- Table structure for ums_organization +-- ---------------------------- +DROP TABLE IF EXISTS `ums_organization`; +CREATE TABLE `ums_organization` ( + `organization_id` bigint NOT NULL AUTO_INCREMENT COMMENT '组织ID', + `organization_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '组织名称', + `organization_type` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '组织类型(0:公司/1:部门/2:岗位)', + `order_num` int NULL DEFAULT NULL COMMENT '显示顺序', + `parent_id` bigint NULL DEFAULT NULL COMMENT '父组织id', + `depth` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '深度', + `status` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '状态(0:正常/1:停用)', + `is_deleted` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '是否删除有效(0:正常/1:删除有效)', + `create_user` bigint NULL DEFAULT NULL COMMENT '创建人', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `update_user` bigint NULL DEFAULT NULL COMMENT '修改人', + `update_time` datetime NULL DEFAULT NULL COMMENT '修改时间', + PRIMARY KEY (`organization_id`) USING BTREE, + UNIQUE INDEX `organization_id`(`organization_id` ASC) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 301 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '组织信息表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of ums_organization +-- ---------------------------- +INSERT INTO `ums_organization` VALUES (1, '集团总部公司', '0', 1, 0, '1', '0', '0', NULL, NULL, 1, '2024-05-18 10:12:43'); + +-- ---------------------------- +-- Table structure for ums_post +-- ---------------------------- +DROP TABLE IF EXISTS `ums_post`; +CREATE TABLE `ums_post` ( + `post_id` bigint NOT NULL AUTO_INCREMENT COMMENT '岗位ID', + `organization_id` bigint NOT NULL COMMENT '组织ID', + `post_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '岗位名称', + `sort` int NOT NULL COMMENT '显示顺序', + `status` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '0' COMMENT '状态(0:正常/1:停用)', + `is_deleted` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '0' COMMENT '是否删除有效(0:正常/1:删除有效)', + `create_user` bigint NULL DEFAULT NULL COMMENT '创建人', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `update_user` bigint NULL DEFAULT NULL COMMENT '修改人', + `update_time` datetime NULL DEFAULT NULL COMMENT '修改时间', + `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', + PRIMARY KEY (`post_id`) USING BTREE, + UNIQUE INDEX `post_id`(`post_id` ASC) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '岗位信息表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of ums_post +-- ---------------------------- + +-- ---------------------------- +-- Table structure for ums_role +-- ---------------------------- +DROP TABLE IF EXISTS `ums_role`; +CREATE TABLE `ums_role` ( + `role_id` bigint NOT NULL AUTO_INCREMENT COMMENT '角色ID', + `role_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '角色名称', + `role_key` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '角色权限字符串', + `role_sort` int NULL DEFAULT NULL COMMENT '显示顺序', + `data_scope` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '数据范围(1:全部数据权限 2:自定数据权限 3:本部门数据权限 4:本部门及以下数据权限)', + `status` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '0' COMMENT '角色状态(0:正常/1:停用)', + `is_deleted` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '是否删除(0:正常/1:删除)', + `create_user` bigint NULL DEFAULT NULL COMMENT '创建人', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `update_user` bigint NULL DEFAULT NULL COMMENT '修改人', + `update_time` datetime NULL DEFAULT NULL COMMENT '修改时间', + `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', + PRIMARY KEY (`role_id`) USING BTREE, + UNIQUE INDEX `role_id`(`role_id` ASC) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 11 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '角色表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of ums_role +-- ---------------------------- +INSERT INTO `ums_role` VALUES (1, '超级管理员', 'admin', 1, '1', '0', '0', 0, '2024-03-22 15:11:44', 1, '2024-05-27 22:05:58', '超级管理员'); +INSERT INTO `ums_role` VALUES (2, '普通管理员', 'root', 2, '2', '0', '0', 0, '2024-03-22 15:18:10', 1, '2024-08-19 15:56:21', '普通管理员'); +INSERT INTO `ums_role` VALUES (3, '普通用户', 'user', 3, '3', '0', '0', 0, '2024-04-12 15:18:10', 1, '2024-05-27 10:42:40', '普通用户'); + +-- ---------------------------- +-- Table structure for ums_role_menu +-- ---------------------------- +DROP TABLE IF EXISTS `ums_role_menu`; +CREATE TABLE `ums_role_menu` ( + `role_id` bigint NOT NULL COMMENT '角色ID', + `menu_id` bigint NOT NULL COMMENT '菜单ID', + PRIMARY KEY (`role_id`, `menu_id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '角色权限关联表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of ums_role_menu +-- ---------------------------- +INSERT INTO `ums_role_menu` VALUES (1, 7); +INSERT INTO `ums_role_menu` VALUES (1, 9); +INSERT INTO `ums_role_menu` VALUES (1, 11); +INSERT INTO `ums_role_menu` VALUES (1, 13); +INSERT INTO `ums_role_menu` VALUES (1, 15); +INSERT INTO `ums_role_menu` VALUES (1, 17); +INSERT INTO `ums_role_menu` VALUES (1, 19); +INSERT INTO `ums_role_menu` VALUES (1, 21); +INSERT INTO `ums_role_menu` VALUES (1, 23); +INSERT INTO `ums_role_menu` VALUES (1, 25); +INSERT INTO `ums_role_menu` VALUES (1, 27); +INSERT INTO `ums_role_menu` VALUES (1, 29); +INSERT INTO `ums_role_menu` VALUES (1, 31); +INSERT INTO `ums_role_menu` VALUES (1, 33); +INSERT INTO `ums_role_menu` VALUES (1, 35); +INSERT INTO `ums_role_menu` VALUES (1, 37); +INSERT INTO `ums_role_menu` VALUES (1, 39); +INSERT INTO `ums_role_menu` VALUES (1, 41); +INSERT INTO `ums_role_menu` VALUES (1, 43); +INSERT INTO `ums_role_menu` VALUES (1, 45); +INSERT INTO `ums_role_menu` VALUES (1, 47); +INSERT INTO `ums_role_menu` VALUES (1, 49); +INSERT INTO `ums_role_menu` VALUES (1, 51); +INSERT INTO `ums_role_menu` VALUES (1, 53); +INSERT INTO `ums_role_menu` VALUES (1, 55); +INSERT INTO `ums_role_menu` VALUES (1, 57); +INSERT INTO `ums_role_menu` VALUES (1, 59); +INSERT INTO `ums_role_menu` VALUES (1, 61); +INSERT INTO `ums_role_menu` VALUES (1, 63); +INSERT INTO `ums_role_menu` VALUES (1, 65); +INSERT INTO `ums_role_menu` VALUES (1, 67); +INSERT INTO `ums_role_menu` VALUES (1, 69); +INSERT INTO `ums_role_menu` VALUES (1, 71); +INSERT INTO `ums_role_menu` VALUES (1, 73); +INSERT INTO `ums_role_menu` VALUES (1, 75); +INSERT INTO `ums_role_menu` VALUES (1, 77); +INSERT INTO `ums_role_menu` VALUES (1, 79); +INSERT INTO `ums_role_menu` VALUES (1, 81); +INSERT INTO `ums_role_menu` VALUES (1, 83); +INSERT INTO `ums_role_menu` VALUES (1, 85); +INSERT INTO `ums_role_menu` VALUES (1, 87); +INSERT INTO `ums_role_menu` VALUES (2, 7); +INSERT INTO `ums_role_menu` VALUES (2, 9); +INSERT INTO `ums_role_menu` VALUES (2, 11); +INSERT INTO `ums_role_menu` VALUES (2, 13); +INSERT INTO `ums_role_menu` VALUES (2, 15); +INSERT INTO `ums_role_menu` VALUES (2, 17); +INSERT INTO `ums_role_menu` VALUES (2, 19); +INSERT INTO `ums_role_menu` VALUES (2, 21); +INSERT INTO `ums_role_menu` VALUES (2, 23); +INSERT INTO `ums_role_menu` VALUES (2, 25); +INSERT INTO `ums_role_menu` VALUES (2, 27); +INSERT INTO `ums_role_menu` VALUES (2, 29); +INSERT INTO `ums_role_menu` VALUES (2, 31); +INSERT INTO `ums_role_menu` VALUES (2, 33); +INSERT INTO `ums_role_menu` VALUES (2, 35); +INSERT INTO `ums_role_menu` VALUES (2, 37); +INSERT INTO `ums_role_menu` VALUES (2, 39); +INSERT INTO `ums_role_menu` VALUES (2, 41); +INSERT INTO `ums_role_menu` VALUES (2, 43); +INSERT INTO `ums_role_menu` VALUES (2, 45); +INSERT INTO `ums_role_menu` VALUES (2, 47); +INSERT INTO `ums_role_menu` VALUES (2, 49); +INSERT INTO `ums_role_menu` VALUES (2, 51); +INSERT INTO `ums_role_menu` VALUES (2, 53); +INSERT INTO `ums_role_menu` VALUES (2, 55); +INSERT INTO `ums_role_menu` VALUES (2, 57); +INSERT INTO `ums_role_menu` VALUES (2, 59); +INSERT INTO `ums_role_menu` VALUES (2, 61); +INSERT INTO `ums_role_menu` VALUES (2, 63); +INSERT INTO `ums_role_menu` VALUES (2, 65); +INSERT INTO `ums_role_menu` VALUES (2, 67); +INSERT INTO `ums_role_menu` VALUES (2, 69); +INSERT INTO `ums_role_menu` VALUES (2, 71); +INSERT INTO `ums_role_menu` VALUES (2, 73); +INSERT INTO `ums_role_menu` VALUES (2, 75); +INSERT INTO `ums_role_menu` VALUES (2, 77); +INSERT INTO `ums_role_menu` VALUES (2, 79); +INSERT INTO `ums_role_menu` VALUES (3, 7); +INSERT INTO `ums_role_menu` VALUES (3, 73); +INSERT INTO `ums_role_menu` VALUES (3, 75); + +-- ---------------------------- +-- Table structure for ums_user +-- ---------------------------- +DROP TABLE IF EXISTS `ums_user`; +CREATE TABLE `ums_user` ( + `user_id` bigint NOT NULL AUTO_INCREMENT COMMENT '用户ID', + `login_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '登录账号', + `user_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '用户昵称', + `email` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '用户邮箱', + `phone` varchar(11) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '联系电话', + `password` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '密码', + `salt` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '盐加密', + `status` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '0' COMMENT '状态(0:正常/1:停用)', + `is_deleted` tinyint NOT NULL DEFAULT 0 COMMENT '是否删除(0:正常/1:删除)', + `login_ip` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '最后登录IP', + `login_date` datetime NULL DEFAULT NULL COMMENT '最后登录时间', + `pwd_update_date` datetime NULL DEFAULT NULL COMMENT '密码最后更新时间', + `create_user` bigint NULL DEFAULT NULL COMMENT '创建人', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `update_user` bigint NULL DEFAULT NULL COMMENT '修改人', + `update_time` datetime NULL DEFAULT NULL COMMENT '修改时间', + `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', + `sex` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '用户性别(0-男 1-女 2-未知)', + `avatar` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '头像路径', + PRIMARY KEY (`user_id`) USING BTREE, + UNIQUE INDEX `user_id`(`user_id` ASC) USING BTREE, + UNIQUE INDEX `phone`(`phone` ASC) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 77 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '用户表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of ums_user +-- ---------------------------- +INSERT INTO `ums_user` VALUES (1, 'admin', '超级管理员', 'xxx@xx.com', '12345678900', '1a118e6eb5dedb43a63652c6e64a89f6', '0ktbQOii+L5jOmecU3q3Tg==', '0', 0, NULL, NULL, NULL, 1, NULL, 1, '2024-05-06 21:39:17', '超级管理员账号', '0', NULL); +INSERT INTO `ums_user` VALUES (2, 'root', '普通管理员', 'xxx@qq.com', '12345678901', '1a118e6eb5dedb43a63652c6e64a89f6', '0ktbQOii+L5jOmecU3q3Tg==', '0', 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '普通管理员账号', '0', NULL); +INSERT INTO `ums_user` VALUES (3, 'user1', '普通用户1', 'xxx1@qq.com', '12345678902', '1a118e6eb5dedb43a63652c6e64a89f6', '0ktbQOii+L5jOmecU3q3Tg==', '0', 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '普通用户账号1', '0', NULL); + +-- ---------------------------- +-- Table structure for ums_user_organization +-- ---------------------------- +DROP TABLE IF EXISTS `ums_user_organization`; +CREATE TABLE `ums_user_organization` ( + `organization_id` bigint NOT NULL COMMENT '组织ID', + `user_id` bigint NOT NULL COMMENT '员工ID', + PRIMARY KEY (`organization_id`, `user_id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '组织信息关联表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of ums_user_organization +-- ---------------------------- +INSERT INTO `ums_user_organization` VALUES (1, 1); +INSERT INTO `ums_user_organization` VALUES (1, 2); +INSERT INTO `ums_user_organization` VALUES (1, 3); + +-- ---------------------------- +-- Table structure for ums_user_role +-- ---------------------------- +DROP TABLE IF EXISTS `ums_user_role`; +CREATE TABLE `ums_user_role` ( + `user_id` bigint NOT NULL COMMENT '用户ID', + `role_id` bigint NOT NULL COMMENT '角色ID', + PRIMARY KEY (`user_id`, `role_id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '用户角色关联表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of ums_user_role +-- ---------------------------- +INSERT INTO `ums_user_role` VALUES (1, 1); +INSERT INTO `ums_user_role` VALUES (2, 2); +INSERT INTO `ums_user_role` VALUES (3, 3); + +-- ---------------------------- +-- Table structure for ums_user_session +-- ---------------------------- +DROP TABLE IF EXISTS `ums_user_session`; +CREATE TABLE `ums_user_session` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', + `sessionId` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '用户会话id', + `login_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '登录账号', + `dept_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '部门名称', + `ipaddr` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '登录IP地址', + `login_location` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '登录地点', + `browser` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '浏览器类型', + `os` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '操作系统', + `status` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '在线状态on_line在线off_line离线', + `start_timestamp` datetime NULL DEFAULT NULL COMMENT 'session创建时间', + `last_access_time` datetime NULL DEFAULT NULL COMMENT 'session最后访问时间', + `expire_time` int NULL DEFAULT 0 COMMENT '超时时间,单位为分钟', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '在线用户记录' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of ums_user_session +-- ---------------------------- + +SET FOREIGN_KEY_CHECKS = 1; diff --git a/system/pom.xml b/system/pom.xml new file mode 100644 index 0000000..ad970a2 --- /dev/null +++ b/system/pom.xml @@ -0,0 +1,22 @@ + + + + yyy + com.yyy + 1.0-SNAPSHOT + + 4.0.0 + + system + + + + com.yyy + common + 1.0-SNAPSHOT + + + + \ No newline at end of file diff --git a/system/src/main/java/com/yyy/system/controller/EamAssetController.java b/system/src/main/java/com/yyy/system/controller/EamAssetController.java new file mode 100644 index 0000000..5e902b0 --- /dev/null +++ b/system/src/main/java/com/yyy/system/controller/EamAssetController.java @@ -0,0 +1,327 @@ +package com.yyy.system.controller; + + +import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.yyy.common.core.controller.BaseController; +import com.yyy.common.core.domain.Result; +import com.yyy.common.core.page.TableDataInfo; +import com.yyy.common.enums.AssetStatusEnum; +import com.yyy.common.enums.BusinessStatusEnum; +import com.yyy.common.enums.DetectTypeEnum; +import com.yyy.common.enums.EncodingEum; +import com.yyy.common.utils.bean.BeanUtils; +import com.yyy.common.utils.common.DateUtils; +import com.yyy.common.utils.poi.ExcelUtil; +import com.yyy.system.entity.dto.*; +import com.yyy.system.entity.excel.EamAssetExcel; +import com.yyy.system.entity.pojo.*; +import com.yyy.system.entity.vo.EamAssetVo; +import com.yyy.system.entity.vo.EamRepairVo; +import com.yyy.system.entity.vo.EamWarehouseInventoryVo; +import com.yyy.system.entity.vo.EamWarningBorrowVo; +import com.yyy.system.service.*; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.multipart.MultipartFile; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.atomic.AtomicReference; +import java.util.stream.Collectors; + +/** + * 资产信息表(eam_asset)表控制层 + * + * @author Fangy + * @since 2024-04-09 13:47:47 + */ +@RestController +@Api(tags = "资产信息表") +@RequestMapping("api/eamAsset") +public class EamAssetController extends BaseController { + + private static final Logger logger = LoggerFactory.getLogger(EamAssetController.class); + /** + * 服务对象 + */ + @Resource + private EamAssetService eamAssetService; + + @Resource + private EamBusinessRegistrationService eamBusinessRegistrationService; + + @Resource + private EamAssetLogService eamAssetLogService; + + @Resource + private EamBusinessBorrowService borrowService; + + @Resource + private EamRepairService eamRepairService; + + /** + * 查询分页数据 + */ + @PostMapping("/list") + @ApiOperation(value = "查询分页数据") + public TableDataInfo list(@RequestBody EamAssetQueryDto eamAssetQueryDto) { + startPage(); + List list = eamAssetService.query(eamAssetQueryDto); + return getDataTable(EamAssetVo.ToVo(list)); + } + + /** + * 查询详情数据 + */ + @PostMapping("/query") + @ApiOperation(value = "查询详情数据") + public Result query(@RequestParam Long id) { + return success(EamAssetVo.ToVo(eamAssetService.getById(id))); + } + + /** + * 查询详情数据 + */ + @PostMapping("/queryByIds") + @ApiOperation(value = "查询多个") + public Result queryByIds(@RequestBody List idList) { + return success(EamAssetVo.ToVo(eamAssetService.listByIds(idList))); + } + + /** + * 新增数据 + */ + @PostMapping("/add") + @ApiOperation(value = "新增数据") + public Result add(@Validated @RequestBody EamAssetDto eamAssetDto) { + EamAsset eamAsset = new EamAsset(); + BeanUtils.copyProperties(eamAssetDto, eamAsset); + Long assetId = eamAssetService.selectLatestPrimaryKey() + 1; + eamAsset.setAssetId(assetId); + eamAsset.setCreateUser(getUserId()); + eamAsset.setAssetCode(EncodingEum.ASSET.getBusinessId()); + eamBusinessRegistrationService.save(EamBusinessRegistration.builder().businessId(EncodingEum.REGISTRATION.getBusinessId()).name(DetectTypeEnum.ALLOCATE.getInfo() + "_" + eamAssetDto.getName()).applicant(null).status(BusinessStatusEnum.DRAFT.getCode()).assetId(assetId).createUser(getUserId()).build()); + return eamAssetService.save(eamAsset) ? success() : error(); + } + + /** + * 修改数据 + */ + @PostMapping("/update") + @ApiOperation(value = "修改数据") + public Result update(@Validated @RequestBody EamAssetDto eamAssetDto) { + EamAsset eamAsset = new EamAsset(); + BeanUtils.copyProperties(eamAssetDto, eamAsset); + eamAsset.setUpdateUser(getUserId()); + return eamAssetService.updateById(eamAsset) ? success() : error(); + } + + /** + * 删除数据 + */ + @PostMapping("/delete") + @ApiOperation(value = "删除数据") + public Result delete(@RequestBody List idList) { + return eamAssetService.delete(idList) ? success() : error(); + } + + /** + * 快速复制数据 + */ + @PostMapping("/copy") + @ApiOperation(value = "快速复制数据") + public Result copy(@RequestBody List idList) { + List list = eamAssetService.listByIds(idList); + AtomicReference assetId = new AtomicReference<>(eamAssetService.selectLatestPrimaryKey() + 1); + list.forEach(e -> { + e.setAssetId(assetId.get()); + e.setCreateUser(getUserId()); + eamBusinessRegistrationService.save(EamBusinessRegistration.builder().businessId(EncodingEum.REGISTRATION.getBusinessId()).name(DetectTypeEnum.ALLOCATE.getInfo() + "_" + e.getName()).applicant(null).status(BusinessStatusEnum.DRAFT.getCode()).assetId(assetId.get()).createUser(getUserId()).build()); + assetId.getAndSet(assetId.get() + 1); + }); + eamAssetService.saveBatch(list); + return success(); + } + + /** + * 快速复制数据+数量 + */ + @PostMapping("/copyByNum") + @ApiOperation(value = "快速复制数据+数量") + public Result copyByNum(@RequestParam Long id, @RequestParam Integer num) { + if (num > 200) { + return error("复制失败!复制数量大于200,请重新操作"); + } + EamAsset asset = eamAssetService.getById(id); + Long assetId = eamAssetService.selectLatestPrimaryKey() + 1; + List list = new ArrayList<>(); + for (int i = 0; i < num; i++) { + EamAsset newAsset = new EamAsset(); + BeanUtils.copyProperties(asset, newAsset); + newAsset.setAssetCode(EncodingEum.ASSET.getBusinessId()); + newAsset.setStatus(AssetStatusEnum.UN_USEd.getCode()); + newAsset.setAssetId(assetId + i); + newAsset.setCreateUser(getUserId()); + list.add(newAsset); + eamBusinessRegistrationService.save(EamBusinessRegistration.builder().businessId(EncodingEum.REGISTRATION.getBusinessId()).name(DetectTypeEnum.REGISTRATION.getInfo() + "_" + asset.getName()).applicant(null).status(BusinessStatusEnum.DRAFT.getCode()).assetId(assetId + i).createUser(getUserId()).build()); + } + eamAssetService.saveBatch(list); + return success(); + } + + @PostMapping("/confirm") + @ApiOperation(value = "确认") + public Result confirm(@RequestBody List idList) { + if (!eamBusinessRegistrationService.update(idList, BusinessStatusEnum.COMPLETED)) { + return error(); + } + eamBusinessRegistrationService.query(idList).forEach(e -> { + eamAssetLogService.add(e.getBusinessId(), DetectTypeEnum.REGISTRATION, DetectTypeEnum.REGISTRATION.getInfo(), e.getAssetId(), getUserId()); + }); + return success(); + } + + @PostMapping("/export") + @ApiOperation(value = "导出资产数据excel") + public void export(@RequestBody List idList, HttpServletResponse response) { + List list = eamAssetService.listByIds(idList); + ExcelUtil util = new ExcelUtil<>(EamAssetExcel.class); + util.exportExcel(response, EamAssetExcel.ToExcel(list), "资产数据"); + } + + @PostMapping("/importData") + @ApiOperation(value = "导入资产数据excel") + public Result importData(MultipartFile file) throws Exception { + ExcelUtil util = new ExcelUtil<>(EamAssetExcel.class); + List list = eamAssetService.excelToPojo(util.importExcel(file.getInputStream())); + //eamBusinessRegistrationService.save(EamBusinessRegistration.builder().businessId(EncodingEum.REGISTRATION.getBusinessId()).name(DetectTypeEnum.ALLOCATE.getInfo() + "_" + e.getName()).applicant(null).status(BusinessStatusEnum.DRAFT.getCode()).assetId(assetId.get()).createUser(getUserId()).build()); + eamAssetService.saveBatch(list); + return success(); + } + + @PostMapping("/importTemplate") + @ApiOperation(value = "导入资产数据excel模板") + public void importTemplate(HttpServletResponse response) { + ExcelUtil util = new ExcelUtil<>(EamAssetExcel.class); + util.importTemplateExcel(response, "资产数据"); + } + + @PostMapping("/warning/up") + @ApiOperation(value = "库存安全上限告警接口") + public TableDataInfo up() { + startPage(); + List list = eamAssetService.queryWarehouseInventory(new EamWarehouseInventoryDto()); + return getDataTable(EamWarehouseInventoryVo.ToVo(list).stream().filter(e -> e.getUpperLimit() <= e.getCount()).collect(Collectors.toList())); + } + + @PostMapping("/warning/down") + @ApiOperation(value = "库存安全下限告警接口") + public TableDataInfo down() { + startPage(); + List list = eamAssetService.queryWarehouseInventory(new EamWarehouseInventoryDto()); + return getDataTable(EamWarehouseInventoryVo.ToVo(list).stream().filter(e -> e.getLowerLimit() >= e.getCount()).collect(Collectors.toList())); + } + + @PostMapping("/warning/safety") + @ApiOperation(value = "安全库存告警接口") + public TableDataInfo safety() { + startPage(); + List list = eamAssetService.queryWarehouseInventory(new EamWarehouseInventoryDto()); + return getDataTable(EamWarehouseInventoryVo.ToVo(list).stream().filter(e -> e.getSafetyLimit() <= e.getCount() && e.getCount() < e.getUpperLimit()).collect(Collectors.toList())); + } + + @PostMapping("/warning/maintenance") + @ApiOperation(value = "维保到期预警接口") + public TableDataInfo maintenance() { + startPage(); + List list = eamAssetService.maintenance(DateUtils.getTime()); + return getDataTable(EamAssetVo.ToVo(list)); + } + + @PostMapping("/warning/borrow") + @ApiOperation(value = "借用预警接口") + public TableDataInfo borrow() { + startPage(); + List result = borrowService.list(new QueryWrapper<>()).stream() + .filter(borrow -> borrow.getIsDeleted().equals(0) && JSON.parseArray(borrow.getAssetIdList()).size() != 0 && + borrow.getReturnTime().before(DateUtils.toDate(LocalDateTime.now().plusDays(3)))) + .flatMap(borrow -> eamAssetService.listByIds(JSON.parseArray(borrow.getAssetIdList(), EamWarehouseAssetDto.class).stream().map(EamWarehouseAssetDto::getAssetId).distinct().collect(Collectors.toList())).stream() + .filter(asset -> asset.getStatus().equals(AssetStatusEnum.BORROW.getCode())) + .map(asset -> EamWarningBorrowVo.ToVo(asset, borrow.getBusinessId(), borrow.getReturnTime()))) + .collect(Collectors.toList()); + return getDataTable(result); + } + + @PostMapping("/spareParts/add") + @ApiOperation(value = "添加备品备件信息关联接口") + public Result sparePartsAdd(@RequestBody EamSparePartsDto eamSparePartsDto) { + eamAssetService.sparePartsAdd(eamSparePartsDto); + return success(); + } + + @PostMapping("/spareParts/list") + @ApiOperation(value = "查询备品备件信息关联接口") + public Result sparePartsList(@RequestParam Long assetId) { + return success(EamWarehouseInventoryVo.ToVo(eamAssetService.sparePartsList(assetId))); + } + + @PostMapping("/spareParts/del") + @ApiOperation(value = "删除备品备件信息关联接口") + public Result sparePartsDel(@RequestBody EamSparePartsDto eamSparePartsDto) { + eamAssetService.sparePartsDel(eamSparePartsDto); + return success(); + } + + /** + * 通过资产id查询维修信息分页数据 + */ + @PostMapping("/repair/list") + @ApiOperation(value = "通过资产id查询维修分页数据") + public TableDataInfo repairList(@RequestParam Long id) { + startPage(); + List list = eamRepairService.getByAssetId(id); + return getDataTable(EamRepairVo.ToVo(list)); + } + + + /** + * TODO 维修信息详情 + */ + @PostMapping("/repair/detail") + @ApiOperation(value = "维修信息详情") + public Result detail(@RequestParam Long id) { + EamRepair eamRepair = eamRepairService.getById(id); + return success(EamRepairVo.ToVo(eamRepair)); + } + + /** + * 查询库存 + */ + @PostMapping("/warehouse/list") + @ApiOperation(value = "查询库存列表") + public TableDataInfo warehouseList(@RequestBody EamWarehouseInventoryDto eamWarehouseInventoryDto) { + startPage(); + List list = eamAssetService.queryWarehouseInventory(eamWarehouseInventoryDto); + return getDataTable(EamWarehouseInventoryVo.ToVo(list)); + } + + /** + * 查询业务表单中的库存流转记录 + */ + @PostMapping("/warehouse/listByIds") + @ApiOperation(value = "查询业务表单中的库存流转记录") + public TableDataInfo warehouseList(@RequestBody List eamWarehouseAssetDtoList) { + startPage(); + List list = eamAssetService.queryWarehouseInventoryByIds(eamWarehouseAssetDtoList); + return getDataTable(EamWarehouseInventoryVo.ToVo(list)); + } +} + diff --git a/system/src/main/java/com/yyy/system/controller/EamAssetLogController.java b/system/src/main/java/com/yyy/system/controller/EamAssetLogController.java new file mode 100644 index 0000000..a68762b --- /dev/null +++ b/system/src/main/java/com/yyy/system/controller/EamAssetLogController.java @@ -0,0 +1,58 @@ +package com.yyy.system.controller; + + +import com.yyy.common.core.controller.BaseController; +import com.yyy.common.core.domain.Result; +import com.yyy.common.core.page.TableDataInfo; +import com.yyy.system.entity.pojo.EamAssetLog; +import com.yyy.system.entity.dto.EamAssetLogDto; +import com.yyy.system.entity.vo.EamAssetLogVo; +import com.yyy.system.service.EamAssetLogService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +/** + * 资产操作日志(eam_asset_log)表控制层 + * + * @author Fangy + * @since 2024-04-09 10:23:38 + */ +@RestController +@Api(tags = "资产操作日志") +@RequestMapping("api/eamAssetLog") +public class EamAssetLogController extends BaseController { + + private static final Logger logger = LoggerFactory.getLogger(EamAssetLogController.class); + /** + * 服务对象 + */ + @Resource + private EamAssetLogService eamAssetLogService; + + /** + * 查询分页数据 + */ + @PostMapping("/list") + @ApiOperation(value = "查询分页数据") + public TableDataInfo list(@RequestBody EamAssetLogDto eamAssetLogDto) { + startPage(); + List list = eamAssetLogService.query(eamAssetLogDto); + return getDataTable(EamAssetLogVo.ToVo(list)); + } + + /** + * 查询详情数据 + */ + @PostMapping("/query") + @ApiOperation(value = "查询详情数据") + public Result query(@RequestParam Long id) { + return success(EamAssetLogVo.ToVo(eamAssetLogService.getById(id))); + } +} + diff --git a/system/src/main/java/com/yyy/system/controller/EamBasicCategoryController.java b/system/src/main/java/com/yyy/system/controller/EamBasicCategoryController.java new file mode 100644 index 0000000..d722aa1 --- /dev/null +++ b/system/src/main/java/com/yyy/system/controller/EamBasicCategoryController.java @@ -0,0 +1,115 @@ +package com.yyy.system.controller; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.yyy.common.core.controller.BaseController; +import com.yyy.common.core.domain.Result; +import com.yyy.common.utils.bean.BeanUtils; +import com.yyy.system.entity.pojo.EamBasicCategory; +import com.yyy.system.entity.dto.EamBasicCategoryDto; +import com.yyy.system.entity.vo.EamBasicCategoryVo; +import com.yyy.system.service.EamBasicCategoryService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; + +import javax.annotation.Resource; +import java.util.List; + +/** + * 资产分类信息表(eam_basic_category)表控制层 + * + * @author Fangy + * @since 2024-04-08 14:37:24 + */ +@RestController +@Api(tags = "资产分类信息表") +@RequestMapping("api/eamBasicCategory") +public class EamBasicCategoryController extends BaseController { + + private static final Logger logger = LoggerFactory.getLogger(EamBasicCategoryController.class); + /** + * 服务对象 + */ + @Resource + private EamBasicCategoryService eamBasicCategoryService; + + /** + * 资产分类信息树 + */ + @PostMapping("/tree") + @ApiOperation(value = "资产分类信息树") + public Result> tree() { + return success(EamBasicCategoryVo.ToVo(eamBasicCategoryService.list(new QueryWrapper().eq("is_deleted", 0)))); + } + + /** + * 查询详情数据 + */ + @PostMapping("/query") + @ApiOperation(value = "查询详情数据") + public Result query(@RequestParam Long id) { + return success(EamBasicCategoryVo.ToVo(eamBasicCategoryService.getById(id))); + } + + /** + * 新增数据 + */ + @PostMapping("/add") + @ApiOperation(value = "新增数据") + public Result add(@Validated @RequestBody EamBasicCategoryDto eamBasicCategoryDto) { + String flag = validateLimit(eamBasicCategoryDto); + if (flag != null) { + return error(flag); + } + EamBasicCategory eamBasicCategory = new EamBasicCategory(); + BeanUtils.copyProperties(eamBasicCategoryDto, eamBasicCategory); + eamBasicCategory.setCreateUser(getUserId()); + return eamBasicCategoryService.save(eamBasicCategory) ? success() : error(); + } + + /** + * 修改数据 + */ + @PostMapping("/update") + @ApiOperation(value = "修改数据") + public Result update(@Validated @RequestBody EamBasicCategoryDto eamBasicCategoryDto) { + String flag = validateLimit(eamBasicCategoryDto); + if (flag != null) { + return error(flag); + } + EamBasicCategory eamBasicCategory = new EamBasicCategory(); + BeanUtils.copyProperties(eamBasicCategoryDto, eamBasicCategory); + eamBasicCategory.setUpdateUser(getUserId()); + return eamBasicCategoryService.updateById(eamBasicCategory) ? success() : error(); + } + + /** + * 删除数据 + */ + @PostMapping("/delete") + @ApiOperation(value = "删除数据") + public Result delete(@RequestBody List idList) { + //TODO 删除类目下的固定资产 + return eamBasicCategoryService.removeBatchByIds(idList) ? success() : error(); + } + + private String validateLimit(EamBasicCategoryDto eamBasicCategoryDto) { + Integer lowerLimit = eamBasicCategoryDto.getLowerLimit(); + Integer safetyLimit = eamBasicCategoryDto.getSafetyLimit(); + Integer upperLimit = eamBasicCategoryDto.getUpperLimit(); + + if (lowerLimit != null && safetyLimit != null && safetyLimit < lowerLimit) { + return "安全库存应该大于安全库存下限!"; + } else if (upperLimit != null && safetyLimit != null && safetyLimit > upperLimit) { + return "安全库存应该小于安全库存上限!"; + } else if (lowerLimit != null && upperLimit != null && lowerLimit > upperLimit) { + return "安全库存上限应该大于安全库存下限!"; + } + return null; + } +} + diff --git a/system/src/main/java/com/yyy/system/controller/EamBasicFinancialCategoryController.java b/system/src/main/java/com/yyy/system/controller/EamBasicFinancialCategoryController.java new file mode 100644 index 0000000..196d61e --- /dev/null +++ b/system/src/main/java/com/yyy/system/controller/EamBasicFinancialCategoryController.java @@ -0,0 +1,104 @@ +package com.yyy.system.controller; + + + +import com.yyy.common.core.controller.BaseController; +import com.yyy.common.core.domain.Result; +import com.yyy.common.core.page.TableDataInfo; +import com.yyy.common.utils.bean.BeanUtils; +import com.yyy.system.entity.pojo.EamBasicFinancialCategory; +import com.yyy.system.entity.dto.EamBasicFinancialCategoryDto; +import com.yyy.system.entity.vo.EamBasicFinancialCategoryVo; +import com.yyy.system.service.EamBasicFinancialCategoryService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; + +import javax.annotation.Resource; +import java.util.List; + +/** + * 财务分类信息表(eam_basic_financial_category)表控制层 + * @author Fangy + * @since 2024-05-11 14:38:13 + */ +@RestController +@Api(tags = "财务分类信息表相关接口") +@RequestMapping("api/eamBasicFinancialCategory") +public class EamBasicFinancialCategoryController extends BaseController { + + private static final Logger logger = LoggerFactory.getLogger(EamBasicFinancialCategoryController.class); + /** + * 服务对象 + */ + @Resource + private EamBasicFinancialCategoryService eamBasicFinancialCategoryService; + + /** + * 查询分页数据 + * + */ + @PostMapping("/list") + @ApiOperation(value = "查询分页数据") + public TableDataInfo list(@RequestBody EamBasicFinancialCategoryDto eamBasicFinancialCategoryDto) { + startPage(); + List list = eamBasicFinancialCategoryService.query(eamBasicFinancialCategoryDto); + return getDataTable(EamBasicFinancialCategoryVo.ToVo(list)); + } + + @PostMapping("/all") + @ApiOperation(value = "查询所有数据") + public Result list() { + return success(EamBasicFinancialCategoryVo.ToVo(eamBasicFinancialCategoryService.query(new EamBasicFinancialCategoryDto()))); + } + + /** + * 查询详情数据 + * + */ + @PostMapping("/query") + @ApiOperation(value = "查询详情数据") + public Result query(@RequestParam Long id) { + return success(EamBasicFinancialCategoryVo.ToVo(eamBasicFinancialCategoryService.getById(id))); + } + + /** + * 新增数据 + * + */ + @PostMapping("/add") + @ApiOperation(value = "新增数据") + public Result add(@Validated @RequestBody EamBasicFinancialCategoryDto eamBasicFinancialCategoryDto) { + EamBasicFinancialCategory eamBasicFinancialCategory = new EamBasicFinancialCategory(); + BeanUtils.copyProperties(eamBasicFinancialCategoryDto, eamBasicFinancialCategory); + eamBasicFinancialCategory.setCreateUser(getUserId()); + return eamBasicFinancialCategoryService.save(eamBasicFinancialCategory)?success():error(); + } + + /** + * 修改数据 + * + */ + @PostMapping("/update") + @ApiOperation(value = "修改数据") + public Result update(@Validated @RequestBody EamBasicFinancialCategoryDto eamBasicFinancialCategoryDto) { + EamBasicFinancialCategory eamBasicFinancialCategory = new EamBasicFinancialCategory(); + BeanUtils.copyProperties(eamBasicFinancialCategoryDto, eamBasicFinancialCategory); + eamBasicFinancialCategory.setUpdateUser(getUserId()); + return eamBasicFinancialCategoryService.updateById(eamBasicFinancialCategory) ? success() : error(); + } + + /** + * 删除数据 + * + */ + @PostMapping("/delete") + @ApiOperation(value = "删除数据") + public Result delete(@RequestBody List idList) { + return eamBasicFinancialCategoryService.removeBatchByIds(idList) ? success() : error(); + } +} + diff --git a/system/src/main/java/com/yyy/system/controller/EamBasicMaintenanceVendorController.java b/system/src/main/java/com/yyy/system/controller/EamBasicMaintenanceVendorController.java new file mode 100644 index 0000000..a628b5d --- /dev/null +++ b/system/src/main/java/com/yyy/system/controller/EamBasicMaintenanceVendorController.java @@ -0,0 +1,98 @@ +package com.yyy.system.controller; + + + +import com.yyy.common.core.controller.BaseController; +import com.yyy.common.core.domain.Result; +import com.yyy.common.core.page.TableDataInfo; +import com.yyy.common.utils.bean.BeanUtils; +import com.yyy.system.entity.pojo.EamBasicMaintenanceVendor; +import com.yyy.system.entity.dto.EamBasicMaintenanceVendorDto; +import com.yyy.system.entity.vo.EamBasicMaintenanceVendorVo; +import com.yyy.system.service.EamBasicMaintenanceVendorService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; + +import javax.annotation.Resource; +import java.util.List; + +/** + * 维保商(eam_basic_maintenance_vendor)表控制层 + * @author Fangy + * @since 2024-04-09 12:52:28 + */ +@RestController +@Api(tags = "维保商") +@RequestMapping("api/eamBasicMaintenanceVendor") +public class EamBasicMaintenanceVendorController extends BaseController { + + private static final Logger logger = LoggerFactory.getLogger(EamBasicMaintenanceVendorController.class); + /** + * 服务对象 + */ + @Resource + private EamBasicMaintenanceVendorService eamBasicMaintenanceVendorService; + + /** + * 查询分页数据 + * + */ + @PostMapping("/list") + @ApiOperation(value = "查询分页数据") + public TableDataInfo list(@RequestBody EamBasicMaintenanceVendorDto eamBasicMaintenanceVendorDto) { + startPage(); + List list = eamBasicMaintenanceVendorService.query(eamBasicMaintenanceVendorDto); + return getDataTable(EamBasicMaintenanceVendorVo.ToVo(list)); + } + + /** + * 查询详情数据 + * + */ + @PostMapping("/query") + @ApiOperation(value = "查询详情数据") + public Result query(@RequestParam Long id) { + return success(EamBasicMaintenanceVendorVo.ToVo(eamBasicMaintenanceVendorService.getById(id))); + } + + /** + * 新增数据 + * + */ + @PostMapping("/add") + @ApiOperation(value = "新增数据") + public Result add(@Validated @RequestBody EamBasicMaintenanceVendorDto eamBasicMaintenanceVendorDto) { + EamBasicMaintenanceVendor eamBasicMaintenanceVendor = new EamBasicMaintenanceVendor(); + BeanUtils.copyProperties(eamBasicMaintenanceVendorDto, eamBasicMaintenanceVendor); + eamBasicMaintenanceVendor.setCreateUser(getUserId()); + return eamBasicMaintenanceVendorService.save(eamBasicMaintenanceVendor)?success():error(); + } + + /** + * 修改数据 + * + */ + @PostMapping("/update") + @ApiOperation(value = "修改数据") + public Result update(@Validated @RequestBody EamBasicMaintenanceVendorDto eamBasicMaintenanceVendorDto) { + EamBasicMaintenanceVendor eamBasicMaintenanceVendor = new EamBasicMaintenanceVendor(); + BeanUtils.copyProperties(eamBasicMaintenanceVendorDto, eamBasicMaintenanceVendor); + eamBasicMaintenanceVendor.setUpdateUser(getUserId()); + return eamBasicMaintenanceVendorService.updateById(eamBasicMaintenanceVendor) ? success() : error(); + } + + /** + * 删除数据 + * + */ + @PostMapping("/delete") + @ApiOperation(value = "删除数据") + public Result delete(@RequestBody List idList) { + return eamBasicMaintenanceVendorService.removeBatchByIds(idList) ? success() : error(); + } +} + diff --git a/system/src/main/java/com/yyy/system/controller/EamBasicManufacturersVendorController.java b/system/src/main/java/com/yyy/system/controller/EamBasicManufacturersVendorController.java new file mode 100644 index 0000000..45f1e44 --- /dev/null +++ b/system/src/main/java/com/yyy/system/controller/EamBasicManufacturersVendorController.java @@ -0,0 +1,93 @@ +package com.yyy.system.controller; + + +import com.yyy.common.core.controller.BaseController; +import com.yyy.common.core.domain.Result; +import com.yyy.common.core.page.TableDataInfo; +import com.yyy.common.utils.bean.BeanUtils; +import com.yyy.system.entity.pojo.EamBasicManufacturersVendor; +import com.yyy.system.entity.dto.EamBasicManufacturersVendorDto; +import com.yyy.system.entity.vo.EamBasicManufacturersVendorVo; +import com.yyy.system.service.EamBasicManufacturersVendorService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; + +import javax.annotation.Resource; +import java.util.List; + +/** + * 生产商(eam_basic_manufacturers_vendor)表控制层 + * + * @author Fangy + * @since 2024-04-09 12:45:34 + */ +@RestController +@Api(tags = "生产商") +@RequestMapping("api/eamBasicManufacturersVendor") +public class EamBasicManufacturersVendorController extends BaseController { + + private static final Logger logger = LoggerFactory.getLogger(EamBasicManufacturersVendorController.class); + /** + * 服务对象 + */ + @Resource + private EamBasicManufacturersVendorService eamBasicManufacturersVendorService; + + /** + * 查询分页数据 + */ + @PostMapping("/list") + @ApiOperation(value = "查询分页数据") + public TableDataInfo list(@RequestBody EamBasicManufacturersVendorDto eamBasicManufacturersVendorDto) { + startPage(); + List list = eamBasicManufacturersVendorService.query(eamBasicManufacturersVendorDto); + return getDataTable(EamBasicManufacturersVendorVo.ToVo(list)); + } + + /** + * 查询详情数据 + */ + @PostMapping("/query") + @ApiOperation(value = "查询详情数据") + public Result query(@RequestParam Long id) { + return success(EamBasicManufacturersVendorVo.ToVo(eamBasicManufacturersVendorService.getById(id))); + } + + /** + * 新增数据 + */ + @PostMapping("/add") + @ApiOperation(value = "新增数据") + public Result add(@Validated @RequestBody EamBasicManufacturersVendorDto eamBasicManufacturersVendorDto) { + EamBasicManufacturersVendor eamBasicManufacturersVendor = new EamBasicManufacturersVendor(); + BeanUtils.copyProperties(eamBasicManufacturersVendorDto, eamBasicManufacturersVendor); + eamBasicManufacturersVendor.setCreateUser(getUserId()); + return eamBasicManufacturersVendorService.save(eamBasicManufacturersVendor) ? success() : error(); + } + + /** + * 修改数据 + */ + @PostMapping("/update") + @ApiOperation(value = "修改数据") + public Result update(@Validated @RequestBody EamBasicManufacturersVendorDto eamBasicManufacturersVendorDto) { + EamBasicManufacturersVendor eamBasicManufacturersVendor = new EamBasicManufacturersVendor(); + BeanUtils.copyProperties(eamBasicManufacturersVendorDto, eamBasicManufacturersVendor); + eamBasicManufacturersVendor.setUpdateUser(getUserId()); + return eamBasicManufacturersVendorService.updateById(eamBasicManufacturersVendor) ? success() : error(); + } + + /** + * 删除数据 + */ + @PostMapping("/delete") + @ApiOperation(value = "删除数据") + public Result delete(@RequestBody List idList) { + return eamBasicManufacturersVendorService.removeBatchByIds(idList) ? success() : error(); + } +} + diff --git a/system/src/main/java/com/yyy/system/controller/EamBasicPositionController.java b/system/src/main/java/com/yyy/system/controller/EamBasicPositionController.java new file mode 100644 index 0000000..e740897 --- /dev/null +++ b/system/src/main/java/com/yyy/system/controller/EamBasicPositionController.java @@ -0,0 +1,104 @@ +package com.yyy.system.controller; + + + +import com.yyy.common.core.controller.BaseController; +import com.yyy.common.core.domain.Result; +import com.yyy.common.core.page.TableDataInfo; +import com.yyy.common.utils.bean.BeanUtils; +import com.yyy.system.entity.pojo.EamBasicPosition; +import com.yyy.system.entity.dto.EamBasicPositionDto; +import com.yyy.system.entity.vo.EamBasicPositionVo; +import com.yyy.system.service.EamBasicPositionService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; + +import javax.annotation.Resource; +import java.util.List; + +/** + * 存放位置信息表(eam_basic_position)表控制层 + * @author Fangy + * @since 2024-04-09 12:52:28 + */ +@RestController +@Api(tags = "存放位置信息表") +@RequestMapping("api/eamBasicPosition") +public class EamBasicPositionController extends BaseController { + + private static final Logger logger = LoggerFactory.getLogger(EamBasicPositionController.class); + /** + * 服务对象 + */ + @Resource + private EamBasicPositionService eamBasicPositionService; + + /** + * 查询分页数据 + * + */ + @PostMapping("/list") + @ApiOperation(value = "查询分页数据") + public TableDataInfo list(@RequestBody EamBasicPositionDto eamBasicPositionDto) { + startPage(); + List list = eamBasicPositionService.query(eamBasicPositionDto); + return getDataTable(EamBasicPositionVo.ToVo(list)); + } + + @PostMapping("/tree") + @ApiOperation(value = "查询树形数据") + public Result> tree() { + return success(EamBasicPositionVo.ToVo(eamBasicPositionService.query(new EamBasicPositionDto()))); + } + + /** + * 查询详情数据 + * + */ + @PostMapping("/query") + @ApiOperation(value = "查询详情数据") + public Result query(@RequestParam Long id) { + return success(EamBasicPositionVo.ToVo(eamBasicPositionService.getById(id))); + } + + /** + * 新增数据 + * + */ + @PostMapping("/add") + @ApiOperation(value = "新增数据") + public Result add(@Validated @RequestBody EamBasicPositionDto eamBasicPositionDto) { + EamBasicPosition eamBasicPosition = new EamBasicPosition(); + BeanUtils.copyProperties(eamBasicPositionDto, eamBasicPosition); + eamBasicPosition.setCreateUser(getUserId()); + return eamBasicPositionService.save(eamBasicPosition)?success():error(); + } + + /** + * 修改数据 + * + */ + @PostMapping("/update") + @ApiOperation(value = "修改数据") + public Result update(@Validated @RequestBody EamBasicPositionDto eamBasicPositionDto) { + EamBasicPosition eamBasicPosition = new EamBasicPosition(); + BeanUtils.copyProperties(eamBasicPositionDto, eamBasicPosition); + eamBasicPosition.setUpdateUser(getUserId()); + return eamBasicPositionService.updateById(eamBasicPosition) ? success() : error(); + } + + /** + * 删除数据 + * + */ + @PostMapping("/delete") + @ApiOperation(value = "删除数据") + public Result delete(@RequestBody List idList) { + return eamBasicPositionService.removeBatchByIds(idList) ? success() : error(); + } +} + diff --git a/system/src/main/java/com/yyy/system/controller/EamBasicSupplierVendorController.java b/system/src/main/java/com/yyy/system/controller/EamBasicSupplierVendorController.java new file mode 100644 index 0000000..47f248c --- /dev/null +++ b/system/src/main/java/com/yyy/system/controller/EamBasicSupplierVendorController.java @@ -0,0 +1,97 @@ +package com.yyy.system.controller; + + +import com.yyy.common.core.controller.BaseController; +import com.yyy.common.core.domain.Result; +import com.yyy.common.core.page.TableDataInfo; +import com.yyy.common.utils.bean.BeanUtils; +import com.yyy.system.entity.pojo.EamBasicSupplierVendor; +import com.yyy.system.entity.dto.EamBasicSupplierVendorDto; +import com.yyy.system.entity.vo.EamBasicSupplierVendorVo; +import com.yyy.system.service.EamBasicSupplierVendorService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; + +import javax.annotation.Resource; +import java.util.List; + +/** + * 供应商(eam_basic_supplier_vendor)表控制层 + * @author Fangy + * @since 2024-04-09 10:56:09 + */ +@RestController +@Api(tags = "供应商") +@RequestMapping("api/eamBasicSupplierVendor") +public class EamBasicSupplierVendorController extends BaseController { + + private static final Logger logger = LoggerFactory.getLogger(EamBasicSupplierVendorController.class); + /** + * 服务对象 + */ + @Resource + private EamBasicSupplierVendorService eamBasicSupplierVendorService; + + /** + * 查询分页数据 + * + */ + @PostMapping("/list") + @ApiOperation(value = "查询分页数据") + public TableDataInfo list(@RequestBody EamBasicSupplierVendorDto eamBasicSupplierVendorDto) { + startPage(); + List list = eamBasicSupplierVendorService.query(eamBasicSupplierVendorDto); + return getDataTable(EamBasicSupplierVendorVo.ToVo(list)); + } + + /** + * 查询详情数据 + * + */ + @PostMapping("/query") + @ApiOperation(value = "查询详情数据") + public Result query(@RequestParam Long id) { + return success(EamBasicSupplierVendorVo.ToVo(eamBasicSupplierVendorService.getById(id))); + } + + /** + * 新增数据 + * + */ + @PostMapping("/add") + @ApiOperation(value = "新增数据") + public Result add(@Validated @RequestBody EamBasicSupplierVendorDto eamBasicSupplierVendorDto) { + EamBasicSupplierVendor eamBasicSupplierVendor = new EamBasicSupplierVendor(); + BeanUtils.copyProperties(eamBasicSupplierVendorDto, eamBasicSupplierVendor); + eamBasicSupplierVendor.setCreateUser(getUserId()); + return eamBasicSupplierVendorService.save(eamBasicSupplierVendor)?success():error(); + } + + /** + * 修改数据 + * + */ + @PostMapping("/update") + @ApiOperation(value = "修改数据") + public Result update(@Validated @RequestBody EamBasicSupplierVendorDto eamBasicSupplierVendorDto) { + EamBasicSupplierVendor eamBasicSupplierVendor = new EamBasicSupplierVendor(); + BeanUtils.copyProperties(eamBasicSupplierVendorDto, eamBasicSupplierVendor); + eamBasicSupplierVendor.setUpdateUser(getUserId()); + return eamBasicSupplierVendorService.updateById(eamBasicSupplierVendor) ? success() : error(); + } + + /** + * 删除数据 + * + */ + @PostMapping("/delete") + @ApiOperation(value = "删除数据") + public Result delete(@RequestBody List idList) { + return eamBasicSupplierVendorService.removeBatchByIds(idList) ? success() : error(); + } +} + diff --git a/system/src/main/java/com/yyy/system/controller/EamBasicWarehouseController.java b/system/src/main/java/com/yyy/system/controller/EamBasicWarehouseController.java new file mode 100644 index 0000000..113d4f2 --- /dev/null +++ b/system/src/main/java/com/yyy/system/controller/EamBasicWarehouseController.java @@ -0,0 +1,98 @@ +package com.yyy.system.controller; + + + +import com.yyy.common.core.controller.BaseController; +import com.yyy.common.core.domain.Result; +import com.yyy.common.core.page.TableDataInfo; +import com.yyy.common.utils.bean.BeanUtils; +import com.yyy.system.entity.pojo.EamBasicWarehouse; +import com.yyy.system.entity.dto.EamBasicWarehouseDto; +import com.yyy.system.entity.vo.EamBasicWarehouseVo; +import com.yyy.system.service.EamBasicWarehouseService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; + +import javax.annotation.Resource; +import java.util.List; + +/** + * 仓库信息表(eam_basic_warehouse)表控制层 + * @author Fangy + * @since 2024-04-09 13:16:56 + */ +@RestController +@Api(tags = "仓库信息表") +@RequestMapping("api/eamBasicWarehouse") +public class EamBasicWarehouseController extends BaseController { + + private static final Logger logger = LoggerFactory.getLogger(EamBasicWarehouseController.class); + /** + * 服务对象 + */ + @Resource + private EamBasicWarehouseService eamBasicWarehouseService; + + /** + * 查询分页数据 + * + */ + @PostMapping("/list") + @ApiOperation(value = "查询分页数据") + public TableDataInfo list(@RequestBody EamBasicWarehouseDto eamBasicWarehouseDto) { + startPage(); + List list = eamBasicWarehouseService.query(eamBasicWarehouseDto); + return getDataTable(EamBasicWarehouseVo.ToVo(list)); + } + + /** + * 查询详情数据 + * + */ + @PostMapping("/query") + @ApiOperation(value = "查询详情数据") + public Result query(@RequestParam Long id) { + return success(EamBasicWarehouseVo.ToVo(eamBasicWarehouseService.getById(id))); + } + + /** + * 新增数据 + * + */ + @PostMapping("/add") + @ApiOperation(value = "新增数据") + public Result add(@Validated @RequestBody EamBasicWarehouseDto eamBasicWarehouseDto) { + EamBasicWarehouse eamBasicWarehouse = new EamBasicWarehouse(); + BeanUtils.copyProperties(eamBasicWarehouseDto, eamBasicWarehouse); + eamBasicWarehouse.setCreateUser(getUserId()); + return eamBasicWarehouseService.save(eamBasicWarehouse)?success():error(); + } + + /** + * 修改数据 + * + */ + @PostMapping("/update") + @ApiOperation(value = "修改数据") + public Result update(@Validated @RequestBody EamBasicWarehouseDto eamBasicWarehouseDto) { + EamBasicWarehouse eamBasicWarehouse = new EamBasicWarehouse(); + BeanUtils.copyProperties(eamBasicWarehouseDto, eamBasicWarehouse); + eamBasicWarehouse.setUpdateUser(getUserId()); + return eamBasicWarehouseService.updateById(eamBasicWarehouse) ? success() : error(); + } + + /** + * 删除数据 + * + */ + @PostMapping("/delete") + @ApiOperation(value = "删除数据") + public Result delete(@RequestBody List idList) { + return eamBasicWarehouseService.removeBatchByIds(idList) ? success() : error(); + } +} + diff --git a/system/src/main/java/com/yyy/system/controller/EamBusinessAllocateController.java b/system/src/main/java/com/yyy/system/controller/EamBusinessAllocateController.java new file mode 100644 index 0000000..075fe91 --- /dev/null +++ b/system/src/main/java/com/yyy/system/controller/EamBusinessAllocateController.java @@ -0,0 +1,153 @@ +package com.yyy.system.controller; + + +import com.alibaba.fastjson.JSON; +import com.yyy.common.core.controller.BaseController; +import com.yyy.common.core.domain.Result; +import com.yyy.common.core.page.TableDataInfo; +import com.yyy.common.enums.AssetStatusEnum; +import com.yyy.common.enums.BusinessStatusEnum; +import com.yyy.common.enums.DetectTypeEnum; +import com.yyy.common.enums.EncodingEum; +import com.yyy.common.utils.bean.BeanUtils; +import com.yyy.system.entity.dto.EamWarehouseAssetDto; +import com.yyy.system.entity.pojo.EamAsset; +import com.yyy.system.entity.pojo.EamBusinessAllocate; +import com.yyy.system.entity.dto.EamBusinessAllocateDto; +import com.yyy.system.entity.vo.EamBusinessAllocateVo; +import com.yyy.system.service.EamAssetLogService; +import com.yyy.system.service.EamAssetService; +import com.yyy.system.service.EamBusinessAllocateService; +import com.yyy.system.service.EamWarehouseAssetService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; + +import javax.annotation.Resource; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 调拨信息表(eam_business_allocate)表控制层 + * + * @author Fangy + * @since 2024-04-11 16:16:11 + */ +@RestController +@Api(tags = "调拨信息表相关接口") +@RequestMapping("api/eamBusinessAllocate") +public class EamBusinessAllocateController extends BaseController { + + private static final Logger logger = LoggerFactory.getLogger(EamBusinessAllocateController.class); + /** + * 服务对象 + */ + @Resource + private EamBusinessAllocateService eamBusinessAllocateService; + + @Resource + private EamAssetService assetService; + + @Resource + private EamAssetLogService eamAssetLogService; + + @Resource + private EamWarehouseAssetService eamWarehouseAssetService; + + /** + * 查询分页数据 + */ + @PostMapping("/list") + @ApiOperation(value = "查询分页数据") + public TableDataInfo list(@RequestBody EamBusinessAllocateDto eamBusinessAllocateDto) { + startPage(); + List list = eamBusinessAllocateService.query(eamBusinessAllocateDto); + return getDataTable(EamBusinessAllocateVo.ToVo(list)); + } + + /** + * 查询详情数据 + */ + @PostMapping("/query") + @ApiOperation(value = "查询详情数据") + public Result query(@RequestParam Long id) { + return success(EamBusinessAllocateVo.ToVo(eamBusinessAllocateService.getById(id))); + } + + /** + * 新增数据 + */ + @PostMapping("/add") + @ApiOperation(value = "新增数据") + public Result add(@Validated @RequestBody EamBusinessAllocateDto eamBusinessAllocateDto) { + EamBusinessAllocate eamBusinessAllocate = new EamBusinessAllocate(); + BeanUtils.copyProperties(eamBusinessAllocateDto, eamBusinessAllocate); + eamBusinessAllocate.setApplicant(getUserId()); + eamBusinessAllocate.setCreateUser(getUserId()); + eamBusinessAllocate.setBusinessId(EncodingEum.ALLOCATE.getBusinessId()); + eamBusinessAllocate.setStatus(BusinessStatusEnum.DRAFT.getCode()); + + eamBusinessAllocate.setAssetIdList(JSON.toJSONString(eamBusinessAllocateDto.getAssetIdList())); + return eamBusinessAllocateService.save(eamBusinessAllocate) ? success() : error(); + } + + /** + * 修改数据 + */ + @PostMapping("/update") + @ApiOperation(value = "修改数据") + public Result update(@Validated @RequestBody EamBusinessAllocateDto eamBusinessAllocateDto) { + if (eamBusinessAllocateService.isCompleted(eamBusinessAllocateDto.getId())){ + return error("业务状态错误,业务已完成,内容不允许修改!"); + } + EamBusinessAllocate eamBusinessAllocate = new EamBusinessAllocate(); + BeanUtils.copyProperties(eamBusinessAllocateDto, eamBusinessAllocate); + eamBusinessAllocate.setUpdateUser(getUserId()); + + eamBusinessAllocate.setAssetIdList(JSON.toJSONString(eamBusinessAllocateDto.getAssetIdList())); + return eamBusinessAllocateService.updateById(eamBusinessAllocate) ? success() : error(); + } + + /** + * 删除数据 + */ + @PostMapping("/delete") + @ApiOperation(value = "删除数据") + public Result delete(@RequestBody List idList) { + return eamBusinessAllocateService.removeBatchByIds(idList) ? success() : error(); + } + + @PostMapping("/confirm") + @ApiOperation(value = "确认") + public Result confirm(@RequestBody List idList) { + List list = eamBusinessAllocateService.listByIds(idList); + for (EamBusinessAllocate x : list) { + if (x.getStatus().equals(BusinessStatusEnum.COMPLETED.getCode())) { + return error("业务状态错误,业务已完成,确认失败! 业务名称: " + x.getName() + " 业务编号: " + x.getBusinessId()); + } + List assetIdList = JSON.parseArray(x.getAssetIdList(), EamWarehouseAssetDto.class); + if (assetIdList != null && !assetIdList.isEmpty()) { + if(!eamWarehouseAssetService.reduce(assetIdList)){ + return error("库存不足!"); + } + assetIdList.forEach(eamWarehouseAssetDto -> {eamWarehouseAssetDto.setWarehouseId(x.getInWarehouseId());}); + eamWarehouseAssetService.add(assetIdList); + List assetList = assetService.listByIds(assetIdList.stream().map(EamWarehouseAssetDto::getAssetId).distinct().collect(Collectors.toList())); + assetList.forEach(e -> { + e.setWarehouseId(x.getOutWarehouseId()); + e.setStatus(AssetStatusEnum.ALLOCATE.getCode()); + eamAssetLogService.add(x.getBusinessId(), DetectTypeEnum.ALLOCATE, DetectTypeEnum.ALLOCATE.getInfo(), e.getAssetId(), getUserId()); + }); + assetService.updateBatchById(assetList); + x.setStatus(BusinessStatusEnum.COMPLETED.getCode());; + } + } + + eamBusinessAllocateService.updateBatchById(list); + return success(); + } +} + diff --git a/system/src/main/java/com/yyy/system/controller/EamBusinessBorrowController.java b/system/src/main/java/com/yyy/system/controller/EamBusinessBorrowController.java new file mode 100644 index 0000000..dbb1c08 --- /dev/null +++ b/system/src/main/java/com/yyy/system/controller/EamBusinessBorrowController.java @@ -0,0 +1,156 @@ +package com.yyy.system.controller; + + + +import com.alibaba.fastjson.JSON; +import com.yyy.common.core.controller.BaseController; +import com.yyy.common.core.domain.Result; +import com.yyy.common.core.page.TableDataInfo; +import com.yyy.common.enums.AssetStatusEnum; +import com.yyy.common.enums.BusinessStatusEnum; +import com.yyy.common.enums.DetectTypeEnum; +import com.yyy.common.enums.EncodingEum; +import com.yyy.common.utils.bean.BeanUtils; +import com.yyy.system.entity.dto.EamWarehouseAssetDto; +import com.yyy.system.entity.pojo.EamAsset; +import com.yyy.system.entity.pojo.EamBusinessBorrow; +import com.yyy.system.entity.dto.EamBusinessBorrowDto; +import com.yyy.system.entity.vo.EamBusinessBorrowVo; +import com.yyy.system.service.EamAssetLogService; +import com.yyy.system.service.EamAssetService; +import com.yyy.system.service.EamBusinessBorrowService; +import com.yyy.system.service.EamWarehouseAssetService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; + +import javax.annotation.Resource; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 借用信息表(eam_business_borrow)表控制层 + * @author Fangy + * @since 2024-04-10 17:26:36 + */ +@RestController +@Api(tags = "借用信息表相关接口") +@RequestMapping("api/eamBusinessBorrow") +public class EamBusinessBorrowController extends BaseController { + + private static final Logger logger = LoggerFactory.getLogger(EamBusinessBorrowController.class); + /** + * 服务对象 + */ + @Resource + private EamBusinessBorrowService eamBusinessBorrowService; + + @Resource + private EamAssetService assetService; + + @Resource + private EamAssetLogService eamAssetLogService; + + @Resource + private EamWarehouseAssetService eamWarehouseAssetService; + + /** + * 查询分页数据 + * + */ + @PostMapping("/list") + @ApiOperation(value = "查询分页数据") + public TableDataInfo list(@RequestBody EamBusinessBorrowDto eamBusinessBorrowDto) { + startPage(); + List list = eamBusinessBorrowService.query(eamBusinessBorrowDto); + return getDataTable(EamBusinessBorrowVo.ToVo(list)); + } + + /** + * 查询详情数据 + * + */ + @PostMapping("/query") + @ApiOperation(value = "查询详情数据") + public Result query(@RequestParam Long id) { + return success(EamBusinessBorrowVo.ToVo(eamBusinessBorrowService.getById(id))); + } + + /** + * 新增数据 + * + */ + @PostMapping("/add") + @ApiOperation(value = "新增数据") + public Result add(@Validated @RequestBody EamBusinessBorrowDto eamBusinessBorrowDto) { + EamBusinessBorrow eamBusinessBorrow = new EamBusinessBorrow(); + BeanUtils.copyProperties(eamBusinessBorrowDto, eamBusinessBorrow); + eamBusinessBorrow.setApplicant(getUserId()); + eamBusinessBorrow.setCreateUser(getUserId()); + eamBusinessBorrow.setBusinessId(EncodingEum.BORROW.getBusinessId()); + eamBusinessBorrow.setStatus(BusinessStatusEnum.DRAFT.getCode()); + + eamBusinessBorrow.setAssetIdList(JSON.toJSONString(eamBusinessBorrowDto.getAssetIdList())); + return eamBusinessBorrowService.save(eamBusinessBorrow)?success():error(); + } + + /** + * 修改数据 + * + */ + @PostMapping("/update") + @ApiOperation(value = "修改数据") + public Result update(@Validated @RequestBody EamBusinessBorrowDto eamBusinessBorrowDto) { + if (eamBusinessBorrowService.isCompleted(eamBusinessBorrowDto.getId())){ + return error("业务状态错误,业务已完成,内容不允许修改!"); + } + EamBusinessBorrow eamBusinessBorrow = new EamBusinessBorrow(); + BeanUtils.copyProperties(eamBusinessBorrowDto, eamBusinessBorrow); + eamBusinessBorrow.setUpdateUser(getUserId()); + + eamBusinessBorrow.setAssetIdList(JSON.toJSONString(eamBusinessBorrowDto.getAssetIdList())); + return eamBusinessBorrowService.updateById(eamBusinessBorrow) ? success() : error(); + } + + /** + * 删除数据 + * + */ + @PostMapping("/delete") + @ApiOperation(value = "删除数据") + public Result delete(@RequestBody List idList) { + return eamBusinessBorrowService.removeBatchByIds(idList) ? success() : error(); + } + + @PostMapping("/confirm") + @ApiOperation(value = "确认") + public Result confirm(@RequestBody List idList) { + List list = eamBusinessBorrowService.listByIds(idList); + for (EamBusinessBorrow x: list) { + if (x.getStatus().equals(BusinessStatusEnum.COMPLETED.getCode())) { + return error("业务状态错误,业务已完成,确认失败! 业务名称: " + x.getName() + " 业务编号: " + x.getBusinessId()); + } + List assetIdList = JSON.parseArray(x.getAssetIdList(), EamWarehouseAssetDto.class); + if (assetIdList != null && !assetIdList.isEmpty()) { + if(!eamWarehouseAssetService.reduce(assetIdList)){ + return error("库存不足!"); + } + List assetList = assetService.listByIds(assetIdList.stream().map(EamWarehouseAssetDto::getAssetId).distinct().collect(Collectors.toList())); + assetList.forEach(e -> { + e.setUseUserId(x.getUseUserId()); + e.setStatus(AssetStatusEnum.BORROW.getCode()); + eamAssetLogService.add(x.getBusinessId(), DetectTypeEnum.BORROW, DetectTypeEnum.BORROW.getInfo(), e.getAssetId(), getUserId()); + }); + assetService.updateBatchById(assetList); + x.setStatus(BusinessStatusEnum.COMPLETED.getCode()); + } + } + + eamBusinessBorrowService.updateBatchById(list); + return success(); + } +} + diff --git a/system/src/main/java/com/yyy/system/controller/EamBusinessCollectionController.java b/system/src/main/java/com/yyy/system/controller/EamBusinessCollectionController.java new file mode 100644 index 0000000..a7ae1b0 --- /dev/null +++ b/system/src/main/java/com/yyy/system/controller/EamBusinessCollectionController.java @@ -0,0 +1,160 @@ +package com.yyy.system.controller; + + + +import com.alibaba.fastjson.JSON; +import com.yyy.common.core.controller.BaseController; +import com.yyy.common.core.domain.Result; +import com.yyy.common.core.page.TableDataInfo; +import com.yyy.common.enums.AssetStatusEnum; +import com.yyy.common.enums.BusinessStatusEnum; +import com.yyy.common.enums.DetectTypeEnum; +import com.yyy.common.enums.EncodingEum; +import com.yyy.common.utils.bean.BeanUtils; +import com.yyy.system.entity.dto.EamWarehouseAssetDto; +import com.yyy.system.entity.pojo.EamAsset; +import com.yyy.system.entity.pojo.EamBusinessCollection; +import com.yyy.system.entity.dto.EamBusinessCollectionDto; +import com.yyy.system.entity.vo.EamBusinessCollectionVo; +import com.yyy.system.service.EamAssetLogService; +import com.yyy.system.service.EamAssetService; +import com.yyy.system.service.EamBusinessCollectionService; +import com.yyy.system.service.EamWarehouseAssetService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; + +import javax.annotation.Resource; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 资产领用信息表(eam_business_collection)表控制层 + * @author Fangy + * @since 2024-04-12 11:48:05 + */ +@RestController +@Api(tags = "资产领用信息表相关接口") +@RequestMapping("api/eamBusinessCollection") +public class EamBusinessCollectionController extends BaseController { + + private static final Logger logger = LoggerFactory.getLogger(EamBusinessCollectionController.class); + /** + * 服务对象 + */ + @Resource + private EamBusinessCollectionService eamBusinessCollectionService; + + @Resource + private EamAssetService assetService; + + @Resource + private EamAssetLogService eamAssetLogService; + + @Resource + private EamWarehouseAssetService eamWarehouseAssetService; + + /** + * 查询分页数据 + * + */ + @PostMapping("/list") + @ApiOperation(value = "查询分页数据") + public TableDataInfo list(@RequestBody EamBusinessCollectionDto eamBusinessCollectionDto) { + startPage(); + List list = eamBusinessCollectionService.query(eamBusinessCollectionDto); + return getDataTable(EamBusinessCollectionVo.ToVo(list)); + } + + /** + * 查询详情数据 + * + */ + @PostMapping("/query") + @ApiOperation(value = "查询详情数据") + public Result query(@RequestParam Long id) { + return success(EamBusinessCollectionVo.ToVo(eamBusinessCollectionService.getById(id))); + } + + /** + * 新增数据 + * + */ + @PostMapping("/add") + @ApiOperation(value = "新增数据") + public Result add(@Validated @RequestBody EamBusinessCollectionDto eamBusinessCollectionDto) { + EamBusinessCollection eamBusinessCollection = new EamBusinessCollection(); + BeanUtils.copyProperties(eamBusinessCollectionDto, eamBusinessCollection); + eamBusinessCollection.setApplicant(getUserId()); + eamBusinessCollection.setCreateUser(getUserId()); + eamBusinessCollection.setBusinessId(EncodingEum.COLLECTION.getBusinessId()); + eamBusinessCollection.setStatus(BusinessStatusEnum.DRAFT.getCode()); + + eamBusinessCollection.setAssetIdList(JSON.toJSONString(eamBusinessCollectionDto.getAssetIdList())); + return eamBusinessCollectionService.save(eamBusinessCollection)?success():error(); + } + + /** + * 修改数据 + * + */ + @PostMapping("/update") + @ApiOperation(value = "修改数据") + public Result update(@Validated @RequestBody EamBusinessCollectionDto eamBusinessCollectionDto) { + if (eamBusinessCollectionService.isCompleted(eamBusinessCollectionDto.getId())){ + return error("业务状态错误,业务已完成,内容不允许修改!"); + } + EamBusinessCollection eamBusinessCollection = new EamBusinessCollection(); + BeanUtils.copyProperties(eamBusinessCollectionDto, eamBusinessCollection); + eamBusinessCollection.setUpdateUser(getUserId()); + + eamBusinessCollection.setAssetIdList(JSON.toJSONString(eamBusinessCollectionDto.getAssetIdList())); + return eamBusinessCollectionService.updateById(eamBusinessCollection) ? success() : error(); + } + + /** + * 删除数据 + * + */ + @PostMapping("/delete") + @ApiOperation(value = "删除数据") + public Result delete(@RequestBody List idList) { + return eamBusinessCollectionService.removeBatchByIds(idList) ? success() : error(); + } + + + @PostMapping("/confirm") + @ApiOperation(value = "确认") + public Result confirm(@RequestBody List idList) { + List list = eamBusinessCollectionService.listByIds(idList); + for (EamBusinessCollection x:list) { + List assetIdList = JSON.parseArray(x.getAssetIdList(), EamWarehouseAssetDto.class); + if (x.getStatus().equals(BusinessStatusEnum.COMPLETED.getCode())) { + return error("业务状态错误,业务已完成,确认失败! 业务名称: " + x.getName() + " 业务编号: " + x.getBusinessId()); + } + if (assetIdList != null && !assetIdList.isEmpty()) { + if(!eamWarehouseAssetService.reduce(assetIdList)){ + return error("库存不足!"); + } + List assetList = assetService.listByIds(assetIdList.stream().map(EamWarehouseAssetDto::getAssetId).distinct().collect(Collectors.toList())); + assetList.forEach(e -> { + e.setUseOrganizationId(x.getUseOrganizationId()); + e.setPositionId(x.getPositionId()); + e.setUseUserId(x.getUseUserId()); + e.setPositionDetail(x.getPositionDetail()); + e.setStatus(AssetStatusEnum.IN_USE.getCode()); + eamAssetLogService.add(x.getBusinessId(), DetectTypeEnum.COLLECTION, DetectTypeEnum.COLLECTION.getInfo(), e.getAssetId(), getUserId()); + }); + assetService.updateBatchById(assetList); + x.setStatus(BusinessStatusEnum.COMPLETED.getCode()); + } + } + + eamBusinessCollectionService.updateBatchById(list); + return success(); + } +} + diff --git a/system/src/main/java/com/yyy/system/controller/EamBusinessOutboundController.java b/system/src/main/java/com/yyy/system/controller/EamBusinessOutboundController.java new file mode 100644 index 0000000..7072c09 --- /dev/null +++ b/system/src/main/java/com/yyy/system/controller/EamBusinessOutboundController.java @@ -0,0 +1,154 @@ +package com.yyy.system.controller; + +import com.alibaba.fastjson.JSON; +import com.yyy.common.core.controller.BaseController; +import com.yyy.common.core.domain.Result; +import com.yyy.common.core.page.TableDataInfo; +import com.yyy.common.enums.BusinessStatusEnum; +import com.yyy.common.enums.DetectTypeEnum; +import com.yyy.common.enums.EncodingEum; +import com.yyy.common.utils.bean.BeanUtils; +import com.yyy.system.entity.dto.EamWarehouseAssetDto; +import com.yyy.system.entity.pojo.EamAsset; +import com.yyy.system.entity.pojo.EamBusinessOutbound; +import com.yyy.system.entity.dto.EamBusinessOutboundDto; +import com.yyy.system.entity.vo.EamBusinessOutboundVo; +import com.yyy.system.service.EamAssetLogService; +import com.yyy.system.service.EamAssetService; +import com.yyy.system.service.EamBusinessOutboundService; +import com.yyy.system.service.EamWarehouseAssetService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; + +import javax.annotation.Resource; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 出库信息表(eam_business_outbound)表控制层 + * + * @author Fangy + * @since 2024-04-10 17:26:36 + */ +@RestController +@Api(tags = "出库信息表相关接口") +@RequestMapping("api/eamBusinessOutbound") +public class EamBusinessOutboundController extends BaseController { + + private static final Logger logger = LoggerFactory.getLogger(EamBusinessOutboundController.class); + /** + * 服务对象 + */ + @Resource + private EamBusinessOutboundService eamBusinessOutboundService; + + @Resource + private EamAssetService assetService; + + @Resource + private EamAssetLogService eamAssetLogService; + + @Resource + private EamWarehouseAssetService eamWarehouseAssetService; + + /** + * 查询分页数据 + */ + @PostMapping("/list") + @ApiOperation(value = "查询分页数据") + public TableDataInfo list(@RequestBody EamBusinessOutboundDto eamBusinessOutboundDto) { + startPage(); + List list = eamBusinessOutboundService.query(eamBusinessOutboundDto); + return getDataTable(EamBusinessOutboundVo.ToVo(list)); + } + + /** + * 查询详情数据 + */ + @PostMapping("/query") + @ApiOperation(value = "查询详情数据") + public Result query(@RequestParam Long id) { + return success(EamBusinessOutboundVo.ToVo(eamBusinessOutboundService.getById(id))); + } + + /** + * 新增数据 + */ + @PostMapping("/add") + @ApiOperation(value = "新增数据") + public Result add(@Validated @RequestBody EamBusinessOutboundDto eamBusinessOutboundDto) { + EamBusinessOutbound eamBusinessOutbound = new EamBusinessOutbound(); + BeanUtils.copyProperties(eamBusinessOutboundDto, eamBusinessOutbound); + eamBusinessOutbound.setCreateUser(getUserId()); + eamBusinessOutbound.setBusinessId(EncodingEum.OUTBOUND.getBusinessId()); + eamBusinessOutbound.setStatus(BusinessStatusEnum.DRAFT.getCode()); + + eamBusinessOutboundDto.getAssetIdList().forEach(e -> e.setWarehouseId(eamBusinessOutboundDto.getWarehouseId())); + eamBusinessOutbound.setAssetIdList(JSON.toJSONString(eamBusinessOutboundDto.getAssetIdList())); + return eamBusinessOutboundService.save(eamBusinessOutbound) ? success() : error(); + } + + /** + * 修改数据 + */ + @PostMapping("/update") + @ApiOperation(value = "修改数据") + public Result update(@Validated @RequestBody EamBusinessOutboundDto eamBusinessOutboundDto) { + if (eamBusinessOutboundService.isCompleted(eamBusinessOutboundDto.getId())){ + return error("业务状态错误,业务已完成,内容不允许修改!"); + } + EamBusinessOutbound eamBusinessOutbound = new EamBusinessOutbound(); + BeanUtils.copyProperties(eamBusinessOutboundDto, eamBusinessOutbound); + eamBusinessOutbound.setUpdateUser(getUserId()); + + eamBusinessOutboundDto.getAssetIdList().forEach(e -> e.setWarehouseId(eamBusinessOutboundDto.getWarehouseId())); + eamBusinessOutbound.setAssetIdList(JSON.toJSONString(eamBusinessOutboundDto.getAssetIdList())); + return eamBusinessOutboundService.updateById(eamBusinessOutbound) ? success() : error(); + } + + /** + * 删除数据 + */ + @PostMapping("/delete") + @ApiOperation(value = "删除数据") + public Result delete(@RequestBody List idList) { + return eamBusinessOutboundService.removeBatchByIds(idList) ? success() : error(); + } + + @PostMapping("/confirm") + @ApiOperation(value = "确认") + public Result confirm(@RequestBody List idList) { + List eamBusinessOutbounds = eamBusinessOutboundService.listByIds(idList); + + for (EamBusinessOutbound eamBusinessOutbound : eamBusinessOutbounds) { + if (eamBusinessOutbound.getStatus().equals(BusinessStatusEnum.COMPLETED.getCode())) { + return error("业务状态错误,业务已完成,确认失败! 业务名称: " + eamBusinessOutbound.getName() + " 业务编号: " + eamBusinessOutbound.getBusinessId()); + } + List assetIdList = JSON.parseArray(eamBusinessOutbound.getAssetIdList(), EamWarehouseAssetDto.class); + if (assetIdList != null && !assetIdList.isEmpty()) { + if(!eamWarehouseAssetService.reduce(assetIdList)){ + return error("库存不足!"); + } + List assetList = assetService.listByIds(assetIdList.stream().map(EamWarehouseAssetDto::getAssetId).distinct().collect(Collectors.toList())); + assetList.forEach(e -> { + e.setWarehouseId(eamBusinessOutbound.getWarehouseId()); + e.setOwnCompanyId(eamBusinessOutbound.getOwnCompanyId()); + e.setUseOrganizationId(eamBusinessOutbound.getUseOrganizationId()); + e.setUseUserId(eamBusinessOutbound.getUseUserId()); + e.setPositionDetail(eamBusinessOutbound.getPositionDetail()); + eamAssetLogService.add(eamBusinessOutbound.getBusinessId(), DetectTypeEnum.OUTBOUND, DetectTypeEnum.OUTBOUND.getInfo(), e.getAssetId(), getUserId()); + }); + assetService.updateBatchById(assetList); + eamBusinessOutbound.setStatus(BusinessStatusEnum.COMPLETED.getCode()); + } + } + + eamBusinessOutboundService.updateBatchById(eamBusinessOutbounds); + return success(); + } +} + diff --git a/system/src/main/java/com/yyy/system/controller/EamBusinessRetirementController.java b/system/src/main/java/com/yyy/system/controller/EamBusinessRetirementController.java new file mode 100644 index 0000000..3d93094 --- /dev/null +++ b/system/src/main/java/com/yyy/system/controller/EamBusinessRetirementController.java @@ -0,0 +1,174 @@ +package com.yyy.system.controller; + + +import com.alibaba.fastjson.JSON; +import com.yyy.common.core.controller.BaseController; +import com.yyy.common.core.domain.Result; +import com.yyy.common.core.page.TableDataInfo; +import com.yyy.common.enums.AssetStatusEnum; +import com.yyy.common.enums.BusinessStatusEnum; +import com.yyy.common.enums.DetectTypeEnum; +import com.yyy.common.enums.EncodingEum; +import com.yyy.common.utils.bean.BeanUtils; +import com.yyy.system.entity.dto.EamWarehouseAssetDto; +import com.yyy.system.entity.pojo.EamAsset; +import com.yyy.system.entity.pojo.EamBusinessRetirement; +import com.yyy.system.entity.dto.EamBusinessRetirementDto; +import com.yyy.system.entity.vo.EamBusinessRetirementVo; +import com.yyy.system.service.EamAssetLogService; +import com.yyy.system.service.EamAssetService; +import com.yyy.system.service.EamBusinessRetirementService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; + +import javax.annotation.Resource; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 资产报废(eam_business_retirement)表控制层 + * + * @author Fangy + * @since 2024-05-10 10:37:08 + */ +@RestController +@Api(tags = "资产报废相关接口") +@RequestMapping("api/eamBusinessRetirement") +public class EamBusinessRetirementController extends BaseController { + + private static final Logger logger = LoggerFactory.getLogger(EamBusinessRetirementController.class); + /** + * 服务对象 + */ + @Resource + private EamBusinessRetirementService eamBusinessRetirementService; + + @Resource + private EamAssetService assetService; + + @Resource + private EamAssetLogService eamAssetLogService; + + + /** + * 查询分页数据 + */ + @PostMapping("/list") + @ApiOperation(value = "查询分页数据") + public TableDataInfo list(@RequestBody EamBusinessRetirementDto eamBusinessRetirementDto) { + startPage(); + List list = eamBusinessRetirementService.query(eamBusinessRetirementDto); + return getDataTable(EamBusinessRetirementVo.ToVo(list)); + } + + /** + * 查询详情数据 + */ + @PostMapping("/query") + @ApiOperation(value = "查询详情数据") + public Result query(@RequestParam Long id) { + return success(EamBusinessRetirementVo.ToVo(eamBusinessRetirementService.getById(id))); + } + + /** + * 新增数据 + */ + @PostMapping("/add") + @ApiOperation(value = "新增数据") + public Result add(@Validated @RequestBody EamBusinessRetirementDto eamBusinessRetirementDto) { + EamBusinessRetirement eamBusinessRetirement = new EamBusinessRetirement(); + BeanUtils.copyProperties(eamBusinessRetirementDto, eamBusinessRetirement); + eamBusinessRetirement.setCreateUser(getUserId()); + + eamBusinessRetirement.setApplicant(getUserId()); + eamBusinessRetirement.setBusinessId(EncodingEum.RETIREMENT.getBusinessId()); + eamBusinessRetirement.setStatus(BusinessStatusEnum.DRAFT.getCode()); + + eamBusinessRetirement.setAssetIdList(JSON.toJSONString(eamBusinessRetirementDto.getAssetIdList())); + return eamBusinessRetirementService.save(eamBusinessRetirement) ? success() : error(); + } + + /** + * 修改数据 + */ + @PostMapping("/update") + @ApiOperation(value = "修改数据") + public Result update(@Validated @RequestBody EamBusinessRetirementDto eamBusinessRetirementDto) { + if (eamBusinessRetirementService.isCompleted(eamBusinessRetirementDto.getId())){ + return error("业务状态错误,业务已完成,内容不允许修改!"); + } + EamBusinessRetirement eamBusinessRetirement = new EamBusinessRetirement(); + BeanUtils.copyProperties(eamBusinessRetirementDto, eamBusinessRetirement); + eamBusinessRetirement.setUpdateUser(getUserId()); + + eamBusinessRetirement.setAssetIdList(JSON.toJSONString(eamBusinessRetirementDto.getAssetIdList())); + return eamBusinessRetirementService.updateById(eamBusinessRetirement) ? success() : error(); + } + + /** + * 删除数据 + */ + @PostMapping("/delete") + @ApiOperation(value = "删除数据") + public Result delete(@RequestBody List idList) { + return eamBusinessRetirementService.removeBatchByIds(idList) ? success() : error(); + } + + @PostMapping("/confirm") + @ApiOperation(value = "废弃") + public Result confirm(@RequestBody List idList) { + List list = eamBusinessRetirementService.listByIds(idList); + for (EamBusinessRetirement x : list) { + if (x.getIsRetirement().equals(1)) { + return error("资产已报废,确认失败! 业务名称: " + x.getName() + " 业务编号: " + x.getBusinessId()); + } + List assetIdList = JSON.parseArray(x.getAssetIdList(), EamWarehouseAssetDto.class); + if (assetIdList != null && !assetIdList.isEmpty()) { + List assetList = assetService.listByIds(assetIdList.stream().map(EamWarehouseAssetDto::getAssetId).distinct().collect(Collectors.toList())); + assetList.forEach(e -> { + e.setStatus(AssetStatusEnum.SCRAPPED.getCode()); + eamAssetLogService.add(x.getBusinessId(), DetectTypeEnum.RETIREMENT, DetectTypeEnum.RETIREMENT.getInfo(), e.getAssetId(), getUserId()); + }); + assetService.updateBatchById(assetList); + //TODO 已完成的条件 + x.setStatus(BusinessStatusEnum.COMPLETED.getCode()); + x.setIsRetirement(1); + } + } + + eamBusinessRetirementService.updateBatchById(list); + return success(); + } + + @PostMapping("/clean") + @ApiOperation(value = "清理") + public Result clean(@RequestBody List idList) { + List list = eamBusinessRetirementService.listByIds(idList); + for (EamBusinessRetirement x : list) { + if(x.getIsRetirement().equals(0)){ + return error("资产清理失败,请先进行报废操作! 业务名称: " + x.getName() + " 业务编号: " + x.getBusinessId()); + } + if (x.getIsClean().equals(1)) { + return error("资产已清理,确认失败! 业务名称: " + x.getName() + " 业务编号: " + x.getBusinessId()); + } + List assetIdList = JSON.parseArray(x.getAssetIdList(), EamWarehouseAssetDto.class); + if (assetIdList != null && !assetIdList.isEmpty()) { + List assetList = assetService.listByIds(assetIdList.stream().map(EamWarehouseAssetDto::getAssetId).distinct().collect(Collectors.toList())); + assetList.forEach(e -> { + e.setIsDeleted(1); + eamAssetLogService.add(x.getBusinessId(), DetectTypeEnum.CLEAN, DetectTypeEnum.CLEAN.getInfo(), e.getAssetId(), getUserId()); + }); + assetService.updateBatchById(assetList); + x.setIsClean(1); + } + } + + eamBusinessRetirementService.updateBatchById(list); + return success(); + } +} + diff --git a/system/src/main/java/com/yyy/system/controller/EamBusinessReturnController.java b/system/src/main/java/com/yyy/system/controller/EamBusinessReturnController.java new file mode 100644 index 0000000..f459ab7 --- /dev/null +++ b/system/src/main/java/com/yyy/system/controller/EamBusinessReturnController.java @@ -0,0 +1,158 @@ +package com.yyy.system.controller; + + + +import com.alibaba.fastjson.JSON; +import com.yyy.common.core.controller.BaseController; +import com.yyy.common.core.domain.Result; +import com.yyy.common.core.page.TableDataInfo; +import com.yyy.common.enums.AssetStatusEnum; +import com.yyy.common.enums.BusinessStatusEnum; +import com.yyy.common.enums.DetectTypeEnum; +import com.yyy.common.enums.EncodingEum; +import com.yyy.common.utils.bean.BeanUtils; +import com.yyy.system.entity.dto.EamWarehouseAssetDto; +import com.yyy.system.entity.pojo.EamAsset; +import com.yyy.system.entity.pojo.EamBusinessReturn; +import com.yyy.system.entity.dto.EamBusinessReturnDto; +import com.yyy.system.entity.vo.EamBusinessReturnVo; +import com.yyy.system.service.EamAssetLogService; +import com.yyy.system.service.EamAssetService; +import com.yyy.system.service.EamBusinessReturnService; +import com.yyy.system.service.EamWarehouseAssetService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; + +import javax.annotation.Resource; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 归还信息表(eam_business_return)表控制层 + * @author Fangy + * @since 2024-04-10 17:26:46 + */ +@RestController +@Api(tags = "归还信息表相关接口") +@RequestMapping("api/eamBusinessReturn") +public class EamBusinessReturnController extends BaseController { + + private static final Logger logger = LoggerFactory.getLogger(EamBusinessReturnController.class); + /** + * 服务对象 + */ + @Resource + private EamBusinessReturnService eamBusinessReturnService; + + @Resource + private EamAssetService assetService; + + @Resource + private EamAssetLogService eamAssetLogService; + + @Resource + private EamWarehouseAssetService eamWarehouseAssetService; + + /** + * 查询分页数据 + * + */ + @PostMapping("/list") + @ApiOperation(value = "查询分页数据") + public TableDataInfo list(@RequestBody EamBusinessReturnDto eamBusinessReturnDto) { + startPage(); + List list = eamBusinessReturnService.query(eamBusinessReturnDto); + return getDataTable(EamBusinessReturnVo.ToVo(list)); + } + + /** + * 查询详情数据 + * + */ + @PostMapping("/query") + @ApiOperation(value = "查询详情数据") + public Result query(@RequestParam Long id) { + return success(EamBusinessReturnVo.ToVo(eamBusinessReturnService.getById(id))); + } + + /** + * 新增数据 + * + */ + @PostMapping("/add") + @ApiOperation(value = "新增数据") + public Result add(@Validated @RequestBody EamBusinessReturnDto eamBusinessReturnDto) { + EamBusinessReturn eamBusinessReturn = new EamBusinessReturn(); + BeanUtils.copyProperties(eamBusinessReturnDto, eamBusinessReturn); + eamBusinessReturn.setApplicant(getUserId()); + eamBusinessReturn.setCreateUser(getUserId()); + eamBusinessReturn.setBusinessId(EncodingEum.RETURN.getBusinessId()); + eamBusinessReturn.setStatus(BusinessStatusEnum.DRAFT.getCode()); + + eamBusinessReturn.setAssetIdList(JSON.toJSONString(eamBusinessReturnDto.getAssetIdList())); + return eamBusinessReturnService.save(eamBusinessReturn)?success():error(); + } + + /** + * 修改数据 + * + */ + @PostMapping("/update") + @ApiOperation(value = "修改数据") + public Result update(@Validated @RequestBody EamBusinessReturnDto eamBusinessReturnDto) { + if (eamBusinessReturnService.isCompleted(eamBusinessReturnDto.getId())){ + return error("业务状态错误,业务已完成,内容不允许修改!"); + } + EamBusinessReturn eamBusinessReturn = new EamBusinessReturn(); + BeanUtils.copyProperties(eamBusinessReturnDto, eamBusinessReturn); + eamBusinessReturn.setUpdateUser(getUserId()); + + eamBusinessReturn.setAssetIdList(JSON.toJSONString(eamBusinessReturnDto.getAssetIdList())); + return eamBusinessReturnService.updateById(eamBusinessReturn) ? success() : error(); + } + + /** + * 删除数据 + * + */ + @PostMapping("/delete") + @ApiOperation(value = "删除数据") + public Result delete(@RequestBody List idList) { + return eamBusinessReturnService.removeBatchByIds(idList) ? success() : error(); + } + + @PostMapping("/confirm") + @ApiOperation(value = "确认") + public Result confirm(@RequestBody List idList) { + List list = eamBusinessReturnService.listByIds(idList); + + for (EamBusinessReturn x : list) { + if (x.getStatus().equals(BusinessStatusEnum.COMPLETED.getCode())) { + return error("业务状态错误,业务已完成,确认失败! 业务名称: " + x.getName() + " 业务编号: " + x.getBusinessId()); + } + List assetIdList = JSON.parseArray(x.getAssetIdList(), EamWarehouseAssetDto.class); + if (assetIdList != null && !assetIdList.isEmpty()) { + eamWarehouseAssetService.add(assetIdList); + List assetList = assetService.listByIds(assetIdList.stream().map(EamWarehouseAssetDto::getAssetId).distinct().collect(Collectors.toList())); + assetList.forEach(e -> { + e.setPositionId(x.getPositionId()); + e.setPositionDetail(x.getPositionDetail()); + e.setManager(x.getManager()); + e.setUseUserId(x.getUseUserId()); + e.setStatus(AssetStatusEnum.IN_USE.getCode()); + eamAssetLogService.add(x.getBusinessId(), DetectTypeEnum.RETURN, DetectTypeEnum.RETURN.getInfo(), e.getAssetId(), getUserId()); + }); + assetService.updateBatchById(assetList); + x.setStatus(BusinessStatusEnum.COMPLETED.getCode()); + } + } + + eamBusinessReturnService.updateBatchById(list); + return success(); + } +} + diff --git a/system/src/main/java/com/yyy/system/controller/EamBusinessReturnInventoryController.java b/system/src/main/java/com/yyy/system/controller/EamBusinessReturnInventoryController.java new file mode 100644 index 0000000..a5c754e --- /dev/null +++ b/system/src/main/java/com/yyy/system/controller/EamBusinessReturnInventoryController.java @@ -0,0 +1,153 @@ +package com.yyy.system.controller; + + +import com.alibaba.fastjson.JSON; +import com.yyy.common.core.controller.BaseController; +import com.yyy.common.core.domain.Result; +import com.yyy.common.core.page.TableDataInfo; +import com.yyy.common.enums.BusinessStatusEnum; +import com.yyy.common.enums.DetectTypeEnum; +import com.yyy.common.enums.EncodingEum; +import com.yyy.common.utils.bean.BeanUtils; +import com.yyy.system.entity.dto.EamWarehouseAssetDto; +import com.yyy.system.entity.pojo.EamAsset; +import com.yyy.system.entity.pojo.EamBusinessReturnInventory; +import com.yyy.system.entity.dto.EamBusinessReturnInventoryDto; +import com.yyy.system.entity.vo.EamBusinessReturnInventoryVo; +import com.yyy.system.service.EamAssetLogService; +import com.yyy.system.service.EamAssetService; +import com.yyy.system.service.EamBusinessReturnInventoryService; +import com.yyy.system.service.EamWarehouseAssetService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; + +import javax.annotation.Resource; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 退库信息表(eam_business_return_inventory)表控制层 + * + * @author Fangy + * @since 2024-04-12 11:10:52 + */ +@RestController +@Api(tags = "退库信息表相关接口") +@RequestMapping("api/eamBusinessReturnInventory") +public class EamBusinessReturnInventoryController extends BaseController { + + private static final Logger logger = LoggerFactory.getLogger(EamBusinessReturnInventoryController.class); + /** + * 服务对象 + */ + @Resource + private EamBusinessReturnInventoryService eamBusinessReturnInventoryService; + + @Resource + private EamAssetService eamAssetService; + + @Resource + private EamAssetLogService eamAssetLogService; + + @Resource + private EamWarehouseAssetService eamWarehouseAssetService; + + /** + * 查询分页数据 + */ + @PostMapping("/list") + @ApiOperation(value = "查询分页数据") + public TableDataInfo list(@RequestBody EamBusinessReturnInventoryDto eamBusinessReturnInventoryDto) { + startPage(); + List list = eamBusinessReturnInventoryService.query(eamBusinessReturnInventoryDto); + return getDataTable(EamBusinessReturnInventoryVo.ToVo(list)); + } + + /** + * 查询详情数据 + */ + @PostMapping("/query") + @ApiOperation(value = "查询详情数据") + public Result query(@RequestParam Long id) { + return success(EamBusinessReturnInventoryVo.ToVo(eamBusinessReturnInventoryService.getById(id))); + } + + /** + * 新增数据 + */ + @PostMapping("/add") + @ApiOperation(value = "新增数据") + public Result add(@Validated @RequestBody EamBusinessReturnInventoryDto eamBusinessReturnInventoryDto) { + EamBusinessReturnInventory eamBusinessReturnInventory = new EamBusinessReturnInventory(); + BeanUtils.copyProperties(eamBusinessReturnInventoryDto, eamBusinessReturnInventory); + eamBusinessReturnInventory.setApplicant(getUserId()); + eamBusinessReturnInventory.setCreateUser(getUserId()); + eamBusinessReturnInventory.setBusinessId(EncodingEum.RETURN_INVENTORY.getBusinessId()); + eamBusinessReturnInventory.setStatus(BusinessStatusEnum.DRAFT.getCode()); + + eamBusinessReturnInventoryDto.getAssetIdList().forEach(e -> e.setWarehouseId(eamBusinessReturnInventoryDto.getWarehouseId())); + eamBusinessReturnInventory.setAssetIdList(JSON.toJSONString(eamBusinessReturnInventoryDto.getAssetIdList())); + return eamBusinessReturnInventoryService.save(eamBusinessReturnInventory) ? success() : error(); + } + + /** + * 修改数据 + */ + @PostMapping("/update") + @ApiOperation(value = "修改数据") + public Result update(@Validated @RequestBody EamBusinessReturnInventoryDto eamBusinessReturnInventoryDto) { + if (eamBusinessReturnInventoryService.isCompleted(eamBusinessReturnInventoryDto.getId())){ + return error("业务状态错误,业务已完成,内容不允许修改!"); + } + EamBusinessReturnInventory eamBusinessReturnInventory = new EamBusinessReturnInventory(); + BeanUtils.copyProperties(eamBusinessReturnInventoryDto, eamBusinessReturnInventory); + eamBusinessReturnInventory.setUpdateUser(getUserId()); + + eamBusinessReturnInventoryDto.getAssetIdList().forEach(e -> e.setWarehouseId(eamBusinessReturnInventoryDto.getWarehouseId())); + eamBusinessReturnInventory.setAssetIdList(JSON.toJSONString(eamBusinessReturnInventoryDto.getAssetIdList())); + return eamBusinessReturnInventoryService.updateById(eamBusinessReturnInventory) ? success() : error(); + } + + /** + * 删除数据 + */ + @PostMapping("/delete") + @ApiOperation(value = "删除数据") + public Result delete(@RequestBody List idList) { + return eamBusinessReturnInventoryService.removeBatchByIds(idList) ? success() : error(); + } + + //TODO 确认退库数量是否大于原始数量 + @PostMapping("/confirm") + @ApiOperation(value = "确认") + public Result confirm(@RequestBody List idList) { + List list = eamBusinessReturnInventoryService.listByIds(idList); + for (EamBusinessReturnInventory x : list) { + if (x.getStatus().equals(BusinessStatusEnum.COMPLETED.getCode())) { + return error("业务状态错误,业务已完成,确认失败! 业务名称: " + x.getName() + " 业务编号: " + x.getBusinessId()); + } + List assetIdList = JSON.parseArray(x.getAssetIdList(), EamWarehouseAssetDto.class); + if (assetIdList != null && !assetIdList.isEmpty()) { + eamWarehouseAssetService.add(assetIdList); + List assetList = eamAssetService.listByIds(assetIdList.stream().map(EamWarehouseAssetDto::getAssetId).distinct().collect(Collectors.toList())); + assetList.forEach(e -> { + e.setUseOrganizationId(x.getUseOrganizationId()); + e.setPositionId(x.getPositionId()); + e.setPositionDetail(x.getPositionDetail()); + e.setWarehouseId(x.getWarehouseId()); + eamAssetLogService.add(x.getBusinessId(), DetectTypeEnum.RETURN_INVENTORY, DetectTypeEnum.RETURN_INVENTORY.getInfo(), e.getAssetId(), getUserId()); + }); + eamAssetService.updateBatchById(assetList); + x.setStatus(BusinessStatusEnum.COMPLETED.getCode()); + } + } + + eamBusinessReturnInventoryService.updateBatchById(list); + return success(); + } +} + diff --git a/system/src/main/java/com/yyy/system/controller/EamBusinessStorageController.java b/system/src/main/java/com/yyy/system/controller/EamBusinessStorageController.java new file mode 100644 index 0000000..6b2daab --- /dev/null +++ b/system/src/main/java/com/yyy/system/controller/EamBusinessStorageController.java @@ -0,0 +1,170 @@ +package com.yyy.system.controller; + + +import com.alibaba.fastjson.JSON; +import com.yyy.common.core.controller.BaseController; +import com.yyy.common.core.domain.Result; +import com.yyy.common.core.page.TableDataInfo; +import com.yyy.common.enums.AssetStatusEnum; +import com.yyy.common.enums.BusinessStatusEnum; +import com.yyy.common.enums.DetectTypeEnum; +import com.yyy.common.enums.EncodingEum; +import com.yyy.common.utils.bean.BeanUtils; +import com.yyy.common.utils.common.DateUtils; +import com.yyy.system.entity.dto.EamWarehouseAssetDto; +import com.yyy.system.entity.dto.EamWarehouseInventoryDto; +import com.yyy.system.entity.pojo.EamAsset; +import com.yyy.system.entity.pojo.EamBusinessStorage; +import com.yyy.system.entity.dto.EamBusinessStorageDto; +import com.yyy.system.entity.pojo.EamWarehouseInventory; +import com.yyy.system.entity.vo.EamBusinessStorageVo; +import com.yyy.system.entity.vo.EamWarehouseInventoryVo; +import com.yyy.system.service.EamAssetLogService; +import com.yyy.system.service.EamAssetService; +import com.yyy.system.service.EamBusinessStorageService; +import com.yyy.system.service.EamWarehouseAssetService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; + +import javax.annotation.Resource; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 入库信息表(eam_business_storage)表控制层 + * + * @author Fangy + * @since 2024-04-11 10:18:14 + */ +@RestController +@Api(tags = "入库信息表相关接口") +@RequestMapping("api/eamBusinessStorage") +public class EamBusinessStorageController extends BaseController { + + private static final Logger logger = LoggerFactory.getLogger(EamBusinessStorageController.class); + /** + * 服务对象 + */ + @Resource + private EamBusinessStorageService eamBusinessStorageService; + + @Resource + private EamAssetService eamAssetService; + + @Resource + private EamAssetLogService eamAssetLogService; + + @Resource + private EamWarehouseAssetService eamWarehouseAssetService; + + /** + * 查询分页数据 + */ + @PostMapping("/list") + @ApiOperation(value = "查询分页数据") + public TableDataInfo list(@RequestBody EamBusinessStorageDto eamBusinessStorageDto) { + startPage(); + List list = eamBusinessStorageService.query(eamBusinessStorageDto); + return getDataTable(EamBusinessStorageVo.ToVo(list)); + } + + /** + * 查询详情数据 + */ + @PostMapping("/query") + @ApiOperation(value = "查询详情数据") + public Result query(@RequestParam Long id) { + return success(EamBusinessStorageVo.ToVo(eamBusinessStorageService.getById(id))); + } + + /** + * 新增数据 + */ + @PostMapping("/add") + @ApiOperation(value = "新增数据") + public Result add(@Validated @RequestBody EamBusinessStorageDto eamBusinessStorageDto) { + EamBusinessStorage eamBusinessStorage = new EamBusinessStorage(); + BeanUtils.copyProperties(eamBusinessStorageDto, eamBusinessStorage); + eamBusinessStorage.setCreateUser(getUserId()); + eamBusinessStorage.setBusinessId(EncodingEum.STORAGE.getBusinessId()); + eamBusinessStorage.setStatus(BusinessStatusEnum.DRAFT.getCode()); + + eamBusinessStorageDto.getAssetIdList().forEach(e -> e.setWarehouseId(eamBusinessStorageDto.getWarehouseId())); + eamBusinessStorage.setAssetIdList(JSON.toJSONString(eamBusinessStorageDto.getAssetIdList())); + return eamBusinessStorageService.save(eamBusinessStorage) ? success() : error(); + } + + /** + * 修改数据 + */ + @PostMapping("/update") + @ApiOperation(value = "修改数据") + public Result update(@Validated @RequestBody EamBusinessStorageDto eamBusinessStorageDto) { + if (eamBusinessStorageService.isCompleted(eamBusinessStorageDto.getId())){ + return error("业务状态错误,业务已完成,内容不允许修改!"); + } + EamBusinessStorage eamBusinessStorage = new EamBusinessStorage(); + BeanUtils.copyProperties(eamBusinessStorageDto, eamBusinessStorage); + eamBusinessStorage.setUpdateUser(getUserId()); + + eamBusinessStorageDto.getAssetIdList().forEach(e -> e.setWarehouseId(eamBusinessStorageDto.getWarehouseId())); + eamBusinessStorage.setAssetIdList(JSON.toJSONString(eamBusinessStorageDto.getAssetIdList())); + return eamBusinessStorageService.updateById(eamBusinessStorage) ? success() : error(); + } + + /** + * 删除数据 + */ + @PostMapping("/delete") + @ApiOperation(value = "删除数据") + public Result delete(@RequestBody List idList) { + return eamBusinessStorageService.removeBatchByIds(idList) ? success() : error(); + } + + /** + * @param idList + * @return + */ + @PostMapping("/confirm") + @ApiOperation(value = "确认") + public Result confirm(@RequestBody List idList) { + List eamBusinessStorages = eamBusinessStorageService.listByIds(idList); + for (EamBusinessStorage eamBusinessStorage : eamBusinessStorages) { + if (eamBusinessStorage.getStatus().equals(BusinessStatusEnum.COMPLETED.getCode())) { + return error("业务状态错误,业务已完成,确认失败! 业务名称: " + eamBusinessStorage.getName() + " 业务编号: " + eamBusinessStorage.getBusinessId()); + } + List assetIdList = JSON.parseArray(eamBusinessStorage.getAssetIdList(), EamWarehouseAssetDto.class); + if (assetIdList != null && !assetIdList.isEmpty()) { + eamWarehouseAssetService.add(assetIdList); + List eamAssetList = eamAssetService.listByIds(assetIdList.stream().map(EamWarehouseAssetDto::getAssetId).distinct().collect(Collectors.toList())); + eamAssetList.forEach(e -> { + e.setStatus(AssetStatusEnum.INVENTORY.getCode()); + e.setWarehouseId(eamBusinessStorage.getWarehouseId()); + e.setManager(eamBusinessStorage.getManager()); + e.setPositionId(eamBusinessStorage.getPositionId()); + e.setSupplierVendorId(eamBusinessStorage.getSupplierVendorId()); + e.setCreateTime(eamBusinessStorage.getCreateTime() != null ? eamBusinessStorage.getCreateTime() : DateUtils.getNowDate()); + eamAssetLogService.add(eamBusinessStorage.getBusinessId(), DetectTypeEnum.STORAGE, DetectTypeEnum.STORAGE.getInfo(), e.getAssetId(), getUserId()); + }); + eamAssetService.updateBatchById(eamAssetList); + eamBusinessStorage.setStatus(BusinessStatusEnum.COMPLETED.getCode()); + } + } + + eamBusinessStorageService.updateBatchById(eamBusinessStorages); + return success(); + } + + @PostMapping("/warehouse/list") + @ApiOperation(value = "查询库存列表") + public TableDataInfo warehouseList(@RequestBody EamWarehouseInventoryDto eamWarehouseInventoryDto) { + startPage(); + List list = eamAssetService.queryWarehouseInventoryStorage(eamWarehouseInventoryDto); + return getDataTable(EamWarehouseInventoryVo.ToVo(list)); + } +} + diff --git a/system/src/main/java/com/yyy/system/controller/EamBusinessTransferController.java b/system/src/main/java/com/yyy/system/controller/EamBusinessTransferController.java new file mode 100644 index 0000000..aea81ce --- /dev/null +++ b/system/src/main/java/com/yyy/system/controller/EamBusinessTransferController.java @@ -0,0 +1,157 @@ +package com.yyy.system.controller; + + + +import com.alibaba.fastjson.JSON; +import com.yyy.common.core.controller.BaseController; +import com.yyy.common.core.domain.Result; +import com.yyy.common.core.page.TableDataInfo; +import com.yyy.common.enums.BusinessStatusEnum; +import com.yyy.common.enums.DetectTypeEnum; +import com.yyy.common.enums.EncodingEum; +import com.yyy.common.utils.bean.BeanUtils; +import com.yyy.system.entity.dto.EamWarehouseAssetDto; +import com.yyy.system.entity.pojo.EamAsset; +import com.yyy.system.entity.pojo.EamBusinessTransfer; +import com.yyy.system.entity.dto.EamBusinessTransferDto; +import com.yyy.system.entity.vo.EamBusinessTransferVo; +import com.yyy.system.service.EamAssetLogService; +import com.yyy.system.service.EamAssetService; +import com.yyy.system.service.EamBusinessTransferService; +import com.yyy.system.service.EamWarehouseAssetService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; + +import javax.annotation.Resource; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 资产转移信息表(eam_business_transfer)表控制层 + * @author Fangy + * @since 2024-04-10 17:26:46 + */ +@RestController +@Api(tags = "资产转移信息表相关接口") +@RequestMapping("api/eamBusinessTransfer") +public class EamBusinessTransferController extends BaseController { + + private static final Logger logger = LoggerFactory.getLogger(EamBusinessTransferController.class); + /** + * 服务对象 + */ + @Resource + private EamBusinessTransferService eamBusinessTransferService; + + @Resource + private EamAssetService eamAssetService; + + @Resource + private EamAssetLogService eamAssetLogService; + + @Resource + private EamWarehouseAssetService eamWarehouseAssetService; + + /** + * 查询分页数据 + * + */ + @PostMapping("/list") + @ApiOperation(value = "查询分页数据") + public TableDataInfo list(@RequestBody EamBusinessTransferDto eamBusinessTransferDto) { + startPage(); + List list = eamBusinessTransferService.query(eamBusinessTransferDto); + return getDataTable(EamBusinessTransferVo.ToVo(list)); + } + + /** + * 查询详情数据 + * + */ + @PostMapping("/query") + @ApiOperation(value = "查询详情数据") + public Result query(@RequestParam Long id) { + return success(EamBusinessTransferVo.ToVo(eamBusinessTransferService.getById(id))); + } + + /** + * 新增数据 + * + */ + @PostMapping("/add") + @ApiOperation(value = "新增数据") + public Result add(@Validated @RequestBody EamBusinessTransferDto eamBusinessTransferDto) { + EamBusinessTransfer eamBusinessTransfer = new EamBusinessTransfer(); + BeanUtils.copyProperties(eamBusinessTransferDto, eamBusinessTransfer); + eamBusinessTransfer.setCreateUser(getUserId()); + eamBusinessTransfer.setBusinessId(EncodingEum.TRANSFER.getBusinessId()); + eamBusinessTransfer.setStatus(BusinessStatusEnum.DRAFT.getCode()); + + eamBusinessTransfer.setAssetIdList(JSON.toJSONString(eamBusinessTransferDto.getAssetIdList())); + return eamBusinessTransferService.save(eamBusinessTransfer)?success():error(); + } + + /** + * 修改数据 + * + */ + @PostMapping("/update") + @ApiOperation(value = "修改数据") + public Result update(@Validated @RequestBody EamBusinessTransferDto eamBusinessTransferDto) { + if (eamBusinessTransferService.isCompleted(eamBusinessTransferDto.getId())){ + return error("业务状态错误,业务已完成,内容不允许修改!"); + } + EamBusinessTransfer eamBusinessTransfer = new EamBusinessTransfer(); + BeanUtils.copyProperties(eamBusinessTransferDto, eamBusinessTransfer); + eamBusinessTransfer.setUpdateUser(getUserId()); + + eamBusinessTransfer.setAssetIdList(JSON.toJSONString(eamBusinessTransferDto.getAssetIdList())); + return eamBusinessTransferService.updateById(eamBusinessTransfer) ? success() : error(); + } + + /** + * 删除数据 + * + */ + @PostMapping("/delete") + @ApiOperation(value = "删除数据") + public Result delete(@RequestBody List idList) { + return eamBusinessTransferService.removeBatchByIds(idList) ? success() : error(); + } + + @PostMapping("/confirm") + @ApiOperation(value = "确认") + public Result confirm(@RequestBody List idList) { + List list = eamBusinessTransferService.listByIds(idList); + for (EamBusinessTransfer x : list) { + if (x.getStatus().equals(BusinessStatusEnum.COMPLETED.getCode())) { + return error("业务状态错误,业务已完成,确认失败! 业务名称: " + x.getName() + " 业务编号: " + x.getBusinessId()); + } + List assetIdList = JSON.parseArray(x.getAssetIdList(), EamWarehouseAssetDto.class); + if (assetIdList != null && !assetIdList.isEmpty()) { + if(!eamWarehouseAssetService.reduce(assetIdList)){ + return error("库存不足!"); + } + List assetList = eamAssetService.listByIds(assetIdList.stream().map(EamWarehouseAssetDto::getAssetId).distinct().collect(Collectors.toList())); + assetList.forEach(e -> { + e.setPositionId(x.getPositionId()); + e.setPositionDetail(x.getPositionDetail()); + e.setManager(x.getManagerId()); + e.setUseUserId(x.getUseUserId()); + e.setUseOrganizationId(x.getInUseOrganizationId()); + eamAssetLogService.add(x.getBusinessId(), DetectTypeEnum.TRANSFER, DetectTypeEnum.TRANSFER.getInfo(), e.getAssetId(), getUserId()); + }); + eamAssetService.updateBatchById(assetList); + x.setStatus(BusinessStatusEnum.COMPLETED.getCode()); + } + } + + eamBusinessTransferService.updateBatchById(list); + return success(); + } +} + diff --git a/system/src/main/java/com/yyy/system/controller/EamHomeController.java b/system/src/main/java/com/yyy/system/controller/EamHomeController.java new file mode 100644 index 0000000..6c260e6 --- /dev/null +++ b/system/src/main/java/com/yyy/system/controller/EamHomeController.java @@ -0,0 +1,31 @@ +package com.yyy.system.controller; + + +import com.yyy.common.core.controller.BaseController; +import com.yyy.common.core.domain.Result; +import com.yyy.system.service.EamAssetService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + + +@RestController +@Api(tags = "首页接口") +@RequestMapping("api/home") +public class EamHomeController extends BaseController { + + private static final Logger logger = LoggerFactory.getLogger(EamHomeController.class); + + @Autowired + private EamAssetService assetService; + + @PostMapping("/data") + @ApiOperation(value = "查询首页数据") + public Result data() { + return success(assetService.homeData()); + } +} + diff --git a/system/src/main/java/com/yyy/system/controller/EamRepairController.java b/system/src/main/java/com/yyy/system/controller/EamRepairController.java new file mode 100644 index 0000000..28b08bf --- /dev/null +++ b/system/src/main/java/com/yyy/system/controller/EamRepairController.java @@ -0,0 +1,142 @@ +package com.yyy.system.controller; + + +import com.alibaba.fastjson.JSON; +import com.yyy.common.core.controller.BaseController; +import com.yyy.common.core.domain.Result; +import com.yyy.common.core.page.TableDataInfo; +import com.yyy.common.enums.AssetStatusEnum; +import com.yyy.common.enums.BusinessStatusEnum; +import com.yyy.common.enums.DetectTypeEnum; +import com.yyy.common.enums.EncodingEum; +import com.yyy.common.utils.bean.BeanUtils; +import com.yyy.system.entity.dto.EamWarehouseAssetDto; +import com.yyy.system.entity.pojo.EamAsset; +import com.yyy.system.entity.pojo.EamRepair; +import com.yyy.system.entity.dto.EamRepairDto; +import com.yyy.system.entity.vo.EamRepairVo; +import com.yyy.system.service.EamAssetLogService; +import com.yyy.system.service.EamAssetService; +import com.yyy.system.service.EamRepairService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; + +import javax.annotation.Resource; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 维修登记信息表(eam_repair)表控制层 + * + * @author Fangy + * @since 2024-04-12 15:00:36 + */ +@RestController +@Api(tags = "维修登记信息表相关接口") +@RequestMapping("api/eamRepair") +public class EamRepairController extends BaseController { + + private static final Logger logger = LoggerFactory.getLogger(EamRepairController.class); + /** + * 服务对象 + */ + @Resource + private EamRepairService eamRepairService; + + @Resource + private EamAssetService eamAssetService; + + @Resource + private EamAssetLogService eamAssetLogService; + + /** + * 查询分页数据 + */ + @PostMapping("/list") + @ApiOperation(value = "查询分页数据") + public TableDataInfo list(@RequestBody EamRepairDto eamRepairDto) { + startPage(); + List list = eamRepairService.query(eamRepairDto); + return getDataTable(EamRepairVo.ToVo(list)); + } + + /** + * 查询详情数据 + */ + @PostMapping("/query") + @ApiOperation(value = "查询详情数据") + public Result query(@RequestParam Long id) { + return success(EamRepairVo.ToVo(eamRepairService.getById(id))); + } + + /** + * 新增数据 + */ + @PostMapping("/add") + @ApiOperation(value = "新增数据") + public Result add(@Validated @RequestBody EamRepairDto eamRepairDto) { + EamRepair eamRepair = new EamRepair(); + BeanUtils.copyProperties(eamRepairDto, eamRepair); + eamRepair.setCreateUser(getUserId()); + eamRepair.setBusinessId(EncodingEum.REPAIR.getBusinessId()); + eamRepair.setStatus(BusinessStatusEnum.DRAFT.getCode()); + + eamRepair.setAssetIdList(JSON.toJSONString(eamRepairDto.getAssetIdList())); + return eamRepairService.save(eamRepair) ? success() : error(); + } + + /** + * 修改数据 + */ + @PostMapping("/update") + @ApiOperation(value = "修改数据") + public Result update(@Validated @RequestBody EamRepairDto eamRepairDto) { + if (eamRepairService.isCompleted(eamRepairDto.getId())){ + return error("业务状态错误,业务已完成,内容不允许修改!"); + } + EamRepair eamRepair = new EamRepair(); + BeanUtils.copyProperties(eamRepairDto, eamRepair); + eamRepair.setUpdateUser(getUserId()); + + eamRepair.setAssetIdList(JSON.toJSONString(eamRepairDto.getAssetIdList())); + return eamRepairService.updateById(eamRepair) ? success() : error(); + } + + /** + * 删除数据 + */ + @PostMapping("/delete") + @ApiOperation(value = "删除数据") + public Result delete(@RequestBody List idList) { + return eamRepairService.removeBatchByIds(idList) ? success() : error(); + } + + @PostMapping("/confirm") + @ApiOperation(value = "确认") + public Result confirm(@RequestBody List idList) { + List list = eamRepairService.listByIds(idList); + for (EamRepair x : list) { + if (x.getStatus().equals(BusinessStatusEnum.COMPLETED.getCode())) { + return error("业务状态错误,业务已完成,确认失败! 业务名称: " + x.getName() + " 业务编号: " + x.getBusinessId()); + } + List assetIdList = JSON.parseArray(x.getAssetIdList(), EamWarehouseAssetDto.class); + if (assetIdList != null && !assetIdList.isEmpty()) { + List assetList = eamAssetService.listByIds(assetIdList.stream().map(EamWarehouseAssetDto::getAssetId).distinct().collect(Collectors.toList())); + assetList.forEach(e -> { + e.setStatus(AssetStatusEnum.REPAIR.getCode()); + eamAssetLogService.add(x.getBusinessId(), DetectTypeEnum.TRANSFER, DetectTypeEnum.TRANSFER.getInfo(), e.getAssetId(), getUserId()); + }); + eamAssetService.updateBatchById(assetList); + x.setStatus(BusinessStatusEnum.COMPLETED.getCode()); + } + } + + eamRepairService.updateBatchById(list); + return success(); + } +} + diff --git a/system/src/main/java/com/yyy/system/controller/EamRepairFaultController.java b/system/src/main/java/com/yyy/system/controller/EamRepairFaultController.java new file mode 100644 index 0000000..e021c73 --- /dev/null +++ b/system/src/main/java/com/yyy/system/controller/EamRepairFaultController.java @@ -0,0 +1,136 @@ +package com.yyy.system.controller; + + +import com.alibaba.fastjson.JSON; +import com.yyy.common.core.controller.BaseController; +import com.yyy.common.core.domain.Result; +import com.yyy.common.core.page.TableDataInfo; +import com.yyy.common.enums.BusinessStatusEnum; +import com.yyy.common.enums.DetectTypeEnum; +import com.yyy.common.utils.bean.BeanUtils; +import com.yyy.system.entity.dto.EamWarehouseAssetDto; +import com.yyy.system.entity.pojo.EamAsset; +import com.yyy.system.entity.pojo.EamRepairFault; +import com.yyy.system.entity.dto.EamRepairFaultDto; +import com.yyy.system.entity.vo.EamRepairFaultVo; +import com.yyy.system.service.EamAssetLogService; +import com.yyy.system.service.EamAssetService; +import com.yyy.system.service.EamRepairFaultService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; + +import javax.annotation.Resource; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 故障信息表(eam_repair_fault)表控制层 + * + * @author Fangy + * @since 2024-04-12 14:50:46 + */ +@RestController +@Api(tags = "故障信息表相关接口") +@RequestMapping("api/eamRepairFault") +public class EamRepairFaultController extends BaseController { + + private static final Logger logger = LoggerFactory.getLogger(EamRepairFaultController.class); + /** + * 服务对象 + */ + @Resource + private EamRepairFaultService eamRepairFaultService; + + @Resource + private EamAssetService eamAssetService; + + @Resource + private EamAssetLogService eamAssetLogService; + + /** + * 查询分页数据 + */ + @PostMapping("/list") + @ApiOperation(value = "查询分页数据") + public TableDataInfo list(@RequestBody EamRepairFaultDto eamRepairFaultDto) { + startPage(); + List list = eamRepairFaultService.query(eamRepairFaultDto); + return getDataTable(EamRepairFaultVo.ToVo(list)); + } + + /** + * 查询详情数据 + */ + @PostMapping("/query") + @ApiOperation(value = "查询详情数据") + public Result query(@RequestParam Long id) { + return success(EamRepairFaultVo.ToVo(eamRepairFaultService.getById(id))); + } + + /** + * 新增数据 + */ + @PostMapping("/add") + @ApiOperation(value = "新增数据") + public Result add(@Validated @RequestBody EamRepairFaultDto eamRepairFaultDto) { + EamRepairFault eamRepairFault = new EamRepairFault(); + BeanUtils.copyProperties(eamRepairFaultDto, eamRepairFault); + eamRepairFault.setCreateUser(getUserId()); + eamRepairFault.setAssetIdList(JSON.toJSONString(eamRepairFaultDto.getAssetIdList())); + return eamRepairFaultService.save(eamRepairFault) ? success() : error(); + } + + /** + * 修改数据 + */ + @PostMapping("/update") + @ApiOperation(value = "修改数据") + public Result update(@Validated @RequestBody EamRepairFaultDto eamRepairFaultDto) { + if (eamRepairFaultService.isCompleted(eamRepairFaultDto.getFaultId())){ + return error("业务状态错误,业务已完成,内容不允许修改!"); + } + EamRepairFault eamRepairFault = new EamRepairFault(); + BeanUtils.copyProperties(eamRepairFaultDto, eamRepairFault); + eamRepairFault.setUpdateUser(getUserId()); + + eamRepairFault.setAssetIdList(JSON.toJSONString(eamRepairFaultDto.getAssetIdList())); + return eamRepairFaultService.updateById(eamRepairFault) ? success() : error(); + } + + /** + * 删除数据 + */ + @PostMapping("/delete") + @ApiOperation(value = "删除数据") + public Result delete(@RequestBody List idList) { + return eamRepairFaultService.removeBatchByIds(idList) ? success() : error(); + } + + @PostMapping("/confirm") + @ApiOperation(value = "确认") + public Result confirm(@RequestBody List idList) { + List list = eamRepairFaultService.listByIds(idList); + for (EamRepairFault x : list) { + if (x.getStatus().equals(BusinessStatusEnum.COMPLETED.getCode())) { + return error("业务状态错误,业务已完成,确认失败! 业务名称: " + x.getName()); + } + List assetIdList = JSON.parseArray(x.getAssetIdList(), EamWarehouseAssetDto.class); + if (assetIdList != null && !assetIdList.isEmpty()) { + List assetList = eamAssetService.listByIds(assetIdList.stream().map(EamWarehouseAssetDto::getAssetId).distinct().collect(Collectors.toList())); + assetList.forEach(e -> { + eamAssetLogService.add(x.getFaultId().toString(), DetectTypeEnum.TRANSFER, DetectTypeEnum.TRANSFER.getInfo(), e.getAssetId(), getUserId()); + }); + x.setStatus(BusinessStatusEnum.COMPLETED.getCode()); + } + + } + + eamRepairFaultService.updateBatchById(list); + return success(); + } +} + diff --git a/system/src/main/java/com/yyy/system/controller/EamRepairTypeController.java b/system/src/main/java/com/yyy/system/controller/EamRepairTypeController.java new file mode 100644 index 0000000..2220b18 --- /dev/null +++ b/system/src/main/java/com/yyy/system/controller/EamRepairTypeController.java @@ -0,0 +1,100 @@ +package com.yyy.system.controller; + + + +import com.yyy.common.core.controller.BaseController; +import com.yyy.common.core.domain.Result; +import com.yyy.common.core.page.TableDataInfo; +import com.yyy.common.utils.bean.BeanUtils; +import com.yyy.system.entity.pojo.EamRepairType; +import com.yyy.system.entity.dto.EamRepairTypeDto; +import com.yyy.system.entity.vo.EamRepairTypeVo; +import com.yyy.system.service.EamRepairTypeService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; + +import javax.annotation.Resource; +import java.util.List; + +/** + * 保养计划(维修类型)表(eam_repair_type)表控制层 + * @author Fangy + * @since 2024-04-12 15:00:38 + */ +@RestController +@Api(tags = "保养计划(维修类型)表相关接口") +@RequestMapping("api/eamRepairType") +public class EamRepairTypeController extends BaseController { + + private static final Logger logger = LoggerFactory.getLogger(EamRepairTypeController.class); + /** + * 服务对象 + */ + @Resource + private EamRepairTypeService eamRepairTypeService; + + /** + * 查询分页数据 + * + */ + @PostMapping("/list") + @ApiOperation(value = "查询分页数据") + public TableDataInfo list(@RequestBody EamRepairTypeDto eamRepairTypeDto) { + startPage(); + List list = eamRepairTypeService.query(eamRepairTypeDto); + return getDataTable(EamRepairTypeVo.ToVo(list)); + } + + /** + * 查询详情数据 + * + */ + @PostMapping("/query") + @ApiOperation(value = "查询详情数据") + public Result query(@RequestParam Long id) { + return success(EamRepairTypeVo.ToVo(eamRepairTypeService.getById(id))); + } + + /** + * 新增数据 + * + */ + @PostMapping("/add") + @ApiOperation(value = "新增数据") + public Result add(@Validated @RequestBody EamRepairTypeDto eamRepairTypeDto) { + EamRepairType eamRepairType = new EamRepairType(); + BeanUtils.copyProperties(eamRepairTypeDto, eamRepairType); + eamRepairType.setCreateUser(getUserId()); + return eamRepairTypeService.save(eamRepairType)?success():error(); + } + + /** + * 修改数据 + * + */ + @PostMapping("/update") + @ApiOperation(value = "修改数据") + public Result update(@Validated @RequestBody EamRepairTypeDto eamRepairTypeDto) { + EamRepairType eamRepairType = new EamRepairType(); + BeanUtils.copyProperties(eamRepairTypeDto, eamRepairType); + eamRepairType.setUpdateUser(getUserId()); + return eamRepairTypeService.updateById(eamRepairType) ? success() : error(); + } + + /** + * 删除数据 + * + */ + @PostMapping("/delete") + @ApiOperation(value = "删除数据") + public Result delete(@RequestBody List idList) { + return eamRepairTypeService.removeBatchByIds(idList) ? success() : error(); + } + + //TODO 定期维修任务 +} + diff --git a/system/src/main/java/com/yyy/system/controller/EamStocktakingDetailsController.java b/system/src/main/java/com/yyy/system/controller/EamStocktakingDetailsController.java new file mode 100644 index 0000000..d6eccef --- /dev/null +++ b/system/src/main/java/com/yyy/system/controller/EamStocktakingDetailsController.java @@ -0,0 +1,107 @@ +package com.yyy.system.controller; + +import com.yyy.common.core.controller.BaseController; +import com.yyy.common.core.domain.Result; +import com.yyy.common.core.page.TableDataInfo; +import com.yyy.common.enums.StocktakingStatusEnum; +import com.yyy.common.utils.bean.BeanUtils; +import com.yyy.system.entity.pojo.EamStocktakingDetails; +import com.yyy.system.entity.dto.EamStocktakingDetailsDto; +import com.yyy.system.entity.vo.EamStocktakingDetailsVo; +import com.yyy.system.service.EamStocktakingDetailsService; +import com.yyy.system.service.EamStocktakingJobService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; + +import javax.annotation.Resource; +import java.util.List; + +/** + * 盘点明细(eam_stocktaking_details)表控制层 + * @author Fangy + * @since 2024-04-12 14:50:46 + */ +@RestController +@Api(tags = "盘点明细相关接口") +@RequestMapping("api/eamStocktakingDetails") +public class EamStocktakingDetailsController extends BaseController { + + private static final Logger logger = LoggerFactory.getLogger(EamStocktakingDetailsController.class); + /** + * 服务对象 + */ + @Resource + private EamStocktakingDetailsService eamStocktakingDetailsService; + + @Resource + private EamStocktakingJobService eamStocktakingJobService; + + /** + * 查询分页数据 + * + */ + @PostMapping("/list") + @ApiOperation(value = "查询分页数据") + public TableDataInfo list(@RequestBody EamStocktakingDetailsDto eamStocktakingDetailsDto) { + startPage(); + List list = eamStocktakingDetailsService.query(eamStocktakingDetailsDto); + return getDataTable(EamStocktakingDetailsVo.ToVo(list)); + } + + /** + * 查询详情数据 + * + */ + @PostMapping("/query") + @ApiOperation(value = "查询详情数据") + public Result query(@RequestParam Long id) { + return success(EamStocktakingDetailsVo.ToVo(eamStocktakingDetailsService.getById(id))); + } + + /** + * 新增数据 + * + */ + @PostMapping("/add") + @ApiOperation(value = "新增数据") + public Result add(@Validated @RequestBody EamStocktakingDetailsDto eamStocktakingDetailsDto) { + EamStocktakingDetails eamStocktakingDetails = new EamStocktakingDetails(); + BeanUtils.copyProperties(eamStocktakingDetailsDto, eamStocktakingDetails); + eamStocktakingDetails.setCreateUser(getUserId()); + return eamStocktakingDetailsService.save(eamStocktakingDetails)?success():error(); + } + + /** + * 修改数据 + * + */ + @PostMapping("/update") + @ApiOperation(value = "修改数据") + public Result update(@Validated @RequestBody EamStocktakingDetailsDto eamStocktakingDetailsDto) { + if (eamStocktakingDetailsDto.getStocktakingJobId()!=null){ + if (!eamStocktakingJobService.getById(eamStocktakingDetailsDto.getStocktakingJobId()).getStatus().equals(StocktakingStatusEnum.IN_PROGRESS.getCode())){ + return error("盘点任务未在进行中,盘点明细修改失败!"); + } + } + + EamStocktakingDetails eamStocktakingDetails = new EamStocktakingDetails(); + BeanUtils.copyProperties(eamStocktakingDetailsDto, eamStocktakingDetails); + eamStocktakingDetails.setUpdateUser(getUserId()); + return eamStocktakingDetailsService.updateById(eamStocktakingDetails) ? success() : error(); + } + + /** + * 删除数据 + * + */ + @PostMapping("/delete") + @ApiOperation(value = "删除数据") + public Result delete(@RequestBody List idList) { + return eamStocktakingDetailsService.removeBatchByIds(idList) ? success() : error(); + } +} + diff --git a/system/src/main/java/com/yyy/system/controller/EamStocktakingJobController.java b/system/src/main/java/com/yyy/system/controller/EamStocktakingJobController.java new file mode 100644 index 0000000..9e95ae4 --- /dev/null +++ b/system/src/main/java/com/yyy/system/controller/EamStocktakingJobController.java @@ -0,0 +1,207 @@ +package com.yyy.system.controller; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.yyy.common.core.controller.BaseController; +import com.yyy.common.core.domain.Result; +import com.yyy.common.core.page.TableDataInfo; +import com.yyy.common.enums.StockTackingDetailStatusEnum; +import com.yyy.common.enums.StocktakingStatusEnum; +import com.yyy.common.utils.bean.BeanUtils; +import com.yyy.system.entity.dto.EamAssetQueryDto; +import com.yyy.system.entity.dto.EamStocktakingDetailsDto; +import com.yyy.system.entity.pojo.EamStocktakingDetails; +import com.yyy.system.entity.pojo.EamStocktakingJob; +import com.yyy.system.entity.dto.EamStocktakingJobDto; +import com.yyy.system.entity.vo.EamStocktakingJobVo; +import com.yyy.system.service.EamAssetService; +import com.yyy.system.service.EamStocktakingDetailsService; +import com.yyy.system.service.EamStocktakingJobService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; + +import javax.annotation.Resource; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * 盘点任务表(eam_stocktaking_job)表控制层 + * + * @author Fangy + * @since 2024-04-12 14:50:46 + */ +@RestController +@Api(tags = "盘点任务表相关接口") +@RequestMapping("api/eamStocktakingJob") +public class EamStocktakingJobController extends BaseController { + + private static final Logger logger = LoggerFactory.getLogger(EamStocktakingJobController.class); + /** + * 服务对象 + */ + @Resource + private EamStocktakingJobService eamStocktakingJobService; + + @Resource + private EamStocktakingDetailsService eamStocktakingDetailsService; + + @Resource + private EamAssetService eamAssetService; + + + /** + * 查询分页数据 + */ + @PostMapping("/list") + @ApiOperation(value = "查询分页数据") + public TableDataInfo list(@RequestBody EamStocktakingJobDto eamStocktakingJobDto) { + startPage(); + List list = EamStocktakingJobVo.ToVo(eamStocktakingJobService.query(eamStocktakingJobDto)); + + for (EamStocktakingJobVo job : list) { + Map countMap = new HashMap<>(); + for (StockTackingDetailStatusEnum statusEnum : StockTackingDetailStatusEnum.values()) { + countMap.put(statusEnum.getCode(), 0); + } + + List detailsList = eamStocktakingDetailsService.query(EamStocktakingDetailsDto.builder().stocktakingJobId(job.getStocktakingJobId()).build()); + + for (EamStocktakingDetails details : detailsList) { + int status = details.getStatus(); + countMap.put(status, countMap.get(status) + 1); + } + + job.setCountPending(countMap.get(StockTackingDetailStatusEnum.PENDING.getCode())); + job.setCountCompleted(countMap.get(StockTackingDetailStatusEnum.COMPLETED.getCode())); + job.setCountLoss(countMap.get(StockTackingDetailStatusEnum.SHORTAGE.getCode())); + job.setCountSurplus(countMap.get(StockTackingDetailStatusEnum.SURPLUS.getCode())); + job.setCountException(countMap.get(StockTackingDetailStatusEnum.EXCEPTION.getCode())); + } + + return getDataTable(list); + } + + /** + * 查询详情数据 + */ + @PostMapping("/query") + @ApiOperation(value = "查询详情数据") + public Result query(@RequestParam Long id) { + return success(EamStocktakingJobVo.ToVo(eamStocktakingJobService.getById(id))); + } + + /** + * 新增数据 + */ + @PostMapping("/add") + @ApiOperation(value = "新增数据") + public Result add(@Validated @RequestBody EamStocktakingJobDto eamStocktakingJobDto) { + EamStocktakingJob eamStocktakingJob = new EamStocktakingJob(); + BeanUtils.copyProperties(eamStocktakingJobDto, eamStocktakingJob); + eamStocktakingJob.setCreateUser(getUserId()); + eamStocktakingJob.setStatus(StocktakingStatusEnum.NOT_STARTED.getCode()); + + return eamStocktakingJobService.save(eamStocktakingJob) ? success() : error(); + } + + /** + * 修改数据 + */ + @PostMapping("/update") + @ApiOperation(value = "修改数据") + public Result update(@Validated @RequestBody EamStocktakingJobDto eamStocktakingJobDto) { + if (!eamStocktakingJobService.getById(eamStocktakingJobDto.getStocktakingJobId()).getStatus().equals(StocktakingStatusEnum.NOT_STARTED.getCode())) { + return error("盘点任务状态错误!只允许修改未开始的盘点任务"); + } + EamStocktakingJob eamStocktakingJob = new EamStocktakingJob(); + BeanUtils.copyProperties(eamStocktakingJobDto, eamStocktakingJob); + eamStocktakingJob.setUpdateUser(getUserId()); + return eamStocktakingJobService.updateById(eamStocktakingJob) ? success() : error(); + } + + /** + * 删除数据 + */ + @PostMapping("/delete") + @ApiOperation(value = "删除数据") + public Result delete(@RequestBody List idList) { + return eamStocktakingJobService.removeBatchByIds(idList) ? success() : error(); + } + + /** + * 开始盘点 + */ + @PostMapping("/start") + @ApiOperation(value = "开始盘点") + public Result start(@RequestBody List idList) { + List jobs = eamStocktakingJobService.listByIds(idList); + for (EamStocktakingJob job : jobs) { + if (!eamStocktakingJobService.getById(job.getStocktakingJobId()).getStatus().equals(StocktakingStatusEnum.NOT_STARTED.getCode())) { + return error("盘点任务状态错误!盘点任务:" + job.getName() + "在进行中或已完成"); + } + } + + jobs.forEach(job -> { + if (job.getFullStocktaking().equals(0)){ + eamAssetService.stocktaking(job).forEach(eamAsset -> { + eamStocktakingDetailsService.save(EamStocktakingDetails.builder() + .stocktakingJobId(job.getStocktakingJobId()) + .assetId(eamAsset.getAssetId()) + .status(StockTackingDetailStatusEnum.PENDING.getCode()) + .createUser(getUserId()).build()); + }); + }else { + eamAssetService.query(new EamAssetQueryDto()).forEach(eamAsset -> { + eamStocktakingDetailsService.save(EamStocktakingDetails.builder() + .stocktakingJobId(job.getStocktakingJobId()) + .assetId(eamAsset.getAssetId()) + .status(StockTackingDetailStatusEnum.PENDING.getCode()) + .createUser(getUserId()).build()); + }); + } + + job.setStatus(StocktakingStatusEnum.IN_PROGRESS.getCode()); + }); + eamStocktakingJobService.updateBatchById(jobs); + return success(); + } + + /** + * 结束盘点 + */ + @PostMapping("/complete") + @ApiOperation(value = "结束盘点") + public Result complete(@RequestBody List idList) { + List jobs = eamStocktakingJobService.listByIds(idList); + for (EamStocktakingJob job : jobs) { + if (!eamStocktakingJobService.getById(job.getStocktakingJobId()).getStatus().equals(StocktakingStatusEnum.IN_PROGRESS.getCode())) { + return error("盘点任务状态错误!盘点任务:" + job.getName() + "未在进行中"); + } + List detailsList = eamStocktakingDetailsService.query(EamStocktakingDetailsDto.builder().stocktakingJobId(job.getStocktakingJobId()).build()); + for (EamStocktakingDetails details : detailsList) { + if (details.getStatus().equals(StockTackingDetailStatusEnum.PENDING.getCode())) { + return error("资产未盘点完,不能执行结束操作!"); + } + } + job.setStatus(StocktakingStatusEnum.COMPLETED.getCode()); + } + eamStocktakingJobService.updateBatchById(jobs); + return success(); + } + + +// /** +// * TODO 取消 +// */ +// @PostMapping("/cancel") +// @ApiOperation(value = "取消") +// public Result cancel(@RequestBody List idList) { +// return success(); +// } +} + diff --git a/system/src/main/java/com/yyy/system/controller/EamStocktakingPlanController.java b/system/src/main/java/com/yyy/system/controller/EamStocktakingPlanController.java new file mode 100644 index 0000000..8e09b4a --- /dev/null +++ b/system/src/main/java/com/yyy/system/controller/EamStocktakingPlanController.java @@ -0,0 +1,121 @@ +package com.yyy.system.controller; + + + +import com.yyy.common.core.controller.BaseController; +import com.yyy.common.core.domain.Result; +import com.yyy.common.core.page.TableDataInfo; +import com.yyy.common.enums.StocktakingStatusEnum; +import com.yyy.common.utils.bean.BeanUtils; +import com.yyy.system.entity.pojo.EamStocktakingJob; +import com.yyy.system.entity.pojo.EamStocktakingPlan; +import com.yyy.system.entity.dto.EamStocktakingPlanDto; +import com.yyy.system.entity.vo.EamStocktakingPlanVo; +import com.yyy.system.service.EamStocktakingJobService; +import com.yyy.system.service.EamStocktakingPlanService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; + +/** + * 盘点计划信息(eam_stocktaking_plan)表控制层 + * @author Fangy + * @since 2024-04-12 14:50:46 + */ +@RestController +@Api(tags = "盘点计划信息相关接口") +@RequestMapping("api/eamStocktakingPlan") +public class EamStocktakingPlanController extends BaseController { + + private static final Logger logger = LoggerFactory.getLogger(EamStocktakingPlanController.class); + /** + * 服务对象 + */ + @Resource + private EamStocktakingPlanService eamStocktakingPlanService; + + @Resource + private EamStocktakingJobService eamStocktakingJobService; + + /** + * 查询分页数据 + * + */ + @PostMapping("/list") + @ApiOperation(value = "查询分页数据") + public TableDataInfo list(@RequestBody EamStocktakingPlanDto eamStocktakingPlanDto) { + startPage(); + List list = eamStocktakingPlanService.query(eamStocktakingPlanDto); + return getDataTable(EamStocktakingPlanVo.ToVo(list)); + } + + /** + * 查询详情数据 + * + */ + @PostMapping("/query") + @ApiOperation(value = "查询详情数据") + public Result query(@RequestParam Long id) { + return success(EamStocktakingPlanVo.ToVo(eamStocktakingPlanService.getById(id))); + } + + /** + * 新增数据 + * + */ + @PostMapping("/add") + @ApiOperation(value = "新增数据") + public Result add(@Validated @RequestBody EamStocktakingPlanDto eamStocktakingPlanDto) { + EamStocktakingPlan eamStocktakingPlan = new EamStocktakingPlan(); + BeanUtils.copyProperties(eamStocktakingPlanDto, eamStocktakingPlan); + eamStocktakingPlan.setCreateUser(getUserId()); + return eamStocktakingPlanService.save(eamStocktakingPlan)?success():error(); + } + + /** + * 修改数据 + * + */ + @PostMapping("/update") + @ApiOperation(value = "修改数据") + public Result update(@Validated @RequestBody EamStocktakingPlanDto eamStocktakingPlanDto) { + EamStocktakingPlan eamStocktakingPlan = new EamStocktakingPlan(); + BeanUtils.copyProperties(eamStocktakingPlanDto, eamStocktakingPlan); + eamStocktakingPlan.setUpdateUser(getUserId()); + return eamStocktakingPlanService.updateById(eamStocktakingPlan) ? success() : error(); + } + + /** + * 删除数据 + * + */ + @PostMapping("/delete") + @ApiOperation(value = "删除数据") + public Result delete(@RequestBody List idList) { + return eamStocktakingPlanService.removeBatchByIds(idList) ? success() : error(); + } + + @PostMapping("/job") + @ApiOperation(value = "创建盘点任务") + public Result job(@RequestBody List idList) { + List list = eamStocktakingPlanService.listByIds(idList); + List jobs = new ArrayList<>(); + list.forEach(x -> { + EamStocktakingJob eamStocktakingJob = new EamStocktakingJob(); + BeanUtils.copyProperties(x, eamStocktakingJob); + eamStocktakingJob.setCreateUser(getUserId()); + eamStocktakingJob.setStatus(StocktakingStatusEnum.NOT_STARTED.getCode()); + jobs.add(eamStocktakingJob); + }); + eamStocktakingJobService.saveBatch(jobs); + return success(); + } +} + diff --git a/system/src/main/java/com/yyy/system/controller/QrCodeController.java b/system/src/main/java/com/yyy/system/controller/QrCodeController.java new file mode 100644 index 0000000..c967074 --- /dev/null +++ b/system/src/main/java/com/yyy/system/controller/QrCodeController.java @@ -0,0 +1,37 @@ +package com.yyy.system.controller; + +import com.yyy.common.core.qr.QrCodeManageAction; +import com.yyy.common.utils.common.DateUtils; +import com.yyy.system.entity.pojo.EamAsset; +import com.yyy.system.service.EamAssetService; +import com.yyy.system.service.UmsOrganizationService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletResponse; + +@RestController +@Api(tags = "资产信息二维码") +@RequestMapping("api/qr") +public class QrCodeController { + + @Autowired + EamAssetService eamAssetService; + + @Autowired + UmsOrganizationService umsOrganizationService; + + @Autowired + QrCodeManageAction qrCodeManageAction; + + @PostMapping("/generate") + @ApiOperation(value = "生成资产二维码") + public void generate(Long id, HttpServletResponse httpServletResponse) { + EamAsset asset = eamAssetService.getById(id); + qrCodeManageAction.printQr(asset.getName(), asset.getAssetCode(), DateUtils.parseDateToStr("yyyy-MM-dd", asset.getCreateTime()), asset.get_useOrganization() != null ? asset.get_useOrganization().getOrganizationName() : null, httpServletResponse); + } +} diff --git a/system/src/main/java/com/yyy/system/entity/dto/EamAssetDto.java b/system/src/main/java/com/yyy/system/entity/dto/EamAssetDto.java new file mode 100644 index 0000000..d13cf86 --- /dev/null +++ b/system/src/main/java/com/yyy/system/entity/dto/EamAssetDto.java @@ -0,0 +1,152 @@ +package com.yyy.system.entity.dto; + +import java.util.Date; +import java.io.Serializable; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.AllArgsConstructor; +import lombok.NoArgsConstructor; +import lombok.Builder; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +@ApiModel("资产信息表(EamAssetDto)传输数据类") +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class EamAssetDto implements Serializable { + private static final long serialVersionUID = 624832407722399706L; + + @ApiModelProperty(notes = "主键") + private Long assetId; + + @ApiModelProperty(notes = "资产名称", required = true) + @NotBlank(message = "资产名称不能为空") + private String name; + + @ApiModelProperty(notes = "资产分类编号") + private Long categoryId; + + @ApiModelProperty(notes = "仓库id") + private Long warehouseId; + + @ApiModelProperty(notes = "所属公司", required = true) + @NotNull(message = "所属公司不能为空") + private Long ownCompanyId; + + @ApiModelProperty(notes = "资产状态(0-闲置 1-在用 2-借用中 3-维修中 4-调拨中 5-待报废 6-已处置 7-库存 8-已报废)", required = true) + @NotNull(message = "资产状态不能为空") + private Integer status; + + @ApiModelProperty(notes = "使用组织") + private Long useOrganizationId; + + @ApiModelProperty(notes = "资产来源(0-捐赠 1-赠送 2-其他 3-采购 4-自建 5-自购)") + private Integer sourceId; + + @ApiModelProperty(notes = "管理人员id") + private Long manager; + + @ApiModelProperty(notes = "供应商id") + private Long supplierVendorId; + + @ApiModelProperty(notes = "资产厂商id") + private Long manufacturersVendorId; + + @ApiModelProperty(notes = "规格型号") + private String model; + + @ApiModelProperty(notes = "序列号") + private String serialNumber; + + @ApiModelProperty(notes = "使用人员id") + private Long useUserId; + + @ApiModelProperty(notes = "用途") + private String purpose; + + @ApiModelProperty(notes = "存放位置id") + private Long positionId; + + @ApiModelProperty(notes = "计量单位") + private String unit; + + @ApiModelProperty(notes = "详细位置") + private String positionDetail; + + @ApiModelProperty(notes = "资产备注") + private String notes; + + @ApiModelProperty(notes = "资产附件") + private String attachment; + + @ApiModelProperty(notes = "维保信息_维保厂商id") + private Long maintenanceVendor; + + @ApiModelProperty(notes = "维保信息_联系人id") + private String contactor; + + @ApiModelProperty(notes = "维保信息_维保开始") + private Date maintenanceStartDate; + + @ApiModelProperty(notes = "维保信息_维保状态(0-不需要 1-脱保 2-在保 3-未知)") + private Integer maintenanceStatus; + + @ApiModelProperty(notes = "维保信息_联系方式") + private String contact; + + @ApiModelProperty(notes = "维保信息_维保到期") + private Date maintenanceEndDate; + + @ApiModelProperty(notes = "维保信息_负责人id") + private String responsiblePerson; + + @ApiModelProperty(notes = "维保信息_维保方式(0-原厂 1-第三方)") + private Integer maintenanceType; + + @ApiModelProperty(notes = "维保信息_建议维保方式(0-原厂 1-第三方)") + private Integer suggestMaintenanceType; + + @ApiModelProperty(notes = "维保信息_维保备注") + private String maintenanceNotes; + + @ApiModelProperty(notes = "维保信息_维保附件") + private String maintenanceAttachment; + + @ApiModelProperty(notes = "财务信息_财务分类id") + private Long financialCategoryId; + + @ApiModelProperty(notes = "财务信息_费用项目id") + private Long expenseItem; + + @ApiModelProperty(notes = "财务信息_未税成本") + private Double totalAmountPrice; + + @ApiModelProperty(notes = "财务信息_客户信息") + private String customerInfo; + + @ApiModelProperty(notes = "财务信息_资产税额") + private Double taxAmountRate; + + @ApiModelProperty(notes = "财务信息_入账日期") + private Date registerDate; + + @ApiModelProperty(notes = "财务信息_财务选项id") + private Long financialOption; + + @ApiModelProperty(notes = "财务信息_资产净值") + private Double navPrice; + + @ApiModelProperty(notes = "财务信息_残值率") + private Double residualsRate; + + @ApiModelProperty(notes = "财务信息_财务备注") + private String financialNotes; + + @ApiModelProperty(notes = "财务信息_附件") + private String financialAttachment; +} diff --git a/system/src/main/java/com/yyy/system/entity/dto/EamAssetLogDto.java b/system/src/main/java/com/yyy/system/entity/dto/EamAssetLogDto.java new file mode 100644 index 0000000..8dd0a5e --- /dev/null +++ b/system/src/main/java/com/yyy/system/entity/dto/EamAssetLogDto.java @@ -0,0 +1,35 @@ +package com.yyy.system.entity.dto; + +import java.io.Serializable; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.AllArgsConstructor; +import lombok.NoArgsConstructor; +import lombok.Builder; + +@ApiModel("资产操作日志(EamAssetLogDto)传输数据类") +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class EamAssetLogDto implements Serializable { + private static final long serialVersionUID = 253739933368791772L; + + @ApiModelProperty(notes = "主键") + private Long id; + + @ApiModelProperty(notes = "业务编号") + private String businessId; + + @ApiModelProperty(notes = "操作类型") + private String operationType; + + @ApiModelProperty(notes = "操作内容") + private String operationNotes; + + @ApiModelProperty(notes = "关联资产编号") + private Long assetId; + +} diff --git a/system/src/main/java/com/yyy/system/entity/dto/EamAssetQueryDto.java b/system/src/main/java/com/yyy/system/entity/dto/EamAssetQueryDto.java new file mode 100644 index 0000000..4598a6d --- /dev/null +++ b/system/src/main/java/com/yyy/system/entity/dto/EamAssetQueryDto.java @@ -0,0 +1,64 @@ +package com.yyy.system.entity.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +@ApiModel("资产信息查询参数") +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class EamAssetQueryDto implements Serializable { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(notes = "资产编号") + private String assetCode; + + @ApiModelProperty(notes = "资产名称") + private String name; + + @ApiModelProperty(notes = "供应商id") + private Long supplierVendorId; + + @ApiModelProperty(notes = "仓库id") + private Long warehouseId; + + @ApiModelProperty(notes = "资产分类编号") + private Long categoryId; + + @ApiModelProperty(notes = "所属公司") + private Long ownCompanyId; + + @ApiModelProperty(notes = "资产状态(0-闲置 1-在用 2-借用中 3-维修中 4-调拨中 5-待报废 6-已处置 7-库存 8-已报废)") + private Integer status; + + @ApiModelProperty(notes = "使用组织") + private Long useOrganizationId; + + @ApiModelProperty(notes = "资产来源(0-捐赠 1-赠送 2-其他 3-采购 4-自建 5-自购)") + private Integer sourceId; + + @ApiModelProperty(notes = "管理人员id") + private Long manager; + + @ApiModelProperty(notes = "资产厂商id") + private Long manufacturersVendorId; + + @ApiModelProperty(notes = "规格型号") + private String model; + + @ApiModelProperty(notes = "序列号") + private String serialNumber; + + @ApiModelProperty(notes = "使用人员id") + private Long useUserId; + + @ApiModelProperty(notes = "存放位置id") + private Long positionId; +} diff --git a/system/src/main/java/com/yyy/system/entity/dto/EamBasicCategoryDto.java b/system/src/main/java/com/yyy/system/entity/dto/EamBasicCategoryDto.java new file mode 100644 index 0000000..94b2021 --- /dev/null +++ b/system/src/main/java/com/yyy/system/entity/dto/EamBasicCategoryDto.java @@ -0,0 +1,45 @@ +package com.yyy.system.entity.dto; + +import java.io.Serializable; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.AllArgsConstructor; +import lombok.NoArgsConstructor; +import lombok.Builder; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +@ApiModel("资产分类信息表(EamBasicCategoryDto)传输数据类") +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class EamBasicCategoryDto implements Serializable { + private static final long serialVersionUID = -59694793087911227L; + + @ApiModelProperty(notes = "资产分类编号") + private Long categoryId; + + @ApiModelProperty(notes = "资产分类名称", required = true) + @NotBlank(message = "资产分类名称不能为空") + private String categoryName; + + @ApiModelProperty(notes = "深度") + private String depth; + + @ApiModelProperty(notes = "父节点", required = true) + @NotNull(message = "父节点不能为空") + private Long parentId; + + @ApiModelProperty(notes = "安全库存上限") + private Integer upperLimit; + + @ApiModelProperty(notes = "安全库存下限") + private Integer lowerLimit; + + @ApiModelProperty(notes = "安全库存") + private Integer safetyLimit; +} diff --git a/system/src/main/java/com/yyy/system/entity/dto/EamBasicFinancialCategoryDto.java b/system/src/main/java/com/yyy/system/entity/dto/EamBasicFinancialCategoryDto.java new file mode 100644 index 0000000..49bc0bb --- /dev/null +++ b/system/src/main/java/com/yyy/system/entity/dto/EamBasicFinancialCategoryDto.java @@ -0,0 +1,42 @@ +package com.yyy.system.entity.dto; + +import java.io.Serializable; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.AllArgsConstructor; +import lombok.NoArgsConstructor; +import lombok.Builder; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +@ApiModel("财务分类信息表(EamBasicFinancialCategoryDto)传输数据类") +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class EamBasicFinancialCategoryDto implements Serializable { + private static final long serialVersionUID = -96247475943876218L; + + @ApiModelProperty(notes = "财务分类id") + private Long financialCategoryId; + + @ApiModelProperty(notes = "财务分类名称", required = true) + @NotBlank(message = "财务分类名称不能为空") + private String financialCategoryName; + + @ApiModelProperty(notes = "深度") + private String depth; + + @ApiModelProperty(notes = "父节点") + private Long parentId; + + @ApiModelProperty(notes = "使用期限(月)", required = true) + @NotNull(message = "使用期限不能为空") + private Integer useTerms; + + @ApiModelProperty(notes = "备注") + private String notes; +} diff --git a/system/src/main/java/com/yyy/system/entity/dto/EamBasicMaintenanceVendorDto.java b/system/src/main/java/com/yyy/system/entity/dto/EamBasicMaintenanceVendorDto.java new file mode 100644 index 0000000..3d851ef --- /dev/null +++ b/system/src/main/java/com/yyy/system/entity/dto/EamBasicMaintenanceVendorDto.java @@ -0,0 +1,52 @@ +package com.yyy.system.entity.dto; + +import java.io.Serializable; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.AllArgsConstructor; +import lombok.NoArgsConstructor; +import lombok.Builder; + +import javax.validation.constraints.NotBlank; + +@ApiModel("维保商(EamBasicMaintenanceVendorDto)传输数据类") +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class EamBasicMaintenanceVendorDto implements Serializable { + private static final long serialVersionUID = -53152788236374946L; + + @ApiModelProperty(notes = "主键") + private Long maintenanceVendorId; + + @ApiModelProperty(notes = "名称", required = true) + @NotBlank(message = "名称不能为空") + private String name; + + @ApiModelProperty(notes = "编码") + private String code; + + @ApiModelProperty(notes = "统一社会信用代码") + private String uscc; + + @ApiModelProperty(notes = "售后联系人") + private String afterSalesContactor; + + @ApiModelProperty(notes = "售后联系方式") + private String afterSalesContact; + + @ApiModelProperty(notes = "商务联系人") + private String businessContactor; + + @ApiModelProperty(notes = "商务联系方式") + private String businessContact; + + @ApiModelProperty(notes = "地址") + private String address; + + @ApiModelProperty(notes = "备注") + private String notes; +} diff --git a/system/src/main/java/com/yyy/system/entity/dto/EamBasicManufacturersVendorDto.java b/system/src/main/java/com/yyy/system/entity/dto/EamBasicManufacturersVendorDto.java new file mode 100644 index 0000000..efa0687 --- /dev/null +++ b/system/src/main/java/com/yyy/system/entity/dto/EamBasicManufacturersVendorDto.java @@ -0,0 +1,38 @@ +package com.yyy.system.entity.dto; + +import java.io.Serializable; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.AllArgsConstructor; +import lombok.NoArgsConstructor; +import lombok.Builder; + +import javax.validation.constraints.NotBlank; + +@ApiModel("生产商(EamBasicManufacturersVendorDto)传输数据类") +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class EamBasicManufacturersVendorDto implements Serializable { + private static final long serialVersionUID = 744965564771222550L; + + @ApiModelProperty(notes = "主键") + private Long manufacturersVendorId; + + @ApiModelProperty(notes = "名称", required = true) + @NotBlank(message = "名称不能为空") + private String name; + + @ApiModelProperty(notes = "编码") + private String code; + + @ApiModelProperty(notes = "地址") + private String address; + + @ApiModelProperty(notes = "备注") + private String notes; + +} diff --git a/system/src/main/java/com/yyy/system/entity/dto/EamBasicPositionDto.java b/system/src/main/java/com/yyy/system/entity/dto/EamBasicPositionDto.java new file mode 100644 index 0000000..fa18c81 --- /dev/null +++ b/system/src/main/java/com/yyy/system/entity/dto/EamBasicPositionDto.java @@ -0,0 +1,36 @@ +package com.yyy.system.entity.dto; + +import java.io.Serializable; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.AllArgsConstructor; +import lombok.NoArgsConstructor; +import lombok.Builder; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +@ApiModel("存放位置信息表(EamBasicPositionDto)传输数据类") +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class EamBasicPositionDto implements Serializable { + private static final long serialVersionUID = 584237642356107675L; + + @ApiModelProperty(notes = "资产分类编号") + private Long positionId; + + @ApiModelProperty(notes = "资产分类名称", required = true) + @NotBlank(message = "名称不能为空") + private String name; + + @ApiModelProperty(notes = "深度") + private String depth; + + @ApiModelProperty(notes = "父节点", required = true) + @NotNull(message = "父节点不能为空") + private Long parentId; +} diff --git a/system/src/main/java/com/yyy/system/entity/dto/EamBasicSupplierVendorDto.java b/system/src/main/java/com/yyy/system/entity/dto/EamBasicSupplierVendorDto.java new file mode 100644 index 0000000..d1e27bf --- /dev/null +++ b/system/src/main/java/com/yyy/system/entity/dto/EamBasicSupplierVendorDto.java @@ -0,0 +1,52 @@ +package com.yyy.system.entity.dto; + +import java.io.Serializable; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.AllArgsConstructor; +import lombok.NoArgsConstructor; +import lombok.Builder; + +import javax.validation.constraints.NotBlank; + +@ApiModel("供应商(EamBasicSupplierVendorDto)传输数据类") +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class EamBasicSupplierVendorDto implements Serializable { + private static final long serialVersionUID = 775453042990179749L; + + @ApiModelProperty(notes = "主键") + private Long supplierVendorId; + + @ApiModelProperty(notes = "名称", required = true) + @NotBlank(message = "名称不能为空") + private String name; + + @ApiModelProperty(notes = "编码") + private String code; + + @ApiModelProperty(notes = "统一社会信用代码") + private String uscc; + + @ApiModelProperty(notes = "售后联系人") + private String afterSalesContactor; + + @ApiModelProperty(notes = "售后联系方式") + private String afterSalesContact; + + @ApiModelProperty(notes = "商务联系人") + private String businessContactor; + + @ApiModelProperty(notes = "商务联系方式") + private String businessContact; + + @ApiModelProperty(notes = "地址") + private String address; + + @ApiModelProperty(notes = "备注") + private String notes; +} diff --git a/system/src/main/java/com/yyy/system/entity/dto/EamBasicWarehouseDto.java b/system/src/main/java/com/yyy/system/entity/dto/EamBasicWarehouseDto.java new file mode 100644 index 0000000..9634eee --- /dev/null +++ b/system/src/main/java/com/yyy/system/entity/dto/EamBasicWarehouseDto.java @@ -0,0 +1,32 @@ +package com.yyy.system.entity.dto; + +import java.io.Serializable; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.AllArgsConstructor; +import lombok.NoArgsConstructor; +import lombok.Builder; + +import javax.validation.constraints.NotBlank; + +@ApiModel("仓库信息表(EamBasicWarehouseDto)传输数据类") +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class EamBasicWarehouseDto implements Serializable { + private static final long serialVersionUID = 675397200931880870L; + + @ApiModelProperty(notes = "仓库编号") + private Long warehouseId; + + @ApiModelProperty(notes = "仓库名称", required = true) + @NotBlank(message = "名称不能为空") + private String name; + + @ApiModelProperty(notes = "状态(0:启用/1:禁用)") + private Integer status; + +} diff --git a/system/src/main/java/com/yyy/system/entity/dto/EamBusinessAllocateDto.java b/system/src/main/java/com/yyy/system/entity/dto/EamBusinessAllocateDto.java new file mode 100644 index 0000000..7877963 --- /dev/null +++ b/system/src/main/java/com/yyy/system/entity/dto/EamBusinessAllocateDto.java @@ -0,0 +1,63 @@ +package com.yyy.system.entity.dto; + +import java.util.Date; +import java.io.Serializable; +import java.util.List; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.AllArgsConstructor; +import lombok.NoArgsConstructor; +import lombok.Builder; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +@ApiModel("调拨信息表(EamBusinessAllocateDto)传输数据类") +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class EamBusinessAllocateDto implements Serializable { + private static final long serialVersionUID = -63102138206363679L; + + @ApiModelProperty(notes = "主键") + private Long id; + + @ApiModelProperty(notes = "业务编号") + private String businessId; + + @ApiModelProperty(notes = "业务名称", required = true) + @NotBlank(message = "名称不能为空") + private String name; + + @ApiModelProperty(notes = "状态(0-草稿、1-已完成、2-拒绝、3-审批中、4-取消)") + private Integer status; + + @ApiModelProperty(notes = "申请人") + private Long applicant; + +// @ApiModelProperty(notes = "资产编号List") +// private String assetIdList; + + @ApiModelProperty(notes = "资产库存信息List") + private List assetIdList; + + @ApiModelProperty(notes = "业务生成日期") + private Date businessGeneratedDate; + + @ApiModelProperty(notes = "备注") + private String notes; + + @ApiModelProperty(notes = "附件") + private String attach; + + @ApiModelProperty(notes = "调出仓库(去掉不作填写)") + private Long outWarehouseId; + + @ApiModelProperty(notes = "调入仓库") + @NotNull(message = "调入仓库id不能为空") + private Long inWarehouseId; + +} diff --git a/system/src/main/java/com/yyy/system/entity/dto/EamBusinessBorrowDto.java b/system/src/main/java/com/yyy/system/entity/dto/EamBusinessBorrowDto.java new file mode 100644 index 0000000..0975738 --- /dev/null +++ b/system/src/main/java/com/yyy/system/entity/dto/EamBusinessBorrowDto.java @@ -0,0 +1,64 @@ +package com.yyy.system.entity.dto; + +import java.util.Date; +import java.io.Serializable; +import java.util.List; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.AllArgsConstructor; +import lombok.NoArgsConstructor; +import lombok.Builder; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +@ApiModel("借用信息表(EamBusinessBorrowDto)传输数据类") +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class EamBusinessBorrowDto implements Serializable { + private static final long serialVersionUID = -50651710099451649L; + + @ApiModelProperty(notes = "主键") + private Long id; + + @ApiModelProperty(notes = "业务编号") + private String businessId; + + @ApiModelProperty(notes = "业务名称", required = true) + @NotBlank(message = "名称不能为空") + private String name; + + @ApiModelProperty(notes = "状态(0-草稿、1-已完成、2-拒绝、3-审批中、4-取消)") + private Integer status; + + @ApiModelProperty(notes = "申请人") + private Long applicant; + +// @ApiModelProperty(notes = "资产编号List") +// private String assetIdList; + + @ApiModelProperty(notes = "资产库存信息List") + private List assetIdList; + + @ApiModelProperty(notes = "业务生成日期") + private Date businessGeneratedDate; + + @ApiModelProperty(notes = "备注") + private String notes; + + @ApiModelProperty(notes = "附件") + private String attach; + + @ApiModelProperty(notes = "借用人", required = true) + @NotNull(message = "借用人信息不能为空") + private Long useUserId; + + @ApiModelProperty(notes = "预计归还时间", required = true) + @NotNull(message = "预计归还时间不能为空") + private Date returnTime; + +} diff --git a/system/src/main/java/com/yyy/system/entity/dto/EamBusinessCollectionDto.java b/system/src/main/java/com/yyy/system/entity/dto/EamBusinessCollectionDto.java new file mode 100644 index 0000000..d5f91ca --- /dev/null +++ b/system/src/main/java/com/yyy/system/entity/dto/EamBusinessCollectionDto.java @@ -0,0 +1,70 @@ +package com.yyy.system.entity.dto; + +import java.util.Date; +import java.io.Serializable; +import java.util.List; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.AllArgsConstructor; +import lombok.NoArgsConstructor; +import lombok.Builder; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +@ApiModel("资产领用信息表(EamBusinessCollectionDto)传输数据类") +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class EamBusinessCollectionDto implements Serializable { + private static final long serialVersionUID = 662482349128319495L; + + @ApiModelProperty(notes = "主键") + private Long id; + + @ApiModelProperty(notes = "业务编号") + private String businessId; + + @ApiModelProperty(notes = "业务名称", required = true) + @NotBlank(message = "名称不能为空") + private String name; + + @ApiModelProperty(notes = "状态(0-草稿、1-已完成、2-拒绝、3-审批中、4-取消)") + private Integer status; + + @ApiModelProperty(notes = "申请人id") + private Long applicant; + +// @ApiModelProperty(notes = "资产编号List") +// private String assetIdList; + + @ApiModelProperty(notes = "资产库存信息List") + private List assetIdList; + + @ApiModelProperty(notes = "业务生成日期") + private Date businessGeneratedDate; + + @ApiModelProperty(notes = "备注") + private String notes; + + @ApiModelProperty(notes = "附件") + private String attach; + + @ApiModelProperty(notes = "领用后公司/部门", required = true) + @NotNull(message = "领用后公司/部门信息不能为空") + private Long useOrganizationId; + + @ApiModelProperty(notes = "领用后存放位置") + private Long positionId; + + @ApiModelProperty(notes = "使用人员id", required = true) + @NotNull(message = "使用人员信息不能为空") + private Long useUserId; + + @ApiModelProperty(notes = "详细位置") + private String positionDetail; + +} diff --git a/system/src/main/java/com/yyy/system/entity/dto/EamBusinessOutboundDto.java b/system/src/main/java/com/yyy/system/entity/dto/EamBusinessOutboundDto.java new file mode 100644 index 0000000..d3ecc54 --- /dev/null +++ b/system/src/main/java/com/yyy/system/entity/dto/EamBusinessOutboundDto.java @@ -0,0 +1,86 @@ +package com.yyy.system.entity.dto; + +import java.util.Date; +import java.io.Serializable; +import java.util.List; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.AllArgsConstructor; +import lombok.NoArgsConstructor; +import lombok.Builder; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +@ApiModel("出库信息表(EamBusinessOutboundDto)传输数据类") +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class EamBusinessOutboundDto implements Serializable { + private static final long serialVersionUID = -27411236665281266L; + + @ApiModelProperty(notes = "主键") + private Long id; + + @ApiModelProperty(notes = "业务编号") + private String businessId; + + @ApiModelProperty(notes = "业务名称", required = true) + @NotBlank(message = "名称不能为空") + private String name; + + @ApiModelProperty(notes = "关联仓库id", required = true) + @NotNull(message = "关联仓库信息不能为空") + private Long warehouseId; + +// @ApiModelProperty(notes = "资产编号List") +// private String assetIdList; + + @ApiModelProperty(notes = "资产库存信息List") + private List assetIdList; + + @ApiModelProperty(notes = "业务生成日期") + private Date businessGeneratedDate; + + @ApiModelProperty(notes = "备注") + private String notes; + + @ApiModelProperty(notes = "附件") + private String attach; + + @ApiModelProperty(notes = "状态(0-草稿、1-已完成、2-拒绝、3-审批中、4-取消)") + private Integer status; + + @ApiModelProperty(notes = "创建人") + private Long createUser; + + @ApiModelProperty(notes = "创建时间") + private Date createTime; + + @ApiModelProperty(notes = "修改人") + private Long updateUser; + + @ApiModelProperty(notes = "修改时间") + private Date updateTime; + + @ApiModelProperty(notes = "是否删除(0:正常/1:删除)") + private Integer isDeleted; + + @ApiModelProperty(notes = "领用公司", required = true) + @NotNull(message = "领用公司信息不能为空") + private Long ownCompanyId; + + @ApiModelProperty(notes = "领用部门", required = true) + @NotNull(message = "领用部门信息不能为空") + private Long useOrganizationId; + + @ApiModelProperty(notes = "领用人员") + private Long useUserId; + + @ApiModelProperty(notes = "出库位置") + private String positionDetail; + +} diff --git a/system/src/main/java/com/yyy/system/entity/dto/EamBusinessRegistrationDto.java b/system/src/main/java/com/yyy/system/entity/dto/EamBusinessRegistrationDto.java new file mode 100644 index 0000000..c8f2850 --- /dev/null +++ b/system/src/main/java/com/yyy/system/entity/dto/EamBusinessRegistrationDto.java @@ -0,0 +1,59 @@ +package com.yyy.system.entity.dto; + +import java.util.Date; +import java.io.Serializable; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.AllArgsConstructor; +import lombok.NoArgsConstructor; +import lombok.Builder; + +import javax.validation.constraints.NotBlank; + +@ApiModel("资产登记信息表(EamBusinessRegistrationDto)传输数据类") +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class EamBusinessRegistrationDto implements Serializable { + private static final long serialVersionUID = 889250606055899345L; + + @ApiModelProperty(notes = "主键") + private Long id; + + @ApiModelProperty(notes = "业务编号") + private String businessId; + + @ApiModelProperty(notes = "业务名称", required = true) + @NotBlank(message = "名称不能为空") + private String name; + + @ApiModelProperty(notes = "申请人id") + private Long applicant; + + @ApiModelProperty(notes = "状态(0-草稿、1-已完成、2-拒绝、3-审批中、4-取消)") + private Integer status; + + @ApiModelProperty(notes = "资产id") + private Long assetId; + + private String config; + + @ApiModelProperty(notes = "创建人") + private Long createUser; + + @ApiModelProperty(notes = "创建时间") + private Date createTime; + + @ApiModelProperty(notes = "修改人") + private Long updateUser; + + @ApiModelProperty(notes = "修改时间") + private Date updateTime; + + @ApiModelProperty(notes = "是否删除(0:正常/1:删除)") + private Integer isDeleted; + +} diff --git a/system/src/main/java/com/yyy/system/entity/dto/EamBusinessRetirementDto.java b/system/src/main/java/com/yyy/system/entity/dto/EamBusinessRetirementDto.java new file mode 100644 index 0000000..e750e37 --- /dev/null +++ b/system/src/main/java/com/yyy/system/entity/dto/EamBusinessRetirementDto.java @@ -0,0 +1,61 @@ +package com.yyy.system.entity.dto; + +import java.util.Date; +import java.io.Serializable; +import java.util.List; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.AllArgsConstructor; +import lombok.NoArgsConstructor; +import lombok.Builder; + +import javax.validation.constraints.NotBlank; + +@ApiModel("资产报废(EamBusinessRetirementDto)传输数据类") +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class EamBusinessRetirementDto implements Serializable { + private static final long serialVersionUID = -31290923290228685L; + + @ApiModelProperty(notes = "主键") + private Long id; + + @ApiModelProperty(notes = "业务编号") + private String businessId; + + @ApiModelProperty(notes = "业务名称", required = true) + @NotBlank(message = "名称不能为空") + private String name; + + @ApiModelProperty(notes = "申请人id") + private Long applicant; + +// @ApiModelProperty(notes = "资产编号List") +// private String assetIdList; + + @ApiModelProperty(notes = "资产库存信息List") + private List assetIdList; + + @ApiModelProperty(notes = "业务生成日期") + private Date businessGeneratedDate; + + @ApiModelProperty(notes = "备注") + private String notes; + + @ApiModelProperty(notes = "附件") + private String attach; + + @ApiModelProperty(notes = "状态(0-草稿、1-已完成、2-拒绝、3-审批中、4-取消)") + private Integer status; + + @ApiModelProperty(notes = "报废方式") + private String type; + + @ApiModelProperty(notes = "加急状态(0-普通、1:加急)") + private Integer expeditedStatus; + +} diff --git a/system/src/main/java/com/yyy/system/entity/dto/EamBusinessReturnDto.java b/system/src/main/java/com/yyy/system/entity/dto/EamBusinessReturnDto.java new file mode 100644 index 0000000..92f98d2 --- /dev/null +++ b/system/src/main/java/com/yyy/system/entity/dto/EamBusinessReturnDto.java @@ -0,0 +1,64 @@ +package com.yyy.system.entity.dto; + +import java.util.Date; +import java.io.Serializable; +import java.util.List; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.AllArgsConstructor; +import lombok.NoArgsConstructor; +import lombok.Builder; + +import javax.validation.constraints.NotBlank; + +@ApiModel("归还信息表(EamBusinessReturnDto)传输数据类") +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class EamBusinessReturnDto implements Serializable { + private static final long serialVersionUID = 400513398547554828L; + + @ApiModelProperty(notes = "主键") + private Long id; + + @ApiModelProperty(notes = "业务编号") + private String businessId; + + @ApiModelProperty(notes = "业务名称", required = true) + @NotBlank(message = "名称不能为空") + private String name; + + @ApiModelProperty(notes = "状态(0-草稿、1-已完成、2-拒绝、3-审批中、4-取消)") + private Integer status; + + @ApiModelProperty(notes = "申请人id") + private Long applicant; + + @ApiModelProperty(notes = "资产库存信息List") + private List assetIdList; + + @ApiModelProperty(notes = "业务生成日期") + private Date businessGeneratedDate; + + @ApiModelProperty(notes = "备注") + private String notes; + + @ApiModelProperty(notes = "附件") + private String attach; + + @ApiModelProperty(notes = "存放位置id") + private Long positionId; + + @ApiModelProperty(notes = "详细位置") + private String positionDetail; + + @ApiModelProperty(notes = "管理人员id") + private Long manager; + + @ApiModelProperty(notes = "使用人员id") + private Long useUserId; + +} diff --git a/system/src/main/java/com/yyy/system/entity/dto/EamBusinessReturnInventoryDto.java b/system/src/main/java/com/yyy/system/entity/dto/EamBusinessReturnInventoryDto.java new file mode 100644 index 0000000..1909dc4 --- /dev/null +++ b/system/src/main/java/com/yyy/system/entity/dto/EamBusinessReturnInventoryDto.java @@ -0,0 +1,71 @@ +package com.yyy.system.entity.dto; + +import java.util.Date; +import java.io.Serializable; +import java.util.List; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.AllArgsConstructor; +import lombok.NoArgsConstructor; +import lombok.Builder; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +@ApiModel("退库信息表(EamBusinessReturnInventoryDto)传输数据类") +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class EamBusinessReturnInventoryDto implements Serializable { + private static final long serialVersionUID = -83712703020240753L; + + @ApiModelProperty(notes = "主键") + private Long id; + + @ApiModelProperty(notes = "业务编号") + private String businessId; + + @ApiModelProperty(notes = "业务名称", required = true) + @NotBlank(message = "名称不能为空") + private String name; + + @ApiModelProperty(notes = "状态(0-草稿、1-已完成、2-拒绝、3-审批中、4-取消)") + private Integer status; + + @ApiModelProperty(notes = "申请人") + private Long applicant; + +// @ApiModelProperty(notes = "资产编号List") +// private String assetIdList; + + @ApiModelProperty(notes = "资产库存信息List") + private List assetIdList; + + @ApiModelProperty(notes = "业务生成日期") + private Date businessGeneratedDate; + + @ApiModelProperty(notes = "备注") + private String notes; + + @ApiModelProperty(notes = "附件") + private String attach; + + @ApiModelProperty(notes = "领用后公司/部门id", required = true) + @NotNull(message = "领用后公司/部门信息不能为空") + private Long useOrganizationId; + + @ApiModelProperty(notes = "领用后存放位置id", required = true) + @NotNull(message = "领用后存放位置信息不能为空") + private Long positionId; + + @ApiModelProperty(notes = "详细位置id") + private String positionDetail; + + @ApiModelProperty(notes = "关联仓库id", required = true) + @NotNull(message = "关联仓库信息不能为空") + private Long warehouseId; + +} diff --git a/system/src/main/java/com/yyy/system/entity/dto/EamBusinessStorageDto.java b/system/src/main/java/com/yyy/system/entity/dto/EamBusinessStorageDto.java new file mode 100644 index 0000000..b933147 --- /dev/null +++ b/system/src/main/java/com/yyy/system/entity/dto/EamBusinessStorageDto.java @@ -0,0 +1,68 @@ +package com.yyy.system.entity.dto; + +import java.util.Date; +import java.io.Serializable; +import java.util.List; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.AllArgsConstructor; +import lombok.NoArgsConstructor; +import lombok.Builder; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +@ApiModel("入库信息表(EamBusinessStorageDto)传输数据类") +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class EamBusinessStorageDto implements Serializable { + private static final long serialVersionUID = 256130598975168804L; + + @ApiModelProperty(notes = "主键") + private Long id; + + @ApiModelProperty(notes = "业务编号") + private String businessId; + + @ApiModelProperty(notes = "业务名称", required = true) + @NotBlank(message = "领用后公司/部门信息不能为空") + private String name; + + @ApiModelProperty(notes = "状态(0-草稿、1-已完成、2-拒绝、3-审批中、4-取消)") + private Integer status; + + @ApiModelProperty(notes = "关联仓库id", required = true) + @NotNull(message = "仓库信息不能为空") + private Long warehouseId; + +// @ApiModelProperty(notes = "资产编号List") +// private String assetIdList; + + @ApiModelProperty(notes = "资产库存信息List") + private List assetIdList; + + @ApiModelProperty(notes = "业务生成日期") + private Date businessGeneratedDate; + + @ApiModelProperty(notes = "备注") + private String notes; + + @ApiModelProperty(notes = "附件") + private String attach; + + @ApiModelProperty(notes = "管理人员id") + private Long manager; + + @ApiModelProperty(notes = "存放位置id") + private Long positionId; + + @ApiModelProperty(notes = "供应商id") + private Long supplierVendorId; + + @ApiModelProperty(notes = "购置日期") + private Date createTime; +} diff --git a/system/src/main/java/com/yyy/system/entity/dto/EamBusinessTransferDto.java b/system/src/main/java/com/yyy/system/entity/dto/EamBusinessTransferDto.java new file mode 100644 index 0000000..68b62db --- /dev/null +++ b/system/src/main/java/com/yyy/system/entity/dto/EamBusinessTransferDto.java @@ -0,0 +1,72 @@ +package com.yyy.system.entity.dto; + +import java.util.Date; +import java.io.Serializable; +import java.util.List; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.AllArgsConstructor; +import lombok.NoArgsConstructor; +import lombok.Builder; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +@ApiModel("资产转移信息表(EamBusinessTransferDto)传输数据类") +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class EamBusinessTransferDto implements Serializable { + private static final long serialVersionUID = 509476249445368630L; + + @ApiModelProperty(notes = "主键") + private Long id; + + @ApiModelProperty(notes = "业务编号") + private String businessId; + + @ApiModelProperty(notes = "业务名称", required = true) + @NotBlank(message = "名称不能为空") + private String name; + + @ApiModelProperty(notes = "状态(0-草稿、1-已完成、2-拒绝、3-审批中、4-取消)") + private Integer status; + + @ApiModelProperty(notes = "资产库存信息List") + private List assetIdList; + + @ApiModelProperty(notes = "业务生成日期") + private Date businessGeneratedDate; + + @ApiModelProperty(notes = "备注") + private String notes; + + @ApiModelProperty(notes = "附件") + private String attach; + + @ApiModelProperty(notes = "调出使用公司/部门id", required = true) + @NotNull(message = "调出使用公司/部门信息不能为空") + private Long outUseOrganizationId; + + @ApiModelProperty(notes = "调入使用公司/部门id", required = true) + @NotNull(message = "调入使用公司/部门信息不能为空") + private Long inUseOrganizationId; + + @ApiModelProperty(notes = "调入管理员id", required = true) + @NotNull(message = "调入管理员信息不能为空") + private Long managerId; + + @ApiModelProperty(notes = "使用人员id", required = true) + @NotNull(message = "使用人员信息不能为空") + private Long useUserId; + + @ApiModelProperty(notes = "存放位置id") + private Long positionId; + + @ApiModelProperty(notes = "详细位置") + private String positionDetail; + +} diff --git a/system/src/main/java/com/yyy/system/entity/dto/EamRepairDto.java b/system/src/main/java/com/yyy/system/entity/dto/EamRepairDto.java new file mode 100644 index 0000000..0e6ff7e --- /dev/null +++ b/system/src/main/java/com/yyy/system/entity/dto/EamRepairDto.java @@ -0,0 +1,52 @@ +package com.yyy.system.entity.dto; + +import java.util.Date; +import java.io.Serializable; +import java.util.List; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.AllArgsConstructor; +import lombok.NoArgsConstructor; +import lombok.Builder; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +@ApiModel("维修登记信息表(EamRepairDto)传输数据类") +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class EamRepairDto implements Serializable { + private static final long serialVersionUID = -74217844130364369L; + + @ApiModelProperty(notes = "主键") + private Long id; + + @ApiModelProperty(notes = "业务编号") + private String businessId; + + @ApiModelProperty(notes = "业务名称", required = true) + @NotBlank(message = "名称不能为空") + private String name; + + @ApiModelProperty(notes = "资产库存信息List") + private List assetIdList; + + @ApiModelProperty(notes = "备注") + private String notes; + + @ApiModelProperty(notes = "附件") + private String attach; + + @ApiModelProperty(notes = "计划完成时间", required = true) + @NotNull(message = "计划完成时间不能为空") + private Date plannedDate; + + @ApiModelProperty(notes = "保养计划(维修类型)id", required = true) + @NotNull(message = "保养计划(维修类型)不能为空") + private Long repairTypeId; + +} diff --git a/system/src/main/java/com/yyy/system/entity/dto/EamRepairFaultDto.java b/system/src/main/java/com/yyy/system/entity/dto/EamRepairFaultDto.java new file mode 100644 index 0000000..927ce28 --- /dev/null +++ b/system/src/main/java/com/yyy/system/entity/dto/EamRepairFaultDto.java @@ -0,0 +1,42 @@ +package com.yyy.system.entity.dto; + +import java.io.Serializable; +import java.util.List; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.AllArgsConstructor; +import lombok.NoArgsConstructor; +import lombok.Builder; + +import javax.validation.constraints.NotBlank; + +@ApiModel("故障信息表(EamRepairFaultDto)传输数据类") +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class EamRepairFaultDto implements Serializable { + private static final long serialVersionUID = 381025083859651223L; + + @ApiModelProperty(notes = "主键") + private Long faultId; + + @ApiModelProperty(notes = "名称", required = true) + @NotBlank(message = "名称不能为空") + private String name; + + @ApiModelProperty(notes = "图片url") + private String img; + + @ApiModelProperty(notes = "资产库存信息List") + private List assetIdList; + + @ApiModelProperty(notes = "附件") + private String attach; + + @ApiModelProperty(notes = "备注") + private String notes; + +} diff --git a/system/src/main/java/com/yyy/system/entity/dto/EamRepairTypeDto.java b/system/src/main/java/com/yyy/system/entity/dto/EamRepairTypeDto.java new file mode 100644 index 0000000..d34ba5b --- /dev/null +++ b/system/src/main/java/com/yyy/system/entity/dto/EamRepairTypeDto.java @@ -0,0 +1,34 @@ +package com.yyy.system.entity.dto; + +import java.io.Serializable; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.AllArgsConstructor; +import lombok.NoArgsConstructor; +import lombok.Builder; + +import javax.validation.constraints.NotBlank; + +@ApiModel("保养计划(维修类型)表(EamRepairTypeDto)传输数据类") +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class EamRepairTypeDto implements Serializable { + private static final long serialVersionUID = -36927849869321150L; + + @ApiModelProperty(notes = "主键") + private Long repairTypeId; + + @ApiModelProperty(notes = "名称", required = true) + @NotBlank(message = "名称不能为空") + private String name; + + @ApiModelProperty(notes = "配置信息") + private String config; + + @ApiModelProperty(notes = "备注") + private String notes; +} diff --git a/system/src/main/java/com/yyy/system/entity/dto/EamSparePartsDto.java b/system/src/main/java/com/yyy/system/entity/dto/EamSparePartsDto.java new file mode 100644 index 0000000..e17496d --- /dev/null +++ b/system/src/main/java/com/yyy/system/entity/dto/EamSparePartsDto.java @@ -0,0 +1,23 @@ +package com.yyy.system.entity.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@ApiModel("备品备件关联") +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class EamSparePartsDto { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(notes = "资产id") + private Long assetId; + + @ApiModelProperty(notes = "备品备件id") + private Long sparePartsId; +} diff --git a/system/src/main/java/com/yyy/system/entity/dto/EamStocktakingDetailsDto.java b/system/src/main/java/com/yyy/system/entity/dto/EamStocktakingDetailsDto.java new file mode 100644 index 0000000..9357856 --- /dev/null +++ b/system/src/main/java/com/yyy/system/entity/dto/EamStocktakingDetailsDto.java @@ -0,0 +1,43 @@ +package com.yyy.system.entity.dto; + +import java.io.Serializable; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.AllArgsConstructor; +import lombok.NoArgsConstructor; +import lombok.Builder; + +import javax.validation.constraints.NotNull; + +@ApiModel("盘点明细(EamStocktakingDetailsDto)传输数据类") +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class EamStocktakingDetailsDto implements Serializable { + private static final long serialVersionUID = 980010959180221430L; + + @ApiModelProperty(notes = "主键") + private Long id; + + @ApiModelProperty(notes = "盘点任务id") + private Long stocktakingJobId; + + @ApiModelProperty(notes = "盘点资产id") + private Long assetId; + + @ApiModelProperty(notes = "盘点状态(0-盘盈,1-盘亏,2-已盘点,3-带盘点,4-异常)") + @NotNull + private Integer status; + + private String img; + + @ApiModelProperty(notes = "附件") + private String attachment; + + @ApiModelProperty(notes = "备注") + private String notes; + +} diff --git a/system/src/main/java/com/yyy/system/entity/dto/EamStocktakingJobDto.java b/system/src/main/java/com/yyy/system/entity/dto/EamStocktakingJobDto.java new file mode 100644 index 0000000..6ab8986 --- /dev/null +++ b/system/src/main/java/com/yyy/system/entity/dto/EamStocktakingJobDto.java @@ -0,0 +1,87 @@ +package com.yyy.system.entity.dto; + +import java.util.Date; +import java.io.Serializable; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.AllArgsConstructor; +import lombok.NoArgsConstructor; +import lombok.Builder; + +import javax.validation.constraints.NotBlank; + +@ApiModel("盘点任务表(EamStocktakingJobDto)传输数据类") +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class EamStocktakingJobDto implements Serializable { + private static final long serialVersionUID = 554208677774088308L; + + @ApiModelProperty(notes = "主键") + private Long stocktakingJobId; + + @ApiModelProperty(notes = "业务名称", required = true) + @NotBlank(message = "名称不能为空") + private String name; + + @ApiModelProperty(notes = "负责人id") + private Long head; + + @ApiModelProperty(notes = "全员盘点(0-禁用,1-启用)") + private Integer fullStocktaking; + + @ApiModelProperty(notes = "盘点人id") + private Long stocktakingUserId; + + @ApiModelProperty(notes = "购置开始日期") + private Date stocktakingStartDate; + + @ApiModelProperty(notes = "购置结束日期") + private Date stocktakingEndDate; + + @ApiModelProperty(notes = "资产状态(0-闲置 1-在用 2-借用中 3-维修中 4-调拨中 5-待报废 6-已处置 7-库存 8-已报废)") + private Integer assetStatus; + + @ApiModelProperty(notes = "所属公司id") + private Long ownCompanyId; + + @ApiModelProperty(notes = "使用公司/部门id") + private Long useOrganizationId; + + @ApiModelProperty(notes = "保管人id") + private Long useUserId; + + @ApiModelProperty(notes = "资产分类id") + private Long categoryId; + + @ApiModelProperty(notes = "存放位置id") + private Long positionId; + + @ApiModelProperty(notes = "仓库id") + private Long warehouseId; + + @ApiModelProperty(notes = "盘点状态(0-未开始,1-进行中,2-取消,3-已完成)") + private Integer status; + + @ApiModelProperty(notes = "备注") + private String notes; + + @ApiModelProperty(notes = "创建人") + private Long createUser; + + @ApiModelProperty(notes = "创建时间") + private Date createTime; + + @ApiModelProperty(notes = "修改人") + private Long updateUser; + + @ApiModelProperty(notes = "修改时间") + private Date updateTime; + + @ApiModelProperty(notes = "是否删除(0:正常/1:删除)") + private Integer isDeleted; + +} diff --git a/system/src/main/java/com/yyy/system/entity/dto/EamStocktakingPlanDto.java b/system/src/main/java/com/yyy/system/entity/dto/EamStocktakingPlanDto.java new file mode 100644 index 0000000..80ecf61 --- /dev/null +++ b/system/src/main/java/com/yyy/system/entity/dto/EamStocktakingPlanDto.java @@ -0,0 +1,72 @@ +package com.yyy.system.entity.dto; + +import java.util.Date; +import java.io.Serializable; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.AllArgsConstructor; +import lombok.NoArgsConstructor; +import lombok.Builder; + +import javax.validation.constraints.NotBlank; + +@ApiModel("盘点计划信息(EamStocktakingPlanDto)传输数据类") +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class EamStocktakingPlanDto implements Serializable { + private static final long serialVersionUID = 816855296322664044L; + + @ApiModelProperty(notes = "主键") + private Long stocktakingPlanId; + + @ApiModelProperty(notes = "业务名称", required = true) + @NotBlank(message = "名称不能为空") + private String name; + + @ApiModelProperty(notes = "负责人id") + private Long head; + + @ApiModelProperty(notes = "全员盘点(0-禁用,1-启用)") + private Integer fullStocktaking; + + @ApiModelProperty(notes = "盘点人id") + private Long stocktakingUserId; + + @ApiModelProperty(notes = "购置开始日期") + private Date stocktakingStartDate; + + @ApiModelProperty(notes = "购置结束日期") + private Date stocktakingEndDate; + + @ApiModelProperty(notes = "资产状态(0-闲置 1-在用 2-借用中 3-维修中 4-调拨中 5-待报废 6-已处置 7-库存 8-已报废)") + private Integer assetStatus; + + @ApiModelProperty(notes = "所属公司id") + private Long ownCompanyId; + + @ApiModelProperty(notes = "使用公司/部门id") + private Long useOrganizationId; + + @ApiModelProperty(notes = "保管人id") + private Long useUserId; + + @ApiModelProperty(notes = "资产分类id") + private Long categoryId; + + @ApiModelProperty(notes = "存放位置id") + private Long positionId; + + @ApiModelProperty(notes = "仓库id") + private Long warehouseId; + + @ApiModelProperty(notes = "启用状态(0-禁用,1-启用)") + private Integer status; + + @ApiModelProperty(notes = "备注") + private String notes; + +} diff --git a/system/src/main/java/com/yyy/system/entity/dto/EamWarehouseAssetDto.java b/system/src/main/java/com/yyy/system/entity/dto/EamWarehouseAssetDto.java new file mode 100644 index 0000000..4ce6978 --- /dev/null +++ b/system/src/main/java/com/yyy/system/entity/dto/EamWarehouseAssetDto.java @@ -0,0 +1,29 @@ +package com.yyy.system.entity.dto; + +import java.io.Serializable; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.AllArgsConstructor; +import lombok.NoArgsConstructor; +import lombok.Builder; + +@ApiModel("库存信息表(EamWarehouseAssetDto)传输数据类") +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class EamWarehouseAssetDto implements Serializable { + private static final long serialVersionUID = 417670270918226515L; + + @ApiModelProperty(notes = "仓库id") + private Long warehouseId; + + @ApiModelProperty(notes = "资产id") + private Long assetId; + + @ApiModelProperty(notes = "库存数量") + private Integer count; + +} diff --git a/system/src/main/java/com/yyy/system/entity/dto/EamWarehouseInventoryDto.java b/system/src/main/java/com/yyy/system/entity/dto/EamWarehouseInventoryDto.java new file mode 100644 index 0000000..f7f1495 --- /dev/null +++ b/system/src/main/java/com/yyy/system/entity/dto/EamWarehouseInventoryDto.java @@ -0,0 +1,43 @@ +package com.yyy.system.entity.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +@ApiModel("库存信息") +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class EamWarehouseInventoryDto implements Serializable { + private static final long serialVersionUID = 1L; + + @ApiModelProperty("资产id") + private String assetId; + + @ApiModelProperty("资产编号") + private String assetCode; + + @ApiModelProperty("资产名称") + private String name; + + @ApiModelProperty("规格型号") + private String model; + + @ApiModelProperty("资产序列号") + private String serialNumber; + + @ApiModelProperty("资产状态(0-闲置 1-在用 2-借用中 3-维修中 4-调拨中 5-待报废 6-已处置 7-库存 8-已报废)") + private Integer status; + + @ApiModelProperty("仓库id") + private Long warehouseId; + + @ApiModelProperty("资产分类id") + private Long categoryId; +} diff --git a/system/src/main/java/com/yyy/system/entity/dto/FlFormDto.java b/system/src/main/java/com/yyy/system/entity/dto/FlFormDto.java new file mode 100644 index 0000000..dc5c275 --- /dev/null +++ b/system/src/main/java/com/yyy/system/entity/dto/FlFormDto.java @@ -0,0 +1,49 @@ +package com.yyy.system.entity.dto; + +import java.io.Serializable; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.AllArgsConstructor; +import lombok.NoArgsConstructor; +import lombok.Builder; + +import javax.validation.constraints.NotBlank; + +@ApiModel("流程表单对象(FlFormDto)传输数据类") +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class FlFormDto implements Serializable { + private static final long serialVersionUID = -49468202790837884L; + + @ApiModelProperty(notes = "表单ID") + private Long formId; + + @ApiModelProperty(notes = "表单标识") + private String formKey; + + @ApiModelProperty(notes = "表单类型") + private String type; + + @ApiModelProperty(notes = "表单名称", required = true) + @NotBlank(message = "名称不能为空") + private String name; + + @ApiModelProperty(notes = "PC端图标") + private String pcIcon; + + @ApiModelProperty(notes = "移动端图标") + private String mobileIcon; + +// @ApiModelProperty(notes = "表单内容") +// private String config; + + @ApiModelProperty(notes = "流程id") + private String deployId; + + @ApiModelProperty(notes = "状态(0:有效/1:无效)") + private Integer status; +} diff --git a/system/src/main/java/com/yyy/system/entity/dto/FlFormItemDto.java b/system/src/main/java/com/yyy/system/entity/dto/FlFormItemDto.java new file mode 100644 index 0000000..66cf8a8 --- /dev/null +++ b/system/src/main/java/com/yyy/system/entity/dto/FlFormItemDto.java @@ -0,0 +1,57 @@ +package com.yyy.system.entity.dto; + +import java.util.Date; +import java.io.Serializable; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.AllArgsConstructor; +import lombok.NoArgsConstructor; +import lombok.Builder; + +@ApiModel("流程实例对象(FlFormItemDto)传输数据类") +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class FlFormItemDto implements Serializable { + private static final long serialVersionUID = 932570210184231324L; + + @ApiModelProperty(notes = "主键") + private Long id; + + @ApiModelProperty(notes = "名称") + private String name; + + @ApiModelProperty(notes = "表单标识") + private String formKey; + + @ApiModelProperty(notes = "流程实例id") + private String procInsId; + + @ApiModelProperty(notes = "审批内容") + private String contents; + + @ApiModelProperty(notes = "审批记录") + private String logs; + + @ApiModelProperty(notes = "状态") + private Integer status; + + @ApiModelProperty(notes = "是否删除(0:正常/1:删除)") + private Integer isDeleted; + + @ApiModelProperty(notes = "创建人") + private Long createUser; + + @ApiModelProperty(notes = "创建时间") + private Date createTime; + + @ApiModelProperty(notes = "修改人") + private Long updateUser; + + @ApiModelProperty(notes = "修改时间") + private Date updateTime; + +} diff --git a/system/src/main/java/com/yyy/system/entity/dto/FlListenerDto.java b/system/src/main/java/com/yyy/system/entity/dto/FlListenerDto.java new file mode 100644 index 0000000..5a92d3c --- /dev/null +++ b/system/src/main/java/com/yyy/system/entity/dto/FlListenerDto.java @@ -0,0 +1,56 @@ +package com.yyy.system.entity.dto; + +import java.util.Date; +import java.io.Serializable; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.AllArgsConstructor; +import lombok.NoArgsConstructor; +import lombok.Builder; + +@ApiModel("流程监听对象(FlListenerDto)传输数据类") +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class FlListenerDto implements Serializable { + private static final long serialVersionUID = 771678526107429157L; + + @ApiModelProperty(notes = "主键") + private Long id; + + @ApiModelProperty(notes = "名称") + private String name; + + @ApiModelProperty(notes = "监听类型") + private String type; + + @ApiModelProperty(notes = "事件类型") + private String eventType; + + @ApiModelProperty(notes = "值类型") + private String valueType; + + @ApiModelProperty(notes = "执行内容") + private String value; + + @ApiModelProperty(notes = "状态") + private Integer status; + + @ApiModelProperty(notes = "是否删除(0:正常/1:删除)") + private Integer isDeleted; + + @ApiModelProperty(notes = "创建人") + private Long createUser; + + @ApiModelProperty(notes = "创建时间") + private Date createTime; + + @ApiModelProperty(notes = "修改人") + private Long updateUser; + + @ApiModelProperty(notes = "修改时间") + private Date updateTime; + +} diff --git a/system/src/main/java/com/yyy/system/entity/dto/FlowProcDefDto.java b/system/src/main/java/com/yyy/system/entity/dto/FlowProcDefDto.java new file mode 100644 index 0000000..3530c2a --- /dev/null +++ b/system/src/main/java/com/yyy/system/entity/dto/FlowProcDefDto.java @@ -0,0 +1,56 @@ +package com.yyy.system.entity.dto; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.util.Date; + +/** + *

流程定义

+ * + * @author Tony + * @date 2021-04-03 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@ApiModel("流程定义") +public class FlowProcDefDto implements Serializable { + + @ApiModelProperty("流程id") + private String id; + + @ApiModelProperty("流程名称") + private String name; + + @ApiModelProperty("流程key") + private String flowKey; + + @ApiModelProperty("流程分类") + private String category; + + @ApiModelProperty("配置表单名称") + private String formName; + + @ApiModelProperty("配置表单id") + private Long formId; + + @ApiModelProperty("版本") + private int version; + + @ApiModelProperty("部署ID") + private String deploymentId; + + @ApiModelProperty("流程定义状态: 1:激活 , 2:中止") + private int suspensionState; + + @ApiModelProperty("部署时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date deploymentTime; + + +} diff --git a/system/src/main/java/com/yyy/system/entity/excel/EamAssetExcel.java b/system/src/main/java/com/yyy/system/entity/excel/EamAssetExcel.java new file mode 100644 index 0000000..1903b89 --- /dev/null +++ b/system/src/main/java/com/yyy/system/entity/excel/EamAssetExcel.java @@ -0,0 +1,197 @@ +package com.yyy.system.entity.excel; + +import com.yyy.common.annotation.Excel; +import com.yyy.common.utils.bean.BeanUtils; +import com.yyy.system.entity.pojo.EamAsset; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.apache.poi.ss.usermodel.IndexedColors; + +import java.util.Date; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 资产信息Excel + * + * @author Fangy + * @since 2024-04-09 13:47:48 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class EamAssetExcel { + private static final long serialVersionUID = 1L; + + @Excel(name = "资产编号", prompt = "资产编号由后台自动生成,导入数据时不填写") + private String assetCode; + + @Excel(name = "资产名称", prompt = "资产名称必填", headerBackgroundColor = IndexedColors.RED) + private String name; + + @Excel(name = "资产分类编号", headerBackgroundColor = IndexedColors.RED) + private Long categoryId; + + @Excel(name = "资产分类名称", prompt = "填写系统中存在的资产分类名称,若资产分类存在重名时,请同时填写上资产分类的id", headerBackgroundColor = IndexedColors.RED) + private String categoryName; + + @Excel(name = "所属公司id", headerBackgroundColor = IndexedColors.RED) + private Long ownCompanyId; + + @Excel(name = "所属公司名称", prompt = "填写系统中存在的公司名称,若公司存在重名时,请同时填写上公司的id", headerBackgroundColor = IndexedColors.RED) + private String ownCompanyName; + + @Excel(name = "资产状态", readConverterExp = "0=闲置,1=在用,2=借用中,3=维修中,4=调拨中,5=待报废,6=已处置,7=库存,8=已报废", headerBackgroundColor = IndexedColors.RED) + private Integer status; + + @Excel(name = "使用组织id") + private Long useOrganizationId; + + @Excel(name = "使用组织名称", prompt = "填写系统中存在的组织名称,若组织存在重名时,请同时填写上组织的id") + private String useOrganizationName; + + @Excel(name = "资产来源", readConverterExp = "0=捐赠,1=赠送,2=其他,3=采购,4=自建,5=自购") + private Integer sourceId; + + @Excel(name = "管理人员id") + private Long manager; + + @Excel(name = "管理人员名称", prompt = "填写系统中存在的管理员姓名,若管理员姓名存在重名时,请同时填写上管理员id") + private String managerName; + + @Excel(name = "供应商id") + private Long supplierVendorId; + + @Excel(name = "供应商名称", prompt = "填写系统中存在的供应商名称,若供应商存在重名时,请同时填写上供应商的id") + private String supplierVendorName; + + @Excel(name = "资产厂商id") + private Long manufacturersVendorId; + + @Excel(name = "资产厂商名称", prompt = "填写系统中存在的资产厂商名称,若资产厂商存在重名时,请同时填写上资产厂商的id") + private String manufacturersVendorName; + + @Excel(name = "规格型号") + private String model; + + @Excel(name = "序列号") + private String serialNumber; + + @Excel(name = "使用人员id") + private Long useUserId; + + @Excel(name = "使用人员姓名", prompt = "填写系统中存在的账户姓名,若账户姓名存在重名时,请同时填写上使用人员id") + private String useUserName; + + @Excel(name = "用途") + private String purpose; + + @Excel(name = "存放位置id") + private Long positionId; + + @Excel(name = "存放位置名称", prompt = "填写系统中存在的存放位置名称,若存放位置名称存在重名时,请同时填写上存放位置id") + private String positionName; + + @Excel(name = "计量单位") + private String unit; + + @Excel(name = "详细位置") + private String positionDetail; + + @Excel(name = "资产备注") + private String notes; + + @Excel(name = "维保信息_维保厂商id") + private Long maintenanceVendor; + + @Excel(name = "维保信息_维保厂商名称", prompt = "填写系统中存在的维保厂商名称,若维保厂商名称存在重名时,请同时填写上维保厂商id") + private String maintenanceVendorName; + + @Excel(name = "维保信息_联系人") + private String contactor; + + @Excel(name = "维保信息_维保开始时间", dateFormat = "yyyy-MM-dd HH:mm:ss", prompt = "日期格式 yyyy-MM-dd HH:mm:ss") + private Date maintenanceStartDate; + + @Excel(name = "维保信息_维保状态", readConverterExp = "0=不需要,1=脱保,2=在保,3=未知") + private Integer maintenanceStatus; + + @Excel(name = "维保信息_联系方式") + private String contact; + + @Excel(name = "维保信息_维保到期", dateFormat = "yyyy-MM-dd HH:mm:ss", prompt = "日期格式 yyyy-MM-dd HH:mm:ss") + private Date maintenanceEndDate; + + @Excel(name = "维保信息_负责人") + private String responsiblePerson; + + @Excel(name = "维保信息_维保方式", readConverterExp = "0=原厂,1=第三方") + private Integer maintenanceType; + + @Excel(name = "维保信息_建议维保方式", readConverterExp = "0=原厂,1=第三方") + private Integer suggestMaintenanceType; + + @Excel(name = "维保信息_维保备注") + private String maintenanceNotes; + + @Excel(name = "财务信息_财务分类id") + private Long financialCategoryId; + + @Excel(name = "财务信息_财务分类名称") + private String financialCategoryName; + + @Excel(name = "财务信息_未税成本", cellType = Excel.ColumnType.NUMERIC, scale = 2, prompt = "保留2位小数,若您填写超过2位小数后,系统会自动做四舍五入处理") + private Double totalAmountPrice; + + @Excel(name = "财务信息_客户信息") + private String customerInfo; + + @Excel(name = "财务信息_资产税额", cellType = Excel.ColumnType.NUMERIC, scale = 2, prompt = "保留2位小数,若您填写超过2位小数后,系统会自动做四舍五入处理") + private Double taxAmountRate; + + @Excel(name = "财务信息_入账日期", dateFormat = "yyyy-MM-dd HH:mm:ss", prompt = "日期格式 yyyy-MM-dd HH:mm:ss") + private Date registerDate; + + @Excel(name = "财务信息_资产净值", cellType = Excel.ColumnType.NUMERIC, scale = 2, prompt = "保留2位小数,若您填写超过2位小数后,系统会自动做四舍五入处理") + private Double navPrice; + + @Excel(name = "财务信息_残值率", cellType = Excel.ColumnType.NUMERIC, scale = 2, prompt = "残值率范围:0-1,保留2位小数,若您填写超过2位小数后,系统会自动做四舍五入处理") + private Double residualsRate; + + @Excel(name = "财务信息_财务备注") + private String financialNotes; + + public static EamAssetExcel ToExcel(EamAsset e) { + EamAssetExcel excel = new EamAssetExcel(); + BeanUtils.copyProperties(e, excel); + + if (e.get_category() != null) { excel.setCategoryName(e.get_category().getCategoryName());} + if (e.get_ownCompany() != null) { excel.setOwnCompanyName(e.get_ownCompany().getOrganizationName());} + if (e.get_useOrganization() != null) { excel.setUseOrganizationName(e.get_useOrganization().getOrganizationName());} + if (e.get_manager() != null) { excel.setManagerName(e.get_manager().getUserName());} + if (e.get_useUser() != null) { excel.setUseUserName(e.get_useUser().getUserName());} + if (e.get_supplierVendor() != null) { excel.setSupplierVendorName(e.get_supplierVendor().getName());} + if (e.get_maintenanceVendor() != null) { excel.setMaintenanceVendorName(e.get_maintenanceVendor().getName());} + if (e.get_manufacturersVendor() != null) { excel.setManufacturersVendorName(e.get_manufacturersVendor().getName());} + if (e.get_position() != null) { excel.setPositionName(e.get_position().getName());} + if (e.get_eamBasicFinancialCategory() != null) { excel.setFinancialCategoryName(e.get_eamBasicFinancialCategory().getFinancialCategoryName());} + return excel; + } + + public static List ToExcel(List list) { + return list.stream().map(EamAssetExcel::ToExcel).collect(Collectors.toList()); + } + +// public static EamAsset ToPojo(EamAssetExcel e) { +// EamAsset asset = new EamAsset(); +// BeanUtils.copyProperties(e, asset); +// return asset; +// } +// +// public static List ToPojo(List list) { +// return list.stream().map(EamAssetExcel::ToPojo).collect(Collectors.toList()); +// } +} diff --git a/system/src/main/java/com/yyy/system/entity/pojo/EamAsset.java b/system/src/main/java/com/yyy/system/entity/pojo/EamAsset.java new file mode 100644 index 0000000..0d92e5f --- /dev/null +++ b/system/src/main/java/com/yyy/system/entity/pojo/EamAsset.java @@ -0,0 +1,398 @@ +package com.yyy.system.entity.pojo; + +import java.util.Date; + +import com.yyy.common.annotation.Excel; +import com.yyy.common.annotation.Excels; +import com.yyy.common.core.domain.entity.UmsOrganization; +import com.yyy.common.core.domain.entity.UmsUser; +import com.yyy.system.entity.pojo.*; +import lombok.*; +import com.baomidou.mybatisplus.annotation.*; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonIgnore; + +/** + * 资产信息表(EamAsset)表实体类 + * + * @author Fangy + * @since 2024-04-09 13:47:48 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@TableName(value = "eam_asset") +public class EamAsset { + private static final long serialVersionUID = 955338389791091368L; + + + /** + * 主键(主键) + */ + @JsonIgnore + @TableId(value = "asset_id", type = IdType.AUTO) + private Long assetId; + + /** + * 资产编号 + */ +// @Excel(name = "资产编号", readConverterExp = "0=党员,1=团员,2=群众",combo = "党员,团员,群众", prompt = "资产名称必填") + @Excel(name = "资产编号") + @TableField("asset_code") + private String assetCode; + + /** + * 资产名称 + */ + @Excel(name = "资产名称") + @TableField("name") + private String name; + + /** + * 资产分类编号 + */ + @TableField("category_id") + @Excel(name = "资产分类编号*") + private Long categoryId; + + /** + * 仓库id + */ + @TableField("warehouse_id") + private Long warehouseId; + + /** + * 所属公司 + */ + @TableField("own_company_id") + @Excel(name = "所属公司*") + private Long ownCompanyId; + + /** + * 资产状态(0-闲置 1-在用 2-借用中 3-维修中 4-调拨中 5-待报废 6-已处置 7-库存 8-已报废) + */ + @TableField("status") + @Excel(name = "资产状态*", readConverterExp = "0=闲置,1=在用,2=借用中,3=维修中,4=调拨中,5=待报废,6=已处置,7=库存,8=已报废") + private Integer status; + + /** + * 使用组织 + */ + @TableField("use_organization_id") + @Excel(name = "使用组织") + private Long useOrganizationId; + + /** + * 资产来源(0-捐赠 1-赠送 2-其他 3-采购 4-自建 5-自购) + */ + @TableField("source_id") + @Excel(name = "资产状态", readConverterExp = "0=捐赠,1=赠送,2=其他,3=采购,4=自建,5=自购") + private Integer sourceId; + + /** + * 管理人员id + */ + @TableField("manager") + @Excel(name = "管理人员id") + private Long manager; + + /** + * 供应商id + */ + @TableField("supplier_vendor_id") + @Excel(name = "供应商id") + private Long supplierVendorId; + + /** + * 资产厂商id + */ + @TableField("manufacturers_vendor_id") + @Excel(name = "资产厂商id") + private Long manufacturersVendorId; + + /** + * 规格型号 + */ + @TableField("model") + @Excel(name = "规格型号") + private String model; + + /** + * 序列号 + */ + @TableField("serial_number") + @Excel(name = "序列号") + private String serialNumber; + + /** + * 使用人员id + */ + @TableField("use_user_id") + @Excel(name = "使用人员id") + private Long useUserId; + + /** + * 用途 + */ + @TableField("purpose") + @Excel(name = "用途") + private String purpose; + + /** + * 存放位置id + */ + @TableField("position_id") + @Excel(name = "存放位置id") + private Long positionId; + + /** + * 计量单位 + */ + @TableField("unit") + @Excel(name = "计量单位") + private String unit; + + /** + * 详细位置 + */ + @TableField("position_detail") + @Excel(name = "详细位置") + private String positionDetail; + + /** + * 资产备注 + */ + @TableField("notes") + @Excel(name = "资产备注") + private String notes; + + /** + * 资产附件 + */ + @TableField("attachment") + private String attachment; + + /** + * 维保信息_维保厂商id + */ + @TableField("maintenance_vendor") + @Excel(name = "维保信息_维保厂商id") + private Long maintenanceVendor; + + /** + * 维保信息_联系人id + */ + @TableField("contactor") + @Excel(name = "维保信息_联系人") + private String contactor; + + /** + * 维保信息_维保开始 + */ + @TableField("maintenance_start_date") + @Excel(name = "维保信息_维保开始时间") + private Date maintenanceStartDate; + + /** + * 维保信息_维保状态(0-不需要 1-脱保 2-在保 3-未知) + */ + @TableField("maintenance_status") + @Excel(name = "维保信息_维保状态", readConverterExp = "0=不需要,1=脱保,2=在保,3=未知") + private Integer maintenanceStatus; + + /** + * 维保信息_联系方式 + */ + @TableField("contact") + @Excel(name = "维保信息_联系方式") + private String contact; + + /** + * 维保信息_维保到期 + */ + @TableField("maintenance_end_date") + @Excel(name = "维保信息_维保到期") + private Date maintenanceEndDate; + + /** + * 维保信息_负责人id + */ + @TableField("responsible_person") + @Excel(name = "维保信息_负责人") + private String responsiblePerson; + + /** + * 维保信息_维保方式(0-原厂 1-第三方) + */ + @TableField("maintenance_type") + @Excel(name = "维保信息_维保方式", readConverterExp = "0=原厂,1=第三方") + private Integer maintenanceType; + + /** + * 维保信息_建议维保方式(0-原厂 1-第三方) + */ + @TableField("suggest_maintenance_type") + @Excel(name = "维保信息_建议维保方式", readConverterExp = "0=原厂,1=第三方") + private Integer suggestMaintenanceType; + + /** + * 维保信息_维保备注 + */ + @TableField("maintenance_notes") + @Excel(name = "维保信息_维保备注") + private String maintenanceNotes; + + /** + * 维保信息_维保附件 + */ + @TableField("maintenance_attachment") + private String maintenanceAttachment; + + /** + * 财务信息_财务分类id + */ + @TableField("financial_category_id") + @Excel(name = "财务信息_财务分类id") + private Long financialCategoryId; + + /** + * 财务信息_费用项目id + */ + @TableField("expense_item") + private Long expenseItem; + + /** + * 财务信息_未税成本 + */ + @TableField("total_amount_price") + @Excel(name = "财务信息_未税成本") + private Double totalAmountPrice; + + /** + * 财务信息_客户信息 + */ + @TableField("customer_info") + @Excel(name = "财务信息_客户信息") + private String customerInfo; + + /** + * 财务信息_资产税额 + */ + @TableField("tax_amount_rate") + @Excel(name = "财务信息_资产税额") + private Double taxAmountRate; + + /** + * 财务信息_入账日期 + */ + @TableField("register_date") + @Excel(name = "财务信息_入账日期") + private Date registerDate; + + /** + * 财务信息_财务选项id + */ + @TableField("financial_option") + private Long financialOption; + + /** + * 财务信息_资产净值 + */ + @TableField("nav_price") + @Excel(name = "财务信息_资产净值") + private Double navPrice; + + /** + * 财务信息_残值率 + */ + @TableField("residuals_rate") + @Excel(name = "财务信息_残值率") + private Double residualsRate; + + /** + * 财务信息_财务备注 + */ + @TableField("financial_notes") + @Excel(name = "财务信息_财务备注") + private String financialNotes; + + /** + * 财务信息_附件 + */ + @TableField("financial_attachment") + private String financialAttachment; + + /** + * 创建人 + */ + @TableField("create_user") + private Long createUser; + + /** + * 创建时间 + */ + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @TableField(fill = FieldFill.INSERT) + private Date createTime; + + /** + * 修改人 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 修改时间 + */ + + @JsonIgnore + @TableField(fill = FieldFill.INSERT_UPDATE) + private Date updateTime; + + /** + * 是否删除(0:正常/1:删除) + */ + @TableField("is_deleted") + private Integer isDeleted; + + @TableField(exist = false) + private Integer _businessStatus; + + @TableField(exist = false) + private EamBasicCategory _category; + + @TableField(exist = false) + private UmsOrganization _ownCompany; + + @TableField(exist = false) + private UmsOrganization _useOrganization; + + @TableField(exist = false) + private UmsUser _manager; + + @TableField(exist = false) + private EamBasicManufacturersVendor _manufacturersVendor; + + @TableField(exist = false) + private UmsUser _useUser; + + @TableField(exist = false) + private EamBasicPosition _position; + + @TableField(exist = false) + private EamBasicMaintenanceVendor _maintenanceVendor; + + @TableField(exist = false) + private EamBasicWarehouse _warehouse; + + @TableField(exist = false) + private Integer count; + + @TableField(exist = false) + private EamBasicSupplierVendor _supplierVendor; + + @TableField(exist = false) + private EamBasicFinancialCategory _eamBasicFinancialCategory; +} diff --git a/system/src/main/java/com/yyy/system/entity/pojo/EamAssetLog.java b/system/src/main/java/com/yyy/system/entity/pojo/EamAssetLog.java new file mode 100644 index 0000000..63e1a79 --- /dev/null +++ b/system/src/main/java/com/yyy/system/entity/pojo/EamAssetLog.java @@ -0,0 +1,89 @@ +package com.yyy.system.entity.pojo; + +import java.util.Date; + +import lombok.*; +import com.baomidou.mybatisplus.annotation.*; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonIgnore; + +/** + * 资产操作日志(EamAssetLog)表实体类 + * + * @author Fangy + * @since 2024-04-09 10:23:38 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@TableName(value = "eam_asset_log") +public class EamAssetLog { + private static final long serialVersionUID = 143689497584219486L; + + + /** + * 主键(主键) + */ + @JsonIgnore + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + /** + * 创建人 + */ + @TableField("create_user") + private Long createUser; + + /** + * 创建时间 + */ + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @TableField(fill = FieldFill.INSERT) + private Date createTime; + + /** + * 修改人 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 修改时间 + */ + + @JsonIgnore + @TableField(fill = FieldFill.INSERT_UPDATE) + private Date updateTime; + + /** + * 是否删除(0:正常/1:删除) + */ + @TableField("is_deleted") + private Integer isDeleted; + + /** + * 业务编号 + */ + @TableField("business_id") + private String businessId; + + /** + * 操作类型 + */ + @TableField("operation_type") + private String operationType; + + /** + * 操作内容 + */ + @TableField("operation_notes") + private String operationNotes; + + /** + * 关联资产编号 + */ + @TableField("asset_id") + private Long assetId; +} diff --git a/system/src/main/java/com/yyy/system/entity/pojo/EamBasicCategory.java b/system/src/main/java/com/yyy/system/entity/pojo/EamBasicCategory.java new file mode 100644 index 0000000..cbd4f12 --- /dev/null +++ b/system/src/main/java/com/yyy/system/entity/pojo/EamBasicCategory.java @@ -0,0 +1,101 @@ +package com.yyy.system.entity.pojo; + +import java.util.Date; + +import lombok.*; +import com.baomidou.mybatisplus.annotation.*; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonIgnore; + +/** + * 资产分类信息表(EamBasicCategory)表实体类 + * + * @author Fangy + * @since 2024-04-08 14:22:31 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@TableName(value = "eam_basic_category") +public class EamBasicCategory { + private static final long serialVersionUID = 947712692118768878L; + + + /** + * 资产分类编号(主键) + */ + @JsonIgnore + @TableId(value = "category_id", type = IdType.AUTO) + private Long categoryId; + + /** + * 资产分类名称 + */ + @TableField("category_name") + private String categoryName; + + /** + * 深度 + */ + @TableField("depth") + private String depth; + + /** + * 父节点 + */ + @TableField("parent_id") + private Long parentId; + + /** + * 安全库存上限 + */ + @TableField("upper_limit") + private Integer upperLimit; + + /** + * 安全库存下限 + */ + @TableField("lower_limit") + private Integer lowerLimit; + + /** + * 安全库存 + */ + @TableField("safety_limit") + private Integer safetyLimit; + + /** + * 创建人 + */ + @TableField("create_user") + private Long createUser; + + /** + * 创建时间 + */ + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @TableField(fill = FieldFill.INSERT) + private Date createTime; + + /** + * 修改人 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 修改时间 + */ + + @JsonIgnore + @TableField(fill = FieldFill.INSERT_UPDATE) + private Date updateTime; + + /** + * 是否删除(0:正常/1:删除) + */ + @TableField("is_deleted") + private Integer isDeleted; +} diff --git a/system/src/main/java/com/yyy/system/entity/pojo/EamBasicFinancialCategory.java b/system/src/main/java/com/yyy/system/entity/pojo/EamBasicFinancialCategory.java new file mode 100644 index 0000000..1c8a741 --- /dev/null +++ b/system/src/main/java/com/yyy/system/entity/pojo/EamBasicFinancialCategory.java @@ -0,0 +1,95 @@ +package com.yyy.system.entity.pojo; + +import java.util.Date; + +import lombok.*; +import com.baomidou.mybatisplus.annotation.*; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonIgnore; + +/** + * 财务分类信息表(EamBasicFinancialCategory)表实体类 + * + * @author Fangy + * @since 2024-05-11 14:38:13 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@TableName(value = "eam_basic_financial_category") +public class EamBasicFinancialCategory { + private static final long serialVersionUID = -37124077590596294L; + + + /** + * 财务分类id(主键) + */ + @JsonIgnore + @TableId(value = "financial_category_id", type = IdType.AUTO) + private Long financialCategoryId; + + /** + * 财务分类名称 + */ + @TableField("financial_category_name") + private String financialCategoryName; + + /** + * 深度 + */ + @TableField("depth") + private String depth; + + /** + * 父节点 + */ + @TableField("parent_id") + private Long parentId; + + /** + * 使用期限(月) + */ + @TableField("use_terms") + private Integer useTerms; + + /** + * 备注 + */ + @TableField("notes") + private String notes; + + /** + * 创建人 + */ + @TableField("create_user") + private Long createUser; + + /** + * 创建时间 + */ + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @TableField(fill = FieldFill.INSERT) + private Date createTime; + + /** + * 修改人 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 修改时间 + */ + + @JsonIgnore + @TableField(fill = FieldFill.INSERT_UPDATE) + private Date updateTime; + + /** + * 是否删除(0:正常/1:删除) + */ + @TableField("is_deleted") + private Integer isDeleted; +} diff --git a/system/src/main/java/com/yyy/system/entity/pojo/EamBasicMaintenanceVendor.java b/system/src/main/java/com/yyy/system/entity/pojo/EamBasicMaintenanceVendor.java new file mode 100644 index 0000000..4cca413 --- /dev/null +++ b/system/src/main/java/com/yyy/system/entity/pojo/EamBasicMaintenanceVendor.java @@ -0,0 +1,119 @@ +package com.yyy.system.entity.pojo; + +import java.util.Date; + +import lombok.*; +import com.baomidou.mybatisplus.annotation.*; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonIgnore; + +/** + * 维保商(EamBasicMaintenanceVendor)表实体类 + * + * @author Fangy + * @since 2024-04-09 12:52:28 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@TableName(value = "eam_basic_maintenance_vendor") +public class EamBasicMaintenanceVendor { + private static final long serialVersionUID = 220113763926607961L; + + + /** + * 主键(主键) + */ + @JsonIgnore + @TableId(value = "maintenance_vendor_id", type = IdType.AUTO) + private Long maintenanceVendorId; + + /** + * 名称 + */ + @TableField("name") + private String name; + + /** + * 编码 + */ + @TableField("code") + private String code; + + /** + * 统一社会信用代码 + */ + @TableField("uscc") + private String uscc; + + /** + * 售后联系人 + */ + @TableField("after_sales_contactor") + private String afterSalesContactor; + + /** + * 售后联系方式 + */ + @TableField("after_sales_contact") + private String afterSalesContact; + + /** + * 商务联系人 + */ + @TableField("business_contactor") + private String businessContactor; + + /** + * 商务联系方式 + */ + @TableField("business_contact") + private String businessContact; + + /** + * 地址 + */ + @TableField("address") + private String address; + + /** + * 备注 + */ + @TableField("notes") + private String notes; + + /** + * 创建人 + */ + @TableField("create_user") + private Long createUser; + + /** + * 创建时间 + */ + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @TableField(fill = FieldFill.INSERT) + private Date createTime; + + /** + * 修改人 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 修改时间 + */ + + @JsonIgnore + @TableField(fill = FieldFill.INSERT_UPDATE) + private Date updateTime; + + /** + * 是否删除(0:正常/1:删除) + */ + @TableField("is_deleted") + private Integer isDeleted; +} diff --git a/system/src/main/java/com/yyy/system/entity/pojo/EamBasicManufacturersVendor.java b/system/src/main/java/com/yyy/system/entity/pojo/EamBasicManufacturersVendor.java new file mode 100644 index 0000000..e4f05ab --- /dev/null +++ b/system/src/main/java/com/yyy/system/entity/pojo/EamBasicManufacturersVendor.java @@ -0,0 +1,89 @@ +package com.yyy.system.entity.pojo; + +import java.util.Date; + +import lombok.*; +import com.baomidou.mybatisplus.annotation.*; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonIgnore; + +/** + * 生产商(EamBasicManufacturersVendor)表实体类 + * + * @author Fangy + * @since 2024-04-09 12:45:34 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@TableName(value = "eam_basic_manufacturers_vendor") +public class EamBasicManufacturersVendor { + private static final long serialVersionUID = 329289269225198534L; + + + /** + * 主键(主键) + */ + @JsonIgnore + @TableId(value = "manufacturers_vendor_id", type = IdType.AUTO) + private Long manufacturersVendorId; + + /** + * 名称 + */ + @TableField("name") + private String name; + + /** + * 编码 + */ + @TableField("code") + private String code; + + /** + * 地址 + */ + @TableField("address") + private String address; + + /** + * 备注 + */ + @TableField("notes") + private String notes; + + /** + * 创建人 + */ + @TableField("create_user") + private Long createUser; + + /** + * 创建时间 + */ + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @TableField(fill = FieldFill.INSERT) + private Date createTime; + + /** + * 修改人 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 修改时间 + */ + + @JsonIgnore + @TableField(fill = FieldFill.INSERT_UPDATE) + private Date updateTime; + + /** + * 是否删除(0:正常/1:删除) + */ + @TableField("is_deleted") + private Integer isDeleted; +} diff --git a/system/src/main/java/com/yyy/system/entity/pojo/EamBasicPosition.java b/system/src/main/java/com/yyy/system/entity/pojo/EamBasicPosition.java new file mode 100644 index 0000000..7f5a0f8 --- /dev/null +++ b/system/src/main/java/com/yyy/system/entity/pojo/EamBasicPosition.java @@ -0,0 +1,82 @@ +package com.yyy.system.entity.pojo; + +import java.util.Date; + +import lombok.*; +import com.baomidou.mybatisplus.annotation.*; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonIgnore; + +/** + * 存放位置信息表(EamBasicPosition)表实体类 + * + * @author Fangy + * @since 2024-04-09 12:52:28 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@TableName(value = "eam_basic_position") +public class EamBasicPosition { + private static final long serialVersionUID = -69312696070666693L; + + /** + * 资产分类编号(主键) + */ + @JsonIgnore + @TableId(value = "position_id", type = IdType.AUTO) + private Long positionId; + + /** + * 资产分类名称 + */ + @TableField("name") + private String name; + + /** + * 深度 + */ + @TableField("depth") + private String depth; + + /** + * 父节点 + */ + @TableField("parent_id") + private Long parentId; + + /** + * 创建人 + */ + @TableField("create_user") + private Long createUser; + + /** + * 创建时间 + */ + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @TableField(fill = FieldFill.INSERT) + private Date createTime; + + /** + * 修改人 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 修改时间 + */ + + @JsonIgnore + @TableField(fill = FieldFill.INSERT_UPDATE) + private Date updateTime; + + /** + * 是否删除(0:正常/1:删除) + */ + @TableField("is_deleted") + private Integer isDeleted; +} diff --git a/system/src/main/java/com/yyy/system/entity/pojo/EamBasicSupplierVendor.java b/system/src/main/java/com/yyy/system/entity/pojo/EamBasicSupplierVendor.java new file mode 100644 index 0000000..8cfce98 --- /dev/null +++ b/system/src/main/java/com/yyy/system/entity/pojo/EamBasicSupplierVendor.java @@ -0,0 +1,118 @@ +package com.yyy.system.entity.pojo; + +import java.util.Date; + +import lombok.*; +import com.baomidou.mybatisplus.annotation.*; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonIgnore; + +/** + * 供应商(EamBasicSupplierVendor)表实体类 + * + * @author Fangy + * @since 2024-04-09 10:56:09 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@TableName(value = "eam_basic_supplier_vendor") +public class EamBasicSupplierVendor { + private static final long serialVersionUID = -81573902638425707L; + + /** + * 主键(主键) + */ + @JsonIgnore + @TableId(value = "supplier_vendor_id", type = IdType.AUTO) + private Long supplierVendorId; + + /** + * 名称 + */ + @TableField("name") + private String name; + + /** + * 编码 + */ + @TableField("code") + private String code; + + /** + * 统一社会信用代码 + */ + @TableField("uscc") + private String uscc; + + /** + * 售后联系人 + */ + @TableField("after_sales_contactor") + private String afterSalesContactor; + + /** + * 售后联系方式 + */ + @TableField("after_sales_contact") + private String afterSalesContact; + + /** + * 商务联系人 + */ + @TableField("business_contactor") + private String businessContactor; + + /** + * 商务联系方式 + */ + @TableField("business_contact") + private String businessContact; + + /** + * 地址 + */ + @TableField("address") + private String address; + + /** + * 备注 + */ + @TableField("notes") + private String notes; + + /** + * 创建人 + */ + @TableField("create_user") + private Long createUser; + + /** + * 创建时间 + */ + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @TableField(fill = FieldFill.INSERT) + private Date createTime; + + /** + * 修改人 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 修改时间 + */ + + @JsonIgnore + @TableField(fill = FieldFill.INSERT_UPDATE) + private Date updateTime; + + /** + * 是否删除(0:正常/1:删除) + */ + @TableField("is_deleted") + private Integer isDeleted; +} diff --git a/system/src/main/java/com/yyy/system/entity/pojo/EamBasicWarehouse.java b/system/src/main/java/com/yyy/system/entity/pojo/EamBasicWarehouse.java new file mode 100644 index 0000000..18690b3 --- /dev/null +++ b/system/src/main/java/com/yyy/system/entity/pojo/EamBasicWarehouse.java @@ -0,0 +1,77 @@ +package com.yyy.system.entity.pojo; + +import java.util.Date; + +import lombok.*; +import com.baomidou.mybatisplus.annotation.*; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonIgnore; + +/** + * 仓库信息表(EamBasicWarehouse)表实体类 + * + * @author Fangy + * @since 2024-04-09 13:16:58 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@TableName(value = "eam_basic_warehouse") +public class EamBasicWarehouse { + private static final long serialVersionUID = -56577035365694173L; + + + /** + * 仓库编号(主键) + */ + @JsonIgnore + @TableId(value = "warehouse_id", type = IdType.AUTO) + private Long warehouseId; + + /** + * 创建人 + */ + @TableField("create_user") + private Long createUser; + + /** + * 创建时间 + */ + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @TableField(fill = FieldFill.INSERT) + private Date createTime; + + /** + * 修改人 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 修改时间 + */ + + @JsonIgnore + @TableField(fill = FieldFill.INSERT_UPDATE) + private Date updateTime; + + /** + * 是否删除(0:正常/1:删除) + */ + @TableField("is_deleted") + private Integer isDeleted; + + /** + * 仓库名称 + */ + @TableField("name") + private String name; + + /** + * 状态(0:启用/1:禁用) + */ + @TableField("status") + private Integer status; +} diff --git a/system/src/main/java/com/yyy/system/entity/pojo/EamBusinessAllocate.java b/system/src/main/java/com/yyy/system/entity/pojo/EamBusinessAllocate.java new file mode 100644 index 0000000..c901fba --- /dev/null +++ b/system/src/main/java/com/yyy/system/entity/pojo/EamBusinessAllocate.java @@ -0,0 +1,136 @@ +package com.yyy.system.entity.pojo; + +import java.util.Date; + +import com.yyy.common.core.domain.entity.UmsUser; +import io.swagger.annotations.ApiModelProperty; +import lombok.*; +import com.baomidou.mybatisplus.annotation.*; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonIgnore; + +/** + * 调拨信息表(EamBusinessAllocate)表实体类 + * + * @author Fangy + * @since 2024-04-11 16:16:13 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@TableName(value = "eam_business_allocate") +public class EamBusinessAllocate { + private static final long serialVersionUID = -39121729482601805L; + + + /** + * 主键(主键) + */ + @JsonIgnore + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + /** + * 业务编号 + */ + @TableField("business_id") + private String businessId; + + /** + * 业务名称 + */ + @TableField("name") + private String name; + + /** + * 申请人 + */ + @TableField("applicant") + private Long applicant; + + /** + * 资产编号List + */ + @TableField("asset_id_List") + private String assetIdList; + + /** + * 业务生成日期 + */ + @TableField("business_generated_date") + private Date businessGeneratedDate; + + /** + * 备注 + */ + @TableField("notes") + private String notes; + + /** + * 附件 + */ + @TableField("attach") + private String attach; + + /** + * 状态(0-草稿、1-已完成、2-拒绝、3-审批中、4-取消) + */ + @TableField("status") + private Integer status; + + /** + * 创建人 + */ + @TableField("create_user") + private Long createUser; + + /** + * 创建时间 + */ + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @TableField(fill = FieldFill.INSERT) + private Date createTime; + + /** + * 修改人 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 修改时间 + */ + + @JsonIgnore + @TableField(fill = FieldFill.INSERT_UPDATE) + private Date updateTime; + + /** + * 是否删除(0:正常/1:删除) + */ + @TableField("is_deleted") + private Integer isDeleted; + + /** + * 调出仓库 + */ + @TableField("out_warehouse_id") + private Long outWarehouseId; + + /** + * 调入仓库 + */ + @TableField("in_warehouse_id") + private Long inWarehouseId; + + @TableField(exist = false) + private UmsUser _applicant; + + @TableField(exist = false) + private EamBasicWarehouse _outWarehouse; + + @TableField(exist = false) + private EamBasicWarehouse _inWarehouse; +} diff --git a/system/src/main/java/com/yyy/system/entity/pojo/EamBusinessBorrow.java b/system/src/main/java/com/yyy/system/entity/pojo/EamBusinessBorrow.java new file mode 100644 index 0000000..a1ca3b4 --- /dev/null +++ b/system/src/main/java/com/yyy/system/entity/pojo/EamBusinessBorrow.java @@ -0,0 +1,132 @@ +package com.yyy.system.entity.pojo; + +import java.util.Date; + +import com.yyy.common.core.domain.entity.UmsUser; +import lombok.*; +import com.baomidou.mybatisplus.annotation.*; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonIgnore; + +/** + * 借用信息表(EamBusinessBorrow)表实体类 + * + * @author Fangy + * @since 2024-04-10 17:26:36 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@TableName(value = "eam_business_borrow") +public class EamBusinessBorrow { + private static final long serialVersionUID = 818243213283927361L; + + + /** + * 主键(主键) + */ + @JsonIgnore + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + /** + * 业务编号 + */ + @TableField("business_id") + private String businessId; + + /** + * 业务名称 + */ + @TableField("name") + private String name; + + /** + * 申请人 + */ + @TableField("applicant") + private Long applicant; + + /** + * 资产编号List + */ + @TableField("asset_id_List") + private String assetIdList; + + /** + * 业务生成日期 + */ + @TableField("business_generated_date") + private Date businessGeneratedDate; + + /** + * 备注 + */ + @TableField("notes") + private String notes; + + /** + * 附件 + */ + @TableField("attach") + private String attach; + + /** + * 状态(0-草稿、1-已完成、2-拒绝、3-审批中、4-取消) + */ + @TableField("status") + private Integer status; + + /** + * 创建人 + */ + @TableField("create_user") + private Long createUser; + + /** + * 创建时间 + */ + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @TableField(fill = FieldFill.INSERT) + private Date createTime; + + /** + * 修改人 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 修改时间 + */ + + @JsonIgnore + @TableField(fill = FieldFill.INSERT_UPDATE) + private Date updateTime; + + /** + * 是否删除(0:正常/1:删除) + */ + @TableField("is_deleted") + private Integer isDeleted; + + /** + * 借用人 + */ + @TableField("use_user_id") + private Long useUserId; + + /** + * 预计归还时间 + */ + @TableField("return_time") + private Date returnTime; + + @TableField(exist = false) + private UmsUser _applicant; + + @TableField(exist = false) + private UmsUser _useUser; +} diff --git a/system/src/main/java/com/yyy/system/entity/pojo/EamBusinessCollection.java b/system/src/main/java/com/yyy/system/entity/pojo/EamBusinessCollection.java new file mode 100644 index 0000000..af52aea --- /dev/null +++ b/system/src/main/java/com/yyy/system/entity/pojo/EamBusinessCollection.java @@ -0,0 +1,151 @@ +package com.yyy.system.entity.pojo; + +import java.util.Date; + +import com.yyy.common.core.domain.entity.UmsOrganization; +import com.yyy.common.core.domain.entity.UmsUser; +import lombok.*; +import com.baomidou.mybatisplus.annotation.*; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonIgnore; + +/** + * 资产领用信息表(EamBusinessCollection)表实体类 + * + * @author Fangy + * @since 2024-04-12 11:48:06 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@TableName(value = "eam_business_collection") +public class EamBusinessCollection { + private static final long serialVersionUID = -68989280014419345L; + + + /** + * 主键(主键) + */ + @JsonIgnore + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + /** + * 业务编号 + */ + @TableField("business_id") + private String businessId; + + /** + * 业务名称 + */ + @TableField("name") + private String name; + + /** + * 申请人id + */ + @TableField("applicant") + private Long applicant; + + /** + * 资产编号List + */ + @TableField("asset_id_List") + private String assetIdList; + + /** + * 业务生成日期 + */ + @TableField("business_generated_date") + private Date businessGeneratedDate; + + /** + * 备注 + */ + @TableField("notes") + private String notes; + + /** + * 附件 + */ + @TableField("attach") + private String attach; + + /** + * 状态(0-草稿、1-已完成、2-拒绝、3-审批中、4-取消) + */ + @TableField("status") + private Integer status; + + /** + * 创建人 + */ + @TableField("create_user") + private Long createUser; + + /** + * 创建时间 + */ + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @TableField(fill = FieldFill.INSERT) + private Date createTime; + + /** + * 修改人 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 修改时间 + */ + + @JsonIgnore + @TableField(fill = FieldFill.INSERT_UPDATE) + private Date updateTime; + + /** + * 是否删除(0:正常/1:删除) + */ + @TableField("is_deleted") + private Integer isDeleted; + + /** + * 领用后公司/部门 + */ + @TableField("use_organization_id") + private Long useOrganizationId; + + /** + * 领用后存放位置 + */ + @TableField("position_id") + private Long positionId; + + /** + * 使用人员id + */ + @TableField("use_user_id") + private Long useUserId; + + /** + * 详细位置 + */ + @TableField("position_detail") + private String positionDetail; + + @TableField(exist = false) + private UmsUser _applicant; + + @TableField(exist = false) + private UmsOrganization _useOrganization; + + @TableField(exist = false) + private EamBasicPosition _position; + + @TableField(exist = false) + private UmsUser _useUser; +} diff --git a/system/src/main/java/com/yyy/system/entity/pojo/EamBusinessOutbound.java b/system/src/main/java/com/yyy/system/entity/pojo/EamBusinessOutbound.java new file mode 100644 index 0000000..9280394 --- /dev/null +++ b/system/src/main/java/com/yyy/system/entity/pojo/EamBusinessOutbound.java @@ -0,0 +1,152 @@ +package com.yyy.system.entity.pojo; + +import java.util.Date; + +import com.yyy.common.annotation.Excel; +import com.yyy.common.annotation.Excels; +import com.yyy.common.core.domain.entity.UmsOrganization; +import com.yyy.common.core.domain.entity.UmsUser; +import lombok.*; +import com.baomidou.mybatisplus.annotation.*; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonIgnore; + +/** + * 出库信息表(EamBusinessOutbound)表实体类 + * + * @author Fangy + * @since 2024-04-10 17:26:37 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@TableName(value = "eam_business_outbound") +public class EamBusinessOutbound { + private static final long serialVersionUID = -45404155224503791L; + + + /** + * 主键(主键) + */ + @JsonIgnore + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + /** + * 业务编号 + */ + @TableField("business_id") + private String businessId; + + /** + * 业务名称 + */ + @TableField("name") + private String name; + + /** + * 关联仓库id + */ + @TableField("warehouse_id") + private Long warehouseId; + + /** + * 资产编号List + */ + @TableField("asset_id_List") + private String assetIdList; + + /** + * 业务生成日期 + */ + @TableField("business_generated_date") + private Date businessGeneratedDate; + + /** + * 备注 + */ + @TableField("notes") + private String notes; + + /** + * 附件 + */ + @TableField("attach") + private String attach; + + /** + * 状态(0-草稿、1-已完成、2-拒绝、3-审批中、4-取消) + */ + @TableField("status") + private Integer status; + + /** + * 创建人 + */ + @TableField("create_user") + private Long createUser; + + /** + * 创建时间 + */ + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @TableField(fill = FieldFill.INSERT) + private Date createTime; + + /** + * 修改人 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 修改时间 + */ + + @JsonIgnore + @TableField(fill = FieldFill.INSERT_UPDATE) + private Date updateTime; + + /** + * 是否删除(0:正常/1:删除) + */ + @TableField("is_deleted") + private Integer isDeleted; + + /** + * 领用公司 + */ + @TableField("own_company_id") + private Long ownCompanyId; + + /** + * 领用部门 + */ + @TableField("use_organization_id") + private Long useOrganizationId; + + /** + * 领用人员 + */ + @TableField("use_user_id") + private Long useUserId; + + /** + * 出库位置 + */ + @TableField("position_detail") + private String positionDetail; + + private EamBasicWarehouse _warehouse; + + @TableField(exist = false) + private UmsOrganization _ownCompany; + + @TableField(exist = false) + private UmsOrganization _useOrganization; + + @TableField(exist = false) + private UmsUser _useUser; +} diff --git a/system/src/main/java/com/yyy/system/entity/pojo/EamBusinessRegistration.java b/system/src/main/java/com/yyy/system/entity/pojo/EamBusinessRegistration.java new file mode 100644 index 0000000..6505557 --- /dev/null +++ b/system/src/main/java/com/yyy/system/entity/pojo/EamBusinessRegistration.java @@ -0,0 +1,97 @@ +package com.yyy.system.entity.pojo; + +import java.util.Date; + +import lombok.*; +import com.baomidou.mybatisplus.annotation.*; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonIgnore; + +/** + * 资产登记信息表(EamBusinessRegistration)表实体类 + * + * @author Fangy + * @since 2024-04-10 13:17:46 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@TableName(value = "eam_business_registration") +public class EamBusinessRegistration { + private static final long serialVersionUID = 130986266559178214L; + + + /** + * 主键(主键) + */ + @JsonIgnore + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + /** + * 业务编号 + */ + @TableField("business_id") + private String businessId; + + /** + * 业务名称 + */ + @TableField("name") + private String name; + + /** + * 申请人id + */ + @TableField("applicant") + private Long applicant; + + /** + * 状态(0-草稿、1-已完成、2-拒绝、3-审批中、4-取消) + */ + @TableField("status") + private Integer status; + + /** + * 资产id + */ + @TableField("asset_id") + private Long assetId; + @TableField("config") + private String config; + + /** + * 创建人 + */ + @TableField("create_user") + private Long createUser; + + /** + * 创建时间 + */ + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @TableField(fill = FieldFill.INSERT) + private Date createTime; + + /** + * 修改人 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 修改时间 + */ + + @JsonIgnore + @TableField(fill = FieldFill.INSERT_UPDATE) + private Date updateTime; + + /** + * 是否删除(0:正常/1:删除) + */ + @TableField("is_deleted") + private Integer isDeleted; +} diff --git a/system/src/main/java/com/yyy/system/entity/pojo/EamBusinessRetirement.java b/system/src/main/java/com/yyy/system/entity/pojo/EamBusinessRetirement.java new file mode 100644 index 0000000..7183f06 --- /dev/null +++ b/system/src/main/java/com/yyy/system/entity/pojo/EamBusinessRetirement.java @@ -0,0 +1,141 @@ +package com.yyy.system.entity.pojo; + +import java.util.Date; + +import com.yyy.common.core.domain.entity.UmsUser; +import lombok.*; +import com.baomidou.mybatisplus.annotation.*; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonIgnore; + +/** + * 资产报废(EamBusinessRetirement)表实体类 + * + * @author Fangy + * @since 2024-05-10 10:54:27 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@TableName(value = "eam_business_retirement") +public class EamBusinessRetirement { + private static final long serialVersionUID = -63757723324677277L; + + + /** + * 主键(主键) + */ + @JsonIgnore + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + /** + * 业务编号 + */ + @TableField("business_id") + private String businessId; + + /** + * 业务名称 + */ + @TableField("name") + private String name; + + /** + * 申请人id + */ + @TableField("applicant") + private Long applicant; + + /** + * 资产编号List + */ + @TableField("asset_id_List") + private String assetIdList; + + /** + * 业务生成日期 + */ + @TableField("business_generated_date") + private Date businessGeneratedDate; + + /** + * 备注 + */ + @TableField("notes") + private String notes; + + /** + * 附件 + */ + @TableField("attach") + private String attach; + + /** + * 状态(0-草稿、1-已完成、2-拒绝、3-审批中、4-取消) + */ + @TableField("status") + private Integer status; + + /** + * 创建人 + */ + @TableField("create_user") + private Long createUser; + + /** + * 创建时间 + */ + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @TableField(fill = FieldFill.INSERT) + private Date createTime; + + /** + * 修改人 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 修改时间 + */ + + @JsonIgnore + @TableField(fill = FieldFill.INSERT_UPDATE) + private Date updateTime; + + /** + * 是否删除(0:正常/1:删除) + */ + @TableField("is_deleted") + private Integer isDeleted; + + /** + * 报废方式 + */ + @TableField("type") + private String type; + + /** + * 加急状态(0-普通、1:加急) + */ + @TableField("expedited_status") + private Integer expeditedStatus; + + /** + * 是否已报废(0-否、1:是) + */ + @TableField("is_retirement") + private Integer isRetirement; + + /** + * 是否已清理(0-否、1:是) + */ + @TableField("is_clean") + private Integer isClean; + + @TableField(exist = false) + private UmsUser _applicant; +} diff --git a/system/src/main/java/com/yyy/system/entity/pojo/EamBusinessReturn.java b/system/src/main/java/com/yyy/system/entity/pojo/EamBusinessReturn.java new file mode 100644 index 0000000..2405393 --- /dev/null +++ b/system/src/main/java/com/yyy/system/entity/pojo/EamBusinessReturn.java @@ -0,0 +1,149 @@ +package com.yyy.system.entity.pojo; + +import java.util.Date; + +import com.yyy.common.core.domain.entity.UmsUser; +import lombok.*; +import com.baomidou.mybatisplus.annotation.*; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonIgnore; + +/** + * 归还信息表(EamBusinessReturn)表实体类 + * + * @author Fangy + * @since 2024-04-10 17:26:46 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@TableName(value = "eam_business_return") +public class EamBusinessReturn { + private static final long serialVersionUID = -20403778402283811L; + + + /** + * 主键(主键) + */ + @JsonIgnore + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + /** + * 业务编号 + */ + @TableField("business_id") + private String businessId; + + /** + * 业务名称 + */ + @TableField("name") + private String name; + + /** + * 申请人id + */ + @TableField("applicant") + private Long applicant; + + /** + * 资产编号List + */ + @TableField("asset_id_List") + private String assetIdList; + + /** + * 业务生成日期 + */ + @TableField("business_generated_date") + private Date businessGeneratedDate; + + /** + * 备注 + */ + @TableField("notes") + private String notes; + + /** + * 附件 + */ + @TableField("attach") + private String attach; + + /** + * 状态(0-草稿、1-已完成、2-拒绝、3-审批中、4-取消) + */ + @TableField("status") + private Integer status; + + /** + * 创建人 + */ + @TableField("create_user") + private Long createUser; + + /** + * 创建时间 + */ + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @TableField(fill = FieldFill.INSERT) + private Date createTime; + + /** + * 修改人 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 修改时间 + */ + @JsonIgnore + @TableField(fill = FieldFill.INSERT_UPDATE) + private Date updateTime; + + /** + * 是否删除(0:正常/1:删除) + */ + @TableField("is_deleted") + private Integer isDeleted; + + /** + * 存放位置id + */ + @TableField("position_id") + private Long positionId; + + /** + * 详细位置 + */ + @TableField("position_detail") + private String positionDetail; + + /** + * 管理人员id + */ + @TableField("manager") + private Long manager; + + /** + * 使用人员id + */ + @TableField("use_user_id") + private Long useUserId; + + @TableField(exist = false) + private UmsUser _applicant; + + @TableField(exist = false) + private EamBasicPosition _position; + + @TableField(exist = false) + private UmsUser _manager; + + @TableField(exist = false) + private UmsUser _useUser; +} diff --git a/system/src/main/java/com/yyy/system/entity/pojo/EamBusinessReturnInventory.java b/system/src/main/java/com/yyy/system/entity/pojo/EamBusinessReturnInventory.java new file mode 100644 index 0000000..587f4bc --- /dev/null +++ b/system/src/main/java/com/yyy/system/entity/pojo/EamBusinessReturnInventory.java @@ -0,0 +1,151 @@ +package com.yyy.system.entity.pojo; + +import java.util.Date; + +import com.yyy.common.core.domain.entity.UmsOrganization; +import com.yyy.common.core.domain.entity.UmsUser; +import lombok.*; +import com.baomidou.mybatisplus.annotation.*; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonIgnore; + +/** + * 退库信息表(EamBusinessReturnInventory)表实体类 + * + * @author Fangy + * @since 2024-04-12 11:10:54 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@TableName(value = "eam_business_return_inventory") +public class EamBusinessReturnInventory { + private static final long serialVersionUID = -18521566912276488L; + + + /** + * 主键(主键) + */ + @JsonIgnore + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + /** + * 业务编号 + */ + @TableField("business_id") + private String businessId; + + /** + * 业务名称 + */ + @TableField("name") + private String name; + + /** + * 申请人 + */ + @TableField("applicant") + private Long applicant; + + /** + * 资产编号List + */ + @TableField("asset_id_List") + private String assetIdList; + + /** + * 业务生成日期 + */ + @TableField("business_generated_date") + private Date businessGeneratedDate; + + /** + * 备注 + */ + @TableField("notes") + private String notes; + + /** + * 附件 + */ + @TableField("attach") + private String attach; + + /** + * 状态(0-草稿、1-已完成、2-拒绝、3-审批中、4-取消) + */ + @TableField("status") + private Integer status; + + /** + * 创建人 + */ + @TableField("create_user") + private Long createUser; + + /** + * 创建时间 + */ + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @TableField(fill = FieldFill.INSERT) + private Date createTime; + + /** + * 修改人 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 修改时间 + */ + + @JsonIgnore + @TableField(fill = FieldFill.INSERT_UPDATE) + private Date updateTime; + + /** + * 是否删除(0:正常/1:删除) + */ + @TableField("is_deleted") + private Integer isDeleted; + + /** + * 领用后公司/部门id + */ + @TableField("use_organization_id") + private Long useOrganizationId; + + /** + * 领用后存放位置id + */ + @TableField("position_id") + private Long positionId; + + /** + * 详细位置id + */ + @TableField("position_detail") + private String positionDetail; + + /** + * 关联仓库id + */ + @TableField("warehouse_id") + private Long warehouseId; + + @TableField(exist = false) + private UmsUser _applicant; + + @TableField(exist = false) + private UmsOrganization _useOrganization; + + @TableField(exist = false) + private EamBasicPosition _position; + + @TableField(exist = false) + private EamBasicWarehouse _warehouse; +} diff --git a/system/src/main/java/com/yyy/system/entity/pojo/EamBusinessStorage.java b/system/src/main/java/com/yyy/system/entity/pojo/EamBusinessStorage.java new file mode 100644 index 0000000..8525fa0 --- /dev/null +++ b/system/src/main/java/com/yyy/system/entity/pojo/EamBusinessStorage.java @@ -0,0 +1,144 @@ +package com.yyy.system.entity.pojo; + +import java.util.Date; + +import com.yyy.common.core.domain.entity.UmsUser; +import lombok.*; +import com.baomidou.mybatisplus.annotation.*; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonIgnore; + +/** + * 入库信息表(EamBusinessStorage)表实体类 + * + * @author Fangy + * @since 2024-04-10 17:26:46 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@TableName(value = "eam_business_storage") +public class EamBusinessStorage { + private static final long serialVersionUID = -48106546260607219L; + + + /** + * 主键(主键) + */ + @JsonIgnore + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + /** + * 业务编号 + */ + @TableField("business_id") + private String businessId; + + /** + * 业务名称 + */ + @TableField("name") + private String name; + + /** + * 关联仓库id + */ + @TableField("warehouse_id") + private Long warehouseId; + + /** + * 资产编号List + */ + @TableField("asset_id_List") + private String assetIdList; + + /** + * 业务生成日期 + */ + @TableField("business_generated_date") + private Date businessGeneratedDate; + + /** + * 备注 + */ + @TableField("notes") + private String notes; + + /** + * 附件 + */ + @TableField("attach") + private String attach; + + /** + * 状态(0-草稿、1-已完成、2-拒绝、3-审批中、4-取消) + */ + @TableField("status") + private Integer status; + + /** + * 创建人 + */ + @TableField("create_user") + private Long createUser; + + /** + * 创建时间 + */ + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @TableField(fill = FieldFill.INSERT) + private Date createTime; + + /** + * 修改人 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 修改时间 + */ + + @JsonIgnore + @TableField(fill = FieldFill.INSERT_UPDATE) + private Date updateTime; + + /** + * 是否删除(0:正常/1:删除) + */ + @TableField("is_deleted") + private Integer isDeleted; + + /** + * 管理人员id + */ + @TableField("manager") + private Long manager; + + /** + * 存放位置id + */ + @TableField("position_id") + private Long positionId; + + /** + * 供应商id + */ + @TableField("supplier_vendor_id") + private Long supplierVendorId; + + @TableField(exist = false) + private EamBasicWarehouse _warehouse; + + @TableField(exist = false) + private UmsUser _manager; + + @TableField(exist = false) + private EamBasicPosition _position; + + @TableField(exist = false) + private EamBasicSupplierVendor _supplierVendor; +} diff --git a/system/src/main/java/com/yyy/system/entity/pojo/EamBusinessTransfer.java b/system/src/main/java/com/yyy/system/entity/pojo/EamBusinessTransfer.java new file mode 100644 index 0000000..6563952 --- /dev/null +++ b/system/src/main/java/com/yyy/system/entity/pojo/EamBusinessTransfer.java @@ -0,0 +1,156 @@ +package com.yyy.system.entity.pojo; + +import java.util.Date; + +import com.yyy.common.core.domain.entity.UmsOrganization; +import com.yyy.common.core.domain.entity.UmsUser; +import lombok.*; +import com.baomidou.mybatisplus.annotation.*; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonIgnore; + +/** + * 资产转移信息表(EamBusinessTransfer)表实体类 + * + * @author Fangy + * @since 2024-04-10 17:26:46 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@TableName(value = "eam_business_transfer") +public class EamBusinessTransfer { + private static final long serialVersionUID = -65104760920536564L; + + + /** + * 主键(主键) + */ + @JsonIgnore + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + /** + * 业务编号 + */ + @TableField("business_id") + private String businessId; + + /** + * 业务名称 + */ + @TableField("name") + private String name; + + /** + * 资产编号List + */ + @TableField("asset_id_List") + private String assetIdList; + + /** + * 业务生成日期 + */ + @TableField("business_generated_date") + private Date businessGeneratedDate; + + /** + * 备注 + */ + @TableField("notes") + private String notes; + + /** + * 附件 + */ + @TableField("attach") + private String attach; + + /** + * 状态(0-草稿、1-已完成、2-拒绝、3-审批中、4-取消) + */ + @TableField("status") + private Integer status; + + /** + * 创建人 + */ + @TableField("create_user") + private Long createUser; + + /** + * 创建时间 + */ + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @TableField(fill = FieldFill.INSERT) + private Date createTime; + + /** + * 修改人 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 修改时间 + */ + + @JsonIgnore + @TableField(fill = FieldFill.INSERT_UPDATE) + private Date updateTime; + + /** + * 是否删除(0:正常/1:删除) + */ + @TableField("is_deleted") + private Integer isDeleted; + + /** + * 调出使用公司/部门id + */ + @TableField("out_use_organization_id") + private Long outUseOrganizationId; + + /** + * 调入使用公司/部门id + */ + @TableField("in_use_organization_id") + private Long inUseOrganizationId; + + /** + * 调入管理员id + */ + @TableField("manager_id") + private Long managerId; + + /** + * 使用人员id + */ + @TableField("use_user_id") + private Long useUserId; + + /** + * 存放位置id + */ + @TableField("position_id") + private Long positionId; + + /** + * 详细位置 + */ + @TableField("position_detail") + private String positionDetail; + + @TableField(exist = false) + private UmsOrganization _outUseOrganization; + @TableField(exist = false) + private UmsOrganization _inUseOrganization; + @TableField(exist = false) + private UmsUser _manager; + @TableField(exist = false) + private UmsUser _useUser; + @TableField(exist = false) + private EamBasicPosition _position; +} diff --git a/system/src/main/java/com/yyy/system/entity/pojo/EamRepair.java b/system/src/main/java/com/yyy/system/entity/pojo/EamRepair.java new file mode 100644 index 0000000..8829d0d --- /dev/null +++ b/system/src/main/java/com/yyy/system/entity/pojo/EamRepair.java @@ -0,0 +1,116 @@ +package com.yyy.system.entity.pojo; + +import java.util.Date; + +import lombok.*; +import com.baomidou.mybatisplus.annotation.*; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonIgnore; + +/** + * 维修登记信息表(EamRepair)表实体类 + * + * @author Fangy + * @since 2024-04-12 15:00:37 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@TableName(value = "eam_repair") +public class EamRepair { + private static final long serialVersionUID = -22890008642236348L; + + + /** + * 主键(主键) + */ + @JsonIgnore + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + /** + * 业务编号 + */ + @TableField("business_id") + private String businessId; + + /** + * 业务名称 + */ + @TableField("name") + private String name; + + /** + * 资产编号List + */ + @TableField("asset_id_List") + private String assetIdList; + + /** + * 备注 + */ + @TableField("notes") + private String notes; + + /** + * 附件 + */ + @TableField("attach") + private String attach; + + /** + * 状态(0-草稿、1-已完成、2-拒绝、3-审批中、4-取消) + */ + @TableField("status") + private Integer status; + + /** + * 创建人 + */ + @TableField("create_user") + private Long createUser; + + /** + * 创建时间 + */ + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @TableField(fill = FieldFill.INSERT) + private Date createTime; + + /** + * 修改人 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 修改时间 + */ + + @JsonIgnore + @TableField(fill = FieldFill.INSERT_UPDATE) + private Date updateTime; + + /** + * 是否删除(0:正常/1:删除) + */ + @TableField("is_deleted") + private Integer isDeleted; + + /** + * 计划完成时间 + */ + @TableField("planned_date") + private Date plannedDate; + + /** + * 保养计划(维修类型)id + */ + @TableField("repair_type_id") + private Long repairTypeId; + + @TableField(exist = false) + private EamRepairType _repairType; +} diff --git a/system/src/main/java/com/yyy/system/entity/pojo/EamRepairFault.java b/system/src/main/java/com/yyy/system/entity/pojo/EamRepairFault.java new file mode 100644 index 0000000..7f1eb94 --- /dev/null +++ b/system/src/main/java/com/yyy/system/entity/pojo/EamRepairFault.java @@ -0,0 +1,101 @@ +package com.yyy.system.entity.pojo; + +import java.util.Date; + +import lombok.*; +import com.baomidou.mybatisplus.annotation.*; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonIgnore; + +/** + * 故障信息表(EamRepairFault)表实体类 + * + * @author Fangy + * @since 2024-04-12 15:41:30 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@TableName(value = "eam_repair_fault") +public class EamRepairFault { + private static final long serialVersionUID = -29712126701575650L; + + + /** + * 主键(主键) + */ + @JsonIgnore + @TableId(value = "fault_id", type = IdType.AUTO) + private Long faultId; + + /** + * 名称 + */ + @TableField("name") + private String name; + + /** + * 图片url + */ + @TableField("img") + private String img; + + /** + * 资产编号List + */ + @TableField("asset_id_List") + private String assetIdList; + + /** + * 附件 + */ + @TableField("attach") + private String attach; + + /** + * 备注 + */ + @TableField("notes") + private String notes; + + /** + * 状态(0-草稿、1-已完成、2-拒绝、3-审批中、4-取消) + */ + @TableField("status") + private Integer status; + + /** + * 创建人 + */ + @TableField("create_user") + private Long createUser; + + /** + * 创建时间 + */ + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @TableField(fill = FieldFill.INSERT) + private Date createTime; + + /** + * 修改人 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 修改时间 + */ + + @JsonIgnore + @TableField(fill = FieldFill.INSERT_UPDATE) + private Date updateTime; + + /** + * 是否删除(0:正常/1:删除) + */ + @TableField("is_deleted") + private Integer isDeleted; +} diff --git a/system/src/main/java/com/yyy/system/entity/pojo/EamRepairType.java b/system/src/main/java/com/yyy/system/entity/pojo/EamRepairType.java new file mode 100644 index 0000000..feeeb3d --- /dev/null +++ b/system/src/main/java/com/yyy/system/entity/pojo/EamRepairType.java @@ -0,0 +1,83 @@ +package com.yyy.system.entity.pojo; + +import java.util.Date; + +import lombok.*; +import com.baomidou.mybatisplus.annotation.*; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonIgnore; + +/** + * 保养计划(维修类型)表(EamRepairType)表实体类 + * + * @author Fangy + * @since 2024-04-12 15:00:39 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@TableName(value = "eam_repair_type") +public class EamRepairType { + private static final long serialVersionUID = 409427712443185629L; + + + /** + * 主键(主键) + */ + @JsonIgnore + @TableId(value = "repair_type_id", type = IdType.AUTO) + private Long repairTypeId; + + /** + * 名称 + */ + @TableField("name") + private String name; + + /** + * 配置信息 + */ + @TableField("config") + private String config; + + /** + * 备注 + */ + @TableField("notes") + private String notes; + + /** + * 创建人 + */ + @TableField("create_user") + private Long createUser; + + /** + * 创建时间 + */ + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @TableField(fill = FieldFill.INSERT) + private Date createTime; + + /** + * 修改人 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 修改时间 + */ + + @JsonIgnore + @TableField(fill = FieldFill.INSERT_UPDATE) + private Date updateTime; + + /** + * 是否删除(0:正常/1:删除) + */ + @TableField("is_deleted") + private Integer isDeleted; +} diff --git a/system/src/main/java/com/yyy/system/entity/pojo/EamStocktakingDetails.java b/system/src/main/java/com/yyy/system/entity/pojo/EamStocktakingDetails.java new file mode 100644 index 0000000..2ec9c3c --- /dev/null +++ b/system/src/main/java/com/yyy/system/entity/pojo/EamStocktakingDetails.java @@ -0,0 +1,101 @@ +package com.yyy.system.entity.pojo; + +import java.util.Date; + +import lombok.*; +import com.baomidou.mybatisplus.annotation.*; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonIgnore; + +/** + * 盘点明细(EamStocktakingDetails)表实体类 + * + * @author Fangy + * @since 2024-04-12 14:50:46 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@TableName(value = "eam_stocktaking_details") +public class EamStocktakingDetails { + private static final long serialVersionUID = -34302754388950638L; + + + /** + * 主键(主键) + */ + @JsonIgnore + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + /** + * 盘点任务id + */ + @TableField("stocktaking_job_id") + private Long stocktakingJobId; + + /** + * 盘点资产id + */ + @TableField("asset_id") + private Long assetId; + + /** + * 盘点状态(0-盘盈,1-盘亏,2-已盘点,3-带盘点,4-异常) + */ + @TableField("status") + private Integer status; + + @TableField("img") + private String img; + + /** + * 附件 + */ + @TableField("attachment") + private String attachment; + + /** + * 备注 + */ + @TableField("notes") + private String notes; + + /** + * 创建人 + */ + @TableField("create_user") + private Long createUser; + + /** + * 创建时间 + */ + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @TableField(fill = FieldFill.INSERT) + private Date createTime; + + /** + * 修改人 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 修改时间 + */ + + @JsonIgnore + @TableField(fill = FieldFill.INSERT_UPDATE) + private Date updateTime; + + /** + * 是否删除(0:正常/1:删除) + */ + @TableField("is_deleted") + private Integer isDeleted; + + @TableField(exist = false) + private EamAsset _asset; +} diff --git a/system/src/main/java/com/yyy/system/entity/pojo/EamStocktakingJob.java b/system/src/main/java/com/yyy/system/entity/pojo/EamStocktakingJob.java new file mode 100644 index 0000000..08c06a7 --- /dev/null +++ b/system/src/main/java/com/yyy/system/entity/pojo/EamStocktakingJob.java @@ -0,0 +1,181 @@ +package com.yyy.system.entity.pojo; + +import java.util.Date; + +import com.yyy.common.core.domain.entity.UmsOrganization; +import com.yyy.common.core.domain.entity.UmsUser; +import lombok.*; +import com.baomidou.mybatisplus.annotation.*; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonIgnore; + +/** + * 盘点任务表(EamStocktakingJob)表实体类 + * + * @author Fangy + * @since 2024-04-12 14:50:46 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@TableName(value = "eam_stocktaking_job") +public class EamStocktakingJob { + private static final long serialVersionUID = -31883664987595595L; + + + /** + * 主键(主键) + */ + @JsonIgnore + @TableId(value = "stocktaking_job_id", type = IdType.AUTO) + private Long stocktakingJobId; + + /** + * 业务名称 + */ + @TableField("name") + private String name; + + /** + * 负责人id + */ + @TableField("head") + private Long head; + + /** + * 全员盘点(0-禁用,1-启用) + */ + @TableField("full_stocktaking") + private Integer fullStocktaking; + + /** + * 盘点人id + */ + @TableField("stocktaking_user_id") + private Long stocktakingUserId; + + /** + * 购置开始日期 + */ + @TableField("stocktaking_start_date") + private Date stocktakingStartDate; + + /** + * 购置结束日期 + */ + @TableField("stocktaking_end_date") + private Date stocktakingEndDate; + + /** + * 资产状态(0-闲置 1-在用 2-借用中 3-维修中 4-调拨中 5-待报废 6-已处置 7-库存 8-已报废) + */ + @TableField("asset_status") + private Integer assetStatus; + + /** + * 所属公司id + */ + @TableField("own_company_id") + private Long ownCompanyId; + + /** + * 使用公司/部门id + */ + @TableField("use_organization_id") + private Long useOrganizationId; + + /** + * 保管人id + */ + @TableField("use_user_id") + private Long useUserId; + + /** + * 资产分类id + */ + @TableField("category_id") + private Long categoryId; + + /** + * 存放位置id + */ + @TableField("position_id") + private Long positionId; + + /** + * 仓库id + */ + @TableField("warehouse_id") + private Long warehouseId; + + /** + * 盘点状态(0-未开始,1-进行中,2-取消,3-已完成) + */ + @TableField("status") + private Integer status; + + /** + * 备注 + */ + @TableField("notes") + private String notes; + + /** + * 创建人 + */ + @TableField("create_user") + private Long createUser; + + /** + * 创建时间 + */ + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @TableField(fill = FieldFill.INSERT) + private Date createTime; + + /** + * 修改人 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 修改时间 + */ + + @JsonIgnore + @TableField(fill = FieldFill.INSERT_UPDATE) + private Date updateTime; + + /** + * 是否删除(0:正常/1:删除) + */ + @TableField("is_deleted") + private Integer isDeleted; + + @TableField(exist = false) + private UmsUser _stocktakingUser; + + @TableField(exist = false) + private UmsUser _head; + + @TableField(exist = false) + private UmsOrganization _ownCompany; + + @TableField(exist = false) + private UmsOrganization _useOrganization; + + @TableField(exist = false) + private UmsUser _useUser; + + @TableField(exist = false) + private EamBasicCategory _category; + + @TableField(exist = false) + private EamBasicPosition _position; + + @TableField(exist = false) + private EamBasicWarehouse _warehouse; +} diff --git a/system/src/main/java/com/yyy/system/entity/pojo/EamStocktakingPlan.java b/system/src/main/java/com/yyy/system/entity/pojo/EamStocktakingPlan.java new file mode 100644 index 0000000..a3c7ca0 --- /dev/null +++ b/system/src/main/java/com/yyy/system/entity/pojo/EamStocktakingPlan.java @@ -0,0 +1,181 @@ +package com.yyy.system.entity.pojo; + +import java.util.Date; + +import com.yyy.common.core.domain.entity.UmsOrganization; +import com.yyy.common.core.domain.entity.UmsUser; +import lombok.*; +import com.baomidou.mybatisplus.annotation.*; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonIgnore; + +/** + * 盘点计划信息(EamStocktakingPlan)表实体类 + * + * @author Fangy + * @since 2024-04-12 14:50:46 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@TableName(value = "eam_stocktaking_plan") +public class EamStocktakingPlan { + private static final long serialVersionUID = 123788071961761015L; + + + /** + * 主键(主键) + */ + @JsonIgnore + @TableId(value = "stocktaking_plan_id", type = IdType.AUTO) + private Long stocktakingPlanId; + + /** + * 业务名称 + */ + @TableField("name") + private String name; + + /** + * 负责人id + */ + @TableField("head") + private Long head; + + /** + * 全员盘点(0-禁用,1-启用) + */ + @TableField("full_stocktaking") + private Integer fullStocktaking; + + /** + * 盘点人id + */ + @TableField("stocktaking_user_id") + private Long stocktakingUserId; + + /** + * 购置开始日期 + */ + @TableField("stocktaking_start_date") + private Date stocktakingStartDate; + + /** + * 购置结束日期 + */ + @TableField("stocktaking_end_date") + private Date stocktakingEndDate; + + /** + * 资产状态(0-闲置 1-在用 2-借用中 3-维修中 4-调拨中 5-待报废 6-已处置 7-库存 8-已报废) + */ + @TableField("asset_status") + private Integer assetStatus; + + /** + * 所属公司id + */ + @TableField("own_company_id") + private Long ownCompanyId; + + /** + * 使用公司/部门id + */ + @TableField("use_organization_id") + private Long useOrganizationId; + + /** + * 保管人id + */ + @TableField("use_user_id") + private Long useUserId; + + /** + * 资产分类id + */ + @TableField("category_id") + private Long categoryId; + + /** + * 存放位置id + */ + @TableField("position_id") + private Long positionId; + + /** + * 仓库id + */ + @TableField("warehouse_id") + private Long warehouseId; + + /** + * 启用状态(0-禁用,1-启用) + */ + @TableField("status") + private Integer status; + + /** + * 备注 + */ + @TableField("notes") + private String notes; + + /** + * 创建人 + */ + @TableField("create_user") + private Long createUser; + + /** + * 创建时间 + */ + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @TableField(fill = FieldFill.INSERT) + private Date createTime; + + /** + * 修改人 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 修改时间 + */ + + @JsonIgnore + @TableField(fill = FieldFill.INSERT_UPDATE) + private Date updateTime; + + /** + * 是否删除(0:正常/1:删除) + */ + @TableField("is_deleted") + private Integer isDeleted; + + @TableField(exist = false) + private UmsUser _stocktakingUser; + + @TableField(exist = false) + private UmsUser _head; + + @TableField(exist = false) + private UmsOrganization _ownCompany; + + @TableField(exist = false) + private UmsOrganization _useOrganization; + + @TableField(exist = false) + private UmsUser _useUser; + + @TableField(exist = false) + private EamBasicCategory _category; + + @TableField(exist = false) + private EamBasicPosition _position; + + @TableField(exist = false) + private EamBasicWarehouse _warehouse; +} diff --git a/system/src/main/java/com/yyy/system/entity/pojo/EamWarehouseAsset.java b/system/src/main/java/com/yyy/system/entity/pojo/EamWarehouseAsset.java new file mode 100644 index 0000000..5982e22 --- /dev/null +++ b/system/src/main/java/com/yyy/system/entity/pojo/EamWarehouseAsset.java @@ -0,0 +1,40 @@ +package com.yyy.system.entity.pojo; + +import lombok.*; +import com.baomidou.mybatisplus.annotation.*; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonIgnore; + +/** + * 库存信息表(EamWarehouseAsset)表实体类 + * + * @author Fangy + * @since 2024-05-08 14:00:19 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@TableName(value = "eam_warehouse_asset") +public class EamWarehouseAsset { + private static final long serialVersionUID = -11832184427745361L; + + + /** + * 仓库id + */ + @TableField("warehouse_id") + private Long warehouseId; + + /** + * 资产id + */ + @TableField("asset_id") + private Long assetId; + + /** + * 库存数量 + */ + @TableField("count") + private Integer count; +} diff --git a/system/src/main/java/com/yyy/system/entity/pojo/EamWarehouseInventory.java b/system/src/main/java/com/yyy/system/entity/pojo/EamWarehouseInventory.java new file mode 100644 index 0000000..6669b9d --- /dev/null +++ b/system/src/main/java/com/yyy/system/entity/pojo/EamWarehouseInventory.java @@ -0,0 +1,44 @@ +package com.yyy.system.entity.pojo; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class EamWarehouseInventory { + private static final long serialVersionUID = 1L; + + private String assetId; + + private String assetCode; + + private String name; + + private String model; + + private String serialNumber; + + private Integer status; + + private String unit; + + private Integer count; + + private Long warehouseId; + + private String warehouseName; + + private Long categoryId; + + private String categoryName; + + private Integer upperLimit; + + private Integer lowerLimit; + + private Integer safetyLimit; +} diff --git a/system/src/main/java/com/yyy/system/entity/pojo/FlForm.java b/system/src/main/java/com/yyy/system/entity/pojo/FlForm.java new file mode 100644 index 0000000..67ae0b8 --- /dev/null +++ b/system/src/main/java/com/yyy/system/entity/pojo/FlForm.java @@ -0,0 +1,117 @@ +package com.yyy.system.entity.pojo; + +import java.util.Date; + +import com.yyy.common.core.domain.entity.UmsUser; +import lombok.*; +import com.baomidou.mybatisplus.annotation.*; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonIgnore; + +/** + * 流程表单对象(FlForm)表实体类 + * + * @author Fangy + * @since 2024-04-24 12:57:34 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@TableName(value = "fl_form") +public class FlForm { + private static final long serialVersionUID = -20152204578974282L; + + + /** + * 表单ID(主键) + */ + @JsonIgnore + @TableId(value = "form_id", type = IdType.AUTO) + private Long formId; + + /** + * 表单标识 + */ + @TableField("form_key") + private String formKey; + + /** + * 表单类型 + */ + @TableField("type") + private String type; + + /** + * 表单名称 + */ + @TableField("name") + private String name; + + /** + * PC端图标 + */ + @TableField("pc_icon") + private String pcIcon; + + /** + * 移动端图标 + */ + @TableField("mobile_icon") + private String mobileIcon; + + /** + * 表单内容 + */ + @TableField("config") + private String config; + + /** + * 流程id + */ + @TableField("deploy_id") + private String deployId; + + /** + * 状态(0:有效/1:无效) + */ + @TableField("status") + private Integer status; + + /** + * 是否删除(0:正常/1:删除) + */ + @TableField("is_deleted") + private Integer isDeleted; + + /** + * 创建人 + */ + @TableField("create_user") + private Long createUser; + + /** + * 创建时间 + */ + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @TableField(fill = FieldFill.INSERT) + private Date createTime; + + /** + * 修改人 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 修改时间 + */ + + @JsonIgnore + @TableField(fill = FieldFill.INSERT_UPDATE) + private Date updateTime; + + @TableField(exist = false) + private UmsUser _assignee; +} diff --git a/system/src/main/java/com/yyy/system/entity/pojo/FlFormItem.java b/system/src/main/java/com/yyy/system/entity/pojo/FlFormItem.java new file mode 100644 index 0000000..e97fa96 --- /dev/null +++ b/system/src/main/java/com/yyy/system/entity/pojo/FlFormItem.java @@ -0,0 +1,101 @@ +package com.yyy.system.entity.pojo; + +import java.util.Date; + +import lombok.*; +import com.baomidou.mybatisplus.annotation.*; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonIgnore; + +/** + * 流程实例对象(FlFormItem)表实体类 + * + * @author Fangy + * @since 2024-04-30 11:25:57 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@TableName(value = "fl_form_item") +public class FlFormItem { + private static final long serialVersionUID = 504018976657946216L; + + + /** + * 主键(主键) + */ + @JsonIgnore + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + /** + * 名称 + */ + @TableField("name") + private String name; + + /** + * 表单标识 + */ + @TableField("form_key") + private String formKey; + + /** + * 流程实例id + */ + @TableField("proc_ins_id") + private String procInsId; + + /** + * 审批内容 + */ + @TableField("contents") + private String contents; + + /** + * 审批记录 + */ + @TableField("logs") + private String logs; + + /** + * 状态 + */ + @TableField("status") + private Integer status; + + /** + * 是否删除(0:正常/1:删除) + */ + @TableField("is_deleted") + private Integer isDeleted; + + /** + * 创建人 + */ + @TableField("create_user") + private Long createUser; + + /** + * 创建时间 + */ + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @TableField(fill = FieldFill.INSERT) + private Date createTime; + + /** + * 修改人 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 修改时间 + */ + + @JsonIgnore + @TableField(fill = FieldFill.INSERT_UPDATE) + private Date updateTime; +} diff --git a/system/src/main/java/com/yyy/system/entity/pojo/FlListener.java b/system/src/main/java/com/yyy/system/entity/pojo/FlListener.java new file mode 100644 index 0000000..89306e4 --- /dev/null +++ b/system/src/main/java/com/yyy/system/entity/pojo/FlListener.java @@ -0,0 +1,100 @@ +package com.yyy.system.entity.pojo; + +import java.util.Date; +import lombok.*; +import com.baomidou.mybatisplus.annotation.*; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonIgnore; + +/** + * 流程监听对象(FlListener)表实体类 + * + * @author Fangy + * @since 2024-04-23 12:22:45 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@TableName(value = "fl_listener") +public class FlListener { + private static final long serialVersionUID = 113581845402610395L; + + + /** + * 主键(主键) + */ + @JsonIgnore + @TableId(value="id", type = IdType.AUTO) + private Long id; + + /** + * 名称 + */ + @TableField("name") + private String name; + + /** + * 监听类型 + */ + @TableField("type") + private String type; + + /** + * 事件类型 + */ + @TableField("event_type") + private String eventType; + + /** + * 值类型 + */ + @TableField("value_type") + private String valueType; + + /** + * 执行内容 + */ + @TableField("value") + private String value; + + /** + * 状态 + */ + @TableField("status") + private Integer status; + + /** + * 是否删除(0:正常/1:删除) + */ + @TableField("is_deleted") + private Integer isDeleted; + + /** + * 创建人 + */ + @TableField("create_user") + private Long createUser; + + /** + * 创建时间 + */ + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @TableField(fill = FieldFill.INSERT) + private Date createTime; + + /** + * 修改人 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 修改时间 + */ + + @JsonIgnore + @TableField(fill = FieldFill.INSERT_UPDATE) + private Date updateTime; + } diff --git a/system/src/main/java/com/yyy/system/entity/vo/EamAssetLogVo.java b/system/src/main/java/com/yyy/system/entity/vo/EamAssetLogVo.java new file mode 100644 index 0000000..4930022 --- /dev/null +++ b/system/src/main/java/com/yyy/system/entity/vo/EamAssetLogVo.java @@ -0,0 +1,57 @@ +package com.yyy.system.entity.vo; + +import java.util.*; +import java.util.stream.Collectors; + +import com.yyy.system.entity.pojo.EamAssetLog; +import com.yyy.common.utils.bean.BeanUtils; +import lombok.Data; +import lombok.Builder; +import lombok.NoArgsConstructor; +import lombok.AllArgsConstructor; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +/** + * 资产操作日志(EamAssetLog)视图数据类 + * + * @author Fangy + * @since 2024-04-09 10:23:39 + */ +@ApiModel("EamAssetLogVo资产操作日志视图数据类") +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class EamAssetLogVo { + + @ApiModelProperty("主键") + private Long id; + + @ApiModelProperty("业务编号") + private String businessId; + + @ApiModelProperty("操作类型") + private String operationType; + + @ApiModelProperty("操作内容") + private String operationNotes; + + @ApiModelProperty("关联资产编号") + private Long assetId; + + @ApiModelProperty("创建时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date createTime; + + public static EamAssetLogVo ToVo(EamAssetLog eamAssetLog) { + EamAssetLogVo eamAssetLogVo = new EamAssetLogVo(); + BeanUtils.copyProperties(eamAssetLog, eamAssetLogVo); + return eamAssetLogVo; + } + + public static List ToVo(List eamAssetLogs) { + return Optional.ofNullable(eamAssetLogs).orElse(Collections.emptyList()).stream().map(EamAssetLogVo::ToVo).collect(Collectors.toList()); + } +} diff --git a/system/src/main/java/com/yyy/system/entity/vo/EamAssetVo.java b/system/src/main/java/com/yyy/system/entity/vo/EamAssetVo.java new file mode 100644 index 0000000..149988c --- /dev/null +++ b/system/src/main/java/com/yyy/system/entity/vo/EamAssetVo.java @@ -0,0 +1,181 @@ +package com.yyy.system.entity.vo; + +import java.util.Collections; +import java.util.Date; +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; + +import com.yyy.common.core.domain.entity.UmsOrganization; +import com.yyy.common.core.domain.entity.UmsUser; +import com.yyy.system.entity.pojo.EamAsset; +import com.yyy.system.entity.pojo.*; +import com.yyy.common.utils.bean.BeanUtils; +import lombok.Data; +import lombok.Builder; +import lombok.NoArgsConstructor; +import lombok.AllArgsConstructor; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +/** + * 资产信息表(EamAsset)视图数据类 + * + * @author Fangy + * @since 2024-04-09 13:47:50 + */ +@ApiModel("EamAssetVo资产信息表视图数据类") +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class EamAssetVo { + + @ApiModelProperty("主键") + private Long assetId; + + @ApiModelProperty("资产编号") + private String assetCode; + + @ApiModelProperty("资产名称") + private String name; + + @ApiModelProperty("资产状态(0-闲置 1-在用 2-借用中 3-维修中 4-调拨中 5-待报废 6-已处置 7-库存 8-已报废)") + private Integer status; + + @ApiModelProperty("资产来源(0-捐赠 1-赠送 2-其他 3-采购 4-自建 5-自购)") + private Integer sourceId; + + @ApiModelProperty("规格型号") + private String model; + + @ApiModelProperty("序列号") + private String serialNumber; + + @ApiModelProperty("用途") + private String purpose; + + @ApiModelProperty("计量单位") + private String unit; + + @ApiModelProperty("详细位置") + private String positionDetail; + + @ApiModelProperty("资产备注") + private String notes; + + @ApiModelProperty("资产附件") + private String attachment; + + @ApiModelProperty("维保信息_联系人id") + private String contactor; + + @ApiModelProperty("维保信息_维保开始") + private Date maintenanceStartDate; + + @ApiModelProperty("维保信息_维保状态(0-不需要 1-脱保 2-在保 3-未知)") + private Integer maintenanceStatus; + + @ApiModelProperty("维保信息_联系方式") + private String contact; + + @ApiModelProperty("维保信息_维保到期") + private Date maintenanceEndDate; + + @ApiModelProperty("维保信息_负责人id") + private String responsiblePerson; + + @ApiModelProperty("维保信息_维保方式(0-原厂 1-第三方)") + private Integer maintenanceType; + + @ApiModelProperty("维保信息_建议维保方式(0-原厂 1-第三方)") + private Integer suggestMaintenanceType; + + @ApiModelProperty("维保信息_维保备注") + private String maintenanceNotes; + + @ApiModelProperty("维保信息_维保附件") + private String maintenanceAttachment; + + @ApiModelProperty("财务信息_财务分类id") + private Long financialCategoryId; + + @ApiModelProperty("财务信息_费用项目id") + private Long expenseItem; + + @ApiModelProperty("财务信息_未税成本") + private Double totalAmountPrice; + + @ApiModelProperty("财务信息_客户信息") + private String customerInfo; + + @ApiModelProperty("财务信息_资产税额") + private Double taxAmountRate; + + @ApiModelProperty("财务信息_入账日期") + private Date registerDate; + + @ApiModelProperty("财务信息_财务选项id") + private Long financialOption; + + @ApiModelProperty("财务信息_资产净值") + private Double navPrice; + + @ApiModelProperty("财务信息_残值率") + private Double residualsRate; + + @ApiModelProperty("财务信息_财务备注") + private String financialNotes; + + @ApiModelProperty("财务信息_附件") + private String financialAttachment; + + @ApiModelProperty("创建时间") + private Date createTime; + + @ApiModelProperty("业务状态(0-草稿、1-已完成、2-拒绝、3-审批中、4-取消)") + private Integer _businessStatus; + + @ApiModelProperty(notes = "仓库") + private EamBasicWarehouse _warehouse; + + @ApiModelProperty(notes = "供应商") + private EamBasicSupplierVendor _supplierVendor; + + @ApiModelProperty("资产分类信息") + private EamBasicCategory _category; + + @ApiModelProperty("所属公司信息") + private UmsOrganization _ownCompany; + + @ApiModelProperty("使用组织") + private UmsOrganization _useOrganization; + + @ApiModelProperty("管理人员") + private UmsUser _manager; + + @ApiModelProperty("资产厂商") + private EamBasicManufacturersVendor _manufacturersVendor; + + @ApiModelProperty("使用人员") + private UmsUser _useUser; + + @ApiModelProperty("存放位置") + private EamBasicPosition _position; + + @ApiModelProperty("维保信息_维保厂商") + private EamBasicMaintenanceVendor _maintenanceVendor; + + @ApiModelProperty("财务分类") + private EamBasicFinancialCategory _eamBasicFinancialCategory; + + public static EamAssetVo ToVo(EamAsset eamAsset) { + EamAssetVo eamAssetVo = new EamAssetVo(); + BeanUtils.copyProperties(eamAsset, eamAssetVo); + return eamAssetVo; + } + + public static List ToVo(List eamAssets) { + return Optional.ofNullable(eamAssets).orElse(Collections.emptyList()).stream().map(EamAssetVo::ToVo).collect(Collectors.toList()); + } +} diff --git a/system/src/main/java/com/yyy/system/entity/vo/EamBasicCategoryVo.java b/system/src/main/java/com/yyy/system/entity/vo/EamBasicCategoryVo.java new file mode 100644 index 0000000..af502b6 --- /dev/null +++ b/system/src/main/java/com/yyy/system/entity/vo/EamBasicCategoryVo.java @@ -0,0 +1,64 @@ +package com.yyy.system.entity.vo; + +import java.util.Collections; +import java.util.Date; +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; + +import com.yyy.system.entity.pojo.EamBasicCategory; +import com.yyy.common.utils.bean.BeanUtils; +import lombok.Data; +import lombok.Builder; +import lombok.NoArgsConstructor; +import lombok.AllArgsConstructor; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +/** + * 资产分类信息表(EamBasicCategory)视图数据类 + * + * @author Fangy + * @since 2024-04-08 14:22:31 + */ +@ApiModel("EamBasicCategoryVo资产分类信息表视图数据类") +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class EamBasicCategoryVo { + + @ApiModelProperty("资产分类编号") + private Long categoryId; + + @ApiModelProperty("资产分类名称") + private String categoryName; + + @ApiModelProperty("深度") + private String depth; + + @ApiModelProperty("父节点") + private Long parentId; + + @ApiModelProperty("安全库存上限") + private Integer upperLimit; + + @ApiModelProperty("安全库存下限") + private Integer lowerLimit; + + @ApiModelProperty(notes = "安全库存") + private Integer safetyLimit; + + @ApiModelProperty("创建时间") + private Date createTime; + + public static EamBasicCategoryVo ToVo(EamBasicCategory eamBasicCategory) { + EamBasicCategoryVo eamBasicCategoryVo = new EamBasicCategoryVo(); + BeanUtils.copyProperties(eamBasicCategory, eamBasicCategoryVo); + return eamBasicCategoryVo; + } + + public static List ToVo(List eamBasicCategorys) { + return Optional.ofNullable(eamBasicCategorys).orElse(Collections.emptyList()).stream().map(EamBasicCategoryVo::ToVo).collect(Collectors.toList()); + } +} diff --git a/system/src/main/java/com/yyy/system/entity/vo/EamBasicFinancialCategoryVo.java b/system/src/main/java/com/yyy/system/entity/vo/EamBasicFinancialCategoryVo.java new file mode 100644 index 0000000..31c879b --- /dev/null +++ b/system/src/main/java/com/yyy/system/entity/vo/EamBasicFinancialCategoryVo.java @@ -0,0 +1,64 @@ +package com.yyy.system.entity.vo; + +import java.util.Collections; +import java.util.Date; +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; + +import com.yyy.system.entity.pojo.EamBasicFinancialCategory; +import com.yyy.common.utils.bean.BeanUtils; +import lombok.Data; +import lombok.Builder; +import lombok.NoArgsConstructor; +import lombok.AllArgsConstructor; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +/** + * 财务分类信息表(EamBasicFinancialCategory)视图数据类 + * + * @author Fangy + * @since 2024-05-11 14:38:13 + */ +@ApiModel("EamBasicFinancialCategoryVo财务分类信息表视图数据类") +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class EamBasicFinancialCategoryVo { + + @ApiModelProperty("财务分类id") + private Long financialCategoryId; + + @ApiModelProperty("财务分类名称") + private String financialCategoryName; + + @ApiModelProperty("深度") + private String depth; + + @ApiModelProperty("父节点") + private Long parentId; + + @ApiModelProperty("使用期限(月)") + private Integer useTerms; + + @ApiModelProperty("备注") + private String notes; + + @ApiModelProperty("创建时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date createTime; + + public static EamBasicFinancialCategoryVo ToVo(EamBasicFinancialCategory eamBasicFinancialCategory) { + EamBasicFinancialCategoryVo eamBasicFinancialCategoryVo = new EamBasicFinancialCategoryVo(); + BeanUtils.copyProperties(eamBasicFinancialCategory, eamBasicFinancialCategoryVo); + return eamBasicFinancialCategoryVo; + } + + public static List ToVo(List eamBasicFinancialCategorys) { + return Optional.ofNullable(eamBasicFinancialCategorys).orElse(Collections.emptyList()).stream().map(EamBasicFinancialCategoryVo::ToVo).collect(Collectors.toList()); + } +} diff --git a/system/src/main/java/com/yyy/system/entity/vo/EamBasicMaintenanceVendorVo.java b/system/src/main/java/com/yyy/system/entity/vo/EamBasicMaintenanceVendorVo.java new file mode 100644 index 0000000..28f14bf --- /dev/null +++ b/system/src/main/java/com/yyy/system/entity/vo/EamBasicMaintenanceVendorVo.java @@ -0,0 +1,75 @@ +package com.yyy.system.entity.vo; + +import java.util.Collections; +import java.util.Date; +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; + +import com.yyy.system.entity.pojo.EamBasicMaintenanceVendor; +import com.yyy.common.utils.bean.BeanUtils; +import lombok.Data; +import lombok.Builder; +import lombok.NoArgsConstructor; +import lombok.AllArgsConstructor; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +/** + * 维保商(EamBasicMaintenanceVendor)视图数据类 + * + * @author Fangy + * @since 2024-04-09 12:52:28 + */ +@ApiModel("EamBasicMaintenanceVendorVo维保商视图数据类") +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class EamBasicMaintenanceVendorVo { + + @ApiModelProperty("主键") + private Long maintenanceVendorId; + + @ApiModelProperty("名称") + private String name; + + @ApiModelProperty("编码") + private String code; + + @ApiModelProperty("统一社会信用代码") + private String uscc; + + @ApiModelProperty("售后联系人") + private String afterSalesContactor; + + @ApiModelProperty("售后联系方式") + private String afterSalesContact; + + @ApiModelProperty("商务联系人") + private String businessContactor; + + @ApiModelProperty("商务联系方式") + private String businessContact; + + @ApiModelProperty("地址") + private String address; + + @ApiModelProperty("备注") + private String notes; + + @ApiModelProperty("创建时间") + private Date createTime; + + public static EamBasicMaintenanceVendorVo ToVo(EamBasicMaintenanceVendor eamBasicMaintenanceVendor) { + EamBasicMaintenanceVendorVo eamBasicMaintenanceVendorVo = new EamBasicMaintenanceVendorVo(); + BeanUtils.copyProperties(eamBasicMaintenanceVendor, eamBasicMaintenanceVendorVo); + return eamBasicMaintenanceVendorVo; + } + + public static List ToVo(List eamBasicMaintenanceVendors) { + return Optional.ofNullable(eamBasicMaintenanceVendors).orElse(Collections.emptyList()).stream().map(EamBasicMaintenanceVendorVo::ToVo).collect(Collectors.toList()); + } +} diff --git a/system/src/main/java/com/yyy/system/entity/vo/EamBasicManufacturersVendorVo.java b/system/src/main/java/com/yyy/system/entity/vo/EamBasicManufacturersVendorVo.java new file mode 100644 index 0000000..5f256b2 --- /dev/null +++ b/system/src/main/java/com/yyy/system/entity/vo/EamBasicManufacturersVendorVo.java @@ -0,0 +1,60 @@ +package com.yyy.system.entity.vo; + +import java.util.Collections; +import java.util.Date; +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; + +import com.yyy.system.entity.pojo.EamBasicManufacturersVendor; +import com.yyy.common.utils.bean.BeanUtils; +import lombok.Data; +import lombok.Builder; +import lombok.NoArgsConstructor; +import lombok.AllArgsConstructor; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +/** + * 生产商(EamBasicManufacturersVendor)视图数据类 + * + * @author Fangy + * @since 2024-04-09 12:45:34 + */ +@ApiModel("EamBasicManufacturersVendorVo生产商视图数据类") +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class EamBasicManufacturersVendorVo { + + @ApiModelProperty("主键") + private Long manufacturersVendorId; + + @ApiModelProperty("名称") + private String name; + + @ApiModelProperty("编码") + private String code; + + @ApiModelProperty("地址") + private String address; + + @ApiModelProperty("备注") + private String notes; + + @ApiModelProperty("创建时间") + private Date createTime; + + public static EamBasicManufacturersVendorVo ToVo(EamBasicManufacturersVendor eamBasicManufacturersVendor) { + EamBasicManufacturersVendorVo eamBasicManufacturersVendorVo = new EamBasicManufacturersVendorVo(); + BeanUtils.copyProperties(eamBasicManufacturersVendor, eamBasicManufacturersVendorVo); + return eamBasicManufacturersVendorVo; + } + + public static List ToVo(List eamBasicManufacturersVendors) { + return Optional.ofNullable(eamBasicManufacturersVendors).orElse(Collections.emptyList()).stream().map(EamBasicManufacturersVendorVo::ToVo).collect(Collectors.toList()); + } +} diff --git a/system/src/main/java/com/yyy/system/entity/vo/EamBasicPositionVo.java b/system/src/main/java/com/yyy/system/entity/vo/EamBasicPositionVo.java new file mode 100644 index 0000000..b481f1e --- /dev/null +++ b/system/src/main/java/com/yyy/system/entity/vo/EamBasicPositionVo.java @@ -0,0 +1,57 @@ +package com.yyy.system.entity.vo; + +import java.util.Collections; +import java.util.Date; +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; + +import com.yyy.system.entity.pojo.EamBasicPosition; +import com.yyy.common.utils.bean.BeanUtils; +import lombok.Data; +import lombok.Builder; +import lombok.NoArgsConstructor; +import lombok.AllArgsConstructor; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +/** + * 存放位置信息表(EamBasicPosition)视图数据类 + * + * @author Fangy + * @since 2024-04-09 12:52:28 + */ +@ApiModel("EamBasicPositionVo存放位置信息表视图数据类") +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class EamBasicPositionVo { + + @ApiModelProperty("资产分类编号") + private Long positionId; + + @ApiModelProperty("资产分类名称") + private String name; + + @ApiModelProperty("深度") + private String depth; + + @ApiModelProperty("父节点") + private Long parentId; + + @ApiModelProperty("创建时间") + private Date createTime; + + public static EamBasicPositionVo ToVo(EamBasicPosition eamBasicPosition) { + EamBasicPositionVo eamBasicPositionVo = new EamBasicPositionVo(); + BeanUtils.copyProperties(eamBasicPosition, eamBasicPositionVo); + return eamBasicPositionVo; + } + + public static List ToVo(List eamBasicPositions) { + return Optional.ofNullable(eamBasicPositions).orElse(Collections.emptyList()).stream().map(EamBasicPositionVo::ToVo).collect(Collectors.toList()); + } +} diff --git a/system/src/main/java/com/yyy/system/entity/vo/EamBasicSupplierVendorVo.java b/system/src/main/java/com/yyy/system/entity/vo/EamBasicSupplierVendorVo.java new file mode 100644 index 0000000..baf71d2 --- /dev/null +++ b/system/src/main/java/com/yyy/system/entity/vo/EamBasicSupplierVendorVo.java @@ -0,0 +1,75 @@ +package com.yyy.system.entity.vo; + +import java.util.Collections; +import java.util.Date; +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; + +import com.yyy.system.entity.pojo.EamBasicSupplierVendor; +import com.yyy.common.utils.bean.BeanUtils; +import lombok.Data; +import lombok.Builder; +import lombok.NoArgsConstructor; +import lombok.AllArgsConstructor; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +/** + * 供应商(EamBasicSupplierVendor)视图数据类 + * + * @author Fangy + * @since 2024-04-09 11:05:03 + */ +@ApiModel("EamBasicSupplierVendorVo供应商视图数据类") +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class EamBasicSupplierVendorVo { + + @ApiModelProperty("主键") + private Long supplierVendorId; + + @ApiModelProperty("名称") + private String name; + + @ApiModelProperty("编码") + private String code; + + @ApiModelProperty("统一社会信用代码") + private String uscc; + + @ApiModelProperty("售后联系人") + private String afterSalesContactor; + + @ApiModelProperty("售后联系方式") + private String afterSalesContact; + + @ApiModelProperty("商务联系人") + private String businessContactor; + + @ApiModelProperty("商务联系方式") + private String businessContact; + + @ApiModelProperty("地址") + private String address; + + @ApiModelProperty("备注") + private String notes; + + @ApiModelProperty("创建时间") + private Date createTime; + + public static EamBasicSupplierVendorVo ToVo(EamBasicSupplierVendor eamBasicSupplierVendor) { + EamBasicSupplierVendorVo eamBasicSupplierVendorVo = new EamBasicSupplierVendorVo(); + BeanUtils.copyProperties(eamBasicSupplierVendor, eamBasicSupplierVendorVo); + return eamBasicSupplierVendorVo; + } + + public static List ToVo(List eamBasicSupplierVendors) { + return Optional.ofNullable(eamBasicSupplierVendors).orElse(Collections.emptyList()).stream().map(EamBasicSupplierVendorVo::ToVo).collect(Collectors.toList()); + } +} diff --git a/system/src/main/java/com/yyy/system/entity/vo/EamBasicWarehouseVo.java b/system/src/main/java/com/yyy/system/entity/vo/EamBasicWarehouseVo.java new file mode 100644 index 0000000..1308d1f --- /dev/null +++ b/system/src/main/java/com/yyy/system/entity/vo/EamBasicWarehouseVo.java @@ -0,0 +1,52 @@ +package com.yyy.system.entity.vo; + +import java.util.Collections; +import java.util.Date; +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; + +import com.yyy.system.entity.pojo.EamBasicWarehouse; +import com.yyy.common.utils.bean.BeanUtils; +import lombok.Data; +import lombok.Builder; +import lombok.NoArgsConstructor; +import lombok.AllArgsConstructor; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +/** + * 仓库信息表(EamBasicWarehouse)视图数据类 + * + * @author Fangy + * @since 2024-04-09 13:16:59 + */ +@ApiModel("EamBasicWarehouseVo仓库信息表视图数据类") +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class EamBasicWarehouseVo { + + @ApiModelProperty("仓库编号") + private Long warehouseId; + + @ApiModelProperty("仓库名称") + private String name; + + @ApiModelProperty("状态(0:启用/1:禁用)") + private Integer status; + + @ApiModelProperty("创建时间") + private Date createTime; + + public static EamBasicWarehouseVo ToVo(EamBasicWarehouse eamBasicWarehouse) { + EamBasicWarehouseVo eamBasicWarehouseVo = new EamBasicWarehouseVo(); + BeanUtils.copyProperties(eamBasicWarehouse, eamBasicWarehouseVo); + return eamBasicWarehouseVo; + } + + public static List ToVo(List eamBasicWarehouses) { + return Optional.ofNullable(eamBasicWarehouses).orElse(Collections.emptyList()).stream().map(EamBasicWarehouseVo::ToVo).collect(Collectors.toList()); + } +} diff --git a/system/src/main/java/com/yyy/system/entity/vo/EamBusinessAllocateVo.java b/system/src/main/java/com/yyy/system/entity/vo/EamBusinessAllocateVo.java new file mode 100644 index 0000000..6aaecda --- /dev/null +++ b/system/src/main/java/com/yyy/system/entity/vo/EamBusinessAllocateVo.java @@ -0,0 +1,84 @@ +package com.yyy.system.entity.vo; + +import java.util.Collections; +import java.util.Date; +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; + +import com.alibaba.fastjson.JSON; +import com.yyy.common.core.domain.entity.UmsUser; +import com.yyy.system.entity.dto.EamWarehouseAssetDto; +import com.yyy.system.entity.pojo.EamBasicWarehouse; +import com.yyy.system.entity.pojo.EamBusinessAllocate; +import com.yyy.common.utils.bean.BeanUtils; +import lombok.Data; +import lombok.Builder; +import lombok.NoArgsConstructor; +import lombok.AllArgsConstructor; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +/** + * 调拨信息表(EamBusinessAllocate)视图数据类 + * + * @author Fangy + * @since 2024-04-11 16:16:14 + */ +@ApiModel("EamBusinessAllocateVo调拨信息表视图数据类") +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class EamBusinessAllocateVo { + + @ApiModelProperty("主键") + private Long id; + + @ApiModelProperty("业务编号") + private String businessId; + + @ApiModelProperty("业务名称") + private String name; + + @ApiModelProperty(notes = "资产库存信息List") + private List assetIdList; + + @ApiModelProperty("业务生成日期") + private Date businessGeneratedDate; + + @ApiModelProperty("备注") + private String notes; + + @ApiModelProperty("附件") + private String attach; + + @ApiModelProperty("状态(0-草稿、1-已完成、2-拒绝、3-审批中、4-取消)") + private Integer status; + + @ApiModelProperty("创建时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date createTime; + + @ApiModelProperty("申请人") + private UmsUser _applicant; + + @ApiModelProperty("调出仓库") + private EamBasicWarehouse _outWarehouse; + + @ApiModelProperty("调入仓库") + private EamBasicWarehouse _inWarehouse; + + public static EamBusinessAllocateVo ToVo(EamBusinessAllocate eamBusinessAllocate) { + EamBusinessAllocateVo eamBusinessAllocateVo = new EamBusinessAllocateVo(); + BeanUtils.copyProperties(eamBusinessAllocate, eamBusinessAllocateVo); + eamBusinessAllocateVo.setAssetIdList(JSON.parseArray(eamBusinessAllocate.getAssetIdList(),EamWarehouseAssetDto.class)); + return eamBusinessAllocateVo; + } + + public static List ToVo(List eamBusinessAllocates) { + return Optional.ofNullable(eamBusinessAllocates).orElse(Collections.emptyList()).stream().map(EamBusinessAllocateVo::ToVo).collect(Collectors.toList()); + } +} diff --git a/system/src/main/java/com/yyy/system/entity/vo/EamBusinessBorrowVo.java b/system/src/main/java/com/yyy/system/entity/vo/EamBusinessBorrowVo.java new file mode 100644 index 0000000..f72db4b --- /dev/null +++ b/system/src/main/java/com/yyy/system/entity/vo/EamBusinessBorrowVo.java @@ -0,0 +1,82 @@ +package com.yyy.system.entity.vo; + +import java.util.Collections; +import java.util.Date; +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; + +import com.alibaba.fastjson.JSON; +import com.yyy.common.core.domain.entity.UmsUser; +import com.yyy.system.entity.dto.EamWarehouseAssetDto; +import com.yyy.system.entity.pojo.EamBusinessBorrow; +import com.yyy.common.utils.bean.BeanUtils; +import lombok.Data; +import lombok.Builder; +import lombok.NoArgsConstructor; +import lombok.AllArgsConstructor; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +/** + * 借用信息表(EamBusinessBorrow)视图数据类 + * + * @author Fangy + * @since 2024-04-10 17:26:36 + */ +@ApiModel("EamBusinessBorrowVo借用信息表视图数据类") +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class EamBusinessBorrowVo { + + @ApiModelProperty("主键") + private Long id; + + @ApiModelProperty("业务编号") + private String businessId; + + @ApiModelProperty("业务名称") + private String name; + + @ApiModelProperty("申请人") + private UmsUser _applicant; + + @ApiModelProperty(notes = "资产库存信息List") + private List assetIdList; + + @ApiModelProperty("业务生成日期") + private Date businessGeneratedDate; + + @ApiModelProperty("备注") + private String notes; + + @ApiModelProperty("附件") + private String attach; + + @ApiModelProperty("状态(0-草稿、1-已完成、2-拒绝、3-审批中、4-取消)") + private Integer status; + + @ApiModelProperty("借用人") + private UmsUser _useUser; + + @ApiModelProperty("预计归还时间") + private Date returnTime; + + @ApiModelProperty("创建时间") + private Date createTime; + + public static EamBusinessBorrowVo ToVo(EamBusinessBorrow eamBusinessBorrow) { + EamBusinessBorrowVo eamBusinessBorrowVo = new EamBusinessBorrowVo(); + BeanUtils.copyProperties(eamBusinessBorrow, eamBusinessBorrowVo); + eamBusinessBorrowVo.setAssetIdList(JSON.parseArray(eamBusinessBorrow.getAssetIdList(),EamWarehouseAssetDto.class)); + return eamBusinessBorrowVo; + } + + public static List ToVo(List eamBusinessBorrows) { + return Optional.ofNullable(eamBusinessBorrows).orElse(Collections.emptyList()).stream().map(EamBusinessBorrowVo::ToVo).collect(Collectors.toList()); + } +} diff --git a/system/src/main/java/com/yyy/system/entity/vo/EamBusinessCollectionVo.java b/system/src/main/java/com/yyy/system/entity/vo/EamBusinessCollectionVo.java new file mode 100644 index 0000000..3c0df55 --- /dev/null +++ b/system/src/main/java/com/yyy/system/entity/vo/EamBusinessCollectionVo.java @@ -0,0 +1,90 @@ +package com.yyy.system.entity.vo; + +import java.util.Collections; +import java.util.Date; +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; + +import com.alibaba.fastjson.JSON; +import com.yyy.common.core.domain.entity.UmsOrganization; +import com.yyy.common.core.domain.entity.UmsUser; +import com.yyy.system.entity.dto.EamWarehouseAssetDto; +import com.yyy.system.entity.pojo.EamBasicPosition; +import com.yyy.system.entity.pojo.EamBusinessCollection; +import com.yyy.common.utils.bean.BeanUtils; +import lombok.Data; +import lombok.Builder; +import lombok.NoArgsConstructor; +import lombok.AllArgsConstructor; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +/** + * 资产领用信息表(EamBusinessCollection)视图数据类 + * + * @author Fangy + * @since 2024-04-12 11:48:10 + */ +@ApiModel("EamBusinessCollectionVo资产领用信息表视图数据类") +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class EamBusinessCollectionVo { + + @ApiModelProperty("主键") + private Long id; + + @ApiModelProperty("业务编号") + private String businessId; + + @ApiModelProperty("业务名称") + private String name; + + @ApiModelProperty("申请人") + private UmsUser _applicant; + + @ApiModelProperty(notes = "资产库存信息List") + private List assetIdList; + + @ApiModelProperty("业务生成日期") + private Date businessGeneratedDate; + + @ApiModelProperty("备注") + private String notes; + + @ApiModelProperty("附件") + private String attach; + + @ApiModelProperty("状态(0-草稿、1-已完成、2-拒绝、3-审批中、4-取消)") + private Integer status; + + @ApiModelProperty("创建时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date createTime; + + @ApiModelProperty("领用后公司/部门") + private UmsOrganization _useOrganization; + + @ApiModelProperty("领用后存放位置") + private EamBasicPosition _position; + + @ApiModelProperty("使用人员id") + private UmsUser _useUser; + + @ApiModelProperty("详细位置") + private String positionDetail; + + public static EamBusinessCollectionVo ToVo(EamBusinessCollection eamBusinessCollection) { + EamBusinessCollectionVo eamBusinessCollectionVo = new EamBusinessCollectionVo(); + BeanUtils.copyProperties(eamBusinessCollection, eamBusinessCollectionVo); + eamBusinessCollectionVo.setAssetIdList(JSON.parseArray(eamBusinessCollection.getAssetIdList(),EamWarehouseAssetDto.class)); + return eamBusinessCollectionVo; + } + + public static List ToVo(List eamBusinessCollections) { + return Optional.ofNullable(eamBusinessCollections).orElse(Collections.emptyList()).stream().map(EamBusinessCollectionVo::ToVo).collect(Collectors.toList()); + } +} diff --git a/system/src/main/java/com/yyy/system/entity/vo/EamBusinessOutboundVo.java b/system/src/main/java/com/yyy/system/entity/vo/EamBusinessOutboundVo.java new file mode 100644 index 0000000..9563b6f --- /dev/null +++ b/system/src/main/java/com/yyy/system/entity/vo/EamBusinessOutboundVo.java @@ -0,0 +1,91 @@ +package com.yyy.system.entity.vo; + +import java.util.Collections; +import java.util.Date; +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; + +import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.annotation.TableField; +import com.yyy.common.core.domain.entity.UmsOrganization; +import com.yyy.common.core.domain.entity.UmsUser; +import com.yyy.system.entity.dto.EamWarehouseAssetDto; +import com.yyy.system.entity.pojo.EamBasicWarehouse; +import com.yyy.system.entity.pojo.EamBusinessOutbound; +import com.yyy.common.utils.bean.BeanUtils; +import lombok.Data; +import lombok.Builder; +import lombok.NoArgsConstructor; +import lombok.AllArgsConstructor; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +/** + * 出库信息表(EamBusinessOutbound)视图数据类 + * + * @author Fangy + * @since 2024-04-10 17:26:37 + */ +@ApiModel("EamBusinessOutboundVo出库信息表视图数据类") +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class EamBusinessOutboundVo { + + @ApiModelProperty("主键") + private Long id; + + @ApiModelProperty("业务编号") + private String businessId; + + @ApiModelProperty("业务名称") + private String name; + + @ApiModelProperty(notes = "资产库存信息List") + private List assetIdList; + + @ApiModelProperty("业务生成日期") + private Date businessGeneratedDate; + + @ApiModelProperty("备注") + private String notes; + + @ApiModelProperty("附件") + private String attach; + + @ApiModelProperty("状态(0-草稿、1-已完成、2-拒绝、3-审批中、4-取消)") + private Integer status; + + @ApiModelProperty("出库位置") + private String positionDetail; + + @ApiModelProperty("创建时间") + private Date createTime; + + @ApiModelProperty("仓库") + private EamBasicWarehouse _warehouse; + + @ApiModelProperty("领用公司") + private UmsOrganization _ownCompany; + + @ApiModelProperty("领用部门") + private UmsOrganization _useOrganization; + + @ApiModelProperty("领用人员") + private UmsUser _useUser; + + public static EamBusinessOutboundVo ToVo(EamBusinessOutbound eamBusinessOutbound) { + EamBusinessOutboundVo eamBusinessOutboundVo = new EamBusinessOutboundVo(); + BeanUtils.copyProperties(eamBusinessOutbound, eamBusinessOutboundVo); + eamBusinessOutboundVo.setAssetIdList(JSON.parseArray(eamBusinessOutbound.getAssetIdList(), EamWarehouseAssetDto.class)); + return eamBusinessOutboundVo; + } + + public static List ToVo(List eamBusinessOutbounds) { + return Optional.ofNullable(eamBusinessOutbounds).orElse(Collections.emptyList()).stream().map(EamBusinessOutboundVo::ToVo).collect(Collectors.toList()); + } +} diff --git a/system/src/main/java/com/yyy/system/entity/vo/EamBusinessRegistrationVo.java b/system/src/main/java/com/yyy/system/entity/vo/EamBusinessRegistrationVo.java new file mode 100644 index 0000000..57e8ffb --- /dev/null +++ b/system/src/main/java/com/yyy/system/entity/vo/EamBusinessRegistrationVo.java @@ -0,0 +1,65 @@ +package com.yyy.system.entity.vo; + +import java.util.Collections; +import java.util.Date; +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; + +import com.yyy.system.entity.pojo.EamBusinessRegistration; +import com.yyy.common.utils.bean.BeanUtils; +import lombok.Data; +import lombok.Builder; +import lombok.NoArgsConstructor; +import lombok.AllArgsConstructor; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +/** + * 资产登记信息表(EamBusinessRegistration)视图数据类 + * + * @author Fangy + * @since 2024-04-10 13:17:47 + */ +@ApiModel("EamBusinessRegistrationVo资产登记信息表视图数据类") +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class EamBusinessRegistrationVo { + + @ApiModelProperty("主键") + private Long id; + + @ApiModelProperty("业务编号") + private String businessId; + + @ApiModelProperty("业务名称") + private String name; + + @ApiModelProperty("申请人id") + private Long applicant; + + @ApiModelProperty("状态(0-草稿、1-已完成、2-拒绝、3-审批中、4-取消)") + private Integer status; + + @ApiModelProperty("资产id") + private Long assetId; + + private String config; + + @ApiModelProperty("创建时间") + private Date createTime; + + public static EamBusinessRegistrationVo ToVo(EamBusinessRegistration eamBusinessRegistration) { + EamBusinessRegistrationVo eamBusinessRegistrationVo = new EamBusinessRegistrationVo(); + BeanUtils.copyProperties(eamBusinessRegistration, eamBusinessRegistrationVo); + return eamBusinessRegistrationVo; + } + + public static List ToVo(List eamBusinessRegistrations) { + return Optional.ofNullable(eamBusinessRegistrations).orElse(Collections.emptyList()).stream().map(EamBusinessRegistrationVo::ToVo).collect(Collectors.toList()); + } +} diff --git a/system/src/main/java/com/yyy/system/entity/vo/EamBusinessRetirementVo.java b/system/src/main/java/com/yyy/system/entity/vo/EamBusinessRetirementVo.java new file mode 100644 index 0000000..9bdc090 --- /dev/null +++ b/system/src/main/java/com/yyy/system/entity/vo/EamBusinessRetirementVo.java @@ -0,0 +1,89 @@ +package com.yyy.system.entity.vo; + +import java.util.Collections; +import java.util.Date; +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; + +import com.alibaba.fastjson.JSON; +import com.yyy.common.core.domain.entity.UmsUser; +import com.yyy.system.entity.dto.EamWarehouseAssetDto; +import com.yyy.system.entity.pojo.EamBusinessRetirement; +import com.yyy.common.utils.bean.BeanUtils; +import lombok.Data; +import lombok.Builder; +import lombok.NoArgsConstructor; +import lombok.AllArgsConstructor; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +/** + * 资产报废(EamBusinessRetirement)视图数据类 + * + * @author Fangy + * @since 2024-05-10 10:54:29 + */ +@ApiModel("EamBusinessRetirementVo资产报废视图数据类") +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class EamBusinessRetirementVo { + + @ApiModelProperty("主键") + private Long id; + + @ApiModelProperty("业务编号") + private String businessId; + + @ApiModelProperty("业务名称") + private String name; + + @ApiModelProperty("申请人") + private UmsUser _applicant; + + @ApiModelProperty(notes = "资产库存信息List") + private List assetIdList; + + @ApiModelProperty("业务生成日期") + private Date businessGeneratedDate; + + @ApiModelProperty("备注") + private String notes; + + @ApiModelProperty("附件") + private String attach; + + @ApiModelProperty("状态(0-草稿、1-已完成、2-拒绝、3-审批中、4-取消)") + private Integer status; + + @ApiModelProperty("创建时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date createTime; + + @ApiModelProperty("报废方式") + private String type; + + @ApiModelProperty("加急状态(0-普通、1:加急)") + private Integer expeditedStatus; + + @ApiModelProperty("是否已报废(0-否、1:是)") + private Integer isRetirement; + + @ApiModelProperty("是否已清理(0-否、1:是)") + private Integer isClean; + + public static EamBusinessRetirementVo ToVo(EamBusinessRetirement eamBusinessRetirement) { + EamBusinessRetirementVo eamBusinessRetirementVo = new EamBusinessRetirementVo(); + BeanUtils.copyProperties(eamBusinessRetirement, eamBusinessRetirementVo); + eamBusinessRetirementVo.setAssetIdList(JSON.parseArray(eamBusinessRetirement.getAssetIdList(), EamWarehouseAssetDto.class)); + return eamBusinessRetirementVo; + } + + public static List ToVo(List eamBusinessRetirements) { + return Optional.ofNullable(eamBusinessRetirements).orElse(Collections.emptyList()).stream().map(EamBusinessRetirementVo::ToVo).collect(Collectors.toList()); + } +} diff --git a/system/src/main/java/com/yyy/system/entity/vo/EamBusinessReturnInventoryVo.java b/system/src/main/java/com/yyy/system/entity/vo/EamBusinessReturnInventoryVo.java new file mode 100644 index 0000000..d506579 --- /dev/null +++ b/system/src/main/java/com/yyy/system/entity/vo/EamBusinessReturnInventoryVo.java @@ -0,0 +1,93 @@ +package com.yyy.system.entity.vo; + +import java.util.Collections; +import java.util.Date; +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; + +import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.annotation.TableField; +import com.yyy.common.core.domain.entity.UmsOrganization; +import com.yyy.common.core.domain.entity.UmsUser; +import com.yyy.system.entity.dto.EamWarehouseAssetDto; +import com.yyy.system.entity.pojo.EamBasicPosition; +import com.yyy.system.entity.pojo.EamBasicWarehouse; +import com.yyy.system.entity.pojo.EamBusinessReturnInventory; +import com.yyy.common.utils.bean.BeanUtils; +import lombok.Data; +import lombok.Builder; +import lombok.NoArgsConstructor; +import lombok.AllArgsConstructor; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +/** + * 退库信息表(EamBusinessReturnInventory)视图数据类 + * + * @author Fangy + * @since 2024-04-12 11:10:56 + */ +@ApiModel("EamBusinessReturnInventoryVo退库信息表视图数据类") +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class EamBusinessReturnInventoryVo { + + @ApiModelProperty("主键") + private Long id; + + @ApiModelProperty("业务编号") + private String businessId; + + @ApiModelProperty("业务名称") + private String name; + + @ApiModelProperty(notes = "资产库存信息List") + private List assetIdList; + + @ApiModelProperty("业务生成日期") + private Date businessGeneratedDate; + + @ApiModelProperty("备注") + private String notes; + + @ApiModelProperty("附件") + private String attach; + + @ApiModelProperty("状态(0-草稿、1-已完成、2-拒绝、3-审批中、4-取消)") + private Integer status; + + @ApiModelProperty("创建时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date createTime; + + @ApiModelProperty("详细位置id") + private String positionDetail; + + @ApiModelProperty("申请人") + private UmsUser _applicant; + + @ApiModelProperty("领用后公司/部门") + private UmsOrganization _useOrganization; + + @ApiModelProperty("领用后存放位置") + private EamBasicPosition _position; + + @ApiModelProperty("关联仓库") + private EamBasicWarehouse _warehouse; + + public static EamBusinessReturnInventoryVo ToVo(EamBusinessReturnInventory eamBusinessReturnInventory) { + EamBusinessReturnInventoryVo eamBusinessReturnInventoryVo = new EamBusinessReturnInventoryVo(); + BeanUtils.copyProperties(eamBusinessReturnInventory, eamBusinessReturnInventoryVo); + eamBusinessReturnInventoryVo.setAssetIdList(JSON.parseArray(eamBusinessReturnInventory.getAssetIdList(),EamWarehouseAssetDto.class)); + return eamBusinessReturnInventoryVo; + } + + public static List ToVo(List eamBusinessReturnInventorys) { + return Optional.ofNullable(eamBusinessReturnInventorys).orElse(Collections.emptyList()).stream().map(EamBusinessReturnInventoryVo::ToVo).collect(Collectors.toList()); + } +} diff --git a/system/src/main/java/com/yyy/system/entity/vo/EamBusinessReturnVo.java b/system/src/main/java/com/yyy/system/entity/vo/EamBusinessReturnVo.java new file mode 100644 index 0000000..81ec20a --- /dev/null +++ b/system/src/main/java/com/yyy/system/entity/vo/EamBusinessReturnVo.java @@ -0,0 +1,89 @@ +package com.yyy.system.entity.vo; + +import java.util.Collections; +import java.util.Date; +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; + +import com.alibaba.fastjson.JSON; +import com.yyy.common.core.domain.entity.UmsUser; +import com.yyy.system.entity.dto.EamWarehouseAssetDto; +import com.yyy.system.entity.pojo.EamBasicPosition; +import com.yyy.system.entity.pojo.EamBusinessReturn; +import com.yyy.common.utils.bean.BeanUtils; +import lombok.Data; +import lombok.Builder; +import lombok.NoArgsConstructor; +import lombok.AllArgsConstructor; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +/** + * 归还信息表(EamBusinessReturn)视图数据类 + * + * @author Fangy + * @since 2024-04-10 17:26:46 + */ +@ApiModel("EamBusinessReturnVo归还信息表视图数据类") +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class EamBusinessReturnVo { + + @ApiModelProperty("主键") + private Long id; + + @ApiModelProperty("业务编号") + private String businessId; + + @ApiModelProperty("业务名称") + private String name; + + @ApiModelProperty("申请人") + private UmsUser _applicant; + + @ApiModelProperty(notes = "资产库存信息List") + private List assetIdList; + + @ApiModelProperty("业务生成日期") + private Date businessGeneratedDate; + + @ApiModelProperty("备注") + private String notes; + + @ApiModelProperty("附件") + private String attach; + + @ApiModelProperty("状态(0-草稿、1-已完成、2-拒绝、3-审批中、4-取消)") + private Integer status; + + @ApiModelProperty("创建时间") + private Date createTime; + + @ApiModelProperty("存放位置") + private EamBasicPosition _position; + + @ApiModelProperty("详细位置") + private String positionDetail; + + @ApiModelProperty("管理人员") + private UmsUser _manager; + + @ApiModelProperty("使用人员") + private UmsUser _useUser; + + public static EamBusinessReturnVo ToVo(EamBusinessReturn eamBusinessReturn) { + EamBusinessReturnVo eamBusinessReturnVo = new EamBusinessReturnVo(); + BeanUtils.copyProperties(eamBusinessReturn, eamBusinessReturnVo); + eamBusinessReturnVo.setAssetIdList(JSON.parseArray(eamBusinessReturn.getAssetIdList(),EamWarehouseAssetDto.class)); + return eamBusinessReturnVo; + } + + public static List ToVo(List eamBusinessReturns) { + return Optional.ofNullable(eamBusinessReturns).orElse(Collections.emptyList()).stream().map(EamBusinessReturnVo::ToVo).collect(Collectors.toList()); + } +} diff --git a/system/src/main/java/com/yyy/system/entity/vo/EamBusinessStorageVo.java b/system/src/main/java/com/yyy/system/entity/vo/EamBusinessStorageVo.java new file mode 100644 index 0000000..b277c19 --- /dev/null +++ b/system/src/main/java/com/yyy/system/entity/vo/EamBusinessStorageVo.java @@ -0,0 +1,97 @@ +package com.yyy.system.entity.vo; + +import java.util.Collections; +import java.util.Date; +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; + +import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.annotation.TableField; +import com.yyy.common.core.domain.entity.UmsUser; +import com.yyy.system.entity.dto.EamWarehouseAssetDto; +import com.yyy.system.entity.pojo.EamBasicPosition; +import com.yyy.system.entity.pojo.EamBasicSupplierVendor; +import com.yyy.system.entity.pojo.EamBasicWarehouse; +import com.yyy.system.entity.pojo.EamBusinessStorage; +import com.yyy.common.utils.bean.BeanUtils; +import lombok.Data; +import lombok.Builder; +import lombok.NoArgsConstructor; +import lombok.AllArgsConstructor; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +/** + * 入库信息表(EamBusinessStorage)视图数据类 + * + * @author Fangy + * @since 2024-04-10 17:26:46 + */ +@ApiModel("EamBusinessStorageVo入库信息表视图数据类") +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class EamBusinessStorageVo { + + @ApiModelProperty("主键") + private Long id; + + @ApiModelProperty("业务编号") + private String businessId; + + @ApiModelProperty("业务名称") + private String name; + + @ApiModelProperty("关联仓库id") + private Long warehouseId; + + @ApiModelProperty(notes = "资产库存信息List") + private List assetIdList; + + @ApiModelProperty("业务生成日期") + private Date businessGeneratedDate; + + @ApiModelProperty("备注") + private String notes; + + @ApiModelProperty("附件") + private String attach; + + @ApiModelProperty("状态(0-草稿、1-已完成、2-拒绝、3-审批中、4-取消)") + private Integer status; + + @ApiModelProperty("管理人员id") + private Long manager; + + @ApiModelProperty("存放位置id") + private Long positionId; + + @ApiModelProperty("供应商id") + private Long supplierVendorId; + + @ApiModelProperty(notes = "购置日期") + private Date createTime; + + private EamBasicWarehouse _warehouse; + + private UmsUser _manager; + + private EamBasicPosition _position; + + private EamBasicSupplierVendor _supplierVendor; + + public static EamBusinessStorageVo ToVo(EamBusinessStorage eamBusinessStorage) { + EamBusinessStorageVo eamBusinessStorageVo = new EamBusinessStorageVo(); + BeanUtils.copyProperties(eamBusinessStorage, eamBusinessStorageVo); + eamBusinessStorageVo.setAssetIdList(JSON.parseArray(eamBusinessStorage.getAssetIdList(),EamWarehouseAssetDto.class)); + return eamBusinessStorageVo; + } + + public static List ToVo(List eamBusinessStorages) { + return Optional.ofNullable(eamBusinessStorages).orElse(Collections.emptyList()).stream().map(EamBusinessStorageVo::ToVo).collect(Collectors.toList()); + } +} diff --git a/system/src/main/java/com/yyy/system/entity/vo/EamBusinessTransferVo.java b/system/src/main/java/com/yyy/system/entity/vo/EamBusinessTransferVo.java new file mode 100644 index 0000000..9754b08 --- /dev/null +++ b/system/src/main/java/com/yyy/system/entity/vo/EamBusinessTransferVo.java @@ -0,0 +1,93 @@ +package com.yyy.system.entity.vo; + +import java.util.Collections; +import java.util.Date; +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; + +import com.alibaba.fastjson.JSON; +import com.yyy.common.core.domain.entity.UmsOrganization; +import com.yyy.common.core.domain.entity.UmsUser; +import com.yyy.system.entity.dto.EamWarehouseAssetDto; +import com.yyy.system.entity.pojo.EamBasicPosition; +import com.yyy.system.entity.pojo.EamBusinessTransfer; +import com.yyy.common.utils.bean.BeanUtils; +import lombok.Data; +import lombok.Builder; +import lombok.NoArgsConstructor; +import lombok.AllArgsConstructor; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +/** + * 资产转移信息表(EamBusinessTransfer)视图数据类 + * + * @author Fangy + * @since 2024-04-10 17:26:47 + */ +@ApiModel("EamBusinessTransferVo资产转移信息表视图数据类") +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class EamBusinessTransferVo { + + @ApiModelProperty("主键") + private Long id; + + @ApiModelProperty("业务编号") + private String businessId; + + @ApiModelProperty("业务名称") + private String name; + + @ApiModelProperty(notes = "资产库存信息List") + private List assetIdList; + + @ApiModelProperty("业务生成日期") + private Date businessGeneratedDate; + + @ApiModelProperty("备注") + private String notes; + + @ApiModelProperty("附件") + private String attach; + + @ApiModelProperty("状态(0-草稿、1-已完成、2-拒绝、3-审批中、4-取消)") + private Integer status; + + @ApiModelProperty("创建时间") + private Date createTime; + + @ApiModelProperty("调出使用公司/部门") + private UmsOrganization _outUseOrganization; + + @ApiModelProperty("调入使用公司/部门") + private UmsOrganization _inUseOrganization; + + @ApiModelProperty("调入管理员") + private UmsUser _manager; + + @ApiModelProperty("使用人员") + private UmsUser _useUser; + + @ApiModelProperty("存放位置") + private EamBasicPosition _position; + + @ApiModelProperty("详细位置") + private String positionDetail; + + public static EamBusinessTransferVo ToVo(EamBusinessTransfer eamBusinessTransfer) { + EamBusinessTransferVo eamBusinessTransferVo = new EamBusinessTransferVo(); + BeanUtils.copyProperties(eamBusinessTransfer, eamBusinessTransferVo); + eamBusinessTransferVo.setAssetIdList(JSON.parseArray(eamBusinessTransfer.getAssetIdList(),EamWarehouseAssetDto.class)); + return eamBusinessTransferVo; + } + + public static List ToVo(List eamBusinessTransfers) { + return Optional.ofNullable(eamBusinessTransfers).orElse(Collections.emptyList()).stream().map(EamBusinessTransferVo::ToVo).collect(Collectors.toList()); + } +} diff --git a/system/src/main/java/com/yyy/system/entity/vo/EamChartVo.java b/system/src/main/java/com/yyy/system/entity/vo/EamChartVo.java new file mode 100644 index 0000000..f966cba --- /dev/null +++ b/system/src/main/java/com/yyy/system/entity/vo/EamChartVo.java @@ -0,0 +1,23 @@ +package com.yyy.system.entity.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + + +@ApiModel("主页图表数据") +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class EamChartVo { + + @ApiModelProperty("总数") + private Integer total; + + @ApiModelProperty("名称") + private String name; +} diff --git a/system/src/main/java/com/yyy/system/entity/vo/EamHomeVo.java b/system/src/main/java/com/yyy/system/entity/vo/EamHomeVo.java new file mode 100644 index 0000000..f808771 --- /dev/null +++ b/system/src/main/java/com/yyy/system/entity/vo/EamHomeVo.java @@ -0,0 +1,55 @@ +package com.yyy.system.entity.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + + +@ApiModel("主页展示数据") +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class EamHomeVo { + + @ApiModelProperty("资产总数") + private EamTotalVo assetTotal; + + @ApiModelProperty("借用预警") + private EamTotalVo borrowWarning; + + @ApiModelProperty("维保到期预警") + private EamTotalVo maintenanceWarning; + + @ApiModelProperty("库存安全预警") + private EamTotalVo inventorySecurityWarning; + + @ApiModelProperty("待我处理") + private Long todo; + + @ApiModelProperty("资产状态分布") + private List assetStatusChart; + + @ApiModelProperty("资产存放分布") + private List assetPositionChart; + + @ApiModelProperty("资产类型分布") + private List assetCategoryChart; + + @ApiModelProperty("资产库存分布") + private List assetInventoryChart; + + @ApiModelProperty("资产归属分布") + private List assetOwnChart; + + @ApiModelProperty("资产使用分布") + private List assetUseChart; + + @ApiModelProperty("最近新增资产") + private List recentlyAddedAssets; +} diff --git a/system/src/main/java/com/yyy/system/entity/vo/EamRepairFaultVo.java b/system/src/main/java/com/yyy/system/entity/vo/EamRepairFaultVo.java new file mode 100644 index 0000000..b0f9467 --- /dev/null +++ b/system/src/main/java/com/yyy/system/entity/vo/EamRepairFaultVo.java @@ -0,0 +1,69 @@ +package com.yyy.system.entity.vo; + +import java.util.Collections; +import java.util.Date; +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; + +import com.alibaba.fastjson.JSON; +import com.yyy.system.entity.dto.EamWarehouseAssetDto; +import com.yyy.system.entity.pojo.EamRepairFault; +import com.yyy.common.utils.bean.BeanUtils; +import lombok.Data; +import lombok.Builder; +import lombok.NoArgsConstructor; +import lombok.AllArgsConstructor; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +/** + * 故障信息表(EamRepairFault)视图数据类 + * + * @author Fangy + * @since 2024-04-12 15:41:32 + */ +@ApiModel("EamRepairFaultVo故障信息表视图数据类") +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class EamRepairFaultVo { + + @ApiModelProperty("主键") + private Long faultId; + + @ApiModelProperty("名称") + private String name; + + @ApiModelProperty("图片url") + private String img; + + @ApiModelProperty(notes = "资产库存信息List") + private List assetIdList; + + @ApiModelProperty("附件") + private String attach; + + @ApiModelProperty("备注") + private String notes; + + @ApiModelProperty("状态(0-草稿、1-已完成、2-拒绝、3-审批中、4-取消)") + private Integer status; + + @ApiModelProperty("创建时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date createTime; + + public static EamRepairFaultVo ToVo(EamRepairFault eamRepairFault) { + EamRepairFaultVo eamRepairFaultVo = new EamRepairFaultVo(); + BeanUtils.copyProperties(eamRepairFault, eamRepairFaultVo); + eamRepairFaultVo.setAssetIdList(JSON.parseArray(eamRepairFault.getAssetIdList(),EamWarehouseAssetDto.class)); + return eamRepairFaultVo; + } + + public static List ToVo(List eamRepairFaults) { + return Optional.ofNullable(eamRepairFaults).orElse(Collections.emptyList()).stream().map(EamRepairFaultVo::ToVo).collect(Collectors.toList()); + } +} diff --git a/system/src/main/java/com/yyy/system/entity/vo/EamRepairTypeVo.java b/system/src/main/java/com/yyy/system/entity/vo/EamRepairTypeVo.java new file mode 100644 index 0000000..0a2a6a5 --- /dev/null +++ b/system/src/main/java/com/yyy/system/entity/vo/EamRepairTypeVo.java @@ -0,0 +1,57 @@ +package com.yyy.system.entity.vo; + +import java.util.Collections; +import java.util.Date; +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; + +import com.yyy.system.entity.pojo.EamRepairType; +import com.yyy.common.utils.bean.BeanUtils; +import lombok.Data; +import lombok.Builder; +import lombok.NoArgsConstructor; +import lombok.AllArgsConstructor; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +/** + * 保养计划(维修类型)表(EamRepairType)视图数据类 + * + * @author Fangy + * @since 2024-04-12 15:00:40 + */ +@ApiModel("EamRepairTypeVo保养计划(维修类型)表视图数据类") +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class EamRepairTypeVo { + + @ApiModelProperty("主键") + private Long repairTypeId; + + @ApiModelProperty("名称") + private String name; + + @ApiModelProperty("配置信息") + private String config; + + @ApiModelProperty("备注") + private String notes; + + @ApiModelProperty("创建时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date createTime; + + public static EamRepairTypeVo ToVo(EamRepairType eamRepairType) { + EamRepairTypeVo eamRepairTypeVo = new EamRepairTypeVo(); + BeanUtils.copyProperties(eamRepairType, eamRepairTypeVo); + return eamRepairTypeVo; + } + + public static List ToVo(List eamRepairTypes) { + return Optional.ofNullable(eamRepairTypes).orElse(Collections.emptyList()).stream().map(EamRepairTypeVo::ToVo).collect(Collectors.toList()); + } +} diff --git a/system/src/main/java/com/yyy/system/entity/vo/EamRepairVo.java b/system/src/main/java/com/yyy/system/entity/vo/EamRepairVo.java new file mode 100644 index 0000000..be24fab --- /dev/null +++ b/system/src/main/java/com/yyy/system/entity/vo/EamRepairVo.java @@ -0,0 +1,77 @@ +package com.yyy.system.entity.vo; + +import java.util.Collections; +import java.util.Date; +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; + +import com.alibaba.fastjson.JSON; +import com.yyy.system.entity.dto.EamWarehouseAssetDto; +import com.yyy.system.entity.pojo.EamRepair; +import com.yyy.common.utils.bean.BeanUtils; +import com.yyy.system.entity.pojo.EamRepairType; +import lombok.Data; +import lombok.Builder; +import lombok.NoArgsConstructor; +import lombok.AllArgsConstructor; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +/** + * 维修登记信息表(EamRepair)视图数据类 + * + * @author Fangy + * @since 2024-04-12 15:00:38 + */ +@ApiModel("EamRepairVo维修登记信息表视图数据类") +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class EamRepairVo { + + @ApiModelProperty("主键") + private Long id; + + @ApiModelProperty("业务编号") + private String businessId; + + @ApiModelProperty("业务名称") + private String name; + + @ApiModelProperty(notes = "资产库存信息List") + private List assetIdList; + + @ApiModelProperty("备注") + private String notes; + + @ApiModelProperty("附件") + private String attach; + + @ApiModelProperty("状态(0-草稿、1-已完成、2-拒绝、3-审批中、4-取消)") + private Integer status; + + @ApiModelProperty("创建时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date createTime; + + @ApiModelProperty("计划完成时间") + private Date plannedDate; + + @ApiModelProperty("保养计划(维修类型)") + private EamRepairType _repairType; + + public static EamRepairVo ToVo(EamRepair eamRepair) { + EamRepairVo eamRepairVo = new EamRepairVo(); + BeanUtils.copyProperties(eamRepair, eamRepairVo); + eamRepairVo.setAssetIdList(JSON.parseArray(eamRepair.getAssetIdList(),EamWarehouseAssetDto.class)); + return eamRepairVo; + } + + public static List ToVo(List eamRepairs) { + return Optional.ofNullable(eamRepairs).orElse(Collections.emptyList()).stream().map(EamRepairVo::ToVo).collect(Collectors.toList()); + } +} diff --git a/system/src/main/java/com/yyy/system/entity/vo/EamStocktakingDetailsVo.java b/system/src/main/java/com/yyy/system/entity/vo/EamStocktakingDetailsVo.java new file mode 100644 index 0000000..bdb6e52 --- /dev/null +++ b/system/src/main/java/com/yyy/system/entity/vo/EamStocktakingDetailsVo.java @@ -0,0 +1,71 @@ +package com.yyy.system.entity.vo; + +import java.util.Collections; +import java.util.Date; +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; + +import com.yyy.system.entity.pojo.EamAsset; +import com.yyy.system.entity.pojo.EamStocktakingDetails; +import com.yyy.common.utils.bean.BeanUtils; +import lombok.Data; +import lombok.Builder; +import lombok.NoArgsConstructor; +import lombok.AllArgsConstructor; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +/** + * 盘点明细(EamStocktakingDetails)视图数据类 + * + * @author Fangy + * @since 2024-04-12 14:50:46 + */ +@ApiModel("EamStocktakingDetailsVo盘点明细视图数据类") +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class EamStocktakingDetailsVo { + + @ApiModelProperty("主键") + private Long id; + + @ApiModelProperty("盘点任务id") + private Long stocktakingJobId; + + @ApiModelProperty("盘点资产") + private EamAsset _asset; + + @ApiModelProperty("盘点状态(0-盘盈,1-盘亏,2-已盘点,3-待盘点,4-异常)") + private Integer status; + + private String img; + + @ApiModelProperty("附件") + private String attachment; + + @ApiModelProperty("备注") + private String notes; + + @ApiModelProperty("创建人") + @JsonIgnore + private Long createUser; + + @ApiModelProperty("创建时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date createTime; + + public static EamStocktakingDetailsVo ToVo(EamStocktakingDetails eamStocktakingDetails) { + EamStocktakingDetailsVo eamStocktakingDetailsVo = new EamStocktakingDetailsVo(); + BeanUtils.copyProperties(eamStocktakingDetails, eamStocktakingDetailsVo); + return eamStocktakingDetailsVo; + } + + public static List ToVo(List eamStocktakingDetailss) { + return Optional.ofNullable(eamStocktakingDetailss).orElse(Collections.emptyList()).stream().map(EamStocktakingDetailsVo::ToVo).collect(Collectors.toList()); + } +} diff --git a/system/src/main/java/com/yyy/system/entity/vo/EamStocktakingJobVo.java b/system/src/main/java/com/yyy/system/entity/vo/EamStocktakingJobVo.java new file mode 100644 index 0000000..e5cf700 --- /dev/null +++ b/system/src/main/java/com/yyy/system/entity/vo/EamStocktakingJobVo.java @@ -0,0 +1,115 @@ +package com.yyy.system.entity.vo; + +import java.util.Collections; +import java.util.Date; +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; + +import com.yyy.common.core.domain.entity.UmsOrganization; +import com.yyy.common.core.domain.entity.UmsUser; +import com.yyy.system.entity.pojo.EamBasicCategory; +import com.yyy.system.entity.pojo.EamBasicPosition; +import com.yyy.system.entity.pojo.EamBasicWarehouse; +import com.yyy.system.entity.pojo.EamStocktakingJob; +import com.yyy.common.utils.bean.BeanUtils; +import lombok.Data; +import lombok.Builder; +import lombok.NoArgsConstructor; +import lombok.AllArgsConstructor; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +/** + * 盘点任务表(EamStocktakingJob)视图数据类 + * + * @author Fangy + * @since 2024-04-12 14:50:46 + */ +@ApiModel("EamStocktakingJobVo盘点任务表视图数据类") +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class EamStocktakingJobVo { + + @ApiModelProperty("主键") + private Long stocktakingJobId; + + @ApiModelProperty("业务名称") + private String name; + + @ApiModelProperty("负责人") + private UmsUser _head; + + @ApiModelProperty("全员盘点(0-禁用,1-启用)") + private Integer fullStocktaking; + + @ApiModelProperty("盘点人") + private UmsUser _stocktakingUser; + + @ApiModelProperty("购置开始日期") + private Date stocktakingStartDate; + + @ApiModelProperty("购置结束日期") + private Date stocktakingEndDate; + + @ApiModelProperty("资产状态(0-闲置 1-在用 2-借用中 3-维修中 4-调拨中 5-待报废 6-已处置 7-库存 8-已报废)") + private Integer assetStatus; + + @ApiModelProperty("所属公司") + private UmsOrganization _ownCompany; + + @ApiModelProperty("使用公司/部门") + private UmsOrganization _useOrganization; + + @ApiModelProperty("保管人") + private UmsUser _useUser; + + @ApiModelProperty("资产分类") + private EamBasicCategory _category; + + @ApiModelProperty("存放位置") + private EamBasicPosition _position; + + @ApiModelProperty("仓库") + private EamBasicWarehouse _warehouse; + + @ApiModelProperty("盘点状态(0-未开始,1-进行中,2-取消,3-已完成)") + private Integer status; + + @ApiModelProperty("备注") + private String notes; + + @ApiModelProperty("创建时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date createTime; + + @ApiModelProperty("待盘点") + private Integer countPending; + + @ApiModelProperty("已盘点") + private Integer countCompleted; + + @ApiModelProperty("盘亏") + private Integer countLoss; + + @ApiModelProperty("盘盈") + private Integer countSurplus; + + @ApiModelProperty("异常数据") + private Integer countException; + + + public static EamStocktakingJobVo ToVo(EamStocktakingJob eamStocktakingJob) { + EamStocktakingJobVo eamStocktakingJobVo = new EamStocktakingJobVo(); + BeanUtils.copyProperties(eamStocktakingJob, eamStocktakingJobVo); + return eamStocktakingJobVo; + } + + public static List ToVo(List eamStocktakingJobs) { + return Optional.ofNullable(eamStocktakingJobs).orElse(Collections.emptyList()).stream().map(EamStocktakingJobVo::ToVo).collect(Collectors.toList()); + } +} diff --git a/system/src/main/java/com/yyy/system/entity/vo/EamStocktakingPlanVo.java b/system/src/main/java/com/yyy/system/entity/vo/EamStocktakingPlanVo.java new file mode 100644 index 0000000..4ed1f44 --- /dev/null +++ b/system/src/main/java/com/yyy/system/entity/vo/EamStocktakingPlanVo.java @@ -0,0 +1,102 @@ +package com.yyy.system.entity.vo; + +import java.util.Collections; +import java.util.Date; +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; + +import com.yyy.common.core.domain.entity.UmsOrganization; +import com.yyy.common.core.domain.entity.UmsUser; +import com.yyy.system.entity.pojo.EamBasicCategory; +import com.yyy.system.entity.pojo.EamBasicPosition; +import com.yyy.system.entity.pojo.EamBasicWarehouse; +import com.yyy.system.entity.pojo.EamStocktakingPlan; +import com.yyy.common.utils.bean.BeanUtils; +import lombok.Data; +import lombok.Builder; +import lombok.NoArgsConstructor; +import lombok.AllArgsConstructor; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +/** + * 盘点计划信息(EamStocktakingPlan)视图数据类 + * + * @author Fangy + * @since 2024-04-12 14:50:46 + */ +@ApiModel("EamStocktakingPlanVo盘点计划信息视图数据类") +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class EamStocktakingPlanVo { + + @ApiModelProperty("主键") + private Long stocktakingPlanId; + + @ApiModelProperty("业务名称") + private String name; + + @ApiModelProperty("负责人id") + private UmsUser _head; + + @ApiModelProperty("全员盘点(0-禁用,1-启用)") + private Integer fullStocktaking; + + @ApiModelProperty("盘点人") + private UmsUser _stocktakingUser; + + @ApiModelProperty("购置开始日期") + private Date stocktakingStartDate; + + @ApiModelProperty("购置结束日期") + private Date stocktakingEndDate; + + @ApiModelProperty("资产状态(0-闲置 1-在用 2-借用中 3-维修中 4-调拨中 5-待报废 6-已处置 7-库存 8-已报废)") + private Integer assetStatus; + + @ApiModelProperty("所属公司") + private UmsOrganization _ownCompany; + + @ApiModelProperty("使用公司/部门") + private UmsOrganization _useOrganization; + + @ApiModelProperty("保管人") + private UmsUser _useUser; + + @ApiModelProperty("资产分类") + private EamBasicCategory _category; + + @ApiModelProperty("存放位置") + private EamBasicPosition _position; + + @ApiModelProperty("仓库") + private EamBasicWarehouse _warehouse; + + @ApiModelProperty("启用状态(0-禁用,1-启用)") + private Integer status; + + @ApiModelProperty("备注") + private String notes; + + @ApiModelProperty("创建时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date createTime; + + @ApiModelProperty("是否删除(0:正常/1:删除)") + private Integer isDeleted; + + public static EamStocktakingPlanVo ToVo(EamStocktakingPlan eamStocktakingPlan) { + EamStocktakingPlanVo eamStocktakingPlanVo = new EamStocktakingPlanVo(); + BeanUtils.copyProperties(eamStocktakingPlan, eamStocktakingPlanVo); + return eamStocktakingPlanVo; + } + + public static List ToVo(List eamStocktakingPlans) { + return Optional.ofNullable(eamStocktakingPlans).orElse(Collections.emptyList()).stream().map(EamStocktakingPlanVo::ToVo).collect(Collectors.toList()); + } +} diff --git a/system/src/main/java/com/yyy/system/entity/vo/EamTotalVo.java b/system/src/main/java/com/yyy/system/entity/vo/EamTotalVo.java new file mode 100644 index 0000000..f137f78 --- /dev/null +++ b/system/src/main/java/com/yyy/system/entity/vo/EamTotalVo.java @@ -0,0 +1,26 @@ +package com.yyy.system.entity.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + + +@ApiModel("主页总数展示数据") +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class EamTotalVo { + + @ApiModelProperty("总数") + private Integer total; + + @ApiModelProperty("今日变化") + private Integer change; + + @ApiModelProperty("名称") + private String name; +} diff --git a/system/src/main/java/com/yyy/system/entity/vo/EamWarehouseAssetVo.java b/system/src/main/java/com/yyy/system/entity/vo/EamWarehouseAssetVo.java new file mode 100644 index 0000000..65c2a0c --- /dev/null +++ b/system/src/main/java/com/yyy/system/entity/vo/EamWarehouseAssetVo.java @@ -0,0 +1,50 @@ +package com.yyy.system.entity.vo; + +import java.util.Collections; +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; + +import com.yyy.system.entity.pojo.EamWarehouseAsset; +import com.yyy.common.utils.bean.BeanUtils; +import lombok.Data; +import lombok.Builder; +import lombok.NoArgsConstructor; +import lombok.AllArgsConstructor; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +/** + * 库存信息表(EamWarehouseAsset)视图数据类 + * + * @author Fangy + * @since 2024-05-08 14:00:19 + */ +@ApiModel("EamWarehouseAssetVo库存信息表视图数据类") +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class EamWarehouseAssetVo { + + @ApiModelProperty("仓库id") + private Long warehouseId; + + @ApiModelProperty("资产id") + private Long assetId; + + @ApiModelProperty("库存数量") + private Integer count; + + public static EamWarehouseAssetVo ToVo(EamWarehouseAsset eamWarehouseAsset) { + EamWarehouseAssetVo eamWarehouseAssetVo = new EamWarehouseAssetVo(); + BeanUtils.copyProperties(eamWarehouseAsset, eamWarehouseAssetVo); + return eamWarehouseAssetVo; + } + + public static List ToVo(List eamWarehouseAssets) { + return Optional.ofNullable(eamWarehouseAssets).orElse(Collections.emptyList()).stream().map(EamWarehouseAssetVo::ToVo).collect(Collectors.toList()); + } +} diff --git a/system/src/main/java/com/yyy/system/entity/vo/EamWarehouseInventoryVo.java b/system/src/main/java/com/yyy/system/entity/vo/EamWarehouseInventoryVo.java new file mode 100644 index 0000000..95f9854 --- /dev/null +++ b/system/src/main/java/com/yyy/system/entity/vo/EamWarehouseInventoryVo.java @@ -0,0 +1,85 @@ +package com.yyy.system.entity.vo; + +import java.util.Collections; +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; + +import com.yyy.system.entity.pojo.*; +import com.yyy.common.utils.bean.BeanUtils; +import lombok.Data; +import lombok.Builder; +import lombok.NoArgsConstructor; +import lombok.AllArgsConstructor; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +/** + * 库存信息表(EamWarehouseInventory)视图数据类 + * + * @author Fangy + * @since 2024-04-11 13:30:21 + */ +@ApiModel("EamWarehouseInventoryVo库存信息表视图数据类") +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class EamWarehouseInventoryVo { + + @ApiModelProperty("资产id") + private String assetId; + + @ApiModelProperty("资产编号") + private String assetCode; + + @ApiModelProperty("资产名称") + private String name; + + @ApiModelProperty("规格型号") + private String model; + + @ApiModelProperty("资产序列号") + private String serialNumber; + + @ApiModelProperty("计量单位") + private String unit; + + @ApiModelProperty("库存数量") + private Integer count; + + @ApiModelProperty("资产状态(0-闲置 1-在用 2-借用中 3-维修中 4-调拨中 5-待报废 6-已处置 7-库存 8-已报废)") + private Integer status; + + @ApiModelProperty("仓库Id") + private Long warehouseId; + + @ApiModelProperty("仓库名称") + private String warehouseName; + + @ApiModelProperty("资产分类Id") + private Long categoryId; + + @ApiModelProperty("资产分类名称") + private String categoryName; + + @ApiModelProperty("安全库存上限") + private Integer upperLimit; + + @ApiModelProperty("安全库存下限") + private Integer lowerLimit; + + @ApiModelProperty("安全库存") + private Integer safetyLimit; + + + public static EamWarehouseInventoryVo ToVo(EamWarehouseInventory eamWarehouseInventory) { + EamWarehouseInventoryVo eamWarehouseInventoryVo = new EamWarehouseInventoryVo(); + BeanUtils.copyProperties(eamWarehouseInventory, eamWarehouseInventoryVo); + return eamWarehouseInventoryVo; + } + + public static List ToVo(List eamWarehouseInventories) { + return Optional.ofNullable(eamWarehouseInventories).orElse(Collections.emptyList()).stream().map(EamWarehouseInventoryVo::ToVo).collect(Collectors.toList()); + } +} diff --git a/system/src/main/java/com/yyy/system/entity/vo/EamWarningBorrowVo.java b/system/src/main/java/com/yyy/system/entity/vo/EamWarningBorrowVo.java new file mode 100644 index 0000000..d60f70f --- /dev/null +++ b/system/src/main/java/com/yyy/system/entity/vo/EamWarningBorrowVo.java @@ -0,0 +1,95 @@ +package com.yyy.system.entity.vo; + +import com.yyy.common.core.domain.entity.UmsOrganization; +import com.yyy.common.core.domain.entity.UmsUser; +import com.yyy.common.utils.bean.BeanUtils; +import com.yyy.system.entity.pojo.EamAsset; +import com.yyy.system.entity.pojo.*; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Collections; +import java.util.Date; +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; + +@ApiModel("EamAssetVo资产信息表视图数据类") +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class EamWarningBorrowVo { + + @ApiModelProperty("借出单据") + private String businessId; + + @ApiModelProperty("预计归还时间") + private Date returnTime; + + @ApiModelProperty("资产编号") + private String assetCode; + + @ApiModelProperty("资产名称") + private String name; + + @ApiModelProperty("资产状态(0-闲置 1-在用 2-借用中 3-维修中 4-调拨中 5-待报废 6-已处置 7-库存 8-已报废)") + private Integer status; + + @ApiModelProperty("资产来源(0-捐赠 1-赠送 2-其他 3-采购 4-自建 5-自购)") + private Integer sourceId; + + @ApiModelProperty("规格型号") + private String model; + + @ApiModelProperty("序列号") + private String serialNumber; + + @ApiModelProperty("用途") + private String purpose; + + @ApiModelProperty("计量单位") + private String unit; + + @ApiModelProperty("详细位置") + private String positionDetail; + + @ApiModelProperty("资产备注") + private String notes; + + @ApiModelProperty("资产分类信息") + private EamBasicCategory _category; + + @ApiModelProperty("所属公司信息") + private UmsOrganization _ownCompany; + + @ApiModelProperty("使用组织") + private UmsOrganization _useOrganization; + + @ApiModelProperty("管理人员") + private UmsUser _manager; + + @ApiModelProperty("使用人员") + private UmsUser _useUser; + + @ApiModelProperty("存放位置") + private EamBasicPosition _position; + + public static EamWarningBorrowVo ToVo(EamAsset eamAsset, String businessId, Date returnTime) { + EamWarningBorrowVo eamWarningBorrowVo = new EamWarningBorrowVo(); + BeanUtils.copyProperties(eamAsset, eamWarningBorrowVo); + eamWarningBorrowVo.setBusinessId(businessId); + eamWarningBorrowVo.setReturnTime(returnTime); + return eamWarningBorrowVo; + } + + public static List ToVo(List eamAssets, String businessId, Date returnTime) { + return Optional.ofNullable(eamAssets).orElse(Collections.emptyList()).stream() + .map(eamAsset -> ToVo(eamAsset, businessId, returnTime)) + .collect(Collectors.toList()); + } +} diff --git a/system/src/main/java/com/yyy/system/entity/vo/FlFormItemVo.java b/system/src/main/java/com/yyy/system/entity/vo/FlFormItemVo.java new file mode 100644 index 0000000..b34f0bb --- /dev/null +++ b/system/src/main/java/com/yyy/system/entity/vo/FlFormItemVo.java @@ -0,0 +1,82 @@ +package com.yyy.system.entity.vo; + +import java.util.Collections; +import java.util.Date; +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; + +import com.yyy.system.entity.pojo.FlFormItem; +import com.yyy.common.utils.bean.BeanUtils; +import lombok.Data; +import lombok.Builder; +import lombok.NoArgsConstructor; +import lombok.AllArgsConstructor; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +/** + * 流程实例对象(FlFormItem)视图数据类 + * + * @author Fangy + * @since 2024-04-30 11:25:58 + */ +@ApiModel("FlFormItemVo流程实例对象视图数据类") +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class FlFormItemVo { + + @ApiModelProperty("主键") + private Long id; + + @ApiModelProperty("名称") + private String name; + + @ApiModelProperty("表单标识") + private String formKey; + + @ApiModelProperty("流程实例id") + private String procInsId; + + @ApiModelProperty("审批内容") + private String contents; + + @ApiModelProperty("审批记录") + private String logs; + + @ApiModelProperty("状态") + private Integer status; + + @ApiModelProperty("是否删除(0:正常/1:删除)") + private Integer isDeleted; + + @ApiModelProperty("创建人") + @JsonIgnore + private Long createUser; + + @ApiModelProperty("创建时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date createTime; + + @ApiModelProperty("修改人") + @JsonIgnore + private Long updateUser; + + @ApiModelProperty("修改时间") + @JsonIgnore + private Date updateTime; + + public static FlFormItemVo ToVo(FlFormItem flFormItem) { + FlFormItemVo flFormItemVo = new FlFormItemVo(); + BeanUtils.copyProperties(flFormItem, flFormItemVo); + return flFormItemVo; + } + + public static List ToVo(List flFormItems) { + return Optional.ofNullable(flFormItems).orElse(Collections.emptyList()).stream().map(FlFormItemVo::ToVo).collect(Collectors.toList()); + } +} diff --git a/system/src/main/java/com/yyy/system/entity/vo/FlFormVo.java b/system/src/main/java/com/yyy/system/entity/vo/FlFormVo.java new file mode 100644 index 0000000..55707dc --- /dev/null +++ b/system/src/main/java/com/yyy/system/entity/vo/FlFormVo.java @@ -0,0 +1,77 @@ +package com.yyy.system.entity.vo; + +import java.util.Collections; +import java.util.Date; +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; + +import com.yyy.common.core.domain.entity.UmsUser; +import com.yyy.system.entity.pojo.FlForm; +import com.yyy.common.utils.bean.BeanUtils; +import lombok.Data; +import lombok.Builder; +import lombok.NoArgsConstructor; +import lombok.AllArgsConstructor; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +/** + * 流程表单对象(FlForm)视图数据类 + * + * @author Fangy + * @since 2024-04-24 12:57:36 + */ +@ApiModel("FlFormVo流程表单对象视图数据类") +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class FlFormVo { + + @ApiModelProperty("表单ID") + private Long formId; + + @ApiModelProperty("表单标识") + private String formKey; + + @ApiModelProperty("表单类型") + private String type; + + @ApiModelProperty("表单名称") + private String name; + + @ApiModelProperty("PC端图标") + private String pcIcon; + + @ApiModelProperty("移动端图标") + private String mobileIcon; + +// @ApiModelProperty("表单内容") +// private String config; + + @ApiModelProperty("流程id") + private String deployId; + + @ApiModelProperty("状态(0:有效/1:无效)") + private Integer status; + + @ApiModelProperty("创建时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date createTime; + + @ApiModelProperty("审批人") + private UmsUser _assignee; + + public static FlFormVo ToVo(FlForm flForm) { + FlFormVo flFormVo = new FlFormVo(); + BeanUtils.copyProperties(flForm, flFormVo); + return flFormVo; + } + + public static List ToVo(List flForms) { + return Optional.ofNullable(flForms).orElse(Collections.emptyList()).stream().map(FlFormVo::ToVo).collect(Collectors.toList()); + } +} diff --git a/system/src/main/java/com/yyy/system/entity/vo/FlListenerVo.java b/system/src/main/java/com/yyy/system/entity/vo/FlListenerVo.java new file mode 100644 index 0000000..d224524 --- /dev/null +++ b/system/src/main/java/com/yyy/system/entity/vo/FlListenerVo.java @@ -0,0 +1,82 @@ +package com.yyy.system.entity.vo; + +import java.util.Collections; +import java.util.Date; +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; + +import com.yyy.system.entity.pojo.FlListener; +import com.yyy.common.utils.bean.BeanUtils; +import lombok.Data; +import lombok.Builder; +import lombok.NoArgsConstructor; +import lombok.AllArgsConstructor; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +/** + * 流程监听对象(FlListener)视图数据类 + * + * @author Fangy + * @since 2024-04-23 12:22:45 + */ +@ApiModel("FlListenerVo流程监听对象视图数据类") +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class FlListenerVo { + + @ApiModelProperty("主键") + private Long id; + + @ApiModelProperty("名称") + private String name; + + @ApiModelProperty("监听类型") + private String type; + + @ApiModelProperty("事件类型") + private String eventType; + + @ApiModelProperty("值类型") + private String valueType; + + @ApiModelProperty("执行内容") + private String value; + + @ApiModelProperty("状态") + private Integer status; + + @ApiModelProperty("是否删除(0:正常/1:删除)") + private Integer isDeleted; + + @ApiModelProperty("创建人") + @JsonIgnore + private Long createUser; + + @ApiModelProperty("创建时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date createTime; + + @ApiModelProperty("修改人") + @JsonIgnore + private Long updateUser; + + @ApiModelProperty("修改时间") + @JsonIgnore + private Date updateTime; + + public static FlListenerVo ToVo(FlListener flListener) { + FlListenerVo flListenerVo = new FlListenerVo(); + BeanUtils.copyProperties(flListener, flListenerVo); + return flListenerVo; + } + + public static List ToVo(List flListeners) { + return Optional.ofNullable(flListeners).orElse(Collections.emptyList()).stream().map(FlListenerVo::ToVo).collect(Collectors.toList()); + } +} diff --git a/system/src/main/java/com/yyy/system/mapper/EamAssetLogMapper.java b/system/src/main/java/com/yyy/system/mapper/EamAssetLogMapper.java new file mode 100644 index 0000000..3bf2c92 --- /dev/null +++ b/system/src/main/java/com/yyy/system/mapper/EamAssetLogMapper.java @@ -0,0 +1,18 @@ +package com.yyy.system.mapper; + +import org.springframework.stereotype.Repository; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.yyy.system.entity.pojo.EamAssetLog; + +import java.util.List; + +/** + * 资产操作日志(EamAssetLog)表数据库访问层 + * + * @author Fangy + * @date 2024-04-09 10:23:38 + */ +@Repository +public interface EamAssetLogMapper extends BaseMapper { + List query(EamAssetLog eamAssetLog); +} diff --git a/system/src/main/java/com/yyy/system/mapper/EamAssetMapper.java b/system/src/main/java/com/yyy/system/mapper/EamAssetMapper.java new file mode 100644 index 0000000..eac6c24 --- /dev/null +++ b/system/src/main/java/com/yyy/system/mapper/EamAssetMapper.java @@ -0,0 +1,32 @@ +package com.yyy.system.mapper; + +import com.yyy.system.entity.dto.EamSparePartsDto; +import com.yyy.system.entity.pojo.EamWarehouseInventory; +import org.springframework.stereotype.Repository; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.yyy.system.entity.pojo.EamAsset; + +import java.util.List; + +/** + * 资产信息表(EamAsset)表数据库访问层 + * + * @author Fangy + * @date 2024-04-09 13:47:48 + */ +@Repository +public interface EamAssetMapper extends BaseMapper { + List query(EamAsset eamAsset); + + EamAsset joinById(Long id); + + List joinByIds(List list); + + List maintenance(String time); + + void sparePartsAdd(EamSparePartsDto eamSparePartsDto); + + List sparePartsList(Long assetId); + + void sparePartsDel(EamSparePartsDto eamSparePartsDto); +} diff --git a/system/src/main/java/com/yyy/system/mapper/EamBasicCategoryMapper.java b/system/src/main/java/com/yyy/system/mapper/EamBasicCategoryMapper.java new file mode 100644 index 0000000..a422def --- /dev/null +++ b/system/src/main/java/com/yyy/system/mapper/EamBasicCategoryMapper.java @@ -0,0 +1,16 @@ +package com.yyy.system.mapper; +import org.springframework.stereotype.Repository; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.yyy.system.entity.pojo.EamBasicCategory; + +import java.util.List; + +/** + * 资产分类信息表(EamBasicCategory)表数据库访问层 + * @author Fangy + * @date 2024-04-08 14:22:31 + */ +@Repository +public interface EamBasicCategoryMapper extends BaseMapper { + List query(EamBasicCategory eamBasicCategory); +} diff --git a/system/src/main/java/com/yyy/system/mapper/EamBasicFinancialCategoryMapper.java b/system/src/main/java/com/yyy/system/mapper/EamBasicFinancialCategoryMapper.java new file mode 100644 index 0000000..b5b6bd0 --- /dev/null +++ b/system/src/main/java/com/yyy/system/mapper/EamBasicFinancialCategoryMapper.java @@ -0,0 +1,15 @@ +package com.yyy.system.mapper; +import org.springframework.stereotype.Repository; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.yyy.system.entity.pojo.EamBasicFinancialCategory; +import java.util.List; + +/** + * 财务分类信息表(EamBasicFinancialCategory)表数据库访问层 + * @author Fangy + * @date 2024-05-11 14:38:13 + */ +@Repository +public interface EamBasicFinancialCategoryMapper extends BaseMapper { + List query(EamBasicFinancialCategory eamBasicFinancialCategory); +} diff --git a/system/src/main/java/com/yyy/system/mapper/EamBasicMaintenanceVendorMapper.java b/system/src/main/java/com/yyy/system/mapper/EamBasicMaintenanceVendorMapper.java new file mode 100644 index 0000000..a2249a0 --- /dev/null +++ b/system/src/main/java/com/yyy/system/mapper/EamBasicMaintenanceVendorMapper.java @@ -0,0 +1,15 @@ +package com.yyy.system.mapper; +import org.springframework.stereotype.Repository; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.yyy.system.entity.pojo.EamBasicMaintenanceVendor; +import java.util.List; + +/** + * 维保商(EamBasicMaintenanceVendor)表数据库访问层 + * @author Fangy + * @date 2024-04-09 12:52:28 + */ +@Repository +public interface EamBasicMaintenanceVendorMapper extends BaseMapper { + List query(EamBasicMaintenanceVendor eamBasicMaintenanceVendor); +} diff --git a/system/src/main/java/com/yyy/system/mapper/EamBasicManufacturersVendorMapper.java b/system/src/main/java/com/yyy/system/mapper/EamBasicManufacturersVendorMapper.java new file mode 100644 index 0000000..314a1d2 --- /dev/null +++ b/system/src/main/java/com/yyy/system/mapper/EamBasicManufacturersVendorMapper.java @@ -0,0 +1,18 @@ +package com.yyy.system.mapper; + +import org.springframework.stereotype.Repository; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.yyy.system.entity.pojo.EamBasicManufacturersVendor; + +import java.util.List; + +/** + * 生产商(EamBasicManufacturersVendor)表数据库访问层 + * + * @author Fangy + * @date 2024-04-09 12:45:34 + */ +@Repository +public interface EamBasicManufacturersVendorMapper extends BaseMapper { + List query(EamBasicManufacturersVendor eamBasicManufacturersVendor); +} diff --git a/system/src/main/java/com/yyy/system/mapper/EamBasicPositionMapper.java b/system/src/main/java/com/yyy/system/mapper/EamBasicPositionMapper.java new file mode 100644 index 0000000..20db6aa --- /dev/null +++ b/system/src/main/java/com/yyy/system/mapper/EamBasicPositionMapper.java @@ -0,0 +1,15 @@ +package com.yyy.system.mapper; +import org.springframework.stereotype.Repository; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.yyy.system.entity.pojo.EamBasicPosition; +import java.util.List; + +/** + * 存放位置信息表(EamBasicPosition)表数据库访问层 + * @author Fangy + * @date 2024-04-09 12:52:28 + */ +@Repository +public interface EamBasicPositionMapper extends BaseMapper { + List query(EamBasicPosition eamBasicPosition); +} diff --git a/system/src/main/java/com/yyy/system/mapper/EamBasicSupplierVendorMapper.java b/system/src/main/java/com/yyy/system/mapper/EamBasicSupplierVendorMapper.java new file mode 100644 index 0000000..6d5b387 --- /dev/null +++ b/system/src/main/java/com/yyy/system/mapper/EamBasicSupplierVendorMapper.java @@ -0,0 +1,15 @@ +package com.yyy.system.mapper; +import org.springframework.stereotype.Repository; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.yyy.system.entity.pojo.EamBasicSupplierVendor; +import java.util.List; + +/** + * 供应商(EamBasicSupplierVendor)表数据库访问层 + * @author Fangy + * @date 2024-04-09 10:56:09 + */ +@Repository +public interface EamBasicSupplierVendorMapper extends BaseMapper { + List query(EamBasicSupplierVendor eamBasicSupplierVendor); +} diff --git a/system/src/main/java/com/yyy/system/mapper/EamBasicWarehouseMapper.java b/system/src/main/java/com/yyy/system/mapper/EamBasicWarehouseMapper.java new file mode 100644 index 0000000..a1794ef --- /dev/null +++ b/system/src/main/java/com/yyy/system/mapper/EamBasicWarehouseMapper.java @@ -0,0 +1,15 @@ +package com.yyy.system.mapper; +import org.springframework.stereotype.Repository; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.yyy.system.entity.pojo.EamBasicWarehouse; +import java.util.List; + +/** + * 仓库信息表(EamBasicWarehouse)表数据库访问层 + * @author Fangy + * @date 2024-04-09 13:16:57 + */ +@Repository +public interface EamBasicWarehouseMapper extends BaseMapper { + List query(EamBasicWarehouse eamBasicWarehouse); +} diff --git a/system/src/main/java/com/yyy/system/mapper/EamBusinessAllocateMapper.java b/system/src/main/java/com/yyy/system/mapper/EamBusinessAllocateMapper.java new file mode 100644 index 0000000..e5ac5ec --- /dev/null +++ b/system/src/main/java/com/yyy/system/mapper/EamBusinessAllocateMapper.java @@ -0,0 +1,15 @@ +package com.yyy.system.mapper; +import org.springframework.stereotype.Repository; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.yyy.system.entity.pojo.EamBusinessAllocate; +import java.util.List; + +/** + * 调拨信息表(EamBusinessAllocate)表数据库访问层 + * @author Fangy + * @date 2024-04-11 16:16:12 + */ +@Repository +public interface EamBusinessAllocateMapper extends BaseMapper { + List query(EamBusinessAllocate eamBusinessAllocate); +} diff --git a/system/src/main/java/com/yyy/system/mapper/EamBusinessBorrowMapper.java b/system/src/main/java/com/yyy/system/mapper/EamBusinessBorrowMapper.java new file mode 100644 index 0000000..f31c9f7 --- /dev/null +++ b/system/src/main/java/com/yyy/system/mapper/EamBusinessBorrowMapper.java @@ -0,0 +1,15 @@ +package com.yyy.system.mapper; +import org.springframework.stereotype.Repository; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.yyy.system.entity.pojo.EamBusinessBorrow; +import java.util.List; + +/** + * 借用信息表(EamBusinessBorrow)表数据库访问层 + * @author Fangy + * @date 2024-04-10 17:26:36 + */ +@Repository +public interface EamBusinessBorrowMapper extends BaseMapper { + List query(EamBusinessBorrow eamBusinessBorrow); +} diff --git a/system/src/main/java/com/yyy/system/mapper/EamBusinessCollectionMapper.java b/system/src/main/java/com/yyy/system/mapper/EamBusinessCollectionMapper.java new file mode 100644 index 0000000..3fca44d --- /dev/null +++ b/system/src/main/java/com/yyy/system/mapper/EamBusinessCollectionMapper.java @@ -0,0 +1,15 @@ +package com.yyy.system.mapper; +import org.springframework.stereotype.Repository; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.yyy.system.entity.pojo.EamBusinessCollection; +import java.util.List; + +/** + * 资产领用信息表(EamBusinessCollection)表数据库访问层 + * @author Fangy + * @date 2024-04-12 11:48:06 + */ +@Repository +public interface EamBusinessCollectionMapper extends BaseMapper { + List query(EamBusinessCollection eamBusinessCollection); +} diff --git a/system/src/main/java/com/yyy/system/mapper/EamBusinessOutboundMapper.java b/system/src/main/java/com/yyy/system/mapper/EamBusinessOutboundMapper.java new file mode 100644 index 0000000..e3bf3f9 --- /dev/null +++ b/system/src/main/java/com/yyy/system/mapper/EamBusinessOutboundMapper.java @@ -0,0 +1,15 @@ +package com.yyy.system.mapper; +import org.springframework.stereotype.Repository; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.yyy.system.entity.pojo.EamBusinessOutbound; +import java.util.List; + +/** + * 出库信息表(EamBusinessOutbound)表数据库访问层 + * @author Fangy + * @date 2024-04-10 17:26:36 + */ +@Repository +public interface EamBusinessOutboundMapper extends BaseMapper { + List query(EamBusinessOutbound eamBusinessOutbound); +} diff --git a/system/src/main/java/com/yyy/system/mapper/EamBusinessRegistrationMapper.java b/system/src/main/java/com/yyy/system/mapper/EamBusinessRegistrationMapper.java new file mode 100644 index 0000000..36d0ee8 --- /dev/null +++ b/system/src/main/java/com/yyy/system/mapper/EamBusinessRegistrationMapper.java @@ -0,0 +1,15 @@ +package com.yyy.system.mapper; +import org.springframework.stereotype.Repository; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.yyy.system.entity.pojo.EamBusinessRegistration; +import java.util.List; + +/** + * 资产登记信息表(EamBusinessRegistration)表数据库访问层 + * @author Fangy + * @date 2024-04-10 13:17:45 + */ +@Repository +public interface EamBusinessRegistrationMapper extends BaseMapper { + List query(EamBusinessRegistration eamBusinessRegistration); +} diff --git a/system/src/main/java/com/yyy/system/mapper/EamBusinessRetirementMapper.java b/system/src/main/java/com/yyy/system/mapper/EamBusinessRetirementMapper.java new file mode 100644 index 0000000..fe4f3e1 --- /dev/null +++ b/system/src/main/java/com/yyy/system/mapper/EamBusinessRetirementMapper.java @@ -0,0 +1,15 @@ +package com.yyy.system.mapper; +import org.springframework.stereotype.Repository; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.yyy.system.entity.pojo.EamBusinessRetirement; +import java.util.List; + +/** + * 资产报废(EamBusinessRetirement)表数据库访问层 + * @author Fangy + * @date 2024-05-10 10:37:08 + */ +@Repository +public interface EamBusinessRetirementMapper extends BaseMapper { + List query(EamBusinessRetirement eamBusinessRetirement); +} diff --git a/system/src/main/java/com/yyy/system/mapper/EamBusinessReturnInventoryMapper.java b/system/src/main/java/com/yyy/system/mapper/EamBusinessReturnInventoryMapper.java new file mode 100644 index 0000000..005c9a2 --- /dev/null +++ b/system/src/main/java/com/yyy/system/mapper/EamBusinessReturnInventoryMapper.java @@ -0,0 +1,15 @@ +package com.yyy.system.mapper; +import org.springframework.stereotype.Repository; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.yyy.system.entity.pojo.EamBusinessReturnInventory; +import java.util.List; + +/** + * 退库信息表(EamBusinessReturnInventory)表数据库访问层 + * @author Fangy + * @date 2024-04-12 11:10:54 + */ +@Repository +public interface EamBusinessReturnInventoryMapper extends BaseMapper { + List query(EamBusinessReturnInventory eamBusinessReturnInventory); +} diff --git a/system/src/main/java/com/yyy/system/mapper/EamBusinessReturnMapper.java b/system/src/main/java/com/yyy/system/mapper/EamBusinessReturnMapper.java new file mode 100644 index 0000000..d3ebbf4 --- /dev/null +++ b/system/src/main/java/com/yyy/system/mapper/EamBusinessReturnMapper.java @@ -0,0 +1,15 @@ +package com.yyy.system.mapper; +import org.springframework.stereotype.Repository; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.yyy.system.entity.pojo.EamBusinessReturn; +import java.util.List; + +/** + * 归还信息表(EamBusinessReturn)表数据库访问层 + * @author Fangy + * @date 2024-04-10 17:26:46 + */ +@Repository +public interface EamBusinessReturnMapper extends BaseMapper { + List query(EamBusinessReturn eamBusinessReturn); +} diff --git a/system/src/main/java/com/yyy/system/mapper/EamBusinessStorageMapper.java b/system/src/main/java/com/yyy/system/mapper/EamBusinessStorageMapper.java new file mode 100644 index 0000000..dc51f13 --- /dev/null +++ b/system/src/main/java/com/yyy/system/mapper/EamBusinessStorageMapper.java @@ -0,0 +1,15 @@ +package com.yyy.system.mapper; +import org.springframework.stereotype.Repository; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.yyy.system.entity.pojo.EamBusinessStorage; +import java.util.List; + +/** + * 入库信息表(EamBusinessStorage)表数据库访问层 + * @author Fangy + * @date 2024-04-10 17:26:46 + */ +@Repository +public interface EamBusinessStorageMapper extends BaseMapper { + List query(EamBusinessStorage eamBusinessStorage); +} diff --git a/system/src/main/java/com/yyy/system/mapper/EamBusinessTransferMapper.java b/system/src/main/java/com/yyy/system/mapper/EamBusinessTransferMapper.java new file mode 100644 index 0000000..96d0a62 --- /dev/null +++ b/system/src/main/java/com/yyy/system/mapper/EamBusinessTransferMapper.java @@ -0,0 +1,15 @@ +package com.yyy.system.mapper; +import org.springframework.stereotype.Repository; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.yyy.system.entity.pojo.EamBusinessTransfer; +import java.util.List; + +/** + * 资产转移信息表(EamBusinessTransfer)表数据库访问层 + * @author Fangy + * @date 2024-04-10 17:26:46 + */ +@Repository +public interface EamBusinessTransferMapper extends BaseMapper { + List query(EamBusinessTransfer eamBusinessTransfer); +} diff --git a/system/src/main/java/com/yyy/system/mapper/EamRepairFaultMapper.java b/system/src/main/java/com/yyy/system/mapper/EamRepairFaultMapper.java new file mode 100644 index 0000000..b64d6b3 --- /dev/null +++ b/system/src/main/java/com/yyy/system/mapper/EamRepairFaultMapper.java @@ -0,0 +1,15 @@ +package com.yyy.system.mapper; +import org.springframework.stereotype.Repository; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.yyy.system.entity.pojo.EamRepairFault; +import java.util.List; + +/** + * 故障信息表(EamRepairFault)表数据库访问层 + * @author Fangy + * @date 2024-04-12 15:41:29 + */ +@Repository +public interface EamRepairFaultMapper extends BaseMapper { + List query(EamRepairFault eamRepairFault); +} diff --git a/system/src/main/java/com/yyy/system/mapper/EamRepairMapper.java b/system/src/main/java/com/yyy/system/mapper/EamRepairMapper.java new file mode 100644 index 0000000..cc8c3bd --- /dev/null +++ b/system/src/main/java/com/yyy/system/mapper/EamRepairMapper.java @@ -0,0 +1,15 @@ +package com.yyy.system.mapper; +import org.springframework.stereotype.Repository; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.yyy.system.entity.pojo.EamRepair; +import java.util.List; + +/** + * 维修登记信息表(EamRepair)表数据库访问层 + * @author Fangy + * @date 2024-04-12 15:00:37 + */ +@Repository +public interface EamRepairMapper extends BaseMapper { + List query(EamRepair eamRepair); +} diff --git a/system/src/main/java/com/yyy/system/mapper/EamRepairTypeMapper.java b/system/src/main/java/com/yyy/system/mapper/EamRepairTypeMapper.java new file mode 100644 index 0000000..ec62e0b --- /dev/null +++ b/system/src/main/java/com/yyy/system/mapper/EamRepairTypeMapper.java @@ -0,0 +1,15 @@ +package com.yyy.system.mapper; +import org.springframework.stereotype.Repository; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.yyy.system.entity.pojo.EamRepairType; +import java.util.List; + +/** + * 保养计划(维修类型)表(EamRepairType)表数据库访问层 + * @author Fangy + * @date 2024-04-12 15:00:38 + */ +@Repository +public interface EamRepairTypeMapper extends BaseMapper { + List query(EamRepairType eamRepairType); +} diff --git a/system/src/main/java/com/yyy/system/mapper/EamStocktakingDetailsMapper.java b/system/src/main/java/com/yyy/system/mapper/EamStocktakingDetailsMapper.java new file mode 100644 index 0000000..dec2b55 --- /dev/null +++ b/system/src/main/java/com/yyy/system/mapper/EamStocktakingDetailsMapper.java @@ -0,0 +1,15 @@ +package com.yyy.system.mapper; +import org.springframework.stereotype.Repository; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.yyy.system.entity.pojo.EamStocktakingDetails; +import java.util.List; + +/** + * 盘点明细(EamStocktakingDetails)表数据库访问层 + * @author Fangy + * @date 2024-04-12 14:50:46 + */ +@Repository +public interface EamStocktakingDetailsMapper extends BaseMapper { + List query(EamStocktakingDetails eamStocktakingDetails); +} diff --git a/system/src/main/java/com/yyy/system/mapper/EamStocktakingJobMapper.java b/system/src/main/java/com/yyy/system/mapper/EamStocktakingJobMapper.java new file mode 100644 index 0000000..63b2734 --- /dev/null +++ b/system/src/main/java/com/yyy/system/mapper/EamStocktakingJobMapper.java @@ -0,0 +1,15 @@ +package com.yyy.system.mapper; +import org.springframework.stereotype.Repository; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.yyy.system.entity.pojo.EamStocktakingJob; +import java.util.List; + +/** + * 盘点任务表(EamStocktakingJob)表数据库访问层 + * @author Fangy + * @date 2024-04-12 14:50:46 + */ +@Repository +public interface EamStocktakingJobMapper extends BaseMapper { + List query(EamStocktakingJob eamStocktakingJob); +} diff --git a/system/src/main/java/com/yyy/system/mapper/EamStocktakingPlanMapper.java b/system/src/main/java/com/yyy/system/mapper/EamStocktakingPlanMapper.java new file mode 100644 index 0000000..fbc1738 --- /dev/null +++ b/system/src/main/java/com/yyy/system/mapper/EamStocktakingPlanMapper.java @@ -0,0 +1,15 @@ +package com.yyy.system.mapper; +import org.springframework.stereotype.Repository; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.yyy.system.entity.pojo.EamStocktakingPlan; +import java.util.List; + +/** + * 盘点计划信息(EamStocktakingPlan)表数据库访问层 + * @author Fangy + * @date 2024-04-12 14:50:46 + */ +@Repository +public interface EamStocktakingPlanMapper extends BaseMapper { + List query(EamStocktakingPlan eamStocktakingPlan); +} diff --git a/system/src/main/java/com/yyy/system/mapper/EamWarehouseAssetMapper.java b/system/src/main/java/com/yyy/system/mapper/EamWarehouseAssetMapper.java new file mode 100644 index 0000000..79a13fb --- /dev/null +++ b/system/src/main/java/com/yyy/system/mapper/EamWarehouseAssetMapper.java @@ -0,0 +1,19 @@ +package com.yyy.system.mapper; +import org.springframework.stereotype.Repository; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.yyy.system.entity.pojo.EamWarehouseAsset; +import java.util.List; + +/** + * 库存信息表(EamWarehouseAsset)表数据库访问层 + * @author Fangy + * @date 2024-05-08 14:00:19 + */ +@Repository +public interface EamWarehouseAssetMapper extends BaseMapper { + List query(EamWarehouseAsset eamWarehouseAsset); + + void storage(EamWarehouseAsset eamWarehouseAsset); + + void outbound(EamWarehouseAsset eamWarehouseAsset); +} diff --git a/system/src/main/java/com/yyy/system/mapper/EamWarehouseInventoryMapper.java b/system/src/main/java/com/yyy/system/mapper/EamWarehouseInventoryMapper.java new file mode 100644 index 0000000..d1ab960 --- /dev/null +++ b/system/src/main/java/com/yyy/system/mapper/EamWarehouseInventoryMapper.java @@ -0,0 +1,23 @@ +package com.yyy.system.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.yyy.system.entity.dto.EamWarehouseAssetDto; +import com.yyy.system.entity.pojo.EamWarehouseInventory; +import org.springframework.stereotype.Repository; + +import java.util.List; + +/** + * 资产信息表(EamAsset)表数据库访问层 + * + * @author Fangy + * @date 2024-04-09 13:47:48 + */ +@Repository +public interface EamWarehouseInventoryMapper extends BaseMapper { + List query(EamWarehouseInventory eamWarehouseInventory); + + EamWarehouseInventory queryHistory(EamWarehouseAssetDto eamWarehouseAssetDto); + + List queryWarehouseInventoryStorage(EamWarehouseInventory eamWarehouseInventory); +} diff --git a/system/src/main/java/com/yyy/system/mapper/FlFormItemMapper.java b/system/src/main/java/com/yyy/system/mapper/FlFormItemMapper.java new file mode 100644 index 0000000..4207505 --- /dev/null +++ b/system/src/main/java/com/yyy/system/mapper/FlFormItemMapper.java @@ -0,0 +1,15 @@ +package com.yyy.system.mapper; +import org.springframework.stereotype.Repository; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.yyy.system.entity.pojo.FlFormItem; +import java.util.List; + +/** + * 流程实例对象(FlFormItem)表数据库访问层 + * @author Fangy + * @date 2024-04-30 11:25:56 + */ +@Repository +public interface FlFormItemMapper extends BaseMapper { + List query(FlFormItem flFormItem); +} diff --git a/system/src/main/java/com/yyy/system/mapper/FlFormMapper.java b/system/src/main/java/com/yyy/system/mapper/FlFormMapper.java new file mode 100644 index 0000000..3be4c49 --- /dev/null +++ b/system/src/main/java/com/yyy/system/mapper/FlFormMapper.java @@ -0,0 +1,15 @@ +package com.yyy.system.mapper; +import org.springframework.stereotype.Repository; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.yyy.system.entity.pojo.FlForm; +import java.util.List; + +/** + * 流程表单对象(FlForm)表数据库访问层 + * @author Fangy + * @date 2024-04-24 12:54:51 + */ +@Repository +public interface FlFormMapper extends BaseMapper { + List query(FlForm flForm); +} diff --git a/system/src/main/java/com/yyy/system/mapper/FlListenerMapper.java b/system/src/main/java/com/yyy/system/mapper/FlListenerMapper.java new file mode 100644 index 0000000..0dfd66b --- /dev/null +++ b/system/src/main/java/com/yyy/system/mapper/FlListenerMapper.java @@ -0,0 +1,15 @@ +package com.yyy.system.mapper; +import org.springframework.stereotype.Repository; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.yyy.system.entity.pojo.FlListener; +import java.util.List; + +/** + * 流程监听对象(FlListener)表数据库访问层 + * @author Fangy + * @date 2024-04-23 12:22:45 + */ +@Repository +public interface FlListenerMapper extends BaseMapper { + List query(FlListener flListener); +} diff --git a/system/src/main/java/com/yyy/system/mapper/FlowDeployMapper.java b/system/src/main/java/com/yyy/system/mapper/FlowDeployMapper.java new file mode 100644 index 0000000..7d0fe3a --- /dev/null +++ b/system/src/main/java/com/yyy/system/mapper/FlowDeployMapper.java @@ -0,0 +1,29 @@ +package com.yyy.system.mapper; + + +import com.yyy.system.entity.dto.FlowProcDefDto; + +import java.util.List; + +/** + * 流程定义查询 + **/ +public interface FlowDeployMapper { + + /** + * 流程定义列表 + * @param name + * @return + */ + List selectDeployList(String name); + + /** + * 查询流程 + */ + FlowProcDefDto getByDeployId(String deploymentId); + + /** + * 查询流程 + */ + FlowProcDefDto getByPid(String pid); +} diff --git a/system/src/main/java/com/yyy/system/mapper/UmsMenuMapper.java b/system/src/main/java/com/yyy/system/mapper/UmsMenuMapper.java new file mode 100644 index 0000000..6e7b614 --- /dev/null +++ b/system/src/main/java/com/yyy/system/mapper/UmsMenuMapper.java @@ -0,0 +1,24 @@ +package com.yyy.system.mapper; +import com.yyy.common.core.domain.entity.UmsMenu; +import org.springframework.stereotype.Repository; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +import java.util.List; + +/** + * 菜单表(UmsMenu)表数据库访问层 + * @author Fangy + * @date 2024-04-02 14:08:06 + */ +@Repository +public interface UmsMenuMapper extends BaseMapper { + /** + * 根据用户ID查询权限 + * + * @param userId 用户ID + * @return 权限列表 + */ + public List selectPermsByUserId(Long userId); + + public List selectPermsByRoleId(Long roleId); +} diff --git a/system/src/main/java/com/yyy/system/mapper/UmsOrganizationMapper.java b/system/src/main/java/com/yyy/system/mapper/UmsOrganizationMapper.java new file mode 100644 index 0000000..fb88bbc --- /dev/null +++ b/system/src/main/java/com/yyy/system/mapper/UmsOrganizationMapper.java @@ -0,0 +1,14 @@ +package com.yyy.system.mapper; +import org.springframework.stereotype.Repository; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.yyy.common.core.domain.entity.UmsOrganization; + +/** + * 组织信息表(UmsOrganization)表数据库访问层 + * @author Fangy + * @date 2024-04-03 09:47:07 + */ +@Repository +public interface UmsOrganizationMapper extends BaseMapper { + UmsOrganization getByUid(Long userId); +} diff --git a/system/src/main/java/com/yyy/system/mapper/UmsRoleMapper.java b/system/src/main/java/com/yyy/system/mapper/UmsRoleMapper.java new file mode 100644 index 0000000..d388b66 --- /dev/null +++ b/system/src/main/java/com/yyy/system/mapper/UmsRoleMapper.java @@ -0,0 +1,22 @@ +package com.yyy.system.mapper; +import com.yyy.common.core.domain.entity.UmsRole; +import org.springframework.stereotype.Repository; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +import java.util.List; + +/** + * 角色表(UmsRole)表数据库访问层 + * @author Fangy + * @date 2024-04-02 14:08:04 + */ +@Repository +public interface UmsRoleMapper extends BaseMapper { + /** + * 根据用户ID查询角色 + * + * @param userId 用户ID + * @return 角色列表 + */ + public List selectRolesByUserId(Long userId); +} diff --git a/system/src/main/java/com/yyy/system/mapper/UmsRoleMenuMapper.java b/system/src/main/java/com/yyy/system/mapper/UmsRoleMenuMapper.java new file mode 100644 index 0000000..69e604c --- /dev/null +++ b/system/src/main/java/com/yyy/system/mapper/UmsRoleMenuMapper.java @@ -0,0 +1,15 @@ +package com.yyy.system.mapper; +import org.springframework.stereotype.Repository; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.yyy.common.core.domain.entity.UmsRoleMenu; +import java.util.List; + +/** + * 角色权限关联表(UmsRoleMenu)表数据库访问层 + * @author Fangy + * @date 2024-04-12 20:42:25 + */ +@Repository +public interface UmsRoleMenuMapper extends BaseMapper { + List query(UmsRoleMenu umsRoleMenu); +} diff --git a/system/src/main/java/com/yyy/system/mapper/UmsUserMapper.java b/system/src/main/java/com/yyy/system/mapper/UmsUserMapper.java new file mode 100644 index 0000000..d65d6cc --- /dev/null +++ b/system/src/main/java/com/yyy/system/mapper/UmsUserMapper.java @@ -0,0 +1,17 @@ +package com.yyy.system.mapper; +import com.yyy.common.core.domain.dto.UmsUserQueryDto; +import com.yyy.common.core.domain.entity.UmsUser; +import org.springframework.stereotype.Repository; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +import java.util.List; + +/** + * 用户表(UmsUser)表数据库访问层 + * @author Fangy + * @date 2024-04-02 14:08:03 + */ +@Repository +public interface UmsUserMapper extends BaseMapper { + List query(UmsUserQueryDto umsUserQueryDto); +} diff --git a/system/src/main/java/com/yyy/system/mapper/UmsUserOrganizationMapper.java b/system/src/main/java/com/yyy/system/mapper/UmsUserOrganizationMapper.java new file mode 100644 index 0000000..34f7768 --- /dev/null +++ b/system/src/main/java/com/yyy/system/mapper/UmsUserOrganizationMapper.java @@ -0,0 +1,14 @@ +package com.yyy.system.mapper; +import org.springframework.stereotype.Repository; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.yyy.common.core.domain.entity.UmsUserOrganization; + +/** + * 组织信息关联表(UmsUserOrganization)表数据库访问层 + * @author Fangy + * @date 2024-04-03 14:51:06 + */ +@Repository +public interface UmsUserOrganizationMapper extends BaseMapper { + +} diff --git a/system/src/main/java/com/yyy/system/mapper/UmsUserRoleMapper.java b/system/src/main/java/com/yyy/system/mapper/UmsUserRoleMapper.java new file mode 100644 index 0000000..92fd57a --- /dev/null +++ b/system/src/main/java/com/yyy/system/mapper/UmsUserRoleMapper.java @@ -0,0 +1,14 @@ +package com.yyy.system.mapper; +import com.yyy.common.core.domain.entity.UmsUserRole; +import org.springframework.stereotype.Repository; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * 用户角色关联表(UmsUserRole)表数据库访问层 + * @author Fangy + * @date 2024-04-03 15:08:07 + */ +@Repository +public interface UmsUserRoleMapper extends BaseMapper { + +} diff --git a/system/src/main/java/com/yyy/system/service/EamAssetLogService.java b/system/src/main/java/com/yyy/system/service/EamAssetLogService.java new file mode 100644 index 0000000..8a8e581 --- /dev/null +++ b/system/src/main/java/com/yyy/system/service/EamAssetLogService.java @@ -0,0 +1,21 @@ +package com.yyy.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.yyy.common.enums.DetectTypeEnum; +import com.yyy.system.entity.pojo.EamAssetLog; +import com.yyy.system.entity.dto.EamAssetLogDto; + +import java.util.List; + +/** + * 资产操作日志(EamAssetLog)表服务接口 + * + * @author Fangy + * @date 2024-04-09 10:23:38 + */ + +public interface EamAssetLogService extends IService { + List query(EamAssetLogDto eamAssetLogDto); + + boolean add(String businessId, DetectTypeEnum type, String notes, Long assetId, Long createUser); +} diff --git a/system/src/main/java/com/yyy/system/service/EamAssetService.java b/system/src/main/java/com/yyy/system/service/EamAssetService.java new file mode 100644 index 0000000..af7fdaa --- /dev/null +++ b/system/src/main/java/com/yyy/system/service/EamAssetService.java @@ -0,0 +1,51 @@ +package com.yyy.system.service; +import com.baomidou.mybatisplus.extension.service.IService; +import com.yyy.system.entity.dto.EamAssetQueryDto; +import com.yyy.system.entity.dto.EamSparePartsDto; +import com.yyy.system.entity.dto.EamWarehouseAssetDto; +import com.yyy.system.entity.dto.EamWarehouseInventoryDto; +import com.yyy.system.entity.excel.EamAssetExcel; +import com.yyy.system.entity.pojo.EamAsset; +import com.yyy.system.entity.pojo.EamStocktakingJob; +import com.yyy.system.entity.pojo.EamWarehouseInventory; +import com.yyy.system.entity.vo.EamHomeVo; + +import java.util.List; + +/** + * 资产信息表(EamAsset)表服务接口 + * @author Fangy + * @date 2024-04-09 13:47:49 + */ + +public interface EamAssetService extends IService { + List query(EamAssetQueryDto eamAssetQueryDto); + + boolean delete(List ids); + + EamAsset getById(Long id); + + List listByIds(List idList); + + Long selectLatestPrimaryKey(); + + List maintenance(String time); + + List stocktaking(EamStocktakingJob stocktakingJob); + + boolean sparePartsAdd(EamSparePartsDto eamSparePartsDto); + + List sparePartsList(Long assetId); + + boolean sparePartsDel(EamSparePartsDto eamSparePartsDto); + + List queryWarehouseInventory(EamWarehouseInventoryDto eamWarehouseInventoryDto); + + List queryWarehouseInventoryByIds(List eamWarehouseAssetDtoList); + + List queryWarehouseInventoryStorage(EamWarehouseInventoryDto eamWarehouseInventoryDto); + + List excelToPojo(List list); + + EamHomeVo homeData(); +} diff --git a/system/src/main/java/com/yyy/system/service/EamBasicCategoryService.java b/system/src/main/java/com/yyy/system/service/EamBasicCategoryService.java new file mode 100644 index 0000000..a4a25c4 --- /dev/null +++ b/system/src/main/java/com/yyy/system/service/EamBasicCategoryService.java @@ -0,0 +1,18 @@ +package com.yyy.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.yyy.system.entity.dto.EamBasicCategoryDto; +import com.yyy.system.entity.pojo.EamBasicCategory; + +import java.util.List; + +/** + * 资产分类信息表(EamBasicCategory)表服务接口 + * + * @author Fangy + * @date 2024-04-08 14:22:31 + */ + +public interface EamBasicCategoryService extends IService { + List query(EamBasicCategoryDto eamBasicCategoryDto); +} diff --git a/system/src/main/java/com/yyy/system/service/EamBasicFinancialCategoryService.java b/system/src/main/java/com/yyy/system/service/EamBasicFinancialCategoryService.java new file mode 100644 index 0000000..235e401 --- /dev/null +++ b/system/src/main/java/com/yyy/system/service/EamBasicFinancialCategoryService.java @@ -0,0 +1,15 @@ +package com.yyy.system.service; +import com.baomidou.mybatisplus.extension.service.IService; +import com.yyy.system.entity.pojo.EamBasicFinancialCategory; +import com.yyy.system.entity.dto.EamBasicFinancialCategoryDto; +import java.util.List; + +/** + * 财务分类信息表(EamBasicFinancialCategory)表服务接口 + * @author Fangy + * @date 2024-05-11 14:38:13 + */ + +public interface EamBasicFinancialCategoryService extends IService { + List query(EamBasicFinancialCategoryDto eamBasicFinancialCategoryDto); +} diff --git a/system/src/main/java/com/yyy/system/service/EamBasicMaintenanceVendorService.java b/system/src/main/java/com/yyy/system/service/EamBasicMaintenanceVendorService.java new file mode 100644 index 0000000..20b3ab4 --- /dev/null +++ b/system/src/main/java/com/yyy/system/service/EamBasicMaintenanceVendorService.java @@ -0,0 +1,15 @@ +package com.yyy.system.service; +import com.baomidou.mybatisplus.extension.service.IService; +import com.yyy.system.entity.pojo.EamBasicMaintenanceVendor; +import com.yyy.system.entity.dto.EamBasicMaintenanceVendorDto; +import java.util.List; + +/** + * 维保商(EamBasicMaintenanceVendor)表服务接口 + * @author Fangy + * @date 2024-04-09 12:52:28 + */ + +public interface EamBasicMaintenanceVendorService extends IService { + List query(EamBasicMaintenanceVendorDto eamBasicMaintenanceVendorDto); +} diff --git a/system/src/main/java/com/yyy/system/service/EamBasicManufacturersVendorService.java b/system/src/main/java/com/yyy/system/service/EamBasicManufacturersVendorService.java new file mode 100644 index 0000000..01d8ccc --- /dev/null +++ b/system/src/main/java/com/yyy/system/service/EamBasicManufacturersVendorService.java @@ -0,0 +1,18 @@ +package com.yyy.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.yyy.system.entity.pojo.EamBasicManufacturersVendor; +import com.yyy.system.entity.dto.EamBasicManufacturersVendorDto; + +import java.util.List; + +/** + * 生产商(EamBasicManufacturersVendor)表服务接口 + * + * @author Fangy + * @date 2024-04-09 12:45:34 + */ + +public interface EamBasicManufacturersVendorService extends IService { + List query(EamBasicManufacturersVendorDto eamBasicManufacturersVendorDto); +} diff --git a/system/src/main/java/com/yyy/system/service/EamBasicPositionService.java b/system/src/main/java/com/yyy/system/service/EamBasicPositionService.java new file mode 100644 index 0000000..4ac7eb6 --- /dev/null +++ b/system/src/main/java/com/yyy/system/service/EamBasicPositionService.java @@ -0,0 +1,15 @@ +package com.yyy.system.service; +import com.baomidou.mybatisplus.extension.service.IService; +import com.yyy.system.entity.pojo.EamBasicPosition; +import com.yyy.system.entity.dto.EamBasicPositionDto; +import java.util.List; + +/** + * 存放位置信息表(EamBasicPosition)表服务接口 + * @author Fangy + * @date 2024-04-09 12:52:28 + */ + +public interface EamBasicPositionService extends IService { + List query(EamBasicPositionDto eamBasicPositionDto); +} diff --git a/system/src/main/java/com/yyy/system/service/EamBasicSupplierVendorService.java b/system/src/main/java/com/yyy/system/service/EamBasicSupplierVendorService.java new file mode 100644 index 0000000..0884523 --- /dev/null +++ b/system/src/main/java/com/yyy/system/service/EamBasicSupplierVendorService.java @@ -0,0 +1,15 @@ +package com.yyy.system.service; +import com.baomidou.mybatisplus.extension.service.IService; +import com.yyy.system.entity.pojo.EamBasicSupplierVendor; +import com.yyy.system.entity.dto.EamBasicSupplierVendorDto; +import java.util.List; + +/** + * 供应商(EamBasicSupplierVendor)表服务接口 + * @author Fangy + * @date 2024-04-09 10:56:09 + */ + +public interface EamBasicSupplierVendorService extends IService { + List query(EamBasicSupplierVendorDto eamBasicSupplierVendorDto); +} diff --git a/system/src/main/java/com/yyy/system/service/EamBasicWarehouseService.java b/system/src/main/java/com/yyy/system/service/EamBasicWarehouseService.java new file mode 100644 index 0000000..76e8752 --- /dev/null +++ b/system/src/main/java/com/yyy/system/service/EamBasicWarehouseService.java @@ -0,0 +1,15 @@ +package com.yyy.system.service; +import com.baomidou.mybatisplus.extension.service.IService; +import com.yyy.system.entity.pojo.EamBasicWarehouse; +import com.yyy.system.entity.dto.EamBasicWarehouseDto; +import java.util.List; + +/** + * 仓库信息表(EamBasicWarehouse)表服务接口 + * @author Fangy + * @date 2024-04-09 13:16:58 + */ + +public interface EamBasicWarehouseService extends IService { + List query(EamBasicWarehouseDto eamBasicWarehouseDto); +} diff --git a/system/src/main/java/com/yyy/system/service/EamBusinessAllocateService.java b/system/src/main/java/com/yyy/system/service/EamBusinessAllocateService.java new file mode 100644 index 0000000..011a349 --- /dev/null +++ b/system/src/main/java/com/yyy/system/service/EamBusinessAllocateService.java @@ -0,0 +1,20 @@ +package com.yyy.system.service; +import com.baomidou.mybatisplus.extension.service.IService; +import com.yyy.system.entity.pojo.EamBusinessAllocate; +import com.yyy.system.entity.dto.EamBusinessAllocateDto; +import java.util.List; +import java.util.Map; + +/** + * 调拨信息表(EamBusinessAllocate)表服务接口 + * @author Fangy + * @date 2024-04-11 16:16:13 + */ + +public interface EamBusinessAllocateService extends IService { + List query(EamBusinessAllocateDto eamBusinessAllocateDto); + + EamBusinessAllocate getById(Long id); + + boolean isCompleted(Long id); +} diff --git a/system/src/main/java/com/yyy/system/service/EamBusinessBorrowService.java b/system/src/main/java/com/yyy/system/service/EamBusinessBorrowService.java new file mode 100644 index 0000000..6c72f17 --- /dev/null +++ b/system/src/main/java/com/yyy/system/service/EamBusinessBorrowService.java @@ -0,0 +1,19 @@ +package com.yyy.system.service; +import com.baomidou.mybatisplus.extension.service.IService; +import com.yyy.system.entity.pojo.EamBusinessBorrow; +import com.yyy.system.entity.dto.EamBusinessBorrowDto; +import java.util.List; + +/** + * 借用信息表(EamBusinessBorrow)表服务接口 + * @author Fangy + * @date 2024-04-10 17:26:36 + */ + +public interface EamBusinessBorrowService extends IService { + List query(EamBusinessBorrowDto eamBusinessBorrowDto); + + EamBusinessBorrow getById(Long id); + + boolean isCompleted(Long id); +} diff --git a/system/src/main/java/com/yyy/system/service/EamBusinessCollectionService.java b/system/src/main/java/com/yyy/system/service/EamBusinessCollectionService.java new file mode 100644 index 0000000..486f477 --- /dev/null +++ b/system/src/main/java/com/yyy/system/service/EamBusinessCollectionService.java @@ -0,0 +1,22 @@ +package com.yyy.system.service; +import com.baomidou.mybatisplus.extension.service.IService; +import com.yyy.system.entity.pojo.EamBusinessCollection; +import com.yyy.system.entity.dto.EamBusinessCollectionDto; +import java.util.List; +import java.util.Map; + +/** + * 资产领用信息表(EamBusinessCollection)表服务接口 + * @author Fangy + * @date 2024-04-12 11:48:07 + */ + +public interface EamBusinessCollectionService extends IService { + List query(EamBusinessCollectionDto eamBusinessCollectionDto); + + EamBusinessCollection getById(Long id); + + boolean isCompleted(Long id); + + void formLink(Map variables); +} diff --git a/system/src/main/java/com/yyy/system/service/EamBusinessOutboundService.java b/system/src/main/java/com/yyy/system/service/EamBusinessOutboundService.java new file mode 100644 index 0000000..2fb618b --- /dev/null +++ b/system/src/main/java/com/yyy/system/service/EamBusinessOutboundService.java @@ -0,0 +1,19 @@ +package com.yyy.system.service; +import com.baomidou.mybatisplus.extension.service.IService; +import com.yyy.system.entity.pojo.EamBusinessOutbound; +import com.yyy.system.entity.dto.EamBusinessOutboundDto; +import java.util.List; + +/** + * 出库信息表(EamBusinessOutbound)表服务接口 + * @author Fangy + * @date 2024-04-10 17:26:37 + */ + +public interface EamBusinessOutboundService extends IService { + List query(EamBusinessOutboundDto eamBusinessOutboundDto); + + EamBusinessOutbound getById(Long id); + + boolean isCompleted(Long id); +} diff --git a/system/src/main/java/com/yyy/system/service/EamBusinessRegistrationService.java b/system/src/main/java/com/yyy/system/service/EamBusinessRegistrationService.java new file mode 100644 index 0000000..ae349dd --- /dev/null +++ b/system/src/main/java/com/yyy/system/service/EamBusinessRegistrationService.java @@ -0,0 +1,20 @@ +package com.yyy.system.service; +import com.baomidou.mybatisplus.extension.service.IService; +import com.yyy.common.enums.BusinessStatusEnum; +import com.yyy.system.entity.pojo.EamBusinessRegistration; +import com.yyy.system.entity.dto.EamBusinessRegistrationDto; +import java.util.List; + +/** + * 资产登记信息表(EamBusinessRegistration)表服务接口 + * @author Fangy + * @date 2024-04-10 13:17:47 + */ + +public interface EamBusinessRegistrationService extends IService { + List query(EamBusinessRegistrationDto eamBusinessRegistrationDto); + + List query(List assetIdList); + + boolean update(List idList, BusinessStatusEnum status); +} diff --git a/system/src/main/java/com/yyy/system/service/EamBusinessRetirementService.java b/system/src/main/java/com/yyy/system/service/EamBusinessRetirementService.java new file mode 100644 index 0000000..709f063 --- /dev/null +++ b/system/src/main/java/com/yyy/system/service/EamBusinessRetirementService.java @@ -0,0 +1,22 @@ +package com.yyy.system.service; +import com.baomidou.mybatisplus.extension.service.IService; +import com.yyy.system.entity.pojo.EamBusinessRetirement; +import com.yyy.system.entity.dto.EamBusinessRetirementDto; +import java.util.List; +import java.util.Map; + +/** + * 资产报废(EamBusinessRetirement)表服务接口 + * @author Fangy + * @date 2024-05-10 10:37:08 + */ + +public interface EamBusinessRetirementService extends IService { + List query(EamBusinessRetirementDto eamBusinessRetirementDto); + + EamBusinessRetirement getById(Long id); + + boolean isCompleted(Long id); + + void formLink(Map variables); +} diff --git a/system/src/main/java/com/yyy/system/service/EamBusinessReturnInventoryService.java b/system/src/main/java/com/yyy/system/service/EamBusinessReturnInventoryService.java new file mode 100644 index 0000000..5db9c7d --- /dev/null +++ b/system/src/main/java/com/yyy/system/service/EamBusinessReturnInventoryService.java @@ -0,0 +1,22 @@ +package com.yyy.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.yyy.system.entity.pojo.EamBusinessReturnInventory; +import com.yyy.system.entity.dto.EamBusinessReturnInventoryDto; + +import java.util.List; + +/** + * 退库信息表(EamBusinessReturnInventory)表服务接口 + * + * @author Fangy + * @date 2024-04-12 11:10:55 + */ + +public interface EamBusinessReturnInventoryService extends IService { + List query(EamBusinessReturnInventoryDto eamBusinessReturnInventoryDto); + + EamBusinessReturnInventory getById(Long id); + + boolean isCompleted(Long id); +} diff --git a/system/src/main/java/com/yyy/system/service/EamBusinessReturnService.java b/system/src/main/java/com/yyy/system/service/EamBusinessReturnService.java new file mode 100644 index 0000000..066793e --- /dev/null +++ b/system/src/main/java/com/yyy/system/service/EamBusinessReturnService.java @@ -0,0 +1,23 @@ +package com.yyy.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.yyy.system.entity.pojo.EamBusinessReturn; +import com.yyy.system.entity.dto.EamBusinessReturnDto; + +import java.util.List; + +/** + * 归还信息表(EamBusinessReturn)表服务接口 + * + * @author Fangy + * @date 2024-04-10 17:26:46 + */ + +public interface EamBusinessReturnService extends IService { + + List query(EamBusinessReturnDto eamBusinessReturnDto); + + EamBusinessReturn getById(Long id); + + boolean isCompleted(Long id); +} diff --git a/system/src/main/java/com/yyy/system/service/EamBusinessStorageService.java b/system/src/main/java/com/yyy/system/service/EamBusinessStorageService.java new file mode 100644 index 0000000..7ff3a2c --- /dev/null +++ b/system/src/main/java/com/yyy/system/service/EamBusinessStorageService.java @@ -0,0 +1,19 @@ +package com.yyy.system.service; +import com.baomidou.mybatisplus.extension.service.IService; +import com.yyy.system.entity.pojo.EamBusinessStorage; +import com.yyy.system.entity.dto.EamBusinessStorageDto; +import java.util.List; + +/** + * 入库信息表(EamBusinessStorage)表服务接口 + * @author Fangy + * @date 2024-04-10 17:26:46 + */ + +public interface EamBusinessStorageService extends IService { + List query(EamBusinessStorageDto eamBusinessStorageDto); + + EamBusinessStorage getById(Long id); + + boolean isCompleted(Long id); +} diff --git a/system/src/main/java/com/yyy/system/service/EamBusinessTransferService.java b/system/src/main/java/com/yyy/system/service/EamBusinessTransferService.java new file mode 100644 index 0000000..2332584 --- /dev/null +++ b/system/src/main/java/com/yyy/system/service/EamBusinessTransferService.java @@ -0,0 +1,22 @@ +package com.yyy.system.service; +import com.baomidou.mybatisplus.extension.service.IService; +import com.yyy.system.entity.pojo.EamBusinessTransfer; +import com.yyy.system.entity.dto.EamBusinessTransferDto; +import java.util.List; +import java.util.Map; + +/** + * 资产转移信息表(EamBusinessTransfer)表服务接口 + * @author Fangy + * @date 2024-04-10 17:26:47 + */ + +public interface EamBusinessTransferService extends IService { + List query(EamBusinessTransferDto eamBusinessTransferDto); + + EamBusinessTransfer getById(Long id); + + boolean isCompleted(Long id); + + void formLink(Map variables); +} diff --git a/system/src/main/java/com/yyy/system/service/EamRepairFaultService.java b/system/src/main/java/com/yyy/system/service/EamRepairFaultService.java new file mode 100644 index 0000000..b300fdf --- /dev/null +++ b/system/src/main/java/com/yyy/system/service/EamRepairFaultService.java @@ -0,0 +1,23 @@ +package com.yyy.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.yyy.system.entity.pojo.EamRepairFault; +import com.yyy.system.entity.dto.EamRepairFaultDto; + +import java.util.List; +import java.util.Map; + +/** + * 故障信息表(EamRepairFault)表服务接口 + * + * @author Fangy + * @date 2024-04-12 15:41:31 + */ + +public interface EamRepairFaultService extends IService { + List query(EamRepairFaultDto eamRepairFaultDto); + + boolean isCompleted(Long id); + + void formLink(Map variables); +} diff --git a/system/src/main/java/com/yyy/system/service/EamRepairService.java b/system/src/main/java/com/yyy/system/service/EamRepairService.java new file mode 100644 index 0000000..6baabde --- /dev/null +++ b/system/src/main/java/com/yyy/system/service/EamRepairService.java @@ -0,0 +1,24 @@ +package com.yyy.system.service; +import com.baomidou.mybatisplus.extension.service.IService; +import com.yyy.system.entity.pojo.EamRepair; +import com.yyy.system.entity.dto.EamRepairDto; +import java.util.List; +import java.util.Map; + +/** + * 维修登记信息表(EamRepair)表服务接口 + * @author Fangy + * @date 2024-04-12 15:00:37 + */ + +public interface EamRepairService extends IService { + List query(EamRepairDto eamRepairDto); + + EamRepair getById(Long id); + + List getByAssetId(Long id); + + boolean isCompleted(Long id); + + void formLink(Map variables); +} diff --git a/system/src/main/java/com/yyy/system/service/EamRepairTypeService.java b/system/src/main/java/com/yyy/system/service/EamRepairTypeService.java new file mode 100644 index 0000000..fe46824 --- /dev/null +++ b/system/src/main/java/com/yyy/system/service/EamRepairTypeService.java @@ -0,0 +1,15 @@ +package com.yyy.system.service; +import com.baomidou.mybatisplus.extension.service.IService; +import com.yyy.system.entity.pojo.EamRepairType; +import com.yyy.system.entity.dto.EamRepairTypeDto; +import java.util.List; + +/** + * 保养计划(维修类型)表(EamRepairType)表服务接口 + * @author Fangy + * @date 2024-04-12 15:00:39 + */ + +public interface EamRepairTypeService extends IService { + List query(EamRepairTypeDto eamRepairTypeDto); +} diff --git a/system/src/main/java/com/yyy/system/service/EamStocktakingDetailsService.java b/system/src/main/java/com/yyy/system/service/EamStocktakingDetailsService.java new file mode 100644 index 0000000..c62f9b7 --- /dev/null +++ b/system/src/main/java/com/yyy/system/service/EamStocktakingDetailsService.java @@ -0,0 +1,17 @@ +package com.yyy.system.service; +import com.baomidou.mybatisplus.extension.service.IService; +import com.yyy.system.entity.pojo.EamStocktakingDetails; +import com.yyy.system.entity.dto.EamStocktakingDetailsDto; +import java.util.List; + +/** + * 盘点明细(EamStocktakingDetails)表服务接口 + * @author Fangy + * @date 2024-04-12 14:50:46 + */ + +public interface EamStocktakingDetailsService extends IService { + List query(EamStocktakingDetailsDto eamStocktakingDetailsDto); + + EamStocktakingDetails getById(Long id); +} diff --git a/system/src/main/java/com/yyy/system/service/EamStocktakingJobService.java b/system/src/main/java/com/yyy/system/service/EamStocktakingJobService.java new file mode 100644 index 0000000..e4a8727 --- /dev/null +++ b/system/src/main/java/com/yyy/system/service/EamStocktakingJobService.java @@ -0,0 +1,17 @@ +package com.yyy.system.service; +import com.baomidou.mybatisplus.extension.service.IService; +import com.yyy.system.entity.pojo.EamStocktakingJob; +import com.yyy.system.entity.dto.EamStocktakingJobDto; +import java.util.List; + +/** + * 盘点任务表(EamStocktakingJob)表服务接口 + * @author Fangy + * @date 2024-04-12 14:50:46 + */ + +public interface EamStocktakingJobService extends IService { + List query(EamStocktakingJobDto eamStocktakingJobDto); + + EamStocktakingJob getById(Long id); +} diff --git a/system/src/main/java/com/yyy/system/service/EamStocktakingPlanService.java b/system/src/main/java/com/yyy/system/service/EamStocktakingPlanService.java new file mode 100644 index 0000000..3f485c9 --- /dev/null +++ b/system/src/main/java/com/yyy/system/service/EamStocktakingPlanService.java @@ -0,0 +1,17 @@ +package com.yyy.system.service; +import com.baomidou.mybatisplus.extension.service.IService; +import com.yyy.system.entity.pojo.EamStocktakingPlan; +import com.yyy.system.entity.dto.EamStocktakingPlanDto; +import java.util.List; + +/** + * 盘点计划信息(EamStocktakingPlan)表服务接口 + * @author Fangy + * @date 2024-04-12 14:50:46 + */ + +public interface EamStocktakingPlanService extends IService { + List query(EamStocktakingPlanDto eamStocktakingPlanDto); + + EamStocktakingPlan getById(Long id); +} diff --git a/system/src/main/java/com/yyy/system/service/EamWarehouseAssetService.java b/system/src/main/java/com/yyy/system/service/EamWarehouseAssetService.java new file mode 100644 index 0000000..e23cb28 --- /dev/null +++ b/system/src/main/java/com/yyy/system/service/EamWarehouseAssetService.java @@ -0,0 +1,20 @@ +package com.yyy.system.service; +import com.baomidou.mybatisplus.extension.service.IService; +import com.yyy.system.entity.pojo.EamWarehouseAsset; +import com.yyy.system.entity.dto.EamWarehouseAssetDto; +import java.util.List; +import java.util.Map; + +/** + * 库存信息表(EamWarehouseAsset)表服务接口 + * @author Fangy + * @date 2024-05-08 14:00:19 + */ + +public interface EamWarehouseAssetService extends IService { + List query(EamWarehouseAssetDto eamWarehouseAssetDto); + + boolean add(List list); + + boolean reduce(List list); +} diff --git a/system/src/main/java/com/yyy/system/service/FlFormItemService.java b/system/src/main/java/com/yyy/system/service/FlFormItemService.java new file mode 100644 index 0000000..3cc24df --- /dev/null +++ b/system/src/main/java/com/yyy/system/service/FlFormItemService.java @@ -0,0 +1,17 @@ +package com.yyy.system.service; +import com.baomidou.mybatisplus.extension.service.IService; +import com.yyy.system.entity.pojo.FlFormItem; +import com.yyy.system.entity.dto.FlFormItemDto; +import java.util.List; + +/** + * 流程实例对象(FlFormItem)表服务接口 + * @author Fangy + * @date 2024-04-30 11:25:57 + */ + +public interface FlFormItemService extends IService { + List query(FlFormItemDto flFormItemDto); + + boolean update(FlFormItemDto flFormItemDto); +} diff --git a/system/src/main/java/com/yyy/system/service/FlFormService.java b/system/src/main/java/com/yyy/system/service/FlFormService.java new file mode 100644 index 0000000..3bc2f0f --- /dev/null +++ b/system/src/main/java/com/yyy/system/service/FlFormService.java @@ -0,0 +1,19 @@ +package com.yyy.system.service; +import com.baomidou.mybatisplus.extension.service.IService; +import com.yyy.system.entity.pojo.FlForm; +import com.yyy.system.entity.dto.FlFormDto; +import java.util.List; + +/** + * 流程表单对象(FlForm)表服务接口 + * @author Fangy + * @date 2024-04-23 12:22:45 + */ + +public interface FlFormService extends IService { + List query(FlFormDto flFormDto); + + FlForm selectByDeployId(String deploymentId); + + FlForm selectByKey(String key); +} diff --git a/system/src/main/java/com/yyy/system/service/FlListenerService.java b/system/src/main/java/com/yyy/system/service/FlListenerService.java new file mode 100644 index 0000000..ab96adc --- /dev/null +++ b/system/src/main/java/com/yyy/system/service/FlListenerService.java @@ -0,0 +1,15 @@ +package com.yyy.system.service; +import com.baomidou.mybatisplus.extension.service.IService; +import com.yyy.system.entity.pojo.FlListener; +import com.yyy.system.entity.dto.FlListenerDto; +import java.util.List; + +/** + * 流程监听对象(FlListener)表服务接口 + * @author Fangy + * @date 2024-04-23 12:22:45 + */ + +public interface FlListenerService extends IService { + List query(FlListenerDto flListenerDto); +} diff --git a/system/src/main/java/com/yyy/system/service/UmsMenuService.java b/system/src/main/java/com/yyy/system/service/UmsMenuService.java new file mode 100644 index 0000000..4195fe7 --- /dev/null +++ b/system/src/main/java/com/yyy/system/service/UmsMenuService.java @@ -0,0 +1,27 @@ +package com.yyy.system.service; +import com.baomidou.mybatisplus.extension.service.IService; +import com.yyy.common.core.domain.dto.UmsMenuDto; +import com.yyy.common.core.domain.entity.UmsMenu; + +import java.util.List; +import java.util.Set; + +/** + * 菜单表(UmsMenu)表服务接口 + * @author Fangy + * @date 2024-03-25 15:50:12 + */ + +public interface UmsMenuService extends IService { + /** + * 根据用户ID查询权限 + * + * @param userId 用户ID + * @return 权限列表 + */ + Set selectPermsByUserId(Long userId); + + List query(UmsMenuDto umsMenuDto); + + List selectPermsByRoleId(Long roleId); +} diff --git a/system/src/main/java/com/yyy/system/service/UmsOrganizationService.java b/system/src/main/java/com/yyy/system/service/UmsOrganizationService.java new file mode 100644 index 0000000..9a88c65 --- /dev/null +++ b/system/src/main/java/com/yyy/system/service/UmsOrganizationService.java @@ -0,0 +1,13 @@ +package com.yyy.system.service; +import com.baomidou.mybatisplus.extension.service.IService; +import com.yyy.common.core.domain.entity.UmsOrganization; + +/** + * 组织信息表(UmsOrganization)表服务接口 + * @author Fangy + * @date 2024-04-03 09:47:08 + */ + +public interface UmsOrganizationService extends IService { + UmsOrganization getByUid(Long userId); +} diff --git a/system/src/main/java/com/yyy/system/service/UmsRoleMenuService.java b/system/src/main/java/com/yyy/system/service/UmsRoleMenuService.java new file mode 100644 index 0000000..39c2a4c --- /dev/null +++ b/system/src/main/java/com/yyy/system/service/UmsRoleMenuService.java @@ -0,0 +1,12 @@ +package com.yyy.system.service; +import com.baomidou.mybatisplus.extension.service.IService; +import com.yyy.common.core.domain.entity.UmsRoleMenu; + +/** + * 角色权限关联表(UmsRoleMenu)表服务接口 + * @author Fangy + * @date 2024-04-12 20:46:30 + */ + +public interface UmsRoleMenuService extends IService { +} diff --git a/system/src/main/java/com/yyy/system/service/UmsRoleService.java b/system/src/main/java/com/yyy/system/service/UmsRoleService.java new file mode 100644 index 0000000..bd0cb15 --- /dev/null +++ b/system/src/main/java/com/yyy/system/service/UmsRoleService.java @@ -0,0 +1,33 @@ +package com.yyy.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.yyy.common.core.domain.dto.UmsRoleDto; +import com.yyy.common.core.domain.entity.UmsRole; + +import java.util.List; +import java.util.Set; + +/** + * 角色表(UmsRole)表服务接口 + * + * @author Fangy + * @date 2024-03-25 15:50:12 + */ + +public interface UmsRoleService extends IService { + /** + * 根据用户ID查询角色列表 + * + * @param userId 用户ID + * @return 权限列表 + */ + Set selectRoleKeys(Long userId); + + List query(UmsRoleDto umsRoleDto); + + Long selectLatestPrimaryKey(); + + boolean bindMenu(Long roleId, List menuIds); + + UmsRole getById(Long id); +} diff --git a/system/src/main/java/com/yyy/system/service/UmsUserService.java b/system/src/main/java/com/yyy/system/service/UmsUserService.java new file mode 100644 index 0000000..e82d06f --- /dev/null +++ b/system/src/main/java/com/yyy/system/service/UmsUserService.java @@ -0,0 +1,55 @@ +package com.yyy.system.service; +import com.baomidou.mybatisplus.extension.service.IService; +import com.yyy.common.core.domain.dto.UmsUserAddDto; +import com.yyy.common.core.domain.dto.UmsUserQueryDto; +import com.yyy.common.core.domain.entity.UmsUser; + +import java.util.List; + +/** + * 用户表(UmsUser)表服务接口 + * @author Fangy + * @date 2024-03-22 17:31:34 + */ + +public interface UmsUserService extends IService { + /** + * 校验用户登录账号是否唯一 + */ + boolean checkLoginNameUnique(Long userId, String loginName); + + /** + * 校验手机号码是否唯一 + */ + boolean checkPhoneUnique(Long userId, String phone); + + /** + * 校验email是否唯一 + */ + boolean checkEmailUnique(Long userId, String email); + + /** + * 分页查询数据 + */ + List list(UmsUserQueryDto umsUserDto); + + UmsUser getById(Long id); + + List listByIds(List ids); + + boolean update(UmsUserAddDto umsUserAddDto, Long updateUser); + + boolean bindPost(Long userId, Long postId); + + boolean unbindPost(Long id); + + boolean unbindPost(List userIds); + + boolean bindRole(Long userId, Long roleId); + + boolean unbindRole(List userIds); + + boolean unbindRole(Long id); + + Long selectLatestPrimaryKey(); +} diff --git a/system/src/main/java/com/yyy/system/service/impl/EamAssetLogServiceImpl.java b/system/src/main/java/com/yyy/system/service/impl/EamAssetLogServiceImpl.java new file mode 100644 index 0000000..6556eca --- /dev/null +++ b/system/src/main/java/com/yyy/system/service/impl/EamAssetLogServiceImpl.java @@ -0,0 +1,45 @@ +package com.yyy.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.yyy.common.enums.DetectTypeEnum; +import com.yyy.common.utils.bean.BeanUtils; +import com.yyy.system.mapper.EamAssetLogMapper; +import com.yyy.system.entity.pojo.EamAssetLog; +import com.yyy.system.service.EamAssetLogService; +import com.yyy.system.entity.dto.EamAssetLogDto; + +import java.util.List; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import org.springframework.beans.factory.annotation.Autowired; + +/** + * 资产操作日志(EamAssetLog)表服务实现类 + * + * @author Fangy + * @date 2024-04-09 10:23:38 + */ +@Service +public class EamAssetLogServiceImpl extends ServiceImpl implements EamAssetLogService { + /** + * logger:日志文件 + */ + private static final Logger logger = LoggerFactory.getLogger(EamAssetLogServiceImpl.class); + + @Autowired + private EamAssetLogMapper eamAssetLogMapper; + + @Override + public List query(EamAssetLogDto eamAssetLogDto) { + EamAssetLog eamAssetLog = new EamAssetLog(); + BeanUtils.copyProperties(eamAssetLogDto, eamAssetLog); + return eamAssetLogMapper.query(eamAssetLog); + } + + @Override + public boolean add(String businessId, DetectTypeEnum type, String notes, Long assetId, Long createUser) { + return eamAssetLogMapper.insert(EamAssetLog.builder().businessId(businessId).operationType(type.getInfo()).operationNotes(notes).assetId(assetId).createUser(createUser).build()) > 0; + } +} diff --git a/system/src/main/java/com/yyy/system/service/impl/EamAssetServiceImpl.java b/system/src/main/java/com/yyy/system/service/impl/EamAssetServiceImpl.java new file mode 100644 index 0000000..fa3ca5b --- /dev/null +++ b/system/src/main/java/com/yyy/system/service/impl/EamAssetServiceImpl.java @@ -0,0 +1,313 @@ +package com.yyy.system.service.impl; + +import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.yyy.common.core.domain.entity.UmsOrganization; +import com.yyy.common.core.domain.entity.UmsUser; +import com.yyy.common.enums.AssetStatusEnum; +import com.yyy.common.enums.EncodingEum; +import com.yyy.common.utils.common.DateUtils; +import com.yyy.system.entity.dto.EamAssetQueryDto; +import com.yyy.system.entity.dto.EamSparePartsDto; +import com.yyy.system.entity.dto.EamWarehouseAssetDto; +import com.yyy.system.entity.dto.EamWarehouseInventoryDto; +import com.yyy.system.entity.excel.EamAssetExcel; +import com.yyy.system.entity.pojo.EamAsset; +import com.yyy.system.entity.pojo.*; +import com.yyy.system.entity.vo.*; +import com.yyy.system.mapper.*; +import com.yyy.system.service.EamAssetService; +import com.yyy.common.utils.bean.BeanUtils; + +import java.time.LocalDateTime; +import java.util.*; +import java.util.stream.Collectors; + +import com.yyy.system.service.EamBusinessBorrowService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import org.springframework.beans.factory.annotation.Autowired; + +/** + * 资产信息表(EamAsset)表服务实现类 + * + * @author Fangy + * @date 2024-04-09 13:47:49 + */ +@Service +public class EamAssetServiceImpl extends ServiceImpl implements EamAssetService { + /** + * logger:日志文件 + */ + private static final Logger logger = LoggerFactory.getLogger(EamAssetServiceImpl.class); + + @Autowired + private EamAssetMapper eamAssetMapper; + + @Autowired + private EamWarehouseInventoryMapper eamWarehouseInventoryMapper; + + @Autowired + private EamBasicCategoryMapper categoryMapper; + + @Autowired + private UmsOrganizationMapper organizationMapper; + + @Autowired + private UmsUserMapper userMapper; + + @Autowired + private EamBasicSupplierVendorMapper supplierVendorMapper; + + @Autowired + private EamBasicMaintenanceVendorMapper maintenanceVendorMapper; + + @Autowired + private EamBasicManufacturersVendorMapper manufacturersVendorMapper; + + @Autowired + private EamBasicPositionMapper positionMapper; + + @Autowired + private EamBasicFinancialCategoryMapper financialCategoryMapper; + + @Autowired + private EamBusinessBorrowService borrowService; + + + @Override + public List query(EamAssetQueryDto eamAssetQueryDto) { + EamAsset eamAsset = new EamAsset(); + BeanUtils.copyProperties(eamAssetQueryDto, eamAsset); + return eamAssetMapper.query(eamAsset); + } + + @Override + public boolean delete(List ids) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.set("is_deleted", 1).set("update_time", DateUtils.getNowDate()).in("asset_id", ids); + return eamAssetMapper.update(null, updateWrapper) > 0; + } + + @Override + public EamAsset getById(Long id) { + return eamAssetMapper.joinById(id); + } + + @Override + public List listByIds(List idList) { + return eamAssetMapper.joinByIds(idList); + } + + @Override + public Long selectLatestPrimaryKey() { + EamAsset eamAsset = eamAssetMapper.selectOne(new QueryWrapper().orderByDesc("asset_id").last("limit 1")); + if (eamAsset != null) { + return eamAsset.getAssetId(); + } + return 1L; + } + + @Override + public List maintenance(String time) { + return eamAssetMapper.maintenance(time); + } + + @Override + public List stocktaking(EamStocktakingJob stocktakingJob) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + + if (stocktakingJob.getStocktakingStartDate() != null && stocktakingJob.getStocktakingEndDate() != null) { + queryWrapper.between("create_time", stocktakingJob.getStocktakingStartDate(), stocktakingJob.getStocktakingEndDate()); + } else if (stocktakingJob.getStocktakingStartDate() != null) { + queryWrapper.ge("create_time", stocktakingJob.getStocktakingStartDate()); + } else if (stocktakingJob.getStocktakingEndDate() != null) { + queryWrapper.le("create_time", stocktakingJob.getStocktakingEndDate()); + } + + queryWrapper.eq(stocktakingJob.getAssetStatus() != null, "status", stocktakingJob.getAssetStatus()) + .eq(stocktakingJob.getOwnCompanyId() != null, "own_company_id", stocktakingJob.getOwnCompanyId()) + .eq(stocktakingJob.getUseOrganizationId() != null, "use_organization_id", stocktakingJob.getUseOrganizationId()) + .eq(stocktakingJob.getUseUserId() != null, "use_user_id", stocktakingJob.getUseUserId()) + .eq(stocktakingJob.getCategoryId() != null, "category_id", stocktakingJob.getCategoryId()) + .eq(stocktakingJob.getPositionId() != null, "position_id", stocktakingJob.getPositionId()); + + //TODO 仓库信息 +// .eq(stocktakingJob.getWarehouseId() != null, "warehouse_id", stocktakingJob.getWarehouseId()) + return eamAssetMapper.selectList(queryWrapper); + } + + @Override + public boolean sparePartsAdd(EamSparePartsDto eamSparePartsDto) { + eamAssetMapper.sparePartsAdd(eamSparePartsDto); + return true; + } + + + @Override + public List sparePartsList(Long assetId) { + return eamAssetMapper.sparePartsList(assetId); + } + + @Override + public boolean sparePartsDel(EamSparePartsDto eamSparePartsDto) { + eamAssetMapper.sparePartsDel(eamSparePartsDto); + return true; + } + + @Override + public List queryWarehouseInventory(EamWarehouseInventoryDto eamWarehouseInventoryDto) { + EamWarehouseInventory eamWarehouseInventory = new EamWarehouseInventory(); + BeanUtils.copyProperties(eamWarehouseInventoryDto, eamWarehouseInventory); + return eamWarehouseInventoryMapper.query(eamWarehouseInventory); + } + + @Override + public List queryWarehouseInventoryByIds(List eamWarehouseAssetDtoList) { + List eamWarehouseInventoryList = new ArrayList<>(); + eamWarehouseAssetDtoList.forEach(eamWarehouseAssetDto -> { + EamWarehouseInventory e = eamWarehouseInventoryMapper.queryHistory(eamWarehouseAssetDto); + if (e != null) { + eamWarehouseInventoryList.add(e); + } + }); + return eamWarehouseInventoryList; + } + + @Override + public List queryWarehouseInventoryStorage(EamWarehouseInventoryDto eamWarehouseInventoryDto) { + EamWarehouseInventory eamWarehouseInventory = new EamWarehouseInventory(); + BeanUtils.copyProperties(eamWarehouseInventoryDto, eamWarehouseInventory); + return eamWarehouseInventoryMapper.queryWarehouseInventoryStorage(eamWarehouseInventory); + } + + @Override + public List excelToPojo(List list) { + List categoryList = categoryMapper.selectList(new QueryWrapper<>()); + List organizationList = organizationMapper.selectList(new QueryWrapper<>()); + List userList = userMapper.selectList(new QueryWrapper<>()); + List supplierVendorList = supplierVendorMapper.selectList(new QueryWrapper<>()); + List manufacturersVendorList = manufacturersVendorMapper.selectList(new QueryWrapper<>()); + List maintenanceVendorList = maintenanceVendorMapper.selectList(new QueryWrapper<>()); + List positionList = positionMapper.selectList(new QueryWrapper<>()); + List financialCategoryList = financialCategoryMapper.selectList(new QueryWrapper<>()); + + List result = new ArrayList<>(); + list.forEach(x -> { + EamAsset e = new EamAsset(); + BeanUtils.copyProperties(x, e); + + if (e.getAssetCode() == null) { + e.setAssetCode(EncodingEum.ASSET.getBusinessId()); + } + if (e.getCategoryId() == null && x.getCategoryName() != null) { + categoryList.stream().filter(a -> a.getCategoryName().equals(x.getCategoryName())).findFirst().ifPresent(a -> e.setCategoryId(a.getCategoryId())); + } + if (e.getOwnCompanyId() == null && x.getOwnCompanyName() != null) { + organizationList.stream().filter(a -> a.getOrganizationName().equals(x.getOwnCompanyName())).findFirst().ifPresent(a -> e.setOwnCompanyId(a.getOrganizationId())); + } + if (e.getUseOrganizationId() == null && x.getUseOrganizationName() != null) { + organizationList.stream().filter(a -> a.getOrganizationName().equals(x.getUseOrganizationName())).findFirst().ifPresent(a -> e.setUseOrganizationId(a.getOrganizationId())); + } + if (e.getManager() == null && x.getManagerName() != null) { + userList.stream().filter(a -> a.getUserName().equals(x.getManagerName())).findFirst().ifPresent(a -> e.setManager(a.getUserId())); + } + if (e.getSupplierVendorId() == null && x.getSupplierVendorName() != null) { + supplierVendorList.stream().filter(a -> a.getName().equals(x.getSupplierVendorName())).findFirst().ifPresent(a -> e.setSupplierVendorId(a.getSupplierVendorId())); + } + if (e.getManufacturersVendorId() == null && x.getManufacturersVendorName() != null) { + manufacturersVendorList.stream().filter(a -> a.getName().equals(x.getManufacturersVendorName())).findFirst().ifPresent(a -> e.setManufacturersVendorId(a.getManufacturersVendorId())); + } + if (e.getUseUserId() == null && x.getUseUserName() != null) { + userList.stream().filter(a -> a.getUserName().equals(x.getUseUserName())).findFirst().ifPresent(a -> e.setUseUserId(a.getUserId())); + } + if (e.getPositionId() == null && x.getPositionName() != null) { + positionList.stream().filter(a -> a.getName().equals(x.getPositionName())).findFirst().ifPresent(a -> e.setPositionId(a.getPositionId())); + } + if (e.getMaintenanceVendor() == null && x.getMaintenanceVendorName() != null) { + maintenanceVendorList.stream().filter(a -> a.getName().equals(x.getMaintenanceVendorName())).findFirst().ifPresent(a -> e.setMaintenanceVendor(a.getMaintenanceVendorId())); + } + if (e.getFinancialCategoryId() == null && x.getFinancialCategoryName() != null) { + financialCategoryList.stream().filter(a -> a.getFinancialCategoryName().equals(x.getFinancialCategoryName())).findFirst().ifPresent(a -> e.setFinancialCategoryId(a.getFinancialCategoryId())); + } + result.add(e); + }); + return result; + } + + @Override + public EamHomeVo homeData() { + String day = DateUtils.getTime(); + String day_1 = DateUtils.getDate(); + + int maintenanceWarningTotal = eamAssetMapper.maintenance(DateUtils.getTime()).size(); + int maintenanceWarningTotal_1 = eamAssetMapper.maintenance(DateUtils.getDate()).size(); + + int borrowWarningTotal = borrowService.list(new QueryWrapper<>()).stream() + .filter(borrow -> borrow.getIsDeleted().equals(0) && JSON.parseArray(borrow.getAssetIdList()).size() != 0 && + borrow.getReturnTime().before(DateUtils.toDate(LocalDateTime.now().plusDays(3)))) + .flatMap(borrow -> listByIds(JSON.parseArray(borrow.getAssetIdList(), EamWarehouseAssetDto.class).stream().map(EamWarehouseAssetDto::getAssetId).distinct().collect(Collectors.toList())).stream() + .filter(asset -> asset.getStatus().equals(AssetStatusEnum.BORROW.getCode())) + .map(asset -> EamWarningBorrowVo.ToVo(asset, borrow.getBusinessId(), borrow.getReturnTime()))) + .collect(Collectors.toList()).size(); + + int borrowWarningTotal_1 = borrowService.list(new QueryWrapper<>()).stream() + .filter(borrow -> borrow.getIsDeleted().equals(0) && JSON.parseArray(borrow.getAssetIdList()).size() != 0 && + borrow.getReturnTime().before(DateUtils.toDate(LocalDateTime.now().plusDays(4)))) + .flatMap(borrow -> listByIds(JSON.parseArray(borrow.getAssetIdList(), EamWarehouseAssetDto.class).stream().map(EamWarehouseAssetDto::getAssetId).distinct().collect(Collectors.toList())).stream() + .filter(asset -> asset.getStatus().equals(AssetStatusEnum.BORROW.getCode())) + .map(asset -> EamWarningBorrowVo.ToVo(asset, borrow.getBusinessId(), borrow.getReturnTime()))) + .collect(Collectors.toList()).size(); + + List eamWarehouseInventoryList = EamWarehouseInventoryVo.ToVo(queryWarehouseInventory(new EamWarehouseInventoryDto())); + long lowerLimitCount = eamWarehouseInventoryList.stream().filter(e -> e.getLowerLimit() >= e.getCount()).count(); + long upperLimitCount = eamWarehouseInventoryList.stream().filter(e -> e.getUpperLimit() <= e.getCount()).count(); + long safetyLimitCount = eamWarehouseInventoryList.stream().filter(e -> e.getSafetyLimit() <= e.getCount()).count(); + + int inventorySecurityWarningTotal = (int) (lowerLimitCount + upperLimitCount + safetyLimitCount); + //int inventorySecurityWarningTotal_1 = 0; + + List assetList = eamAssetMapper.query(new EamAsset()); + List assetStatusChart = assetList.stream().collect(Collectors.groupingBy(e -> AssetStatusEnum.getInfoByCode(e.getStatus()), Collectors.counting())) + .entrySet().stream().map(entry -> new EamChartVo(entry.getValue().intValue(), entry.getKey())).collect(Collectors.toList()); + + List assetPositionChart = assetList.stream().filter(e -> e.get_position() != null && e.get_position().getName() != null).collect(Collectors.groupingBy(e -> e.get_position().getName(), Collectors.counting())) + .entrySet().stream().map(entry -> new EamChartVo(entry.getValue().intValue(), entry.getKey())).collect(Collectors.toList()); + + List assetCategoryChart = assetList.stream().filter(e -> e.get_category() != null && e.get_category().getCategoryName() != null).collect(Collectors.groupingBy(e -> e.get_category().getCategoryName(), Collectors.counting())) + .entrySet().stream().map(entry -> new EamChartVo(entry.getValue().intValue(), entry.getKey())).collect(Collectors.toList()); + + List assetOwnChart = assetList.stream().filter(e -> e.get_ownCompany() != null && e.get_ownCompany().getOrganizationName() != null).collect(Collectors.groupingBy(e -> e.get_ownCompany().getOrganizationName(), Collectors.counting())) + .entrySet().stream().map(entry -> new EamChartVo(entry.getValue().intValue(), entry.getKey())).collect(Collectors.toList()); + + List assetUseChart = assetList.stream().filter(e -> e.get_useOrganization() != null && e.get_useOrganization().getOrganizationName() != null).collect(Collectors.groupingBy(e -> e.get_useOrganization().getOrganizationName(), Collectors.counting())) + .entrySet().stream().map(entry -> new EamChartVo(entry.getValue().intValue(), entry.getKey())).collect(Collectors.toList()); + + List warehouseInventoryList = queryWarehouseInventory(new EamWarehouseInventoryDto()); + + List assetInventoryChart = new ArrayList<>(); + assetInventoryChart.add(EamChartVo.builder().name("不足").total(warehouseInventoryList.stream().filter(e -> e.getLowerLimit() >= e.getCount()).collect(Collectors.toList()).size()).build()); + assetInventoryChart.add(EamChartVo.builder().name("超量").total(warehouseInventoryList.stream().filter(e -> e.getUpperLimit() <= e.getCount()).collect(Collectors.toList()).size()).build()); + assetInventoryChart.add(EamChartVo.builder().name("安全").total(warehouseInventoryList.stream().filter(e -> e.getSafetyLimit() <= e.getCount() && e.getCount() < e.getUpperLimit()).collect(Collectors.toList()).size()).build()); + + return EamHomeVo.builder() + .assetTotal(EamTotalVo.builder().total(eamAssetMapper.selectCount(new QueryWrapper().eq("is_deleted", 0)).intValue()).change(eamAssetMapper.selectCount(new QueryWrapper().eq("is_deleted", 0).between("create_time", day_1, day)).intValue() - eamAssetMapper.selectCount(new QueryWrapper().eq("is_deleted", 1).between("update_time", day_1, day)).intValue()).name("资产总数").build()) + .borrowWarning(EamTotalVo.builder().total(borrowWarningTotal).change(borrowWarningTotal - borrowWarningTotal_1).name("借用预警").build()) + .maintenanceWarning(EamTotalVo.builder().total(maintenanceWarningTotal).change(maintenanceWarningTotal - maintenanceWarningTotal_1).name("维保到期预警").build()) + .inventorySecurityWarning(EamTotalVo.builder().total(inventorySecurityWarningTotal).change(null).name("库存安全预警").build()) +// .todo((flowTaskService.myProcessNum())) + .assetStatusChart(assetStatusChart) + .assetPositionChart(assetPositionChart) + .assetCategoryChart(assetCategoryChart) + .assetInventoryChart(assetInventoryChart) + .assetOwnChart(assetOwnChart) + .assetUseChart(assetUseChart) + .recentlyAddedAssets(EamAssetVo.ToVo(eamAssetMapper.selectList(new QueryWrapper().orderByDesc("create_time").last("limit 10")))) + .build(); + } + + +} diff --git a/system/src/main/java/com/yyy/system/service/impl/EamBasicCategoryServiceImpl.java b/system/src/main/java/com/yyy/system/service/impl/EamBasicCategoryServiceImpl.java new file mode 100644 index 0000000..8ee6026 --- /dev/null +++ b/system/src/main/java/com/yyy/system/service/impl/EamBasicCategoryServiceImpl.java @@ -0,0 +1,38 @@ +package com.yyy.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.yyy.common.utils.bean.BeanUtils; +import com.yyy.system.mapper.EamBasicCategoryMapper; +import com.yyy.system.entity.pojo.EamBasicCategory; +import com.yyy.system.service.EamBasicCategoryService; +import com.yyy.system.entity.dto.EamBasicCategoryDto; + +import java.util.List; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import org.springframework.beans.factory.annotation.Autowired; + +/** + * 资产分类信息表(EamBasicCategory)表服务实现类 + * + * @author Fangy + * @date 2024-04-08 14:33:13 + */ +@Service +public class EamBasicCategoryServiceImpl extends ServiceImpl implements EamBasicCategoryService { + /** + * logger:日志文件 + */ + private static final Logger logger = LoggerFactory.getLogger(EamBasicCategoryServiceImpl.class); + + @Autowired + private EamBasicCategoryMapper eamBasicCategoryMapper; + + @Override + public List query(EamBasicCategoryDto eamBasicCategoryDto) { + EamBasicCategory eamBasicCategory = new EamBasicCategory(); + BeanUtils.copyProperties(eamBasicCategoryDto, eamBasicCategory); + return eamBasicCategoryMapper.query(eamBasicCategory); + } +} diff --git a/system/src/main/java/com/yyy/system/service/impl/EamBasicFinancialCategoryServiceImpl.java b/system/src/main/java/com/yyy/system/service/impl/EamBasicFinancialCategoryServiceImpl.java new file mode 100644 index 0000000..51ce00a --- /dev/null +++ b/system/src/main/java/com/yyy/system/service/impl/EamBasicFinancialCategoryServiceImpl.java @@ -0,0 +1,35 @@ +package com.yyy.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.yyy.system.mapper.EamBasicFinancialCategoryMapper; +import com.yyy.system.entity.pojo.EamBasicFinancialCategory; +import com.yyy.system.mapper.EamBasicFinancialCategoryMapper; +import com.yyy.system.service.EamBasicFinancialCategoryService; +import com.yyy.system.entity.dto.EamBasicFinancialCategoryDto; +import com.yyy.common.utils.bean.BeanUtils; +import java.util.List; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import org.springframework.beans.factory.annotation.Autowired; + +/** + * 财务分类信息表(EamBasicFinancialCategory)表服务实现类 + * @author Fangy + * @date 2024-05-11 14:38:13 + */ +@Service +public class EamBasicFinancialCategoryServiceImpl extends ServiceImpl implements EamBasicFinancialCategoryService { + /** logger:日志文件 */ + private static final Logger logger = LoggerFactory.getLogger(EamBasicFinancialCategoryServiceImpl.class); + + @Autowired + private EamBasicFinancialCategoryMapper eamBasicFinancialCategoryMapper; + + @Override + public List query(EamBasicFinancialCategoryDto eamBasicFinancialCategoryDto) { + EamBasicFinancialCategory eamBasicFinancialCategory = new EamBasicFinancialCategory(); + BeanUtils.copyProperties(eamBasicFinancialCategoryDto, eamBasicFinancialCategory); + return eamBasicFinancialCategoryMapper.query(eamBasicFinancialCategory); + } +} diff --git a/system/src/main/java/com/yyy/system/service/impl/EamBasicMaintenanceVendorServiceImpl.java b/system/src/main/java/com/yyy/system/service/impl/EamBasicMaintenanceVendorServiceImpl.java new file mode 100644 index 0000000..37e7d19 --- /dev/null +++ b/system/src/main/java/com/yyy/system/service/impl/EamBasicMaintenanceVendorServiceImpl.java @@ -0,0 +1,35 @@ +package com.yyy.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.yyy.system.mapper.EamBasicMaintenanceVendorMapper; +import com.yyy.system.entity.pojo.EamBasicMaintenanceVendor; +import com.yyy.system.mapper.EamBasicMaintenanceVendorMapper; +import com.yyy.system.service.EamBasicMaintenanceVendorService; +import com.yyy.system.entity.dto.EamBasicMaintenanceVendorDto; +import com.yyy.common.utils.bean.BeanUtils; +import java.util.List; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import org.springframework.beans.factory.annotation.Autowired; + +/** + * 维保商(EamBasicMaintenanceVendor)表服务实现类 + * @author Fangy + * @date 2024-04-09 12:52:28 + */ +@Service +public class EamBasicMaintenanceVendorServiceImpl extends ServiceImpl implements EamBasicMaintenanceVendorService { + /** logger:日志文件 */ + private static final Logger logger = LoggerFactory.getLogger(EamBasicMaintenanceVendorServiceImpl.class); + + @Autowired + private EamBasicMaintenanceVendorMapper eamBasicMaintenanceVendorMapper; + + @Override + public List query(EamBasicMaintenanceVendorDto eamBasicMaintenanceVendorDto) { + EamBasicMaintenanceVendor eamBasicMaintenanceVendor = new EamBasicMaintenanceVendor(); + BeanUtils.copyProperties(eamBasicMaintenanceVendorDto, eamBasicMaintenanceVendor); + return eamBasicMaintenanceVendorMapper.query(eamBasicMaintenanceVendor); + } +} diff --git a/system/src/main/java/com/yyy/system/service/impl/EamBasicManufacturersVendorServiceImpl.java b/system/src/main/java/com/yyy/system/service/impl/EamBasicManufacturersVendorServiceImpl.java new file mode 100644 index 0000000..03499bc --- /dev/null +++ b/system/src/main/java/com/yyy/system/service/impl/EamBasicManufacturersVendorServiceImpl.java @@ -0,0 +1,40 @@ +package com.yyy.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.yyy.system.mapper.EamBasicManufacturersVendorMapper; +import com.yyy.system.entity.pojo.EamBasicManufacturersVendor; +import com.yyy.system.mapper.EamBasicManufacturersVendorMapper; +import com.yyy.system.service.EamBasicManufacturersVendorService; +import com.yyy.system.entity.dto.EamBasicManufacturersVendorDto; +import com.yyy.common.utils.bean.BeanUtils; + +import java.util.List; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import org.springframework.beans.factory.annotation.Autowired; + +/** + * 生产商(EamBasicManufacturersVendor)表服务实现类 + * + * @author Fangy + * @date 2024-04-09 12:45:34 + */ +@Service +public class EamBasicManufacturersVendorServiceImpl extends ServiceImpl implements EamBasicManufacturersVendorService { + /** + * logger:日志文件 + */ + private static final Logger logger = LoggerFactory.getLogger(EamBasicManufacturersVendorServiceImpl.class); + + @Autowired + private EamBasicManufacturersVendorMapper eamBasicManufacturersVendorMapper; + + @Override + public List query(EamBasicManufacturersVendorDto eamBasicManufacturersVendorDto) { + EamBasicManufacturersVendor eamBasicManufacturersVendor = new EamBasicManufacturersVendor(); + BeanUtils.copyProperties(eamBasicManufacturersVendorDto, eamBasicManufacturersVendor); + return eamBasicManufacturersVendorMapper.query(eamBasicManufacturersVendor); + } +} diff --git a/system/src/main/java/com/yyy/system/service/impl/EamBasicPositionServiceImpl.java b/system/src/main/java/com/yyy/system/service/impl/EamBasicPositionServiceImpl.java new file mode 100644 index 0000000..1ee9616 --- /dev/null +++ b/system/src/main/java/com/yyy/system/service/impl/EamBasicPositionServiceImpl.java @@ -0,0 +1,35 @@ +package com.yyy.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.yyy.system.mapper.EamBasicPositionMapper; +import com.yyy.system.entity.pojo.EamBasicPosition; +import com.yyy.system.mapper.EamBasicPositionMapper; +import com.yyy.system.service.EamBasicPositionService; +import com.yyy.system.entity.dto.EamBasicPositionDto; +import com.yyy.common.utils.bean.BeanUtils; +import java.util.List; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import org.springframework.beans.factory.annotation.Autowired; + +/** + * 存放位置信息表(EamBasicPosition)表服务实现类 + * @author Fangy + * @date 2024-04-09 12:52:28 + */ +@Service +public class EamBasicPositionServiceImpl extends ServiceImpl implements EamBasicPositionService { + /** logger:日志文件 */ + private static final Logger logger = LoggerFactory.getLogger(EamBasicPositionServiceImpl.class); + + @Autowired + private EamBasicPositionMapper eamBasicPositionMapper; + + @Override + public List query(EamBasicPositionDto eamBasicPositionDto) { + EamBasicPosition eamBasicPosition = new EamBasicPosition(); + BeanUtils.copyProperties(eamBasicPositionDto, eamBasicPosition); + return eamBasicPositionMapper.query(eamBasicPosition); + } +} diff --git a/system/src/main/java/com/yyy/system/service/impl/EamBasicSupplierVendorServiceImpl.java b/system/src/main/java/com/yyy/system/service/impl/EamBasicSupplierVendorServiceImpl.java new file mode 100644 index 0000000..847a57c --- /dev/null +++ b/system/src/main/java/com/yyy/system/service/impl/EamBasicSupplierVendorServiceImpl.java @@ -0,0 +1,39 @@ +package com.yyy.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.yyy.common.utils.bean.BeanUtils; +import com.yyy.system.mapper.EamBasicSupplierVendorMapper; +import com.yyy.system.entity.pojo.EamBasicSupplierVendor; +import com.yyy.system.service.EamBasicSupplierVendorService; +import com.yyy.system.entity.dto.EamBasicSupplierVendorDto; + +import java.util.List; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import org.springframework.beans.factory.annotation.Autowired; + +/** + * 供应商(EamBasicSupplierVendor)表服务实现类 + * + * @author Fangy + * @date 2024-04-09 10:56:09 + */ +@Service +public class EamBasicSupplierVendorServiceImpl extends ServiceImpl implements EamBasicSupplierVendorService { + /** + * logger:日志文件 + */ + private static final Logger logger = LoggerFactory.getLogger(EamBasicSupplierVendorServiceImpl.class); + + @Autowired + private EamBasicSupplierVendorMapper eamBasicSupplierVendorMapper; + + @Override + public List query(EamBasicSupplierVendorDto eamBasicSupplierVendorDto) { + EamBasicSupplierVendor eamBasicSupplierVendor = new EamBasicSupplierVendor(); + BeanUtils.copyProperties(eamBasicSupplierVendorDto, eamBasicSupplierVendor); + return eamBasicSupplierVendorMapper.query(eamBasicSupplierVendor); + } +} diff --git a/system/src/main/java/com/yyy/system/service/impl/EamBasicWarehouseServiceImpl.java b/system/src/main/java/com/yyy/system/service/impl/EamBasicWarehouseServiceImpl.java new file mode 100644 index 0000000..0d4cf53 --- /dev/null +++ b/system/src/main/java/com/yyy/system/service/impl/EamBasicWarehouseServiceImpl.java @@ -0,0 +1,35 @@ +package com.yyy.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.yyy.system.mapper.EamBasicWarehouseMapper; +import com.yyy.system.entity.pojo.EamBasicWarehouse; +import com.yyy.system.mapper.EamBasicWarehouseMapper; +import com.yyy.system.service.EamBasicWarehouseService; +import com.yyy.system.entity.dto.EamBasicWarehouseDto; +import com.yyy.common.utils.bean.BeanUtils; +import java.util.List; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import org.springframework.beans.factory.annotation.Autowired; + +/** + * 仓库信息表(EamBasicWarehouse)表服务实现类 + * @author Fangy + * @date 2024-04-09 13:16:58 + */ +@Service +public class EamBasicWarehouseServiceImpl extends ServiceImpl implements EamBasicWarehouseService { + /** logger:日志文件 */ + private static final Logger logger = LoggerFactory.getLogger(EamBasicWarehouseServiceImpl.class); + + @Autowired + private EamBasicWarehouseMapper eamBasicWarehouseMapper; + + @Override + public List query(EamBasicWarehouseDto eamBasicWarehouseDto) { + EamBasicWarehouse eamBasicWarehouse = new EamBasicWarehouse(); + BeanUtils.copyProperties(eamBasicWarehouseDto, eamBasicWarehouse); + return eamBasicWarehouseMapper.query(eamBasicWarehouse); + } +} diff --git a/system/src/main/java/com/yyy/system/service/impl/EamBusinessAllocateServiceImpl.java b/system/src/main/java/com/yyy/system/service/impl/EamBusinessAllocateServiceImpl.java new file mode 100644 index 0000000..d76a9da --- /dev/null +++ b/system/src/main/java/com/yyy/system/service/impl/EamBusinessAllocateServiceImpl.java @@ -0,0 +1,72 @@ +package com.yyy.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.yyy.common.core.domain.entity.UmsUser; +import com.yyy.common.enums.BusinessStatusEnum; +import com.yyy.system.entity.pojo.EamBasicWarehouse; +import com.yyy.system.mapper.EamBasicWarehouseMapper; +import com.yyy.system.mapper.EamBusinessAllocateMapper; +import com.yyy.system.entity.pojo.EamBusinessAllocate; +import com.yyy.system.mapper.UmsUserMapper; +import com.yyy.system.service.EamBusinessAllocateService; +import com.yyy.system.entity.dto.EamBusinessAllocateDto; +import com.yyy.common.utils.bean.BeanUtils; + +import java.util.List; +import java.util.stream.Collectors; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import org.springframework.beans.factory.annotation.Autowired; + +/** + * 调拨信息表(EamBusinessAllocate)表服务实现类 + * + * @author Fangy + * @date 2024-04-11 16:16:13 + */ +@Service +public class EamBusinessAllocateServiceImpl extends ServiceImpl implements EamBusinessAllocateService { + /** + * logger:日志文件 + */ + private static final Logger logger = LoggerFactory.getLogger(EamBusinessAllocateServiceImpl.class); + + @Autowired + private EamBusinessAllocateMapper eamBusinessAllocateMapper; + + @Autowired + private UmsUserMapper userMapper; + + @Autowired + private EamBasicWarehouseMapper warehouseMapper; + + @Override + public List query(EamBusinessAllocateDto eamBusinessAllocateDto) { + EamBusinessAllocate eamBusinessAllocate = new EamBusinessAllocate(); + BeanUtils.copyProperties(eamBusinessAllocateDto, eamBusinessAllocate); + return eamBusinessAllocateMapper.query(eamBusinessAllocate).stream().map(this::joinInfo).collect(Collectors.toList()); + } + + @Override + public EamBusinessAllocate getById(Long id) { + return joinInfo(eamBusinessAllocateMapper.selectById(id)); + } + + @Override + public boolean isCompleted(Long id) { + return eamBusinessAllocateMapper.selectById(id).getStatus().equals(BusinessStatusEnum.COMPLETED.getCode()); + } + + private EamBusinessAllocate joinInfo(EamBusinessAllocate eamBusinessAllocate) { + UmsUser applicant = userMapper.selectById(eamBusinessAllocate.getApplicant()); + EamBasicWarehouse inWarehouse = warehouseMapper.selectById(eamBusinessAllocate.getInWarehouseId()); + EamBasicWarehouse outWarehouse = warehouseMapper.selectById(eamBusinessAllocate.getOutWarehouseId()); + + eamBusinessAllocate.set_applicant(applicant != null ? UmsUser.builder().userId(applicant.getUserId()).userName(applicant.getUserName()).build() : null); + eamBusinessAllocate.set_inWarehouse(inWarehouse != null ? EamBasicWarehouse.builder().warehouseId(inWarehouse.getWarehouseId()).name(inWarehouse.getName()).build() : null); + eamBusinessAllocate.set_outWarehouse(outWarehouse != null ? EamBasicWarehouse.builder().warehouseId(outWarehouse.getWarehouseId()).name(outWarehouse.getName()).build() : null); + return eamBusinessAllocate; + } +} diff --git a/system/src/main/java/com/yyy/system/service/impl/EamBusinessBorrowServiceImpl.java b/system/src/main/java/com/yyy/system/service/impl/EamBusinessBorrowServiceImpl.java new file mode 100644 index 0000000..fdd14b2 --- /dev/null +++ b/system/src/main/java/com/yyy/system/service/impl/EamBusinessBorrowServiceImpl.java @@ -0,0 +1,66 @@ +package com.yyy.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.yyy.common.core.domain.entity.UmsUser; +import com.yyy.common.enums.BusinessStatusEnum; +import com.yyy.system.mapper.*; +import com.yyy.system.entity.pojo.EamBusinessBorrow; +import com.yyy.system.mapper.EamBusinessBorrowMapper; +import com.yyy.system.service.EamBusinessBorrowService; +import com.yyy.system.entity.dto.EamBusinessBorrowDto; +import com.yyy.common.utils.bean.BeanUtils; + +import java.util.List; +import java.util.stream.Collectors; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import org.springframework.beans.factory.annotation.Autowired; + +/** + * 借用信息表(EamBusinessBorrow)表服务实现类 + * + * @author Fangy + * @date 2024-04-10 17:26:36 + */ +@Service +public class EamBusinessBorrowServiceImpl extends ServiceImpl implements EamBusinessBorrowService { + /** + * logger:日志文件 + */ + private static final Logger logger = LoggerFactory.getLogger(EamBusinessBorrowServiceImpl.class); + + @Autowired + private EamBusinessBorrowMapper eamBusinessBorrowMapper; + + @Autowired + private UmsUserMapper userMapper; + + + @Override + public List query(EamBusinessBorrowDto eamBusinessBorrowDto) { + EamBusinessBorrow eamBusinessBorrow = new EamBusinessBorrow(); + BeanUtils.copyProperties(eamBusinessBorrowDto, eamBusinessBorrow); + return eamBusinessBorrowMapper.query(eamBusinessBorrow).stream().map(this::joinInfo).collect(Collectors.toList()); + } + + @Override + public EamBusinessBorrow getById(Long id) { + return joinInfo(eamBusinessBorrowMapper.selectById(id)); + } + + @Override + public boolean isCompleted(Long id) { + return eamBusinessBorrowMapper.selectById(id).getStatus().equals(BusinessStatusEnum.COMPLETED.getCode()); + } + + private EamBusinessBorrow joinInfo(EamBusinessBorrow e) { + UmsUser useUser = userMapper.selectById(e.getUseUserId()); + UmsUser applicant = userMapper.selectById(e.getApplicant()); + + e.set_useUser(useUser != null ? UmsUser.builder().userId(useUser.getUserId()).userName(useUser.getUserName()).build() : null); + e.set_applicant(applicant != null ? UmsUser.builder().userId(applicant.getUserId()).userName(applicant.getUserName()).build() : null); + return e; + } +} diff --git a/system/src/main/java/com/yyy/system/service/impl/EamBusinessCollectionServiceImpl.java b/system/src/main/java/com/yyy/system/service/impl/EamBusinessCollectionServiceImpl.java new file mode 100644 index 0000000..10e34cf --- /dev/null +++ b/system/src/main/java/com/yyy/system/service/impl/EamBusinessCollectionServiceImpl.java @@ -0,0 +1,103 @@ +package com.yyy.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.yyy.common.core.domain.entity.UmsOrganization; +import com.yyy.common.core.domain.entity.UmsUser; +import com.yyy.common.enums.BusinessStatusEnum; +import com.yyy.common.enums.EncodingEum; +import com.yyy.common.utils.common.DateUtils; +import com.yyy.system.entity.pojo.EamBasicPosition; +import com.yyy.system.mapper.*; +import com.yyy.system.entity.pojo.EamBusinessCollection; +import com.yyy.system.mapper.EamBusinessCollectionMapper; +import com.yyy.system.service.EamBusinessCollectionService; +import com.yyy.system.entity.dto.EamBusinessCollectionDto; +import com.yyy.common.utils.bean.BeanUtils; + +import java.util.*; +import java.util.stream.Collectors; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import org.springframework.beans.factory.annotation.Autowired; + + +/** + * 资产领用信息表(EamBusinessCollection)表服务实现类 + * + * @author Fangy + * @date 2024-04-12 11:48:09 + */ +@Service +public class EamBusinessCollectionServiceImpl extends ServiceImpl implements EamBusinessCollectionService { + /** + * logger:日志文件 + */ + private static final Logger logger = LoggerFactory.getLogger(EamBusinessCollectionServiceImpl.class); + + @Autowired + private EamBusinessCollectionMapper eamBusinessCollectionMapper; + + @Autowired + private UmsUserMapper userMapper; + + @Autowired + private UmsOrganizationMapper organizationMapper; + + @Autowired + private EamBasicPositionMapper positionMapper; + + @Override + public List query(EamBusinessCollectionDto eamBusinessCollectionDto) { + EamBusinessCollection eamBusinessCollection = new EamBusinessCollection(); + BeanUtils.copyProperties(eamBusinessCollectionDto, eamBusinessCollection); + return eamBusinessCollectionMapper.query(eamBusinessCollection).stream().map(this::joinInfo).collect(Collectors.toList()); + } + + @Override + public EamBusinessCollection getById(Long id) { + return joinInfo(eamBusinessCollectionMapper.selectById(id)); + } + + @Override + public boolean isCompleted(Long id) { + return eamBusinessCollectionMapper.selectById(id).getStatus().equals(BusinessStatusEnum.COMPLETED.getCode()); + } + + @Override + public void formLink(Map variables) { + Long useOrganizationId = 1L; + if (variables.containsKey("INITIATOR")) { + useOrganizationId = organizationMapper.getByUid((Long) variables.get("INITIATOR")).getOrganizationId(); + } + + eamBusinessCollectionMapper.insert(EamBusinessCollection.builder() + .businessId(EncodingEum.COLLECTION.getBusinessId()) + .name(variables.containsKey("title") ? (String) variables.get("title") : "物品领用申请") + .applicant(variables.containsKey("INITIATOR") ? (Long) variables.get("INITIATOR") : null) + .assetIdList(variables.containsKey("assetIdList") ? (String) variables.get("assetIdList") : "[]") + .businessGeneratedDate(variables.containsKey("businessDate") ? DateUtils.parseDate((String) variables.get("businessDate"),"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'") : new Date()) + .notes(variables.containsKey("notes") ? (String) variables.get("notes") : null) + .createUser(variables.containsKey("INITIATOR") ? (Long) variables.get("INITIATOR") : null) + .status(BusinessStatusEnum.APPROVED.getCode()) + .useOrganizationId(useOrganizationId) + .useUserId(variables.containsKey("INITIATOR") ? (Long) variables.get("INITIATOR") : null) + .build()); + + } + + private EamBusinessCollection joinInfo(EamBusinessCollection e) { + UmsOrganization useOrganization = organizationMapper.selectById(e.getUseOrganizationId()); + UmsUser useUser = userMapper.selectById(e.getUseUserId()); + UmsUser applicant = userMapper.selectById(e.getApplicant()); + EamBasicPosition position = positionMapper.selectById(e.getPositionId()); + + e.set_useOrganization(useOrganization != null ? UmsOrganization.builder().organizationId(useOrganization.getOrganizationId()).organizationName(useOrganization.getOrganizationName()).build() : null); + e.set_useUser(useUser != null ? UmsUser.builder().userId(useUser.getUserId()).userName(useUser.getUserName()).build() : null); + e.set_applicant(applicant != null ? UmsUser.builder().userId(applicant.getUserId()).userName(applicant.getUserName()).build() : null); + e.set_position(position != null ? EamBasicPosition.builder().positionId(position.getPositionId()).name(position.getName()).build() : null); + return e; + } + +} diff --git a/system/src/main/java/com/yyy/system/service/impl/EamBusinessOutboundServiceImpl.java b/system/src/main/java/com/yyy/system/service/impl/EamBusinessOutboundServiceImpl.java new file mode 100644 index 0000000..69dcbb1 --- /dev/null +++ b/system/src/main/java/com/yyy/system/service/impl/EamBusinessOutboundServiceImpl.java @@ -0,0 +1,77 @@ +package com.yyy.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.yyy.common.core.domain.entity.UmsOrganization; +import com.yyy.common.core.domain.entity.UmsUser; +import com.yyy.common.enums.BusinessStatusEnum; +import com.yyy.system.entity.pojo.EamBasicWarehouse; +import com.yyy.system.mapper.*; +import com.yyy.system.entity.pojo.EamBusinessOutbound; +import com.yyy.system.mapper.EamBusinessOutboundMapper; +import com.yyy.system.service.EamBusinessOutboundService; +import com.yyy.system.entity.dto.EamBusinessOutboundDto; +import com.yyy.common.utils.bean.BeanUtils; + +import java.util.List; +import java.util.stream.Collectors; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import org.springframework.beans.factory.annotation.Autowired; + +/** + * 出库信息表(EamBusinessOutbound)表服务实现类 + * + * @author Fangy + * @date 2024-04-10 17:26:37 + */ +@Service +public class EamBusinessOutboundServiceImpl extends ServiceImpl implements EamBusinessOutboundService { + /** + * logger:日志文件 + */ + private static final Logger logger = LoggerFactory.getLogger(EamBusinessOutboundServiceImpl.class); + + @Autowired + private EamBusinessOutboundMapper eamBusinessOutboundMapper; + + @Autowired + private EamBasicWarehouseMapper warehouseMapper; + + @Autowired + private UmsUserMapper userMapper; + + @Autowired + private UmsOrganizationMapper organizationMapper; + + @Override + public List query(EamBusinessOutboundDto eamBusinessOutboundDto) { + EamBusinessOutbound eamBusinessOutbound = new EamBusinessOutbound(); + BeanUtils.copyProperties(eamBusinessOutboundDto, eamBusinessOutbound); + return eamBusinessOutboundMapper.query(eamBusinessOutbound).stream().map(this::joinInfo).collect(Collectors.toList()); + } + + @Override + public EamBusinessOutbound getById(Long id) { + return joinInfo(eamBusinessOutboundMapper.selectById(id)); + } + + @Override + public boolean isCompleted(Long id) { + return eamBusinessOutboundMapper.selectById(id).getStatus().equals(BusinessStatusEnum.COMPLETED.getCode()); + } + + private EamBusinessOutbound joinInfo(EamBusinessOutbound eamBusinessOutbound) { + EamBasicWarehouse warehouse = warehouseMapper.selectById(eamBusinessOutbound.getWarehouseId()); + UmsOrganization ownCompany = organizationMapper.selectById(eamBusinessOutbound.getOwnCompanyId()); + UmsOrganization useOrganization = organizationMapper.selectById(eamBusinessOutbound.getUseOrganizationId()); + UmsUser useUser = userMapper.selectById(eamBusinessOutbound.getUseUserId()); + + eamBusinessOutbound.set_warehouse(warehouse != null ? EamBasicWarehouse.builder().warehouseId(warehouse.getWarehouseId()).name(warehouse.getName()).build() : null); + eamBusinessOutbound.set_ownCompany(ownCompany != null ? UmsOrganization.builder().organizationId(ownCompany.getOrganizationId()).organizationName(ownCompany.getOrganizationName()).build() : null); + eamBusinessOutbound.set_useOrganization(useOrganization != null ? UmsOrganization.builder().organizationId(useOrganization.getOrganizationId()).organizationName(useOrganization.getOrganizationName()).build() : null); + eamBusinessOutbound.set_useUser(useUser != null ? UmsUser.builder().userId(useUser.getUserId()).userName(useUser.getUserName()).build() : null); + return eamBusinessOutbound; + } +} diff --git a/system/src/main/java/com/yyy/system/service/impl/EamBusinessRegistrationServiceImpl.java b/system/src/main/java/com/yyy/system/service/impl/EamBusinessRegistrationServiceImpl.java new file mode 100644 index 0000000..c54d475 --- /dev/null +++ b/system/src/main/java/com/yyy/system/service/impl/EamBusinessRegistrationServiceImpl.java @@ -0,0 +1,52 @@ +package com.yyy.system.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.yyy.common.enums.BusinessStatusEnum; +import com.yyy.system.mapper.EamBusinessRegistrationMapper; +import com.yyy.system.entity.pojo.EamBusinessRegistration; +import com.yyy.system.service.EamBusinessRegistrationService; +import com.yyy.system.entity.dto.EamBusinessRegistrationDto; +import com.yyy.common.utils.bean.BeanUtils; + +import java.util.List; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import org.springframework.beans.factory.annotation.Autowired; + +/** + * 资产登记信息表(EamBusinessRegistration)表服务实现类 + * + * @author Fangy + * @date 2024-04-10 13:17:47 + */ +@Service +public class EamBusinessRegistrationServiceImpl extends ServiceImpl implements EamBusinessRegistrationService { + /** + * logger:日志文件 + */ + private static final Logger logger = LoggerFactory.getLogger(EamBusinessRegistrationServiceImpl.class); + + @Autowired + private EamBusinessRegistrationMapper eamBusinessRegistrationMapper; + + @Override + public List query(EamBusinessRegistrationDto eamBusinessRegistrationDto) { + EamBusinessRegistration eamBusinessRegistration = new EamBusinessRegistration(); + BeanUtils.copyProperties(eamBusinessRegistrationDto, eamBusinessRegistration); + return eamBusinessRegistrationMapper.query(eamBusinessRegistration); + } + + @Override + public List query(List assetIdList) { + return eamBusinessRegistrationMapper.selectList(new QueryWrapper().in("asset_id", assetIdList)); + } + + @Override + public boolean update(List idList, BusinessStatusEnum status) { + return eamBusinessRegistrationMapper.update(null, new UpdateWrapper().in("asset_id", idList).set("status",status.getCode())) > 0; + } +} diff --git a/system/src/main/java/com/yyy/system/service/impl/EamBusinessRetirementServiceImpl.java b/system/src/main/java/com/yyy/system/service/impl/EamBusinessRetirementServiceImpl.java new file mode 100644 index 0000000..898d9fc --- /dev/null +++ b/system/src/main/java/com/yyy/system/service/impl/EamBusinessRetirementServiceImpl.java @@ -0,0 +1,88 @@ +package com.yyy.system.service.impl; + +import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.yyy.common.core.domain.entity.UmsUser; +import com.yyy.common.enums.BusinessStatusEnum; +import com.yyy.common.enums.EncodingEum; +import com.yyy.common.enums.ScrapTypeEnum; +import com.yyy.common.utils.common.DateUtils; +import com.yyy.system.entity.dto.EamWarehouseAssetDto; +import com.yyy.system.mapper.EamBusinessRetirementMapper; +import com.yyy.system.entity.pojo.EamBusinessRetirement; +import com.yyy.system.mapper.UmsUserMapper; +import com.yyy.system.service.EamBusinessRetirementService; +import com.yyy.system.entity.dto.EamBusinessRetirementDto; +import com.yyy.common.utils.bean.BeanUtils; + +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import org.springframework.beans.factory.annotation.Autowired; + +/** + * 资产报废(EamBusinessRetirement)表服务实现类 + * + * @author Fangy + * @date 2024-05-10 10:44:18 + */ +@Service +public class EamBusinessRetirementServiceImpl extends ServiceImpl implements EamBusinessRetirementService { + /** + * logger:日志文件 + */ + private static final Logger logger = LoggerFactory.getLogger(EamBusinessRetirementServiceImpl.class); + + @Autowired + private EamBusinessRetirementMapper eamBusinessRetirementMapper; + + @Autowired + private UmsUserMapper userMapper; + + @Override + public List query(EamBusinessRetirementDto eamBusinessRetirementDto) { + EamBusinessRetirement eamBusinessRetirement = new EamBusinessRetirement(); + BeanUtils.copyProperties(eamBusinessRetirementDto, eamBusinessRetirement); + return eamBusinessRetirementMapper.query(eamBusinessRetirement).stream().map(this::joinInfo).collect(Collectors.toList()); + } + + @Override + public EamBusinessRetirement getById(Long id) { + return joinInfo(eamBusinessRetirementMapper.selectById(id)); + } + + @Override + public boolean isCompleted(Long id) { + return eamBusinessRetirementMapper.selectById(id).getStatus().equals(BusinessStatusEnum.COMPLETED.getCode()); + } + + @Override + public void formLink(Map variables) { + + eamBusinessRetirementMapper.insert(EamBusinessRetirement.builder() + .name(variables.containsKey("title") ? (String) variables.get("title") : "资产设备报废") + .applicant(variables.containsKey("INITIATOR") ? (Long) variables.get("INITIATOR") : null) + .businessGeneratedDate(variables.containsKey("scrapTime") ? DateUtils.parseDate((String) variables.get("scrapTime"),"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'") : new Date()) + .notes(variables.containsKey("notes") ? (String) variables.get("notes") : null) + .attach(variables.containsKey("attach") ? (String) variables.get("attach") : null) + .expeditedStatus(variables.containsKey("urgency") && (variables.get("urgency")).equals(2) ? 1 : 0) + .type(variables.containsKey("scrapType") ? ScrapTypeEnum.getInfoByCode((Integer) variables.get("scrapType")) : null) + .assetIdList(variables.containsKey("assetIdList") ? (String) variables.get("assetIdList") : "[]") + .businessId(EncodingEum.RETIREMENT.getBusinessId()) + .createUser(variables.containsKey("INITIATOR") ? (Long) variables.get("INITIATOR") : null) + .status(BusinessStatusEnum.APPROVED.getCode()) + .build()); + } + + private EamBusinessRetirement joinInfo(EamBusinessRetirement e) { + UmsUser applicant = userMapper.selectById(e.getApplicant()); + e.set_applicant(applicant != null ? UmsUser.builder().userId(applicant.getUserId()).userName(applicant.getUserName()).build() : null); + return e; + } + +} diff --git a/system/src/main/java/com/yyy/system/service/impl/EamBusinessReturnInventoryServiceImpl.java b/system/src/main/java/com/yyy/system/service/impl/EamBusinessReturnInventoryServiceImpl.java new file mode 100644 index 0000000..db0f01a --- /dev/null +++ b/system/src/main/java/com/yyy/system/service/impl/EamBusinessReturnInventoryServiceImpl.java @@ -0,0 +1,81 @@ +package com.yyy.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.yyy.common.core.domain.entity.UmsOrganization; +import com.yyy.common.core.domain.entity.UmsUser; +import com.yyy.common.enums.BusinessStatusEnum; +import com.yyy.system.entity.pojo.EamBasicPosition; +import com.yyy.system.entity.pojo.EamBasicWarehouse; +import com.yyy.system.mapper.*; +import com.yyy.system.entity.pojo.EamBusinessReturnInventory; +import com.yyy.system.mapper.EamBusinessReturnInventoryMapper; +import com.yyy.system.service.EamBusinessReturnInventoryService; +import com.yyy.system.entity.dto.EamBusinessReturnInventoryDto; +import com.yyy.common.utils.bean.BeanUtils; + +import java.util.List; +import java.util.stream.Collectors; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import org.springframework.beans.factory.annotation.Autowired; + +/** + * 退库信息表(EamBusinessReturnInventory)表服务实现类 + * + * @author Fangy + * @date 2024-04-12 11:10:55 + */ +@Service +public class EamBusinessReturnInventoryServiceImpl extends ServiceImpl implements EamBusinessReturnInventoryService { + /** + * logger:日志文件 + */ + private static final Logger logger = LoggerFactory.getLogger(EamBusinessReturnInventoryServiceImpl.class); + + @Autowired + private EamBusinessReturnInventoryMapper eamBusinessReturnInventoryMapper; + + @Autowired + private EamBasicWarehouseMapper warehouseMapper; + + @Autowired + private EamBasicPositionMapper positionMapper; + + @Autowired + private UmsUserMapper umsUserMapper; + + @Autowired + private UmsOrganizationMapper umsOrganizationMapper; + + @Override + public List query(EamBusinessReturnInventoryDto eamBusinessReturnInventoryDto) { + EamBusinessReturnInventory eamBusinessReturnInventory = new EamBusinessReturnInventory(); + BeanUtils.copyProperties(eamBusinessReturnInventoryDto, eamBusinessReturnInventory); + return eamBusinessReturnInventoryMapper.query(eamBusinessReturnInventory).stream().map(this::joinInfo).collect(Collectors.toList()); + } + + @Override + public EamBusinessReturnInventory getById(Long id) { + return joinInfo(eamBusinessReturnInventoryMapper.selectById(id)); + } + + @Override + public boolean isCompleted(Long id) { + return eamBusinessReturnInventoryMapper.selectById(id).getStatus().equals(BusinessStatusEnum.COMPLETED.getCode()); + } + + private EamBusinessReturnInventory joinInfo(EamBusinessReturnInventory eamBusinessReturnInventory) { + EamBasicWarehouse warehouse = warehouseMapper.selectById(eamBusinessReturnInventory.getWarehouseId()); + UmsUser applicant = umsUserMapper.selectById(eamBusinessReturnInventory.getApplicant()); + UmsOrganization useOrganization = umsOrganizationMapper.selectById(eamBusinessReturnInventory.getUseOrganizationId()); + EamBasicPosition position = positionMapper.selectById(eamBusinessReturnInventory.getPositionId()); + + eamBusinessReturnInventory.set_applicant(applicant != null ? UmsUser.builder().userId(applicant.getUserId()).userName(applicant.getUserName()).build() : null); + eamBusinessReturnInventory.set_warehouse(warehouse != null ? EamBasicWarehouse.builder().warehouseId(warehouse.getWarehouseId()).name(warehouse.getName()).build() : null); + eamBusinessReturnInventory.set_useOrganization(useOrganization != null ? UmsOrganization.builder().organizationId(useOrganization.getOrganizationId()).organizationName(useOrganization.getOrganizationName()).build() : null); + eamBusinessReturnInventory.set_position(position!=null?EamBasicPosition.builder().positionId(position.getPositionId()).name(position.getName()).build() : null); + return eamBusinessReturnInventory; + } +} diff --git a/system/src/main/java/com/yyy/system/service/impl/EamBusinessReturnServiceImpl.java b/system/src/main/java/com/yyy/system/service/impl/EamBusinessReturnServiceImpl.java new file mode 100644 index 0000000..2461cc0 --- /dev/null +++ b/system/src/main/java/com/yyy/system/service/impl/EamBusinessReturnServiceImpl.java @@ -0,0 +1,74 @@ +package com.yyy.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.yyy.common.core.domain.entity.UmsUser; +import com.yyy.common.enums.BusinessStatusEnum; +import com.yyy.system.entity.pojo.EamBasicPosition; +import com.yyy.system.mapper.EamBasicPositionMapper; +import com.yyy.system.mapper.EamBusinessReturnMapper; +import com.yyy.system.entity.pojo.EamBusinessReturn; +import com.yyy.system.mapper.UmsUserMapper; +import com.yyy.system.service.EamBusinessReturnService; +import com.yyy.system.entity.dto.EamBusinessReturnDto; +import com.yyy.common.utils.bean.BeanUtils; + +import java.util.List; +import java.util.stream.Collectors; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import org.springframework.beans.factory.annotation.Autowired; + +/** + * 归还信息表(EamBusinessReturn)表服务实现类 + * + * @author Fangy + * @date 2024-04-10 17:26:46 + */ +@Service +public class EamBusinessReturnServiceImpl extends ServiceImpl implements EamBusinessReturnService { + /** + * logger:日志文件 + */ + private static final Logger logger = LoggerFactory.getLogger(EamBusinessReturnServiceImpl.class); + + @Autowired + private EamBusinessReturnMapper eamBusinessReturnMapper; + + @Autowired + private UmsUserMapper userMapper; + + @Autowired + private EamBasicPositionMapper positionMapper; + + @Override + public List query(EamBusinessReturnDto eamBusinessReturnDto) { + EamBusinessReturn eamBusinessReturn = new EamBusinessReturn(); + BeanUtils.copyProperties(eamBusinessReturnDto, eamBusinessReturn); + return eamBusinessReturnMapper.query(eamBusinessReturn).stream().map(this::joinInfo).collect(Collectors.toList()); + } + + @Override + public EamBusinessReturn getById(Long id) { + return joinInfo(eamBusinessReturnMapper.selectById(id)); + } + + @Override + public boolean isCompleted(Long id) { + return eamBusinessReturnMapper.selectById(id).getStatus().equals(BusinessStatusEnum.COMPLETED.getCode()); + } + + private EamBusinessReturn joinInfo(EamBusinessReturn e) { + UmsUser applicant = userMapper.selectById(e.getApplicant()); + UmsUser manager = userMapper.selectById(e.getManager()); + UmsUser useUser = userMapper.selectById(e.getUseUserId()); + EamBasicPosition position = positionMapper.selectById(e.getPositionId()); + + e.set_useUser(useUser != null ? UmsUser.builder().userId(useUser.getUserId()).userName(useUser.getUserName()).build() : null); + e.set_applicant(applicant != null ? UmsUser.builder().userId(applicant.getUserId()).userName(applicant.getUserName()).build() : null); + e.set_manager(manager != null ? UmsUser.builder().userId(manager.getUserId()).userName(manager.getUserName()).build() : null); + e.set_position(position != null ? EamBasicPosition.builder().positionId(position.getPositionId()).name(position.getName()).build() : null); + return e; + } +} diff --git a/system/src/main/java/com/yyy/system/service/impl/EamBusinessStorageServiceImpl.java b/system/src/main/java/com/yyy/system/service/impl/EamBusinessStorageServiceImpl.java new file mode 100644 index 0000000..39d082c --- /dev/null +++ b/system/src/main/java/com/yyy/system/service/impl/EamBusinessStorageServiceImpl.java @@ -0,0 +1,81 @@ +package com.yyy.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.yyy.common.core.domain.entity.UmsUser; +import com.yyy.common.enums.BusinessStatusEnum; +import com.yyy.system.entity.pojo.EamBasicPosition; +import com.yyy.system.entity.pojo.EamBasicSupplierVendor; +import com.yyy.system.entity.pojo.EamBasicWarehouse; +import com.yyy.system.mapper.*; +import com.yyy.system.entity.pojo.EamBusinessStorage; +import com.yyy.system.mapper.EamBusinessStorageMapper; +import com.yyy.system.service.EamBusinessStorageService; +import com.yyy.system.entity.dto.EamBusinessStorageDto; +import com.yyy.common.utils.bean.BeanUtils; + +import java.util.List; +import java.util.stream.Collectors; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import org.springframework.beans.factory.annotation.Autowired; + +/** + * 入库信息表(EamBusinessStorage)表服务实现类 + * + * @author Fangy + * @date 2024-04-10 17:26:46 + */ +@Service +public class EamBusinessStorageServiceImpl extends ServiceImpl implements EamBusinessStorageService { + /** + * logger:日志文件 + */ + private static final Logger logger = LoggerFactory.getLogger(EamBusinessStorageServiceImpl.class); + + @Autowired + private EamBusinessStorageMapper eamBusinessStorageMapper; + + @Autowired + private EamBasicWarehouseMapper warehouseMapper; + + @Autowired + private EamBasicPositionMapper positionMapper; + + @Autowired + private EamBasicSupplierVendorMapper supplierVendorMapper; + + @Autowired + private UmsUserMapper umsUserMapper; + + @Override + public List query(EamBusinessStorageDto eamBusinessStorageDto) { + EamBusinessStorage eamBusinessStorage = new EamBusinessStorage(); + BeanUtils.copyProperties(eamBusinessStorageDto, eamBusinessStorage); + return eamBusinessStorageMapper.query(eamBusinessStorage).stream().map(this::joinInfo).collect(Collectors.toList()); + } + + @Override + public EamBusinessStorage getById(Long id) { + return joinInfo(eamBusinessStorageMapper.selectById(id)); + } + + @Override + public boolean isCompleted(Long id) { + return eamBusinessStorageMapper.selectById(id).getStatus().equals(BusinessStatusEnum.COMPLETED.getCode()); + } + + private EamBusinessStorage joinInfo(EamBusinessStorage eamBusinessStorage) { + UmsUser manager = umsUserMapper.selectById(eamBusinessStorage.getManager()); + EamBasicWarehouse warehouse = warehouseMapper.selectById(eamBusinessStorage.getWarehouseId()); + EamBasicPosition position = positionMapper.selectById(eamBusinessStorage.getPositionId()); + EamBasicSupplierVendor supplierVendor = supplierVendorMapper.selectById(eamBusinessStorage.getSupplierVendorId()); + + eamBusinessStorage.set_manager(manager != null ? UmsUser.builder().userId(manager.getUserId()).userName(manager.getUserName()).build() : null); + eamBusinessStorage.set_position(position != null ? EamBasicPosition.builder().positionId(position.getPositionId()).name(position.getName()).build() : null); + eamBusinessStorage.set_supplierVendor(supplierVendor != null ? EamBasicSupplierVendor.builder().supplierVendorId(supplierVendor.getSupplierVendorId()).name(supplierVendor.getName()).build() : null); + eamBusinessStorage.set_warehouse(warehouse != null ? EamBasicWarehouse.builder().warehouseId(warehouse.getWarehouseId()).name(warehouse.getName()).build() : null); + return eamBusinessStorage; + } +} diff --git a/system/src/main/java/com/yyy/system/service/impl/EamBusinessTransferServiceImpl.java b/system/src/main/java/com/yyy/system/service/impl/EamBusinessTransferServiceImpl.java new file mode 100644 index 0000000..abbd8b7 --- /dev/null +++ b/system/src/main/java/com/yyy/system/service/impl/EamBusinessTransferServiceImpl.java @@ -0,0 +1,99 @@ +package com.yyy.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.yyy.common.core.domain.entity.UmsOrganization; +import com.yyy.common.core.domain.entity.UmsUser; +import com.yyy.common.enums.BusinessStatusEnum; +import com.yyy.common.enums.EncodingEum; +import com.yyy.system.entity.pojo.EamBasicPosition; +import com.yyy.system.mapper.*; +import com.yyy.system.entity.pojo.EamBusinessTransfer; +import com.yyy.system.mapper.EamBusinessTransferMapper; +import com.yyy.system.service.EamBusinessTransferService; +import com.yyy.system.entity.dto.EamBusinessTransferDto; +import com.yyy.common.utils.bean.BeanUtils; + +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import org.springframework.beans.factory.annotation.Autowired; + +/** + * 资产转移信息表(EamBusinessTransfer)表服务实现类 + * + * @author Fangy + * @date 2024-04-10 17:26:47 + */ +@Service +public class EamBusinessTransferServiceImpl extends ServiceImpl implements EamBusinessTransferService { + /** + * logger:日志文件 + */ + private static final Logger logger = LoggerFactory.getLogger(EamBusinessTransferServiceImpl.class); + + @Autowired + private EamBusinessTransferMapper eamBusinessTransferMapper; + + @Autowired + private UmsOrganizationMapper organizationMapper; + + @Autowired + private UmsUserMapper userMapper; + + @Autowired + private EamBasicPositionMapper positionMapper; + + + @Override + public List query(EamBusinessTransferDto eamBusinessTransferDto) { + EamBusinessTransfer eamBusinessTransfer = new EamBusinessTransfer(); + BeanUtils.copyProperties(eamBusinessTransferDto, eamBusinessTransfer); + return eamBusinessTransferMapper.query(eamBusinessTransfer).stream().map(this::joinInfo).collect(Collectors.toList()); + } + + @Override + public EamBusinessTransfer getById(Long id) { + return joinInfo(eamBusinessTransferMapper.selectById(id)); + } + + @Override + public boolean isCompleted(Long id) { + return eamBusinessTransferMapper.selectById(id).getStatus().equals(BusinessStatusEnum.COMPLETED.getCode()); + } + + @Override + public void formLink(Map variables) { + eamBusinessTransferMapper.insert(EamBusinessTransfer.builder() + .businessId(EncodingEum.TRANSFER.getBusinessId()) + .name(variables.containsKey("title") ? (String) variables.get("title") : "员工资产交接") + .assetIdList(variables.containsKey("assetIdList") ? (String) variables.get("assetIdList") : "[]") + .notes(variables.containsKey("content") ? (String) variables.get("content") : null) + .attach((variables.containsKey("img") ? (String) variables.get("img") : null)) + .createUser(variables.containsKey("INITIATOR") ? (Long) variables.get("INITIATOR") : null) + .status(BusinessStatusEnum.APPROVED.getCode()) + .outUseOrganizationId(variables.containsKey("applyDepartmentId") ? (Long) variables.get("applyDepartmentId") : null) + .inUseOrganizationId(variables.containsKey("handoverDepartmentId") ? (Long) variables.get("handoverDepartmentId") : null) + .useUserId(variables.containsKey("INITIATOR") ? (Long) variables.get("INITIATOR") : null) + .managerId(variables.containsKey("handoverUserId") ? (Long) variables.get("handoverUserId") : null) + .build()); + } + + private EamBusinessTransfer joinInfo(EamBusinessTransfer e) { + UmsOrganization outUseOrganization = organizationMapper.selectById(e.getOutUseOrganizationId()); + UmsOrganization inUseOrganization = organizationMapper.selectById(e.getInUseOrganizationId()); + UmsUser manager = userMapper.selectById(e.getManagerId()); + UmsUser useUser = userMapper.selectById(e.getUseUserId()); + EamBasicPosition position = positionMapper.selectById(e.getPositionId()); + + e.set_outUseOrganization(outUseOrganization != null ? UmsOrganization.builder().organizationId(outUseOrganization.getOrganizationId()).organizationName(outUseOrganization.getOrganizationName()).build() : null); + e.set_inUseOrganization(inUseOrganization != null ? UmsOrganization.builder().organizationId(inUseOrganization.getOrganizationId()).organizationName(inUseOrganization.getOrganizationName()).build() : null); + e.set_useUser(useUser != null ? UmsUser.builder().userId(useUser.getUserId()).userName(useUser.getUserName()).build() : null); + e.set_manager(manager != null ? UmsUser.builder().userId(manager.getUserId()).userName(manager.getUserName()).build() : null); + e.set_position(position != null ? EamBasicPosition.builder().positionId(position.getPositionId()).name(position.getName()).build() : null); + return e; + } +} diff --git a/system/src/main/java/com/yyy/system/service/impl/EamRepairFaultServiceImpl.java b/system/src/main/java/com/yyy/system/service/impl/EamRepairFaultServiceImpl.java new file mode 100644 index 0000000..18f8bee --- /dev/null +++ b/system/src/main/java/com/yyy/system/service/impl/EamRepairFaultServiceImpl.java @@ -0,0 +1,60 @@ +package com.yyy.system.service.impl; + +import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.yyy.common.enums.BusinessStatusEnum; +import com.yyy.system.entity.dto.EamWarehouseAssetDto; +import com.yyy.system.mapper.EamRepairFaultMapper; +import com.yyy.system.entity.pojo.EamRepairFault; +import com.yyy.system.service.EamRepairFaultService; +import com.yyy.system.entity.dto.EamRepairFaultDto; +import com.yyy.common.utils.bean.BeanUtils; + +import java.util.List; +import java.util.Map; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import org.springframework.beans.factory.annotation.Autowired; + +/** + * 故障信息表(EamRepairFault)表服务实现类 + * + * @author Fangy + * @date 2024-04-12 15:41:31 + */ +@Service +public class EamRepairFaultServiceImpl extends ServiceImpl implements EamRepairFaultService { + /** + * logger:日志文件 + */ + private static final Logger logger = LoggerFactory.getLogger(EamRepairFaultServiceImpl.class); + + @Autowired + private EamRepairFaultMapper eamRepairFaultMapper; + + @Override + public List query(EamRepairFaultDto eamRepairFaultDto) { + EamRepairFault eamRepairFault = new EamRepairFault(); + BeanUtils.copyProperties(eamRepairFaultDto, eamRepairFault); + return eamRepairFaultMapper.query(eamRepairFault); + } + + @Override + public boolean isCompleted(Long id) { + return eamRepairFaultMapper.selectById(id).getStatus().equals(BusinessStatusEnum.COMPLETED.getCode()); + } + + @Override + public void formLink(Map variables) { + eamRepairFaultMapper.insert(EamRepairFault.builder() + .name(variables.containsKey("title") ? (String) variables.get("title") : "员工资产报修") + .img(variables.containsKey("img") ? (String) variables.get("img") : null) + .notes(variables.containsKey("notes") ? (String) variables.get("notes") : null) + .assetIdList(variables.containsKey("assetIdList") ? JSON.toJSONString(JSON.parseArray((String) variables.get("assetIdList"), EamWarehouseAssetDto.class)) : "[]") + .createUser(variables.containsKey("INITIATOR") ? (Long) variables.get("INITIATOR") : null) + .status(BusinessStatusEnum.APPROVED.getCode()) + .build()); + } +} diff --git a/system/src/main/java/com/yyy/system/service/impl/EamRepairServiceImpl.java b/system/src/main/java/com/yyy/system/service/impl/EamRepairServiceImpl.java new file mode 100644 index 0000000..5a5dc08 --- /dev/null +++ b/system/src/main/java/com/yyy/system/service/impl/EamRepairServiceImpl.java @@ -0,0 +1,95 @@ +package com.yyy.system.service.impl; + +import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.yyy.common.enums.BusinessStatusEnum; +import com.yyy.common.enums.EncodingEum; +import com.yyy.common.utils.common.DateUtils; +import com.yyy.system.entity.dto.EamWarehouseAssetDto; +import com.yyy.system.entity.pojo.EamRepairType; +import com.yyy.system.mapper.EamRepairMapper; +import com.yyy.system.entity.pojo.EamRepair; +import com.yyy.system.mapper.EamRepairTypeMapper; +import com.yyy.system.service.EamRepairService; +import com.yyy.system.entity.dto.EamRepairDto; +import com.yyy.common.utils.bean.BeanUtils; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import org.springframework.beans.factory.annotation.Autowired; + +/** + * 维修登记信息表(EamRepair)表服务实现类 + * + * @author Fangy + * @date 2024-04-12 15:00:38 + */ +@Service +public class EamRepairServiceImpl extends ServiceImpl implements EamRepairService { + /** + * logger:日志文件 + */ + private static final Logger logger = LoggerFactory.getLogger(EamRepairServiceImpl.class); + + @Autowired + private EamRepairMapper eamRepairMapper; + + @Autowired + private EamRepairTypeMapper repairTypeMapper; + + @Override + public List query(EamRepairDto eamRepairDto) { + EamRepair eamRepair = new EamRepair(); + BeanUtils.copyProperties(eamRepairDto, eamRepair); + return eamRepairMapper.query(eamRepair).stream().map(this::joinInfo).collect(Collectors.toList()); + } + + @Override + public EamRepair getById(Long id) { + return joinInfo(eamRepairMapper.selectById(id)); + } + + @Override + public List getByAssetId(Long id) { + return eamRepairMapper.selectList(new QueryWrapper<>()).stream() + .filter(eamRepair -> { + List idList = JSON.parseArray(eamRepair.getAssetIdList(), EamWarehouseAssetDto.class).stream().map(EamWarehouseAssetDto::getAssetId).distinct().collect(Collectors.toList()); + return idList.contains(id); + }) + .map(this::joinInfo) + .collect(Collectors.toList()); + } + + @Override + public boolean isCompleted(Long id) { + return eamRepairMapper.selectById(id).getStatus().equals(BusinessStatusEnum.COMPLETED.getCode()); + } + + @Override + public void formLink(Map variables) { + eamRepairMapper.insert(EamRepair.builder() + .businessId(EncodingEum.REPAIR.getBusinessId()) + .name(variables.containsKey("title") ? (String) variables.get("title") : "设备报修申请") + .assetIdList(variables.containsKey("assetIdList") ? (String) variables.get("assetIdList") : "[]") + .notes(variables.containsKey("content") ? (String) variables.get("content") : null) + .attach((variables.containsKey("img") ? (String) variables.get("img") : null)) + .plannedDate(variables.containsKey("planCompleteTime") ? DateUtils.parseDate((String) variables.get("planCompleteTime"),"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'") : null) + .createUser(variables.containsKey("INITIATOR") ? (Long) variables.get("INITIATOR") : null) + .status(BusinessStatusEnum.APPROVED.getCode()) + .build()); + } + + private EamRepair joinInfo(EamRepair e) { + EamRepairType type = repairTypeMapper.selectById(e.getRepairTypeId()); + e.set_repairType(type != null ? EamRepairType.builder().repairTypeId(type.getRepairTypeId()).name(type.getName()).build() : null); + return e; + } +} diff --git a/system/src/main/java/com/yyy/system/service/impl/EamRepairTypeServiceImpl.java b/system/src/main/java/com/yyy/system/service/impl/EamRepairTypeServiceImpl.java new file mode 100644 index 0000000..345b4f0 --- /dev/null +++ b/system/src/main/java/com/yyy/system/service/impl/EamRepairTypeServiceImpl.java @@ -0,0 +1,35 @@ +package com.yyy.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.yyy.system.mapper.EamRepairTypeMapper; +import com.yyy.system.entity.pojo.EamRepairType; +import com.yyy.system.mapper.EamRepairTypeMapper; +import com.yyy.system.service.EamRepairTypeService; +import com.yyy.system.entity.dto.EamRepairTypeDto; +import com.yyy.common.utils.bean.BeanUtils; +import java.util.List; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import org.springframework.beans.factory.annotation.Autowired; + +/** + * 保养计划(维修类型)表(EamRepairType)表服务实现类 + * @author Fangy + * @date 2024-04-12 15:00:40 + */ +@Service +public class EamRepairTypeServiceImpl extends ServiceImpl implements EamRepairTypeService { + /** logger:日志文件 */ + private static final Logger logger = LoggerFactory.getLogger(EamRepairTypeServiceImpl.class); + + @Autowired + private EamRepairTypeMapper eamRepairTypeMapper; + + @Override + public List query(EamRepairTypeDto eamRepairTypeDto) { + EamRepairType eamRepairType = new EamRepairType(); + BeanUtils.copyProperties(eamRepairTypeDto, eamRepairType); + return eamRepairTypeMapper.query(eamRepairType); + } +} diff --git a/system/src/main/java/com/yyy/system/service/impl/EamStocktakingDetailsServiceImpl.java b/system/src/main/java/com/yyy/system/service/impl/EamStocktakingDetailsServiceImpl.java new file mode 100644 index 0000000..3bca034 --- /dev/null +++ b/system/src/main/java/com/yyy/system/service/impl/EamStocktakingDetailsServiceImpl.java @@ -0,0 +1,56 @@ +package com.yyy.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.yyy.system.entity.pojo.EamAsset; +import com.yyy.system.mapper.EamAssetMapper; +import com.yyy.system.mapper.EamStocktakingDetailsMapper; +import com.yyy.system.entity.pojo.EamStocktakingDetails; +import com.yyy.system.service.EamStocktakingDetailsService; +import com.yyy.system.entity.dto.EamStocktakingDetailsDto; +import com.yyy.common.utils.bean.BeanUtils; + +import java.util.List; +import java.util.stream.Collectors; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import org.springframework.beans.factory.annotation.Autowired; + +/** + * 盘点明细(EamStocktakingDetails)表服务实现类 + * + * @author Fangy + * @date 2024-04-12 14:50:46 + */ +@Service +public class EamStocktakingDetailsServiceImpl extends ServiceImpl implements EamStocktakingDetailsService { + /** + * logger:日志文件 + */ + private static final Logger logger = LoggerFactory.getLogger(EamStocktakingDetailsServiceImpl.class); + + @Autowired + private EamStocktakingDetailsMapper eamStocktakingDetailsMapper; + + @Autowired + private EamAssetMapper assetMapper; + + @Override + public List query(EamStocktakingDetailsDto eamStocktakingDetailsDto) { + EamStocktakingDetails eamStocktakingDetails = new EamStocktakingDetails(); + BeanUtils.copyProperties(eamStocktakingDetailsDto, eamStocktakingDetails); + return eamStocktakingDetailsMapper.query(eamStocktakingDetails).stream().map(this::joinInfo).collect(Collectors.toList()); + } + + @Override + public EamStocktakingDetails getById(Long id) { + return joinInfo(eamStocktakingDetailsMapper.selectById(id)); + } + + private EamStocktakingDetails joinInfo(EamStocktakingDetails e) { + EamAsset asset = assetMapper.selectById(e.getAssetId()); + e.set_asset(asset != null ? asset : null); + return e; + } +} diff --git a/system/src/main/java/com/yyy/system/service/impl/EamStocktakingJobServiceImpl.java b/system/src/main/java/com/yyy/system/service/impl/EamStocktakingJobServiceImpl.java new file mode 100644 index 0000000..9731f3f --- /dev/null +++ b/system/src/main/java/com/yyy/system/service/impl/EamStocktakingJobServiceImpl.java @@ -0,0 +1,80 @@ +package com.yyy.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.yyy.common.core.domain.entity.UmsOrganization; +import com.yyy.common.core.domain.entity.UmsUser; +import com.yyy.system.entity.pojo.*; +import com.yyy.system.mapper.*; +import com.yyy.system.mapper.EamStocktakingJobMapper; +import com.yyy.system.service.EamStocktakingJobService; +import com.yyy.system.entity.dto.EamStocktakingJobDto; +import com.yyy.common.utils.bean.BeanUtils; +import java.util.List; +import java.util.stream.Collectors; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import org.springframework.beans.factory.annotation.Autowired; + +/** + * 盘点任务表(EamStocktakingJob)表服务实现类 + * @author Fangy + * @date 2024-04-12 14:50:46 + */ +@Service +public class EamStocktakingJobServiceImpl extends ServiceImpl implements EamStocktakingJobService { + /** logger:日志文件 */ + private static final Logger logger = LoggerFactory.getLogger(EamStocktakingJobServiceImpl.class); + + @Autowired + private EamStocktakingJobMapper eamStocktakingJobMapper; + + @Autowired + private EamBasicCategoryMapper categoryMapper; + + @Autowired + private EamBasicPositionMapper positionMapper; + + @Autowired + private EamBasicWarehouseMapper warehouseMapper; + + @Autowired + private UmsUserMapper userMapper; + + @Autowired + private UmsOrganizationMapper organizationMapper; + + @Override + public List query(EamStocktakingJobDto eamStocktakingJobDto) { + EamStocktakingJob eamStocktakingJob = new EamStocktakingJob(); + BeanUtils.copyProperties(eamStocktakingJobDto, eamStocktakingJob); + return eamStocktakingJobMapper.query(eamStocktakingJob).stream().map(this::joinInfo).collect(Collectors.toList()); + } + + @Override + public EamStocktakingJob getById(Long id) { + return joinInfo(eamStocktakingJobMapper.selectById(id)); + } + + private EamStocktakingJob joinInfo(EamStocktakingJob e) { + UmsUser head = userMapper.selectById(e.getHead()); + UmsUser stocktakingUser = userMapper.selectById(e.getStocktakingUserId()); + UmsOrganization ownCompany = organizationMapper.selectById(e.getOwnCompanyId()); + UmsOrganization useOrganization = organizationMapper.selectById(e.getUseOrganizationId()); + UmsUser umsUser = userMapper.selectById(e.getUseUserId()); + EamBasicCategory eamBasicCategory = categoryMapper.selectById(e.getCategoryId()); + EamBasicPosition eamBasicPosition = positionMapper.selectById(e.getPositionId()); + EamBasicWarehouse warehouse = warehouseMapper.selectById(e.getWarehouseId()); + + e.set_head(head!=null? UmsUser.builder().userId(head.getUserId()).userName(head.getUserName()).build():null); + e.set_stocktakingUser(stocktakingUser!=null? UmsUser.builder().userId(stocktakingUser.getUserId()).userName(stocktakingUser.getUserName()).build():null); + e.set_warehouse(warehouse!=null?EamBasicWarehouse.builder().warehouseId(warehouse.getWarehouseId()).name(warehouse.getName()).build() : null); + e.set_category(eamBasicCategory != null ? EamBasicCategory.builder().categoryId(eamBasicCategory.getCategoryId()).categoryName(eamBasicCategory.getCategoryName()).build() : null); + e.set_position(eamBasicPosition != null ? EamBasicPosition.builder().positionId(eamBasicPosition.getPositionId()).name(eamBasicPosition.getName()).build() : null); + e.set_ownCompany(ownCompany != null ? UmsOrganization.builder().organizationId(ownCompany.getOrganizationId()).organizationName(ownCompany.getOrganizationName()).build() : null); + e.set_useOrganization(useOrganization != null ? UmsOrganization.builder().organizationId(useOrganization.getOrganizationId()).organizationName(useOrganization.getOrganizationName()).build() : null); + e.set_useUser(umsUser != null ? UmsUser.builder().userId(umsUser.getUserId()).userName(umsUser.getUserName()).build() : null); + return e; + } +} diff --git a/system/src/main/java/com/yyy/system/service/impl/EamStocktakingPlanServiceImpl.java b/system/src/main/java/com/yyy/system/service/impl/EamStocktakingPlanServiceImpl.java new file mode 100644 index 0000000..a83d500 --- /dev/null +++ b/system/src/main/java/com/yyy/system/service/impl/EamStocktakingPlanServiceImpl.java @@ -0,0 +1,81 @@ +package com.yyy.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.yyy.common.core.domain.entity.UmsOrganization; +import com.yyy.common.core.domain.entity.UmsUser; +import com.yyy.system.entity.pojo.*; +import com.yyy.system.mapper.*; +import com.yyy.system.mapper.EamStocktakingPlanMapper; +import com.yyy.system.service.EamStocktakingPlanService; +import com.yyy.system.entity.dto.EamStocktakingPlanDto; +import com.yyy.common.utils.bean.BeanUtils; +import java.util.List; +import java.util.stream.Collectors; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import org.springframework.beans.factory.annotation.Autowired; + +/** + * 盘点计划信息(EamStocktakingPlan)表服务实现类 + * @author Fangy + * @date 2024-04-12 14:50:46 + */ +@Service +public class EamStocktakingPlanServiceImpl extends ServiceImpl implements EamStocktakingPlanService { + /** logger:日志文件 */ + private static final Logger logger = LoggerFactory.getLogger(EamStocktakingPlanServiceImpl.class); + + @Autowired + private EamStocktakingPlanMapper eamStocktakingPlanMapper; + + @Autowired + private EamBasicCategoryMapper categoryMapper; + + @Autowired + private EamBasicPositionMapper positionMapper; + + @Autowired + private EamBasicWarehouseMapper warehouseMapper; + + @Autowired + private UmsUserMapper userMapper; + + @Autowired + private UmsOrganizationMapper organizationMapper; + + + @Override + public List query(EamStocktakingPlanDto eamStocktakingPlanDto) { + EamStocktakingPlan eamStocktakingPlan = new EamStocktakingPlan(); + BeanUtils.copyProperties(eamStocktakingPlanDto, eamStocktakingPlan); + return eamStocktakingPlanMapper.query(eamStocktakingPlan).stream().map(this::joinInfo).collect(Collectors.toList()); + } + + @Override + public EamStocktakingPlan getById(Long id) { + return joinInfo(eamStocktakingPlanMapper.selectById(id)); + } + + private EamStocktakingPlan joinInfo(EamStocktakingPlan e) { + UmsUser head = userMapper.selectById(e.getHead()); + UmsUser stocktakingUser = userMapper.selectById(e.getStocktakingUserId()); + UmsOrganization ownCompany = organizationMapper.selectById(e.getOwnCompanyId()); + UmsOrganization useOrganization = organizationMapper.selectById(e.getUseOrganizationId()); + UmsUser umsUser = userMapper.selectById(e.getUseUserId()); + EamBasicCategory eamBasicCategory = categoryMapper.selectById(e.getCategoryId()); + EamBasicPosition eamBasicPosition = positionMapper.selectById(e.getPositionId()); + EamBasicWarehouse warehouse = warehouseMapper.selectById(e.getWarehouseId()); + + e.set_head(head!=null? UmsUser.builder().userId(head.getUserId()).userName(head.getUserName()).build():null); + e.set_stocktakingUser(stocktakingUser!=null? UmsUser.builder().userId(stocktakingUser.getUserId()).userName(stocktakingUser.getUserName()).build():null); + e.set_warehouse(warehouse!=null?EamBasicWarehouse.builder().warehouseId(warehouse.getWarehouseId()).name(warehouse.getName()).build() : null); + e.set_category(eamBasicCategory != null ? EamBasicCategory.builder().categoryId(eamBasicCategory.getCategoryId()).categoryName(eamBasicCategory.getCategoryName()).build() : null); + e.set_position(eamBasicPosition != null ? EamBasicPosition.builder().positionId(eamBasicPosition.getPositionId()).name(eamBasicPosition.getName()).build() : null); + e.set_ownCompany(ownCompany != null ? UmsOrganization.builder().organizationId(ownCompany.getOrganizationId()).organizationName(ownCompany.getOrganizationName()).build() : null); + e.set_useOrganization(useOrganization != null ? UmsOrganization.builder().organizationId(useOrganization.getOrganizationId()).organizationName(useOrganization.getOrganizationName()).build() : null); + e.set_useUser(umsUser != null ? UmsUser.builder().userId(umsUser.getUserId()).userName(umsUser.getUserName()).build() : null); + return e; + } +} diff --git a/system/src/main/java/com/yyy/system/service/impl/EamWarehouseAssetServiceImpl.java b/system/src/main/java/com/yyy/system/service/impl/EamWarehouseAssetServiceImpl.java new file mode 100644 index 0000000..a7fb87e --- /dev/null +++ b/system/src/main/java/com/yyy/system/service/impl/EamWarehouseAssetServiceImpl.java @@ -0,0 +1,96 @@ +package com.yyy.system.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.yyy.system.mapper.EamWarehouseAssetMapper; +import com.yyy.system.entity.pojo.EamWarehouseAsset; +import com.yyy.system.mapper.EamWarehouseAssetMapper; +import com.yyy.system.service.EamWarehouseAssetService; +import com.yyy.system.entity.dto.EamWarehouseAssetDto; +import com.yyy.common.utils.bean.BeanUtils; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import org.springframework.beans.factory.annotation.Autowired; + +/** + * 库存信息表(EamWarehouseAsset)表服务实现类 + * + * @author Fangy + * @date 2024-05-08 14:00:19 + */ +@Service +public class EamWarehouseAssetServiceImpl extends ServiceImpl implements EamWarehouseAssetService { + /** + * logger:日志文件 + */ + private static final Logger logger = LoggerFactory.getLogger(EamWarehouseAssetServiceImpl.class); + + @Autowired + private EamWarehouseAssetMapper eamWarehouseAssetMapper; + + @Override + public List query(EamWarehouseAssetDto eamWarehouseAssetDto) { + EamWarehouseAsset eamWarehouseAsset = new EamWarehouseAsset(); + BeanUtils.copyProperties(eamWarehouseAssetDto, eamWarehouseAsset); + return eamWarehouseAssetMapper.query(eamWarehouseAsset); + } + + @Override + public boolean add(List list) { + list.forEach(dto -> { + Long warehouseId = dto.getWarehouseId(); + Integer count = dto.getCount(); + + if (warehouseId != null && count != null) { + EamWarehouseAsset asset = EamWarehouseAsset.builder() + .warehouseId(warehouseId) + .assetId(dto.getAssetId()) + .count(count) + .build(); + + if (eamWarehouseAssetMapper.selectCount(new QueryWrapper() + .eq("warehouse_id", warehouseId) + .eq("asset_id", asset.getAssetId())) > 0) { + eamWarehouseAssetMapper.storage(asset); + } else { + eamWarehouseAssetMapper.insert(asset); + } + } + }); + return true; + } + + @Override + public boolean reduce(List list) { + for (EamWarehouseAssetDto dto : list) { + if (dto.getWarehouseId() != null && dto.getCount() != null) { + EamWarehouseAsset asset = eamWarehouseAssetMapper.selectOne(new QueryWrapper() + .eq("warehouse_id", dto.getWarehouseId()) + .eq("asset_id", dto.getAssetId())); + if (asset != null && asset.getCount() < dto.getCount()) { + return false; + } + } + } + + list.forEach(dto -> { + if (dto.getWarehouseId() != null && dto.getCount() != null) { + eamWarehouseAssetMapper.outbound(EamWarehouseAsset.builder() + .warehouseId(dto.getWarehouseId()) + .assetId(dto.getAssetId()) + .count(dto.getCount()) + .build()); + } + }); + + return true; + } +} diff --git a/system/src/main/java/com/yyy/system/service/impl/FlFormItemServiceImpl.java b/system/src/main/java/com/yyy/system/service/impl/FlFormItemServiceImpl.java new file mode 100644 index 0000000..cc0810e --- /dev/null +++ b/system/src/main/java/com/yyy/system/service/impl/FlFormItemServiceImpl.java @@ -0,0 +1,49 @@ +package com.yyy.system.service.impl; + +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.yyy.system.mapper.FlFormItemMapper; +import com.yyy.system.entity.pojo.FlFormItem; +import com.yyy.system.mapper.FlFormItemMapper; +import com.yyy.system.service.FlFormItemService; +import com.yyy.system.entity.dto.FlFormItemDto; +import com.yyy.common.utils.bean.BeanUtils; + +import java.util.List; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import org.springframework.beans.factory.annotation.Autowired; + +/** + * 流程实例对象(FlFormItem)表服务实现类 + * + * @author Fangy + * @date 2024-04-30 11:25:57 + */ +@Service +public class FlFormItemServiceImpl extends ServiceImpl implements FlFormItemService { + /** + * logger:日志文件 + */ + private static final Logger logger = LoggerFactory.getLogger(FlFormItemServiceImpl.class); + + @Autowired + private FlFormItemMapper flFormItemMapper; + + @Override + public List query(FlFormItemDto flFormItemDto) { + FlFormItem flFormItem = new FlFormItem(); + BeanUtils.copyProperties(flFormItemDto, flFormItem); + return flFormItemMapper.query(flFormItem); + } + + @Override + public boolean update(FlFormItemDto flFormItemDto) { + if (flFormItemDto.getProcInsId() != null) { + return flFormItemMapper.update(null, new UpdateWrapper().eq("proc_ins_id", flFormItemDto.getProcInsId()).set("status", flFormItemDto.getStatus())) > 0; + } + return false; + } +} diff --git a/system/src/main/java/com/yyy/system/service/impl/FlFormServiceImpl.java b/system/src/main/java/com/yyy/system/service/impl/FlFormServiceImpl.java new file mode 100644 index 0000000..ecc4e5e --- /dev/null +++ b/system/src/main/java/com/yyy/system/service/impl/FlFormServiceImpl.java @@ -0,0 +1,59 @@ +package com.yyy.system.service.impl; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.yyy.common.core.domain.entity.UmsUser; +import com.yyy.system.mapper.FlFormMapper; +import com.yyy.system.entity.pojo.FlForm; +import com.yyy.system.mapper.FlFormMapper; +import com.yyy.system.mapper.UmsUserMapper; +import com.yyy.system.service.FlFormService; +import com.yyy.system.entity.dto.FlFormDto; +import com.yyy.common.utils.bean.BeanUtils; +import java.util.List; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import org.springframework.beans.factory.annotation.Autowired; + +/** + * 流程表单对象(FlForm)表服务实现类 + * @author Fangy + * @date 2024-04-23 12:22:45 + */ +@Service +public class FlFormServiceImpl extends ServiceImpl implements FlFormService { + /** logger:日志文件 */ + private static final Logger logger = LoggerFactory.getLogger(FlFormServiceImpl.class); + + @Autowired + private FlFormMapper flFormMapper; + + @Autowired + private UmsUserMapper userMapper; + + @Override + public List query(FlFormDto flFormDto) { + FlForm flForm = new FlForm(); + BeanUtils.copyProperties(flFormDto, flForm); + List flForms = flFormMapper.query(flForm); + flForms.forEach(e -> { + JSONObject config = JSONObject.parseObject(e.getConfig()); + if (config.containsKey("assignee")){ + e.set_assignee(UmsUser.builder().userId(config.getLong("assignee")).userName(userMapper.selectById(config.getLong("assignee")).getUserName()).build()); + } + }); + return flForms; + } + + @Override + public FlForm selectByDeployId(String deployId) { + return flFormMapper.selectOne(new QueryWrapper().eq("deploy_id",deployId)); + } + + @Override + public FlForm selectByKey(String key) { + return flFormMapper.selectOne(new QueryWrapper().eq("form_key",key)); + } +} diff --git a/system/src/main/java/com/yyy/system/service/impl/FlListenerServiceImpl.java b/system/src/main/java/com/yyy/system/service/impl/FlListenerServiceImpl.java new file mode 100644 index 0000000..b6b09a6 --- /dev/null +++ b/system/src/main/java/com/yyy/system/service/impl/FlListenerServiceImpl.java @@ -0,0 +1,35 @@ +package com.yyy.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.yyy.system.mapper.FlListenerMapper; +import com.yyy.system.entity.pojo.FlListener; +import com.yyy.system.mapper.FlListenerMapper; +import com.yyy.system.service.FlListenerService; +import com.yyy.system.entity.dto.FlListenerDto; +import com.yyy.common.utils.bean.BeanUtils; +import java.util.List; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import org.springframework.beans.factory.annotation.Autowired; + +/** + * 流程监听对象(FlListener)表服务实现类 + * @author Fangy + * @date 2024-04-23 12:22:45 + */ +@Service +public class FlListenerServiceImpl extends ServiceImpl implements FlListenerService { + /** logger:日志文件 */ + private static final Logger logger = LoggerFactory.getLogger(FlListenerServiceImpl.class); + + @Autowired + private FlListenerMapper flListenerMapper; + + @Override + public List query(FlListenerDto flListenerDto) { + FlListener flListener = new FlListener(); + BeanUtils.copyProperties(flListenerDto, flListener); + return flListenerMapper.query(flListener); + } +} diff --git a/system/src/main/java/com/yyy/system/service/impl/UmsMenuServiceImpl.java b/system/src/main/java/com/yyy/system/service/impl/UmsMenuServiceImpl.java new file mode 100644 index 0000000..598279e --- /dev/null +++ b/system/src/main/java/com/yyy/system/service/impl/UmsMenuServiceImpl.java @@ -0,0 +1,62 @@ +package com.yyy.system.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.yyy.common.core.domain.dto.UmsMenuDto; +import com.yyy.common.utils.common.StringUtils; +import com.yyy.system.mapper.UmsMenuMapper; +import com.yyy.common.core.domain.entity.UmsMenu; +import com.yyy.system.service.UmsMenuService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.Arrays; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +/** + * 菜单表(UmsMenu)表服务实现类 + * + * @author Fangy + * @date 2024-03-25 15:50:12 + */ +@Service +public class UmsMenuServiceImpl extends ServiceImpl implements UmsMenuService { + /** + * logger:日志文件 + */ + private static final Logger logger = LoggerFactory.getLogger(UmsMenuServiceImpl.class); + + @Autowired + private UmsMenuMapper umsMenuMapper; + + @Override + public Set selectPermsByUserId(Long userId) { + List perms = umsMenuMapper.selectPermsByUserId(userId); + Set permsSet = new HashSet<>(); + for (String perm : perms) { + if (StringUtils.isNotEmpty(perm)) { + permsSet.addAll(Arrays.asList(perm.trim().split(","))); + } + } + return permsSet; + } + + @Override + public List query(UmsMenuDto umsMenuDto) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq(StringUtils.isNotBlank(umsMenuDto.getMenuName()), "menu_name", umsMenuDto.getMenuName()) + .eq(umsMenuDto.getParentId() != null && umsMenuDto.getParentId() != 0, "parent_id", umsMenuDto.getParentId()) + .eq(StringUtils.isNotBlank(umsMenuDto.getMenuType()), "menu_type", umsMenuDto.getMenuType()) + .eq(StringUtils.isNotBlank(umsMenuDto.getPermission()), "permission", umsMenuDto.getPermission()); + return umsMenuMapper.selectList(queryWrapper); + } + + @Override + public List selectPermsByRoleId(Long roleId) { + return umsMenuMapper.selectPermsByRoleId(roleId); + } +} diff --git a/system/src/main/java/com/yyy/system/service/impl/UmsOrganizationServiceImpl.java b/system/src/main/java/com/yyy/system/service/impl/UmsOrganizationServiceImpl.java new file mode 100644 index 0000000..5eaae23 --- /dev/null +++ b/system/src/main/java/com/yyy/system/service/impl/UmsOrganizationServiceImpl.java @@ -0,0 +1,29 @@ +package com.yyy.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.yyy.system.mapper.UmsOrganizationMapper; +import com.yyy.common.core.domain.entity.UmsOrganization; +import com.yyy.system.service.UmsOrganizationService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * 组织信息表(UmsOrganization)表服务实现类 + * @author Fangy + * @date 2024-04-03 09:47:08 + */ +@Service +public class UmsOrganizationServiceImpl extends ServiceImpl implements UmsOrganizationService { + /** logger:日志文件 */ + private static final Logger logger = LoggerFactory.getLogger(UmsOrganizationServiceImpl.class); + + @Autowired + private UmsOrganizationMapper umsOrganizationMapper; + + @Override + public UmsOrganization getByUid(Long id) { + return umsOrganizationMapper.getByUid(id); + } +} diff --git a/system/src/main/java/com/yyy/system/service/impl/UmsRoleMenuServiceImpl.java b/system/src/main/java/com/yyy/system/service/impl/UmsRoleMenuServiceImpl.java new file mode 100644 index 0000000..3141650 --- /dev/null +++ b/system/src/main/java/com/yyy/system/service/impl/UmsRoleMenuServiceImpl.java @@ -0,0 +1,25 @@ +package com.yyy.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.yyy.system.mapper.UmsRoleMenuMapper; +import com.yyy.common.core.domain.entity.UmsRoleMenu; +import com.yyy.system.service.UmsRoleMenuService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import org.springframework.beans.factory.annotation.Autowired; + +/** + * 角色权限关联表(UmsRoleMenu)表服务实现类 + * @author Fangy + * @date 2024-04-12 20:46:30 + */ +@Service +public class UmsRoleMenuServiceImpl extends ServiceImpl implements UmsRoleMenuService { + /** logger:日志文件 */ + private static final Logger logger = LoggerFactory.getLogger(UmsRoleMenuServiceImpl.class); + + @Autowired + private UmsRoleMenuMapper umsRoleMenuMapper; + +} diff --git a/system/src/main/java/com/yyy/system/service/impl/UmsRoleServiceImpl.java b/system/src/main/java/com/yyy/system/service/impl/UmsRoleServiceImpl.java new file mode 100644 index 0000000..64e4ef3 --- /dev/null +++ b/system/src/main/java/com/yyy/system/service/impl/UmsRoleServiceImpl.java @@ -0,0 +1,89 @@ +package com.yyy.system.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.yyy.common.core.domain.dto.UmsRoleDto; +import com.yyy.common.core.domain.entity.UmsMenu; +import com.yyy.common.core.domain.entity.UmsRole; +import com.yyy.common.utils.common.StringUtils; +import com.yyy.common.core.domain.entity.UmsRoleMenu; +import com.yyy.system.mapper.UmsRoleMapper; +import com.yyy.system.service.UmsMenuService; +import com.yyy.system.service.UmsRoleMenuService; +import com.yyy.system.service.UmsRoleService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.*; +import java.util.stream.Collectors; + +/** + * 角色表(UmsRole)表服务实现类 + * @author Fangy + * @date 2024-03-25 15:50:12 + */ +@Service +public class UmsRoleServiceImpl extends ServiceImpl implements UmsRoleService { + /** logger:日志文件 */ + private static final Logger logger = LoggerFactory.getLogger(UmsRoleServiceImpl.class); + + @Autowired + private UmsRoleMapper umsRoleMapper; + + @Autowired + private UmsRoleMenuService umsRoleMenuService; + + @Autowired + private UmsMenuService menuService; + + @Override + public Set selectRoleKeys(Long userId) { + List perms = umsRoleMapper.selectRolesByUserId(userId); + Set permsSet = new HashSet<>(); + for (UmsRole perm : perms) + { + if (StringUtils.isNotNull(perm)) + { + permsSet.addAll(Arrays.asList(perm.getRoleKey().trim().split(","))); + } + } + return permsSet; + } + + @Override + public List query(UmsRoleDto umsRoleDto) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq(StringUtils.isNotBlank(umsRoleDto.getRoleKey()),"role_key",umsRoleDto.getRoleKey()) + .eq(StringUtils.isNotBlank(umsRoleDto.getRoleName()),"role_name",umsRoleDto.getRoleName()) + .eq(StringUtils.isNotBlank(umsRoleDto.getStatus()),"status",umsRoleDto.getStatus()); + return umsRoleMapper.selectList(queryWrapper).stream().map(this::joinInfo).collect(Collectors.toList()); + } + + @Override + public Long selectLatestPrimaryKey() { + return umsRoleMapper.selectOne(new QueryWrapper().orderByDesc("create_time").last("limit 1")).getRoleId(); + } + + @Override + public boolean bindMenu(Long roleId, List menuIds) { + Map map= new HashMap<>(); + map.put("role_id",roleId); + umsRoleMenuService.removeByMap(map); + List list = new ArrayList<>(); + menuIds.forEach(e->{list.add(UmsRoleMenu.builder().roleId(roleId).menuId(e).build());}); + return umsRoleMenuService.saveBatch(list); + } + + @Override + public UmsRole getById(Long id) { + return joinInfo(umsRoleMapper.selectById(id)); + } + + private UmsRole joinInfo(UmsRole role){ + List menus = menuService.selectPermsByRoleId(role.getRoleId()); + role.set_menus(menus); + return role; + } +} diff --git a/system/src/main/java/com/yyy/system/service/impl/UmsUserServiceImpl.java b/system/src/main/java/com/yyy/system/service/impl/UmsUserServiceImpl.java new file mode 100644 index 0000000..3f3a713 --- /dev/null +++ b/system/src/main/java/com/yyy/system/service/impl/UmsUserServiceImpl.java @@ -0,0 +1,184 @@ +package com.yyy.system.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.yyy.common.core.domain.dto.UmsUserAddDto; +import com.yyy.common.core.domain.dto.UmsUserQueryDto; +import com.yyy.common.core.domain.entity.*; +import com.yyy.common.utils.common.MD5Utils; +import com.yyy.common.utils.common.StringUtils; +import com.yyy.system.mapper.*; +import com.yyy.system.service.UmsUserService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 用户表(UmsUser)表服务实现类 + * + * @author Fangy + * @date 2024-03-22 17:31:35 + */ +@Service +public class UmsUserServiceImpl extends ServiceImpl implements UmsUserService { + /** + * logger:日志文件 + */ + private static final Logger logger = LoggerFactory.getLogger(UmsUserServiceImpl.class); + + @Autowired + private UmsUserMapper userMapper; + + @Autowired + private UmsOrganizationMapper umsOrganizationMapper; + + @Autowired + private UmsRoleMapper umsRoleMapper; + + @Autowired + private UmsUserOrganizationMapper umsUserOrganizationMapper; + + @Autowired + private UmsUserRoleMapper umsUserRoleMapper; + + @Override + public boolean checkLoginNameUnique(Long userId, String loginName) { + List userList = userMapper.selectList(new QueryWrapper().eq("login_name", loginName).eq("is_deleted", 0)); + return userList.isEmpty() || (userId != null && userList.size() == 1 && userList.get(0).getUserId().equals(userId)) ? true : false; + } + + @Override + public boolean checkPhoneUnique(Long userId, String phone) { + List userList = userMapper.selectList(new QueryWrapper().eq("phone", phone).eq("is_deleted", 0)); + return userList.isEmpty() || (userId != null && userList.size() == 1 && userList.get(0).getUserId().equals(userId)) ? true : false; + } + + @Override + public boolean checkEmailUnique(Long userId, String email) { + List userList = userMapper.selectList(new QueryWrapper().eq("email", email).eq("is_deleted", 0)); + return userList.isEmpty() || (userId != null && userList.size() == 1 && userList.get(0).getUserId().equals(userId)) ? true : false; + } + + @Override + public List list(UmsUserQueryDto umsUserDto) { + if (!umsUserDto.isTree()) { + return userMapper.query(umsUserDto); + } else if (umsUserDto.getOrganizationId() != null) { + //TODO tree查询递归数量错误 + List umsOrganizationList = umsOrganizationMapper.selectList(new QueryWrapper<>()); + List result = new ArrayList<>(); + findOrganizationsByRootId(umsOrganizationList, umsUserDto.getOrganizationId()).forEach(e -> { + umsUserDto.setOrganizationId(e.getOrganizationId()); + result.addAll(userMapper.query(umsUserDto)); + }); + return result.stream().map(this::joinInfo).collect(Collectors.toList()); + } else { + return null; + } + } + + @Override + public UmsUser getById(Long id) { + return joinInfo(userMapper.selectById(id)); + } + + @Override + public List listByIds(List ids) { + return userMapper.selectBatchIds(ids).stream().map(this::joinInfo).collect(Collectors.toList()); + } + + @Override + public boolean update(UmsUserAddDto umsUserAddDto, Long updateUser) { + UpdateWrapper umsUserUpdateWrapper = new UpdateWrapper<>(); + String salt = MD5Utils.randomSalt(); + umsUserUpdateWrapper.eq("user_id", umsUserAddDto.getUserId()) + .set(StringUtils.isNotBlank(umsUserAddDto.getLoginName()), "login_name", umsUserAddDto.getLoginName()) + .set(StringUtils.isNotBlank(umsUserAddDto.getUserName()), "user_name", umsUserAddDto.getUserName()) + .set(StringUtils.isNotBlank(umsUserAddDto.getEmail()), "email", umsUserAddDto.getEmail()) + .set(StringUtils.isNotBlank(umsUserAddDto.getPhone()), "phone", umsUserAddDto.getPhone()) + .set(StringUtils.isNotBlank(umsUserAddDto.getStatus()), "status", umsUserAddDto.getStatus()) + .set(StringUtils.isNotBlank(umsUserAddDto.getPassword()), "password", MD5Utils.inputPassToDBPass(umsUserAddDto.getPassword(), salt)) + .set(StringUtils.isNotBlank(umsUserAddDto.getPassword()), "salt", salt) + .set(StringUtils.isNotBlank(umsUserAddDto.getSex()), "sex", umsUserAddDto.getSex()) + .set(StringUtils.isNotBlank(umsUserAddDto.getAvatar()), "avatar", umsUserAddDto.getAvatar()) + .set("update_user", updateUser); + return userMapper.update(null, umsUserUpdateWrapper) > 0; + } + + @Override + public boolean bindPost(Long userId, Long postId) { + return umsUserOrganizationMapper.insert(UmsUserOrganization.builder().userId(userId).organizationId(postId).build()) > 0; + } + + @Override + public boolean unbindPost(Long id) { + return umsUserOrganizationMapper.delete(new QueryWrapper().eq("user_id", id)) > 0; + } + + @Override + public boolean unbindPost(List userIds) { + return umsUserOrganizationMapper.delete(new QueryWrapper().in("user_id", userIds)) > 0; + } + + @Override + public boolean bindRole(Long userId, Long roleId) { + return umsUserRoleMapper.insert(UmsUserRole.builder().userId(userId).roleId(roleId).build()) > 0; + } + + @Override + public boolean unbindRole(List userIds) { + return umsUserRoleMapper.delete(new QueryWrapper().in("user_id", userIds)) > 0; + } + + @Override + public boolean unbindRole(Long id) { + return umsUserRoleMapper.delete(new QueryWrapper().eq("user_id", id)) > 0; + } + + @Override + public Long selectLatestPrimaryKey() { + return userMapper.selectOne(new QueryWrapper().orderByDesc("user_id").last("limit 1")).getUserId(); + } + + private UmsUser joinInfo(UmsUser user) { + UmsOrganization organization = umsOrganizationMapper.getByUid(user.getUserId()); + UmsRole role = umsRoleMapper.selectRolesByUserId(user.getUserId()).stream().findAny().orElse(null); + user.set_umsOrganization(organization != null ? UmsOrganization.builder().organizationId(organization.getOrganizationId()).organizationName(organization.getOrganizationName()).build() : null); + user.set_umsRole(role != null ? UmsRole.builder().roleId(role.getRoleId()).roleName(role.getRoleName()).build() : null); + return user; + } + + public List findOrganizationsByRootId(List umsOrganizationList, Long rootId) { + List result = new ArrayList<>(); + // 找到 organizationId 为 rootId 的组织对象 + UmsOrganization rootOrganization = umsOrganizationList.stream() + .filter(org -> org.getOrganizationId().equals(rootId)) + .findFirst() + .orElse(null); + + if (rootOrganization != null) { + result.add(rootOrganization); + findChildrenOrganizations(umsOrganizationList, rootOrganization.getOrganizationId(), result); + } + + return result; + } + + private void findChildrenOrganizations(List umsOrganizationList, Long parentId, List result) { + List children = umsOrganizationList.stream() + .filter(org -> org.getParentId() != null && org.getParentId().equals(parentId)) + .collect(Collectors.toList()); + + for (UmsOrganization child : children) { + result.add(child); + findChildrenOrganizations(umsOrganizationList, child.getOrganizationId(), result); + } + } + +} diff --git a/system/src/main/resources/mapper/EamAssetLogMapper.xml b/system/src/main/resources/mapper/EamAssetLogMapper.xml new file mode 100644 index 0000000..81609b6 --- /dev/null +++ b/system/src/main/resources/mapper/EamAssetLogMapper.xml @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + id + , create_user, create_time, update_user, update_time, is_deleted, business_id, operation_type, operation_notes, asset_id + + + + + + diff --git a/system/src/main/resources/mapper/EamAssetMapper.xml b/system/src/main/resources/mapper/EamAssetMapper.xml new file mode 100644 index 0000000..f94d911 --- /dev/null +++ b/system/src/main/resources/mapper/EamAssetMapper.xml @@ -0,0 +1,411 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + asset_id + , asset_code, name, category_id, warehouse_id, own_company_id, status, use_organization_id, source_id, manager, supplier_vendor_id, manufacturers_vendor_id, model, serial_number, use_user_id, purpose, position_id, unit, position_detail, notes, attachment, maintenance_vendor, contactor, maintenance_start_date, maintenance_status, contact, maintenance_end_date, responsible_person, maintenance_type, suggest_maintenance_type, maintenance_notes, maintenance_attachment, financial_category_id, expense_item, total_amount_price, customer_info, tax_amount_rate, register_date, financial_option, nav_price, residuals_rate, financial_notes, financial_attachment, create_user, create_time, update_user, update_time, is_deleted + + + + a.asset_id + , a.asset_code, a.name, a.category_id, a.warehouse_id, a.own_company_id, a.status, a.use_organization_id, a.source_id, a.manager, a.supplier_vendor_id, a.manufacturers_vendor_id, a.model, a.serial_number, a.use_user_id, a.purpose, a.position_id, a.unit, a.position_detail, a.notes, a.attachment, a.maintenance_vendor, a.contactor, a.maintenance_start_date, a.maintenance_status, a.contact, a.maintenance_end_date, a.responsible_person, a.maintenance_type, a.suggest_maintenance_type, a.maintenance_notes, a.maintenance_attachment, a.financial_category_id, a.expense_item, a.total_amount_price, a.customer_info, a.tax_amount_rate, a.register_date, a.financial_option, a.nav_price, a.residuals_rate, a.financial_notes, a.financial_attachment, a.create_user, a.create_time, a.update_user, a.update_time, a.is_deleted, + c.category_id, c.category_name, c.upper_limit, c.lower_limit, c.safety_limit, + o1.organization_id as own_company_id, o1.organization_name as own_company_name, + o2.organization_id as use_organization_id, o2.organization_name as use_organization_name, + u1.user_id as manager, u1.user_name as manager_name, + manufacturers.manufacturers_vendor_id, manufacturers.name as manufacturers_name, + u2.user_id as use_user_id, u2.user_name as use_user_name, + p.position_id, p.name as position_name, + maintenance.maintenance_vendor_id, maintenance.name as maintenance_name, +-- w.warehouse_id, w.name, + supplier.supplier_vendor_id, supplier.name as supplier_name, + fc.financial_category_id, fc.financial_category_name + + + + + + + + + + + + + + INSERT INTO eam_asset_spare_parts (asset_id, spare_parts_id) + VALUES (#{assetId}, #{sparePartsId}); + + + + + + + + + + + + + + + + + + + + + + + + + DELETE + FROM eam_asset_spare_parts + WHERE asst_id = #{assetId} + and spare_parts_id = #{sparePartsId}); + + diff --git a/system/src/main/resources/mapper/EamBasicCategoryMapper.xml b/system/src/main/resources/mapper/EamBasicCategoryMapper.xml new file mode 100644 index 0000000..e3223ac --- /dev/null +++ b/system/src/main/resources/mapper/EamBasicCategoryMapper.xml @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + category_id + , category_name, depth, parent_id, upper_limit, lower_limit, safety_limit, create_user, create_time, update_user, update_time, is_deleted + + + + + + diff --git a/system/src/main/resources/mapper/EamBasicFinancialCategoryMapper.xml b/system/src/main/resources/mapper/EamBasicFinancialCategoryMapper.xml new file mode 100644 index 0000000..c692065 --- /dev/null +++ b/system/src/main/resources/mapper/EamBasicFinancialCategoryMapper.xml @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + financial_category_id + , financial_category_name, depth, parent_id, use_terms, notes, create_user, create_time, update_user, update_time, is_deleted + + + + + + diff --git a/system/src/main/resources/mapper/EamBasicMaintenanceVendorMapper.xml b/system/src/main/resources/mapper/EamBasicMaintenanceVendorMapper.xml new file mode 100644 index 0000000..bf85ded --- /dev/null +++ b/system/src/main/resources/mapper/EamBasicMaintenanceVendorMapper.xml @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + + + + + + + + + + maintenance_vendor_id, name, code, uscc, after_sales_contactor, after_sales_contact, business_contactor, business_contact, address, notes, create_user, create_time, update_user, update_time, is_deleted + + + + + + diff --git a/system/src/main/resources/mapper/EamBasicManufacturersVendorMapper.xml b/system/src/main/resources/mapper/EamBasicManufacturersVendorMapper.xml new file mode 100644 index 0000000..b5b0089 --- /dev/null +++ b/system/src/main/resources/mapper/EamBasicManufacturersVendorMapper.xml @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + manufacturers_vendor_id + , name, code, address, notes, create_user, create_time, update_user, update_time, is_deleted + + + + + + diff --git a/system/src/main/resources/mapper/EamBasicPositionMapper.xml b/system/src/main/resources/mapper/EamBasicPositionMapper.xml new file mode 100644 index 0000000..205a281 --- /dev/null +++ b/system/src/main/resources/mapper/EamBasicPositionMapper.xml @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + position_id, name, depth, parent_id, create_user, create_time, update_user, update_time, is_deleted + + + + + + diff --git a/system/src/main/resources/mapper/EamBasicSupplierVendorMapper.xml b/system/src/main/resources/mapper/EamBasicSupplierVendorMapper.xml new file mode 100644 index 0000000..587b12d --- /dev/null +++ b/system/src/main/resources/mapper/EamBasicSupplierVendorMapper.xml @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + + + + + + + + + + supplier_vendor_id, name, code, uscc, after_sales_contactor, after_sales_contact, business_contactor, business_contact, address, notes, create_user, create_time, update_user, update_time, is_deleted + + + + + + diff --git a/system/src/main/resources/mapper/EamBasicWarehouseMapper.xml b/system/src/main/resources/mapper/EamBasicWarehouseMapper.xml new file mode 100644 index 0000000..91c92ec --- /dev/null +++ b/system/src/main/resources/mapper/EamBasicWarehouseMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + warehouse_id, create_user, create_time, update_user, update_time, is_deleted, name, status + + + + + + diff --git a/system/src/main/resources/mapper/EamBusinessAllocateMapper.xml b/system/src/main/resources/mapper/EamBusinessAllocateMapper.xml new file mode 100644 index 0000000..ccc247e --- /dev/null +++ b/system/src/main/resources/mapper/EamBusinessAllocateMapper.xml @@ -0,0 +1,88 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + id + , business_id, name, applicant, asset_id_List, business_generated_date, notes, attach, status, create_user, create_time, update_user, update_time, is_deleted, out_warehouse_id, in_warehouse_id + + + + + + diff --git a/system/src/main/resources/mapper/EamBusinessBorrowMapper.xml b/system/src/main/resources/mapper/EamBusinessBorrowMapper.xml new file mode 100644 index 0000000..ca91c53 --- /dev/null +++ b/system/src/main/resources/mapper/EamBusinessBorrowMapper.xml @@ -0,0 +1,88 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + id + , business_id, name, applicant, asset_id_List, business_generated_date, notes, attach, status, create_user, create_time, update_user, update_time, is_deleted, use_user_id, return_time + + + + + + diff --git a/system/src/main/resources/mapper/EamBusinessCollectionMapper.xml b/system/src/main/resources/mapper/EamBusinessCollectionMapper.xml new file mode 100644 index 0000000..1d663c4 --- /dev/null +++ b/system/src/main/resources/mapper/EamBusinessCollectionMapper.xml @@ -0,0 +1,96 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + id + , business_id, name, applicant, asset_id_List, business_generated_date, notes, attach, status, create_user, create_time, update_user, update_time, is_deleted, use_organization_id, position_id, use_user_id, position_detail + + + + + + diff --git a/system/src/main/resources/mapper/EamBusinessOutboundMapper.xml b/system/src/main/resources/mapper/EamBusinessOutboundMapper.xml new file mode 100644 index 0000000..3ba21de --- /dev/null +++ b/system/src/main/resources/mapper/EamBusinessOutboundMapper.xml @@ -0,0 +1,96 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + id + , business_id, name, warehouse_id, asset_id_List, business_generated_date, notes, attach, status, create_user, create_time, update_user, update_time, is_deleted, own_company_id, use_organization_id, use_user_id, position_detail + + + + + + diff --git a/system/src/main/resources/mapper/EamBusinessRegistrationMapper.xml b/system/src/main/resources/mapper/EamBusinessRegistrationMapper.xml new file mode 100644 index 0000000..5575be0 --- /dev/null +++ b/system/src/main/resources/mapper/EamBusinessRegistrationMapper.xml @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + id + , business_id, name, applicant, status, asset_id, config, create_user, create_time, update_user, update_time, is_deleted + + + + + + diff --git a/system/src/main/resources/mapper/EamBusinessRetirementMapper.xml b/system/src/main/resources/mapper/EamBusinessRetirementMapper.xml new file mode 100644 index 0000000..c6409c2 --- /dev/null +++ b/system/src/main/resources/mapper/EamBusinessRetirementMapper.xml @@ -0,0 +1,96 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + id + , business_id, name, applicant, asset_id_List, business_generated_date, notes, attach, status, create_user, create_time, update_user, update_time, is_deleted, type, expedited_status, is_retirement, is_clean + + + + + + diff --git a/system/src/main/resources/mapper/EamBusinessReturnInventoryMapper.xml b/system/src/main/resources/mapper/EamBusinessReturnInventoryMapper.xml new file mode 100644 index 0000000..42f7cad --- /dev/null +++ b/system/src/main/resources/mapper/EamBusinessReturnInventoryMapper.xml @@ -0,0 +1,96 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + id + , business_id, name, applicant, asset_id_List, business_generated_date, notes, attach, status, create_user, create_time, update_user, update_time, is_deleted, use_organization_id, position_id, position_detail, warehouse_id + + + + + + diff --git a/system/src/main/resources/mapper/EamBusinessReturnMapper.xml b/system/src/main/resources/mapper/EamBusinessReturnMapper.xml new file mode 100644 index 0000000..982bcd8 --- /dev/null +++ b/system/src/main/resources/mapper/EamBusinessReturnMapper.xml @@ -0,0 +1,96 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + id + , business_id, name, applicant, asset_id_List, business_generated_date, notes, attach, status, create_user, create_time, update_user, update_time, is_deleted, position_id, position_detail, manager, use_user_id + + + + + + diff --git a/system/src/main/resources/mapper/EamBusinessStorageMapper.xml b/system/src/main/resources/mapper/EamBusinessStorageMapper.xml new file mode 100644 index 0000000..374f11b --- /dev/null +++ b/system/src/main/resources/mapper/EamBusinessStorageMapper.xml @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + id + , business_id, name, warehouse_id, asset_id_List, business_generated_date, notes, attach, status, create_user, create_time, update_user, update_time, is_deleted, manager, position_id, supplier_vendor_id + + + + + + diff --git a/system/src/main/resources/mapper/EamBusinessTransferMapper.xml b/system/src/main/resources/mapper/EamBusinessTransferMapper.xml new file mode 100644 index 0000000..6f832f9 --- /dev/null +++ b/system/src/main/resources/mapper/EamBusinessTransferMapper.xml @@ -0,0 +1,100 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id + , business_id, name, asset_id_List, business_generated_date, notes, attach, status, create_user, create_time, update_user, update_time, is_deleted, out_use_organization_id, in_use_organization_id, manager_id, use_user_id, position_id, position_detail + + + + + + diff --git a/system/src/main/resources/mapper/EamRepairFaultMapper.xml b/system/src/main/resources/mapper/EamRepairFaultMapper.xml new file mode 100644 index 0000000..16ffee1 --- /dev/null +++ b/system/src/main/resources/mapper/EamRepairFaultMapper.xml @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + fault_id + , name, img, asset_id_List, attach, notes, status, create_user, create_time, update_user, update_time, is_deleted + + + + + + diff --git a/system/src/main/resources/mapper/EamRepairMapper.xml b/system/src/main/resources/mapper/EamRepairMapper.xml new file mode 100644 index 0000000..162c175 --- /dev/null +++ b/system/src/main/resources/mapper/EamRepairMapper.xml @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + id + , business_id, name, asset_id_List, notes, attach, status, create_user, create_time, update_user, update_time, is_deleted, planned_date, repair_type_id + + + + + + diff --git a/system/src/main/resources/mapper/EamRepairTypeMapper.xml b/system/src/main/resources/mapper/EamRepairTypeMapper.xml new file mode 100644 index 0000000..79bf48d --- /dev/null +++ b/system/src/main/resources/mapper/EamRepairTypeMapper.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + repair_type_id + , name, config, notes, create_user, create_time, update_user, update_time, is_deleted + + + + + + diff --git a/system/src/main/resources/mapper/EamStocktakingDetailsMapper.xml b/system/src/main/resources/mapper/EamStocktakingDetailsMapper.xml new file mode 100644 index 0000000..eea6cb8 --- /dev/null +++ b/system/src/main/resources/mapper/EamStocktakingDetailsMapper.xml @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + id + , stocktaking_job_id, asset_id, status, img, attachment, notes, create_user, create_time, update_user, update_time, is_deleted + + + + + + diff --git a/system/src/main/resources/mapper/EamStocktakingJobMapper.xml b/system/src/main/resources/mapper/EamStocktakingJobMapper.xml new file mode 100644 index 0000000..834852c --- /dev/null +++ b/system/src/main/resources/mapper/EamStocktakingJobMapper.xml @@ -0,0 +1,108 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + stocktaking_job_id + , name, head, full_stocktaking, stocktaking_user_id, stocktaking_start_date, stocktaking_end_date, asset_status, own_company_id, use_organization_id, use_user_id, category_id, position_id, warehouse_id, status, notes, create_user, create_time, update_user, update_time, is_deleted + + + + + + diff --git a/system/src/main/resources/mapper/EamStocktakingPlanMapper.xml b/system/src/main/resources/mapper/EamStocktakingPlanMapper.xml new file mode 100644 index 0000000..ec57a5f --- /dev/null +++ b/system/src/main/resources/mapper/EamStocktakingPlanMapper.xml @@ -0,0 +1,108 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + stocktaking_plan_id + , name, head, full_stocktaking, stocktaking_user_id, stocktaking_start_date, stocktaking_end_date, asset_status, own_company_id, use_organization_id, use_user_id, category_id, position_id, warehouse_id, status, notes, create_user, create_time, update_user, update_time, is_deleted + + + + + + diff --git a/system/src/main/resources/mapper/EamWarehouseAssetMapper.xml b/system/src/main/resources/mapper/EamWarehouseAssetMapper.xml new file mode 100644 index 0000000..6496b50 --- /dev/null +++ b/system/src/main/resources/mapper/EamWarehouseAssetMapper.xml @@ -0,0 +1,49 @@ + + + + + + + + + + + + + warehouse_id + , asset_id, count + + + + + + + + UPDATE eam_warehouse_asset + SET count = count + #{count} + WHERE warehouse_id = #{warehouseId} AND asset_id = #{assetId} + + + + + UPDATE eam_warehouse_asset + SET count = count - #{count} + WHERE warehouse_id = #{warehouseId} AND asset_id = #{assetId} AND count >= #{count} + + + diff --git a/system/src/main/resources/mapper/EamWarehouseInventoryMapper.xml b/system/src/main/resources/mapper/EamWarehouseInventoryMapper.xml new file mode 100644 index 0000000..be4593b --- /dev/null +++ b/system/src/main/resources/mapper/EamWarehouseInventoryMapper.xml @@ -0,0 +1,125 @@ + + + + + + + + + + + diff --git a/system/src/main/resources/mapper/FlFormItemMapper.xml b/system/src/main/resources/mapper/FlFormItemMapper.xml new file mode 100644 index 0000000..007bbc2 --- /dev/null +++ b/system/src/main/resources/mapper/FlFormItemMapper.xml @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + id + , name, form_key, proc_ins_id, contents, logs, status, is_deleted, create_user, create_time, update_user, update_time + + + + + + diff --git a/system/src/main/resources/mapper/FlFormMapper.xml b/system/src/main/resources/mapper/FlFormMapper.xml new file mode 100644 index 0000000..443ab3a --- /dev/null +++ b/system/src/main/resources/mapper/FlFormMapper.xml @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + form_id + , form_key, type, name, pc_icon, mobile_icon, config, deploy_id, status, is_deleted, create_user, create_time, update_user, update_time + + + + + + diff --git a/system/src/main/resources/mapper/FlListenerMapper.xml b/system/src/main/resources/mapper/FlListenerMapper.xml new file mode 100644 index 0000000..def1a16 --- /dev/null +++ b/system/src/main/resources/mapper/FlListenerMapper.xml @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + id + , name, type, event_type, value_type, value, status, is_deleted, create_user, create_time, update_user, update_time + + + + + + diff --git a/system/src/main/resources/mapper/UmsMenuMapper.xml b/system/src/main/resources/mapper/UmsMenuMapper.xml new file mode 100644 index 0000000..b47a113 --- /dev/null +++ b/system/src/main/resources/mapper/UmsMenuMapper.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + m.menu_id, m.menu_name, m.parent_id, m.sort, m.url, m.menu_type, m.visible, m.permission, m.icon, m.create_user, m.create_time, m.update_user, m.update_time, m.is_deleted, m.remark + + + + + + + diff --git a/system/src/main/resources/mapper/UmsOrganizationMapper.xml b/system/src/main/resources/mapper/UmsOrganizationMapper.xml new file mode 100644 index 0000000..47e3e48 --- /dev/null +++ b/system/src/main/resources/mapper/UmsOrganizationMapper.xml @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + o.organization_id, o.organization_name, o.organization_type, o.order_num, o.parent_id, o.depth, o.status, o.is_deleted, o.create_user, o.create_time, o.update_user, o.update_time + + + + + + + diff --git a/system/src/main/resources/mapper/UmsRoleMapper.xml b/system/src/main/resources/mapper/UmsRoleMapper.xml new file mode 100644 index 0000000..700cc95 --- /dev/null +++ b/system/src/main/resources/mapper/UmsRoleMapper.xml @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.status, r.is_deleted, r.create_user, r.create_time, r.update_user, r.update_time, r.remark + + + + + + + diff --git a/system/src/main/resources/mapper/UmsRoleMenuMapper.xml b/system/src/main/resources/mapper/UmsRoleMenuMapper.xml new file mode 100644 index 0000000..0792f4b --- /dev/null +++ b/system/src/main/resources/mapper/UmsRoleMenuMapper.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + role_id, menu_id + + + diff --git a/system/src/main/resources/mapper/UmsUserMapper.xml b/system/src/main/resources/mapper/UmsUserMapper.xml new file mode 100644 index 0000000..d5d9286 --- /dev/null +++ b/system/src/main/resources/mapper/UmsUserMapper.xml @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + u + . + user_id + , u.login_name, u.user_name, u.email, u.phone, u.password, u.salt, u.status, u.is_deleted, u.login_ip, u.login_date, u.pwd_update_date, u.create_user, u.create_time, u.update_user, u.update_time, u.remark, u.sex, u.avatar + ,r.role_id,r.role_name + ,o.organization_id,o.organization_name + + + + diff --git a/system/src/main/resources/mapper/UmsUserOrganizationMapper.xml b/system/src/main/resources/mapper/UmsUserOrganizationMapper.xml new file mode 100644 index 0000000..c7d092c --- /dev/null +++ b/system/src/main/resources/mapper/UmsUserOrganizationMapper.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + organization_id + , user_id + + + + + + diff --git a/system/src/main/resources/mapper/UmsUserRoleMapper.xml b/system/src/main/resources/mapper/UmsUserRoleMapper.xml new file mode 100644 index 0000000..36d69db --- /dev/null +++ b/system/src/main/resources/mapper/UmsUserRoleMapper.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + user_id + , role_id + + + + + + diff --git a/system/src/main/resources/mapper/flowable/FlowDeployMapper.xml b/system/src/main/resources/mapper/flowable/FlowDeployMapper.xml new file mode 100644 index 0000000..a1ebb9a --- /dev/null +++ b/system/src/main/resources/mapper/flowable/FlowDeployMapper.xml @@ -0,0 +1,67 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/system/src/main/resources/test.bpmn20.xml b/system/src/main/resources/test.bpmn20.xml new file mode 100644 index 0000000..f1db33e --- /dev/null +++ b/system/src/main/resources/test.bpmn20.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/system/src/main/resources/员工资产交接.bpmn20.xml b/system/src/main/resources/员工资产交接.bpmn20.xml new file mode 100644 index 0000000..96bf8dc --- /dev/null +++ b/system/src/main/resources/员工资产交接.bpmn20.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/system/src/main/resources/员工资产报修.bpmn20.xml b/system/src/main/resources/员工资产报修.bpmn20.xml new file mode 100644 index 0000000..68a4639 --- /dev/null +++ b/system/src/main/resources/员工资产报修.bpmn20.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/system/src/main/resources/员工资产报失.bpmn20.xml b/system/src/main/resources/员工资产报失.bpmn20.xml new file mode 100644 index 0000000..4ad1659 --- /dev/null +++ b/system/src/main/resources/员工资产报失.bpmn20.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/system/src/main/resources/员工资产申请.bpmn20.xml b/system/src/main/resources/员工资产申请.bpmn20.xml new file mode 100644 index 0000000..d9e698d --- /dev/null +++ b/system/src/main/resources/员工资产申请.bpmn20.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/system/src/main/resources/物品领用申请.bpmn20.xml b/system/src/main/resources/物品领用申请.bpmn20.xml new file mode 100644 index 0000000..7f9e4d4 --- /dev/null +++ b/system/src/main/resources/物品领用申请.bpmn20.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/system/src/main/resources/设备报修申请.bpmn20.xml b/system/src/main/resources/设备报修申请.bpmn20.xml new file mode 100644 index 0000000..cf977a3 --- /dev/null +++ b/system/src/main/resources/设备报修申请.bpmn20.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/system/src/main/resources/资产设备报废.bpmn20.xml b/system/src/main/resources/资产设备报废.bpmn20.xml new file mode 100644 index 0000000..81da74c --- /dev/null +++ b/system/src/main/resources/资产设备报废.bpmn20.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/system/src/main/resources/资产采购申请.bpmn20.xml b/system/src/main/resources/资产采购申请.bpmn20.xml new file mode 100644 index 0000000..b3cdff8 --- /dev/null +++ b/system/src/main/resources/资产采购申请.bpmn20.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +