From dfb943919d9616f88dd044c0b5616198df3673c3 Mon Sep 17 00:00:00 2001 From: yy <1137267053@qq.com> Date: Fri, 11 Sep 2026 17:34:14 +0800 Subject: [PATCH] first commit --- .gitignore | 30 + .idea/.gitignore | 10 + .idea/compiler.xml | 30 + .idea/encodings.xml | 6 + .idea/jarRepositories.xml | 25 + .idea/misc.xml | 15 + .idea/modules.xml | 8 + .idea/vcs.xml | 6 + README.md | 230 +++ metaloop.iml | 8 + pom.xml | 158 +++ src/Main.java | 15 + src/main/java/com/metalloop/Application.java | 17 + .../metalloop/common/auth/Authentication.java | 142 ++ .../auth/config/AuthServerConfiguration.java | 109 ++ .../auth/config/AuthServerConfigurer.java | 18 + .../config/AuthServerConfigurerAdapter.java | 16 + .../config/AuthServerEndpointsConfigurer.java | 227 +++ .../common/auth/config/EnableAuthServer.java | 22 + .../common/auth/encrypt/KeyProperties.java | 148 ++ .../auth/encrypt/KeyStoreKeyFactory.java | 73 + .../handler/DefaultLoginSuccessHandler.java | 23 + .../handler/DefaultLogoutSuccessHandler.java | 18 + .../DefaultPasswordCheckFailureHandler.java | 27 + .../handler/DefaultVerifyCodeHandler.java | 15 + .../auth/handler/LoginSuccessHandler.java | 21 + .../auth/handler/LogoutSuccessHandler.java | 21 + .../handler/PasswordCheckFailureHandler.java | 35 + .../auth/handler/VerifyCodeHandler.java | 21 + .../model/AuthenticationMiniAppRequest.java | 38 + .../auth/model/AuthenticationRequest.java | 32 + .../auth/model/AuthenticationResponse.java | 29 + .../auth/password/PasswordDecryptor.java | 18 + .../auth/password/RsaPasswordDecryptor.java | 44 + .../common/auth/permission/Permission.java | 42 + .../auth/permission/PermissionService.java | 19 + .../auth/permission/SimplePermission.java | 30 + .../common/auth/sso/SsoCodeService.java | 31 + .../auth/sso/model/SimpleSsoUserInfo.java | 298 ++++ .../common/auth/sso/model/SsoUserInfo.java | 203 +++ .../auth/userdetails/SimpleUserDetails.java | 45 + .../common/auth/userdetails/UserDetails.java | 106 ++ .../auth/userdetails/UserDetailsService.java | 41 + .../common/constant/CommonConstant.java | 134 ++ .../common/constant/SecurityConstants.java | 21 + .../common/core/lock/DistributedLock.java | 80 ++ .../com/metalloop/common/core/lock/Lock.java | 43 + .../common/core/lock/LockAspect.java | 98 ++ .../common/core/lock/LockCondition.java | 50 + .../common/core/lock/LockConditionReqDto.java | 56 + .../com/metalloop/common/core/lock/ZLock.java | 26 + .../com/metalloop/common/enums/Direction.java | 52 + .../com/metalloop/common/enums/LoginType.java | 74 + .../exception/AccountExpiredException.java | 46 + .../exception/AccountStatusException.java | 35 + .../exception/AuthenticationException.java | 30 + .../exception/BadCredentialsException.java | 45 + .../common/exception/BusinessException.java | 74 + .../CredentialsExpiredException.java | 46 + .../exception/DefaultExceptionAdvice.java | 327 +++++ .../common/exception/DisabledException.java | 46 + .../exception/IdempotencyException.java | 14 + .../common/exception/LockException.java | 14 + .../common/exception/LockedException.java | 46 + .../exception/UsernameNotFoundException.java | 47 + .../exception/ValidationFailedException.java | 34 + .../common/exception/code/CodeMsg.java | 23 + .../common/exception/code/ResponseCode.java | 124 ++ .../common/exception/model/ApiErrorLog.java | 107 ++ .../com/metalloop/common/model/Result.java | 107 ++ .../common/redis/RedisAutoConfigure.java | 140 ++ .../redis/lock/RedissonDistributedLock.java | 69 + .../properties/CacheManagerProperties.java | 31 + .../RedissonLockAutoConfiguration.java | 27 + .../redis/template/RedisRepository.java | 577 ++++++++ .../common/service/ISuperService.java | 186 +++ .../common/service/impl/SuperServiceImpl.java | 115 ++ .../com/metalloop/common/utils/IPHelper.java | 68 + .../common/utils/QueryWrapperBuilder.java | 328 +++++ .../com/metalloop/common/utils/RsaUtils.java | 101 ++ .../metalloop/common/utils/SpringUtil.java | 36 + .../common/utils/json/JsonUtils.java | 144 ++ .../satoken/SaTokenInterceptorConfig.java | 26 + .../framework/satoken/StpInterfaceImpl.java | 37 + .../framework/satoken/admin/StpAdminUtil.java | 1235 +++++++++++++++++ .../config/SaTokenAdminConfiguration.java | 34 + .../admin/config/SaTokenAdminProperties.java | 561 ++++++++ .../framework/satoken/self/StpSelfUtil.java | 1235 +++++++++++++++++ .../self/config/SaTokenSelfConfiguration.java | 34 + .../self/config/SaTokenSelfProperties.java | 561 ++++++++ .../framework/swagger/OpenApiConfig.java | 40 + .../auth/controller/AuthController.java | 285 ++++ .../controller/RsaPublicKeyController.java | 37 + .../converter/SysEnterpriseConverter.java | 65 + .../SysEnterpriseImageConverter.java | 65 + .../converter/SysPermissionConverter.java | 65 + .../auth/converter/SysRoleConverter.java | 65 + .../converter/SysRolePermissionConverter.java | 65 + .../auth/converter/SysUserConverter.java | 65 + .../auth/converter/SysUserRoleConverter.java | 65 + .../auth/mapper/SysEnterpriseImageMapper.java | 15 + .../auth/mapper/SysEnterpriseMapper.java | 15 + .../auth/mapper/SysPermissionMapper.java | 15 + .../modules/auth/mapper/SysRoleMapper.java | 15 + .../auth/mapper/SysRolePermissionMapper.java | 15 + .../modules/auth/mapper/SysUserMapper.java | 15 + .../auth/mapper/SysUserRoleMapper.java | 15 + .../modules/auth/model/po/SysEnterprise.java | 202 +++ .../auth/model/po/SysEnterpriseImage.java | 62 + .../modules/auth/model/po/SysPermission.java | 153 ++ .../modules/auth/model/po/SysRole.java | 104 ++ .../auth/model/po/SysRolePermission.java | 51 + .../modules/auth/model/po/SysUser.java | 93 ++ .../modules/auth/model/po/SysUserRole.java | 55 + .../model/query/SysEnterpriseImageQuery.java | 61 + .../auth/model/query/SysEnterpriseQuery.java | 201 +++ .../auth/model/query/SysPermissionQuery.java | 152 ++ .../model/query/SysRolePermissionQuery.java | 47 + .../auth/model/query/SysRoleQuery.java | 103 ++ .../auth/model/query/SysUserQuery.java | 89 ++ .../auth/model/query/SysUserRoleQuery.java | 54 + .../auth/model/req/AuthenticationRequest.java | 32 + ...SysEnterpriseImageLockConditionReqDto.java | 36 + .../SysEnterpriseImagePageQueryReqDto.java | 47 + .../req/SysEnterpriseImageQueryReqDto.java | 55 + .../model/req/SysEnterpriseImageReqDto.java | 55 + ...SysEnterpriseImageUpdateByQueryReqDto.java | 35 + .../req/SysEnterpriseLockConditionReqDto.java | 36 + .../req/SysEnterprisePageQueryReqDto.java | 47 + .../model/req/SysEnterpriseQueryReqDto.java | 175 +++ .../auth/model/req/SysEnterpriseReqDto.java | 175 +++ .../req/SysEnterpriseUpdateByQueryReqDto.java | 35 + .../req/SysPermissionLockConditionReqDto.java | 36 + .../req/SysPermissionPageQueryReqDto.java | 47 + .../model/req/SysPermissionQueryReqDto.java | 133 ++ .../auth/model/req/SysPermissionReqDto.java | 133 ++ .../req/SysPermissionUpdateByQueryReqDto.java | 35 + .../model/req/SysRoleLockConditionReqDto.java | 36 + .../model/req/SysRolePageQueryReqDto.java | 47 + .../SysRolePermissionLockConditionReqDto.java | 36 + .../req/SysRolePermissionPageQueryReqDto.java | 47 + .../req/SysRolePermissionQueryReqDto.java | 43 + .../model/req/SysRolePermissionReqDto.java | 43 + .../SysRolePermissionUpdateByQueryReqDto.java | 35 + .../auth/model/req/SysRoleQueryReqDto.java | 91 ++ .../modules/auth/model/req/SysRoleReqDto.java | 91 ++ .../model/req/SysRoleUpdateByQueryReqDto.java | 35 + .../model/req/SysUserLockConditionReqDto.java | 36 + .../model/req/SysUserPageQueryReqDto.java | 47 + .../auth/model/req/SysUserQueryReqDto.java | 79 ++ .../modules/auth/model/req/SysUserReqDto.java | 79 ++ .../req/SysUserRoleLockConditionReqDto.java | 36 + .../model/req/SysUserRolePageQueryReqDto.java | 47 + .../model/req/SysUserRoleQueryReqDto.java | 49 + .../auth/model/req/SysUserRoleReqDto.java | 49 + .../req/SysUserRoleUpdateByQueryReqDto.java | 35 + .../model/req/SysUserUpdateByQueryReqDto.java | 35 + .../model/resp/AuthenticationResponse.java | 29 + .../model/resp/SysEnterpriseImageRespDto.java | 55 + .../auth/model/resp/SysEnterpriseRespDto.java | 175 +++ .../auth/model/resp/SysPermissionRespDto.java | 133 ++ .../model/resp/SysRolePermissionRespDto.java | 43 + .../auth/model/resp/SysRoleRespDto.java | 91 ++ .../auth/model/resp/SysUserRespDto.java | 79 ++ .../auth/model/resp/SysUserRoleRespDto.java | 49 + .../service/SysEnterpriseImageService.java | 222 +++ .../auth/service/SysEnterpriseService.java | 222 +++ .../auth/service/SysPermissionService.java | 222 +++ .../service/SysRolePermissionService.java | 222 +++ .../modules/auth/service/SysRoleService.java | 222 +++ .../auth/service/SysUserRoleService.java | 222 +++ .../modules/auth/service/SysUserService.java | 222 +++ .../impl/SysEnterpriseImageServiceImpl.java | 169 +++ .../impl/SysEnterpriseServiceImpl.java | 173 +++ .../impl/SysPermissionServiceImpl.java | 167 +++ .../impl/SysRolePermissionServiceImpl.java | 170 +++ .../auth/service/impl/SysRoleServiceImpl.java | 173 +++ .../service/impl/SysUserRoleServiceImpl.java | 170 +++ .../auth/service/impl/SysUserServiceImpl.java | 169 +++ .../BizEnterpriseProductConverter.java | 65 + .../converter/BizMaterialConverter.java | 65 + .../BizPurchaseRequestConverter.java | 65 + .../converter/BizSupplyInfoConverter.java | 65 + .../converter/BizVarietyConverter.java | 65 + .../mapper/BizEnterpriseProductMapper.java | 15 + .../bussiness/mapper/BizMaterialMapper.java | 15 + .../mapper/BizPurchaseRequestMapper.java | 15 + .../bussiness/mapper/BizSupplyInfoMapper.java | 15 + .../bussiness/mapper/BizVarietyMapper.java | 15 + .../model/po/BizEnterpriseProduct.java | 97 ++ .../bussiness/model/po/BizMaterial.java | 69 + .../model/po/BizPurchaseRequest.java | 209 +++ .../bussiness/model/po/BizSupplyInfo.java | 202 +++ .../bussiness/model/po/BizVariety.java | 97 ++ .../query/BizEnterpriseProductQuery.java | 96 ++ .../model/query/BizMaterialQuery.java | 68 + .../model/query/BizPurchaseRequestQuery.java | 208 +++ .../model/query/BizSupplyInfoQuery.java | 201 +++ .../model/query/BizVarietyQuery.java | 96 ++ ...zEnterpriseProductLockConditionReqDto.java | 37 + .../BizEnterpriseProductPageQueryReqDto.java | 47 + .../req/BizEnterpriseProductQueryReqDto.java | 85 ++ .../model/req/BizEnterpriseProductReqDto.java | 85 ++ ...zEnterpriseProductUpdateByQueryReqDto.java | 35 + .../req/BizMaterialLockConditionReqDto.java | 36 + .../model/req/BizMaterialPageQueryReqDto.java | 47 + .../model/req/BizMaterialQueryReqDto.java | 61 + .../model/req/BizMaterialReqDto.java | 61 + .../req/BizMaterialUpdateByQueryReqDto.java | 35 + ...BizPurchaseRequestLockConditionReqDto.java | 36 + .../BizPurchaseRequestPageQueryReqDto.java | 47 + .../req/BizPurchaseRequestQueryReqDto.java | 181 +++ .../model/req/BizPurchaseRequestReqDto.java | 181 +++ ...BizPurchaseRequestUpdateByQueryReqDto.java | 35 + .../req/BizSupplyInfoLockConditionReqDto.java | 36 + .../req/BizSupplyInfoPageQueryReqDto.java | 47 + .../model/req/BizSupplyInfoQueryReqDto.java | 175 +++ .../model/req/BizSupplyInfoReqDto.java | 175 +++ .../req/BizSupplyInfoUpdateByQueryReqDto.java | 35 + .../req/BizVarietyLockConditionReqDto.java | 35 + .../model/req/BizVarietyPageQueryReqDto.java | 47 + .../model/req/BizVarietyQueryReqDto.java | 85 ++ .../bussiness/model/req/BizVarietyReqDto.java | 85 ++ .../req/BizVarietyUpdateByQueryReqDto.java | 35 + .../resp/BizEnterpriseProductRespDto.java | 85 ++ .../model/resp/BizMaterialRespDto.java | 61 + .../model/resp/BizPurchaseRequestRespDto.java | 181 +++ .../model/resp/BizSupplyInfoRespDto.java | 175 +++ .../model/resp/BizVarietyRespDto.java | 85 ++ .../service/BizEnterpriseProductService.java | 222 +++ .../bussiness/service/BizMaterialService.java | 222 +++ .../service/BizPurchaseRequestService.java | 222 +++ .../service/BizSupplyInfoService.java | 222 +++ .../bussiness/service/BizVarietyService.java | 222 +++ .../impl/BizEnterpriseProductServiceImpl.java | 169 +++ .../service/impl/BizMaterialServiceImpl.java | 169 +++ .../impl/BizPurchaseRequestServiceImpl.java | 169 +++ .../impl/BizSupplyInfoServiceImpl.java | 169 +++ .../service/impl/BizVarietyServiceImpl.java | 169 +++ src/main/resources/application.yml | 52 + .../mapper/BizEnterpriseProductMapper.xml | 32 + .../resources/mapper/BizMaterialMapper.xml | 24 + .../mapper/BizPurchaseRequestMapper.xml | 64 + .../resources/mapper/BizSupplyInfoMapper.xml | 62 + .../resources/mapper/BizVarietyMapper.xml | 32 + .../mapper/SysEnterpriseImageMapper.xml | 22 + .../resources/mapper/SysEnterpriseMapper.xml | 62 + .../resources/mapper/SysPermissionMapper.xml | 48 + src/main/resources/mapper/SysRoleMapper.xml | 34 + .../mapper/SysRolePermissionMapper.xml | 18 + src/main/resources/mapper/SysUserMapper.xml | 30 + .../resources/mapper/SysUserRoleMapper.xml | 20 + target/classes/Main.class | Bin 0 -> 1159 bytes target/classes/application.yml | 52 + .../classes/com/metalloop/Application.class | Bin 0 -> 861 bytes .../common/auth/Authentication$Builder.class | Bin 0 -> 1656 bytes .../common/auth/Authentication.class | Bin 0 -> 2087 bytes .../auth/config/AuthServerConfiguration.class | Bin 0 -> 7702 bytes .../auth/config/AuthServerConfigurer.class | Bin 0 -> 335 bytes .../config/AuthServerConfigurerAdapter.class | Bin 0 -> 897 bytes .../AuthServerEndpointsConfigurer.class | Bin 0 -> 6312 bytes .../common/auth/config/EnableAuthServer.class | Bin 0 -> 693 bytes .../auth/encrypt/KeyProperties$KeyStore.class | Bin 0 -> 1761 bytes .../common/auth/encrypt/KeyProperties.class | Bin 0 -> 1797 bytes .../auth/encrypt/KeyStoreKeyFactory.class | Bin 0 -> 3858 bytes .../handler/DefaultLoginSuccessHandler.class | Bin 0 -> 1242 bytes .../handler/DefaultLogoutSuccessHandler.class | Bin 0 -> 769 bytes .../DefaultPasswordCheckFailureHandler.class | Bin 0 -> 977 bytes .../handler/DefaultVerifyCodeHandler.class | Bin 0 -> 763 bytes .../auth/handler/LoginSuccessHandler.class | Bin 0 -> 285 bytes .../auth/handler/LogoutSuccessHandler.class | Bin 0 -> 287 bytes .../handler/PasswordCheckFailureHandler.class | Bin 0 -> 400 bytes .../auth/handler/VerifyCodeHandler.class | Bin 0 -> 337 bytes .../model/AuthenticationMiniAppRequest.class | Bin 0 -> 3675 bytes .../auth/model/AuthenticationRequest.class | Bin 0 -> 3155 bytes .../auth/model/AuthenticationResponse.class | Bin 0 -> 2921 bytes .../auth/password/PasswordDecryptor.class | Bin 0 -> 253 bytes .../auth/password/RsaPasswordDecryptor.class | Bin 0 -> 2842 bytes .../common/auth/permission/Permission.class | Bin 0 -> 244 bytes .../auth/permission/PermissionService.class | Bin 0 -> 339 bytes .../auth/permission/SimplePermission.class | Bin 0 -> 2728 bytes .../common/auth/sso/SsoCodeService.class | Bin 0 -> 453 bytes .../sso/model/SimpleSsoUserInfo$Builder.class | Bin 0 -> 3666 bytes .../auth/sso/model/SimpleSsoUserInfo.class | Bin 0 -> 13098 bytes .../common/auth/sso/model/SsoUserInfo.class | Bin 0 -> 1318 bytes .../auth/userdetails/SimpleUserDetails.class | Bin 0 -> 6871 bytes .../common/auth/userdetails/UserDetails.class | Bin 0 -> 569 bytes .../auth/userdetails/UserDetailsService.class | Bin 0 -> 399 bytes .../common/constant/CommonConstant.class | Bin 0 -> 1787 bytes .../common/constant/SecurityConstants.class | Bin 0 -> 310 bytes .../common/core/lock/DistributedLock.class | Bin 0 -> 2186 bytes .../com/metalloop/common/core/lock/Lock.class | Bin 0 -> 725 bytes .../common/core/lock/LockAspect.class | Bin 0 -> 4748 bytes .../common/core/lock/LockCondition.class | Bin 0 -> 2157 bytes ...ionReqDto$LockConditionReqDtoBuilder.class | Bin 0 -> 3305 bytes .../core/lock/LockConditionReqDto.class | Bin 0 -> 6056 bytes .../metalloop/common/core/lock/ZLock.class | Bin 0 -> 987 bytes .../metalloop/common/enums/Direction.class | Bin 0 -> 2022 bytes .../metalloop/common/enums/LoginType.class | Bin 0 -> 4303 bytes .../exception/AccountExpiredException.class | Bin 0 -> 672 bytes .../exception/AccountStatusException.class | Bin 0 -> 670 bytes .../exception/AuthenticationException.class | Bin 0 -> 645 bytes .../exception/BadCredentialsException.class | Bin 0 -> 673 bytes .../common/exception/BusinessException.class | Bin 0 -> 1856 bytes .../CredentialsExpiredException.class | Bin 0 -> 684 bytes .../exception/DefaultExceptionAdvice.class | Bin 0 -> 15720 bytes .../common/exception/DisabledException.class | Bin 0 -> 654 bytes .../exception/IdempotencyException.class | Bin 0 -> 515 bytes .../common/exception/LockException.class | Bin 0 -> 494 bytes .../common/exception/LockedException.class | Bin 0 -> 648 bytes .../exception/UsernameNotFoundException.class | Bin 0 -> 679 bytes .../exception/ValidationFailedException.class | Bin 0 -> 1352 bytes .../common/exception/code/CodeMsg.class | Bin 0 -> 213 bytes .../common/exception/code/ResponseCode.class | Bin 0 -> 9833 bytes .../common/exception/model/ApiErrorLog.class | Bin 0 -> 11582 bytes .../com/metalloop/common/model/Result.class | Bin 0 -> 6728 bytes .../common/redis/RedisAutoConfigure.class | Bin 0 -> 10696 bytes .../redis/lock/RedissonDistributedLock.class | Bin 0 -> 3029 bytes .../CacheManagerProperties$CacheConfig.class | Bin 0 -> 1125 bytes .../properties/CacheManagerProperties.class | Bin 0 -> 1384 bytes .../RedissonLockAutoConfiguration.class | Bin 0 -> 1206 bytes .../redis/template/RedisRepository$1.class | Bin 0 -> 2565 bytes .../redis/template/RedisRepository.class | Bin 0 -> 18241 bytes .../common/service/ISuperService.class | Bin 0 -> 6027 bytes .../service/impl/SuperServiceImpl.class | Bin 0 -> 6115 bytes .../com/metalloop/common/utils/IPHelper.class | Bin 0 -> 2035 bytes ...ryWrapperBuilder$CachedColumnResults.class | Bin 0 -> 3777 bytes .../QueryWrapperBuilder$QueryStrategy.class | Bin 0 -> 1530 bytes .../common/utils/QueryWrapperBuilder.class | Bin 0 -> 14741 bytes .../com/metalloop/common/utils/RsaUtils.class | Bin 0 -> 3032 bytes .../metalloop/common/utils/SpringUtil.class | Bin 0 -> 1697 bytes .../common/utils/json/JsonUtils.class | Bin 0 -> 5556 bytes .../satoken/SaTokenInterceptorConfig.class | Bin 0 -> 2800 bytes .../framework/satoken/StpInterfaceImpl.class | Bin 0 -> 1279 bytes .../satoken/admin/StpAdminUtil.class | Bin 0 -> 14609 bytes .../config/SaTokenAdminConfiguration.class | Bin 0 -> 1444 bytes .../admin/config/SaTokenAdminProperties.class | Bin 0 -> 10365 bytes .../framework/satoken/self/StpSelfUtil.class | Bin 0 -> 14603 bytes .../config/SaTokenSelfConfiguration.class | Bin 0 -> 1432 bytes .../self/config/SaTokenSelfProperties.class | Bin 0 -> 10347 bytes .../framework/swagger/OpenApiConfig.class | Bin 0 -> 2498 bytes .../auth/controller/AuthController.class | Bin 0 -> 10285 bytes .../controller/RsaPublicKeyController.class | Bin 0 -> 2015 bytes .../converter/SysEnterpriseConverter.class | Bin 0 -> 1574 bytes .../SysEnterpriseConverterImpl.class | Bin 0 -> 6443 bytes .../SysEnterpriseImageConverter.class | Bin 0 -> 1664 bytes .../SysEnterpriseImageConverterImpl.class | Bin 0 -> 4361 bytes .../converter/SysPermissionConverter.class | Bin 0 -> 1574 bytes .../SysPermissionConverterImpl.class | Bin 0 -> 5527 bytes .../auth/converter/SysRoleConverter.class | Bin 0 -> 1466 bytes .../auth/converter/SysRoleConverterImpl.class | Bin 0 -> 4560 bytes .../SysRolePermissionConverter.class | Bin 0 -> 1646 bytes .../SysRolePermissionConverterImpl.class | Bin 0 -> 3923 bytes .../auth/converter/SysUserConverter.class | Bin 0 -> 1466 bytes .../auth/converter/SysUserConverterImpl.class | Bin 0 -> 4393 bytes .../auth/converter/SysUserRoleConverter.class | Bin 0 -> 1538 bytes .../converter/SysUserRoleConverterImpl.class | Bin 0 -> 3905 bytes .../mapper/SysEnterpriseImageMapper.class | Bin 0 -> 447 bytes .../auth/mapper/SysEnterpriseMapper.class | Bin 0 -> 432 bytes .../auth/mapper/SysPermissionMapper.class | Bin 0 -> 432 bytes .../modules/auth/mapper/SysRoleMapper.class | Bin 0 -> 414 bytes .../auth/mapper/SysRolePermissionMapper.class | Bin 0 -> 444 bytes .../modules/auth/mapper/SysUserMapper.class | Bin 0 -> 414 bytes .../auth/mapper/SysUserRoleMapper.class | Bin 0 -> 426 bytes .../SysEnterprise$SysEnterpriseBuilder.class | Bin 0 -> 6968 bytes .../modules/auth/model/po/SysEnterprise.class | Bin 0 -> 18978 bytes ...priseImage$SysEnterpriseImageBuilder.class | Bin 0 -> 3028 bytes .../auth/model/po/SysEnterpriseImage.class | Bin 0 -> 5673 bytes .../SysPermission$SysPermissionBuilder.class | Bin 0 -> 5414 bytes .../modules/auth/model/po/SysPermission.class | Bin 0 -> 13450 bytes .../model/po/SysRole$SysRoleBuilder.class | Bin 0 -> 3845 bytes .../modules/auth/model/po/SysRole.class | Bin 0 -> 9142 bytes ...ePermission$SysRolePermissionBuilder.class | Bin 0 -> 2022 bytes .../auth/model/po/SysRolePermission.class | Bin 0 -> 3994 bytes .../model/po/SysUser$SysUserBuilder.class | Bin 0 -> 3572 bytes .../modules/auth/model/po/SysUser.class | Bin 0 -> 7775 bytes .../po/SysUserRole$SysUserRoleBuilder.class | Bin 0 -> 2451 bytes .../modules/auth/model/po/SysUserRole.class | Bin 0 -> 4747 bytes ...Query$SysEnterpriseImageQueryBuilder.class | Bin 0 -> 3155 bytes .../model/query/SysEnterpriseImageQuery.class | Bin 0 -> 5471 bytes ...priseQuery$SysEnterpriseQueryBuilder.class | Bin 0 -> 7095 bytes .../auth/model/query/SysEnterpriseQuery.class | Bin 0 -> 18759 bytes ...ssionQuery$SysPermissionQueryBuilder.class | Bin 0 -> 5541 bytes .../auth/model/query/SysPermissionQuery.class | Bin 0 -> 13224 bytes ...nQuery$SysRolePermissionQueryBuilder.class | Bin 0 -> 2097 bytes .../model/query/SysRolePermissionQuery.class | Bin 0 -> 3866 bytes .../SysRoleQuery$SysRoleQueryBuilder.class | Bin 0 -> 3959 bytes .../auth/model/query/SysRoleQuery.class | Bin 0 -> 8915 bytes .../SysUserQuery$SysUserQueryBuilder.class | Bin 0 -> 3699 bytes .../auth/model/query/SysUserQuery.class | Bin 0 -> 7658 bytes ...serRoleQuery$SysUserRoleQueryBuilder.class | Bin 0 -> 2552 bytes .../auth/model/query/SysUserRoleQuery.class | Bin 0 -> 4552 bytes .../model/req/AuthenticationRequest.class | Bin 0 -> 3165 bytes ...priseImageLockConditionReqDtoBuilder.class | Bin 0 -> 2961 bytes ...ysEnterpriseImageLockConditionReqDto.class | Bin 0 -> 4376 bytes .../SysEnterpriseImagePageQueryReqDto.class | Bin 0 -> 3580 bytes ...SysEnterpriseImageQueryReqDtoBuilder.class | Bin 0 -> 3257 bytes .../req/SysEnterpriseImageQueryReqDto.class | Bin 0 -> 5363 bytes ...qDto$SysEnterpriseImageReqDtoBuilder.class | Bin 0 -> 3157 bytes .../model/req/SysEnterpriseImageReqDto.class | Bin 0 -> 5312 bytes ...priseImageUpdateByQueryReqDtoBuilder.class | Bin 0 -> 2639 bytes ...ysEnterpriseImageUpdateByQueryReqDto.class | Bin 0 -> 3907 bytes ...EnterpriseLockConditionReqDtoBuilder.class | Bin 0 -> 2856 bytes .../SysEnterpriseLockConditionReqDto.class | Bin 0 -> 4283 bytes .../req/SysEnterprisePageQueryReqDto.class | Bin 0 -> 3552 bytes ...qDto$SysEnterpriseQueryReqDtoBuilder.class | Bin 0 -> 7197 bytes .../model/req/SysEnterpriseQueryReqDto.class | Bin 0 -> 18168 bytes ...iseReqDto$SysEnterpriseReqDtoBuilder.class | Bin 0 -> 7097 bytes .../auth/model/req/SysEnterpriseReqDto.class | Bin 0 -> 18117 bytes ...EnterpriseUpdateByQueryReqDtoBuilder.class | Bin 0 -> 2539 bytes .../SysEnterpriseUpdateByQueryReqDto.class | Bin 0 -> 3816 bytes ...PermissionLockConditionReqDtoBuilder.class | Bin 0 -> 2856 bytes .../SysPermissionLockConditionReqDto.class | Bin 0 -> 4274 bytes .../req/SysPermissionPageQueryReqDto.class | Bin 0 -> 3543 bytes ...qDto$SysPermissionQueryReqDtoBuilder.class | Bin 0 -> 5643 bytes .../model/req/SysPermissionQueryReqDto.class | Bin 0 -> 12930 bytes ...ionReqDto$SysPermissionReqDtoBuilder.class | Bin 0 -> 5543 bytes .../auth/model/req/SysPermissionReqDto.class | Bin 0 -> 12879 bytes ...PermissionUpdateByQueryReqDtoBuilder.class | Bin 0 -> 2539 bytes .../SysPermissionUpdateByQueryReqDto.class | Bin 0 -> 3798 bytes ...to$SysRoleLockConditionReqDtoBuilder.class | Bin 0 -> 2730 bytes .../req/SysRoleLockConditionReqDto.class | Bin 0 -> 4166 bytes .../model/req/SysRolePageQueryReqDto.class | Bin 0 -> 3513 bytes ...PermissionLockConditionReqDtoBuilder.class | Bin 0 -> 2940 bytes ...SysRolePermissionLockConditionReqDto.class | Bin 0 -> 4359 bytes .../SysRolePermissionPageQueryReqDto.class | Bin 0 -> 3576 bytes ...$SysRolePermissionQueryReqDtoBuilder.class | Bin 0 -> 2159 bytes .../req/SysRolePermissionQueryReqDto.class | Bin 0 -> 3804 bytes ...eqDto$SysRolePermissionReqDtoBuilder.class | Bin 0 -> 2099 bytes .../model/req/SysRolePermissionReqDto.class | Bin 0 -> 3753 bytes ...PermissionUpdateByQueryReqDtoBuilder.class | Bin 0 -> 2619 bytes ...SysRolePermissionUpdateByQueryReqDto.class | Bin 0 -> 3892 bytes ...ueryReqDto$SysRoleQueryReqDtoBuilder.class | Bin 0 -> 4051 bytes .../auth/model/req/SysRoleQueryReqDto.class | Bin 0 -> 8724 bytes .../SysRoleReqDto$SysRoleReqDtoBuilder.class | Bin 0 -> 3961 bytes .../auth/model/req/SysRoleReqDto.class | Bin 0 -> 8673 bytes ...to$SysRoleUpdateByQueryReqDtoBuilder.class | Bin 0 -> 2419 bytes .../req/SysRoleUpdateByQueryReqDto.class | Bin 0 -> 3696 bytes ...to$SysUserLockConditionReqDtoBuilder.class | Bin 0 -> 2730 bytes .../req/SysUserLockConditionReqDto.class | Bin 0 -> 4166 bytes .../model/req/SysUserPageQueryReqDto.class | Bin 0 -> 3513 bytes ...ueryReqDto$SysUserQueryReqDtoBuilder.class | Bin 0 -> 3801 bytes .../auth/model/req/SysUserQueryReqDto.class | Bin 0 -> 7513 bytes .../SysUserReqDto$SysUserReqDtoBuilder.class | Bin 0 -> 3701 bytes .../auth/model/req/SysUserReqDto.class | Bin 0 -> 7462 bytes ...ysUserRoleLockConditionReqDtoBuilder.class | Bin 0 -> 2814 bytes .../req/SysUserRoleLockConditionReqDto.class | Bin 0 -> 4253 bytes .../req/SysUserRolePageQueryReqDto.class | Bin 0 -> 3548 bytes ...ReqDto$SysUserRoleQueryReqDtoBuilder.class | Bin 0 -> 2634 bytes .../model/req/SysUserRoleQueryReqDto.class | Bin 0 -> 4474 bytes ...rRoleReqDto$SysUserRoleReqDtoBuilder.class | Bin 0 -> 2554 bytes .../auth/model/req/SysUserRoleReqDto.class | Bin 0 -> 4423 bytes ...ysUserRoleUpdateByQueryReqDtoBuilder.class | Bin 0 -> 2499 bytes .../req/SysUserRoleUpdateByQueryReqDto.class | Bin 0 -> 3794 bytes ...to$SysUserUpdateByQueryReqDtoBuilder.class | Bin 0 -> 2419 bytes .../req/SysUserUpdateByQueryReqDto.class | Bin 0 -> 3696 bytes .../model/resp/AuthenticationResponse.class | Bin 0 -> 2933 bytes ...Dto$SysEnterpriseImageRespDtoBuilder.class | Bin 0 -> 3186 bytes .../resp/SysEnterpriseImageRespDto.class | Bin 0 -> 5325 bytes ...eRespDto$SysEnterpriseRespDtoBuilder.class | Bin 0 -> 7126 bytes .../model/resp/SysEnterpriseRespDto.class | Bin 0 -> 18130 bytes ...nRespDto$SysPermissionRespDtoBuilder.class | Bin 0 -> 5572 bytes .../model/resp/SysPermissionRespDto.class | Bin 0 -> 12892 bytes ...pDto$SysRolePermissionRespDtoBuilder.class | Bin 0 -> 2116 bytes .../model/resp/SysRolePermissionRespDto.class | Bin 0 -> 3766 bytes ...SysRoleRespDto$SysRoleRespDtoBuilder.class | Bin 0 -> 3987 bytes .../auth/model/resp/SysRoleRespDto.class | Bin 0 -> 8686 bytes ...SysUserRespDto$SysUserRespDtoBuilder.class | Bin 0 -> 3730 bytes .../auth/model/resp/SysUserRespDto.class | Bin 0 -> 7475 bytes ...oleRespDto$SysUserRoleRespDtoBuilder.class | Bin 0 -> 2577 bytes .../auth/model/resp/SysUserRoleRespDto.class | Bin 0 -> 4436 bytes .../service/SysEnterpriseImageService.class | Bin 0 -> 4350 bytes .../auth/service/SysEnterpriseService.class | Bin 0 -> 4180 bytes .../auth/service/SysPermissionService.class | Bin 0 -> 4180 bytes .../service/SysRolePermissionService.class | Bin 0 -> 4316 bytes .../modules/auth/service/SysRoleService.class | Bin 0 -> 3976 bytes .../auth/service/SysUserRoleService.class | Bin 0 -> 4112 bytes .../modules/auth/service/SysUserService.class | Bin 0 -> 3976 bytes .../impl/SysEnterpriseImageServiceImpl.class | Bin 0 -> 10515 bytes .../impl/SysEnterpriseServiceImpl.class | Bin 0 -> 10275 bytes .../impl/SysPermissionServiceImpl.class | Bin 0 -> 10275 bytes .../impl/SysRolePermissionServiceImpl.class | Bin 0 -> 10467 bytes .../service/impl/SysRoleServiceImpl.class | Bin 0 -> 9987 bytes .../service/impl/SysUserRoleServiceImpl.class | Bin 0 -> 10179 bytes .../service/impl/SysUserServiceImpl.class | Bin 0 -> 9987 bytes .../BizEnterpriseProductConverter.class | Bin 0 -> 1760 bytes .../BizEnterpriseProductConverterImpl.class | Bin 0 -> 5085 bytes .../converter/BizMaterialConverter.class | Bin 0 -> 1598 bytes .../converter/BizMaterialConverterImpl.class | Bin 0 -> 4277 bytes .../BizPurchaseRequestConverter.class | Bin 0 -> 1724 bytes .../BizPurchaseRequestConverterImpl.class | Bin 0 -> 6835 bytes .../converter/BizSupplyInfoConverter.class | Bin 0 -> 1634 bytes .../BizSupplyInfoConverterImpl.class | Bin 0 -> 6553 bytes .../converter/BizVarietyConverter.class | Bin 0 -> 1580 bytes .../converter/BizVarietyConverterImpl.class | Bin 0 -> 4757 bytes .../mapper/BizEnterpriseProductMapper.class | Bin 0 -> 463 bytes .../bussiness/mapper/BizMaterialMapper.class | Bin 0 -> 436 bytes .../mapper/BizPurchaseRequestMapper.class | Bin 0 -> 457 bytes .../mapper/BizSupplyInfoMapper.class | Bin 0 -> 442 bytes .../bussiness/mapper/BizVarietyMapper.class | Bin 0 -> 433 bytes ...eProduct$BizEnterpriseProductBuilder.class | Bin 0 -> 4085 bytes .../model/po/BizEnterpriseProduct.class | Bin 0 -> 8707 bytes .../po/BizMaterial$BizMaterialBuilder.class | Bin 0 -> 2903 bytes .../bussiness/model/po/BizMaterial.class | Bin 0 -> 6029 bytes ...aseRequest$BizPurchaseRequestBuilder.class | Bin 0 -> 7299 bytes .../model/po/BizPurchaseRequest.class | Bin 0 -> 19733 bytes .../BizSupplyInfo$BizSupplyInfoBuilder.class | Bin 0 -> 6997 bytes .../bussiness/model/po/BizSupplyInfo.class | Bin 0 -> 18734 bytes .../po/BizVariety$BizVarietyBuilder.class | Bin 0 -> 3893 bytes .../bussiness/model/po/BizVariety.class | Bin 0 -> 8540 bytes ...ery$BizEnterpriseProductQueryBuilder.class | Bin 0 -> 4212 bytes .../query/BizEnterpriseProductQuery.class | Bin 0 -> 8480 bytes ...aterialQuery$BizMaterialQueryBuilder.class | Bin 0 -> 3004 bytes .../model/query/BizMaterialQuery.class | Bin 0 -> 5812 bytes ...Query$BizPurchaseRequestQueryBuilder.class | Bin 0 -> 7426 bytes .../model/query/BizPurchaseRequestQuery.class | Bin 0 -> 19508 bytes ...yInfoQuery$BizSupplyInfoQueryBuilder.class | Bin 0 -> 7124 bytes .../model/query/BizSupplyInfoQuery.class | Bin 0 -> 18514 bytes ...zVarietyQuery$BizVarietyQueryBuilder.class | Bin 0 -> 4020 bytes .../model/query/BizVarietyQuery.class | Bin 0 -> 8324 bytes ...iseProductLockConditionReqDtoBuilder.class | Bin 0 -> 3063 bytes ...EnterpriseProductLockConditionReqDto.class | Bin 0 -> 4477 bytes .../BizEnterpriseProductPageQueryReqDto.class | Bin 0 -> 3605 bytes ...zEnterpriseProductQueryReqDtoBuilder.class | Bin 0 -> 4314 bytes .../req/BizEnterpriseProductQueryReqDto.class | Bin 0 -> 8297 bytes ...to$BizEnterpriseProductReqDtoBuilder.class | Bin 0 -> 4214 bytes .../req/BizEnterpriseProductReqDto.class | Bin 0 -> 8246 bytes ...iseProductUpdateByQueryReqDtoBuilder.class | Bin 0 -> 2739 bytes ...EnterpriseProductUpdateByQueryReqDto.class | Bin 0 -> 4001 bytes ...izMaterialLockConditionReqDtoBuilder.class | Bin 0 -> 2874 bytes .../req/BizMaterialLockConditionReqDto.class | Bin 0 -> 4316 bytes .../req/BizMaterialPageQueryReqDto.class | Bin 0 -> 3561 bytes ...ReqDto$BizMaterialQueryReqDtoBuilder.class | Bin 0 -> 3086 bytes .../model/req/BizMaterialQueryReqDto.class | Bin 0 -> 5689 bytes ...erialReqDto$BizMaterialReqDtoBuilder.class | Bin 0 -> 3006 bytes .../model/req/BizMaterialReqDto.class | Bin 0 -> 5638 bytes ...izMaterialUpdateByQueryReqDtoBuilder.class | Bin 0 -> 2559 bytes .../req/BizMaterialUpdateByQueryReqDto.class | Bin 0 -> 3850 bytes ...aseRequestLockConditionReqDtoBuilder.class | Bin 0 -> 3021 bytes ...izPurchaseRequestLockConditionReqDto.class | Bin 0 -> 4442 bytes .../BizPurchaseRequestPageQueryReqDto.class | Bin 0 -> 3596 bytes ...BizPurchaseRequestQueryReqDtoBuilder.class | Bin 0 -> 7528 bytes .../req/BizPurchaseRequestQueryReqDto.class | Bin 0 -> 18936 bytes ...qDto$BizPurchaseRequestReqDtoBuilder.class | Bin 0 -> 7428 bytes .../model/req/BizPurchaseRequestReqDto.class | Bin 0 -> 18885 bytes ...aseRequestUpdateByQueryReqDtoBuilder.class | Bin 0 -> 2699 bytes ...izPurchaseRequestUpdateByQueryReqDto.class | Bin 0 -> 3969 bytes ...SupplyInfoLockConditionReqDtoBuilder.class | Bin 0 -> 2916 bytes .../BizSupplyInfoLockConditionReqDto.class | Bin 0 -> 4352 bytes .../req/BizSupplyInfoPageQueryReqDto.class | Bin 0 -> 3571 bytes ...qDto$BizSupplyInfoQueryReqDtoBuilder.class | Bin 0 -> 7226 bytes .../model/req/BizSupplyInfoQueryReqDto.class | Bin 0 -> 17967 bytes ...nfoReqDto$BizSupplyInfoReqDtoBuilder.class | Bin 0 -> 7126 bytes .../model/req/BizSupplyInfoReqDto.class | Bin 0 -> 17916 bytes ...SupplyInfoUpdateByQueryReqDtoBuilder.class | Bin 0 -> 2599 bytes .../BizSupplyInfoUpdateByQueryReqDto.class | Bin 0 -> 3884 bytes ...BizVarietyLockConditionReqDtoBuilder.class | Bin 0 -> 2853 bytes .../req/BizVarietyLockConditionReqDto.class | Bin 0 -> 4298 bytes .../model/req/BizVarietyPageQueryReqDto.class | Bin 0 -> 3556 bytes ...yReqDto$BizVarietyQueryReqDtoBuilder.class | Bin 0 -> 4122 bytes .../model/req/BizVarietyQueryReqDto.class | Bin 0 -> 8135 bytes ...arietyReqDto$BizVarietyReqDtoBuilder.class | Bin 0 -> 4022 bytes .../model/req/BizVarietyReqDto.class | Bin 0 -> 8084 bytes ...BizVarietyUpdateByQueryReqDtoBuilder.class | Bin 0 -> 2539 bytes .../req/BizVarietyUpdateByQueryReqDto.class | Bin 0 -> 3833 bytes ...o$BizEnterpriseProductRespDtoBuilder.class | Bin 0 -> 4243 bytes .../resp/BizEnterpriseProductRespDto.class | Bin 0 -> 8259 bytes ...ialRespDto$BizMaterialRespDtoBuilder.class | Bin 0 -> 3029 bytes .../model/resp/BizMaterialRespDto.class | Bin 0 -> 5651 bytes ...Dto$BizPurchaseRequestRespDtoBuilder.class | Bin 0 -> 7457 bytes .../resp/BizPurchaseRequestRespDto.class | Bin 0 -> 18898 bytes ...oRespDto$BizSupplyInfoRespDtoBuilder.class | Bin 0 -> 7155 bytes .../model/resp/BizSupplyInfoRespDto.class | Bin 0 -> 17929 bytes ...ietyRespDto$BizVarietyRespDtoBuilder.class | Bin 0 -> 4051 bytes .../model/resp/BizVarietyRespDto.class | Bin 0 -> 8097 bytes .../service/BizEnterpriseProductService.class | Bin 0 -> 4573 bytes .../service/BizMaterialService.class | Bin 0 -> 4267 bytes .../service/BizPurchaseRequestService.class | Bin 0 -> 4505 bytes .../service/BizSupplyInfoService.class | Bin 0 -> 4335 bytes .../bussiness/service/BizVarietyService.class | Bin 0 -> 4233 bytes .../BizEnterpriseProductServiceImpl.class | Bin 0 -> 10831 bytes .../service/impl/BizMaterialServiceImpl.class | Bin 0 -> 10399 bytes .../impl/BizPurchaseRequestServiceImpl.class | Bin 0 -> 10735 bytes .../impl/BizSupplyInfoServiceImpl.class | Bin 0 -> 10495 bytes .../service/impl/BizVarietyServiceImpl.class | Bin 0 -> 10351 bytes target/classes/main/resources/application.yml | 52 + .../mapper/BizEnterpriseProductMapper.xml | 32 + .../resources/mapper/BizMaterialMapper.xml | 24 + .../mapper/BizPurchaseRequestMapper.xml | 64 + .../resources/mapper/BizSupplyInfoMapper.xml | 62 + .../resources/mapper/BizVarietyMapper.xml | 32 + .../mapper/SysEnterpriseImageMapper.xml | 22 + .../resources/mapper/SysEnterpriseMapper.xml | 62 + .../resources/mapper/SysPermissionMapper.xml | 48 + .../main/resources/mapper/SysRoleMapper.xml | 34 + .../mapper/SysRolePermissionMapper.xml | 18 + .../main/resources/mapper/SysUserMapper.xml | 30 + .../resources/mapper/SysUserRoleMapper.xml | 20 + .../mapper/BizEnterpriseProductMapper.xml | 32 + target/classes/mapper/BizMaterialMapper.xml | 24 + .../mapper/BizPurchaseRequestMapper.xml | 64 + target/classes/mapper/BizSupplyInfoMapper.xml | 62 + target/classes/mapper/BizVarietyMapper.xml | 32 + .../mapper/SysEnterpriseImageMapper.xml | 22 + target/classes/mapper/SysEnterpriseMapper.xml | 62 + target/classes/mapper/SysPermissionMapper.xml | 48 + target/classes/mapper/SysRoleMapper.xml | 34 + .../mapper/SysRolePermissionMapper.xml | 18 + target/classes/mapper/SysUserMapper.xml | 30 + target/classes/mapper/SysUserRoleMapper.xml | 20 + .../converter/SysEnterpriseConverterImpl.java | 157 +++ .../SysEnterpriseImageConverterImpl.java | 97 ++ .../converter/SysPermissionConverterImpl.java | 136 ++ .../auth/converter/SysRoleConverterImpl.java | 115 ++ .../SysRolePermissionConverterImpl.java | 91 ++ .../auth/converter/SysUserConverterImpl.java | 109 ++ .../converter/SysUserRoleConverterImpl.java | 94 ++ .../BizEnterpriseProductConverterImpl.java | 112 ++ .../converter/BizMaterialConverterImpl.java | 100 ++ .../BizPurchaseRequestConverterImpl.java | 160 +++ .../converter/BizSupplyInfoConverterImpl.java | 157 +++ .../converter/BizVarietyConverterImpl.java | 112 ++ 622 files changed, 26659 insertions(+) create mode 100644 .gitignore create mode 100644 .idea/.gitignore create mode 100644 .idea/compiler.xml create mode 100644 .idea/encodings.xml create mode 100644 .idea/jarRepositories.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/vcs.xml create mode 100644 README.md create mode 100644 metaloop.iml create mode 100644 pom.xml create mode 100644 src/Main.java create mode 100644 src/main/java/com/metalloop/Application.java create mode 100644 src/main/java/com/metalloop/common/auth/Authentication.java create mode 100644 src/main/java/com/metalloop/common/auth/config/AuthServerConfiguration.java create mode 100644 src/main/java/com/metalloop/common/auth/config/AuthServerConfigurer.java create mode 100644 src/main/java/com/metalloop/common/auth/config/AuthServerConfigurerAdapter.java create mode 100644 src/main/java/com/metalloop/common/auth/config/AuthServerEndpointsConfigurer.java create mode 100644 src/main/java/com/metalloop/common/auth/config/EnableAuthServer.java create mode 100644 src/main/java/com/metalloop/common/auth/encrypt/KeyProperties.java create mode 100644 src/main/java/com/metalloop/common/auth/encrypt/KeyStoreKeyFactory.java create mode 100644 src/main/java/com/metalloop/common/auth/handler/DefaultLoginSuccessHandler.java create mode 100644 src/main/java/com/metalloop/common/auth/handler/DefaultLogoutSuccessHandler.java create mode 100644 src/main/java/com/metalloop/common/auth/handler/DefaultPasswordCheckFailureHandler.java create mode 100644 src/main/java/com/metalloop/common/auth/handler/DefaultVerifyCodeHandler.java create mode 100644 src/main/java/com/metalloop/common/auth/handler/LoginSuccessHandler.java create mode 100644 src/main/java/com/metalloop/common/auth/handler/LogoutSuccessHandler.java create mode 100644 src/main/java/com/metalloop/common/auth/handler/PasswordCheckFailureHandler.java create mode 100644 src/main/java/com/metalloop/common/auth/handler/VerifyCodeHandler.java create mode 100644 src/main/java/com/metalloop/common/auth/model/AuthenticationMiniAppRequest.java create mode 100644 src/main/java/com/metalloop/common/auth/model/AuthenticationRequest.java create mode 100644 src/main/java/com/metalloop/common/auth/model/AuthenticationResponse.java create mode 100644 src/main/java/com/metalloop/common/auth/password/PasswordDecryptor.java create mode 100644 src/main/java/com/metalloop/common/auth/password/RsaPasswordDecryptor.java create mode 100644 src/main/java/com/metalloop/common/auth/permission/Permission.java create mode 100644 src/main/java/com/metalloop/common/auth/permission/PermissionService.java create mode 100644 src/main/java/com/metalloop/common/auth/permission/SimplePermission.java create mode 100644 src/main/java/com/metalloop/common/auth/sso/SsoCodeService.java create mode 100644 src/main/java/com/metalloop/common/auth/sso/model/SimpleSsoUserInfo.java create mode 100644 src/main/java/com/metalloop/common/auth/sso/model/SsoUserInfo.java create mode 100644 src/main/java/com/metalloop/common/auth/userdetails/SimpleUserDetails.java create mode 100644 src/main/java/com/metalloop/common/auth/userdetails/UserDetails.java create mode 100644 src/main/java/com/metalloop/common/auth/userdetails/UserDetailsService.java create mode 100644 src/main/java/com/metalloop/common/constant/CommonConstant.java create mode 100644 src/main/java/com/metalloop/common/constant/SecurityConstants.java create mode 100644 src/main/java/com/metalloop/common/core/lock/DistributedLock.java create mode 100644 src/main/java/com/metalloop/common/core/lock/Lock.java create mode 100644 src/main/java/com/metalloop/common/core/lock/LockAspect.java create mode 100644 src/main/java/com/metalloop/common/core/lock/LockCondition.java create mode 100644 src/main/java/com/metalloop/common/core/lock/LockConditionReqDto.java create mode 100644 src/main/java/com/metalloop/common/core/lock/ZLock.java create mode 100644 src/main/java/com/metalloop/common/enums/Direction.java create mode 100644 src/main/java/com/metalloop/common/enums/LoginType.java create mode 100644 src/main/java/com/metalloop/common/exception/AccountExpiredException.java create mode 100644 src/main/java/com/metalloop/common/exception/AccountStatusException.java create mode 100644 src/main/java/com/metalloop/common/exception/AuthenticationException.java create mode 100644 src/main/java/com/metalloop/common/exception/BadCredentialsException.java create mode 100644 src/main/java/com/metalloop/common/exception/BusinessException.java create mode 100644 src/main/java/com/metalloop/common/exception/CredentialsExpiredException.java create mode 100644 src/main/java/com/metalloop/common/exception/DefaultExceptionAdvice.java create mode 100644 src/main/java/com/metalloop/common/exception/DisabledException.java create mode 100644 src/main/java/com/metalloop/common/exception/IdempotencyException.java create mode 100644 src/main/java/com/metalloop/common/exception/LockException.java create mode 100644 src/main/java/com/metalloop/common/exception/LockedException.java create mode 100644 src/main/java/com/metalloop/common/exception/UsernameNotFoundException.java create mode 100644 src/main/java/com/metalloop/common/exception/ValidationFailedException.java create mode 100644 src/main/java/com/metalloop/common/exception/code/CodeMsg.java create mode 100644 src/main/java/com/metalloop/common/exception/code/ResponseCode.java create mode 100644 src/main/java/com/metalloop/common/exception/model/ApiErrorLog.java create mode 100644 src/main/java/com/metalloop/common/model/Result.java create mode 100644 src/main/java/com/metalloop/common/redis/RedisAutoConfigure.java create mode 100644 src/main/java/com/metalloop/common/redis/lock/RedissonDistributedLock.java create mode 100644 src/main/java/com/metalloop/common/redis/properties/CacheManagerProperties.java create mode 100644 src/main/java/com/metalloop/common/redis/properties/RedissonLockAutoConfiguration.java create mode 100644 src/main/java/com/metalloop/common/redis/template/RedisRepository.java create mode 100644 src/main/java/com/metalloop/common/service/ISuperService.java create mode 100644 src/main/java/com/metalloop/common/service/impl/SuperServiceImpl.java create mode 100644 src/main/java/com/metalloop/common/utils/IPHelper.java create mode 100644 src/main/java/com/metalloop/common/utils/QueryWrapperBuilder.java create mode 100644 src/main/java/com/metalloop/common/utils/RsaUtils.java create mode 100644 src/main/java/com/metalloop/common/utils/SpringUtil.java create mode 100644 src/main/java/com/metalloop/common/utils/json/JsonUtils.java create mode 100644 src/main/java/com/metalloop/framework/satoken/SaTokenInterceptorConfig.java create mode 100644 src/main/java/com/metalloop/framework/satoken/StpInterfaceImpl.java create mode 100644 src/main/java/com/metalloop/framework/satoken/admin/StpAdminUtil.java create mode 100644 src/main/java/com/metalloop/framework/satoken/admin/config/SaTokenAdminConfiguration.java create mode 100644 src/main/java/com/metalloop/framework/satoken/admin/config/SaTokenAdminProperties.java create mode 100644 src/main/java/com/metalloop/framework/satoken/self/StpSelfUtil.java create mode 100644 src/main/java/com/metalloop/framework/satoken/self/config/SaTokenSelfConfiguration.java create mode 100644 src/main/java/com/metalloop/framework/satoken/self/config/SaTokenSelfProperties.java create mode 100644 src/main/java/com/metalloop/framework/swagger/OpenApiConfig.java create mode 100644 src/main/java/com/metalloop/modules/auth/controller/AuthController.java create mode 100644 src/main/java/com/metalloop/modules/auth/controller/RsaPublicKeyController.java create mode 100644 src/main/java/com/metalloop/modules/auth/converter/SysEnterpriseConverter.java create mode 100644 src/main/java/com/metalloop/modules/auth/converter/SysEnterpriseImageConverter.java create mode 100644 src/main/java/com/metalloop/modules/auth/converter/SysPermissionConverter.java create mode 100644 src/main/java/com/metalloop/modules/auth/converter/SysRoleConverter.java create mode 100644 src/main/java/com/metalloop/modules/auth/converter/SysRolePermissionConverter.java create mode 100644 src/main/java/com/metalloop/modules/auth/converter/SysUserConverter.java create mode 100644 src/main/java/com/metalloop/modules/auth/converter/SysUserRoleConverter.java create mode 100644 src/main/java/com/metalloop/modules/auth/mapper/SysEnterpriseImageMapper.java create mode 100644 src/main/java/com/metalloop/modules/auth/mapper/SysEnterpriseMapper.java create mode 100644 src/main/java/com/metalloop/modules/auth/mapper/SysPermissionMapper.java create mode 100644 src/main/java/com/metalloop/modules/auth/mapper/SysRoleMapper.java create mode 100644 src/main/java/com/metalloop/modules/auth/mapper/SysRolePermissionMapper.java create mode 100644 src/main/java/com/metalloop/modules/auth/mapper/SysUserMapper.java create mode 100644 src/main/java/com/metalloop/modules/auth/mapper/SysUserRoleMapper.java create mode 100644 src/main/java/com/metalloop/modules/auth/model/po/SysEnterprise.java create mode 100644 src/main/java/com/metalloop/modules/auth/model/po/SysEnterpriseImage.java create mode 100644 src/main/java/com/metalloop/modules/auth/model/po/SysPermission.java create mode 100644 src/main/java/com/metalloop/modules/auth/model/po/SysRole.java create mode 100644 src/main/java/com/metalloop/modules/auth/model/po/SysRolePermission.java create mode 100644 src/main/java/com/metalloop/modules/auth/model/po/SysUser.java create mode 100644 src/main/java/com/metalloop/modules/auth/model/po/SysUserRole.java create mode 100644 src/main/java/com/metalloop/modules/auth/model/query/SysEnterpriseImageQuery.java create mode 100644 src/main/java/com/metalloop/modules/auth/model/query/SysEnterpriseQuery.java create mode 100644 src/main/java/com/metalloop/modules/auth/model/query/SysPermissionQuery.java create mode 100644 src/main/java/com/metalloop/modules/auth/model/query/SysRolePermissionQuery.java create mode 100644 src/main/java/com/metalloop/modules/auth/model/query/SysRoleQuery.java create mode 100644 src/main/java/com/metalloop/modules/auth/model/query/SysUserQuery.java create mode 100644 src/main/java/com/metalloop/modules/auth/model/query/SysUserRoleQuery.java create mode 100644 src/main/java/com/metalloop/modules/auth/model/req/AuthenticationRequest.java create mode 100644 src/main/java/com/metalloop/modules/auth/model/req/SysEnterpriseImageLockConditionReqDto.java create mode 100644 src/main/java/com/metalloop/modules/auth/model/req/SysEnterpriseImagePageQueryReqDto.java create mode 100644 src/main/java/com/metalloop/modules/auth/model/req/SysEnterpriseImageQueryReqDto.java create mode 100644 src/main/java/com/metalloop/modules/auth/model/req/SysEnterpriseImageReqDto.java create mode 100644 src/main/java/com/metalloop/modules/auth/model/req/SysEnterpriseImageUpdateByQueryReqDto.java create mode 100644 src/main/java/com/metalloop/modules/auth/model/req/SysEnterpriseLockConditionReqDto.java create mode 100644 src/main/java/com/metalloop/modules/auth/model/req/SysEnterprisePageQueryReqDto.java create mode 100644 src/main/java/com/metalloop/modules/auth/model/req/SysEnterpriseQueryReqDto.java create mode 100644 src/main/java/com/metalloop/modules/auth/model/req/SysEnterpriseReqDto.java create mode 100644 src/main/java/com/metalloop/modules/auth/model/req/SysEnterpriseUpdateByQueryReqDto.java create mode 100644 src/main/java/com/metalloop/modules/auth/model/req/SysPermissionLockConditionReqDto.java create mode 100644 src/main/java/com/metalloop/modules/auth/model/req/SysPermissionPageQueryReqDto.java create mode 100644 src/main/java/com/metalloop/modules/auth/model/req/SysPermissionQueryReqDto.java create mode 100644 src/main/java/com/metalloop/modules/auth/model/req/SysPermissionReqDto.java create mode 100644 src/main/java/com/metalloop/modules/auth/model/req/SysPermissionUpdateByQueryReqDto.java create mode 100644 src/main/java/com/metalloop/modules/auth/model/req/SysRoleLockConditionReqDto.java create mode 100644 src/main/java/com/metalloop/modules/auth/model/req/SysRolePageQueryReqDto.java create mode 100644 src/main/java/com/metalloop/modules/auth/model/req/SysRolePermissionLockConditionReqDto.java create mode 100644 src/main/java/com/metalloop/modules/auth/model/req/SysRolePermissionPageQueryReqDto.java create mode 100644 src/main/java/com/metalloop/modules/auth/model/req/SysRolePermissionQueryReqDto.java create mode 100644 src/main/java/com/metalloop/modules/auth/model/req/SysRolePermissionReqDto.java create mode 100644 src/main/java/com/metalloop/modules/auth/model/req/SysRolePermissionUpdateByQueryReqDto.java create mode 100644 src/main/java/com/metalloop/modules/auth/model/req/SysRoleQueryReqDto.java create mode 100644 src/main/java/com/metalloop/modules/auth/model/req/SysRoleReqDto.java create mode 100644 src/main/java/com/metalloop/modules/auth/model/req/SysRoleUpdateByQueryReqDto.java create mode 100644 src/main/java/com/metalloop/modules/auth/model/req/SysUserLockConditionReqDto.java create mode 100644 src/main/java/com/metalloop/modules/auth/model/req/SysUserPageQueryReqDto.java create mode 100644 src/main/java/com/metalloop/modules/auth/model/req/SysUserQueryReqDto.java create mode 100644 src/main/java/com/metalloop/modules/auth/model/req/SysUserReqDto.java create mode 100644 src/main/java/com/metalloop/modules/auth/model/req/SysUserRoleLockConditionReqDto.java create mode 100644 src/main/java/com/metalloop/modules/auth/model/req/SysUserRolePageQueryReqDto.java create mode 100644 src/main/java/com/metalloop/modules/auth/model/req/SysUserRoleQueryReqDto.java create mode 100644 src/main/java/com/metalloop/modules/auth/model/req/SysUserRoleReqDto.java create mode 100644 src/main/java/com/metalloop/modules/auth/model/req/SysUserRoleUpdateByQueryReqDto.java create mode 100644 src/main/java/com/metalloop/modules/auth/model/req/SysUserUpdateByQueryReqDto.java create mode 100644 src/main/java/com/metalloop/modules/auth/model/resp/AuthenticationResponse.java create mode 100644 src/main/java/com/metalloop/modules/auth/model/resp/SysEnterpriseImageRespDto.java create mode 100644 src/main/java/com/metalloop/modules/auth/model/resp/SysEnterpriseRespDto.java create mode 100644 src/main/java/com/metalloop/modules/auth/model/resp/SysPermissionRespDto.java create mode 100644 src/main/java/com/metalloop/modules/auth/model/resp/SysRolePermissionRespDto.java create mode 100644 src/main/java/com/metalloop/modules/auth/model/resp/SysRoleRespDto.java create mode 100644 src/main/java/com/metalloop/modules/auth/model/resp/SysUserRespDto.java create mode 100644 src/main/java/com/metalloop/modules/auth/model/resp/SysUserRoleRespDto.java create mode 100644 src/main/java/com/metalloop/modules/auth/service/SysEnterpriseImageService.java create mode 100644 src/main/java/com/metalloop/modules/auth/service/SysEnterpriseService.java create mode 100644 src/main/java/com/metalloop/modules/auth/service/SysPermissionService.java create mode 100644 src/main/java/com/metalloop/modules/auth/service/SysRolePermissionService.java create mode 100644 src/main/java/com/metalloop/modules/auth/service/SysRoleService.java create mode 100644 src/main/java/com/metalloop/modules/auth/service/SysUserRoleService.java create mode 100644 src/main/java/com/metalloop/modules/auth/service/SysUserService.java create mode 100644 src/main/java/com/metalloop/modules/auth/service/impl/SysEnterpriseImageServiceImpl.java create mode 100644 src/main/java/com/metalloop/modules/auth/service/impl/SysEnterpriseServiceImpl.java create mode 100644 src/main/java/com/metalloop/modules/auth/service/impl/SysPermissionServiceImpl.java create mode 100644 src/main/java/com/metalloop/modules/auth/service/impl/SysRolePermissionServiceImpl.java create mode 100644 src/main/java/com/metalloop/modules/auth/service/impl/SysRoleServiceImpl.java create mode 100644 src/main/java/com/metalloop/modules/auth/service/impl/SysUserRoleServiceImpl.java create mode 100644 src/main/java/com/metalloop/modules/auth/service/impl/SysUserServiceImpl.java create mode 100644 src/main/java/com/metalloop/modules/bussiness/converter/BizEnterpriseProductConverter.java create mode 100644 src/main/java/com/metalloop/modules/bussiness/converter/BizMaterialConverter.java create mode 100644 src/main/java/com/metalloop/modules/bussiness/converter/BizPurchaseRequestConverter.java create mode 100644 src/main/java/com/metalloop/modules/bussiness/converter/BizSupplyInfoConverter.java create mode 100644 src/main/java/com/metalloop/modules/bussiness/converter/BizVarietyConverter.java create mode 100644 src/main/java/com/metalloop/modules/bussiness/mapper/BizEnterpriseProductMapper.java create mode 100644 src/main/java/com/metalloop/modules/bussiness/mapper/BizMaterialMapper.java create mode 100644 src/main/java/com/metalloop/modules/bussiness/mapper/BizPurchaseRequestMapper.java create mode 100644 src/main/java/com/metalloop/modules/bussiness/mapper/BizSupplyInfoMapper.java create mode 100644 src/main/java/com/metalloop/modules/bussiness/mapper/BizVarietyMapper.java create mode 100644 src/main/java/com/metalloop/modules/bussiness/model/po/BizEnterpriseProduct.java create mode 100644 src/main/java/com/metalloop/modules/bussiness/model/po/BizMaterial.java create mode 100644 src/main/java/com/metalloop/modules/bussiness/model/po/BizPurchaseRequest.java create mode 100644 src/main/java/com/metalloop/modules/bussiness/model/po/BizSupplyInfo.java create mode 100644 src/main/java/com/metalloop/modules/bussiness/model/po/BizVariety.java create mode 100644 src/main/java/com/metalloop/modules/bussiness/model/query/BizEnterpriseProductQuery.java create mode 100644 src/main/java/com/metalloop/modules/bussiness/model/query/BizMaterialQuery.java create mode 100644 src/main/java/com/metalloop/modules/bussiness/model/query/BizPurchaseRequestQuery.java create mode 100644 src/main/java/com/metalloop/modules/bussiness/model/query/BizSupplyInfoQuery.java create mode 100644 src/main/java/com/metalloop/modules/bussiness/model/query/BizVarietyQuery.java create mode 100644 src/main/java/com/metalloop/modules/bussiness/model/req/BizEnterpriseProductLockConditionReqDto.java create mode 100644 src/main/java/com/metalloop/modules/bussiness/model/req/BizEnterpriseProductPageQueryReqDto.java create mode 100644 src/main/java/com/metalloop/modules/bussiness/model/req/BizEnterpriseProductQueryReqDto.java create mode 100644 src/main/java/com/metalloop/modules/bussiness/model/req/BizEnterpriseProductReqDto.java create mode 100644 src/main/java/com/metalloop/modules/bussiness/model/req/BizEnterpriseProductUpdateByQueryReqDto.java create mode 100644 src/main/java/com/metalloop/modules/bussiness/model/req/BizMaterialLockConditionReqDto.java create mode 100644 src/main/java/com/metalloop/modules/bussiness/model/req/BizMaterialPageQueryReqDto.java create mode 100644 src/main/java/com/metalloop/modules/bussiness/model/req/BizMaterialQueryReqDto.java create mode 100644 src/main/java/com/metalloop/modules/bussiness/model/req/BizMaterialReqDto.java create mode 100644 src/main/java/com/metalloop/modules/bussiness/model/req/BizMaterialUpdateByQueryReqDto.java create mode 100644 src/main/java/com/metalloop/modules/bussiness/model/req/BizPurchaseRequestLockConditionReqDto.java create mode 100644 src/main/java/com/metalloop/modules/bussiness/model/req/BizPurchaseRequestPageQueryReqDto.java create mode 100644 src/main/java/com/metalloop/modules/bussiness/model/req/BizPurchaseRequestQueryReqDto.java create mode 100644 src/main/java/com/metalloop/modules/bussiness/model/req/BizPurchaseRequestReqDto.java create mode 100644 src/main/java/com/metalloop/modules/bussiness/model/req/BizPurchaseRequestUpdateByQueryReqDto.java create mode 100644 src/main/java/com/metalloop/modules/bussiness/model/req/BizSupplyInfoLockConditionReqDto.java create mode 100644 src/main/java/com/metalloop/modules/bussiness/model/req/BizSupplyInfoPageQueryReqDto.java create mode 100644 src/main/java/com/metalloop/modules/bussiness/model/req/BizSupplyInfoQueryReqDto.java create mode 100644 src/main/java/com/metalloop/modules/bussiness/model/req/BizSupplyInfoReqDto.java create mode 100644 src/main/java/com/metalloop/modules/bussiness/model/req/BizSupplyInfoUpdateByQueryReqDto.java create mode 100644 src/main/java/com/metalloop/modules/bussiness/model/req/BizVarietyLockConditionReqDto.java create mode 100644 src/main/java/com/metalloop/modules/bussiness/model/req/BizVarietyPageQueryReqDto.java create mode 100644 src/main/java/com/metalloop/modules/bussiness/model/req/BizVarietyQueryReqDto.java create mode 100644 src/main/java/com/metalloop/modules/bussiness/model/req/BizVarietyReqDto.java create mode 100644 src/main/java/com/metalloop/modules/bussiness/model/req/BizVarietyUpdateByQueryReqDto.java create mode 100644 src/main/java/com/metalloop/modules/bussiness/model/resp/BizEnterpriseProductRespDto.java create mode 100644 src/main/java/com/metalloop/modules/bussiness/model/resp/BizMaterialRespDto.java create mode 100644 src/main/java/com/metalloop/modules/bussiness/model/resp/BizPurchaseRequestRespDto.java create mode 100644 src/main/java/com/metalloop/modules/bussiness/model/resp/BizSupplyInfoRespDto.java create mode 100644 src/main/java/com/metalloop/modules/bussiness/model/resp/BizVarietyRespDto.java create mode 100644 src/main/java/com/metalloop/modules/bussiness/service/BizEnterpriseProductService.java create mode 100644 src/main/java/com/metalloop/modules/bussiness/service/BizMaterialService.java create mode 100644 src/main/java/com/metalloop/modules/bussiness/service/BizPurchaseRequestService.java create mode 100644 src/main/java/com/metalloop/modules/bussiness/service/BizSupplyInfoService.java create mode 100644 src/main/java/com/metalloop/modules/bussiness/service/BizVarietyService.java create mode 100644 src/main/java/com/metalloop/modules/bussiness/service/impl/BizEnterpriseProductServiceImpl.java create mode 100644 src/main/java/com/metalloop/modules/bussiness/service/impl/BizMaterialServiceImpl.java create mode 100644 src/main/java/com/metalloop/modules/bussiness/service/impl/BizPurchaseRequestServiceImpl.java create mode 100644 src/main/java/com/metalloop/modules/bussiness/service/impl/BizSupplyInfoServiceImpl.java create mode 100644 src/main/java/com/metalloop/modules/bussiness/service/impl/BizVarietyServiceImpl.java create mode 100644 src/main/resources/application.yml create mode 100644 src/main/resources/mapper/BizEnterpriseProductMapper.xml create mode 100644 src/main/resources/mapper/BizMaterialMapper.xml create mode 100644 src/main/resources/mapper/BizPurchaseRequestMapper.xml create mode 100644 src/main/resources/mapper/BizSupplyInfoMapper.xml create mode 100644 src/main/resources/mapper/BizVarietyMapper.xml create mode 100644 src/main/resources/mapper/SysEnterpriseImageMapper.xml create mode 100644 src/main/resources/mapper/SysEnterpriseMapper.xml create mode 100644 src/main/resources/mapper/SysPermissionMapper.xml create mode 100644 src/main/resources/mapper/SysRoleMapper.xml create mode 100644 src/main/resources/mapper/SysRolePermissionMapper.xml create mode 100644 src/main/resources/mapper/SysUserMapper.xml create mode 100644 src/main/resources/mapper/SysUserRoleMapper.xml create mode 100644 target/classes/Main.class create mode 100644 target/classes/application.yml create mode 100644 target/classes/com/metalloop/Application.class create mode 100644 target/classes/com/metalloop/common/auth/Authentication$Builder.class create mode 100644 target/classes/com/metalloop/common/auth/Authentication.class create mode 100644 target/classes/com/metalloop/common/auth/config/AuthServerConfiguration.class create mode 100644 target/classes/com/metalloop/common/auth/config/AuthServerConfigurer.class create mode 100644 target/classes/com/metalloop/common/auth/config/AuthServerConfigurerAdapter.class create mode 100644 target/classes/com/metalloop/common/auth/config/AuthServerEndpointsConfigurer.class create mode 100644 target/classes/com/metalloop/common/auth/config/EnableAuthServer.class create mode 100644 target/classes/com/metalloop/common/auth/encrypt/KeyProperties$KeyStore.class create mode 100644 target/classes/com/metalloop/common/auth/encrypt/KeyProperties.class create mode 100644 target/classes/com/metalloop/common/auth/encrypt/KeyStoreKeyFactory.class create mode 100644 target/classes/com/metalloop/common/auth/handler/DefaultLoginSuccessHandler.class create mode 100644 target/classes/com/metalloop/common/auth/handler/DefaultLogoutSuccessHandler.class create mode 100644 target/classes/com/metalloop/common/auth/handler/DefaultPasswordCheckFailureHandler.class create mode 100644 target/classes/com/metalloop/common/auth/handler/DefaultVerifyCodeHandler.class create mode 100644 target/classes/com/metalloop/common/auth/handler/LoginSuccessHandler.class create mode 100644 target/classes/com/metalloop/common/auth/handler/LogoutSuccessHandler.class create mode 100644 target/classes/com/metalloop/common/auth/handler/PasswordCheckFailureHandler.class create mode 100644 target/classes/com/metalloop/common/auth/handler/VerifyCodeHandler.class create mode 100644 target/classes/com/metalloop/common/auth/model/AuthenticationMiniAppRequest.class create mode 100644 target/classes/com/metalloop/common/auth/model/AuthenticationRequest.class create mode 100644 target/classes/com/metalloop/common/auth/model/AuthenticationResponse.class create mode 100644 target/classes/com/metalloop/common/auth/password/PasswordDecryptor.class create mode 100644 target/classes/com/metalloop/common/auth/password/RsaPasswordDecryptor.class create mode 100644 target/classes/com/metalloop/common/auth/permission/Permission.class create mode 100644 target/classes/com/metalloop/common/auth/permission/PermissionService.class create mode 100644 target/classes/com/metalloop/common/auth/permission/SimplePermission.class create mode 100644 target/classes/com/metalloop/common/auth/sso/SsoCodeService.class create mode 100644 target/classes/com/metalloop/common/auth/sso/model/SimpleSsoUserInfo$Builder.class create mode 100644 target/classes/com/metalloop/common/auth/sso/model/SimpleSsoUserInfo.class create mode 100644 target/classes/com/metalloop/common/auth/sso/model/SsoUserInfo.class create mode 100644 target/classes/com/metalloop/common/auth/userdetails/SimpleUserDetails.class create mode 100644 target/classes/com/metalloop/common/auth/userdetails/UserDetails.class create mode 100644 target/classes/com/metalloop/common/auth/userdetails/UserDetailsService.class create mode 100644 target/classes/com/metalloop/common/constant/CommonConstant.class create mode 100644 target/classes/com/metalloop/common/constant/SecurityConstants.class create mode 100644 target/classes/com/metalloop/common/core/lock/DistributedLock.class create mode 100644 target/classes/com/metalloop/common/core/lock/Lock.class create mode 100644 target/classes/com/metalloop/common/core/lock/LockAspect.class create mode 100644 target/classes/com/metalloop/common/core/lock/LockCondition.class create mode 100644 target/classes/com/metalloop/common/core/lock/LockConditionReqDto$LockConditionReqDtoBuilder.class create mode 100644 target/classes/com/metalloop/common/core/lock/LockConditionReqDto.class create mode 100644 target/classes/com/metalloop/common/core/lock/ZLock.class create mode 100644 target/classes/com/metalloop/common/enums/Direction.class create mode 100644 target/classes/com/metalloop/common/enums/LoginType.class create mode 100644 target/classes/com/metalloop/common/exception/AccountExpiredException.class create mode 100644 target/classes/com/metalloop/common/exception/AccountStatusException.class create mode 100644 target/classes/com/metalloop/common/exception/AuthenticationException.class create mode 100644 target/classes/com/metalloop/common/exception/BadCredentialsException.class create mode 100644 target/classes/com/metalloop/common/exception/BusinessException.class create mode 100644 target/classes/com/metalloop/common/exception/CredentialsExpiredException.class create mode 100644 target/classes/com/metalloop/common/exception/DefaultExceptionAdvice.class create mode 100644 target/classes/com/metalloop/common/exception/DisabledException.class create mode 100644 target/classes/com/metalloop/common/exception/IdempotencyException.class create mode 100644 target/classes/com/metalloop/common/exception/LockException.class create mode 100644 target/classes/com/metalloop/common/exception/LockedException.class create mode 100644 target/classes/com/metalloop/common/exception/UsernameNotFoundException.class create mode 100644 target/classes/com/metalloop/common/exception/ValidationFailedException.class create mode 100644 target/classes/com/metalloop/common/exception/code/CodeMsg.class create mode 100644 target/classes/com/metalloop/common/exception/code/ResponseCode.class create mode 100644 target/classes/com/metalloop/common/exception/model/ApiErrorLog.class create mode 100644 target/classes/com/metalloop/common/model/Result.class create mode 100644 target/classes/com/metalloop/common/redis/RedisAutoConfigure.class create mode 100644 target/classes/com/metalloop/common/redis/lock/RedissonDistributedLock.class create mode 100644 target/classes/com/metalloop/common/redis/properties/CacheManagerProperties$CacheConfig.class create mode 100644 target/classes/com/metalloop/common/redis/properties/CacheManagerProperties.class create mode 100644 target/classes/com/metalloop/common/redis/properties/RedissonLockAutoConfiguration.class create mode 100644 target/classes/com/metalloop/common/redis/template/RedisRepository$1.class create mode 100644 target/classes/com/metalloop/common/redis/template/RedisRepository.class create mode 100644 target/classes/com/metalloop/common/service/ISuperService.class create mode 100644 target/classes/com/metalloop/common/service/impl/SuperServiceImpl.class create mode 100644 target/classes/com/metalloop/common/utils/IPHelper.class create mode 100644 target/classes/com/metalloop/common/utils/QueryWrapperBuilder$CachedColumnResults.class create mode 100644 target/classes/com/metalloop/common/utils/QueryWrapperBuilder$QueryStrategy.class create mode 100644 target/classes/com/metalloop/common/utils/QueryWrapperBuilder.class create mode 100644 target/classes/com/metalloop/common/utils/RsaUtils.class create mode 100644 target/classes/com/metalloop/common/utils/SpringUtil.class create mode 100644 target/classes/com/metalloop/common/utils/json/JsonUtils.class create mode 100644 target/classes/com/metalloop/framework/satoken/SaTokenInterceptorConfig.class create mode 100644 target/classes/com/metalloop/framework/satoken/StpInterfaceImpl.class create mode 100644 target/classes/com/metalloop/framework/satoken/admin/StpAdminUtil.class create mode 100644 target/classes/com/metalloop/framework/satoken/admin/config/SaTokenAdminConfiguration.class create mode 100644 target/classes/com/metalloop/framework/satoken/admin/config/SaTokenAdminProperties.class create mode 100644 target/classes/com/metalloop/framework/satoken/self/StpSelfUtil.class create mode 100644 target/classes/com/metalloop/framework/satoken/self/config/SaTokenSelfConfiguration.class create mode 100644 target/classes/com/metalloop/framework/satoken/self/config/SaTokenSelfProperties.class create mode 100644 target/classes/com/metalloop/framework/swagger/OpenApiConfig.class create mode 100644 target/classes/com/metalloop/modules/auth/controller/AuthController.class create mode 100644 target/classes/com/metalloop/modules/auth/controller/RsaPublicKeyController.class create mode 100644 target/classes/com/metalloop/modules/auth/converter/SysEnterpriseConverter.class create mode 100644 target/classes/com/metalloop/modules/auth/converter/SysEnterpriseConverterImpl.class create mode 100644 target/classes/com/metalloop/modules/auth/converter/SysEnterpriseImageConverter.class create mode 100644 target/classes/com/metalloop/modules/auth/converter/SysEnterpriseImageConverterImpl.class create mode 100644 target/classes/com/metalloop/modules/auth/converter/SysPermissionConverter.class create mode 100644 target/classes/com/metalloop/modules/auth/converter/SysPermissionConverterImpl.class create mode 100644 target/classes/com/metalloop/modules/auth/converter/SysRoleConverter.class create mode 100644 target/classes/com/metalloop/modules/auth/converter/SysRoleConverterImpl.class create mode 100644 target/classes/com/metalloop/modules/auth/converter/SysRolePermissionConverter.class create mode 100644 target/classes/com/metalloop/modules/auth/converter/SysRolePermissionConverterImpl.class create mode 100644 target/classes/com/metalloop/modules/auth/converter/SysUserConverter.class create mode 100644 target/classes/com/metalloop/modules/auth/converter/SysUserConverterImpl.class create mode 100644 target/classes/com/metalloop/modules/auth/converter/SysUserRoleConverter.class create mode 100644 target/classes/com/metalloop/modules/auth/converter/SysUserRoleConverterImpl.class create mode 100644 target/classes/com/metalloop/modules/auth/mapper/SysEnterpriseImageMapper.class create mode 100644 target/classes/com/metalloop/modules/auth/mapper/SysEnterpriseMapper.class create mode 100644 target/classes/com/metalloop/modules/auth/mapper/SysPermissionMapper.class create mode 100644 target/classes/com/metalloop/modules/auth/mapper/SysRoleMapper.class create mode 100644 target/classes/com/metalloop/modules/auth/mapper/SysRolePermissionMapper.class create mode 100644 target/classes/com/metalloop/modules/auth/mapper/SysUserMapper.class create mode 100644 target/classes/com/metalloop/modules/auth/mapper/SysUserRoleMapper.class create mode 100644 target/classes/com/metalloop/modules/auth/model/po/SysEnterprise$SysEnterpriseBuilder.class create mode 100644 target/classes/com/metalloop/modules/auth/model/po/SysEnterprise.class create mode 100644 target/classes/com/metalloop/modules/auth/model/po/SysEnterpriseImage$SysEnterpriseImageBuilder.class create mode 100644 target/classes/com/metalloop/modules/auth/model/po/SysEnterpriseImage.class create mode 100644 target/classes/com/metalloop/modules/auth/model/po/SysPermission$SysPermissionBuilder.class create mode 100644 target/classes/com/metalloop/modules/auth/model/po/SysPermission.class create mode 100644 target/classes/com/metalloop/modules/auth/model/po/SysRole$SysRoleBuilder.class create mode 100644 target/classes/com/metalloop/modules/auth/model/po/SysRole.class create mode 100644 target/classes/com/metalloop/modules/auth/model/po/SysRolePermission$SysRolePermissionBuilder.class create mode 100644 target/classes/com/metalloop/modules/auth/model/po/SysRolePermission.class create mode 100644 target/classes/com/metalloop/modules/auth/model/po/SysUser$SysUserBuilder.class create mode 100644 target/classes/com/metalloop/modules/auth/model/po/SysUser.class create mode 100644 target/classes/com/metalloop/modules/auth/model/po/SysUserRole$SysUserRoleBuilder.class create mode 100644 target/classes/com/metalloop/modules/auth/model/po/SysUserRole.class create mode 100644 target/classes/com/metalloop/modules/auth/model/query/SysEnterpriseImageQuery$SysEnterpriseImageQueryBuilder.class create mode 100644 target/classes/com/metalloop/modules/auth/model/query/SysEnterpriseImageQuery.class create mode 100644 target/classes/com/metalloop/modules/auth/model/query/SysEnterpriseQuery$SysEnterpriseQueryBuilder.class create mode 100644 target/classes/com/metalloop/modules/auth/model/query/SysEnterpriseQuery.class create mode 100644 target/classes/com/metalloop/modules/auth/model/query/SysPermissionQuery$SysPermissionQueryBuilder.class create mode 100644 target/classes/com/metalloop/modules/auth/model/query/SysPermissionQuery.class create mode 100644 target/classes/com/metalloop/modules/auth/model/query/SysRolePermissionQuery$SysRolePermissionQueryBuilder.class create mode 100644 target/classes/com/metalloop/modules/auth/model/query/SysRolePermissionQuery.class create mode 100644 target/classes/com/metalloop/modules/auth/model/query/SysRoleQuery$SysRoleQueryBuilder.class create mode 100644 target/classes/com/metalloop/modules/auth/model/query/SysRoleQuery.class create mode 100644 target/classes/com/metalloop/modules/auth/model/query/SysUserQuery$SysUserQueryBuilder.class create mode 100644 target/classes/com/metalloop/modules/auth/model/query/SysUserQuery.class create mode 100644 target/classes/com/metalloop/modules/auth/model/query/SysUserRoleQuery$SysUserRoleQueryBuilder.class create mode 100644 target/classes/com/metalloop/modules/auth/model/query/SysUserRoleQuery.class create mode 100644 target/classes/com/metalloop/modules/auth/model/req/AuthenticationRequest.class create mode 100644 target/classes/com/metalloop/modules/auth/model/req/SysEnterpriseImageLockConditionReqDto$SysEnterpriseImageLockConditionReqDtoBuilder.class create mode 100644 target/classes/com/metalloop/modules/auth/model/req/SysEnterpriseImageLockConditionReqDto.class create mode 100644 target/classes/com/metalloop/modules/auth/model/req/SysEnterpriseImagePageQueryReqDto.class create mode 100644 target/classes/com/metalloop/modules/auth/model/req/SysEnterpriseImageQueryReqDto$SysEnterpriseImageQueryReqDtoBuilder.class create mode 100644 target/classes/com/metalloop/modules/auth/model/req/SysEnterpriseImageQueryReqDto.class create mode 100644 target/classes/com/metalloop/modules/auth/model/req/SysEnterpriseImageReqDto$SysEnterpriseImageReqDtoBuilder.class create mode 100644 target/classes/com/metalloop/modules/auth/model/req/SysEnterpriseImageReqDto.class create mode 100644 target/classes/com/metalloop/modules/auth/model/req/SysEnterpriseImageUpdateByQueryReqDto$SysEnterpriseImageUpdateByQueryReqDtoBuilder.class create mode 100644 target/classes/com/metalloop/modules/auth/model/req/SysEnterpriseImageUpdateByQueryReqDto.class create mode 100644 target/classes/com/metalloop/modules/auth/model/req/SysEnterpriseLockConditionReqDto$SysEnterpriseLockConditionReqDtoBuilder.class create mode 100644 target/classes/com/metalloop/modules/auth/model/req/SysEnterpriseLockConditionReqDto.class create mode 100644 target/classes/com/metalloop/modules/auth/model/req/SysEnterprisePageQueryReqDto.class create mode 100644 target/classes/com/metalloop/modules/auth/model/req/SysEnterpriseQueryReqDto$SysEnterpriseQueryReqDtoBuilder.class create mode 100644 target/classes/com/metalloop/modules/auth/model/req/SysEnterpriseQueryReqDto.class create mode 100644 target/classes/com/metalloop/modules/auth/model/req/SysEnterpriseReqDto$SysEnterpriseReqDtoBuilder.class create mode 100644 target/classes/com/metalloop/modules/auth/model/req/SysEnterpriseReqDto.class create mode 100644 target/classes/com/metalloop/modules/auth/model/req/SysEnterpriseUpdateByQueryReqDto$SysEnterpriseUpdateByQueryReqDtoBuilder.class create mode 100644 target/classes/com/metalloop/modules/auth/model/req/SysEnterpriseUpdateByQueryReqDto.class create mode 100644 target/classes/com/metalloop/modules/auth/model/req/SysPermissionLockConditionReqDto$SysPermissionLockConditionReqDtoBuilder.class create mode 100644 target/classes/com/metalloop/modules/auth/model/req/SysPermissionLockConditionReqDto.class create mode 100644 target/classes/com/metalloop/modules/auth/model/req/SysPermissionPageQueryReqDto.class create mode 100644 target/classes/com/metalloop/modules/auth/model/req/SysPermissionQueryReqDto$SysPermissionQueryReqDtoBuilder.class create mode 100644 target/classes/com/metalloop/modules/auth/model/req/SysPermissionQueryReqDto.class create mode 100644 target/classes/com/metalloop/modules/auth/model/req/SysPermissionReqDto$SysPermissionReqDtoBuilder.class create mode 100644 target/classes/com/metalloop/modules/auth/model/req/SysPermissionReqDto.class create mode 100644 target/classes/com/metalloop/modules/auth/model/req/SysPermissionUpdateByQueryReqDto$SysPermissionUpdateByQueryReqDtoBuilder.class create mode 100644 target/classes/com/metalloop/modules/auth/model/req/SysPermissionUpdateByQueryReqDto.class create mode 100644 target/classes/com/metalloop/modules/auth/model/req/SysRoleLockConditionReqDto$SysRoleLockConditionReqDtoBuilder.class create mode 100644 target/classes/com/metalloop/modules/auth/model/req/SysRoleLockConditionReqDto.class create mode 100644 target/classes/com/metalloop/modules/auth/model/req/SysRolePageQueryReqDto.class create mode 100644 target/classes/com/metalloop/modules/auth/model/req/SysRolePermissionLockConditionReqDto$SysRolePermissionLockConditionReqDtoBuilder.class create mode 100644 target/classes/com/metalloop/modules/auth/model/req/SysRolePermissionLockConditionReqDto.class create mode 100644 target/classes/com/metalloop/modules/auth/model/req/SysRolePermissionPageQueryReqDto.class create mode 100644 target/classes/com/metalloop/modules/auth/model/req/SysRolePermissionQueryReqDto$SysRolePermissionQueryReqDtoBuilder.class create mode 100644 target/classes/com/metalloop/modules/auth/model/req/SysRolePermissionQueryReqDto.class create mode 100644 target/classes/com/metalloop/modules/auth/model/req/SysRolePermissionReqDto$SysRolePermissionReqDtoBuilder.class create mode 100644 target/classes/com/metalloop/modules/auth/model/req/SysRolePermissionReqDto.class create mode 100644 target/classes/com/metalloop/modules/auth/model/req/SysRolePermissionUpdateByQueryReqDto$SysRolePermissionUpdateByQueryReqDtoBuilder.class create mode 100644 target/classes/com/metalloop/modules/auth/model/req/SysRolePermissionUpdateByQueryReqDto.class create mode 100644 target/classes/com/metalloop/modules/auth/model/req/SysRoleQueryReqDto$SysRoleQueryReqDtoBuilder.class create mode 100644 target/classes/com/metalloop/modules/auth/model/req/SysRoleQueryReqDto.class create mode 100644 target/classes/com/metalloop/modules/auth/model/req/SysRoleReqDto$SysRoleReqDtoBuilder.class create mode 100644 target/classes/com/metalloop/modules/auth/model/req/SysRoleReqDto.class create mode 100644 target/classes/com/metalloop/modules/auth/model/req/SysRoleUpdateByQueryReqDto$SysRoleUpdateByQueryReqDtoBuilder.class create mode 100644 target/classes/com/metalloop/modules/auth/model/req/SysRoleUpdateByQueryReqDto.class create mode 100644 target/classes/com/metalloop/modules/auth/model/req/SysUserLockConditionReqDto$SysUserLockConditionReqDtoBuilder.class create mode 100644 target/classes/com/metalloop/modules/auth/model/req/SysUserLockConditionReqDto.class create mode 100644 target/classes/com/metalloop/modules/auth/model/req/SysUserPageQueryReqDto.class create mode 100644 target/classes/com/metalloop/modules/auth/model/req/SysUserQueryReqDto$SysUserQueryReqDtoBuilder.class create mode 100644 target/classes/com/metalloop/modules/auth/model/req/SysUserQueryReqDto.class create mode 100644 target/classes/com/metalloop/modules/auth/model/req/SysUserReqDto$SysUserReqDtoBuilder.class create mode 100644 target/classes/com/metalloop/modules/auth/model/req/SysUserReqDto.class create mode 100644 target/classes/com/metalloop/modules/auth/model/req/SysUserRoleLockConditionReqDto$SysUserRoleLockConditionReqDtoBuilder.class create mode 100644 target/classes/com/metalloop/modules/auth/model/req/SysUserRoleLockConditionReqDto.class create mode 100644 target/classes/com/metalloop/modules/auth/model/req/SysUserRolePageQueryReqDto.class create mode 100644 target/classes/com/metalloop/modules/auth/model/req/SysUserRoleQueryReqDto$SysUserRoleQueryReqDtoBuilder.class create mode 100644 target/classes/com/metalloop/modules/auth/model/req/SysUserRoleQueryReqDto.class create mode 100644 target/classes/com/metalloop/modules/auth/model/req/SysUserRoleReqDto$SysUserRoleReqDtoBuilder.class create mode 100644 target/classes/com/metalloop/modules/auth/model/req/SysUserRoleReqDto.class create mode 100644 target/classes/com/metalloop/modules/auth/model/req/SysUserRoleUpdateByQueryReqDto$SysUserRoleUpdateByQueryReqDtoBuilder.class create mode 100644 target/classes/com/metalloop/modules/auth/model/req/SysUserRoleUpdateByQueryReqDto.class create mode 100644 target/classes/com/metalloop/modules/auth/model/req/SysUserUpdateByQueryReqDto$SysUserUpdateByQueryReqDtoBuilder.class create mode 100644 target/classes/com/metalloop/modules/auth/model/req/SysUserUpdateByQueryReqDto.class create mode 100644 target/classes/com/metalloop/modules/auth/model/resp/AuthenticationResponse.class create mode 100644 target/classes/com/metalloop/modules/auth/model/resp/SysEnterpriseImageRespDto$SysEnterpriseImageRespDtoBuilder.class create mode 100644 target/classes/com/metalloop/modules/auth/model/resp/SysEnterpriseImageRespDto.class create mode 100644 target/classes/com/metalloop/modules/auth/model/resp/SysEnterpriseRespDto$SysEnterpriseRespDtoBuilder.class create mode 100644 target/classes/com/metalloop/modules/auth/model/resp/SysEnterpriseRespDto.class create mode 100644 target/classes/com/metalloop/modules/auth/model/resp/SysPermissionRespDto$SysPermissionRespDtoBuilder.class create mode 100644 target/classes/com/metalloop/modules/auth/model/resp/SysPermissionRespDto.class create mode 100644 target/classes/com/metalloop/modules/auth/model/resp/SysRolePermissionRespDto$SysRolePermissionRespDtoBuilder.class create mode 100644 target/classes/com/metalloop/modules/auth/model/resp/SysRolePermissionRespDto.class create mode 100644 target/classes/com/metalloop/modules/auth/model/resp/SysRoleRespDto$SysRoleRespDtoBuilder.class create mode 100644 target/classes/com/metalloop/modules/auth/model/resp/SysRoleRespDto.class create mode 100644 target/classes/com/metalloop/modules/auth/model/resp/SysUserRespDto$SysUserRespDtoBuilder.class create mode 100644 target/classes/com/metalloop/modules/auth/model/resp/SysUserRespDto.class create mode 100644 target/classes/com/metalloop/modules/auth/model/resp/SysUserRoleRespDto$SysUserRoleRespDtoBuilder.class create mode 100644 target/classes/com/metalloop/modules/auth/model/resp/SysUserRoleRespDto.class create mode 100644 target/classes/com/metalloop/modules/auth/service/SysEnterpriseImageService.class create mode 100644 target/classes/com/metalloop/modules/auth/service/SysEnterpriseService.class create mode 100644 target/classes/com/metalloop/modules/auth/service/SysPermissionService.class create mode 100644 target/classes/com/metalloop/modules/auth/service/SysRolePermissionService.class create mode 100644 target/classes/com/metalloop/modules/auth/service/SysRoleService.class create mode 100644 target/classes/com/metalloop/modules/auth/service/SysUserRoleService.class create mode 100644 target/classes/com/metalloop/modules/auth/service/SysUserService.class create mode 100644 target/classes/com/metalloop/modules/auth/service/impl/SysEnterpriseImageServiceImpl.class create mode 100644 target/classes/com/metalloop/modules/auth/service/impl/SysEnterpriseServiceImpl.class create mode 100644 target/classes/com/metalloop/modules/auth/service/impl/SysPermissionServiceImpl.class create mode 100644 target/classes/com/metalloop/modules/auth/service/impl/SysRolePermissionServiceImpl.class create mode 100644 target/classes/com/metalloop/modules/auth/service/impl/SysRoleServiceImpl.class create mode 100644 target/classes/com/metalloop/modules/auth/service/impl/SysUserRoleServiceImpl.class create mode 100644 target/classes/com/metalloop/modules/auth/service/impl/SysUserServiceImpl.class create mode 100644 target/classes/com/metalloop/modules/bussiness/converter/BizEnterpriseProductConverter.class create mode 100644 target/classes/com/metalloop/modules/bussiness/converter/BizEnterpriseProductConverterImpl.class create mode 100644 target/classes/com/metalloop/modules/bussiness/converter/BizMaterialConverter.class create mode 100644 target/classes/com/metalloop/modules/bussiness/converter/BizMaterialConverterImpl.class create mode 100644 target/classes/com/metalloop/modules/bussiness/converter/BizPurchaseRequestConverter.class create mode 100644 target/classes/com/metalloop/modules/bussiness/converter/BizPurchaseRequestConverterImpl.class create mode 100644 target/classes/com/metalloop/modules/bussiness/converter/BizSupplyInfoConverter.class create mode 100644 target/classes/com/metalloop/modules/bussiness/converter/BizSupplyInfoConverterImpl.class create mode 100644 target/classes/com/metalloop/modules/bussiness/converter/BizVarietyConverter.class create mode 100644 target/classes/com/metalloop/modules/bussiness/converter/BizVarietyConverterImpl.class create mode 100644 target/classes/com/metalloop/modules/bussiness/mapper/BizEnterpriseProductMapper.class create mode 100644 target/classes/com/metalloop/modules/bussiness/mapper/BizMaterialMapper.class create mode 100644 target/classes/com/metalloop/modules/bussiness/mapper/BizPurchaseRequestMapper.class create mode 100644 target/classes/com/metalloop/modules/bussiness/mapper/BizSupplyInfoMapper.class create mode 100644 target/classes/com/metalloop/modules/bussiness/mapper/BizVarietyMapper.class create mode 100644 target/classes/com/metalloop/modules/bussiness/model/po/BizEnterpriseProduct$BizEnterpriseProductBuilder.class create mode 100644 target/classes/com/metalloop/modules/bussiness/model/po/BizEnterpriseProduct.class create mode 100644 target/classes/com/metalloop/modules/bussiness/model/po/BizMaterial$BizMaterialBuilder.class create mode 100644 target/classes/com/metalloop/modules/bussiness/model/po/BizMaterial.class create mode 100644 target/classes/com/metalloop/modules/bussiness/model/po/BizPurchaseRequest$BizPurchaseRequestBuilder.class create mode 100644 target/classes/com/metalloop/modules/bussiness/model/po/BizPurchaseRequest.class create mode 100644 target/classes/com/metalloop/modules/bussiness/model/po/BizSupplyInfo$BizSupplyInfoBuilder.class create mode 100644 target/classes/com/metalloop/modules/bussiness/model/po/BizSupplyInfo.class create mode 100644 target/classes/com/metalloop/modules/bussiness/model/po/BizVariety$BizVarietyBuilder.class create mode 100644 target/classes/com/metalloop/modules/bussiness/model/po/BizVariety.class create mode 100644 target/classes/com/metalloop/modules/bussiness/model/query/BizEnterpriseProductQuery$BizEnterpriseProductQueryBuilder.class create mode 100644 target/classes/com/metalloop/modules/bussiness/model/query/BizEnterpriseProductQuery.class create mode 100644 target/classes/com/metalloop/modules/bussiness/model/query/BizMaterialQuery$BizMaterialQueryBuilder.class create mode 100644 target/classes/com/metalloop/modules/bussiness/model/query/BizMaterialQuery.class create mode 100644 target/classes/com/metalloop/modules/bussiness/model/query/BizPurchaseRequestQuery$BizPurchaseRequestQueryBuilder.class create mode 100644 target/classes/com/metalloop/modules/bussiness/model/query/BizPurchaseRequestQuery.class create mode 100644 target/classes/com/metalloop/modules/bussiness/model/query/BizSupplyInfoQuery$BizSupplyInfoQueryBuilder.class create mode 100644 target/classes/com/metalloop/modules/bussiness/model/query/BizSupplyInfoQuery.class create mode 100644 target/classes/com/metalloop/modules/bussiness/model/query/BizVarietyQuery$BizVarietyQueryBuilder.class create mode 100644 target/classes/com/metalloop/modules/bussiness/model/query/BizVarietyQuery.class create mode 100644 target/classes/com/metalloop/modules/bussiness/model/req/BizEnterpriseProductLockConditionReqDto$BizEnterpriseProductLockConditionReqDtoBuilder.class create mode 100644 target/classes/com/metalloop/modules/bussiness/model/req/BizEnterpriseProductLockConditionReqDto.class create mode 100644 target/classes/com/metalloop/modules/bussiness/model/req/BizEnterpriseProductPageQueryReqDto.class create mode 100644 target/classes/com/metalloop/modules/bussiness/model/req/BizEnterpriseProductQueryReqDto$BizEnterpriseProductQueryReqDtoBuilder.class create mode 100644 target/classes/com/metalloop/modules/bussiness/model/req/BizEnterpriseProductQueryReqDto.class create mode 100644 target/classes/com/metalloop/modules/bussiness/model/req/BizEnterpriseProductReqDto$BizEnterpriseProductReqDtoBuilder.class create mode 100644 target/classes/com/metalloop/modules/bussiness/model/req/BizEnterpriseProductReqDto.class create mode 100644 target/classes/com/metalloop/modules/bussiness/model/req/BizEnterpriseProductUpdateByQueryReqDto$BizEnterpriseProductUpdateByQueryReqDtoBuilder.class create mode 100644 target/classes/com/metalloop/modules/bussiness/model/req/BizEnterpriseProductUpdateByQueryReqDto.class create mode 100644 target/classes/com/metalloop/modules/bussiness/model/req/BizMaterialLockConditionReqDto$BizMaterialLockConditionReqDtoBuilder.class create mode 100644 target/classes/com/metalloop/modules/bussiness/model/req/BizMaterialLockConditionReqDto.class create mode 100644 target/classes/com/metalloop/modules/bussiness/model/req/BizMaterialPageQueryReqDto.class create mode 100644 target/classes/com/metalloop/modules/bussiness/model/req/BizMaterialQueryReqDto$BizMaterialQueryReqDtoBuilder.class create mode 100644 target/classes/com/metalloop/modules/bussiness/model/req/BizMaterialQueryReqDto.class create mode 100644 target/classes/com/metalloop/modules/bussiness/model/req/BizMaterialReqDto$BizMaterialReqDtoBuilder.class create mode 100644 target/classes/com/metalloop/modules/bussiness/model/req/BizMaterialReqDto.class create mode 100644 target/classes/com/metalloop/modules/bussiness/model/req/BizMaterialUpdateByQueryReqDto$BizMaterialUpdateByQueryReqDtoBuilder.class create mode 100644 target/classes/com/metalloop/modules/bussiness/model/req/BizMaterialUpdateByQueryReqDto.class create mode 100644 target/classes/com/metalloop/modules/bussiness/model/req/BizPurchaseRequestLockConditionReqDto$BizPurchaseRequestLockConditionReqDtoBuilder.class create mode 100644 target/classes/com/metalloop/modules/bussiness/model/req/BizPurchaseRequestLockConditionReqDto.class create mode 100644 target/classes/com/metalloop/modules/bussiness/model/req/BizPurchaseRequestPageQueryReqDto.class create mode 100644 target/classes/com/metalloop/modules/bussiness/model/req/BizPurchaseRequestQueryReqDto$BizPurchaseRequestQueryReqDtoBuilder.class create mode 100644 target/classes/com/metalloop/modules/bussiness/model/req/BizPurchaseRequestQueryReqDto.class create mode 100644 target/classes/com/metalloop/modules/bussiness/model/req/BizPurchaseRequestReqDto$BizPurchaseRequestReqDtoBuilder.class create mode 100644 target/classes/com/metalloop/modules/bussiness/model/req/BizPurchaseRequestReqDto.class create mode 100644 target/classes/com/metalloop/modules/bussiness/model/req/BizPurchaseRequestUpdateByQueryReqDto$BizPurchaseRequestUpdateByQueryReqDtoBuilder.class create mode 100644 target/classes/com/metalloop/modules/bussiness/model/req/BizPurchaseRequestUpdateByQueryReqDto.class create mode 100644 target/classes/com/metalloop/modules/bussiness/model/req/BizSupplyInfoLockConditionReqDto$BizSupplyInfoLockConditionReqDtoBuilder.class create mode 100644 target/classes/com/metalloop/modules/bussiness/model/req/BizSupplyInfoLockConditionReqDto.class create mode 100644 target/classes/com/metalloop/modules/bussiness/model/req/BizSupplyInfoPageQueryReqDto.class create mode 100644 target/classes/com/metalloop/modules/bussiness/model/req/BizSupplyInfoQueryReqDto$BizSupplyInfoQueryReqDtoBuilder.class create mode 100644 target/classes/com/metalloop/modules/bussiness/model/req/BizSupplyInfoQueryReqDto.class create mode 100644 target/classes/com/metalloop/modules/bussiness/model/req/BizSupplyInfoReqDto$BizSupplyInfoReqDtoBuilder.class create mode 100644 target/classes/com/metalloop/modules/bussiness/model/req/BizSupplyInfoReqDto.class create mode 100644 target/classes/com/metalloop/modules/bussiness/model/req/BizSupplyInfoUpdateByQueryReqDto$BizSupplyInfoUpdateByQueryReqDtoBuilder.class create mode 100644 target/classes/com/metalloop/modules/bussiness/model/req/BizSupplyInfoUpdateByQueryReqDto.class create mode 100644 target/classes/com/metalloop/modules/bussiness/model/req/BizVarietyLockConditionReqDto$BizVarietyLockConditionReqDtoBuilder.class create mode 100644 target/classes/com/metalloop/modules/bussiness/model/req/BizVarietyLockConditionReqDto.class create mode 100644 target/classes/com/metalloop/modules/bussiness/model/req/BizVarietyPageQueryReqDto.class create mode 100644 target/classes/com/metalloop/modules/bussiness/model/req/BizVarietyQueryReqDto$BizVarietyQueryReqDtoBuilder.class create mode 100644 target/classes/com/metalloop/modules/bussiness/model/req/BizVarietyQueryReqDto.class create mode 100644 target/classes/com/metalloop/modules/bussiness/model/req/BizVarietyReqDto$BizVarietyReqDtoBuilder.class create mode 100644 target/classes/com/metalloop/modules/bussiness/model/req/BizVarietyReqDto.class create mode 100644 target/classes/com/metalloop/modules/bussiness/model/req/BizVarietyUpdateByQueryReqDto$BizVarietyUpdateByQueryReqDtoBuilder.class create mode 100644 target/classes/com/metalloop/modules/bussiness/model/req/BizVarietyUpdateByQueryReqDto.class create mode 100644 target/classes/com/metalloop/modules/bussiness/model/resp/BizEnterpriseProductRespDto$BizEnterpriseProductRespDtoBuilder.class create mode 100644 target/classes/com/metalloop/modules/bussiness/model/resp/BizEnterpriseProductRespDto.class create mode 100644 target/classes/com/metalloop/modules/bussiness/model/resp/BizMaterialRespDto$BizMaterialRespDtoBuilder.class create mode 100644 target/classes/com/metalloop/modules/bussiness/model/resp/BizMaterialRespDto.class create mode 100644 target/classes/com/metalloop/modules/bussiness/model/resp/BizPurchaseRequestRespDto$BizPurchaseRequestRespDtoBuilder.class create mode 100644 target/classes/com/metalloop/modules/bussiness/model/resp/BizPurchaseRequestRespDto.class create mode 100644 target/classes/com/metalloop/modules/bussiness/model/resp/BizSupplyInfoRespDto$BizSupplyInfoRespDtoBuilder.class create mode 100644 target/classes/com/metalloop/modules/bussiness/model/resp/BizSupplyInfoRespDto.class create mode 100644 target/classes/com/metalloop/modules/bussiness/model/resp/BizVarietyRespDto$BizVarietyRespDtoBuilder.class create mode 100644 target/classes/com/metalloop/modules/bussiness/model/resp/BizVarietyRespDto.class create mode 100644 target/classes/com/metalloop/modules/bussiness/service/BizEnterpriseProductService.class create mode 100644 target/classes/com/metalloop/modules/bussiness/service/BizMaterialService.class create mode 100644 target/classes/com/metalloop/modules/bussiness/service/BizPurchaseRequestService.class create mode 100644 target/classes/com/metalloop/modules/bussiness/service/BizSupplyInfoService.class create mode 100644 target/classes/com/metalloop/modules/bussiness/service/BizVarietyService.class create mode 100644 target/classes/com/metalloop/modules/bussiness/service/impl/BizEnterpriseProductServiceImpl.class create mode 100644 target/classes/com/metalloop/modules/bussiness/service/impl/BizMaterialServiceImpl.class create mode 100644 target/classes/com/metalloop/modules/bussiness/service/impl/BizPurchaseRequestServiceImpl.class create mode 100644 target/classes/com/metalloop/modules/bussiness/service/impl/BizSupplyInfoServiceImpl.class create mode 100644 target/classes/com/metalloop/modules/bussiness/service/impl/BizVarietyServiceImpl.class create mode 100644 target/classes/main/resources/application.yml create mode 100644 target/classes/main/resources/mapper/BizEnterpriseProductMapper.xml create mode 100644 target/classes/main/resources/mapper/BizMaterialMapper.xml create mode 100644 target/classes/main/resources/mapper/BizPurchaseRequestMapper.xml create mode 100644 target/classes/main/resources/mapper/BizSupplyInfoMapper.xml create mode 100644 target/classes/main/resources/mapper/BizVarietyMapper.xml create mode 100644 target/classes/main/resources/mapper/SysEnterpriseImageMapper.xml create mode 100644 target/classes/main/resources/mapper/SysEnterpriseMapper.xml create mode 100644 target/classes/main/resources/mapper/SysPermissionMapper.xml create mode 100644 target/classes/main/resources/mapper/SysRoleMapper.xml create mode 100644 target/classes/main/resources/mapper/SysRolePermissionMapper.xml create mode 100644 target/classes/main/resources/mapper/SysUserMapper.xml create mode 100644 target/classes/main/resources/mapper/SysUserRoleMapper.xml create mode 100644 target/classes/mapper/BizEnterpriseProductMapper.xml create mode 100644 target/classes/mapper/BizMaterialMapper.xml create mode 100644 target/classes/mapper/BizPurchaseRequestMapper.xml create mode 100644 target/classes/mapper/BizSupplyInfoMapper.xml create mode 100644 target/classes/mapper/BizVarietyMapper.xml create mode 100644 target/classes/mapper/SysEnterpriseImageMapper.xml create mode 100644 target/classes/mapper/SysEnterpriseMapper.xml create mode 100644 target/classes/mapper/SysPermissionMapper.xml create mode 100644 target/classes/mapper/SysRoleMapper.xml create mode 100644 target/classes/mapper/SysRolePermissionMapper.xml create mode 100644 target/classes/mapper/SysUserMapper.xml create mode 100644 target/classes/mapper/SysUserRoleMapper.xml create mode 100644 target/generated-sources/annotations/com/metalloop/modules/auth/converter/SysEnterpriseConverterImpl.java create mode 100644 target/generated-sources/annotations/com/metalloop/modules/auth/converter/SysEnterpriseImageConverterImpl.java create mode 100644 target/generated-sources/annotations/com/metalloop/modules/auth/converter/SysPermissionConverterImpl.java create mode 100644 target/generated-sources/annotations/com/metalloop/modules/auth/converter/SysRoleConverterImpl.java create mode 100644 target/generated-sources/annotations/com/metalloop/modules/auth/converter/SysRolePermissionConverterImpl.java create mode 100644 target/generated-sources/annotations/com/metalloop/modules/auth/converter/SysUserConverterImpl.java create mode 100644 target/generated-sources/annotations/com/metalloop/modules/auth/converter/SysUserRoleConverterImpl.java create mode 100644 target/generated-sources/annotations/com/metalloop/modules/bussiness/converter/BizEnterpriseProductConverterImpl.java create mode 100644 target/generated-sources/annotations/com/metalloop/modules/bussiness/converter/BizMaterialConverterImpl.java create mode 100644 target/generated-sources/annotations/com/metalloop/modules/bussiness/converter/BizPurchaseRequestConverterImpl.java create mode 100644 target/generated-sources/annotations/com/metalloop/modules/bussiness/converter/BizSupplyInfoConverterImpl.java create mode 100644 target/generated-sources/annotations/com/metalloop/modules/bussiness/converter/BizVarietyConverterImpl.java diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..13275f1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,30 @@ +### IntelliJ IDEA ### +out/ +!**/src/main/**/out/ +!**/src/test/**/out/ +.kotlin + +### Eclipse ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache +bin/ +!**/src/main/**/bin/ +!**/src/test/**/bin/ + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ + +### VS Code ### +.vscode/ + +### Mac OS ### +.DS_Store \ No newline at end of file diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..f6906f2 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,10 @@ +# 默认忽略的文件 +/shelf/ +/workspace.xml +# 基于编辑器的 HTTP 客户端请求 +/httpRequests/ +# 已忽略包含查询文件的默认文件夹 +/queries/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..1d30484 --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 0000000..63e9001 --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml new file mode 100644 index 0000000..c7ea920 --- /dev/null +++ b/.idea/jarRepositories.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..59adc43 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..b93cb69 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..975885f --- /dev/null +++ b/README.md @@ -0,0 +1,230 @@ +有色再生资源交易平台 - 后端项目架构设计文档 +项目代号:METALLOOP / metalloop +文档版本:v1.0 +创建时间:2026-09-09 +技术基座:Spring Boot 3.x + Sa-Token + MyBatis-Plus + MySQL 8.0 + Redis 6.0 + +1. 项目概述 + 本后端服务于“有色再生资源交易平台”,提供用户认证、权限管理、企业认证、产品目录管理、供应/求购信息发布与审核、即时聊天集成等核心业务 API。系统采用 RBAC(基于角色的访问控制) 权限模型,通过 Sa-Token 实现认证与鉴权,具备高扩展性和可维护性。 + +1.1 核心业务目标 +支持企业注册、认证(营业执照 + 法人信息)、入驻平台; + +支持企业发布供应信息与求购信息; + +支持管理员审核交易信息与企业认证资料; + +支持基于 RBAC 的后台管理权限体系; + +支持与 OpenIM 集成,实现买卖双方在线即时沟通; + +支持多环境部署(开发、测试、生产)。 + +2. 技术栈选型 + 组件 选型 版本 说明 + JDK Oracle OpenJDK 17 LTS 长期支持版本,兼容 Spring Boot 3.x + 开发框架 Spring Boot 3.2.x 核心基础框架 + 安全认证 Sa-Token 1.37.x 轻量级权限认证框架,支持 RBAC、分布式会话 + ORM 框架 MyBatis-Plus 3.5.x 增强 MyBatis,提供代码生成、分页、逻辑删除等 + 数据库 MySQL 8.0+ 关系型数据库,支持事务、窗口函数等 + 缓存 / 会话存储 Redis 6.0+ 用于 Sa-Token 分布式会话、接口防刷、热点数据缓存 + API 文档 Knife4j / Swagger 4.x 在线接口调试与文档生成 + 工具库 Hutool 5.8.x 常用工具类集合(日期、加密、Bean 拷贝等) + JSON 处理 Jackson (Spring Boot 内置) 序列化/反序列化 + 日志 SLF4J + Logback (Spring Boot 内置) 日志门面 + 实现 + 连接池 HikariCP (Spring Boot 内置) 高性能数据库连接池 + 构建工具 Maven 3.6+ 项目构建与依赖管理 +3. 系统模块划分(Maven 多模块) + 项目采用 Maven 多模块结构,便于后续拆分微服务或模块独立部署。 + +text +metalloop-backend/ +├── pom.xml # 父 POM,统一版本管理 +├── metalloop-common/ # 公共模块(无业务依赖) +│ ├── src/main/java/ +│ │ └── com.metalloop.common/ +│ │ ├── annotation/ # 自定义注解 +│ │ ├── constant/ # 常量、枚举类 +│ │ ├── exception/ # 自定义异常 +│ │ ├── model/ # 统一返回模型(Result、PageResult) +│ │ └── utils/ # 工具类(MD5、JWT、DateUtil 等) +│ └── pom.xml +│ +├── metalloop-framework/ # 框架配置模块 +│ ├── src/main/java/ +│ │ └── com.metalloop.framework/ +│ │ ├── config/ # 通用配置(Jackson、线程池、CORS) +│ │ ├── satoken/ # Sa-Token 配置、权限拦截器 +│ │ ├── mybatis/ # MyBatis-Plus 配置(分页、填充、逻辑删除) +│ │ └── swagger/ # Knife4j 配置 +│ └── pom.xml +│ +├── metalloop-dao/ # 数据访问层 +│ ├── src/main/java/ +│ │ └── com.metalloop.dao/ +│ │ ├── entity/ # 数据库实体类(对应每张表) +│ │ ├── mapper/ # MyBatis-Plus Mapper 接口 +│ │ ├── dto/ # 数据传输对象(业务层入参/出参) +│ │ └── vo/ # 视图对象(Controller 返回专用) +│ └── pom.xml +│ +├── metalloop-service/ # 业务逻辑层 +│ ├── src/main/java/ +│ │ └── com.metalloop.service/ +│ │ ├── auth/ # 认证服务 +│ │ ├── user/ # 用户服务 +│ │ ├── enterprise/ # 企业服务(含认证审核) +│ │ ├── product/ # 产品、品种、材质服务 +│ │ ├── trade/ # 供应/求购信息服务 +│ │ ├── permission/ # 权限与角色服务 +│ │ ├── im/ # OpenIM 集成服务 +│ │ └── impl/ # 各服务实现类(按模块分包) +│ └── pom.xml +│ +├── metalloop-api/ # API 接口定义(可选,用于 Feign 或微服务) +│ ├── src/main/java/ +│ │ └── com.metalloop.api/ # 对外暴露的 API 接口 +│ └── pom.xml +│ +└── metalloop-web/ # Web 启动模块 +├── src/main/java/ +│ └── com.metalloop.web/ +│ ├── controller/ # REST Controller(按模块分包) +│ ├── interceptor/ # 全局拦截器 +│ ├── filter/ # 过滤器 +│ └── advice/ # 全局异常处理器 +├── src/main/resources/ +│ ├── application.yml # 主配置文件 +│ ├── application-dev.yml # 开发环境配置 +│ ├── application-prod.yml # 生产环境配置 +│ ├── logback-spring.xml # 日志配置 +│ └── mapper/ # MyBatis XML 映射文件(可选) +└── pom.xml + +4. 包结构设计(单模块方案) + 若采用单模块结构,推荐按业务模块分包,清晰隔离各领域: + +text +com.metalloop +│ +├── common # 公共组件(可独立为 common 模块) +│ ├── annotation # 自定义注解 +│ │ ├── @RequirePermission # 权限校验注解(可选,Sa-Token 自带 @SaCheckPermission) +│ │ └── @LogOperation # 操作日志注解 +│ ├── constant # 常量与枚举 +│ │ ├── ApiCode.java # API 响应码枚举 +│ │ ├── AuditStatusEnum.java # 审核状态枚举 +│ │ └── UserStatusEnum.java # 用户状态枚举 +│ ├── exception # 异常处理 +│ │ ├── BusinessException.java # 业务异常 +│ │ └── GlobalExceptionHandler.java # 全局异常拦截 +│ ├── model # 统一响应模型 +│ │ ├── Result.java # 统一返回结构 +│ │ └── PageResult.java # 分页返回结构 +│ └── utils # 工具类 +│ ├── RedisUtil.java # Redis 工具封装 +│ ├── SecurityUtil.java # 加密工具(BCrypt、MD5) +│ └── BeanCopyUtil.java # 对象拷贝工具 +│ +├── framework # 框架集成(可独立为 framework 模块) +│ ├── satoken +│ │ ├── SaTokenConfig.java # Sa-Token 配置类 +│ │ ├── StpInterfaceImpl.java # 权限/角色数据源实现 +│ │ └── SaTokenInterceptor.java # 全局鉴权拦截器(可选) +│ ├── mybatis +│ │ ├── MybatisPlusConfig.java # 分页、乐观锁配置 +│ │ ├── MetaObjectHandler.java # 自动填充(createTime、updateTime) +│ │ └── LogicDeleteConfig.java # 逻辑删除配置(若使用) +│ ├── redis +│ │ └── RedisConfig.java # Redis 序列化配置(Jackson2Json) +│ └── swagger +│ └── Knife4jConfig.java # API 文档配置 +│ +├── modules # 业务模块 +│ │ +│ ├── auth # 认证模块 +│ │ ├── controller +│ │ │ └── AuthController.java # 登录、登出、刷新 Token +│ │ ├── service +│ │ │ ├── AuthService.java +│ │ │ └── impl +│ │ │ └── AuthServiceImpl.java +│ │ ├── model +│ │ │ ├── LoginDTO.java # 登录请求参数 +│ │ │ └── LoginVO.java # 登录响应(含 Token) +│ │ └── mapper # (复用 dao 层 Mapper) +│ │ +│ ├── user # 用户管理模块 +│ │ ├── controller +│ │ │ └── UserController.java # 用户 CRUD、禁用/启用 +│ │ ├── service +│ │ └── model +│ │ +│ ├── enterprise # 企业管理模块 +│ │ ├── controller +│ │ │ └── EnterpriseController.java # 企业认证、审核、查询 +│ │ ├── service +│ │ ├── model +│ │ │ ├── EnterpriseSubmitDTO.java # 提交认证资料 +│ │ │ └── EnterpriseAuditDTO.java # 审核操作 +│ │ └── mapper +│ │ +│ ├── product # 产品目录模块 +│ │ ├── controller +│ │ │ ├── ProductController.java +│ │ │ ├── VarietyController.java +│ │ │ └── MaterialController.java +│ │ ├── service +│ │ └── model +│ │ +│ ├── trade # 交易信息模块 +│ │ ├── controller +│ │ │ ├── SupplyController.java # 供应信息 +│ │ │ └── PurchaseController.java # 求购信息 +│ │ ├── service +│ │ └── model +│ │ +│ ├── permission # 权限管理模块(后台) +│ │ ├── controller +│ │ │ ├── RoleController.java # 角色 CRUD +│ │ │ └── PermissionController.java # 权限/菜单管理 +│ │ ├── service +│ │ └── model +│ │ +│ └── im # 即时聊天模块(OpenIM 集成) +│ ├── controller +│ │ └── IMController.java # 获取 IM Token、Webhook 接收 +│ ├── service +│ │ ├── IMService.java # OpenIM API 调用封装 +│ │ └── WebhookService.java # 处理 OpenIM 回调事件 +│ └── model +│ +└── web # Web 层公共配置 +├── config +│ └── WebMvcConfig.java # 跨域、静态资源、拦截器注册 +├── filter +│ └── RequestLogFilter.java # 请求日志过滤器 +└── MainApplication.java # Spring Boot 启动类 +5. 数据库表清单 + 5.1 系统权限模块(sys_*) + 表名 说明 关键字段 + sys_user 用户表 id, username, password, phone, enterprise_id, auth_status, user_status + sys_role 角色表 id, role_name, status, is_system, sort + sys_permission 权限表(菜单 + 按钮) id, name, code, type, parent_id, api_path, route_path + sys_user_role 用户-角色关联表 user_id, role_id + sys_role_permission 角色-权限关联表 role_id, permission_id + 5.2 企业模块(sys_enterprise 系列) + 注:根据现有数据库,企业表实际前缀为 sys_,与系统模块共用,逻辑上可按业务域区分。 + +表名 说明 关键字段 +sys_enterprise 企业信息主表 id, enterprise_name, legal_person, unified_social_credit_code, audit_status, credit_limit +sys_enterprise_image 企业图片附件表 id, enterprise_id, image_type, image_url +5.3 业务交易模块(biz_*) +表名 说明 关键字段 +biz_product 产品基础表 id, product_name, product_code, unit, status +biz_variety 品种表(支持层级) id, variety_name, parent_id, variety_grade +biz_material 材质基础表 id, material_name +biz_enterprise_product 企业经营产品表 id, enterprise_id, variety_id, material_id, unit_price, weight +biz_purchase_request 求购信息表 id, create_user_id, title, quantity, unit_price, audit_status, expire_time +biz_supply_info 发布信息表(供应) id, create_user_id, title, quantity, unit_price, audit_status, expire_time +biz_product_element_detail 产品材质详情表 id, product_id, element_name, element_content \ No newline at end of file diff --git a/metaloop.iml b/metaloop.iml new file mode 100644 index 0000000..a80f8af --- /dev/null +++ b/metaloop.iml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..444405c --- /dev/null +++ b/pom.xml @@ -0,0 +1,158 @@ + + 4.0.0 + + com.metalloop + metaloop + 0.0.1-SNAPSHOT + jar + + + org.springframework.boot + spring-boot-starter-parent + 3.4.13 + + + + + 17 + 1.46.0 + 3.5.9 + 1.6.3 + 3.40.0 + 5.8.31 + + + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-validation + + + org.springframework.boot + spring-boot-starter-aop + + + org.springframework.boot + spring-boot-starter-security + + + + + org.springframework.boot + spring-boot-starter-data-redis + + + + + com.baomidou + mybatis-plus-spring-boot3-starter + ${mybatis-plus.version} + + + + com.baomidou + mybatis-plus-jsqlparser + ${mybatis-plus.version} + + + com.mysql + mysql-connector-j + runtime + + + + + org.springdoc + springdoc-openapi-starter-webmvc-ui + 2.8.13 + + + + + cn.dev33 + sa-token-spring-boot3-starter + ${sa-token.version} + + + cn.dev33 + sa-token-redis-jackson + ${sa-token.version} + + + + + org.redisson + redisson-spring-boot-starter + ${redisson.version} + + + + + org.mapstruct + mapstruct + ${mapstruct.version} + + + cn.hutool + hutool-json + ${hutool.version} + + + org.projectlombok + lombok + provided + + + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + org.projectlombok + lombok + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + ${java.version} + ${java.version} + + + org.projectlombok + lombok + ${lombok.version} + + + org.mapstruct + mapstruct-processor + ${mapstruct.version} + + + + + + + \ No newline at end of file diff --git a/src/Main.java b/src/Main.java new file mode 100644 index 0000000..fe7aa2b --- /dev/null +++ b/src/Main.java @@ -0,0 +1,15 @@ +//TIP 要运行代码,请按 或 +// 点击装订区域中的 图标。 +public class Main { + public static void main(String[] args) { + //TIP 当文本光标位于高亮显示的文本处时按 + // 查看 IntelliJ IDEA 建议如何修正。 + System.out.printf("Hello and welcome!"); + + for (int i = 1; i <= 5; i++) { + //TIP 按 开始调试代码。我们已经设置了一个 断点 + // 但您始终可以通过按 添加更多断点。 + System.out.println("i = " + i); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/metalloop/Application.java b/src/main/java/com/metalloop/Application.java new file mode 100644 index 0000000..d61fde9 --- /dev/null +++ b/src/main/java/com/metalloop/Application.java @@ -0,0 +1,17 @@ +package com.metalloop; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.transaction.annotation.EnableTransactionManagement; + +@SpringBootApplication + +@EnableTransactionManagement +@EnableScheduling +public class Application { + public static void main(String[] args) { + SpringApplication.run(Application.class, args); + } +} diff --git a/src/main/java/com/metalloop/common/auth/Authentication.java b/src/main/java/com/metalloop/common/auth/Authentication.java new file mode 100644 index 0000000..8133544 --- /dev/null +++ b/src/main/java/com/metalloop/common/auth/Authentication.java @@ -0,0 +1,142 @@ +/* + * Copyright 2004, 2005, 2006 Acegi Technology Pty Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.metalloop.common.auth; + + +import com.metalloop.common.auth.permission.Permission; +import com.metalloop.common.auth.userdetails.UserDetails; + +import java.util.Collection; + +/** + * 认证后的用户信息 + * + * @author zhaowenhao + * @since 2023-03-21 + */ +public class Authentication { + + /** + * 权限集合 + */ + Collection permissions; + + /** + * 用户Id + */ + String userId; + + /** + * 用户登录名 + */ + String username; + + /** + * 访问令牌 + */ + String accessToken; + + + /** + * 返回授予用户的权限。无法返回null 。 + * + * @return 按自然键排序的权限集合。 + */ + public Collection getPermissions() { + return this.permissions; + } + + /** + * 返回用于对用户进行身份验证的用户Id。无法返回null 。 + * + * @return 用户Id + */ + public String getUserId() { + return this.userId; + } + + /** + * 返回用于对用户进行身份验证的用户名。无法返回null 。 + * + * @return 用户名 + */ + public String getUsername() { + return this.username; + } + + /** + * 获取访问令牌 + * + * @return 访问令牌 + */ + public String getAccessToken() { + return accessToken; + } + + public void setPermissions(Collection permissions) { + this.permissions = permissions; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + public void setUsername(String username) { + this.username = username; + } + + public void setAccessToken(String accessToken) { + this.accessToken = accessToken; + } + + /** + * 从UserDetails中构建认证通过的用户 + * + * @param userDetails UserDetails + * @return 认证通过的用户 + */ + public static Builder withUserDetails(UserDetails userDetails) { + return new Builder(userDetails); + } + + public static class Builder { + private final Collection permissions; + private final String userId; + private final String username; + private String accessToken; + + public Builder(UserDetails userDetails) { + this.permissions = userDetails.getPermissions(); + this.userId = userDetails.getUserId(); + this.username = userDetails.getUsername(); + } + + public Builder accessToken(String accessToken) { + this.accessToken = accessToken; + return this; + } + + public Authentication build() { + Authentication authentication = new Authentication(); + authentication.setPermissions(this.permissions); + authentication.setUserId(this.userId); + authentication.setUsername(this.username); + authentication.setAccessToken(this.accessToken); + return authentication; + } + } +} diff --git a/src/main/java/com/metalloop/common/auth/config/AuthServerConfiguration.java b/src/main/java/com/metalloop/common/auth/config/AuthServerConfiguration.java new file mode 100644 index 0000000..085d464 --- /dev/null +++ b/src/main/java/com/metalloop/common/auth/config/AuthServerConfiguration.java @@ -0,0 +1,109 @@ +package com.metalloop.common.auth.config; + +import com.metalloop.common.enums.LoginType; +import com.metalloop.common.auth.password.PasswordDecryptor; +import com.metalloop.common.auth.password.RsaPasswordDecryptor; +import com.metalloop.modules.auth.controller.AuthController; +import com.metalloop.common.auth.encrypt.KeyProperties; +import com.metalloop.modules.auth.controller.RsaPublicKeyController; +import com.metalloop.modules.auth.model.req.AuthenticationRequest; +import jakarta.annotation.PostConstruct; +import jakarta.servlet.http.HttpServletRequest; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.util.Assert; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.servlet.mvc.method.RequestMappingInfo; +import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping; + +import java.util.Collections; +import java.util.List; + +/** + * 认证服务器配置类 + * + * @author zhaowenhao + * @since 2023-03-19 + */ + +@SuppressWarnings({"SpringJavaAutowiredFieldsWarningInspection", "SpringJavaInjectionPointsAutowiringInspection"}) +@Configuration +@EnableConfigurationProperties({KeyProperties.class}) +public class AuthServerConfiguration { + + @Autowired + private List configurers = Collections.emptyList(); + + @Autowired + private RequestMappingHandlerMapping handlerMapping; + + @Autowired + private KeyProperties keyProperties; + + @PostConstruct + public void init() { + // 检查是否有相关的配置 + Assert.notEmpty(configurers, "找不到认证服务器的相关配置"); + // 遍历每个配置器 + for (AuthServerConfigurer configurer : configurers) { + AuthServerEndpointsConfigurer endpointsConfigurer = new AuthServerEndpointsConfigurer(); + try { + configurer.configure(endpointsConfigurer); + } catch (Exception e) { + throw new IllegalStateException("无法配置认证端点", e); + } + // 为每个服务创建并注册一个 AuthController + LoginType loginType = endpointsConfigurer.getLoginType(); + AuthController authController = new AuthController(loginType, endpointsConfigurer.getUserDetailsService(), + endpointsConfigurer.getLoginSuccessHandler(), endpointsConfigurer.getLogoutSuccessHandler(), + passwordDecryptor(keyProperties), passwordEncoder(), endpointsConfigurer.getVerifyCodeHandler(), endpointsConfigurer.getPasswordCheckFailureHandler()); + // 注册登录和登出端点 + if ("wechat".equals(loginType.getType())) { +// registerEndpoint(endpointsConfigurer.getLoginProcessingUrl(), "miniAppLogin", authController, RequestMethod.POST, AuthenticationMiniAppRequest.class, HttpServletRequest.class); +// registerEndpoint(endpointsConfigurer.getLogoutProcessingUrl(), "miniAppLogout", authController, RequestMethod.POST); + } else { + registerEndpoint(endpointsConfigurer.getLoginProcessingUrl(), "login", authController, RequestMethod.POST, AuthenticationRequest.class, HttpServletRequest.class); + registerEndpoint(endpointsConfigurer.getLogoutProcessingUrl(), "logout", authController, RequestMethod.POST); + } + // 为每个服务创建并注册一个 RsaPublicKeyController + RsaPublicKeyController rsaPublicKeyController = new RsaPublicKeyController(keyProperties); + // 注册公钥获取端点 + registerEndpoint(endpointsConfigurer.getPublicKeyFetchUrl(), "getPublicKey", rsaPublicKeyController, RequestMethod.GET); + // 如果开启了单点登陆 + if (Boolean.TRUE.equals(endpointsConfigurer.getEnableSso())) { + authController.initSso(endpointsConfigurer.getSsoCodeService(), endpointsConfigurer.getSsoCodeTimeOut()); + // 注册单点登陆相关端点 + registerEndpoint(endpointsConfigurer.getSsoCodeFetchUrl(), "getSsoCode", authController, RequestMethod.GET); + registerEndpoint(endpointsConfigurer.getSsoUserinfoFetchUrl(), "getSsoUserInfo", authController, RequestMethod.GET, String.class); + } + } + } + + /** + * 注册端点的辅助方法 + */ + private void registerEndpoint(String url, String methodName, Object controller, RequestMethod requestMethod, Class... parameterTypes) { + RequestMappingInfo mappingInfo = RequestMappingInfo.paths(url).methods(requestMethod).build(); + try { + handlerMapping.registerMapping(mappingInfo, controller, controller.getClass().getMethod(methodName, parameterTypes)); + } catch (NoSuchMethodException e) { + throw new IllegalStateException("注册端点出错", e); + } + } + + @Bean + public PasswordEncoder passwordEncoder() { + return new BCryptPasswordEncoder(); + } + + @Bean + @ConditionalOnMissingBean(PasswordDecryptor.class) + public PasswordDecryptor passwordDecryptor(KeyProperties keyProperties) { + return new RsaPasswordDecryptor(keyProperties); + } +} diff --git a/src/main/java/com/metalloop/common/auth/config/AuthServerConfigurer.java b/src/main/java/com/metalloop/common/auth/config/AuthServerConfigurer.java new file mode 100644 index 0000000..37e90d1 --- /dev/null +++ b/src/main/java/com/metalloop/common/auth/config/AuthServerConfigurer.java @@ -0,0 +1,18 @@ +package com.metalloop.common.auth.config; + +/** + * 认证服务器配置器 + * + * @author zhaowenhao + * @since 2023-03-19 + */ +public interface AuthServerConfigurer { + + /** + * 配置操作 + * + * @param configurer 配置器 + * @throws Exception 异常 + */ + void configure(AuthServerEndpointsConfigurer configurer) throws Exception; +} diff --git a/src/main/java/com/metalloop/common/auth/config/AuthServerConfigurerAdapter.java b/src/main/java/com/metalloop/common/auth/config/AuthServerConfigurerAdapter.java new file mode 100644 index 0000000..82de24b --- /dev/null +++ b/src/main/java/com/metalloop/common/auth/config/AuthServerConfigurerAdapter.java @@ -0,0 +1,16 @@ +package com.metalloop.common.auth.config; + +import org.springframework.util.Assert; + +/** + * 认证服务器配置器适配器 + * + * @author zhaowenhao + * @since 2023-03-19 + */ +public class AuthServerConfigurerAdapter implements AuthServerConfigurer { + @Override + public void configure(AuthServerEndpointsConfigurer configurer) throws Exception { + Assert.notNull(configurer, "认证服务器端点配置器不能为空"); + } +} diff --git a/src/main/java/com/metalloop/common/auth/config/AuthServerEndpointsConfigurer.java b/src/main/java/com/metalloop/common/auth/config/AuthServerEndpointsConfigurer.java new file mode 100644 index 0000000..ac97f3c --- /dev/null +++ b/src/main/java/com/metalloop/common/auth/config/AuthServerEndpointsConfigurer.java @@ -0,0 +1,227 @@ +package com.metalloop.common.auth.config; + + +import com.metalloop.common.auth.handler.*; +import com.metalloop.common.auth.sso.SsoCodeService; +import com.metalloop.common.auth.userdetails.UserDetailsService; +import com.metalloop.common.enums.LoginType; + +/** + * 认证服务器端点配置器 + * + * @author zhaowenhao + * @since 2023-03-19 + */ +public class AuthServerEndpointsConfigurer { + + /** + * 账号类型 + */ + private LoginType loginType = LoginType.DEFAULT; + + /** + * 用户详细信息服务 + */ + private UserDetailsService userDetailsService; + + /** + * 登录处理Url + */ + private String loginProcessingUrl = "/login"; + + /** + * 登录处理Url + */ + private String verifyCodeProcessingUrl = "/getVerifyCode"; + + /** + * 登出处理Url + */ + private String logoutProcessingUrl = "/logout"; + + /** + * 公钥提取Url + */ + private String publicKeyFetchUrl = "/rsa/public-key"; + + /** + * 登录成功处理器 + */ + private LoginSuccessHandler loginSuccessHandler = new DefaultLoginSuccessHandler(); + + /** + * 验证码生成处理器 + */ + private VerifyCodeHandler verifyCodeHandler = new DefaultVerifyCodeHandler(); + + /** + * 密码校验失败处理器 + */ + private PasswordCheckFailureHandler passwordCheckFailureHandler = new DefaultPasswordCheckFailureHandler(); + + /** + * 登出成功处理器 + */ + private LogoutSuccessHandler logoutSuccessHandler = new DefaultLogoutSuccessHandler(); + + /** + * 是否启用单点登录 + */ + private Boolean enableSso = false; + + /** + * 单点登录授权码服务 + */ + private SsoCodeService ssoCodeService; + + /** + * 单点登录授权码过期时间 + */ + private Integer ssoCodeTimeOut = 300; + + /** + * 单点登录授权码获取Url + */ + private String ssoCodeFetchUrl = "/sso/code"; + + /** + * 单点登录授权码用户信息获取Url + */ + private String ssoUserinfoFetchUrl = "/sso/userinfo"; + + + public AuthServerEndpointsConfigurer loginType(LoginType loginType) { + this.loginType = loginType; + return this; + } + + public AuthServerEndpointsConfigurer userDetailsService(UserDetailsService userDetailsService) { + this.userDetailsService = userDetailsService; + return this; + } + + public AuthServerEndpointsConfigurer loginProcessingUrl(String loginProcessingUrl) { + this.loginProcessingUrl = loginProcessingUrl; + return this; + } + + public AuthServerEndpointsConfigurer verifyCodeProcessingUrl(String verifyCodeProcessingUrl) { + this.verifyCodeProcessingUrl = verifyCodeProcessingUrl; + return this; + } + + public AuthServerEndpointsConfigurer logoutProcessingUrl(String logoutProcessingUrl) { + this.logoutProcessingUrl = logoutProcessingUrl; + return this; + } + + public AuthServerEndpointsConfigurer publicKeyFetchUrl(String publicKeyFetchUrl) { + this.publicKeyFetchUrl = publicKeyFetchUrl; + return this; + } + + public AuthServerEndpointsConfigurer loginSuccessHandler(LoginSuccessHandler loginSuccessHandler) { + this.loginSuccessHandler = loginSuccessHandler; + return this; + } + + public AuthServerEndpointsConfigurer verifyCodeHandler(VerifyCodeHandler verifyCodeHandler) { + this.verifyCodeHandler = verifyCodeHandler; + return this; + } + + public AuthServerEndpointsConfigurer passwordCheckFailureHandler(PasswordCheckFailureHandler passwordCheckFailureHandler) { + this.passwordCheckFailureHandler = passwordCheckFailureHandler; + return this; + } + + public AuthServerEndpointsConfigurer logoutSuccessHandler(LogoutSuccessHandler logoutSuccessHandler) { + this.logoutSuccessHandler = logoutSuccessHandler; + return this; + } + + public AuthServerEndpointsConfigurer enableSso(boolean enableSso) { + this.enableSso = enableSso; + return this; + } + + public AuthServerEndpointsConfigurer ssoCodeService(SsoCodeService ssoCodeService) { + this.ssoCodeService = ssoCodeService; + return this; + } + + public AuthServerEndpointsConfigurer ssoCodeTimeOut(int ssoCodeTimeOut) { + this.ssoCodeTimeOut = ssoCodeTimeOut; + return this; + } + + public AuthServerEndpointsConfigurer ssoCodeFetchUrl(String ssoCodeFetchUrl) { + this.ssoCodeFetchUrl = ssoCodeFetchUrl; + return this; + } + + public AuthServerEndpointsConfigurer ssoUserinfoFetchUrl(String ssoUserinfoFetchUrl) { + this.ssoUserinfoFetchUrl = ssoUserinfoFetchUrl; + return this; + } + + public LoginType getLoginType() { + return loginType; + } + + public UserDetailsService getUserDetailsService() { + return userDetailsService; + } + + public String getLoginProcessingUrl() { + return loginProcessingUrl; + } + + public String getVerifyCodeProcessingUrl() { + return verifyCodeProcessingUrl; + } + + public String getLogoutProcessingUrl() { + return logoutProcessingUrl; + } + + public LoginSuccessHandler getLoginSuccessHandler() { + return loginSuccessHandler; + } + + public VerifyCodeHandler getVerifyCodeHandler() { + return verifyCodeHandler; + } + + public PasswordCheckFailureHandler getPasswordCheckFailureHandler(){ + return passwordCheckFailureHandler; + } + + public LogoutSuccessHandler getLogoutSuccessHandler() { + return logoutSuccessHandler; + } + + public String getPublicKeyFetchUrl() { + return publicKeyFetchUrl; + } + + public Boolean getEnableSso() { + return enableSso; + } + + public SsoCodeService getSsoCodeService() { + return ssoCodeService; + } + + public Integer getSsoCodeTimeOut() { + return ssoCodeTimeOut; + } + + public String getSsoCodeFetchUrl() { + return ssoCodeFetchUrl; + } + + public String getSsoUserinfoFetchUrl() { + return ssoUserinfoFetchUrl; + } +} diff --git a/src/main/java/com/metalloop/common/auth/config/EnableAuthServer.java b/src/main/java/com/metalloop/common/auth/config/EnableAuthServer.java new file mode 100644 index 0000000..ca5857a --- /dev/null +++ b/src/main/java/com/metalloop/common/auth/config/EnableAuthServer.java @@ -0,0 +1,22 @@ +package com.metalloop.common.auth.config; + +import com.metalloop.framework.satoken.admin.config.SaTokenAdminConfiguration; +import com.metalloop.framework.satoken.self.config.SaTokenSelfConfiguration; +import org.springframework.context.annotation.Import; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * 开启认证服务器 + * + * @author zhaowenhao + * @since 2023-03-19 + */ +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.TYPE) +@Import({AuthServerConfiguration.class, SaTokenAdminConfiguration.class, SaTokenSelfConfiguration.class}) +public @interface EnableAuthServer { +} diff --git a/src/main/java/com/metalloop/common/auth/encrypt/KeyProperties.java b/src/main/java/com/metalloop/common/auth/encrypt/KeyProperties.java new file mode 100644 index 0000000..49b711a --- /dev/null +++ b/src/main/java/com/metalloop/common/auth/encrypt/KeyProperties.java @@ -0,0 +1,148 @@ +package com.metalloop.common.auth.encrypt; + +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.core.io.Resource; + +/** + * 加密解密配置 + * + * @author zhaowenhao + * @since 2023-03-19 + */ +@ConfigurationProperties(KeyProperties.PREFIX) +public class KeyProperties { + + /** + * ConfigurationProperties prefix for KeyProperties. + */ + public static final String PREFIX = "auth-server.encrypt"; + + /** + * A symmetric key. As a stronger alternative, consider using a keystore. + */ + private String key; + + /** + * A salt for the symmetric key, in the form of a hex-encoded byte array. As a + * stronger alternative, consider using a keystore. + */ + private String salt = "deadbeef"; + + /** + * Flag to say that a process should fail if there is an encryption or decryption + * error. + */ + private boolean failOnError = true; + + /** + * The key store properties for locating a key in a Java Key Store (a file in a format + * defined and understood by the JVM). + */ + private KeyStore keyStore = new KeyStore(); + + public boolean isFailOnError() { + return this.failOnError; + } + + public void setFailOnError(boolean failOnError) { + this.failOnError = failOnError; + } + + public String getKey() { + return this.key; + } + + public void setKey(String key) { + this.key = key; + } + + public String getSalt() { + return this.salt; + } + + public void setSalt(String salt) { + this.salt = salt; + } + + public KeyStore getKeyStore() { + return this.keyStore; + } + + public void setKeyStore(KeyStore keyStore) { + this.keyStore = keyStore; + } + + /** + * Key store properties. + */ + public static class KeyStore { + + /** + * Location of the key store file, e.g. classpath:/keystore.jks. + */ + private Resource location; + + /** + * Password that locks the keystore. + */ + private String password; + + /** + * Alias for a key in the store. + */ + private String alias; + + /** + * Secret protecting the key (defaults to the same as the password). + */ + private String secret; + + /** + * The KeyStore type. Defaults to jks. + */ + private String type = "jks"; + + public String getAlias() { + return this.alias; + } + + public void setAlias(String alias) { + this.alias = alias; + } + + public Resource getLocation() { + return this.location; + } + + public void setLocation(Resource location) { + this.location = location; + } + + public String getPassword() { + return this.password; + } + + public String getType() { + return type; + } + + public void setPassword(String password) { + this.password = password; + } + + public String getSecret() { + return this.secret == null ? this.password : this.secret; + } + + public void setSecret(String secret) { + this.secret = secret; + } + + public void setType(String type) { + this.type = type; + } + + } + +} + diff --git a/src/main/java/com/metalloop/common/auth/encrypt/KeyStoreKeyFactory.java b/src/main/java/com/metalloop/common/auth/encrypt/KeyStoreKeyFactory.java new file mode 100644 index 0000000..7254eb7 --- /dev/null +++ b/src/main/java/com/metalloop/common/auth/encrypt/KeyStoreKeyFactory.java @@ -0,0 +1,73 @@ +package com.metalloop.common.auth.encrypt; + + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.springframework.core.io.Resource; + +import java.io.IOException; +import java.io.InputStream; +import java.security.KeyFactory; +import java.security.KeyPair; +import java.security.KeyStore; +import java.security.PublicKey; +import java.security.interfaces.RSAPrivateCrtKey; +import java.security.spec.RSAPublicKeySpec; + +/** + * Factory for RSA key pairs from a JKS keystore file. User provides a {@link Resource} location of a keystore file and + * the password to unlock it, and the factory grabs the keypairs from the store by name (and optionally password). + * + * @author Dave Syer + */ +public class KeyStoreKeyFactory { + + private static final Log logger = LogFactory.getLog(KeyStoreKeyFactory.class); + + private final Resource resource; + + private final char[] password; + + private KeyStore store; + + private final Object lock = new Object(); + + public KeyStoreKeyFactory(Resource resource, char[] password) { + this.resource = resource; + this.password = password; + } + + public KeyPair getKeyPair(String alias) { + return getKeyPair(alias, password); + } + + public KeyPair getKeyPair(String alias, char[] password) { + InputStream inputStream = null; + try { + synchronized (lock) { + if (store == null) { + synchronized (lock) { + store = KeyStore.getInstance("jks"); + inputStream = resource.getInputStream(); + store.load(inputStream, this.password); + } + } + } + RSAPrivateCrtKey key = (RSAPrivateCrtKey) store.getKey(alias, password); + RSAPublicKeySpec spec = new RSAPublicKeySpec(key.getModulus(), key.getPublicExponent()); + PublicKey publicKey = KeyFactory.getInstance("RSA").generatePublic(spec); + return new KeyPair(publicKey, key); + } catch (Exception e) { + throw new IllegalStateException("Cannot load keys from store: " + resource, e); + } finally { + try { + if (inputStream != null) { + inputStream.close(); + } + } catch (IOException e) { + logger.warn("Cannot close open stream: ", e); + } + } + } +} + diff --git a/src/main/java/com/metalloop/common/auth/handler/DefaultLoginSuccessHandler.java b/src/main/java/com/metalloop/common/auth/handler/DefaultLoginSuccessHandler.java new file mode 100644 index 0000000..b7e2f53 --- /dev/null +++ b/src/main/java/com/metalloop/common/auth/handler/DefaultLoginSuccessHandler.java @@ -0,0 +1,23 @@ +package com.metalloop.common.auth.handler; + + +import com.metalloop.common.auth.Authentication; +import com.metalloop.common.model.Result; +import com.metalloop.modules.auth.model.resp.AuthenticationResponse; + +/** + * 登录成功处理器默认实现 + * + * @author zhaowenhao + * @since 2023-03-19 + */ +public class DefaultLoginSuccessHandler implements LoginSuccessHandler { + @Override + public Object onSuccess(Authentication authentication) { + AuthenticationResponse authenticationResponse = new AuthenticationResponse(); + authenticationResponse.setAccessToken(authentication.getAccessToken()); + authenticationResponse.setUsername(authentication.getUsername()); + authenticationResponse.setUserId(authentication.getUserId()); + return Result.ok(authenticationResponse); + } +} diff --git a/src/main/java/com/metalloop/common/auth/handler/DefaultLogoutSuccessHandler.java b/src/main/java/com/metalloop/common/auth/handler/DefaultLogoutSuccessHandler.java new file mode 100644 index 0000000..675fdb4 --- /dev/null +++ b/src/main/java/com/metalloop/common/auth/handler/DefaultLogoutSuccessHandler.java @@ -0,0 +1,18 @@ +package com.metalloop.common.auth.handler; + + +import com.metalloop.common.auth.Authentication; +import com.metalloop.common.model.Result; + +/** + * 登出成功处理器默认实现 + * + * @author zhaowenhao + * @since 2023-03-19 + */ +public class DefaultLogoutSuccessHandler implements LogoutSuccessHandler { + @Override + public Object onSuccess(Authentication authentication) { + return Result.ok(); + } +} diff --git a/src/main/java/com/metalloop/common/auth/handler/DefaultPasswordCheckFailureHandler.java b/src/main/java/com/metalloop/common/auth/handler/DefaultPasswordCheckFailureHandler.java new file mode 100644 index 0000000..057bc8e --- /dev/null +++ b/src/main/java/com/metalloop/common/auth/handler/DefaultPasswordCheckFailureHandler.java @@ -0,0 +1,27 @@ +package com.metalloop.common.auth.handler; + + +import com.metalloop.common.auth.userdetails.UserDetails; + +/** + * 密码校验失败处理器默认实现 + * + * @author lifan + * @date 2024/3/26 18:04 + */ +public class DefaultPasswordCheckFailureHandler implements PasswordCheckFailureHandler { + + @Override + public void onFailure(String ip, UserDetails userDetails) { + + } + + @Override + public void onSuccess(String ip, UserDetails userDetails) { + + } + + @Override + public void checkAccountLockStatus(String ip, UserDetails userDetails) { + } +} diff --git a/src/main/java/com/metalloop/common/auth/handler/DefaultVerifyCodeHandler.java b/src/main/java/com/metalloop/common/auth/handler/DefaultVerifyCodeHandler.java new file mode 100644 index 0000000..c44464f --- /dev/null +++ b/src/main/java/com/metalloop/common/auth/handler/DefaultVerifyCodeHandler.java @@ -0,0 +1,15 @@ +package com.metalloop.common.auth.handler; + +public class DefaultVerifyCodeHandler implements VerifyCodeHandler{ + + + @Override + public boolean createVerifyCode(String phoneNum) { + return false; + } + + @Override + public boolean checkVerifyCode(String phoneNum, String verifyCode) { + return false; + } +} diff --git a/src/main/java/com/metalloop/common/auth/handler/LoginSuccessHandler.java b/src/main/java/com/metalloop/common/auth/handler/LoginSuccessHandler.java new file mode 100644 index 0000000..f2fb700 --- /dev/null +++ b/src/main/java/com/metalloop/common/auth/handler/LoginSuccessHandler.java @@ -0,0 +1,21 @@ +package com.metalloop.common.auth.handler; + + +import com.metalloop.common.auth.Authentication; + +/** + * 登录成功处理器 + * + * @author zhaowenhao + * @since 2023-03-19 + */ +public interface LoginSuccessHandler { + + /** + * 处理登录成功的情况,例如生成令牌、返回用户信息等。 + * + * @param authentication 认证信息 + * @return 登录成功后的响应对象 + */ + Object onSuccess(Authentication authentication); +} diff --git a/src/main/java/com/metalloop/common/auth/handler/LogoutSuccessHandler.java b/src/main/java/com/metalloop/common/auth/handler/LogoutSuccessHandler.java new file mode 100644 index 0000000..c3a69bb --- /dev/null +++ b/src/main/java/com/metalloop/common/auth/handler/LogoutSuccessHandler.java @@ -0,0 +1,21 @@ +package com.metalloop.common.auth.handler; + + +import com.metalloop.common.auth.Authentication; + +/** + * 登出成功处理器 + * + * @author zhaowenhao + * @since 2023-03-19 + */ +public interface LogoutSuccessHandler { + + /** + * 处理登出成功的情况,认证信息可能为null + * + * @param authentication 认证信息,可能为null + * @return 登录成功后的响应对象 + */ + Object onSuccess(Authentication authentication); +} diff --git a/src/main/java/com/metalloop/common/auth/handler/PasswordCheckFailureHandler.java b/src/main/java/com/metalloop/common/auth/handler/PasswordCheckFailureHandler.java new file mode 100644 index 0000000..9685ba0 --- /dev/null +++ b/src/main/java/com/metalloop/common/auth/handler/PasswordCheckFailureHandler.java @@ -0,0 +1,35 @@ +package com.metalloop.common.auth.handler; + + +import com.metalloop.common.auth.userdetails.UserDetails; + +/** + * @author lifan + * @date 2024/3/26 17:58 + */ +public interface PasswordCheckFailureHandler { + + /** + * 处理密码校验失败的情况 + * + * @param ip 用户ip + * @param userDetails 账户信息 + */ + void onFailure(String ip, UserDetails userDetails); + + /** + * 处理密码校验成功的情况 + * + * @param ip 用户ip + * @param userDetails 账户信息 + */ + void onSuccess(String ip, UserDetails userDetails); + + /** + * 检查账户锁定状态 + * + * @param ip 用户ip + * @param userDetails 账户信息 + */ + void checkAccountLockStatus(String ip, UserDetails userDetails); +} diff --git a/src/main/java/com/metalloop/common/auth/handler/VerifyCodeHandler.java b/src/main/java/com/metalloop/common/auth/handler/VerifyCodeHandler.java new file mode 100644 index 0000000..1d749a6 --- /dev/null +++ b/src/main/java/com/metalloop/common/auth/handler/VerifyCodeHandler.java @@ -0,0 +1,21 @@ +package com.metalloop.common.auth.handler; + +public interface VerifyCodeHandler { + + /** + * 生成验证码 + * + * @param phoneNum 手机号 + * @return 是否成功 + */ + boolean createVerifyCode(String phoneNum); + + /** + * 校验验证码 + * + * @param phoneNum 手机号 + * @param verifyCode 待校验的验证码 + * @return 是否成功 + */ + boolean checkVerifyCode(String phoneNum, String verifyCode); +} diff --git a/src/main/java/com/metalloop/common/auth/model/AuthenticationMiniAppRequest.java b/src/main/java/com/metalloop/common/auth/model/AuthenticationMiniAppRequest.java new file mode 100644 index 0000000..f8ae73f --- /dev/null +++ b/src/main/java/com/metalloop/common/auth/model/AuthenticationMiniAppRequest.java @@ -0,0 +1,38 @@ +package com.metalloop.common.auth.model; + +import jakarta.validation.constraints.NotBlank; +import lombok.Data; + + +/** + * 小程序公众号认证请求 + * + * @author zhaowenhao + * @since 2023-03-19 + */ +@Data +public class AuthenticationMiniAppRequest { + + /** + * 用户名 + */ + @NotBlank(message = "用户名不能为空") + private String username; + + /** + * 密码 + */ + @NotBlank(message = "密码不能为空") + private String password; + + /** + * openId + */ + @NotBlank(message = "openId") + private String openId; + + /** + * 验证码 + */ + private String verifyCode; +} diff --git a/src/main/java/com/metalloop/common/auth/model/AuthenticationRequest.java b/src/main/java/com/metalloop/common/auth/model/AuthenticationRequest.java new file mode 100644 index 0000000..ccce113 --- /dev/null +++ b/src/main/java/com/metalloop/common/auth/model/AuthenticationRequest.java @@ -0,0 +1,32 @@ +package com.metalloop.common.auth.model; + +import jakarta.validation.constraints.NotBlank; +import lombok.Data; + + +/** + * 认证请求 + * + * @author zhaowenhao + * @since 2023-03-19 + */ +@Data +public class AuthenticationRequest { + + /** + * 用户名 + */ + @NotBlank(message = "用户名不能为空") + private String username; + + /** + * 密码 + */ + @NotBlank(message = "密码不能为空") + private String password; + + /** + * 验证码 + */ + private String verifyCode; +} diff --git a/src/main/java/com/metalloop/common/auth/model/AuthenticationResponse.java b/src/main/java/com/metalloop/common/auth/model/AuthenticationResponse.java new file mode 100644 index 0000000..e6b06cb --- /dev/null +++ b/src/main/java/com/metalloop/common/auth/model/AuthenticationResponse.java @@ -0,0 +1,29 @@ +package com.metalloop.common.auth.model; + +import lombok.Data; + +/** + * 认证响应 + * + * @author zhaowenhao + * @since 2023-03-19 + */ +@Data +public class AuthenticationResponse { + + /** + * 访问令牌 + */ + private String accessToken; + + /** + * 用户登录名 + */ + private String username; + + /** + * 用户ID + */ + private String userId; + +} diff --git a/src/main/java/com/metalloop/common/auth/password/PasswordDecryptor.java b/src/main/java/com/metalloop/common/auth/password/PasswordDecryptor.java new file mode 100644 index 0000000..88ee8b6 --- /dev/null +++ b/src/main/java/com/metalloop/common/auth/password/PasswordDecryptor.java @@ -0,0 +1,18 @@ +package com.metalloop.common.auth.password; + +/** + * 密码解密器 + * + * @author zhaowenhao + * @since 2023-02-02 + */ +public interface PasswordDecryptor { + + /** + * 解密密码密文 + * + * @param rawPassword 密码密文 + * @return 密码明文 + */ + String decrypt(String rawPassword); +} diff --git a/src/main/java/com/metalloop/common/auth/password/RsaPasswordDecryptor.java b/src/main/java/com/metalloop/common/auth/password/RsaPasswordDecryptor.java new file mode 100644 index 0000000..eef8ab5 --- /dev/null +++ b/src/main/java/com/metalloop/common/auth/password/RsaPasswordDecryptor.java @@ -0,0 +1,44 @@ +package com.metalloop.common.auth.password; + +import com.metalloop.common.exception.BadCredentialsException; +import com.metalloop.common.utils.RsaUtils; +import com.metalloop.common.auth.encrypt.KeyProperties; +import com.metalloop.common.auth.encrypt.KeyStoreKeyFactory; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import java.security.KeyPair; +import java.security.PrivateKey; + +/** + * RSA 密码解密器 + * + * @author zhaowenhao + */ +public class RsaPasswordDecryptor implements PasswordDecryptor { + protected final Log logger = LogFactory.getLog(getClass()); + + /** + * Key encryption properties. + */ + private final KeyProperties keyProperties; + + public RsaPasswordDecryptor(KeyProperties keyProperties) { + this.keyProperties = keyProperties; + } + + @Override + public String decrypt(String rawPassword) { + if (keyProperties != null) { + KeyPair keyPair = new KeyStoreKeyFactory(keyProperties.getKeyStore().getLocation(), keyProperties.getKeyStore().getSecret().toCharArray()).getKeyPair(keyProperties.getKeyStore().getAlias()); + PrivateKey privateKey = keyPair.getPrivate(); + try { + return RsaUtils.decrypt(rawPassword, privateKey); + } catch (Exception e) { + logger.debug("Authentication failed: 解密密码出错: " + e.getMessage()); + throw new BadCredentialsException("用户名或密码错误"); + } + } + return rawPassword; + } +} diff --git a/src/main/java/com/metalloop/common/auth/permission/Permission.java b/src/main/java/com/metalloop/common/auth/permission/Permission.java new file mode 100644 index 0000000..1fd0bbb --- /dev/null +++ b/src/main/java/com/metalloop/common/auth/permission/Permission.java @@ -0,0 +1,42 @@ +/* + * Copyright 2004, 2005, 2006 Acegi Technology Pty Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.metalloop.common.auth.permission; + +import java.io.Serializable; + +/** + * 表示权限,包括权限码和权限对应的URI。 + * + * @author zhaowenhao + * @since 2023-03-19 + */ +public interface Permission extends Serializable { + + /** + * 获取权限码 + * + * @return 权限码 + */ + String getPermissionCode(); + + /** + * 获取权限对应的URI + * + * @return 权限对应的URI + */ + String getPermissionUri(); +} diff --git a/src/main/java/com/metalloop/common/auth/permission/PermissionService.java b/src/main/java/com/metalloop/common/auth/permission/PermissionService.java new file mode 100644 index 0000000..0aef218 --- /dev/null +++ b/src/main/java/com/metalloop/common/auth/permission/PermissionService.java @@ -0,0 +1,19 @@ +package com.metalloop.common.auth.permission; + +import java.util.List; +import java.util.concurrent.Future; + +/** + * 权限服务 + * + * @author zhaowenhao + */ +public interface PermissionService { + + /** + * 加载所有权限,实现者应缓存权限列表,避免每次都查询数据库 + * + * @return 权限列表 + */ + Future> loadAllPermissions(); +} diff --git a/src/main/java/com/metalloop/common/auth/permission/SimplePermission.java b/src/main/java/com/metalloop/common/auth/permission/SimplePermission.java new file mode 100644 index 0000000..2dafecd --- /dev/null +++ b/src/main/java/com/metalloop/common/auth/permission/SimplePermission.java @@ -0,0 +1,30 @@ +package com.metalloop.common.auth.permission; + +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 简单的权限实现 + * + * @author zhaowenhao + * @since 2023-03-19 + */ +@Data +@NoArgsConstructor +public class SimplePermission implements Permission { + + /** + * 权限码 + */ + private String permissionCode; + + /** + * 权限对应的URI + */ + private String permissionUri; + + public SimplePermission(String permissionCode, String permissionUri) { + this.permissionCode = permissionCode; + this.permissionUri = permissionUri; + } +} diff --git a/src/main/java/com/metalloop/common/auth/sso/SsoCodeService.java b/src/main/java/com/metalloop/common/auth/sso/SsoCodeService.java new file mode 100644 index 0000000..448c823 --- /dev/null +++ b/src/main/java/com/metalloop/common/auth/sso/SsoCodeService.java @@ -0,0 +1,31 @@ +package com.metalloop.common.auth.sso; + + +import com.metalloop.common.auth.sso.model.SsoUserInfo; +import com.metalloop.common.exception.BadCredentialsException; + +/** + * 单点登录授权码服务,需要一个服务来生成授权码,并验证授权码的有效性 + * + * @author zhaowenhao + * @since 2024-02-28 + */ +public interface SsoCodeService { + + /** + * 生成指定用户的单点登陆授权码 + * + * @param userId 用户ID + * @param timeout 过期时间,单位:秒 + * @return 单点登陆授权码 + */ + String generateCode(String userId, long timeout); + + /** + * 验证单点登陆授权码的有效性,如果授权码有效,返回授权码对应的用户信息 + * + * @param code 单点登陆授权码 + * @return 单点登陆用户信息 + */ + SsoUserInfo validateCode(String code) throws BadCredentialsException; +} diff --git a/src/main/java/com/metalloop/common/auth/sso/model/SimpleSsoUserInfo.java b/src/main/java/com/metalloop/common/auth/sso/model/SimpleSsoUserInfo.java new file mode 100644 index 0000000..5e09c86 --- /dev/null +++ b/src/main/java/com/metalloop/common/auth/sso/model/SimpleSsoUserInfo.java @@ -0,0 +1,298 @@ +package com.metalloop.common.auth.sso.model; + +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +/** + * 简单的用户信息实现 + * + * @author zhaowenhao + * @since 2023-03-19 + */ +@Data +@NoArgsConstructor +public class SimpleSsoUserInfo implements SsoUserInfo { + + // region 用户基本信息 + /** + * 用户在数据库中的唯一标识符 + */ + private String userId; + + /** + * 用户登录名 + */ + private String username; + + /** + * 用户全名 + */ + private String fullName; + + /** + * 用户昵称 + */ + private String nickName; + + /** + * 用户类型 + */ + private String type; + + /** + * 执法类型 + */ + private String lawType; + + /** + * 职位/职称 + */ + private String jobTitle; + + /** + * 用户个人资料页面的 URL + */ + private String profile; + + /** + * 用户个人资料图片的 URL + */ + private String picture; + + /** + * 用户的首选电子邮件地址 + */ + private String email; + + /** + * 用户的首选电话号码 + */ + private String phoneNumber; + + /** + * 用户的性别 + */ + private String gender; + + /** + * 用户的出生日期 + */ + private String birthdate; + + /** + * 用户的地址 + */ + private String address; + + /** + * 用户的身份证号 + */ + private String idNumber; + + /** + * 用户的工作单位 + */ + private String workUnit; + // endregion 用户基本信息 + + // region 用户机构信息 + /** + * 用户机构在数据库中的唯一标识符,为了兼容不同的情况,这里使用字符串类型 + */ + private String orgId; + /** + * 用户的机构编码 + */ + private String orgCode; + + /** + * 用户的机构名称 + */ + private String orgName; + + /** + * 用户的机构级别 + */ + private String orgLevel; + + /** + * 用户的机构类型 + */ + private String orgType; + // endregion 用户机构信息 + + public SimpleSsoUserInfo(Builder builder) { + this.userId = builder.userId; + this.username = builder.username; + this.fullName = builder.fullName; + this.nickName = builder.nickName; + this.type = builder.type; + this.lawType = builder.lawType; + this.jobTitle = builder.jobTitle; + this.profile = builder.profile; + this.picture = builder.picture; + this.email = builder.email; + this.phoneNumber = builder.phoneNumber; + this.gender = builder.gender; + this.birthdate = builder.birthdate; + this.address = builder.address; + this.idNumber = builder.idNumber; + this.workUnit = builder.workUnit; + this.orgId = builder.orgId; + this.orgCode = builder.orgCode; + this.orgName = builder.orgName; + this.orgLevel = builder.orgLevel; + this.orgType = builder.orgType; + } + + public static Builder withUserId(String userId) { + return new Builder(userId); + } + + + public static class Builder { + private final String userId; + private String username; + private String fullName; + private String nickName; + private String type; + private String lawType; + private String jobTitle; + private String profile; + private String picture; + private String email; + private String phoneNumber; + private String gender; + private String birthdate; + private String address; + private String idNumber; + private String workUnit; + private String orgId; + private String orgCode; + private String orgName; + private String orgLevel; + private String orgType; + private List roleNames; + + public Builder(String userId) { + this.userId = userId; + } + + public Builder username(String username) { + this.username = username; + return this; + } + + public Builder fullName(String fullName) { + this.fullName = fullName; + return this; + } + + public Builder nickName(String nickName) { + this.nickName = nickName; + return this; + } + + public Builder type(String type) { + this.type = type; + return this; + } + + public Builder lawType(String lawType) { + this.lawType = lawType; + return this; + } + + public Builder jobTitle(String jobTitle) { + this.jobTitle = jobTitle; + return this; + } + + public Builder profile(String profile) { + this.profile = profile; + return this; + } + + public Builder picture(String picture) { + this.picture = picture; + return this; + } + + public Builder email(String email) { + this.email = email; + return this; + } + + public Builder phoneNumber(String phoneNumber) { + this.phoneNumber = phoneNumber; + return this; + } + + public Builder gender(String gender) { + this.gender = gender; + return this; + } + + public Builder birthdate(String birthdate) { + this.birthdate = birthdate; + return this; + } + + public Builder address(String address) { + this.address = address; + return this; + } + + public Builder idNumber(String idNumber) { + this.idNumber = idNumber; + return this; + } + + public Builder workUnit(String workUnit) { + this.workUnit = workUnit; + return this; + } + + public Builder orgId(String orgId) { + this.orgId = orgId; + return this; + } + + public Builder orgCode(String orgCode) { + this.orgCode = orgCode; + return this; + } + + public Builder orgName(String orgName) { + this.orgName = orgName; + return this; + } + + public Builder orgLevel(String orgLevel) { + this.orgLevel = orgLevel; + return this; + } + + public Builder orgType(String orgType) { + this.orgType = orgType; + return this; + } + + public Builder roleNames(List roleNames) { + this.roleNames = roleNames; + return this; + } + + + + public SimpleSsoUserInfo build() { + return new SimpleSsoUserInfo(this); + } + + public List getRoleNames() { + return roleNames; + } + } +} diff --git a/src/main/java/com/metalloop/common/auth/sso/model/SsoUserInfo.java b/src/main/java/com/metalloop/common/auth/sso/model/SsoUserInfo.java new file mode 100644 index 0000000..3e71341 --- /dev/null +++ b/src/main/java/com/metalloop/common/auth/sso/model/SsoUserInfo.java @@ -0,0 +1,203 @@ +package com.metalloop.common.auth.sso.model; + +import com.fasterxml.jackson.annotation.JsonIgnore; + +import java.io.Serializable; + +/** + * 单点登录用户信息接口,相较于UserInfo,该接口只包含用户的非敏感基本信息,不包含用户的角色和权限信息。 + * + * @author zhaowenhao + * @since 2024-02-28 + */ +public interface SsoUserInfo extends Serializable { + + // region 用户基本信息 + + /** + * 用户在数据库中的唯一标识符,为了兼容不同的情况,这里使用字符串类型。 + * + * @return 用户在数据库中的唯一标识符。 + */ + String getUserId(); + + /** + * 获取用户的Long类型唯一标识符,适配用户唯一标识符为 Long 类型的情况,减少转换代码。 + * + * @return 用户在数据库中的Long类型唯一标识符 + */ + @JsonIgnore + default Long getUserIdAsLong() { + if (getUserId() == null) { + return null; + } + try { + return Long.valueOf(getUserId()); + } catch (Exception e) { + return null; + } + } + + /** + * 返回用户登录名。 + * + * @return 返回用户登录名。 + */ + String getUsername(); + + /** + * 返回用户的全名。 + * + * @return 返回用户的全名 + */ + String getFullName(); + + /** + * 返回用户的昵称。 + * + * @return 返回用户的昵称 + */ + String getNickName(); + + /** + * 返回用户的类型。 + * + * @return 返回用户的类型 + */ + String getType(); + + /** + * 返回执法类型。 + * + * @return 返回执法类型 + */ + String getLawType(); + + /** + * 返回职位/职称 + * + * @return 返回职位/职称 + */ + String getJobTitle(); + + + /** + * 返回用户个人资料页面的URL。 + * + * @return 返回用户个人资料页面的URL。 + */ + String getProfile(); + + /** + * 返回用户个人资料图片的URL。 + * + * @return 用户个人资料图片的URL。 + */ + String getPicture(); + + /** + * 返回用户的首选电子邮件地址。 + * + * @return 户的首选电子邮件地址 + */ + String getEmail(); + + /** + * 返回用户的首选电话号码。 + * + * @return 首选电话号码 + */ + String getPhoneNumber(); + + /** + * 返回用户的性别。 + * + * @return 返回用户的性别 + */ + String getGender(); + + /** + * 返回用户的出生日期。 + * + * @return 用户的出生日期 + */ + String getBirthdate(); + + /** + * 返回用户的地址。 + * + * @return 返回用户的地址 + */ + String getAddress(); + + /** + * 返回用户的身份证号。 + * + * @return 返回用户的身份证号 + */ + String getIdNumber(); + + /** + * 返回用户的工作单位。 + * + * @return 返回用户的工作单位 + */ + String getWorkUnit(); + + // endregion 用户基本信息 + + // region 用户机构信息 + + /** + * 用户机构在数据库中的唯一标识符,为了兼容不同的情况,这里使用字符串类型。 + * + * @return 用户机构在数据库中的唯一标识符 + */ + String getOrgId(); + + /** + * 获取用户机构的Long类型唯一标识符,适配用户机构唯一标识符为 Long 类型的情况,减少转换代码。 + * + * @return 用户机构在数据库中的Long类型唯一标识符 + */ + @JsonIgnore + default Long getOrgIdAsLong() { + if (getOrgId() == null) { + return null; + } + try { + return Long.valueOf(getOrgId()); + } catch (Exception e) { + return null; + } + } + + /** + * 返回用户的机构编码。 + * + * @return 返回用户的机构编码 + */ + String getOrgCode(); + + /** + * 返回用户的机构名称。 + * + * @return 返回用户的机构名称。 + */ + String getOrgName(); + + /** + * 返回用户的机构级别。 + * + * @return 机构级别 + */ + String getOrgLevel(); + + /** + * 返回用户的机构类型。 + * + * @return 机构类型 + */ + String getOrgType(); + // endregion 用户机构信息 +} diff --git a/src/main/java/com/metalloop/common/auth/userdetails/SimpleUserDetails.java b/src/main/java/com/metalloop/common/auth/userdetails/SimpleUserDetails.java new file mode 100644 index 0000000..5b1e433 --- /dev/null +++ b/src/main/java/com/metalloop/common/auth/userdetails/SimpleUserDetails.java @@ -0,0 +1,45 @@ +package com.metalloop.common.auth.userdetails; + +import com.metalloop.common.auth.permission.SimplePermission; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Collection; + +/** + * 简单的用户核心信息实现 + * + * @author zhaowenhao + * @since 2023-03-19 + */ +@Data +@NoArgsConstructor +public class SimpleUserDetails implements UserDetails { + + private String userId; + private String phoneNum; + private String username; + private String password; + private boolean accountNonExpired; + private boolean accountNonLocked; + private boolean credentialsNonExpired; + private boolean enabled; + private String lawType; + private Collection permissions; + + public SimpleUserDetails(String userId, String phoneNum,String username, String password, + Collection permissions, + boolean accountNonExpired, boolean accountNonLocked, + boolean credentialsNonExpired, boolean enabled, String lawType) { + this.userId = userId; + this.phoneNum = phoneNum; + this.username = username; + this.password = password; + this.permissions = permissions; + this.accountNonExpired = accountNonExpired; + this.accountNonLocked = accountNonLocked; + this.credentialsNonExpired = credentialsNonExpired; + this.enabled = enabled; + this.lawType = lawType; + } +} diff --git a/src/main/java/com/metalloop/common/auth/userdetails/UserDetails.java b/src/main/java/com/metalloop/common/auth/userdetails/UserDetails.java new file mode 100644 index 0000000..d1c3dc5 --- /dev/null +++ b/src/main/java/com/metalloop/common/auth/userdetails/UserDetails.java @@ -0,0 +1,106 @@ +/* + * Copyright 2004, 2005, 2006 Acegi Technology Pty Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.metalloop.common.auth.userdetails; + + +import com.metalloop.common.auth.permission.Permission; + +import java.io.Serializable; +import java.util.Collection; + +/** + * 提供核心用户信息,这些信息稍后会封装到Authentication对象中。这允许将与安 + * 全无关的用户信息(例如电子邮件地址、电话号码等)存储在方便的位置。 + * 具体的实现必须特别小心,以确保强制执行为每个方法详细说明的非空契约。 + * + * @author zhaowenhao + * @see UserDetailsService + * @see Permission + * @since 2023-03-19 + */ +public interface UserDetails extends Serializable { + + /** + * 返回授予用户的权限。无法返回null 。 + * + * @return 按自然键排序的权限集合。 + */ + Collection getPermissions(); + + /** + * 返回用于对用户进行身份验证的用户Id。无法返回null 。 + * + * @return 用户Id + */ + String getUserId(); + + /** + * 用户手机号 + * + * @return 用户手机号 + */ + String getPhoneNum(); + + /** + * 返回用于对用户进行身份验证的用户名。无法返回null 。 + * + * @return 用户名 + */ + String getUsername(); + + /** + * 返回用于验证用户身份的密码。 + * + * @return 密码 + */ + String getPassword(); + + /** + * 指示用户的帐户是否已过期。无法验证过期的帐户。 + * + * @return 如果用户的帐户有效(即未过期)则为true ,如果不再有效(即已过期) false + */ + boolean isAccountNonExpired(); + + /** + * 指示用户是锁定还是解锁。无法对锁定的用户进行身份验证。 + * + * @return 如果用户未被锁定, true ,否则为false + */ + boolean isAccountNonLocked(); + + /** + * 指示用户的凭据(密码)是否已过期。过期的凭据会阻止身份验证。 + * + * @return 如果用户的凭据有效(即未过期), true ;如果不再有效(即,已过期), false + */ + boolean isCredentialsNonExpired(); + + /** + * 指示用户是启用还是禁用。无法对禁用的用户进行身份验证。 + * + * @return 如果用户已启用, true ,否则为false + */ + boolean isEnabled(); + + /** + * 执法类型:0-调度员;1-指挥员;2-办件员 + * @return 用户执法类型 + */ + String getLawType(); + +} diff --git a/src/main/java/com/metalloop/common/auth/userdetails/UserDetailsService.java b/src/main/java/com/metalloop/common/auth/userdetails/UserDetailsService.java new file mode 100644 index 0000000..deb1131 --- /dev/null +++ b/src/main/java/com/metalloop/common/auth/userdetails/UserDetailsService.java @@ -0,0 +1,41 @@ +/* + * Copyright 2004, 2005, 2006 Acegi Technology Pty Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.metalloop.common.auth.userdetails; +//import com.wanji.software.tocc.common.exception.UsernameNotFoundException; + +//import com.wanji.software.tocc.common.exception.UsernameNotFoundException; + +import org.springframework.security.core.userdetails.UsernameNotFoundException; + +/** + * 加载用户特定数据的核心接口,它在整个框架中用作用户 DAO, + * 该接口只需要一种只读方法,这简化了对新数据访问策略的支持 + * + * @author zhaowenhao + * @since 2023-03-19 + */ +public interface UserDetailsService { + + /** + * 根据用户名获取用户详情 + * + * @param username 用户登录名 + * @return 用户详情 + * @throws UsernameNotFoundException 用户名不存在 + */ + UserDetails loadUserByUsername(String username) throws UsernameNotFoundException; +} diff --git a/src/main/java/com/metalloop/common/constant/CommonConstant.java b/src/main/java/com/metalloop/common/constant/CommonConstant.java new file mode 100644 index 0000000..c30e58c --- /dev/null +++ b/src/main/java/com/metalloop/common/constant/CommonConstant.java @@ -0,0 +1,134 @@ +package com.metalloop.common.constant; + +/** + * 全局公共常量 + * + * @author zlt + * @since 2018/10/29 + */ +public interface CommonConstant { + /** + * 项目版本号(banner使用) + */ + String PROJECT_VERSION = "1.0.0"; + + /** + * token请求头名称 + */ + String TOKEN_HEADER = "Authorization"; + + /** + * The access token issued by the authorization server. This value is REQUIRED. + */ + String ACCESS_TOKEN = "access_token"; + + String BEARER_TYPE = "Bearer"; + + /** + * 标签 header key + */ + String HEADER_LABEL = "x-label"; + + /** + * 标签 header 分隔符 + */ + String HEADER_LABEL_SPLIT = ","; + + /** + * 标签或 名称 + */ + String LABEL_OR = "labelOr"; + + /** + * 标签且 名称 + */ + String LABEL_AND = "labelAnd"; + + /** + * 权重key + */ + String WEIGHT_KEY = "weight"; + + /** + * 删除 + */ + String STATUS_DEL = "1"; + + /** + * 正常 + */ + String STATUS_NORMAL = "0"; + + /** + * 锁定 + */ + String STATUS_LOCK = "9"; + + /** + * 目录 + */ + Integer CATALOG = -1; + + /** + * 菜单 + */ + Integer MENU = 1; + + /** + * 权限 + */ + Integer PERMISSION = 2; + + /** + * 删除标记 + */ + String DEL_FLAG = "is_del"; + + /** + * 超级管理员用户名 + */ + String ADMIN_USER_NAME = "admin"; + + /** + * 公共日期格式 + */ + String MONTH_FORMAT = "yyyy-MM"; + String DATE_FORMAT = "yyyy-MM-dd"; + String DATETIME_FORMAT = "yyyy-MM-dd HH:mm:ss"; + String SIMPLE_MONTH_FORMAT = "yyyyMM"; + String SIMPLE_DATE_FORMAT = "yyyyMMdd"; + String SIMPLE_DATETIME_FORMAT = "yyyyMMddHHmmss"; + String TIME_ZONE_GMT8 = "GMT+8"; + + String DEF_USER_PASSWORD = "123456"; + + String LOCK_KEY_PREFIX = "LOCK_KEY"; + + /** + * 租户id参数 + */ + String TENANT_ID_PARAM = "tenantId"; + + + /** + * 日志链路追踪id信息头 + */ + String TRACE_ID_HEADER = "x-traceId-header"; + /** + * 日志链路追踪id日志标志 + */ + String LOG_TRACE_ID = "traceId"; + /** + * 负载均衡策略-版本号 信息头 + */ + String Z_L_T_VERSION = "z-l-t-version"; + /** + * 注册中心元数据 版本号 + */ + String METADATA_VERSION = "version"; + + /** + * 文件分隔符 + */ + String PATH_SPLIT = "/"; +} diff --git a/src/main/java/com/metalloop/common/constant/SecurityConstants.java b/src/main/java/com/metalloop/common/constant/SecurityConstants.java new file mode 100644 index 0000000..37e50af --- /dev/null +++ b/src/main/java/com/metalloop/common/constant/SecurityConstants.java @@ -0,0 +1,21 @@ +package com.metalloop.common.constant; +/** + * Security 相关常量 + * + * @author zhaowenhao + * @since 2023-03-19 + */ +public interface SecurityConstants { + + + /** + * 用户ID请求头 + */ + String HEADER_USER_USERID = "x-userid"; + + /** + * 用户信息在session中的key + */ + String SESSION_KEY_AUTHENTICATION = "AUTHENTICATION_SESSION_KEY"; + +} \ No newline at end of file diff --git a/src/main/java/com/metalloop/common/core/lock/DistributedLock.java b/src/main/java/com/metalloop/common/core/lock/DistributedLock.java new file mode 100644 index 0000000..27f8d2a --- /dev/null +++ b/src/main/java/com/metalloop/common/core/lock/DistributedLock.java @@ -0,0 +1,80 @@ +package com.metalloop.common.core.lock; + +import java.util.concurrent.TimeUnit; + +/** + * 分布式锁顶级接口 + * + * @author zlt + * @date 2018/5/29 14:12 + *

+ * Blog: https://zlt2000.gitee.io + * Github: https://github.com/zlt2000 + */ +public interface DistributedLock { + /** + * 获取锁,如果获取不成功则一直等待直到lock被获取 + * + * @param key 锁的key + * @param leaseTime 加锁的时间,超过这个时间后锁便自动解锁; + * 如果leaseTime为-1,则保持锁定直到显式解锁 + * @param unit {@code leaseTime} 参数的时间单位 + * @param isFair 是否公平锁 + * @return 锁对象 + */ + ZLock lock(String key, long leaseTime, TimeUnit unit, boolean isFair) throws Exception; + + default ZLock lock(String key, long leaseTime, TimeUnit unit) throws Exception { + return this.lock(key, leaseTime, unit, false); + } + + default ZLock lock(String key, boolean isFair) throws Exception { + return this.lock(key, -1, null, isFair); + } + + default ZLock lock(String key) throws Exception { + return this.lock(key, -1, null, false); + } + + /** + * 尝试获取锁,如果锁不可用则等待最多waitTime时间后放弃 + * + * @param key 锁的key + * @param waitTime 获取锁的最大尝试时间(单位 {@code unit}) + * @param leaseTime 加锁的时间,超过这个时间后锁便自动解锁; + * 如果leaseTime为-1,则保持锁定直到显式解锁 + * @param unit {@code waitTime} 和 {@code leaseTime} 参数的时间单位 + * @return 锁对象,如果获取锁失败则为null + */ + ZLock tryLock(String key, long waitTime, long leaseTime, TimeUnit unit, boolean isFair) throws Exception; + + default ZLock tryLock(String key, long waitTime, long leaseTime, TimeUnit unit) throws Exception { + return this.tryLock(key, waitTime, leaseTime, unit, false); + } + + default ZLock tryLock(String key, long waitTime, TimeUnit unit, boolean isFair) throws Exception { + return this.tryLock(key, waitTime, -1, unit, isFair); + } + + default ZLock tryLock(String key, long waitTime, TimeUnit unit) throws Exception { + return this.tryLock(key, waitTime, -1, unit, false); + } + + /** + * 释放锁 + * + * @param lock 锁对象 + */ + void unlock(Object lock) throws Exception; + + /** + * 释放锁 + * + * @param zLock 锁抽象对象 + */ + default void unlock(ZLock zLock) throws Exception { + if (zLock != null) { + this.unlock(zLock.getLock()); + } + } +} diff --git a/src/main/java/com/metalloop/common/core/lock/Lock.java b/src/main/java/com/metalloop/common/core/lock/Lock.java new file mode 100644 index 0000000..a4edfca --- /dev/null +++ b/src/main/java/com/metalloop/common/core/lock/Lock.java @@ -0,0 +1,43 @@ +package com.metalloop.common.core.lock; + +import java.lang.annotation.*; +import java.util.concurrent.TimeUnit; + +/** + * @author zlt + * @date 2020/6/6 + *

+ * Blog: https://zlt2000.gitee.io + * Github: https://github.com/zlt2000 + */ +@Target({ElementType.METHOD, ElementType.TYPE}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface Lock { + /** + * 锁的key + */ + String key(); + + /** + * 获取锁的最大尝试时间(单位 {@code unit}) + * 该值大于0则使用 locker.tryLock 方法加锁,否则使用 locker.lock 方法 + */ + long waitTime() default 0; + + /** + * 加锁的时间(单位 {@code unit}),超过这个时间后锁便自动解锁; + * 如果leaseTime为-1,则保持锁定直到显式解锁 + */ + long leaseTime() default -1; + + /** + * 参数的时间单位 + */ + TimeUnit unit() default TimeUnit.SECONDS; + + /** + * 是否公平锁 + */ + boolean isFair() default false; +} diff --git a/src/main/java/com/metalloop/common/core/lock/LockAspect.java b/src/main/java/com/metalloop/common/core/lock/LockAspect.java new file mode 100644 index 0000000..ea4a592 --- /dev/null +++ b/src/main/java/com/metalloop/common/core/lock/LockAspect.java @@ -0,0 +1,98 @@ +package com.metalloop.common.core.lock; + +import cn.hutool.core.util.StrUtil; +import com.metalloop.common.exception.LockException; +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.reflect.MethodSignature; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.DefaultParameterNameDiscoverer; +import org.springframework.expression.EvaluationContext; +import org.springframework.expression.Expression; +import org.springframework.expression.spel.standard.SpelExpressionParser; +import org.springframework.expression.spel.support.StandardEvaluationContext; + +/** + * 分布式锁切面 + * + * @author zlt + * @date 2020/6/6 + *

+ * Blog: https://zlt2000.gitee.io + * Github: https://github.com/zlt2000 + */ +@Slf4j +@Aspect +public class LockAspect { + @Autowired(required = false) + private DistributedLock locker; + + /** + * 用于SpEL表达式解析. + */ + private SpelExpressionParser spelExpressionParser = new SpelExpressionParser(); + /** + * 用于获取方法参数定义名字. + */ + private DefaultParameterNameDiscoverer nameDiscoverer = new DefaultParameterNameDiscoverer(); + + @Around("@within(lock) || @annotation(lock)") + public Object aroundLock(ProceedingJoinPoint point, Lock lock) throws Throwable { + if (lock == null) { + // 获取类上的注解 + lock = point.getTarget().getClass().getDeclaredAnnotation(Lock.class); + } + String lockKey = lock.key(); + if (locker == null) { + throw new LockException("DistributedLock is null"); + } + if (StrUtil.isEmpty(lockKey)) { + throw new LockException("lockKey is null"); + } + + if (lockKey.contains("#")) { + MethodSignature methodSignature = (MethodSignature) point.getSignature(); + // 获取方法参数值 + Object[] args = point.getArgs(); + lockKey = getValBySpEL(lockKey, methodSignature, args); + } + ZLock lockObj = null; + try { + // 加锁 + if (lock.waitTime() > 0) { + lockObj = locker.tryLock(lockKey, lock.waitTime(), lock.leaseTime(), lock.unit(), lock.isFair()); + } else { + lockObj = locker.lock(lockKey, lock.leaseTime(), lock.unit(), lock.isFair()); + } + + if (lockObj != null) { + return point.proceed(); + } else { + throw new LockException("锁等待超时"); + } + } finally { + locker.unlock(lockObj); + } + } + + /** + * 解析spEL表达式 + */ + private String getValBySpEL(String spEL, MethodSignature methodSignature, Object[] args) { + // 获取方法形参名数组 + String[] paramNames = nameDiscoverer.getParameterNames(methodSignature.getMethod()); + if (paramNames != null && paramNames.length > 0) { + Expression expression = spelExpressionParser.parseExpression(spEL); + // spring的表达式上下文对象 + EvaluationContext context = new StandardEvaluationContext(); + // 给上下文赋值 + for (int i = 0; i < args.length; i++) { + context.setVariable(paramNames[i], args[i]); + } + return expression.getValue(context).toString(); + } + return null; + } +} diff --git a/src/main/java/com/metalloop/common/core/lock/LockCondition.java b/src/main/java/com/metalloop/common/core/lock/LockCondition.java new file mode 100644 index 0000000..032c6da --- /dev/null +++ b/src/main/java/com/metalloop/common/core/lock/LockCondition.java @@ -0,0 +1,50 @@ +package com.metalloop.common.core.lock; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import lombok.Getter; + +/** + * LockCondition 是一个封装类,它包含了在实现幂等性操作时所需要的关键信息。 + *

+ * 这个类的主要组成部分包括: + *

+ * - 是否开启获取锁及检查(enabled):如果为 true,则执行获取锁及检查;如果为 false,则跳过获取锁及检查。 + *

+ * - 锁定键(lockKey):用于分布式锁的键,唯一标识了应该被锁定的资源。 + *

+ * - 查询包装器(queryWrapper):定义了用于检查数据是否已存在的查询条件。 + *

+ * - 消息(msg):如果已存在符合查询条件的数据,那么这个消息将被用于抛出 IdempotencyException 异常。 + *

+ * 使用 LockCondition 类可以让代码更加清晰和易于理解。它提供了一种方式,使得在实现多条件幂等性检查时,可以将关键信息组织在一起。 + * + * @author zhaowenhao + * @since 2023-05-14 + */ +@Getter +public class LockCondition { + + private final boolean enabled; + + private final String lockKey; + + private final QueryWrapper queryWrapper; + + private final String msg; + + + public LockCondition(boolean enabled, String lockKey, QueryWrapper queryWrapper, String msg) { + this.lockKey = lockKey; + this.queryWrapper = queryWrapper; + this.msg = msg; + this.enabled = enabled; + } + + public LockCondition(String lockKey, QueryWrapper queryWrapper, String msg) { + this.enabled = true; + this.lockKey = lockKey; + this.queryWrapper = queryWrapper; + this.msg = msg; + } + +} diff --git a/src/main/java/com/metalloop/common/core/lock/LockConditionReqDto.java b/src/main/java/com/metalloop/common/core/lock/LockConditionReqDto.java new file mode 100644 index 0000000..34cca60 --- /dev/null +++ b/src/main/java/com/metalloop/common/core/lock/LockConditionReqDto.java @@ -0,0 +1,56 @@ +package com.metalloop.common.core.lock; + +import com.metalloop.common.utils.QueryWrapperBuilder; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.util.function.Function; + +/** + * 幂等性请求 DTO + * + * @author zhaowenhao + * @since 2023-09-11 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class LockConditionReqDto implements Serializable { + /** + * 是否开启获取锁及检查(enabled):如果为 true,则执行获取锁及检查;如果为 false,则跳过获取锁及检查。 + */ + @Schema(description = "是否开启获取锁及检查") + private Boolean enabled; + + /** + * 锁定键(lockKey):用于分布式锁的键,唯一标识了应该被锁定的资源。 + */ + @Schema(description = "锁定键") + private String lockKey; + + /** + * 查询对象:定义了用于检查数据是否已存在的查询条件。 + */ + @Schema(description = "查询对象") + private Q query; + + /** + * 消息(msg):如果已存在符合查询条件的数据,那么这个消息将被用于抛出 IdempotencyException 异常 + */ + @Schema(description = "消息") + private String msg; + + /** + * 转为通用的 LockCondition 对象 + * + * @return LockCondition 对象 + */ + public LockCondition toLockCondition(Function queryMapper) { + return new LockCondition<>(enabled, lockKey, QueryWrapperBuilder.build(queryMapper.apply(query)), msg); + } +} diff --git a/src/main/java/com/metalloop/common/core/lock/ZLock.java b/src/main/java/com/metalloop/common/core/lock/ZLock.java new file mode 100644 index 0000000..3ecc222 --- /dev/null +++ b/src/main/java/com/metalloop/common/core/lock/ZLock.java @@ -0,0 +1,26 @@ +package com.metalloop.common.core.lock; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 锁对象抽象 + * + * @author zlt + * @date 2020/7/28 + *

+ * Blog: https://zlt2000.gitee.io + * Github: https://github.com/zlt2000 + */ +@AllArgsConstructor +public class ZLock implements AutoCloseable { + @Getter + private final Object lock; + + private final DistributedLock locker; + + @Override + public void close() throws Exception { + locker.unlock(lock); + } +} diff --git a/src/main/java/com/metalloop/common/enums/Direction.java b/src/main/java/com/metalloop/common/enums/Direction.java new file mode 100644 index 0000000..4805383 --- /dev/null +++ b/src/main/java/com/metalloop/common/enums/Direction.java @@ -0,0 +1,52 @@ +package com.metalloop.common.enums; + + +import java.util.Locale; + +/** + * 排序方式枚举 ASC-升序 DESC-降序 + * + * @author yy + */ +public enum Direction { + + /** + * 升序 + */ + ASC, + + /** + * 降序 + */ + DESC; + + /** + * 是否升序 + */ + public boolean isAscending() { + return this.equals(ASC); + } + + /** + * 是否降序 + */ + public boolean isDescending() { + return this.equals(DESC); + } + + /** + * 通过字符串获取排序枚举 + * + * @param value 字符串 + * @throws IllegalArgumentException 无法解析错误. + */ + public static Direction fromString(String value) { + + try { + return Direction.valueOf(value.toUpperCase(Locale.US)); + } catch (Exception e) { + throw new IllegalArgumentException(String.format( + "无效值 '%s'! 必须为 'desc' 或者 'asc' (大小写不敏感).", value), e); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/metalloop/common/enums/LoginType.java b/src/main/java/com/metalloop/common/enums/LoginType.java new file mode 100644 index 0000000..30910a0 --- /dev/null +++ b/src/main/java/com/metalloop/common/enums/LoginType.java @@ -0,0 +1,74 @@ +package com.metalloop.common.enums; + +import cn.dev33.satoken.stp.StpLogic; +import cn.dev33.satoken.stp.StpUtil; +import lombok.Getter; + +import java.util.Arrays; +import java.util.Map; +import java.util.Optional; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * 自定义账号类型,多账号体系时以此值区分,sa-token框架默认的账号类型值为login,可以根据需求自定义,但是必须 + * 在本类同包的下面增加对应的新的权限认证类,比如: StpXxxUtil.java。 + * 将cn.dev33.satoken.stp.StpUtil.java类的全部代码复制粘贴到 StpXxxUtil.java里。 + * 更改一下其 stpLogic,从此枚举类中获取。 + *

+ * 自定义的账号类型要记录到下面: + *

+ * admin: 管理员系统使用的账号类型 + *

+ * app: App 使用的账号类型,和login的区别是会话超时时间,app的会话超时时间长一些 + *

+ * self: 自助服务终端使用的账号类型,和login的区别是会话超时时间 + */ +@Getter +public enum LoginType { + + /** + * login + */ + DEFAULT(StpUtil.getLoginType(), StpUtil.getStpLogic()), + + /** + * admin + */ + ADMIN("admin", new StpLogic("admin")), + + /** + * self + */ + SELF("self", new StpLogic("self")), + + /** + * wechat + */ + WECHAT("wechat", new StpLogic("wechat")); + + private final String type; + private final StpLogic stpLogic; + + private static final Map TYPE_TO_ENUM = Arrays.stream(LoginType.values()) + .collect(Collectors.toMap(LoginType::getType, Function.identity())); + + private static final Map STPLOGIC_TO_ENUM = Arrays.stream(LoginType.values()) + .collect(Collectors.toMap(LoginType::getStpLogic, Function.identity())); + + LoginType(String type, StpLogic stpLogic) { + this.type = type; + this.stpLogic = stpLogic; + } + + public static LoginType of(String type) { + return Optional.ofNullable(TYPE_TO_ENUM.get(type)) + .orElseThrow(() -> new IllegalArgumentException("账号类型错误")); + } + + public static LoginType of(StpLogic stpLogic) { + return Optional.ofNullable(STPLOGIC_TO_ENUM.get(stpLogic)) + .orElseThrow(() -> new IllegalArgumentException("账号类型错误")); + } +} + diff --git a/src/main/java/com/metalloop/common/exception/AccountExpiredException.java b/src/main/java/com/metalloop/common/exception/AccountExpiredException.java new file mode 100644 index 0000000..74bd26e --- /dev/null +++ b/src/main/java/com/metalloop/common/exception/AccountExpiredException.java @@ -0,0 +1,46 @@ +/* + * Copyright 2004, 2005, 2006 Acegi Technology Pty Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.metalloop.common.exception; + +/** + * 如果身份验证请求因为账号已过期而被拒绝,则抛出该异常。 + * + * @author zhaowenhao + * @since 2023-03-20 + */ +public class AccountExpiredException extends AccountStatusException { + + /** + * 构造带有指定消息的AccountExpiredException。 + * + * @param msg 详细信息 + */ + public AccountExpiredException(String msg) { + super(msg); + } + + /** + * 构造具有指定消息和根本原因的AccountExpiredException。 + * + * @param msg 详细信息 + * @param cause 根本原因 + */ + public AccountExpiredException(String msg, Throwable cause) { + super(msg, cause); + } + +} diff --git a/src/main/java/com/metalloop/common/exception/AccountStatusException.java b/src/main/java/com/metalloop/common/exception/AccountStatusException.java new file mode 100644 index 0000000..d9fe27c --- /dev/null +++ b/src/main/java/com/metalloop/common/exception/AccountStatusException.java @@ -0,0 +1,35 @@ +/* + * Copyright 2002-2016 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.metalloop.common.exception; + +/** + * 由特定账户状态(锁定、禁用等)引起的身份验证异常的基类。 + * + * @author zhaowenhao + * @since 2023-03-20 + */ +public abstract class AccountStatusException extends AuthenticationException { + + public AccountStatusException(String msg) { + super(msg); + } + + public AccountStatusException(String msg, Throwable cause) { + super(msg, cause); + } + +} diff --git a/src/main/java/com/metalloop/common/exception/AuthenticationException.java b/src/main/java/com/metalloop/common/exception/AuthenticationException.java new file mode 100644 index 0000000..0ea4fc3 --- /dev/null +++ b/src/main/java/com/metalloop/common/exception/AuthenticationException.java @@ -0,0 +1,30 @@ +package com.metalloop.common.exception; + +/** + * 任何原因无效的身份验证对象相关异常的抽象超类 + * + * @author zhaowenhao + * @since 2023-03-19 + */ +public abstract class AuthenticationException extends RuntimeException { + + /** + * 构造具有指定消息和根本原因的AuthenticationException 。 + * + * @param msg 详细信息 + * @param cause 根本原因 + */ + public AuthenticationException(String msg, Throwable cause) { + super(msg, cause); + } + + /** + * 构造具有指定消息且无根本原因的AuthenticationException 。 + * + * @param msg 详细信息 + */ + public AuthenticationException(String msg) { + super(msg); + } + +} diff --git a/src/main/java/com/metalloop/common/exception/BadCredentialsException.java b/src/main/java/com/metalloop/common/exception/BadCredentialsException.java new file mode 100644 index 0000000..db1ce4e --- /dev/null +++ b/src/main/java/com/metalloop/common/exception/BadCredentialsException.java @@ -0,0 +1,45 @@ +/* + * Copyright 2004, 2005, 2006 Acegi Technology Pty Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.metalloop.common.exception; + +/** + * 如果身份验证请求因凭据无效而被拒绝,则抛出该异常。抛出这个异常,说明账号既没有被锁定也没有被禁用. + * + * @author zhaowenhao + * @since 2023-03-19 + */ +public class BadCredentialsException extends AuthenticationException { + + /** + * 构造带有指定消息的BadCredentialsException 。 + * + * @param msg 详细信息 + */ + public BadCredentialsException(String msg) { + super(msg); + } + + /** + * 构造具有指定消息和根本原因的BadCredentialsException 。 + * + * @param msg 详细信息 + * @param cause 根本原因 + */ + public BadCredentialsException(String msg, Throwable cause) { + super(msg, cause); + } +} diff --git a/src/main/java/com/metalloop/common/exception/BusinessException.java b/src/main/java/com/metalloop/common/exception/BusinessException.java new file mode 100644 index 0000000..2893108 --- /dev/null +++ b/src/main/java/com/metalloop/common/exception/BusinessException.java @@ -0,0 +1,74 @@ +package com.metalloop.common.exception; + + +import com.metalloop.common.exception.code.CodeMsg; +import com.metalloop.common.exception.code.ResponseCode; + +/** + * 业务异常 + * + * @author zhaowenhao + * @since 2022-12-27 + */ +public class BusinessException extends RuntimeException { + private static final long serialVersionUID = 6610083281801529147L; + + /** + * 错误码 + */ + private final Integer code; + + + public BusinessException(int code, String message) { + super(message); + this.code = code; + } + + public BusinessException(String message) { + this(ResponseCode.FAIL.getCode(), message); + } + + public BusinessException(CodeMsg codeMsg) { + this(codeMsg.getCode(), codeMsg.getMsg()); + } + + /** + * 获取错误码 + * + * @return 错误码 + */ + public Integer getCode() { + return code; + } + + /** + * 根据错误码和错误消息构建业务异常 + * + * @param code 错误码 + * @param message 错误消息 + * @return 业务异常 + */ + public static BusinessException with(int code, String message) { + return new BusinessException(code, message); + } + + /** + * 根据错误消息构建业务异常 + * + * @param message 错误消息 + * @return 业务异常 + */ + public static BusinessException message(String message) { + return new BusinessException(message); + } + + /** + * 根据错误码与错误消息顶级接口的实现类构建业务异常 + * + * @param codeMsg 错误码与错误消息顶级接口的实现类 + * @return 业务异常 + */ + public static BusinessException with(CodeMsg codeMsg) { + return new BusinessException(codeMsg); + } +} diff --git a/src/main/java/com/metalloop/common/exception/CredentialsExpiredException.java b/src/main/java/com/metalloop/common/exception/CredentialsExpiredException.java new file mode 100644 index 0000000..fcb22a6 --- /dev/null +++ b/src/main/java/com/metalloop/common/exception/CredentialsExpiredException.java @@ -0,0 +1,46 @@ +/* + * Copyright 2004, 2005, 2006 Acegi Technology Pty Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.metalloop.common.exception; + +/** + * 如果身份验证请求因账户凭据已过期而被拒绝,则抛出该异常。 + * + * @author zhaowenhao + * @since 2023-03-20 + */ +public class CredentialsExpiredException extends AccountStatusException { + + /** + * 构造带有指定消息的CredentialsExpiredException 。 + * + * @param msg 详细消息 + */ + public CredentialsExpiredException(String msg) { + super(msg); + } + + /** + * 构造具有指定消息和根本原因的CredentialsExpiredException + * + * @param msg 详细消息 + * @param cause 根本原因 + */ + public CredentialsExpiredException(String msg, Throwable cause) { + super(msg, cause); + } + +} diff --git a/src/main/java/com/metalloop/common/exception/DefaultExceptionAdvice.java b/src/main/java/com/metalloop/common/exception/DefaultExceptionAdvice.java new file mode 100644 index 0000000..82bcbea --- /dev/null +++ b/src/main/java/com/metalloop/common/exception/DefaultExceptionAdvice.java @@ -0,0 +1,327 @@ +package com.metalloop.common.exception; + +import cn.dev33.satoken.exception.*; +import cn.hutool.core.exceptions.ExceptionUtil; +import cn.hutool.core.map.MapUtil; +import com.metalloop.common.exception.code.ResponseCode; +import com.metalloop.common.exception.model.ApiErrorLog; +import com.metalloop.common.model.Result; +import com.metalloop.common.utils.json.JsonUtils; +import jakarta.servlet.http.HttpServletRequest; +import lombok.extern.slf4j.Slf4j; +import org.slf4j.MDC; +import org.springframework.util.Assert; +import org.springframework.validation.BindException; +import org.springframework.validation.FieldError; +import org.springframework.web.HttpMediaTypeNotSupportedException; +import org.springframework.web.HttpRequestMethodNotSupportedException; +import org.springframework.web.bind.MethodArgumentNotValidException; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.nio.file.AccessDeniedException; +import java.sql.SQLException; +import java.time.LocalDateTime; +import java.util.List; +import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * 异常通用处理 + * + * @author zhaowenhao + * @since 2023-03-25 + */ +@ResponseBody +@Slf4j +public abstract class DefaultExceptionAdvice { + + /** + * 自定义消息包装正则表达式,用于提取自定义消息,特别是错误消息由框架接管,拼接了不友好的信息情况下的消息还原,比如参数校验异常 + */ + public static final Pattern CUSTOM_MESSAGE_PATTERN = Pattern.compile("\\{CustomMessage\\{([^}]+)}}"); + + /** + * IllegalArgumentException异常处理返回json + */ + @ExceptionHandler({IllegalArgumentException.class}) + public Result badRequestException(IllegalArgumentException e) { + return doHandle("参数解析失败", e); + } + + /** + * AccessDeniedException异常处理返回json + */ + @ExceptionHandler({AccessDeniedException.class}) + public Result badMethodExpressException(AccessDeniedException e) { + return doHandle("没有权限请求当前方法", e); + } + + /** + * + */ + @ExceptionHandler({HttpRequestMethodNotSupportedException.class}) + public Result handleHttpRequestMethodNotSupportedException(HttpRequestMethodNotSupportedException e) { + return doHandle("不支持当前请求方法", e); + } + + /** + * + */ + @ExceptionHandler({HttpMediaTypeNotSupportedException.class}) + public Result handleHttpMediaTypeNotSupportedException(HttpMediaTypeNotSupportedException e) { + return doHandle("不支持当前媒体类型", e); + } + + /** + * SQLException sql异常处理 + */ + @ExceptionHandler({SQLException.class}) + public Result handleSqlException(SQLException e) { + return doHandle("服务异常", e, true); + } + + /** + * BusinessException 业务异常处理 + */ + @ExceptionHandler(BusinessException.class) + public Result handleException(BusinessException e) { + log.error("业务异常", e); + return Result.fail(e.getCode(), e.getMessage()); + } + + /** + * ValidationFailedException 参数校验异常 + */ + @ExceptionHandler(ValidationFailedException.class) + public Result handleValidationFailedException(ValidationFailedException e) { + log.error("参数校验异常", e); + return Result.fail(e.getMessage()); + } + + /** + * IdempotencyException 幂等性异常 + */ + @ExceptionHandler(IdempotencyException.class) + public Result handleException(IdempotencyException e) { + log.error("幂等性异常", e); + return doHandle(e.getMessage(), e); + } + + /** + * 参数校验异常 + * + * @param e MethodArgumentNotValidException + * @return Result + */ + @ExceptionHandler(MethodArgumentNotValidException.class) + public Result handlerException(MethodArgumentNotValidException e) { + log.error("参数校验异常", e); + List fieldErrors = e.getBindingResult().getFieldErrors(); + String fieldErrorMsg = getFieldErrorMsg(fieldErrors); + return doHandle(fieldErrorMsg, e); + } + + /** + * 参数校验异常 + * + * @param e BindException + * @return Result + */ + @ExceptionHandler(BindException.class) + public Result handlerException(BindException e) { + log.error("参数校验异常", e); + List fieldErrors = e.getBindingResult().getFieldErrors(); + String fieldErrorMsg = getFieldErrorMsg(fieldErrors); + return doHandle(fieldErrorMsg, e); + } + + /** + * 认证异常 + * + * @param e AuthenticationException + * @return Result + */ + @ExceptionHandler(AuthenticationException.class) + public Result handlerException(AuthenticationException e) { + log.error("认证异常", e); + return doHandle(e.getMessage(), e); + } + + // region sa-token 异常处理 + + @ExceptionHandler(value = {NotLoginException.class}) + public Result handle(NotLoginException e) { + log.error("NotLoginException:{}", e.getMessage()); + return Result.fail(ResponseCode.NO_SESSION); + } + + @ExceptionHandler(value = {NotPermissionException.class}) + public Result handle(NotPermissionException e) { + log.error("NotPermissionException:{}", e.getMessage()); + return Result.fail(ResponseCode.ACCESS_UNAUTHORIZED); + } + + @ExceptionHandler(value = {NotRoleException.class}) + public Result handle(NotRoleException e) { + log.error("NotRoleException:{}", e.getMessage()); + return Result.fail(ResponseCode.ACCESS_UNAUTHORIZED); + } + + @ExceptionHandler(value = {NotSafeException.class}) + public Result handle(NotSafeException e) { + log.error("NotSafeException:{}", e.getMessage()); + return Result.fail(ResponseCode.ACCESS_UNAUTHORIZED); + } + + @ExceptionHandler(value = {SameTokenInvalidException.class}) + public Result handle(SameTokenInvalidException e) { + log.error("SameTokenInvalidException:{}", e.getMessage()); + return Result.fail(ResponseCode.TOKEN_INVALID); + } + + /** + * 处理Sa-Token的异常 + * + * @param e Sa-Token异常 + * @return Result + */ + @ExceptionHandler(value = {SaTokenException.class}) + public Result handle(SaTokenException e) { + log.error("认证异常", e); + return doHandle(e.getMessage(), e); + } + // endregion sa-token 异常处理 + + /** + * 所有未知异常统一处理 + */ + @ExceptionHandler(Exception.class) + public Result handleException(HttpServletRequest req, Exception ex) { + log.error("[defaultExceptionHandler]", ex); + // 插入异常日志 + this.createExceptionLog(req, ex); + // 返回 ERROR Result + return doHandle("系统繁忙", ex, true); + } + + /** + * 处理异常,默认不打印异常堆栈,并返回前端异常信息 + * + * @param msg 返给前端的异常信息 + * @param e 异常 + * @return 返回前端的响应体 + */ + private Result doHandle(String msg, Exception e) { + return doHandle(msg, e, false); + } + + /** + * 处理异常,并返回前端异常信息 + * + * @param msg 返给前端的异常信息 + * @param e 异常 + * @param ifPrintStackTrace 是否打印异常堆栈,系统级或未知异常建议打印 + * @return 返回前端的响应体 + */ + private Result doHandle(String msg, Exception e, boolean ifPrintStackTrace) { + if (ifPrintStackTrace) { + e.printStackTrace(); + } + log.error(msg, e); + return Result.fail(msg); + } + + /** + * 获取参数校验错误信息 + * + * @param fieldErrors fieldErrors + * @return 参数校验错误信息 + */ + private String getFieldErrorMsg(List fieldErrors) { + StringBuilder errorMsg = new StringBuilder("参数校验失败:"); + fieldErrors.forEach(fieldError -> { + String defaultMessage = fieldError.getDefaultMessage(); + String message = extractCustomMessageIfNecessary(defaultMessage); + errorMsg.append(fieldError.getField()).append("-").append(message).append(";"); + }); + return errorMsg.toString(); + } + + private void createExceptionLog(HttpServletRequest req, Throwable e) { + // 插入错误日志 + ApiErrorLog errorLog = new ApiErrorLog(); + try { + // 初始化 errorLog + initExceptionLog(errorLog, req, e); + // 执行插入 errorLog + appendErrorLog(errorLog); + } catch (Throwable th) { + log.error("[createExceptionLog][url({}) log({}) 发生异常]", req.getRequestURI(), JsonUtils.toJsonString(errorLog), th); + } + } + + /** + * 提取自定义消息如果有的话 + * + * @param message 原始消息,可能包含 {CustomMessage{...}} + * @return 提取后的自定义消息 + */ + private String extractCustomMessageIfNecessary(String message) { + Matcher matcher = CUSTOM_MESSAGE_PATTERN.matcher(message); + StringBuilder customMessages = new StringBuilder(); + boolean found = false; + + while (matcher.find()) { + customMessages.append(matcher.group(1)).append(";"); + found = true; + } + + if (found) { + // 移除最后的分号 + if (customMessages.length() > 0 && customMessages.charAt(customMessages.length() - 1) == ';') { + customMessages.setLength(customMessages.length() - 1); + } + return customMessages.toString(); + } + + // 如果没有匹配到自定义消息,返回原始消息 + return message; + } + + /** + * 插入错误日志, 子类实现 + * + * @param errorLog 错误日志 + */ + protected void appendErrorLog(ApiErrorLog errorLog) { + // 插入错误日志,默认不做任何事情 + } + + private void initExceptionLog(ApiErrorLog errorLog, HttpServletRequest request, Throwable e) { + // 设置异常字段 + errorLog.setExceptionName(e.getClass().getName()); + errorLog.setExceptionMessage(ExceptionUtil.getMessage(e)); + errorLog.setExceptionRootCauseMessage(ExceptionUtil.getRootCauseMessage(e)); + errorLog.setExceptionStackTrace(ExceptionUtil.stacktraceToString(e)); + StackTraceElement[] stackTraceElements = e.getStackTrace(); + Assert.notEmpty(stackTraceElements, "异常 stackTraceElements 不能为空"); + StackTraceElement stackTraceElement = stackTraceElements[0]; + errorLog.setExceptionClassName(stackTraceElement.getClassName()); + errorLog.setExceptionFileName(stackTraceElement.getFileName()); + errorLog.setExceptionMethodName(stackTraceElement.getMethodName()); + errorLog.setExceptionLineNumber(stackTraceElement.getLineNumber()); + // 设置其它字段 + errorLog.setTraceId(MDC.get("traceId")); + errorLog.setRequestUrl(request.getRequestURI()); +// Map requestParams = MapUtil.builder() +// .put("query", ServletUtil.getParamMap(request)) +// .put("body", ServletUtil.getBody(request)).build(); +// errorLog.setRequestParams(JsonUtils.toJsonString(requestParams)); +// errorLog.setRequestMethod(request.getMethod()); +// errorLog.setUserAgent(ServletUtils.getUserAgent(request)); +// errorLog.setUserIp(ServletUtil.getClientIP(request)); +// errorLog.setExceptionTime(LocalDateTime.now()); + } +} diff --git a/src/main/java/com/metalloop/common/exception/DisabledException.java b/src/main/java/com/metalloop/common/exception/DisabledException.java new file mode 100644 index 0000000..cbe419e --- /dev/null +++ b/src/main/java/com/metalloop/common/exception/DisabledException.java @@ -0,0 +1,46 @@ +/* + * Copyright 2004, 2005, 2006 Acegi Technology Pty Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.metalloop.common.exception; + +/** + * 如果身份验证请求因账户被禁用而被拒绝,则抛出该异常。 + * + * @author zhaowenhao + * @since 2023-03-20 + */ +public class DisabledException extends AccountStatusException { + + /** + * 构造带有指定消息的DisabledException 。 + * + * @param msg 详细消息 + */ + public DisabledException(String msg) { + super(msg); + } + + /** + * 构造具有指定消息和根本原因的DisabledException 。 + * + * @param msg 详细消息 + * @param cause 根本原因 + */ + public DisabledException(String msg, Throwable cause) { + super(msg, cause); + } + +} diff --git a/src/main/java/com/metalloop/common/exception/IdempotencyException.java b/src/main/java/com/metalloop/common/exception/IdempotencyException.java new file mode 100644 index 0000000..d02ed6a --- /dev/null +++ b/src/main/java/com/metalloop/common/exception/IdempotencyException.java @@ -0,0 +1,14 @@ +package com.metalloop.common.exception; + +/** + * 幂等性异常 + * + * @author zlt + */ +public class IdempotencyException extends RuntimeException { + private static final long serialVersionUID = 6610083281801529147L; + + public IdempotencyException(String message) { + super(message); + } +} diff --git a/src/main/java/com/metalloop/common/exception/LockException.java b/src/main/java/com/metalloop/common/exception/LockException.java new file mode 100644 index 0000000..ba1cfce --- /dev/null +++ b/src/main/java/com/metalloop/common/exception/LockException.java @@ -0,0 +1,14 @@ +package com.metalloop.common.exception; + +/** + * 分布式锁异常 + * + * @author zlt + */ +public class LockException extends RuntimeException { + private static final long serialVersionUID = 6610083281801529147L; + + public LockException(String message) { + super(message); + } +} diff --git a/src/main/java/com/metalloop/common/exception/LockedException.java b/src/main/java/com/metalloop/common/exception/LockedException.java new file mode 100644 index 0000000..ed1ad2e --- /dev/null +++ b/src/main/java/com/metalloop/common/exception/LockedException.java @@ -0,0 +1,46 @@ +/* + * Copyright 2004, 2005, 2006 Acegi Technology Pty Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.metalloop.common.exception; + +/** + * 如果身份验证请求因账户被锁定而被拒绝,则抛出该异常。 + * + * @author zhaowenhao + * @since 2023-03-20 + */ +public class LockedException extends AccountStatusException { + + /** + * 构造一个带有指定消息的LockedException 。 + * + * @param msg 详细信息 + */ + public LockedException(String msg) { + super(msg); + } + + /** + * 构造具有指定消息和根本原因的LockedException 。 + * + * @param msg 详细信息 + * @param cause 根本原因 + */ + public LockedException(String msg, Throwable cause) { + super(msg, cause); + } + +} diff --git a/src/main/java/com/metalloop/common/exception/UsernameNotFoundException.java b/src/main/java/com/metalloop/common/exception/UsernameNotFoundException.java new file mode 100644 index 0000000..461b7e2 --- /dev/null +++ b/src/main/java/com/metalloop/common/exception/UsernameNotFoundException.java @@ -0,0 +1,47 @@ +/* + * Copyright 2004, 2005, 2006 Acegi Technology Pty Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.metalloop.common.exception; + +/** + * 如果UserDetailsService实现无法通过用户名找到用户,则抛出该异常。 + * + * @author zhaowenhao + * @since 2023-03-19 + */ +public class UsernameNotFoundException extends AuthenticationException { + + /** + * 构造带有指定消息的UsernameNotFoundException 。 + * + * @param msg 详细信息。 + */ + public UsernameNotFoundException(String msg) { + super(msg); + } + + /** + * 构造具有指定消息和根本原因的UsernameNotFoundException 。 + * 形参: + * + * @param msg 详细信息 + * @param cause 根本原因 + */ + public UsernameNotFoundException(String msg, Throwable cause) { + super(msg, cause); + } + +} diff --git a/src/main/java/com/metalloop/common/exception/ValidationFailedException.java b/src/main/java/com/metalloop/common/exception/ValidationFailedException.java new file mode 100644 index 0000000..53fc316 --- /dev/null +++ b/src/main/java/com/metalloop/common/exception/ValidationFailedException.java @@ -0,0 +1,34 @@ +package com.metalloop.common.exception; + +import java.util.Collections; +import java.util.List; +import java.util.Map; + +/** + * 参数校验失败异常 + * + * @author zhaowenhao + * @version 2023-05-04 + */ +public class ValidationFailedException extends RuntimeException { + private final Map> linkedEntities; + + public ValidationFailedException(String message) { + super(message); + this.linkedEntities = Collections.emptyMap(); + } + + public ValidationFailedException(String message, Map> linkedEntities) { + super(message); + this.linkedEntities = linkedEntities; + } + + public ValidationFailedException(String message, Throwable cause) { + super(message, cause); + this.linkedEntities = Collections.emptyMap(); + } + + public Map> getLinkedEntities() { + return linkedEntities; + } +} diff --git a/src/main/java/com/metalloop/common/exception/code/CodeMsg.java b/src/main/java/com/metalloop/common/exception/code/CodeMsg.java new file mode 100644 index 0000000..2817795 --- /dev/null +++ b/src/main/java/com/metalloop/common/exception/code/CodeMsg.java @@ -0,0 +1,23 @@ +package com.metalloop.common.exception.code; + +/** + * 错误码与错误消息的顶级接口 + * + * @author zhaowenhao + * @since 2022-12-27 + */ +public interface CodeMsg { + /** + * 获取错误码 + * + * @return 获取错误码 + */ + Integer getCode(); + + /** + * 获取错误消息 + * + * @return 获取错误消息 + */ + String getMsg(); +} diff --git a/src/main/java/com/metalloop/common/exception/code/ResponseCode.java b/src/main/java/com/metalloop/common/exception/code/ResponseCode.java new file mode 100644 index 0000000..0be3fb2 --- /dev/null +++ b/src/main/java/com/metalloop/common/exception/code/ResponseCode.java @@ -0,0 +1,124 @@ +package com.metalloop.common.exception.code; + +/** + * 通用错误码 + * + * @author Lei + * @since 2022/10/26 20:12 + */ +@SuppressWarnings("AlibabaEnumConstantsMustHaveComment") +public enum ResponseCode implements CodeMsg { + + SUCCESS(0, "操作成功"), + FAIL(1, "操作失败"), + + SYSTEM_BUSY(500001, "系统繁忙,请稍候再试"), + OPERATION_ERROR(500002, "操作失败"), + FIELD_BINDING_ERROR(400001, "请求字段参数校验失败"), + FIELD_FORMAT_ERROR(400002, "请求参数格式错误"), + FIELD_MISSING_ERROR(400003, "请求参数不完整或不对"), + REQUEST_BODY_MISSING(400004, "需要请求体"), + + ACCOUNT_CLIENT_ERROR(400000, "用户端错误"), + + ACCOUNT_REGISTER_ERROR(400100, "用户注册异常"), + ACCOUNT_EXISTS(400101, "用户名已存在"), + ACCOUNT_ERROR(400102, "用户名校验错误"), + ACCOUNT_CONTAINS_SENSITIVE(400103, "用户名包含敏感词 "), + ACCOUNT_CONTAINS_SPECIAL(400104, "用户名包含特殊字符"), + PASSWORD_ERROR(400105, "密码校验错误"), + PASSWORD_TOO_SHORT(400106, "密码长度不够"), + PASSWORD_TOO_WEAK(400107, "密码强度不够"), + VCODE_ERROR(400108, "校验码错误"), + SMS_VCODE_ERROR(400109, "短信校验码错误"), + EMAIL_VCODE_ERROR(400110, "邮件校验码错误"), + ID_NUMBER_FORMAT_ERROR(400111, "身份证号格式错误"), + PHONE_NUMBER_FORMAT_ERROR(400112, "手机号格式错误"), + ADDRESS_ERROR(400113, "地址错误"), + EMAIL_FORMAT_ERROR(400114, "邮箱格式错误"), + + ACCOUNT_LOGIN_EXCEPTION(400200, "用户登录异常"), + NOT_ACCOUNT(400201, "用户名不存在"), + ACCOUNT_IS_LOCKED(400202, "用户被锁定,请联系管理人员"), + ACCOUNT_HAS_EXPIRED(400203, "用户已作废"), + USERNAME_OR_PASSWORD_WRONG(400204, "用户名或密码错误"), + WRONG_PASSWORD(400205, "密码错误"), + WRONG_PASSWORDS_OVER_LIMIT(400206, "用户输入密码错误次数超限"), + ACCOUNT_LOGIN_EXPIRED(400207, "用户登录已过期"), + ACCOUNT_VCODE_ERROR(400208, "用户验证码错误"), + WRONG_VCODE_OVER_LIMIT(400209, "用户验证码错误次数超限"), + NO_AUTHORIZED(400210, "用户未获得第三方登录授权 "), + NO_SESSION(400211, "登录信息失效"), + CREDENTIALS_EXPIRED(400212, "登录凭证已过期,请重新登录"), + CREDENTIALS_EXCEPTION(400213, "登录凭证异常,请重新登录"), + ID_NUMBER_ERROR(400214, "身份证号错误"), + PHONE_NUMBER_ERROR(400215, "手机号错误"), + EMAIL_ERROR(400216, "邮箱错误"), + + ACCOUNT_ACCESS_EXCEPTION(400300, "用户访问权限异常"), + ACCESS_UNAUTHORIZED(400301, "访问未授权"), + NOT_TOKEN(400302, "未提供token"), + TOKEN_INVALID(400303, "token无效"), + TOKEN_TIMEOUT(400304, "token已过期"), + TOKEN_BE_REPLACED(400305, "token已被顶下线"), + TOKEN_KICK_OUT(400306, "token已被踢下线"), + TOKEN_OTHER(400307, "token异常"), + + PARAMETER_ERROR(400400, "用户请求参数错误"), + NOT_PARAMETER(400401, "请求必填参数为空"), + PARAMETER_VERIFICATION_ERROR(400402, "请求参数指定校验失败"), + PARAMETER_FORMAT_ERROR(400403, "请求参数格式错误"), + INCOMPLETE_PARAMETERS(400404, "请求参数不完整"), + NOT_REQUEST_BODY(400405, "无请求体"), + NOT_ID(400406, "id为空"), + NOT_ORGCODE(400407, "机构编码为空"), + NOT_SITECODE(400408, "站点编码为空"), + + PERMISSION_MANAGEMENT_EXCEPTION(400500, "权限管理异常"), + NOT_ORG(400501, "机构不存在"), + ORG_HAS_SUBORG(400502, "该机构存在下级机构,无法删除"), + ORGNAME_EXISTS(400503, "机构名已存在"), + ORG_LINKED_USER(400504, "机构关联用户,无法删除"), + ROLENAME_EXISTS(400505, "角色名已存在"), + ROLE_LINKED_USER(400506, "角色关联用户,无法删除"), + NOT_ROLE(400507, "角色为空"), + NOT_PERMISSION(400508, "权限为空"), + + REQUEST_SERVICE_EXCEPTION(400600, "用户请求服务异常"), + REQUEST_COUNT_OVER_LIMIT(400601, "请求次数超出限制 "), + REQUEST_CONCURRENCY_COUNT_OVER_LIMIT(400602, "请求并发数超出限制 "), + WEBSOCKET_CONNECTION_EXCEPTION(400603, "WebSocket 连接异常"), + WEBSOCKET_CONNECTION_DISCONNECTED(400604, "WebSocket 连接断开"), + USER_REPEATED_REQUEST(400605, "用户重复请求"), + + GATEWAY_ERROR(400700, "网关异常"), + GATEWAY_NOT_FOUND_SERVICE(400701, "服务未找到"), + GATEWAY_CONNECT_TIME_OUT(400702, "网关超时"), + UPLOAD_FILE_SIZE_LIMIT(400703, "上传文件大小超过限制"), + DUPLICATE_PRIMARY_KEY(400704, "唯一键冲突"); + + /** + * 错误码 + */ + private final Integer code; + + /** + * 错误消息 + */ + private final String msg; + + ResponseCode(int code, String msg) { + this.code = code; + this.msg = msg; + } + + @Override + public Integer getCode() { + return code; + } + + @Override + public String getMsg() { + return msg; + } +} diff --git a/src/main/java/com/metalloop/common/exception/model/ApiErrorLog.java b/src/main/java/com/metalloop/common/exception/model/ApiErrorLog.java new file mode 100644 index 0000000..fd2feac --- /dev/null +++ b/src/main/java/com/metalloop/common/exception/model/ApiErrorLog.java @@ -0,0 +1,107 @@ +package com.metalloop.common.exception.model; + +import lombok.Data; +// +//import javax.validation.constraints.NotNull; +import java.time.LocalDateTime; + +/** + * API 错误日志 + * + * @author zhaowenhao + */ +@Data +public class ApiErrorLog { + + /** + * 链路编号 + */ + private String traceId; + /** + * 账号编号 + */ + private Long userId; + /** + * 用户类型 + */ + private Integer userType; + /** + * 应用名 + */ +// @NotNull(message = "应用名不能为空") + private String applicationName; + + /** + * 请求方法名 + */ +// @NotNull(message = "http 请求方法不能为空") + private String requestMethod; + /** + * 访问地址 + */ +// @NotNull(message = "访问地址不能为空") + private String requestUrl; + /** + * 请求参数 + */ + // @NotNull(message = "请求参数不能为空") + private String requestParams; + /** + * 用户 IP + */ + // @NotNull(message = "ip 不能为空") + private String userIp; + /** + * 浏览器 UA + */ + // @NotNull(message = "User-Agent 不能为空") + private String userAgent; + + /** + * 异常时间 + */ + // @NotNull(message = "异常时间不能为空") + private LocalDateTime exceptionTime; + /** + * 异常名 + */ + // @NotNull(message = "异常名不能为空") + private String exceptionName; + /** + * 异常发生的类全名 + */ + // @NotNull(message = "异常发生的类全名不能为空") + private String exceptionClassName; + /** + * 异常发生的类文件 + */ + // @NotNull(message = "异常发生的类文件不能为空") + private String exceptionFileName; + /** + * 异常发生的方法名 + */ + // @NotNull(message = "异常发生的方法名不能为空") + private String exceptionMethodName; + /** + * 异常发生的方法所在行 + */ + // @NotNull(message = "异常发生的方法所在行不能为空") + private Integer exceptionLineNumber; + /** + * 异常的栈轨迹异常的栈轨迹 + */ + // @NotNull(message = "异常的栈轨迹不能为空") + private String exceptionStackTrace; + /** + * 异常导致的根消息 + */ + // @NotNull(message = "异常导致的根消息不能为空") + private String exceptionRootCauseMessage; + /** + * 异常导致的消息 + */ + // @NotNull(message = "异常导致的消息不能为空") + private String exceptionMessage; + + +} diff --git a/src/main/java/com/metalloop/common/model/Result.java b/src/main/java/com/metalloop/common/model/Result.java new file mode 100644 index 0000000..8c5a7a2 --- /dev/null +++ b/src/main/java/com/metalloop/common/model/Result.java @@ -0,0 +1,107 @@ +package com.metalloop.common.model; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.metalloop.common.exception.code.ResponseCode; +import com.metalloop.common.exception.BusinessException; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.util.Objects; + +/** + * 响应包装体 + * + * @author zhaowenhao + * @since 2022-12-27 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class Result implements Serializable { + + private T data; + private Integer code; + private String msg; + + public static Result ok() { + return of(null, ResponseCode.SUCCESS.getCode(), ResponseCode.SUCCESS.getMsg()); + } + + public static Result ok(T data) { + return of(data, ResponseCode.SUCCESS.getCode(), ResponseCode.SUCCESS.getMsg()); + } + + public static Result ok(T data, String msg) { + return of(data, ResponseCode.SUCCESS.getCode(), msg); + } + + public static Result fail() { + return of(null, ResponseCode.FAIL.getCode(), ResponseCode.FAIL.getMsg()); + } + + public static Result fail(String msg) { + return of(null, ResponseCode.FAIL.getCode(), msg); + } + + public static Result fail(int code, String msg) { + return of(null, code, msg); + } + + public static Result fail(ResponseCode responseCode) { + return of(null, responseCode.getCode(), responseCode.getMsg()); + } + + public static Result of(T data, int code, String msg) { + return new Result<>(data, code, msg); + } + + /** + * 判断是否成功 + * + * @param code 状态码 + * @return 是否成功 + */ + public static boolean isSuccess(Integer code) { + return Objects.equals(code, ResponseCode.SUCCESS.getCode()); + } + + /** + * 判断是否成功 + * + * @return 是否成功 + */ + @JsonIgnore + public boolean isSuccess() { + return isSuccess(code); + } + + @JsonIgnore + public boolean isError() { + return !isSuccess(); + } + + // ========= 和 Exception 异常体系集成 ========= + + /** + * 判断是否有异常。如果有,则抛出 {@link BusinessException} 异常 + */ + public void checkError() throws BusinessException { + if (isSuccess()) { + return; + } + // 业务异常 + throw new BusinessException(code, msg); + } + + /** + * 判断是否有异常。如果有,则抛出 {@link BusinessException} 异常 + * 如果没有,则返回 {@link #data} 数据 + */ + @JsonIgnore + public T getCheckedData() { + checkError(); + return data; + } +} diff --git a/src/main/java/com/metalloop/common/redis/RedisAutoConfigure.java b/src/main/java/com/metalloop/common/redis/RedisAutoConfigure.java new file mode 100644 index 0000000..b5a22fc --- /dev/null +++ b/src/main/java/com/metalloop/common/redis/RedisAutoConfigure.java @@ -0,0 +1,140 @@ +package com.metalloop.common.redis; + +import com.metalloop.common.redis.properties.CacheManagerProperties; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.autoconfigure.data.redis.RedisProperties; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.cache.CacheManager; +import org.springframework.cache.annotation.EnableCaching; +import org.springframework.cache.interceptor.KeyGenerator; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Primary; +import org.springframework.data.redis.cache.RedisCacheConfiguration; +import org.springframework.data.redis.cache.RedisCacheManager; +import org.springframework.data.redis.connection.RedisConnectionFactory; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.core.StringRedisTemplate; +import org.springframework.data.redis.serializer.RedisSerializationContext; +import org.springframework.data.redis.serializer.RedisSerializer; +import org.springframework.stereotype.Component; + +import java.time.Duration; +import java.util.HashMap; +import java.util.Map; + +/** + * Redis 配置类,键强制为string序列化,值默认使用json序列化,同时支持java序列化、string序列化 + * 根据需求自行选择 + * 缓存默认启用 + * + * @author zhaowenhao + */ +@SuppressWarnings("DuplicatedCode") +@EnableConfigurationProperties({RedisProperties.class, CacheManagerProperties.class}) +@EnableCaching +@Component +public class RedisAutoConfigure { + @Autowired + private CacheManagerProperties cacheManagerProperties; + + @Bean + public RedisSerializer redisKeyStringSerializer() { + return RedisSerializer.string(); + } + + @Bean + public RedisSerializer redisValueJsonSerializer() { + return RedisSerializer.json(); + } + + @Bean + public RedisSerializer redisValueJavaSerializer() { + return RedisSerializer.java(); + } + + /** + * string-json RedisTemplate配置,默认使用 + * + * @param factory RedisConnectionFactory + * @param redisKeyStringSerializer RedisSerializer + */ + @Bean + public RedisTemplate redisTemplate(RedisConnectionFactory factory, RedisSerializer redisKeyStringSerializer, RedisSerializer redisValueJsonSerializer) { + RedisTemplate redisTemplate = new RedisTemplate<>(); + redisTemplate.setConnectionFactory(factory); + + redisTemplate.setDefaultSerializer(redisValueJsonSerializer); + redisTemplate.setKeySerializer(redisKeyStringSerializer); + redisTemplate.setHashKeySerializer(redisKeyStringSerializer); + redisTemplate.afterPropertiesSet(); + return redisTemplate; + } + + /** + * string-string RedisTemplate配置 + * + * @param redisConnectionFactory RedisConnectionFactory + */ + @Bean + @ConditionalOnMissingBean + public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory redisConnectionFactory) { + StringRedisTemplate template = new StringRedisTemplate(); + template.setConnectionFactory(redisConnectionFactory); + return template; + } + + /** + * string-java RedisTemplate配置 + * + * @param factory RedisConnectionFactory + * @param redisKeyStringSerializer RedisSerializer + */ + @Bean + @ConditionalOnMissingBean(name = "javaRedisTemplate") + public RedisTemplate javaRedisTemplate(RedisConnectionFactory factory, RedisSerializer redisKeyStringSerializer, RedisSerializer redisValueJavaSerializer) { + RedisTemplate template = new RedisTemplate<>(); + template.setConnectionFactory(factory); + + template.setDefaultSerializer(redisValueJavaSerializer); + template.setKeySerializer(redisKeyStringSerializer); + template.setHashKeySerializer(redisKeyStringSerializer); + template.afterPropertiesSet(); + return template; + } + + @Bean(name = "cacheManager") + @Primary + public CacheManager cacheManager(RedisConnectionFactory redisConnectionFactory, RedisSerializer redisKeyStringSerializer, RedisSerializer redisValueJsonSerializer) { + RedisCacheConfiguration difConf = getDefConf(redisKeyStringSerializer, redisValueJsonSerializer).entryTtl(Duration.ofHours(1)); + + // 自定义的缓存过期时间配置 + int configSize = cacheManagerProperties.getConfigs() == null ? 0 : cacheManagerProperties.getConfigs().size(); + Map redisCacheConfigurationMap = new HashMap<>(configSize); + if (configSize > 0) { + cacheManagerProperties.getConfigs().forEach(e -> { + RedisCacheConfiguration conf = getDefConf(redisKeyStringSerializer, redisValueJsonSerializer).entryTtl(Duration.ofSeconds(e.getSecond())); + redisCacheConfigurationMap.put(e.getKey(), conf); + }); + } + + return RedisCacheManager.builder(redisConnectionFactory).cacheDefaults(difConf).withInitialCacheConfigurations(redisCacheConfigurationMap).build(); + } + + @Bean + public KeyGenerator keyGenerator() { + return (target, method, objects) -> { + StringBuilder sb = new StringBuilder(); + sb.append(target.getClass().getName()); + sb.append(":").append(method.getName()).append(":"); + for (Object obj : objects) { + sb.append(obj.toString()); + } + return sb.toString(); + }; + } + + private RedisCacheConfiguration getDefConf(RedisSerializer redisKeyStringSerializer, RedisSerializer redisValueJsonSerializer) { + return RedisCacheConfiguration.defaultCacheConfig().disableCachingNullValues().computePrefixWith(cacheName -> "cache".concat(":").concat(cacheName).concat(":")).serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(redisKeyStringSerializer)).serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(redisValueJsonSerializer)); + } +} diff --git a/src/main/java/com/metalloop/common/redis/lock/RedissonDistributedLock.java b/src/main/java/com/metalloop/common/redis/lock/RedissonDistributedLock.java new file mode 100644 index 0000000..5bda91e --- /dev/null +++ b/src/main/java/com/metalloop/common/redis/lock/RedissonDistributedLock.java @@ -0,0 +1,69 @@ +package com.metalloop.common.redis.lock; + + +import com.metalloop.common.constant.CommonConstant; +import com.metalloop.common.core.lock.DistributedLock; +import com.metalloop.common.core.lock.ZLock; +import com.metalloop.common.exception.LockException; +import org.redisson.api.RLock; +import org.redisson.api.RedissonClient; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.stereotype.Component; + +import java.util.concurrent.TimeUnit; + +/** + * redisson分布式锁实现,基本锁功能的抽象实现 + * 本接口能满足绝大部分的需求,高级的锁功能,请自行扩展或直接使用原生api + * + * @author zhaowenhao + */ +@Component +public class RedissonDistributedLock implements DistributedLock { + @Autowired + private RedissonClient redisson; + + private ZLock getLock(String key, boolean isFair) { + RLock lock; + if (isFair) { + lock = redisson.getFairLock(CommonConstant.LOCK_KEY_PREFIX + ":" + key); + } else { + lock = redisson.getLock(CommonConstant.LOCK_KEY_PREFIX + ":" + key); + } + return new ZLock(lock, this); + } + + @Override + public ZLock lock(String key, long leaseTime, TimeUnit unit, boolean isFair) { + ZLock zLock = getLock(key, isFair); + RLock lock = (RLock) zLock.getLock(); + lock.lock(leaseTime, unit); + return zLock; + } + + @Override + public ZLock tryLock(String key, long waitTime, long leaseTime, TimeUnit unit, boolean isFair) throws InterruptedException { + ZLock zLock = getLock(key, isFair); + RLock lock = (RLock) zLock.getLock(); + if (lock.tryLock(waitTime, leaseTime, unit)) { + return zLock; + } + return null; + } + + @Override + public void unlock(Object lock) { + if (lock != null) { + if (lock instanceof RLock) { + RLock rLock = (RLock) lock; + if (rLock.isLocked()) { + rLock.unlock(); + } + } else { + throw new LockException("requires RLock type"); + } + } + } +} diff --git a/src/main/java/com/metalloop/common/redis/properties/CacheManagerProperties.java b/src/main/java/com/metalloop/common/redis/properties/CacheManagerProperties.java new file mode 100644 index 0000000..7f9f6bf --- /dev/null +++ b/src/main/java/com/metalloop/common/redis/properties/CacheManagerProperties.java @@ -0,0 +1,31 @@ +package com.metalloop.common.redis.properties; + +import lombok.Getter; +import lombok.Setter; +import org.springframework.boot.context.properties.ConfigurationProperties; + +import java.util.List; + +/** + * @author zlt + * @date 2019/1/6 + */ +@Setter +@Getter +@ConfigurationProperties(prefix = "tocc.cache-manager") +public class CacheManagerProperties { + private List configs; + + @Setter + @Getter + public static class CacheConfig { + /** + * cache key + */ + private String key; + /** + * 过期时间,sec + */ + private long second = 60; + } +} diff --git a/src/main/java/com/metalloop/common/redis/properties/RedissonLockAutoConfiguration.java b/src/main/java/com/metalloop/common/redis/properties/RedissonLockAutoConfiguration.java new file mode 100644 index 0000000..e46b793 --- /dev/null +++ b/src/main/java/com/metalloop/common/redis/properties/RedissonLockAutoConfiguration.java @@ -0,0 +1,27 @@ +package com.metalloop.common.redis.properties; + +import com.metalloop.common.core.lock.DistributedLock; +import com.metalloop.common.redis.lock.RedissonDistributedLock; +import org.redisson.api.RedissonClient; +import org.springframework.boot.autoconfigure.AutoConfiguration; +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.context.annotation.Bean; + +@AutoConfiguration +@ConditionalOnClass(RedissonClient.class) +@ConditionalOnProperty( + prefix = "tocc.lock", + name = "lockerType", + havingValue = "REDIS", + matchIfMissing = true +) +public class RedissonLockAutoConfiguration { + + @Bean + @ConditionalOnMissingBean(DistributedLock.class) + public DistributedLock distributedLock() { + return new RedissonDistributedLock(); + } +} \ No newline at end of file diff --git a/src/main/java/com/metalloop/common/redis/template/RedisRepository.java b/src/main/java/com/metalloop/common/redis/template/RedisRepository.java new file mode 100644 index 0000000..8eeef7b --- /dev/null +++ b/src/main/java/com/metalloop/common/redis/template/RedisRepository.java @@ -0,0 +1,577 @@ +package com.metalloop.common.redis.template; + +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.data.redis.connection.RedisClusterNode; +import org.springframework.data.redis.connection.RedisConnectionFactory; +import org.springframework.data.redis.connection.RedisServerCommands; +import org.springframework.data.redis.connection.RedisStringCommands; +import org.springframework.data.redis.core.*; +import org.springframework.data.redis.core.types.Expiration; +import org.springframework.data.redis.serializer.RedisSerializer; +import org.springframework.data.redis.serializer.SerializationUtils; +import org.springframework.util.Assert; + +import java.util.*; +import java.util.concurrent.TimeUnit; + +/** + * Redis Repository + * redis 基本操作 可扩展,基本够用了 + * + *

基于 Spring Boot 3.4.x(Spring Data Redis 3.4.x)API 编写。

+ * + * @author zhaowenhao + */ +@Slf4j +public class RedisRepository { + + /** + * Spring Redis Template + */ + private final RedisTemplate redisTemplate; + + public RedisRepository(RedisTemplate redisTemplate) { + this.redisTemplate = redisTemplate; + } + + /** + * 获取链接工厂 + */ + public RedisConnectionFactory getConnectionFactory() { + return this.redisTemplate.getConnectionFactory(); + } + + /** + * 获取 RedisTemplate 对象 + */ + public RedisTemplate getRedisTemplate() { + return redisTemplate; + } + + /** + * 清空DB + * + * @param node redis 节点 + */ + public void flushDB(RedisClusterNode node) { + this.redisTemplate.opsForCluster().flushDb(node); + } + + // ======================== 写入类操作 ======================== + + /** + * 添加到带有过期时间的缓存(byte[] 版本,直接写原始字节,不做任何序列化包装) + * + *

需要写原始字节,无法迁移到 {@code opsForValue()},故保留底层调用。 + * Spring Data Redis 3.4.x 中 {@code RedisConnection#set} 已标记废弃, + * 但尚无等价的带自定义序列化器的高层 API,故显式抑制警告。

+ * + * @param key redis 主键 + * @param value 值 + * @param time 过期时间(单位秒) + */ + @SuppressWarnings("deprecation") + public void setExpire(final byte[] key, final byte[] value, final long time) { + redisTemplate.execute((RedisCallback) connection -> + connection.set(key, value, + Expiration.seconds(time), + RedisStringCommands.SetOption.upsert())); + } + + /** + * 添加到带有过期时间的缓存(推荐,使用模板自身的序列化器) + * + * @param key redis 主键 + * @param value 值 + * @param time 过期时间 + * @param timeUnit 过期时间单位 + */ + public void setExpire(final String key, final Object value, final long time, final TimeUnit timeUnit) { + redisTemplate.opsForValue().set(key, value, time, timeUnit); + } + + /** + * 添加到带有过期时间的缓存(默认单位为秒) + * + * @param key redis 主键 + * @param value 值 + * @param time 过期时间(单位秒) + */ + public void setExpire(final String key, final Object value, final long time) { + this.setExpire(key, value, time, TimeUnit.SECONDS); + } + + /** + * 添加到带有过期时间的缓存(支持自定义 valueSerializer) + * + *

因需要独立的 {@code valueSerializer},无法迁移到 {@code opsForValue()} 高层 API, + * 故保留底层调用并抑制弃用警告。

+ * + * @param key redis 主键 + * @param value 值 + * @param time 过期时间 + * @param timeUnit 过期时间单位 + * @param valueSerializer 自定义值序列化器 + */ + @SuppressWarnings("deprecation") + public void setExpire(final String key, final Object value, final long time, + final TimeUnit timeUnit, RedisSerializer valueSerializer) { + byte[] rawKey = rawKey(key); + byte[] rawValue = rawValue(value, valueSerializer); + redisTemplate.execute((RedisCallback) connection -> + connection.set(rawKey, rawValue, + Expiration.from(time, timeUnit), + RedisStringCommands.SetOption.upsert())); + } + + /** + * 一次性添加数组到带过期时间的缓存(使用 Pipeline,减少网络往返) + * + * @param keys redis 主键数组 + * @param values 值数组 + * @param time 过期时间(单位秒) + */ + @SuppressWarnings("deprecation") + public void setExpire(final String[] keys, final Object[] values, final long time) { + redisTemplate.executePipelined((RedisCallback) connection -> { + RedisSerializer ks = keySerializer(); + RedisSerializer vs = valueSerializer(); + for (int i = 0; i < keys.length; i++) { + connection.set(Objects.requireNonNull(ks.serialize(keys[i])), Objects.requireNonNull(vs.serialize(values[i])), + Expiration.seconds(time), + RedisStringCommands.SetOption.upsert()); + } + return null; + }); + } + + /** + * 一次性添加数组到缓存(使用 Pipeline,减少网络往返) + * + * @param keys 主键数组 + * @param values 值数组 + */ + @SuppressWarnings("deprecation") + public void set(final String[] keys, final Object[] values) { + redisTemplate.executePipelined((RedisCallback) connection -> { + RedisSerializer ks = keySerializer(); + RedisSerializer vs = valueSerializer(); + for (int i = 0; i < keys.length; i++) { + connection.set(Objects.requireNonNull(ks.serialize(keys[i])), Objects.requireNonNull(vs.serialize(values[i]))); + } + return null; + }); + } + + /** + * 添加到缓存(无过期时间) + * + * @param key the key + * @param value the value + */ + public void set(final String key, final Object value) { + redisTemplate.opsForValue().set(key, value); + } + + // ======================== 读取类操作 ======================== + + /** + * 查询在以 keyPattern 开头的所有 key + * + *

注意:底层使用 KEYS 命令,生产环境数据量大时会阻塞 Redis,请谨慎使用。

+ * + * @param keyPattern the key pattern (会自动追加 "*") + * @return the set + */ + public Set keys(final String keyPattern) { + return redisTemplate.keys(keyPattern + "*"); + } + + /** + * 根据 key 获取原始字节 + * + * @param key the key + * @return the byte[] + */ + public byte[] get(final byte[] key) { + return redisTemplate.execute((RedisCallback) connection -> connection.get(key)); + } + + /** + * 根据 key 获取对象 + * + * @param key the key + * @return the object + */ + public Object get(final String key) { + return redisTemplate.opsForValue().get(key); + } + + /** + * 获取旧值并设置新值(原子操作,对应 Redis 的 SET key value GET 语义) + * + *

使用模板的 valueSerializer,请确保其与调用方期望一致。

+ * + * @param key the key + * @param value the value + * @return 旧值,若不存在返回 null + */ + public String getAndSet(final String key, String value) { + if (StringUtils.isEmpty(key)) { + log.error("非法入参"); + return null; + } + try { + Object oldValue = redisTemplate.opsForValue().getAndSet(key, value); + return oldValue == null ? null : oldValue.toString(); + } catch (Exception e) { + log.error("redisTemplate操作异常", e); + } + return null; + } + + /** + * 根据 key 获取对象(支持自定义 valueSerializer) + * + * @param key the key + * @param valueSerializer 序列化器 + * @return the object + */ + public Object get(final String key, RedisSerializer valueSerializer) { + byte[] rawKey = rawKey(key); + return redisTemplate.execute((RedisCallback) connection -> + deserializeValue(connection.stringCommands().get(rawKey), valueSerializer)); + } + + // ======================== Set 操作 ======================== + + /** + * 缓存 Set + * + * @param key 缓存键值 + * @param dataSet 缓存的数据 + * @return 缓存数据的对象 + */ + public BoundSetOperations setCacheSet(final String key, final Set dataSet) { + BoundSetOperations setOperation = redisTemplate.boundSetOps(key); + Iterator it = dataSet.iterator(); + while (it.hasNext()) { + setOperation.add(it.next()); + } + return setOperation; + } + + /** + * 获得缓存的 set + * + * @param key the key + * @return the set + */ + public Set getCacheSet(final String key) { + return redisTemplate.opsForSet().members(key); + } + + // ======================== Hash 操作 ======================== + + /** + * Ops for hash hash operations. + * + * @return the hash operations + */ + public HashOperations opsForHash() { + return redisTemplate.opsForHash(); + } + + /** + * 对 HashMap 设置值 + * + * @param key the key + * @param hashKey the hash key + * @param hashValue the hash value + */ + public void putHashValue(String key, String hashKey, Object hashValue) { + opsForHash().put(key, hashKey, hashValue); + } + + /** + * 获取单个 field 对应的值 + * + * @param key the key + * @param hashKey the hash key + * @return the hash values + */ + public Object getHashValues(String key, String hashKey) { + return opsForHash().get(key, hashKey); + } + + /** + * 根据 key 值删除 hash 字段 + * + * @param key the key + * @param hashKeys the hash keys + */ + public void delHashValues(String key, Object... hashKeys) { + opsForHash().delete(key, hashKeys); + } + + /** + * key 对应的整个 map + * + * @param key the key + * @return the hash value + */ + public Map getHashValue(String key) { + return opsForHash().entries(key); + } + + /** + * 批量添加 hash + * + * @param key the key + * @param map the map + */ + public void putHashValues(String key, Map map) { + opsForHash().putAll(key, map); + } + + // ======================== 通用操作 ======================== + + /** + * 集合数量 + * + * @return the long + */ + public long dbSize() { + Long size = redisTemplate.execute(RedisServerCommands::dbSize); + return size == null ? 0L : size; + } + + /** + * 清空 redis 存储的数据 + * + * @return the string + */ + public String flushDB() { + return redisTemplate.execute((RedisCallback) connection -> { + connection.flushDb(); + return "ok"; + }); + } + + /** + * 判断某个主键是否存在 + * + * @param key the key + * @return the boolean + */ + public boolean exists(final String key) { + return Boolean.TRUE.equals(redisTemplate.hasKey(key)); + } + + /** + * 批量删除 key + * + * @param keys the keys + * @return 实际删除的数量 + */ + public long del(final String... keys) { + if (keys == null || keys.length == 0) { + return 0L; + } + Long count = redisTemplate.delete(Arrays.asList(keys)); + return count == null ? 0L : count; + } + + /** + * 对某个主键对应的值加一, value 值必须是全数字的字符串 + * + * @param key the key + * @return the long + */ + public long incr(final String key) { + Long value = redisTemplate.opsForValue().increment(key); + return value == null ? 0L : value; + } + + // ======================== List 操作 ======================== + + /** + * redis List 引擎 + * + * @return the list operations + */ + public ListOperations opsForList() { + return redisTemplate.opsForList(); + } + + /** + * redis List 数据结构 : 将一个或多个值 value 插入到列表 key 的表头 + * + * @param key the key + * @param value the value + * @return the long + */ + public Long leftPush(String key, Object value) { + return opsForList().leftPush(key, value); + } + + /** + * redis List 数据结构 : 移除并返回列表 key 的头元素 + * + * @param key the key + * @return the object + */ + public Object leftPop(String key) { + return opsForList().leftPop(key); + } + + /** + * redis List 数据结构 : 将一个或多个值 value 插入到列表 key 的表尾(最右边)。 + * + * @param key the key + * @param value the value + * @return the long + */ + public Long in(String key, Object value) { + return opsForList().rightPush(key, value); + } + + /** + * redis List 数据结构 : 移除并返回列表 key 的末尾元素 + * + * @param key the key + * @return the object + */ + public Object rightPop(String key) { + return opsForList().rightPop(key); + } + + /** + * redis List 数据结构 : 返回列表 key 的长度 + * + * @param key the key + * @return the long + */ + public Long length(String key) { + return opsForList().size(key); + } + + /** + * redis List 数据结构 : 根据参数 i 的值,移除列表中与参数 value 相等的元素 + * + * @param key the key + * @param i the index + * @param value the value + */ + public void remove(String key, long i, Object value) { + opsForList().remove(key, i, value); + } + + /** + * redis List 数据结构 : 将列表 key 下标为 index 的元素的值设置为 value + * + * @param key the key + * @param index the index + * @param value the value + */ + public void set(String key, long index, Object value) { + opsForList().set(key, index, value); + } + + /** + * redis List 数据结构 : 返回列表 key 中指定区间内的元素 + * + * @param key the key + * @param start the start + * @param end the end + * @return the list + */ + public List getList(String key, int start, int end) { + return opsForList().range(key, start, end); + } + + /** + * redis List 数据结构 : 返回列表 key 中指定区间内的元素(自定义 valueSerializer) + * + * @param key the key + * @param start the start + * @param end the end + * @param valueSerializer 序列化器 + * @return the list + */ + public List getList(String key, int start, int end, RedisSerializer valueSerializer) { + byte[] rawKey = rawKey(key); + return redisTemplate.execute((RedisCallback>) connection -> + deserializeValues(connection.listCommands().lRange(rawKey, start, end), valueSerializer)); + } + + /** + * redis List 数据结构 : 批量存储 + * + * @param key the key + * @param list the list + * @return the long + */ + public Long leftPushAll(String key, List list) { + return opsForList().leftPushAll(key, list); + } + + /** + * redis List 数据结构 : 将值 value 插入到列表 key 当中,位于值 index 之前或之后,默认之后。 + * + * @param key the key + * @param index the index + * @param value the value + */ + public void insert(String key, long index, Object value) { + opsForList().set(key, index, value); + } + + // ======================== 私有工具方法 ======================== + + /** + * 获取 key 序列化器(统一类型转换,避免每次强转告警) + */ + @SuppressWarnings("unchecked") + private RedisSerializer keySerializer() { + return (RedisSerializer) redisTemplate.getKeySerializer(); + } + + /** + * 获取 value 序列化器(统一类型转换,避免每次强转告警) + */ + @SuppressWarnings("unchecked") + private RedisSerializer valueSerializer() { + return (RedisSerializer) redisTemplate.getValueSerializer(); + } + + private byte[] rawKey(Object key) { + Assert.notNull(key, "non null key required"); + if (key instanceof byte[]) { + return (byte[]) key; + } + return keySerializer().serialize(key); + } + + private byte[] rawValue(Object value, RedisSerializer valueSerializer) { + if (value instanceof byte[]) { + return (byte[]) value; + } + return valueSerializer.serialize(value); + } + + private List deserializeValues(List rawValues, RedisSerializer valueSerializer) { + if (valueSerializer == null) { + return (List) (List) rawValues; + } + return SerializationUtils.deserialize(rawValues, valueSerializer); + } + + private Object deserializeValue(byte[] value, RedisSerializer valueSerializer) { + if (valueSerializer == null) { + return value; + } + return valueSerializer.deserialize(value); + } +} \ No newline at end of file diff --git a/src/main/java/com/metalloop/common/service/ISuperService.java b/src/main/java/com/metalloop/common/service/ISuperService.java new file mode 100644 index 0000000..55538e7 --- /dev/null +++ b/src/main/java/com/metalloop/common/service/ISuperService.java @@ -0,0 +1,186 @@ +package com.metalloop.common.service; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.service.IService; +import com.metalloop.common.core.lock.DistributedLock; +import com.metalloop.common.core.lock.LockCondition; +import com.metalloop.common.utils.QueryWrapperBuilder; + + +import java.util.List; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * service接口父类 + * + * @author zhaowenhao + * @since 2022-12-10 + */ +@SuppressWarnings("unchecked") +public interface ISuperService extends IService { + + /** + * 使用分布式锁确保保存操作的幂等性。该方法接受一个或多个 LockCondition 对象,对每个条件进行唯一性检查。 + * 所有的条件都必须满足(即对应的记录在数据库中不存在)才会保存实体,否则抛出 IdempotencyException 异常。 + * + * @param entity 需要保存的实体对象 + * @param locker 分布式锁对象 + * @param lockConditions 一个或多个锁条件,每个条件对应一个唯一性检查 + * @return 如果实体保存成功则返回 true,否则抛出异常 + * @throws LockException 如果无法获取锁或锁等待超时则抛出此异常 + * @throws IdempotencyException 如果任何唯一性检查失败则抛出此异常 + */ + boolean saveIdempotency(T entity, DistributedLock locker, LockCondition... lockConditions); + + /** + * 以幂等方式根据实体的ID进行更新。此方法使用分布式锁和锁定条件,以确保操作的幂等性和线程安全性。 + * + * @param entity 需要更新的实体。 + * @param locker 分布式锁。 + * @param lockConditions 在更新之前需要检查的锁定条件。 + * 每个条件包括一个锁定键,一个用于检查现有数据的查询包装器, + * 以及在存在重复数据时抛出异常的消息。 + * @return 如果更新操作成功,则返回true;否则返回false。 + * @throws LockException 如果分布式锁为null或无法获取。 + * @throws IdempotencyException 如果存在重复数据或在更新操作中发生其他异常。 + */ + boolean updateByIdIdempotency(T entity, DistributedLock locker, LockCondition... lockConditions); + + /** + * 这个方法提供了一个并发安全的方式来保存或更新给定的实体。 + * 如果实体已经存在,那么它会被更新,否则,它将会被保存。 + *

+ * 这个方法使用了分布式锁来确保并发安全,并且在执行前会检查是否存在满足条件的记录,从而确保操作的幂等性。 + * 锁和条件检查的行为可以通过 {@link LockCondition} 对象进行配置。 + * + * @param entity 要保存或更新的实体 + * @param lock 分布式锁对象,用于确保并发安全 + * @param lockConditions 锁条件对象数组,定义了锁和条件检查的行为 + * @return 如果操作成功,则返回 true,否则返回 false + * @throws IdempotencyException 如果存在满足条件的记录,或者找不到有效的 {@link TableId} 字段 + */ + boolean saveOrUpdateIdempotency(T entity, DistributedLock lock, LockCondition... lockConditions); + + /** + * 根据查询对象获取对象 + * + * @param query 查询对象 + * @param orQueryArray OR嵌套查询对象数组,如果有的话 + * @param 查询对象类型 + * @return 结果对象 + */ + default T get(Q query, Q... orQueryArray) { + return getOne(getWrapper(query, orQueryArray), Boolean.FALSE); + } + + /** + * 根据查询对象获取列表 + * + * @param 查询对象类型 + * @param query 查询对象 + * @param orQueryArray OR嵌套查询对象数组,如果有的话 + * @return 结果列表 + */ + default List list(Q query, Q... orQueryArray){ + return list(getWrapper(query, orQueryArray)); + } + + /** + * 根据查询对象获取列表,并执行分组,返回Map,适用于确定分组后只有一条数据的情况,否则保留最后一条 + * + * @param keyMapper 生成键的映射函数 + * @param query 查询对象 + * @param orQueryArray OR嵌套查询对象数组,如果有的话 + * @param 查询对象类型 + * @param 返回的Map中的key的类型 + * @return 结果Map + */ + default Map toMap(Function keyMapper, Q query, Q... orQueryArray) { + List list = list(getWrapper(query, orQueryArray)); + return list.stream() + .collect(Collectors.toMap(keyMapper, Function.identity(), (oldValue, newValue) -> newValue)); + } + + + /** + * 根据查询对象获取列表并执行分组,返回Map,每个键都有一个对象列表 + * + * @param keyMapper 生成键的映射函数 + * @param query 查询对象 + * @param orQueryArray OR嵌套查询对象数组,如果有的话 + * @param 查询对象类型 + * @param 返回的Map中的key的类型 + * @return 结果Map,其值是对象列表 + */ + default Map> toGroup(Function keyMapper, Q query, Q... orQueryArray) { + List list = list(getWrapper(query, orQueryArray)); + return list.stream() + .collect(Collectors.groupingBy(keyMapper)); + } + + /** + * 计数查询 + * + * @param query 查询对象 + * @param orQueryArray OR嵌套查询对象数组,如果有的话 + * @param 查询对象类型 + * @return 计数结果 + */ + default long count(Q query, Q... orQueryArray) { + return count(getWrapper(query, orQueryArray)); + } + + /** + * 分页查询 + * + * @param page 分页对象 + * @param query 查询对象 + * @param orQueryArray OR嵌套查询对象数组,如果有的话 + * @param 查询对象类型 + * @param 分页对象类型 + * @return 分页对象 + */ + default > E page(E page, Q query, Q... orQueryArray) { + return page(page, getWrapper(query, orQueryArray)); + } + + /** + * 根据查询对象修改记录 + * + * @param entity 实体对象 + * @param query 查询对象 + * @param orQueryArray OR嵌套查询对象数组,如果有的话 + * @param 查询对象类型 + * @return 是否成功 + */ + default boolean update(T entity, Q query, Q... orQueryArray) { + return update(entity, getWrapper(query, orQueryArray)); + } + + /** + * 根据查询对象删除记录 + * + * @param query 查询对象 + * @param orQueryArray OR嵌套查询对象数组,如果有的话 + * @param 查询对象类型 + * @return 是否成功 + */ + default boolean remove(Q query, Q... orQueryArray) { + return remove(getWrapper(query, orQueryArray)); + } + + /** + * 内部方法根据查询对象获取查询条件 + * + * @param query 查询对象 + * @param orQueryArray OR嵌套查询对象数组,如果有的话 + * @return 查询条件 + */ + default QueryWrapper getWrapper(Q query, Q... orQueryArray) { + return QueryWrapperBuilder.build(query, orQueryArray); + } +} diff --git a/src/main/java/com/metalloop/common/service/impl/SuperServiceImpl.java b/src/main/java/com/metalloop/common/service/impl/SuperServiceImpl.java new file mode 100644 index 0000000..2cf57d9 --- /dev/null +++ b/src/main/java/com/metalloop/common/service/impl/SuperServiceImpl.java @@ -0,0 +1,115 @@ +package com.metalloop.common.service.impl; + +import cn.hutool.core.text.CharSequenceUtil; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.TableInfo; +import com.baomidou.mybatisplus.core.metadata.TableInfoHelper; +import com.baomidou.mybatisplus.core.toolkit.ReflectionKit; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.metalloop.common.core.lock.DistributedLock; +import com.metalloop.common.core.lock.LockCondition; +import com.metalloop.common.core.lock.ZLock; +import com.metalloop.common.exception.IdempotencyException; +import com.metalloop.common.exception.LockException; +import com.metalloop.common.service.ISuperService; +import com.metalloop.modules.auth.model.po.SysPermission; + + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.concurrent.TimeUnit; + +/** + * service实现父类 + * + * @author zhaowenhao + * @since 2022-12-10 + *

+ */ +public abstract class SuperServiceImpl, T> extends ServiceImpl implements ISuperService { + + @SafeVarargs + @Override + public final boolean saveIdempotency(T entity, DistributedLock locker, LockCondition... lockConditions) { + if (locker == null) { + throw new LockException("DistributedLock is null"); + } + + List locks = new ArrayList<>(); + try { + checkRepeat(locker, locks, lockConditions); + return super.save(entity); + } catch (Exception e) { + throw new IdempotencyException(e.getMessage()); + } finally { + for (ZLock lock : locks) { + try { + lock.close(); + } catch (Exception ignored) { + } + } + } + } + + @SafeVarargs + @Override + public final boolean updateByIdIdempotency(T entity, DistributedLock locker, LockCondition... lockConditions) { + if (locker == null) { + throw new LockException("DistributedLock is null"); + } + + List locks = new ArrayList<>(); + try { + checkRepeat(locker, locks, lockConditions); + return super.updateById(entity); + } catch (Exception e) { + throw new IdempotencyException(e.getMessage()); + } finally { + for (ZLock lock : locks) { + try { + lock.close(); + } catch (Exception ignored) { + } + } + } + } + + private void checkRepeat(DistributedLock locker, List locks, LockCondition[] lockConditions) throws Exception { + for (LockCondition condition : lockConditions) { + if (condition.isEnabled()) { + ZLock lock = locker.tryLock(condition.getLockKey(), 10, 60, TimeUnit.SECONDS); + if (lock == null) { + throw new LockException("锁等待超时"); + } + locks.add(lock); + long count = super.count(condition.getQueryWrapper()); + if (count > 0) { + throw new IdempotencyException(condition.getMsg()); + } + } + } + } + + @SafeVarargs + @Override + public final boolean saveOrUpdateIdempotency(T entity, DistributedLock lock, LockCondition... lockConditions) { + if (null != entity) { + Class cls = entity.getClass(); + TableInfo tableInfo = TableInfoHelper.getTableInfo(cls); + if (null != tableInfo && CharSequenceUtil.isNotEmpty(tableInfo.getKeyProperty())) { + Object idVal = ReflectionKit.getFieldValue(entity, tableInfo.getKeyProperty()); + if (StringUtils.checkValNull(idVal) || Objects.isNull(getById((Serializable) idVal))) { + return this.saveIdempotency(entity, lock, lockConditions); + } else { + return updateByIdIdempotency(entity, lock, lockConditions); + } + } else { + throw new IdempotencyException("找不到有效的@TableId字段."); + } + } + return false; + } +} diff --git a/src/main/java/com/metalloop/common/utils/IPHelper.java b/src/main/java/com/metalloop/common/utils/IPHelper.java new file mode 100644 index 0000000..ecac187 --- /dev/null +++ b/src/main/java/com/metalloop/common/utils/IPHelper.java @@ -0,0 +1,68 @@ +package com.metalloop.common.utils; + +import jakarta.servlet.http.HttpServletRequest; + +import java.net.Inet6Address; +import java.net.InetAddress; +import java.net.UnknownHostException; + +/** + * @author lifan + * @date 2024/3/26 10:26 + */ +public class IPHelper { + + private static final String UNKNOWN = "unknown"; + + /** + * 获取用户的真实ip地址 如果有多个就取第一个 + * + * @param request http请求 + * @return 客户端ip + */ + public static String getIpAddr(HttpServletRequest request) { + + if (request == null) { + return null; + } + String ip = request.getHeader("X-Forwarded-For"); + + if (ip == null || ip.isEmpty() || UNKNOWN.equalsIgnoreCase(ip)) { + ip = request.getHeader("Proxy-Client-IP"); + } + if (ip == null || ip.isEmpty() || UNKNOWN.equalsIgnoreCase(ip)) { + ip = request.getHeader("WL-Proxy-Client-IP"); + } + if (ip == null || ip.isEmpty() || UNKNOWN.equalsIgnoreCase(ip)) { + ip = request.getRemoteAddr(); + } + + String[] ips = ip.split(","); + + return ips[0].trim(); + } + + /** + * 将IPV6转化为IPV4 否则采用原来的值 + * + * @param ipvAddress ip地址 + * @return 转化后的地址 + */ + public static String convertIPv6ToIPv4(String ipvAddress) { + try { + InetAddress inet6Address = InetAddress.getByName(ipvAddress); + if (inet6Address instanceof Inet6Address inet6) { + // 如果是IPv6地址 + byte[] ipv4Bytes = new byte[4]; + System.arraycopy(inet6.getAddress(), 12, ipv4Bytes, 0, 4); + InetAddress ipv4Address = InetAddress.getByAddress(ipv4Bytes); + return ipv4Address.getHostAddress(); + } + } catch (UnknownHostException e) { + e.printStackTrace(); + } + return ipvAddress; + } + + +} diff --git a/src/main/java/com/metalloop/common/utils/QueryWrapperBuilder.java b/src/main/java/com/metalloop/common/utils/QueryWrapperBuilder.java new file mode 100644 index 0000000..b17dac8 --- /dev/null +++ b/src/main/java/com/metalloop/common/utils/QueryWrapperBuilder.java @@ -0,0 +1,328 @@ +package com.metalloop.common.utils; + +import cn.hutool.core.text.CharSequenceUtil; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.core.conditions.interfaces.Compare; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.metalloop.common.enums.Direction; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.BeanWrapperImpl; +import org.springframework.beans.BeansException; +import org.springframework.lang.Nullable; + +import java.beans.PropertyDescriptor; +import java.util.*; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; +import java.util.regex.Pattern; +import java.util.stream.Collectors; + +/** + * MyBatis-Plus QueryWrapper 条件构造器,从查询对象中构建查询条件 + * 条件构造遵循以下约定: + *

+ * 1.解析规则 + *

+ * 1.1.查询对象字段值非空(不是null和空字符串)才会加入查询条件 + *

+ * 1.2.查询对象字段对应的数据库字段,通过对应注解 @TableField(value = "client_id") 的value提取 + *

+ * 1.3.查询对象字段值类型是 Direction,用order by片段,如 Direction detectionTimeOrder = Direction.DESC 会转换为 order by detection_time desc + *

+ * 1.4.查询对象字段值类型是 {@link Collection},用in片段,如果以not开头或结尾,使用not in片段如 List<> notSiteCodes 会转换为 site_code not in (?,?,?),否则使用in片段如 List<> siteCodes 会转换为 site_code in (?,?,?)。另请注意:如果集合不为 null 但元素数量为零,不是不加入查询条件,而是加入一个不可能的值,如 in () 会报错,所以会加入 in ('__UNLIKELY_VALUE_300552__'),这样可以避免报错。同时保持字面的含义,即选择了 0 个值,查询结果也为 0 个 + *

+ * 1.5.查询对象字段名以start|lower|min|from开头或结尾,表示范围的下限,用>=片段,如 detectionTimeStart 会转换为 detection_time >= ? + *

+ * 1.6.查询对象字段名以end|upper|max|to开头或结尾,表示范围的上限,用<=片段,如 detectionTimeEnd 会转换为 detection_time <= ? + *

+ * 1.7.查询对象字段名以startEc|lowerEc|minEc|fromEc开头或结尾,Ec约定为‘exclusive’的缩写,表示范围的下限,但是不包含当前值,用>片段,如 detectionTimeStartEc 会转换为 detection_time > ? + *

+ * 1.8.查询对象字段名以endEc|upperEc|maxEc|toEc开头或结尾,Ec约定为‘exclusive’的缩写,表示范围的上限,但是不包含当前值,用<片段,如 detectionTimeEndEc 会转换为 detection_time < ? + *

+ * 1.9.prefix|suffix开头或结尾,表示前缀或后缀查询,用like片段,如 vehPlatePrefix 会转换为 veh_plate like ?% 或 vehPlateSuffix 会转换为 veh_plate like %? + *

+ * 1.10.查询对象字段名以notLike|notContains|notMatches|notMatch开头或结尾,表示否定模糊查询,用not like片段,如 vehPlateNotLike 会转换为 veh_plate not like %?% + *

+ * 1.11.查询对象字段名以like|contains|matches|match开头或结尾,表示模糊查询,用like片段,如 vehPlateLike 会转换为 veh_plate like %?% + *

+ * 1.12.查询对象字段名以fulltext开头或结尾,表示全文检索查询,用MATCH() AGAINST()片段,如 vehPlateFullText 会转换为 MATCH(veh_plate) AGAINST(?) + *

+ * 1.13.查询对象字段名以not开头或结尾,表示否定查询,用not片段,如 vehPlateNot 会转换为 veh_plate != ? + *

+ * 1.14.其他情况表示精确查询,用=片段,如busiNum 会转换为busi_num = ? + *

+ * 2.OR嵌套查询列表 + *

+ * 需要构建OR嵌套查询列表,解析规则同上,解析结果为嵌套查询,最终将转换为 and (site_code in (?,?,?) or detection_time >= ? or ...) + * + * @author zhaowenhao + * @since 2022-12-27 + */ +@SuppressWarnings({"AlibabaMethodTooLong", "DuplicatedCode"}) +public class QueryWrapperBuilder { + + /** + * Utility classes should not have a public or default constructor. + */ + private QueryWrapperBuilder() { + throw new IllegalStateException("Utility class"); + } + + /** + * 不可能的值,用于处理集合为空的情况 + */ + public static final String UNLIKELY_VALUE = "__UNLIKELY_VALUE_300552__"; + + /** + * 范围开始(不包含当前值)正则表达式 + */ + public static final Pattern EXCLUSIVE_RANGE_START_PATTERN = Pattern.compile("(.+(start|lower|min|from)ec)|((start|lower|min|from)ec.+)", Pattern.CASE_INSENSITIVE); + + /** + * 范围结束(不包含当前值)正则表达式 + */ + public static final Pattern EXCLUSIVE_RANGE_END_PATTERN = Pattern.compile("(.+(end|upper|max|to)ec)|((end|upper|max|to)ec.+)", Pattern.CASE_INSENSITIVE); + + /** + * 范围开始正则表达式 + */ + public static final Pattern RANGE_START_PATTERN = Pattern.compile("(.+(start|lower|min|from))|((start|lower|min|from).+)", Pattern.CASE_INSENSITIVE); + + /** + * 范围结束正则表达式 + */ + public static final Pattern RANGE_END_PATTERN = Pattern.compile("(.+(end|upper|max|to))|((end|upper|max|to).+)", Pattern.CASE_INSENSITIVE); + + /** + * 前缀查询 + */ + public static final Pattern PREFIX_PATTERN = Pattern.compile("(.+(prefix))|((prefix).+)", Pattern.CASE_INSENSITIVE); + + /** + * 后缀查询 + */ + public static final Pattern SUFFIX_PATTERN = Pattern.compile("(.+(suffix))|((suffix).+)", Pattern.CASE_INSENSITIVE); + + /** + * 模糊查询 + */ + public static final Pattern LIKE_PATTERN = Pattern.compile("(.+(like|contains|matches|match))|((like|contains|matches|match).+)", Pattern.CASE_INSENSITIVE); + + /** + * 否定模糊查询 + */ + public static final Pattern NOT_LIKE_PATTERN = Pattern.compile("(.+(not)(like|contains|matches|match))|((not)(like|contains|matches|match).+)", Pattern.CASE_INSENSITIVE); + + /** + * 全文检索查询 + */ + public static final Pattern FULL_TEXT_SEARCH_PATTERN = Pattern.compile("(.+(fulltext))|((fulltext).+)", Pattern.CASE_INSENSITIVE); + + /** + * 不等于查询 + */ + public static final Pattern NOT_PATTERN = Pattern.compile("(.+(not))|((not).+)", Pattern.CASE_INSENSITIVE); + + /** + * 特定JSON值查询 + */ + public static final Pattern JSON_CONTAINS_PATTERN = Pattern.compile("(.+(jsonContains))|((jsonContains).+)", Pattern.CASE_INSENSITIVE); + + @FunctionalInterface + public interface QueryStrategy { + default void apply(QueryWrapper queryWrapper, String column, Object value, boolean isOr) { + if (isOr) { + queryWrapper.or(); + } + apply(queryWrapper, column, value); + } + + void apply(QueryWrapper wrapper, String column, Object value); + } + + // region 封装正则表达式Map和策略Map + private static final Map STRATEGY_MAP = new HashMap<>(); + private static final Map PATTERN_MAP = new HashMap<>(); + + public static final String RANGE_START_PATTERN_KEY = "RANGE_START_PATTERN"; + + public static final String RANGE_END_PATTERN_KEY = "RANGE_END_PATTERN"; + + public static final String EXCLUSIVE_RANGE_START_PATTERN_KEY = "EXCLUSIVE_RANGE_START_PATTERN"; + + public static final String EXCLUSIVE_RANGE_END_PATTERN_KEY = "EXCLUSIVE_RANGE_END_PATTERN"; + + public static final String PREFIX_PATTERN_KEY = "PREFIX_PATTERN"; + + public static final String SUFFIX_PATTERN_KEY = "SUFFIX_PATTERN"; + + public static final String NOT_LIKE_PATTERN_KEY = "NOT_LIKE_PATTERN"; + + public static final String LIKE_PATTERN_KEY = "LIKE_PATTERN"; + + public static final String FULL_TEXT_SEARCH_PATTERN_KEY = "FULL_TEXT_SEARCH_PATTERN"; + + public static final String NOT_PATTERN_KEY = "NOT_PATTERN"; + + public static final String JSON_CONTAINS_PATTERN_KEY = "JSON_CONTAINS_PATTERN"; + + static { + PATTERN_MAP.put(RANGE_START_PATTERN_KEY, RANGE_START_PATTERN); + PATTERN_MAP.put(RANGE_END_PATTERN_KEY, RANGE_END_PATTERN); + PATTERN_MAP.put(EXCLUSIVE_RANGE_START_PATTERN_KEY, EXCLUSIVE_RANGE_START_PATTERN); + PATTERN_MAP.put(EXCLUSIVE_RANGE_END_PATTERN_KEY, EXCLUSIVE_RANGE_END_PATTERN); + PATTERN_MAP.put(PREFIX_PATTERN_KEY, PREFIX_PATTERN); + PATTERN_MAP.put(SUFFIX_PATTERN_KEY, SUFFIX_PATTERN); + PATTERN_MAP.put(NOT_LIKE_PATTERN_KEY, NOT_LIKE_PATTERN); + PATTERN_MAP.put(LIKE_PATTERN_KEY, LIKE_PATTERN); + PATTERN_MAP.put(FULL_TEXT_SEARCH_PATTERN_KEY, FULL_TEXT_SEARCH_PATTERN); + PATTERN_MAP.put(NOT_PATTERN_KEY, NOT_PATTERN); + + + STRATEGY_MAP.put(RANGE_START_PATTERN_KEY, Compare::ge); + STRATEGY_MAP.put(RANGE_END_PATTERN_KEY, Compare::le); + STRATEGY_MAP.put(EXCLUSIVE_RANGE_START_PATTERN_KEY, Compare::gt); + STRATEGY_MAP.put(EXCLUSIVE_RANGE_END_PATTERN_KEY, Compare::lt); + STRATEGY_MAP.put(PREFIX_PATTERN_KEY, Compare::likeRight); + STRATEGY_MAP.put(SUFFIX_PATTERN_KEY, Compare::likeLeft); + STRATEGY_MAP.put(NOT_LIKE_PATTERN_KEY, Compare::notLike); + STRATEGY_MAP.put(LIKE_PATTERN_KEY, Compare::like); + STRATEGY_MAP.put(FULL_TEXT_SEARCH_PATTERN_KEY, (queryWrapper, column, value) -> queryWrapper.apply("MATCH(" + column + ") AGAINST({0})", value)); + STRATEGY_MAP.put(NOT_PATTERN_KEY, Compare::ne); + STRATEGY_MAP.put(JSON_CONTAINS_PATTERN_KEY, (queryWrapper, column, value) -> + queryWrapper.apply("JSON_CONTAINS(" + column + ", CAST({0} AS JSON))", value) + ); + } + // endregion + + @SafeVarargs + public static QueryWrapper build(Q andQuery, Q... orQueryArray) { + if (andQuery == null) return null; + + QueryWrapper queryWrapper = new QueryWrapper<>(); + applyQuery(queryWrapper, andQuery, false); + + Optional.ofNullable(orQueryArray).ifPresent(array -> Arrays.stream(array) + .filter(Objects::nonNull) + .forEach(orQuery -> queryWrapper.and(qw -> applyQuery(qw, orQuery, true)))); + + return queryWrapper; + } + + private static void applyQuery(QueryWrapper queryWrapper, Q query, boolean isOr) { + Class aClass = query.getClass(); + PropertyDescriptor[] propertyDescriptors = getPropertyDescriptors(aClass); + final BeanWrapperImpl wrapper = new BeanWrapperImpl(query); + + for (PropertyDescriptor propertyDescriptor : propertyDescriptors) { + String column = getColumn(aClass, propertyDescriptor); + String propertyName = propertyDescriptor.getName(); + Object propertyValue = wrapper.getPropertyValue(propertyName); + // 先处理特殊值:排序标志和集合 + if (propertyValue instanceof Direction) { + applyOrder(queryWrapper, column, propertyValue); + } else if (propertyValue instanceof Collection) { + // 如果集合为空,需要特殊处理为一个无意义的值,否则会导致 in () 报错 + if (((Collection) propertyValue).isEmpty()) { + propertyValue = Collections.singletonList(UNLIKELY_VALUE); + } + applyCollection(queryWrapper, column, propertyName, (Collection) propertyValue); + } else if (propertyValue != null && CharSequenceUtil.isNotBlank(propertyValue.toString())) { + applyStrategy(queryWrapper, column, propertyName, propertyValue, isOr); + } + } + } + + private static void applyOrder(QueryWrapper queryWrapper, String column, Object value) { + if (Direction.ASC.equals(value)) { + queryWrapper.orderByAsc(column); + } else { + queryWrapper.orderByDesc(column); + } + } + + private static void applyCollection(QueryWrapper queryWrapper, String column, String propertyName, Collection values) { + if (PATTERN_MAP.get(NOT_PATTERN_KEY).matcher(propertyName).matches()) { + queryWrapper.notIn(column, values); + } else { + queryWrapper.in(column, values); + } + } + + private static void applyStrategy(QueryWrapper queryWrapper, String column, String propertyName, Object propertyValue, boolean isOr) { + Optional matchedStrategy = findMatchingStrategy(propertyName); + if (matchedStrategy.isPresent() && !propertyName.equalsIgnoreCase(CharSequenceUtil.toCamelCase(column))) { + matchedStrategy.get().apply(queryWrapper, column, propertyValue, isOr); + } else { + applyDefaultStrategy(queryWrapper, column, propertyValue, isOr); + } + } + + private static Optional findMatchingStrategy(String propertyName) { + return STRATEGY_MAP.entrySet().stream() + .filter(entry -> { + Pattern pattern = PATTERN_MAP.get(entry.getKey()); + return pattern != null && pattern.matcher(propertyName).matches(); + }) + .findFirst() + .map(Map.Entry::getValue); + } + + private static void applyDefaultStrategy(QueryWrapper queryWrapper, String column, Object value, boolean isOr) { + if (isOr) { + queryWrapper.or().eq(column, value); + } else { + queryWrapper.eq(column, value); + } + } + + // region 处理缓存的Class的PropertyDescriptor和column的映射关系 + + static final ConcurrentMap, CachedColumnResults> CLASS_CACHED_COLUMN_RESULTS_MAP = + new ConcurrentHashMap<>(128); + private static final PropertyDescriptor[] EMPTY_PROPERTY_DESCRIPTOR_ARRAY = {}; + + public static PropertyDescriptor[] getPropertyDescriptors(Class clazz) throws BeansException { + return forClass(clazz).getPropertyDescriptors(); + } + + @Nullable + public static String getColumn(Class clazz, PropertyDescriptor pd) throws BeansException { + return forClass(clazz).getColumn(pd); + } + + static CachedColumnResults forClass(Class beanClass) throws BeansException { + CachedColumnResults results = CLASS_CACHED_COLUMN_RESULTS_MAP.get(beanClass); + if (results != null) { + return results; + } + + results = new CachedColumnResults(beanClass); + + CachedColumnResults existing = CLASS_CACHED_COLUMN_RESULTS_MAP.putIfAbsent(beanClass, results); + return (existing != null ? existing : results); + } + + public static final class CachedColumnResults { + + private final Map pdToColumnMap; + + private CachedColumnResults(Class beanClass) throws BeansException { + pdToColumnMap = Arrays.stream(beanClass.getDeclaredFields()) + .filter(field -> field.isAnnotationPresent(TableField.class)) + .collect(Collectors.toMap(field -> BeanUtils.getPropertyDescriptor(beanClass, field.getName()), + field -> field.getAnnotation(TableField.class).value())); + } + + @Nullable + String getColumn(PropertyDescriptor pd) { + return pdToColumnMap.get(pd); + } + + PropertyDescriptor[] getPropertyDescriptors() { + return this.pdToColumnMap.keySet().toArray(EMPTY_PROPERTY_DESCRIPTOR_ARRAY); + } + + } + // endregion +} diff --git a/src/main/java/com/metalloop/common/utils/RsaUtils.java b/src/main/java/com/metalloop/common/utils/RsaUtils.java new file mode 100644 index 0000000..4004aa7 --- /dev/null +++ b/src/main/java/com/metalloop/common/utils/RsaUtils.java @@ -0,0 +1,101 @@ +package com.metalloop.common.utils; + +import javax.crypto.Cipher; +import java.security.KeyFactory; +import java.security.PrivateKey; +import java.security.PublicKey; +import java.security.interfaces.RSAPublicKey; +import java.security.spec.PKCS8EncodedKeySpec; +import java.security.spec.X509EncodedKeySpec; +import java.util.Base64; + +/** + * RSA加解密工具类 + * + * @author zlt + * @date 2019/7/16 + */ +public class RsaUtils { + /** + * 默认"RSA"="RSA/ECB/PKCS1Padding" + */ + private static final String CIPHER_INSTANCE = "RSA/ECB/PKCS1Padding"; + + /** + * 公钥加密 + * + * @param content 要加密的内容 + * @param publicKey 公钥 + */ + public static String encrypt(String content, PublicKey publicKey) { + try { + return Base64.getEncoder().encodeToString(encrypt(content.getBytes(), publicKey)); + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + /** + * 公钥加密 + * + * @param content 要加密的内容 + * @param publicKey 公钥 + */ + public static byte[] encrypt(byte[] content, PublicKey publicKey) { + try { + Cipher cipher = Cipher.getInstance(CIPHER_INSTANCE); + cipher.init(Cipher.ENCRYPT_MODE, publicKey); + return cipher.doFinal(content); + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + /** + * 私钥解密 + * + * @param content 要解密的内容 + * @param privateKey 私钥 + */ + public static String decrypt(String content, PrivateKey privateKey) throws Exception { + return new String(decrypt(Base64.getDecoder().decode(content), privateKey)); + } + + /** + * 私钥解密 + * + * @param content 要解密的内容 + * @param privateKey 私钥 + */ + public static byte[] decrypt(byte[] content, PrivateKey privateKey) throws Exception { + Cipher cipher = Cipher.getInstance(CIPHER_INSTANCE); + cipher.init(Cipher.DECRYPT_MODE, privateKey); + return cipher.doFinal(content); + } + + /** + * String转公钥PublicKey + * + * @param key 公钥字符 + */ + public static RSAPublicKey getPublicKey(String key) throws Exception { + byte[] keyBytes = Base64.getDecoder().decode(key); + X509EncodedKeySpec keySpec = new X509EncodedKeySpec(keyBytes); + KeyFactory keyFactory = KeyFactory.getInstance("RSA"); + return (RSAPublicKey) keyFactory.generatePublic(keySpec); + } + + /** + * String转私钥PrivateKey + * + * @param key 私钥字符 + */ + public static PrivateKey getPrivateKey(String key) throws Exception { + byte[] keyBytes = Base64.getDecoder().decode(key); + PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(keyBytes); + KeyFactory keyFactory = KeyFactory.getInstance("RSA"); + return keyFactory.generatePrivate(keySpec); + } +} diff --git a/src/main/java/com/metalloop/common/utils/SpringUtil.java b/src/main/java/com/metalloop/common/utils/SpringUtil.java new file mode 100644 index 0000000..282c21c --- /dev/null +++ b/src/main/java/com/metalloop/common/utils/SpringUtil.java @@ -0,0 +1,36 @@ +package com.metalloop.common.utils; + +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.core.annotation.Order; +import org.springframework.core.env.Environment; +import org.springframework.stereotype.Component; + +/** + * spring获取bean工具类 + * + * @author 作者 owen E-mail: 624191343@qq.com + */ +@Component +@Order(0) +public class SpringUtil implements ApplicationContextAware { + + private static ApplicationContext applicationContext = null; + + public static T getBean(Class cla) { + return applicationContext.getBean(cla); + } + + public static T getBean(String name, Class cal) { + return applicationContext.getBean(name, cal); + } + + public static String getProperty(String key) { + return applicationContext.getBean(Environment.class).getProperty(key); + } + + @Override + public void setApplicationContext(ApplicationContext applicationContext) { + SpringUtil.applicationContext = applicationContext; + } +} diff --git a/src/main/java/com/metalloop/common/utils/json/JsonUtils.java b/src/main/java/com/metalloop/common/utils/json/JsonUtils.java new file mode 100644 index 0000000..9f30bf4 --- /dev/null +++ b/src/main/java/com/metalloop/common/utils/json/JsonUtils.java @@ -0,0 +1,144 @@ +package com.metalloop.common.utils.json; + +import cn.hutool.core.util.ArrayUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.json.JSONUtil; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; +import lombok.SneakyThrows; +import lombok.experimental.UtilityClass; +import lombok.extern.slf4j.Slf4j; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +/** + * JSON 工具类 + * + * @author zhaowenhao + */ +@UtilityClass +@Slf4j +public class JsonUtils { + + private static ObjectMapper objectMapper = new ObjectMapper(); + + static { + objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false); + objectMapper.registerModules(new JavaTimeModule()); // 解决 LocalDateTime 的序列化 + } + + /** + * 初始化 objectMapper 属性 + *

+ * 通过这样的方式,使用 Spring 创建的 ObjectMapper Bean + * + * @param objectMapper ObjectMapper 对象 + */ + public static void init(ObjectMapper objectMapper) { + JsonUtils.objectMapper = objectMapper; + } + + @SneakyThrows + public static String toJsonString(Object object) { + return objectMapper.writeValueAsString(object); + } + + @SneakyThrows + public static byte[] toJsonByte(Object object) { + return objectMapper.writeValueAsBytes(object); + } + + @SneakyThrows + public static String toJsonPrettyString(Object object) { + return objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(object); + } + + public static T parseObject(String text, Class clazz) { + if (StrUtil.isEmpty(text)) { + return null; + } + try { + return objectMapper.readValue(text, clazz); + } catch (IOException e) { + log.error("json parse err,json:{}", text, e); + throw new RuntimeException(e); + } + } + + /** + * 将字符串解析成指定类型的对象 + * 使用 {@link #parseObject(String, Class)} 时,在@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS) 的场景下, + * 如果 text 没有 class 属性,则会报错。此时,使用这个方法,可以解决。 + * + * @param text 字符串 + * @param clazz 类型 + * @return 对象 + */ + public static T parseObject2(String text, Class clazz) { + if (StrUtil.isEmpty(text)) { + return null; + } + return JSONUtil.toBean(text, clazz); + } + + public static T parseObject(byte[] bytes, Class clazz) { + if (ArrayUtil.isEmpty(bytes)) { + return null; + } + try { + return objectMapper.readValue(bytes, clazz); + } catch (IOException e) { + log.error("json parse err,json:{}", bytes, e); + throw new RuntimeException(e); + } + } + + public static T parseObject(String text, TypeReference typeReference) { + try { + return objectMapper.readValue(text, typeReference); + } catch (IOException e) { + log.error("json parse err,json:{}", text, e); + throw new RuntimeException(e); + } + } + + public static List parseArray(String text, Class clazz) { + if (StrUtil.isEmpty(text)) { + return new ArrayList<>(); + } + try { + return objectMapper.readValue(text, objectMapper.getTypeFactory().constructCollectionType(List.class, clazz)); + } catch (IOException e) { + log.error("json parse err,json:{}", text, e); + throw new RuntimeException(e); + } + } + + public static JsonNode parseTree(String text) { + try { + return objectMapper.readTree(text); + } catch (IOException e) { + log.error("json parse err,json:{}", text, e); + throw new RuntimeException(e); + } + } + + public static JsonNode parseTree(byte[] text) { + try { + return objectMapper.readTree(text); + } catch (IOException e) { + log.error("json parse err,json:{}", text, e); + throw new RuntimeException(e); + } + } + + public static boolean isJson(String text) { + return JSONUtil.isTypeJSON(text); + } + +} diff --git a/src/main/java/com/metalloop/framework/satoken/SaTokenInterceptorConfig.java b/src/main/java/com/metalloop/framework/satoken/SaTokenInterceptorConfig.java new file mode 100644 index 0000000..9b90321 --- /dev/null +++ b/src/main/java/com/metalloop/framework/satoken/SaTokenInterceptorConfig.java @@ -0,0 +1,26 @@ +package com.metalloop.framework.satoken; + +import cn.dev33.satoken.interceptor.SaInterceptor; +import cn.dev33.satoken.router.SaRouter; +import cn.dev33.satoken.stp.StpUtil; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.InterceptorRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +@Configuration +public class SaTokenInterceptorConfig implements WebMvcConfigurer { + + @Override + public void addInterceptors(InterceptorRegistry registry) { + // 注册 Sa-Token 全局拦截器 + registry.addInterceptor(new SaInterceptor(handler -> { + // 排除登录、注册、验证码等公开接口 + SaRouter.match("/api/**") + .notMatch("/api/auth/login") + .notMatch("/api/auth/register") + .notMatch("/api/auth/captcha") + .notMatch("/api/public/**") + .check(r -> StpUtil.checkLogin()); + })).addPathPatterns("/api/**"); + } +} \ No newline at end of file diff --git a/src/main/java/com/metalloop/framework/satoken/StpInterfaceImpl.java b/src/main/java/com/metalloop/framework/satoken/StpInterfaceImpl.java new file mode 100644 index 0000000..304050b --- /dev/null +++ b/src/main/java/com/metalloop/framework/satoken/StpInterfaceImpl.java @@ -0,0 +1,37 @@ +package com.metalloop.framework.satoken; + +import cn.dev33.satoken.stp.StpInterface; +//import com.metalloop.modules.permission.service.PermissionService; +//import com.metalloop.modules.permission.service.RoleService; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * Sa-Token 权限数据源实现 + * 框架会自动调用此接口获取当前登录用户的角色和权限码 + */ +@Component +@RequiredArgsConstructor +public class StpInterfaceImpl implements StpInterface { + +// private final RoleService roleService; +// private final PermissionService permissionService; + + @Override + public List getPermissionList(Object loginId, String loginType) { + // 根据用户 ID 获取该用户所有权限码(code 字段) + Long userId = Long.parseLong(loginId.toString()); +// return permissionService.listPermissionCodesByUserId(userId); + return List.of(); + } + + @Override + public List getRoleList(Object loginId, String loginType) { + // 根据用户 ID 获取该用户所有角色名称 + Long userId = Long.parseLong(loginId.toString()); +// return roleService.listRoleNamesByUserId(userId); + return null; + } +} \ No newline at end of file diff --git a/src/main/java/com/metalloop/framework/satoken/admin/StpAdminUtil.java b/src/main/java/com/metalloop/framework/satoken/admin/StpAdminUtil.java new file mode 100644 index 0000000..df9edc7 --- /dev/null +++ b/src/main/java/com/metalloop/framework/satoken/admin/StpAdminUtil.java @@ -0,0 +1,1235 @@ +/* + * Copyright 2020-2099 sa-token.cc + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.metalloop.framework.satoken.admin; + +import cn.dev33.satoken.SaManager; +import cn.dev33.satoken.fun.SaFunction; +import cn.dev33.satoken.listener.SaTokenEventCenter; +import cn.dev33.satoken.session.SaSession; +import cn.dev33.satoken.session.TokenSign; +import cn.dev33.satoken.stp.SaLoginModel; +import cn.dev33.satoken.stp.SaTokenInfo; +import cn.dev33.satoken.stp.StpLogic; +import com.metalloop.common.enums.LoginType; + +import java.util.List; + +/** + * Sa-Token 权限认证工具类的二次封装,修改了账号类型,支持权限管理系统的认证 + * + * @author zhaowenhao + * @since 2023-06-21 + */ +public class StpAdminUtil { + + private StpAdminUtil() { + } + + /** + * 多账号体系下的类型标识 + */ + public static final String TYPE = LoginType.ADMIN.getType(); + + /** + * 底层使用的 StpLogic 对象 + */ + public static StpLogic stpLogic = LoginType.ADMIN.getStpLogic(); + + /** + * 获取当前 StpLogic 的账号类型 + * + * @return / + */ + public static String getLoginType() { + return stpLogic.getLoginType(); + } + + /** + * 安全的重置 StpLogic 对象 + * + *
1、更改此账户的 StpLogic 对象 + *
2、put 到全局 StpLogic 集合中 + *
3、发送日志 + * + * @param newStpLogic / + */ + public static void setStpLogic(StpLogic newStpLogic) { + // 1、重置此账户的 StpLogic 对象 + stpLogic = newStpLogic; + + // 2、添加到全局 StpLogic 集合中 + // 以便可以通过 SaManager.getStpLogic(type) 的方式来全局获取到这个 StpLogic + SaManager.putStpLogic(newStpLogic); + + // 3、$$ 发布事件:更新了 stpLogic 对象 + SaTokenEventCenter.doSetStpLogic(stpLogic); + } + + /** + * 获取 StpLogic 对象 + * + * @return / + */ + public static StpLogic getStpLogic() { + return stpLogic; + } + + + // ------------------- 获取 token 相关 ------------------- + + /** + * 返回 token 名称,此名称在以下地方体现:Cookie 保存 token 时的名称、提交 token 时参数的名称、存储 token 时的 key 前缀 + * + * @return / + */ + public static String getTokenName() { + return stpLogic.getTokenName(); + } + + /** + * 在当前会话写入指定 token 值 + * + * @param tokenValue token 值 + */ + public static void setTokenValue(String tokenValue) { + stpLogic.setTokenValue(tokenValue); + } + + /** + * 在当前会话写入指定 token 值 + * + * @param tokenValue token 值 + * @param cookieTimeout Cookie存活时间(秒) + */ + public static void setTokenValue(String tokenValue, int cookieTimeout) { + stpLogic.setTokenValue(tokenValue, cookieTimeout); + } + + /** + * 在当前会话写入指定 token 值 + * + * @param tokenValue token 值 + * @param loginModel 登录参数 + */ + public static void setTokenValue(String tokenValue, SaLoginModel loginModel) { + stpLogic.setTokenValue(tokenValue, loginModel); + } + + /** + * 获取当前请求的 token 值 + * + * @return 当前tokenValue + */ + public static String getTokenValue() { + return stpLogic.getTokenValue(); + } + + /** + * 获取当前请求的 token 值 (不裁剪前缀) + * + * @return / + */ + public static String getTokenValueNotCut() { + return stpLogic.getTokenValueNotCut(); + } + + /** + * 获取当前会话的 token 参数信息 + * + * @return token 参数信息 + */ + public static SaTokenInfo getTokenInfo() { + return stpLogic.getTokenInfo(); + } + + + // ------------------- 登录相关操作 ------------------- + + // --- 登录 + + /** + * 会话登录 + * + * @param id 账号id,建议的类型:(long | int | String) + */ + public static void login(Object id) { + stpLogic.login(id); + } + + /** + * 会话登录,并指定登录设备类型 + * + * @param id 账号id,建议的类型:(long | int | String) + * @param device 设备类型 + */ + public static void login(Object id, String device) { + stpLogic.login(id, device); + } + + /** + * 会话登录,并指定是否 [记住我] + * + * @param id 账号id,建议的类型:(long | int | String) + * @param isLastingCookie 是否为持久Cookie,值为 true 时记住我,值为 false 时关闭浏览器需要重新登录 + */ + public static void login(Object id, boolean isLastingCookie) { + stpLogic.login(id, isLastingCookie); + } + + /** + * 会话登录,并指定此次登录 token 的有效期, 单位:秒 + * + * @param id 账号id,建议的类型:(long | int | String) + * @param timeout 此次登录 token 的有效期, 单位:秒 + */ + public static void login(Object id, long timeout) { + stpLogic.login(id, timeout); + } + + /** + * 会话登录,并指定所有登录参数 Model + * + * @param id 账号id,建议的类型:(long | int | String) + * @param loginModel 此次登录的参数Model + */ + public static void login(Object id, SaLoginModel loginModel) { + stpLogic.login(id, loginModel); + } + + /** + * 创建指定账号 id 的登录会话数据 + * + * @param id 账号id,建议的类型:(long | int | String) + * @return 返回会话令牌 + */ + public static String createLoginSession(Object id) { + return stpLogic.createLoginSession(id); + } + + /** + * 创建指定账号 id 的登录会话数据 + * + * @param id 账号id,建议的类型:(long | int | String) + * @param loginModel 此次登录的参数Model + * @return 返回会话令牌 + */ + public static String createLoginSession(Object id, SaLoginModel loginModel) { + return stpLogic.createLoginSession(id, loginModel); + } + + // --- 注销 + + /** + * 在当前客户端会话注销 + */ + public static void logout() { + stpLogic.logout(); + } + + /** + * 会话注销,根据账号id + * + * @param loginId 账号id + */ + public static void logout(Object loginId) { + stpLogic.logout(loginId); + } + + /** + * 会话注销,根据账号id 和 设备类型 + * + * @param loginId 账号id + * @param device 设备类型 (填 null 代表注销该账号的所有设备类型) + */ + public static void logout(Object loginId, String device) { + stpLogic.logout(loginId, device); + } + + /** + * 会话注销,根据指定 Token + * + * @param tokenValue 指定 token + */ + public static void logoutByTokenValue(String tokenValue) { + stpLogic.logoutByTokenValue(tokenValue); + } + + /** + * 踢人下线,根据账号id + *

当对方再次访问系统时,会抛出 NotLoginException 异常,场景值=-5

+ * + * @param loginId 账号id + */ + public static void kickout(Object loginId) { + stpLogic.kickout(loginId); + } + + /** + * 踢人下线,根据账号id 和 设备类型 + *

当对方再次访问系统时,会抛出 NotLoginException 异常,场景值=-5

+ * + * @param loginId 账号id + * @param device 设备类型 (填 null 代表踢出该账号的所有设备类型) + */ + public static void kickout(Object loginId, String device) { + stpLogic.kickout(loginId, device); + } + + /** + * 踢人下线,根据指定 token + *

当对方再次访问系统时,会抛出 NotLoginException 异常,场景值=-5

+ * + * @param tokenValue 指定 token + */ + public static void kickoutByTokenValue(String tokenValue) { + stpLogic.kickoutByTokenValue(tokenValue); + } + + /** + * 顶人下线,根据账号id 和 设备类型 + *

当对方再次访问系统时,会抛出 NotLoginException 异常,场景值=-4

+ * + * @param loginId 账号id + * @param device 设备类型 (填 null 代表顶替该账号的所有设备类型) + */ + public static void replaced(Object loginId, String device) { + stpLogic.replaced(loginId, device); + } + + // 会话查询 + + /** + * 判断当前会话是否已经登录 + * + * @return 已登录返回 true,未登录返回 false + */ + public static boolean isLogin() { + return stpLogic.isLogin(); + } + + /** + * 判断指定账号是否已经登录 + * + * @return 已登录返回 true,未登录返回 false + */ + public static boolean isLogin(Object loginId) { + return stpLogic.isLogin(loginId); + } + + /** + * 检验当前会话是否已经登录,如未登录,则抛出异常 + */ + public static void checkLogin() { + stpLogic.checkLogin(); + } + + /** + * 获取当前会话账号id,如果未登录,则抛出异常 + * + * @return 账号id + */ + public static Object getLoginId() { + return stpLogic.getLoginId(); + } + + /** + * 获取当前会话账号id, 如果未登录,则返回默认值 + * + * @param 返回类型 + * @param defaultValue 默认值 + * @return 登录id + */ + public static T getLoginId(T defaultValue) { + return stpLogic.getLoginId(defaultValue); + } + + /** + * 获取当前会话账号id, 如果未登录,则返回null + * + * @return 账号id + */ + public static Object getLoginIdDefaultNull() { + return stpLogic.getLoginIdDefaultNull(); + } + + /** + * 获取当前会话账号id, 并转换为 String 类型 + * + * @return 账号id + */ + public static String getLoginIdAsString() { + return stpLogic.getLoginIdAsString(); + } + + /** + * 获取当前会话账号id, 并转换为 int 类型 + * + * @return 账号id + */ + public static int getLoginIdAsInt() { + return stpLogic.getLoginIdAsInt(); + } + + /** + * 获取当前会话账号id, 并转换为 long 类型 + * + * @return 账号id + */ + public static long getLoginIdAsLong() { + return stpLogic.getLoginIdAsLong(); + } + + /** + * 获取指定 token 对应的账号id,如果未登录,则返回 null + * + * @param tokenValue token + * @return 账号id + */ + public static Object getLoginIdByToken(String tokenValue) { + return stpLogic.getLoginIdByToken(tokenValue); + } + + /** + * 获取当前 Token 的扩展信息(此函数只在jwt模式下生效) + * + * @param key 键值 + * @return 对应的扩展数据 + */ + public static Object getExtra(String key) { + return stpLogic.getExtra(key); + } + + /** + * 获取指定 Token 的扩展信息(此函数只在jwt模式下生效) + * + * @param tokenValue 指定的 Token 值 + * @param key 键值 + * @return 对应的扩展数据 + */ + public static Object getExtra(String tokenValue, String key) { + return stpLogic.getExtra(tokenValue, key); + } + + + // ------------------- Account-Session 相关 ------------------- + + /** + * 获取指定账号 id 的 Account-Session, 如果该 SaSession 尚未创建,isCreate=是否新建并返回 + * + * @param loginId 账号id + * @param isCreate 是否新建 + * @return SaSession 对象 + */ + public static SaSession getSessionByLoginId(Object loginId, boolean isCreate) { + return stpLogic.getSessionByLoginId(loginId, isCreate); + } + + /** + * 获取指定 key 的 SaSession, 如果该 SaSession 尚未创建,则返回 null + * + * @param sessionId SessionId + * @return Session对象 + */ + public static SaSession getSessionBySessionId(String sessionId) { + return stpLogic.getSessionBySessionId(sessionId); + } + + /** + * 获取指定账号 id 的 Account-Session,如果该 SaSession 尚未创建,则新建并返回 + * + * @param loginId 账号id + * @return SaSession 对象 + */ + public static SaSession getSessionByLoginId(Object loginId) { + return stpLogic.getSessionByLoginId(loginId); + } + + /** + * 获取当前已登录账号的 Account-Session, 如果该 SaSession 尚未创建,isCreate=是否新建并返回 + * + * @param isCreate 是否新建 + * @return Session对象 + */ + public static SaSession getSession(boolean isCreate) { + return stpLogic.getSession(isCreate); + } + + /** + * 获取当前已登录账号的 Account-Session,如果该 SaSession 尚未创建,则新建并返回 + * + * @return Session对象 + */ + public static SaSession getSession() { + return stpLogic.getSession(); + } + + + // ------------------- Token-Session 相关 ------------------- + + /** + * 获取指定 token 的 Token-Session,如果该 SaSession 尚未创建,则新建并返回 + * + * @param tokenValue Token值 + * @return Session对象 + */ + public static SaSession getTokenSessionByToken(String tokenValue) { + return stpLogic.getTokenSessionByToken(tokenValue); + } + + /** + * 获取当前 token 的 Token-Session,如果该 SaSession 尚未创建,则新建并返回 + * + * @return Session对象 + */ + public static SaSession getTokenSession() { + return stpLogic.getTokenSession(); + } + + /** + * 获取当前匿名 Token-Session (可在未登录情况下使用的Token-Session) + * + * @return Token-Session 对象 + */ + public static SaSession getAnonTokenSession() { + return stpLogic.getAnonTokenSession(); + } + + + // ------------------- Active-Timeout token 最低活跃度 验证相关 ------------------- + + /** + * 续签当前 token:(将 [最后操作时间] 更新为当前时间戳) + *

+ * 请注意: 即使 token 已被冻结 也可续签成功, + * 如果此场景下需要提示续签失败,可在此之前调用 checkActiveTimeout() 强制检查是否冻结即可 + *

+ */ + public static void updateLastActiveToNow() { + stpLogic.updateLastActiveToNow(); + } + + /** + * 检查当前 token 是否已被冻结,如果是则抛出异常 + */ + public static void checkActiveTimeout() { + stpLogic.checkActiveTimeout(); + } + + + // ------------------- 过期时间相关 ------------------- + + /** + * 获取当前会话 token 剩余有效时间(单位: 秒,返回 -1 代表永久有效,-2 代表没有这个值) + * + * @return token剩余有效时间 + */ + public static long getTokenTimeout() { + return stpLogic.getTokenTimeout(); + } + + /** + * 获取指定 token 剩余有效时间(单位: 秒,返回 -1 代表永久有效,-2 代表没有这个值) + * + * @param token 指定token + * @return token剩余有效时间 + */ + public static long getTokenTimeout(String token) { + return stpLogic.getTokenTimeout(token); + } + + /** + * 获取当前登录账号的 Account-Session 剩余有效时间(单位: 秒,返回 -1 代表永久有效,-2 代表没有这个值) + * + * @return token剩余有效时间 + */ + public static long getSessionTimeout() { + return stpLogic.getSessionTimeout(); + } + + /** + * 获取当前 token 的 Token-Session 剩余有效时间(单位: 秒,返回 -1 代表永久有效,-2 代表没有这个值) + * + * @return token剩余有效时间 + */ + public static long getTokenSessionTimeout() { + return stpLogic.getTokenSessionTimeout(); + } + + /** + * 获取当前 token 剩余活跃有效期:当前 token 距离被冻结还剩多少时间(单位: 秒,返回 -1 代表永不冻结,-2 代表没有这个值或 token 已被冻结了) + * + * @return / + */ + public static long getTokenActiveTimeout() { + return stpLogic.getTokenActiveTimeout(); + } + + /** + * 对当前 token 的 timeout 值进行续期 + * + * @param timeout 要修改成为的有效时间 (单位: 秒) + */ + public static void renewTimeout(long timeout) { + stpLogic.renewTimeout(timeout); + } + + /** + * 对指定 token 的 timeout 值进行续期 + * + * @param tokenValue 指定 token + * @param timeout 要修改成为的有效时间 (单位: 秒,填 -1 代表要续为永久有效) + */ + public static void renewTimeout(String tokenValue, long timeout) { + stpLogic.renewTimeout(tokenValue, timeout); + } + + + // ------------------- 角色认证操作 ------------------- + + /** + * 获取:当前账号的角色集合 + * + * @return / + */ + public static List getRoleList() { + return stpLogic.getRoleList(); + } + + /** + * 获取:指定账号的角色集合 + * + * @param loginId 指定账号id + * @return / + */ + public static List getRoleList(Object loginId) { + return stpLogic.getRoleList(loginId); + } + + /** + * 判断:当前账号是否拥有指定角色, 返回 true 或 false + * + * @param role 角色 + * @return / + */ + public static boolean hasRole(String role) { + return stpLogic.hasRole(role); + } + + /** + * 判断:指定账号是否含有指定角色标识, 返回 true 或 false + * + * @param loginId 账号id + * @param role 角色标识 + * @return 是否含有指定角色标识 + */ + public static boolean hasRole(Object loginId, String role) { + return stpLogic.hasRole(loginId, role); + } + + /** + * 判断:当前账号是否含有指定角色标识 [ 指定多个,必须全部验证通过 ] + * + * @param roleArray 角色标识数组 + * @return true或false + */ + public static boolean hasRoleAnd(String... roleArray) { + return stpLogic.hasRoleAnd(roleArray); + } + + /** + * 判断:当前账号是否含有指定角色标识 [ 指定多个,只要其一验证通过即可 ] + * + * @param roleArray 角色标识数组 + * @return true或false + */ + public static boolean hasRoleOr(String... roleArray) { + return stpLogic.hasRoleOr(roleArray); + } + + /** + * 校验:当前账号是否含有指定角色标识, 如果验证未通过,则抛出异常: NotRoleException + * + * @param role 角色标识 + */ + public static void checkRole(String role) { + stpLogic.checkRole(role); + } + + /** + * 校验:当前账号是否含有指定角色标识 [ 指定多个,必须全部验证通过 ] + * + * @param roleArray 角色标识数组 + */ + public static void checkRoleAnd(String... roleArray) { + stpLogic.checkRoleAnd(roleArray); + } + + /** + * 校验:当前账号是否含有指定角色标识 [ 指定多个,只要其一验证通过即可 ] + * + * @param roleArray 角色标识数组 + */ + public static void checkRoleOr(String... roleArray) { + stpLogic.checkRoleOr(roleArray); + } + + + // ------------------- 权限认证操作 ------------------- + + /** + * 获取:当前账号的权限码集合 + * + * @return / + */ + public static List getPermissionList() { + return stpLogic.getPermissionList(); + } + + /** + * 获取:指定账号的权限码集合 + * + * @param loginId 指定账号id + * @return / + */ + public static List getPermissionList(Object loginId) { + return stpLogic.getPermissionList(loginId); + } + + /** + * 判断:当前账号是否含有指定权限, 返回 true 或 false + * + * @param permission 权限码 + * @return 是否含有指定权限 + */ + public static boolean hasPermission(String permission) { + return stpLogic.hasPermission(permission); + } + + /** + * 判断:指定账号 id 是否含有指定权限, 返回 true 或 false + * + * @param loginId 账号 id + * @param permission 权限码 + * @return 是否含有指定权限 + */ + public static boolean hasPermission(Object loginId, String permission) { + return stpLogic.hasPermission(loginId, permission); + } + + /** + * 判断:当前账号是否含有指定权限 [ 指定多个,必须全部具有 ] + * + * @param permissionArray 权限码数组 + * @return true 或 false + */ + public static boolean hasPermissionAnd(String... permissionArray) { + return stpLogic.hasPermissionAnd(permissionArray); + } + + /** + * 判断:当前账号是否含有指定权限 [ 指定多个,只要其一验证通过即可 ] + * + * @param permissionArray 权限码数组 + * @return true 或 false + */ + public static boolean hasPermissionOr(String... permissionArray) { + return stpLogic.hasPermissionOr(permissionArray); + } + + /** + * 校验:当前账号是否含有指定权限, 如果验证未通过,则抛出异常: NotPermissionException + * + * @param permission 权限码 + */ + public static void checkPermission(String permission) { + stpLogic.checkPermission(permission); + } + + /** + * 校验:当前账号是否含有指定权限 [ 指定多个,必须全部验证通过 ] + * + * @param permissionArray 权限码数组 + */ + public static void checkPermissionAnd(String... permissionArray) { + stpLogic.checkPermissionAnd(permissionArray); + } + + /** + * 校验:当前账号是否含有指定权限 [ 指定多个,只要其一验证通过即可 ] + * + * @param permissionArray 权限码数组 + */ + public static void checkPermissionOr(String... permissionArray) { + stpLogic.checkPermissionOr(permissionArray); + } + + + // ------------------- id 反查 token 相关操作 ------------------- + + /** + * 获取指定账号 id 的 token + *

+ * 在配置为允许并发登录时,此方法只会返回队列的最后一个 token, + * 如果你需要返回此账号 id 的所有 token,请调用 getTokenValueListByLoginId + *

+ * + * @param loginId 账号id + * @return token值 + */ + public static String getTokenValueByLoginId(Object loginId) { + return stpLogic.getTokenValueByLoginId(loginId); + } + + /** + * 获取指定账号 id 指定设备类型端的 token + *

+ * 在配置为允许并发登录时,此方法只会返回队列的最后一个 token, + * 如果你需要返回此账号 id 的所有 token,请调用 getTokenValueListByLoginId + *

+ * + * @param loginId 账号id + * @param device 设备类型,填 null 代表不限设备类型 + * @return token值 + */ + public static String getTokenValueByLoginId(Object loginId, String device) { + return stpLogic.getTokenValueByLoginId(loginId, device); + } + + /** + * 获取指定账号 id 的 token 集合 + * + * @param loginId 账号id + * @return 此 loginId 的所有相关 token + */ + public static List getTokenValueListByLoginId(Object loginId) { + return stpLogic.getTokenValueListByLoginId(loginId); + } + + /** + * 获取指定账号 id 指定设备类型端的 token 集合 + * + * @param loginId 账号id + * @param device 设备类型,填 null 代表不限设备类型 + * @return 此 loginId 的所有登录 token + */ + public static List getTokenValueListByLoginId(Object loginId, String device) { + return stpLogic.getTokenValueListByLoginId(loginId, device); + } + + /** + * 获取指定账号 id 指定设备类型端的 tokenSign 集合 + * + * @param loginId 账号id + * @param device 设备类型,填 null 代表不限设备类型 + * @return 此 loginId 的所有登录 tokenSign + */ + public static List getTokenSignListByLoginId(Object loginId, String device) { + return stpLogic.getTokenSignListByLoginId(loginId, device); + } + + /** + * 返回当前会话的登录设备类型 + * + * @return 当前令牌的登录设备类型 + */ + public static String getLoginDevice() { + return stpLogic.getLoginDevice(); + } + + + // ------------------- 会话管理 ------------------- + + /** + * 根据条件查询缓存中所有的 token + * + * @param keyword 关键字 + * @param start 开始处索引 + * @param size 获取数量 (-1代表一直获取到末尾) + * @param sortType 排序类型(true=正序,false=反序) + * @return token集合 + */ + public static List searchTokenValue(String keyword, int start, int size, boolean sortType) { + return stpLogic.searchTokenValue(keyword, start, size, sortType); + } + + /** + * 根据条件查询缓存中所有的 SessionId + * + * @param keyword 关键字 + * @param start 开始处索引 + * @param size 获取数量 (-1代表一直获取到末尾) + * @param sortType 排序类型(true=正序,false=反序) + * @return sessionId集合 + */ + public static List searchSessionId(String keyword, int start, int size, boolean sortType) { + return stpLogic.searchSessionId(keyword, start, size, sortType); + } + + /** + * 根据条件查询缓存中所有的 Token-Session-Id + * + * @param keyword 关键字 + * @param start 开始处索引 + * @param size 获取数量 (-1代表一直获取到末尾) + * @param sortType 排序类型(true=正序,false=反序) + * @return sessionId集合 + */ + public static List searchTokenSessionId(String keyword, int start, int size, boolean sortType) { + return stpLogic.searchTokenSessionId(keyword, start, size, sortType); + } + + + // ------------------- 账号封禁 ------------------- + + /** + * 封禁:指定账号 + *

此方法不会直接将此账号id踢下线,如需封禁后立即掉线,请追加调用 StpUtil.logout(id) + * + * @param loginId 指定账号id + * @param time 封禁时间, 单位: 秒 (-1=永久封禁) + */ + public static void disable(Object loginId, long time) { + stpLogic.disable(loginId, time); + } + + /** + * 判断:指定账号是否已被封禁 (true=已被封禁, false=未被封禁) + * + * @param loginId 账号id + * @return / + */ + public static boolean isDisable(Object loginId) { + return stpLogic.isDisable(loginId); + } + + /** + * 校验:指定账号是否已被封禁,如果被封禁则抛出异常 + * + * @param loginId 账号id + */ + public static void checkDisable(Object loginId) { + stpLogic.checkDisable(loginId); + } + + /** + * 获取:指定账号剩余封禁时间,单位:秒(-1=永久封禁,-2=未被封禁) + * + * @param loginId 账号id + * @return / + */ + public static long getDisableTime(Object loginId) { + return stpLogic.getDisableTime(loginId); + } + + /** + * 解封:指定账号 + * + * @param loginId 账号id + */ + public static void untieDisable(Object loginId) { + stpLogic.untieDisable(loginId); + } + + + // ------------------- 分类封禁 ------------------- + + /** + * 封禁:指定账号的指定服务 + *

此方法不会直接将此账号id踢下线,如需封禁后立即掉线,请追加调用 StpUtil.logout(id) + * + * @param loginId 指定账号id + * @param service 指定服务 + * @param time 封禁时间, 单位: 秒 (-1=永久封禁) + */ + public static void disable(Object loginId, String service, long time) { + stpLogic.disable(loginId, service, time); + } + + /** + * 判断:指定账号的指定服务 是否已被封禁(true=已被封禁, false=未被封禁) + * + * @param loginId 账号id + * @param service 指定服务 + * @return / + */ + public static boolean isDisable(Object loginId, String service) { + return stpLogic.isDisable(loginId, service); + } + + /** + * 校验:指定账号 指定服务 是否已被封禁,如果被封禁则抛出异常 + * + * @param loginId 账号id + * @param services 指定服务,可以指定多个 + */ + public static void checkDisable(Object loginId, String... services) { + stpLogic.checkDisable(loginId, services); + } + + /** + * 获取:指定账号 指定服务 剩余封禁时间,单位:秒(-1=永久封禁,-2=未被封禁) + * + * @param loginId 账号id + * @param service 指定服务 + * @return see note + */ + public static long getDisableTime(Object loginId, String service) { + return stpLogic.getDisableTime(loginId, service); + } + + /** + * 解封:指定账号、指定服务 + * + * @param loginId 账号id + * @param services 指定服务,可以指定多个 + */ + public static void untieDisable(Object loginId, String... services) { + stpLogic.untieDisable(loginId, services); + } + + + // ------------------- 阶梯封禁 ------------------- + + /** + * 封禁:指定账号,并指定封禁等级 + * + * @param loginId 指定账号id + * @param level 指定封禁等级 + * @param time 封禁时间, 单位: 秒 (-1=永久封禁) + */ + public static void disableLevel(Object loginId, int level, long time) { + stpLogic.disableLevel(loginId, level, time); + } + + /** + * 封禁:指定账号的指定服务,并指定封禁等级 + * + * @param loginId 指定账号id + * @param service 指定封禁服务 + * @param level 指定封禁等级 + * @param time 封禁时间, 单位: 秒 (-1=永久封禁) + */ + public static void disableLevel(Object loginId, String service, int level, long time) { + stpLogic.disableLevel(loginId, service, level, time); + } + + /** + * 判断:指定账号是否已被封禁到指定等级 + * + * @param loginId 指定账号id + * @param level 指定封禁等级 + * @return / + */ + public static boolean isDisableLevel(Object loginId, int level) { + return stpLogic.isDisableLevel(loginId, level); + } + + /** + * 判断:指定账号的指定服务,是否已被封禁到指定等级 + * + * @param loginId 指定账号id + * @param service 指定封禁服务 + * @param level 指定封禁等级 + * @return / + */ + public static boolean isDisableLevel(Object loginId, String service, int level) { + return stpLogic.isDisableLevel(loginId, service, level); + } + + /** + * 校验:指定账号是否已被封禁到指定等级(如果已经达到,则抛出异常) + * + * @param loginId 指定账号id + * @param level 封禁等级 (只有 封禁等级 ≥ 此值 才会抛出异常) + */ + public static void checkDisableLevel(Object loginId, int level) { + stpLogic.checkDisableLevel(loginId, level); + } + + /** + * 校验:指定账号的指定服务,是否已被封禁到指定等级(如果已经达到,则抛出异常) + * + * @param loginId 指定账号id + * @param service 指定封禁服务 + * @param level 封禁等级 (只有 封禁等级 ≥ 此值 才会抛出异常) + */ + public static void checkDisableLevel(Object loginId, String service, int level) { + stpLogic.checkDisableLevel(loginId, service, level); + } + + /** + * 获取:指定账号被封禁的等级,如果未被封禁则返回-2 + * + * @param loginId 指定账号id + * @return / + */ + public static int getDisableLevel(Object loginId) { + return stpLogic.getDisableLevel(loginId); + } + + /** + * 获取:指定账号的 指定服务 被封禁的等级,如果未被封禁则返回-2 + * + * @param loginId 指定账号id + * @param service 指定封禁服务 + * @return / + */ + public static int getDisableLevel(Object loginId, String service) { + return stpLogic.getDisableLevel(loginId, service); + } + + + // ------------------- 临时身份切换 ------------------- + + /** + * 临时切换身份为指定账号id + * + * @param loginId 指定loginId + */ + public static void switchTo(Object loginId) { + stpLogic.switchTo(loginId); + } + + /** + * 结束临时切换身份 + */ + public static void endSwitch() { + stpLogic.endSwitch(); + } + + /** + * 判断当前请求是否正处于 [ 身份临时切换 ] 中 + * + * @return / + */ + public static boolean isSwitch() { + return stpLogic.isSwitch(); + } + + /** + * 在一个 lambda 代码段里,临时切换身份为指定账号id,lambda 结束后自动恢复 + * + * @param loginId 指定账号id + * @param function 要执行的方法 + */ + public static void switchTo(Object loginId, SaFunction function) { + stpLogic.switchTo(loginId, function); + } + + + // ------------------- 二级认证 ------------------- + + /** + * 在当前会话 开启二级认证 + * + * @param safeTime 维持时间 (单位: 秒) + */ + public static void openSafe(long safeTime) { + stpLogic.openSafe(safeTime); + } + + /** + * 在当前会话 开启二级认证 + * + * @param service 业务标识 + * @param safeTime 维持时间 (单位: 秒) + */ + public static void openSafe(String service, long safeTime) { + stpLogic.openSafe(service, safeTime); + } + + /** + * 判断:当前会话是否处于二级认证时间内 + * + * @return true=二级认证已通过, false=尚未进行二级认证或认证已超时 + */ + public static boolean isSafe() { + return stpLogic.isSafe(); + } + + /** + * 判断:当前会话 是否处于指定业务的二级认证时间内 + * + * @param service 业务标识 + * @return true=二级认证已通过, false=尚未进行二级认证或认证已超时 + */ + public static boolean isSafe(String service) { + return stpLogic.isSafe(service); + } + + /** + * 判断:指定 token 是否处于二级认证时间内 + * + * @param tokenValue Token 值 + * @param service 业务标识 + * @return true=二级认证已通过, false=尚未进行二级认证或认证已超时 + */ + public static boolean isSafe(String tokenValue, String service) { + return stpLogic.isSafe(tokenValue, service); + } + + /** + * 校验:当前会话是否已通过二级认证,如未通过则抛出异常 + */ + public static void checkSafe() { + stpLogic.checkSafe(); + } + + /** + * 校验:检查当前会话是否已通过指定业务的二级认证,如未通过则抛出异常 + * + * @param service 业务标识 + */ + public static void checkSafe(String service) { + stpLogic.checkSafe(service); + } + + /** + * 获取:当前会话的二级认证剩余有效时间(单位: 秒, 返回-2代表尚未通过二级认证) + * + * @return 剩余有效时间 + */ + public static long getSafeTime() { + return stpLogic.getSafeTime(); + } + + /** + * 获取:当前会话的二级认证剩余有效时间(单位: 秒, 返回-2代表尚未通过二级认证) + * + * @param service 业务标识 + * @return 剩余有效时间 + */ + public static long getSafeTime(String service) { + return stpLogic.getSafeTime(service); + } + + /** + * 在当前会话 结束二级认证 + */ + public static void closeSafe() { + stpLogic.closeSafe(); + } + + /** + * 在当前会话 结束指定业务标识的二级认证 + * + * @param service 业务标识 + */ + public static void closeSafe(String service) { + stpLogic.closeSafe(service); + } + +} diff --git a/src/main/java/com/metalloop/framework/satoken/admin/config/SaTokenAdminConfiguration.java b/src/main/java/com/metalloop/framework/satoken/admin/config/SaTokenAdminConfiguration.java new file mode 100644 index 0000000..dbf7b43 --- /dev/null +++ b/src/main/java/com/metalloop/framework/satoken/admin/config/SaTokenAdminConfiguration.java @@ -0,0 +1,34 @@ +package com.metalloop.framework.satoken.admin.config; + +import cn.dev33.satoken.config.SaTokenConfig; +import com.metalloop.framework.satoken.admin.StpAdminUtil; +import jakarta.annotation.PostConstruct; +import org.springframework.beans.BeanUtils; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.annotation.Configuration; + + +/** + * Admin Sa-Token 配置类,目标是提供一个支持配置的开箱即用的StpAdminUtil + * + * @author zhaowenhao + * @since 2023-11-17 + */ +@Configuration +@EnableConfigurationProperties(SaTokenAdminProperties.class) +public class SaTokenAdminConfiguration { + private final SaTokenAdminProperties saTokenAdminProperties; + + public SaTokenAdminConfiguration(SaTokenAdminProperties saTokenAdminProperties) { + this.saTokenAdminProperties = saTokenAdminProperties; + } + + // 使用注入的 SaTokenAdminProperties 来配置 StpUtil 或其他组件 + @PostConstruct + public void init() { + SaTokenConfig config = new SaTokenConfig(); + // 拷贝属性 + BeanUtils.copyProperties(saTokenAdminProperties, config); + StpAdminUtil.getStpLogic().setConfig(config); + } +} diff --git a/src/main/java/com/metalloop/framework/satoken/admin/config/SaTokenAdminProperties.java b/src/main/java/com/metalloop/framework/satoken/admin/config/SaTokenAdminProperties.java new file mode 100644 index 0000000..ef49af7 --- /dev/null +++ b/src/main/java/com/metalloop/framework/satoken/admin/config/SaTokenAdminProperties.java @@ -0,0 +1,561 @@ +package com.metalloop.framework.satoken.admin.config; + +import cn.dev33.satoken.config.SaCookieConfig; +import cn.dev33.satoken.config.SaSignConfig; +import cn.dev33.satoken.util.SaFoxUtil; +import lombok.Getter; +import org.springframework.boot.context.properties.ConfigurationProperties; + +import java.io.Serializable; + +/** + * 复制自 Sa-Token cn.dev33.satoken.config.SaTokenConfig,升级版本时需要注意重新复制,目的是为了使用两套配置, + * 但是又不能影响原框架的注入问题 + * + * @author zhaowenhao + * @since 2023-11-20 + */ +@Getter +@ConfigurationProperties(prefix = "sa-token.admin") +public class SaTokenAdminProperties implements Serializable { + + private static final long serialVersionUID = -6541180061782004705L; + + /** + * token 名称 (同时也是: cookie 名称、提交 token 时参数的名称、存储 token 时的 key 前缀) + * -- GETTER -- + *

+ * token 名称 (同时也是: cookie 名称、提交 token 时参数的名称、存储 token 时的 key 前缀) + */ + private String tokenName = "satoken"; + + /** + * token 有效期(单位:秒) 默认30天,-1 代表永久有效 + * -- GETTER -- + *

+ * token 有效期(单位:秒) 默认30天,-1 代表永久有效 + */ + private long timeout = 60 * 60 * 24 * 30; + + /** + * token 最低活跃频率(单位:秒),如果 token 超过此时间没有访问系统就会被冻结,默认-1 代表不限制,永不冻结 + * (例如可以设置为 1800 代表 30 分钟内无操作就冻结) + * -- GETTER -- + *

+ * token 最低活跃频率(单位:秒),如果 token 超过此时间没有访问系统就会被冻结,默认-1 代表不限制,永不冻结 + * (例如可以设置为 1800 代表 30 分钟内无操作就冻结) + */ + private long activeTimeout = -1; + + /** + * 是否启用动态 activeTimeout 功能,如不需要请设置为 false,节省缓存请求次数 + * -- GETTER -- + *

+ * 是否启用动态 activeTimeout 功能,如不需要请设置为 false,节省缓存请求次数 + */ + private Boolean dynamicActiveTimeout = false; + + /** + * 是否允许同一账号多地同时登录 (为 true 时允许一起登录, 为 false 时新登录挤掉旧登录) + * -- GETTER -- + *

+ * 是否允许同一账号多地同时登录 (为 true 时允许一起登录, 为 false 时新登录挤掉旧登录) + */ + private Boolean isConcurrent = true; + + /** + * 在多人登录同一账号时,是否共用一个 token (为 true 时所有登录共用一个 token, 为 false 时每次登录新建一个 token) + * -- GETTER -- + *

+ * 在多人登录同一账号时,是否共用一个 token (为 true 时所有登录共用一个token, 为 false 时每次登录新建一个 token) + */ + private Boolean isShare = true; + + /** + * 同一账号最大登录数量,-1代表不限 (只有在 isConcurrent=true, isShare=false 时此配置项才有意义) + * -- GETTER -- + *

+ * 同一账号最大登录数量,-1代表不限 (只有在 isConcurrent=true, isShare=false 时此配置项才有意义) + */ + private int maxLoginCount = 12; + + /** + * 在每次创建 token 时的最高循环次数,用于保证 token 唯一性(-1=不循环尝试,直接使用) + * -- GETTER -- + *

+ * 在每次创建 token 时的最高循环次数,用于保证 token 唯一性(-1=不循环尝试,直接使用) + */ + private int maxTryTimes = 12; + + /** + * 是否尝试从请求体里读取 token + * -- GETTER -- + *

+ * 是否尝试从请求体里读取 token + */ + private Boolean isReadBody = true; + + /** + * 是否尝试从 header 里读取 token + * -- GETTER -- + *

+ * 是否尝试从 header 里读取 token + */ + private Boolean isReadHeader = true; + + /** + * 是否尝试从 cookie 里读取 token + * -- GETTER -- + *

+ * 是否尝试从 cookie 里读取 token + */ + private Boolean isReadCookie = true; + + /** + * 是否在登录后将 token 写入到响应头 + * -- GETTER -- + *

+ * 是否在登录后将 token 写入到响应头 + */ + private Boolean isWriteHeader = false; + + /** + * token 风格(默认可取值:uuid、simple-uuid、random-32、random-64、random-128、tik) + * -- GETTER -- + *

+ * token 风格(默认可取值:uuid、simple-uuid、random-32、random-64、random-128、tik) + */ + private String tokenStyle = "uuid"; + + /** + * 默认 SaTokenDao 实现类中,每次清理过期数据间隔的时间(单位: 秒),默认值30秒,设置为 -1 代表不启动定时清理 + * -- GETTER -- + *

+ * 默认 SaTokenDao 实现类中,每次清理过期数据间隔的时间(单位: 秒),默认值30秒,设置为 -1 代表不启动定时清理 + */ + private int dataRefreshPeriod = 30; + + /** + * 获取 Token-Session 时是否必须登录(如果配置为true,会在每次获取 getTokenSession() 时校验当前是否登录) + * -- GETTER -- + *

+ * 获取 Token-Session 时是否必须登录(如果配置为true,会在每次获取 getTokenSession() 时校验当前是否登录) + */ + private Boolean tokenSessionCheckLogin = true; + + /** + * 是否打开自动续签 activeTimeout (如果此值为 true, 框架会在每次直接或间接调用 getLoginId() 时进行一次过期检查与续签操作) + * -- GETTER -- + *

+ * 是否打开自动续签 activeTimeout (如果此值为 true, 框架会在每次直接或间接调用 getLoginId() 时进行一次过期检查与续签操作) + */ + private Boolean autoRenew = true; + + /** + * token 前缀, 前端提交 token 时应该填写的固定前缀,格式样例(satoken: Bearer xxxx-xxxx-xxxx-xxxx) + * -- GETTER -- + *

+ * token 前缀, 前端提交 token 时应该填写的固定前缀,格式样例(satoken: Bearer xxxx-xxxx-xxxx-xxxx) + */ + private String tokenPrefix; + + /** + * 是否在初始化配置时在控制台打印版本字符画 + * -- GETTER -- + *

+ * 是否在初始化配置时在控制台打印版本字符画 + */ + private Boolean isPrint = true; + + /** + * 是否打印操作日志 + * -- GETTER -- + *

+ * 是否打印操作日志 + */ + private Boolean isLog = false; + + /** + * 日志等级(trace、debug、info、warn、error、fatal),此值与 logLevelInt 联动 + * -- GETTER -- + *

+ * 日志等级(trace、debug、info、warn、error、fatal),此值与 logLevelInt 联动 + */ + private String logLevel = "trace"; + + /** + * 日志等级 int 值(1=trace、2=debug、3=info、4=warn、5=error、6=fatal),此值与 logLevel 联动 + * -- GETTER -- + *

+ * 日志等级 int 值(1=trace、2=debug、3=info、4=warn、5=error、6=fatal),此值与 logLevel 联动 + */ + private int logLevelInt = 1; + + /** + * 是否打印彩色日志 + * -- GETTER -- + * 获取:是否打印彩色日志 + *

+ * isColorLog 是否打印彩色日志 + */ + private Boolean isColorLog = null; + + /** + * jwt秘钥(只有集成 jwt 相关模块时此参数才会生效) + * -- GETTER -- + *

+ * jwt秘钥(只有集成 jwt 相关模块时此参数才会生效) + */ + private String jwtSecretKey; + + /** + * Http Basic 认证的默认账号和密码 + * -- GETTER -- + *

+ * Http Basic 认证的默认账号和密码 + */ + private String basic = ""; + + /** + * 配置当前项目的网络访问地址 + * -- GETTER -- + *

+ * 配置当前项目的网络访问地址 + */ + private String currDomain; + + /** + * Same-Token 的有效期 (单位: 秒) + * -- GETTER -- + *

+ * Same-Token 的有效期 (单位: 秒) + */ + private long sameTokenTimeout = 60 * 60 * 24; + + /** + * 是否校验 Same-Token(部分rpc插件有效) + * -- GETTER -- + *

+ * 是否校验Same-Token(部分rpc插件有效) + */ + private Boolean checkSameToken = false; + + /** + * Cookie配置对象 + * -- GETTER -- + *

+ * Cookie 全局配置对象 + */ + public SaCookieConfig cookie = new SaCookieConfig(); + + /** + * API 签名配置对象 + * -- GETTER -- + *

+ * API 签名全局配置对象 + */ + public SaSignConfig sign = new SaSignConfig(); + + + /** + * @param tokenName token 名称 (同时也是: cookie 名称、提交 token 时参数的名称、存储 token 时的 key 前缀) + * 对象自身 + */ + public SaTokenAdminProperties setTokenName(String tokenName) { + this.tokenName = tokenName; + return this; + } + + /** + * @param timeout token 有效期(单位:秒) 默认30天,-1 代表永久有效 + * 对象自身 + */ + public SaTokenAdminProperties setTimeout(long timeout) { + this.timeout = timeout; + return this; + } + + /** + * @param activeTimeout token 最低活跃频率(单位:秒),如果 token 超过此时间没有访问系统就会被冻结,默认-1 代表不限制,永不冻结 + * (例如可以设置为 1800 代表 30 分钟内无操作就冻结) + * 对象自身 + */ + public SaTokenAdminProperties setActiveTimeout(long activeTimeout) { + this.activeTimeout = activeTimeout; + return this; + } + + /** + * @param dynamicActiveTimeout 是否启用动态 activeTimeout 功能,如不需要请设置为 false,节省缓存请求次数 + * 对象自身 + */ + public SaTokenAdminProperties setDynamicActiveTimeout(Boolean dynamicActiveTimeout) { + this.dynamicActiveTimeout = dynamicActiveTimeout; + return this; + } + + /** + * @param isConcurrent 是否允许同一账号多地同时登录 (为 true 时允许一起登录, 为 false 时新登录挤掉旧登录) + * 对象自身 + */ + public SaTokenAdminProperties setIsConcurrent(Boolean isConcurrent) { + this.isConcurrent = isConcurrent; + return this; + } + + /** + * @param isShare 在多人登录同一账号时,是否共用一个 token (为 true 时所有登录共用一个token, 为 false 时每次登录新建一个 token) + * 对象自身 + */ + public SaTokenAdminProperties setIsShare(Boolean isShare) { + this.isShare = isShare; + return this; + } + + /** + * @param maxLoginCount 同一账号最大登录数量,-1代表不限 (只有在 isConcurrent=true, isShare=false 时此配置项才有意义) + * 对象自身 + */ + public SaTokenAdminProperties setMaxLoginCount(int maxLoginCount) { + this.maxLoginCount = maxLoginCount; + return this; + } + + /** + * @param maxTryTimes 在每次创建 token 时的最高循环次数,用于保证 token 唯一性(-1=不循环尝试,直接使用) + * 对象自身 + */ + public SaTokenAdminProperties setMaxTryTimes(int maxTryTimes) { + this.maxTryTimes = maxTryTimes; + return this; + } + + /** + * @param isReadBody 是否尝试从请求体里读取 token + * 对象自身 + */ + public SaTokenAdminProperties setIsReadBody(Boolean isReadBody) { + this.isReadBody = isReadBody; + return this; + } + + /** + * @param isReadHeader 是否尝试从 header 里读取 token + * 对象自身 + */ + public SaTokenAdminProperties setIsReadHeader(Boolean isReadHeader) { + this.isReadHeader = isReadHeader; + return this; + } + + /** + * @param isReadCookie 是否尝试从 cookie 里读取 token + * 对象自身 + */ + public SaTokenAdminProperties setIsReadCookie(Boolean isReadCookie) { + this.isReadCookie = isReadCookie; + return this; + } + + /** + * @param isWriteHeader 是否在登录后将 token 写入到响应头 + * 对象自身 + */ + public SaTokenAdminProperties setIsWriteHeader(Boolean isWriteHeader) { + this.isWriteHeader = isWriteHeader; + return this; + } + + /** + * @param tokenStyle token 风格(默认可取值:uuid、simple-uuid、random-32、random-64、random-128、tik) + * 对象自身 + */ + public SaTokenAdminProperties setTokenStyle(String tokenStyle) { + this.tokenStyle = tokenStyle; + return this; + } + + /** + * @param dataRefreshPeriod 默认 SaTokenDao 实现类中,每次清理过期数据间隔的时间(单位: 秒),默认值30秒,设置为 -1 代表不启动定时清理 + * 对象自身 + */ + public SaTokenAdminProperties setDataRefreshPeriod(int dataRefreshPeriod) { + this.dataRefreshPeriod = dataRefreshPeriod; + return this; + } + + /** + * @param tokenSessionCheckLogin 获取 Token-Session 时是否必须登录(如果配置为true,会在每次获取 getTokenSession() 时校验当前是否登录) + * 对象自身 + */ + public SaTokenAdminProperties setTokenSessionCheckLogin(Boolean tokenSessionCheckLogin) { + this.tokenSessionCheckLogin = tokenSessionCheckLogin; + return this; + } + + /** + * @param autoRenew 是否打开自动续签 activeTimeout (如果此值为 true, 框架会在每次直接或间接调用 getLoginId() 时进行一次过期检查与续签操作) + * 对象自身 + */ + public SaTokenAdminProperties setAutoRenew(Boolean autoRenew) { + this.autoRenew = autoRenew; + return this; + } + + /** + * @param tokenPrefix token 前缀, 前端提交 token 时应该填写的固定前缀,格式样例(satoken: Bearer xxxx-xxxx-xxxx-xxxx) + * 对象自身 + */ + public SaTokenAdminProperties setTokenPrefix(String tokenPrefix) { + this.tokenPrefix = tokenPrefix; + return this; + } + + /** + * @param isPrint 是否在初始化配置时在控制台打印版本字符画 + * 对象自身 + */ + public SaTokenAdminProperties setIsPrint(Boolean isPrint) { + this.isPrint = isPrint; + return this; + } + + /** + * @param isLog 是否打印操作日志 + * 对象自身 + */ + public SaTokenAdminProperties setIsLog(Boolean isLog) { + this.isLog = isLog; + return this; + } + + /** + * @param logLevel 日志等级(trace、debug、info、warn、error、fatal),此值与 logLevelInt 联动 + * 对象自身 + */ + public SaTokenAdminProperties setLogLevel(String logLevel) { + this.logLevel = logLevel; + this.logLevelInt = SaFoxUtil.translateLogLevelToInt(logLevel); + return this; + } + + /** + * @param logLevelInt 日志等级 int 值(1=trace、2=debug、3=info、4=warn、5=error、6=fatal),此值与 logLevel 联动 + * 对象自身 + */ + public SaTokenAdminProperties setLogLevelInt(int logLevelInt) { + this.logLevelInt = logLevelInt; + this.logLevel = SaFoxUtil.translateLogLevelToString(logLevelInt); + return this; + } + + /** + * 设置:是否打印彩色日志 + * + * @param isColorLog 是否打印彩色日志 + * 对象自身 + */ + public SaTokenAdminProperties setIsColorLog(Boolean isColorLog) { + this.isColorLog = isColorLog; + return this; + } + + /** + * @param jwtSecretKey jwt秘钥(只有集成 jwt 相关模块时此参数才会生效) + * 对象自身 + */ + public SaTokenAdminProperties setJwtSecretKey(String jwtSecretKey) { + this.jwtSecretKey = jwtSecretKey; + return this; + } + + /** + * @param basic Http Basic 认证的默认账号和密码 + * 对象自身 + */ + public SaTokenAdminProperties setBasic(String basic) { + this.basic = basic; + return this; + } + + /** + * @param currDomain 配置当前项目的网络访问地址 + * 对象自身 + */ + public SaTokenAdminProperties setCurrDomain(String currDomain) { + this.currDomain = currDomain; + return this; + } + + /** + * @param sameTokenTimeout Same-Token 的有效期 (单位: 秒) + * 对象自身 + */ + public SaTokenAdminProperties setSameTokenTimeout(long sameTokenTimeout) { + this.sameTokenTimeout = sameTokenTimeout; + return this; + } + + /** + * @param checkSameToken 是否校验Same-Token(部分rpc插件有效) + * 对象自身 + */ + public SaTokenAdminProperties setCheckSameToken(Boolean checkSameToken) { + this.checkSameToken = checkSameToken; + return this; + } + + /** + * @param cookie Cookie 全局配置对象 + * 对象自身 + */ + public SaTokenAdminProperties setCookie(SaCookieConfig cookie) { + this.cookie = cookie; + return this; + } + + /** + * @param sign API 签名全局配置对象 + * 对象自身 + */ + public SaTokenAdminProperties setSign(SaSignConfig sign) { + this.sign = sign; + return this; + } + + @Override + public String toString() { + return "SaTokenConfig [" + + "tokenName=" + tokenName + + ", timeout=" + timeout + + ", activeTimeout=" + activeTimeout + + ", dynamicActiveTimeout=" + dynamicActiveTimeout + + ", isConcurrent=" + isConcurrent + + ", isShare=" + isShare + + ", maxLoginCount=" + maxLoginCount + + ", maxTryTimes=" + maxTryTimes + + ", isReadBody=" + isReadBody + + ", isReadHeader=" + isReadHeader + + ", isReadCookie=" + isReadCookie + + ", isWriteHeader=" + isWriteHeader + + ", tokenStyle=" + tokenStyle + + ", dataRefreshPeriod=" + dataRefreshPeriod + + ", tokenSessionCheckLogin=" + tokenSessionCheckLogin + + ", autoRenew=" + autoRenew + + ", tokenPrefix=" + tokenPrefix + + ", isPrint=" + isPrint + + ", isLog=" + isLog + + ", logLevel=" + logLevel + + ", logLevelInt=" + logLevelInt + + ", isColorLog=" + isColorLog + + ", jwtSecretKey=" + jwtSecretKey + + ", basic=" + basic + + ", currDomain=" + currDomain + + ", sameTokenTimeout=" + sameTokenTimeout + + ", checkSameToken=" + checkSameToken + + ", cookie=" + cookie + + ", sign=" + sign + + "]"; + } + +} diff --git a/src/main/java/com/metalloop/framework/satoken/self/StpSelfUtil.java b/src/main/java/com/metalloop/framework/satoken/self/StpSelfUtil.java new file mode 100644 index 0000000..00930e3 --- /dev/null +++ b/src/main/java/com/metalloop/framework/satoken/self/StpSelfUtil.java @@ -0,0 +1,1235 @@ +/* + * Copyright 2020-2099 sa-token.cc + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.metalloop.framework.satoken.self; + +import cn.dev33.satoken.SaManager; +import cn.dev33.satoken.fun.SaFunction; +import cn.dev33.satoken.listener.SaTokenEventCenter; +import cn.dev33.satoken.session.SaSession; +import cn.dev33.satoken.session.TokenSign; +import cn.dev33.satoken.stp.SaLoginModel; +import cn.dev33.satoken.stp.SaTokenInfo; +import cn.dev33.satoken.stp.StpLogic; +import com.metalloop.common.enums.LoginType; + +import java.util.List; + +/** + * Sa-Token 权限认证工具类的二次封装,修改了账号类型,支持 自助服务终端 客户端的认证 + * + * @author zhaowenhao + * @since 2023-06-21 + */ +public class StpSelfUtil { + + private StpSelfUtil() { + } + + /** + * 多账号体系下的类型标识 + */ + public static final String TYPE = LoginType.SELF.getType(); + + /** + * 底层使用的 StpLogic 对象 + */ + public static StpLogic stpLogic = LoginType.SELF.getStpLogic(); + + /** + * 获取当前 StpLogic 的账号类型 + * + * @return / + */ + public static String getLoginType() { + return stpLogic.getLoginType(); + } + + /** + * 安全的重置 StpLogic 对象 + * + *
1、更改此账户的 StpLogic 对象 + *
2、put 到全局 StpLogic 集合中 + *
3、发送日志 + * + * @param newStpLogic / + */ + public static void setStpLogic(StpLogic newStpLogic) { + // 1、重置此账户的 StpLogic 对象 + stpLogic = newStpLogic; + + // 2、添加到全局 StpLogic 集合中 + // 以便可以通过 SaManager.getStpLogic(type) 的方式来全局获取到这个 StpLogic + SaManager.putStpLogic(newStpLogic); + + // 3、$$ 发布事件:更新了 stpLogic 对象 + SaTokenEventCenter.doSetStpLogic(stpLogic); + } + + /** + * 获取 StpLogic 对象 + * + * @return / + */ + public static StpLogic getStpLogic() { + return stpLogic; + } + + + // ------------------- 获取 token 相关 ------------------- + + /** + * 返回 token 名称,此名称在以下地方体现:Cookie 保存 token 时的名称、提交 token 时参数的名称、存储 token 时的 key 前缀 + * + * @return / + */ + public static String getTokenName() { + return stpLogic.getTokenName(); + } + + /** + * 在当前会话写入指定 token 值 + * + * @param tokenValue token 值 + */ + public static void setTokenValue(String tokenValue) { + stpLogic.setTokenValue(tokenValue); + } + + /** + * 在当前会话写入指定 token 值 + * + * @param tokenValue token 值 + * @param cookieTimeout Cookie存活时间(秒) + */ + public static void setTokenValue(String tokenValue, int cookieTimeout) { + stpLogic.setTokenValue(tokenValue, cookieTimeout); + } + + /** + * 在当前会话写入指定 token 值 + * + * @param tokenValue token 值 + * @param loginModel 登录参数 + */ + public static void setTokenValue(String tokenValue, SaLoginModel loginModel) { + stpLogic.setTokenValue(tokenValue, loginModel); + } + + /** + * 获取当前请求的 token 值 + * + * @return 当前tokenValue + */ + public static String getTokenValue() { + return stpLogic.getTokenValue(); + } + + /** + * 获取当前请求的 token 值 (不裁剪前缀) + * + * @return / + */ + public static String getTokenValueNotCut() { + return stpLogic.getTokenValueNotCut(); + } + + /** + * 获取当前会话的 token 参数信息 + * + * @return token 参数信息 + */ + public static SaTokenInfo getTokenInfo() { + return stpLogic.getTokenInfo(); + } + + + // ------------------- 登录相关操作 ------------------- + + // --- 登录 + + /** + * 会话登录 + * + * @param id 账号id,建议的类型:(long | int | String) + */ + public static void login(Object id) { + stpLogic.login(id); + } + + /** + * 会话登录,并指定登录设备类型 + * + * @param id 账号id,建议的类型:(long | int | String) + * @param device 设备类型 + */ + public static void login(Object id, String device) { + stpLogic.login(id, device); + } + + /** + * 会话登录,并指定是否 [记住我] + * + * @param id 账号id,建议的类型:(long | int | String) + * @param isLastingCookie 是否为持久Cookie,值为 true 时记住我,值为 false 时关闭浏览器需要重新登录 + */ + public static void login(Object id, boolean isLastingCookie) { + stpLogic.login(id, isLastingCookie); + } + + /** + * 会话登录,并指定此次登录 token 的有效期, 单位:秒 + * + * @param id 账号id,建议的类型:(long | int | String) + * @param timeout 此次登录 token 的有效期, 单位:秒 + */ + public static void login(Object id, long timeout) { + stpLogic.login(id, timeout); + } + + /** + * 会话登录,并指定所有登录参数 Model + * + * @param id 账号id,建议的类型:(long | int | String) + * @param loginModel 此次登录的参数Model + */ + public static void login(Object id, SaLoginModel loginModel) { + stpLogic.login(id, loginModel); + } + + /** + * 创建指定账号 id 的登录会话数据 + * + * @param id 账号id,建议的类型:(long | int | String) + * @return 返回会话令牌 + */ + public static String createLoginSession(Object id) { + return stpLogic.createLoginSession(id); + } + + /** + * 创建指定账号 id 的登录会话数据 + * + * @param id 账号id,建议的类型:(long | int | String) + * @param loginModel 此次登录的参数Model + * @return 返回会话令牌 + */ + public static String createLoginSession(Object id, SaLoginModel loginModel) { + return stpLogic.createLoginSession(id, loginModel); + } + + // --- 注销 + + /** + * 在当前客户端会话注销 + */ + public static void logout() { + stpLogic.logout(); + } + + /** + * 会话注销,根据账号id + * + * @param loginId 账号id + */ + public static void logout(Object loginId) { + stpLogic.logout(loginId); + } + + /** + * 会话注销,根据账号id 和 设备类型 + * + * @param loginId 账号id + * @param device 设备类型 (填 null 代表注销该账号的所有设备类型) + */ + public static void logout(Object loginId, String device) { + stpLogic.logout(loginId, device); + } + + /** + * 会话注销,根据指定 Token + * + * @param tokenValue 指定 token + */ + public static void logoutByTokenValue(String tokenValue) { + stpLogic.logoutByTokenValue(tokenValue); + } + + /** + * 踢人下线,根据账号id + *

当对方再次访问系统时,会抛出 NotLoginException 异常,场景值=-5

+ * + * @param loginId 账号id + */ + public static void kickout(Object loginId) { + stpLogic.kickout(loginId); + } + + /** + * 踢人下线,根据账号id 和 设备类型 + *

当对方再次访问系统时,会抛出 NotLoginException 异常,场景值=-5

+ * + * @param loginId 账号id + * @param device 设备类型 (填 null 代表踢出该账号的所有设备类型) + */ + public static void kickout(Object loginId, String device) { + stpLogic.kickout(loginId, device); + } + + /** + * 踢人下线,根据指定 token + *

当对方再次访问系统时,会抛出 NotLoginException 异常,场景值=-5

+ * + * @param tokenValue 指定 token + */ + public static void kickoutByTokenValue(String tokenValue) { + stpLogic.kickoutByTokenValue(tokenValue); + } + + /** + * 顶人下线,根据账号id 和 设备类型 + *

当对方再次访问系统时,会抛出 NotLoginException 异常,场景值=-4

+ * + * @param loginId 账号id + * @param device 设备类型 (填 null 代表顶替该账号的所有设备类型) + */ + public static void replaced(Object loginId, String device) { + stpLogic.replaced(loginId, device); + } + + // 会话查询 + + /** + * 判断当前会话是否已经登录 + * + * @return 已登录返回 true,未登录返回 false + */ + public static boolean isLogin() { + return stpLogic.isLogin(); + } + + /** + * 判断指定账号是否已经登录 + * + * @return 已登录返回 true,未登录返回 false + */ + public static boolean isLogin(Object loginId) { + return stpLogic.isLogin(loginId); + } + + /** + * 检验当前会话是否已经登录,如未登录,则抛出异常 + */ + public static void checkLogin() { + stpLogic.checkLogin(); + } + + /** + * 获取当前会话账号id,如果未登录,则抛出异常 + * + * @return 账号id + */ + public static Object getLoginId() { + return stpLogic.getLoginId(); + } + + /** + * 获取当前会话账号id, 如果未登录,则返回默认值 + * + * @param 返回类型 + * @param defaultValue 默认值 + * @return 登录id + */ + public static T getLoginId(T defaultValue) { + return stpLogic.getLoginId(defaultValue); + } + + /** + * 获取当前会话账号id, 如果未登录,则返回null + * + * @return 账号id + */ + public static Object getLoginIdDefaultNull() { + return stpLogic.getLoginIdDefaultNull(); + } + + /** + * 获取当前会话账号id, 并转换为 String 类型 + * + * @return 账号id + */ + public static String getLoginIdAsString() { + return stpLogic.getLoginIdAsString(); + } + + /** + * 获取当前会话账号id, 并转换为 int 类型 + * + * @return 账号id + */ + public static int getLoginIdAsInt() { + return stpLogic.getLoginIdAsInt(); + } + + /** + * 获取当前会话账号id, 并转换为 long 类型 + * + * @return 账号id + */ + public static long getLoginIdAsLong() { + return stpLogic.getLoginIdAsLong(); + } + + /** + * 获取指定 token 对应的账号id,如果未登录,则返回 null + * + * @param tokenValue token + * @return 账号id + */ + public static Object getLoginIdByToken(String tokenValue) { + return stpLogic.getLoginIdByToken(tokenValue); + } + + /** + * 获取当前 Token 的扩展信息(此函数只在jwt模式下生效) + * + * @param key 键值 + * @return 对应的扩展数据 + */ + public static Object getExtra(String key) { + return stpLogic.getExtra(key); + } + + /** + * 获取指定 Token 的扩展信息(此函数只在jwt模式下生效) + * + * @param tokenValue 指定的 Token 值 + * @param key 键值 + * @return 对应的扩展数据 + */ + public static Object getExtra(String tokenValue, String key) { + return stpLogic.getExtra(tokenValue, key); + } + + + // ------------------- Account-Session 相关 ------------------- + + /** + * 获取指定账号 id 的 Account-Session, 如果该 SaSession 尚未创建,isCreate=是否新建并返回 + * + * @param loginId 账号id + * @param isCreate 是否新建 + * @return SaSession 对象 + */ + public static SaSession getSessionByLoginId(Object loginId, boolean isCreate) { + return stpLogic.getSessionByLoginId(loginId, isCreate); + } + + /** + * 获取指定 key 的 SaSession, 如果该 SaSession 尚未创建,则返回 null + * + * @param sessionId SessionId + * @return Session对象 + */ + public static SaSession getSessionBySessionId(String sessionId) { + return stpLogic.getSessionBySessionId(sessionId); + } + + /** + * 获取指定账号 id 的 Account-Session,如果该 SaSession 尚未创建,则新建并返回 + * + * @param loginId 账号id + * @return SaSession 对象 + */ + public static SaSession getSessionByLoginId(Object loginId) { + return stpLogic.getSessionByLoginId(loginId); + } + + /** + * 获取当前已登录账号的 Account-Session, 如果该 SaSession 尚未创建,isCreate=是否新建并返回 + * + * @param isCreate 是否新建 + * @return Session对象 + */ + public static SaSession getSession(boolean isCreate) { + return stpLogic.getSession(isCreate); + } + + /** + * 获取当前已登录账号的 Account-Session,如果该 SaSession 尚未创建,则新建并返回 + * + * @return Session对象 + */ + public static SaSession getSession() { + return stpLogic.getSession(); + } + + + // ------------------- Token-Session 相关 ------------------- + + /** + * 获取指定 token 的 Token-Session,如果该 SaSession 尚未创建,则新建并返回 + * + * @param tokenValue Token值 + * @return Session对象 + */ + public static SaSession getTokenSessionByToken(String tokenValue) { + return stpLogic.getTokenSessionByToken(tokenValue); + } + + /** + * 获取当前 token 的 Token-Session,如果该 SaSession 尚未创建,则新建并返回 + * + * @return Session对象 + */ + public static SaSession getTokenSession() { + return stpLogic.getTokenSession(); + } + + /** + * 获取当前匿名 Token-Session (可在未登录情况下使用的Token-Session) + * + * @return Token-Session 对象 + */ + public static SaSession getAnonTokenSession() { + return stpLogic.getAnonTokenSession(); + } + + + // ------------------- Active-Timeout token 最低活跃度 验证相关 ------------------- + + /** + * 续签当前 token:(将 [最后操作时间] 更新为当前时间戳) + *

+ * 请注意: 即使 token 已被冻结 也可续签成功, + * 如果此场景下需要提示续签失败,可在此之前调用 checkActiveTimeout() 强制检查是否冻结即可 + *

+ */ + public static void updateLastActiveToNow() { + stpLogic.updateLastActiveToNow(); + } + + /** + * 检查当前 token 是否已被冻结,如果是则抛出异常 + */ + public static void checkActiveTimeout() { + stpLogic.checkActiveTimeout(); + } + + + // ------------------- 过期时间相关 ------------------- + + /** + * 获取当前会话 token 剩余有效时间(单位: 秒,返回 -1 代表永久有效,-2 代表没有这个值) + * + * @return token剩余有效时间 + */ + public static long getTokenTimeout() { + return stpLogic.getTokenTimeout(); + } + + /** + * 获取指定 token 剩余有效时间(单位: 秒,返回 -1 代表永久有效,-2 代表没有这个值) + * + * @param token 指定token + * @return token剩余有效时间 + */ + public static long getTokenTimeout(String token) { + return stpLogic.getTokenTimeout(token); + } + + /** + * 获取当前登录账号的 Account-Session 剩余有效时间(单位: 秒,返回 -1 代表永久有效,-2 代表没有这个值) + * + * @return token剩余有效时间 + */ + public static long getSessionTimeout() { + return stpLogic.getSessionTimeout(); + } + + /** + * 获取当前 token 的 Token-Session 剩余有效时间(单位: 秒,返回 -1 代表永久有效,-2 代表没有这个值) + * + * @return token剩余有效时间 + */ + public static long getTokenSessionTimeout() { + return stpLogic.getTokenSessionTimeout(); + } + + /** + * 获取当前 token 剩余活跃有效期:当前 token 距离被冻结还剩多少时间(单位: 秒,返回 -1 代表永不冻结,-2 代表没有这个值或 token 已被冻结了) + * + * @return / + */ + public static long getTokenActiveTimeout() { + return stpLogic.getTokenActiveTimeout(); + } + + /** + * 对当前 token 的 timeout 值进行续期 + * + * @param timeout 要修改成为的有效时间 (单位: 秒) + */ + public static void renewTimeout(long timeout) { + stpLogic.renewTimeout(timeout); + } + + /** + * 对指定 token 的 timeout 值进行续期 + * + * @param tokenValue 指定 token + * @param timeout 要修改成为的有效时间 (单位: 秒,填 -1 代表要续为永久有效) + */ + public static void renewTimeout(String tokenValue, long timeout) { + stpLogic.renewTimeout(tokenValue, timeout); + } + + + // ------------------- 角色认证操作 ------------------- + + /** + * 获取:当前账号的角色集合 + * + * @return / + */ + public static List getRoleList() { + return stpLogic.getRoleList(); + } + + /** + * 获取:指定账号的角色集合 + * + * @param loginId 指定账号id + * @return / + */ + public static List getRoleList(Object loginId) { + return stpLogic.getRoleList(loginId); + } + + /** + * 判断:当前账号是否拥有指定角色, 返回 true 或 false + * + * @param role 角色 + * @return / + */ + public static boolean hasRole(String role) { + return stpLogic.hasRole(role); + } + + /** + * 判断:指定账号是否含有指定角色标识, 返回 true 或 false + * + * @param loginId 账号id + * @param role 角色标识 + * @return 是否含有指定角色标识 + */ + public static boolean hasRole(Object loginId, String role) { + return stpLogic.hasRole(loginId, role); + } + + /** + * 判断:当前账号是否含有指定角色标识 [ 指定多个,必须全部验证通过 ] + * + * @param roleArray 角色标识数组 + * @return true或false + */ + public static boolean hasRoleAnd(String... roleArray) { + return stpLogic.hasRoleAnd(roleArray); + } + + /** + * 判断:当前账号是否含有指定角色标识 [ 指定多个,只要其一验证通过即可 ] + * + * @param roleArray 角色标识数组 + * @return true或false + */ + public static boolean hasRoleOr(String... roleArray) { + return stpLogic.hasRoleOr(roleArray); + } + + /** + * 校验:当前账号是否含有指定角色标识, 如果验证未通过,则抛出异常: NotRoleException + * + * @param role 角色标识 + */ + public static void checkRole(String role) { + stpLogic.checkRole(role); + } + + /** + * 校验:当前账号是否含有指定角色标识 [ 指定多个,必须全部验证通过 ] + * + * @param roleArray 角色标识数组 + */ + public static void checkRoleAnd(String... roleArray) { + stpLogic.checkRoleAnd(roleArray); + } + + /** + * 校验:当前账号是否含有指定角色标识 [ 指定多个,只要其一验证通过即可 ] + * + * @param roleArray 角色标识数组 + */ + public static void checkRoleOr(String... roleArray) { + stpLogic.checkRoleOr(roleArray); + } + + + // ------------------- 权限认证操作 ------------------- + + /** + * 获取:当前账号的权限码集合 + * + * @return / + */ + public static List getPermissionList() { + return stpLogic.getPermissionList(); + } + + /** + * 获取:指定账号的权限码集合 + * + * @param loginId 指定账号id + * @return / + */ + public static List getPermissionList(Object loginId) { + return stpLogic.getPermissionList(loginId); + } + + /** + * 判断:当前账号是否含有指定权限, 返回 true 或 false + * + * @param permission 权限码 + * @return 是否含有指定权限 + */ + public static boolean hasPermission(String permission) { + return stpLogic.hasPermission(permission); + } + + /** + * 判断:指定账号 id 是否含有指定权限, 返回 true 或 false + * + * @param loginId 账号 id + * @param permission 权限码 + * @return 是否含有指定权限 + */ + public static boolean hasPermission(Object loginId, String permission) { + return stpLogic.hasPermission(loginId, permission); + } + + /** + * 判断:当前账号是否含有指定权限 [ 指定多个,必须全部具有 ] + * + * @param permissionArray 权限码数组 + * @return true 或 false + */ + public static boolean hasPermissionAnd(String... permissionArray) { + return stpLogic.hasPermissionAnd(permissionArray); + } + + /** + * 判断:当前账号是否含有指定权限 [ 指定多个,只要其一验证通过即可 ] + * + * @param permissionArray 权限码数组 + * @return true 或 false + */ + public static boolean hasPermissionOr(String... permissionArray) { + return stpLogic.hasPermissionOr(permissionArray); + } + + /** + * 校验:当前账号是否含有指定权限, 如果验证未通过,则抛出异常: NotPermissionException + * + * @param permission 权限码 + */ + public static void checkPermission(String permission) { + stpLogic.checkPermission(permission); + } + + /** + * 校验:当前账号是否含有指定权限 [ 指定多个,必须全部验证通过 ] + * + * @param permissionArray 权限码数组 + */ + public static void checkPermissionAnd(String... permissionArray) { + stpLogic.checkPermissionAnd(permissionArray); + } + + /** + * 校验:当前账号是否含有指定权限 [ 指定多个,只要其一验证通过即可 ] + * + * @param permissionArray 权限码数组 + */ + public static void checkPermissionOr(String... permissionArray) { + stpLogic.checkPermissionOr(permissionArray); + } + + + // ------------------- id 反查 token 相关操作 ------------------- + + /** + * 获取指定账号 id 的 token + *

+ * 在配置为允许并发登录时,此方法只会返回队列的最后一个 token, + * 如果你需要返回此账号 id 的所有 token,请调用 getTokenValueListByLoginId + *

+ * + * @param loginId 账号id + * @return token值 + */ + public static String getTokenValueByLoginId(Object loginId) { + return stpLogic.getTokenValueByLoginId(loginId); + } + + /** + * 获取指定账号 id 指定设备类型端的 token + *

+ * 在配置为允许并发登录时,此方法只会返回队列的最后一个 token, + * 如果你需要返回此账号 id 的所有 token,请调用 getTokenValueListByLoginId + *

+ * + * @param loginId 账号id + * @param device 设备类型,填 null 代表不限设备类型 + * @return token值 + */ + public static String getTokenValueByLoginId(Object loginId, String device) { + return stpLogic.getTokenValueByLoginId(loginId, device); + } + + /** + * 获取指定账号 id 的 token 集合 + * + * @param loginId 账号id + * @return 此 loginId 的所有相关 token + */ + public static List getTokenValueListByLoginId(Object loginId) { + return stpLogic.getTokenValueListByLoginId(loginId); + } + + /** + * 获取指定账号 id 指定设备类型端的 token 集合 + * + * @param loginId 账号id + * @param device 设备类型,填 null 代表不限设备类型 + * @return 此 loginId 的所有登录 token + */ + public static List getTokenValueListByLoginId(Object loginId, String device) { + return stpLogic.getTokenValueListByLoginId(loginId, device); + } + + /** + * 获取指定账号 id 指定设备类型端的 tokenSign 集合 + * + * @param loginId 账号id + * @param device 设备类型,填 null 代表不限设备类型 + * @return 此 loginId 的所有登录 tokenSign + */ + public static List getTokenSignListByLoginId(Object loginId, String device) { + return stpLogic.getTokenSignListByLoginId(loginId, device); + } + + /** + * 返回当前会话的登录设备类型 + * + * @return 当前令牌的登录设备类型 + */ + public static String getLoginDevice() { + return stpLogic.getLoginDevice(); + } + + + // ------------------- 会话管理 ------------------- + + /** + * 根据条件查询缓存中所有的 token + * + * @param keyword 关键字 + * @param start 开始处索引 + * @param size 获取数量 (-1代表一直获取到末尾) + * @param sortType 排序类型(true=正序,false=反序) + * @return token集合 + */ + public static List searchTokenValue(String keyword, int start, int size, boolean sortType) { + return stpLogic.searchTokenValue(keyword, start, size, sortType); + } + + /** + * 根据条件查询缓存中所有的 SessionId + * + * @param keyword 关键字 + * @param start 开始处索引 + * @param size 获取数量 (-1代表一直获取到末尾) + * @param sortType 排序类型(true=正序,false=反序) + * @return sessionId集合 + */ + public static List searchSessionId(String keyword, int start, int size, boolean sortType) { + return stpLogic.searchSessionId(keyword, start, size, sortType); + } + + /** + * 根据条件查询缓存中所有的 Token-Session-Id + * + * @param keyword 关键字 + * @param start 开始处索引 + * @param size 获取数量 (-1代表一直获取到末尾) + * @param sortType 排序类型(true=正序,false=反序) + * @return sessionId集合 + */ + public static List searchTokenSessionId(String keyword, int start, int size, boolean sortType) { + return stpLogic.searchTokenSessionId(keyword, start, size, sortType); + } + + + // ------------------- 账号封禁 ------------------- + + /** + * 封禁:指定账号 + *

此方法不会直接将此账号id踢下线,如需封禁后立即掉线,请追加调用 StpUtil.logout(id) + * + * @param loginId 指定账号id + * @param time 封禁时间, 单位: 秒 (-1=永久封禁) + */ + public static void disable(Object loginId, long time) { + stpLogic.disable(loginId, time); + } + + /** + * 判断:指定账号是否已被封禁 (true=已被封禁, false=未被封禁) + * + * @param loginId 账号id + * @return / + */ + public static boolean isDisable(Object loginId) { + return stpLogic.isDisable(loginId); + } + + /** + * 校验:指定账号是否已被封禁,如果被封禁则抛出异常 + * + * @param loginId 账号id + */ + public static void checkDisable(Object loginId) { + stpLogic.checkDisable(loginId); + } + + /** + * 获取:指定账号剩余封禁时间,单位:秒(-1=永久封禁,-2=未被封禁) + * + * @param loginId 账号id + * @return / + */ + public static long getDisableTime(Object loginId) { + return stpLogic.getDisableTime(loginId); + } + + /** + * 解封:指定账号 + * + * @param loginId 账号id + */ + public static void untieDisable(Object loginId) { + stpLogic.untieDisable(loginId); + } + + + // ------------------- 分类封禁 ------------------- + + /** + * 封禁:指定账号的指定服务 + *

此方法不会直接将此账号id踢下线,如需封禁后立即掉线,请追加调用 StpUtil.logout(id) + * + * @param loginId 指定账号id + * @param service 指定服务 + * @param time 封禁时间, 单位: 秒 (-1=永久封禁) + */ + public static void disable(Object loginId, String service, long time) { + stpLogic.disable(loginId, service, time); + } + + /** + * 判断:指定账号的指定服务 是否已被封禁(true=已被封禁, false=未被封禁) + * + * @param loginId 账号id + * @param service 指定服务 + * @return / + */ + public static boolean isDisable(Object loginId, String service) { + return stpLogic.isDisable(loginId, service); + } + + /** + * 校验:指定账号 指定服务 是否已被封禁,如果被封禁则抛出异常 + * + * @param loginId 账号id + * @param services 指定服务,可以指定多个 + */ + public static void checkDisable(Object loginId, String... services) { + stpLogic.checkDisable(loginId, services); + } + + /** + * 获取:指定账号 指定服务 剩余封禁时间,单位:秒(-1=永久封禁,-2=未被封禁) + * + * @param loginId 账号id + * @param service 指定服务 + * @return see note + */ + public static long getDisableTime(Object loginId, String service) { + return stpLogic.getDisableTime(loginId, service); + } + + /** + * 解封:指定账号、指定服务 + * + * @param loginId 账号id + * @param services 指定服务,可以指定多个 + */ + public static void untieDisable(Object loginId, String... services) { + stpLogic.untieDisable(loginId, services); + } + + + // ------------------- 阶梯封禁 ------------------- + + /** + * 封禁:指定账号,并指定封禁等级 + * + * @param loginId 指定账号id + * @param level 指定封禁等级 + * @param time 封禁时间, 单位: 秒 (-1=永久封禁) + */ + public static void disableLevel(Object loginId, int level, long time) { + stpLogic.disableLevel(loginId, level, time); + } + + /** + * 封禁:指定账号的指定服务,并指定封禁等级 + * + * @param loginId 指定账号id + * @param service 指定封禁服务 + * @param level 指定封禁等级 + * @param time 封禁时间, 单位: 秒 (-1=永久封禁) + */ + public static void disableLevel(Object loginId, String service, int level, long time) { + stpLogic.disableLevel(loginId, service, level, time); + } + + /** + * 判断:指定账号是否已被封禁到指定等级 + * + * @param loginId 指定账号id + * @param level 指定封禁等级 + * @return / + */ + public static boolean isDisableLevel(Object loginId, int level) { + return stpLogic.isDisableLevel(loginId, level); + } + + /** + * 判断:指定账号的指定服务,是否已被封禁到指定等级 + * + * @param loginId 指定账号id + * @param service 指定封禁服务 + * @param level 指定封禁等级 + * @return / + */ + public static boolean isDisableLevel(Object loginId, String service, int level) { + return stpLogic.isDisableLevel(loginId, service, level); + } + + /** + * 校验:指定账号是否已被封禁到指定等级(如果已经达到,则抛出异常) + * + * @param loginId 指定账号id + * @param level 封禁等级 (只有 封禁等级 ≥ 此值 才会抛出异常) + */ + public static void checkDisableLevel(Object loginId, int level) { + stpLogic.checkDisableLevel(loginId, level); + } + + /** + * 校验:指定账号的指定服务,是否已被封禁到指定等级(如果已经达到,则抛出异常) + * + * @param loginId 指定账号id + * @param service 指定封禁服务 + * @param level 封禁等级 (只有 封禁等级 ≥ 此值 才会抛出异常) + */ + public static void checkDisableLevel(Object loginId, String service, int level) { + stpLogic.checkDisableLevel(loginId, service, level); + } + + /** + * 获取:指定账号被封禁的等级,如果未被封禁则返回-2 + * + * @param loginId 指定账号id + * @return / + */ + public static int getDisableLevel(Object loginId) { + return stpLogic.getDisableLevel(loginId); + } + + /** + * 获取:指定账号的 指定服务 被封禁的等级,如果未被封禁则返回-2 + * + * @param loginId 指定账号id + * @param service 指定封禁服务 + * @return / + */ + public static int getDisableLevel(Object loginId, String service) { + return stpLogic.getDisableLevel(loginId, service); + } + + + // ------------------- 临时身份切换 ------------------- + + /** + * 临时切换身份为指定账号id + * + * @param loginId 指定loginId + */ + public static void switchTo(Object loginId) { + stpLogic.switchTo(loginId); + } + + /** + * 结束临时切换身份 + */ + public static void endSwitch() { + stpLogic.endSwitch(); + } + + /** + * 判断当前请求是否正处于 [ 身份临时切换 ] 中 + * + * @return / + */ + public static boolean isSwitch() { + return stpLogic.isSwitch(); + } + + /** + * 在一个 lambda 代码段里,临时切换身份为指定账号id,lambda 结束后自动恢复 + * + * @param loginId 指定账号id + * @param function 要执行的方法 + */ + public static void switchTo(Object loginId, SaFunction function) { + stpLogic.switchTo(loginId, function); + } + + + // ------------------- 二级认证 ------------------- + + /** + * 在当前会话 开启二级认证 + * + * @param safeTime 维持时间 (单位: 秒) + */ + public static void openSafe(long safeTime) { + stpLogic.openSafe(safeTime); + } + + /** + * 在当前会话 开启二级认证 + * + * @param service 业务标识 + * @param safeTime 维持时间 (单位: 秒) + */ + public static void openSafe(String service, long safeTime) { + stpLogic.openSafe(service, safeTime); + } + + /** + * 判断:当前会话是否处于二级认证时间内 + * + * @return true=二级认证已通过, false=尚未进行二级认证或认证已超时 + */ + public static boolean isSafe() { + return stpLogic.isSafe(); + } + + /** + * 判断:当前会话 是否处于指定业务的二级认证时间内 + * + * @param service 业务标识 + * @return true=二级认证已通过, false=尚未进行二级认证或认证已超时 + */ + public static boolean isSafe(String service) { + return stpLogic.isSafe(service); + } + + /** + * 判断:指定 token 是否处于二级认证时间内 + * + * @param tokenValue Token 值 + * @param service 业务标识 + * @return true=二级认证已通过, false=尚未进行二级认证或认证已超时 + */ + public static boolean isSafe(String tokenValue, String service) { + return stpLogic.isSafe(tokenValue, service); + } + + /** + * 校验:当前会话是否已通过二级认证,如未通过则抛出异常 + */ + public static void checkSafe() { + stpLogic.checkSafe(); + } + + /** + * 校验:检查当前会话是否已通过指定业务的二级认证,如未通过则抛出异常 + * + * @param service 业务标识 + */ + public static void checkSafe(String service) { + stpLogic.checkSafe(service); + } + + /** + * 获取:当前会话的二级认证剩余有效时间(单位: 秒, 返回-2代表尚未通过二级认证) + * + * @return 剩余有效时间 + */ + public static long getSafeTime() { + return stpLogic.getSafeTime(); + } + + /** + * 获取:当前会话的二级认证剩余有效时间(单位: 秒, 返回-2代表尚未通过二级认证) + * + * @param service 业务标识 + * @return 剩余有效时间 + */ + public static long getSafeTime(String service) { + return stpLogic.getSafeTime(service); + } + + /** + * 在当前会话 结束二级认证 + */ + public static void closeSafe() { + stpLogic.closeSafe(); + } + + /** + * 在当前会话 结束指定业务标识的二级认证 + * + * @param service 业务标识 + */ + public static void closeSafe(String service) { + stpLogic.closeSafe(service); + } + +} diff --git a/src/main/java/com/metalloop/framework/satoken/self/config/SaTokenSelfConfiguration.java b/src/main/java/com/metalloop/framework/satoken/self/config/SaTokenSelfConfiguration.java new file mode 100644 index 0000000..9799a9d --- /dev/null +++ b/src/main/java/com/metalloop/framework/satoken/self/config/SaTokenSelfConfiguration.java @@ -0,0 +1,34 @@ +package com.metalloop.framework.satoken.self.config; + +import cn.dev33.satoken.config.SaTokenConfig; +import com.metalloop.framework.satoken.self.StpSelfUtil; +import jakarta.annotation.PostConstruct; +import org.springframework.beans.BeanUtils; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.annotation.Configuration; + + +/** + * 自助服务终端 Sa-Token 配置类,目标是提供一个支持配置的开箱即用的StpSelfUtil + * + * @author zhaowenhao + * @since 2023-11-17 + */ +@Configuration +@EnableConfigurationProperties(SaTokenSelfProperties.class) +public class SaTokenSelfConfiguration { + private final SaTokenSelfProperties saTokenSelfProperties; + + public SaTokenSelfConfiguration(SaTokenSelfProperties saTokenSelfProperties) { + this.saTokenSelfProperties = saTokenSelfProperties; + } + + // 使用注入的 SaTokenSelfProperties 来配置 StpUtil 或其他组件 + @PostConstruct + public void init() { + SaTokenConfig config = new SaTokenConfig(); + // 拷贝属性 + BeanUtils.copyProperties(saTokenSelfProperties, config); + StpSelfUtil.getStpLogic().setConfig(config); + } +} diff --git a/src/main/java/com/metalloop/framework/satoken/self/config/SaTokenSelfProperties.java b/src/main/java/com/metalloop/framework/satoken/self/config/SaTokenSelfProperties.java new file mode 100644 index 0000000..21eb326 --- /dev/null +++ b/src/main/java/com/metalloop/framework/satoken/self/config/SaTokenSelfProperties.java @@ -0,0 +1,561 @@ +package com.metalloop.framework.satoken.self.config; + +import cn.dev33.satoken.config.SaCookieConfig; +import cn.dev33.satoken.config.SaSignConfig; +import cn.dev33.satoken.util.SaFoxUtil; +import lombok.Getter; +import org.springframework.boot.context.properties.ConfigurationProperties; + +import java.io.Serializable; + +/** + * 复制自 Sa-Token cn.dev33.satoken.config.SaTokenConfig,升级版本时需要注意重新复制,目的是为了使用两套配置, + * 但是又不能影响原框架的注入问题 + * + * @author zhaowenhao + * @since 2023-11-20 + */ +@Getter +@ConfigurationProperties(prefix = "sa-token.self") +public class SaTokenSelfProperties implements Serializable { + + private static final long serialVersionUID = -6541180061782004705L; + + /** + * token 名称 (同时也是: cookie 名称、提交 token 时参数的名称、存储 token 时的 key 前缀) + * -- GETTER -- + *

+ * token 名称 (同时也是: cookie 名称、提交 token 时参数的名称、存储 token 时的 key 前缀) + */ + private String tokenName = "satoken"; + + /** + * token 有效期(单位:秒) 默认30天,-1 代表永久有效 + * -- GETTER -- + *

+ * token 有效期(单位:秒) 默认30天,-1 代表永久有效 + */ + private long timeout = 60 * 60 * 24 * 30; + + /** + * token 最低活跃频率(单位:秒),如果 token 超过此时间没有访问系统就会被冻结,默认-1 代表不限制,永不冻结 + * (例如可以设置为 1800 代表 30 分钟内无操作就冻结) + * -- GETTER -- + *

+ * token 最低活跃频率(单位:秒),如果 token 超过此时间没有访问系统就会被冻结,默认-1 代表不限制,永不冻结 + * (例如可以设置为 1800 代表 30 分钟内无操作就冻结) + */ + private long activeTimeout = -1; + + /** + * 是否启用动态 activeTimeout 功能,如不需要请设置为 false,节省缓存请求次数 + * -- GETTER -- + *

+ * 是否启用动态 activeTimeout 功能,如不需要请设置为 false,节省缓存请求次数 + */ + private Boolean dynamicActiveTimeout = false; + + /** + * 是否允许同一账号多地同时登录 (为 true 时允许一起登录, 为 false 时新登录挤掉旧登录) + * -- GETTER -- + *

+ * 是否允许同一账号多地同时登录 (为 true 时允许一起登录, 为 false 时新登录挤掉旧登录) + */ + private Boolean isConcurrent = true; + + /** + * 在多人登录同一账号时,是否共用一个 token (为 true 时所有登录共用一个 token, 为 false 时每次登录新建一个 token) + * -- GETTER -- + *

+ * 在多人登录同一账号时,是否共用一个 token (为 true 时所有登录共用一个token, 为 false 时每次登录新建一个 token) + */ + private Boolean isShare = true; + + /** + * 同一账号最大登录数量,-1代表不限 (只有在 isConcurrent=true, isShare=false 时此配置项才有意义) + * -- GETTER -- + *

+ * 同一账号最大登录数量,-1代表不限 (只有在 isConcurrent=true, isShare=false 时此配置项才有意义) + */ + private int maxLoginCount = 12; + + /** + * 在每次创建 token 时的最高循环次数,用于保证 token 唯一性(-1=不循环尝试,直接使用) + * -- GETTER -- + *

+ * 在每次创建 token 时的最高循环次数,用于保证 token 唯一性(-1=不循环尝试,直接使用) + */ + private int maxTryTimes = 12; + + /** + * 是否尝试从请求体里读取 token + * -- GETTER -- + *

+ * 是否尝试从请求体里读取 token + */ + private Boolean isReadBody = true; + + /** + * 是否尝试从 header 里读取 token + * -- GETTER -- + *

+ * 是否尝试从 header 里读取 token + */ + private Boolean isReadHeader = true; + + /** + * 是否尝试从 cookie 里读取 token + * -- GETTER -- + *

+ * 是否尝试从 cookie 里读取 token + */ + private Boolean isReadCookie = true; + + /** + * 是否在登录后将 token 写入到响应头 + * -- GETTER -- + *

+ * 是否在登录后将 token 写入到响应头 + */ + private Boolean isWriteHeader = false; + + /** + * token 风格(默认可取值:uuid、simple-uuid、random-32、random-64、random-128、tik) + * -- GETTER -- + *

+ * token 风格(默认可取值:uuid、simple-uuid、random-32、random-64、random-128、tik) + */ + private String tokenStyle = "uuid"; + + /** + * 默认 SaTokenDao 实现类中,每次清理过期数据间隔的时间(单位: 秒),默认值30秒,设置为 -1 代表不启动定时清理 + * -- GETTER -- + *

+ * 默认 SaTokenDao 实现类中,每次清理过期数据间隔的时间(单位: 秒),默认值30秒,设置为 -1 代表不启动定时清理 + */ + private int dataRefreshPeriod = 30; + + /** + * 获取 Token-Session 时是否必须登录(如果配置为true,会在每次获取 getTokenSession() 时校验当前是否登录) + * -- GETTER -- + *

+ * 获取 Token-Session 时是否必须登录(如果配置为true,会在每次获取 getTokenSession() 时校验当前是否登录) + */ + private Boolean tokenSessionCheckLogin = true; + + /** + * 是否打开自动续签 activeTimeout (如果此值为 true, 框架会在每次直接或间接调用 getLoginId() 时进行一次过期检查与续签操作) + * -- GETTER -- + *

+ * 是否打开自动续签 activeTimeout (如果此值为 true, 框架会在每次直接或间接调用 getLoginId() 时进行一次过期检查与续签操作) + */ + private Boolean autoRenew = true; + + /** + * token 前缀, 前端提交 token 时应该填写的固定前缀,格式样例(satoken: Bearer xxxx-xxxx-xxxx-xxxx) + * -- GETTER -- + *

+ * token 前缀, 前端提交 token 时应该填写的固定前缀,格式样例(satoken: Bearer xxxx-xxxx-xxxx-xxxx) + */ + private String tokenPrefix; + + /** + * 是否在初始化配置时在控制台打印版本字符画 + * -- GETTER -- + *

+ * 是否在初始化配置时在控制台打印版本字符画 + */ + private Boolean isPrint = true; + + /** + * 是否打印操作日志 + * -- GETTER -- + *

+ * 是否打印操作日志 + */ + private Boolean isLog = false; + + /** + * 日志等级(trace、debug、info、warn、error、fatal),此值与 logLevelInt 联动 + * -- GETTER -- + *

+ * 日志等级(trace、debug、info、warn、error、fatal),此值与 logLevelInt 联动 + */ + private String logLevel = "trace"; + + /** + * 日志等级 int 值(1=trace、2=debug、3=info、4=warn、5=error、6=fatal),此值与 logLevel 联动 + * -- GETTER -- + *

+ * 日志等级 int 值(1=trace、2=debug、3=info、4=warn、5=error、6=fatal),此值与 logLevel 联动 + */ + private int logLevelInt = 1; + + /** + * 是否打印彩色日志 + * -- GETTER -- + * 获取:是否打印彩色日志 + *

+ * isColorLog 是否打印彩色日志 + */ + private Boolean isColorLog = null; + + /** + * jwt秘钥(只有集成 jwt 相关模块时此参数才会生效) + * -- GETTER -- + *

+ * jwt秘钥(只有集成 jwt 相关模块时此参数才会生效) + */ + private String jwtSecretKey; + + /** + * Http Basic 认证的默认账号和密码 + * -- GETTER -- + *

+ * Http Basic 认证的默认账号和密码 + */ + private String basic = ""; + + /** + * 配置当前项目的网络访问地址 + * -- GETTER -- + *

+ * 配置当前项目的网络访问地址 + */ + private String currDomain; + + /** + * Same-Token 的有效期 (单位: 秒) + * -- GETTER -- + *

+ * Same-Token 的有效期 (单位: 秒) + */ + private long sameTokenTimeout = 60 * 60 * 24; + + /** + * 是否校验 Same-Token(部分rpc插件有效) + * -- GETTER -- + *

+ * 是否校验Same-Token(部分rpc插件有效) + */ + private Boolean checkSameToken = false; + + /** + * Cookie配置对象 + * -- GETTER -- + *

+ * Cookie 全局配置对象 + */ + public SaCookieConfig cookie = new SaCookieConfig(); + + /** + * API 签名配置对象 + * -- GETTER -- + *

+ * API 签名全局配置对象 + */ + public SaSignConfig sign = new SaSignConfig(); + + + /** + * @param tokenName token 名称 (同时也是: cookie 名称、提交 token 时参数的名称、存储 token 时的 key 前缀) + * 对象自身 + */ + public SaTokenSelfProperties setTokenName(String tokenName) { + this.tokenName = tokenName; + return this; + } + + /** + * @param timeout token 有效期(单位:秒) 默认30天,-1 代表永久有效 + * 对象自身 + */ + public SaTokenSelfProperties setTimeout(long timeout) { + this.timeout = timeout; + return this; + } + + /** + * @param activeTimeout token 最低活跃频率(单位:秒),如果 token 超过此时间没有访问系统就会被冻结,默认-1 代表不限制,永不冻结 + * (例如可以设置为 1800 代表 30 分钟内无操作就冻结) + * 对象自身 + */ + public SaTokenSelfProperties setActiveTimeout(long activeTimeout) { + this.activeTimeout = activeTimeout; + return this; + } + + /** + * @param dynamicActiveTimeout 是否启用动态 activeTimeout 功能,如不需要请设置为 false,节省缓存请求次数 + * 对象自身 + */ + public SaTokenSelfProperties setDynamicActiveTimeout(Boolean dynamicActiveTimeout) { + this.dynamicActiveTimeout = dynamicActiveTimeout; + return this; + } + + /** + * @param isConcurrent 是否允许同一账号多地同时登录 (为 true 时允许一起登录, 为 false 时新登录挤掉旧登录) + * 对象自身 + */ + public SaTokenSelfProperties setIsConcurrent(Boolean isConcurrent) { + this.isConcurrent = isConcurrent; + return this; + } + + /** + * @param isShare 在多人登录同一账号时,是否共用一个 token (为 true 时所有登录共用一个token, 为 false 时每次登录新建一个 token) + * 对象自身 + */ + public SaTokenSelfProperties setIsShare(Boolean isShare) { + this.isShare = isShare; + return this; + } + + /** + * @param maxLoginCount 同一账号最大登录数量,-1代表不限 (只有在 isConcurrent=true, isShare=false 时此配置项才有意义) + * 对象自身 + */ + public SaTokenSelfProperties setMaxLoginCount(int maxLoginCount) { + this.maxLoginCount = maxLoginCount; + return this; + } + + /** + * @param maxTryTimes 在每次创建 token 时的最高循环次数,用于保证 token 唯一性(-1=不循环尝试,直接使用) + * 对象自身 + */ + public SaTokenSelfProperties setMaxTryTimes(int maxTryTimes) { + this.maxTryTimes = maxTryTimes; + return this; + } + + /** + * @param isReadBody 是否尝试从请求体里读取 token + * 对象自身 + */ + public SaTokenSelfProperties setIsReadBody(Boolean isReadBody) { + this.isReadBody = isReadBody; + return this; + } + + /** + * @param isReadHeader 是否尝试从 header 里读取 token + * 对象自身 + */ + public SaTokenSelfProperties setIsReadHeader(Boolean isReadHeader) { + this.isReadHeader = isReadHeader; + return this; + } + + /** + * @param isReadCookie 是否尝试从 cookie 里读取 token + * 对象自身 + */ + public SaTokenSelfProperties setIsReadCookie(Boolean isReadCookie) { + this.isReadCookie = isReadCookie; + return this; + } + + /** + * @param isWriteHeader 是否在登录后将 token 写入到响应头 + * 对象自身 + */ + public SaTokenSelfProperties setIsWriteHeader(Boolean isWriteHeader) { + this.isWriteHeader = isWriteHeader; + return this; + } + + /** + * @param tokenStyle token 风格(默认可取值:uuid、simple-uuid、random-32、random-64、random-128、tik) + * 对象自身 + */ + public SaTokenSelfProperties setTokenStyle(String tokenStyle) { + this.tokenStyle = tokenStyle; + return this; + } + + /** + * @param dataRefreshPeriod 默认 SaTokenDao 实现类中,每次清理过期数据间隔的时间(单位: 秒),默认值30秒,设置为 -1 代表不启动定时清理 + * 对象自身 + */ + public SaTokenSelfProperties setDataRefreshPeriod(int dataRefreshPeriod) { + this.dataRefreshPeriod = dataRefreshPeriod; + return this; + } + + /** + * @param tokenSessionCheckLogin 获取 Token-Session 时是否必须登录(如果配置为true,会在每次获取 getTokenSession() 时校验当前是否登录) + * 对象自身 + */ + public SaTokenSelfProperties setTokenSessionCheckLogin(Boolean tokenSessionCheckLogin) { + this.tokenSessionCheckLogin = tokenSessionCheckLogin; + return this; + } + + /** + * @param autoRenew 是否打开自动续签 activeTimeout (如果此值为 true, 框架会在每次直接或间接调用 getLoginId() 时进行一次过期检查与续签操作) + * 对象自身 + */ + public SaTokenSelfProperties setAutoRenew(Boolean autoRenew) { + this.autoRenew = autoRenew; + return this; + } + + /** + * @param tokenPrefix token 前缀, 前端提交 token 时应该填写的固定前缀,格式样例(satoken: Bearer xxxx-xxxx-xxxx-xxxx) + * 对象自身 + */ + public SaTokenSelfProperties setTokenPrefix(String tokenPrefix) { + this.tokenPrefix = tokenPrefix; + return this; + } + + /** + * @param isPrint 是否在初始化配置时在控制台打印版本字符画 + * 对象自身 + */ + public SaTokenSelfProperties setIsPrint(Boolean isPrint) { + this.isPrint = isPrint; + return this; + } + + /** + * @param isLog 是否打印操作日志 + * 对象自身 + */ + public SaTokenSelfProperties setIsLog(Boolean isLog) { + this.isLog = isLog; + return this; + } + + /** + * @param logLevel 日志等级(trace、debug、info、warn、error、fatal),此值与 logLevelInt 联动 + * 对象自身 + */ + public SaTokenSelfProperties setLogLevel(String logLevel) { + this.logLevel = logLevel; + this.logLevelInt = SaFoxUtil.translateLogLevelToInt(logLevel); + return this; + } + + /** + * @param logLevelInt 日志等级 int 值(1=trace、2=debug、3=info、4=warn、5=error、6=fatal),此值与 logLevel 联动 + * 对象自身 + */ + public SaTokenSelfProperties setLogLevelInt(int logLevelInt) { + this.logLevelInt = logLevelInt; + this.logLevel = SaFoxUtil.translateLogLevelToString(logLevelInt); + return this; + } + + /** + * 设置:是否打印彩色日志 + * + * @param isColorLog 是否打印彩色日志 + * 对象自身 + */ + public SaTokenSelfProperties setIsColorLog(Boolean isColorLog) { + this.isColorLog = isColorLog; + return this; + } + + /** + * @param jwtSecretKey jwt秘钥(只有集成 jwt 相关模块时此参数才会生效) + * 对象自身 + */ + public SaTokenSelfProperties setJwtSecretKey(String jwtSecretKey) { + this.jwtSecretKey = jwtSecretKey; + return this; + } + + /** + * @param basic Http Basic 认证的默认账号和密码 + * 对象自身 + */ + public SaTokenSelfProperties setBasic(String basic) { + this.basic = basic; + return this; + } + + /** + * @param currDomain 配置当前项目的网络访问地址 + * 对象自身 + */ + public SaTokenSelfProperties setCurrDomain(String currDomain) { + this.currDomain = currDomain; + return this; + } + + /** + * @param sameTokenTimeout Same-Token 的有效期 (单位: 秒) + * 对象自身 + */ + public SaTokenSelfProperties setSameTokenTimeout(long sameTokenTimeout) { + this.sameTokenTimeout = sameTokenTimeout; + return this; + } + + /** + * @param checkSameToken 是否校验Same-Token(部分rpc插件有效) + * 对象自身 + */ + public SaTokenSelfProperties setCheckSameToken(Boolean checkSameToken) { + this.checkSameToken = checkSameToken; + return this; + } + + /** + * @param cookie Cookie 全局配置对象 + * 对象自身 + */ + public SaTokenSelfProperties setCookie(SaCookieConfig cookie) { + this.cookie = cookie; + return this; + } + + /** + * @param sign API 签名全局配置对象 + * 对象自身 + */ + public SaTokenSelfProperties setSign(SaSignConfig sign) { + this.sign = sign; + return this; + } + + @Override + public String toString() { + return "SaTokenConfig [" + + "tokenName=" + tokenName + + ", timeout=" + timeout + + ", activeTimeout=" + activeTimeout + + ", dynamicActiveTimeout=" + dynamicActiveTimeout + + ", isConcurrent=" + isConcurrent + + ", isShare=" + isShare + + ", maxLoginCount=" + maxLoginCount + + ", maxTryTimes=" + maxTryTimes + + ", isReadBody=" + isReadBody + + ", isReadHeader=" + isReadHeader + + ", isReadCookie=" + isReadCookie + + ", isWriteHeader=" + isWriteHeader + + ", tokenStyle=" + tokenStyle + + ", dataRefreshPeriod=" + dataRefreshPeriod + + ", tokenSessionCheckLogin=" + tokenSessionCheckLogin + + ", autoRenew=" + autoRenew + + ", tokenPrefix=" + tokenPrefix + + ", isPrint=" + isPrint + + ", isLog=" + isLog + + ", logLevel=" + logLevel + + ", logLevelInt=" + logLevelInt + + ", isColorLog=" + isColorLog + + ", jwtSecretKey=" + jwtSecretKey + + ", basic=" + basic + + ", currDomain=" + currDomain + + ", sameTokenTimeout=" + sameTokenTimeout + + ", checkSameToken=" + checkSameToken + + ", cookie=" + cookie + + ", sign=" + sign + + "]"; + } + +} diff --git a/src/main/java/com/metalloop/framework/swagger/OpenApiConfig.java b/src/main/java/com/metalloop/framework/swagger/OpenApiConfig.java new file mode 100644 index 0000000..1cfea89 --- /dev/null +++ b/src/main/java/com/metalloop/framework/swagger/OpenApiConfig.java @@ -0,0 +1,40 @@ +package com.metalloop.framework.swagger; + +import io.swagger.v3.oas.models.Components; +import io.swagger.v3.oas.models.OpenAPI; +import io.swagger.v3.oas.models.info.Info; +import io.swagger.v3.oas.models.security.SecurityRequirement; +import io.swagger.v3.oas.models.security.SecurityScheme; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * Springdoc OpenAPI 配置类 + * 用于定制 API 文档信息及全局安全认证方案 + */ +@Configuration +public class OpenApiConfig { + + @Bean + public OpenAPI customOpenAPI() { + return new OpenAPI() + // 设置 API 基本信息 + .info(new Info() + .title("有色再生资源交易平台 API") + .version("1.0") + .description("METALLOOP 后端接口文档") + ) + // 声明全局安全要求(在 Swagger UI 中显示 Authorize 按钮) + .addSecurityItem(new SecurityRequirement().addList("Sa-Token")) + // 定义安全方案(API Key 方式) + .components(new Components() + .addSecuritySchemes("Sa-Token", + new SecurityScheme() + .type(SecurityScheme.Type.APIKEY) + .in(SecurityScheme.In.HEADER) + .name("metalloop-token") // 与 Sa-Token 配置的 token-name 保持一致 + .description("Sa-Token 认证令牌,登录后获取") + ) + ); + } +} \ No newline at end of file diff --git a/src/main/java/com/metalloop/modules/auth/controller/AuthController.java b/src/main/java/com/metalloop/modules/auth/controller/AuthController.java new file mode 100644 index 0000000..3478570 --- /dev/null +++ b/src/main/java/com/metalloop/modules/auth/controller/AuthController.java @@ -0,0 +1,285 @@ +package com.metalloop.modules.auth.controller; + +import cn.dev33.satoken.session.SaSession; +import com.metalloop.common.auth.Authentication; +import com.metalloop.common.auth.handler.LoginSuccessHandler; +import com.metalloop.common.auth.handler.LogoutSuccessHandler; +import com.metalloop.common.auth.handler.PasswordCheckFailureHandler; +import com.metalloop.common.auth.handler.VerifyCodeHandler; +import com.metalloop.common.auth.model.AuthenticationMiniAppRequest; +import com.metalloop.common.auth.password.PasswordDecryptor; +import com.metalloop.common.auth.sso.SsoCodeService; +import com.metalloop.common.auth.sso.model.SsoUserInfo; +import com.metalloop.common.auth.userdetails.UserDetails; +import com.metalloop.common.auth.userdetails.UserDetailsService; +import com.metalloop.common.constant.SecurityConstants; +import com.metalloop.common.enums.LoginType; +import com.metalloop.common.exception.*; +import com.metalloop.common.model.Result; +import com.metalloop.common.utils.IPHelper; +import com.metalloop.modules.auth.model.req.AuthenticationRequest; +import jakarta.servlet.http.HttpServletRequest; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; + + + +/** + * 认证授权端点 + * + * @author zhaowenhao + * @since 2023-03-19 + */ +public class AuthController { + + private final Log logger = LogFactory.getLog(getClass()); + + private final LoginType loginType; + + private final UserDetailsService userDetailsService; + + private final LoginSuccessHandler loginSuccessHandler; + private final LogoutSuccessHandler logoutSuccessHandler; + + private final PasswordDecryptor passwordDecryptor; + + private final PasswordEncoder passwordEncoder; + + private final VerifyCodeHandler verifyCodeHandler; + + private final PasswordCheckFailureHandler passwordCheckFailureHandler; + + /** + * 单点登陆授权码服务 + */ + private SsoCodeService ssoCodeService; + + /** + * 单点登陆授权码超时时间,单位:秒 + */ + private int ssoCodeTimeOut = 300; + + public void initSso(SsoCodeService ssoCodeService, int ssoCodeTimeOut) { + this.ssoCodeService = ssoCodeService; + this.ssoCodeTimeOut = ssoCodeTimeOut; + } + + public AuthController(LoginType loginType, UserDetailsService userDetailsService, LoginSuccessHandler loginSuccessHandler, + LogoutSuccessHandler logoutSuccessHandler, PasswordDecryptor passwordDecryptor, PasswordEncoder passwordEncoder + , VerifyCodeHandler verifyCodeHandler, PasswordCheckFailureHandler passwordCheckFailureHandler) { + this.loginType = loginType; + this.userDetailsService = userDetailsService; + this.loginSuccessHandler = loginSuccessHandler; + this.logoutSuccessHandler = logoutSuccessHandler; + this.passwordDecryptor = passwordDecryptor; + this.passwordEncoder = passwordEncoder; + this.verifyCodeHandler = verifyCodeHandler; + this.passwordCheckFailureHandler = passwordCheckFailureHandler; + } + + @ResponseBody + public Object getVerifyCode(@RequestBody @Validated AuthenticationRequest request, HttpServletRequest httpServletRequest) { + // 用户名、密码校验 + UserDetails userDetails = loginVerify(request, httpServletRequest); + if (verifyCodeHandler.createVerifyCode(userDetails.getPhoneNum())) { + return Result.ok("发送验证码成功"); + } else { + return Result.fail("发送验证码失败"); + } + } + + + @ResponseBody + public Object login(@RequestBody @Validated AuthenticationRequest request, HttpServletRequest httpServletRequest) { + + // 用户名、密码校验 + UserDetails userDetails = loginVerify(request, httpServletRequest); + + // 在sa-token中进行登录操作 + loginType.getStpLogic().login(userDetails.getUserId()); + String accessToken = loginType.getStpLogic().getTokenValue(); + SaSession session = loginType.getStpLogic().getSession(); + + // 将登录成功的认证信息封装至session中 + Authentication authentication = Authentication.withUserDetails(userDetails).accessToken(accessToken).build(); + session.set(SecurityConstants.SESSION_KEY_AUTHENTICATION, authentication); + + // 登录成功响应结果处理器 + return loginSuccessHandler.onSuccess(authentication); + } + + + /** + * 用户名、密码校验 + */ + private UserDetails loginVerify(AuthenticationRequest request, HttpServletRequest servletRequest) { + String username = request.getUsername(); + String password = request.getPassword(); + + // 获取用户ip + String ip = IPHelper.getIpAddr(servletRequest); + + // 从 UserDetailsService 加载用户并验证用户名和密码 + UserDetails userDetails; + try { + userDetails = userDetailsService.loadUserByUsername(username); + } catch (UsernameNotFoundException ex) { + this.logger.debug("未找到用户: '" + username + "'"); + throw new BadCredentialsException("用户名或密码错误"); + } + if (userDetails == null) { + this.logger.debug("未找到用户: '" + username + "'"); + throw new BadCredentialsException("用户名或密码错误"); + } + + // 验证用户账号状态 + if (!userDetails.isAccountNonLocked()) { + this.logger.debug("账号被锁定"); + passwordCheckFailureHandler.checkAccountLockStatus(ip, userDetails); + } + if (!userDetails.isEnabled()) { + this.logger.debug("账号被禁用"); + throw new DisabledException("账号被禁用"); + } + if (!userDetails.isAccountNonExpired()) { + this.logger.debug("账号已过期"); + throw new AccountExpiredException("账号已过期"); + } + if (!userDetails.isCredentialsNonExpired()) { + this.logger.debug("密码已过期"); + throw new CredentialsExpiredException("密码已过期"); + } + + // 验证密码 + String presentedPassword = password; + + // 密码解密 + if (passwordDecryptor != null) { + presentedPassword = passwordDecryptor.decrypt(presentedPassword); + } + + // 密码匹配 + if (!passwordEncoder.matches(presentedPassword, userDetails.getPassword())) { + logger.debug("密码错误"); + throw new BadCredentialsException("用户名或密码错误"); + } + + return userDetails; + } + + /** + * 用户名、密码校验 + */ + private UserDetails loginVerifyForMiniApp(AuthenticationMiniAppRequest request, HttpServletRequest servletRequest) { + String username = request.getUsername(); + String password = request.getPassword(); + + // 获取用户ip + String ip = IPHelper.getIpAddr(servletRequest); + + // 从 UserDetailsService 加载用户并验证用户名和密码 + UserDetails userDetails; + try { + userDetails = userDetailsService.loadUserByUsername(username); + } catch (UsernameNotFoundException ex) { + this.logger.debug("未找到用户: '" + username + "'"); + throw new BadCredentialsException("用户名或密码错误"); + } + if (userDetails == null) { + this.logger.debug("未找到用户: '" + username + "'"); + throw new BadCredentialsException("用户名或密码错误"); + } + + // 验证用户账号状态 + if (!userDetails.isAccountNonLocked()) { + this.logger.debug("账号被锁定"); + passwordCheckFailureHandler.checkAccountLockStatus(ip, userDetails); + } + if (!userDetails.isEnabled()) { + this.logger.debug("账号被禁用"); + throw new DisabledException("账号被禁用"); + } + if (!userDetails.isAccountNonExpired()) { + this.logger.debug("账号已过期"); + throw new AccountExpiredException("账号已过期"); + } + if (!userDetails.isCredentialsNonExpired()) { + this.logger.debug("密码已过期"); + throw new CredentialsExpiredException("密码已过期"); + } + + // 验证密码 + String presentedPassword = password; + + // 密码解密 + if (passwordDecryptor != null) { + presentedPassword = passwordDecryptor.decrypt(presentedPassword); + } + + // 密码匹配 + if (!passwordEncoder.matches(presentedPassword, userDetails.getPassword())) { + logger.debug("密码错误"); + throw new BadCredentialsException("用户名或密码错误"); + } + + return userDetails; + } + + @ResponseBody + public Object logout() { + Object o = loginType.getStpLogic().getSession().get(SecurityConstants.SESSION_KEY_AUTHENTICATION); + Authentication authentication = null; + if (o instanceof Authentication) { + authentication = (Authentication) o; + } + loginType.getStpLogic().logout(); + // 登出成功响应结果处理器 + return logoutSuccessHandler.onSuccess(authentication); + } + + @ResponseBody + public Object miniAppLogout() { + Object o = loginType.getStpLogic().getSession().get(SecurityConstants.SESSION_KEY_AUTHENTICATION); + Authentication authentication = null; + if (o instanceof Authentication) { + authentication = (Authentication) o; + } + loginType.getStpLogic().logout(); + // 登出成功响应结果处理器 + return logoutSuccessHandler.onSuccess(authentication); + } + + @ResponseBody + public Object getSsoCode() { + // 验证当前会话是否有效 + if (loginType.getStpLogic().isLogin()) { + Object o = loginType.getStpLogic().getSession().get(SecurityConstants.SESSION_KEY_AUTHENTICATION); + Authentication authentication = null; + if (o instanceof Authentication) { + authentication = (Authentication) o; + } + if (authentication != null) { + // 签发授权码 + String authorizationCode = ssoCodeService.generateCode(authentication.getUserId(), ssoCodeTimeOut); + return Result.ok(authorizationCode); + } + } + return Result.fail("当前会话无效"); + + } + + @ResponseBody + public Object getSsoUserInfo(@RequestParam("code") String code) { + // 验证授权码并获取绑定的用户信息 + SsoUserInfo userInfo = ssoCodeService.validateCode(code); + + // 登录成功响应结果处理器 + return Result.ok(userInfo); + } + +} \ No newline at end of file diff --git a/src/main/java/com/metalloop/modules/auth/controller/RsaPublicKeyController.java b/src/main/java/com/metalloop/modules/auth/controller/RsaPublicKeyController.java new file mode 100644 index 0000000..9f5939d --- /dev/null +++ b/src/main/java/com/metalloop/modules/auth/controller/RsaPublicKeyController.java @@ -0,0 +1,37 @@ +package com.metalloop.modules.auth.controller; + +import com.metalloop.common.auth.encrypt.KeyProperties; +import com.metalloop.common.auth.encrypt.KeyStoreKeyFactory; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.security.KeyPair; +import java.security.PublicKey; +import java.security.interfaces.RSAPublicKey; +import java.util.Base64; + +/** + * 获取公钥端点 + * + * @author zhaowenhao + * @since 2023-03-19 + */ +public class RsaPublicKeyController { + + private final KeyProperties keyProperties; + + public RsaPublicKeyController(KeyProperties keyProperties) { + this.keyProperties = keyProperties; + } + + @ResponseBody + public String getPublicKey() { + if (keyProperties != null) { + KeyPair keyPair = new KeyStoreKeyFactory(keyProperties.getKeyStore().getLocation(), keyProperties.getKeyStore().getSecret().toCharArray()).getKeyPair(keyProperties.getKeyStore().getAlias()); + PublicKey publicKey = keyPair.getPublic(); + RSAPublicKey rsaPublicKey = (RSAPublicKey) publicKey; + byte[] publicKeyBytes = rsaPublicKey.getEncoded(); + return Base64.getEncoder().encodeToString(publicKeyBytes); + } + return "获取失败"; + } +} diff --git a/src/main/java/com/metalloop/modules/auth/converter/SysEnterpriseConverter.java b/src/main/java/com/metalloop/modules/auth/converter/SysEnterpriseConverter.java new file mode 100644 index 0000000..18bd5cc --- /dev/null +++ b/src/main/java/com/metalloop/modules/auth/converter/SysEnterpriseConverter.java @@ -0,0 +1,65 @@ +package com.metalloop.modules.auth.converter; + +import com.metalloop.modules.auth.model.req.SysEnterpriseQueryReqDto; +import com.metalloop.modules.auth.model.req.SysEnterpriseReqDto; +import com.metalloop.modules.auth.model.resp.SysEnterpriseRespDto; +import com.metalloop.modules.auth.model.po.SysEnterprise; +import com.metalloop.modules.auth.model.query.SysEnterpriseQuery; +import org.mapstruct.Builder; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +import java.util.List; + +/** + * 企业信息主转换器 + * + * @author yy + * @since 2026-09-10 + */ +@SuppressWarnings("UnmappedTargetProperties") +@Mapper(builder = @Builder(disableBuilder = true)) +public interface SysEnterpriseConverter { + + SysEnterpriseConverter INSTANCE = Mappers.getMapper(SysEnterpriseConverter.class); + + /** + * 实体转换为响应 DTO + * + * @param sysEnterprise 实体 + * @return 转换后的数据 + */ + SysEnterpriseRespDto toRespDto(SysEnterprise sysEnterprise); + + /** + * 实体列表转换为响应 DTO 列表 + * + * @param sysEnterprises 实体列表 + * @return 转换后的数据 + */ + List toRespDto(List sysEnterprises); + + /** + * 请求 DTO 转换为实体 + * + * @param sysEnterpriseReqDto 请求 DTO + * @return 转换后的数据 + */ + SysEnterprise fromReqDto(SysEnterpriseReqDto sysEnterpriseReqDto); + + /** + * 请求 DTO 列表转换为实体列表 + * + * @param sysEnterpriseReqDtos 请求 DTO 列表 + * @return 转换后的数据 + */ + List fromReqDto(List sysEnterpriseReqDtos); + + /** + * 查询请求 DTO 转换为查询对象 + * + * @param sysEnterpriseQueryReqDto 查询请求DTO + * @return 转换后的数据 + */ + SysEnterpriseQuery fromQueryReqDtoToQuery(SysEnterpriseQueryReqDto sysEnterpriseQueryReqDto); +} diff --git a/src/main/java/com/metalloop/modules/auth/converter/SysEnterpriseImageConverter.java b/src/main/java/com/metalloop/modules/auth/converter/SysEnterpriseImageConverter.java new file mode 100644 index 0000000..7b747ad --- /dev/null +++ b/src/main/java/com/metalloop/modules/auth/converter/SysEnterpriseImageConverter.java @@ -0,0 +1,65 @@ +package com.metalloop.modules.auth.converter; + +import com.metalloop.modules.auth.model.req.SysEnterpriseImageQueryReqDto; +import com.metalloop.modules.auth.model.req.SysEnterpriseImageReqDto; +import com.metalloop.modules.auth.model.resp.SysEnterpriseImageRespDto; +import com.metalloop.modules.auth.model.po.SysEnterpriseImage; +import com.metalloop.modules.auth.model.query.SysEnterpriseImageQuery; +import org.mapstruct.Builder; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +import java.util.List; + +/** + * 企业图片附件转换器 + * + * @author yy + * @since 2026-09-10 + */ +@SuppressWarnings("UnmappedTargetProperties") +@Mapper(builder = @Builder(disableBuilder = true)) +public interface SysEnterpriseImageConverter { + + SysEnterpriseImageConverter INSTANCE = Mappers.getMapper(SysEnterpriseImageConverter.class); + + /** + * 实体转换为响应 DTO + * + * @param sysEnterpriseImage 实体 + * @return 转换后的数据 + */ + SysEnterpriseImageRespDto toRespDto(SysEnterpriseImage sysEnterpriseImage); + + /** + * 实体列表转换为响应 DTO 列表 + * + * @param sysEnterpriseImages 实体列表 + * @return 转换后的数据 + */ + List toRespDto(List sysEnterpriseImages); + + /** + * 请求 DTO 转换为实体 + * + * @param sysEnterpriseImageReqDto 请求 DTO + * @return 转换后的数据 + */ + SysEnterpriseImage fromReqDto(SysEnterpriseImageReqDto sysEnterpriseImageReqDto); + + /** + * 请求 DTO 列表转换为实体列表 + * + * @param sysEnterpriseImageReqDtos 请求 DTO 列表 + * @return 转换后的数据 + */ + List fromReqDto(List sysEnterpriseImageReqDtos); + + /** + * 查询请求 DTO 转换为查询对象 + * + * @param sysEnterpriseImageQueryReqDto 查询请求DTO + * @return 转换后的数据 + */ + SysEnterpriseImageQuery fromQueryReqDtoToQuery(SysEnterpriseImageQueryReqDto sysEnterpriseImageQueryReqDto); +} diff --git a/src/main/java/com/metalloop/modules/auth/converter/SysPermissionConverter.java b/src/main/java/com/metalloop/modules/auth/converter/SysPermissionConverter.java new file mode 100644 index 0000000..5dcc39f --- /dev/null +++ b/src/main/java/com/metalloop/modules/auth/converter/SysPermissionConverter.java @@ -0,0 +1,65 @@ +package com.metalloop.modules.auth.converter; + +import com.metalloop.modules.auth.model.req.SysPermissionQueryReqDto; +import com.metalloop.modules.auth.model.req.SysPermissionReqDto; +import com.metalloop.modules.auth.model.resp.SysPermissionRespDto; +import com.metalloop.modules.auth.model.po.SysPermission; +import com.metalloop.modules.auth.model.query.SysPermissionQuery; +import org.mapstruct.Builder; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +import java.util.List; + +/** + * 权限转换器 + * + * @author yy + * @since 2026-09-10 + */ +@SuppressWarnings("UnmappedTargetProperties") +@Mapper(builder = @Builder(disableBuilder = true)) +public interface SysPermissionConverter { + + SysPermissionConverter INSTANCE = Mappers.getMapper(SysPermissionConverter.class); + + /** + * 实体转换为响应 DTO + * + * @param sysPermission 实体 + * @return 转换后的数据 + */ + SysPermissionRespDto toRespDto(SysPermission sysPermission); + + /** + * 实体列表转换为响应 DTO 列表 + * + * @param sysPermissions 实体列表 + * @return 转换后的数据 + */ + List toRespDto(List sysPermissions); + + /** + * 请求 DTO 转换为实体 + * + * @param sysPermissionReqDto 请求 DTO + * @return 转换后的数据 + */ + SysPermission fromReqDto(SysPermissionReqDto sysPermissionReqDto); + + /** + * 请求 DTO 列表转换为实体列表 + * + * @param sysPermissionReqDtos 请求 DTO 列表 + * @return 转换后的数据 + */ + List fromReqDto(List sysPermissionReqDtos); + + /** + * 查询请求 DTO 转换为查询对象 + * + * @param sysPermissionQueryReqDto 查询请求DTO + * @return 转换后的数据 + */ + SysPermissionQuery fromQueryReqDtoToQuery(SysPermissionQueryReqDto sysPermissionQueryReqDto); +} diff --git a/src/main/java/com/metalloop/modules/auth/converter/SysRoleConverter.java b/src/main/java/com/metalloop/modules/auth/converter/SysRoleConverter.java new file mode 100644 index 0000000..77f9d5e --- /dev/null +++ b/src/main/java/com/metalloop/modules/auth/converter/SysRoleConverter.java @@ -0,0 +1,65 @@ +package com.metalloop.modules.auth.converter; + +import com.metalloop.modules.auth.model.req.SysRoleQueryReqDto; +import com.metalloop.modules.auth.model.req.SysRoleReqDto; +import com.metalloop.modules.auth.model.resp.SysRoleRespDto; +import com.metalloop.modules.auth.model.po.SysRole; +import com.metalloop.modules.auth.model.query.SysRoleQuery; +import org.mapstruct.Builder; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +import java.util.List; + +/** + * 角色转换器 + * + * @author yy + * @since 2026-09-10 + */ +@SuppressWarnings("UnmappedTargetProperties") +@Mapper(builder = @Builder(disableBuilder = true)) +public interface SysRoleConverter { + + SysRoleConverter INSTANCE = Mappers.getMapper(SysRoleConverter.class); + + /** + * 实体转换为响应 DTO + * + * @param sysRole 实体 + * @return 转换后的数据 + */ + SysRoleRespDto toRespDto(SysRole sysRole); + + /** + * 实体列表转换为响应 DTO 列表 + * + * @param sysRoles 实体列表 + * @return 转换后的数据 + */ + List toRespDto(List sysRoles); + + /** + * 请求 DTO 转换为实体 + * + * @param sysRoleReqDto 请求 DTO + * @return 转换后的数据 + */ + SysRole fromReqDto(SysRoleReqDto sysRoleReqDto); + + /** + * 请求 DTO 列表转换为实体列表 + * + * @param sysRoleReqDtos 请求 DTO 列表 + * @return 转换后的数据 + */ + List fromReqDto(List sysRoleReqDtos); + + /** + * 查询请求 DTO 转换为查询对象 + * + * @param sysRoleQueryReqDto 查询请求DTO + * @return 转换后的数据 + */ + SysRoleQuery fromQueryReqDtoToQuery(SysRoleQueryReqDto sysRoleQueryReqDto); +} diff --git a/src/main/java/com/metalloop/modules/auth/converter/SysRolePermissionConverter.java b/src/main/java/com/metalloop/modules/auth/converter/SysRolePermissionConverter.java new file mode 100644 index 0000000..d9b1908 --- /dev/null +++ b/src/main/java/com/metalloop/modules/auth/converter/SysRolePermissionConverter.java @@ -0,0 +1,65 @@ +package com.metalloop.modules.auth.converter; + +import com.metalloop.modules.auth.model.req.SysRolePermissionQueryReqDto; +import com.metalloop.modules.auth.model.req.SysRolePermissionReqDto; +import com.metalloop.modules.auth.model.resp.SysRolePermissionRespDto; +import com.metalloop.modules.auth.model.po.SysRolePermission; +import com.metalloop.modules.auth.model.query.SysRolePermissionQuery; +import org.mapstruct.Builder; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +import java.util.List; + +/** + * 角色-权限关联转换器 + * + * @author yy + * @since 2026-09-10 + */ +@SuppressWarnings("UnmappedTargetProperties") +@Mapper(builder = @Builder(disableBuilder = true)) +public interface SysRolePermissionConverter { + + SysRolePermissionConverter INSTANCE = Mappers.getMapper(SysRolePermissionConverter.class); + + /** + * 实体转换为响应 DTO + * + * @param sysRolePermission 实体 + * @return 转换后的数据 + */ + SysRolePermissionRespDto toRespDto(SysRolePermission sysRolePermission); + + /** + * 实体列表转换为响应 DTO 列表 + * + * @param sysRolePermissions 实体列表 + * @return 转换后的数据 + */ + List toRespDto(List sysRolePermissions); + + /** + * 请求 DTO 转换为实体 + * + * @param sysRolePermissionReqDto 请求 DTO + * @return 转换后的数据 + */ + SysRolePermission fromReqDto(SysRolePermissionReqDto sysRolePermissionReqDto); + + /** + * 请求 DTO 列表转换为实体列表 + * + * @param sysRolePermissionReqDtos 请求 DTO 列表 + * @return 转换后的数据 + */ + List fromReqDto(List sysRolePermissionReqDtos); + + /** + * 查询请求 DTO 转换为查询对象 + * + * @param sysRolePermissionQueryReqDto 查询请求DTO + * @return 转换后的数据 + */ + SysRolePermissionQuery fromQueryReqDtoToQuery(SysRolePermissionQueryReqDto sysRolePermissionQueryReqDto); +} diff --git a/src/main/java/com/metalloop/modules/auth/converter/SysUserConverter.java b/src/main/java/com/metalloop/modules/auth/converter/SysUserConverter.java new file mode 100644 index 0000000..e2df880 --- /dev/null +++ b/src/main/java/com/metalloop/modules/auth/converter/SysUserConverter.java @@ -0,0 +1,65 @@ +package com.metalloop.modules.auth.converter; + +import com.metalloop.modules.auth.model.req.SysUserQueryReqDto; +import com.metalloop.modules.auth.model.req.SysUserReqDto; +import com.metalloop.modules.auth.model.resp.SysUserRespDto; +import com.metalloop.modules.auth.model.po.SysUser; +import com.metalloop.modules.auth.model.query.SysUserQuery; +import org.mapstruct.Builder; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +import java.util.List; + +/** + * 用户转换器 + * + * @author yy + * @since 2026-09-10 + */ +@SuppressWarnings("UnmappedTargetProperties") +@Mapper(builder = @Builder(disableBuilder = true)) +public interface SysUserConverter { + + SysUserConverter INSTANCE = Mappers.getMapper(SysUserConverter.class); + + /** + * 实体转换为响应 DTO + * + * @param sysUser 实体 + * @return 转换后的数据 + */ + SysUserRespDto toRespDto(SysUser sysUser); + + /** + * 实体列表转换为响应 DTO 列表 + * + * @param sysUsers 实体列表 + * @return 转换后的数据 + */ + List toRespDto(List sysUsers); + + /** + * 请求 DTO 转换为实体 + * + * @param sysUserReqDto 请求 DTO + * @return 转换后的数据 + */ + SysUser fromReqDto(SysUserReqDto sysUserReqDto); + + /** + * 请求 DTO 列表转换为实体列表 + * + * @param sysUserReqDtos 请求 DTO 列表 + * @return 转换后的数据 + */ + List fromReqDto(List sysUserReqDtos); + + /** + * 查询请求 DTO 转换为查询对象 + * + * @param sysUserQueryReqDto 查询请求DTO + * @return 转换后的数据 + */ + SysUserQuery fromQueryReqDtoToQuery(SysUserQueryReqDto sysUserQueryReqDto); +} diff --git a/src/main/java/com/metalloop/modules/auth/converter/SysUserRoleConverter.java b/src/main/java/com/metalloop/modules/auth/converter/SysUserRoleConverter.java new file mode 100644 index 0000000..2dd5ddf --- /dev/null +++ b/src/main/java/com/metalloop/modules/auth/converter/SysUserRoleConverter.java @@ -0,0 +1,65 @@ +package com.metalloop.modules.auth.converter; + +import com.metalloop.modules.auth.model.req.SysUserRoleQueryReqDto; +import com.metalloop.modules.auth.model.req.SysUserRoleReqDto; +import com.metalloop.modules.auth.model.resp.SysUserRoleRespDto; +import com.metalloop.modules.auth.model.po.SysUserRole; +import com.metalloop.modules.auth.model.query.SysUserRoleQuery; +import org.mapstruct.Builder; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +import java.util.List; + +/** + * 用户与角色关联转换器 + * + * @author yy + * @since 2026-09-10 + */ +@SuppressWarnings("UnmappedTargetProperties") +@Mapper(builder = @Builder(disableBuilder = true)) +public interface SysUserRoleConverter { + + SysUserRoleConverter INSTANCE = Mappers.getMapper(SysUserRoleConverter.class); + + /** + * 实体转换为响应 DTO + * + * @param sysUserRole 实体 + * @return 转换后的数据 + */ + SysUserRoleRespDto toRespDto(SysUserRole sysUserRole); + + /** + * 实体列表转换为响应 DTO 列表 + * + * @param sysUserRoles 实体列表 + * @return 转换后的数据 + */ + List toRespDto(List sysUserRoles); + + /** + * 请求 DTO 转换为实体 + * + * @param sysUserRoleReqDto 请求 DTO + * @return 转换后的数据 + */ + SysUserRole fromReqDto(SysUserRoleReqDto sysUserRoleReqDto); + + /** + * 请求 DTO 列表转换为实体列表 + * + * @param sysUserRoleReqDtos 请求 DTO 列表 + * @return 转换后的数据 + */ + List fromReqDto(List sysUserRoleReqDtos); + + /** + * 查询请求 DTO 转换为查询对象 + * + * @param sysUserRoleQueryReqDto 查询请求DTO + * @return 转换后的数据 + */ + SysUserRoleQuery fromQueryReqDtoToQuery(SysUserRoleQueryReqDto sysUserRoleQueryReqDto); +} diff --git a/src/main/java/com/metalloop/modules/auth/mapper/SysEnterpriseImageMapper.java b/src/main/java/com/metalloop/modules/auth/mapper/SysEnterpriseImageMapper.java new file mode 100644 index 0000000..3ccc190 --- /dev/null +++ b/src/main/java/com/metalloop/modules/auth/mapper/SysEnterpriseImageMapper.java @@ -0,0 +1,15 @@ +package com.metalloop.modules.auth.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.metalloop.modules.auth.model.po.SysEnterpriseImage; +import org.apache.ibatis.annotations.Mapper; + +/** + * 企业图片附件 Mapper + * + * @author yy + * @since 2026-09-10 + */ +@Mapper +public interface SysEnterpriseImageMapper extends BaseMapper { +} \ No newline at end of file diff --git a/src/main/java/com/metalloop/modules/auth/mapper/SysEnterpriseMapper.java b/src/main/java/com/metalloop/modules/auth/mapper/SysEnterpriseMapper.java new file mode 100644 index 0000000..872dc34 --- /dev/null +++ b/src/main/java/com/metalloop/modules/auth/mapper/SysEnterpriseMapper.java @@ -0,0 +1,15 @@ +package com.metalloop.modules.auth.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.metalloop.modules.auth.model.po.SysEnterprise; +import org.apache.ibatis.annotations.Mapper; + +/** + * 企业信息主 Mapper + * + * @author yy + * @since 2026-09-10 + */ +@Mapper +public interface SysEnterpriseMapper extends BaseMapper { +} \ No newline at end of file diff --git a/src/main/java/com/metalloop/modules/auth/mapper/SysPermissionMapper.java b/src/main/java/com/metalloop/modules/auth/mapper/SysPermissionMapper.java new file mode 100644 index 0000000..35c2693 --- /dev/null +++ b/src/main/java/com/metalloop/modules/auth/mapper/SysPermissionMapper.java @@ -0,0 +1,15 @@ +package com.metalloop.modules.auth.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.metalloop.modules.auth.model.po.SysPermission; +import org.apache.ibatis.annotations.Mapper; + +/** + * 权限 Mapper + * + * @author yy + * @since 2026-09-10 + */ +@Mapper +public interface SysPermissionMapper extends BaseMapper { +} \ No newline at end of file diff --git a/src/main/java/com/metalloop/modules/auth/mapper/SysRoleMapper.java b/src/main/java/com/metalloop/modules/auth/mapper/SysRoleMapper.java new file mode 100644 index 0000000..5156eda --- /dev/null +++ b/src/main/java/com/metalloop/modules/auth/mapper/SysRoleMapper.java @@ -0,0 +1,15 @@ +package com.metalloop.modules.auth.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.metalloop.modules.auth.model.po.SysRole; +import org.apache.ibatis.annotations.Mapper; + +/** + * 角色 Mapper + * + * @author yy + * @since 2026-09-10 + */ +@Mapper +public interface SysRoleMapper extends BaseMapper { +} \ No newline at end of file diff --git a/src/main/java/com/metalloop/modules/auth/mapper/SysRolePermissionMapper.java b/src/main/java/com/metalloop/modules/auth/mapper/SysRolePermissionMapper.java new file mode 100644 index 0000000..fa19a41 --- /dev/null +++ b/src/main/java/com/metalloop/modules/auth/mapper/SysRolePermissionMapper.java @@ -0,0 +1,15 @@ +package com.metalloop.modules.auth.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.metalloop.modules.auth.model.po.SysRolePermission; +import org.apache.ibatis.annotations.Mapper; + +/** + * 角色-权限关联 Mapper + * + * @author yy + * @since 2026-09-10 + */ +@Mapper +public interface SysRolePermissionMapper extends BaseMapper { +} \ No newline at end of file diff --git a/src/main/java/com/metalloop/modules/auth/mapper/SysUserMapper.java b/src/main/java/com/metalloop/modules/auth/mapper/SysUserMapper.java new file mode 100644 index 0000000..d79418f --- /dev/null +++ b/src/main/java/com/metalloop/modules/auth/mapper/SysUserMapper.java @@ -0,0 +1,15 @@ +package com.metalloop.modules.auth.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.metalloop.modules.auth.model.po.SysUser; +import org.apache.ibatis.annotations.Mapper; + +/** + * 用户 Mapper + * + * @author yy + * @since 2026-09-10 + */ +@Mapper +public interface SysUserMapper extends BaseMapper { +} \ No newline at end of file diff --git a/src/main/java/com/metalloop/modules/auth/mapper/SysUserRoleMapper.java b/src/main/java/com/metalloop/modules/auth/mapper/SysUserRoleMapper.java new file mode 100644 index 0000000..d78f3c9 --- /dev/null +++ b/src/main/java/com/metalloop/modules/auth/mapper/SysUserRoleMapper.java @@ -0,0 +1,15 @@ +package com.metalloop.modules.auth.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.metalloop.modules.auth.model.po.SysUserRole; +import org.apache.ibatis.annotations.Mapper; + +/** + * 用户与角色关联 Mapper + * + * @author yy + * @since 2026-09-10 + */ +@Mapper +public interface SysUserRoleMapper extends BaseMapper { +} \ No newline at end of file diff --git a/src/main/java/com/metalloop/modules/auth/model/po/SysEnterprise.java b/src/main/java/com/metalloop/modules/auth/model/po/SysEnterprise.java new file mode 100644 index 0000000..8318b2a --- /dev/null +++ b/src/main/java/com/metalloop/modules/auth/model/po/SysEnterprise.java @@ -0,0 +1,202 @@ +package com.metalloop.modules.auth.model.po; + +import com.baomidou.mybatisplus.annotation.*; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 企业信息主 + * + * @author yy + * @since 2026-09-10 + */ +@Schema(description = "企业信息主") +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +@TableName(value = "sys_enterprise") +public class SysEnterprise implements Serializable { + + /** + * 企业ID(主键) + */ + @Schema(description = "企业ID(主键)") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + /** + * 企业名称 + */ + @Schema(description = "企业名称") + @TableField(value = "enterprise_name") + private String enterpriseName; + + /** + * 企业地址 + */ + @Schema(description = "企业地址") + @TableField(value = "enterprise_address") + private String enterpriseAddress; + + /** + * 仓库地址 + */ + @Schema(description = "仓库地址") + @TableField(value = "warehouse_address") + private String warehouseAddress; + + /** + * 联系人 + */ + @Schema(description = "联系人") + @TableField(value = "contact_person") + private String contactPerson; + + /** + * 法人代表 + */ + @Schema(description = "法人代表") + @TableField(value = "legal_person") + private String legalPerson; + + /** + * 电话1 + */ + @Schema(description = "电话1") + @TableField(value = "phone1") + private String phone1; + + /** + * 电话2 + */ + @Schema(description = "电话2") + @TableField(value = "phone2") + private String phone2; + + /** + * 电话3 + */ + @Schema(description = "电话3") + @TableField(value = "phone3") + private String phone3; + + /** + * 经营模式 + */ + @Schema(description = "经营模式") + @TableField(value = "business_model") + private String businessModel; + + /** + * 企业简介 + */ + @Schema(description = "企业简介") + @TableField(value = "profile_intro") + private String profileIntro; + + /** + * 标题图片URL + */ + @Schema(description = "标题图片URL") + @TableField(value = "title_img_url") + private String titleImgUrl; + + /** + * 简介图片URL + */ + @Schema(description = "简介图片URL") + @TableField(value = "intro_img_url") + private String introImgUrl; + + /** + * 营业执照URL + */ + @Schema(description = "营业执照URL") + @TableField(value = "business_license_url") + private String businessLicenseUrl; + + /** + * 法人身份证正面URL + */ + @Schema(description = "法人身份证正面URL") + @TableField(value = "legal_id_front_url") + private String legalIdFrontUrl; + + /** + * 法人身份证反面URL + */ + @Schema(description = "法人身份证反面URL") + @TableField(value = "legal_id_back_url") + private String legalIdBackUrl; + + /** + * OCR识别统一信用社ID(或统一信用代码) + */ + @Schema(description = "OCR识别统一信用社ID(或统一信用代码)") + @TableField(value = "ocr_credit_code_id") + private String ocrCreditCodeId; + + /** + * 法人身份证号 + */ + @Schema(description = "法人身份证号") + @TableField(value = "id_card_number") + private String idCardNumber; + + /** + * 信用额度 + */ + @Schema(description = "信用额度") + @TableField(value = "credit_limit") + private java.math.BigDecimal creditLimit; + + /** + * 认证状态(0-待提交,1-审核中,2-已通过,3-已驳回) + */ + @Schema(description = "认证状态(0-待提交,1-审核中,2-已通过,3-已驳回)") + @TableField(value = "audit_status") + private Boolean auditStatus; + + /** + * 认证资料提交时间 + */ + @Schema(description = "认证资料提交时间") + @TableField(value = "submit_time") + private java.util.Date submitTime; + + /** + * 认证审核完成时间 + */ + @Schema(description = "认证审核完成时间") + @TableField(value = "audit_time") + private java.util.Date auditTime; + + /** + * 审核驳回原因 + */ + @Schema(description = "审核驳回原因") + @TableField(value = "reject_reason") + private String rejectReason; + + /** + * 创建时间 + */ + @Schema(description = "创建时间") + @TableField(value = "created_at", fill = FieldFill.INSERT) + private java.util.Date createdAt; + + /** + * 更新时间 + */ + @Schema(description = "更新时间") + @TableField(value = "updated_at", fill = FieldFill.INSERT_UPDATE) + private java.util.Date updatedAt; + + private static final long serialVersionUID = 1L; +} diff --git a/src/main/java/com/metalloop/modules/auth/model/po/SysEnterpriseImage.java b/src/main/java/com/metalloop/modules/auth/model/po/SysEnterpriseImage.java new file mode 100644 index 0000000..46c99fa --- /dev/null +++ b/src/main/java/com/metalloop/modules/auth/model/po/SysEnterpriseImage.java @@ -0,0 +1,62 @@ +package com.metalloop.modules.auth.model.po; + +import com.baomidou.mybatisplus.annotation.*; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 企业图片附件 + * + * @author yy + * @since 2026-09-10 + */ +@Schema(description = "企业图片附件") +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +@TableName(value = "sys_enterprise_image") +public class SysEnterpriseImage implements Serializable { + + /** + * 图片ID(主键) + */ + @Schema(description = "图片ID(主键)") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + /** + * 所属企业ID + */ + @Schema(description = "所属企业ID") + @TableField(value = "enterprise_id") + private Integer enterpriseId; + + /** + * 图片类型(0-公司环境,1-资质证书,2-生产设备,3-主营产品) + */ + @Schema(description = "图片类型(0-公司环境,1-资质证书,2-生产设备,3-主营产品)") + @TableField(value = "image_type") + private Boolean imageType; + + /** + * 图片存储URL + */ + @Schema(description = "图片存储URL") + @TableField(value = "image_url") + private String imageUrl; + + /** + * 创建时间 + */ + @Schema(description = "创建时间") + @TableField(value = "created_at", fill = FieldFill.INSERT) + private java.util.Date createdAt; + + private static final long serialVersionUID = 1L; +} diff --git a/src/main/java/com/metalloop/modules/auth/model/po/SysPermission.java b/src/main/java/com/metalloop/modules/auth/model/po/SysPermission.java new file mode 100644 index 0000000..53a167b --- /dev/null +++ b/src/main/java/com/metalloop/modules/auth/model/po/SysPermission.java @@ -0,0 +1,153 @@ +package com.metalloop.modules.auth.model.po; + +import com.baomidou.mybatisplus.annotation.*; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 权限 + * + * @author yy + * @since 2026-09-10 + */ +@Schema(description = "权限") +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +@TableName(value = "sys_permission") +public class SysPermission implements Serializable { + + /** + * 权限ID + */ + @Schema(description = "权限ID") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + /** + * 菜单名称 + */ + @Schema(description = "菜单名称") + @TableField(value = "name") + private String name; + + /** + * 权限标识(唯一,用于后端鉴权) + */ + @Schema(description = "权限标识(唯一,用于后端鉴权)") + @TableField(value = "code") + private String code; + + /** + * 菜单类型;0-系统 1-目录 2-菜单 3-按钮 + */ + @Schema(description = "菜单类型;0-系统 1-目录 2-菜单 3-按钮") + @TableField(value = "type") + private Boolean type; + + /** + * 显示顺序 + */ + @Schema(description = "显示顺序") + @TableField(value = "sort") + private Integer sort; + + /** + * 父权限ID + */ + @Schema(description = "父权限ID") + @TableField(value = "parent_id") + private Long parentId; + + /** + * 菜单图标 + */ + @Schema(description = "菜单图标") + @TableField(value = "icon") + private String icon; + + /** + * 后端接口地址(辅助) + */ + @Schema(description = "后端接口地址(辅助)") + @TableField(value = "api_path") + private String apiPath; + + /** + * 前端路由地址 + */ + @Schema(description = "前端路由地址") + @TableField(value = "route_path") + private String routePath; + + /** + * 前端组件路径 + */ + @Schema(description = "前端组件路径") + @TableField(value = "component") + private String component; + + /** + * 前端组件名 + */ + @Schema(description = "前端组件名") + @TableField(value = "component_name") + private String componentName; + + /** + * 描述 + */ + @Schema(description = "描述") + @TableField(value = "description") + private String description; + + /** + * 启用状态(0-禁用 1-启用) + */ + @Schema(description = "启用状态(0-禁用 1-启用)") + @TableField(value = "enabled") + private Boolean enabled; + + /** + * 创建用户ID + */ + @Schema(description = "创建用户ID") + @TableField(value = "create_user", fill = FieldFill.INSERT) + private Long createUser; + + /** + * 修改用户ID + */ + @Schema(description = "修改用户ID") + @TableField(value = "update_user", fill = FieldFill.INSERT_UPDATE) + private Long updateUser; + + /** + * 创建时间 + */ + @Schema(description = "创建时间") + @TableField(value = "create_time", fill = FieldFill.INSERT) + private java.util.Date createTime; + + /** + * 修改时间 + */ + @Schema(description = "修改时间") + @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE) + private java.util.Date updateTime; + + /** + * 数据状态(0-正常 1-已删) + */ + @Schema(description = "数据状态(0-正常 1-已删)") + @TableField(value = "data_status") + private Boolean dataStatus; + + private static final long serialVersionUID = 1L; +} diff --git a/src/main/java/com/metalloop/modules/auth/model/po/SysRole.java b/src/main/java/com/metalloop/modules/auth/model/po/SysRole.java new file mode 100644 index 0000000..0a18fa0 --- /dev/null +++ b/src/main/java/com/metalloop/modules/auth/model/po/SysRole.java @@ -0,0 +1,104 @@ +package com.metalloop.modules.auth.model.po; + +import com.baomidou.mybatisplus.annotation.*; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 角色 + * + * @author yy + * @since 2026-09-10 + */ +@Schema(description = "角色") +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +@TableName(value = "sys_role") +public class SysRole implements Serializable { + + /** + * 角色id + */ + @Schema(description = "角色id") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + /** + * 角色名称 + */ + @Schema(description = "角色名称") + @TableField(value = "name") + private String name; + + /** + * 角色权限字符串 + */ + @Schema(description = "角色权限字符串") + @TableField(value = "code") + private String code; + + /** + * 启用状态:指示角色是启用还是禁用。禁用角色无法进行授权。如果已启用,则为true,否则为false + */ + @Schema(description = "启用状态:指示角色是启用还是禁用。禁用角色无法进行授权。如果已启用,则为true,否则为false") + @TableField(value = "enabled") + private Boolean enabled; + + /** + * 角色描述 + */ + @Schema(description = "角色描述") + @TableField(value = "description") + private String description; + + /** + * 创建人;用户表ID + */ + @Schema(description = "创建人;用户表ID") + @TableField(value = "create_user", fill = FieldFill.INSERT) + private Long createUser; + + /** + * 创建人所属机构;组织机构表ID + */ + @Schema(description = "创建人所属机构;组织机构表ID") + @TableField(value = "create_org") + private Long createOrg; + + /** + * 创建时间;yyyy-MM-dd HH:mm:ss + */ + @Schema(description = "创建时间;yyyy-MM-dd HH:mm:ss") + @TableField(value = "create_time", fill = FieldFill.INSERT) + private java.util.Date createTime; + + /** + * 修改时间;yyyy-MM-dd HH:mm:ss + */ + @Schema(description = "修改时间;yyyy-MM-dd HH:mm:ss") + @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE) + private java.util.Date updateTime; + + /** + * 修改用户ID;对应用户表的ID字段 + */ + @Schema(description = "修改用户ID;对应用户表的ID字段") + @TableField(value = "update_user", fill = FieldFill.INSERT_UPDATE) + private Long updateUser; + + /** + * 数据状态;0-正常 1-已删 默认值为0 + */ + @Schema(description = "数据状态;0-正常 1-已删 默认值为0") + @TableField(value = "data_status") + private String dataStatus; + + private static final long serialVersionUID = 1L; +} diff --git a/src/main/java/com/metalloop/modules/auth/model/po/SysRolePermission.java b/src/main/java/com/metalloop/modules/auth/model/po/SysRolePermission.java new file mode 100644 index 0000000..97adc3c --- /dev/null +++ b/src/main/java/com/metalloop/modules/auth/model/po/SysRolePermission.java @@ -0,0 +1,51 @@ +package com.metalloop.modules.auth.model.po; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 角色-权限关联 + * + * @author yy + * @since 2026-09-10 + */ +@Schema(description = "角色-权限关联") +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +@TableName(value = "sys_role_permission") +public class SysRolePermission implements Serializable { + + /** + * 自增编号 + */ + @Schema(description = "自增编号") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + /** + * 角色ID + */ + @Schema(description = "角色ID") + @TableField(value = "role_id") + private Long roleId; + + /** + * 权限ID + */ + @Schema(description = "权限ID") + @TableField(value = "permission_id") + private Long permissionId; + + private static final long serialVersionUID = 1L; +} diff --git a/src/main/java/com/metalloop/modules/auth/model/po/SysUser.java b/src/main/java/com/metalloop/modules/auth/model/po/SysUser.java new file mode 100644 index 0000000..b27dc8f --- /dev/null +++ b/src/main/java/com/metalloop/modules/auth/model/po/SysUser.java @@ -0,0 +1,93 @@ +package com.metalloop.modules.auth.model.po; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 用户 + * + * @author yy + * @since 2026-09-10 + */ +@Schema(description = "用户") +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +@TableName(value = "sys_user") +public class SysUser implements Serializable { + + /** + * 用户ID(主键) + */ + @Schema(description = "用户ID(主键)") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + /** + * 用户名(登录账号) + */ + @Schema(description = "用户名(登录账号)") + @TableField(value = "username") + private String username; + + /** + * 密码(存储哈希值) + */ + @Schema(description = "密码(存储哈希值)") + @TableField(value = "password") + private String password; + + /** + * 认证状态(0-未认证,1-认证中,2-已认证) + */ + @Schema(description = "认证状态(0-未认证,1-认证中,2-已认证)") + @TableField(value = "auth_status") + private Boolean authStatus; + + /** + * 关联的企业ID(外键,指向企业表) + */ + @Schema(description = "关联的企业ID(外键,指向企业表)") + @TableField(value = "enterprise_id") + private Integer enterpriseId; + + /** + * 手机号 + */ + @Schema(description = "手机号") + @TableField(value = "phone") + private String phone; + + /** + * 邮箱 + */ + @Schema(description = "邮箱") + @TableField(value = "email") + private String email; + + /** + * 用户状态(0-禁用,1-正常) + */ + @Schema(description = "用户状态(0-禁用,1-正常)") + @TableField(value = "user_status") + private Boolean userStatus; + + /** + * 注册时间 + */ + @Schema(description = "注册时间") + @TableField(value = "reg_time") + private java.util.Date regTime; + + private static final long serialVersionUID = 1L; +} diff --git a/src/main/java/com/metalloop/modules/auth/model/po/SysUserRole.java b/src/main/java/com/metalloop/modules/auth/model/po/SysUserRole.java new file mode 100644 index 0000000..24c653a --- /dev/null +++ b/src/main/java/com/metalloop/modules/auth/model/po/SysUserRole.java @@ -0,0 +1,55 @@ +package com.metalloop.modules.auth.model.po; + +import com.baomidou.mybatisplus.annotation.*; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 用户与角色关联 + * + * @author yy + * @since 2026-09-10 + */ +@Schema(description = "用户与角色关联") +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +@TableName(value = "sys_user_role") +public class SysUserRole implements Serializable { + + /** + * 用户ID + */ + @Schema(description = "用户ID") + @TableField(value = "user_id") + private Integer userId; + + /** + * 角色ID + */ + @Schema(description = "角色ID") + @TableField(value = "role_id") + private Integer roleId; + + /** + * 分配时间 + */ + @Schema(description = "分配时间") + @TableField(value = "created_at", fill = FieldFill.INSERT) + private java.util.Date createdAt; + + /** + * + */ + @Schema(description = "") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + private static final long serialVersionUID = 1L; +} diff --git a/src/main/java/com/metalloop/modules/auth/model/query/SysEnterpriseImageQuery.java b/src/main/java/com/metalloop/modules/auth/model/query/SysEnterpriseImageQuery.java new file mode 100644 index 0000000..176a9db --- /dev/null +++ b/src/main/java/com/metalloop/modules/auth/model/query/SysEnterpriseImageQuery.java @@ -0,0 +1,61 @@ +package com.metalloop.modules.auth.model.query; + +import com.baomidou.mybatisplus.annotation.TableField; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 企业图片附件查询对象 + * + * @author yy + * @since 2026-09-10 + */ +@Schema(description = "企业图片附件查询对象") +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class SysEnterpriseImageQuery implements Serializable { + + /** + * 图片ID(主键) + */ + @Schema(description = "图片ID(主键)") + @TableField(value = "id") + private Long id; + + /** + * 所属企业ID + */ + @Schema(description = "所属企业ID") + @TableField(value = "enterprise_id") + private Integer enterpriseId; + + /** + * 图片类型(0-公司环境,1-资质证书,2-生产设备,3-主营产品) + */ + @Schema(description = "图片类型(0-公司环境,1-资质证书,2-生产设备,3-主营产品)") + @TableField(value = "image_type") + private Boolean imageType; + + /** + * 图片存储URL + */ + @Schema(description = "图片存储URL") + @TableField(value = "image_url") + private String imageUrl; + + /** + * 创建时间 + */ + @Schema(description = "创建时间") + @TableField(value = "created_at") + private java.util.Date createdAt; + + private static final long serialVersionUID = 1L; +} diff --git a/src/main/java/com/metalloop/modules/auth/model/query/SysEnterpriseQuery.java b/src/main/java/com/metalloop/modules/auth/model/query/SysEnterpriseQuery.java new file mode 100644 index 0000000..17396fd --- /dev/null +++ b/src/main/java/com/metalloop/modules/auth/model/query/SysEnterpriseQuery.java @@ -0,0 +1,201 @@ +package com.metalloop.modules.auth.model.query; + +import com.baomidou.mybatisplus.annotation.TableField; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 企业信息主查询对象 + * + * @author yy + * @since 2026-09-10 + */ +@Schema(description = "企业信息主查询对象") +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class SysEnterpriseQuery implements Serializable { + + /** + * 企业ID(主键) + */ + @Schema(description = "企业ID(主键)") + @TableField(value = "id") + private Long id; + + /** + * 企业名称 + */ + @Schema(description = "企业名称") + @TableField(value = "enterprise_name") + private String enterpriseName; + + /** + * 企业地址 + */ + @Schema(description = "企业地址") + @TableField(value = "enterprise_address") + private String enterpriseAddress; + + /** + * 仓库地址 + */ + @Schema(description = "仓库地址") + @TableField(value = "warehouse_address") + private String warehouseAddress; + + /** + * 联系人 + */ + @Schema(description = "联系人") + @TableField(value = "contact_person") + private String contactPerson; + + /** + * 法人代表 + */ + @Schema(description = "法人代表") + @TableField(value = "legal_person") + private String legalPerson; + + /** + * 电话1 + */ + @Schema(description = "电话1") + @TableField(value = "phone1") + private String phone1; + + /** + * 电话2 + */ + @Schema(description = "电话2") + @TableField(value = "phone2") + private String phone2; + + /** + * 电话3 + */ + @Schema(description = "电话3") + @TableField(value = "phone3") + private String phone3; + + /** + * 经营模式 + */ + @Schema(description = "经营模式") + @TableField(value = "business_model") + private String businessModel; + + /** + * 企业简介 + */ + @Schema(description = "企业简介") + @TableField(value = "profile_intro") + private String profileIntro; + + /** + * 标题图片URL + */ + @Schema(description = "标题图片URL") + @TableField(value = "title_img_url") + private String titleImgUrl; + + /** + * 简介图片URL + */ + @Schema(description = "简介图片URL") + @TableField(value = "intro_img_url") + private String introImgUrl; + + /** + * 营业执照URL + */ + @Schema(description = "营业执照URL") + @TableField(value = "business_license_url") + private String businessLicenseUrl; + + /** + * 法人身份证正面URL + */ + @Schema(description = "法人身份证正面URL") + @TableField(value = "legal_id_front_url") + private String legalIdFrontUrl; + + /** + * 法人身份证反面URL + */ + @Schema(description = "法人身份证反面URL") + @TableField(value = "legal_id_back_url") + private String legalIdBackUrl; + + /** + * OCR识别统一信用社ID(或统一信用代码) + */ + @Schema(description = "OCR识别统一信用社ID(或统一信用代码)") + @TableField(value = "ocr_credit_code_id") + private String ocrCreditCodeId; + + /** + * 法人身份证号 + */ + @Schema(description = "法人身份证号") + @TableField(value = "id_card_number") + private String idCardNumber; + + /** + * 信用额度 + */ + @Schema(description = "信用额度") + @TableField(value = "credit_limit") + private java.math.BigDecimal creditLimit; + + /** + * 认证状态(0-待提交,1-审核中,2-已通过,3-已驳回) + */ + @Schema(description = "认证状态(0-待提交,1-审核中,2-已通过,3-已驳回)") + @TableField(value = "audit_status") + private Boolean auditStatus; + + /** + * 认证资料提交时间 + */ + @Schema(description = "认证资料提交时间") + @TableField(value = "submit_time") + private java.util.Date submitTime; + + /** + * 认证审核完成时间 + */ + @Schema(description = "认证审核完成时间") + @TableField(value = "audit_time") + private java.util.Date auditTime; + + /** + * 审核驳回原因 + */ + @Schema(description = "审核驳回原因") + @TableField(value = "reject_reason") + private String rejectReason; + + /** + * 创建时间 + */ + @Schema(description = "创建时间") + @TableField(value = "created_at") + private java.util.Date createdAt; + + /** + * 更新时间 + */ + @Schema(description = "更新时间") + @TableField(value = "updated_at") + private java.util.Date updatedAt; + + private static final long serialVersionUID = 1L; +} diff --git a/src/main/java/com/metalloop/modules/auth/model/query/SysPermissionQuery.java b/src/main/java/com/metalloop/modules/auth/model/query/SysPermissionQuery.java new file mode 100644 index 0000000..42ed906 --- /dev/null +++ b/src/main/java/com/metalloop/modules/auth/model/query/SysPermissionQuery.java @@ -0,0 +1,152 @@ +package com.metalloop.modules.auth.model.query; + +import com.baomidou.mybatisplus.annotation.TableField; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 权限查询对象 + * + * @author yy + * @since 2026-09-10 + */ +@Schema(description = "权限查询对象") +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class SysPermissionQuery implements Serializable { + + /** + * 权限ID + */ + @Schema(description = "权限ID") + @TableField(value = "id") + private Long id; + + /** + * 菜单名称 + */ + @Schema(description = "菜单名称") + @TableField(value = "name") + private String name; + + /** + * 权限标识(唯一,用于后端鉴权) + */ + @Schema(description = "权限标识(唯一,用于后端鉴权)") + @TableField(value = "code") + private String code; + + /** + * 菜单类型;0-系统 1-目录 2-菜单 3-按钮 + */ + @Schema(description = "菜单类型;0-系统 1-目录 2-菜单 3-按钮") + @TableField(value = "type") + private Boolean type; + + /** + * 显示顺序 + */ + @Schema(description = "显示顺序") + @TableField(value = "sort") + private Integer sort; + + /** + * 父权限ID + */ + @Schema(description = "父权限ID") + @TableField(value = "parent_id") + private Long parentId; + + /** + * 菜单图标 + */ + @Schema(description = "菜单图标") + @TableField(value = "icon") + private String icon; + + /** + * 后端接口地址(辅助) + */ + @Schema(description = "后端接口地址(辅助)") + @TableField(value = "api_path") + private String apiPath; + + /** + * 前端路由地址 + */ + @Schema(description = "前端路由地址") + @TableField(value = "route_path") + private String routePath; + + /** + * 前端组件路径 + */ + @Schema(description = "前端组件路径") + @TableField(value = "component") + private String component; + + /** + * 前端组件名 + */ + @Schema(description = "前端组件名") + @TableField(value = "component_name") + private String componentName; + + /** + * 描述 + */ + @Schema(description = "描述") + @TableField(value = "description") + private String description; + + /** + * 启用状态(0-禁用 1-启用) + */ + @Schema(description = "启用状态(0-禁用 1-启用)") + @TableField(value = "enabled") + private Boolean enabled; + + /** + * 创建用户ID + */ + @Schema(description = "创建用户ID") + @TableField(value = "create_user") + private Long createUser; + + /** + * 修改用户ID + */ + @Schema(description = "修改用户ID") + @TableField(value = "update_user") + private Long updateUser; + + /** + * 创建时间 + */ + @Schema(description = "创建时间") + @TableField(value = "create_time") + private java.util.Date createTime; + + /** + * 修改时间 + */ + @Schema(description = "修改时间") + @TableField(value = "update_time") + private java.util.Date updateTime; + + /** + * 数据状态(0-正常 1-已删) + */ + @Schema(description = "数据状态(0-正常 1-已删)") + @TableField(value = "data_status") + private Boolean dataStatus; + + private static final long serialVersionUID = 1L; +} diff --git a/src/main/java/com/metalloop/modules/auth/model/query/SysRolePermissionQuery.java b/src/main/java/com/metalloop/modules/auth/model/query/SysRolePermissionQuery.java new file mode 100644 index 0000000..5ff14c0 --- /dev/null +++ b/src/main/java/com/metalloop/modules/auth/model/query/SysRolePermissionQuery.java @@ -0,0 +1,47 @@ +package com.metalloop.modules.auth.model.query; + +import com.baomidou.mybatisplus.annotation.TableField; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 角色-权限关联查询对象 + * + * @author yy + * @since 2026-09-10 + */ +@Schema(description = "角色-权限关联查询对象") +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class SysRolePermissionQuery implements Serializable { + + /** + * 自增编号 + */ + @Schema(description = "自增编号") + @TableField(value = "id") + private Long id; + + /** + * 角色ID + */ + @Schema(description = "角色ID") + @TableField(value = "role_id") + private Long roleId; + + /** + * 权限ID + */ + @Schema(description = "权限ID") + @TableField(value = "permission_id") + private Long permissionId; + + private static final long serialVersionUID = 1L; +} diff --git a/src/main/java/com/metalloop/modules/auth/model/query/SysRoleQuery.java b/src/main/java/com/metalloop/modules/auth/model/query/SysRoleQuery.java new file mode 100644 index 0000000..70faee8 --- /dev/null +++ b/src/main/java/com/metalloop/modules/auth/model/query/SysRoleQuery.java @@ -0,0 +1,103 @@ +package com.metalloop.modules.auth.model.query; + +import com.baomidou.mybatisplus.annotation.TableField; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 角色查询对象 + * + * @author yy + * @since 2026-09-10 + */ +@Schema(description = "角色查询对象") +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class SysRoleQuery implements Serializable { + + /** + * 角色id + */ + @Schema(description = "角色id") + @TableField(value = "id") + private Long id; + + /** + * 角色名称 + */ + @Schema(description = "角色名称") + @TableField(value = "name") + private String name; + + /** + * 角色权限字符串 + */ + @Schema(description = "角色权限字符串") + @TableField(value = "code") + private String code; + + /** + * 启用状态:指示角色是启用还是禁用。禁用角色无法进行授权。如果已启用,则为true,否则为false + */ + @Schema(description = "启用状态:指示角色是启用还是禁用。禁用角色无法进行授权。如果已启用,则为true,否则为false") + @TableField(value = "enabled") + private Boolean enabled; + + /** + * 角色描述 + */ + @Schema(description = "角色描述") + @TableField(value = "description") + private String description; + + /** + * 创建人;用户表ID + */ + @Schema(description = "创建人;用户表ID") + @TableField(value = "create_user") + private Long createUser; + + /** + * 创建人所属机构;组织机构表ID + */ + @Schema(description = "创建人所属机构;组织机构表ID") + @TableField(value = "create_org") + private Long createOrg; + + /** + * 创建时间;yyyy-MM-dd HH:mm:ss + */ + @Schema(description = "创建时间;yyyy-MM-dd HH:mm:ss") + @TableField(value = "create_time") + private java.util.Date createTime; + + /** + * 修改时间;yyyy-MM-dd HH:mm:ss + */ + @Schema(description = "修改时间;yyyy-MM-dd HH:mm:ss") + @TableField(value = "update_time") + private java.util.Date updateTime; + + /** + * 修改用户ID;对应用户表的ID字段 + */ + @Schema(description = "修改用户ID;对应用户表的ID字段") + @TableField(value = "update_user") + private Long updateUser; + + /** + * 数据状态;0-正常 1-已删 默认值为0 + */ + @Schema(description = "数据状态;0-正常 1-已删 默认值为0") + @TableField(value = "data_status") + private String dataStatus; + + private static final long serialVersionUID = 1L; +} diff --git a/src/main/java/com/metalloop/modules/auth/model/query/SysUserQuery.java b/src/main/java/com/metalloop/modules/auth/model/query/SysUserQuery.java new file mode 100644 index 0000000..068f2f9 --- /dev/null +++ b/src/main/java/com/metalloop/modules/auth/model/query/SysUserQuery.java @@ -0,0 +1,89 @@ +package com.metalloop.modules.auth.model.query; + +import com.baomidou.mybatisplus.annotation.TableField; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 用户查询对象 + * + * @author yy + * @since 2026-09-10 + */ +@Schema(description = "用户查询对象") +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class SysUserQuery implements Serializable { + + /** + * 用户ID(主键) + */ + @Schema(description = "用户ID(主键)") + @TableField(value = "id") + private Long id; + + /** + * 用户名(登录账号) + */ + @Schema(description = "用户名(登录账号)") + @TableField(value = "username") + private String username; + + /** + * 密码(存储哈希值) + */ + @Schema(description = "密码(存储哈希值)") + @TableField(value = "password") + private String password; + + /** + * 认证状态(0-未认证,1-认证中,2-已认证) + */ + @Schema(description = "认证状态(0-未认证,1-认证中,2-已认证)") + @TableField(value = "auth_status") + private Boolean authStatus; + + /** + * 关联的企业ID(外键,指向企业表) + */ + @Schema(description = "关联的企业ID(外键,指向企业表)") + @TableField(value = "enterprise_id") + private Integer enterpriseId; + + /** + * 手机号 + */ + @Schema(description = "手机号") + @TableField(value = "phone") + private String phone; + + /** + * 邮箱 + */ + @Schema(description = "邮箱") + @TableField(value = "email") + private String email; + + /** + * 用户状态(0-禁用,1-正常) + */ + @Schema(description = "用户状态(0-禁用,1-正常)") + @TableField(value = "user_status") + private Boolean userStatus; + + /** + * 注册时间 + */ + @Schema(description = "注册时间") + @TableField(value = "reg_time") + private java.util.Date regTime; + + private static final long serialVersionUID = 1L; +} diff --git a/src/main/java/com/metalloop/modules/auth/model/query/SysUserRoleQuery.java b/src/main/java/com/metalloop/modules/auth/model/query/SysUserRoleQuery.java new file mode 100644 index 0000000..70b484c --- /dev/null +++ b/src/main/java/com/metalloop/modules/auth/model/query/SysUserRoleQuery.java @@ -0,0 +1,54 @@ +package com.metalloop.modules.auth.model.query; + +import com.baomidou.mybatisplus.annotation.TableField; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 用户与角色关联查询对象 + * + * @author yy + * @since 2026-09-10 + */ +@Schema(description = "用户与角色关联查询对象") +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class SysUserRoleQuery implements Serializable { + + /** + * 用户ID + */ + @Schema(description = "用户ID") + @TableField(value = "user_id") + private Integer userId; + + /** + * 角色ID + */ + @Schema(description = "角色ID") + @TableField(value = "role_id") + private Integer roleId; + + /** + * 分配时间 + */ + @Schema(description = "分配时间") + @TableField(value = "created_at") + private java.util.Date createdAt; + + /** + * + */ + @Schema(description = "") + @TableField(value = "id") + private Long id; + + private static final long serialVersionUID = 1L; +} diff --git a/src/main/java/com/metalloop/modules/auth/model/req/AuthenticationRequest.java b/src/main/java/com/metalloop/modules/auth/model/req/AuthenticationRequest.java new file mode 100644 index 0000000..84cc5ae --- /dev/null +++ b/src/main/java/com/metalloop/modules/auth/model/req/AuthenticationRequest.java @@ -0,0 +1,32 @@ +package com.metalloop.modules.auth.model.req; + +import jakarta.validation.constraints.NotBlank; +import lombok.Data; + + +/** + * 认证请求 + * + * @author zhaowenhao + * @since 2023-03-19 + */ +@Data +public class AuthenticationRequest { + + /** + * 用户名 + */ + @NotBlank(message = "用户名不能为空") + private String username; + + /** + * 密码 + */ + @NotBlank(message = "密码不能为空") + private String password; + + /** + * 验证码 + */ + private String verifyCode; +} diff --git a/src/main/java/com/metalloop/modules/auth/model/req/SysEnterpriseImageLockConditionReqDto.java b/src/main/java/com/metalloop/modules/auth/model/req/SysEnterpriseImageLockConditionReqDto.java new file mode 100644 index 0000000..aa48bbb --- /dev/null +++ b/src/main/java/com/metalloop/modules/auth/model/req/SysEnterpriseImageLockConditionReqDto.java @@ -0,0 +1,36 @@ +package com.metalloop.modules.auth.model.req; + +import com.metalloop.common.core.lock.LockConditionReqDto; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.util.List; + +/** + * 企业图片附件及幂等性锁定条件组合 DTO + * + * @author yy + * @since 2026-09-10 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SysEnterpriseImageLockConditionReqDto implements Serializable { + + /** + * 企业图片附件实体 + */ + @Schema(description = "企业图片附件实体") + private SysEnterpriseImageReqDto entity; + + /** + * 锁定条件 + */ + @Schema(description = "锁定条件") + private List> conditions; +} diff --git a/src/main/java/com/metalloop/modules/auth/model/req/SysEnterpriseImagePageQueryReqDto.java b/src/main/java/com/metalloop/modules/auth/model/req/SysEnterpriseImagePageQueryReqDto.java new file mode 100644 index 0000000..f288cc7 --- /dev/null +++ b/src/main/java/com/metalloop/modules/auth/model/req/SysEnterpriseImagePageQueryReqDto.java @@ -0,0 +1,47 @@ +package com.metalloop.modules.auth.model.req; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 企业图片附件分页查询请求 DTO + * + * @author yy + * @since 2026-09-10 + */ +@EqualsAndHashCode(callSuper = true) +@Data +@NoArgsConstructor +@AllArgsConstructor +@Schema(description = "企业图片附件分页查询请求 DTO") +public class SysEnterpriseImagePageQueryReqDto extends SysEnterpriseImageQueryReqDto implements Serializable { + // region 分页参数接收区域 + /** + * 当前页 + */ + @Schema(description = "当前页,默认 1") + private Long current = 1L; + + /** + * 每页显示条数,默认 10 + */ + @Schema(description = "每页显示条数,默认 10") + private Long size = 10L; + + /** + * 生成 mybatis plus 的分页对象 + * + * @param 分页元素类型 + * @return 分页对象 + */ + public Page page() { + return Page.of(current, size); + } + // ednRegion +} diff --git a/src/main/java/com/metalloop/modules/auth/model/req/SysEnterpriseImageQueryReqDto.java b/src/main/java/com/metalloop/modules/auth/model/req/SysEnterpriseImageQueryReqDto.java new file mode 100644 index 0000000..97479d4 --- /dev/null +++ b/src/main/java/com/metalloop/modules/auth/model/req/SysEnterpriseImageQueryReqDto.java @@ -0,0 +1,55 @@ +package com.metalloop.modules.auth.model.req; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 企业图片附件查询请求 DTO + * + * @author yy + * @since 2026-09-10 + */ +@Schema(description = "企业图片附件查询请求 DTO") +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SysEnterpriseImageQueryReqDto implements Serializable { + + /** + * 图片ID(主键) + */ + @Schema(description = "图片ID(主键)") + private Long id; + + /** + * 所属企业ID + */ + @Schema(description = "所属企业ID") + private Integer enterpriseId; + + /** + * 图片类型(0-公司环境,1-资质证书,2-生产设备,3-主营产品) + */ + @Schema(description = "图片类型(0-公司环境,1-资质证书,2-生产设备,3-主营产品)") + private Boolean imageType; + + /** + * 图片存储URL + */ + @Schema(description = "图片存储URL") + private String imageUrl; + + /** + * 创建时间 + */ + @Schema(description = "创建时间") + private java.util.Date createdAt; + + private static final long serialVersionUID = 1L; +} diff --git a/src/main/java/com/metalloop/modules/auth/model/req/SysEnterpriseImageReqDto.java b/src/main/java/com/metalloop/modules/auth/model/req/SysEnterpriseImageReqDto.java new file mode 100644 index 0000000..ad2c592 --- /dev/null +++ b/src/main/java/com/metalloop/modules/auth/model/req/SysEnterpriseImageReqDto.java @@ -0,0 +1,55 @@ +package com.metalloop.modules.auth.model.req; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 企业图片附件请求 DTO + * + * @author yy + * @since 2026-09-10 + */ +@Schema(description = "企业图片附件请求 DTO") +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SysEnterpriseImageReqDto implements Serializable { + + /** + * 图片ID(主键) + */ + @Schema(description = "图片ID(主键)") + private Long id; + + /** + * 所属企业ID + */ + @Schema(description = "所属企业ID") + private Integer enterpriseId; + + /** + * 图片类型(0-公司环境,1-资质证书,2-生产设备,3-主营产品) + */ + @Schema(description = "图片类型(0-公司环境,1-资质证书,2-生产设备,3-主营产品)") + private Boolean imageType; + + /** + * 图片存储URL + */ + @Schema(description = "图片存储URL") + private String imageUrl; + + /** + * 创建时间 + */ + @Schema(description = "创建时间") + private java.util.Date createdAt; + + private static final long serialVersionUID = 1L; +} diff --git a/src/main/java/com/metalloop/modules/auth/model/req/SysEnterpriseImageUpdateByQueryReqDto.java b/src/main/java/com/metalloop/modules/auth/model/req/SysEnterpriseImageUpdateByQueryReqDto.java new file mode 100644 index 0000000..003e29f --- /dev/null +++ b/src/main/java/com/metalloop/modules/auth/model/req/SysEnterpriseImageUpdateByQueryReqDto.java @@ -0,0 +1,35 @@ +package com.metalloop.modules.auth.model.req; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 企业图片附件根据查询修改 DTO + * + * @author yy + * @since 2026-09-10 + */ +@Schema(description = "企业图片附件根据查询修改 DTO") +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SysEnterpriseImageUpdateByQueryReqDto implements Serializable { + + /** + * 企业图片附件实体 + */ + @Schema(description = "企业图片附件实体") + private SysEnterpriseImageReqDto entity; + + /** + * 查询请求 DTO + */ + @Schema(description = "查询请求 DTO") + private SysEnterpriseImageQueryReqDto queryReqDto; +} diff --git a/src/main/java/com/metalloop/modules/auth/model/req/SysEnterpriseLockConditionReqDto.java b/src/main/java/com/metalloop/modules/auth/model/req/SysEnterpriseLockConditionReqDto.java new file mode 100644 index 0000000..76e5029 --- /dev/null +++ b/src/main/java/com/metalloop/modules/auth/model/req/SysEnterpriseLockConditionReqDto.java @@ -0,0 +1,36 @@ +package com.metalloop.modules.auth.model.req; + +import com.metalloop.common.core.lock.LockConditionReqDto; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.util.List; + +/** + * 企业信息主及幂等性锁定条件组合 DTO + * + * @author yy + * @since 2026-09-10 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SysEnterpriseLockConditionReqDto implements Serializable { + + /** + * 企业信息主实体 + */ + @Schema(description = "企业信息主实体") + private SysEnterpriseReqDto entity; + + /** + * 锁定条件 + */ + @Schema(description = "锁定条件") + private List> conditions; +} diff --git a/src/main/java/com/metalloop/modules/auth/model/req/SysEnterprisePageQueryReqDto.java b/src/main/java/com/metalloop/modules/auth/model/req/SysEnterprisePageQueryReqDto.java new file mode 100644 index 0000000..de6189a --- /dev/null +++ b/src/main/java/com/metalloop/modules/auth/model/req/SysEnterprisePageQueryReqDto.java @@ -0,0 +1,47 @@ +package com.metalloop.modules.auth.model.req; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 企业信息主分页查询请求 DTO + * + * @author yy + * @since 2026-09-10 + */ +@EqualsAndHashCode(callSuper = true) +@Data +@NoArgsConstructor +@AllArgsConstructor +@Schema(description = "企业信息主分页查询请求 DTO") +public class SysEnterprisePageQueryReqDto extends SysEnterpriseQueryReqDto implements Serializable { + // region 分页参数接收区域 + /** + * 当前页 + */ + @Schema(description = "当前页,默认 1") + private Long current = 1L; + + /** + * 每页显示条数,默认 10 + */ + @Schema(description = "每页显示条数,默认 10") + private Long size = 10L; + + /** + * 生成 mybatis plus 的分页对象 + * + * @param 分页元素类型 + * @return 分页对象 + */ + public Page page() { + return Page.of(current, size); + } + // ednRegion +} diff --git a/src/main/java/com/metalloop/modules/auth/model/req/SysEnterpriseQueryReqDto.java b/src/main/java/com/metalloop/modules/auth/model/req/SysEnterpriseQueryReqDto.java new file mode 100644 index 0000000..1d2a061 --- /dev/null +++ b/src/main/java/com/metalloop/modules/auth/model/req/SysEnterpriseQueryReqDto.java @@ -0,0 +1,175 @@ +package com.metalloop.modules.auth.model.req; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 企业信息主查询请求 DTO + * + * @author yy + * @since 2026-09-10 + */ +@Schema(description = "企业信息主查询请求 DTO") +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SysEnterpriseQueryReqDto implements Serializable { + + /** + * 企业ID(主键) + */ + @Schema(description = "企业ID(主键)") + private Long id; + + /** + * 企业名称 + */ + @Schema(description = "企业名称") + private String enterpriseName; + + /** + * 企业地址 + */ + @Schema(description = "企业地址") + private String enterpriseAddress; + + /** + * 仓库地址 + */ + @Schema(description = "仓库地址") + private String warehouseAddress; + + /** + * 联系人 + */ + @Schema(description = "联系人") + private String contactPerson; + + /** + * 法人代表 + */ + @Schema(description = "法人代表") + private String legalPerson; + + /** + * 电话1 + */ + @Schema(description = "电话1") + private String phone1; + + /** + * 电话2 + */ + @Schema(description = "电话2") + private String phone2; + + /** + * 电话3 + */ + @Schema(description = "电话3") + private String phone3; + + /** + * 经营模式 + */ + @Schema(description = "经营模式") + private String businessModel; + + /** + * 企业简介 + */ + @Schema(description = "企业简介") + private String profileIntro; + + /** + * 标题图片URL + */ + @Schema(description = "标题图片URL") + private String titleImgUrl; + + /** + * 简介图片URL + */ + @Schema(description = "简介图片URL") + private String introImgUrl; + + /** + * 营业执照URL + */ + @Schema(description = "营业执照URL") + private String businessLicenseUrl; + + /** + * 法人身份证正面URL + */ + @Schema(description = "法人身份证正面URL") + private String legalIdFrontUrl; + + /** + * 法人身份证反面URL + */ + @Schema(description = "法人身份证反面URL") + private String legalIdBackUrl; + + /** + * OCR识别统一信用社ID(或统一信用代码) + */ + @Schema(description = "OCR识别统一信用社ID(或统一信用代码)") + private String ocrCreditCodeId; + + /** + * 法人身份证号 + */ + @Schema(description = "法人身份证号") + private String idCardNumber; + + /** + * 信用额度 + */ + @Schema(description = "信用额度") + private java.math.BigDecimal creditLimit; + + /** + * 认证状态(0-待提交,1-审核中,2-已通过,3-已驳回) + */ + @Schema(description = "认证状态(0-待提交,1-审核中,2-已通过,3-已驳回)") + private Boolean auditStatus; + + /** + * 认证资料提交时间 + */ + @Schema(description = "认证资料提交时间") + private java.util.Date submitTime; + + /** + * 认证审核完成时间 + */ + @Schema(description = "认证审核完成时间") + private java.util.Date auditTime; + + /** + * 审核驳回原因 + */ + @Schema(description = "审核驳回原因") + private String rejectReason; + + /** + * 创建时间 + */ + @Schema(description = "创建时间") + private java.util.Date createdAt; + + /** + * 更新时间 + */ + @Schema(description = "更新时间") + private java.util.Date updatedAt; + + private static final long serialVersionUID = 1L; +} diff --git a/src/main/java/com/metalloop/modules/auth/model/req/SysEnterpriseReqDto.java b/src/main/java/com/metalloop/modules/auth/model/req/SysEnterpriseReqDto.java new file mode 100644 index 0000000..9bf8366 --- /dev/null +++ b/src/main/java/com/metalloop/modules/auth/model/req/SysEnterpriseReqDto.java @@ -0,0 +1,175 @@ +package com.metalloop.modules.auth.model.req; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 企业信息主请求 DTO + * + * @author yy + * @since 2026-09-10 + */ +@Schema(description = "企业信息主请求 DTO") +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SysEnterpriseReqDto implements Serializable { + + /** + * 企业ID(主键) + */ + @Schema(description = "企业ID(主键)") + private Long id; + + /** + * 企业名称 + */ + @Schema(description = "企业名称") + private String enterpriseName; + + /** + * 企业地址 + */ + @Schema(description = "企业地址") + private String enterpriseAddress; + + /** + * 仓库地址 + */ + @Schema(description = "仓库地址") + private String warehouseAddress; + + /** + * 联系人 + */ + @Schema(description = "联系人") + private String contactPerson; + + /** + * 法人代表 + */ + @Schema(description = "法人代表") + private String legalPerson; + + /** + * 电话1 + */ + @Schema(description = "电话1") + private String phone1; + + /** + * 电话2 + */ + @Schema(description = "电话2") + private String phone2; + + /** + * 电话3 + */ + @Schema(description = "电话3") + private String phone3; + + /** + * 经营模式 + */ + @Schema(description = "经营模式") + private String businessModel; + + /** + * 企业简介 + */ + @Schema(description = "企业简介") + private String profileIntro; + + /** + * 标题图片URL + */ + @Schema(description = "标题图片URL") + private String titleImgUrl; + + /** + * 简介图片URL + */ + @Schema(description = "简介图片URL") + private String introImgUrl; + + /** + * 营业执照URL + */ + @Schema(description = "营业执照URL") + private String businessLicenseUrl; + + /** + * 法人身份证正面URL + */ + @Schema(description = "法人身份证正面URL") + private String legalIdFrontUrl; + + /** + * 法人身份证反面URL + */ + @Schema(description = "法人身份证反面URL") + private String legalIdBackUrl; + + /** + * OCR识别统一信用社ID(或统一信用代码) + */ + @Schema(description = "OCR识别统一信用社ID(或统一信用代码)") + private String ocrCreditCodeId; + + /** + * 法人身份证号 + */ + @Schema(description = "法人身份证号") + private String idCardNumber; + + /** + * 信用额度 + */ + @Schema(description = "信用额度") + private java.math.BigDecimal creditLimit; + + /** + * 认证状态(0-待提交,1-审核中,2-已通过,3-已驳回) + */ + @Schema(description = "认证状态(0-待提交,1-审核中,2-已通过,3-已驳回)") + private Boolean auditStatus; + + /** + * 认证资料提交时间 + */ + @Schema(description = "认证资料提交时间") + private java.util.Date submitTime; + + /** + * 认证审核完成时间 + */ + @Schema(description = "认证审核完成时间") + private java.util.Date auditTime; + + /** + * 审核驳回原因 + */ + @Schema(description = "审核驳回原因") + private String rejectReason; + + /** + * 创建时间 + */ + @Schema(description = "创建时间") + private java.util.Date createdAt; + + /** + * 更新时间 + */ + @Schema(description = "更新时间") + private java.util.Date updatedAt; + + private static final long serialVersionUID = 1L; +} diff --git a/src/main/java/com/metalloop/modules/auth/model/req/SysEnterpriseUpdateByQueryReqDto.java b/src/main/java/com/metalloop/modules/auth/model/req/SysEnterpriseUpdateByQueryReqDto.java new file mode 100644 index 0000000..25ea2c6 --- /dev/null +++ b/src/main/java/com/metalloop/modules/auth/model/req/SysEnterpriseUpdateByQueryReqDto.java @@ -0,0 +1,35 @@ +package com.metalloop.modules.auth.model.req; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 企业信息主根据查询修改 DTO + * + * @author yy + * @since 2026-09-10 + */ +@Schema(description = "企业信息主根据查询修改 DTO") +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SysEnterpriseUpdateByQueryReqDto implements Serializable { + + /** + * 企业信息主实体 + */ + @Schema(description = "企业信息主实体") + private SysEnterpriseReqDto entity; + + /** + * 查询请求 DTO + */ + @Schema(description = "查询请求 DTO") + private SysEnterpriseQueryReqDto queryReqDto; +} diff --git a/src/main/java/com/metalloop/modules/auth/model/req/SysPermissionLockConditionReqDto.java b/src/main/java/com/metalloop/modules/auth/model/req/SysPermissionLockConditionReqDto.java new file mode 100644 index 0000000..a400671 --- /dev/null +++ b/src/main/java/com/metalloop/modules/auth/model/req/SysPermissionLockConditionReqDto.java @@ -0,0 +1,36 @@ +package com.metalloop.modules.auth.model.req; + +import com.metalloop.common.core.lock.LockConditionReqDto; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.util.List; + +/** + * 权限及幂等性锁定条件组合 DTO + * + * @author yy + * @since 2026-09-10 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SysPermissionLockConditionReqDto implements Serializable { + + /** + * 权限实体 + */ + @Schema(description = "权限实体") + private SysPermissionReqDto entity; + + /** + * 锁定条件 + */ + @Schema(description = "锁定条件") + private List> conditions; +} diff --git a/src/main/java/com/metalloop/modules/auth/model/req/SysPermissionPageQueryReqDto.java b/src/main/java/com/metalloop/modules/auth/model/req/SysPermissionPageQueryReqDto.java new file mode 100644 index 0000000..912e181 --- /dev/null +++ b/src/main/java/com/metalloop/modules/auth/model/req/SysPermissionPageQueryReqDto.java @@ -0,0 +1,47 @@ +package com.metalloop.modules.auth.model.req; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 权限分页查询请求 DTO + * + * @author yy + * @since 2026-09-10 + */ +@EqualsAndHashCode(callSuper = true) +@Data +@NoArgsConstructor +@AllArgsConstructor +@Schema(description = "权限分页查询请求 DTO") +public class SysPermissionPageQueryReqDto extends SysPermissionQueryReqDto implements Serializable { + // region 分页参数接收区域 + /** + * 当前页 + */ + @Schema(description = "当前页,默认 1") + private Long current = 1L; + + /** + * 每页显示条数,默认 10 + */ + @Schema(description = "每页显示条数,默认 10") + private Long size = 10L; + + /** + * 生成 mybatis plus 的分页对象 + * + * @param 分页元素类型 + * @return 分页对象 + */ + public Page page() { + return Page.of(current, size); + } + // ednRegion +} diff --git a/src/main/java/com/metalloop/modules/auth/model/req/SysPermissionQueryReqDto.java b/src/main/java/com/metalloop/modules/auth/model/req/SysPermissionQueryReqDto.java new file mode 100644 index 0000000..a9880bf --- /dev/null +++ b/src/main/java/com/metalloop/modules/auth/model/req/SysPermissionQueryReqDto.java @@ -0,0 +1,133 @@ +package com.metalloop.modules.auth.model.req; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 权限查询请求 DTO + * + * @author yy + * @since 2026-09-10 + */ +@Schema(description = "权限查询请求 DTO") +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SysPermissionQueryReqDto implements Serializable { + + /** + * 权限ID + */ + @Schema(description = "权限ID") + private Long id; + + /** + * 菜单名称 + */ + @Schema(description = "菜单名称") + private String name; + + /** + * 权限标识(唯一,用于后端鉴权) + */ + @Schema(description = "权限标识(唯一,用于后端鉴权)") + private String code; + + /** + * 菜单类型;0-系统 1-目录 2-菜单 3-按钮 + */ + @Schema(description = "菜单类型;0-系统 1-目录 2-菜单 3-按钮") + private Boolean type; + + /** + * 显示顺序 + */ + @Schema(description = "显示顺序") + private Integer sort; + + /** + * 父权限ID + */ + @Schema(description = "父权限ID") + private Long parentId; + + /** + * 菜单图标 + */ + @Schema(description = "菜单图标") + private String icon; + + /** + * 后端接口地址(辅助) + */ + @Schema(description = "后端接口地址(辅助)") + private String apiPath; + + /** + * 前端路由地址 + */ + @Schema(description = "前端路由地址") + private String routePath; + + /** + * 前端组件路径 + */ + @Schema(description = "前端组件路径") + private String component; + + /** + * 前端组件名 + */ + @Schema(description = "前端组件名") + private String componentName; + + /** + * 描述 + */ + @Schema(description = "描述") + private String description; + + /** + * 启用状态(0-禁用 1-启用) + */ + @Schema(description = "启用状态(0-禁用 1-启用)") + private Boolean enabled; + + /** + * 创建用户ID + */ + @Schema(description = "创建用户ID") + private Long createUser; + + /** + * 修改用户ID + */ + @Schema(description = "修改用户ID") + private Long updateUser; + + /** + * 创建时间 + */ + @Schema(description = "创建时间") + private java.util.Date createTime; + + /** + * 修改时间 + */ + @Schema(description = "修改时间") + private java.util.Date updateTime; + + /** + * 数据状态(0-正常 1-已删) + */ + @Schema(description = "数据状态(0-正常 1-已删)") + private Boolean dataStatus; + + private static final long serialVersionUID = 1L; +} diff --git a/src/main/java/com/metalloop/modules/auth/model/req/SysPermissionReqDto.java b/src/main/java/com/metalloop/modules/auth/model/req/SysPermissionReqDto.java new file mode 100644 index 0000000..40c4521 --- /dev/null +++ b/src/main/java/com/metalloop/modules/auth/model/req/SysPermissionReqDto.java @@ -0,0 +1,133 @@ +package com.metalloop.modules.auth.model.req; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 权限请求 DTO + * + * @author yy + * @since 2026-09-10 + */ +@Schema(description = "权限请求 DTO") +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SysPermissionReqDto implements Serializable { + + /** + * 权限ID + */ + @Schema(description = "权限ID") + private Long id; + + /** + * 菜单名称 + */ + @Schema(description = "菜单名称") + private String name; + + /** + * 权限标识(唯一,用于后端鉴权) + */ + @Schema(description = "权限标识(唯一,用于后端鉴权)") + private String code; + + /** + * 菜单类型;0-系统 1-目录 2-菜单 3-按钮 + */ + @Schema(description = "菜单类型;0-系统 1-目录 2-菜单 3-按钮") + private Boolean type; + + /** + * 显示顺序 + */ + @Schema(description = "显示顺序") + private Integer sort; + + /** + * 父权限ID + */ + @Schema(description = "父权限ID") + private Long parentId; + + /** + * 菜单图标 + */ + @Schema(description = "菜单图标") + private String icon; + + /** + * 后端接口地址(辅助) + */ + @Schema(description = "后端接口地址(辅助)") + private String apiPath; + + /** + * 前端路由地址 + */ + @Schema(description = "前端路由地址") + private String routePath; + + /** + * 前端组件路径 + */ + @Schema(description = "前端组件路径") + private String component; + + /** + * 前端组件名 + */ + @Schema(description = "前端组件名") + private String componentName; + + /** + * 描述 + */ + @Schema(description = "描述") + private String description; + + /** + * 启用状态(0-禁用 1-启用) + */ + @Schema(description = "启用状态(0-禁用 1-启用)") + private Boolean enabled; + + /** + * 创建用户ID + */ + @Schema(description = "创建用户ID") + private Long createUser; + + /** + * 修改用户ID + */ + @Schema(description = "修改用户ID") + private Long updateUser; + + /** + * 创建时间 + */ + @Schema(description = "创建时间") + private java.util.Date createTime; + + /** + * 修改时间 + */ + @Schema(description = "修改时间") + private java.util.Date updateTime; + + /** + * 数据状态(0-正常 1-已删) + */ + @Schema(description = "数据状态(0-正常 1-已删)") + private Boolean dataStatus; + + private static final long serialVersionUID = 1L; +} diff --git a/src/main/java/com/metalloop/modules/auth/model/req/SysPermissionUpdateByQueryReqDto.java b/src/main/java/com/metalloop/modules/auth/model/req/SysPermissionUpdateByQueryReqDto.java new file mode 100644 index 0000000..c66d5f5 --- /dev/null +++ b/src/main/java/com/metalloop/modules/auth/model/req/SysPermissionUpdateByQueryReqDto.java @@ -0,0 +1,35 @@ +package com.metalloop.modules.auth.model.req; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 权限根据查询修改 DTO + * + * @author yy + * @since 2026-09-10 + */ +@Schema(description = "权限根据查询修改 DTO") +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SysPermissionUpdateByQueryReqDto implements Serializable { + + /** + * 权限实体 + */ + @Schema(description = "权限实体") + private SysPermissionReqDto entity; + + /** + * 查询请求 DTO + */ + @Schema(description = "查询请求 DTO") + private SysPermissionQueryReqDto queryReqDto; +} diff --git a/src/main/java/com/metalloop/modules/auth/model/req/SysRoleLockConditionReqDto.java b/src/main/java/com/metalloop/modules/auth/model/req/SysRoleLockConditionReqDto.java new file mode 100644 index 0000000..bdea528 --- /dev/null +++ b/src/main/java/com/metalloop/modules/auth/model/req/SysRoleLockConditionReqDto.java @@ -0,0 +1,36 @@ +package com.metalloop.modules.auth.model.req; + +import com.metalloop.common.core.lock.LockConditionReqDto; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.util.List; + +/** + * 角色及幂等性锁定条件组合 DTO + * + * @author yy + * @since 2026-09-10 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SysRoleLockConditionReqDto implements Serializable { + + /** + * 角色实体 + */ + @Schema(description = "角色实体") + private SysRoleReqDto entity; + + /** + * 锁定条件 + */ + @Schema(description = "锁定条件") + private List> conditions; +} diff --git a/src/main/java/com/metalloop/modules/auth/model/req/SysRolePageQueryReqDto.java b/src/main/java/com/metalloop/modules/auth/model/req/SysRolePageQueryReqDto.java new file mode 100644 index 0000000..68fee90 --- /dev/null +++ b/src/main/java/com/metalloop/modules/auth/model/req/SysRolePageQueryReqDto.java @@ -0,0 +1,47 @@ +package com.metalloop.modules.auth.model.req; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 角色分页查询请求 DTO + * + * @author yy + * @since 2026-09-10 + */ +@EqualsAndHashCode(callSuper = true) +@Data +@NoArgsConstructor +@AllArgsConstructor +@Schema(description = "角色分页查询请求 DTO") +public class SysRolePageQueryReqDto extends SysRoleQueryReqDto implements Serializable { + // region 分页参数接收区域 + /** + * 当前页 + */ + @Schema(description = "当前页,默认 1") + private Long current = 1L; + + /** + * 每页显示条数,默认 10 + */ + @Schema(description = "每页显示条数,默认 10") + private Long size = 10L; + + /** + * 生成 mybatis plus 的分页对象 + * + * @param 分页元素类型 + * @return 分页对象 + */ + public Page page() { + return Page.of(current, size); + } + // ednRegion +} diff --git a/src/main/java/com/metalloop/modules/auth/model/req/SysRolePermissionLockConditionReqDto.java b/src/main/java/com/metalloop/modules/auth/model/req/SysRolePermissionLockConditionReqDto.java new file mode 100644 index 0000000..5339018 --- /dev/null +++ b/src/main/java/com/metalloop/modules/auth/model/req/SysRolePermissionLockConditionReqDto.java @@ -0,0 +1,36 @@ +package com.metalloop.modules.auth.model.req; + +import com.metalloop.common.core.lock.LockConditionReqDto; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.util.List; + +/** + * 角色-权限关联及幂等性锁定条件组合 DTO + * + * @author yy + * @since 2026-09-10 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SysRolePermissionLockConditionReqDto implements Serializable { + + /** + * 角色-权限关联实体 + */ + @Schema(description = "角色-权限关联实体") + private SysRolePermissionReqDto entity; + + /** + * 锁定条件 + */ + @Schema(description = "锁定条件") + private List> conditions; +} diff --git a/src/main/java/com/metalloop/modules/auth/model/req/SysRolePermissionPageQueryReqDto.java b/src/main/java/com/metalloop/modules/auth/model/req/SysRolePermissionPageQueryReqDto.java new file mode 100644 index 0000000..f6f5f83 --- /dev/null +++ b/src/main/java/com/metalloop/modules/auth/model/req/SysRolePermissionPageQueryReqDto.java @@ -0,0 +1,47 @@ +package com.metalloop.modules.auth.model.req; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 角色-权限关联分页查询请求 DTO + * + * @author yy + * @since 2026-09-10 + */ +@EqualsAndHashCode(callSuper = true) +@Data +@NoArgsConstructor +@AllArgsConstructor +@Schema(description = "角色-权限关联分页查询请求 DTO") +public class SysRolePermissionPageQueryReqDto extends SysRolePermissionQueryReqDto implements Serializable { + // region 分页参数接收区域 + /** + * 当前页 + */ + @Schema(description = "当前页,默认 1") + private Long current = 1L; + + /** + * 每页显示条数,默认 10 + */ + @Schema(description = "每页显示条数,默认 10") + private Long size = 10L; + + /** + * 生成 mybatis plus 的分页对象 + * + * @param 分页元素类型 + * @return 分页对象 + */ + public Page page() { + return Page.of(current, size); + } + // ednRegion +} diff --git a/src/main/java/com/metalloop/modules/auth/model/req/SysRolePermissionQueryReqDto.java b/src/main/java/com/metalloop/modules/auth/model/req/SysRolePermissionQueryReqDto.java new file mode 100644 index 0000000..370239f --- /dev/null +++ b/src/main/java/com/metalloop/modules/auth/model/req/SysRolePermissionQueryReqDto.java @@ -0,0 +1,43 @@ +package com.metalloop.modules.auth.model.req; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 角色-权限关联查询请求 DTO + * + * @author yy + * @since 2026-09-10 + */ +@Schema(description = "角色-权限关联查询请求 DTO") +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SysRolePermissionQueryReqDto implements Serializable { + + /** + * 自增编号 + */ + @Schema(description = "自增编号") + private Long id; + + /** + * 角色ID + */ + @Schema(description = "角色ID") + private Long roleId; + + /** + * 权限ID + */ + @Schema(description = "权限ID") + private Long permissionId; + + private static final long serialVersionUID = 1L; +} diff --git a/src/main/java/com/metalloop/modules/auth/model/req/SysRolePermissionReqDto.java b/src/main/java/com/metalloop/modules/auth/model/req/SysRolePermissionReqDto.java new file mode 100644 index 0000000..f8a6c37 --- /dev/null +++ b/src/main/java/com/metalloop/modules/auth/model/req/SysRolePermissionReqDto.java @@ -0,0 +1,43 @@ +package com.metalloop.modules.auth.model.req; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 角色-权限关联请求 DTO + * + * @author yy + * @since 2026-09-10 + */ +@Schema(description = "角色-权限关联请求 DTO") +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SysRolePermissionReqDto implements Serializable { + + /** + * 自增编号 + */ + @Schema(description = "自增编号") + private Long id; + + /** + * 角色ID + */ + @Schema(description = "角色ID") + private Long roleId; + + /** + * 权限ID + */ + @Schema(description = "权限ID") + private Long permissionId; + + private static final long serialVersionUID = 1L; +} diff --git a/src/main/java/com/metalloop/modules/auth/model/req/SysRolePermissionUpdateByQueryReqDto.java b/src/main/java/com/metalloop/modules/auth/model/req/SysRolePermissionUpdateByQueryReqDto.java new file mode 100644 index 0000000..9abae50 --- /dev/null +++ b/src/main/java/com/metalloop/modules/auth/model/req/SysRolePermissionUpdateByQueryReqDto.java @@ -0,0 +1,35 @@ +package com.metalloop.modules.auth.model.req; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 角色-权限关联根据查询修改 DTO + * + * @author yy + * @since 2026-09-10 + */ +@Schema(description = "角色-权限关联根据查询修改 DTO") +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SysRolePermissionUpdateByQueryReqDto implements Serializable { + + /** + * 角色-权限关联实体 + */ + @Schema(description = "角色-权限关联实体") + private SysRolePermissionReqDto entity; + + /** + * 查询请求 DTO + */ + @Schema(description = "查询请求 DTO") + private SysRolePermissionQueryReqDto queryReqDto; +} diff --git a/src/main/java/com/metalloop/modules/auth/model/req/SysRoleQueryReqDto.java b/src/main/java/com/metalloop/modules/auth/model/req/SysRoleQueryReqDto.java new file mode 100644 index 0000000..224fbdd --- /dev/null +++ b/src/main/java/com/metalloop/modules/auth/model/req/SysRoleQueryReqDto.java @@ -0,0 +1,91 @@ +package com.metalloop.modules.auth.model.req; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 角色查询请求 DTO + * + * @author yy + * @since 2026-09-10 + */ +@Schema(description = "角色查询请求 DTO") +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SysRoleQueryReqDto implements Serializable { + + /** + * 角色id + */ + @Schema(description = "角色id") + private Long id; + + /** + * 角色名称 + */ + @Schema(description = "角色名称") + private String name; + + /** + * 角色权限字符串 + */ + @Schema(description = "角色权限字符串") + private String code; + + /** + * 启用状态:指示角色是启用还是禁用。禁用角色无法进行授权。如果已启用,则为true,否则为false + */ + @Schema(description = "启用状态:指示角色是启用还是禁用。禁用角色无法进行授权。如果已启用,则为true,否则为false") + private Boolean enabled; + + /** + * 角色描述 + */ + @Schema(description = "角色描述") + private String description; + + /** + * 创建人;用户表ID + */ + @Schema(description = "创建人;用户表ID") + private Long createUser; + + /** + * 创建人所属机构;组织机构表ID + */ + @Schema(description = "创建人所属机构;组织机构表ID") + private Long createOrg; + + /** + * 创建时间;yyyy-MM-dd HH:mm:ss + */ + @Schema(description = "创建时间;yyyy-MM-dd HH:mm:ss") + private java.util.Date createTime; + + /** + * 修改时间;yyyy-MM-dd HH:mm:ss + */ + @Schema(description = "修改时间;yyyy-MM-dd HH:mm:ss") + private java.util.Date updateTime; + + /** + * 修改用户ID;对应用户表的ID字段 + */ + @Schema(description = "修改用户ID;对应用户表的ID字段") + private Long updateUser; + + /** + * 数据状态;0-正常 1-已删 默认值为0 + */ + @Schema(description = "数据状态;0-正常 1-已删 默认值为0") + private String dataStatus; + + private static final long serialVersionUID = 1L; +} diff --git a/src/main/java/com/metalloop/modules/auth/model/req/SysRoleReqDto.java b/src/main/java/com/metalloop/modules/auth/model/req/SysRoleReqDto.java new file mode 100644 index 0000000..9916f6f --- /dev/null +++ b/src/main/java/com/metalloop/modules/auth/model/req/SysRoleReqDto.java @@ -0,0 +1,91 @@ +package com.metalloop.modules.auth.model.req; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 角色请求 DTO + * + * @author yy + * @since 2026-09-10 + */ +@Schema(description = "角色请求 DTO") +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SysRoleReqDto implements Serializable { + + /** + * 角色id + */ + @Schema(description = "角色id") + private Long id; + + /** + * 角色名称 + */ + @Schema(description = "角色名称") + private String name; + + /** + * 角色权限字符串 + */ + @Schema(description = "角色权限字符串") + private String code; + + /** + * 启用状态:指示角色是启用还是禁用。禁用角色无法进行授权。如果已启用,则为true,否则为false + */ + @Schema(description = "启用状态:指示角色是启用还是禁用。禁用角色无法进行授权。如果已启用,则为true,否则为false") + private Boolean enabled; + + /** + * 角色描述 + */ + @Schema(description = "角色描述") + private String description; + + /** + * 创建人;用户表ID + */ + @Schema(description = "创建人;用户表ID") + private Long createUser; + + /** + * 创建人所属机构;组织机构表ID + */ + @Schema(description = "创建人所属机构;组织机构表ID") + private Long createOrg; + + /** + * 创建时间;yyyy-MM-dd HH:mm:ss + */ + @Schema(description = "创建时间;yyyy-MM-dd HH:mm:ss") + private java.util.Date createTime; + + /** + * 修改时间;yyyy-MM-dd HH:mm:ss + */ + @Schema(description = "修改时间;yyyy-MM-dd HH:mm:ss") + private java.util.Date updateTime; + + /** + * 修改用户ID;对应用户表的ID字段 + */ + @Schema(description = "修改用户ID;对应用户表的ID字段") + private Long updateUser; + + /** + * 数据状态;0-正常 1-已删 默认值为0 + */ + @Schema(description = "数据状态;0-正常 1-已删 默认值为0") + private String dataStatus; + + private static final long serialVersionUID = 1L; +} diff --git a/src/main/java/com/metalloop/modules/auth/model/req/SysRoleUpdateByQueryReqDto.java b/src/main/java/com/metalloop/modules/auth/model/req/SysRoleUpdateByQueryReqDto.java new file mode 100644 index 0000000..687b6f6 --- /dev/null +++ b/src/main/java/com/metalloop/modules/auth/model/req/SysRoleUpdateByQueryReqDto.java @@ -0,0 +1,35 @@ +package com.metalloop.modules.auth.model.req; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 角色根据查询修改 DTO + * + * @author yy + * @since 2026-09-10 + */ +@Schema(description = "角色根据查询修改 DTO") +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SysRoleUpdateByQueryReqDto implements Serializable { + + /** + * 角色实体 + */ + @Schema(description = "角色实体") + private SysRoleReqDto entity; + + /** + * 查询请求 DTO + */ + @Schema(description = "查询请求 DTO") + private SysRoleQueryReqDto queryReqDto; +} diff --git a/src/main/java/com/metalloop/modules/auth/model/req/SysUserLockConditionReqDto.java b/src/main/java/com/metalloop/modules/auth/model/req/SysUserLockConditionReqDto.java new file mode 100644 index 0000000..845f8f2 --- /dev/null +++ b/src/main/java/com/metalloop/modules/auth/model/req/SysUserLockConditionReqDto.java @@ -0,0 +1,36 @@ +package com.metalloop.modules.auth.model.req; + +import com.metalloop.common.core.lock.LockConditionReqDto; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.util.List; + +/** + * 用户及幂等性锁定条件组合 DTO + * + * @author yy + * @since 2026-09-10 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SysUserLockConditionReqDto implements Serializable { + + /** + * 用户实体 + */ + @Schema(description = "用户实体") + private SysUserReqDto entity; + + /** + * 锁定条件 + */ + @Schema(description = "锁定条件") + private List> conditions; +} diff --git a/src/main/java/com/metalloop/modules/auth/model/req/SysUserPageQueryReqDto.java b/src/main/java/com/metalloop/modules/auth/model/req/SysUserPageQueryReqDto.java new file mode 100644 index 0000000..e9a5c0c --- /dev/null +++ b/src/main/java/com/metalloop/modules/auth/model/req/SysUserPageQueryReqDto.java @@ -0,0 +1,47 @@ +package com.metalloop.modules.auth.model.req; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 用户分页查询请求 DTO + * + * @author yy + * @since 2026-09-10 + */ +@EqualsAndHashCode(callSuper = true) +@Data +@NoArgsConstructor +@AllArgsConstructor +@Schema(description = "用户分页查询请求 DTO") +public class SysUserPageQueryReqDto extends SysUserQueryReqDto implements Serializable { + // region 分页参数接收区域 + /** + * 当前页 + */ + @Schema(description = "当前页,默认 1") + private Long current = 1L; + + /** + * 每页显示条数,默认 10 + */ + @Schema(description = "每页显示条数,默认 10") + private Long size = 10L; + + /** + * 生成 mybatis plus 的分页对象 + * + * @param 分页元素类型 + * @return 分页对象 + */ + public Page page() { + return Page.of(current, size); + } + // ednRegion +} diff --git a/src/main/java/com/metalloop/modules/auth/model/req/SysUserQueryReqDto.java b/src/main/java/com/metalloop/modules/auth/model/req/SysUserQueryReqDto.java new file mode 100644 index 0000000..2a3be9b --- /dev/null +++ b/src/main/java/com/metalloop/modules/auth/model/req/SysUserQueryReqDto.java @@ -0,0 +1,79 @@ +package com.metalloop.modules.auth.model.req; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 用户查询请求 DTO + * + * @author yy + * @since 2026-09-10 + */ +@Schema(description = "用户查询请求 DTO") +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SysUserQueryReqDto implements Serializable { + + /** + * 用户ID(主键) + */ + @Schema(description = "用户ID(主键)") + private Long id; + + /** + * 用户名(登录账号) + */ + @Schema(description = "用户名(登录账号)") + private String username; + + /** + * 密码(存储哈希值) + */ + @Schema(description = "密码(存储哈希值)") + private String password; + + /** + * 认证状态(0-未认证,1-认证中,2-已认证) + */ + @Schema(description = "认证状态(0-未认证,1-认证中,2-已认证)") + private Boolean authStatus; + + /** + * 关联的企业ID(外键,指向企业表) + */ + @Schema(description = "关联的企业ID(外键,指向企业表)") + private Integer enterpriseId; + + /** + * 手机号 + */ + @Schema(description = "手机号") + private String phone; + + /** + * 邮箱 + */ + @Schema(description = "邮箱") + private String email; + + /** + * 用户状态(0-禁用,1-正常) + */ + @Schema(description = "用户状态(0-禁用,1-正常)") + private Boolean userStatus; + + /** + * 注册时间 + */ + @Schema(description = "注册时间") + private java.util.Date regTime; + + private static final long serialVersionUID = 1L; +} diff --git a/src/main/java/com/metalloop/modules/auth/model/req/SysUserReqDto.java b/src/main/java/com/metalloop/modules/auth/model/req/SysUserReqDto.java new file mode 100644 index 0000000..017dd17 --- /dev/null +++ b/src/main/java/com/metalloop/modules/auth/model/req/SysUserReqDto.java @@ -0,0 +1,79 @@ +package com.metalloop.modules.auth.model.req; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 用户请求 DTO + * + * @author yy + * @since 2026-09-10 + */ +@Schema(description = "用户请求 DTO") +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SysUserReqDto implements Serializable { + + /** + * 用户ID(主键) + */ + @Schema(description = "用户ID(主键)") + private Long id; + + /** + * 用户名(登录账号) + */ + @Schema(description = "用户名(登录账号)") + private String username; + + /** + * 密码(存储哈希值) + */ + @Schema(description = "密码(存储哈希值)") + private String password; + + /** + * 认证状态(0-未认证,1-认证中,2-已认证) + */ + @Schema(description = "认证状态(0-未认证,1-认证中,2-已认证)") + private Boolean authStatus; + + /** + * 关联的企业ID(外键,指向企业表) + */ + @Schema(description = "关联的企业ID(外键,指向企业表)") + private Integer enterpriseId; + + /** + * 手机号 + */ + @Schema(description = "手机号") + private String phone; + + /** + * 邮箱 + */ + @Schema(description = "邮箱") + private String email; + + /** + * 用户状态(0-禁用,1-正常) + */ + @Schema(description = "用户状态(0-禁用,1-正常)") + private Boolean userStatus; + + /** + * 注册时间 + */ + @Schema(description = "注册时间") + private java.util.Date regTime; + + private static final long serialVersionUID = 1L; +} diff --git a/src/main/java/com/metalloop/modules/auth/model/req/SysUserRoleLockConditionReqDto.java b/src/main/java/com/metalloop/modules/auth/model/req/SysUserRoleLockConditionReqDto.java new file mode 100644 index 0000000..5bc6351 --- /dev/null +++ b/src/main/java/com/metalloop/modules/auth/model/req/SysUserRoleLockConditionReqDto.java @@ -0,0 +1,36 @@ +package com.metalloop.modules.auth.model.req; + +import com.metalloop.common.core.lock.LockConditionReqDto; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.util.List; + +/** + * 用户与角色关联及幂等性锁定条件组合 DTO + * + * @author yy + * @since 2026-09-10 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SysUserRoleLockConditionReqDto implements Serializable { + + /** + * 用户与角色关联实体 + */ + @Schema(description = "用户与角色关联实体") + private SysUserRoleReqDto entity; + + /** + * 锁定条件 + */ + @Schema(description = "锁定条件") + private List> conditions; +} diff --git a/src/main/java/com/metalloop/modules/auth/model/req/SysUserRolePageQueryReqDto.java b/src/main/java/com/metalloop/modules/auth/model/req/SysUserRolePageQueryReqDto.java new file mode 100644 index 0000000..d1f25a5 --- /dev/null +++ b/src/main/java/com/metalloop/modules/auth/model/req/SysUserRolePageQueryReqDto.java @@ -0,0 +1,47 @@ +package com.metalloop.modules.auth.model.req; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 用户与角色关联分页查询请求 DTO + * + * @author yy + * @since 2026-09-10 + */ +@EqualsAndHashCode(callSuper = true) +@Data +@NoArgsConstructor +@AllArgsConstructor +@Schema(description = "用户与角色关联分页查询请求 DTO") +public class SysUserRolePageQueryReqDto extends SysUserRoleQueryReqDto implements Serializable { + // region 分页参数接收区域 + /** + * 当前页 + */ + @Schema(description = "当前页,默认 1") + private Long current = 1L; + + /** + * 每页显示条数,默认 10 + */ + @Schema(description = "每页显示条数,默认 10") + private Long size = 10L; + + /** + * 生成 mybatis plus 的分页对象 + * + * @param 分页元素类型 + * @return 分页对象 + */ + public Page page() { + return Page.of(current, size); + } + // ednRegion +} diff --git a/src/main/java/com/metalloop/modules/auth/model/req/SysUserRoleQueryReqDto.java b/src/main/java/com/metalloop/modules/auth/model/req/SysUserRoleQueryReqDto.java new file mode 100644 index 0000000..2c1c0c4 --- /dev/null +++ b/src/main/java/com/metalloop/modules/auth/model/req/SysUserRoleQueryReqDto.java @@ -0,0 +1,49 @@ +package com.metalloop.modules.auth.model.req; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 用户与角色关联查询请求 DTO + * + * @author yy + * @since 2026-09-10 + */ +@Schema(description = "用户与角色关联查询请求 DTO") +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SysUserRoleQueryReqDto implements Serializable { + + /** + * 用户ID + */ + @Schema(description = "用户ID") + private Integer userId; + + /** + * 角色ID + */ + @Schema(description = "角色ID") + private Integer roleId; + + /** + * 分配时间 + */ + @Schema(description = "分配时间") + private java.util.Date createdAt; + + /** + * + */ + @Schema(description = "") + private Long id; + + private static final long serialVersionUID = 1L; +} diff --git a/src/main/java/com/metalloop/modules/auth/model/req/SysUserRoleReqDto.java b/src/main/java/com/metalloop/modules/auth/model/req/SysUserRoleReqDto.java new file mode 100644 index 0000000..619f505 --- /dev/null +++ b/src/main/java/com/metalloop/modules/auth/model/req/SysUserRoleReqDto.java @@ -0,0 +1,49 @@ +package com.metalloop.modules.auth.model.req; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 用户与角色关联请求 DTO + * + * @author yy + * @since 2026-09-10 + */ +@Schema(description = "用户与角色关联请求 DTO") +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SysUserRoleReqDto implements Serializable { + + /** + * 用户ID + */ + @Schema(description = "用户ID") + private Integer userId; + + /** + * 角色ID + */ + @Schema(description = "角色ID") + private Integer roleId; + + /** + * 分配时间 + */ + @Schema(description = "分配时间") + private java.util.Date createdAt; + + /** + * + */ + @Schema(description = "") + private Long id; + + private static final long serialVersionUID = 1L; +} diff --git a/src/main/java/com/metalloop/modules/auth/model/req/SysUserRoleUpdateByQueryReqDto.java b/src/main/java/com/metalloop/modules/auth/model/req/SysUserRoleUpdateByQueryReqDto.java new file mode 100644 index 0000000..6abf60b --- /dev/null +++ b/src/main/java/com/metalloop/modules/auth/model/req/SysUserRoleUpdateByQueryReqDto.java @@ -0,0 +1,35 @@ +package com.metalloop.modules.auth.model.req; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 用户与角色关联根据查询修改 DTO + * + * @author yy + * @since 2026-09-10 + */ +@Schema(description = "用户与角色关联根据查询修改 DTO") +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SysUserRoleUpdateByQueryReqDto implements Serializable { + + /** + * 用户与角色关联实体 + */ + @Schema(description = "用户与角色关联实体") + private SysUserRoleReqDto entity; + + /** + * 查询请求 DTO + */ + @Schema(description = "查询请求 DTO") + private SysUserRoleQueryReqDto queryReqDto; +} diff --git a/src/main/java/com/metalloop/modules/auth/model/req/SysUserUpdateByQueryReqDto.java b/src/main/java/com/metalloop/modules/auth/model/req/SysUserUpdateByQueryReqDto.java new file mode 100644 index 0000000..147e211 --- /dev/null +++ b/src/main/java/com/metalloop/modules/auth/model/req/SysUserUpdateByQueryReqDto.java @@ -0,0 +1,35 @@ +package com.metalloop.modules.auth.model.req; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 用户根据查询修改 DTO + * + * @author yy + * @since 2026-09-10 + */ +@Schema(description = "用户根据查询修改 DTO") +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SysUserUpdateByQueryReqDto implements Serializable { + + /** + * 用户实体 + */ + @Schema(description = "用户实体") + private SysUserReqDto entity; + + /** + * 查询请求 DTO + */ + @Schema(description = "查询请求 DTO") + private SysUserQueryReqDto queryReqDto; +} diff --git a/src/main/java/com/metalloop/modules/auth/model/resp/AuthenticationResponse.java b/src/main/java/com/metalloop/modules/auth/model/resp/AuthenticationResponse.java new file mode 100644 index 0000000..18bdf5f --- /dev/null +++ b/src/main/java/com/metalloop/modules/auth/model/resp/AuthenticationResponse.java @@ -0,0 +1,29 @@ +package com.metalloop.modules.auth.model.resp; + +import lombok.Data; + +/** + * 认证响应 + * + * @author zhaowenhao + * @since 2023-03-19 + */ +@Data +public class AuthenticationResponse { + + /** + * 访问令牌 + */ + private String accessToken; + + /** + * 用户登录名 + */ + private String username; + + /** + * 用户ID + */ + private String userId; + +} diff --git a/src/main/java/com/metalloop/modules/auth/model/resp/SysEnterpriseImageRespDto.java b/src/main/java/com/metalloop/modules/auth/model/resp/SysEnterpriseImageRespDto.java new file mode 100644 index 0000000..442963c --- /dev/null +++ b/src/main/java/com/metalloop/modules/auth/model/resp/SysEnterpriseImageRespDto.java @@ -0,0 +1,55 @@ +package com.metalloop.modules.auth.model.resp; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 企业图片附件响应 DTO + * + * @author yy + * @since 2026-09-10 + */ +@Schema(description = "企业图片附件响应 DTO") +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SysEnterpriseImageRespDto implements Serializable { + + /** + * 图片ID(主键) + */ + @Schema(description = "图片ID(主键)") + private Long id; + + /** + * 所属企业ID + */ + @Schema(description = "所属企业ID") + private Integer enterpriseId; + + /** + * 图片类型(0-公司环境,1-资质证书,2-生产设备,3-主营产品) + */ + @Schema(description = "图片类型(0-公司环境,1-资质证书,2-生产设备,3-主营产品)") + private Boolean imageType; + + /** + * 图片存储URL + */ + @Schema(description = "图片存储URL") + private String imageUrl; + + /** + * 创建时间 + */ + @Schema(description = "创建时间") + private java.util.Date createdAt; + + private static final long serialVersionUID = 1L; +} diff --git a/src/main/java/com/metalloop/modules/auth/model/resp/SysEnterpriseRespDto.java b/src/main/java/com/metalloop/modules/auth/model/resp/SysEnterpriseRespDto.java new file mode 100644 index 0000000..4c8bd33 --- /dev/null +++ b/src/main/java/com/metalloop/modules/auth/model/resp/SysEnterpriseRespDto.java @@ -0,0 +1,175 @@ +package com.metalloop.modules.auth.model.resp; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 企业信息主响应 DTO + * + * @author yy + * @since 2026-09-10 + */ +@Schema(description = "企业信息主响应 DTO") +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SysEnterpriseRespDto implements Serializable { + + /** + * 企业ID(主键) + */ + @Schema(description = "企业ID(主键)") + private Long id; + + /** + * 企业名称 + */ + @Schema(description = "企业名称") + private String enterpriseName; + + /** + * 企业地址 + */ + @Schema(description = "企业地址") + private String enterpriseAddress; + + /** + * 仓库地址 + */ + @Schema(description = "仓库地址") + private String warehouseAddress; + + /** + * 联系人 + */ + @Schema(description = "联系人") + private String contactPerson; + + /** + * 法人代表 + */ + @Schema(description = "法人代表") + private String legalPerson; + + /** + * 电话1 + */ + @Schema(description = "电话1") + private String phone1; + + /** + * 电话2 + */ + @Schema(description = "电话2") + private String phone2; + + /** + * 电话3 + */ + @Schema(description = "电话3") + private String phone3; + + /** + * 经营模式 + */ + @Schema(description = "经营模式") + private String businessModel; + + /** + * 企业简介 + */ + @Schema(description = "企业简介") + private String profileIntro; + + /** + * 标题图片URL + */ + @Schema(description = "标题图片URL") + private String titleImgUrl; + + /** + * 简介图片URL + */ + @Schema(description = "简介图片URL") + private String introImgUrl; + + /** + * 营业执照URL + */ + @Schema(description = "营业执照URL") + private String businessLicenseUrl; + + /** + * 法人身份证正面URL + */ + @Schema(description = "法人身份证正面URL") + private String legalIdFrontUrl; + + /** + * 法人身份证反面URL + */ + @Schema(description = "法人身份证反面URL") + private String legalIdBackUrl; + + /** + * OCR识别统一信用社ID(或统一信用代码) + */ + @Schema(description = "OCR识别统一信用社ID(或统一信用代码)") + private String ocrCreditCodeId; + + /** + * 法人身份证号 + */ + @Schema(description = "法人身份证号") + private String idCardNumber; + + /** + * 信用额度 + */ + @Schema(description = "信用额度") + private java.math.BigDecimal creditLimit; + + /** + * 认证状态(0-待提交,1-审核中,2-已通过,3-已驳回) + */ + @Schema(description = "认证状态(0-待提交,1-审核中,2-已通过,3-已驳回)") + private Boolean auditStatus; + + /** + * 认证资料提交时间 + */ + @Schema(description = "认证资料提交时间") + private java.util.Date submitTime; + + /** + * 认证审核完成时间 + */ + @Schema(description = "认证审核完成时间") + private java.util.Date auditTime; + + /** + * 审核驳回原因 + */ + @Schema(description = "审核驳回原因") + private String rejectReason; + + /** + * 创建时间 + */ + @Schema(description = "创建时间") + private java.util.Date createdAt; + + /** + * 更新时间 + */ + @Schema(description = "更新时间") + private java.util.Date updatedAt; + + private static final long serialVersionUID = 1L; +} diff --git a/src/main/java/com/metalloop/modules/auth/model/resp/SysPermissionRespDto.java b/src/main/java/com/metalloop/modules/auth/model/resp/SysPermissionRespDto.java new file mode 100644 index 0000000..3a63e48 --- /dev/null +++ b/src/main/java/com/metalloop/modules/auth/model/resp/SysPermissionRespDto.java @@ -0,0 +1,133 @@ +package com.metalloop.modules.auth.model.resp; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 权限响应 DTO + * + * @author yy + * @since 2026-09-10 + */ +@Schema(description = "权限响应 DTO") +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SysPermissionRespDto implements Serializable { + + /** + * 权限ID + */ + @Schema(description = "权限ID") + private Long id; + + /** + * 菜单名称 + */ + @Schema(description = "菜单名称") + private String name; + + /** + * 权限标识(唯一,用于后端鉴权) + */ + @Schema(description = "权限标识(唯一,用于后端鉴权)") + private String code; + + /** + * 菜单类型;0-系统 1-目录 2-菜单 3-按钮 + */ + @Schema(description = "菜单类型;0-系统 1-目录 2-菜单 3-按钮") + private Boolean type; + + /** + * 显示顺序 + */ + @Schema(description = "显示顺序") + private Integer sort; + + /** + * 父权限ID + */ + @Schema(description = "父权限ID") + private Long parentId; + + /** + * 菜单图标 + */ + @Schema(description = "菜单图标") + private String icon; + + /** + * 后端接口地址(辅助) + */ + @Schema(description = "后端接口地址(辅助)") + private String apiPath; + + /** + * 前端路由地址 + */ + @Schema(description = "前端路由地址") + private String routePath; + + /** + * 前端组件路径 + */ + @Schema(description = "前端组件路径") + private String component; + + /** + * 前端组件名 + */ + @Schema(description = "前端组件名") + private String componentName; + + /** + * 描述 + */ + @Schema(description = "描述") + private String description; + + /** + * 启用状态(0-禁用 1-启用) + */ + @Schema(description = "启用状态(0-禁用 1-启用)") + private Boolean enabled; + + /** + * 创建用户ID + */ + @Schema(description = "创建用户ID") + private Long createUser; + + /** + * 修改用户ID + */ + @Schema(description = "修改用户ID") + private Long updateUser; + + /** + * 创建时间 + */ + @Schema(description = "创建时间") + private java.util.Date createTime; + + /** + * 修改时间 + */ + @Schema(description = "修改时间") + private java.util.Date updateTime; + + /** + * 数据状态(0-正常 1-已删) + */ + @Schema(description = "数据状态(0-正常 1-已删)") + private Boolean dataStatus; + + private static final long serialVersionUID = 1L; +} diff --git a/src/main/java/com/metalloop/modules/auth/model/resp/SysRolePermissionRespDto.java b/src/main/java/com/metalloop/modules/auth/model/resp/SysRolePermissionRespDto.java new file mode 100644 index 0000000..b0eafe0 --- /dev/null +++ b/src/main/java/com/metalloop/modules/auth/model/resp/SysRolePermissionRespDto.java @@ -0,0 +1,43 @@ +package com.metalloop.modules.auth.model.resp; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 角色-权限关联响应 DTO + * + * @author yy + * @since 2026-09-10 + */ +@Schema(description = "角色-权限关联响应 DTO") +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SysRolePermissionRespDto implements Serializable { + + /** + * 自增编号 + */ + @Schema(description = "自增编号") + private Long id; + + /** + * 角色ID + */ + @Schema(description = "角色ID") + private Long roleId; + + /** + * 权限ID + */ + @Schema(description = "权限ID") + private Long permissionId; + + private static final long serialVersionUID = 1L; +} diff --git a/src/main/java/com/metalloop/modules/auth/model/resp/SysRoleRespDto.java b/src/main/java/com/metalloop/modules/auth/model/resp/SysRoleRespDto.java new file mode 100644 index 0000000..18d17d9 --- /dev/null +++ b/src/main/java/com/metalloop/modules/auth/model/resp/SysRoleRespDto.java @@ -0,0 +1,91 @@ +package com.metalloop.modules.auth.model.resp; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 角色响应 DTO + * + * @author yy + * @since 2026-09-10 + */ +@Schema(description = "角色响应 DTO") +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SysRoleRespDto implements Serializable { + + /** + * 角色id + */ + @Schema(description = "角色id") + private Long id; + + /** + * 角色名称 + */ + @Schema(description = "角色名称") + private String name; + + /** + * 角色权限字符串 + */ + @Schema(description = "角色权限字符串") + private String code; + + /** + * 启用状态:指示角色是启用还是禁用。禁用角色无法进行授权。如果已启用,则为true,否则为false + */ + @Schema(description = "启用状态:指示角色是启用还是禁用。禁用角色无法进行授权。如果已启用,则为true,否则为false") + private Boolean enabled; + + /** + * 角色描述 + */ + @Schema(description = "角色描述") + private String description; + + /** + * 创建人;用户表ID + */ + @Schema(description = "创建人;用户表ID") + private Long createUser; + + /** + * 创建人所属机构;组织机构表ID + */ + @Schema(description = "创建人所属机构;组织机构表ID") + private Long createOrg; + + /** + * 创建时间;yyyy-MM-dd HH:mm:ss + */ + @Schema(description = "创建时间;yyyy-MM-dd HH:mm:ss") + private java.util.Date createTime; + + /** + * 修改时间;yyyy-MM-dd HH:mm:ss + */ + @Schema(description = "修改时间;yyyy-MM-dd HH:mm:ss") + private java.util.Date updateTime; + + /** + * 修改用户ID;对应用户表的ID字段 + */ + @Schema(description = "修改用户ID;对应用户表的ID字段") + private Long updateUser; + + /** + * 数据状态;0-正常 1-已删 默认值为0 + */ + @Schema(description = "数据状态;0-正常 1-已删 默认值为0") + private String dataStatus; + + private static final long serialVersionUID = 1L; +} diff --git a/src/main/java/com/metalloop/modules/auth/model/resp/SysUserRespDto.java b/src/main/java/com/metalloop/modules/auth/model/resp/SysUserRespDto.java new file mode 100644 index 0000000..5990cc5 --- /dev/null +++ b/src/main/java/com/metalloop/modules/auth/model/resp/SysUserRespDto.java @@ -0,0 +1,79 @@ +package com.metalloop.modules.auth.model.resp; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 用户响应 DTO + * + * @author yy + * @since 2026-09-10 + */ +@Schema(description = "用户响应 DTO") +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SysUserRespDto implements Serializable { + + /** + * 用户ID(主键) + */ + @Schema(description = "用户ID(主键)") + private Long id; + + /** + * 用户名(登录账号) + */ + @Schema(description = "用户名(登录账号)") + private String username; + + /** + * 密码(存储哈希值) + */ + @Schema(description = "密码(存储哈希值)") + private String password; + + /** + * 认证状态(0-未认证,1-认证中,2-已认证) + */ + @Schema(description = "认证状态(0-未认证,1-认证中,2-已认证)") + private Boolean authStatus; + + /** + * 关联的企业ID(外键,指向企业表) + */ + @Schema(description = "关联的企业ID(外键,指向企业表)") + private Integer enterpriseId; + + /** + * 手机号 + */ + @Schema(description = "手机号") + private String phone; + + /** + * 邮箱 + */ + @Schema(description = "邮箱") + private String email; + + /** + * 用户状态(0-禁用,1-正常) + */ + @Schema(description = "用户状态(0-禁用,1-正常)") + private Boolean userStatus; + + /** + * 注册时间 + */ + @Schema(description = "注册时间") + private java.util.Date regTime; + + private static final long serialVersionUID = 1L; +} diff --git a/src/main/java/com/metalloop/modules/auth/model/resp/SysUserRoleRespDto.java b/src/main/java/com/metalloop/modules/auth/model/resp/SysUserRoleRespDto.java new file mode 100644 index 0000000..64997a5 --- /dev/null +++ b/src/main/java/com/metalloop/modules/auth/model/resp/SysUserRoleRespDto.java @@ -0,0 +1,49 @@ +package com.metalloop.modules.auth.model.resp; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 用户与角色关联响应 DTO + * + * @author yy + * @since 2026-09-10 + */ +@Schema(description = "用户与角色关联响应 DTO") +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SysUserRoleRespDto implements Serializable { + + /** + * 用户ID + */ + @Schema(description = "用户ID") + private Integer userId; + + /** + * 角色ID + */ + @Schema(description = "角色ID") + private Integer roleId; + + /** + * 分配时间 + */ + @Schema(description = "分配时间") + private java.util.Date createdAt; + + /** + * + */ + @Schema(description = "") + private Long id; + + private static final long serialVersionUID = 1L; +} diff --git a/src/main/java/com/metalloop/modules/auth/service/SysEnterpriseImageService.java b/src/main/java/com/metalloop/modules/auth/service/SysEnterpriseImageService.java new file mode 100644 index 0000000..53fd083 --- /dev/null +++ b/src/main/java/com/metalloop/modules/auth/service/SysEnterpriseImageService.java @@ -0,0 +1,222 @@ +package com.metalloop.modules.auth.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.metalloop.common.core.lock.LockCondition; +import com.metalloop.common.service.ISuperService; +import com.metalloop.modules.auth.model.po.SysEnterpriseImage; +import com.metalloop.modules.auth.model.query.SysEnterpriseImageQuery; + +import java.util.List; +import java.util.Map; + +/** + * 企业图片附件 Service + * + * @author yy + * @since 2026-09-10 + */ +@SuppressWarnings("unchecked") +public interface SysEnterpriseImageService extends ISuperService { + // region 自动生成代码区,后续手动添加的代码要放在这个区域之外 + + /** + * 创建企业图片附件 + * + * @param sysEnterpriseImage 企业图片附件 + * @return 创建后的企业图片附件 + */ + SysEnterpriseImage create(SysEnterpriseImage sysEnterpriseImage); + + /** + * 批量创建企业图片附件 + * + * @param sysEnterpriseImages 企业图片附件列表 + * @return 是否创建成功 + */ + Boolean batchCreate(List sysEnterpriseImages); + + /** + * 获取全部企业图片附件列表 + * + * @return 全部企业图片附件列表 + */ + List listAll(); + + /** + * 批量更新企业图片附件 + * + * @param sysEnterpriseImages 企业图片附件列表 + * @return 是否更新成功 + */ + Boolean batchUpdateById(List sysEnterpriseImages); + + /** + * 通过ID删除企业图片附件 + * + * @param id 企业图片附件ID + * @return 是否删除成功 + */ + Boolean deleteById(Long id); + + /** + * 批量删除企业图片附件 + * + * @param ids 企业图片附件ID列表 + * @return 是否删除成功 + */ + Boolean batchDelete(List ids); + + /** + * 幂等性创建企业图片附件 + * + * @param entity 企业图片附件 + * @param conditions 幂等性条件 + * @return 是否创建成功 + */ + Boolean createIdempotency(SysEnterpriseImage entity, LockCondition... conditions); + + /** + * 通过ID幂等性更新企业图片附件 + * + * @param entity 企业图片附件 + * @param conditions 幂等性条件 + * @return 是否更新成功 + */ + Boolean updateByIdIdempotency(SysEnterpriseImage entity, LockCondition... conditions); + + /** + * 创建或更新企业图片附件(幂等性) + * + * @param entity 企业图片附件 + * @param conditions 幂等性条件 + * @return 是否创建或更新成功 + */ + Boolean saveOrUpdateIdempotency(SysEnterpriseImage entity, LockCondition... conditions); + + /** + * 通过查询条件进行分页获取企业图片附件 + * + * @param current 当前页数 + * @param size 每页记录数量 + * @param query 查询条件 + * @return 企业图片附件分页 + */ + Page pageByQuery(long current, long size, SysEnterpriseImageQuery query); + + /** + * 分页获取全部企业图片附件 + * + * @param current 当前页数 + * @param size 每页记录数量 + * @return 全部企业图片附件分页 + */ + Page pageAll(long current, long size); + + /** + * 获取ID和企业图片附件的映射 + * + * @return ID和企业图片附件的映射 + */ + Map getIdMap(); + + /** + * 获取指定ID集合的ID和企业图片附件的映射 + * + * @param ids 企业图片附件ID列表 + * @return ID和企业图片附件的映射 + */ + Map getIdMapByIds(List ids); + + /** + * 获取ID和企业图片附件 列表的分组 + * + * @return ID和企业图片附件 列表的分组 + */ + Map> getIdGroup(); + + /** + * 获取指定ID集合的ID和企业图片附件 列表的分组 + * + * @param ids 企业图片附件ID列表 + * @return ID和企业图片附件 列表的分组 + */ + Map> getIdGroupByIds(List ids); + + /** + * 获取全部企业图片附件数量 + * + * @return 全部企业图片附件数量 + */ + Long countAll(); + + // region 此区域的方法主要用作示例,禁止滥用,因为Query对象大而全,调用者会很迷惑,必须封装为更具体的参数及签名的方法,如getByCodeAndType(String code, Integer type)。 + // 除非:确实需要3个及以上参数,方可合并为Query,如SysEnterpriseImageQuery + + /** + * 通过查询条件修改企业图片附件 + * + * @param entity 企业图片附件 + * @param query 查询条件 + * @return 是否修改成功 + */ + Boolean updateByQuery(SysEnterpriseImage entity, SysEnterpriseImageQuery query); + + /** + * 通过查询条件删除企业图片附件 + * + * @param query 查询条件 + * @return 是否删除成功 + */ + Boolean removeByQuery(SysEnterpriseImageQuery query); + + /** + * 通过查询条件获取企业图片附件 + * + * @param query 查询条件 + * @return 企业图片附件 + */ + SysEnterpriseImage getByQuery(SysEnterpriseImageQuery query); + + /** + * 通过查询条件获取企业图片附件列表 + * + * @param query 查询条件 + * @return 企业图片附件列表 + */ + List listByQuery(SysEnterpriseImageQuery query); + + /** + * 通过查询条件获取ID和企业图片附件的映射 + * + * @param query 查询条件 + * @return ID和企业图片附件的映射 + */ + Map getIdMapByQuery(SysEnterpriseImageQuery query); + + /** + * 通过查询条件获取分组的企业图片附件 + * + * @param query 查询条件 + * @return 企业图片附件分组 + */ + Map> getIdGroupByQuery(SysEnterpriseImageQuery query); + + /** + * 通过查询条件获取企业图片附件数量 + * + * @param query 查询条件 + * @return 企业图片附件数量 + */ + Long countByQuery(SysEnterpriseImageQuery query); + + /** + * 检查是否存在符合查询条件的企业图片附件 + * + * @param query 查询条件 + * @return 是否存在 + */ + Boolean existsByQuery(SysEnterpriseImageQuery query); + // endregion + + // endregion 自动生成代码区,后续手动添加的代码要放在这个区域之外 +} diff --git a/src/main/java/com/metalloop/modules/auth/service/SysEnterpriseService.java b/src/main/java/com/metalloop/modules/auth/service/SysEnterpriseService.java new file mode 100644 index 0000000..1619e15 --- /dev/null +++ b/src/main/java/com/metalloop/modules/auth/service/SysEnterpriseService.java @@ -0,0 +1,222 @@ +package com.metalloop.modules.auth.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.metalloop.common.core.lock.LockCondition; +import com.metalloop.common.service.ISuperService; +import com.metalloop.modules.auth.model.po.SysEnterprise; +import com.metalloop.modules.auth.model.query.SysEnterpriseQuery; + +import java.util.List; +import java.util.Map; + +/** + * 企业信息主 Service + * + * @author yy + * @since 2026-09-10 + */ +@SuppressWarnings("unchecked") +public interface SysEnterpriseService extends ISuperService { + // region 自动生成代码区,后续手动添加的代码要放在这个区域之外 + + /** + * 创建企业信息主 + * + * @param sysEnterprise 企业信息主 + * @return 创建后的企业信息主 + */ + SysEnterprise create(SysEnterprise sysEnterprise); + + /** + * 批量创建企业信息主 + * + * @param sysEnterprises 企业信息主列表 + * @return 是否创建成功 + */ + Boolean batchCreate(List sysEnterprises); + + /** + * 获取全部企业信息主列表 + * + * @return 全部企业信息主列表 + */ + List listAll(); + + /** + * 批量更新企业信息主 + * + * @param sysEnterprises 企业信息主列表 + * @return 是否更新成功 + */ + Boolean batchUpdateById(List sysEnterprises); + + /** + * 通过ID删除企业信息主 + * + * @param id 企业信息主ID + * @return 是否删除成功 + */ + Boolean deleteById(Long id); + + /** + * 批量删除企业信息主 + * + * @param ids 企业信息主ID列表 + * @return 是否删除成功 + */ + Boolean batchDelete(List ids); + + /** + * 幂等性创建企业信息主 + * + * @param entity 企业信息主 + * @param conditions 幂等性条件 + * @return 是否创建成功 + */ + Boolean createIdempotency(SysEnterprise entity, LockCondition... conditions); + + /** + * 通过ID幂等性更新企业信息主 + * + * @param entity 企业信息主 + * @param conditions 幂等性条件 + * @return 是否更新成功 + */ + Boolean updateByIdIdempotency(SysEnterprise entity, LockCondition... conditions); + + /** + * 创建或更新企业信息主(幂等性) + * + * @param entity 企业信息主 + * @param conditions 幂等性条件 + * @return 是否创建或更新成功 + */ + Boolean saveOrUpdateIdempotency(SysEnterprise entity, LockCondition... conditions); + + /** + * 通过查询条件进行分页获取企业信息主 + * + * @param current 当前页数 + * @param size 每页记录数量 + * @param query 查询条件 + * @return 企业信息主分页 + */ + Page pageByQuery(long current, long size, SysEnterpriseQuery query); + + /** + * 分页获取全部企业信息主 + * + * @param current 当前页数 + * @param size 每页记录数量 + * @return 全部企业信息主分页 + */ + Page pageAll(long current, long size); + + /** + * 获取ID和企业信息主的映射 + * + * @return ID和企业信息主的映射 + */ + Map getIdMap(); + + /** + * 获取指定ID集合的ID和企业信息主的映射 + * + * @param ids 企业信息主ID列表 + * @return ID和企业信息主的映射 + */ + Map getIdMapByIds(List ids); + + /** + * 获取ID和企业信息主 列表的分组 + * + * @return ID和企业信息主 列表的分组 + */ + Map> getIdGroup(); + + /** + * 获取指定ID集合的ID和企业信息主 列表的分组 + * + * @param ids 企业信息主ID列表 + * @return ID和企业信息主 列表的分组 + */ + Map> getIdGroupByIds(List ids); + + /** + * 获取全部企业信息主数量 + * + * @return 全部企业信息主数量 + */ + Long countAll(); + + // region 此区域的方法主要用作示例,禁止滥用,因为Query对象大而全,调用者会很迷惑,必须封装为更具体的参数及签名的方法,如getByCodeAndType(String code, Integer type)。 + // 除非:确实需要3个及以上参数,方可合并为Query,如SysEnterpriseQuery + + /** + * 通过查询条件修改企业信息主 + * + * @param entity 企业信息主 + * @param query 查询条件 + * @return 是否修改成功 + */ + Boolean updateByQuery(SysEnterprise entity, SysEnterpriseQuery query); + + /** + * 通过查询条件删除企业信息主 + * + * @param query 查询条件 + * @return 是否删除成功 + */ + Boolean removeByQuery(SysEnterpriseQuery query); + + /** + * 通过查询条件获取企业信息主 + * + * @param query 查询条件 + * @return 企业信息主 + */ + SysEnterprise getByQuery(SysEnterpriseQuery query); + + /** + * 通过查询条件获取企业信息主列表 + * + * @param query 查询条件 + * @return 企业信息主列表 + */ + List listByQuery(SysEnterpriseQuery query); + + /** + * 通过查询条件获取ID和企业信息主的映射 + * + * @param query 查询条件 + * @return ID和企业信息主的映射 + */ + Map getIdMapByQuery(SysEnterpriseQuery query); + + /** + * 通过查询条件获取分组的企业信息主 + * + * @param query 查询条件 + * @return 企业信息主分组 + */ + Map> getIdGroupByQuery(SysEnterpriseQuery query); + + /** + * 通过查询条件获取企业信息主数量 + * + * @param query 查询条件 + * @return 企业信息主数量 + */ + Long countByQuery(SysEnterpriseQuery query); + + /** + * 检查是否存在符合查询条件的企业信息主 + * + * @param query 查询条件 + * @return 是否存在 + */ + Boolean existsByQuery(SysEnterpriseQuery query); + // endregion + + // endregion 自动生成代码区,后续手动添加的代码要放在这个区域之外 +} diff --git a/src/main/java/com/metalloop/modules/auth/service/SysPermissionService.java b/src/main/java/com/metalloop/modules/auth/service/SysPermissionService.java new file mode 100644 index 0000000..4c54359 --- /dev/null +++ b/src/main/java/com/metalloop/modules/auth/service/SysPermissionService.java @@ -0,0 +1,222 @@ +package com.metalloop.modules.auth.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.metalloop.common.core.lock.LockCondition; +import com.metalloop.common.service.ISuperService; +import com.metalloop.modules.auth.model.po.SysPermission; +import com.metalloop.modules.auth.model.query.SysPermissionQuery; + +import java.util.List; +import java.util.Map; + +/** + * 权限 Service + * + * @author yy + * @since 2026-09-10 + */ +@SuppressWarnings("unchecked") +public interface SysPermissionService extends ISuperService { + // region 自动生成代码区,后续手动添加的代码要放在这个区域之外 + + /** + * 创建权限 + * + * @param sysPermission 权限 + * @return 创建后的权限 + */ + SysPermission create(SysPermission sysPermission); + + /** + * 批量创建权限 + * + * @param sysPermissions 权限列表 + * @return 是否创建成功 + */ + Boolean batchCreate(List sysPermissions); + + /** + * 获取全部权限列表 + * + * @return 全部权限列表 + */ + List listAll(); + + /** + * 批量更新权限 + * + * @param sysPermissions 权限列表 + * @return 是否更新成功 + */ + Boolean batchUpdateById(List sysPermissions); + + /** + * 通过ID删除权限 + * + * @param id 权限ID + * @return 是否删除成功 + */ + Boolean deleteById(Long id); + + /** + * 批量删除权限 + * + * @param ids 权限ID列表 + * @return 是否删除成功 + */ + Boolean batchDelete(List ids); + + /** + * 幂等性创建权限 + * + * @param entity 权限 + * @param conditions 幂等性条件 + * @return 是否创建成功 + */ + Boolean createIdempotency(SysPermission entity, LockCondition... conditions); + + /** + * 通过ID幂等性更新权限 + * + * @param entity 权限 + * @param conditions 幂等性条件 + * @return 是否更新成功 + */ + Boolean updateByIdIdempotency(SysPermission entity, LockCondition... conditions); + + /** + * 创建或更新权限(幂等性) + * + * @param entity 权限 + * @param conditions 幂等性条件 + * @return 是否创建或更新成功 + */ + Boolean saveOrUpdateIdempotency(SysPermission entity, LockCondition... conditions); + + /** + * 通过查询条件进行分页获取权限 + * + * @param current 当前页数 + * @param size 每页记录数量 + * @param query 查询条件 + * @return 权限分页 + */ + Page pageByQuery(long current, long size, SysPermissionQuery query); + + /** + * 分页获取全部权限 + * + * @param current 当前页数 + * @param size 每页记录数量 + * @return 全部权限分页 + */ + Page pageAll(long current, long size); + + /** + * 获取ID和权限的映射 + * + * @return ID和权限的映射 + */ + Map getIdMap(); + + /** + * 获取指定ID集合的ID和权限的映射 + * + * @param ids 权限ID列表 + * @return ID和权限的映射 + */ + Map getIdMapByIds(List ids); + + /** + * 获取ID和权限 列表的分组 + * + * @return ID和权限 列表的分组 + */ + Map> getIdGroup(); + + /** + * 获取指定ID集合的ID和权限 列表的分组 + * + * @param ids 权限ID列表 + * @return ID和权限 列表的分组 + */ + Map> getIdGroupByIds(List ids); + + /** + * 获取全部权限数量 + * + * @return 全部权限数量 + */ + Long countAll(); + + // region 此区域的方法主要用作示例,禁止滥用,因为Query对象大而全,调用者会很迷惑,必须封装为更具体的参数及签名的方法,如getByCodeAndType(String code, Integer type)。 + // 除非:确实需要3个及以上参数,方可合并为Query,如SysPermissionQuery + + /** + * 通过查询条件修改权限 + * + * @param entity 权限 + * @param query 查询条件 + * @return 是否修改成功 + */ + Boolean updateByQuery(SysPermission entity, SysPermissionQuery query); + + /** + * 通过查询条件删除权限 + * + * @param query 查询条件 + * @return 是否删除成功 + */ + Boolean removeByQuery(SysPermissionQuery query); + + /** + * 通过查询条件获取权限 + * + * @param query 查询条件 + * @return 权限 + */ + SysPermission getByQuery(SysPermissionQuery query); + + /** + * 通过查询条件获取权限列表 + * + * @param query 查询条件 + * @return 权限列表 + */ + List listByQuery(SysPermissionQuery query); + + /** + * 通过查询条件获取ID和权限的映射 + * + * @param query 查询条件 + * @return ID和权限的映射 + */ + Map getIdMapByQuery(SysPermissionQuery query); + + /** + * 通过查询条件获取分组的权限 + * + * @param query 查询条件 + * @return 权限分组 + */ + Map> getIdGroupByQuery(SysPermissionQuery query); + + /** + * 通过查询条件获取权限数量 + * + * @param query 查询条件 + * @return 权限数量 + */ + Long countByQuery(SysPermissionQuery query); + + /** + * 检查是否存在符合查询条件的权限 + * + * @param query 查询条件 + * @return 是否存在 + */ + Boolean existsByQuery(SysPermissionQuery query); + // endregion + + // endregion 自动生成代码区,后续手动添加的代码要放在这个区域之外 +} diff --git a/src/main/java/com/metalloop/modules/auth/service/SysRolePermissionService.java b/src/main/java/com/metalloop/modules/auth/service/SysRolePermissionService.java new file mode 100644 index 0000000..7e71d17 --- /dev/null +++ b/src/main/java/com/metalloop/modules/auth/service/SysRolePermissionService.java @@ -0,0 +1,222 @@ +package com.metalloop.modules.auth.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.metalloop.common.core.lock.LockCondition; +import com.metalloop.common.service.ISuperService; +import com.metalloop.modules.auth.model.po.SysRolePermission; +import com.metalloop.modules.auth.model.query.SysRolePermissionQuery; + +import java.util.List; +import java.util.Map; + +/** + * 角色-权限关联 Service + * + * @author yy + * @since 2026-09-10 + */ +@SuppressWarnings("unchecked") +public interface SysRolePermissionService extends ISuperService { + // region 自动生成代码区,后续手动添加的代码要放在这个区域之外 + + /** + * 创建角色-权限关联 + * + * @param sysRolePermission 角色-权限关联 + * @return 创建后的角色-权限关联 + */ + SysRolePermission create(SysRolePermission sysRolePermission); + + /** + * 批量创建角色-权限关联 + * + * @param sysRolePermissions 角色-权限关联列表 + * @return 是否创建成功 + */ + Boolean batchCreate(List sysRolePermissions); + + /** + * 获取全部角色-权限关联列表 + * + * @return 全部角色-权限关联列表 + */ + List listAll(); + + /** + * 批量更新角色-权限关联 + * + * @param sysRolePermissions 角色-权限关联列表 + * @return 是否更新成功 + */ + Boolean batchUpdateById(List sysRolePermissions); + + /** + * 通过ID删除角色-权限关联 + * + * @param id 角色-权限关联ID + * @return 是否删除成功 + */ + Boolean deleteById(Long id); + + /** + * 批量删除角色-权限关联 + * + * @param ids 角色-权限关联ID列表 + * @return 是否删除成功 + */ + Boolean batchDelete(List ids); + + /** + * 幂等性创建角色-权限关联 + * + * @param entity 角色-权限关联 + * @param conditions 幂等性条件 + * @return 是否创建成功 + */ + Boolean createIdempotency(SysRolePermission entity, LockCondition... conditions); + + /** + * 通过ID幂等性更新角色-权限关联 + * + * @param entity 角色-权限关联 + * @param conditions 幂等性条件 + * @return 是否更新成功 + */ + Boolean updateByIdIdempotency(SysRolePermission entity, LockCondition... conditions); + + /** + * 创建或更新角色-权限关联(幂等性) + * + * @param entity 角色-权限关联 + * @param conditions 幂等性条件 + * @return 是否创建或更新成功 + */ + Boolean saveOrUpdateIdempotency(SysRolePermission entity, LockCondition... conditions); + + /** + * 通过查询条件进行分页获取角色-权限关联 + * + * @param current 当前页数 + * @param size 每页记录数量 + * @param query 查询条件 + * @return 角色-权限关联分页 + */ + Page pageByQuery(long current, long size, SysRolePermissionQuery query); + + /** + * 分页获取全部角色-权限关联 + * + * @param current 当前页数 + * @param size 每页记录数量 + * @return 全部角色-权限关联分页 + */ + Page pageAll(long current, long size); + + /** + * 获取ID和角色-权限关联的映射 + * + * @return ID和角色-权限关联的映射 + */ + Map getIdMap(); + + /** + * 获取指定ID集合的ID和角色-权限关联的映射 + * + * @param ids 角色-权限关联ID列表 + * @return ID和角色-权限关联的映射 + */ + Map getIdMapByIds(List ids); + + /** + * 获取ID和角色-权限关联 列表的分组 + * + * @return ID和角色-权限关联 列表的分组 + */ + Map> getIdGroup(); + + /** + * 获取指定ID集合的ID和角色-权限关联 列表的分组 + * + * @param ids 角色-权限关联ID列表 + * @return ID和角色-权限关联 列表的分组 + */ + Map> getIdGroupByIds(List ids); + + /** + * 获取全部角色-权限关联数量 + * + * @return 全部角色-权限关联数量 + */ + Long countAll(); + + // region 此区域的方法主要用作示例,禁止滥用,因为Query对象大而全,调用者会很迷惑,必须封装为更具体的参数及签名的方法,如getByCodeAndType(String code, Integer type)。 + // 除非:确实需要3个及以上参数,方可合并为Query,如SysRolePermissionQuery + + /** + * 通过查询条件修改角色-权限关联 + * + * @param entity 角色-权限关联 + * @param query 查询条件 + * @return 是否修改成功 + */ + Boolean updateByQuery(SysRolePermission entity, SysRolePermissionQuery query); + + /** + * 通过查询条件删除角色-权限关联 + * + * @param query 查询条件 + * @return 是否删除成功 + */ + Boolean removeByQuery(SysRolePermissionQuery query); + + /** + * 通过查询条件获取角色-权限关联 + * + * @param query 查询条件 + * @return 角色-权限关联 + */ + SysRolePermission getByQuery(SysRolePermissionQuery query); + + /** + * 通过查询条件获取角色-权限关联列表 + * + * @param query 查询条件 + * @return 角色-权限关联列表 + */ + List listByQuery(SysRolePermissionQuery query); + + /** + * 通过查询条件获取ID和角色-权限关联的映射 + * + * @param query 查询条件 + * @return ID和角色-权限关联的映射 + */ + Map getIdMapByQuery(SysRolePermissionQuery query); + + /** + * 通过查询条件获取分组的角色-权限关联 + * + * @param query 查询条件 + * @return 角色-权限关联分组 + */ + Map> getIdGroupByQuery(SysRolePermissionQuery query); + + /** + * 通过查询条件获取角色-权限关联数量 + * + * @param query 查询条件 + * @return 角色-权限关联数量 + */ + Long countByQuery(SysRolePermissionQuery query); + + /** + * 检查是否存在符合查询条件的角色-权限关联 + * + * @param query 查询条件 + * @return 是否存在 + */ + Boolean existsByQuery(SysRolePermissionQuery query); + // endregion + + // endregion 自动生成代码区,后续手动添加的代码要放在这个区域之外 +} diff --git a/src/main/java/com/metalloop/modules/auth/service/SysRoleService.java b/src/main/java/com/metalloop/modules/auth/service/SysRoleService.java new file mode 100644 index 0000000..28d282b --- /dev/null +++ b/src/main/java/com/metalloop/modules/auth/service/SysRoleService.java @@ -0,0 +1,222 @@ +package com.metalloop.modules.auth.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.metalloop.common.core.lock.LockCondition; +import com.metalloop.common.service.ISuperService; +import com.metalloop.modules.auth.model.po.SysRole; +import com.metalloop.modules.auth.model.query.SysRoleQuery; + +import java.util.List; +import java.util.Map; + +/** + * 角色 Service + * + * @author yy + * @since 2026-09-10 + */ +@SuppressWarnings("unchecked") +public interface SysRoleService extends ISuperService { + // region 自动生成代码区,后续手动添加的代码要放在这个区域之外 + + /** + * 创建角色 + * + * @param sysRole 角色 + * @return 创建后的角色 + */ + SysRole create(SysRole sysRole); + + /** + * 批量创建角色 + * + * @param sysRoles 角色列表 + * @return 是否创建成功 + */ + Boolean batchCreate(List sysRoles); + + /** + * 获取全部角色列表 + * + * @return 全部角色列表 + */ + List listAll(); + + /** + * 批量更新角色 + * + * @param sysRoles 角色列表 + * @return 是否更新成功 + */ + Boolean batchUpdateById(List sysRoles); + + /** + * 通过ID删除角色 + * + * @param id 角色ID + * @return 是否删除成功 + */ + Boolean deleteById(Long id); + + /** + * 批量删除角色 + * + * @param ids 角色ID列表 + * @return 是否删除成功 + */ + Boolean batchDelete(List ids); + + /** + * 幂等性创建角色 + * + * @param entity 角色 + * @param conditions 幂等性条件 + * @return 是否创建成功 + */ + Boolean createIdempotency(SysRole entity, LockCondition... conditions); + + /** + * 通过ID幂等性更新角色 + * + * @param entity 角色 + * @param conditions 幂等性条件 + * @return 是否更新成功 + */ + Boolean updateByIdIdempotency(SysRole entity, LockCondition... conditions); + + /** + * 创建或更新角色(幂等性) + * + * @param entity 角色 + * @param conditions 幂等性条件 + * @return 是否创建或更新成功 + */ + Boolean saveOrUpdateIdempotency(SysRole entity, LockCondition... conditions); + + /** + * 通过查询条件进行分页获取角色 + * + * @param current 当前页数 + * @param size 每页记录数量 + * @param query 查询条件 + * @return 角色分页 + */ + Page pageByQuery(long current, long size, SysRoleQuery query); + + /** + * 分页获取全部角色 + * + * @param current 当前页数 + * @param size 每页记录数量 + * @return 全部角色分页 + */ + Page pageAll(long current, long size); + + /** + * 获取ID和角色的映射 + * + * @return ID和角色的映射 + */ + Map getIdMap(); + + /** + * 获取指定ID集合的ID和角色的映射 + * + * @param ids 角色ID列表 + * @return ID和角色的映射 + */ + Map getIdMapByIds(List ids); + + /** + * 获取ID和角色 列表的分组 + * + * @return ID和角色 列表的分组 + */ + Map> getIdGroup(); + + /** + * 获取指定ID集合的ID和角色 列表的分组 + * + * @param ids 角色ID列表 + * @return ID和角色 列表的分组 + */ + Map> getIdGroupByIds(List ids); + + /** + * 获取全部角色数量 + * + * @return 全部角色数量 + */ + Long countAll(); + + // region 此区域的方法主要用作示例,禁止滥用,因为Query对象大而全,调用者会很迷惑,必须封装为更具体的参数及签名的方法,如getByCodeAndType(String code, Integer type)。 + // 除非:确实需要3个及以上参数,方可合并为Query,如SysRoleQuery + + /** + * 通过查询条件修改角色 + * + * @param entity 角色 + * @param query 查询条件 + * @return 是否修改成功 + */ + Boolean updateByQuery(SysRole entity, SysRoleQuery query); + + /** + * 通过查询条件删除角色 + * + * @param query 查询条件 + * @return 是否删除成功 + */ + Boolean removeByQuery(SysRoleQuery query); + + /** + * 通过查询条件获取角色 + * + * @param query 查询条件 + * @return 角色 + */ + SysRole getByQuery(SysRoleQuery query); + + /** + * 通过查询条件获取角色列表 + * + * @param query 查询条件 + * @return 角色列表 + */ + List listByQuery(SysRoleQuery query); + + /** + * 通过查询条件获取ID和角色的映射 + * + * @param query 查询条件 + * @return ID和角色的映射 + */ + Map getIdMapByQuery(SysRoleQuery query); + + /** + * 通过查询条件获取分组的角色 + * + * @param query 查询条件 + * @return 角色分组 + */ + Map> getIdGroupByQuery(SysRoleQuery query); + + /** + * 通过查询条件获取角色数量 + * + * @param query 查询条件 + * @return 角色数量 + */ + Long countByQuery(SysRoleQuery query); + + /** + * 检查是否存在符合查询条件的角色 + * + * @param query 查询条件 + * @return 是否存在 + */ + Boolean existsByQuery(SysRoleQuery query); + // endregion + + // endregion 自动生成代码区,后续手动添加的代码要放在这个区域之外 +} diff --git a/src/main/java/com/metalloop/modules/auth/service/SysUserRoleService.java b/src/main/java/com/metalloop/modules/auth/service/SysUserRoleService.java new file mode 100644 index 0000000..a4b0be1 --- /dev/null +++ b/src/main/java/com/metalloop/modules/auth/service/SysUserRoleService.java @@ -0,0 +1,222 @@ +package com.metalloop.modules.auth.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.metalloop.common.core.lock.LockCondition; +import com.metalloop.common.service.ISuperService; +import com.metalloop.modules.auth.model.po.SysUserRole; +import com.metalloop.modules.auth.model.query.SysUserRoleQuery; + +import java.util.List; +import java.util.Map; + +/** + * 用户与角色关联 Service + * + * @author yy + * @since 2026-09-10 + */ +@SuppressWarnings("unchecked") +public interface SysUserRoleService extends ISuperService { + // region 自动生成代码区,后续手动添加的代码要放在这个区域之外 + + /** + * 创建用户与角色关联 + * + * @param sysUserRole 用户与角色关联 + * @return 创建后的用户与角色关联 + */ + SysUserRole create(SysUserRole sysUserRole); + + /** + * 批量创建用户与角色关联 + * + * @param sysUserRoles 用户与角色关联列表 + * @return 是否创建成功 + */ + Boolean batchCreate(List sysUserRoles); + + /** + * 获取全部用户与角色关联列表 + * + * @return 全部用户与角色关联列表 + */ + List listAll(); + + /** + * 批量更新用户与角色关联 + * + * @param sysUserRoles 用户与角色关联列表 + * @return 是否更新成功 + */ + Boolean batchUpdateById(List sysUserRoles); + + /** + * 通过ID删除用户与角色关联 + * + * @param id 用户与角色关联ID + * @return 是否删除成功 + */ + Boolean deleteById(Long id); + + /** + * 批量删除用户与角色关联 + * + * @param ids 用户与角色关联ID列表 + * @return 是否删除成功 + */ + Boolean batchDelete(List ids); + + /** + * 幂等性创建用户与角色关联 + * + * @param entity 用户与角色关联 + * @param conditions 幂等性条件 + * @return 是否创建成功 + */ + Boolean createIdempotency(SysUserRole entity, LockCondition... conditions); + + /** + * 通过ID幂等性更新用户与角色关联 + * + * @param entity 用户与角色关联 + * @param conditions 幂等性条件 + * @return 是否更新成功 + */ + Boolean updateByIdIdempotency(SysUserRole entity, LockCondition... conditions); + + /** + * 创建或更新用户与角色关联(幂等性) + * + * @param entity 用户与角色关联 + * @param conditions 幂等性条件 + * @return 是否创建或更新成功 + */ + Boolean saveOrUpdateIdempotency(SysUserRole entity, LockCondition... conditions); + + /** + * 通过查询条件进行分页获取用户与角色关联 + * + * @param current 当前页数 + * @param size 每页记录数量 + * @param query 查询条件 + * @return 用户与角色关联分页 + */ + Page pageByQuery(long current, long size, SysUserRoleQuery query); + + /** + * 分页获取全部用户与角色关联 + * + * @param current 当前页数 + * @param size 每页记录数量 + * @return 全部用户与角色关联分页 + */ + Page pageAll(long current, long size); + + /** + * 获取ID和用户与角色关联的映射 + * + * @return ID和用户与角色关联的映射 + */ + Map getIdMap(); + + /** + * 获取指定ID集合的ID和用户与角色关联的映射 + * + * @param ids 用户与角色关联ID列表 + * @return ID和用户与角色关联的映射 + */ + Map getIdMapByIds(List ids); + + /** + * 获取ID和用户与角色关联 列表的分组 + * + * @return ID和用户与角色关联 列表的分组 + */ + Map> getIdGroup(); + + /** + * 获取指定ID集合的ID和用户与角色关联 列表的分组 + * + * @param ids 用户与角色关联ID列表 + * @return ID和用户与角色关联 列表的分组 + */ + Map> getIdGroupByIds(List ids); + + /** + * 获取全部用户与角色关联数量 + * + * @return 全部用户与角色关联数量 + */ + Long countAll(); + + // region 此区域的方法主要用作示例,禁止滥用,因为Query对象大而全,调用者会很迷惑,必须封装为更具体的参数及签名的方法,如getByCodeAndType(String code, Integer type)。 + // 除非:确实需要3个及以上参数,方可合并为Query,如SysUserRoleQuery + + /** + * 通过查询条件修改用户与角色关联 + * + * @param entity 用户与角色关联 + * @param query 查询条件 + * @return 是否修改成功 + */ + Boolean updateByQuery(SysUserRole entity, SysUserRoleQuery query); + + /** + * 通过查询条件删除用户与角色关联 + * + * @param query 查询条件 + * @return 是否删除成功 + */ + Boolean removeByQuery(SysUserRoleQuery query); + + /** + * 通过查询条件获取用户与角色关联 + * + * @param query 查询条件 + * @return 用户与角色关联 + */ + SysUserRole getByQuery(SysUserRoleQuery query); + + /** + * 通过查询条件获取用户与角色关联列表 + * + * @param query 查询条件 + * @return 用户与角色关联列表 + */ + List listByQuery(SysUserRoleQuery query); + + /** + * 通过查询条件获取ID和用户与角色关联的映射 + * + * @param query 查询条件 + * @return ID和用户与角色关联的映射 + */ + Map getIdMapByQuery(SysUserRoleQuery query); + + /** + * 通过查询条件获取分组的用户与角色关联 + * + * @param query 查询条件 + * @return 用户与角色关联分组 + */ + Map> getIdGroupByQuery(SysUserRoleQuery query); + + /** + * 通过查询条件获取用户与角色关联数量 + * + * @param query 查询条件 + * @return 用户与角色关联数量 + */ + Long countByQuery(SysUserRoleQuery query); + + /** + * 检查是否存在符合查询条件的用户与角色关联 + * + * @param query 查询条件 + * @return 是否存在 + */ + Boolean existsByQuery(SysUserRoleQuery query); + // endregion + + // endregion 自动生成代码区,后续手动添加的代码要放在这个区域之外 +} diff --git a/src/main/java/com/metalloop/modules/auth/service/SysUserService.java b/src/main/java/com/metalloop/modules/auth/service/SysUserService.java new file mode 100644 index 0000000..4638fef --- /dev/null +++ b/src/main/java/com/metalloop/modules/auth/service/SysUserService.java @@ -0,0 +1,222 @@ +package com.metalloop.modules.auth.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.metalloop.common.core.lock.LockCondition; +import com.metalloop.common.service.ISuperService; +import com.metalloop.modules.auth.model.po.SysUser; +import com.metalloop.modules.auth.model.query.SysUserQuery; + +import java.util.List; +import java.util.Map; + +/** + * 用户 Service + * + * @author yy + * @since 2026-09-10 + */ +@SuppressWarnings("unchecked") +public interface SysUserService extends ISuperService { + // region 自动生成代码区,后续手动添加的代码要放在这个区域之外 + + /** + * 创建用户 + * + * @param sysUser 用户 + * @return 创建后的用户 + */ + SysUser create(SysUser sysUser); + + /** + * 批量创建用户 + * + * @param sysUsers 用户列表 + * @return 是否创建成功 + */ + Boolean batchCreate(List sysUsers); + + /** + * 获取全部用户列表 + * + * @return 全部用户列表 + */ + List listAll(); + + /** + * 批量更新用户 + * + * @param sysUsers 用户列表 + * @return 是否更新成功 + */ + Boolean batchUpdateById(List sysUsers); + + /** + * 通过ID删除用户 + * + * @param id 用户ID + * @return 是否删除成功 + */ + Boolean deleteById(Long id); + + /** + * 批量删除用户 + * + * @param ids 用户ID列表 + * @return 是否删除成功 + */ + Boolean batchDelete(List ids); + + /** + * 幂等性创建用户 + * + * @param entity 用户 + * @param conditions 幂等性条件 + * @return 是否创建成功 + */ + Boolean createIdempotency(SysUser entity, LockCondition... conditions); + + /** + * 通过ID幂等性更新用户 + * + * @param entity 用户 + * @param conditions 幂等性条件 + * @return 是否更新成功 + */ + Boolean updateByIdIdempotency(SysUser entity, LockCondition... conditions); + + /** + * 创建或更新用户(幂等性) + * + * @param entity 用户 + * @param conditions 幂等性条件 + * @return 是否创建或更新成功 + */ + Boolean saveOrUpdateIdempotency(SysUser entity, LockCondition... conditions); + + /** + * 通过查询条件进行分页获取用户 + * + * @param current 当前页数 + * @param size 每页记录数量 + * @param query 查询条件 + * @return 用户分页 + */ + Page pageByQuery(long current, long size, SysUserQuery query); + + /** + * 分页获取全部用户 + * + * @param current 当前页数 + * @param size 每页记录数量 + * @return 全部用户分页 + */ + Page pageAll(long current, long size); + + /** + * 获取ID和用户的映射 + * + * @return ID和用户的映射 + */ + Map getIdMap(); + + /** + * 获取指定ID集合的ID和用户的映射 + * + * @param ids 用户ID列表 + * @return ID和用户的映射 + */ + Map getIdMapByIds(List ids); + + /** + * 获取ID和用户 列表的分组 + * + * @return ID和用户 列表的分组 + */ + Map> getIdGroup(); + + /** + * 获取指定ID集合的ID和用户 列表的分组 + * + * @param ids 用户ID列表 + * @return ID和用户 列表的分组 + */ + Map> getIdGroupByIds(List ids); + + /** + * 获取全部用户数量 + * + * @return 全部用户数量 + */ + Long countAll(); + + // region 此区域的方法主要用作示例,禁止滥用,因为Query对象大而全,调用者会很迷惑,必须封装为更具体的参数及签名的方法,如getByCodeAndType(String code, Integer type)。 + // 除非:确实需要3个及以上参数,方可合并为Query,如SysUserQuery + + /** + * 通过查询条件修改用户 + * + * @param entity 用户 + * @param query 查询条件 + * @return 是否修改成功 + */ + Boolean updateByQuery(SysUser entity, SysUserQuery query); + + /** + * 通过查询条件删除用户 + * + * @param query 查询条件 + * @return 是否删除成功 + */ + Boolean removeByQuery(SysUserQuery query); + + /** + * 通过查询条件获取用户 + * + * @param query 查询条件 + * @return 用户 + */ + SysUser getByQuery(SysUserQuery query); + + /** + * 通过查询条件获取用户列表 + * + * @param query 查询条件 + * @return 用户列表 + */ + List listByQuery(SysUserQuery query); + + /** + * 通过查询条件获取ID和用户的映射 + * + * @param query 查询条件 + * @return ID和用户的映射 + */ + Map getIdMapByQuery(SysUserQuery query); + + /** + * 通过查询条件获取分组的用户 + * + * @param query 查询条件 + * @return 用户分组 + */ + Map> getIdGroupByQuery(SysUserQuery query); + + /** + * 通过查询条件获取用户数量 + * + * @param query 查询条件 + * @return 用户数量 + */ + Long countByQuery(SysUserQuery query); + + /** + * 检查是否存在符合查询条件的用户 + * + * @param query 查询条件 + * @return 是否存在 + */ + Boolean existsByQuery(SysUserQuery query); + // endregion + + // endregion 自动生成代码区,后续手动添加的代码要放在这个区域之外 +} diff --git a/src/main/java/com/metalloop/modules/auth/service/impl/SysEnterpriseImageServiceImpl.java b/src/main/java/com/metalloop/modules/auth/service/impl/SysEnterpriseImageServiceImpl.java new file mode 100644 index 0000000..3127833 --- /dev/null +++ b/src/main/java/com/metalloop/modules/auth/service/impl/SysEnterpriseImageServiceImpl.java @@ -0,0 +1,169 @@ +package com.metalloop.modules.auth.service.impl; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.metalloop.common.core.lock.DistributedLock; +import com.metalloop.common.core.lock.LockCondition; +import com.metalloop.common.service.impl.SuperServiceImpl; +import com.metalloop.modules.auth.mapper.SysEnterpriseImageMapper; +import com.metalloop.modules.auth.model.po.SysEnterpriseImage; +import com.metalloop.modules.auth.model.query.SysEnterpriseImageQuery; +import com.metalloop.modules.auth.service.SysEnterpriseImageService; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import jakarta.annotation.Resource; +import java.util.List; +import java.util.Map; + +/** + * 企业图片附件 Service 实现类 + * + * @author yy + * @since 2026-09-10 + */ +@SuppressWarnings("java:S6809") +@Service +public class SysEnterpriseImageServiceImpl extends SuperServiceImpl implements SysEnterpriseImageService { + + @Resource + private DistributedLock distributedLock; + + @Resource + SysEnterpriseImageMapper sysEnterpriseImageMapper; + + // region 自动生成代码区,后续手动添加的代码要放在这个区域之外 + + @Override + public SysEnterpriseImage create(SysEnterpriseImage sysEnterpriseImage) { + save(sysEnterpriseImage); + return sysEnterpriseImage; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean batchCreate(List sysEnterpriseImages) { + return saveBatch(sysEnterpriseImages); + } + + @Override + public List listAll() { + return list(); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean batchUpdateById(List sysEnterpriseImages) { + return updateBatchById(sysEnterpriseImages); + } + + @Override + public Boolean deleteById(Long id) { + return removeById(id); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean batchDelete(List ids) { + return removeByIds(ids); + } + + @SafeVarargs + @Override + public final Boolean createIdempotency(SysEnterpriseImage entity, LockCondition... conditions) { + return saveIdempotency(entity, distributedLock, conditions); + } + + @SafeVarargs + @Override + public final Boolean updateByIdIdempotency(SysEnterpriseImage entity, LockCondition... conditions) { + return updateByIdIdempotency(entity, distributedLock, conditions); + } + + @SafeVarargs + @Override + public final Boolean saveOrUpdateIdempotency(SysEnterpriseImage entity, LockCondition... conditions) { + return saveOrUpdateIdempotency(entity, distributedLock, conditions); + } + + @Override + public Page pageByQuery(long current, long size, SysEnterpriseImageQuery query) { + return page(Page.of(current, size), query); + } + + @Override + public Page pageAll(long current, long size) { + return page(Page.of(current, size)); + } + + @Override + public Map getIdMap() { + return toMap(e -> String.valueOf(e.getId()), list()); + } + + @Override + public Map getIdMapByIds(List ids) { + return toMap(e -> String.valueOf(e.getId()), listByIds(ids)); + } + + @Override + public Map> getIdGroup() { + return toGroup(e -> String.valueOf(e.getId()), list()); + } + + @Override + public Map> getIdGroupByIds(List ids) { + return toGroup(e -> String.valueOf(e.getId()), listByIds(ids)); + } + + @Override + public Long countAll() { + return count(); + } + + // region 此区域的方法主要用作示例,禁止滥用,因为Query对象大而全,调用者会很迷惑,必须封装为更具体的参数及签名的方法,如getByCodeAndType(String code, Integer type)。 + // 除非:确实需要3个及以上参数,方可合并为Query,如SysEnterpriseImageQuery + + @Override + public Boolean updateByQuery(SysEnterpriseImage entity, SysEnterpriseImageQuery query) { + return update(entity, query); + } + + @Override + public Boolean removeByQuery(SysEnterpriseImageQuery query) { + return remove(query); + } + + @Override + public SysEnterpriseImage getByQuery(SysEnterpriseImageQuery query) { + return get(query); + } + + @Override + public List listByQuery(SysEnterpriseImageQuery query) { + return list(query); + } + + @Override + public Map getIdMapByQuery(SysEnterpriseImageQuery query) { + return toMap(SysEnterpriseImage::getId, query); + } + + @Override + public Map> getIdGroupByQuery(SysEnterpriseImageQuery query) { + return toGroup(SysEnterpriseImage::getId, query); + } + + @Override + public Long countByQuery(SysEnterpriseImageQuery query) { + return count(query); + } + + @Override + public Boolean existsByQuery(SysEnterpriseImageQuery query) { + long count = count(query); + return count > 0; + } + // endregion + + // endregion 自动生成代码区,后续手动添加的代码要放在这个区域之外 +} diff --git a/src/main/java/com/metalloop/modules/auth/service/impl/SysEnterpriseServiceImpl.java b/src/main/java/com/metalloop/modules/auth/service/impl/SysEnterpriseServiceImpl.java new file mode 100644 index 0000000..456b460 --- /dev/null +++ b/src/main/java/com/metalloop/modules/auth/service/impl/SysEnterpriseServiceImpl.java @@ -0,0 +1,173 @@ +package com.metalloop.modules.auth.service.impl; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.metalloop.common.core.lock.DistributedLock; +import com.metalloop.common.core.lock.LockCondition; +import com.metalloop.common.service.impl.SuperServiceImpl; +import com.metalloop.modules.auth.mapper.SysEnterpriseImageMapper; +import com.metalloop.modules.auth.mapper.SysEnterpriseMapper; +import com.metalloop.modules.auth.model.po.SysEnterprise; +import com.metalloop.modules.auth.model.po.SysEnterpriseImage; +import com.metalloop.modules.auth.model.query.SysEnterpriseImageQuery; +import com.metalloop.modules.auth.model.query.SysEnterpriseQuery; +import com.metalloop.modules.auth.service.SysEnterpriseImageService; +import com.metalloop.modules.auth.service.SysEnterpriseService; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import jakarta.annotation.Resource; +import java.util.List; +import java.util.Map; + +/** + * 企业信息主 Service 实现类 + * + * @author yy + * @since 2026-09-10 + */ +@SuppressWarnings("java:S6809") +@Service +public class SysEnterpriseServiceImpl extends SuperServiceImpl implements SysEnterpriseService { + + @Resource + private DistributedLock distributedLock; + + @Resource + SysEnterpriseMapper sysEnterpriseMapper; + + // region 自动生成代码区,后续手动添加的代码要放在这个区域之外 + + @Override + public SysEnterprise create(SysEnterprise sysEnterprise) { + save(sysEnterprise); + return sysEnterprise; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean batchCreate(List sysEnterprises) { + return saveBatch(sysEnterprises); + } + + @Override + public List listAll() { + return list(); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean batchUpdateById(List sysEnterprises) { + return updateBatchById(sysEnterprises); + } + + @Override + public Boolean deleteById(Long id) { + return removeById(id); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean batchDelete(List ids) { + return removeByIds(ids); + } + + @SafeVarargs + @Override + public final Boolean createIdempotency(SysEnterprise entity, LockCondition... conditions) { + return saveIdempotency(entity, distributedLock, conditions); + } + + @SafeVarargs + @Override + public final Boolean updateByIdIdempotency(SysEnterprise entity, LockCondition... conditions) { + return updateByIdIdempotency(entity, distributedLock, conditions); + } + + @SafeVarargs + @Override + public final Boolean saveOrUpdateIdempotency(SysEnterprise entity, LockCondition... conditions) { + return saveOrUpdateIdempotency(entity, distributedLock, conditions); + } + + @Override + public Page pageByQuery(long current, long size, SysEnterpriseQuery query) { + return page(Page.of(current, size), query); + } + + @Override + public Page pageAll(long current, long size) { + return page(Page.of(current, size)); + } + + @Override + public Map getIdMap() { + return toMap(e -> String.valueOf(e.getId()), list()); + } + + @Override + public Map getIdMapByIds(List ids) { + return toMap(e -> String.valueOf(e.getId()), listByIds(ids)); + } + + @Override + public Map> getIdGroup() { + return toGroup(e -> String.valueOf(e.getId()), list()); + } + + @Override + public Map> getIdGroupByIds(List ids) { + return toGroup(e -> String.valueOf(e.getId()), listByIds(ids)); + } + + @Override + public Long countAll() { + return count(); + } + + // region 此区域的方法主要用作示例,禁止滥用,因为Query对象大而全,调用者会很迷惑,必须封装为更具体的参数及签名的方法,如getByCodeAndType(String code, Integer type)。 + // 除非:确实需要3个及以上参数,方可合并为Query,如SysEnterpriseQuery + + @Override + public Boolean updateByQuery(SysEnterprise entity, SysEnterpriseQuery query) { + return update(entity, query); + } + + @Override + public Boolean removeByQuery(SysEnterpriseQuery query) { + return remove(query); + } + + @Override + public SysEnterprise getByQuery(SysEnterpriseQuery query) { + return get(query); + } + + @Override + public List listByQuery(SysEnterpriseQuery query) { + return list(query); + } + + @Override + public Map getIdMapByQuery(SysEnterpriseQuery query) { + return toMap(SysEnterprise::getId, query); + } + + @Override + public Map> getIdGroupByQuery(SysEnterpriseQuery query) { + return toGroup(SysEnterprise::getId, query); + } + + @Override + public Long countByQuery(SysEnterpriseQuery query) { + return count(query); + } + + @Override + public Boolean existsByQuery(SysEnterpriseQuery query) { + long count = count(query); + return count > 0; + } + // endregion + + // endregion 自动生成代码区,后续手动添加的代码要放在这个区域之外 +} diff --git a/src/main/java/com/metalloop/modules/auth/service/impl/SysPermissionServiceImpl.java b/src/main/java/com/metalloop/modules/auth/service/impl/SysPermissionServiceImpl.java new file mode 100644 index 0000000..90e3b64 --- /dev/null +++ b/src/main/java/com/metalloop/modules/auth/service/impl/SysPermissionServiceImpl.java @@ -0,0 +1,167 @@ +package com.metalloop.modules.auth.service.impl; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.metalloop.common.core.lock.DistributedLock; +import com.metalloop.common.core.lock.LockCondition; +import com.metalloop.common.service.impl.SuperServiceImpl; +import com.metalloop.modules.auth.mapper.SysPermissionMapper; +import com.metalloop.modules.auth.model.po.SysPermission; +import com.metalloop.modules.auth.model.query.SysPermissionQuery; +import com.metalloop.modules.auth.service.SysPermissionService; +import jakarta.annotation.Resource; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; +import java.util.Map; + +/** + * 权限 Service 实现类 + * + * @author yy + * @since 2026-09-10 + */ +@SuppressWarnings("java:S6809") +@Service +public class SysPermissionServiceImpl extends SuperServiceImpl implements SysPermissionService { + + @Resource + private DistributedLock distributedLock; + + @Resource + SysPermissionMapper sysPermissionMapper; + + // region 自动生成代码区,后续手动添加的代码要放在这个区域之外 + + @Override + public SysPermission create(SysPermission sysPermission) { + save(sysPermission); + return sysPermission; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean batchCreate(List sysPermissions) { + return saveBatch(sysPermissions); + } + + @Override + public List listAll() { + return list(); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean batchUpdateById(List sysPermissions) { + return updateBatchById(sysPermissions); + } + + @Override + public Boolean deleteById(Long id) { + return removeById(id); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean batchDelete(List ids) { + return removeByIds(ids); + } + + @SafeVarargs + @Override + public final Boolean createIdempotency(SysPermission entity, LockCondition... conditions) { + return saveIdempotency(entity, distributedLock, conditions); + } + + @SafeVarargs + public final Boolean updateByIdIdempotency(SysPermission entity, LockCondition... conditions) { + return updateByIdIdempotency(entity, distributedLock, conditions); + } + + @SafeVarargs + public final Boolean saveOrUpdateIdempotency(SysPermission entity, LockCondition... conditions) { + return saveOrUpdateIdempotency(entity, distributedLock, conditions); + } + + @Override + public Page pageByQuery(long current, long size, SysPermissionQuery query) { + return page(Page.of(current, size), query); + } + + @Override + public Page pageAll(long current, long size) { + return page(Page.of(current, size)); + } + + @Override + public Map getIdMap() { + return toMap(e -> String.valueOf(e.getId()), list()); + } + + @Override + public Map getIdMapByIds(List ids) { + return toMap(e -> String.valueOf(e.getId()), listByIds(ids)); + } + + @Override + public Map> getIdGroup() { + return toGroup(e -> String.valueOf(e.getId()), list()); + } + + @Override + public Map> getIdGroupByIds(List ids) { + return toGroup(e -> String.valueOf(e.getId()), listByIds(ids)); + } + + @Override + public Long countAll() { + return count(); + } + + // region 此区域的方法主要用作示例,禁止滥用,因为Query对象大而全,调用者会很迷惑,必须封装为更具体的参数及签名的方法,如getByCodeAndType(String code, Integer type)。 + // 除非:确实需要3个及以上参数,方可合并为Query,如SysPermissionQuery + + @Override + public Boolean updateByQuery(SysPermission entity, SysPermissionQuery query) { + return update(entity, query); + } + + @Override + public Boolean removeByQuery(SysPermissionQuery query) { + return remove(query); + } + + @Override + public SysPermission getByQuery(SysPermissionQuery query) { + return get(query); + } + + @Override + public List listByQuery(SysPermissionQuery query) { + return list(query); + } + + @Override + public Map getIdMapByQuery(SysPermissionQuery query) { + return toMap(SysPermission::getId, query); + } + + @Override + public Map> getIdGroupByQuery(SysPermissionQuery query) { + return toGroup(SysPermission::getId, query); + } + + @Override + public Long countByQuery(SysPermissionQuery query) { + return count(query); + } + + @Override + public Boolean existsByQuery(SysPermissionQuery query) { + long count = count(query); + return count > 0; + } + // endregion + + // endregion 自动生成代码区,后续手动添加的代码要放在这个区域之外 +} diff --git a/src/main/java/com/metalloop/modules/auth/service/impl/SysRolePermissionServiceImpl.java b/src/main/java/com/metalloop/modules/auth/service/impl/SysRolePermissionServiceImpl.java new file mode 100644 index 0000000..9f8fa56 --- /dev/null +++ b/src/main/java/com/metalloop/modules/auth/service/impl/SysRolePermissionServiceImpl.java @@ -0,0 +1,170 @@ +package com.metalloop.modules.auth.service.impl; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; + +import com.metalloop.common.core.lock.DistributedLock; +import com.metalloop.common.core.lock.LockCondition; +import com.metalloop.common.service.impl.SuperServiceImpl; +import com.metalloop.modules.auth.mapper.SysRolePermissionMapper; +import com.metalloop.modules.auth.model.po.SysRolePermission; +import com.metalloop.modules.auth.model.query.SysRolePermissionQuery; +import com.metalloop.modules.auth.service.SysRolePermissionService; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import jakarta.annotation.Resource; +import java.util.List; +import java.util.Map; + +/** + * 角色-权限关联 Service 实现类 + * + * @author yy + * @since 2026-09-10 + */ +@SuppressWarnings("java:S6809") +@Service +public class SysRolePermissionServiceImpl extends SuperServiceImpl implements SysRolePermissionService { + + @Resource + private DistributedLock distributedLock; + + @Resource + SysRolePermissionMapper sysRolePermissionMapper; + + // region 自动生成代码区,后续手动添加的代码要放在这个区域之外 + + @Override + public SysRolePermission create(SysRolePermission sysRolePermission) { + save(sysRolePermission); + return sysRolePermission; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean batchCreate(List sysRolePermissions) { + return saveBatch(sysRolePermissions); + } + + @Override + public List listAll() { + return list(); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean batchUpdateById(List sysRolePermissions) { + return updateBatchById(sysRolePermissions); + } + + @Override + public Boolean deleteById(Long id) { + return removeById(id); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean batchDelete(List ids) { + return removeByIds(ids); + } + + @SafeVarargs + @Override + public final Boolean createIdempotency(SysRolePermission entity, LockCondition... conditions) { + return saveIdempotency(entity, distributedLock, conditions); + } + + @SafeVarargs + @Override + public final Boolean updateByIdIdempotency(SysRolePermission entity, LockCondition... conditions) { + return updateByIdIdempotency(entity, distributedLock, conditions); + } + + @SafeVarargs + @Override + public final Boolean saveOrUpdateIdempotency(SysRolePermission entity, LockCondition... conditions) { + return saveOrUpdateIdempotency(entity, distributedLock, conditions); + } + + @Override + public Page pageByQuery(long current, long size, SysRolePermissionQuery query) { + return page(Page.of(current, size), query); + } + + @Override + public Page pageAll(long current, long size) { + return page(Page.of(current, size)); + } + + @Override + public Map getIdMap() { + return toMap(e -> String.valueOf(e.getId()), list()); + } + + @Override + public Map getIdMapByIds(List ids) { + return toMap(e -> String.valueOf(e.getId()), listByIds(ids)); + } + + @Override + public Map> getIdGroup() { + return toGroup(e -> String.valueOf(e.getId()), list()); + } + + @Override + public Map> getIdGroupByIds(List ids) { + return toGroup(e -> String.valueOf(e.getId()), listByIds(ids)); + } + + @Override + public Long countAll() { + return count(); + } + + // region 此区域的方法主要用作示例,禁止滥用,因为Query对象大而全,调用者会很迷惑,必须封装为更具体的参数及签名的方法,如getByCodeAndType(String code, Integer type)。 + // 除非:确实需要3个及以上参数,方可合并为Query,如SysRolePermissionQuery + + @Override + public Boolean updateByQuery(SysRolePermission entity, SysRolePermissionQuery query) { + return update(entity, query); + } + + @Override + public Boolean removeByQuery(SysRolePermissionQuery query) { + return remove(query); + } + + @Override + public SysRolePermission getByQuery(SysRolePermissionQuery query) { + return get(query); + } + + @Override + public List listByQuery(SysRolePermissionQuery query) { + return list(query); + } + + @Override + public Map getIdMapByQuery(SysRolePermissionQuery query) { + return toMap(SysRolePermission::getId, query); + } + + @Override + public Map> getIdGroupByQuery(SysRolePermissionQuery query) { + return toGroup(SysRolePermission::getId, query); + } + + @Override + public Long countByQuery(SysRolePermissionQuery query) { + return count(query); + } + + @Override + public Boolean existsByQuery(SysRolePermissionQuery query) { + long count = count(query); + return count > 0; + } + // endregion + + // endregion 自动生成代码区,后续手动添加的代码要放在这个区域之外 +} diff --git a/src/main/java/com/metalloop/modules/auth/service/impl/SysRoleServiceImpl.java b/src/main/java/com/metalloop/modules/auth/service/impl/SysRoleServiceImpl.java new file mode 100644 index 0000000..bcd78b5 --- /dev/null +++ b/src/main/java/com/metalloop/modules/auth/service/impl/SysRoleServiceImpl.java @@ -0,0 +1,173 @@ +package com.metalloop.modules.auth.service.impl; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; + +import com.metalloop.common.core.lock.DistributedLock; +import com.metalloop.common.core.lock.LockCondition; +import com.metalloop.common.service.impl.SuperServiceImpl; +import com.metalloop.modules.auth.mapper.SysRoleMapper; +import com.metalloop.modules.auth.model.po.SysPermission; +import com.metalloop.modules.auth.model.po.SysRole; +import com.metalloop.modules.auth.model.query.SysRoleQuery; +import com.metalloop.modules.auth.service.SysRoleService; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import jakarta.annotation.Resource; +import java.util.List; +import java.util.Map; + +/** + * 角色 Service 实现类 + * + * @author yy + * @since 2026-09-10 + */ +@SuppressWarnings("java:S6809") +@Service +public class SysRoleServiceImpl extends SuperServiceImpl implements SysRoleService { + + @Resource + private DistributedLock distributedLock; + + @Resource + SysRoleMapper sysRoleMapper; + + // region 自动生成代码区,后续手动添加的代码要放在这个区域之外 + + @Override + public SysRole create(SysRole sysRole) { + save(sysRole); + return sysRole; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean batchCreate(List sysRoles) { + return saveBatch(sysRoles); + } + + @Override + public List listAll() { + return list(); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean batchUpdateById(List sysRoles) { + return updateBatchById(sysRoles); + } + + @Override + public Boolean deleteById(Long id) { + return removeById(id); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean batchDelete(List ids) { + return removeByIds(ids); + } + + @SafeVarargs + @Override + public final Boolean createIdempotency(SysRole entity, LockCondition... conditions) { + return saveIdempotency(entity, distributedLock, conditions); + } + + @SafeVarargs + @Override + public final Boolean updateByIdIdempotency(SysRole entity, LockCondition... conditions) { + return updateByIdIdempotency(entity, distributedLock, conditions); + } + + @SafeVarargs + @Override + public final Boolean saveOrUpdateIdempotency(SysRole entity, LockCondition... conditions) { + return saveOrUpdateIdempotency(entity, distributedLock, conditions); + } + + @Override + public Page pageByQuery(long current, long size, SysRoleQuery query) { + return page(Page.of(current, size), query); + } + + @Override + public Page pageAll(long current, long size) { + return page(Page.of(current, size)); + } + + @Override + public Map getIdMap() { + return toMap(e -> String.valueOf(e.getId()), list()); + } + + @Override + public Map getIdMapByIds(List ids) { + return toMap(e -> String.valueOf(e.getId()), listByIds(ids)); + } + + @Override + public Map> getIdGroup() { + return toGroup(e -> String.valueOf(e.getId()), list()); + } + + @Override + public Map> getIdGroupByIds(List ids) { + return toGroup(e -> String.valueOf(e.getId()), listByIds(ids)); + } + + @Override + public Long countAll() { + return count(); + } + + // region 此区域的方法主要用作示例,禁止滥用,因为Query对象大而全,调用者会很迷惑,必须封装为更具体的参数及签名的方法,如getByCodeAndType(String code, Integer type)。 + // 除非:确实需要3个及以上参数,方可合并为Query,如SysRoleQuery + + @Override + public Boolean updateByQuery(SysRole entity, SysRoleQuery query) { + return update(entity, query); + } + + @Override + public Boolean removeByQuery(SysRoleQuery query) { + return remove(query); + } + + @Override + public SysRole getByQuery(SysRoleQuery query) { + return get(query); + } + + @Override + public List listByQuery(SysRoleQuery query) { + return list(query); + } + + @Override + public Map getIdMapByQuery(SysRoleQuery query) { + return toMap(SysRole::getId, query); + } + + @Override + public Map> getIdGroupByQuery(SysRoleQuery query) { + return toGroup(SysRole::getId, query); + } + + @Override + public Long countByQuery(SysRoleQuery query) { + return count(query); + } + + @Override + public Boolean existsByQuery(SysRoleQuery query) { + long count = count(query); + return count > 0; + } + + + // endregion + + // endregion 自动生成代码区,后续手动添加的代码要放在这个区域之外 +} diff --git a/src/main/java/com/metalloop/modules/auth/service/impl/SysUserRoleServiceImpl.java b/src/main/java/com/metalloop/modules/auth/service/impl/SysUserRoleServiceImpl.java new file mode 100644 index 0000000..94afb91 --- /dev/null +++ b/src/main/java/com/metalloop/modules/auth/service/impl/SysUserRoleServiceImpl.java @@ -0,0 +1,170 @@ +package com.metalloop.modules.auth.service.impl; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; + +import com.metalloop.common.core.lock.DistributedLock; +import com.metalloop.common.core.lock.LockCondition; +import com.metalloop.common.service.impl.SuperServiceImpl; +import com.metalloop.modules.auth.mapper.SysUserRoleMapper; +import com.metalloop.modules.auth.model.po.SysUserRole; +import com.metalloop.modules.auth.model.query.SysUserRoleQuery; +import com.metalloop.modules.auth.service.SysUserRoleService; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import jakarta.annotation.Resource; +import java.util.List; +import java.util.Map; + +/** + * 用户与角色关联 Service 实现类 + * + * @author yy + * @since 2026-09-10 + */ +@SuppressWarnings("java:S6809") +@Service +public class SysUserRoleServiceImpl extends SuperServiceImpl implements SysUserRoleService { + + @Resource + private DistributedLock distributedLock; + + @Resource + SysUserRoleMapper sysUserRoleMapper; + + // region 自动生成代码区,后续手动添加的代码要放在这个区域之外 + + @Override + public SysUserRole create(SysUserRole sysUserRole) { + save(sysUserRole); + return sysUserRole; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean batchCreate(List sysUserRoles) { + return saveBatch(sysUserRoles); + } + + @Override + public List listAll() { + return list(); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean batchUpdateById(List sysUserRoles) { + return updateBatchById(sysUserRoles); + } + + @Override + public Boolean deleteById(Long id) { + return removeById(id); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean batchDelete(List ids) { + return removeByIds(ids); + } + + @SafeVarargs + @Override + public final Boolean createIdempotency(SysUserRole entity, LockCondition... conditions) { + return saveIdempotency(entity, distributedLock, conditions); + } + + @SafeVarargs + @Override + public final Boolean updateByIdIdempotency(SysUserRole entity, LockCondition... conditions) { + return updateByIdIdempotency(entity, distributedLock, conditions); + } + + @SafeVarargs + @Override + public final Boolean saveOrUpdateIdempotency(SysUserRole entity, LockCondition... conditions) { + return saveOrUpdateIdempotency(entity, distributedLock, conditions); + } + + @Override + public Page pageByQuery(long current, long size, SysUserRoleQuery query) { + return page(Page.of(current, size), query); + } + + @Override + public Page pageAll(long current, long size) { + return page(Page.of(current, size)); + } + + @Override + public Map getIdMap() { + return toMap(e -> String.valueOf(e.getId()), list()); + } + + @Override + public Map getIdMapByIds(List ids) { + return toMap(e -> String.valueOf(e.getId()), listByIds(ids)); + } + + @Override + public Map> getIdGroup() { + return toGroup(e -> String.valueOf(e.getId()), list()); + } + + @Override + public Map> getIdGroupByIds(List ids) { + return toGroup(e -> String.valueOf(e.getId()), listByIds(ids)); + } + + @Override + public Long countAll() { + return count(); + } + + // region 此区域的方法主要用作示例,禁止滥用,因为Query对象大而全,调用者会很迷惑,必须封装为更具体的参数及签名的方法,如getByCodeAndType(String code, Integer type)。 + // 除非:确实需要3个及以上参数,方可合并为Query,如SysUserRoleQuery + + @Override + public Boolean updateByQuery(SysUserRole entity, SysUserRoleQuery query) { + return update(entity, query); + } + + @Override + public Boolean removeByQuery(SysUserRoleQuery query) { + return remove(query); + } + + @Override + public SysUserRole getByQuery(SysUserRoleQuery query) { + return get(query); + } + + @Override + public List listByQuery(SysUserRoleQuery query) { + return list(query); + } + + @Override + public Map getIdMapByQuery(SysUserRoleQuery query) { + return toMap(SysUserRole::getId, query); + } + + @Override + public Map> getIdGroupByQuery(SysUserRoleQuery query) { + return toGroup(SysUserRole::getId, query); + } + + @Override + public Long countByQuery(SysUserRoleQuery query) { + return count(query); + } + + @Override + public Boolean existsByQuery(SysUserRoleQuery query) { + long count = count(query); + return count > 0; + } + // endregion + + // endregion 自动生成代码区,后续手动添加的代码要放在这个区域之外 +} diff --git a/src/main/java/com/metalloop/modules/auth/service/impl/SysUserServiceImpl.java b/src/main/java/com/metalloop/modules/auth/service/impl/SysUserServiceImpl.java new file mode 100644 index 0000000..b01e154 --- /dev/null +++ b/src/main/java/com/metalloop/modules/auth/service/impl/SysUserServiceImpl.java @@ -0,0 +1,169 @@ +package com.metalloop.modules.auth.service.impl; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.metalloop.common.core.lock.DistributedLock; +import com.metalloop.common.core.lock.LockCondition; +import com.metalloop.common.service.impl.SuperServiceImpl; +import com.metalloop.modules.auth.mapper.SysUserMapper; +import com.metalloop.modules.auth.model.po.SysUser; +import com.metalloop.modules.auth.model.query.SysUserQuery; +import com.metalloop.modules.auth.service.SysUserService; +import jakarta.annotation.Resource; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; +import java.util.Map; + +/** + * 用户 Service 实现类 + * + * @author yy + * @since 2026-09-10 + */ +@SuppressWarnings("java:S6809") +@Service +public class SysUserServiceImpl extends SuperServiceImpl implements SysUserService { + + @Resource + private DistributedLock distributedLock; + + @Resource + SysUserMapper sysUserMapper; + + // region 自动生成代码区,后续手动添加的代码要放在这个区域之外 + + @Override + public SysUser create(SysUser sysUser) { + save(sysUser); + return sysUser; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean batchCreate(List sysUsers) { + return saveBatch(sysUsers); + } + + @Override + public List listAll() { + return list(); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean batchUpdateById(List sysUsers) { + return updateBatchById(sysUsers); + } + + @Override + public Boolean deleteById(Long id) { + return removeById(id); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean batchDelete(List ids) { + return removeByIds(ids); + } + + @SafeVarargs + @Override + public final Boolean createIdempotency(SysUser entity, LockCondition... conditions) { + return saveIdempotency(entity, distributedLock, conditions); + } + + @SafeVarargs + @Override + public final Boolean updateByIdIdempotency(SysUser entity, LockCondition... conditions) { + return updateByIdIdempotency(entity, distributedLock, conditions); + } + + @SafeVarargs + @Override + public final Boolean saveOrUpdateIdempotency(SysUser entity, LockCondition... conditions) { + return saveOrUpdateIdempotency(entity, distributedLock, conditions); + } + + @Override + public Page pageByQuery(long current, long size, SysUserQuery query) { + return page(Page.of(current, size), query); + } + + @Override + public Page pageAll(long current, long size) { + return page(Page.of(current, size)); + } + + @Override + public Map getIdMap() { + return toMap(e -> String.valueOf(e.getId()), list()); + } + + @Override + public Map getIdMapByIds(List ids) { + return toMap(e -> String.valueOf(e.getId()), listByIds(ids)); + } + + @Override + public Map> getIdGroup() { + return toGroup(e -> String.valueOf(e.getId()), list()); + } + + @Override + public Map> getIdGroupByIds(List ids) { + return toGroup(e -> String.valueOf(e.getId()), listByIds(ids)); + } + + @Override + public Long countAll() { + return count(); + } + + // region 此区域的方法主要用作示例,禁止滥用,因为Query对象大而全,调用者会很迷惑,必须封装为更具体的参数及签名的方法,如getByCodeAndType(String code, Integer type)。 + // 除非:确实需要3个及以上参数,方可合并为Query,如SysUserQuery + + @Override + public Boolean updateByQuery(SysUser entity, SysUserQuery query) { + return update(entity, query); + } + + @Override + public Boolean removeByQuery(SysUserQuery query) { + return remove(query); + } + + @Override + public SysUser getByQuery(SysUserQuery query) { + return get(query); + } + + @Override + public List listByQuery(SysUserQuery query) { + return list(query); + } + + @Override + public Map getIdMapByQuery(SysUserQuery query) { + return toMap(SysUser::getId, query); + } + + @Override + public Map> getIdGroupByQuery(SysUserQuery query) { + return toGroup(SysUser::getId, query); + } + + @Override + public Long countByQuery(SysUserQuery query) { + return count(query); + } + + @Override + public Boolean existsByQuery(SysUserQuery query) { + long count = count(query); + return count > 0; + } + // endregion + + // endregion 自动生成代码区,后续手动添加的代码要放在这个区域之外 +} diff --git a/src/main/java/com/metalloop/modules/bussiness/converter/BizEnterpriseProductConverter.java b/src/main/java/com/metalloop/modules/bussiness/converter/BizEnterpriseProductConverter.java new file mode 100644 index 0000000..145038c --- /dev/null +++ b/src/main/java/com/metalloop/modules/bussiness/converter/BizEnterpriseProductConverter.java @@ -0,0 +1,65 @@ +package com.metalloop.modules.bussiness.converter; + +import com.metalloop.modules.bussiness.model.req.BizEnterpriseProductQueryReqDto; +import com.metalloop.modules.bussiness.model.req.BizEnterpriseProductReqDto; +import com.metalloop.modules.bussiness.model.resp.BizEnterpriseProductRespDto; +import com.metalloop.modules.bussiness.model.po.BizEnterpriseProduct; +import com.metalloop.modules.bussiness.model.query.BizEnterpriseProductQuery; +import org.mapstruct.Builder; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +import java.util.List; + +/** + * 企业经营产品转换器 + * + * @author yy + * @since 2026-09-10 + */ +@SuppressWarnings("UnmappedTargetProperties") +@Mapper(builder = @Builder(disableBuilder = true)) +public interface BizEnterpriseProductConverter { + + BizEnterpriseProductConverter INSTANCE = Mappers.getMapper(BizEnterpriseProductConverter.class); + + /** + * 实体转换为响应 DTO + * + * @param bizEnterpriseProduct 实体 + * @return 转换后的数据 + */ + BizEnterpriseProductRespDto toRespDto(BizEnterpriseProduct bizEnterpriseProduct); + + /** + * 实体列表转换为响应 DTO 列表 + * + * @param bizEnterpriseProducts 实体列表 + * @return 转换后的数据 + */ + List toRespDto(List bizEnterpriseProducts); + + /** + * 请求 DTO 转换为实体 + * + * @param bizEnterpriseProductReqDto 请求 DTO + * @return 转换后的数据 + */ + BizEnterpriseProduct fromReqDto(BizEnterpriseProductReqDto bizEnterpriseProductReqDto); + + /** + * 请求 DTO 列表转换为实体列表 + * + * @param bizEnterpriseProductReqDtos 请求 DTO 列表 + * @return 转换后的数据 + */ + List fromReqDto(List bizEnterpriseProductReqDtos); + + /** + * 查询请求 DTO 转换为查询对象 + * + * @param bizEnterpriseProductQueryReqDto 查询请求DTO + * @return 转换后的数据 + */ + BizEnterpriseProductQuery fromQueryReqDtoToQuery(BizEnterpriseProductQueryReqDto bizEnterpriseProductQueryReqDto); +} diff --git a/src/main/java/com/metalloop/modules/bussiness/converter/BizMaterialConverter.java b/src/main/java/com/metalloop/modules/bussiness/converter/BizMaterialConverter.java new file mode 100644 index 0000000..07d77ef --- /dev/null +++ b/src/main/java/com/metalloop/modules/bussiness/converter/BizMaterialConverter.java @@ -0,0 +1,65 @@ +package com.metalloop.modules.bussiness.converter; + +import com.metalloop.modules.bussiness.model.req.BizMaterialQueryReqDto; +import com.metalloop.modules.bussiness.model.req.BizMaterialReqDto; +import com.metalloop.modules.bussiness.model.resp.BizMaterialRespDto; +import com.metalloop.modules.bussiness.model.po.BizMaterial; +import com.metalloop.modules.bussiness.model.query.BizMaterialQuery; +import org.mapstruct.Builder; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +import java.util.List; + +/** + * 业务-材质基础转换器 + * + * @author yy + * @since 2026-09-10 + */ +@SuppressWarnings("UnmappedTargetProperties") +@Mapper(builder = @Builder(disableBuilder = true)) +public interface BizMaterialConverter { + + BizMaterialConverter INSTANCE = Mappers.getMapper(BizMaterialConverter.class); + + /** + * 实体转换为响应 DTO + * + * @param bizMaterial 实体 + * @return 转换后的数据 + */ + BizMaterialRespDto toRespDto(BizMaterial bizMaterial); + + /** + * 实体列表转换为响应 DTO 列表 + * + * @param bizMaterials 实体列表 + * @return 转换后的数据 + */ + List toRespDto(List bizMaterials); + + /** + * 请求 DTO 转换为实体 + * + * @param bizMaterialReqDto 请求 DTO + * @return 转换后的数据 + */ + BizMaterial fromReqDto(BizMaterialReqDto bizMaterialReqDto); + + /** + * 请求 DTO 列表转换为实体列表 + * + * @param bizMaterialReqDtos 请求 DTO 列表 + * @return 转换后的数据 + */ + List fromReqDto(List bizMaterialReqDtos); + + /** + * 查询请求 DTO 转换为查询对象 + * + * @param bizMaterialQueryReqDto 查询请求DTO + * @return 转换后的数据 + */ + BizMaterialQuery fromQueryReqDtoToQuery(BizMaterialQueryReqDto bizMaterialQueryReqDto); +} diff --git a/src/main/java/com/metalloop/modules/bussiness/converter/BizPurchaseRequestConverter.java b/src/main/java/com/metalloop/modules/bussiness/converter/BizPurchaseRequestConverter.java new file mode 100644 index 0000000..85f6e7f --- /dev/null +++ b/src/main/java/com/metalloop/modules/bussiness/converter/BizPurchaseRequestConverter.java @@ -0,0 +1,65 @@ +package com.metalloop.modules.bussiness.converter; + +import com.metalloop.modules.bussiness.model.req.BizPurchaseRequestQueryReqDto; +import com.metalloop.modules.bussiness.model.req.BizPurchaseRequestReqDto; +import com.metalloop.modules.bussiness.model.resp.BizPurchaseRequestRespDto; +import com.metalloop.modules.bussiness.model.po.BizPurchaseRequest; +import com.metalloop.modules.bussiness.model.query.BizPurchaseRequestQuery; +import org.mapstruct.Builder; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +import java.util.List; + +/** + * 业务-求购信息转换器 + * + * @author yy + * @since 2026-09-10 + */ +@SuppressWarnings("UnmappedTargetProperties") +@Mapper(builder = @Builder(disableBuilder = true)) +public interface BizPurchaseRequestConverter { + + BizPurchaseRequestConverter INSTANCE = Mappers.getMapper(BizPurchaseRequestConverter.class); + + /** + * 实体转换为响应 DTO + * + * @param bizPurchaseRequest 实体 + * @return 转换后的数据 + */ + BizPurchaseRequestRespDto toRespDto(BizPurchaseRequest bizPurchaseRequest); + + /** + * 实体列表转换为响应 DTO 列表 + * + * @param bizPurchaseRequests 实体列表 + * @return 转换后的数据 + */ + List toRespDto(List bizPurchaseRequests); + + /** + * 请求 DTO 转换为实体 + * + * @param bizPurchaseRequestReqDto 请求 DTO + * @return 转换后的数据 + */ + BizPurchaseRequest fromReqDto(BizPurchaseRequestReqDto bizPurchaseRequestReqDto); + + /** + * 请求 DTO 列表转换为实体列表 + * + * @param bizPurchaseRequestReqDtos 请求 DTO 列表 + * @return 转换后的数据 + */ + List fromReqDto(List bizPurchaseRequestReqDtos); + + /** + * 查询请求 DTO 转换为查询对象 + * + * @param bizPurchaseRequestQueryReqDto 查询请求DTO + * @return 转换后的数据 + */ + BizPurchaseRequestQuery fromQueryReqDtoToQuery(BizPurchaseRequestQueryReqDto bizPurchaseRequestQueryReqDto); +} diff --git a/src/main/java/com/metalloop/modules/bussiness/converter/BizSupplyInfoConverter.java b/src/main/java/com/metalloop/modules/bussiness/converter/BizSupplyInfoConverter.java new file mode 100644 index 0000000..3feeee6 --- /dev/null +++ b/src/main/java/com/metalloop/modules/bussiness/converter/BizSupplyInfoConverter.java @@ -0,0 +1,65 @@ +package com.metalloop.modules.bussiness.converter; + +import com.metalloop.modules.bussiness.model.req.BizSupplyInfoQueryReqDto; +import com.metalloop.modules.bussiness.model.req.BizSupplyInfoReqDto; +import com.metalloop.modules.bussiness.model.resp.BizSupplyInfoRespDto; +import com.metalloop.modules.bussiness.model.po.BizSupplyInfo; +import com.metalloop.modules.bussiness.model.query.BizSupplyInfoQuery; +import org.mapstruct.Builder; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +import java.util.List; + +/** + * 业务-发布信息转换器 + * + * @author yy + * @since 2026-09-10 + */ +@SuppressWarnings("UnmappedTargetProperties") +@Mapper(builder = @Builder(disableBuilder = true)) +public interface BizSupplyInfoConverter { + + BizSupplyInfoConverter INSTANCE = Mappers.getMapper(BizSupplyInfoConverter.class); + + /** + * 实体转换为响应 DTO + * + * @param bizSupplyInfo 实体 + * @return 转换后的数据 + */ + BizSupplyInfoRespDto toRespDto(BizSupplyInfo bizSupplyInfo); + + /** + * 实体列表转换为响应 DTO 列表 + * + * @param bizSupplyInfos 实体列表 + * @return 转换后的数据 + */ + List toRespDto(List bizSupplyInfos); + + /** + * 请求 DTO 转换为实体 + * + * @param bizSupplyInfoReqDto 请求 DTO + * @return 转换后的数据 + */ + BizSupplyInfo fromReqDto(BizSupplyInfoReqDto bizSupplyInfoReqDto); + + /** + * 请求 DTO 列表转换为实体列表 + * + * @param bizSupplyInfoReqDtos 请求 DTO 列表 + * @return 转换后的数据 + */ + List fromReqDto(List bizSupplyInfoReqDtos); + + /** + * 查询请求 DTO 转换为查询对象 + * + * @param bizSupplyInfoQueryReqDto 查询请求DTO + * @return 转换后的数据 + */ + BizSupplyInfoQuery fromQueryReqDtoToQuery(BizSupplyInfoQueryReqDto bizSupplyInfoQueryReqDto); +} diff --git a/src/main/java/com/metalloop/modules/bussiness/converter/BizVarietyConverter.java b/src/main/java/com/metalloop/modules/bussiness/converter/BizVarietyConverter.java new file mode 100644 index 0000000..9111100 --- /dev/null +++ b/src/main/java/com/metalloop/modules/bussiness/converter/BizVarietyConverter.java @@ -0,0 +1,65 @@ +package com.metalloop.modules.bussiness.converter; + +import com.metalloop.modules.bussiness.model.req.BizVarietyQueryReqDto; +import com.metalloop.modules.bussiness.model.req.BizVarietyReqDto; +import com.metalloop.modules.bussiness.model.resp.BizVarietyRespDto; +import com.metalloop.modules.bussiness.model.po.BizVariety; +import com.metalloop.modules.bussiness.model.query.BizVarietyQuery; +import org.mapstruct.Builder; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +import java.util.List; + +/** + * 业务-产品品种转换器 + * + * @author yy + * @since 2026-09-10 + */ +@SuppressWarnings("UnmappedTargetProperties") +@Mapper(builder = @Builder(disableBuilder = true)) +public interface BizVarietyConverter { + + BizVarietyConverter INSTANCE = Mappers.getMapper(BizVarietyConverter.class); + + /** + * 实体转换为响应 DTO + * + * @param bizVariety 实体 + * @return 转换后的数据 + */ + BizVarietyRespDto toRespDto(BizVariety bizVariety); + + /** + * 实体列表转换为响应 DTO 列表 + * + * @param bizVarietys 实体列表 + * @return 转换后的数据 + */ + List toRespDto(List bizVarietys); + + /** + * 请求 DTO 转换为实体 + * + * @param bizVarietyReqDto 请求 DTO + * @return 转换后的数据 + */ + BizVariety fromReqDto(BizVarietyReqDto bizVarietyReqDto); + + /** + * 请求 DTO 列表转换为实体列表 + * + * @param bizVarietyReqDtos 请求 DTO 列表 + * @return 转换后的数据 + */ + List fromReqDto(List bizVarietyReqDtos); + + /** + * 查询请求 DTO 转换为查询对象 + * + * @param bizVarietyQueryReqDto 查询请求DTO + * @return 转换后的数据 + */ + BizVarietyQuery fromQueryReqDtoToQuery(BizVarietyQueryReqDto bizVarietyQueryReqDto); +} diff --git a/src/main/java/com/metalloop/modules/bussiness/mapper/BizEnterpriseProductMapper.java b/src/main/java/com/metalloop/modules/bussiness/mapper/BizEnterpriseProductMapper.java new file mode 100644 index 0000000..4b0fa06 --- /dev/null +++ b/src/main/java/com/metalloop/modules/bussiness/mapper/BizEnterpriseProductMapper.java @@ -0,0 +1,15 @@ +package com.metalloop.modules.bussiness.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.metalloop.modules.bussiness.model.po.BizEnterpriseProduct; +import org.apache.ibatis.annotations.Mapper; + +/** + * 企业经营产品 Mapper + * + * @author yy + * @since 2026-09-10 + */ +@Mapper +public interface BizEnterpriseProductMapper extends BaseMapper { +} \ No newline at end of file diff --git a/src/main/java/com/metalloop/modules/bussiness/mapper/BizMaterialMapper.java b/src/main/java/com/metalloop/modules/bussiness/mapper/BizMaterialMapper.java new file mode 100644 index 0000000..8ef043d --- /dev/null +++ b/src/main/java/com/metalloop/modules/bussiness/mapper/BizMaterialMapper.java @@ -0,0 +1,15 @@ +package com.metalloop.modules.bussiness.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.metalloop.modules.bussiness.model.po.BizMaterial; +import org.apache.ibatis.annotations.Mapper; + +/** + * 业务-材质基础 Mapper + * + * @author yy + * @since 2026-09-10 + */ +@Mapper +public interface BizMaterialMapper extends BaseMapper { +} \ No newline at end of file diff --git a/src/main/java/com/metalloop/modules/bussiness/mapper/BizPurchaseRequestMapper.java b/src/main/java/com/metalloop/modules/bussiness/mapper/BizPurchaseRequestMapper.java new file mode 100644 index 0000000..b10c0e3 --- /dev/null +++ b/src/main/java/com/metalloop/modules/bussiness/mapper/BizPurchaseRequestMapper.java @@ -0,0 +1,15 @@ +package com.metalloop.modules.bussiness.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.metalloop.modules.bussiness.model.po.BizPurchaseRequest; +import org.apache.ibatis.annotations.Mapper; + +/** + * 业务-求购信息 Mapper + * + * @author yy + * @since 2026-09-10 + */ +@Mapper +public interface BizPurchaseRequestMapper extends BaseMapper { +} \ No newline at end of file diff --git a/src/main/java/com/metalloop/modules/bussiness/mapper/BizSupplyInfoMapper.java b/src/main/java/com/metalloop/modules/bussiness/mapper/BizSupplyInfoMapper.java new file mode 100644 index 0000000..e6c1aa5 --- /dev/null +++ b/src/main/java/com/metalloop/modules/bussiness/mapper/BizSupplyInfoMapper.java @@ -0,0 +1,15 @@ +package com.metalloop.modules.bussiness.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.metalloop.modules.bussiness.model.po.BizSupplyInfo; +import org.apache.ibatis.annotations.Mapper; + +/** + * 业务-发布信息 Mapper + * + * @author yy + * @since 2026-09-10 + */ +@Mapper +public interface BizSupplyInfoMapper extends BaseMapper { +} \ No newline at end of file diff --git a/src/main/java/com/metalloop/modules/bussiness/mapper/BizVarietyMapper.java b/src/main/java/com/metalloop/modules/bussiness/mapper/BizVarietyMapper.java new file mode 100644 index 0000000..f7f5e12 --- /dev/null +++ b/src/main/java/com/metalloop/modules/bussiness/mapper/BizVarietyMapper.java @@ -0,0 +1,15 @@ +package com.metalloop.modules.bussiness.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.metalloop.modules.bussiness.model.po.BizVariety; +import org.apache.ibatis.annotations.Mapper; + +/** + * 业务-产品品种 Mapper + * + * @author yy + * @since 2026-09-10 + */ +@Mapper +public interface BizVarietyMapper extends BaseMapper { +} \ No newline at end of file diff --git a/src/main/java/com/metalloop/modules/bussiness/model/po/BizEnterpriseProduct.java b/src/main/java/com/metalloop/modules/bussiness/model/po/BizEnterpriseProduct.java new file mode 100644 index 0000000..2a74ba7 --- /dev/null +++ b/src/main/java/com/metalloop/modules/bussiness/model/po/BizEnterpriseProduct.java @@ -0,0 +1,97 @@ +package com.metalloop.modules.bussiness.model.po; + +import com.baomidou.mybatisplus.annotation.*; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 企业经营产品 + * + * @author yy + * @since 2026-09-10 + */ +@Schema(description = "企业经营产品") +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +@TableName(value = "biz_enterprise_product") +public class BizEnterpriseProduct implements Serializable { + + /** + * 记录ID(主键) + */ + @Schema(description = "记录ID(主键)") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + /** + * 企业ID(关联 ent_enterprise 表) + */ + @Schema(description = "企业ID(关联 ent_enterprise 表)") + @TableField(value = "enterprise_id") + private Long enterpriseId; + + /** + * 品种ID(关联 biz_variety 表) + */ + @Schema(description = "品种ID(关联 biz_variety 表)") + @TableField(value = "variety_id") + private Long varietyId; + + /** + * 材质ID(关联 biz_material 表) + */ + @Schema(description = "材质ID(关联 biz_material 表)") + @TableField(value = "material_id") + private Long materialId; + + /** + * 单价 + */ + @Schema(description = "单价") + @TableField(value = "unit_price") + private java.math.BigDecimal unitPrice; + + /** + * 可供应重量 + */ + @Schema(description = "可供应重量") + @TableField(value = "weight") + private java.math.BigDecimal weight; + + /** + * 状态(0-下架/停售,1-上架/在售) + */ + @Schema(description = "状态(0-下架/停售,1-上架/在售)") + @TableField(value = "status") + private Boolean status; + + /** + * 备注说明(如:含税价、交货期等) + */ + @Schema(description = "备注说明(如:含税价、交货期等)") + @TableField(value = "remark") + private String remark; + + /** + * 创建时间 + */ + @Schema(description = "创建时间") + @TableField(value = "create_time", fill = FieldFill.INSERT) + private java.util.Date createTime; + + /** + * 更新时间 + */ + @Schema(description = "更新时间") + @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE) + private java.util.Date updateTime; + + private static final long serialVersionUID = 1L; +} diff --git a/src/main/java/com/metalloop/modules/bussiness/model/po/BizMaterial.java b/src/main/java/com/metalloop/modules/bussiness/model/po/BizMaterial.java new file mode 100644 index 0000000..88e6623 --- /dev/null +++ b/src/main/java/com/metalloop/modules/bussiness/model/po/BizMaterial.java @@ -0,0 +1,69 @@ +package com.metalloop.modules.bussiness.model.po; + +import com.baomidou.mybatisplus.annotation.*; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 业务-材质基础 + * + * @author yy + * @since 2026-09-10 + */ +@Schema(description = "业务-材质基础") +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +@TableName(value = "biz_material") +public class BizMaterial implements Serializable { + + /** + * 材质ID + */ + @Schema(description = "材质ID") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + /** + * 材质名称 + */ + @Schema(description = "材质名称") + @TableField(value = "material_name") + private String materialName; + + /** + * 材质编码 + */ + @Schema(description = "材质编码") + @TableField(value = "material_code") + private String materialCode; + + /** + * 材质描述 + */ + @Schema(description = "材质描述") + @TableField(value = "description") + private String description; + + /** + * 创建时间 + */ + @Schema(description = "创建时间") + @TableField(value = "create_time", fill = FieldFill.INSERT) + private java.util.Date createTime; + + /** + * 更新时间 + */ + @Schema(description = "更新时间") + @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE) + private java.util.Date updateTime; + + private static final long serialVersionUID = 1L; +} diff --git a/src/main/java/com/metalloop/modules/bussiness/model/po/BizPurchaseRequest.java b/src/main/java/com/metalloop/modules/bussiness/model/po/BizPurchaseRequest.java new file mode 100644 index 0000000..6b57341 --- /dev/null +++ b/src/main/java/com/metalloop/modules/bussiness/model/po/BizPurchaseRequest.java @@ -0,0 +1,209 @@ +package com.metalloop.modules.bussiness.model.po; + +import com.baomidou.mybatisplus.annotation.*; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 业务-求购信息 + * + * @author yy + * @since 2026-09-10 + */ +@Schema(description = "业务-求购信息") +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +@TableName(value = "biz_purchase_request") +public class BizPurchaseRequest implements Serializable { + + /** + * 求购信息ID(主键) + */ + @Schema(description = "求购信息ID(主键)") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + /** + * 发布人用户ID(关联 sys_user 表) + */ + @Schema(description = "发布人用户ID(关联 sys_user 表)") + @TableField(value = "create_user_id") + private Long createUserId; + + /** + * 所属企业ID + */ + @Schema(description = "所属企业ID") + @TableField(value = "enterprise_id") + private Long enterpriseId; + + /** + * 元素种类 + */ + @Schema(description = "元素种类") + @TableField(value = "element_type") + private String elementType; + + /** + * 商品类别 + */ + @Schema(description = "商品类别") + @TableField(value = "product_category") + private String productCategory; + + /** + * 商品材质(如:紫铜、黄铜、A00) + */ + @Schema(description = "商品材质(如:紫铜、黄铜、A00)") + @TableField(value = "material") + private String material; + + /** + * 求购标题 + */ + @Schema(description = "求购标题") + @TableField(value = "title") + private String title; + + /** + * 详细描述 + */ + @Schema(description = "详细描述") + @TableField(value = "description") + private String description; + + /** + * 求购数量( + */ + @Schema(description = "求购数量(") + @TableField(value = "quantity") + private java.math.BigDecimal quantity; + + /** + * 期望单价 + */ + @Schema(description = "期望单价") + @TableField(value = "unit_price") + private java.math.BigDecimal unitPrice; + + /** + * 联系人 + */ + @Schema(description = "联系人") + @TableField(value = "contact_person") + private String contactPerson; + + /** + * 联系电话 + */ + @Schema(description = "联系电话") + @TableField(value = "contact_phone") + private String contactPhone; + + /** + * 交货期 + */ + @Schema(description = "交货期") + @TableField(value = "delivery_date") + private java.util.Date deliveryDate; + + /** + * 交货地点 + */ + @Schema(description = "交货地点") + @TableField(value = "delivery_location") + private String deliveryLocation; + + /** + * 图片URL + */ + @Schema(description = "图片URL") + @TableField(value = "image_url") + private String imageUrl; + + /** + * 审核状态(0-待审核,1-已通过,2-已驳回) + */ + @Schema(description = "审核状态(0-待审核,1-已通过,2-已驳回)") + @TableField(value = "audit_status") + private Boolean auditStatus; + + /** + * 发布时间 + */ + @Schema(description = "发布时间") + @TableField(value = "publish_time") + private java.util.Date publishTime; + + /** + * 过期时间(信息有效期截止) + */ + @Schema(description = "过期时间(信息有效期截止)") + @TableField(value = "expire_time") + private java.util.Date expireTime; + + /** + * 账期选择模式 + */ + @Schema(description = "账期选择模式") + @TableField(value = "account_period_mode") + private String accountPeriodMode; + + /** + * 定金比例 + */ + @Schema(description = "定金比例") + @TableField(value = "deposit_ratio") + private java.math.BigDecimal depositRatio; + + /** + * 尾款支付期限 + */ + @Schema(description = "尾款支付期限") + @TableField(value = "final_payment_deadline") + private String finalPaymentDeadline; + + /** + * 上下架状态(0-已下架,1-展示中) + */ + @Schema(description = "上下架状态(0-已下架,1-展示中)") + @TableField(value = "status") + private Boolean status; + + /** + * 审核驳回原因(audit_status=2时填写) + */ + @Schema(description = "审核驳回原因(audit_status=2时填写)") + @TableField(value = "reject_reason") + private String rejectReason; + + /** + * 最后修改人用户ID + */ + @Schema(description = "最后修改人用户ID") + @TableField(value = "update_user_id") + private Long updateUserId; + + /** + * 创建时间 + */ + @Schema(description = "创建时间") + @TableField(value = "create_time", fill = FieldFill.INSERT) + private java.util.Date createTime; + + /** + * 修改时间 + */ + @Schema(description = "修改时间") + @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE) + private java.util.Date updateTime; + + private static final long serialVersionUID = 1L; +} diff --git a/src/main/java/com/metalloop/modules/bussiness/model/po/BizSupplyInfo.java b/src/main/java/com/metalloop/modules/bussiness/model/po/BizSupplyInfo.java new file mode 100644 index 0000000..fd51cdf --- /dev/null +++ b/src/main/java/com/metalloop/modules/bussiness/model/po/BizSupplyInfo.java @@ -0,0 +1,202 @@ +package com.metalloop.modules.bussiness.model.po; + +import com.baomidou.mybatisplus.annotation.*; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 业务-发布信息 + * + * @author yy + * @since 2026-09-10 + */ +@Schema(description = "业务-发布信息") +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +@TableName(value = "biz_supply_info") +public class BizSupplyInfo implements Serializable { + + /** + * 发布信息ID + */ + @Schema(description = "发布信息ID") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + /** + * 发布人用户ID + */ + @Schema(description = "发布人用户ID") + @TableField(value = "create_user_id") + private Long createUserId; + + /** + * 所属企业ID + */ + @Schema(description = "所属企业ID") + @TableField(value = "enterprise_id") + private Long enterpriseId; + + /** + * 元素种类 + */ + @Schema(description = "元素种类") + @TableField(value = "element_type") + private String elementType; + + /** + * 商品类别 + */ + @Schema(description = "商品类别") + @TableField(value = "product_category") + private String productCategory; + + /** + * 商品材质 + */ + @Schema(description = "商品材质") + @TableField(value = "material") + private String material; + + /** + * 发布标题 + */ + @Schema(description = "发布标题") + @TableField(value = "title") + private String title; + + /** + * 详细描述 + */ + @Schema(description = "详细描述") + @TableField(value = "description") + private String description; + + /** + * 数量 + */ + @Schema(description = "数量") + @TableField(value = "quantity") + private java.math.BigDecimal quantity; + + /** + * 单价 + */ + @Schema(description = "单价") + @TableField(value = "unit_price") + private java.math.BigDecimal unitPrice; + + /** + * 联系人 + */ + @Schema(description = "联系人") + @TableField(value = "contact_person") + private String contactPerson; + + /** + * 电话 + */ + @Schema(description = "电话") + @TableField(value = "contact_phone") + private String contactPhone; + + /** + * 发货地点 + */ + @Schema(description = "发货地点") + @TableField(value = "delivery_location") + private String deliveryLocation; + + /** + * 图片 + */ + @Schema(description = "图片") + @TableField(value = "image_url") + private String imageUrl; + + /** + * 审核状态 + */ + @Schema(description = "审核状态") + @TableField(value = "audit_status") + private Boolean auditStatus; + + /** + * 发布时间 + */ + @Schema(description = "发布时间") + @TableField(value = "publish_time") + private java.util.Date publishTime; + + /** + * 过期时间 + */ + @Schema(description = "过期时间") + @TableField(value = "expire_time") + private java.util.Date expireTime; + + /** + * 账期选择模式 + */ + @Schema(description = "账期选择模式") + @TableField(value = "account_period_mode") + private String accountPeriodMode; + + /** + * 定金比例 + */ + @Schema(description = "定金比例") + @TableField(value = "deposit_ratio") + private java.math.BigDecimal depositRatio; + + /** + * 尾款支付期限 + */ + @Schema(description = "尾款支付期限") + @TableField(value = "final_payment_deadline") + private String finalPaymentDeadline; + + /** + * 上下架状态 + */ + @Schema(description = "上下架状态") + @TableField(value = "status") + private Boolean status; + + /** + * 审核驳回原因 + */ + @Schema(description = "审核驳回原因") + @TableField(value = "reject_reason") + private String rejectReason; + + /** + * 最后修改人用户ID + */ + @Schema(description = "最后修改人用户ID") + @TableField(value = "update_user_id") + private Long updateUserId; + + /** + * 创建时间 + */ + @Schema(description = "创建时间") + @TableField(value = "create_time", fill = FieldFill.INSERT) + private java.util.Date createTime; + + /** + * 修改时间 + */ + @Schema(description = "修改时间") + @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE) + private java.util.Date updateTime; + + private static final long serialVersionUID = 1L; +} diff --git a/src/main/java/com/metalloop/modules/bussiness/model/po/BizVariety.java b/src/main/java/com/metalloop/modules/bussiness/model/po/BizVariety.java new file mode 100644 index 0000000..0f20422 --- /dev/null +++ b/src/main/java/com/metalloop/modules/bussiness/model/po/BizVariety.java @@ -0,0 +1,97 @@ +package com.metalloop.modules.bussiness.model.po; + +import com.baomidou.mybatisplus.annotation.*; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 业务-产品品种 + * + * @author yy + * @since 2026-09-10 + */ +@Schema(description = "业务-产品品种") +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +@TableName(value = "biz_variety") +public class BizVariety implements Serializable { + + /** + * 品种ID(主键) + */ + @Schema(description = "品种ID(主键)") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + /** + * 品种名称 + */ + @Schema(description = "品种名称") + @TableField(value = "variety_name") + private String varietyName; + + /** + * 品种等级 + */ + @Schema(description = "品种等级") + @TableField(value = "variety_grade") + private String varietyGrade; + + /** + * 父级品种ID + */ + @Schema(description = "父级品种ID") + @TableField(value = "parent_id") + private Long parentId; + + /** + * 品种主体材质 + */ + @Schema(description = "品种主体材质") + @TableField(value = "variety_material") + private String varietyMaterial; + + /** + * 品种补充说明 + */ + @Schema(description = "品种补充说明") + @TableField(value = "description") + private String description; + + /** + * 排序权重 + */ + @Schema(description = "排序权重") + @TableField(value = "sort") + private Integer sort; + + /** + * 状态(0-禁用,1-启用) + */ + @Schema(description = "状态(0-禁用,1-启用)") + @TableField(value = "status") + private Boolean status; + + /** + * 创建时间 + */ + @Schema(description = "创建时间") + @TableField(value = "create_time", fill = FieldFill.INSERT) + private java.util.Date createTime; + + /** + * 更新时间 + */ + @Schema(description = "更新时间") + @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE) + private java.util.Date updateTime; + + private static final long serialVersionUID = 1L; +} diff --git a/src/main/java/com/metalloop/modules/bussiness/model/query/BizEnterpriseProductQuery.java b/src/main/java/com/metalloop/modules/bussiness/model/query/BizEnterpriseProductQuery.java new file mode 100644 index 0000000..41434a8 --- /dev/null +++ b/src/main/java/com/metalloop/modules/bussiness/model/query/BizEnterpriseProductQuery.java @@ -0,0 +1,96 @@ +package com.metalloop.modules.bussiness.model.query; + +import com.baomidou.mybatisplus.annotation.TableField; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 企业经营产品查询对象 + * + * @author yy + * @since 2026-09-10 + */ +@Schema(description = "企业经营产品查询对象") +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class BizEnterpriseProductQuery implements Serializable { + + /** + * 记录ID(主键) + */ + @Schema(description = "记录ID(主键)") + @TableField(value = "id") + private Long id; + + /** + * 企业ID(关联 ent_enterprise 表) + */ + @Schema(description = "企业ID(关联 ent_enterprise 表)") + @TableField(value = "enterprise_id") + private Long enterpriseId; + + /** + * 品种ID(关联 biz_variety 表) + */ + @Schema(description = "品种ID(关联 biz_variety 表)") + @TableField(value = "variety_id") + private Long varietyId; + + /** + * 材质ID(关联 biz_material 表) + */ + @Schema(description = "材质ID(关联 biz_material 表)") + @TableField(value = "material_id") + private Long materialId; + + /** + * 单价 + */ + @Schema(description = "单价") + @TableField(value = "unit_price") + private java.math.BigDecimal unitPrice; + + /** + * 可供应重量 + */ + @Schema(description = "可供应重量") + @TableField(value = "weight") + private java.math.BigDecimal weight; + + /** + * 状态(0-下架/停售,1-上架/在售) + */ + @Schema(description = "状态(0-下架/停售,1-上架/在售)") + @TableField(value = "status") + private Boolean status; + + /** + * 备注说明(如:含税价、交货期等) + */ + @Schema(description = "备注说明(如:含税价、交货期等)") + @TableField(value = "remark") + private String remark; + + /** + * 创建时间 + */ + @Schema(description = "创建时间") + @TableField(value = "create_time") + private java.util.Date createTime; + + /** + * 更新时间 + */ + @Schema(description = "更新时间") + @TableField(value = "update_time") + private java.util.Date updateTime; + + private static final long serialVersionUID = 1L; +} diff --git a/src/main/java/com/metalloop/modules/bussiness/model/query/BizMaterialQuery.java b/src/main/java/com/metalloop/modules/bussiness/model/query/BizMaterialQuery.java new file mode 100644 index 0000000..43c8ac0 --- /dev/null +++ b/src/main/java/com/metalloop/modules/bussiness/model/query/BizMaterialQuery.java @@ -0,0 +1,68 @@ +package com.metalloop.modules.bussiness.model.query; + +import com.baomidou.mybatisplus.annotation.TableField; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 业务-材质基础查询对象 + * + * @author yy + * @since 2026-09-10 + */ +@Schema(description = "业务-材质基础查询对象") +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class BizMaterialQuery implements Serializable { + + /** + * 材质ID + */ + @Schema(description = "材质ID") + @TableField(value = "id") + private Long id; + + /** + * 材质名称 + */ + @Schema(description = "材质名称") + @TableField(value = "material_name") + private String materialName; + + /** + * 材质编码 + */ + @Schema(description = "材质编码") + @TableField(value = "material_code") + private String materialCode; + + /** + * 材质描述 + */ + @Schema(description = "材质描述") + @TableField(value = "description") + private String description; + + /** + * 创建时间 + */ + @Schema(description = "创建时间") + @TableField(value = "create_time") + private java.util.Date createTime; + + /** + * 更新时间 + */ + @Schema(description = "更新时间") + @TableField(value = "update_time") + private java.util.Date updateTime; + + private static final long serialVersionUID = 1L; +} diff --git a/src/main/java/com/metalloop/modules/bussiness/model/query/BizPurchaseRequestQuery.java b/src/main/java/com/metalloop/modules/bussiness/model/query/BizPurchaseRequestQuery.java new file mode 100644 index 0000000..b43dead --- /dev/null +++ b/src/main/java/com/metalloop/modules/bussiness/model/query/BizPurchaseRequestQuery.java @@ -0,0 +1,208 @@ +package com.metalloop.modules.bussiness.model.query; + +import com.baomidou.mybatisplus.annotation.TableField; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 业务-求购信息查询对象 + * + * @author yy + * @since 2026-09-10 + */ +@Schema(description = "业务-求购信息查询对象") +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class BizPurchaseRequestQuery implements Serializable { + + /** + * 求购信息ID(主键) + */ + @Schema(description = "求购信息ID(主键)") + @TableField(value = "id") + private Long id; + + /** + * 发布人用户ID(关联 sys_user 表) + */ + @Schema(description = "发布人用户ID(关联 sys_user 表)") + @TableField(value = "create_user_id") + private Long createUserId; + + /** + * 所属企业ID + */ + @Schema(description = "所属企业ID") + @TableField(value = "enterprise_id") + private Long enterpriseId; + + /** + * 元素种类 + */ + @Schema(description = "元素种类") + @TableField(value = "element_type") + private String elementType; + + /** + * 商品类别 + */ + @Schema(description = "商品类别") + @TableField(value = "product_category") + private String productCategory; + + /** + * 商品材质(如:紫铜、黄铜、A00) + */ + @Schema(description = "商品材质(如:紫铜、黄铜、A00)") + @TableField(value = "material") + private String material; + + /** + * 求购标题 + */ + @Schema(description = "求购标题") + @TableField(value = "title") + private String title; + + /** + * 详细描述 + */ + @Schema(description = "详细描述") + @TableField(value = "description") + private String description; + + /** + * 求购数量( + */ + @Schema(description = "求购数量(") + @TableField(value = "quantity") + private java.math.BigDecimal quantity; + + /** + * 期望单价 + */ + @Schema(description = "期望单价") + @TableField(value = "unit_price") + private java.math.BigDecimal unitPrice; + + /** + * 联系人 + */ + @Schema(description = "联系人") + @TableField(value = "contact_person") + private String contactPerson; + + /** + * 联系电话 + */ + @Schema(description = "联系电话") + @TableField(value = "contact_phone") + private String contactPhone; + + /** + * 交货期 + */ + @Schema(description = "交货期") + @TableField(value = "delivery_date") + private java.util.Date deliveryDate; + + /** + * 交货地点 + */ + @Schema(description = "交货地点") + @TableField(value = "delivery_location") + private String deliveryLocation; + + /** + * 图片URL + */ + @Schema(description = "图片URL") + @TableField(value = "image_url") + private String imageUrl; + + /** + * 审核状态(0-待审核,1-已通过,2-已驳回) + */ + @Schema(description = "审核状态(0-待审核,1-已通过,2-已驳回)") + @TableField(value = "audit_status") + private Boolean auditStatus; + + /** + * 发布时间 + */ + @Schema(description = "发布时间") + @TableField(value = "publish_time") + private java.util.Date publishTime; + + /** + * 过期时间(信息有效期截止) + */ + @Schema(description = "过期时间(信息有效期截止)") + @TableField(value = "expire_time") + private java.util.Date expireTime; + + /** + * 账期选择模式 + */ + @Schema(description = "账期选择模式") + @TableField(value = "account_period_mode") + private String accountPeriodMode; + + /** + * 定金比例 + */ + @Schema(description = "定金比例") + @TableField(value = "deposit_ratio") + private java.math.BigDecimal depositRatio; + + /** + * 尾款支付期限 + */ + @Schema(description = "尾款支付期限") + @TableField(value = "final_payment_deadline") + private String finalPaymentDeadline; + + /** + * 上下架状态(0-已下架,1-展示中) + */ + @Schema(description = "上下架状态(0-已下架,1-展示中)") + @TableField(value = "status") + private Boolean status; + + /** + * 审核驳回原因(audit_status=2时填写) + */ + @Schema(description = "审核驳回原因(audit_status=2时填写)") + @TableField(value = "reject_reason") + private String rejectReason; + + /** + * 最后修改人用户ID + */ + @Schema(description = "最后修改人用户ID") + @TableField(value = "update_user_id") + private Long updateUserId; + + /** + * 创建时间 + */ + @Schema(description = "创建时间") + @TableField(value = "create_time") + private java.util.Date createTime; + + /** + * 修改时间 + */ + @Schema(description = "修改时间") + @TableField(value = "update_time") + private java.util.Date updateTime; + + private static final long serialVersionUID = 1L; +} diff --git a/src/main/java/com/metalloop/modules/bussiness/model/query/BizSupplyInfoQuery.java b/src/main/java/com/metalloop/modules/bussiness/model/query/BizSupplyInfoQuery.java new file mode 100644 index 0000000..9e8f854 --- /dev/null +++ b/src/main/java/com/metalloop/modules/bussiness/model/query/BizSupplyInfoQuery.java @@ -0,0 +1,201 @@ +package com.metalloop.modules.bussiness.model.query; + +import com.baomidou.mybatisplus.annotation.TableField; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 业务-发布信息查询对象 + * + * @author yy + * @since 2026-09-10 + */ +@Schema(description = "业务-发布信息查询对象") +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class BizSupplyInfoQuery implements Serializable { + + /** + * 发布信息ID + */ + @Schema(description = "发布信息ID") + @TableField(value = "id") + private Long id; + + /** + * 发布人用户ID + */ + @Schema(description = "发布人用户ID") + @TableField(value = "create_user_id") + private Long createUserId; + + /** + * 所属企业ID + */ + @Schema(description = "所属企业ID") + @TableField(value = "enterprise_id") + private Long enterpriseId; + + /** + * 元素种类 + */ + @Schema(description = "元素种类") + @TableField(value = "element_type") + private String elementType; + + /** + * 商品类别 + */ + @Schema(description = "商品类别") + @TableField(value = "product_category") + private String productCategory; + + /** + * 商品材质 + */ + @Schema(description = "商品材质") + @TableField(value = "material") + private String material; + + /** + * 发布标题 + */ + @Schema(description = "发布标题") + @TableField(value = "title") + private String title; + + /** + * 详细描述 + */ + @Schema(description = "详细描述") + @TableField(value = "description") + private String description; + + /** + * 数量 + */ + @Schema(description = "数量") + @TableField(value = "quantity") + private java.math.BigDecimal quantity; + + /** + * 单价 + */ + @Schema(description = "单价") + @TableField(value = "unit_price") + private java.math.BigDecimal unitPrice; + + /** + * 联系人 + */ + @Schema(description = "联系人") + @TableField(value = "contact_person") + private String contactPerson; + + /** + * 电话 + */ + @Schema(description = "电话") + @TableField(value = "contact_phone") + private String contactPhone; + + /** + * 发货地点 + */ + @Schema(description = "发货地点") + @TableField(value = "delivery_location") + private String deliveryLocation; + + /** + * 图片 + */ + @Schema(description = "图片") + @TableField(value = "image_url") + private String imageUrl; + + /** + * 审核状态 + */ + @Schema(description = "审核状态") + @TableField(value = "audit_status") + private Boolean auditStatus; + + /** + * 发布时间 + */ + @Schema(description = "发布时间") + @TableField(value = "publish_time") + private java.util.Date publishTime; + + /** + * 过期时间 + */ + @Schema(description = "过期时间") + @TableField(value = "expire_time") + private java.util.Date expireTime; + + /** + * 账期选择模式 + */ + @Schema(description = "账期选择模式") + @TableField(value = "account_period_mode") + private String accountPeriodMode; + + /** + * 定金比例 + */ + @Schema(description = "定金比例") + @TableField(value = "deposit_ratio") + private java.math.BigDecimal depositRatio; + + /** + * 尾款支付期限 + */ + @Schema(description = "尾款支付期限") + @TableField(value = "final_payment_deadline") + private String finalPaymentDeadline; + + /** + * 上下架状态 + */ + @Schema(description = "上下架状态") + @TableField(value = "status") + private Boolean status; + + /** + * 审核驳回原因 + */ + @Schema(description = "审核驳回原因") + @TableField(value = "reject_reason") + private String rejectReason; + + /** + * 最后修改人用户ID + */ + @Schema(description = "最后修改人用户ID") + @TableField(value = "update_user_id") + private Long updateUserId; + + /** + * 创建时间 + */ + @Schema(description = "创建时间") + @TableField(value = "create_time") + private java.util.Date createTime; + + /** + * 修改时间 + */ + @Schema(description = "修改时间") + @TableField(value = "update_time") + private java.util.Date updateTime; + + private static final long serialVersionUID = 1L; +} diff --git a/src/main/java/com/metalloop/modules/bussiness/model/query/BizVarietyQuery.java b/src/main/java/com/metalloop/modules/bussiness/model/query/BizVarietyQuery.java new file mode 100644 index 0000000..420e931 --- /dev/null +++ b/src/main/java/com/metalloop/modules/bussiness/model/query/BizVarietyQuery.java @@ -0,0 +1,96 @@ +package com.metalloop.modules.bussiness.model.query; + +import com.baomidou.mybatisplus.annotation.TableField; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 业务-产品品种查询对象 + * + * @author yy + * @since 2026-09-10 + */ +@Schema(description = "业务-产品品种查询对象") +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class BizVarietyQuery implements Serializable { + + /** + * 品种ID(主键) + */ + @Schema(description = "品种ID(主键)") + @TableField(value = "id") + private Long id; + + /** + * 品种名称 + */ + @Schema(description = "品种名称") + @TableField(value = "variety_name") + private String varietyName; + + /** + * 品种等级 + */ + @Schema(description = "品种等级") + @TableField(value = "variety_grade") + private String varietyGrade; + + /** + * 父级品种ID + */ + @Schema(description = "父级品种ID") + @TableField(value = "parent_id") + private Long parentId; + + /** + * 品种主体材质 + */ + @Schema(description = "品种主体材质") + @TableField(value = "variety_material") + private String varietyMaterial; + + /** + * 品种补充说明 + */ + @Schema(description = "品种补充说明") + @TableField(value = "description") + private String description; + + /** + * 排序权重 + */ + @Schema(description = "排序权重") + @TableField(value = "sort") + private Integer sort; + + /** + * 状态(0-禁用,1-启用) + */ + @Schema(description = "状态(0-禁用,1-启用)") + @TableField(value = "status") + private Boolean status; + + /** + * 创建时间 + */ + @Schema(description = "创建时间") + @TableField(value = "create_time") + private java.util.Date createTime; + + /** + * 更新时间 + */ + @Schema(description = "更新时间") + @TableField(value = "update_time") + private java.util.Date updateTime; + + private static final long serialVersionUID = 1L; +} diff --git a/src/main/java/com/metalloop/modules/bussiness/model/req/BizEnterpriseProductLockConditionReqDto.java b/src/main/java/com/metalloop/modules/bussiness/model/req/BizEnterpriseProductLockConditionReqDto.java new file mode 100644 index 0000000..224eaea --- /dev/null +++ b/src/main/java/com/metalloop/modules/bussiness/model/req/BizEnterpriseProductLockConditionReqDto.java @@ -0,0 +1,37 @@ +package com.metalloop.modules.bussiness.model.req; + +import com.metalloop.common.core.lock.LockConditionReqDto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.util.List; + +/** + * 企业经营产品及幂等性锁定条件组合 DTO + * + * @author yy + * @since 2026-09-10 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class BizEnterpriseProductLockConditionReqDto implements Serializable { + + /** + * 企业经营产品实体 + */ + @Schema(description = "企业经营产品实体") + private BizEnterpriseProductReqDto entity; + + /** + * 锁定条件 + */ + @Schema(description = "锁定条件") + private List> conditions; +} diff --git a/src/main/java/com/metalloop/modules/bussiness/model/req/BizEnterpriseProductPageQueryReqDto.java b/src/main/java/com/metalloop/modules/bussiness/model/req/BizEnterpriseProductPageQueryReqDto.java new file mode 100644 index 0000000..7667228 --- /dev/null +++ b/src/main/java/com/metalloop/modules/bussiness/model/req/BizEnterpriseProductPageQueryReqDto.java @@ -0,0 +1,47 @@ +package com.metalloop.modules.bussiness.model.req; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 企业经营产品分页查询请求 DTO + * + * @author yy + * @since 2026-09-10 + */ +@EqualsAndHashCode(callSuper = true) +@Data +@NoArgsConstructor +@AllArgsConstructor +@Schema(description = "企业经营产品分页查询请求 DTO") +public class BizEnterpriseProductPageQueryReqDto extends BizEnterpriseProductQueryReqDto implements Serializable { + // region 分页参数接收区域 + /** + * 当前页 + */ + @Schema(description = "当前页,默认 1") + private Long current = 1L; + + /** + * 每页显示条数,默认 10 + */ + @Schema(description = "每页显示条数,默认 10") + private Long size = 10L; + + /** + * 生成 mybatis plus 的分页对象 + * + * @param 分页元素类型 + * @return 分页对象 + */ + public Page page() { + return Page.of(current, size); + } + // ednRegion +} diff --git a/src/main/java/com/metalloop/modules/bussiness/model/req/BizEnterpriseProductQueryReqDto.java b/src/main/java/com/metalloop/modules/bussiness/model/req/BizEnterpriseProductQueryReqDto.java new file mode 100644 index 0000000..6608bb7 --- /dev/null +++ b/src/main/java/com/metalloop/modules/bussiness/model/req/BizEnterpriseProductQueryReqDto.java @@ -0,0 +1,85 @@ +package com.metalloop.modules.bussiness.model.req; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 企业经营产品查询请求 DTO + * + * @author yy + * @since 2026-09-10 + */ +@Schema(description = "企业经营产品查询请求 DTO") +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class BizEnterpriseProductQueryReqDto implements Serializable { + + /** + * 记录ID(主键) + */ + @Schema(description = "记录ID(主键)") + private Long id; + + /** + * 企业ID(关联 ent_enterprise 表) + */ + @Schema(description = "企业ID(关联 ent_enterprise 表)") + private Long enterpriseId; + + /** + * 品种ID(关联 biz_variety 表) + */ + @Schema(description = "品种ID(关联 biz_variety 表)") + private Long varietyId; + + /** + * 材质ID(关联 biz_material 表) + */ + @Schema(description = "材质ID(关联 biz_material 表)") + private Long materialId; + + /** + * 单价 + */ + @Schema(description = "单价") + private java.math.BigDecimal unitPrice; + + /** + * 可供应重量 + */ + @Schema(description = "可供应重量") + private java.math.BigDecimal weight; + + /** + * 状态(0-下架/停售,1-上架/在售) + */ + @Schema(description = "状态(0-下架/停售,1-上架/在售)") + private Boolean status; + + /** + * 备注说明(如:含税价、交货期等) + */ + @Schema(description = "备注说明(如:含税价、交货期等)") + private String remark; + + /** + * 创建时间 + */ + @Schema(description = "创建时间") + private java.util.Date createTime; + + /** + * 更新时间 + */ + @Schema(description = "更新时间") + private java.util.Date updateTime; + + private static final long serialVersionUID = 1L; +} diff --git a/src/main/java/com/metalloop/modules/bussiness/model/req/BizEnterpriseProductReqDto.java b/src/main/java/com/metalloop/modules/bussiness/model/req/BizEnterpriseProductReqDto.java new file mode 100644 index 0000000..f4fd655 --- /dev/null +++ b/src/main/java/com/metalloop/modules/bussiness/model/req/BizEnterpriseProductReqDto.java @@ -0,0 +1,85 @@ +package com.metalloop.modules.bussiness.model.req; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 企业经营产品请求 DTO + * + * @author yy + * @since 2026-09-10 + */ +@Schema(description = "企业经营产品请求 DTO") +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class BizEnterpriseProductReqDto implements Serializable { + + /** + * 记录ID(主键) + */ + @Schema(description = "记录ID(主键)") + private Long id; + + /** + * 企业ID(关联 ent_enterprise 表) + */ + @Schema(description = "企业ID(关联 ent_enterprise 表)") + private Long enterpriseId; + + /** + * 品种ID(关联 biz_variety 表) + */ + @Schema(description = "品种ID(关联 biz_variety 表)") + private Long varietyId; + + /** + * 材质ID(关联 biz_material 表) + */ + @Schema(description = "材质ID(关联 biz_material 表)") + private Long materialId; + + /** + * 单价 + */ + @Schema(description = "单价") + private java.math.BigDecimal unitPrice; + + /** + * 可供应重量 + */ + @Schema(description = "可供应重量") + private java.math.BigDecimal weight; + + /** + * 状态(0-下架/停售,1-上架/在售) + */ + @Schema(description = "状态(0-下架/停售,1-上架/在售)") + private Boolean status; + + /** + * 备注说明(如:含税价、交货期等) + */ + @Schema(description = "备注说明(如:含税价、交货期等)") + private String remark; + + /** + * 创建时间 + */ + @Schema(description = "创建时间") + private java.util.Date createTime; + + /** + * 更新时间 + */ + @Schema(description = "更新时间") + private java.util.Date updateTime; + + private static final long serialVersionUID = 1L; +} diff --git a/src/main/java/com/metalloop/modules/bussiness/model/req/BizEnterpriseProductUpdateByQueryReqDto.java b/src/main/java/com/metalloop/modules/bussiness/model/req/BizEnterpriseProductUpdateByQueryReqDto.java new file mode 100644 index 0000000..c445556 --- /dev/null +++ b/src/main/java/com/metalloop/modules/bussiness/model/req/BizEnterpriseProductUpdateByQueryReqDto.java @@ -0,0 +1,35 @@ +package com.metalloop.modules.bussiness.model.req; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 企业经营产品根据查询修改 DTO + * + * @author yy + * @since 2026-09-10 + */ +@Schema(description = "企业经营产品根据查询修改 DTO") +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class BizEnterpriseProductUpdateByQueryReqDto implements Serializable { + + /** + * 企业经营产品实体 + */ + @Schema(description = "企业经营产品实体") + private BizEnterpriseProductReqDto entity; + + /** + * 查询请求 DTO + */ + @Schema(description = "查询请求 DTO") + private BizEnterpriseProductQueryReqDto queryReqDto; +} diff --git a/src/main/java/com/metalloop/modules/bussiness/model/req/BizMaterialLockConditionReqDto.java b/src/main/java/com/metalloop/modules/bussiness/model/req/BizMaterialLockConditionReqDto.java new file mode 100644 index 0000000..4609985 --- /dev/null +++ b/src/main/java/com/metalloop/modules/bussiness/model/req/BizMaterialLockConditionReqDto.java @@ -0,0 +1,36 @@ +package com.metalloop.modules.bussiness.model.req; + +import com.metalloop.common.core.lock.LockConditionReqDto; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.util.List; + +/** + * 业务-材质基础及幂等性锁定条件组合 DTO + * + * @author yy + * @since 2026-09-10 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class BizMaterialLockConditionReqDto implements Serializable { + + /** + * 业务-材质基础实体 + */ + @Schema(description = "业务-材质基础实体") + private BizMaterialReqDto entity; + + /** + * 锁定条件 + */ + @Schema(description = "锁定条件") + private List> conditions; +} diff --git a/src/main/java/com/metalloop/modules/bussiness/model/req/BizMaterialPageQueryReqDto.java b/src/main/java/com/metalloop/modules/bussiness/model/req/BizMaterialPageQueryReqDto.java new file mode 100644 index 0000000..8b5f5a1 --- /dev/null +++ b/src/main/java/com/metalloop/modules/bussiness/model/req/BizMaterialPageQueryReqDto.java @@ -0,0 +1,47 @@ +package com.metalloop.modules.bussiness.model.req; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 业务-材质基础分页查询请求 DTO + * + * @author yy + * @since 2026-09-10 + */ +@EqualsAndHashCode(callSuper = true) +@Data +@NoArgsConstructor +@AllArgsConstructor +@Schema(description = "业务-材质基础分页查询请求 DTO") +public class BizMaterialPageQueryReqDto extends BizMaterialQueryReqDto implements Serializable { + // region 分页参数接收区域 + /** + * 当前页 + */ + @Schema(description = "当前页,默认 1") + private Long current = 1L; + + /** + * 每页显示条数,默认 10 + */ + @Schema(description = "每页显示条数,默认 10") + private Long size = 10L; + + /** + * 生成 mybatis plus 的分页对象 + * + * @param 分页元素类型 + * @return 分页对象 + */ + public Page page() { + return Page.of(current, size); + } + // ednRegion +} diff --git a/src/main/java/com/metalloop/modules/bussiness/model/req/BizMaterialQueryReqDto.java b/src/main/java/com/metalloop/modules/bussiness/model/req/BizMaterialQueryReqDto.java new file mode 100644 index 0000000..f498895 --- /dev/null +++ b/src/main/java/com/metalloop/modules/bussiness/model/req/BizMaterialQueryReqDto.java @@ -0,0 +1,61 @@ +package com.metalloop.modules.bussiness.model.req; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 业务-材质基础查询请求 DTO + * + * @author yy + * @since 2026-09-10 + */ +@Schema(description = "业务-材质基础查询请求 DTO") +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class BizMaterialQueryReqDto implements Serializable { + + /** + * 材质ID + */ + @Schema(description = "材质ID") + private Long id; + + /** + * 材质名称 + */ + @Schema(description = "材质名称") + private String materialName; + + /** + * 材质编码 + */ + @Schema(description = "材质编码") + private String materialCode; + + /** + * 材质描述 + */ + @Schema(description = "材质描述") + private String description; + + /** + * 创建时间 + */ + @Schema(description = "创建时间") + private java.util.Date createTime; + + /** + * 更新时间 + */ + @Schema(description = "更新时间") + private java.util.Date updateTime; + + private static final long serialVersionUID = 1L; +} diff --git a/src/main/java/com/metalloop/modules/bussiness/model/req/BizMaterialReqDto.java b/src/main/java/com/metalloop/modules/bussiness/model/req/BizMaterialReqDto.java new file mode 100644 index 0000000..bc4c375 --- /dev/null +++ b/src/main/java/com/metalloop/modules/bussiness/model/req/BizMaterialReqDto.java @@ -0,0 +1,61 @@ +package com.metalloop.modules.bussiness.model.req; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 业务-材质基础请求 DTO + * + * @author yy + * @since 2026-09-10 + */ +@Schema(description = "业务-材质基础请求 DTO") +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class BizMaterialReqDto implements Serializable { + + /** + * 材质ID + */ + @Schema(description = "材质ID") + private Long id; + + /** + * 材质名称 + */ + @Schema(description = "材质名称") + private String materialName; + + /** + * 材质编码 + */ + @Schema(description = "材质编码") + private String materialCode; + + /** + * 材质描述 + */ + @Schema(description = "材质描述") + private String description; + + /** + * 创建时间 + */ + @Schema(description = "创建时间") + private java.util.Date createTime; + + /** + * 更新时间 + */ + @Schema(description = "更新时间") + private java.util.Date updateTime; + + private static final long serialVersionUID = 1L; +} diff --git a/src/main/java/com/metalloop/modules/bussiness/model/req/BizMaterialUpdateByQueryReqDto.java b/src/main/java/com/metalloop/modules/bussiness/model/req/BizMaterialUpdateByQueryReqDto.java new file mode 100644 index 0000000..7eeb37c --- /dev/null +++ b/src/main/java/com/metalloop/modules/bussiness/model/req/BizMaterialUpdateByQueryReqDto.java @@ -0,0 +1,35 @@ +package com.metalloop.modules.bussiness.model.req; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 业务-材质基础根据查询修改 DTO + * + * @author yy + * @since 2026-09-10 + */ +@Schema(description = "业务-材质基础根据查询修改 DTO") +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class BizMaterialUpdateByQueryReqDto implements Serializable { + + /** + * 业务-材质基础实体 + */ + @Schema(description = "业务-材质基础实体") + private BizMaterialReqDto entity; + + /** + * 查询请求 DTO + */ + @Schema(description = "查询请求 DTO") + private BizMaterialQueryReqDto queryReqDto; +} diff --git a/src/main/java/com/metalloop/modules/bussiness/model/req/BizPurchaseRequestLockConditionReqDto.java b/src/main/java/com/metalloop/modules/bussiness/model/req/BizPurchaseRequestLockConditionReqDto.java new file mode 100644 index 0000000..f0099fd --- /dev/null +++ b/src/main/java/com/metalloop/modules/bussiness/model/req/BizPurchaseRequestLockConditionReqDto.java @@ -0,0 +1,36 @@ +package com.metalloop.modules.bussiness.model.req; + +import com.metalloop.common.core.lock.LockConditionReqDto; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.util.List; + +/** + * 业务-求购信息及幂等性锁定条件组合 DTO + * + * @author yy + * @since 2026-09-10 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class BizPurchaseRequestLockConditionReqDto implements Serializable { + + /** + * 业务-求购信息实体 + */ + @Schema(description = "业务-求购信息实体") + private BizPurchaseRequestReqDto entity; + + /** + * 锁定条件 + */ + @Schema(description = "锁定条件") + private List> conditions; +} diff --git a/src/main/java/com/metalloop/modules/bussiness/model/req/BizPurchaseRequestPageQueryReqDto.java b/src/main/java/com/metalloop/modules/bussiness/model/req/BizPurchaseRequestPageQueryReqDto.java new file mode 100644 index 0000000..e004da5 --- /dev/null +++ b/src/main/java/com/metalloop/modules/bussiness/model/req/BizPurchaseRequestPageQueryReqDto.java @@ -0,0 +1,47 @@ +package com.metalloop.modules.bussiness.model.req; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 业务-求购信息分页查询请求 DTO + * + * @author yy + * @since 2026-09-10 + */ +@EqualsAndHashCode(callSuper = true) +@Data +@NoArgsConstructor +@AllArgsConstructor +@Schema(description = "业务-求购信息分页查询请求 DTO") +public class BizPurchaseRequestPageQueryReqDto extends BizPurchaseRequestQueryReqDto implements Serializable { + // region 分页参数接收区域 + /** + * 当前页 + */ + @Schema(description = "当前页,默认 1") + private Long current = 1L; + + /** + * 每页显示条数,默认 10 + */ + @Schema(description = "每页显示条数,默认 10") + private Long size = 10L; + + /** + * 生成 mybatis plus 的分页对象 + * + * @param 分页元素类型 + * @return 分页对象 + */ + public Page page() { + return Page.of(current, size); + } + // ednRegion +} diff --git a/src/main/java/com/metalloop/modules/bussiness/model/req/BizPurchaseRequestQueryReqDto.java b/src/main/java/com/metalloop/modules/bussiness/model/req/BizPurchaseRequestQueryReqDto.java new file mode 100644 index 0000000..a9a6ac8 --- /dev/null +++ b/src/main/java/com/metalloop/modules/bussiness/model/req/BizPurchaseRequestQueryReqDto.java @@ -0,0 +1,181 @@ +package com.metalloop.modules.bussiness.model.req; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 业务-求购信息查询请求 DTO + * + * @author yy + * @since 2026-09-10 + */ +@Schema(description = "业务-求购信息查询请求 DTO") +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class BizPurchaseRequestQueryReqDto implements Serializable { + + /** + * 求购信息ID(主键) + */ + @Schema(description = "求购信息ID(主键)") + private Long id; + + /** + * 发布人用户ID(关联 sys_user 表) + */ + @Schema(description = "发布人用户ID(关联 sys_user 表)") + private Long createUserId; + + /** + * 所属企业ID + */ + @Schema(description = "所属企业ID") + private Long enterpriseId; + + /** + * 元素种类 + */ + @Schema(description = "元素种类") + private String elementType; + + /** + * 商品类别 + */ + @Schema(description = "商品类别") + private String productCategory; + + /** + * 商品材质(如:紫铜、黄铜、A00) + */ + @Schema(description = "商品材质(如:紫铜、黄铜、A00)") + private String material; + + /** + * 求购标题 + */ + @Schema(description = "求购标题") + private String title; + + /** + * 详细描述 + */ + @Schema(description = "详细描述") + private String description; + + /** + * 求购数量( + */ + @Schema(description = "求购数量(") + private java.math.BigDecimal quantity; + + /** + * 期望单价 + */ + @Schema(description = "期望单价") + private java.math.BigDecimal unitPrice; + + /** + * 联系人 + */ + @Schema(description = "联系人") + private String contactPerson; + + /** + * 联系电话 + */ + @Schema(description = "联系电话") + private String contactPhone; + + /** + * 交货期 + */ + @Schema(description = "交货期") + private java.util.Date deliveryDate; + + /** + * 交货地点 + */ + @Schema(description = "交货地点") + private String deliveryLocation; + + /** + * 图片URL + */ + @Schema(description = "图片URL") + private String imageUrl; + + /** + * 审核状态(0-待审核,1-已通过,2-已驳回) + */ + @Schema(description = "审核状态(0-待审核,1-已通过,2-已驳回)") + private Boolean auditStatus; + + /** + * 发布时间 + */ + @Schema(description = "发布时间") + private java.util.Date publishTime; + + /** + * 过期时间(信息有效期截止) + */ + @Schema(description = "过期时间(信息有效期截止)") + private java.util.Date expireTime; + + /** + * 账期选择模式 + */ + @Schema(description = "账期选择模式") + private String accountPeriodMode; + + /** + * 定金比例 + */ + @Schema(description = "定金比例") + private java.math.BigDecimal depositRatio; + + /** + * 尾款支付期限 + */ + @Schema(description = "尾款支付期限") + private String finalPaymentDeadline; + + /** + * 上下架状态(0-已下架,1-展示中) + */ + @Schema(description = "上下架状态(0-已下架,1-展示中)") + private Boolean status; + + /** + * 审核驳回原因(audit_status=2时填写) + */ + @Schema(description = "审核驳回原因(audit_status=2时填写)") + private String rejectReason; + + /** + * 最后修改人用户ID + */ + @Schema(description = "最后修改人用户ID") + private Long updateUserId; + + /** + * 创建时间 + */ + @Schema(description = "创建时间") + private java.util.Date createTime; + + /** + * 修改时间 + */ + @Schema(description = "修改时间") + private java.util.Date updateTime; + + private static final long serialVersionUID = 1L; +} diff --git a/src/main/java/com/metalloop/modules/bussiness/model/req/BizPurchaseRequestReqDto.java b/src/main/java/com/metalloop/modules/bussiness/model/req/BizPurchaseRequestReqDto.java new file mode 100644 index 0000000..df0af49 --- /dev/null +++ b/src/main/java/com/metalloop/modules/bussiness/model/req/BizPurchaseRequestReqDto.java @@ -0,0 +1,181 @@ +package com.metalloop.modules.bussiness.model.req; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 业务-求购信息请求 DTO + * + * @author yy + * @since 2026-09-10 + */ +@Schema(description = "业务-求购信息请求 DTO") +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class BizPurchaseRequestReqDto implements Serializable { + + /** + * 求购信息ID(主键) + */ + @Schema(description = "求购信息ID(主键)") + private Long id; + + /** + * 发布人用户ID(关联 sys_user 表) + */ + @Schema(description = "发布人用户ID(关联 sys_user 表)") + private Long createUserId; + + /** + * 所属企业ID + */ + @Schema(description = "所属企业ID") + private Long enterpriseId; + + /** + * 元素种类 + */ + @Schema(description = "元素种类") + private String elementType; + + /** + * 商品类别 + */ + @Schema(description = "商品类别") + private String productCategory; + + /** + * 商品材质(如:紫铜、黄铜、A00) + */ + @Schema(description = "商品材质(如:紫铜、黄铜、A00)") + private String material; + + /** + * 求购标题 + */ + @Schema(description = "求购标题") + private String title; + + /** + * 详细描述 + */ + @Schema(description = "详细描述") + private String description; + + /** + * 求购数量( + */ + @Schema(description = "求购数量(") + private java.math.BigDecimal quantity; + + /** + * 期望单价 + */ + @Schema(description = "期望单价") + private java.math.BigDecimal unitPrice; + + /** + * 联系人 + */ + @Schema(description = "联系人") + private String contactPerson; + + /** + * 联系电话 + */ + @Schema(description = "联系电话") + private String contactPhone; + + /** + * 交货期 + */ + @Schema(description = "交货期") + private java.util.Date deliveryDate; + + /** + * 交货地点 + */ + @Schema(description = "交货地点") + private String deliveryLocation; + + /** + * 图片URL + */ + @Schema(description = "图片URL") + private String imageUrl; + + /** + * 审核状态(0-待审核,1-已通过,2-已驳回) + */ + @Schema(description = "审核状态(0-待审核,1-已通过,2-已驳回)") + private Boolean auditStatus; + + /** + * 发布时间 + */ + @Schema(description = "发布时间") + private java.util.Date publishTime; + + /** + * 过期时间(信息有效期截止) + */ + @Schema(description = "过期时间(信息有效期截止)") + private java.util.Date expireTime; + + /** + * 账期选择模式 + */ + @Schema(description = "账期选择模式") + private String accountPeriodMode; + + /** + * 定金比例 + */ + @Schema(description = "定金比例") + private java.math.BigDecimal depositRatio; + + /** + * 尾款支付期限 + */ + @Schema(description = "尾款支付期限") + private String finalPaymentDeadline; + + /** + * 上下架状态(0-已下架,1-展示中) + */ + @Schema(description = "上下架状态(0-已下架,1-展示中)") + private Boolean status; + + /** + * 审核驳回原因(audit_status=2时填写) + */ + @Schema(description = "审核驳回原因(audit_status=2时填写)") + private String rejectReason; + + /** + * 最后修改人用户ID + */ + @Schema(description = "最后修改人用户ID") + private Long updateUserId; + + /** + * 创建时间 + */ + @Schema(description = "创建时间") + private java.util.Date createTime; + + /** + * 修改时间 + */ + @Schema(description = "修改时间") + private java.util.Date updateTime; + + private static final long serialVersionUID = 1L; +} diff --git a/src/main/java/com/metalloop/modules/bussiness/model/req/BizPurchaseRequestUpdateByQueryReqDto.java b/src/main/java/com/metalloop/modules/bussiness/model/req/BizPurchaseRequestUpdateByQueryReqDto.java new file mode 100644 index 0000000..15ee51b --- /dev/null +++ b/src/main/java/com/metalloop/modules/bussiness/model/req/BizPurchaseRequestUpdateByQueryReqDto.java @@ -0,0 +1,35 @@ +package com.metalloop.modules.bussiness.model.req; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 业务-求购信息根据查询修改 DTO + * + * @author yy + * @since 2026-09-10 + */ +@Schema(description = "业务-求购信息根据查询修改 DTO") +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class BizPurchaseRequestUpdateByQueryReqDto implements Serializable { + + /** + * 业务-求购信息实体 + */ + @Schema(description = "业务-求购信息实体") + private BizPurchaseRequestReqDto entity; + + /** + * 查询请求 DTO + */ + @Schema(description = "查询请求 DTO") + private BizPurchaseRequestQueryReqDto queryReqDto; +} diff --git a/src/main/java/com/metalloop/modules/bussiness/model/req/BizSupplyInfoLockConditionReqDto.java b/src/main/java/com/metalloop/modules/bussiness/model/req/BizSupplyInfoLockConditionReqDto.java new file mode 100644 index 0000000..116562c --- /dev/null +++ b/src/main/java/com/metalloop/modules/bussiness/model/req/BizSupplyInfoLockConditionReqDto.java @@ -0,0 +1,36 @@ +package com.metalloop.modules.bussiness.model.req; + +import com.metalloop.common.core.lock.LockConditionReqDto; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.util.List; + +/** + * 业务-发布信息及幂等性锁定条件组合 DTO + * + * @author yy + * @since 2026-09-10 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class BizSupplyInfoLockConditionReqDto implements Serializable { + + /** + * 业务-发布信息实体 + */ + @Schema(description = "业务-发布信息实体") + private BizSupplyInfoReqDto entity; + + /** + * 锁定条件 + */ + @Schema(description = "锁定条件") + private List> conditions; +} diff --git a/src/main/java/com/metalloop/modules/bussiness/model/req/BizSupplyInfoPageQueryReqDto.java b/src/main/java/com/metalloop/modules/bussiness/model/req/BizSupplyInfoPageQueryReqDto.java new file mode 100644 index 0000000..40efcba --- /dev/null +++ b/src/main/java/com/metalloop/modules/bussiness/model/req/BizSupplyInfoPageQueryReqDto.java @@ -0,0 +1,47 @@ +package com.metalloop.modules.bussiness.model.req; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 业务-发布信息分页查询请求 DTO + * + * @author yy + * @since 2026-09-10 + */ +@EqualsAndHashCode(callSuper = true) +@Data +@NoArgsConstructor +@AllArgsConstructor +@Schema(description = "业务-发布信息分页查询请求 DTO") +public class BizSupplyInfoPageQueryReqDto extends BizSupplyInfoQueryReqDto implements Serializable { + // region 分页参数接收区域 + /** + * 当前页 + */ + @Schema(description = "当前页,默认 1") + private Long current = 1L; + + /** + * 每页显示条数,默认 10 + */ + @Schema(description = "每页显示条数,默认 10") + private Long size = 10L; + + /** + * 生成 mybatis plus 的分页对象 + * + * @param 分页元素类型 + * @return 分页对象 + */ + public Page page() { + return Page.of(current, size); + } + // ednRegion +} diff --git a/src/main/java/com/metalloop/modules/bussiness/model/req/BizSupplyInfoQueryReqDto.java b/src/main/java/com/metalloop/modules/bussiness/model/req/BizSupplyInfoQueryReqDto.java new file mode 100644 index 0000000..c04ba0a --- /dev/null +++ b/src/main/java/com/metalloop/modules/bussiness/model/req/BizSupplyInfoQueryReqDto.java @@ -0,0 +1,175 @@ +package com.metalloop.modules.bussiness.model.req; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 业务-发布信息查询请求 DTO + * + * @author yy + * @since 2026-09-10 + */ +@Schema(description = "业务-发布信息查询请求 DTO") +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class BizSupplyInfoQueryReqDto implements Serializable { + + /** + * 发布信息ID + */ + @Schema(description = "发布信息ID") + private Long id; + + /** + * 发布人用户ID + */ + @Schema(description = "发布人用户ID") + private Long createUserId; + + /** + * 所属企业ID + */ + @Schema(description = "所属企业ID") + private Long enterpriseId; + + /** + * 元素种类 + */ + @Schema(description = "元素种类") + private String elementType; + + /** + * 商品类别 + */ + @Schema(description = "商品类别") + private String productCategory; + + /** + * 商品材质 + */ + @Schema(description = "商品材质") + private String material; + + /** + * 发布标题 + */ + @Schema(description = "发布标题") + private String title; + + /** + * 详细描述 + */ + @Schema(description = "详细描述") + private String description; + + /** + * 数量 + */ + @Schema(description = "数量") + private java.math.BigDecimal quantity; + + /** + * 单价 + */ + @Schema(description = "单价") + private java.math.BigDecimal unitPrice; + + /** + * 联系人 + */ + @Schema(description = "联系人") + private String contactPerson; + + /** + * 电话 + */ + @Schema(description = "电话") + private String contactPhone; + + /** + * 发货地点 + */ + @Schema(description = "发货地点") + private String deliveryLocation; + + /** + * 图片 + */ + @Schema(description = "图片") + private String imageUrl; + + /** + * 审核状态 + */ + @Schema(description = "审核状态") + private Boolean auditStatus; + + /** + * 发布时间 + */ + @Schema(description = "发布时间") + private java.util.Date publishTime; + + /** + * 过期时间 + */ + @Schema(description = "过期时间") + private java.util.Date expireTime; + + /** + * 账期选择模式 + */ + @Schema(description = "账期选择模式") + private String accountPeriodMode; + + /** + * 定金比例 + */ + @Schema(description = "定金比例") + private java.math.BigDecimal depositRatio; + + /** + * 尾款支付期限 + */ + @Schema(description = "尾款支付期限") + private String finalPaymentDeadline; + + /** + * 上下架状态 + */ + @Schema(description = "上下架状态") + private Boolean status; + + /** + * 审核驳回原因 + */ + @Schema(description = "审核驳回原因") + private String rejectReason; + + /** + * 最后修改人用户ID + */ + @Schema(description = "最后修改人用户ID") + private Long updateUserId; + + /** + * 创建时间 + */ + @Schema(description = "创建时间") + private java.util.Date createTime; + + /** + * 修改时间 + */ + @Schema(description = "修改时间") + private java.util.Date updateTime; + + private static final long serialVersionUID = 1L; +} diff --git a/src/main/java/com/metalloop/modules/bussiness/model/req/BizSupplyInfoReqDto.java b/src/main/java/com/metalloop/modules/bussiness/model/req/BizSupplyInfoReqDto.java new file mode 100644 index 0000000..c813f35 --- /dev/null +++ b/src/main/java/com/metalloop/modules/bussiness/model/req/BizSupplyInfoReqDto.java @@ -0,0 +1,175 @@ +package com.metalloop.modules.bussiness.model.req; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 业务-发布信息请求 DTO + * + * @author yy + * @since 2026-09-10 + */ +@Schema(description = "业务-发布信息请求 DTO") +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class BizSupplyInfoReqDto implements Serializable { + + /** + * 发布信息ID + */ + @Schema(description = "发布信息ID") + private Long id; + + /** + * 发布人用户ID + */ + @Schema(description = "发布人用户ID") + private Long createUserId; + + /** + * 所属企业ID + */ + @Schema(description = "所属企业ID") + private Long enterpriseId; + + /** + * 元素种类 + */ + @Schema(description = "元素种类") + private String elementType; + + /** + * 商品类别 + */ + @Schema(description = "商品类别") + private String productCategory; + + /** + * 商品材质 + */ + @Schema(description = "商品材质") + private String material; + + /** + * 发布标题 + */ + @Schema(description = "发布标题") + private String title; + + /** + * 详细描述 + */ + @Schema(description = "详细描述") + private String description; + + /** + * 数量 + */ + @Schema(description = "数量") + private java.math.BigDecimal quantity; + + /** + * 单价 + */ + @Schema(description = "单价") + private java.math.BigDecimal unitPrice; + + /** + * 联系人 + */ + @Schema(description = "联系人") + private String contactPerson; + + /** + * 电话 + */ + @Schema(description = "电话") + private String contactPhone; + + /** + * 发货地点 + */ + @Schema(description = "发货地点") + private String deliveryLocation; + + /** + * 图片 + */ + @Schema(description = "图片") + private String imageUrl; + + /** + * 审核状态 + */ + @Schema(description = "审核状态") + private Boolean auditStatus; + + /** + * 发布时间 + */ + @Schema(description = "发布时间") + private java.util.Date publishTime; + + /** + * 过期时间 + */ + @Schema(description = "过期时间") + private java.util.Date expireTime; + + /** + * 账期选择模式 + */ + @Schema(description = "账期选择模式") + private String accountPeriodMode; + + /** + * 定金比例 + */ + @Schema(description = "定金比例") + private java.math.BigDecimal depositRatio; + + /** + * 尾款支付期限 + */ + @Schema(description = "尾款支付期限") + private String finalPaymentDeadline; + + /** + * 上下架状态 + */ + @Schema(description = "上下架状态") + private Boolean status; + + /** + * 审核驳回原因 + */ + @Schema(description = "审核驳回原因") + private String rejectReason; + + /** + * 最后修改人用户ID + */ + @Schema(description = "最后修改人用户ID") + private Long updateUserId; + + /** + * 创建时间 + */ + @Schema(description = "创建时间") + private java.util.Date createTime; + + /** + * 修改时间 + */ + @Schema(description = "修改时间") + private java.util.Date updateTime; + + private static final long serialVersionUID = 1L; +} diff --git a/src/main/java/com/metalloop/modules/bussiness/model/req/BizSupplyInfoUpdateByQueryReqDto.java b/src/main/java/com/metalloop/modules/bussiness/model/req/BizSupplyInfoUpdateByQueryReqDto.java new file mode 100644 index 0000000..81dedac --- /dev/null +++ b/src/main/java/com/metalloop/modules/bussiness/model/req/BizSupplyInfoUpdateByQueryReqDto.java @@ -0,0 +1,35 @@ +package com.metalloop.modules.bussiness.model.req; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 业务-发布信息根据查询修改 DTO + * + * @author yy + * @since 2026-09-10 + */ +@Schema(description = "业务-发布信息根据查询修改 DTO") +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class BizSupplyInfoUpdateByQueryReqDto implements Serializable { + + /** + * 业务-发布信息实体 + */ + @Schema(description = "业务-发布信息实体") + private BizSupplyInfoReqDto entity; + + /** + * 查询请求 DTO + */ + @Schema(description = "查询请求 DTO") + private BizSupplyInfoQueryReqDto queryReqDto; +} diff --git a/src/main/java/com/metalloop/modules/bussiness/model/req/BizVarietyLockConditionReqDto.java b/src/main/java/com/metalloop/modules/bussiness/model/req/BizVarietyLockConditionReqDto.java new file mode 100644 index 0000000..7b861cb --- /dev/null +++ b/src/main/java/com/metalloop/modules/bussiness/model/req/BizVarietyLockConditionReqDto.java @@ -0,0 +1,35 @@ +package com.metalloop.modules.bussiness.model.req; +import com.metalloop.common.core.lock.LockConditionReqDto; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.util.List; + +/** + * 业务-产品品种及幂等性锁定条件组合 DTO + * + * @author yy + * @since 2026-09-10 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class BizVarietyLockConditionReqDto implements Serializable { + + /** + * 业务-产品品种实体 + */ + @Schema(description = "业务-产品品种实体") + private BizVarietyReqDto entity; + + /** + * 锁定条件 + */ + @Schema(description = "锁定条件") + private List> conditions; +} diff --git a/src/main/java/com/metalloop/modules/bussiness/model/req/BizVarietyPageQueryReqDto.java b/src/main/java/com/metalloop/modules/bussiness/model/req/BizVarietyPageQueryReqDto.java new file mode 100644 index 0000000..a2a0027 --- /dev/null +++ b/src/main/java/com/metalloop/modules/bussiness/model/req/BizVarietyPageQueryReqDto.java @@ -0,0 +1,47 @@ +package com.metalloop.modules.bussiness.model.req; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 业务-产品品种分页查询请求 DTO + * + * @author yy + * @since 2026-09-10 + */ +@EqualsAndHashCode(callSuper = true) +@Data +@NoArgsConstructor +@AllArgsConstructor +@Schema(description = "业务-产品品种分页查询请求 DTO") +public class BizVarietyPageQueryReqDto extends BizVarietyQueryReqDto implements Serializable { + // region 分页参数接收区域 + /** + * 当前页 + */ + @Schema(description = "当前页,默认 1") + private Long current = 1L; + + /** + * 每页显示条数,默认 10 + */ + @Schema(description = "每页显示条数,默认 10") + private Long size = 10L; + + /** + * 生成 mybatis plus 的分页对象 + * + * @param 分页元素类型 + * @return 分页对象 + */ + public Page page() { + return Page.of(current, size); + } + // ednRegion +} diff --git a/src/main/java/com/metalloop/modules/bussiness/model/req/BizVarietyQueryReqDto.java b/src/main/java/com/metalloop/modules/bussiness/model/req/BizVarietyQueryReqDto.java new file mode 100644 index 0000000..932e48b --- /dev/null +++ b/src/main/java/com/metalloop/modules/bussiness/model/req/BizVarietyQueryReqDto.java @@ -0,0 +1,85 @@ +package com.metalloop.modules.bussiness.model.req; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 业务-产品品种查询请求 DTO + * + * @author yy + * @since 2026-09-10 + */ +@Schema(description = "业务-产品品种查询请求 DTO") +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class BizVarietyQueryReqDto implements Serializable { + + /** + * 品种ID(主键) + */ + @Schema(description = "品种ID(主键)") + private Long id; + + /** + * 品种名称 + */ + @Schema(description = "品种名称") + private String varietyName; + + /** + * 品种等级 + */ + @Schema(description = "品种等级") + private String varietyGrade; + + /** + * 父级品种ID + */ + @Schema(description = "父级品种ID") + private Long parentId; + + /** + * 品种主体材质 + */ + @Schema(description = "品种主体材质") + private String varietyMaterial; + + /** + * 品种补充说明 + */ + @Schema(description = "品种补充说明") + private String description; + + /** + * 排序权重 + */ + @Schema(description = "排序权重") + private Integer sort; + + /** + * 状态(0-禁用,1-启用) + */ + @Schema(description = "状态(0-禁用,1-启用)") + private Boolean status; + + /** + * 创建时间 + */ + @Schema(description = "创建时间") + private java.util.Date createTime; + + /** + * 更新时间 + */ + @Schema(description = "更新时间") + private java.util.Date updateTime; + + private static final long serialVersionUID = 1L; +} diff --git a/src/main/java/com/metalloop/modules/bussiness/model/req/BizVarietyReqDto.java b/src/main/java/com/metalloop/modules/bussiness/model/req/BizVarietyReqDto.java new file mode 100644 index 0000000..85b83ac --- /dev/null +++ b/src/main/java/com/metalloop/modules/bussiness/model/req/BizVarietyReqDto.java @@ -0,0 +1,85 @@ +package com.metalloop.modules.bussiness.model.req; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 业务-产品品种请求 DTO + * + * @author yy + * @since 2026-09-10 + */ +@Schema(description = "业务-产品品种请求 DTO") +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class BizVarietyReqDto implements Serializable { + + /** + * 品种ID(主键) + */ + @Schema(description = "品种ID(主键)") + private Long id; + + /** + * 品种名称 + */ + @Schema(description = "品种名称") + private String varietyName; + + /** + * 品种等级 + */ + @Schema(description = "品种等级") + private String varietyGrade; + + /** + * 父级品种ID + */ + @Schema(description = "父级品种ID") + private Long parentId; + + /** + * 品种主体材质 + */ + @Schema(description = "品种主体材质") + private String varietyMaterial; + + /** + * 品种补充说明 + */ + @Schema(description = "品种补充说明") + private String description; + + /** + * 排序权重 + */ + @Schema(description = "排序权重") + private Integer sort; + + /** + * 状态(0-禁用,1-启用) + */ + @Schema(description = "状态(0-禁用,1-启用)") + private Boolean status; + + /** + * 创建时间 + */ + @Schema(description = "创建时间") + private java.util.Date createTime; + + /** + * 更新时间 + */ + @Schema(description = "更新时间") + private java.util.Date updateTime; + + private static final long serialVersionUID = 1L; +} diff --git a/src/main/java/com/metalloop/modules/bussiness/model/req/BizVarietyUpdateByQueryReqDto.java b/src/main/java/com/metalloop/modules/bussiness/model/req/BizVarietyUpdateByQueryReqDto.java new file mode 100644 index 0000000..ac10d5f --- /dev/null +++ b/src/main/java/com/metalloop/modules/bussiness/model/req/BizVarietyUpdateByQueryReqDto.java @@ -0,0 +1,35 @@ +package com.metalloop.modules.bussiness.model.req; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 业务-产品品种根据查询修改 DTO + * + * @author yy + * @since 2026-09-10 + */ +@Schema(description = "业务-产品品种根据查询修改 DTO") +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class BizVarietyUpdateByQueryReqDto implements Serializable { + + /** + * 业务-产品品种实体 + */ + @Schema(description = "业务-产品品种实体") + private BizVarietyReqDto entity; + + /** + * 查询请求 DTO + */ + @Schema(description = "查询请求 DTO") + private BizVarietyQueryReqDto queryReqDto; +} diff --git a/src/main/java/com/metalloop/modules/bussiness/model/resp/BizEnterpriseProductRespDto.java b/src/main/java/com/metalloop/modules/bussiness/model/resp/BizEnterpriseProductRespDto.java new file mode 100644 index 0000000..30a0840 --- /dev/null +++ b/src/main/java/com/metalloop/modules/bussiness/model/resp/BizEnterpriseProductRespDto.java @@ -0,0 +1,85 @@ +package com.metalloop.modules.bussiness.model.resp; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 企业经营产品响应 DTO + * + * @author yy + * @since 2026-09-10 + */ +@Schema(description = "企业经营产品响应 DTO") +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class BizEnterpriseProductRespDto implements Serializable { + + /** + * 记录ID(主键) + */ + @Schema(description = "记录ID(主键)") + private Long id; + + /** + * 企业ID(关联 ent_enterprise 表) + */ + @Schema(description = "企业ID(关联 ent_enterprise 表)") + private Long enterpriseId; + + /** + * 品种ID(关联 biz_variety 表) + */ + @Schema(description = "品种ID(关联 biz_variety 表)") + private Long varietyId; + + /** + * 材质ID(关联 biz_material 表) + */ + @Schema(description = "材质ID(关联 biz_material 表)") + private Long materialId; + + /** + * 单价 + */ + @Schema(description = "单价") + private java.math.BigDecimal unitPrice; + + /** + * 可供应重量 + */ + @Schema(description = "可供应重量") + private java.math.BigDecimal weight; + + /** + * 状态(0-下架/停售,1-上架/在售) + */ + @Schema(description = "状态(0-下架/停售,1-上架/在售)") + private Boolean status; + + /** + * 备注说明(如:含税价、交货期等) + */ + @Schema(description = "备注说明(如:含税价、交货期等)") + private String remark; + + /** + * 创建时间 + */ + @Schema(description = "创建时间") + private java.util.Date createTime; + + /** + * 更新时间 + */ + @Schema(description = "更新时间") + private java.util.Date updateTime; + + private static final long serialVersionUID = 1L; +} diff --git a/src/main/java/com/metalloop/modules/bussiness/model/resp/BizMaterialRespDto.java b/src/main/java/com/metalloop/modules/bussiness/model/resp/BizMaterialRespDto.java new file mode 100644 index 0000000..1788c17 --- /dev/null +++ b/src/main/java/com/metalloop/modules/bussiness/model/resp/BizMaterialRespDto.java @@ -0,0 +1,61 @@ +package com.metalloop.modules.bussiness.model.resp; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 业务-材质基础响应 DTO + * + * @author yy + * @since 2026-09-10 + */ +@Schema(description = "业务-材质基础响应 DTO") +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class BizMaterialRespDto implements Serializable { + + /** + * 材质ID + */ + @Schema(description = "材质ID") + private Long id; + + /** + * 材质名称 + */ + @Schema(description = "材质名称") + private String materialName; + + /** + * 材质编码 + */ + @Schema(description = "材质编码") + private String materialCode; + + /** + * 材质描述 + */ + @Schema(description = "材质描述") + private String description; + + /** + * 创建时间 + */ + @Schema(description = "创建时间") + private java.util.Date createTime; + + /** + * 更新时间 + */ + @Schema(description = "更新时间") + private java.util.Date updateTime; + + private static final long serialVersionUID = 1L; +} diff --git a/src/main/java/com/metalloop/modules/bussiness/model/resp/BizPurchaseRequestRespDto.java b/src/main/java/com/metalloop/modules/bussiness/model/resp/BizPurchaseRequestRespDto.java new file mode 100644 index 0000000..9a79ff1 --- /dev/null +++ b/src/main/java/com/metalloop/modules/bussiness/model/resp/BizPurchaseRequestRespDto.java @@ -0,0 +1,181 @@ +package com.metalloop.modules.bussiness.model.resp; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 业务-求购信息响应 DTO + * + * @author yy + * @since 2026-09-10 + */ +@Schema(description = "业务-求购信息响应 DTO") +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class BizPurchaseRequestRespDto implements Serializable { + + /** + * 求购信息ID(主键) + */ + @Schema(description = "求购信息ID(主键)") + private Long id; + + /** + * 发布人用户ID(关联 sys_user 表) + */ + @Schema(description = "发布人用户ID(关联 sys_user 表)") + private Long createUserId; + + /** + * 所属企业ID + */ + @Schema(description = "所属企业ID") + private Long enterpriseId; + + /** + * 元素种类 + */ + @Schema(description = "元素种类") + private String elementType; + + /** + * 商品类别 + */ + @Schema(description = "商品类别") + private String productCategory; + + /** + * 商品材质(如:紫铜、黄铜、A00) + */ + @Schema(description = "商品材质(如:紫铜、黄铜、A00)") + private String material; + + /** + * 求购标题 + */ + @Schema(description = "求购标题") + private String title; + + /** + * 详细描述 + */ + @Schema(description = "详细描述") + private String description; + + /** + * 求购数量( + */ + @Schema(description = "求购数量(") + private java.math.BigDecimal quantity; + + /** + * 期望单价 + */ + @Schema(description = "期望单价") + private java.math.BigDecimal unitPrice; + + /** + * 联系人 + */ + @Schema(description = "联系人") + private String contactPerson; + + /** + * 联系电话 + */ + @Schema(description = "联系电话") + private String contactPhone; + + /** + * 交货期 + */ + @Schema(description = "交货期") + private java.util.Date deliveryDate; + + /** + * 交货地点 + */ + @Schema(description = "交货地点") + private String deliveryLocation; + + /** + * 图片URL + */ + @Schema(description = "图片URL") + private String imageUrl; + + /** + * 审核状态(0-待审核,1-已通过,2-已驳回) + */ + @Schema(description = "审核状态(0-待审核,1-已通过,2-已驳回)") + private Boolean auditStatus; + + /** + * 发布时间 + */ + @Schema(description = "发布时间") + private java.util.Date publishTime; + + /** + * 过期时间(信息有效期截止) + */ + @Schema(description = "过期时间(信息有效期截止)") + private java.util.Date expireTime; + + /** + * 账期选择模式 + */ + @Schema(description = "账期选择模式") + private String accountPeriodMode; + + /** + * 定金比例 + */ + @Schema(description = "定金比例") + private java.math.BigDecimal depositRatio; + + /** + * 尾款支付期限 + */ + @Schema(description = "尾款支付期限") + private String finalPaymentDeadline; + + /** + * 上下架状态(0-已下架,1-展示中) + */ + @Schema(description = "上下架状态(0-已下架,1-展示中)") + private Boolean status; + + /** + * 审核驳回原因(audit_status=2时填写) + */ + @Schema(description = "审核驳回原因(audit_status=2时填写)") + private String rejectReason; + + /** + * 最后修改人用户ID + */ + @Schema(description = "最后修改人用户ID") + private Long updateUserId; + + /** + * 创建时间 + */ + @Schema(description = "创建时间") + private java.util.Date createTime; + + /** + * 修改时间 + */ + @Schema(description = "修改时间") + private java.util.Date updateTime; + + private static final long serialVersionUID = 1L; +} diff --git a/src/main/java/com/metalloop/modules/bussiness/model/resp/BizSupplyInfoRespDto.java b/src/main/java/com/metalloop/modules/bussiness/model/resp/BizSupplyInfoRespDto.java new file mode 100644 index 0000000..17c4031 --- /dev/null +++ b/src/main/java/com/metalloop/modules/bussiness/model/resp/BizSupplyInfoRespDto.java @@ -0,0 +1,175 @@ +package com.metalloop.modules.bussiness.model.resp; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 业务-发布信息响应 DTO + * + * @author yy + * @since 2026-09-10 + */ +@Schema(description = "业务-发布信息响应 DTO") +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class BizSupplyInfoRespDto implements Serializable { + + /** + * 发布信息ID + */ + @Schema(description = "发布信息ID") + private Long id; + + /** + * 发布人用户ID + */ + @Schema(description = "发布人用户ID") + private Long createUserId; + + /** + * 所属企业ID + */ + @Schema(description = "所属企业ID") + private Long enterpriseId; + + /** + * 元素种类 + */ + @Schema(description = "元素种类") + private String elementType; + + /** + * 商品类别 + */ + @Schema(description = "商品类别") + private String productCategory; + + /** + * 商品材质 + */ + @Schema(description = "商品材质") + private String material; + + /** + * 发布标题 + */ + @Schema(description = "发布标题") + private String title; + + /** + * 详细描述 + */ + @Schema(description = "详细描述") + private String description; + + /** + * 数量 + */ + @Schema(description = "数量") + private java.math.BigDecimal quantity; + + /** + * 单价 + */ + @Schema(description = "单价") + private java.math.BigDecimal unitPrice; + + /** + * 联系人 + */ + @Schema(description = "联系人") + private String contactPerson; + + /** + * 电话 + */ + @Schema(description = "电话") + private String contactPhone; + + /** + * 发货地点 + */ + @Schema(description = "发货地点") + private String deliveryLocation; + + /** + * 图片 + */ + @Schema(description = "图片") + private String imageUrl; + + /** + * 审核状态 + */ + @Schema(description = "审核状态") + private Boolean auditStatus; + + /** + * 发布时间 + */ + @Schema(description = "发布时间") + private java.util.Date publishTime; + + /** + * 过期时间 + */ + @Schema(description = "过期时间") + private java.util.Date expireTime; + + /** + * 账期选择模式 + */ + @Schema(description = "账期选择模式") + private String accountPeriodMode; + + /** + * 定金比例 + */ + @Schema(description = "定金比例") + private java.math.BigDecimal depositRatio; + + /** + * 尾款支付期限 + */ + @Schema(description = "尾款支付期限") + private String finalPaymentDeadline; + + /** + * 上下架状态 + */ + @Schema(description = "上下架状态") + private Boolean status; + + /** + * 审核驳回原因 + */ + @Schema(description = "审核驳回原因") + private String rejectReason; + + /** + * 最后修改人用户ID + */ + @Schema(description = "最后修改人用户ID") + private Long updateUserId; + + /** + * 创建时间 + */ + @Schema(description = "创建时间") + private java.util.Date createTime; + + /** + * 修改时间 + */ + @Schema(description = "修改时间") + private java.util.Date updateTime; + + private static final long serialVersionUID = 1L; +} diff --git a/src/main/java/com/metalloop/modules/bussiness/model/resp/BizVarietyRespDto.java b/src/main/java/com/metalloop/modules/bussiness/model/resp/BizVarietyRespDto.java new file mode 100644 index 0000000..8303a06 --- /dev/null +++ b/src/main/java/com/metalloop/modules/bussiness/model/resp/BizVarietyRespDto.java @@ -0,0 +1,85 @@ +package com.metalloop.modules.bussiness.model.resp; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 业务-产品品种响应 DTO + * + * @author yy + * @since 2026-09-10 + */ +@Schema(description = "业务-产品品种响应 DTO") +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class BizVarietyRespDto implements Serializable { + + /** + * 品种ID(主键) + */ + @Schema(description = "品种ID(主键)") + private Long id; + + /** + * 品种名称 + */ + @Schema(description = "品种名称") + private String varietyName; + + /** + * 品种等级 + */ + @Schema(description = "品种等级") + private String varietyGrade; + + /** + * 父级品种ID + */ + @Schema(description = "父级品种ID") + private Long parentId; + + /** + * 品种主体材质 + */ + @Schema(description = "品种主体材质") + private String varietyMaterial; + + /** + * 品种补充说明 + */ + @Schema(description = "品种补充说明") + private String description; + + /** + * 排序权重 + */ + @Schema(description = "排序权重") + private Integer sort; + + /** + * 状态(0-禁用,1-启用) + */ + @Schema(description = "状态(0-禁用,1-启用)") + private Boolean status; + + /** + * 创建时间 + */ + @Schema(description = "创建时间") + private java.util.Date createTime; + + /** + * 更新时间 + */ + @Schema(description = "更新时间") + private java.util.Date updateTime; + + private static final long serialVersionUID = 1L; +} diff --git a/src/main/java/com/metalloop/modules/bussiness/service/BizEnterpriseProductService.java b/src/main/java/com/metalloop/modules/bussiness/service/BizEnterpriseProductService.java new file mode 100644 index 0000000..ea941ed --- /dev/null +++ b/src/main/java/com/metalloop/modules/bussiness/service/BizEnterpriseProductService.java @@ -0,0 +1,222 @@ +package com.metalloop.modules.bussiness.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.metalloop.common.core.lock.LockCondition; +import com.metalloop.common.service.ISuperService; +import com.metalloop.modules.bussiness.model.po.BizEnterpriseProduct; +import com.metalloop.modules.bussiness.model.query.BizEnterpriseProductQuery; + +import java.util.List; +import java.util.Map; + +/** + * 企业经营产品 Service + * + * @author yy + * @since 2026-09-10 + */ +@SuppressWarnings("unchecked") +public interface BizEnterpriseProductService extends ISuperService { + // region 自动生成代码区,后续手动添加的代码要放在这个区域之外 + + /** + * 创建企业经营产品 + * + * @param bizEnterpriseProduct 企业经营产品 + * @return 创建后的企业经营产品 + */ + BizEnterpriseProduct create(BizEnterpriseProduct bizEnterpriseProduct); + + /** + * 批量创建企业经营产品 + * + * @param bizEnterpriseProducts 企业经营产品列表 + * @return 是否创建成功 + */ + Boolean batchCreate(List bizEnterpriseProducts); + + /** + * 获取全部企业经营产品列表 + * + * @return 全部企业经营产品列表 + */ + List listAll(); + + /** + * 批量更新企业经营产品 + * + * @param bizEnterpriseProducts 企业经营产品列表 + * @return 是否更新成功 + */ + Boolean batchUpdateById(List bizEnterpriseProducts); + + /** + * 通过ID删除企业经营产品 + * + * @param id 企业经营产品ID + * @return 是否删除成功 + */ + Boolean deleteById(Long id); + + /** + * 批量删除企业经营产品 + * + * @param ids 企业经营产品ID列表 + * @return 是否删除成功 + */ + Boolean batchDelete(List ids); + + /** + * 幂等性创建企业经营产品 + * + * @param entity 企业经营产品 + * @param conditions 幂等性条件 + * @return 是否创建成功 + */ + Boolean createIdempotency(BizEnterpriseProduct entity, LockCondition... conditions); + + /** + * 通过ID幂等性更新企业经营产品 + * + * @param entity 企业经营产品 + * @param conditions 幂等性条件 + * @return 是否更新成功 + */ + Boolean updateByIdIdempotency(BizEnterpriseProduct entity, LockCondition... conditions); + + /** + * 创建或更新企业经营产品(幂等性) + * + * @param entity 企业经营产品 + * @param conditions 幂等性条件 + * @return 是否创建或更新成功 + */ + Boolean saveOrUpdateIdempotency(BizEnterpriseProduct entity, LockCondition... conditions); + + /** + * 通过查询条件进行分页获取企业经营产品 + * + * @param current 当前页数 + * @param size 每页记录数量 + * @param query 查询条件 + * @return 企业经营产品分页 + */ + Page pageByQuery(long current, long size, BizEnterpriseProductQuery query); + + /** + * 分页获取全部企业经营产品 + * + * @param current 当前页数 + * @param size 每页记录数量 + * @return 全部企业经营产品分页 + */ + Page pageAll(long current, long size); + + /** + * 获取ID和企业经营产品的映射 + * + * @return ID和企业经营产品的映射 + */ + Map getIdMap(); + + /** + * 获取指定ID集合的ID和企业经营产品的映射 + * + * @param ids 企业经营产品ID列表 + * @return ID和企业经营产品的映射 + */ + Map getIdMapByIds(List ids); + + /** + * 获取ID和企业经营产品 列表的分组 + * + * @return ID和企业经营产品 列表的分组 + */ + Map> getIdGroup(); + + /** + * 获取指定ID集合的ID和企业经营产品 列表的分组 + * + * @param ids 企业经营产品ID列表 + * @return ID和企业经营产品 列表的分组 + */ + Map> getIdGroupByIds(List ids); + + /** + * 获取全部企业经营产品数量 + * + * @return 全部企业经营产品数量 + */ + Long countAll(); + + // region 此区域的方法主要用作示例,禁止滥用,因为Query对象大而全,调用者会很迷惑,必须封装为更具体的参数及签名的方法,如getByCodeAndType(String code, Integer type)。 + // 除非:确实需要3个及以上参数,方可合并为Query,如BizEnterpriseProductQuery + + /** + * 通过查询条件修改企业经营产品 + * + * @param entity 企业经营产品 + * @param query 查询条件 + * @return 是否修改成功 + */ + Boolean updateByQuery(BizEnterpriseProduct entity, BizEnterpriseProductQuery query); + + /** + * 通过查询条件删除企业经营产品 + * + * @param query 查询条件 + * @return 是否删除成功 + */ + Boolean removeByQuery(BizEnterpriseProductQuery query); + + /** + * 通过查询条件获取企业经营产品 + * + * @param query 查询条件 + * @return 企业经营产品 + */ + BizEnterpriseProduct getByQuery(BizEnterpriseProductQuery query); + + /** + * 通过查询条件获取企业经营产品列表 + * + * @param query 查询条件 + * @return 企业经营产品列表 + */ + List listByQuery(BizEnterpriseProductQuery query); + + /** + * 通过查询条件获取ID和企业经营产品的映射 + * + * @param query 查询条件 + * @return ID和企业经营产品的映射 + */ + Map getIdMapByQuery(BizEnterpriseProductQuery query); + + /** + * 通过查询条件获取分组的企业经营产品 + * + * @param query 查询条件 + * @return 企业经营产品分组 + */ + Map> getIdGroupByQuery(BizEnterpriseProductQuery query); + + /** + * 通过查询条件获取企业经营产品数量 + * + * @param query 查询条件 + * @return 企业经营产品数量 + */ + Long countByQuery(BizEnterpriseProductQuery query); + + /** + * 检查是否存在符合查询条件的企业经营产品 + * + * @param query 查询条件 + * @return 是否存在 + */ + Boolean existsByQuery(BizEnterpriseProductQuery query); + // endregion + + // endregion 自动生成代码区,后续手动添加的代码要放在这个区域之外 +} diff --git a/src/main/java/com/metalloop/modules/bussiness/service/BizMaterialService.java b/src/main/java/com/metalloop/modules/bussiness/service/BizMaterialService.java new file mode 100644 index 0000000..17fe544 --- /dev/null +++ b/src/main/java/com/metalloop/modules/bussiness/service/BizMaterialService.java @@ -0,0 +1,222 @@ +package com.metalloop.modules.bussiness.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.metalloop.common.core.lock.LockCondition; +import com.metalloop.common.service.ISuperService; +import com.metalloop.modules.bussiness.model.po.BizMaterial; +import com.metalloop.modules.bussiness.model.query.BizMaterialQuery; + +import java.util.List; +import java.util.Map; + +/** + * 业务-材质基础 Service + * + * @author yy + * @since 2026-09-10 + */ +@SuppressWarnings("unchecked") +public interface BizMaterialService extends ISuperService { + // region 自动生成代码区,后续手动添加的代码要放在这个区域之外 + + /** + * 创建业务-材质基础 + * + * @param bizMaterial 业务-材质基础 + * @return 创建后的业务-材质基础 + */ + BizMaterial create(BizMaterial bizMaterial); + + /** + * 批量创建业务-材质基础 + * + * @param bizMaterials 业务-材质基础列表 + * @return 是否创建成功 + */ + Boolean batchCreate(List bizMaterials); + + /** + * 获取全部业务-材质基础列表 + * + * @return 全部业务-材质基础列表 + */ + List listAll(); + + /** + * 批量更新业务-材质基础 + * + * @param bizMaterials 业务-材质基础列表 + * @return 是否更新成功 + */ + Boolean batchUpdateById(List bizMaterials); + + /** + * 通过ID删除业务-材质基础 + * + * @param id 业务-材质基础ID + * @return 是否删除成功 + */ + Boolean deleteById(Long id); + + /** + * 批量删除业务-材质基础 + * + * @param ids 业务-材质基础ID列表 + * @return 是否删除成功 + */ + Boolean batchDelete(List ids); + + /** + * 幂等性创建业务-材质基础 + * + * @param entity 业务-材质基础 + * @param conditions 幂等性条件 + * @return 是否创建成功 + */ + Boolean createIdempotency(BizMaterial entity, LockCondition... conditions); + + /** + * 通过ID幂等性更新业务-材质基础 + * + * @param entity 业务-材质基础 + * @param conditions 幂等性条件 + * @return 是否更新成功 + */ + Boolean updateByIdIdempotency(BizMaterial entity, LockCondition... conditions); + + /** + * 创建或更新业务-材质基础(幂等性) + * + * @param entity 业务-材质基础 + * @param conditions 幂等性条件 + * @return 是否创建或更新成功 + */ + Boolean saveOrUpdateIdempotency(BizMaterial entity, LockCondition... conditions); + + /** + * 通过查询条件进行分页获取业务-材质基础 + * + * @param current 当前页数 + * @param size 每页记录数量 + * @param query 查询条件 + * @return 业务-材质基础分页 + */ + Page pageByQuery(long current, long size, BizMaterialQuery query); + + /** + * 分页获取全部业务-材质基础 + * + * @param current 当前页数 + * @param size 每页记录数量 + * @return 全部业务-材质基础分页 + */ + Page pageAll(long current, long size); + + /** + * 获取ID和业务-材质基础的映射 + * + * @return ID和业务-材质基础的映射 + */ + Map getIdMap(); + + /** + * 获取指定ID集合的ID和业务-材质基础的映射 + * + * @param ids 业务-材质基础ID列表 + * @return ID和业务-材质基础的映射 + */ + Map getIdMapByIds(List ids); + + /** + * 获取ID和业务-材质基础 列表的分组 + * + * @return ID和业务-材质基础 列表的分组 + */ + Map> getIdGroup(); + + /** + * 获取指定ID集合的ID和业务-材质基础 列表的分组 + * + * @param ids 业务-材质基础ID列表 + * @return ID和业务-材质基础 列表的分组 + */ + Map> getIdGroupByIds(List ids); + + /** + * 获取全部业务-材质基础数量 + * + * @return 全部业务-材质基础数量 + */ + Long countAll(); + + // region 此区域的方法主要用作示例,禁止滥用,因为Query对象大而全,调用者会很迷惑,必须封装为更具体的参数及签名的方法,如getByCodeAndType(String code, Integer type)。 + // 除非:确实需要3个及以上参数,方可合并为Query,如BizMaterialQuery + + /** + * 通过查询条件修改业务-材质基础 + * + * @param entity 业务-材质基础 + * @param query 查询条件 + * @return 是否修改成功 + */ + Boolean updateByQuery(BizMaterial entity, BizMaterialQuery query); + + /** + * 通过查询条件删除业务-材质基础 + * + * @param query 查询条件 + * @return 是否删除成功 + */ + Boolean removeByQuery(BizMaterialQuery query); + + /** + * 通过查询条件获取业务-材质基础 + * + * @param query 查询条件 + * @return 业务-材质基础 + */ + BizMaterial getByQuery(BizMaterialQuery query); + + /** + * 通过查询条件获取业务-材质基础列表 + * + * @param query 查询条件 + * @return 业务-材质基础列表 + */ + List listByQuery(BizMaterialQuery query); + + /** + * 通过查询条件获取ID和业务-材质基础的映射 + * + * @param query 查询条件 + * @return ID和业务-材质基础的映射 + */ + Map getIdMapByQuery(BizMaterialQuery query); + + /** + * 通过查询条件获取分组的业务-材质基础 + * + * @param query 查询条件 + * @return 业务-材质基础分组 + */ + Map> getIdGroupByQuery(BizMaterialQuery query); + + /** + * 通过查询条件获取业务-材质基础数量 + * + * @param query 查询条件 + * @return 业务-材质基础数量 + */ + Long countByQuery(BizMaterialQuery query); + + /** + * 检查是否存在符合查询条件的业务-材质基础 + * + * @param query 查询条件 + * @return 是否存在 + */ + Boolean existsByQuery(BizMaterialQuery query); + // endregion + + // endregion 自动生成代码区,后续手动添加的代码要放在这个区域之外 +} diff --git a/src/main/java/com/metalloop/modules/bussiness/service/BizPurchaseRequestService.java b/src/main/java/com/metalloop/modules/bussiness/service/BizPurchaseRequestService.java new file mode 100644 index 0000000..898f818 --- /dev/null +++ b/src/main/java/com/metalloop/modules/bussiness/service/BizPurchaseRequestService.java @@ -0,0 +1,222 @@ +package com.metalloop.modules.bussiness.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.metalloop.common.core.lock.LockCondition; +import com.metalloop.common.service.ISuperService; +import com.metalloop.modules.bussiness.model.po.BizPurchaseRequest; +import com.metalloop.modules.bussiness.model.query.BizPurchaseRequestQuery; + +import java.util.List; +import java.util.Map; + +/** + * 业务-求购信息 Service + * + * @author yy + * @since 2026-09-10 + */ +@SuppressWarnings("unchecked") +public interface BizPurchaseRequestService extends ISuperService { + // region 自动生成代码区,后续手动添加的代码要放在这个区域之外 + + /** + * 创建业务-求购信息 + * + * @param bizPurchaseRequest 业务-求购信息 + * @return 创建后的业务-求购信息 + */ + BizPurchaseRequest create(BizPurchaseRequest bizPurchaseRequest); + + /** + * 批量创建业务-求购信息 + * + * @param bizPurchaseRequests 业务-求购信息列表 + * @return 是否创建成功 + */ + Boolean batchCreate(List bizPurchaseRequests); + + /** + * 获取全部业务-求购信息列表 + * + * @return 全部业务-求购信息列表 + */ + List listAll(); + + /** + * 批量更新业务-求购信息 + * + * @param bizPurchaseRequests 业务-求购信息列表 + * @return 是否更新成功 + */ + Boolean batchUpdateById(List bizPurchaseRequests); + + /** + * 通过ID删除业务-求购信息 + * + * @param id 业务-求购信息ID + * @return 是否删除成功 + */ + Boolean deleteById(Long id); + + /** + * 批量删除业务-求购信息 + * + * @param ids 业务-求购信息ID列表 + * @return 是否删除成功 + */ + Boolean batchDelete(List ids); + + /** + * 幂等性创建业务-求购信息 + * + * @param entity 业务-求购信息 + * @param conditions 幂等性条件 + * @return 是否创建成功 + */ + Boolean createIdempotency(BizPurchaseRequest entity, LockCondition... conditions); + + /** + * 通过ID幂等性更新业务-求购信息 + * + * @param entity 业务-求购信息 + * @param conditions 幂等性条件 + * @return 是否更新成功 + */ + Boolean updateByIdIdempotency(BizPurchaseRequest entity, LockCondition... conditions); + + /** + * 创建或更新业务-求购信息(幂等性) + * + * @param entity 业务-求购信息 + * @param conditions 幂等性条件 + * @return 是否创建或更新成功 + */ + Boolean saveOrUpdateIdempotency(BizPurchaseRequest entity, LockCondition... conditions); + + /** + * 通过查询条件进行分页获取业务-求购信息 + * + * @param current 当前页数 + * @param size 每页记录数量 + * @param query 查询条件 + * @return 业务-求购信息分页 + */ + Page pageByQuery(long current, long size, BizPurchaseRequestQuery query); + + /** + * 分页获取全部业务-求购信息 + * + * @param current 当前页数 + * @param size 每页记录数量 + * @return 全部业务-求购信息分页 + */ + Page pageAll(long current, long size); + + /** + * 获取ID和业务-求购信息的映射 + * + * @return ID和业务-求购信息的映射 + */ + Map getIdMap(); + + /** + * 获取指定ID集合的ID和业务-求购信息的映射 + * + * @param ids 业务-求购信息ID列表 + * @return ID和业务-求购信息的映射 + */ + Map getIdMapByIds(List ids); + + /** + * 获取ID和业务-求购信息 列表的分组 + * + * @return ID和业务-求购信息 列表的分组 + */ + Map> getIdGroup(); + + /** + * 获取指定ID集合的ID和业务-求购信息 列表的分组 + * + * @param ids 业务-求购信息ID列表 + * @return ID和业务-求购信息 列表的分组 + */ + Map> getIdGroupByIds(List ids); + + /** + * 获取全部业务-求购信息数量 + * + * @return 全部业务-求购信息数量 + */ + Long countAll(); + + // region 此区域的方法主要用作示例,禁止滥用,因为Query对象大而全,调用者会很迷惑,必须封装为更具体的参数及签名的方法,如getByCodeAndType(String code, Integer type)。 + // 除非:确实需要3个及以上参数,方可合并为Query,如BizPurchaseRequestQuery + + /** + * 通过查询条件修改业务-求购信息 + * + * @param entity 业务-求购信息 + * @param query 查询条件 + * @return 是否修改成功 + */ + Boolean updateByQuery(BizPurchaseRequest entity, BizPurchaseRequestQuery query); + + /** + * 通过查询条件删除业务-求购信息 + * + * @param query 查询条件 + * @return 是否删除成功 + */ + Boolean removeByQuery(BizPurchaseRequestQuery query); + + /** + * 通过查询条件获取业务-求购信息 + * + * @param query 查询条件 + * @return 业务-求购信息 + */ + BizPurchaseRequest getByQuery(BizPurchaseRequestQuery query); + + /** + * 通过查询条件获取业务-求购信息列表 + * + * @param query 查询条件 + * @return 业务-求购信息列表 + */ + List listByQuery(BizPurchaseRequestQuery query); + + /** + * 通过查询条件获取ID和业务-求购信息的映射 + * + * @param query 查询条件 + * @return ID和业务-求购信息的映射 + */ + Map getIdMapByQuery(BizPurchaseRequestQuery query); + + /** + * 通过查询条件获取分组的业务-求购信息 + * + * @param query 查询条件 + * @return 业务-求购信息分组 + */ + Map> getIdGroupByQuery(BizPurchaseRequestQuery query); + + /** + * 通过查询条件获取业务-求购信息数量 + * + * @param query 查询条件 + * @return 业务-求购信息数量 + */ + Long countByQuery(BizPurchaseRequestQuery query); + + /** + * 检查是否存在符合查询条件的业务-求购信息 + * + * @param query 查询条件 + * @return 是否存在 + */ + Boolean existsByQuery(BizPurchaseRequestQuery query); + // endregion + + // endregion 自动生成代码区,后续手动添加的代码要放在这个区域之外 +} diff --git a/src/main/java/com/metalloop/modules/bussiness/service/BizSupplyInfoService.java b/src/main/java/com/metalloop/modules/bussiness/service/BizSupplyInfoService.java new file mode 100644 index 0000000..cf9a2a4 --- /dev/null +++ b/src/main/java/com/metalloop/modules/bussiness/service/BizSupplyInfoService.java @@ -0,0 +1,222 @@ +package com.metalloop.modules.bussiness.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.metalloop.common.core.lock.LockCondition; +import com.metalloop.common.service.ISuperService; +import com.metalloop.modules.bussiness.model.po.BizSupplyInfo; +import com.metalloop.modules.bussiness.model.query.BizSupplyInfoQuery; + +import java.util.List; +import java.util.Map; + +/** + * 业务-发布信息 Service + * + * @author yy + * @since 2026-09-10 + */ +@SuppressWarnings("unchecked") +public interface BizSupplyInfoService extends ISuperService { + // region 自动生成代码区,后续手动添加的代码要放在这个区域之外 + + /** + * 创建业务-发布信息 + * + * @param bizSupplyInfo 业务-发布信息 + * @return 创建后的业务-发布信息 + */ + BizSupplyInfo create(BizSupplyInfo bizSupplyInfo); + + /** + * 批量创建业务-发布信息 + * + * @param bizSupplyInfos 业务-发布信息列表 + * @return 是否创建成功 + */ + Boolean batchCreate(List bizSupplyInfos); + + /** + * 获取全部业务-发布信息列表 + * + * @return 全部业务-发布信息列表 + */ + List listAll(); + + /** + * 批量更新业务-发布信息 + * + * @param bizSupplyInfos 业务-发布信息列表 + * @return 是否更新成功 + */ + Boolean batchUpdateById(List bizSupplyInfos); + + /** + * 通过ID删除业务-发布信息 + * + * @param id 业务-发布信息ID + * @return 是否删除成功 + */ + Boolean deleteById(Long id); + + /** + * 批量删除业务-发布信息 + * + * @param ids 业务-发布信息ID列表 + * @return 是否删除成功 + */ + Boolean batchDelete(List ids); + + /** + * 幂等性创建业务-发布信息 + * + * @param entity 业务-发布信息 + * @param conditions 幂等性条件 + * @return 是否创建成功 + */ + Boolean createIdempotency(BizSupplyInfo entity, LockCondition... conditions); + + /** + * 通过ID幂等性更新业务-发布信息 + * + * @param entity 业务-发布信息 + * @param conditions 幂等性条件 + * @return 是否更新成功 + */ + Boolean updateByIdIdempotency(BizSupplyInfo entity, LockCondition... conditions); + + /** + * 创建或更新业务-发布信息(幂等性) + * + * @param entity 业务-发布信息 + * @param conditions 幂等性条件 + * @return 是否创建或更新成功 + */ + Boolean saveOrUpdateIdempotency(BizSupplyInfo entity, LockCondition... conditions); + + /** + * 通过查询条件进行分页获取业务-发布信息 + * + * @param current 当前页数 + * @param size 每页记录数量 + * @param query 查询条件 + * @return 业务-发布信息分页 + */ + Page pageByQuery(long current, long size, BizSupplyInfoQuery query); + + /** + * 分页获取全部业务-发布信息 + * + * @param current 当前页数 + * @param size 每页记录数量 + * @return 全部业务-发布信息分页 + */ + Page pageAll(long current, long size); + + /** + * 获取ID和业务-发布信息的映射 + * + * @return ID和业务-发布信息的映射 + */ + Map getIdMap(); + + /** + * 获取指定ID集合的ID和业务-发布信息的映射 + * + * @param ids 业务-发布信息ID列表 + * @return ID和业务-发布信息的映射 + */ + Map getIdMapByIds(List ids); + + /** + * 获取ID和业务-发布信息 列表的分组 + * + * @return ID和业务-发布信息 列表的分组 + */ + Map> getIdGroup(); + + /** + * 获取指定ID集合的ID和业务-发布信息 列表的分组 + * + * @param ids 业务-发布信息ID列表 + * @return ID和业务-发布信息 列表的分组 + */ + Map> getIdGroupByIds(List ids); + + /** + * 获取全部业务-发布信息数量 + * + * @return 全部业务-发布信息数量 + */ + Long countAll(); + + // region 此区域的方法主要用作示例,禁止滥用,因为Query对象大而全,调用者会很迷惑,必须封装为更具体的参数及签名的方法,如getByCodeAndType(String code, Integer type)。 + // 除非:确实需要3个及以上参数,方可合并为Query,如BizSupplyInfoQuery + + /** + * 通过查询条件修改业务-发布信息 + * + * @param entity 业务-发布信息 + * @param query 查询条件 + * @return 是否修改成功 + */ + Boolean updateByQuery(BizSupplyInfo entity, BizSupplyInfoQuery query); + + /** + * 通过查询条件删除业务-发布信息 + * + * @param query 查询条件 + * @return 是否删除成功 + */ + Boolean removeByQuery(BizSupplyInfoQuery query); + + /** + * 通过查询条件获取业务-发布信息 + * + * @param query 查询条件 + * @return 业务-发布信息 + */ + BizSupplyInfo getByQuery(BizSupplyInfoQuery query); + + /** + * 通过查询条件获取业务-发布信息列表 + * + * @param query 查询条件 + * @return 业务-发布信息列表 + */ + List listByQuery(BizSupplyInfoQuery query); + + /** + * 通过查询条件获取ID和业务-发布信息的映射 + * + * @param query 查询条件 + * @return ID和业务-发布信息的映射 + */ + Map getIdMapByQuery(BizSupplyInfoQuery query); + + /** + * 通过查询条件获取分组的业务-发布信息 + * + * @param query 查询条件 + * @return 业务-发布信息分组 + */ + Map> getIdGroupByQuery(BizSupplyInfoQuery query); + + /** + * 通过查询条件获取业务-发布信息数量 + * + * @param query 查询条件 + * @return 业务-发布信息数量 + */ + Long countByQuery(BizSupplyInfoQuery query); + + /** + * 检查是否存在符合查询条件的业务-发布信息 + * + * @param query 查询条件 + * @return 是否存在 + */ + Boolean existsByQuery(BizSupplyInfoQuery query); + // endregion + + // endregion 自动生成代码区,后续手动添加的代码要放在这个区域之外 +} diff --git a/src/main/java/com/metalloop/modules/bussiness/service/BizVarietyService.java b/src/main/java/com/metalloop/modules/bussiness/service/BizVarietyService.java new file mode 100644 index 0000000..3f18114 --- /dev/null +++ b/src/main/java/com/metalloop/modules/bussiness/service/BizVarietyService.java @@ -0,0 +1,222 @@ +package com.metalloop.modules.bussiness.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.metalloop.common.core.lock.LockCondition; +import com.metalloop.common.service.ISuperService; +import com.metalloop.modules.bussiness.model.po.BizVariety; +import com.metalloop.modules.bussiness.model.query.BizVarietyQuery; + +import java.util.List; +import java.util.Map; + +/** + * 业务-产品品种 Service + * + * @author yy + * @since 2026-09-10 + */ +@SuppressWarnings("unchecked") +public interface BizVarietyService extends ISuperService { + // region 自动生成代码区,后续手动添加的代码要放在这个区域之外 + + /** + * 创建业务-产品品种 + * + * @param bizVariety 业务-产品品种 + * @return 创建后的业务-产品品种 + */ + BizVariety create(BizVariety bizVariety); + + /** + * 批量创建业务-产品品种 + * + * @param bizVarietys 业务-产品品种列表 + * @return 是否创建成功 + */ + Boolean batchCreate(List bizVarietys); + + /** + * 获取全部业务-产品品种列表 + * + * @return 全部业务-产品品种列表 + */ + List listAll(); + + /** + * 批量更新业务-产品品种 + * + * @param bizVarietys 业务-产品品种列表 + * @return 是否更新成功 + */ + Boolean batchUpdateById(List bizVarietys); + + /** + * 通过ID删除业务-产品品种 + * + * @param id 业务-产品品种ID + * @return 是否删除成功 + */ + Boolean deleteById(Long id); + + /** + * 批量删除业务-产品品种 + * + * @param ids 业务-产品品种ID列表 + * @return 是否删除成功 + */ + Boolean batchDelete(List ids); + + /** + * 幂等性创建业务-产品品种 + * + * @param entity 业务-产品品种 + * @param conditions 幂等性条件 + * @return 是否创建成功 + */ + Boolean createIdempotency(BizVariety entity, LockCondition... conditions); + + /** + * 通过ID幂等性更新业务-产品品种 + * + * @param entity 业务-产品品种 + * @param conditions 幂等性条件 + * @return 是否更新成功 + */ + Boolean updateByIdIdempotency(BizVariety entity, LockCondition... conditions); + + /** + * 创建或更新业务-产品品种(幂等性) + * + * @param entity 业务-产品品种 + * @param conditions 幂等性条件 + * @return 是否创建或更新成功 + */ + Boolean saveOrUpdateIdempotency(BizVariety entity, LockCondition... conditions); + + /** + * 通过查询条件进行分页获取业务-产品品种 + * + * @param current 当前页数 + * @param size 每页记录数量 + * @param query 查询条件 + * @return 业务-产品品种分页 + */ + Page pageByQuery(long current, long size, BizVarietyQuery query); + + /** + * 分页获取全部业务-产品品种 + * + * @param current 当前页数 + * @param size 每页记录数量 + * @return 全部业务-产品品种分页 + */ + Page pageAll(long current, long size); + + /** + * 获取ID和业务-产品品种的映射 + * + * @return ID和业务-产品品种的映射 + */ + Map getIdMap(); + + /** + * 获取指定ID集合的ID和业务-产品品种的映射 + * + * @param ids 业务-产品品种ID列表 + * @return ID和业务-产品品种的映射 + */ + Map getIdMapByIds(List ids); + + /** + * 获取ID和业务-产品品种 列表的分组 + * + * @return ID和业务-产品品种 列表的分组 + */ + Map> getIdGroup(); + + /** + * 获取指定ID集合的ID和业务-产品品种 列表的分组 + * + * @param ids 业务-产品品种ID列表 + * @return ID和业务-产品品种 列表的分组 + */ + Map> getIdGroupByIds(List ids); + + /** + * 获取全部业务-产品品种数量 + * + * @return 全部业务-产品品种数量 + */ + Long countAll(); + + // region 此区域的方法主要用作示例,禁止滥用,因为Query对象大而全,调用者会很迷惑,必须封装为更具体的参数及签名的方法,如getByCodeAndType(String code, Integer type)。 + // 除非:确实需要3个及以上参数,方可合并为Query,如BizVarietyQuery + + /** + * 通过查询条件修改业务-产品品种 + * + * @param entity 业务-产品品种 + * @param query 查询条件 + * @return 是否修改成功 + */ + Boolean updateByQuery(BizVariety entity, BizVarietyQuery query); + + /** + * 通过查询条件删除业务-产品品种 + * + * @param query 查询条件 + * @return 是否删除成功 + */ + Boolean removeByQuery(BizVarietyQuery query); + + /** + * 通过查询条件获取业务-产品品种 + * + * @param query 查询条件 + * @return 业务-产品品种 + */ + BizVariety getByQuery(BizVarietyQuery query); + + /** + * 通过查询条件获取业务-产品品种列表 + * + * @param query 查询条件 + * @return 业务-产品品种列表 + */ + List listByQuery(BizVarietyQuery query); + + /** + * 通过查询条件获取ID和业务-产品品种的映射 + * + * @param query 查询条件 + * @return ID和业务-产品品种的映射 + */ + Map getIdMapByQuery(BizVarietyQuery query); + + /** + * 通过查询条件获取分组的业务-产品品种 + * + * @param query 查询条件 + * @return 业务-产品品种分组 + */ + Map> getIdGroupByQuery(BizVarietyQuery query); + + /** + * 通过查询条件获取业务-产品品种数量 + * + * @param query 查询条件 + * @return 业务-产品品种数量 + */ + Long countByQuery(BizVarietyQuery query); + + /** + * 检查是否存在符合查询条件的业务-产品品种 + * + * @param query 查询条件 + * @return 是否存在 + */ + Boolean existsByQuery(BizVarietyQuery query); + // endregion + + // endregion 自动生成代码区,后续手动添加的代码要放在这个区域之外 +} diff --git a/src/main/java/com/metalloop/modules/bussiness/service/impl/BizEnterpriseProductServiceImpl.java b/src/main/java/com/metalloop/modules/bussiness/service/impl/BizEnterpriseProductServiceImpl.java new file mode 100644 index 0000000..b847c89 --- /dev/null +++ b/src/main/java/com/metalloop/modules/bussiness/service/impl/BizEnterpriseProductServiceImpl.java @@ -0,0 +1,169 @@ +package com.metalloop.modules.bussiness.service.impl; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.metalloop.common.core.lock.DistributedLock; +import com.metalloop.common.core.lock.LockCondition; +import com.metalloop.common.service.impl.SuperServiceImpl; +import com.metalloop.modules.bussiness.mapper.BizEnterpriseProductMapper; +import com.metalloop.modules.bussiness.model.po.BizEnterpriseProduct; +import com.metalloop.modules.bussiness.model.query.BizEnterpriseProductQuery; +import com.metalloop.modules.bussiness.service.BizEnterpriseProductService; +import jakarta.annotation.Resource; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; +import java.util.Map; + +/** + * 企业经营产品 Service 实现类 + * + * @author yy + * @since 2026-09-10 + */ +@SuppressWarnings("java:S6809") +@Service +public class BizEnterpriseProductServiceImpl extends SuperServiceImpl implements BizEnterpriseProductService { + + @Resource + private DistributedLock distributedLock; + + @Resource + BizEnterpriseProductMapper bizEnterpriseProductMapper; + + // region 自动生成代码区,后续手动添加的代码要放在这个区域之外 + + @Override + public BizEnterpriseProduct create(BizEnterpriseProduct bizEnterpriseProduct) { + save(bizEnterpriseProduct); + return bizEnterpriseProduct; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean batchCreate(List bizEnterpriseProducts) { + return saveBatch(bizEnterpriseProducts); + } + + @Override + public List listAll() { + return list(); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean batchUpdateById(List bizEnterpriseProducts) { + return updateBatchById(bizEnterpriseProducts); + } + + @Override + public Boolean deleteById(Long id) { + return removeById(id); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean batchDelete(List ids) { + return removeByIds(ids); + } + + @SafeVarargs + @Override + public final Boolean createIdempotency(BizEnterpriseProduct entity, LockCondition... conditions) { + return saveIdempotency(entity, distributedLock, conditions); + } + + @SafeVarargs + @Override + public final Boolean updateByIdIdempotency(BizEnterpriseProduct entity, LockCondition... conditions) { + return updateByIdIdempotency(entity, distributedLock, conditions); + } + + @SafeVarargs + @Override + public final Boolean saveOrUpdateIdempotency(BizEnterpriseProduct entity, LockCondition... conditions) { + return saveOrUpdateIdempotency(entity, distributedLock, conditions); + } + + @Override + public Page pageByQuery(long current, long size, BizEnterpriseProductQuery query) { + return page(Page.of(current, size), query); + } + + @Override + public Page pageAll(long current, long size) { + return page(Page.of(current, size)); + } + + @Override + public Map getIdMap() { + return toMap( e -> String.valueOf(e.getId()) ,list()); + } + + @Override + public Map getIdMapByIds(List ids) { + return toMap( e -> String.valueOf(e.getId()) ,listByIds(ids)); + } + + @Override + public Map> getIdGroup() { + return toGroup( e -> String.valueOf(e.getId()) ,list()); + } + + @Override + public Map> getIdGroupByIds(List ids) { + return toGroup( e -> String.valueOf(e.getId()) ,listByIds(ids)); + } + + @Override + public Long countAll() { + return count(); + } + + // region 此区域的方法主要用作示例,禁止滥用,因为Query对象大而全,调用者会很迷惑,必须封装为更具体的参数及签名的方法,如getByCodeAndType(String code, Integer type)。 + // 除非:确实需要3个及以上参数,方可合并为Query,如BizEnterpriseProductQuery + + @Override + public Boolean updateByQuery(BizEnterpriseProduct entity, BizEnterpriseProductQuery query) { + return update(entity, query); + } + + @Override + public Boolean removeByQuery(BizEnterpriseProductQuery query) { + return remove(query); + } + + @Override + public BizEnterpriseProduct getByQuery(BizEnterpriseProductQuery query) { + return get(query); + } + + @Override + public List listByQuery(BizEnterpriseProductQuery query) { + return list(query); + } + + @Override + public Map getIdMapByQuery(BizEnterpriseProductQuery query) { + return toMap(BizEnterpriseProduct::getId, query); + } + + @Override + public Map> getIdGroupByQuery(BizEnterpriseProductQuery query) { + return toGroup(BizEnterpriseProduct::getId, query); + } + + @Override + public Long countByQuery(BizEnterpriseProductQuery query) { + return count(query); + } + + @Override + public Boolean existsByQuery(BizEnterpriseProductQuery query) { + long count = count(query); + return count > 0; + } + // endregion + + // endregion 自动生成代码区,后续手动添加的代码要放在这个区域之外 +} diff --git a/src/main/java/com/metalloop/modules/bussiness/service/impl/BizMaterialServiceImpl.java b/src/main/java/com/metalloop/modules/bussiness/service/impl/BizMaterialServiceImpl.java new file mode 100644 index 0000000..6ad3b20 --- /dev/null +++ b/src/main/java/com/metalloop/modules/bussiness/service/impl/BizMaterialServiceImpl.java @@ -0,0 +1,169 @@ +package com.metalloop.modules.bussiness.service.impl; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.metalloop.common.core.lock.DistributedLock; +import com.metalloop.common.core.lock.LockCondition; +import com.metalloop.common.service.impl.SuperServiceImpl; +import com.metalloop.modules.bussiness.mapper.BizMaterialMapper; +import com.metalloop.modules.bussiness.model.po.BizMaterial; +import com.metalloop.modules.bussiness.model.query.BizMaterialQuery; +import com.metalloop.modules.bussiness.service.BizMaterialService; +import jakarta.annotation.Resource; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; +import java.util.Map; + +/** + * 业务-材质基础 Service 实现类 + * + * @author yy + * @since 2026-09-10 + */ +@SuppressWarnings("java:S6809") +@Service +public class BizMaterialServiceImpl extends SuperServiceImpl implements BizMaterialService { + + @Resource + private DistributedLock distributedLock; + + @Resource + BizMaterialMapper bizMaterialMapper; + + // region 自动生成代码区,后续手动添加的代码要放在这个区域之外 + + @Override + public BizMaterial create(BizMaterial bizMaterial) { + save(bizMaterial); + return bizMaterial; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean batchCreate(List bizMaterials) { + return saveBatch(bizMaterials); + } + + @Override + public List listAll() { + return list(); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean batchUpdateById(List bizMaterials) { + return updateBatchById(bizMaterials); + } + + @Override + public Boolean deleteById(Long id) { + return removeById(id); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean batchDelete(List ids) { + return removeByIds(ids); + } + + @SafeVarargs + @Override + public final Boolean createIdempotency(BizMaterial entity, LockCondition... conditions) { + return saveIdempotency(entity, distributedLock, conditions); + } + + @SafeVarargs + @Override + public final Boolean updateByIdIdempotency(BizMaterial entity, LockCondition... conditions) { + return updateByIdIdempotency(entity, distributedLock, conditions); + } + + @SafeVarargs + @Override + public final Boolean saveOrUpdateIdempotency(BizMaterial entity, LockCondition... conditions) { + return saveOrUpdateIdempotency(entity, distributedLock, conditions); + } + + @Override + public Page pageByQuery(long current, long size, BizMaterialQuery query) { + return page(Page.of(current, size), query); + } + + @Override + public Page pageAll(long current, long size) { + return page(Page.of(current, size)); + } + + @Override + public Map getIdMap() { + return toMap( e -> String.valueOf(e.getId()) ,list()); + } + + @Override + public Map getIdMapByIds(List ids) { + return toMap( e -> String.valueOf(e.getId()) ,listByIds(ids)); + } + + @Override + public Map> getIdGroup() { + return toGroup( e -> String.valueOf(e.getId()) ,list()); + } + + @Override + public Map> getIdGroupByIds(List ids) { + return toGroup( e -> String.valueOf(e.getId()) ,listByIds(ids)); + } + + @Override + public Long countAll() { + return count(); + } + + // region 此区域的方法主要用作示例,禁止滥用,因为Query对象大而全,调用者会很迷惑,必须封装为更具体的参数及签名的方法,如getByCodeAndType(String code, Integer type)。 + // 除非:确实需要3个及以上参数,方可合并为Query,如BizMaterialQuery + + @Override + public Boolean updateByQuery(BizMaterial entity, BizMaterialQuery query) { + return update(entity, query); + } + + @Override + public Boolean removeByQuery(BizMaterialQuery query) { + return remove(query); + } + + @Override + public BizMaterial getByQuery(BizMaterialQuery query) { + return get(query); + } + + @Override + public List listByQuery(BizMaterialQuery query) { + return list(query); + } + + @Override + public Map getIdMapByQuery(BizMaterialQuery query) { + return toMap(BizMaterial::getId, query); + } + + @Override + public Map> getIdGroupByQuery(BizMaterialQuery query) { + return toGroup(BizMaterial::getId, query); + } + + @Override + public Long countByQuery(BizMaterialQuery query) { + return count(query); + } + + @Override + public Boolean existsByQuery(BizMaterialQuery query) { + long count = count(query); + return count > 0; + } + // endregion + + // endregion 自动生成代码区,后续手动添加的代码要放在这个区域之外 +} diff --git a/src/main/java/com/metalloop/modules/bussiness/service/impl/BizPurchaseRequestServiceImpl.java b/src/main/java/com/metalloop/modules/bussiness/service/impl/BizPurchaseRequestServiceImpl.java new file mode 100644 index 0000000..1498d3e --- /dev/null +++ b/src/main/java/com/metalloop/modules/bussiness/service/impl/BizPurchaseRequestServiceImpl.java @@ -0,0 +1,169 @@ +package com.metalloop.modules.bussiness.service.impl; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.metalloop.common.core.lock.DistributedLock; +import com.metalloop.common.core.lock.LockCondition; +import com.metalloop.common.service.impl.SuperServiceImpl; +import com.metalloop.modules.bussiness.mapper.BizPurchaseRequestMapper; +import com.metalloop.modules.bussiness.model.po.BizPurchaseRequest; +import com.metalloop.modules.bussiness.model.query.BizPurchaseRequestQuery; +import com.metalloop.modules.bussiness.service.BizPurchaseRequestService; +import jakarta.annotation.Resource; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; +import java.util.Map; + +/** + * 业务-求购信息 Service 实现类 + * + * @author yy + * @since 2026-09-10 + */ +@SuppressWarnings("java:S6809") +@Service +public class BizPurchaseRequestServiceImpl extends SuperServiceImpl implements BizPurchaseRequestService { + + @Resource + private DistributedLock distributedLock; + + @Resource + BizPurchaseRequestMapper bizPurchaseRequestMapper; + + // region 自动生成代码区,后续手动添加的代码要放在这个区域之外 + + @Override + public BizPurchaseRequest create(BizPurchaseRequest bizPurchaseRequest) { + save(bizPurchaseRequest); + return bizPurchaseRequest; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean batchCreate(List bizPurchaseRequests) { + return saveBatch(bizPurchaseRequests); + } + + @Override + public List listAll() { + return list(); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean batchUpdateById(List bizPurchaseRequests) { + return updateBatchById(bizPurchaseRequests); + } + + @Override + public Boolean deleteById(Long id) { + return removeById(id); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean batchDelete(List ids) { + return removeByIds(ids); + } + + @SafeVarargs + @Override + public final Boolean createIdempotency(BizPurchaseRequest entity, LockCondition... conditions) { + return saveIdempotency(entity, distributedLock, conditions); + } + + @SafeVarargs + @Override + public final Boolean updateByIdIdempotency(BizPurchaseRequest entity, LockCondition... conditions) { + return updateByIdIdempotency(entity, distributedLock, conditions); + } + + @SafeVarargs + @Override + public final Boolean saveOrUpdateIdempotency(BizPurchaseRequest entity, LockCondition... conditions) { + return saveOrUpdateIdempotency(entity, distributedLock, conditions); + } + + @Override + public Page pageByQuery(long current, long size, BizPurchaseRequestQuery query) { + return page(Page.of(current, size), query); + } + + @Override + public Page pageAll(long current, long size) { + return page(Page.of(current, size)); + } + + @Override + public Map getIdMap() { + return toMap( e -> String.valueOf(e.getId()) ,list()); + } + + @Override + public Map getIdMapByIds(List ids) { + return toMap( e -> String.valueOf(e.getId()) ,listByIds(ids)); + } + + @Override + public Map> getIdGroup() { + return toGroup( e -> String.valueOf(e.getId()) ,list()); + } + + @Override + public Map> getIdGroupByIds(List ids) { + return toGroup( e -> String.valueOf(e.getId()) ,listByIds(ids)); + } + + @Override + public Long countAll() { + return count(); + } + + // region 此区域的方法主要用作示例,禁止滥用,因为Query对象大而全,调用者会很迷惑,必须封装为更具体的参数及签名的方法,如getByCodeAndType(String code, Integer type)。 + // 除非:确实需要3个及以上参数,方可合并为Query,如BizPurchaseRequestQuery + + @Override + public Boolean updateByQuery(BizPurchaseRequest entity, BizPurchaseRequestQuery query) { + return update(entity, query); + } + + @Override + public Boolean removeByQuery(BizPurchaseRequestQuery query) { + return remove(query); + } + + @Override + public BizPurchaseRequest getByQuery(BizPurchaseRequestQuery query) { + return get(query); + } + + @Override + public List listByQuery(BizPurchaseRequestQuery query) { + return list(query); + } + + @Override + public Map getIdMapByQuery(BizPurchaseRequestQuery query) { + return toMap(BizPurchaseRequest::getId, query); + } + + @Override + public Map> getIdGroupByQuery(BizPurchaseRequestQuery query) { + return toGroup(BizPurchaseRequest::getId, query); + } + + @Override + public Long countByQuery(BizPurchaseRequestQuery query) { + return count(query); + } + + @Override + public Boolean existsByQuery(BizPurchaseRequestQuery query) { + long count = count(query); + return count > 0; + } + // endregion + + // endregion 自动生成代码区,后续手动添加的代码要放在这个区域之外 +} diff --git a/src/main/java/com/metalloop/modules/bussiness/service/impl/BizSupplyInfoServiceImpl.java b/src/main/java/com/metalloop/modules/bussiness/service/impl/BizSupplyInfoServiceImpl.java new file mode 100644 index 0000000..d8d60f7 --- /dev/null +++ b/src/main/java/com/metalloop/modules/bussiness/service/impl/BizSupplyInfoServiceImpl.java @@ -0,0 +1,169 @@ +package com.metalloop.modules.bussiness.service.impl; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.metalloop.common.core.lock.DistributedLock; +import com.metalloop.common.core.lock.LockCondition; +import com.metalloop.common.service.impl.SuperServiceImpl; +import com.metalloop.modules.bussiness.mapper.BizSupplyInfoMapper; +import com.metalloop.modules.bussiness.model.po.BizSupplyInfo; +import com.metalloop.modules.bussiness.model.query.BizSupplyInfoQuery; +import com.metalloop.modules.bussiness.service.BizSupplyInfoService; +import jakarta.annotation.Resource; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; +import java.util.Map; + +/** + * 业务-发布信息 Service 实现类 + * + * @author yy + * @since 2026-09-10 + */ +@SuppressWarnings("java:S6809") +@Service +public class BizSupplyInfoServiceImpl extends SuperServiceImpl implements BizSupplyInfoService { + + @Resource + private DistributedLock distributedLock; + + @Resource + BizSupplyInfoMapper bizSupplyInfoMapper; + + // region 自动生成代码区,后续手动添加的代码要放在这个区域之外 + + @Override + public BizSupplyInfo create(BizSupplyInfo bizSupplyInfo) { + save(bizSupplyInfo); + return bizSupplyInfo; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean batchCreate(List bizSupplyInfos) { + return saveBatch(bizSupplyInfos); + } + + @Override + public List listAll() { + return list(); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean batchUpdateById(List bizSupplyInfos) { + return updateBatchById(bizSupplyInfos); + } + + @Override + public Boolean deleteById(Long id) { + return removeById(id); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean batchDelete(List ids) { + return removeByIds(ids); + } + + @SafeVarargs + @Override + public final Boolean createIdempotency(BizSupplyInfo entity, LockCondition... conditions) { + return saveIdempotency(entity, distributedLock, conditions); + } + + @SafeVarargs + @Override + public final Boolean updateByIdIdempotency(BizSupplyInfo entity, LockCondition... conditions) { + return updateByIdIdempotency(entity, distributedLock, conditions); + } + + @SafeVarargs + @Override + public final Boolean saveOrUpdateIdempotency(BizSupplyInfo entity, LockCondition... conditions) { + return saveOrUpdateIdempotency(entity, distributedLock, conditions); + } + + @Override + public Page pageByQuery(long current, long size, BizSupplyInfoQuery query) { + return page(Page.of(current, size), query); + } + + @Override + public Page pageAll(long current, long size) { + return page(Page.of(current, size)); + } + + @Override + public Map getIdMap() { + return toMap( e -> String.valueOf(e.getId()) ,list()); + } + + @Override + public Map getIdMapByIds(List ids) { + return toMap( e -> String.valueOf(e.getId()) ,listByIds(ids)); + } + + @Override + public Map> getIdGroup() { + return toGroup( e -> String.valueOf(e.getId()) ,list()); + } + + @Override + public Map> getIdGroupByIds(List ids) { + return toGroup( e -> String.valueOf(e.getId()) ,listByIds(ids)); + } + + @Override + public Long countAll() { + return count(); + } + + // region 此区域的方法主要用作示例,禁止滥用,因为Query对象大而全,调用者会很迷惑,必须封装为更具体的参数及签名的方法,如getByCodeAndType(String code, Integer type)。 + // 除非:确实需要3个及以上参数,方可合并为Query,如BizSupplyInfoQuery + + @Override + public Boolean updateByQuery(BizSupplyInfo entity, BizSupplyInfoQuery query) { + return update(entity, query); + } + + @Override + public Boolean removeByQuery(BizSupplyInfoQuery query) { + return remove(query); + } + + @Override + public BizSupplyInfo getByQuery(BizSupplyInfoQuery query) { + return get(query); + } + + @Override + public List listByQuery(BizSupplyInfoQuery query) { + return list(query); + } + + @Override + public Map getIdMapByQuery(BizSupplyInfoQuery query) { + return toMap(BizSupplyInfo::getId, query); + } + + @Override + public Map> getIdGroupByQuery(BizSupplyInfoQuery query) { + return toGroup(BizSupplyInfo::getId, query); + } + + @Override + public Long countByQuery(BizSupplyInfoQuery query) { + return count(query); + } + + @Override + public Boolean existsByQuery(BizSupplyInfoQuery query) { + long count = count(query); + return count > 0; + } + // endregion + + // endregion 自动生成代码区,后续手动添加的代码要放在这个区域之外 +} diff --git a/src/main/java/com/metalloop/modules/bussiness/service/impl/BizVarietyServiceImpl.java b/src/main/java/com/metalloop/modules/bussiness/service/impl/BizVarietyServiceImpl.java new file mode 100644 index 0000000..d2fb288 --- /dev/null +++ b/src/main/java/com/metalloop/modules/bussiness/service/impl/BizVarietyServiceImpl.java @@ -0,0 +1,169 @@ +package com.metalloop.modules.bussiness.service.impl; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.metalloop.common.core.lock.DistributedLock; +import com.metalloop.common.core.lock.LockCondition; +import com.metalloop.common.service.impl.SuperServiceImpl; +import com.metalloop.modules.bussiness.mapper.BizVarietyMapper; +import com.metalloop.modules.bussiness.model.po.BizVariety; +import com.metalloop.modules.bussiness.model.query.BizVarietyQuery; +import com.metalloop.modules.bussiness.service.BizVarietyService; +import jakarta.annotation.Resource; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; +import java.util.Map; + +/** + * 业务-产品品种 Service 实现类 + * + * @author yy + * @since 2026-09-10 + */ +@SuppressWarnings("java:S6809") +@Service +public class BizVarietyServiceImpl extends SuperServiceImpl implements BizVarietyService { + + @Resource + private DistributedLock distributedLock; + + @Resource + BizVarietyMapper bizVarietyMapper; + + // region 自动生成代码区,后续手动添加的代码要放在这个区域之外 + + @Override + public BizVariety create(BizVariety bizVariety) { + save(bizVariety); + return bizVariety; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean batchCreate(List bizVarietys) { + return saveBatch(bizVarietys); + } + + @Override + public List listAll() { + return list(); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean batchUpdateById(List bizVarietys) { + return updateBatchById(bizVarietys); + } + + @Override + public Boolean deleteById(Long id) { + return removeById(id); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean batchDelete(List ids) { + return removeByIds(ids); + } + + @SafeVarargs + @Override + public final Boolean createIdempotency(BizVariety entity, LockCondition... conditions) { + return saveIdempotency(entity, distributedLock, conditions); + } + + @SafeVarargs + @Override + public final Boolean updateByIdIdempotency(BizVariety entity, LockCondition... conditions) { + return updateByIdIdempotency(entity, distributedLock, conditions); + } + + @SafeVarargs + @Override + public final Boolean saveOrUpdateIdempotency(BizVariety entity, LockCondition... conditions) { + return saveOrUpdateIdempotency(entity, distributedLock, conditions); + } + + @Override + public Page pageByQuery(long current, long size, BizVarietyQuery query) { + return page(Page.of(current, size), query); + } + + @Override + public Page pageAll(long current, long size) { + return page(Page.of(current, size)); + } + + @Override + public Map getIdMap() { + return toMap( e -> String.valueOf(e.getId()) ,list()); + } + + @Override + public Map getIdMapByIds(List ids) { + return toMap( e -> String.valueOf(e.getId()) ,listByIds(ids)); + } + + @Override + public Map> getIdGroup() { + return toGroup( e -> String.valueOf(e.getId()) ,list()); + } + + @Override + public Map> getIdGroupByIds(List ids) { + return toGroup( e -> String.valueOf(e.getId()) ,listByIds(ids)); + } + + @Override + public Long countAll() { + return count(); + } + + // region 此区域的方法主要用作示例,禁止滥用,因为Query对象大而全,调用者会很迷惑,必须封装为更具体的参数及签名的方法,如getByCodeAndType(String code, Integer type)。 + // 除非:确实需要3个及以上参数,方可合并为Query,如BizVarietyQuery + + @Override + public Boolean updateByQuery(BizVariety entity, BizVarietyQuery query) { + return update(entity, query); + } + + @Override + public Boolean removeByQuery(BizVarietyQuery query) { + return remove(query); + } + + @Override + public BizVariety getByQuery(BizVarietyQuery query) { + return get(query); + } + + @Override + public List listByQuery(BizVarietyQuery query) { + return list(query); + } + + @Override + public Map getIdMapByQuery(BizVarietyQuery query) { + return toMap(BizVariety::getId, query); + } + + @Override + public Map> getIdGroupByQuery(BizVarietyQuery query) { + return toGroup(BizVariety::getId, query); + } + + @Override + public Long countByQuery(BizVarietyQuery query) { + return count(query); + } + + @Override + public Boolean existsByQuery(BizVarietyQuery query) { + long count = count(query); + return count > 0; + } + // endregion + + // endregion 自动生成代码区,后续手动添加的代码要放在这个区域之外 +} diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml new file mode 100644 index 0000000..d90bcb5 --- /dev/null +++ b/src/main/resources/application.yml @@ -0,0 +1,52 @@ +spring: + application: + name: metaloop + datasource: + url: jdbc:mysql://localhost:3306/metalloop?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&useSSL=false&allowPublicKeyRetrieval=true + username: root + password: 123456 + driver-class-name: com.mysql.cj.jdbc.Driver + hikari: + maximum-pool-size: 20 + minimum-idle: 5 + connection-timeout: 30000 + + jackson: + date-format: yyyy-MM-dd HH:mm:ss + time-zone: Asia/Shanghai + serialization: + write-dates-as-timestamps: false + data: + redis: + host: localhost + port: 6379 + database: 0 + password: + timeout: 5000ms + +server: + port: 8080 + +# API文档 +springdoc: + api-docs: + enabled: true + path: /v3/api-docs + swagger-ui: + path: /swagger-ui.html + tags-sorter: alpha + operations-sorter: method + show-actuator: true + packages-to-scan: com.metalloop.modules + paths-to-match: /api/** + +# Sa-Token 配置 +sa-token: + token-name: metalloop-token + timeout: 86400 + active-timeout: -1 + is-concurrent: true + is-share: false + token-style: uuid + is-log: false + jwt-secret-key: metalloop-secret-key \ No newline at end of file diff --git a/src/main/resources/mapper/BizEnterpriseProductMapper.xml b/src/main/resources/mapper/BizEnterpriseProductMapper.xml new file mode 100644 index 0000000..4c210bf --- /dev/null +++ b/src/main/resources/mapper/BizEnterpriseProductMapper.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + id, + enterprise_id, + variety_id, + material_id, + unit_price, + weight, + status, + remark, + create_time, + update_time + + diff --git a/src/main/resources/mapper/BizMaterialMapper.xml b/src/main/resources/mapper/BizMaterialMapper.xml new file mode 100644 index 0000000..f77c2b4 --- /dev/null +++ b/src/main/resources/mapper/BizMaterialMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + id, + material_name, + material_code, + description, + create_time, + update_time + + diff --git a/src/main/resources/mapper/BizPurchaseRequestMapper.xml b/src/main/resources/mapper/BizPurchaseRequestMapper.xml new file mode 100644 index 0000000..fc0ba3d --- /dev/null +++ b/src/main/resources/mapper/BizPurchaseRequestMapper.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, + create_user_id, + enterprise_id, + element_type, + product_category, + material, + title, + description, + quantity, + unit_price, + contact_person, + contact_phone, + delivery_date, + delivery_location, + image_url, + audit_status, + publish_time, + expire_time, + account_period_mode, + deposit_ratio, + final_payment_deadline, + status, + reject_reason, + update_user_id, + create_time, + update_time + + diff --git a/src/main/resources/mapper/BizSupplyInfoMapper.xml b/src/main/resources/mapper/BizSupplyInfoMapper.xml new file mode 100644 index 0000000..42b379a --- /dev/null +++ b/src/main/resources/mapper/BizSupplyInfoMapper.xml @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, + create_user_id, + enterprise_id, + element_type, + product_category, + material, + title, + description, + quantity, + unit_price, + contact_person, + contact_phone, + delivery_location, + image_url, + audit_status, + publish_time, + expire_time, + account_period_mode, + deposit_ratio, + final_payment_deadline, + status, + reject_reason, + update_user_id, + create_time, + update_time + + diff --git a/src/main/resources/mapper/BizVarietyMapper.xml b/src/main/resources/mapper/BizVarietyMapper.xml new file mode 100644 index 0000000..5653e17 --- /dev/null +++ b/src/main/resources/mapper/BizVarietyMapper.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + id, + variety_name, + variety_grade, + parent_id, + variety_material, + description, + sort, + status, + create_time, + update_time + + diff --git a/src/main/resources/mapper/SysEnterpriseImageMapper.xml b/src/main/resources/mapper/SysEnterpriseImageMapper.xml new file mode 100644 index 0000000..f1b91c3 --- /dev/null +++ b/src/main/resources/mapper/SysEnterpriseImageMapper.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + id, + enterprise_id, + image_type, + image_url, + created_at + + diff --git a/src/main/resources/mapper/SysEnterpriseMapper.xml b/src/main/resources/mapper/SysEnterpriseMapper.xml new file mode 100644 index 0000000..4c1b950 --- /dev/null +++ b/src/main/resources/mapper/SysEnterpriseMapper.xml @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, + enterprise_name, + enterprise_address, + warehouse_address, + contact_person, + legal_person, + phone1, + phone2, + phone3, + business_model, + profile_intro, + title_img_url, + intro_img_url, + business_license_url, + legal_id_front_url, + legal_id_back_url, + ocr_credit_code_id, + id_card_number, + credit_limit, + audit_status, + submit_time, + audit_time, + reject_reason, + created_at, + updated_at + + diff --git a/src/main/resources/mapper/SysPermissionMapper.xml b/src/main/resources/mapper/SysPermissionMapper.xml new file mode 100644 index 0000000..a6b6ef4 --- /dev/null +++ b/src/main/resources/mapper/SysPermissionMapper.xml @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, + name, + code, + type, + sort, + parent_id, + icon, + api_path, + route_path, + component, + component_name, + description, + enabled, + create_user, + update_user, + create_time, + update_time, + data_status + + diff --git a/src/main/resources/mapper/SysRoleMapper.xml b/src/main/resources/mapper/SysRoleMapper.xml new file mode 100644 index 0000000..74f5de4 --- /dev/null +++ b/src/main/resources/mapper/SysRoleMapper.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + id, + name, + code, + enabled, + description, + create_user, + create_org, + create_time, + update_time, + update_user, + data_status + + diff --git a/src/main/resources/mapper/SysRolePermissionMapper.xml b/src/main/resources/mapper/SysRolePermissionMapper.xml new file mode 100644 index 0000000..920fde9 --- /dev/null +++ b/src/main/resources/mapper/SysRolePermissionMapper.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + id, + role_id, + permission_id + + diff --git a/src/main/resources/mapper/SysUserMapper.xml b/src/main/resources/mapper/SysUserMapper.xml new file mode 100644 index 0000000..be3871a --- /dev/null +++ b/src/main/resources/mapper/SysUserMapper.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + id, + username, + password, + auth_status, + enterprise_id, + phone, + email, + user_status, + reg_time + + diff --git a/src/main/resources/mapper/SysUserRoleMapper.xml b/src/main/resources/mapper/SysUserRoleMapper.xml new file mode 100644 index 0000000..d95b7fa --- /dev/null +++ b/src/main/resources/mapper/SysUserRoleMapper.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + user_id, + role_id, + created_at, + id + + diff --git a/target/classes/Main.class b/target/classes/Main.class new file mode 100644 index 0000000000000000000000000000000000000000..0fd2817eace94cc20e5c183d4160a3f469ae7349 GIT binary patch literal 1159 zcmaJ=T~8B16g|_gZR7`okQcBdG8_DA^c zgU|Ya35osye~Z7s81>F>qf2PqWM}ryoOABEb7#N(I{6A<8OvG35Vw%9kwl7N;Ohfu0Vr13@|Bvoa@ldf)R zPw-APjbVoTs&E`t1Lw7#+YRA6=vLilJ5t#RHe5EZx28 z%g9n_yjmV;Ax~u&Y)s$+!$gO-MP0cquD7M$r!QY~SNmkYwAQCblNg&9ZA{@3gB7@O zT!W3|?%OGES(s)>taC|-L|yF)hFn9s;(4#LBfL$%rcHfH4d;HE*@odAFZrWL@ZewY$MR-Vs`OM9el- z&ufVlX`E$D@+H#;YVtFsw68th4M~13gfCXfQVY77 z4;YfNxLjlm_L}PoukLW)7ruqZ40C778|2yowQKtSP}A6;M9kna{d?w#fpQ~7;}wc3 zG&7o$i=V+h2HQm%%{CAx8eoS2T*WntGML32i5T)5LKxA7Pq6Ys@h^xSBe$KXO{L#s zoYtmJFb*7J@-1T@et$ReaTIARkORQN5Xp^Ef+EfH7!J}ENHRx#p2tFvcmXAp3B5>f q2C<*Wu^%LGox&ueJ)?Pp#u#p5iRLu1OjY;skfJPoJ;D>zF!=}ilOKHm literal 0 HcmV?d00001 diff --git a/target/classes/application.yml b/target/classes/application.yml new file mode 100644 index 0000000..d90bcb5 --- /dev/null +++ b/target/classes/application.yml @@ -0,0 +1,52 @@ +spring: + application: + name: metaloop + datasource: + url: jdbc:mysql://localhost:3306/metalloop?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&useSSL=false&allowPublicKeyRetrieval=true + username: root + password: 123456 + driver-class-name: com.mysql.cj.jdbc.Driver + hikari: + maximum-pool-size: 20 + minimum-idle: 5 + connection-timeout: 30000 + + jackson: + date-format: yyyy-MM-dd HH:mm:ss + time-zone: Asia/Shanghai + serialization: + write-dates-as-timestamps: false + data: + redis: + host: localhost + port: 6379 + database: 0 + password: + timeout: 5000ms + +server: + port: 8080 + +# API文档 +springdoc: + api-docs: + enabled: true + path: /v3/api-docs + swagger-ui: + path: /swagger-ui.html + tags-sorter: alpha + operations-sorter: method + show-actuator: true + packages-to-scan: com.metalloop.modules + paths-to-match: /api/** + +# Sa-Token 配置 +sa-token: + token-name: metalloop-token + timeout: 86400 + active-timeout: -1 + is-concurrent: true + is-share: false + token-style: uuid + is-log: false + jwt-secret-key: metalloop-secret-key \ No newline at end of file diff --git a/target/classes/com/metalloop/Application.class b/target/classes/com/metalloop/Application.class new file mode 100644 index 0000000000000000000000000000000000000000..63da495b27278d5d2206cc9ce89a234734ed1bd9 GIT binary patch literal 861 zcmZ`&O>fgc5Ph4EIt`%>DHKY9id&ikd*hN)2_g`O6c9n-z-i)aoh|lmv|a;$ixY?g zKY$;Fm^D>n31ewzwDa+H=FRxm?;k$_Ji$>H4KyRPdT3)ypnpN1NTy^G`Fe4oVlS|D zqK)>a0?py^JVHm{Ahwyzl&3Vcb}gT-*Qt)lYiqjb;#!1W57)6HFtRR@`PyldoIA?Y zXX`%7g|%MJN@FFH;ay<_7Q^YLgh@(yKK@X#%zOYFA5ZI$V{5$n;^oAebDb297OAQ{ z!RFu|3$!M7sRVYX+Nf7WwovX}h!q%2ZA|H$oDTO(W6Q5}E^s*gZ`%PfBhBUS59_L( zv!7hTAbT}#X8lb0m0iA}K$2IE1G_U@xLCc=p{#zTi${STp26F~c%7-a&UI+h80*Us zaPDa>J09^htP)&h7(CZ{;eS<=;e^0_Iw+Bnb1P@*zr0@WwA zPx01U9l zw{6_SEd~k6k4rG1Gl)jtvHgCNAASaKOoV;~ql10iX8RpJZ5}bJ1`bMj7l*8O(8N8~ J_xU^k{s5FE>rVgx literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/common/auth/Authentication$Builder.class b/target/classes/com/metalloop/common/auth/Authentication$Builder.class new file mode 100644 index 0000000000000000000000000000000000000000..ccdbe83a8cf8c39c1a0f9b84c488f360cbd1c8ec GIT binary patch literal 1656 zcmb7E*>2NN5Ir|(>LxLvq!hX*zZ9$0?{ zBq#zTK7fxx%(!loq9lSB&vNgaGc&$3zkYxJ3E(o;5{MwGpi4yz-2%N2jmL&=8Fp2_ zQ+g=NzCic9X`B9nKs1vrCeeeqf`p1BRDqeYQ`2kGH!RC>Hg&RUj;$MYe?zZ((yh>m zX?gm6(wDb&fmBucccoi1JQ^yG)W*T^^1+rZ8D81#^e!wi}XL2aWZxu&Bkj&Xbs$L~1DRZOrmX_U*-^X@s1q^;n% zK;~b|PGAyI{$x~Sp;4#3zdAjVY2ATrk;A4`oWg190fp`KU?7ZWE^Yhvw2B$NoeXbt z9gH%k;tczle6djq!LFNC+wkkI6j*DS$9%5PzShQ{)EloSzmOL=m+273EpG7)^Vy<6 z*OF7AWcC+KTi&kMO47Y&lq~Y33r^XviiT^l9Xh-G4U=B$YzMN|&yZ3~avHl6FxLU1 zUA{D$x1_(}RPGusb=sFM<+9T1?{olfn_sNN6C*H1Prm&x*c(n|rHnmuC!qaLbYk79 zyJfjza?AVnf}iGvKofFXdj3tvqcx`4t5b0B*e}-W^$2eZ#Qg9Z)A&+^o2$K8?r{{zDvq>lgq literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/common/auth/Authentication.class b/target/classes/com/metalloop/common/auth/Authentication.class new file mode 100644 index 0000000000000000000000000000000000000000..69f2fe069d07d86431ddc37e024e6d22af4e26d9 GIT binary patch literal 2087 zcmbVNYflqV5Iwgols>RL3#j-+Eubul;G;-_s0pSZ35YS8=+fS_i`!k?-D><-nrKWk z@dx;$jOXqyEp4`h@S$_>ot-%|b7t=C-+#aU0CO`#8|B+^-AkQFGD?YdT%o^G19eW3AFw=GR?cr|U6LRy|t z);+_v1TqKGsT;1#gDa3P`GFdqVQOo(X)+Q&6czlLEOHoN+=eTi^@_kyVCyHf?Ky^3 z_3ehT7*=+D%Ffd3QaO)ikypx$UM@@5-LXGND~WM|`IBZk^|)b}73righO>&5a{^0+ zQg?S1zCsEN)74&b|0LKKr*{QX+eX#Wy@n$No=29vJbMgui!yDi$zE}#D3DmQE5yu| z3`=e{>U+}J(f3ShhDvr>H+OZ%Q0GvY@M;E0pE)K}d%GCnOjUZVp!6OuOh;Bg+ftWL zrz|eT(27ab{EMpPlAkC<=dPNRZ>Q|b!69t}8`7)Ul`Y+2 z6i+%NVIvynRE7Ej!bA^C9SyOMR;p|=p-osTPi?j4J{w-`$lwW7Pc^P59*)Bs!p3JB zt$`O!7!WB^){p$bM_#+ZduYIROj7bip@e!d{FRRc*EDVT>``9eN#iQG_RRc*_{L2P7b(?e zaCeDPfzp7Xu5cB&iYZ#PJAX&=D?c7}UXE}Ma=S*5>$pML3DVyQ@-za3FL0#uV5jqD zr1Ny7^GK)jt4QY=%p&fmy~Sb`@x3#%Kaf<+#eL?~e+%%2e7*G%@_|*zo?)47_L?I*(b=|-K59U0 j3X52xaY*bUw{hH~jNv{Wa7_?v3=g?emtu@psfg5nbq>AJ literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/common/auth/config/AuthServerConfiguration.class b/target/classes/com/metalloop/common/auth/config/AuthServerConfiguration.class new file mode 100644 index 0000000000000000000000000000000000000000..c5ed00edcc8617e2f7cb918c65e232a675391fd6 GIT binary patch literal 7702 zcmb_h349dQ8UMdzlS!6IgoU8-0ud#LuwDoxfP|PxG#ru;8}OQJhGfWQW}TfS#KKd!GQXM9d7L0EG$yDvD4nFnN=K(1AH472L)YxTd)vrO_l|78|G=Hs9=L1w$ktsiZQXX@@dtyL zjw2NurJ@o?3(TcEW0o49}CsV>{ z3`r0HrB{ou(yt(!)Z2Qwqe?|JY6JqNJ3TFlJ44&`3QiH2|2FiY+Y06hEIo{^O=fq@ zGE66))TwRa)4oQ^YSNGbgaG*-2~GwhVTg82edU3t03Zn`3($D}DKSU{Dh z7g}h|JzBKQ(HuPmRDwkUNA17kp8dOS_iVwE}GzuZf{3; z?CyF=V1yy}%JkxF$1VbxVaTqrh^- zzqlSr*oHG0_BakFH>L>q7+k$vq~c;+A~215>CkOs<6tAPrmBoq_3Hl%WRM$(l8++c~FpC1G=SK>q6`uM?ItcF^^rmg}db0na>R-wr#9+ z=h-(#wJ9^Le`ltVhi3AKW0gLEP5G2q-BE%b)-nTnq*rr-FtABMpNc5@1!iXlPQJ0eIy+i|D+G$7GC`E$O1xXadsMs^S21Pha@GO8E8Jz6-C@mSrQ%jh z;kD#Jk2@=Mr`PIcEwE;FTf4x5oEm-0{meV>WAsR$v@yy!qhJdoZnjLbk`Z6@XxP>- zcXN?$I!450&gV_RwJh2;X?>dQXkliT%~9P6_c~52yn+vzmN?-9%Yb^FitBL$MQ-ao zEH8CCSy>2d$&|FOsEj;3cE;Dn+my$K4BW0P{QQ2CiVsM&`U#MJI7+YEXdTom7ZiMu z88?sgSP>;t`P#U)Ceal&B1|%wDg74QDg)MsSrd#Cu=1oRuOhik#qE+~8M{+7nsq1A z>)PQRUagW^k>D%qm34Fu)1gHZ ztgTp_x5y0hn2I3`GswuxmV46E^QkTew=JIH_Ndq^6&FfNAg#792?W#gQeaQ0crt03 zBr6Lz!`x`4w|tp56mN@MYvEcDPvaQ{Usdrnd|hD4c%g^juIKh|j>y{`<4r31Xt5Y0 znncEU7So(w2E~i2GQG$5%-mIo3``TkK6`n>h_ayJjpSsKzCL}<&{C!@<5Ah?~fuEjNdg>Es zKOE#al8}eTuho34^q&H}pyDU^DIJBD=f+XSi7dzWf@=_0*F7F<+yis0^}XG6-ai*^J}o|ON>l+qwg_6yo_6^{Whb=)Erj+ z0xh0i-ByikH!aRnJ9_Pf9Q`H6jHUGgm1`3$Px|!^BW^GSHKYnDy8ObN+UjC*i-$LA z5jJoJGb^u#gkudDw%$#&0hyR+02|x!aFleb715#{nr+B;e=^|o8l+eE zcFy4zR+6I3D*}QvDl+UorDuXn)yFnusN=(-nk>9BS~^5r>Q<~?>3ni-bfb!GZYr0$ zPZu=;XN}sKRZ?aYMU->KK4O|~=PZ-htePOk++`Lq2R-wV-A7qNk8i^H%#3XXc9|l5 z3v_e;)pwTBI1zt2^m_<>A8d{OxRIrQ|Tb!r&Y4r@u@%mrG4%dj~1|5~~

((6UVXTZYW|F})SGarYOHxkWs@VXVn^Pdtl-Z!o3?0iE zQ+WLIbHaC77J(UDQpPB|=G}(uYO*WukF@A&bEV;4BzlzjN1e;t~9-)(k_`?1u6f${umC{e#aC0(_pt=N#^-;%AjPctt{cd+<;Ei*Ew| zCcXlRuV6NUP&jpB&7&v_P2G(OIoN|^1X^qN-~@r~qLhO<0#BiKd<4rdK=obE+52!VhH)OA;pz)mg%`1!YPvuuYzxmoyO_n6u2kC!s-}+0 z`ww2FO6SpR{)_*Sb}OF8Yj~Y=1H7QVfkRaGGuXg{%!@xcc~uk$X?#?xr*a|9ViAj*KKUoEF_*7Fy+7DACLyjdtX zMDmI&6-xpCQ$klNf&zV7%J0Q8F^xMbia3TSRd3a%b%@{xlj{pNnj| zD~HmQluG572wIKgyh!i`uBsWbBn5FKmyX&15fPOr6i0KlKpc~TIF=B{B_U|J$8$YM MuAaryVn%W4n+?K_?*IS* literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/common/auth/config/AuthServerConfigurer.class b/target/classes/com/metalloop/common/auth/config/AuthServerConfigurer.class new file mode 100644 index 0000000000000000000000000000000000000000..acfe9ef8b3ca3c43ee09764d222baa28f6f628c1 GIT binary patch literal 335 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 g{HIiWOSb%7 literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/common/auth/config/EnableAuthServer.class b/target/classes/com/metalloop/common/auth/config/EnableAuthServer.class new file mode 100644 index 0000000000000000000000000000000000000000..336e7e4eacdc5b700727f1e61052c32fc154dcc3 GIT binary patch literal 693 zcmah{O-}+b5S{YjDt_Sy2MR(s8!q323hRsSf7D^?k`ZG#hg8mCt88FDx tDbjxf$bmP$mtlq8W2%&>wu-O@>#&i9kH8Q%p$uC;Sw4X60Cob{{RZEP-Twdp literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/common/auth/encrypt/KeyProperties$KeyStore.class b/target/classes/com/metalloop/common/auth/encrypt/KeyProperties$KeyStore.class new file mode 100644 index 0000000000000000000000000000000000000000..37ccd6b08d5cbfdec1de1ee6cafd1729497f7f84 GIT binary patch literal 1761 zcmbVL-A@xi5T7k=uPw)i1uBT&BDO_2KM_Gm42kihAhCq^rL5)3^|sktAo$>eCO&AQ ze}=D`NKAb2)x%?A+|l{N^_^zy1B^$4>xw05chgL6-$_8xoLY&|l+Q z-0`?yb)K)*L`5@5-gkXh&oSuA7gkb`!jIZUkcJF&TVUJJ1HBBUE3)p?h31|oWy3+Q zE`5h@>UBr>6}8jQ&NH#Iq+~-V?TTOwy|R`{Fo^4&2AXVXzjRqE*RRe}jeZ+WP=N&Z zTyClk*f0n~3{sw~aP3N;!FWlksuMIQ>!sp#u`SgGl2F2NrSn1ra#K}=!8>WgFyW;d zJP0ssjf$MIVU#YDfv6~fJ;&$e8gl9@xxQH3tgi~S%vU|b5{r5(T)E`8F5`OL4H(Rn z{&xto$fqjwLu!%1V7_p478ntP5kvW-0fiOZ-h$BUa&3vz475-P){VHOa8P-KKGvu( z5zFl-7V^i-BNkM0sWn{&7JAEO!-TkhpT_%gYur6$%_|!VykQ1v!SzEzY^s4l8uRxu zEc|YwX3A!{k6g2!Ln50bMd9EUMW7$cKwEH^0crDJl*+(<;`>6)d)Sh|iKh0X3l~s2 zF?>b|JW-PP6(eyOi=s6ab!9BR613fbN`@q!r_sBI@r-VZ-+>jg)-I&Kn&2~dHlY_G z4plgdzTFIkb8sF#hQ%+oU>vjrlPG?JzAyL@0|KBb0JQ_ji7@#RjA0aUm_tiFB#RTf z(AQqxN4C-+*a4JU5Dc8>FRV1g0$mDc;^6SXttI$7|cz1x|Kx>JU7-K=KciuAVx)Duxq@C`2r2C-*T~d2Uchu0m p84Y_x=^qjHQwLajJRxk4Y3&xCF}MwPjGcmMv>6P_z!bi#^j}=#F-QOa literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/common/auth/encrypt/KeyProperties.class b/target/classes/com/metalloop/common/auth/encrypt/KeyProperties.class new file mode 100644 index 0000000000000000000000000000000000000000..086dff36edad700ea1987ae544dd3fbb080fa110 GIT binary patch literal 1797 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 literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/common/auth/handler/DefaultLoginSuccessHandler.class b/target/classes/com/metalloop/common/auth/handler/DefaultLoginSuccessHandler.class new file mode 100644 index 0000000000000000000000000000000000000000..6e86e927cb12b5311c435b39515a224a1fe4353b GIT binary patch literal 1242 zcmb7EYi|-!5IvVim&e-D7O*~Qsage!U0<~()FzF_XhPLUCGq2Bxx%))dz*duyYve+ zn)n0!QO3C}gd)_(mpi$0XU>^9JF`E2e*F&M2_9z($bJ(*fphNI3nP-E#-;f$WCYr-{4`;Qx{G~oA4e<=J&^27pF^>g?@+2VL9O*`QlOPQ9T@mb?rttkkc`RIpe7VvX7u^gz z%k9<`$)b)WEK`R6TSlQgolt41k_tMCs-7&7yz_ACTvhSu zVf@REBEF_$O+}}N(aO7y>l$w8xQPvh^_lHP%8^W=O{&M_F~iQ;N~7;luQdLeUDt4X z>MNZUwa49#Ej;6y_`r#+A-k5_3)TaJ1lu<{?!CP#_{9gojYV;UO8 zJ04z!>c0ar6eqJsqd(o`|E&%+nL7|cPj=pLk47^P9toFe%Fr{#b4w|_cD_Vgs!bZi zTeR`Ca>irJF&Pkxf=l!9EY3H|bQ*pf#=0sYe00gDtu-O1VoQD%n@R5waWK zpuImu`k=PiN2ZUQviUwPDtoz))!G-7K2cx{3cN`Cz#>w#syQrU1$mTE7?71Bz#$ny c;~wr4X$q@&fQN*zO}R-%ZdJ=8I%C-R1*kezMF0Q* literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/common/auth/handler/DefaultLogoutSuccessHandler.class b/target/classes/com/metalloop/common/auth/handler/DefaultLogoutSuccessHandler.class new file mode 100644 index 0000000000000000000000000000000000000000..39c724cfef0d5f40bdbf0813c1a1dd304633c265 GIT binary patch literal 769 zcma)4%T5A85Ul3m3Zfz^z7si^00-x0Oc0FG7!T_sV!RK_2#dQrW|{T7^rZ3N2l!FO zULYYcM7(sTrmJdtdiv}8;}bv~J6R-F^CPf2GZ>x@0HEV literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/common/auth/handler/DefaultPasswordCheckFailureHandler.class b/target/classes/com/metalloop/common/auth/handler/DefaultPasswordCheckFailureHandler.class new file mode 100644 index 0000000000000000000000000000000000000000..e40200ee333ab5e01516887d6a3156e5ac9abd4e GIT binary patch literal 977 zcmbVK%T8M{5Iw#Lq=fgQ;kAJkfdyW4nL+a%zoFo z_NNS$=3&2vFAQyIhkU5KFvi*^PS()oTm+x-OysFij0c7#Q-bb*&VpFPx6{#98&3E*Lu9@~q|c zw;1MZKIw_!yxDypUC%q6-?u)=6AI;0nxHlXza_mr)?0^thD1Nb20qX+%tzQHl;PVH z{Pe>Y%4asc7EaI?Dn|pMK6*h)Rgm70@vDAHX+!R5h>txle4vMV&ju$|N5}CVl+Wil z){lMEXu&82ZCjOYS~8OJWO2F~-7`mj!TykvV1Zhu}V=9{DV#< z`u+#5j(~gP#|bb(*RVb!X4t@2B54qKE+IF_5d${Mxf|1RZ3qOeQ?q++f*jHeLB)@bvkV1 zP!!l1?@t*8GK>)@`%$9K`@NPj*RmDUNyXQJjGNL#Tz?;CY#2QVH2m>*{Woi!))5#b ztr|@uuu%0!JG!zaN;>u0jX?fB)Puozpp=48XUc}UeJPEk)hR>6m4i?PcfaAAf56i) zzOMNAvsx;ybl(K(B;s|f{r5lHJQX&OqbCDehxQsq$=l(So}5HIxMphS_| zES;iQ8VWFtGF9|bm?agPcd2qHJMJ^bU(Wo%xj5{8J6Tb|9C_wRou!pgqTPaJj60;t fWl#z?HNdS8yD1!lmk8_(zy-bqbinXs#$n|P8BME_ literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/common/auth/handler/LoginSuccessHandler.class b/target/classes/com/metalloop/common/auth/handler/LoginSuccessHandler.class new file mode 100644 index 0000000000000000000000000000000000000000..c64ef574f309ea456bd630e3351d16bc1446129e GIT binary patch literal 285 zcmZ{fO=`nH3`RfY&rJ#?%N`-wbXHk~2D&L-xFnDhC}R;jj7P;D_i$bG06kQxOeuko zZUmo@o}RwGKRy9G;x@y8u<}~FS`vq#`sOUv8Xb43bS1|kNaJ!nR&n2XFKzqs+siN_ z%uoEzE^s`$?cpRo5vKY#NZ2g$|JhG=Kw_#qr%K~`nP0Nj#($MmYO&*nO;DPaaMz2S r_XxASc8!xp5)GpVPwrSsbFHQ6G)yyy; z+@JZ%E^s`#m%~|nB1|-X4-&TX{D1h)E=WwJ=TvH3FY@24weg=N6?%N-n$1w^hH%%J s{p=B@du?kkk7W?T!(Xb)jyxg|`t~V!Z literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/common/auth/handler/PasswordCheckFailureHandler.class b/target/classes/com/metalloop/common/auth/handler/PasswordCheckFailureHandler.class new file mode 100644 index 0000000000000000000000000000000000000000..f7848a0d8fdc4217787dec0431da85007ba448c0 GIT binary patch literal 400 zcmaJ-%T5A85bRl$6;R`evq!x+A3!)54dJi`l8xNk*$z7}J45E7|K`CD@S}`9LgEEI z^`oj%)&2SP{s90}xGbR%FjcOT9Yr+8xt-*xb5>%Ct!&XYhP+&22yf0e4=t(f47Ev~ z=6kG!69HEnd_`%{uI1uoLn;awIC~%pnBP>tggSa{*OTgR*A&P%oJX4=pSgeB_mkTd zJ3UcsU9&`w9GQF&Q0Se2Q5GGDKjw8(iUPx9l|$bv<&uq+Q`*`=@x6;M`-djskn>9Po{Tvm4hSy&WMne7g{!?rV}GhIXC z7h_`hg3-i8V`AbbQA45<1wx|HFPQi{K>QIRKBqI?&bAduOgb~~dCzm6^Ip&CAOGC= z1;8lIrVvA1gJM8MLZJJsxoGB!rZbm2G;`J}_yUO?wqyG{1>ysP(@E$^YDgLAfFZD> z;FfYF%QuTf*DdEbD!ES1torl0k~?b^bGs>8j&B!C-*%lzGVLyxk67obmPcy6>RA=X zELj5SiN?-Te#Lg?M&w>A40Oqj^s?!B@3@s&sa$CwEtLtkY&qjK)oKGhQk7b?D)yQ4 zW86GNT=!>FhmMHH!j01CgBqA4djHNbouX>#;$gW6tuAEg80YU@)>EG)+eB zF#{VVcY@xSMNcw3Zs3VJ!{N|iso!MaNvThg`B2SfsU0vdD7Br`PDjj+Vc5WCY@yln zrZ+ErsRe&L&6MQ~JcXwP)|AWzYs_^R*yFZOkmLEL<9h<9q7H`kwtDa|nl_FLWR6ss z&yqE5d-hDx+U+>5UrR2xmJ1flif`r?&7wV9Q?n>&TE(Psmg7*V`13aH-Z}Aq>X^=~3r!t&7Tbg+JyCQ^Gwwoe zzvWmJ)3;{1q{E9=*|Mq(lQuZbew?)Yd3W}(Sz(v>R)xmOh4tcMNpTdE6bp%RqmTrI zyS%T$Y8Oylc4dVNr2E-M6RxP~BZ>e}?>&JK&`@;L7=k_&FoN~khTLZs ze7AC5;In8ehQNUIfa%N@EiXIax(n6v$bGwU*+SU`ZQv&(4D~}Tq6#U-cur5*zBQtw zATV*iU<}l&VpMG2SP!_AgMdq^5%5tl$mEYZtnRTQ&ppf2a7JKLOO)Cd-ZaA1K7Io$o|V*@--5BLH9oJ2)B*XLs@|nJS#QUxd(W+*mO%Eh`3A+%l1v^hdSrCb# z;h&(jk9Kc>2%{}CAxlSKH`l2=QPJI$f<5i&J0F%_R@)MNR}1}Ed;0E&rI!V|M4xV< zf4M#Vs)wbQHN8aN(?ZXGJwfcnyNqiGV|ZnF=qsqo<>B9;e-1T%dH7f8lbeUGqPI4r z@W{cxbqvK)A`R3}%k7yB5B9(;lQ?9>>t z_z(xEi(?2EFiuI~%mQAaq+${lUZs>kk?#pU8Y)c2Bqbdm^YA)IDTz<94u>eEaF}+y zfG$n{8!I&EchRdM#-A?kVr?KM|3j=-@7|^aDe^CG*c{twd`uR(%#8FodVmBcQP3Oe zlFusrkv@mLvA>C3$bY7!;W;Nh;8!DQxqD=XGFnUW`tFf=rdaPDz65Q{RScb$`o6p( zCo)PnqsznxQ`x*)n_|vui}Z|IpX$#iYEy}&DOLhkt#6;a1A#4}BXN}Q8jjErmFbzH z6l1v0;3%Do^I!TTj!{yullR9oB^7UA4USVv)ROWo^m|k&8gwC;2ncbH3mfB@RP;ct z1L_!MxhjMuBCrOsSsQ}2<=_Us%>3}!h>QL-=x8<~FrId0BV literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/common/auth/model/AuthenticationRequest.class b/target/classes/com/metalloop/common/auth/model/AuthenticationRequest.class new file mode 100644 index 0000000000000000000000000000000000000000..5a5891b9b6ea5b2cf0f07f1bc350fc223239efd6 GIT binary patch literal 3155 zcmbVOU2has7=F&~%9}*!xLHR^8XK2Q*ZSbr2#;u_d8>{#Y$G;r*r#rk zjDkR0cZ4>$Nv`Lz1n;rhty`5j@^!D^zm6C25*=JHyanlXSEm%%^AzHW((#C+jjhNXn2s^uxPlxky$nh)?C@l zkkS#?u;@x=!tqZsH5PLM$)f3b#yl_5_W1K}{`~abqt8|z-e39a{MAS6Hz|QQEn}8#PLztXrhCDln=(tByiu4jTuaVFqv9`E^!xDG z|H?w%VrS^%sJ&cAkJMPfDb6~JnKPzsx`uDgaZ8gIO`COT7RIJ$hGjHv`U}q7q~S8h zebc3va$_Z1m?NB3b3{Nm>nkBlSpn5y0lC~D@7h%@n@weV#1H@~)gllAs)m*_L$z|~ zWxx?NHBb9SesSDb3ME!2r$)z5(Z5lafNOfC0;{(na%@9a^@OIbD3#_rfg-HeX{Y4o z&C`|)WqaM8a6onex^&WUe3@`dfr4I30@IDSfQw1Y$Wpl^&{b_1mc8sOnwj97pn6Ul zdEaqw349T)n-Ca~o;B>bg6VaQInH8fDOX!M5zD%bGKuTJuSD>bUK25e6eDbs)0S`M zG`u5_tE)nHCBQ?Xe{V%tIj#yjBzgq&QJX0_QegKny(F#*?5`1}-d&S;PoU$!p$v2& z3_97=V(d|IKH2X1?B}cr0t5UU@Q}gFG&DnOLDdwKjk^|muoioeDE9M^lixp_zrtCD z?1FE#_a4L#9K`S{pNX=u8Lx4y2LK$x>zo}9SC8<`9*6cCq92j`o{LeUtcmprF(%1VnROL?JZ_vJk z8o$%`E41RU9fP1 zwm7?A9w#|ca0aI_!jXz`qTb*rfdcFG6h}$8*va){tll#`vk!Vw`x~2*(4Jsh5;6X3 z;t6&H!-nXvk{ZJs#8u=EtT6MA(mR=Xs#H~8Dq2)Qbq0y2u3bu{lk!qw;vL_>F66Hx z(lD>Z0lpI?z1W%?REEj{+SQs{V0g6FzS~F++(p+lY46A?av`mRE1C>iu+*7V%S((` zd6Sk_%S*fJhhR83F!VN#DV)V9y;U)Za~#Fch&TBsL$Hrdj&YP1Nkbdd3ZQ~f)|*0DA_A)-H(CkaP{0#wjb@Oi%O0AN5=y!F>0CuO pu(9hz8)_;PA=*&mIA0F(B;Mj%BkL4DZ{sp&jT~LUyLcbze*v4odVK%@ literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/common/auth/model/AuthenticationResponse.class b/target/classes/com/metalloop/common/auth/model/AuthenticationResponse.class new file mode 100644 index 0000000000000000000000000000000000000000..460bf7462eee59c0774f6106cebace61db45d3f6 GIT binary patch literal 2921 zcmbVOT~ixX7=BK&UnC2JSZE^^i&6ywO|4pK0w~3Pq=puOwtii>Bs*nGvWwYGwLijp z#~)yCdZ9B~XL{l2O`Y*KS?hDM8?p%*+i`~Mp7WmPJm-C%_dPHB*FTSc1F(Y6Qb-`F zLouO36Uf}P?pcMp<=!dW*u8640|9N>ah+gQAUQjCYX}C0bfiqAVG5kDdW}NE4y=0J z^9~A}H9WUqwSv7u!>if#!WxIR8#q-fa6EU*_76PQw*}HxwQBqRj<;{S0@+IU*zKU{ zxOYnOpb-owV;!Yf!or~>>+>r8|H1Ue0*KEn{OOjVjoRTDIlH81(llIq4ye{oS zkzM+iz-be2;7$6sXZd^U)TOOuIm-;pnV3gj;CRE@x7R(FI^A{xf?Pka+`t#O7LO$I z>ZqSbEdzoPP{PwkD~@YlZ#8!9=8m;nr$5<>SGDT5tfnL9kx>cu9D1-+`F~k12~2La znEZxacJDd9L*_Nt^@4USkT_eZdyQRhzi`EN?WPsjHEtR4`|{G0%1D5@TP)QLJJ|DT zn^u#R5!g)#ee=Bm`8C1==K=jCH1`D#zMOy|&>ttW%HlHpFxd z=|g}#*6c3J>F{=7RrfcngGgX?bE~{@iQbi2T}|6>)p_5{-V=vry5xF$ESZeJ3#AZ9 zZF{X|)xPY=JWdY2aA)NGVvrX-FYtq=br5Rjk80RR;W}>U*p!v{vA|6CDmv~x-p@jK zP*|Lot!m&k?+bhvFUtrRl3umkTHW?%DxSCBIw&2j%$TKTv6qq`M&MzV6B}#BFdmxb$lW) z_1{n?Iur)e>=y~PfFz%6rW_??yKBGM;rLF2^$Csk1K!xs6}+Qu}_ zaBPMELeFycRH1S*_cFF-nnSP?l=Mue* zcc`M&s7OMosWzYg1^Qr-CPG9ck`z#?FYqq+sq7)h^eK0KF#Yh0(#xbC(vKdYe{V2- z=0)jctsK&4kI?g9S168HV&Fpz^4t9U4^Wkd`9ENM4>kEP|2vG0h51K#sXgW3`1J)o zipt`jNavI%7<&M7F{eDjWCt--R0)|XYB^P6v?s_uz;I5@X)(}rQ734+XykMWG9r+k zGddvUAstG_>MtzhFG5ETbM!5iaDh>d;~VDqECZQ=gA#2?cC9LwIZ|*1m-$I^fp=yD zA7GUu4RzkL_c_wh#3Zd3cv|`Alg-g>#wY|iAwKo|#wY_w5a0*t#10!#f*uq7u z(_0mr_>iLnQuqj$7(tTXJm)CAOu;ISGYv8YQsl3pJ)=RP$U;z92=R>Y?mQt4<4`+* z4o2xUMKCP}>mvKD1ovIwtA~wdnWxJhnw1htx%iuYj9H++>%<#sHWDG;P?IRPlYEUL WfHfsh;cp8&oTWIriQD)Txqkr^Dk)I_ literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/common/auth/password/PasswordDecryptor.class b/target/classes/com/metalloop/common/auth/password/PasswordDecryptor.class new file mode 100644 index 0000000000000000000000000000000000000000..cac34ad002c4839f62c73c3b05b3d32104576038 GIT binary patch literal 253 zcmZXPI}XA?3`ED_vwRvVj)0(H8#+XXs6Zfb0<&4=qa+(`77$mX-~b#7u?PYMjpcc^ zJmdT0dIPXPUmzgNl*whT9cP&_rSvK{h2*1)Wyw`_Ha3*IPqWm@UP@=IK$9>?`NT5g zB9hxfs+A*%@V!A8jn}{N-r1yx=97QquWYo7O}JyrK83awp>O$ITM~MEbF@mYl1vkZ hHUCDLzHHhALc@OrkWbb^+iT%fi_m#NbbSrbdji?IN3;L{ literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/common/auth/password/RsaPasswordDecryptor.class b/target/classes/com/metalloop/common/auth/password/RsaPasswordDecryptor.class new file mode 100644 index 0000000000000000000000000000000000000000..1e623d55eeaf400cf08a7e59bdd8ec65a8070906 GIT binary patch literal 2842 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 DooqSB literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/common/auth/sso/model/SimpleSsoUserInfo.class b/target/classes/com/metalloop/common/auth/sso/model/SimpleSsoUserInfo.class new file mode 100644 index 0000000000000000000000000000000000000000..0b335fb42c4a3c7efbfcfb49c1a3296f451bf289 GIT binary patch literal 13098 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 literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/common/auth/sso/model/SsoUserInfo.class b/target/classes/com/metalloop/common/auth/sso/model/SsoUserInfo.class new file mode 100644 index 0000000000000000000000000000000000000000..a55fc187822c2c61c08eee90215f6080167d408e GIT binary patch literal 1318 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 lAnkX`Or*oiWID|M29HKRPFVl| literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/common/constant/SecurityConstants.class b/target/classes/com/metalloop/common/constant/SecurityConstants.class new file mode 100644 index 0000000000000000000000000000000000000000..90a782199b0aaeb16a033d697beeb5c07129470e GIT binary patch literal 310 zcmZXQ-Acni5JtbL+Qj--yb$yqbRR&x2<=LP(t?``UWGL-C1tZK$wu_mdf@~3P~x;y zTJdIvb7mMm=IeX$3E&1N5jq4>_)1hJXluQHT~g&8H`fI1f>5St>oR-{)}o29OX$z_ zn-*5PnV3A!O%VvEBbf~4Lq1jOk`7tkZx&UkOEQDZ)gfwisZoji@_&*wox# z$Rsg=NrCxMfC;y&J04uNQ0z&}W@BG(Iu&`2Y!W$43q-r7m%&``G5m$a?HJArWKL4+ zO$fxFerW24j$xUd7%mD-oh%7vxN$>w_N<*3nyt}O-R=m45A-8}@s_T2bm;^g?9vQ^ z7@alEum$S9AR}5iqLUPRZ0%4pT{TSodAHrr?V8qTab%MD(puY^ZOFbqs5pBDnOBC@ z$(gFG$Z#hK@y{S2)&=H<6s16A!1+flRch1)?hlACa)!pb-u&ZGp%~ubdY~+ai$KaC_b?t!ZqHbTnmPo z=e@+BT!-seU@M<4;f6b(Wb^`e$gw#Tx$ZPVDtrn-%9nikXOswYW2&^6MNG^N)X%&6 zd2eB$p9=I-Jk?^~!N)_cYM#-h;!R)ik(;AHaqx-fUBzklOsPJ_)2E9Fsl)8^6Wa%o zi?|R=ggEU$0?R(oTZ|#bd6f=KD>G3NjgR$tu<8=6x?ZUPks9Pc#ggxV>bfDlQe8Kq zXWZ}$q8CZBOCMxGG>8*rn;{M@nNf0)fk5|qfHDD4CIHF=KpDR%7}GT>@^_$<3QYtR z`ielZLeqbM1}Er&%i|SkI^anMJn4WZ{jVaGX(0vetl_Z?E%0#&{h8+2r|r?Pr6S8$7AZ@asMdL~1ZUEz$t9o|D&{SCDI Buh#$o literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/common/core/lock/Lock.class b/target/classes/com/metalloop/common/core/lock/Lock.class new file mode 100644 index 0000000000000000000000000000000000000000..00f6ce9e2a438bf10ea39beae73dd530b352d65e GIT binary patch literal 725 zcmah{-A>yu7(H%DLjl1GY`}n(0zz;@9suoPqD6p!qBcwdu1xk(xi~gT9j3n8F7^O> zsIkxdwHFn$6gxRN$KN@h{patm-vGX1GekjPBe7|el9O6ndmr&vY7H+LMcO8J(Fso> z#sofe<%5j0G@Yn<)1}0PC<#;ts5Hhp=@iSqy}b$)@2D>@zrAxZptfD6OlMDE{HIhd zRw*%Wd*@i7GLY8kR_59TZ1!mglr_m7d3x~pG6cqQqntqPwLtEaX8$J1vy6<3JpFTQ9N>K#axJ^8vSdIJIzZJTEa9VpFy%f2(aK9j&wD>shod{;en zqiK+#C$Kt{d#FXR%sS*v1rJi^yx;n0UPDvLG2;F`F}ZZwh!2}}P90yKHw4y3i(2GZ z!zaO#t^ZKYtyW2&iDB#FEIvBrU2CHyb(`eg3;o#J65Ng=KmK$Az8xXP;crP96O2wW zT0F)S1JlF63g8LVHIEeRK=Qy K2sNx@1NaA(%)u-G literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/common/core/lock/LockAspect.class b/target/classes/com/metalloop/common/core/lock/LockAspect.class new file mode 100644 index 0000000000000000000000000000000000000000..add76b744d98334b1667f3d57fa4ba869c2b06fb GIT binary patch literal 4748 zcmb_f`*&2;75+|Uk~^8XKnzA49yXCzCJ+V@0W%=P5S|HA0_e&c@O%@O0Mk+ckZD0xr+5t;S`sy3Up>D?s| zYD{!%hzPVg?ocwDaZP(@&^1QonB$Hl<*|$_vsu%zIV7!Q)-&t@!yQO=@vXfuxZiNI z(v3nxs2VZo8s_Mji+KWxv@@C2=&_ zyG&b#D+gL_+wlyK#1UBESfXICX{pLaVQR9tioi6WNyjRzCPzo)@u`M(d5WniMYlCN zl2}VlD@I9IU~R_?=FqoX-k>_zAEi=jvpQ`PXZxO5)STIFSy_v1I zbCwmwZP=hph7Gq%KA4ksTBZ^`5p1PX6a;(a@kvc0XcZ7kqiDl+4edI1sO?JfL7)*y zl6Gv*Fzu`&?XXq+~|m4g<;JJ~6{VP~K) zUG1|^$356j1G!JDJ4AxkH70sX$P#2LvN?tWI=XN$(5c(7?mpg?Y3F|FQbh9bPFM0h zbV!xitCX2}d5VhNI_|{>h|`#1dI!x>!okeBM-BDp=v712mNc?bjj696)Nvo~7YOH= zX9XH2BhPm&!A|E~SK3}u%|FB`KH&`={YaC^W_E{RlF8hoCkBZ@4MRGHVG67%OVeUT zox(|?>$%4j%LV$%fVF2&fcJaq)svVhntJ>gQfiLqurNxa6%7S?%kB4n+wNvKIx;G2 zYMCHODivHESrG85oE<2UXq=t?iS7uFGJ^ho>Y=|r``BNuoc!DP$+w;wk6|y4={SxL z1!*^+vB2U_jnbUcnHn2l$UJWYr|EGxZk!!?b5i-ESXjD6FSM4~%}C-E5#pVjd> ze4eexO#2p$3u+{@N{+kjXe?XIOQ4vhaH=$E6mnJtzNq7rs$UV$3EUFJm+_Q_ujn|9 zr&&LI4XwfTM_62jhNQd0NPCXUM6U{b@JV2Ksri%TbLvXJ5PnU^*Kvkf!*YfMY6Ck; z#HUz64&-c)DQCBR)XbWMw^(w?%i0dh8SQsQk~^g>U4!M3OXB$@-DMVRDvMRWH0*40 zFfb-rTHjgY#!R*c6dQ3_yVP@tJu8?q+MEHxKd-~I<-Xi#zjO}Afu`A)CIZ3+k0#D9 zQ=|kcGeIY~V!FgK9V2aDJ}WzzOI6ln2cgJN?C|ngB|l7x3#^z)U{DqW<}h2NM>>s+ z?>Y?=Y;$L*Vg6DLmuY=bhl9heGZs)HTIjcl!ZPEh)JbNU*z1a z+r~`t$!=7(C+bg}sNYtc9(-gM#o8-&lSIW#p!hfIB*XnQ)nqYC3ap!P-PFv=<>9Q~ z@mGi-yT*(83LA>mCv|ARhMj@U)8yHJZC<5}*} zizt4A=jdrVAnzRYbPmt^4ttxO;!mmT63Ti3FVeBYIEnN0P#71uW&t8My@LfB+G>`+ zgY_CNE?Kx+!zKKTgNj0zs0>hDL5ZL&6o_|)gIBY3Q-wM)@T$15fNLV0)JL%9(-&ik z3m*<3-W?BLIfFKiL|2XDV=a}J@i3`(vZX4tL95f6uRMczyeb~9)7CZfKY>q%@Q5bP zzWY|ZGF~--PghXZ7tRT#NC5Q;RP*@|Ioi!wxtA~>Cg{BcxR1c~60rN|jt6|$4p6VP zgy9$XB>`N94fqv)P1u_Gdl|1VP^fhQz&>0fSSn!pe4tf4_W3}ExLYTFgIDtaE=TBH z3XW)q5kw7pHN2+bw;G<*@F)fR3yc5B;87sX2~jF250nJz^SeTLHu!rH=i1mseCY*z bRRyE)`J^HkG_L}`=e+`d@I9cu{t@^OZBAj@ literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/common/core/lock/LockCondition.class b/target/classes/com/metalloop/common/core/lock/LockCondition.class new file mode 100644 index 0000000000000000000000000000000000000000..c8a8aa044730d02fbb72ae34879a093ff4f2adc1 GIT binary patch literal 2157 zcmcIkT~8ZF6g^`bTvL;P>(VYHfuw=j3t`jJrvbf4 zM&J7r`jALPmHN;h&>t1$++8~{7*#YRNM`QbxqI$8ckbMOU;h0MfP2`OLI&A9az#vF zQeo!Ef987~KWuwX8b`VrD@<;h(8OB`*-CZ4fDcf}W2%S`QB+uK+Q18R>~}iWc0KL_ z8*+)X*Rjo~UY-ATY}hifv7tguw4`AD@9zzj6(6(zK)K6iTrL? zM+*1qlBeO@z_e`N3yvFpY?+TjYGTZbJRI zA2f8dC$gl@w&{2F{m96E;LOE`rl+u;5V`2>QO(?Gu;cC!aN~a=4U04LNXLh^^`js8 zB%vcxI(pajN^_lGv{q%@{~qqfyyGzpo#cQ5w>sTIc@=(i_>UfpdX^a_tWD55gc$rtK@a^Rg zhHW)TYL9wth05mM*CX81c~;vRcTw`L?MF@hy&1llH&bg}1{H2{W@I=qb12E+pjDCy zn5>*wQ23N~1`hokG_)t_o4`D>Sm5q=o=tF_cmINN*G`ak@0?)Tb#f<|br()he!QR0aud~#T#JvTVJ zK|S&(Q4XVS(Vorm7!(CM!H+PI^jRY0_CUyQgvjyCNraGn*^aPr$$W*y%OqE@ z&7FWxxPPMj2aUAaa!+7@RJND~3>Yn)@<`4Ke-dBis^DVv9O(RW9*#m^e+%d}mMd+X pQP$IEp%*U%op$E>8TQ_}>}SuWxOt%zqlL)~`sOaaU?np6@)g~5=AHlm literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/common/core/lock/LockConditionReqDto$LockConditionReqDtoBuilder.class b/target/classes/com/metalloop/common/core/lock/LockConditionReqDto$LockConditionReqDtoBuilder.class new file mode 100644 index 0000000000000000000000000000000000000000..b00f6a02b9a8645ba3752bb4729beea23cf5c9d0 GIT binary patch literal 3305 zcmcgv>uwuG6#gc+b&N|~yG@)HN-1fv-OECO0&x;Z+@=Y2t~RME#E-E(I9soG(%o^S z@+3S4NJT|O;sJOl#2N1zukB4pE5nbS%b7FhJ2#&*{`0R_e*jpY$@8;B?H77`3wHQ6#-LUG%c^2nrJOFA^U z!n9?rX_jaxN~dlqOFH}F*?lD!B4}%E%dQKT!4M9w+M>>oF7-57lhPL4DQNJw6PQ7g zIJNvo;yFVq#93CZby#N;nA0-HTVBJ! zJj31BH!F?|E^8;g!?2qTsnk_IL<+QwR%n zMz0WFJt{W2(P9xya!aT~S>NR@rysg-$#>TOfZVmR7RCyaYxG7Q{`V+dgBk(UU?Cd4 zQBSgzDI*r!wPLcWOE$y3?3(~kS{2^tVi!K9WViBNAVIxW5o8F%?WMiN#pnvV65@@jMX-Mt z;*aPKfruhC^s=QyA%<@lDpBr;papF_8#M7{cI&F`cWJ%s^kKcAF1yTf42eyL%6ie} zo+qfPTsm2zfo+ECL#~YSkbzx>E2p#4o5pu1wbK~Ae}D-Z=|KaA4{0|=bC%{Y{nQwu z(W`<^a-H-106#q=2KWu)qn8!kxJj#3I%S%Ye+l*rEyi(+MhyrOdz(hBguZeICe0u9 zQ9h=q-ZKrWpB~ztZqCEr*5A`YeHPVh*hC!5DO=VLqX6Qp-;UrhYnr zJcG}okk6eN+4t><$oklK^1T7%G(HcIABSx|e`aJILDq3?&mY=m?T<9_bQV~j{zr!| z26UKE=9aCdWV-VO+SYn>|y?I<|aG! literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/common/core/lock/LockConditionReqDto.class b/target/classes/com/metalloop/common/core/lock/LockConditionReqDto.class new file mode 100644 index 0000000000000000000000000000000000000000..a4c80ac7c84b1e5499a0085420ab61dec0bbfef4 GIT binary patch literal 6056 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 literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/common/core/lock/ZLock.class b/target/classes/com/metalloop/common/core/lock/ZLock.class new file mode 100644 index 0000000000000000000000000000000000000000..6f134725cd1f87159c4c017b15d53394eda07f6e GIT binary patch literal 987 zcmb7CZBG+H5Pr6AXUjoLp@`xOC~8{`=l7xsK{O^siJE@!+x5DEg}YmF-6Q@iO(aG? z_yhb=#%J#ut6i+KkNF6w9qZ2eyn)|bXPcB_3Eyfdhwi6sZiE?QU-Xk5%sfNd2k^HiYN z?hG8P3S6B!?W9KUhI%ahVJHR4fqj$Ct{zd;`zn^N(r74?cez88%>8iSC(7y*W62z; zvB3RV4a_>;6R7Qd2;`|zIvzXN5LlYl^ZQ3&?;m_;Wwx?%~PUfou`F6#I~6Gj44vqyI-)_eRvM1`{*2E3R=lP>KWjA z?m7WvkX`P{zb&|cyM(G1Xl{@}1DjMWz&%PX03OiAX7#99CS}XwBOf_|JlEnM#g`|! K{swAi5uIOqgxy8} literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/common/enums/Direction.class b/target/classes/com/metalloop/common/enums/Direction.class new file mode 100644 index 0000000000000000000000000000000000000000..ef57dec7b9f7ef14934c2b1ee033d76eba611b76 GIT binary patch literal 2022 zcma)7-%}e^6#j00u*tIgCO#*s+dMfHENY=YDTlvlC7CW7z_akL3A+qGjf(;G~W&{ z&50oiVNMLpc2-xa)wE|qwk^#l zr@cFH2af+C38!&}p<_xjH2Vs}px2eloJ|x&%KB9auOUKM^~;)~R~ZJpSU2dzQW#OZ zE?`8$S&TCDI$_srO;6>`lA=?#zC}{3uMweVfdYynAs{JX3~w}^+}Kd9 ztWqUEqwfA*AKon8@OkXxT*MT^C2z=w!nD;10wx$vdW!IMN!{SRCE#s_=+VNguB&B5 z&sgPJMK$bP6BojHhU~!)4-X#P+u!^>5<6Rs4M+B$-TnK~-i!K^NNiQDmST~Ed*A=H zc{dVMxDns~`Ir5z`}^Pi_@e&Z!Grq;-~5yq7x3;ebsExh^)5=dgfx|C&9o|t&2X_r zzRRB8XjaWLb*S1TF7xi7rbxE%;$bYTTjp2Fims*;g%E;V@1YRFe9TIiL5`mkr&+0K z67fWvXNA&ek^)(Cl?vXI*9`SWt+Jw83w%G`MZBj9iluSeoeUUC#aTP5iJKJ3HmBO_ z=ITwwB8;tC6j8ul*Juz&_?$Snniy7@kD`IQLARECDkB6 z*_m5nkhJOy)v!4!u32WKu`>fB=72}E!?vJu1)V$@x@21^eKDtOxQT?OO1gV4FLy}}mC0}U4kG9~4v3Mwv1^SNBo>AI=cn7gM z-rUOXVY1kFF7OoZ6#YrLjtgVEn0n@l)QPu92QGQHqsKTp$(uy8Jkmk(CegcqPaJ#{ zw;WN6v_>VmE)dQY_!iY!aYO}QTRT$G|TvuFg|?tFSIt%r2qf` literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/common/enums/LoginType.class b/target/classes/com/metalloop/common/enums/LoginType.class new file mode 100644 index 0000000000000000000000000000000000000000..90f24dd9af25c9a549aa4963ffe088bfb06eba85 GIT binary patch literal 4303 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 BoizXe literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/common/exception/BusinessException.class b/target/classes/com/metalloop/common/exception/BusinessException.class new file mode 100644 index 0000000000000000000000000000000000000000..da315f58d10b8529f68c15f66a7ff0c63dbd10cf GIT binary patch literal 1856 zcmbVMYg5xu5Iwh)mWGt_C| zF-mgrV_xn!hGhx_rVP_?W(2wuxud)_r)-#oOmag(3qnCCDq5imbR4B*O-B}FSs=Kp z7c27RJAqgto2&!zGBP2wAreHpiVk!NjOVSAR+5fhELzr%M!S+_YVw~XZLVS)rnK!k zk^a23B?Y<~f=AIEL`+2wdd~)DAZ=CJJClh;+6X&wSBcg*M&~D4Jp%*t~*`|~AI=dhs zo(qKM$!bUUI&OY@czDqNX*na{ui6#K(X?MwN}IC0u5T8}lg^x#Cmfy7XzvC6&bDEn zV@jt^4>5@>&8I|1N-wzZM~B#JpTw_7XWQC(rI&R&n$!YSgC~H=woR>=m&oXwZoiTPF!*tesbX)llhlX(o+;Mjk z=;T|1)L2MTT)pRg!3pBudx)4C&@Zh-8{x zg6|`GvTGW>x!>m0H-taa!Ur}h;0BW}qFPPx5JPx^r=G$Y_}!M2L$tk#bMq$=ChIgQ zuDJvbrLOThb3+uK^`P%k^QJ3WaZg?ZNet1%1dR!Vds!N&+1--euKKq;k$CV2_@j)k z3o22giQS~_yqz~QeJ`(1&j3!bmqP+c3#mNP$S@o`%CkM8x$7!5vk7_1x5a}aW?Iti z%yCrY>%QhX3eVrm44Jm{rS33P4tlrzj@vHxCw5;4(x0>rhsI^iSY#RMKQLB$2Gc;@ z^N}m4&B8jv$sdurffx&4OYTyjnIyE5E7etF!BFT)UtCAtNCX3;%~0wohr2@_NQ0Nf zl%C3vq22qxWs4!{g%e}&Z4L~@E1{=qe8U4yLlyy= zuKx1aBjbk}%&g5yfW(oZGf${Pr>SS^jXBt3{C|V?1-nMfeQXlmS+Gz*kr45*g%T-k z(>=`yAePN8WiOGW53uTu<{Z{n-3IkHW8Lb4_MvMnb*U9)R7lP^WD~JNId<8hJ%Qaf DRF9%B literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/common/exception/DefaultExceptionAdvice.class b/target/classes/com/metalloop/common/exception/DefaultExceptionAdvice.class new file mode 100644 index 0000000000000000000000000000000000000000..3c2c75fbe42c11c0db842dc9053e8352bb57588e GIT binary patch literal 15720 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 M$$R{J{v(zBFPEYQegFUf literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/common/exception/DisabledException.class b/target/classes/com/metalloop/common/exception/DisabledException.class new file mode 100644 index 0000000000000000000000000000000000000000..86043d67df7724e60f1252ad833ab0ba9b95380b GIT binary patch literal 654 zcmb7AT}uK%6g}hDrdgV)^_V@CN*h5>mJoeFU=b+3kL#clyF0QwTm7w`gdX|<{ix{9 zY9$#&Gcb3~opaB*ci!G#UICn9JBI|47E*bnkzqJ?lxKTFbJtaBViWR|Z;K~KOthri znd7L)*ImtZ6kdL&88Ro*m%7bR+3Vc%2X4FEAK6_UNPpDY?;DpDW07U3|H4?P>5T*R z$Oo>VG7GB=hkvwmAwxqSE_9PRS3|*2=ty7OM&3XKJwstAb(F*1J`be9^JGeoWyo;U z`L9unA?bx9BfB&+L-9uFu^Qg-fYXPHfGpAuk3wprvcUhImm$|xQQ(LxX?m?L4R&B$ zP=onRvl1XlWGLndwJDl>rrwx>J;(2Bbk5i{V(wy{aCOE)0YyT@#|BEIv`P0gBY;>o wJD0sik~Uz~8_g-KpSlgIZ^pViGuoG~HP@w5lu;o$)Z1SfITeck->zEYyl2(49nO2hI=8`eeXQcRw{9D8;GHm zMl-LJ2ATud@-2S#~HSRRJP3_U{1Xit2Jc&(mLLt}*w?tUnj zV-ZOnc0?4@q|4Sm13P9YHjR!g*S5pML^xNY(bLNPQJo>%G(Evk@}(B1iRy~zf_Fpe zRD2VV4ktCjpUtct$e3Zr|Hp1L%vBOHKko5QhIkhEW7T6g0YW=PS$sP&W98W;8~WjjIMa*gDfqW_pY_@I0=Jl6U|Q zWvoF7Ca&Cc)nEDZ)uTT?-`)Z2V>OQqW?W&g?h8Z)V@#UtR&6VmFTz(k3zmWMMEIJJPp&p}6NsIkhPAWnhUXM@*GV zr!&WqaiDsNt2ny&OfwiKZs4jeL-oME;}6{OcrdnlDs+Q!=Ww81*0e>Aq4A4isir>( zMsQX!l1oCQI~d|HyX_u*mH8fLF-&yC*?jiDXz^`D569W>9K_}k+$iaWfUO6 w<`&p1r0ECDMzb}8xyo%)eJkPa&1GL)bHSxjR8S?HcF3g?hf3m7qcw${57cIpL;wH) literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/common/exception/UsernameNotFoundException.class b/target/classes/com/metalloop/common/exception/UsernameNotFoundException.class new file mode 100644 index 0000000000000000000000000000000000000000..3679956b587f6c9e68551f84ab727d0d7d12df15 GIT binary patch literal 679 zcmbV|TT8<*7>3_;TkAY+PN!apdZnA%I}uMHq99ZeJlw}FtdTa6HdX(YSArM*0DqMD zrJFiDAlO2ZH+jG3{gRj0r)K~=m>q_Ll85prDsUOrL!J1EFg%X6zVS&VTKVEW6gNiF zYA-jDP)3H_%7gcP26tO3X?7W!OTjh2<$lan*FQ6Z%)RfdOx+?GMj$o(-Qi+p1xf1EQB{MVv9rE~+r_$>F zX4ynCW7rJ-8@R<#O0urSe|rOl`mr#P?ws)m_n0qHlgYi2~$PNG>r~s F-T;$ypd|nR literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/common/exception/ValidationFailedException.class b/target/classes/com/metalloop/common/exception/ValidationFailedException.class new file mode 100644 index 0000000000000000000000000000000000000000..2d8bf0ccd368001b45762e37590f842d7f0f793b GIT binary patch literal 1352 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 literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/common/exception/model/ApiErrorLog.class b/target/classes/com/metalloop/common/exception/model/ApiErrorLog.class new file mode 100644 index 0000000000000000000000000000000000000000..b45968538b2725527301e478fc605ea7af390265 GIT binary patch literal 11582 zcmdT~d3+pY8GgUbZg#VoO*Wfznl!!A(l(R;g2LptwzkWXWbX>~3nY zisFeVD2k#ec%W3V%AwYZ_XQq!q9Q5?UML=TUx4_$-+VLk?d;gymcRJ@GMRVY=Xsy+ zo0)gs??}G>-#b1_M62k@Bt@txPEmtm)GR1{QFd2$B%duzjGVdSB73|dsQIK^Ay+wB zP}9<7XSYy-TH=&6sFe&sM~@e$N2cvcHlHsRXGU-}T`Y{)yT|RBN)Fa^ai^UhSu>Mc zS1J`tW5o$U@k%K>ZjbI1lo|6I+fpgz3KJ_?zRjR^N~7J`vRz_cTH}os6)R&=NJ1N`p?Sj^9$r zj!$jnm(2Ld2A#sV>FIAS7AtGBcp@9@aydI8S!)bBm04+zrNAU4PBUm7t;ee#&lc8Q zJe$o6>Rzh7YbQ}xE_*JMpKZ`6oqEQ2pFD9d2V2a&Xlj2pBw5a#49gBKb!!JzlVX4soE z=pyzS5aZ`4vzLLqLDN)ly5QZilfeD%U4^7Dht3#uvD*zVloO4?vOyIFyV0NrdWp=8 zT?W078C^QV&1EKBV$h42Q1v$abY{wn4SGop#m`u#ywsqVF=aq+CYZELe7QldU}C3E z^zt@BuQKS>^cv*tWVSrH7L`zz(9tBlmad4?>kN85U5V!yEP^PJyR!LN`^*akEeXqW zEtgg1WKhfBV9*=sYC*lz*(rN%v4A>vPOgG>3*}0-P$>&>t}dn`H7)sFXxDC@Yp&X$ zr=#bo-I!iV)ZGh;I}!7gF=*oly2S*tu%l~eV9+1W@#=R1*Q z!LHaPh_xWjEuo!y?#N8xpjO3j%4CnuaUU|%GN1*D85)GMs)V6%`7RW$DvDFCv_8$C zG^y5QX>!SM*?qOPw(K{*RepDp5wtV9UH9fVC@$$FVN9iMt8M@_m%VnB0V4_JFp=; zqY86u)8^3)>+o5PVpdqP%d>f`f8yTv(jqPA)94!Vp0fUVCx*N0ka@$ZKVOw2? z%uEk<^G`L6WJ}7XRa&+AZ96HYIaK2K3@tq}zSn=t+KuRMQFH5WX^t;Z`}{k6(0jy* zO3@i*a1UFGv!!vHn?|+P7KKM~0fXyQtPIL{elt!-%I(ecmn8j_{uZad^X%pyf`OG&K70(ncWVy{flzl0do?tQ7smsR4(`A(U3EpCwQKo+s9DvLA+vPipf zvWOi{$#N~3MSS69FlSMfgR`j0;bl>k*Uh3Tr=LYtZvQK(a{I|u8$zD3 z#~{zxPmt%i>Wu9Id5z5hdB%=_JYx?)p0TQzXRP7n8H;s!#gpB-a>E1)wK$J8_t3ksx?9% zqxh`=BjgKp))m4MJVYoJ6zZ)jgw=S6P)AUxzpfBg)geONL819|g|Pk(5$X#HEvYMn zwR(t9e^6++t`L^?Awq*ep`+^xVH+SsXhBfu__{*aIS3IN3JO_ug|O2QB6LJhXmwp7 z>^p=A4F`qR)fK`XMTpQ*L7_A13SlcFMCh2H(3y3Gu;mdVbX-tqYh5AiWQ7Qw5ER;8 zR|q>SAwpJA==pVpun!X=v??exURMbFG$BH(gF=&ah2BorQIjmS76f@nXkI@2af*l6 z+8&3YYAx4c9y|oS1934d&M<;h7vOi&^HB|Gsef1&zw{?8K8_R3rcXaQUG|<$2QM$uFsqzlrvSCFT*0%JW>xlV4UN|AFw{ z4>u~$Q#4P0MUDIi!{v`^RGw#kp8U}@@;8UeAJeEjPbfY4XVl1lC|v%yM&)^)>d8N| zMt)y-%{ie_d7l1y@+a2Fe>lANR-^JftM=qis*(RlxcsU{<$1F1$)8dqe@nRh>PF>x z4dBV2S|g7?Z#kb;>^O`>M_?9zV0igW6pQW~{sJYgqgd0v;m=cI!;#DP(^`26O<NLAF z(xlZ5(xla6b~C9*k-E(ujWlKTf;46InY~QvQ>0$APa_pA6QrUw$26HVN0Cf(jz%h3 z{UDXB0kfY;1B%pd4rruVYc5E$)}T3;NrQ?s*BsPHyRCU3?Y8Ed^O!VWk>;86HPRky z0Z4nSh2{b#EmWih=0c5hskI2CORXVu5tD`#X^}akkuI|qgLIj-#9YjzC5p7zT;h_V z`!Hi_(w3ldEh{c}a@w6=MGnxdbQ?a1?#PXFJJz=m8j4&)ABC@pmPf9lkHL!4>5+@+ zh#VKq}eGDe?(6{k{UJsp6RpsOQC&?jNF(6x~TbO)>??TbE3OlR^i^1W;*<0weGQf=K1cti zufv)n9-tr7H(>RPU()yKZde16Cfw~eVa<)S&@J>WSc8$J*iQR4ta*{6=nDD{toe}* zG)3QqwIH&EZ2BIog^>~}$UU$YMRwC_DBgxAdM&m?egJE68!rQ5Tv0ho^^Fo|$HiF% z#M~@J-rbI8=9TT+1L}hRY780d=OpgNxf?q(kEBv2R+IrVs*nU1YzNwG#UzAUErSwf%!RgD%@S(%AXIQCYP%Je5Q?{oio4MHRzgAv z4?;it2EoJyu3S84toZ z;Y3|(bxH_Bgo^5Pq06i;33Yi81`b3Ggcdq{crpuA3N?v`=|^-QQYa>Vg%AEdWJyvy zNIyYZHPIq*7yT4gluj1==zdr++Agl92VgZ*MeL%V!HUxx#Ch}}tOVUGR?|bUTIefc zG5s7?k{%RE`UR|3dW;^WU&1m(5Bl*dSSfJ~3gfR~wTUshfgXm{E++8b5Wj(y7B8ns z`Yo&uaXtRS<`GyKl*41`cd$CeJ@{{|-^1$Sq7i$9hMt5Y8mEL1C=?{bleh{0I>L@_ zin#=r6RmbBTC+y;nL)22$E(RcKLk)AiJA~UDjZXR_@_DN2Eo^VMRb-E~+^`>h{- zyy`&r;da39!&8z#Hv*fHfAIEX_u%hp{8y{9Fp=5DlN_GV;Mk7id>j|x*nz{wF^Oa9 z09}q#5l0EfERNkcHsjcX<5C=#-9c9oRs&)4F_bqgx3u#$Sa!!|D(sTMZHBG-e?~U}d7#woSL7q47-TA(|y?fuxzyJHz z--u{G{Uu5b6f#IRDNKzTJ)UuwlgqYeWwWlklEmGzn@if4Gxmz-V3cv^?c}swSaEX& zdki-k8R^-vvGH_TqbDcd@6*FgppTdor6vF^*q(sw>g}7nXkD_BSu3}YOyxX#!Olb0 zq!xo(O=_cdjW*OsXcTdB-kg;!Lak75Uy9K?Oxj4D8Z`oas<5C@X9alL%R9LRV8>{a zL7PpA(-w`k*EM7r_Ga1oV%F2B!M&i-kzPg7rK^nPKWGtbyitvY>S(7Z7dTd#3iO?8 zqQ|J$pgxll)E_vz=sDS>u(ALe`^BP_#o)2~(@3}Uor%K9gC^~!BrN1i(rBZ?9jL>x zc*3M7=_49NokF^p$=C(Z#8jFjcL@BS+p}t$}UAYky@(#v3Wzxran?)9_!Xj_WCOSiB4LZje`H2b=;T?^3)zh%nNgb#>&ztlD z!Te3j))MMSE@OG891lFXf@kGCMEj@;CjGBq1@Tv=g50g0VtXF&#}i3pvXx<}nV<%nb7uU(#qN>cs=g0fco?yV@p^SjURX=k5HAz&$WB zGopt; z_7jb?lt$?_bb2_@z*VPu>u-ts92C}*Ey#2;Uvap|uc7|`g+8!uZVghT{0DQJ?kzgl zQakEvUvV1HXbl&uQh~zp>0-`vmhCyG;9!>@%;j9q;`18F27R&%Rsq}j@^UtL(aJ0p zaFVl1LdhezPc7u!yo~@DPC<68mb3@iDQiVmjiyqw1Z*oG*0{ad^P-!Cd;9#F*)4TR zsM-@w1A2sdv^WIfhrB zwBy;s5xS|-Bf{)n4#|FPU>j!$UlE%9S|7?(Du?_X%UXqkT`=fRI40B}*0aW-TN*uj ze^KOyFrBvJ+;)sKnx_z64sdM5_ySH(4YYtC&e8rDXI5O}c!^ph2lE$kH-IPjU#Ipa zX?MuDL(TqR!#(QyGv+l~!rw+*32z(%GwUNP<4Hz1fh(_eCh8-E6ol=RgQO|seLacX zikSu6t>72duuPKhMV~M)31@L_z*<|GuwQDca_#iFVnS4M;UPY`gTKt$hP8k-%FZK* z1k436dv%@F9XJbvdd})ooaIqb>b_4ps}1g!2nnfsgW{(_#ZN-xl2^*QUGjB%Ng@wR zuNc~vz#A&!6N)zsWW;5dNMuNFu*YHhZd}UvSA6`JCH|1qyj@EO%W(c&2nGKY-MD8*`TK+ z+F{%=S|ssT8n{P~Gn8u1lmZo@Pt#|xUQSA$S;fp}@#D?+Ib1dRd1MXqNx$_r?LEzQp<3Xw z?=J2CJC+4^s~@4W$gOh}q30DHx@&acnN>W=I-rU~=!-rK&eq`j63t+eOH4{y8wLLX z5FRe)27kFB)H5BMv|L-FHB3CS3Q3WFU#>D0FT9fKpri^{(ue}MS)mBmQ1FaO@fFbV zb6>?32MA(S*&3B%plpeth_8#H5*nYa>Ok+ShTifJ&|jmk!?mpS94Oe;jfwu-bodrV zYBq25u|=_Ml%8ShMJwXGF0ZZPPOL4!FLL`#P`ixHH>lFOtMpA7n@LrLf%U4u-A}Fe ztRAZ%iFbpzlJHyf?Rtd!)=OC3V5$g*YY6czMi6QI6ulmQ1F0__wsAdiLisI0B zFc-qdrVM=-BOSj9`X2sht?k2$2xg?c{{|U@cWCYfooLdZ)a@T9E0 zJmM0_+1=?MkwVJu>Xar5`Jf*AhoyEr){X~)y8N>WKj^Yr|D1jS;0F37{R-CzT>oqQ SeoueET@yxsgwNlk`2PSxV4!;d literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/common/redis/RedisAutoConfigure.class b/target/classes/com/metalloop/common/redis/RedisAutoConfigure.class new file mode 100644 index 0000000000000000000000000000000000000000..915ee35be5db128bc90387b545a723d2de5a0b06 GIT binary patch literal 10696 zcmc&)349z?9sb^ClS#JICQX~RDWtX~r8&FhDy1p0ZQ9Z!X-m_?S`Q|hNxJQ3C(O>a z6h%%^@kBxJLPZfpQBd4oinj=YMex826u}#B5tYO5y_wyeB%7VIsgmC>J2P+I`yb!` zc>nj_-1q$9y8)alq7j5pq9LrK6lDTcyN$g@G+`wBqZ@m6n=wbAY-v0hciII?8XC7v zKshQjM08AmE^v-z_eWEMc0AeNXBz|NKFi({?KK=DYMZ_BR5WGUaU&7G*tDaYWkYxF znRHW*94ByYLu2Q0(`l0uP0~>*#R>0DSxMP2Sx2?oKy@@s6*w(`L(H;GSH>;oz+l2~ z%m}8SME*?IF$1*%Q&XnXVI`A9C2l2G8!^YS_Y16Q2$DXQ8{~2rL8Ps5n`Cs7j+0U6 zGFoZ&8R>-M2dq7i(dck{9A2Vhw&YMnRo0vP^VB8#xjIhCvR`AQc8%yTPsgd!Nve%L z$Fw)u)}U!Sag$bcG&BgDJr<0+mDQCu4+MZ94! z=ZsN>>4@<}WCc1jtkkgztBJ^Xh`FBT+Koo2W&%?-NIUUFv@@P^n3dLGt%h|v)}vEk z($Lq;R4FD!l~UPjgTUl`2N`-@#$W_p*d(*^`Rv`WwsBiE6LzDHX)Elu>v$P<(9`=Ydlj8iV7BLY z3geN3WCq=dS7>;pj#uH;0*j8(Mga{V(L%qa%Rg_j^Ci6Zm zy=WAQE}3|ebFxedmL28HeV#kavei_O(%~S@Ox5d_6+WN@mW@K!SH}&PbO^?Z!#*7s zNe(kuyRGgZw(^I{#Z!D|^}OumC@sngkG<*g*9UYl&QFMg3? z`8pk!;xgt=kDB{xJKaGbJw~4$M)sIpbtn)Ma0RZ^aFveN<7$De0e&`Gu2r)yRH@`*4TczAna&o&)EF~|;+ZpAGMmeq(5KAI>7p~KAy^eR|h9PSxx7g); z9kY@#gY)&NUNTZEEcb18HuN`Xcn@nkHEH^qy%`{a8)dm1!uxf605_=|;dCU76qDT) z##4TnYNR1Pgb!=DS;t54QGv=~?-`CPn>TRv#+ApA;hubw-^X;^ijT{}V{p(+_Odh| zlOp*!>ozIECz&7e+!@IUuBD<~rnAfHl?vUisIcOV+nXa3?;i;d46f!si9n zjHhy|R{`%vtw048?>1>0D#X?8I$3)k&~Z=}-W67#`zj^*AJ%b1N>;`Zbm0m3BJS4k zB^_VJS2$xTrBr3Y35K+o+yoZ;A#zvKZ9e08Eq;4>O#-!>(@9zLZ;PkmOs30|Ny|}Q zPZKXLIGy&GMlu!ca~GviBR3!_mq`2Kw%OapI?SJEvP)utrvlR> zwet2NM%z{>2!?N3A06KDtP_Is?})t?LZf-UE3hI+>|n(O#-o718Nnh9-!7sG(}qUT z{=sY{Z44qex*Mbrly2wdr{rHfaLAt z@EAY2oZ80`27WqTQY#GTl+?&wG=WP_0H$M;+7(VMQL`CK`oBtH9l5lW+afJ@yggO! z7>~)#3e#U-aBPodF|%`)V_I-G0=ZF`?B#-xdxaFny)zOUlU?ytifa-t^{XwHAu4c! zOsXw>R!>oVEwa>W){?DIx?}0k0|)l8U&N z=vG@?Vy(bT*D>TS!H~YHSgLegJX<|+yfL(;P*eo0tcpu0XX1(7juG2K0o-CoL|#-I z7f|v4l#g7blo|8Bu&|&9(5l0$s7-c!z_9ldPkoPX&q3hPKsb+a$}1?*nBvEe?J*?h zqFY*AXeEq+o?fFqf8tPoIu{KJPIoO;?MvNWG8d@vhWXK|KTV*!_*!A;QmJjHkF=*! z!DU2=)w5d`_xUxK*P9C&$FM0oZ#W}!`NbghbsNTy*@2X}R+B5t0?Y+MsUEIcd=y-b zv+F+%&*gPj7-hFPdCK$9IDBOsleV`O%jKP7%bdXD1^>E|XKmaS;Hqlfi6hCWNhVe1 z)@~mB#LU%kxon%Ra`2Etum#fA0!60EY#94=T9s5=cK$S;Kiy++m+qBYcmf>-qp-jP z>tc$SDlj)67V+d>YmXW2R58sFMs6`Of#H#Vy5AqB-XNF38Y9`8 zFjMuNmbE86=wIi1vG0qGAp^Hibbt4;zjRp^AL~yG9_0?6rgq02v#m-@V^I1v%I1=7 zm8D_^&tgTbE`$hGiIW7nik>w2oXJ0z6!r*!D!Qse=m{yl-=H5g=%(pTPG-m+`2^* z%>wgA_)Q@f&_pW_CyIAv_I3RQb9e$8;sGBssXPYd^{ad;T+w2<~_Qu|) z`g}Vl&i#ts1BK{K98PcHsPw)wjNZ{g^s0u_J8R7J9>jMMR{9>IhNYCb@d&2uIDncZ z;o5L>2GeT8tr^U$4Yy=4Oa0EN4QEha8Nmr?!nXgILFibuY0t ziFF^b?mq^skLIv`tO(Xek;VEk6u|l@HS=RF53gK}1%9~`B1NqQp1_l?mx-Bl1L-WW zrWU$YbL1dS%i!!K;ikKAZU)QmfmU)WD!r#eIFE;UrAN@Uqo(u#HZCcvDZL4`-dj?r zEjx_Oz#(i4q4^+QE$vrog&NI}F|EQeFg*FT86ZjMR3H+J*gp^A!8{MvG@Ci4!9wywA}=`h@ks_p-9gwH>^)4FkijKH`0@J)$>1<^DzkS!9T?7K(UCK0Fz4b%QFRS`MOv7-#!Hg=OkCRe|$ z`W+d(vx)!eX1KzxJg&l%@i+V(AR$hm9-+rcsGNkh9>I;w0Po$cC3;DZ_5vb|N3 zyoD*@6TGPV?JY7P-o2=_WKmfS{qSa)6Kl#&U!t|vY8iY=j=HK$-1@?k^y|;$!Etlr zrDSy(rs8sbyLAPY;YzIIbrVlN9?<1!|Tf8rVCiCgh6-pRkM_&5He^xcYQ@thL5 z3(w;P+DCd(9YQbgC`Qu|(r}x`;ho8KqnPB!RVcT6QISbFtS$M8zVe(MnAYEv#C=p=> z%M?_KQie?_!a_^^ ztFLygE-kuNFE4%QZ)&@`&rA$K(nTM-vNC7R<@>(9_xGK1=8wPM{0!hDSaF2Vq9L3> zDcv5u4h=DD{x{Yzk_~};jHy+X75lNI?<(}JAoeb z3JmTOT%c`TdN&Ny34o6`jk4E?TAfv~4keIOfi${NgBm^*7-}k9!FFVz+p1a_M?a3J z#0&_`G=>dQlg;nr9v$5xX)QPhbKksio&^ zDTOHH$n3tRtIG6L0+Tq+!ZTfEDT{tV`%`BVIH!s~QneHu4HpE)n`$e+F35^!vPzYY znRmS?E(vrw@~f)pNH?{hCR5&4MaFR+S(U-d0zFOi&Ma%-&N|sN*iJRPmq>x+Le=sp z&9dp5Yb7~tS+-{=T-*j1{q5vdRQ*48jIw-YJDd8NG%QztY!p1(+0u==fj(XJ>}P~s z%rYA}yC?0?n#FTA2d;ZzoPlCJ3$~; zl7=f)p%Tz6MXa)3d9LhJ&;qUBD5^ZSnhUs-{$S4uJZ#3}|05E8W|&^UBVI3USHoul z13Ou`Wl>b8TH#4vU-Vva*Uo^|rUl}QcGW4!8>T9;!~b$soK&F&Mw?c( zODxh>J5A5o<%(^o+k&^)HQV-h;TV;m7~J*GcdSX zZUh@e;JZf6YYPLXHw~*;lI~F6wl}Ml?A}6c7};gGM7T|sKWJG0PQiwunu{E-+C|fo z*(lbjVE#_-_M_V~D^o%sam%u#lPejnE19+@0>gVaHiNFAv@65Az}8rD(*-{Z}4wTt-%&-lq z%ZX2A{5`__0h5QHqj&U2Xk%}10NBRC5awT?t8u80LvPW)GQmKHU(%?>57g;97~pdd zeRQ10aX;u;2JGgV3~unr5Vi2??GxPeAx+{IW(g&Ycx~Nnu8bkn_b1vlUMYFi4RJlV z612%+t_J;EMvQVSH9FSQ`U-m&|1yj#iu^gl#jWUUiz?rMGDHF&4pdM3T{$Vn^p*>Is};+(||}jbk`N zfzJ617JMbrbq47=gEa2d7^HnJD%okDOT>Ru`fKz#;B$%6bGOeW29=36h`%tbp_;J#0@r`4x!@ zFl3ujN%MjsU90yT%CcWGj{;V5a9yn8D#Na?LoXDD2Z7dOkGxPTFA@V8d*eutMP#Ii zy%zUJVxKEM6w%@Qcsn_6Y4u(Xi7ytuRs#mswj?DN*H9+*6Y+te+&LH6HIY=qXAGH^ z9tehFM=EhJ3Hu^?$NK@DlsnqzL61k$`m@7~8OfNT-T7aVNdaj#Z>+wx+OoiUkNUbV z%t#LodBmwpA|e6Rqlq#y6npAa#**~CR7x9eq*ioW?gTpQ>l5#_P$J?+42ULAG~HQu zGPSk^&JJhHm0Eq7no{WgcM1)#%~0s-N#u)H(srnN`9z-BE;C#?5V6_SvB}{PL-Su6 z#^CNLs-zY0I2Kgk%EHjGMT1V!vr5rV(@u8uuE;uI_GQv~oxG<=(++SOU%?s`onovZgF9HWQPWtg;|6&QH?cwaQyj|#WE+pqP&`MlJfH}hy*`bYWm9aTjNumD zIgFeVsuqG$Zj)t1dUp<=rk#b~ydd!J@V4MN{OS_?Chn0UtKOq9tJ7(GLGcr9Qn2Mu w(Ki-KcV^-*>fFNpIZ$d2l>hh#&|(iS14`pTlCh14iQPesY=Hm^*g+lnUw{DHw*UYD literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/common/redis/properties/CacheManagerProperties.class b/target/classes/com/metalloop/common/redis/properties/CacheManagerProperties.class new file mode 100644 index 0000000000000000000000000000000000000000..bbf5cec9cf56fd42117e490c06b9e3833a9fd6bc GIT binary patch literal 1384 zcmb_cT~8B16ur}ymVN-GD2n)nqP7^>9{`e=#t)JOiI_ea&2&2~1G_WL>=f}|X`(Ul z!5`p{GM?Ej+E(7+Vdu`=nS0K;ckb-3-#>m5(Nk(wC`b7c6>2m^MMm`_e!{(otI&Jh zJraRsRNRzG+AT);W~)=CX)2efQll!>7;OeR_F`dq6lvY}u!^l@t{#!8WR zZ5|wo9jsr-Ng2$e-YxDEJM!5&IT-nx(muvQXbGZ8>rXilWK z(dsZ-9OwVkKhsd(5%y5`_PF6Fzc4`fFo|%fMRIDE-wc$MvDj88GLb0AGo`fUR%!+Q zh9Bv;tB<{xLJ7mI=(!xjksKS%)?|{5-v8&kRNauUuLmX&FQmKBq*@o94nPzDs|U(2H+#l8^-@)Y&5ItbPS z_cWfw+1p@L-4%)55v~Q35arT0QEgk{V%iZ;5`p`wj=Ta|!Mo1kkH9eEWy8*3 zm7`h8V~$?~#yNOASOz<__MO<5^hh0}+a{{hJVqCc1Js}eSVmXqDizXTAApXexc2xP zm0WZlF=x>;Y4l=tVi@iAGC7MlmmxdPEO4*EGlet&k!ih7OGB_5u()fw34(FeU#avN wo4FC*`EyiffVai~3v@e;yhC?ks~}jxcQ2v)vI)J#siZ+v1d37=33zfgPU3dgUU|Kt{VRB? z1QH*>MAD%+5LEnK}OQ_2Xv%4{@u43FJ!1Posb$!`zM-2p$UE<6G?= z890XG1ErOF#E@HBZk14GxEq*=N79KfG$!U`MMiTgJ1XI!33hqY9}}ZDRN|~^r%rYn z zwKgs*kFL7XFt*2&*ec!YS`o>2#_m$PwUc{}i*YD_EQKbnXGg}jjiF%b9s#rNNl(#H zzK5JTIy{MROFyTfQK}JJVIabkntA8%i>hp!)CTg2^21pCu7)G0xatMRaPPQR|3wB= zcm25F-_%_TMUoKDwTvgzF^QLpSdA4}3zgK4VxInEu9rh~?-Nxqwz8}C7$#{p!D>h% zCrxXbGegB&r04yZjH$jD&|F%>c@&!Ujm>R_nMk;xzu6s4El2N}N`QaR{+l3+o;0n~ zWO3RV?S~yICusG*fd$OaIz0@)Eau2!IEi^8@!++L3@Cp>>Gc67-;-|wKk(H< z`0@yUiefx|f%enHcIGWufV1Q|m!Yfh5i7{yJna|85f^a@d0b9#1y>1@P(_OguH(iV G-24V%k7EV^ literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/common/redis/template/RedisRepository$1.class b/target/classes/com/metalloop/common/redis/template/RedisRepository$1.class new file mode 100644 index 0000000000000000000000000000000000000000..2b454ae94e830565c3bd18ce0d1a40978289fd5c GIT binary patch literal 2565 zcmb_eYgZFT7=9)sSqZD)1rU^K3)B$Qg{rkSfXc-RhD!;cf~{vs23XkauDctQe(LGJ zs6U{7@k85F?Bzp$Kz~%*XEtffk=C4p{V;iFW@p~#d2jRPk3WC=9l$6aHzS574RIX_ zBn7S&+>%j}p=sN$>ls{?T*vTb(F%-EmOR@GrLm}%i_&ugD|G$6zF~o6xMc->LsXDE zgodnQaYRQmQUdy}Y4?RzNiI89C~z*fZSI;zIkarjaSCPMmriIbRS!g0bsa}>OdzGM z`sUMna!(+(Hm=mR={SxP0!RK)DEK}&jX$@UEx^YIJEyA`< zXVaKp-+S3(>))|!@SXG8(bPVDm4cRa)J1{row6p8({7;4u z;W7*jLpp}>k-$(xr}#1ovRe+98GABs4&A(@vx=Pere_-D#lTDpuHu@8k9AzfCjvJb zBK}tx1QOL?cBj|IXV%6C>RdSPy0$c(tU~)#M^-^4y}Sy(hEahFuTyB*3Cf=5`k^e& zd(t;m$fuqaq^BktZVC)H|4x-v7s5(u6Fl|06a}*HP`6Z73v8faPGIogBkLNIdsX&>zOBG7h(2unA zCupzG|1FIq+`x16405Z5qg8$S1(zsJ{)#IJ+*f8dMP?tP1UA{yw_sqqj?Pex&QO)k zJWs|EYwxP36I0EvO6NP$QE}*R8m-4B=naCtKyofVdiFWA_zT3FUeb~naZh8U%B4FB zWQn^j_kDix(1j=TY7p_tPF5vTsb$^Xvf0bbjy;ww^XB5{?#Q&la{!NQ%xXPl| pFcQ;lRpMCnW}+IoB`ots3@f-FS@{5~_#)bQfG;Ui5nE1xzX3d@qkRAX literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/common/redis/template/RedisRepository.class b/target/classes/com/metalloop/common/redis/template/RedisRepository.class new file mode 100644 index 0000000000000000000000000000000000000000..291cf1ac53024148eba3ab7f9916d5eae2b10934 GIT binary patch literal 18241 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 a`Sch5J5rRqbO>NhqWi-YDj8;$p literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/common/service/ISuperService.class b/target/classes/com/metalloop/common/service/ISuperService.class new file mode 100644 index 0000000000000000000000000000000000000000..f447b74c97c4816639d0966c60a2bde8dc4dcf06 GIT binary patch literal 6027 zcmcgwX>;4w6+Iv+(vo3Iu_HTfHpgLFZ8n|8*+j*yB+HIsDzZz)Zscwt3CoZ`fB`_o zY`VE=lQdnjcHgGoo0(2ObgWFL(+~aB>2K=vyax~j1yI|Js~M62-d)Z;_r7}{^zZ+E z`VRmv;ExB9LOO?xiUDL5Ow{Z~p`m-4Y1($Pz`KTR6xENe0IAGLu%QL*Tf=7F7#$<~}SY)47@i~k!F)S35 zI!`3)%o&#Ew3k^+nrAyq)dVJUm{M^XXL=9?$mea-WR2O5OVggcq%{@15!9dzKaR#v z${rTCU`pUGL_rGA;>jF7ui`13Q*gXXVGq>`ay1{hg0oS$Tf-_Q)KCu3C^*!$%%BBN zDG(_%k5cB^Svt8=8e7&RW}Vux5#m{Hjt&Xe1k-LhD$Pw%H#UlLXSMHRD{W7Rjc zRc@&FcQPc}PhIo0!r~Pw6!*UUcIq)(90-gTR4m{kcT1~D*Z#JbJV)EvK9IA5)I7I?`N$j+BfJB#ynV-x15RKq+SWN82xf3yZ}Uo?(H@R?j*kTHpvbyB zTyR=P9>r7y^2%k_vx3oxTr?;FGV0^LGnbStxc&L0X?qAllDLbc82`&(V>VJO1%RfON$w4>|*7cbid)?vzoA zX#IQ!4tL;Y+t;N|V>xVUjcQ%X%Tsdxtb*ru#Z|%ql!t%YtOu`52Q2;d;IcYXN!rnI z{`-g1|A^5EW2kJmoSJ^okdvzCUG$8obM`O3=y^OxXw4;g6mW;Lcy9>rO%IXtnZa0Lp!#CO6&nLDW96+XEp?$WrL5*J->K;QAMF4G{Cx#KhET$(qD9 zojH-�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 literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/common/utils/IPHelper.class b/target/classes/com/metalloop/common/utils/IPHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..9c30481b0735285cef08d398aeaf030200204d48 GIT binary patch literal 2035 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 k_h-Uu-i_mj3v%6q21v-W5LI3~& literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/common/utils/RsaUtils.class b/target/classes/com/metalloop/common/utils/RsaUtils.class new file mode 100644 index 0000000000000000000000000000000000000000..a660dbe35e54fe945e518b78cbe23336f2ce3681 GIT binary patch literal 3032 zcmb7GYgZFj6x}z3Oo#*0pb@B6RFv@0@%?DD3Na}1kP<*GZFQK8FdAm!WU$ir<5T~Q z{erBzR#!jwM|E}InaL!?;IgpR+{wM?p0oEp=iEF0{QKu$0B+#76k=#o5LeNTgh2N* z{iUvzb$d;_zxvEHJb}b@%eK7F1lqF0%PAz$p&+GVAJm%pre~G43B77wz9^7dGrfXs zI3?2+IGi1x@jW(}42G+@6uPiqLAQ#JkgoaiLl-^QveyKX^fj^NnN@*!c6enXg#$RK zAfw_CdIe4x&W5&OdV0C+I2Db*HXK`%p{m+KRbP@X0*YxH?pB3Nj%HUT0ytIE*mNy# zOPk+ZEnCL4xs~(X_v2#)hgBTGCjz~DAs6VPPcmF|YDhD59a3#zkW(-q&{Nm6@X9bN zp5@pn9K~@JC#2^4D`e{xJ>7V|=<0@<#7Thz3&nA*ke|@zr}M>g^LnX7MN$|-R>81} z5sZe8Uuix&N6TB4b*cG2iZ*3eJ>51;f#GbxxDizVv}q&LF@)19&OoEuGUWn?vQtfZ z`AV@0hHy^Bd0e2pC1=vI^)d@ZY9N!8#3dD%aV02*+vfX~{STt-UP^3m9q0)j{mHt>j!3wl=!he@&7l^vDZp(W6_X8@A-kCa)x64L3O zHNADGG_Sil4^7i0wS*BK8bQ?NBS9dxG9hs51Blg=)8ZK9LBKOEY&L=ZX3)_Zd8Q)L z#HaEsi!>9+wE)sw*n5;NJ-0nK*>Xuf!#hRctL$EZp(aFow7G=GJyH8M6Pb?IXxS;T zN6bE~*X#Cl(6T#Pbecp}bT(bXoU~*uch>H{GqO`D;*`ykB45_4Re6&tL7(!bP{K16 z$9S*C_&vbX;7feP@oWByVGs)6`C-84W6o$C1;_T0HxPgLCQta3%Rm}BpK4%$RT%u$ z!Hc>?M{=`=HvR*d9VjE)=p5Za&o=sA&yH>5n0W2);|BpR#x^{mT^eyd2RL&K-8fE& zgMNeou6J|I#8V%125W>Y|1wyIML*B@PE7X|`g+dyju=hA#Q;!m2Mv-sAK%~=H9AD%Tlkh_c0+3y+$2@`4&R5Wyx=Hd9jU`wlCT~$z=?O9EjJL{2 rMgyiJ5vGF?CY6|e@G&Lchbe|1{Ve>1pE;(vp`Ss1A=Yage?`ZCp+eNS literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/common/utils/SpringUtil.class b/target/classes/com/metalloop/common/utils/SpringUtil.class new file mode 100644 index 0000000000000000000000000000000000000000..32c9eb7c565249f464dd2ab5619483d9e68785ee GIT binary patch literal 1697 zcmb7F+foxj5IvI+LM{qMh@#?MOh8$@UjkHNN~^4jSCIE1jB#Z%liEyB|H{jQr4N?R zew5{z%>t{0QXe)m)7yPc_vzlrkDp(^0a(PHJW@z!F;qkb!vbTk<(BjUsaxKY_1CIt z1%?-V?b{`RbfvnM!w7O&X;JIBT$`^xVMTx|T)1k^Y^%|Hqq+M}63`FH$xoo$Zt zpUw-btFap zjqZMebFM6b$>%+7{kB^3yFPolthKSxM@a=|22yt^uQHZR@#?1CF`83Kxn>7CHw{Nx z?tpqv!VMMDJF_K&o=Wq^0nYFSNkQNQpS-(8XdC99*AIVB^5k(9Tr)GDAwF=E!l~E^ z7{h7qi+u-zo#iR#?gONw;0F;nkpGD6%oiL;;XOUl351CRLLTREp6@U0U^>e*PZ#-Q z1P?%kPYTtDW+J9}#x+HI!O_fq!Qu2Cp2>)(+;_taX6eoVTp}ZHAnyBBILkCGjxm>_ zBWT!Wy-Zf#1_W`+EOB+pjFYugj;i~PGRr*LFEc6BRHDpr%tiEZQFDY4lzBdeUF69X zlbQX5?5^PMuK^Tzh$@`su3t(f7M<=<_xg!bssdd`aAl{BQ&Fl;#TZp2nouJ4RR*MR T4cEDja(9F4O$Ob1h}*vafLo0; literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/common/utils/json/JsonUtils.class b/target/classes/com/metalloop/common/utils/json/JsonUtils.class new file mode 100644 index 0000000000000000000000000000000000000000..1284eb3ed5c9973a3dc306c3a37438c174318878 GIT binary patch literal 5556 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 C<1--u literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/framework/satoken/StpInterfaceImpl.class b/target/classes/com/metalloop/framework/satoken/StpInterfaceImpl.class new file mode 100644 index 0000000000000000000000000000000000000000..c1b0663312430d369550ca2080436b3379d4c082 GIT binary patch literal 1279 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�!Xs6bKDOP;4q#1ulErV-i`z7bp;n)$j8!u|xtZ@Y%Fu{U(vcjc-I zD=_g_;?0Ni$?(WIYrrXOBR`mM!yraF8pO^7o&X=(o1B{lw;?~=Kv@FE|5orLE w7$G8!QSSYSxn9Hp`b>%_QILD&og#UkWDN7s$|Gx*^arFrq|=3WU@kJh0VNcgfB*mh literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/framework/satoken/admin/config/SaTokenAdminProperties.class b/target/classes/com/metalloop/framework/satoken/admin/config/SaTokenAdminProperties.class new file mode 100644 index 0000000000000000000000000000000000000000..3fec59fcaf20df8789915f185278e4676c9d0343 GIT binary patch literal 10365 zcmcJU3!GF{9moH7*=3gD!oq?g;sXs~8I_SBQ5J$_0e6-KS7up3jJV9+-Mug~cbj{6 zVeKK6DOQ@=%QVYU%M1#Okxfgn?BSz_rInSIJv4i%m8HFZ|8wr#xqIha20tI#&*#i} z+;hI?_5Yv$|D1j3KX>0tL`&)4ajKy)F{;(6j>c*krfX!gwmp#SEf_g-r(M{Q z^r|O~o}86WX6$^g)t5{gUCe0Vvd)4%U>01~x*ZpffRpoUyCJ?z8f(_F$eTn&PiX zozCK~M4rfKvR-IPz*e3TFuCdV!myg*#uTPA;pn9JH>d^+>t}BO}JqrPBr;UVYZ?>oAAREK@GjX`@)UQejGxF4Ac; zldy2DcGfNk+#56!;`T1iGgqfU8p2jP_=d3_rmJ#mp&Gk%8s?=MFSfU{VD?(O;`C;EON`#C z)7$7$jZUr@%AjjyaW1U3cWpq5Wusu^ovh)S*aoq6T{iYfqhp!^s^uLFb5qQJyH4+* zcWN|U(NtFC)~TRId+m8~-=)*#JZgRWPB(343Z}cp6pFJ)rz`nGoV9hOoinU_oZdt4 zjnP$nh+IAD;4JksJ2*;tnl>vsZp3+ZjZW9nbs9~}89Piq6b$!5%k4+XagDs|Xxf1w z%o}ohdtez#2h))irBX*$?^W0GhW6_5Uc>)Whn4imk}8WD*-o*wG5P?kgD@|aolN8K zGqTnt#c|LambeTyPJ(q-EHSKWL~;yFDz7TtKEYp4INhATsN58 zW)`|6q_M-!7};(EU_iaXTDRYVAzjsR6zp*`l)*7waiU3^yh$O5bB|J2lh&GUzunVm zuuD%jskG!51?OB+w4*hW26USWcmi_HDd_?TIdRvH zw*75k z!4_Ulqt!q1;nIQa+izbiC!`rf?A+n{4jApD)pNaT z%M%iN-lRAZv9Eoj&XXDI;m<+WkR*3AX4!h8obO!jkTD}8svu&5J zzOK2;O%C|?-J~4yAVeDiU%m%p4r2#|*UU$lai+_6<$2-)4MBv+x(+s<%iHZDb*7F!MR+G`>g;$+E}lkWEN%Bl0KJnQk%gXKis*sFLDCY9u_BF2 zOr?e*O-6J~k)|cajL`8#nwh8-@hmT%lbECzDItF6d1dpxc%c_B^4cy=G%hXDvc#m5 zinPM}w#tj!ym*aQcU_|Kf+D38wMFVqXhqtTXuP;cTQC@-NExqEZ{i-ZHXWoLMam*M zfMlUa&YhS?4c&m>Jl^dHt5A!5j^hn&G9JH)jR|m2$9t2X0)h-kBLa5 zPtYe(O>)Oz_n3P!?^l@Hh&EFqxGds6cZ%TNqUKJk;GO{Pi4j~@8J{~{aBsy*mBt%b zhnW@J)4-h_!DSWnxu**5r_|h872J8?CL_44(mr>#;C@=oom0VG1nxNzTs|Uv?p(pW zojy~s4l`JV!uz%y+?EI~A2~kv48gra&7D`lO@Z4U!Q~^&=bk0FpH;8J{0i=RaMKZ7 zJ`#QI0>Ry@<}R$@ZU*<_2reJ7KKE?F-KXX*s^Ip3YesPS$o9GC3hw9B+{G2#9Ju)i zE}He^||eW`$hHo?yTV60Pc+uTsFx*cUW)_sK>je zf_n?Nw?=T;#QWT}f?HH`*Hv)$g1aw*%Pxb@?G)U*{B>A^^M~zF1KXi=;`9-^gsp7( z{F%t+1V*<`yNf1h2LpXH_%^A5|3^~pV}t19pf7XfK5({mCuWS$Ztg4G$9?GI5c;@3 zq7Qa;{CR8?eT=BrXH$SJ?dii{KN8@^{ISRQUp8g#X2JcEzdobv^ko&?$H09&g3GR$ zKif80h)y{2O)tl z4`DvSLWD&KixHL~tUy?W(1x%RVGY7Mgfv1o!X|{v5Vjy(fsjGyMaYiOyAe5v?xyz< z{MwQu%C`ZknItA7{n*{UANv5tE&aD7YVo-102vo*3`e`{1lM_uzmCd`{sv-=zDeKm zL3|05pvn7?knXS;1-$iYpa+$pX<^V=RY4EY!~TfMQ=1u{nsoByx~Ql2h!Qj_3|d}w zMBi3|=7d3QRYBjO?<%I2*c)2x&Z?mADM9nXpp8{Qk1D4&KRmUqRYBiZf)<8B{Z&Cf zP=XePK?7Amk10Wm!=PPNL60kSZCMy3y|%*%jS`!A{UKR9HC1_n3w7)9oXUeIi!=RC>peL2v-yPom zLsdafDW|q6Jfa7yf_|=?+GSzTqg6q_P=dCEK~Gc#J*@;?5e7Y774%D`Im(31(Q{Qn zzfvxCZ+Jv6Rt5cH$n;AZzKj!tOjrze7A8w*U7C ee{krJ^d}V5BlA4MOZ0c-;z+$r|Db=-^#1|D^|#Of literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/framework/satoken/self/StpSelfUtil.class b/target/classes/com/metalloop/framework/satoken/self/StpSelfUtil.class new file mode 100644 index 0000000000000000000000000000000000000000..d8c4bb4170baeed06b6a318e790233a6f2066d59 GIT binary patch literal 14603 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 K!%Q*$!v6zJ(2zO+ literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/framework/satoken/self/config/SaTokenSelfConfiguration.class b/target/classes/com/metalloop/framework/satoken/self/config/SaTokenSelfConfiguration.class new file mode 100644 index 0000000000000000000000000000000000000000..f3c854d8616361031a9ae6ec7bd810de15635c74 GIT binary patch literal 1432 zcmbVMTTc@~6#k~SrAtAqf>cEWM0!yMCGn+dqG)4cRbsJ*_%vOHGO*ogcBiO6%S44} z;t%jg8P9Gj<))Ip%$alM%y%wxzWMp<+YbN_uxulSxP?RpNu(IYw#BaCuJD@tRbyK^ zh9PxddCELwi02FSG=`A2U}rFl48s#gw|Gk$;ksJ4`KB*g^1b$Vcp!}4ksc4EyU88x zZK@`(iM7yHBhyM`>G;AZ?Ja3b1LF5V$`(c$<{gi3$lc}TgT#*J z)Xm4n2;w%*BWvM81{X2TFsJ<{58A%+n*Hh;Qg{J>OzRt?TuOA*(e01@pbQK7>hVsN zPg)9f8<#L?A(z2rTwz!`Q@u6Q4x1RpW*BZtLx!quDu-bvU#Om_H85@d$E9pz3fC-5 zXK)=e3{(H~W=IFpbi2dwEPoRFv_6*qmjgqEpavVAewWLIIzwVbZ%Br7RprT-omNBo zYog(jC0o^waO=WXq24nl%$B0(stg*u+lk)XmWeJeq}kFNt0EkHBYnb7glr+!bQ?pH zaK@f7H$$)>E0{9q18IbQSgQ!h5OHX+fY+wB7m^QT_e{v#NNUXUTVE8LF6 z4E-xH`jP0}!k>k9G1@0FOLC613d!)?F7AO9OJ87pihOR+I*K^06G#x3(wM}2q($Di zi3QT=UWCe!r+t!0LxQ1zR1bc=2cP?nk@Y>Ars8KjX^&$?@FH%H_g4`nS6v^8pV_1w<9$B-bFOhzSPVc@0bCCHBG#8ct literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/framework/satoken/self/config/SaTokenSelfProperties.class b/target/classes/com/metalloop/framework/satoken/self/config/SaTokenSelfProperties.class new file mode 100644 index 0000000000000000000000000000000000000000..bcc779fa5b4c943f5246e61a69cb0eaa5a0002c3 GIT binary patch literal 10347 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 literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/framework/swagger/OpenApiConfig.class b/target/classes/com/metalloop/framework/swagger/OpenApiConfig.class new file mode 100644 index 0000000000000000000000000000000000000000..0ed3bbc2e33107f01d959589196e08e51b49a286 GIT binary patch literal 2498 zcmbtWYf~Fl7=BK;By1Opu{Ua4p+pN+SRz8JX)Bk4L_$GAu@$^5;SdfayK#3z?MG)E z9cC(YM(yZ~GmcaID2S6JGcj8ic9YxAb_N zTiRlWX6m+Y4}jjaB8@JyeASF85wQJ-d*1O{y}c}yX?yS+`Uh7 z-`p;6?m9HX?U*G}4(*iQpHcA)8W<|2n+$`^2jNqK^tP}eFU~S_7WK{Mv9u+e z+gfz{VvN6^78Xx(!%@&Eb$*t?7u8$G%>_- z@gD>roD%6(%zYoil;KJ4=!t}BrdpjseFZV3B7$KGiJ>Pc%me?kxC&9C)-}R#Zl{hL zwtiUMdhp?+%ajxLWKBGDQ#t+-~V36ANDrF)0T<7?IG;fqE!+Kp41#pg zv4)piyt0NXF0T3qUA*qU=3>;vn2U*rgztgm)P-6aj}WWlIEoWEiF%yIF|<&P^^${w zIE!I4VGIFWrw@S}ID<*D-}7N=+lLt8NDpUdt^lXegIVm{jnjIL{(idKNkuHW>#55I IG2dPPH}vB9U;qFB literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/auth/controller/AuthController.class b/target/classes/com/metalloop/modules/auth/controller/AuthController.class new file mode 100644 index 0000000000000000000000000000000000000000..3bfa593bd63f5f71ad9f699f39f39fd0f145913d GIT binary patch literal 10285 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 literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/auth/controller/RsaPublicKeyController.class b/target/classes/com/metalloop/modules/auth/controller/RsaPublicKeyController.class new file mode 100644 index 0000000000000000000000000000000000000000..32ef98f8f420ce971ed12406510c9b9b495591c2 GIT binary patch literal 2015 zcmb7FT~ixX7=BI&EC~y3vE@T3Etc8@+OD+}u>mxRplyMs1fvzdPBy2oWwR%9_QX#9 zgx>iJ^uC>`!H*fot6um&I@AB)jN`kTWDAI6xjE-OyYKs)=lwi?{{8Fk02aZMh@s0s z+(b8e7*0Oq-*C(2-nMnO{7~4Mp=ZJI9KFQQl}eWq=taUn(nKFjh6P(zt*X%6b)~FX zRavRK!nb%`?^w3Onj@Ri)R0 z6P~RaHEj{ZOOuR&0fyOEvMOq+1X-_eo1{h(CvnQapo!OTnt|x<_vC+XX6V}%n&3iM zibN`XT=G*L>r4_u7&b6sVid14%pa3W1k@t6Ds8SE=`o~;lvLZ6UsH~^{Xp@mcqG*> z`KpBFNNYp*vaW0q5*Rme7848!@~bFpB`Ei&3E*W#6m65 zIfjb|K^#vD^?=*d5*x*Aq}zuZm^bk*Zno$zd$z2IN-I*iBo?q}V9CULc)t_gx^`SE z$9*wJR0Ee=HstbnhtoclsrFy;F^9Z?4@@j$g<&M5cZ4Ft0QDD<*p!_d4yCqoM^^QX$V(HLT#~V2riszcpJF-&XK{rr(2-Bo^M#*6?c4@?fYjG0 zqU87vg(~ZLQir`y26IO?*&|W5%8pmDc%&PQftvJuk&~4MU7ak3Lt(`Uaxr%F?7kXQ z61jKF^MuN~-1h^Hy`70hL2Q>GCh5h9(OW}l4c-irVkCFt7VWp`v_gCEKRLYzHa+tb zj3=Sa9a;y_Me7ja7)AmkSPf61HrB9CC$bAs8SawYO{0f4h5{zq@XyG&o4(zfehT9m zZvTe<`+?ZRi6+iO(pVGc_HZ#er<#~qooT{ayZi@ktY7&B?=akq|BTFNyov1N!4Dr3 zXcq#O6EJ8Ur}Zq2k_pV?9KEdPspTe#$Vd literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/auth/converter/SysEnterpriseConverter.class b/target/classes/com/metalloop/modules/auth/converter/SysEnterpriseConverter.class new file mode 100644 index 0000000000000000000000000000000000000000..695ea92f378aace2ae039a1a8d5e505f3d19261d GIT binary patch literal 1574 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 J<=$pu{};uc%3J^d literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/auth/converter/SysEnterpriseImageConverter.class b/target/classes/com/metalloop/modules/auth/converter/SysEnterpriseImageConverter.class new file mode 100644 index 0000000000000000000000000000000000000000..4e421f4d37ddc9b1123fe53b631cfb8bd6b2c6c3 GIT binary patch literal 1664 zcmbtU-A)rh6#k}^7HUN-+7=PTAGB!VK0uKG6%&$z(h@Jcn{J0PWOrwooh50!_brUi zV7xJ27_WUOCbKi=XU_S~cQWVK@9#eVyu|Y?QVi?1axGUF?l?;MmaE#K zBLa(u=Fqa0cOtYA+G=)#EsqYqmVwxIc}LXxwj9!!%p#LV7E=t1N_Q-m`+?D+ZL9-s z8>PF}4)=Yb1BU62Fg<}`xl%vkC){$l*Rg624}$8-kmgP6NZ6)24TfAE*N|tJ+TLyM zZ|v5#7&hzwi@ch}48!aILN6gEFjP!!x;VF}$k&acDf$0-DP%zAm-i#X3lpT+oPz#37=fkXC zUPE&6Ya;;02z3b^YeY!yKr6Q)j^o~R$LNg~$B7I_5yojza(N8pQ8N3m=Kp0Pwm)5g z;R{Q+64A*;Mf?^ce)mG5yS-}mRV*-kyfW8A(Z(VCI7*(-vN#MOTpVS0C3|&mXWa39C=n}Bkn~sA{Z7Lp=YEk zw!IS>ND8sxdCG7jl}DW|*8iS-y&*?{v#n4%ZJ`-T=Ug^>2J)F{%OC=Es+phx%`%Jz z-}UH(`DpslDU+r;FiV=7Buz3DfLJw$R9|(AEVpT;P$W|c<$?En>|Mf;_nkBE1@gX& z#ew%dGELz=mPqx0&W~x2zI=gw!^BUpubBQqGEE=)XJTua(mo<7Mc&J_7fAbr*3)%V KXj^%YXMX@;cLz-X literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/auth/converter/SysEnterpriseImageConverterImpl.class b/target/classes/com/metalloop/modules/auth/converter/SysEnterpriseImageConverterImpl.class new file mode 100644 index 0000000000000000000000000000000000000000..dc35c73421e53b1a43e76da9106131cab389b7e2 GIT binary patch literal 4361 zcmbtXTUQfT6#fnbA}}fg-<~88NJvtAfPHdipMCkhz4w{<{hyzH0nmx> z%29-3FFYDbP^wUQMZc!|B6@VncWV5KF<~o|c7&s0yGxf2ERSMk`=Cp6xu=Pm9 zG-rI%=43o##C&?(4#^KA;(@C-Kb3~etyQ=9H3btK`aUc(k_RnR1E0cCh@##rj* zm}y1~J?eVdu3-mu@_=NpaA1*(lzzg+ZVh{|SD_;1;;a=>s9uyu(6+)!h#ECCp_%F_ z2d;WedJ0MHg!xtt``}At&}$jGZA|vCPUZ=S+u?|>kK1ne`!zg==M&+lX{UHtP?q94 zsIcB8(cSK`EPXBzj@cDBj5aS`&~OCp3TqZrwOdw=vTBvpe!<_+a2Zny<(DmUI$=X$t^n9_MNtTP z*>qB!ET)&}oHZd97tn#kG|}H6*A;1l5qB8WB`Of@(xi z4GF3dK{bT^UR+l=n!{;9wam`x<-Ng48VE;?!T9vJVGZl!5$;q4%n3a*qFZ74o!s=; zp>Ry0KUdindO~gty~9b6L8pce<<8u@zs!Kt&sa+ zHrI$Jg7ul@kmiAJ6DzHWG%IwoVHr0Z@%bI(%b`4I#;pmXKP+Q?S1@DZE_$=sC$kFM zd1n_v;Wd7%lv45&h5zUH%SWjwOPU@-{m4ZTZX}g}b-2m3mQcX!c!R%K*%+dh9DXR@ zJd|zCzoA4u`WfEQ$0!?UX?9TVpi*SDgN-6LJJ=?2mxBh8Ee@V-dBn5DuD?AfcL(n(1dC<6WbPapcUO*N#IR<>ceU`T#vY)PoW35 zaGNPqQ~Lw1itr(y*HVhsE!>%Z_E9puwJ0wA8`WMM_M-1E>`bM4izhzjUlBgx8NQ@( zm6fUrQgzOy>SYJ#g^~*nE{c4`!6lKeI?zRqJDA9z>Hu>&$V}S^`w>RkPLev9e$W4I?e?8nSh_5pCBzK8Ge9N4KAWe!d*($ zy&P2C!)NnU-N{4My?LrW=b10?<#JSoNYxdWs;ds7LW${MM&zsmOJvM}Ei&%lS_V}? vW-!c5&ylK8QZ+`Z&XcMOr0OE6y0i>c_wiMds;}`)7OL*MRDJ6f+k^iA0k*~? literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/auth/converter/SysPermissionConverter.class b/target/classes/com/metalloop/modules/auth/converter/SysPermissionConverter.class new file mode 100644 index 0000000000000000000000000000000000000000..5d4a186d5ed867187eea49c6e9c642e78a4085ec GIT binary patch literal 1574 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 XsY|jlnyRKgmf2Ynp1}Ax z#v9{>@!E$np50|-OHD;cmf3UWn>pY7cK7`J_3b+VJcq{yqzF7UrA=+FnPo}oQdoi2`I`#ei%P49F4KmTE|C=6YKBrl!Zt)KX380drlh zJOcS4*HJ)Vr`A4YV@56J3~9?^p4X@+GDrPWZt6xJ2o#EN35o=A`-k1$-eK!CfoJWd z>^2N25m=kmjjEtAEj!$EUuj8z*Dl%|!ElSZGDd->FR&7+6>c5tr)3&wIMxN7N4jI2H`!RNfKr7$Io26QR`op(N0 zlgMmOh5-Th|41daSOnK7s2EcY*P@s56jNd^e8YB4OE^L|38ZWF_XIL6eE$htZVQJW z`gWhI9_w3}DRiZ;O#Vg$!FqSDPdo`eIRaZ9-_gS6`_5Q+0@v+1j?_#G>ELszw9mGW zs8gUdqwfoAz!ib&oaALRftu1lc!85?CXKC)WC?bU)!+^`gBF5!*$kS8HOySWXa$cA z5T>p|Do$O)nRUEUP{FAxY|PY~p}GnQ_4PmMEmYrt?V0)}PUYYh+{V-$yuXiQ@GF+d rS4jT=@&)prF~-jw|Fhxj29~{tQ3};NIF>Q{0I!EHpoT;J13dZ-G26Cu literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/auth/converter/SysRoleConverterImpl.class b/target/classes/com/metalloop/modules/auth/converter/SysRoleConverterImpl.class new file mode 100644 index 0000000000000000000000000000000000000000..76d76185cbf293812ac19e2890fe83f12b220aa3 GIT binary patch literal 4560 zcmbtX`&(RB6Sg4G>aL+ujT}aFdz2!<|bk zty506t@L>O`02BD!dIx@@1z~SQ=zuCZ8(bS z6m}=vR6J$-Rx;_jnRv<_n@ZZ*xHaWZ$b+4Xdv-PxADqq(xJi3}dXMimAd1=s#Gs>S z)L4!c3hh+`W!x}~LfyFS_l_y7Zf)zENwd#Qk9SD$RT`_YhGyA<*_zh5R&B#Ff0ITt z-l7m?xPB{TE3BOraM1UhV#pSax8Zu4GGxKDsXS=WvJiHi#`-X9H$jk;HfY=w`WN2C zuu0=)+@jFH=?|x^(@C2pHOGbmCz7EJKdqUm|qMcarfQ&K{KBrEv(|~TLtk1}S%Wo;BU)Wc?UMFdD@>G~S7Kk(U`08C8g6orehz z_g!xThVg*x(FgguwYP0pd{1j6z}0h|7yZNNS{z=7j0s_3Uj@Xb&VRgUKj7jV$PT$09pA;ik{q9#aap zba(ioH!y*Ul$)Nkiuu38{Nvsyp)`_-3v`wOI7Oh>h?V{}vZMSH9 zMcXIZ0nxfdJ1p8!(e4qgU$hgV4GABg(fBMr$DVP(x~3VW-DD9bbm5TcwDl=FgePEgJZ$~i$fFDT~(<-DMr z6O{9Ua!ydr3(7e`IWH*Z1m(P-oD-Duf^tq!&I`&p3`OxHh1(a&a^bbk?IcHm!iqj8 zZTC;5PTSs)90S~zeQv@^4qKih&&8J!f5OQsbS$>Q7oJUaR)-v5g|k>;+hTDl_LUqK zvrch^J=Fuux7FAb*(Vd{j#-&vVJnZ>{)9VrujTO&W>;X58;j>!(7dDva{bM;s^A5? zT`?otudE!6B!kx3JR8dCObF+}IWGIFms7UDJBj7dYmYD=AQEcXpfjH4;o*_|$LH35 zt(nb*Y6<=e<<(dsU3wQk_^N|cwjm39k>$;-9SK9ej=UM@=5*2y0q(Ik0aj&(ofXS# z37E}U4b9SH%UaNo8$2jvuC3peg;+|{ovdh~L}hi6wz60}k*|rnGFJxF+s($yPV(38Qw+|e#omyJtc1>{QWVX;*^TAZp%d|8Lq)k ziblXH{FJ&b7{K5npOk!#&`O;DDOViIiS{d~Qx{%FbmStI9oyP&&|t7q40eg!V{nJa{RVf6>@m1Yw_e~}wLyNJSV6rB5#BiJ z(ZWm5_0(?QMPVIoADg9*u?L=n{hvG;pf-ppso#t+>3Rw3j7S0 zSl@Dt;w8My+I}9)r|R(wDs_tEh5BEir_}!jWgTT#SpV=y`z73`2-N+@s96gA+b)6J zJcIRA&MEv7v3-%PTUsIp?j=ms;M9x%{YOw(Bq(e>KX$>3Mg-ef*lk#g9pq>y_G1?g z^1>j5Y~g4ejX}B*nZ8s)7cO%K-n;1iD{3|PHOHGN#p*I%Esg!ASl$ZM*8dx8qZoTr$oCt3K;#DvJ|yzP1|Jdm zQG>@se$3!;kxv*rDe@_Ur$v6;;1eQ0Y4E8E%J;GM4kFV@n(ky}T_pPuDeorbJ*50F zM~?9CE>eD!l=qVIyGeQ90+e6D?~9ZR`IVGkAqGiv%{B<76Uk@mMBUt=@ F`yZe=(%t|7 literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/auth/converter/SysRolePermissionConverter.class b/target/classes/com/metalloop/modules/auth/converter/SysRolePermissionConverter.class new file mode 100644 index 0000000000000000000000000000000000000000..bed87a7ba0058610f3324cb322cad4cb19384c35 GIT binary patch literal 1646 zcmbtU-EI;=6g~r#Ke4u`Ky7RNtAZx(15i;!O`6bJfq3EFuuSPRyE`y5i{ak4Fg}Fw z#&}`8_MwbtccCDQNN|(gne#K}eCInm=jX3)-vQtWJW4=>z*AG$hRrm!EFpS^Ejq5n zltEp6W|+bmFsYd|nnTqP7CT|m=1Otl)W)VX#9%D}@eCv&NnlsVu3^)j($Y1xaY{`s zxy&jW_K&s1hAQ0Fu*3apH8WwfBM$Mv1l}l5a*X?s=>T(JQq%&{{G6a%`$IVvt zxb~7jwf>*L%L!N~urWapdA~$gBD%*wl7?36`c(`_7#$2JF~?V= z_W>0LrFRFtE2|+KRxv1TyJ@?9wvxw?ilfq_n;zAB3XTixa{(3{BNLsnENwGk*iHz; zIH};2ins8#K-ad3+!YAe#tYr0J|4s|M5Ih3Tn@)0i_&*Y#c7-o*kd@lr8%Z0Fi@ew z%@i-M$3i%ZcNCmcaUSoIuS$*bjbWh01I54dGh)x|f1^ecintA@s^v{W9tSIXf(8 zLz3rN6?3>J5PWQz*^<4$vnKfQN!Sccb?H@bU*KxPv#u9(Ytwt$`*Jymq$F-Z68Au0 zs$sCY=Ws(+*h@;j^z8B41u|~K z9C%ZP&3r|Qc#X?M<0IBB`bp|A|KDTz(R;^<`gUz(|5JZ>>h0`rApVm$G20dj^6`wDGUDiTX5GEO@pM=f4arg%KgDJCMrS)5eY~aJG z+UEMkljMx-OgPTp;1&pcz}Is-M?RYQ|08}yISP(#Bd;KS;G_i~myLj4e8Ra}GQg+M z_{E=2Owvj^e=T3(9K)l(qD{Q~3Chwdbj*&877;9>M~;0(?3d%AB94r`q;0Dke~9l? zpdSG~VB7gz?ZRQs1~G&qd{Q2D^Byb3F6U(yEF;bQT{wgl=*<1tjVIc%%1N8xehJ?i zJte;1Iks_}s^B}eH2NAR1YRLL%h{;F-09bd3VeehPA&-ig3x$iY~)~|h%2vgtpyLi z|K|@Ec%TaSNdiAb;9>M3LJmhTfl*xJqgE0&!rdr3UAO_6e(MNRFz|#&=%eLR&RUS+ z{s2d5Wgxq?mn$Ey8?Ehsp-;iEg0p|}T~|J;K@XFEEy&Y{k1NjVN)nVn5H5T_nwyiR=m`8K)!@J4mt)t1O8W$1BM?F-m;@OOlz2B#E6R znIiBT1U^G@Z;}4ngnWmR+@qFC)KX380drlh zJOcS4*HJ)Vr`A4UV@56J3~9?^p4X@+GOzn5+|-Rc5GWMk0u%}4_7A(gy~EZ^0#DjY z*=-n5BCs~A8&yGLT6VbSzR;2YubsC!g5ef*WsCw%pJOFbE8IHPPs=pW#sSyIa`1*J zhTKCwh8OWAaC=I}*TSN0;prI8EP+6#@_=kt3>~I@#R+_xU%UHni-`j@&y-qV{ojt* z#6uR2l(aj16p}R;AglOjhALRL2;hW!0;^Lhan;hP7+HN>g3no7OJPbF4d_$?I&Xch zCXv~m3A0yU+9@B$~(Od4Ao$r9`ytHB*?1}y~dvKcfFYnZu&(Fz_L zAWU6`RGhkkGwXPzpn_9X*qEs|LvZ^a$Td2MU+cWiboXWusxQVG-cz+ki;8!e@ ruaN!$;HqZF!la4ci?9$xpKK@Erc2YB!s7}~d9 literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/auth/converter/SysUserConverterImpl.class b/target/classes/com/metalloop/modules/auth/converter/SysUserConverterImpl.class new file mode 100644 index 0000000000000000000000000000000000000000..a444afcea9d031753addef7a51a124608c014ed1 GIT binary patch literal 4393 zcmbtX`&%646@EWh*o2+j0Y%NFiBSki)`+4ALP!Dz3nT#~CZ>(UGQcFeJIm}4#d|O6 z+HPBW(Kfx`?JaH6)}g3PQ-A66^cSDUf5894=kfBM*%@}11s3#&-E-!f^PTU!@B4jc zX8!;2Th{?Rh<9sHfyyvK8mdsOu=#?1Nsq?$_6sBCN+4P%|c zJuxd0O&E?Ik6TtMny|)a;zl~E&p1S=rk}P!!!5X#;Y^zkuPaRMN9WRS*RUf`Z373u@|y_Nd>@%9ML;Y(qBS;KiePDJ^Yf)Iu9l%5_mp5(e*@T|-j(+~s2 z4kf+e;=P_b=VW36lVMD0FmXYlZH1#5vyzt#nOoKUZS^S0MX+k9V?y{xX#&iI3$e8xp zSOi-nL!IPm5O2G9yTscg-kst#ix(BIMZ8w=+QjP+uS>im;`NBfO)-HNHN1qExeF(3 zE0J4EA+`$kN=jS}i3OC0@rpuASth1u40|@<;*?y}AR}aEh0Jd$+*dY5L8V@TfYFRF zniWPf!e~|)%?P7eVKgI*W`)s=Fq#!cGs0+A7|jTySz$CIjAn(=4En~MVPX8{(z~I!*AnZCshmv(bapM8(or5x!Dj9xm&ezhVJSi+)%sy` zGRfz$P4Qn@jD4+@Ev9M}^Ovh@!-DA2llVqfo}_}qmpgZam)|>*hI;jW7U~vt$aW#_ z<Y8NH@7xrX7~@hy6&ACyzh7uX4YE-3th-wxHZ{AA$&uXq)u zRkT(6=Af?8slc!OAYcoALto1U;J5f4uavxIFiIxBC*L5nk2e1gRqE>72%nk5`hoq; zE^1tC7F+A$X0f-q*eQ0mi#x>bb8%4Y-7fAGd%ufzv7Iiu#U68UeE(JEuJr0@#RmFy z2=No38V&pkxs~2+d}H5^JNSPPJJE_==p@u$?8YGWU=(}3`gi4O^y_D}_&werj*WbK z`~&_-41e<0QPub}ohrrqIh=ptOu_j+Z53^IfV2Nh^E?I><}flq@3g|;fq6Wpa2Y%3 z=n6Lwc_6fZUqi@+F^`KCIQ_;aA9#R59-tk33kLQPP%{A?L@kww^1ZzShtP!B+D;A=*AWNl@Mxi0Dq%b0imj%R-&%p+QPlR`|viQvic*`hH)Z{b03l&ALO#_$TM^MTXvz(nct)wo)`Oq zi?4|Ns*A6cNP9mKwvmYr%F;{&rR^p+M=0%4jvk}5J(RYW(jH$%+Bf0)(h6&( z(!NQog7b4pI~_>-_2s1EhcW(RW>q+sd_EVYuTc)wf*L4IJTH zJTQBft-J%FjnG#6(0}6#-BONdjKBh>Fr7uFh%9mpD@yk)m-l_61KU`;+%`%dTARGz z7usjY_kaJcW+stM#(XJ6Q+mIp(jh#3?aavNLio%OB83x-~os%reZywTG36oKY>|_n#ZZ;8xBmKmrNJ>Z_zAME(p)!wgN!Cv%R<)riifFng-I z%{8ZUh_ssVW4#$}AE^}>=~zwan~_*Cz)(!2gle~C&*LW0g5lG6{@TCkj%~1hs^kP~ z{B6s1+H_%8E4L*Ek>c+sP+W__N%_LmNrWHU3B!CssS$(HDU3Aycn;nEO!HjwjS&x3 zD~GDR4un1&65mmg!SLb#6-+EMiHw7=YVri4{E$;Zy2P4vW!G#+deYPx(v|94hN%YK z9fpfd>4~kt?FhZYI}Ra*whFW@Udqr|YRCWnaj$t4URj3aR^S=wiVg2T`jT?jJx>{K zr1I#z%FUB4XxMFtVzv`VrzGbSPI(^%`#K8 z0n8CHPu4U;35cLeNR6P&Ld literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/auth/converter/SysUserRoleConverterImpl.class b/target/classes/com/metalloop/modules/auth/converter/SysUserRoleConverterImpl.class new file mode 100644 index 0000000000000000000000000000000000000000..20c8066504494b177e0eaeab5085a38a62e2176e GIT binary patch literal 3905 zcmbtWTT@e46#g~@qR9~ffofG$tV*~Tt=0>nSPE5R11cyAr7ef#2+<@5PEJ&`t+f|> zo#}M?)L+n7`x3`?rqj31^s#@S|D!X#eCs43hmZ@}hh*=w&suAL>-*MTXaD}sPrm?o z6<_;Mhk7qO8XC~3(0o(Btp^i&Y9V-W{-zPN6&eTQskl9)P~RPx@?w+1si>I@CJkFp zBusNDm^5RVgpm&F8GBJ4j6~2f(o4a~mGsrLVNI9`V}j44w&{Zx^*;Ead9g)96SgV@ zYX(~~-JujVFBrB24#yPQy91FTs&XggvVx^2XUNmOeAOU8~Tf}>n^fb7w*7yD>UATH}| zc`QZa9FYAQUcv!|1_qZ5SED+jM9kEJ6ZMdWZUkt?sA5(KSF{qbdilbk$Ju4rvhFV1Q>hw}=rRw<*XnYwLQgygQHk-}m)xs;&pwwW(dg=BZ6O0-;suPw?@pteVa zGeL^_aY4hIh>!q1<`lK7OmoLD6qu1J<>9#~hv$;QiJA~CW7(bXgt6=#K|fj~O1s3{ zF0-97+at66GCL&9PHULKTME7#mYK|XD%{!tFJ(8~2t6f)dhxcx$(lJXXAEn_o#ka& z@L^V{niHyYg;32fC8(Vs1-@p5uQ}msR`{9|zGj85IpJ#-hrGC{aJtGK)$5OCKEkG{ zur(4-8RMDcykT9@=M!9MjhInAF{N8^dCo6-?8SIm;Y_uPtG=UDd`Q8cE;eX|qt)V- zt$E^eMOZyO1GNKHItmI~CT%@>YfN9tC)+$`*o$WDl5Xkz;20JY?{YUz=~t|-Vq0+* zq}dj8qfhgC3s1snbscLdURf&8JW}E^SUatf5*{MQk!O!mi5v;Hc{09`((R1J;`p|d zhvz|9O5FxxRKwTeqP@^HPSqx^s?cNGy+bXk8g@ zfXgx!(;*$#)qt*;&V$0;XYanQFdJ#X%VnD>S?X}f>Way)?lWuaa%bS?(!gw_wL@0K z>6wzs08@N5!$B=Lyu0oYWza zHv(FaOkAH@D`Uy6V_4Q`q%c5Dvwk%$d@x?4U zW$eo0VBcf<)I0lhVH4-=@bE&~$m?elc5=20o!E_o{6Ea=q+r;a+b55KJ7NjT#L|Q= zSV$9x?Zi}#$Z*o2_&$gAHa!LF9~>Jv4i~WYO!q!TpTZNoJjU583gi7xaa!SfbaHY= z;aB(vJbgVoJXwr9MYs;ve)#uK2fW7t-^oieaDdz>*P7c9F8-?lcf7J5e`t8 z5OW@6jzbmXd4Lb|@`zCD<#|B7g7tsNbFm=L^~&;$5d0{?pCi%dDMgsDFHoMy8hHe6 zsXPy>$ny{%t;%!1hCB~f<@uOCpWxF<^2}16cN}@%&0=2Uh-ML!(a7S4j0;&Tu9N37 rkxwwgtCZ&&<+)CIrYX-1<(aJ@&m(-6m*;bQQAVCejyzvFMfKHxnTR1A literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/auth/mapper/SysEnterpriseImageMapper.class b/target/classes/com/metalloop/modules/auth/mapper/SysEnterpriseImageMapper.class new file mode 100644 index 0000000000000000000000000000000000000000..6b826de12ba50aeba03b6a3c0a949dcfb0088a2d GIT binary patch literal 447 zcmb7>&q@O^5XL7}yS6HL_2AW`b9YrxP!L)K3*Kk9!!{+!g!~bD@Wnj%06vtMu8JV` z;31j7H}hk@FK_QJuK;iX2NetyoV8-naw20yJX)D&!x1T`1zPf+1I||Q#w89u=*V}L zI-d4I1=|V^m-Iwv$aQ$%EV)e;3>Dy-+K^a1myCARP}0$x9E%Y68+=Xi3#DK*)19M~ z11or*{D#((e*(|@fla<-&IY~w;jF%_6^v(+L(8|?lx2=L**{$`so>}#yQD2Y>ZlvT zSI$W)ZpB3fCld)BlBagTsQVC*ej4yI$GQZjV5^*+@-a|eRk;VS3!}b{VXxF-(f0v9 E0KSorrvLx| literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/auth/mapper/SysEnterpriseMapper.class b/target/classes/com/metalloop/modules/auth/mapper/SysEnterpriseMapper.class new file mode 100644 index 0000000000000000000000000000000000000000..a953b4bb1d068ca516a8740d49610c7e7e64881e GIT binary patch literal 432 zcmb7>%}N6?5P&CDyS6HL)EDsRoII@x3VK=*EO?*Y4%?I@6Y?YW)jaqBK9rcQ6jAix zA(@cLe9Sj_dw+QafD1UNV5H!z6N{D;86)D+$~+s6NI5OglJ^{Nwu(0{aqvM$z8mf; z*j8}3q$ff{uE+a!$z7^otN_=*mc;70WVEZ6l8)ZwSQ3FZ%xl`96ijBica(Bq1<%b- zXx;o1cs>;Tr6hAU=;gaqeOW7*&LoG9Z?!3X9Q`7Fx^7Lu@k4e=TYl70w}!8rlT;kV yMFl5~gdWLLw_wzRI?~qz{G480#-w1Ytex@`P)=3ZN3aW%Ax>eh#Bs^*1AG8KT#4@h literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/auth/mapper/SysPermissionMapper.class b/target/classes/com/metalloop/modules/auth/mapper/SysPermissionMapper.class new file mode 100644 index 0000000000000000000000000000000000000000..b0cd73ec92925d16aeb1ced87e0a4918ac94a67b GIT binary patch literal 432 zcmb7>y-vh141k>juG|3$RxDbMWQ@pwR=Q+3Af>oKOT)k(>s7dCZ*>S--0fH^ zU|YfAlAZ_+xgPJDCAYDFsRCRB8xpHKNoZFMMI8o{LT-5eWL{I?4NAeR*1e;cJS%vv zenQLYpTP6+!e2_#vB5#UOO=C^RS3XUI=i`w#|4!SXX<($Oq zC@v^Csl@k41GNiAJ*p#p9l(upnV(6)R$e>#Cm`>N94D{~voX(MFXw6Q?*n`QR1Jy; literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/auth/mapper/SysRoleMapper.class b/target/classes/com/metalloop/modules/auth/mapper/SysRoleMapper.class new file mode 100644 index 0000000000000000000000000000000000000000..c1b85513dba8028df21ea9c09b7c1ae699228df8 GIT binary patch literal 414 zcmb7=&q@O^5XL7}yS6HbH($V`^8l-Y9z3lGUGP4;J8V;u%#uGsU(JIL;6sV&+ENre zct|Egl5f7>_wo7m4gj}sR=`97wqnt8Bx6Jdw9+NR0V%~LS{erSSg*rE3_p!s0f!3C zSM*9~$o2T#thkK@Ot(@EiPfDXwCjeV4ueS{&+xocd!VqDQZTD^?%}N6?5P&CDyS6HL6+C-%&ax`#!PAPR3*KjUhc+e2Ecp=%KA8s}z=smkEg~pA zct|E>G9U9zK0e>x0pJEs3K%K4YQ>`ENXCftXr)Vr15%1hwAAybkiOKt2_DAHg9^hB$?z9LG6-4DbaF C0glN4 literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/auth/mapper/SysUserMapper.class b/target/classes/com/metalloop/modules/auth/mapper/SysUserMapper.class new file mode 100644 index 0000000000000000000000000000000000000000..7a652f612fab6ad6c1f233946c4d8a3423260d42 GIT binary patch literal 414 zcmb7=&q@O^5QisKyS6HbH($V`^8l-Y9z3lGE_$Ec9kwY+X2~C+ujauA@S((X+ad}c zJS3BlpaOKxKU(=DnYvAUClcGXbSVK6D=KRoYfcNBPoQZTD^?D%}N6?5P&CDyS6HL5_|!V&cWlVpa)MYLW|yKcZY3Cl3DUo=&O0~0emPiT`P*> z!9y}3llho$^7{7t0svQVRKQ5VMI#n1M>0mFM=NbI9FS66pryWNkMnhS4D4rO_a% yTu^XUiSLklY8H%o&_?=tfFF}9^N1AeKA6vt1auz-Ug5)5AA4Go}i18Ov)Mp)$%xrLkJC2@AQg^}5r&0H|#e!oAb z@|wyQFjb~ZnW|Kt^PaDh$~n^wJG0&DnDFRBvvdC4^P8USv)%v0U;jM(0|3s!_l-~k zn=-K3fLf?y&~nFIF|)SmEM_P3cX%OSPxOmWY59lC9o0lTSZi_I5JyQ05fz+Tep%1f@pduix?0}fQA zK9V{OI8>32lk}niT_iQ-L*H_6a^v)EQBRKnN2tdrd+u$^=A%yFxzzEJ0mrCgOJD^k zmlo%|=!TaK=#6xXMppFW2Am+hb?p&jR)IS{m$$uQz$xl(j$UcBIOO3=%f43)I759~ zW#6D#Se9L94a^$4%`JF2j~A^Vhch27(hOfS-~#m-RxxLK#fh+#=N@$o8jypFIQ2qw z$Cy>JFtOUj0+vinmO*RrA}?4a(~cH>$bexO!5hpFpD+`cLFhBs9$WE2*R{FnM5A9f z;4+LcX!OH8l4mVS51CA1VA<@{HB!TJQK%WX#-R79e+!MU05|A|cayO{yJ9aFC4VfI>HSQJHl`{;eij*uthiMqUxP?A~m zh(Z7BVVbpPuxmPW0^FfSofXTs@-`oE92a*&3zwcwKie(k-R0~sceqE}P(Opsv=`&v zJcdV#*nMYBypcw`1=F54J&R%~ZVr|#B#n$c^~R+=#PRvplvM2AIC#rA50>2GlIVuMI<8WsJpDke=ZtJ^)D?5H6vs>~g)#3MzrA8vNv(3KF-aO!QmT9@ zNpU+$am#U!vt-#=n#d z0BvC7UqcLl5;z#eQw1w9aA8vf>PH|YRi@|2ulVO4Ue-W0s$C3`C>$*FuZ*K>iPloZ zZ-%#Z{HD}=k;{@#L2~}v_55wA`QmpW`4lAi?RtJ&YQFf5Nj?QheutjFBQ;6}5{O;6zvF}Pg1xfxfJ^yHGzSzShpMoU6SI^I;=8N+{@+nC2 zPw4r5srlk;k$ei0{8M`V$<%ytPDwrmN&Xo<|8#1;IP)Z*f+YW(p5LFEFV0WNry$9{ zpy!`Y%@=2}$?y z4`Br@6B)H1U{~bB?B8Kwq31qYtozV}Z5y^WY&)>+#I^_9K5PfE9mdv;?I^Y^wmxhp zv7N@&kL^6R0c@ABjbahk=dJJn literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/auth/model/po/SysEnterprise.class b/target/classes/com/metalloop/modules/auth/model/po/SysEnterprise.class new file mode 100644 index 0000000000000000000000000000000000000000..4874a417d2191d4f70263e946e7a56d567826b77 GIT binary patch literal 18978 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 A9pHSFb)!c-R17ShNt z%)Q`8+;+Izws#vZL{l?l?n+ncdkj;h^1%#pn8_k<;XPOkdrj4~yFzovQL1NmRjcm^ z-{yVYF$>|?J!S77`wv_#yq+h0QS0)ySc!`^`qF6$k0B*n#nOb z*OGiPd3IE{p$_dW;R?^Bw8Ai5rQ&6ntxH$z^t%n=J>~SF(N<0F9B@yXbts(H9Z94o z^|NLC?Wch}X~m*do`jjX$3k~hYma-Jj8#`etg^B@m zo4YL_amQ64akX^b@*Vh^W%A+n3bkbJ%9+Bt#=F3a491w$|9q zE7AF7)+Yn%WI+?iyr0aNHCCp%S97UDRUPj8g3jmSTg_xqXSf!NZc@;)*kQQ*ZdLjV z5JVVPX$q&P$*1W~^B)X1X_cYpXY@>&@f?%U435cY*2ZKsRo{^129`3!y+v;}{mP7F z^%dCf19LXrjd75P&*^R)GR}R0FX~E(Izf zij>3seocC5Lz{bpKZ|dY_~%Z|4`LVc&0^gD1>8>JpFcG}$V13qi17>fHi>`n)chc) zA-@pgFX6i+{^F_mL4Ab$r5OKv+@X}2LfNEbnL1eh3&menUs8%+;v8M)>AFbQ;wyZV zob;f6mJ{ozg1aGqiz>|Ui^Pht|HQ|yQ3Bp&pqOAFP5;GB9o`#D`ws(I5kJy1M@HA_ X+Cq(1^Q4=je~J$=gGYFbT`c|wWd-ss literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/auth/model/po/SysEnterpriseImage.class b/target/classes/com/metalloop/modules/auth/model/po/SysEnterpriseImage.class new file mode 100644 index 0000000000000000000000000000000000000000..9b8805b5865fed053d66a2625853ec4fbfb0147e GIT binary patch literal 5673 zcmb_gZFdyq8NMdjw`?}#1p=;s#u`(yNmvY)>ISF~UfebbGzqat+c?=Bk|Dc0ac34A zwXG-?C{}Hy1);^(D)<3kI3-Ad!?FEf&*>lV2Q(}2i9b+lujiTB>}+;zayaF%>^=8$ z-Pb(N{r23;KmT*}27paC??;t_-3cQdO>35#N*TsfG;JhvDb0+kIcq{ZXsPIw5gnQ~ zw`VLZJC)T1=VZXM`{p2jUT}fY7tVf z;qG3nph{0FXy`kj9#o?#H8URVGcw~nf_+H{^=MEK(u$iUcBu;+=gPR2mGGtzmSUNL z8eN=dczQ}J#cnl>l%{4Rc6kUZaF2q3#O}$a6g0VLhpepbY~tP!R$>)d6Io5QwB#0R zZnrs0Per#;*%Rb$?+f96w2(5PX0|_*Q%Tvp#>Kg7?0}ZAdfJ~7;BSQRAX*i8$2BX? zGc~PgcR{5Gf@s4x{a6!1yP$0-I>=^XI5hDZQ}A_!(1|Vu_2hGfmdwp1%msf5n`j8@ z@G#vg_E2Qlm+@5`ULar4-b__jOOkIr7XcKgJKcdj2((A6gj zdQ3IadeX>6)6-*on>m%rxv8VWVsr5%Nxd=*>=l+Qyv{|L$CIK=Y3y7uQ z%fER@x+f?b$EbbSdixdm4^HJ@dVkMgU!ez$=0sx&<&U1pU%UFn$;-D-UQ!Tr8p){2 zPU6|GrwEBI>X`C`J7~aD`r-pa+XshP5vEL&5iM&noO^`R6lPIfA(cl&b$FTb;*Y{| z8MFJkf?*c!-8Jp6zb!;4?c%NP(=*yYEm|<>pE2HSMmuw5-P4N9fUh&6+ThyVb19i*_D6r=R^a&8)) z)37GAEMqP_)+&l2AT?5Kl*(eU$ZN=6E>$kEt&3->cSwqwx*|j#XNe18D z!}hF#eeUS}ADVkXe<_X1xz@1#uc@{P?}N3;&>?wK!qu znS;ip7PZ}FUynP~gk@x>6`XSW&H>t_PpFwBht1YL!NqWzBc3cEen13g{`G8#E=U) znU>oK$J-)+cEV1H7_cibDN94}46>Ez>lRCIr@2Ef9!lv=Se57-7fWx~h(o`$j6R2h zmFSxnOK%sLL%*Vo{#pE_5`B2F^mcVR^efBg`NPttS3YIf>KLNWJ0j=c^<3!q8v>`{ zt-jFlDFXeSk;_;uA1ORA(8+&dp00nOHthKfjpq^S3VSZ&p#mZj^AZw?`NCd-@qLD- z^Qa4Z!#)>iZOl*5+E^g$7odOx@`nR1PQ@#D7XSIrJFMChFHKqAOhTb>&-V zmZEJw&rK=?_UGrZE8;ghY1qV-S$+pddc2`$qi2&$lvNEq6HJppL&tgeyDlU4w9rRl z9JoeJsm{%?_Z=_Km>@6&H$9!_hH@C!WvaL46{BntjvQhA%<3j{Xr(paY`O+X1HIa}nBs5oCVW^3%=FhAY^772AN1E9RViL9ce=QQE$}EH?Y{d4X~9 z(Y__}37(J_P^5DPb&;+aG)BUn88k=2-Wim&#%6gfZMJRaO1;IomdGauB~cbFav-Xf zlIY7GDTx;9mHFT7mDiWJW5h)ux^;O=<^Pk~^?>4N!VS-F*vl8VcD-yLqCS5kCq35y u_a;uz&m7=>i{BC9;e)~k!`X@7r}#OGKk})Gw*0k+Ke7G1gLiQb;r{|L?Gf7m literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/auth/model/po/SysPermission$SysPermissionBuilder.class b/target/classes/com/metalloop/modules/auth/model/po/SysPermission$SysPermissionBuilder.class new file mode 100644 index 0000000000000000000000000000000000000000..52a47cc769ed448f035ce092f61536b59c005b13 GIT binary patch literal 5414 zcmdUz>rxa)6vt1avdcOKM8s?G5>UX)YP>}O6_y|*h(uP5w3l0oOV7kKhEgI&WT%Uw`}t^$-C*b5GWnVM*n8(g}+ zFGRE45cSySQQ3{<8X4R#H${2rb+pLCh8IPi2nI9ORP6b69x~|g>e%^wyZ3n!td3D{ zA34wsJq&gSZi6%EO~ow9(9==94jf3LYS=5icF=)-IE1gs*G+uwK0Q8YrYB_wF42>{bsp71uPJdP z$^WSXSLiDXJaAWho}_inf$NlOsTOiq@<$O5DfBZ3ZYJ)ySx>pg92kd*&FHE}gRCba zmY!dp#^7WO?l^EaiBtfJB<_?06-uFmRCh_bGL8!HIfKjFUK%BshI_OQXBoRQoSLv? zEu?Hc@9*`rCOH+=Bp24w)aUgNW%>^4?H{6!F%p=xhCq1Zip39@(@#hp6*Ytv>oj6MH;`k(RS{OGW^zx-@*J_)6p&*I|$#i zLI*j6Yr`J^#kEqDqE(mr5Yd(adLHq3SrTzr<1=2ef-@rGB84Mkfk$#yM0kw%;QYu) zhHg_Wlc>8Byb`>E^#b@*!Ws+)+nsp9hFIri)t9PjGj2_a@HK;<)6=d46?E1O>L_*w z=Y?30n`36uDNp9bDk>67__I{Jr3!0A1*O)KhevV|1cSe`1Cg<`wi@>86YTs+QcrXx zeMDE1MRX2Q0ebNl zB``2pLaP(6RlIhPRyBO6Obs83Q^SW!)bOF~G<>K!4Ic_m!-vAt@S*H9d?-2%AIeR` zhf>q8icG_Ya?c^{Wt#!eBk;&!_{U^=#pH z!*d&dUv9oyKblWQHva>5{{Gy2wH7s>j4Zz&UfA;Q%gtBoTJ!r2{!#eG#y^~!ul9)M zA2s*`_W3=Yo3Hkp<_{SBQ}*#ck(;mfuI7`G9sfZ)|8#D?ssox&MwWlp&L7InS2acR z$;k3Y?fl`~d{v(`pNuU3f}MXZH(%8{%_k$vzhviM%*|JIQ}fBl@~_zU*X7)NRf9GE ziow5bU;kHg^Hn|9{Obn)rk#HyH(#9%nt#*akHfdN`fw{ZU!60WKW^~v+WEJ0^VON9 z`F9O|#Xi52x%uk+)BK9T{|;O{lIS4(5l=fh=NA8f=_jLa@CbVY`>^fD)`#sdw&U1N zU^|U%2-`5WbJ#9oyNvBBwj0=PVY`iO@-58R4?=aOE?Upj6{zW)enMG9IaQJMpYr(~ z<|rj~nS2Ki0N$5Z)soj9sADD_z%x7WW#XHLRlF84*EMVbG|?hKSH%B7eGgp_f`kn? F@-K}NV`l&W literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/auth/model/po/SysPermission.class b/target/classes/com/metalloop/modules/auth/model/po/SysPermission.class new file mode 100644 index 0000000000000000000000000000000000000000..709daf2f4358e104b63a7435cbd6eb3818d27169 GIT binary patch literal 13450 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 D!INWy literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/auth/model/po/SysRole$SysRoleBuilder.class b/target/classes/com/metalloop/modules/auth/model/po/SysRole$SysRoleBuilder.class new file mode 100644 index 0000000000000000000000000000000000000000..aca9a4814526b013b6d561b71e10131a2c6a4499 GIT binary patch literal 3845 zcmbuCZByGu5Xb*#9t=i21Sol+q);H(CP96mEsY^fASKW`KrkUq)25Z}D=5g4M>;XX zH)+2`JCja2=}bOA-}d`-x+k4u87YhzUYyRmtbV(ZxhXDFnRuP{1<7<(hHC*BrZIh$p5vq+gyeY~eBd8-=|iyf{0exoF;^ zd5B=+TlS9N5?0PIzU$k94&bJJY^E6Kx-Z@T28I(9O)0Z&0RXH)dF3^ zHM(F7gGJNkTYjy~-934~q_tBqtbM~ZrL2^l;?N}0a`7C;^;B&jpIfoy=Pm{uddS70 zQ{6FKswslI6yi?QN8`L*%*&%Fva$acjJ%PG=C!#Xu&XRfFoT{w7l?MHM>vg3H%c!z zOSj4%6|IuvyA{4}%JZSAlD{Ag>Fq7yPQE(Z_Vu>tj0V>M`9!f)8rvF*|DJF&(w- zn2vgOOh*m-lx~35LZ4K$p0DVaPJd-mlYa&FN3hJh^puMRMsbgx5-ML=#Tw1gl+bqy z?xQ0B6$mJkm(I`sNsr&@X9{=e8AXkSCJIHyD$ie&U6-T{o#GE-J&E7nHb2}m#g{^B z{3FTyOKtPR{a1V`wDQOBASwRQw)x>%Qv9(P|5|eVSK8)>=Th;d&>H_l^8Svu%@5DG z;!ni*lga$+ZS%wXqWF_B{xmj{@;}u!KfHU2KON)GCG%(7=7;xK@#kXvd~$xWZS%vL zp!oS1|5oz(nQxmP))&Q>LhJe2#5Z*1WubYF{-BO5{*8sF`Il58UZS7IB^skNuFx2# zah=8#jaeF58uPF4QF1W}>(XLkUHTS9<+n^#Mb@t+Vx8&pFMKN9hEw4AHNFJS^1YPc sy9*D=TMAn(nb;0=3)rE#hvIoe;|ZRUG)%TV^iR?E=*2Vqh@Wuve|okgWdHyG literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/auth/model/po/SysRole.class b/target/classes/com/metalloop/modules/auth/model/po/SysRole.class new file mode 100644 index 0000000000000000000000000000000000000000..bcfce1629e00a98d6526720916bbc77747634b4a GIT binary patch literal 9142 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 x<8|BH^m{BlUbp>${s@E%1wns;Bf literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/auth/model/po/SysRolePermission$SysRolePermissionBuilder.class b/target/classes/com/metalloop/modules/auth/model/po/SysRolePermission$SysRolePermissionBuilder.class new file mode 100644 index 0000000000000000000000000000000000000000..856844c56fa2f35c601296a930efdc8bc8845f9c GIT binary patch literal 2022 zcmb`IZ%-3J5XPS^(3VT%F10Yny8o4$e56Ek60z!n69Le zGp2O?5M8np=wX<;P+lo?qt^)0$1s^cnZ)1Lg|!?>I*`US3^Mf9_?B2uZk6kgQg6`A z*WA@U!>fNMH-%o+o+L#W2H!VaEo-9WZcATQ9P!e1mFAlCr69SoqiPkkWxW=z@VFK> zZE0ViBVovtr7M;jwTkdQaN20RRh2ty+>>S<8r$`TB+^RxLRy}B#*{}TqCnyQ2g$w_ zdPCVO+~ZWB!lO^=sF*Tin9g4?9_60YDmVg$9>N?I>fynpR#n5RibZLZ?TwWBgxNxz zW#Q{3< z%7%^sbcwq*UCq(5Qd^CBF`9Uj<=Dm#J9W{*{d1Fl&?$<|YJ`XdY7DDVi((Q_7~Vw1 zh*-i-keBu>8y^ntx|ua!@mW@&OJ8!SvKJig`-0B4|1?qp&l&DS>Oe8N@oh9xGX%qRTE*#ogWfUIts*vRS0`+7@}~cjsX=3Xp&2e-TzL*SDMCf64e{HgeYaX>&?Mw%BK%xye)in_K;Mv`i}3H@E`74mXO0v!I`;fP_ouO4l4uuQ^knyN zwY6A*?maDazlVItogw`VH`mPEM?Y{DHP?dLfdX-27&~?b_YZ8{7^ioVB0ZpI5>qB3 S`6lTP>?u0&4AWEr1AhQ=eA)Z} literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/auth/model/po/SysRolePermission.class b/target/classes/com/metalloop/modules/auth/model/po/SysRolePermission.class new file mode 100644 index 0000000000000000000000000000000000000000..ad68351428f950909b6427726f3a1ee047040d06 GIT binary patch literal 3994 zcmbVPU2_{(8Geqmt6e)%ttgHYHKw?=3$|=WDWSBLlR&=Qs>qJ99hbI&bS*8`#;aX* zcje%6#V`!RMF)mq7+{88^n%PVxoCkTGlgN`rp)j^0^vVU%5!#C(OPneC!WOnp7%Wa zocH^z|MB0C{sQ1EzNaB2uv~Xr<(3&3w(Yv@a?5RWY|}3rouDZfrd@8k<+WXZ)wRtP z(`#A2Z@JFYfaXHSvKyv13;`tz6&Zod8OyPPa{}q=TnhXsmit=8eVM-b7M4%qZkv=>xOgr z?T%p!9Gy;(UfH~1)`NwaHzfFY7DYTMpl+E#m8Tb`XA;ox{9%maa~ht?;`5R=-!m^_ zqE)6m#+Q6gXYq{W8zP^KYGl$>7SBrU2(`U9%e`@YF^g%;(A=isH!m_NVMwb5rg1il zIm`LSoG!Zt>#GM~^))P` zyjE|TEn`98P{Z`=p4FCbGj|Vu^t=1-zxS^{|Kk2n?g`A-WZ`TYZp&)8opNh;lc)G? zyOX3WuS=t<4U(xlhTWlkO0e7JW9~q&R~zd@^KIq))%7ck`-59Qd+_7mS1$>iIuJp4 z{-R~t(gaNwsFg@8`S0zNeN?13M8`2Gx370>D zq?=K{39PalAFG)@vxlYQQI(C?% zz?A+MYHr=IHw=~wvl8actC;)#}n^+EkU(%=9~Uz=jVG)TX-Zxv9M*df-OA$`;)-pyCb|I6V-l zgunX^1{ulWHMir{%|%Og`PjhNKPf{da3t!G`KZ9}|L_kFzW;N9^1+*BnR#NgkNCU( zb?M^uo_CxG%cdVJnX(L-$ovJ@4gA0}+EJ4IkqlbHaNufa%W?R&z*H}jmb2q-o8>4B z(S%$y>VfO+3j8t|k{B3~zG65H-h)#$*WK>47ZQ<*&YRfnB-(KdYFB*pOoiuj(^a8uyf zfhg_gyaq<tg8tYCpk0?$y#n|u&)wu?B2C-GH$jfnF+EQJfmVF;ISnerkv6MV`a{ZA0D z-$VKX$^tL*cZN^k7+#6xYPiE2KYp{!eTh&@e}pDqOC?@=2Cq^h4I=QN~Wkv zOy*-0ZXs7xiVQsbP?B zBJ(K~{La>eU|{*3_bK7MbxJCZLhS;&7-g?2hGi149uJ98}SWbAOHO3Ry=>_i!?tJf*oi$d%^rV4#bShcl=Y z;UCubXgq_+5ndd!l19S|A{~}TE*;J#IXnhCoPV0e?)4@+4e6gB#YfCh6(&zj;XC2& smbkRG&}7hfX<4{Igu;cuHYJ@;oBuroTow2({~|z#y}QFceFw$=0df*n$^ZZW literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/auth/model/po/SysUser$SysUserBuilder.class b/target/classes/com/metalloop/modules/auth/model/po/SysUser$SysUserBuilder.class new file mode 100644 index 0000000000000000000000000000000000000000..393b09076554b238fad979a22a835129a940e1c2 GIT binary patch literal 3572 zcmd5<>r&fB6#kZ*jjIF#lq4i2mzsdNM7>{PNE=8Av<{G%K-2WkVsAk~)_SBh9e(sZ z`T%`^b|xJ<=}aD=57p^eXMSrufJcv0kDMcbLc^D27MO# zF~BhVk{@x~<=(!%x%X036vM!x<2mX+L+?ysXAoHoW{|V+7A%H)6qd&jR7+&3n1wxK-gZ^f*;ASZY};NpHWXEnKuPgkgqkgZ6p6 zCKyIydS&H1Msvi%XsB7|LGYvWt9tv}7RGUzA*cN)E3O&=!)Od(SxQ%MFSK>l!UV1{ zSi)1nulr6Q*2%B9`a1oxFZ@vb9Sf7%V1NBUdO};fY2j8V5jF0(TJo-id}v?0AKBO9 zI~Jxf!;taC{w?gD&7%DlQ*l5)Dgul&cqt=!c?(T5k(Q6~@QwI(q zEtbwvc&FG*Ha8LpE_4St{8*?1S>573-2lW*a&aqe}WRn41dftZFq)?Zb z&Gg2|)LnY}_w+@~V9%V(Gdk(4l1;LX(dO0#Zcc=5-m+}?6|w5*nzPKse^)Eg?hO&B zH5pKA8K!)zK>55L9d$4?fQ=kBv6aCS&FH5L`4+t69mzvsM^++|ukwnL{xQSP@nbZK z5$GECs??P7B`FUZ^a{7W6d$M{jb8T^R^ z{$zT7u6K+d)vm$Ui}w87O2@y^F@D4YgRd9u`1$nw-|iSc;*`P9C-A57FfIR69pgv* zH2BjA{I9S|l+i@pA$DjU&i{$R^VwHKu~)c2;}VTA8dqpsr*VVEZ5mT2m`f*N#OL`` zK0m^mvA0Xto3^(=SpRA358Qo?kASlbE~FUj$2ytl!Pjla_Dv`&phWL1Iq{fA8P8}n SLb_S{Z?Hqo?czCJ;Oajo7ZJ4p literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/auth/model/po/SysUser.class b/target/classes/com/metalloop/modules/auth/model/po/SysUser.class new file mode 100644 index 0000000000000000000000000000000000000000..f7c75141bd69f0a9102165544f4ccda706025378 GIT binary patch literal 7775 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 literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/auth/model/po/SysUserRole.class b/target/classes/com/metalloop/modules/auth/model/po/SysUserRole.class new file mode 100644 index 0000000000000000000000000000000000000000..9408572c1dfe7cc0465ef15ae510a924f35008bb GIT binary patch literal 4747 zcmb7IZF3vd89i6p)vgpdRvg=a0r>ZakD<)fZJCRpC^EIWUk zgZ|pSH2SeiAZBrcP{ZF~%Be1mr3jTxV>k8)=q00i;)RA`3-k>}EIGA!-Yj`zL(fX( zucUD=?&H2orYD0X&F&i)Ne=NShu`;}IOByUT{VJi*-iSuCdT zbv&x!8)`>Kup8#7a{>oCg(nh%V8vJu3veur!x$IXRWVk~38z{z zyr(UX`&M1gsCurzccNg;;6=bX42Ad+B|jF?EQBi3VMW8^0=<6xEmpZ%w+!2Q$yl`M zdUm!^^{k4yV7V3tj#jIVXLuIP6Ua?b-F?wmVjbpJ59S?%9n(@^Kb0*bKUZ2dE5?|> zwzBD#>Q+szW_bVo&hJ0HbgOt=;Grqm5{rgYvC2*(Us+q^4sOkEMB(!D(x6Gpw9CX& z{a7>RvNg`i($#NYef#!n*Cn1N+rS@8e{$*KXBXc5^vcc8u6!Vn3Y+1q!ER8_SvE^K zzopIneJ8nqdnbxBb0=o!1=#STTUza#UX*q#-dc@O&24E}u{=+0x$5Yd`BSVp`pVQS zn01#SJR@BdPYQH3i)BI9pUR?=KZ0>s446q^l8tefw9|p%q$NQ^bWd4TbEZ*QH0!=^ z0(-(bDOOiIR7%g3?Nk<>mHZQC)vQZCB393oQ=&HpePU)q9K~CEb|>)6@Rw`eQH|@Hov0CYz6%ztXSvU_y%9{lN&$cL#Hkk*+zDl7+37T4zXNKuEZ1#h;Zi6<^+%P^McSsFHuyoI95?=2Hx(yjcpx7z)k$`L@ ztX60vDgj+Fn5j9ZQ7^IWB^PBPhwg(iz&u(47WvnQmxK2I2lZHvp$mjb%rVFDT(54_g8Fg06S$PZYxsqR*CmC&Au!O&xm8_t zR?K`5l7Q7Gjgsfo*93kO4Ns^TfSxp}W!^dlrW|LbQ5%cIBaCfiWWz$ACL)ue`g4(? z<{=#!3Lz$V=b5v38_;oC;E_m-2ZI_N7rA{wK}c!66y$?d9v4F_(_)ovJz*QJYcg0p z5sdJ1q~UFW{hI>R$!`tJ-@X4|m1P?QiN}}DkHEKh@rua{7UiR)zg|8aqdei_I8IQQ zbnyhocu(4_ak8mVqz11|p~jvT#*@^DNsOm3WnvmLeB!lfv*Ib74ix+GZ4A8-vrOQd;l+AW?Z*1hSx`ie+N~$ zHu87qzl9pVHu5*<)4AcBxW|8_uy-cMKLusvKE{r#NRMWfo7mUX*k4eovcHhX zs!}KMF?z0|E30M`5v9R`My0`mp4Ft19x7>BJ))E=B&n1uq_Rn=lnRxS*;G?Wxkjtw zk!A|&q!xIyUMJUa9xH6HKD-Z`4Hn~j%w<$K7Ux^ZB~&RXVmr@c}7(tIx3Ju!vD7rQMKiIB8{~Y}q?&q&AKF2+QnEVnEVS>)L zB}kF4a$)`-qw%siRGAs+^OyBTlRzYu*tASE(d{;L9v?VJ7!sSf$Zw6HwanOIW!z8l z-ptrCQ>QjFm~hc!OM@c>ix5+wyk=+6%*sU+-Oc$redPs$&l zf58F1IO#$#5xi`F!G*2om>lSX+Ei%jC>w`DwM0a%rP)3jDr*~+TlyU)xTKA{euy6h z`N0JJlcz&grbecLpWKHy#IM1RPypI_H|T=kNXd3QQdImnEG?Ux$QO~_!?$q6=icGm z4Rj5U-auwJtK7gQy6N+|_)xHFy~lQkTudbYz9h*=@vCu%;xo0RQ^|Ro ziHZN02|aHeoHVYT_WJK|x~O=CJIC;9`z_-q_$lMb8^X_Uff_Qn0v9Ri{QfyVZ{nAH U>fu_xtm0Sf^tbS9yo>Dr0PyYjT>t<8 literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/auth/model/query/SysEnterpriseImageQuery$SysEnterpriseImageQueryBuilder.class b/target/classes/com/metalloop/modules/auth/model/query/SysEnterpriseImageQuery$SysEnterpriseImageQueryBuilder.class new file mode 100644 index 0000000000000000000000000000000000000000..1b72c1c9ac92a22e630ecd8432bfe1dbbe2ec7a8 GIT binary patch literal 3155 zcmcha`%fE35XZl3@B{Z!2qd8toF)xPZIb5temT&B6TqzlX-TQ7sH)cX7B-x3ox43G z{*(S0t&}QND)kTOA5~@6cgE-3L6Io=;T}7l{mksl?9Tb0f1m#iU=a_B$Y3OoQ43k* z7$zR`eQrD4-LW^Dk3~x}LrGea%FoA1&rlUwD1}%hM!uhV|Rq+j-yo9?x=R) z2;b&`-ZcZ^*iQoC9oSn3{ykR9mE%kdbZjsWEV>q1>IS zapH9gQ!(8-{jwvxp8BMPDO_L}lg9YNgRU6XT~W#r-0kUJvM`M|7z#bz z?>&cMGKSsKo{XG$)50v~h}!Z5*P^{l;flNsv~=vdB&_CfnPKU4fhwYeD<(x(86K5m z&h+9D8~4{76ZMxC6Gcl1B?C_@+eKW%d>+>=+`v0S)euf$$nSF}5Sza++=%-T7E85~ zG%`tbRvn+($(z9(wRZE^jB)VuWNYwl{F!HvWIheh=&I9g_kQw+1;1+JDIQFr&H zFPn~7c3q{pmgJMkx1%~uwP&vhS9m71Rff?TRW!qRL%L!k=ro1*kkdq?ty$OCyCHi&fMn2eW7<%`vLbj?SA3WLUr7Yei@#+DsfI<{rcJk{BzIgA-r%BPJg)oMYj{y}nqc!P623L!&rO9fs_tV*-7=8otO zx6MSNZ3thlE8m>DlzQ!Jk9Wh$^v82pDWZnEdE7In&nmDBm-yrOIE{bq#QZRJ5#J1k{hz`oY5emi=7)KR_)`h~ zG(Jt^Upz5C%xT1*PVi^(SsH)l#Qd;6BK~ZG|2e*(l$kf zUFYe#NY~6Wyp^8xuzu!J>!*r45r2&;%*z+B?i27ZD=9Tl4+(1`9MOMVnTpn(tb#1`Umm@YJvI0A849BXD`;u5;Zf_V_EOM z=Q+c|c*aQO)0!Dq^VX<%(9-ckc`Y{? zADlF|W-To@p3_aOFQblVPYZqPee|32dOD@$B9IVJ5JX5q=t(`RTN@-)uWBEvK^QeM zA_{7uNZ9ajyO2<&rzAA=A5n@dY*^3e`jIo;jFqY9Q{8CjD# zO|`VtCTn)Lc}q{nw@}#=;cizb_!?SBnN+h|59L)-Hm~w=?i@a-C9R(J=LGoc3ci6> z3BeJ~>f@Q3R<-+}wgn<+!#8EDQqV4F8;S;UnCKQwEMp434h5a)l2A`RpR>u_T*BJO zUmJQ9Jc;!*->7Pi_A-3!XzPpMd)O#rlY-6YEwO^Lk_34|P3N_p&r4{lWNx2X-Muw2 zhqfx%hV2rTWYjUO*T^PS>lxkRx>?gwvz93#>nF1v;$!m6=u>%y@~PbQ$~Asp&l;=^ z0U6(yu*i0_Zo~(*oUW$z7uDf3jS=0Q&sus$8`4dkicQ(9VX2nR4NK_kC)|8N9bqcO zC)UOdm1Up^V3A1aYJ4y`s%6w3`Y)xK$(%keW^=v5xm$ORAMM+6@8+@TYd7wm`uN_> z;}X{Ni^LvQjf|c$^6|{%Fjq6j(|JF2e2>`NHeE}n$Q!ghAz{Jo3De zzAX~!iV3`5Wc#4A|EY&*@<88EK&IAOySiJ z_wMfZ%EJD<$aSS~>|Ei-_1mYf-aUOqLd4DO{i;ZA)3*DNmNRLey<-0o-BRbp#*hfN zAY(}UNQ}Q>r(jA@nF$Y94dmjrx8)tL?~VhP9mS0trjq_~^?{REUtK{BMYBa2IP<3C_zzfvfd!cBv|<$8O?zY`zNRZMayV1V}PU zdxTrhc}~L`)p863VYyZj-(g#0i;cFj82@&$cZN%q3!K@-Gu68!MNM51VjpLL58)_m zfUi-x96n9mprt0q2Gnua-N9YE`v$i1bbah6InB(cnF7`J*6UhJcNl546U=F>HO_;* zY^2q)8ooOp80mcACjHHE9{SNeO5CHgJIs=~HSp#rs-ozhR8!$9u}Vgilj4Q8=Iie4h{R z-8FnFm!g-q#X+4{mN0(LLVO>ytUF z)6{6q757=hy=clfD`91sH7glO#ve%czo86c$D(+QcaS#TV*3z6mAI@@{sC+DB0lv~ z9x$;3J1OikIa(#|n&pV6J;ZJzc)ct~40?z?MDS8sj@auVhKS&0vK;Y@hxj2L#j|*h zh<)5?6@G+9)Zi!BPx$~fE&LWg;Tw>i{RGv2q0Gj^zaf5$vkkj)(jMU@)14XTxIhGB zS0IaNRlaE}kfKHyhyZAKp5LWJyj@lxs+&u+a$X`{IV%t~&L!%cmxx!<3PjCwiPp|b z#7k-gqUcmHQeiEo!)Je1O>k*P%A_@MMoa=7#h%jmN(D$zGTD7}+eF8z`+`f(hpL?3-n zdM7Pi`lV&`d&!*i|gIA1OSxqmzFU zfv$g`HX8UGjTfMFMFUr{(nG`&K|*4QP&6noq0iBD0d>(}G~@%VPRInUPK2Yf0EJzU z91Z(G-H954x)YITjQ~YlP)#)A1FcKc60|O%L~8{|aY2+kP~akuR_&_{POKhrjyxNy zUmypQ)uI`HhsA19#WM3(ZM!ZBR0vZlKr&NoZESbNcq~K-lZ4;X0@V~J@M)*rCmeI!Fu=FJ!am1SW zMYvAR&2e%-yuQ0J^aRf)@;4~FD@<~~^!19RD4P~HDS7PH9Ck^(-IC@2>-99h!z4Y? z(DP(qy&Wja8hS<4}+N#SVF8|qGk z?4i)?5TnVNwJsssLkuK$mTV6#tL*mO&Nf}QSK}C7!C{^;h+pDWN>y~!VZ6q3SM%Q) zqc}n-fDLr_>y(1*WZgsxw_EItM=8m+6aR(CS5)wQH!MkX9ABfpB1Q4JN+_BU^Z*_v zP^xlaAs?)WoU3)gaw)iouQ1?F371VN&Z<1diF2y!vDt35orV#8cDZo8a56uu`RV3o z-8F2ujxE64=HsNH)1a5T{wOWqK^%93_a*uz#06SnpWrFG0mV9}P#5c(LSrl%m_l7LJ(gtVlY^t}oZHavL4N0U$i+vNSwk1)Q1GXeeXwZ)T=AhlaM2``TKve7U zlFI)qI{AR&)r1?KTd)_;({_U_Eh0Zp*mt{Hn%2GBy@6kIAV7tLHz|er{T4sJW0e7# SIE622IK!&*4$k3^i2fIGgVB`$ literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/auth/model/query/SysEnterpriseQuery$SysEnterpriseQueryBuilder.class b/target/classes/com/metalloop/modules/auth/model/query/SysEnterpriseQuery$SysEnterpriseQueryBuilder.class new file mode 100644 index 0000000000000000000000000000000000000000..1997afe6a9698847dfcdee622ae6501a1090f4ce GIT binary patch literal 7095 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 NFQE%UkgyI%{snXRnXLc- literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/auth/model/query/SysPermissionQuery.class b/target/classes/com/metalloop/modules/auth/model/query/SysPermissionQuery.class new file mode 100644 index 0000000000000000000000000000000000000000..07f650ba1c6d97f25b2d227d2b0753477b549545 GIT binary patch literal 13224 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 JED=jd{{?R^87}|; literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/auth/model/query/SysRolePermissionQuery$SysRolePermissionQueryBuilder.class b/target/classes/com/metalloop/modules/auth/model/query/SysRolePermissionQuery$SysRolePermissionQueryBuilder.class new file mode 100644 index 0000000000000000000000000000000000000000..f10d6f25f29b37699c0d9a52368faf2155a1e8cf GIT binary patch literal 2097 zcmcJQ?M@Rx6o%g^(3V7W?!?Q` z1Ve&}7vM!1&#)UPbVUvE$Ii#;ndh8&XXf6R=o@MCD7uI@_L~jDAG)^JS@V2fRRzqm+I7&6GhO%3Z@Gaib>t-Sx z>tjoJTUK?;Ur~-&7G6X8zEtijV;+w-KW$0J79K-P+LTe{Af<|O-xo~^r_;!o_;HV@ zW!sp}q>(eGbaOvQ*-l`9p>(1oQ|QMzqs}11bpB{Ef0`H8a-{Q68W%9kFxcQ5VqUp* zu3t;NP9tA)SNjal{+-+wx~e@%$}kMCv|KG4qU>%;U)CHk=ekOBO^Q>HT*Xn1n%c0Q z3s-nt3!9d7&(k?EWGd1XORYvtc&nTi8gEtS&KmcmnTN)1y)KFLu5uzxk3V=yN_EIl z_|FluFN9uK_A>W4-Dly^CVOh;A~MY7PZ*pwl+-FXB!&UP9bD=Cqf1p)%d3k8X|x}X zei>6{9l@4_uNRe1k2CvJDeY^IH-r5BOdL}wSh$_Q9dqmMGK?QYlkTS45LOU0xQGk9 zu9dgN@Tpz%&@q56a@VG3Jzi02qtz^SX5VHxv~YE+DI(n8w)qEDrr0h?h?u9MQk7a1 zleovQ`Wr=}&0z`2OS{Bwjs``-jM{5Mi4~|?lwEoX^A7iYK}SAvEG~gZ3=U4l7f4henbD8$!(Ho z8-4U;cW^dZtU&jHNZqd^A980%f5XkSGk0+wIF6c&p!T4!cW9G`&fvzLtsgh3Pg0~? Y^iAWwiAWhF>2L1=dhrmC=>`n_0vmSu@Bjb+ literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/auth/model/query/SysRolePermissionQuery.class b/target/classes/com/metalloop/modules/auth/model/query/SysRolePermissionQuery.class new file mode 100644 index 0000000000000000000000000000000000000000..af8387b9493e23bfe8b6c28115b56ba24b380c18 GIT binary patch literal 3866 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 Ds#aAS literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/auth/model/query/SysRoleQuery.class b/target/classes/com/metalloop/modules/auth/model/query/SysRoleQuery.class new file mode 100644 index 0000000000000000000000000000000000000000..551ade6893c3563573b3e10411c390bf3cc5231f GIT binary patch literal 8915 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 At^fc4 literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/auth/model/query/SysUserQuery$SysUserQueryBuilder.class b/target/classes/com/metalloop/modules/auth/model/query/SysUserQuery$SysUserQueryBuilder.class new file mode 100644 index 0000000000000000000000000000000000000000..f1e91de248e39607ddd993a2daf707b399626e01 GIT binary patch literal 3699 zcmd5<{c_tx5dU4i>=>1NlD26{KX95jO)8*30XK!lC5gdJ+B!`r0cI}tk*JY%MmmMb z6YvT=01p5&Wzs1#JOB^HuqVk_jx@n!@&|vMbh}>t_TzSM*MI)?>JI>m_&SFk^k&d! zpdSMa!_WBvH*N0hn(I5yMNKgb+_fA_-DBvTEo=@Vi@^+X23~`~uu_u^vmq3>Z7G{( zL)Lv;cqaGNo+gBCe(wwS(5xPMPd(v2)6c8glw>js7} z%#ig7!QlJ1v;}tp zT^9{Z;u3=)93|YQYk8tfcE!cZ^vkYr1MxQvOlgJv%{}P|t?jCTYXL_zxMge3TL$uh zer`vsg!V?o}g&@ZI??`Pw3!6EZcsql447`im9Z4ACQkV|7?ThvA7;eNJ3UjnrNLn&V z>HWTe4{(R!e1q?cl5}cZZCPrMcAnynqC7Z?gZ-bP6I5Un)D-U+E^`Z>|VOxRgxwB12z^Dw1KSVmV^XZ|n$ngVTpvTGqI|$z4m+ z5wlP2S%g%soFW0!N}LSXPDHzKhUmi&h1!$#N8F`5f~uE{|0b^RpJ<+)L*K^nTZM9# zK6NN)mEBn?XdOwc8qe@Z`gip8&Twb;R5nw}WR+}P0pkSHZV%CE(!E}lzFQN^md@mn zcyGC-r3qq9cxqL8)XIkGjFhKb-VAfa8ydh`4(oW7!DD?{JYmSUby&`U+!to3D!f0I zc}+?8km0BJ(MN(I=qh*W)CBVtDfj(mF==y*)A8ZPVN;}tZ^z_Q?z;%0L@l^#QP;>~ zgW<=HIK+vl;m%t1MK*u6)l&7o)im|K-77T}Z-#-S?smZsy2*5G_i!Cr%s%u=>{02Cygs$_>iapdVfUk z9z9khcr-vHcr-sGcr+#?cr*(ncr*5CK7gS;|aE{gpt#MixXkDgt zh1PXi(?__OUW8#i&!^V&3RWY1TXel?eG7#3uex61)+@XRoTP9eMPWb6q@o9(cO2Un g0k41xy|ZM*Lt0flC2Evpv-B@ylZ@NKGi>AH-&_<&*8l(j literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/auth/model/query/SysUserQuery.class b/target/classes/com/metalloop/modules/auth/model/query/SysUserQuery.class new file mode 100644 index 0000000000000000000000000000000000000000..1df9569fcc445b077bedb35cb31eb3c7ce997189 GIT binary patch literal 7658 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 Ln)rzRK>B|Hi}`;w literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/auth/model/query/SysUserRoleQuery$SysUserRoleQueryBuilder.class b/target/classes/com/metalloop/modules/auth/model/query/SysUserRoleQuery$SysUserRoleQueryBuilder.class new file mode 100644 index 0000000000000000000000000000000000000000..554e46bf14f03366551c0a52b12bec843e15af7f GIT binary patch literal 2552 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 literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/auth/model/req/SysEnterpriseImageQueryReqDto$SysEnterpriseImageQueryReqDtoBuilder.class b/target/classes/com/metalloop/modules/auth/model/req/SysEnterpriseImageQueryReqDto$SysEnterpriseImageQueryReqDtoBuilder.class new file mode 100644 index 0000000000000000000000000000000000000000..7ce6e509d5e0a7d51726234243adcbac92cd12d5 GIT binary patch literal 3257 zcmcgvZEq7t5PsH)U*ei3BtV)bra%MOfpUF+Goei!oVb{T5}K;w)7suTOU}3EZXGGA z+TYQi(MnWQRO%1tk3yaGo#QiivMho8;a+xb_L*mAW@q;Pd->vD0PA>=MFLZ4Oy`h9 ziec^vKjxOrotCv%e%`hK=-Pf)RNW7cFGFAw+;R>!rbAucgu*Buh|mlqNR%kU)ww#9=i-p6VhS97?A>qEKWPhm(ObGs|{erC89 z=HaJKsTegfPgz&YVGTDJ7Tf$tl$F!q`bVh`>CMyJ(H?^n273dG>g98=%otJ(%MZJb zmTggWj-@B-w%BkSrMZ^G$;8}N?YcU$wuK{H6W$WTbeZy-VYVh6vDM*u{c5NbN7WlRLuw6G@+lG8UaZwOq=klj~Zw;?Lh zY|JYoJIyUKoiKNWr+1WR>Nll`_O#18elB~nDQsp@##S14O%1CstPYGy=U5#H%eU>9 zwF+-&<(@G79u9n<=!5QXr%5eywWicjw^NEPA|x4_XgXJn`s0v(Oc@R!%G9v;CAFjs zc4%XccFf4HL4z*H<~qB1Dcpk1__W8K4ycKm_tQ4H&WhB!s}2>`vdukDP@x#B!lhAT zxEgVPoLAG>Ww#> q9}bg;cZS0LO;47`xAe@A(G9w`QKiv5>1ODx`yFO*5BIT$rT+nAKu)g! literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/auth/model/req/SysEnterpriseImageQueryReqDto.class b/target/classes/com/metalloop/modules/auth/model/req/SysEnterpriseImageQueryReqDto.class new file mode 100644 index 0000000000000000000000000000000000000000..be728e729c6cdca794316176343a3326c8bace16 GIT binary patch literal 5363 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 literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/auth/model/req/SysEnterpriseImageReqDto.class b/target/classes/com/metalloop/modules/auth/model/req/SysEnterpriseImageReqDto.class new file mode 100644 index 0000000000000000000000000000000000000000..8e4672ed7743d056011f0d7fb138d9af42432603 GIT binary patch literal 5312 zcmb_gZF3XX6@J#%YGrwiZGj;QkT|L1+VYDMlhQ`UBwzz^YXh~xZIY&CEpP0_@~)9q zPD#@y5E3Ay32kVh$xJ%aX+u7cP^K6tFihGH=}iAXen2fSpZEh!)93E4tknxOGt^^Q zXU}=gbMHOp+;i{xpZ~df13(|nD5#R~V$zz4&*-+6N?F!ye8!r{ru0l)%i2@oK~Kfg z`hoc9!OS+(*3+|TBcl(_Xp{Pgeqg}1TJC1pnl(}rdO8dV0TnWW5`voy)37&7sBUW? zt3e1g3c@OCp-SkxuUSZ_GA1N64DHwEw0KH0C*wnwIoT@)S)rmH4H8tnFn?lK`mlqv zOzLR|9#OFpt0dGIVv&0e&g#Y3t(KM2HPgYaRv#EP8;4N9#pXw z>&Ti+>zb`kY_XSSo3)Kpe1OW{FlYOaiigom%A{s)JCM~#+0^Fa+%>*mPujih&kOLQ zD!zdh3G$?F4{}YBwss%Xi9i^w_@;t3743qyp%5UKiCNLbFd4zup`sIA66(q4%Ql&t zikS2957-GF(YG8vBfkkTeA&LSVHFz;hC4U zNp6Ms+=jTNu?rLc>=6@&79UMc=`&g{^EaVql4)aBcyqkmhc|8=KRP&Y=lZdQE7xwH z`s~j2;}TZfJpOv_!bc0&4=r5zU~oXfsEfOG;acva6U08=m3#AC?!7Cw-aViD!y9+5 zzw<=b;{1`ti=Ql>KeX`IkE!VCx^?RJ3s=uBes&}G$D>qi=;8p2C;voU?)^i~F!e5L z?$a~5!=LOO8DhEQj(wQBcJ=1zOSey7WX3a27{>H;hSS|EW+E|4b@^0{iR{ZvsrZpt z4&!e7lAy6L@2fX0*C83ofLp2cLx!pE%+8GK={;_`)_Un0H0LTLEHad`X2z}Q_zvCF z)1s}AD>7sywbYo#tTVwLPr#lsnBk}IZzW`xGj69@SytEWV~p~!ZckYgyS22&1BJ0> zE1^SiD_QM#&2ItWtqSf!2Pwkk_l3aK=5bErDC&;hHpsL2`bB=ig?1r8l2zQXz3$3& zTK1HlW*vyYwTQDNPBrXIX$e+dfAqDj|>iP32@`gwC3 zHF$pr;iQB;cZ*t^G0`V=Hv980o|p2!^uYWJc`5&WQad;2pvfN7pVBfJo#A}=ZlieD zJ_V;FJXRLZN?}s)TL};SZz${7jVT`Cm7tY(%0UECC9aN?zsH_k%kLq6hBMen18;og zhFvu9ZdY#DO#?4-<%aLmzgc{067-BTs(OvG5w_dB$lM2sw5Uig2s)xvj&GsS#@?06)P#eisw*{#Jpg zu9WD}Wr=vHt3cFPO4PP25iffch?+`?x|b#5HLwCvw3O({Wr;M5quNPRf`lSb!C1#U zlna#n(T+Gwt6hW_ZIM8?>XJmuY%{F1;uK6kuS8#Wuk>#1di3Ir0~ejPX0**y8eOMXy6Mpo`u>K4P3%wc|Y{Qq=mT{p6oR@Fp{OE2ArGWPLq1SXqK2TJL^xU_Kw%G56Ak-78xyqz zZA_@qS^-i$5T!gQaE?o>_H_ogR*$$#UaHkEk-`kSMHBuG6Z;sF7W@Skb=8RBQ_NBd zUGCnATNJ`-nSDFYVPh zhF9=2u2IHYc$HEW6Lknb=en!;4}&TEf>HpRneNvp$vm}s@H(X+6TOB=k#>>9e0mfQFyKriYCZ;Kpqn)R(Y_X4^}{yYCW)03@+d+7(ACynM=W|vW<=< z-SzO&X|;oa5$EiBk$910e!BVT;b-F&Y`%&Cp!D!@x1oDLudjGO^FLv3d7*I9U&gbg z{cqK>r;4es63Cd9^2%MvDx)q>KV=6 z`9?nH8YT8uvvY5%b|lf@1CAtmvFvQ5CfPX$#bG5*6w&red$WuqbgIIerPsB$aFm7s hV=b|8d1d1Faem%ozX2k2;ma3(&93u4e#6ca{V%Akng0L) literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/auth/model/req/SysEnterpriseImageUpdateByQueryReqDto$SysEnterpriseImageUpdateByQueryReqDtoBuilder.class b/target/classes/com/metalloop/modules/auth/model/req/SysEnterpriseImageUpdateByQueryReqDto$SysEnterpriseImageUpdateByQueryReqDtoBuilder.class new file mode 100644 index 0000000000000000000000000000000000000000..b6b729b2fdfed1d2fb31d3c6d4ab76ce9d40407c GIT binary patch literal 2639 zcmc(h>2A|N5Xb+UHgy^TO-s420tJ##F!yCzpyetGoqqB-00@3=~MP0#klbc4@}=gk^dVzTul5MJx4SiG&|Xh&L;f$h|UM^*_}*{a2G zquiwp;j)(YXj={g$TMtNT(O7YcDLl1SC)Yxh6i1mm=LBc1~IHRYX`%-Lbn!1zIQu4 z?qG2)i(S}lU{4Nvv2Rrh%_`4!=NXJ8?gZk|Ylh>6^4biuiZM|*!y2OGJdndd9Aenj z;B_%2-6~fvY_&i=UvXFY3|Hc?Xy$rW0-j;t(}41)A*S6W+qWx@xaGQ1ab**oVW{lL zMn%@md%_hSWopf0=$)d3W*8{ju9yiL72!SOG*N5IDtG3%XX|k!>{Sakky_n`IAQBI zbwbGC<-bjj;(s(g|4^s}S$oVqPWOxOD3(9E_GeYT{zs?M6@7g%%oP4*Xlbi6O8z-( z!^B=WV$rE!$j-{ZtBSj}&e&2%ckOA7A@+>$)qUwxDacPsseI+}X1F{4Kp)O$aRC<% zT++w&GQ;S~;%t6e2v6``URBbgYx{lt>_&6)2x zxbF+f^Rdlf4U97!TNm@BP#U= zrAba75u|^FdM5qLw50R}>|=Y%QF?0tupOiH)=)j=7>-jrLeC#Om13MgPa9;lO#qD2 z$`O;batuYv^tJ zng52tm!(hS!Y6F~g6+wUgfYn{#$*hqBIX3OI(EaF_Z2%elA2}g2R7mkCvej^O{5fU lSloj%ZP_5sQk$W*&e3xP*Jw0Ex*7TkvCxm}n7~c!`30$-R5;xxahP?|kgx zm%nb`1<;8L0hBPjp479^EVqWtLJY_MKmF(;u34%z$8aQGB&=g;Oenb_gi2H~l+UbCz|dPPvWLi68NpYF@C0fY zf=NZ|o5?8|hT7)%1!Y!=W)y8QIx=yAC#_h^Ss}bBgw5E(P&&yia+Gc3(dL$7b#bjM zLmjpTP#?mRLX)ce%LSoAGgGMWR0xgO#;}1@@Yur8U%Vb39O9%7J3?r}PU0l3nCTvh zPCH}<%kVUs184~$g4R`fCM-kMCK&>=N+!ogUSrr*h(iyp&WTtxrAT`SyAfsBoK>cH zkFF&Z>$Gaoy_#t$nq@K^^n$r3*J8D-T@uDf0X)l4W0R`t(F8YCC8NHfOk~Kc@MwJ>xuwnb4pdBiDa5*l^DfmiknG8 zoffAVwk&-2*22w;_dmV++xzeR{>eKFcjoV3`E23)4~e(M&%b(b^~(oWZ!BJWyRmm{ zgm{~9vX$Y@;=TA^O9j~=InJ((s~R89Whb~X=J2%D!~)u(vWq0T9I{Yui(4SHjK z>@9V!paVLfXenwLn&P@Xm79*O^?_$))xoj3XSQepp+Su*L{COBO-{tMtqad>Wdfl0%FZ=37GfuWG(*F`i&EG- zRAL*wR_mxwdIlx*OYIQN_tJ~0oW_0h*>B=G+Mq6E?ZyF;D#bw@B7qJ%(@3NE3Elxa za|6C_XwDF$Z$FKoUgNMk@3eQQop4V^Xd{3jLNOA+5j;=hY9ML~ z3IJ8)18sjS&{1^5XWP<2fWjJor1d%i*J$QdsoF-`2m8&2wsHjyWILCffB$VOhxd@1gn00Zf#9Fm z5J2!DHU&^ee?j&TTbyYrgG)?*9x;+=a$RB$(e=WuvS37L{ZC$93N#UN1Ej+;`am8! zRX6M;7?A+K(kRo|Q58EZb=u_CSH;pqZLq5K5(4e>*nVEDH*`p1BP_W)K|wfe)fXmm zpM&ZW>B9jGV}w+au^%UBR)R9@!AVlnhaJ?VkJ3!CNjnbd5iL+37-Woy0%MOzXyv&? zEYw0?5?GRvRxgoQUa%!F=33oFqsYw~Ven1t686z>8*M;-3Oa$|5mxxh&(9>+~T4^pS#<5dyOFIns6=YqGA^hHP|1mxH#_O=>!BSHTiH%t}SA xtg;upIVfYC?kU0P{2KZq&d`QLJTaW5S&+ta^ihzcr)rzQAW~FLIVPbZ{5QQd%pCv# literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/auth/model/req/SysEnterpriseLockConditionReqDto$SysEnterpriseLockConditionReqDtoBuilder.class b/target/classes/com/metalloop/modules/auth/model/req/SysEnterpriseLockConditionReqDto$SysEnterpriseLockConditionReqDtoBuilder.class new file mode 100644 index 0000000000000000000000000000000000000000..9f3c66e90b9bdd4d957dfbc8ebfbe5f6d37b7bca GIT binary patch literal 2856 zcmcgu-EI>{6#mAEvyN*TCpDpzmWC3*4wUVGX*O|7Oem2YXfaBKxM94WCWF^IW_LDH zE_>Bi=sWbLm8htw)CcGj^{V2`?nbdU7BK}ymUm{(ocYf0oHPIY_v~)~t5`20hY1Ul zCFC*1P=3UBx$SX(+rHC&BwWofwIY3~>kJds+SW7*n6^+X;SH1+daml(J)ybhDb=@o zsuOu4w0Wd=%tCl}ARgPTy>Q*vBIpM)6iwxJ8_MrUEtP*)JiejT;!zB1k@PwuAYFv7 zrQTy$Zoa(aM3`etc(a5Vlo^Wdz9u2r-i(cpwDjzz47Fonj$!@f1&uJVh*?yOk54je zR{y{9SruzrMV!Lh7EYJ&4$ce(u%!d(Z!=iC+>6AW9~mxIlk)@db!r2oYEY#fB#W&fJYCjyZH|VgOZ$KrYU`KJLxGBv|yKq$VxM~mx_O=N1EfrEn zE3YY~Lmlvbl4;@06uvCt8osiyZ0a6qv3MX?`n#$t>_mK03U6{(tAP5@FM~xeWlTVC zalb>oaIvXWH|jfw?HHg89lS@GHG=)Y0Dsb&he~$}(V$M;l3F+gtTH@2(luCf|KX~U-?-SBuA3c9G5#ssu*okDlW$D>?lp}}zW#jNx)Nc@a*)ZKH` zzjE}WCkhxAXf;LSxtL0ApLRZo=jVs^@>pAb?GpAK2@SxlS7 e=QI{b))(|&L7i4}#9N?u+Si!IH(0|BoPG{zA~sF{ literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/auth/model/req/SysEnterpriseLockConditionReqDto.class b/target/classes/com/metalloop/modules/auth/model/req/SysEnterpriseLockConditionReqDto.class new file mode 100644 index 0000000000000000000000000000000000000000..77165afe287cd408375033a0fd888ac07990d8e3 GIT binary patch literal 4283 zcmc&%S#R7_6#ks?ESXG5NRz;{r39MNY{l$^OcH3*v<=L3o03v?XXcV|q~;#Rdny9 z;qhL}^>oXln&VNh@Z@H!&=jA8P)L%brg4vgUf)c^*2=;$bklfAUodG_{&<7VsEc{S zHMp?XvTRS6!OmO9iWGNW)E5_pqpjSl**cSDU4W@nHFT|9sfoH?P|#5oZpAT{Zj*cFP~ri;_V;Ly|;S#$`9|pwffm>^nck{v~;iG@bZ^q+)u`$fpJ{7Ev;fZLNl3( zT8ngypShN-KGqP<*)Zg%3)9p+_tWd=et7r%k8i%cdgT(`xDe#9f-~0@qAm2i*0Mom z)F9%ziiRZ)H|h(*IT1K(Tj;DgYo&#|dWxo9U$B?7gTfMy?uja~dZ>zS&g=9!-5cVl zUd^C?560-e7V279##>(5ltyv4{CBQwch?Kd)X;U97zW1hJTtr`yqaA-syjO08^R%J zorI58kS$?qu9rr6uzw@%XP2AQzZw_+zlf4rDz*%ec;Tc!leSkA4pUkN%3$-wlJi&B z9=rU_O7txe2t=1U%bs3YD(TB%=p~OHpDWGs>N(bDN4O2sW4f(jb__-jXFR)ESbLih z7OidyO8>yYvEoyZjC}p?;r*YE&6e$kQxOLYS>ktHtzo%SMgX0CSh!wE$a=##@7`zI zp6faKa*zXVR|K+k(CVxPcWleh(8sPZ+0J%r4V9<4Pe>uL?Hvdvd6DR&rlHm zQ_9%DdT>rD!+dMZS*)}(rtZ3elW2du~ zZRg!+;}5$_&hKS|(ZTUP{@(B60dBCp%8oTSJANBJ*v1k7VNF=$FWp#zrpTM*oqMzQbeuGokMJ79Dx@8{BvSxjlLH67o%n9TQ24 z?3hU9lTs%24SFu1GoQ?-nnLQumZlvFbXa4qhR0B(A$=&LL`S!=x89G#TuZQzp2iW* zR2-zck8+lz%r+e3EQRC5AK+MM&?)ar?Hj)Gs>^HIheMu5%gHhBdYv335j`# z*Gq>dB_mSnKl67p6lGABsKXk1DTdDChh2n`De^tXB*%&F!lXLole@jUP$RXO?$HZK z@41BApO@=9CRDkRSHqo*B%E8@TN8O-fEp5+p!>@>L6wrYACGg^hAi&FJk?BKC%>*v za;EyEJqq=AF0k{@C<=*!qWn&w_2)LZ(1&DGpedtnT%uSk*q*?t(CTT9egTjMU&bBM zJ`SH?42UOb5c5G?_qNP-ekO;w>)HM>?uzGTUyE$tn1)F_8K&WL1WeE^T_XhYGks+2 zBW%jYejjom5M2w}t}xwsJgk@NnJHJs2`)3UUDnxdUnI!Rr#29#;%N%C;Tb&3Q6*st cp5rXT@p=BffEu5AD8Y|S7_7XfVZuWG54k-zB>(^b literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/auth/model/req/SysEnterprisePageQueryReqDto.class b/target/classes/com/metalloop/modules/auth/model/req/SysEnterprisePageQueryReqDto.class new file mode 100644 index 0000000000000000000000000000000000000000..89ae7d6323ed9244b619b69de57dadbfa21212ab GIT binary patch literal 3552 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 literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/auth/model/req/SysEnterpriseReqDto.class b/target/classes/com/metalloop/modules/auth/model/req/SysEnterpriseReqDto.class new file mode 100644 index 0000000000000000000000000000000000000000..e2791b55ad8b80b64a2c75e6e6f276ed614c0921 GIT binary patch literal 18117 zcmeHPd7M;Nl|HwsyQ`Pi`}&$CEX7tV4Gq!ck&QLBHj6Zn#kJ@z=z{L5rmC8lXl6*F z31}iDAqj#+LLwxJA(|9H8WVL!opJV2#~B?R^+$KZEN1o@M`QfXy|=2~d-Y5eg#X6; zy6AJy_ucQ__uf5sd8azx{`J{ci0FEe3Xo4wPj7s%V=$5m4-CZPLmh+hzTtsLvLig4 z>gPgapd%64+0k=na#bu9Nem^T$;gJt&XuWn(8ITUI6BZ5NmP=c5`#*qOi@$)d{MJ zWIMbzJQxwwU}N{B5>d@>FsPCF^*R2szP>~xnPjzQgIXA^yCa;4^v8#j5gXWMkjY?m zZ#VHhR&_wXTwOypt+0~Ly7p-=s=_^mP*7Km~YSm2C7og6x@T`HYH?* zg$6B>{wOnZ{>26@VShuWiSB4`B$kZmYHu^>?F`q-OX})doxnwF>{^2?#%eUSJlwlO zL)RH}y{s1RO{_>n`l6{7=y_Kk_wYu8Zeq-c_N@pf`qmB)ZiyrqSZ>e?T8Xar${O9# z!DvcQi+X^AVGPaX(QPXuz0tw&fPCny4Z4}$fePVaw9u0Zr-qY)8f{N}c|1N43CAS+ zod&&&x&>7xhqpj^W0Z%79!$fj=s?HHa4I61YYke*%nGT?MDE_Z4cZ|4orr9Y^rkjM z!uqjqG-#8gqu-F|Tb5$_Ee72xy~9I&%3BHV?FPMv-YclQHym5Fb2vO8sCl-n!|S%N z_R=}GGx_}neSkhFsB~K-)rFDYFnf-TD#v~$ZK2)(^%)dl*}7b4C?yQK2se{ty=?~d zQxp#jdduv$tl1%)xoKQwhd~20h&Vx&++3hStI1JI2Nze08#Kg~njDpM2r(gHP?8Ca zAl%{#F~)}t+QoPs@D=tbWAH-;-N_(dMRzXH82Ye5A7Q8h(0Unb?EO81e&6BkWbZu& z-Rtl!X75K0`WSn;<>mIEWAFik_Apq>^0v5R?BfP~f-&yZ#$4zz^pHWH%s?_uRrE2m z-=K#XYPL0(3qWQ(YR~~@G=L$mHWz~oKW@+y4D<8Runt2;KV{INOyzaXNM!ia1|4CT zucylvjEsH8priDZx*iq5Iv(3HPu(4nT((7`eFvylnc5o^rAs8Q5r$lA5Ql3L?qXx zu1b2D&IIVo2A!o5N9?GvEGV!mJTM$tw^h(guOPJrqaOVYSYy9p&@1$+pw_|gjtE9? zZ#Z>JG=+9!$y7L&N(%8kyO<2)e5K!cm}Ze%nWvk)h?ki`$Vj(@l;$Aps!=z zle2I%-q90DM8gBoyTV%rFy_n+!?6?w_~vLb3dgcoERH2Big6)mUN`8;JHp$xMG_sm z7I(zM*p1}~*sJwL!yP@n{gJ`&QmlA=kz{WoI>fcn-uZL)oIi7@YvpU__MAU6a`C|P zubtbAs8a6H{SS?wcp+E(^b4a$c5`v$(b2Pyj_P8?g?kQ+zc_OK>{&o#FFpq2{K(T6 zo_ZEhFn%C?;na~uS*tT^Ee3gfWZ#ATpB;PlsnK)$vaO6izx({iCor{)9ev>9v4f+B zUm4%~z@`mYRBIJv_n zu3ood!-Z4#kM8;W_{e9@pV@u>)u+Y}JUjl(EAqyS?Rnhp#>I^vy+_`s23KpN`(Ebj zkhL!!J2HCqxS*RaJpT+jGXC+?W4lpn&%*hmuY7E5-~RJwpLy-vgNx>mKL6C%(KF}I zd;z7-`J*p?>EiA~7hZh;rNy%J+>4`!pOme&DWwbPkB&Y5DWx#>#OaGqyd+3NN^A7_ z2gmm8&p-{zc~R<&e)2P;hmWF);&8&zyf(6P}K z+vO1*4c!Cr!7cF}9XCf}kp$29&}!(8_l5^HhY@0kCaqJF>W?Cvtjq2{giDiZyVaOC zP0!hkWnxVv)gSL$A5P$Wfx{76t49U*=E$+D(=!BDZ*p+;o(MZ3xZOJ;v<0tY|AX}y zF59jLdmT8`UdLu5LbHCvDC;{4tpxm^mL1pKbOiMlDy z9f=~k_93b#_T7hS*sV3Fky4@`y7^h8Sypi$dT|C*HS&Q5S)tdyMaNiHY?oJE;y`Z0jv=Cm z4qug2R0n0;T*b%~Z6HRt9YoOv^0H*BiK6Og=8P+k(bY7VEmBHKAT zdqobPqS=n!S(?MwDx1yp#U5U5s&OxoyTb~m!B{|qRx72nW z;IrC!es$aIXL{UqrR;R7`_XGZNRFA$o=zN}) zTr=}5D}%OYRGx~f6aIM#=E?!oSOe8=$6Qrqpyzx9ra8}A&7c+lTtQ^>qUw7Imz3cT^} ziQ+wHxfl@Q5s$kyJKA@>m^Z~a7dbt8E@G#9E@Gc!E@FpmF5;q^i?UW{)>_P#V=j`A zZPDejZ7$-XZ7#A`&&@^bb*+Rpm!6B*S0C|;s;LiXcyOIz5IRNBX@`1kqfD}tU@RtCPV#x>o3IK8} z`M_TTK$0aN_znQ1SMq`H0zhshANU>sWLENlzX5=>N63im?*JfE zk`Md<01_klzz+c+H$x6p!uLddmv2(`L}mJ}31UdBVH z-7RDl6haoqLuis)=%#`~Nc?yRO>qmYE+~Xtk%!Q9w@`OMA*7c)gl4*hHWU;>D#}A> zj$7!~f8vWL(rx6mgG3L%B) zA=Kp-I#5su$wd#LHEy9p1%;4|^blI_7CKr`2$@R{p&qx;@q$9gbb1JFb_<;>DD*G% zbMnij)q)@|u4SRQX$pMNwL&&Xr544|DC<<)6I%X7gg z{|j&VnZ?ShGl`bxf>ZwgyyfQQky2V znr$}H{gw&R{Z_kaGO1mYOtala+G|Y!X|FZWoWP`snl!kUXwp^Y6dUOgYbr>OSkug@Oq!-iQ_X2M(qqLL2F%wFsn>R;Rg$Nu8Rs$n3O{PFagVI%O>}7c*&zCM`CXWJo0^ahmbl z-VVyMkFQCEb>{5j9}$MA#v8+C|8Y@+H-;5D(DG+P_)3Rq|^RV(F&`I&iURDZLkdbq3Yj_MvRCFuxdq_FD)j*suMGOkBdpL>cw2&elZzVgLtQJr??7Mqge0T zA*R4;5^-O*m

|4Et7#X|P(v0pBb!9agJ2jUIUjkY34p`HD9}+9XLRdlH6KH=CtQo!|xQb3#Gkxdi4Y3&3EZ^7Z7h(yl z*}k9B55(25=J>|xyW(xILjE#*>-X)j=K2jfC9Z)r&p(&;i)&%c_b;N43k%i)|9aXX zmcr`rZ>EU24%R~dFs&BX!&>D3Fx@0>fYs?gL{r6$uonA|;+k)QwL~n#`{zltHc(mmUE%+%HuTz^cEB=3*q!vwKxE9S4{!<9OAG#KC#P1$Td9~#5v%j3Tzj`Rm zgdbiv)ZhV#jCzerUGR6lA%mnr&20Rh2+b39ORp=rUM{>7>z4Lox+$-ldx8Ssl2V=q{^LLX}wv>$j?Pw^bz}EZw?RRR-E^84@zGkdcAzv#KS8 zwOrS#&OrBDH4>`HLRjHdTYIfq31M;9wQ4iagI1k{>aq})d{t|oRWBi|_PSPm271J5 zkWfPw!X7}?ddzB+5SD*kt1$x|w3;N;l!dSR-1&{vJkcns@8LsDIx3_bS*OjowV8|)SiW~k5IKvSra6LErhN$ zK|&KfmmkrthOi$0e%~`Ja8C8o$#hzUO?(2t7MuuA9#UsT)-tCVi@ ztrhQpRYob_VobEW{Ot3!;XA>+{CrNlF5U&Jg1#YsCc0r&(oe*<#2Q#t^hhF^uVeYM?|IA2&+Myq1VJFSdHR4 zn4&ksY7#%EFN<4XHTx>)NpUNz7GIF=6Su)?_1#GQ;&xbVzT0UHTEX(;8>UY2URdqE z{aB#h2WtXP!j&ti^9^d{ui%#p?Ddhq7H{BI#lu}(F`1T)py(RpYmfo~g8T_mSdfTX32 zHOz7!&7!DUmKS$9u2B6=e)Ll)maWBWixbcF{1PhYChCfABG<~L)zJ;r zUrIx{wl2AvZm!`Ho6EI$IW={ojhEhNuHDP5tebAStfq6VUw(bvf#%EYK&}sONkVr6 z+w5ZE5siBO=s10=D!MbRZ>=-AJ97nubeC}Ucq{iu-86ldu8fxMn0X~Smb+tDOip*N z{R(w2*TXBRs5?2~%5^f=&nqmdyE^fTb~V@AE3bQ<HDs2hsXb%{(ljY#mZxb-$gD`y z^pIJZrkNqLDot}jrje$3A+tJ79U-$OO`RdLHceND%(^sP6Ef@5v@~Qkr0Ir`*_ftf zA+sq>t3qaTnz}+}OPbb%%+@rm51DOg>Is=Gv^b|+E-g;~R!EC8wUyH1q-vG4IR9x# zi&K@=(&DUQjkGucSSu~g)zwLh(`xn7;tUx7QTajn9nMB+agwP?TAUARmKLXOTBOB^ zl~!qSLZnSvoVzgPi;{?mPH}^E@`CwN`64;F&lkp*#23St!56??=T38Xxue`g?i_cE zvuB**;ye^5i@0GyaJ+ literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/auth/model/req/SysEnterpriseUpdateByQueryReqDto$SysEnterpriseUpdateByQueryReqDtoBuilder.class b/target/classes/com/metalloop/modules/auth/model/req/SysEnterpriseUpdateByQueryReqDto$SysEnterpriseUpdateByQueryReqDtoBuilder.class new file mode 100644 index 0000000000000000000000000000000000000000..6627f268a4ce1c481a1dc569b971a74f55011da4 GIT binary patch literal 2539 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 literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/auth/model/req/SysPermissionLockConditionReqDto.class b/target/classes/com/metalloop/modules/auth/model/req/SysPermissionLockConditionReqDto.class new file mode 100644 index 0000000000000000000000000000000000000000..bec3c912674b5928525f648b86de634514270c5a GIT binary patch literal 4274 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 AHvj+t literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/auth/model/req/SysPermissionQueryReqDto$SysPermissionQueryReqDtoBuilder.class b/target/classes/com/metalloop/modules/auth/model/req/SysPermissionQueryReqDto$SysPermissionQueryReqDtoBuilder.class new file mode 100644 index 0000000000000000000000000000000000000000..ebd515ce794849259bfdff5957e7bca9dbab7187 GIT binary patch literal 5643 zcmdUzZBrCS5XXB!x#L^|BH}ZsK?Qs`jYgw@ibqruM3fU_j4{LA2rGL#$L=gC@*#}`Bv+G3NTNy2YStO#mu7`oDb9Eo7TJ zgXGBZx;x9&68X+JaF%?XfsB-Bc!wPriM=?ib?GCLV$VBpfxLUyy)*dEbf@URCAzbx zD#A+O))kH~`9E{u3cY1c_;R06@3cp8d;Lceg}M(mF2)r5Q0fiW0g zk1o43$YvrU<$A?Q435X(wgY$KNDZJ!;@)+jL@5-I%I6eUQJ8}-8H{gh#S~x??$c6z zz}W4f#N@^6B4L{~u%)Ll;fbKeQ)YoAaX6-)P6Xx`7;?FThvu zbq=N-cnC8sJ71@U%V(8)k$Ci)!I|V(>%uTPoERkYGCf#RW*vA8PZ%7m@nunxeub-N zu3Exxq2j&@87n7YiTvaIK5|(8*Aw@jUp!^#8615Q`3iU6l)vhRE^hk?-RnQ#=>xNyN>F zP(6?#YL0H4dljmH*Y(N_yE?!vz#CZ3fk!pA#$d47pX;y6Wl_}K>au%}SCkCa82pl4 zQYKJCA8@~lf^BeG%H^m&YUiKuv^-cw`IHj=A`zc*Oc+E7<>H)+`XLXJvHYfEve^wI z4~N|9I6HrW1Rz~W;?b3q9bHMf(Y2w?=sQU=x*8=$U)Kc~8S4tG#UQywj)cl0(}=4$ zbX`-C)s#}rd!&n+_Zn7H9F4PK2F{d^#ku71FcesT20kzVIl!RP)*48g+8jg-`nL{6 zsjt@o>eoE}ECA@iPt^IqU=FPgyq59WM#|grq0Y8^D77sg>T1h}BHHqyhPHetqb(oG zXv>Ep+VY`O->K~9Dr}3JqC>;kR~!Wa_)Eh_!Yml!A4Y{ z4lyVUHgo=hIv`s227VWOm&V_lnXlK6;givt|NeCTzRY~R77d?_R(>D6Ov}GFGheT3 z!|${BN8tN3{-Ml#y+;iHh{f+upWkDd`Fg(@e!s;(nLhplnfZF}8a^4V<3E_rKb4uU z>ww{t(aJxY&Oe=*uWO3olhMi_N#_q`=Ii=o_++&5FQoI&W#;QzXZU2a@-LzVobY%u&A7Jm$0rPYU< znfdyhG5j%$eGl8S%!bd;+N9rcOo-ipMQp5viLs$$0Laj!k?fwKIdltgvsY4 zZ}A9w3wyEc!`6%K5Vm932C$vNb{g9dwsY7nV!Mp(Dz@v`ZeqKIZQ>o=OFszpnL3+# zrY=Cm&{m)m0#L9DhyMlj(!R|A literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/auth/model/req/SysPermissionQueryReqDto.class b/target/classes/com/metalloop/modules/auth/model/req/SysPermissionQueryReqDto.class new file mode 100644 index 0000000000000000000000000000000000000000..ecf49a792998004116216f8fe7404afc09296a6b GIT binary patch literal 12930 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 WRFpzkU;GA5v{IFrCT55>(tic?r@j#Y literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/auth/model/req/SysPermissionReqDto$SysPermissionReqDtoBuilder.class b/target/classes/com/metalloop/modules/auth/model/req/SysPermissionReqDto$SysPermissionReqDtoBuilder.class new file mode 100644 index 0000000000000000000000000000000000000000..0c15f3562d74a96a8a9150e718b410727059d6cd GIT binary patch literal 5543 zcmdUz>rxa)6vt1avdcOKL_|e{mw*CZR-^F-sJKKWK_IeXjJXZFEey;~uQNTQ%!fQj z9wVtTWy)0L0rF5*&YA9IXXp+!A;pJ$=ye1iRPI!SQ?=aXiGP=|SMd&I($$|agFj%aKM!CVI>-$19 z%MDSFeIAwFSgulo`{j_oDlfi{7I@h3qR11$6aH#iiXn^be(d>m9x~|g>KMsvJCs=w ztc+9FA2`qrJq-2+Zi6%EP5CU!(9>SM4jf9nY8V22cG!V_ID((a*G>HFQ0lY$LipSb z68bR*2H-flMIyw3r`=`($ya!oxP9orAPv6QbVDA>evW_}1mRNBzn<79Y`Cf3~B3Tb?TIX=g^rq~G|bpbWY~rt^@ZHPX!=P;@)?lLLrop>MlxG#!&%2WpHz+`=kWZ@R0WABgXEI zq}DCj5~;Rc{%tL-wN5#;)-`3?2{}*id3-DpZVe~ZZZC-ne``BA#x3ONQVBkT&kHc? zz+;%p9CZ~M?wk$RkNNyd24~ZAtun#*Xlj!5V0tl$EI9B5JYjI8;jZ(F2x_i;=E+rj ziliIJh_PxKmWn@#Z->+Jzh1b1J#fp^GdTVv4kRADnP9_3Rgkx+x&D$Hdeqj&y>it<($m?Up5AS; zJO;C3Y>Uxd>Z#{3m#d<_;D(q&B@b~>Ub=I=2Y0LcwRB&b=W&qAmoV(2Y^SJ$G5!y13!(XlvcktvtxBP7l7NInt~ z3WXkAQyIz7ZK{11b$5bSf;Ct#fKS=6!Ccs<*i{ud285E+Zr|$wuTKQtYJg_y2W-F=N11r!nu8lPi1_|$TId8*ssZy zFX1mO0N|e;&+wNzr%%3w=UAtg2Sq!41$z?EI09)Q3uEVh!=GR9u>-cE`jv}Dp|f7| z7t{gKdbaSp;cFZJKyJR;KblXCZ2X7p{DZmqYAq z8~LU$pbj=jN+ir}@;#@-N%@mvZw}-qd_*WcgR^ z=j%#tzRJOxf7Re$x9|UJx%n!eYyNeEf6LClk(;mX2F<@^@F(CqTYk8mo3HK}&7Uy% z_w4*Tx%ukO()@b{zhYnCsoZ>Z|7m{3;C~M;UP*Kj{s?`^J-6@&Og|rcgICxaIDq9K zmOd;;v7Eqi63ZDZ!&pYJoX2tr%M~owu-w3M8_OLmQ*Ysc{UTI%>Vox7U51*D=_iy$ zboW+~^`GMT9cCybRZYEvd4TQWs#@aO2leDi=b01uGOB{%E8@Sq NUO^XxAYlWJ{S8%8m9PK+ literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/auth/model/req/SysPermissionReqDto.class b/target/classes/com/metalloop/modules/auth/model/req/SysPermissionReqDto.class new file mode 100644 index 0000000000000000000000000000000000000000..e2281df8f72771a9045f7a41e14c5d4766b9e311 GIT binary patch literal 12879 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 literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/auth/model/req/SysPermissionUpdateByQueryReqDto.class b/target/classes/com/metalloop/modules/auth/model/req/SysPermissionUpdateByQueryReqDto.class new file mode 100644 index 0000000000000000000000000000000000000000..ea4bc114b377c940196af6a86470aae9715030df GIT binary patch literal 3798 zcmb_f+jA3D82_DQH@Bv=)D}spwLlBK5)=?f+9JKtVtSz|MZgQ&3o)(Q6+C>#0Sqt4Zajju9#EY$f>5O>e|`G zv|{mrl{0y6tW5KzAxm%FN?;(bX4BjVfk6sGhL6G5t7@v%&){wEm<=L;pdXbMlxf!ct^N=t`^5bcS`U0P-9!+vXRkG@9%3PMricIIpc{x6-nko&P z)HK~vEXpj}wL3xL=Bvv5JU61thoZVd$+#{+shU=mXfl=IIVDa3ndWB7P#48&hVbf# zZ~prJ+rM1<=>9kF5Lc@ofA-+|rw^{*UcK=~%h1duaW!WrBEwQePWunJPufbhTWb=k z#wYT*Id06@jO=n48Pk@_a8j4Z>bW_6A$p2y+@RW%Cak)Io>H>23K2^jIyjP*QHjJ; z6=Xyi%V?LNxt?i#?G?Z}iPkYo?ilA*Mo&*EhC&6G8>Hwqf_LQs!$2i_xDeuEBc=;_ zN^_a4k##G>4T>5;Q){s{h6|%>pS6X_C3m6QZcA(!t4>-S&PDL4K>`lVRgXLi|JcWfw-=#lV}XDSHgtDb_ISa`If6FmsG_CmJa0|t`a*s&zL{v( z$cBY8D~r60_(hj|@n~`lIS_+%n@Fk_j|VWvaC|HF+U-c}W8E#TAn9WrRMEyXO8LR8 zVw#*d+rJf*bIB;uzBJrNd<8X$4MYYYg(ukKY_2o&fkXj3+gk(>FuKybT8<2`hA5NI{KZJ zQJNPLa_5)ui)9|yvL^J?h)|3Ka01U#yAg;^@iIWwr9gYO1UiWUcnh|~2vAt#>+HG- z{|)N7RjMl>?XV>rm4uZxe}g0~Q&A$$HtIQq;d1cR{}kT#f&(u;Hp0`D$ASNiH1m@d znXb;yAxl@gen8*@$lj}6-y<;I-FXY!3!l_!nCPZgOzQa&RT1ePwqHTGCnDWKq$trG zlS!mG=8MQe#&-{OS5O_1Bfg@Lbd~n8B zUb+kQ<23aodUoSEddnEcE+nYuqaG-_g8sno*ycyzA$IuDNPhwL5IgN|kij8lq=Xnr zTu2>aj??zSt+HT5X#H1SEe4thxlz(#4Slo(ooX7|2u38p&(zA)#%kleQeT1GrrLOh zs14M1U4g&n7WP~csiyKo9=1^(BE2|@2~3hoGLB%1dLD#u5NAkD zFZR-ndYXDtfwa?*9?<~Z-U5sfQDE#539Wy7#6Sb&qCinb+BigFCBc@&jAL~_wIVm` zg~4B8pRkXbyXXc=Q_v0!JD2Or<}&>&<>0Oth1)n-nj-aE=CX{lj?>2p&`S!|bP`Y@ zpF6v6VpG;N6d+q{(Y2thagv&r7pkDA5N1J9D{Bh_?i`dcOZ#|muC#_ekMlGk5l;*k as28C2B0UOH^i@}2Fn~0bQ;vD4i2MnFahit! literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/auth/model/req/SysRoleLockConditionReqDto$SysRoleLockConditionReqDtoBuilder.class b/target/classes/com/metalloop/modules/auth/model/req/SysRoleLockConditionReqDto$SysRoleLockConditionReqDtoBuilder.class new file mode 100644 index 0000000000000000000000000000000000000000..16a9dd6697497319b47d17d98243b6d79fe1a3b8 GIT binary patch literal 2730 zcmcgu>uwuG6#mAEvyO3z6HH1ev06V-$X~f*Dj9%I?1OkSuM-rbb$Nc3Xzpu`tJQ{bfYt7*xhAYQ~puGu)}aio#j7 z8k=RD#5)#FRq!rOkA$eB1LM&S(@-S8oJj3brh@v(S_xxQM%C0AF`o7ZKM4o`>+MXJ8 zRo}iNd=YRhdJe;MM{fCCM}c7YG2?}mj3+5d1LfPU3WV)ZTG=_F$etOWoZmzu*h_P! z=`=~7$rdFr!%SQH;z2a%ieQ72Ax3-Ua&MCd(yUYBq~4ZfnVV5`ywDu2Uwk7-wVz)p zvl_>uTlK!s+p7172b>Cn2*@c>nnwqB?RZp~9}U#r&VI1|&MK76mDitN$K!!w*Hlr4 zR{ej=qqHk&wO?^+1bEOY(%L{3wxgoJ6}P3iCuff??w8G30(>AseOHClWvXjR=}-rJ zC&{01W(r@HaTQ-#xMnI9$zM8_{z~5>^>D#(3rEt+X4~lU}&WE-f7N zvQ^e#sND0Zl(sw`hJvo#;tQcH++;X^$fJ3Vve05UGoF?DbmCPkQpYV&e<{$99tmJr zpw$$Oi!qg2G3|U1&(DqQ6^TZ#5ZYa$nN25{p)5ZG`!!}iPhSHB)Np~m2HYI^5Oo?C z=)W(9k>~~{Vjw401+bPc{zji)h^>Gu)I8CMC51AxME7N)77bc8gFl0dn2ho7596PR z@hAQRzVQRYCBje4u;`I;jwq=_vz<8Uqm1Os_rpVL?(Szpk9 W1x;Gb5pRiJP}eby8(70Focb5L*#H#) literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/auth/model/req/SysRoleLockConditionReqDto.class b/target/classes/com/metalloop/modules/auth/model/req/SysRoleLockConditionReqDto.class new file mode 100644 index 0000000000000000000000000000000000000000..e4b85e4c5439a2e9665b6eaa6826422a19311ed9 GIT binary patch literal 4166 zcmc&%O>-Q@8Gc$j`=Qke30V@XZHyetL|9^_)w!>P0SpQh>m4h7fx+rkxgpJVVA*EX@`Fl|l0zlz z!LUG~E}gU2+R_#nnTP~!>8zTUR<5dgP?>yL3y+rY03Hw6zAVGIWa`g!lB-)PYg@7`h4UK}c69EWLBQ~J$$IzRN& zLJ>d2L>`kROksN4m9@aLoK=DRhP2!2((3|`bmJgFOLU?##0Wf6!lN(+9%#umMeXV` zc+m=Yuj2>O38?0=Bv^cMCsu4q$U!WmNiyXQU^6}ovBjXe?zXWD$m?_!gM9mVM~C?(y*jit2b3kRs{MQ%CCFYx;`yX z`ufJNzy8&qzkKg^Uwrg79bU6m9T~Je-uYIF^5ZG@Gh|z?W7b_ynKl#6?2>KiGj~td z7uw3Z9!K|FWsb_0{{EY{zI^YUuipLr7a!iD-&Ud&6;SsWja_v6&y|1*7*SXaR4qqc zY`0dFcO~-3zStuR&PErX3{`Enwc@Us=ar*88K?%ahNy(Jmn9ubAI3OF(6s2pQz>%q zPE;3bi2sWnS(2vz`*2yWzg07yp13EoV%JYDGieu9&~zJ@r6*bJl}C#D37jknd*W={ zs&o3_=ysB?uXl+4Wm^3ECr9fiTpbAMDoF2T-Jq#F=BEyb@y?r}6s~SQ4uqTaWU-F~ zl1u%yK-Sk5<$4@q*~?1{i)VTD0*kGu{I(r1l{PW^#*>E&f!nE)!<~3amMVes-^r<| zVp7pu-1%Q1{eRq8thsHkuFhGyIzPO7Pw}YsG@W`;`N5*n^@EW-c-nOXKk(#w6y^Rv z4zh?9)bnWQw+u1Iw?f2nHrzF3Ms8sS@WpdZ)&tjL=kVL)D<>9=KrcwA!Om#B>bh&~ z^-3b-;+IZhW!u3k%$Y9YuO#F<%|c=+hL~qxRPABzErA1f7iE$}oZ%o_lD+H(e}o?Xu<7Ic z33dW~9FOw%Ngq#fgB=+EKFy6D97_v4L+M`3qQcGN6dB{F{}n!jc^<=$$c%6o%##%`dClm*h6@hD_TJc;1o`C+z!OX3Yk!aBv5}E=uj7+ z$h7$s;2E5a0cWX-wkkI@{XX)4;w-7!o)B>~l89B))<%4u(+V>|$l-Q<&*K7&P~U12 zzF)&<5|-}xvPrzpIG zZ06?lCnzk=Ox?o$;Ugy_7iaiq);RK4^p%azaQ_XIj+BjCD0d_d%w{QaU^Z9IYMI<; z7`lP}a<-i72pKoKnsy=5VUxKgo=262jG%@^I=Y8V@EKg>T80hp94>KY;5^-ZnX@cq z_TdH2a#$k%7(ZbO|HOTH6u!Y|9((z}Ailwa(X@AypyyK_G4%ICOw2R9UOPOi8PQtr z=I>4@>Y!Yt4x8wUDRdS*943rTkjd-V^3Fp@S?nEAqP-7x9bbk$3s8SYB;>Vozpoqt?Of@qEhsIWt1io`dl% z7ucc~gdkB6;#&%BJ@@E^5o9|89T{W$62(%%_7l7mTRq1yECAZzJ9tFf$KeCa0O=%+ zVm^xN;jY=vuh$rNE8B15v2<>ZbjkMZX_&>!aT>l#zzp3oFh!s+)2C+M$Buj)4I#%O z(aoS8h|`_N<9fN3nR?|I!F6W#>N-0ZibUD@$~M9b{FFjH_!)lA(I8<0uX0x4_!@s- UN0U!Ol;Bq(ELPsDu;HNmZ)oBH-T(jq literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/auth/model/req/SysRolePageQueryReqDto.class b/target/classes/com/metalloop/modules/auth/model/req/SysRolePageQueryReqDto.class new file mode 100644 index 0000000000000000000000000000000000000000..05db7a01e45f7b588c127c39ed1739c173130a57 GIT binary patch literal 3513 zcmbtWT~iy^8Geqm`al+#$i_qlJJ=>J2%JqDr%5EBNw6J51-20(P127n;zU{_?aI3= zT5{QoPBW8EX42`5r!$>SI%$35sgq8PGj5YfZ_=6miC&qKtNwwe?sIk*vw-@QFi7X@ zdtSZo^FHs#*}wer?#BQo;dLQ~cnVq;2_ywdRlBJ-rDrr6w%yX3_DZ`UUEOGVb@d<{ zx+AaYm34Q)Zph0Cqw zaR6C?p54a+T@7k28I86Sh>wiUDqKBT98{n**L*`}@DOq-9LnM_`UHv!=(1rq%@we17ym~SF#vUW>Pd$@tGb#A&W7LGp@Sf)~A_xKPxjC z45N@^<>*;Fj;{*zH;q*}ZCh2td&%^uX}O+Zd9J|OC=EW0y|AJ;7&-smjuzNzf1~~0*C!m)7C4}F^z`# zhOyjWEcu1D<(W;nWV$8=&smo3`2|AY<7KM5-#2PC>F8@u=(fT7-%((9teA#gsn%uF zC z7w>NV?ET33<1BI3C~-|Od0(O;X(!0l!Ln(|`F3+zI*UQXxw2g~8cPOQV8EeJ^Xeue zp7ecw!LBC-T@|y&{%Sjn;N^+MVk9MD{eQW*CKeYE**iaif8!2 z5bE~DJI`JIu^J}qncysV=&pE1b#=~Yg}n66Nw03NTs9notVo9(4TKdlW36?lnOwPH zH<#^I{RL@B$MEC|;U+FG%*>r9>=_obBi(j`gE74WCovpCaU<<}XkXimF0tgPqFR%` z_w1loSZljFJ?tQXQ~NALDDzuHSA??@J^GO)|$O4 z^#E=#IW8Dg&vw=Yu1BGVihXg;M6&CLi|Z}fLH*T;{`QQH zh(Z(7yap?#CrfEG1x7owG!oX^q!=Gk37r(9ti&0Mg)rSPTvxg&v;-dAM?t5^QeYV$ z|Iezdrho=c{}`_ofeEfLb%Ap~#o2d&>o@p$*2Qx?;3c~M;CWwb8t15Rp1+xZMkOFu z_&vl1Qe3*Ze2CunDUIO*zm*wa953)Y8))MqX81JAPYmCrjMp3DzQy~Lq$qdB3co=@ zyE*nJ#D0!M{N~svh|P@`HgLp$ER5a3(O|cMN9M=*Rn*S>83*#(r+DZFvS;$z22O2j zoGvD)a=MtzCzMX|Q{---JDE5v$NS)chnb(y3bWu|Wc`ZCiE7Ey1*qO|;f#DEU z97WReEuu=}NxaNm4Bc$~SBNx@)9A;m+-W{>v(WD2C^Ql$1i69`_o=k=O!0jtC9$or zt)uN0QEeBkf+;x}2Cfr{D%FH4=DqcMEKBnf`8P^WFce`Cu@F<`3>O|2@1G((p7_ z#b=KyAXO}P*(=z~M-W9Y7gowPlEQ+kP^aVd@D^haC;q5ic#Z{w}+ZqvKH zpgaQN1$YdQih_#71MpCYS>HvmFIMHYh{*Eo?d_!SSXe82FeVvt9;uRntPs7ySA^o zu_q#%$GT@G!m~s1)Nb!bTgnsnMd-^Yk}7B^x8GDjS8AGUiKn-;TAD;@J(gZqgyfS5 zwAA|yjn=DqkQjALIB%9QiwZ-@J@hCd9$Et;Vl6$pB_r)vm}l5{HDhDKEnyB-!})23 z2esD=BI{~>yM!}%+rrs0-od$%Lv8C&20IMa9`|B#?=i#WTC#uW%$@p>DB0o6Q@XrY z#(BKYaK`6-LFeak{k_yZdW$peSV|hjf?a@G{eYr9a94!XW$B8EwB7ek6%eGhb+_r$w(!IGH;3R%Oourv`Pkl z7AwdP@HdC?PYv*=Ccrm5FkB)0Bn*o#Ru@TA(Z zjDmZHQwMl!e29se%2>8O!pA9QgGPf{HF$qu!9ddR9Pa`z!mW8|%RX7CNxaSLbv1sg3_MF0Q* literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/auth/model/req/SysRolePermissionLockConditionReqDto.class b/target/classes/com/metalloop/modules/auth/model/req/SysRolePermissionLockConditionReqDto.class new file mode 100644 index 0000000000000000000000000000000000000000..e54905d2b715c37c697fa1df2a418b6e58c81622 GIT binary patch literal 4359 zcmc&%*>BuL9R8g39@%V2nkIp5O9?cEoS2)EO+(xC3f=U`mT(`=?vQokwNu+06y6Zx z0U;0q9smg>Ug%4OI16e8f|nv8{sbN=D(^gUePeqQ$5~J)2(sCo@ys{h{LY!5zy0m} zmjHIdPNPLZy=>RCn(%bfwCzQ$W>@N_a5cT|Rpo;)HAkG*O3UtyZHnWEsS&$-Ll|u(Q6=cf|8@LKOi>LG@U8{SBsTB>^D`bi6%3(9Q z6=ce~b>MVeHx={@1VB@_=CxyUr$pH+3_dKuy*XTsYZSE33-3TE?Vf?be<`txubh9pwJ*D8rX4Z%pC|FVGV$6=_a5FRoSJ(6fLFvl6 z_kiJXU(5A$%cGdPqGaL9^<1GUz70Z6KEB{^r{%TRw`FTO)n^Ds|dI37>jZ> zi7%gd_3{fJjsE!db3eWL%BAN&zWnU#m)?Kphc8}Z9F&ZCOZVyy1$Z%L|M6H$N%IoD7_|HFVyTwbaCYT}9Kb&DjguAz=we_e6zUT@*(* zXLZH^-5v6%Ue%z#kHk#BQ8PBtkUPD!F16xr`fpv^>aHF>dk3yi)i78FXPN!e!mHYq z7Yr_1IrZC8&@xv+Pw3ziofZg@Ek|33{TB~@%0F!6(xzD?R*RX9v} z894oo3n=H0t~_@5ljZ155&)t@?IlkyFHGx;VJIe#&rD4p;MP+-za8P$O^<1~!r9gz zU7Ydk#=+a&h_>kIr{Kgtbad=+DoCq*_wRE4-%ie!?7CAH2Mu{03~r>@xmiX8oqtrg z-n5YC5o5n|pKW`t=je+;Ubr18=vmC6oJK`naAfaa4JE@`vKNFFxQ{u*JMW-g_H2iR z%p1|$E(8XohjpvMGOoX9+Y9x@LL@Z9`z|uFX5mR@Srhmp5qzU!i427llPn@jh9?Rc z@QNSbh=~S*oY<|5^sNT$Ze@@+%#_8`c+%8eSI}(38(|Bp%QO}g>|AHVW~ND_reOPD zLz!TK9dSJ?q%AC6Z$%3~tWep%orOso+dKHZ)5Tq!U}?zTyE)N=%-yA2{)9}fnN8;HfGrz z>h&`>PLrTIJoFxt>e=D1k$DTr#M$AmkeMDCI)_dEBRf4uNBA?Qj(&r-ym}Fv&LB6M zSI;5eKx`jN60&_Pl}}1c>LR+%pgo_=ry3yjY*W<^2QsW!u8JclQjs2%Fil6duqNM+ zqZ~`H{+_@w_Ea3AyN|P%BxWm4u$RIN`TO|3mH7o%rIGm+y=iRWe@6Kg*96_x6$2fK zc|?^jHlbne;r7zuNof%&^`H5>5sES>rzyh<`*e(*hah&6MyAO3Y?ExqIt%0KZr`}u zItx{rHq$wL2IhB!j8$(7>XecPk?*y$rx5$AWBpZMRMqN8ZSS;8c#6zLh z6KwqhKq~w>Zj}15Igb$_o}@v{2XWoqG~4;A9rCVb`)9Z%o|`>QvVCnDCh>5XhEI?% zLAP`ak;u>Vp^;CqE+2b+%Dw=)60{v*x^sDWUan@Q9N9&3nVGHfobB`>L3Tc}#$YNQ nC8!0D;c>Pq4W{4;_A+dr`p*osx) literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/auth/model/req/SysRolePermissionPageQueryReqDto.class b/target/classes/com/metalloop/modules/auth/model/req/SysRolePermissionPageQueryReqDto.class new file mode 100644 index 0000000000000000000000000000000000000000..2ffb6bda2f3362576ee4c2e50caef2354465f154 GIT binary patch literal 3576 zcmbtXYjYb{8Geqmx>%7NSBc{)w>pU%Y}xJ>l0qwAXzJW-WXG{wm$qEGmQSUPrCn!t zWpKX%14CzEU}%{M%ygJCg?!177Kqac(19;yhCjil80QmzfD)dwyN=hkAWY-2_MG#c zci;28&wDx2-~N5)BLJiD+7LrL1ucsNk^<){c0+GSdJds%PTi_N-pb))Ik)I!#E zM_$#-tM05_mow67n67Ku){Ie=mz&aAot0P5dbU8S(sUeYc>H>dOWP?o*^73&iZ#1)lGloa`@sdNXt> zhVCpLM_wRZF|2b}n?_xrt1sgFrG+c9;tlt|lEEPyPT@!vN0t7WPsjK+wv$pF=qeaJ zSscT0flO6;TSuZ_Gby!{mA~)Om=1~ag8x}kC2v)%`dsofWEt=s%<)nHgX!CtUvFMCF1Y06j*8S0#pUd>*dF&u;ZNQZ143Ug<| zT4|9zxl-M3EZ9r>1!+mg@Z=)lCT37)ZnMs2ncjkv=nbK`kwV_LtAP6F znfz2yMauU*JE$6F-L{$!Yf0e5E(;OL{9;iSGiAH!ROES66~>bfYxhs7f)eQ8xc-xk zH-9^{{?2#q{p`ngzx%t5Z@qo@``=SJ{)=C2-2COn&D-lAe7ooD+$A=h7i`;eJ;zuM z$aME6QO%$RGleUvk1PrFZdI{qt=LOa54;Fk%Xy>X+0LrKwWvp-Vqo;5VJ-6Z>Mhy! zQgeAY;%G=mM6&J0xz%OaLjBc<{$@Lmh(Z(NygSRLCx_E$2%LHtd3|9*j*7t^74cEg z&s3eTm?`6R!*!*b!ZL%fi;Px2rocQu`oC3~ZUG^@C}O;e1V%W<)cw!-7~A9?j$h>G zc^7B6!JBvY#tXjIIL=bx9N!s%MkOFu_&vlLQXJYje2C8XDUIPgpUMm{hzopX18rQy z1Xq*%#PB7`cqbz6Tf9$6igIV5@M|Qr8v}nq?B__tZw&kyv8lnr8V>l&!oY1D3}$P1 zVtSB|qBitb?8$2%SjSxivnWHFgfD4pcT$X!Q!K9NsuDrq-(YCM8C z=Oextpa~HZ7fP5S;x2p@)AS;Sr^v=7%Hq7N#xTQ~hRbC6GG__AM6PE!OQKBs$9Nf~ z|AmeeVr`$`KnlJ5Pm53Rcra}fn4?-k@RUxx$f;s)o};F|XM`L*M_Ej%DRLC-DA57z z1A)Q=*a?DFutV$9JFE+J$MY2x)4y|6SLbNw@JQh{`bWw66Vrz~hijxa-8pa_si8Ft zy{6k#zjv4Uuj93lhG#h{K08zbsbsmsTER{}0xyEb(9x1ueg_OKzDQn_ z#ct;1=L(q*@p;lx*pH$=i+FI5bp!rT&~TWuBkViJ3G@UGaNO!c-T&n{Bc$Ku7^j_M zt&j7AQW(62T?coyIJnC{xF<09AX>-5XsOnqh>iIb+NLV7lY*T+V1a02sO;?5i;&z% TlbhH1sl(zb!rN9v6vzKlpe?o9TJVY&kfJT1>-|@W~ zQT4K_S5A26y)3*9P8*H4s&HqMd(x~!W52FSB5f6qtm|RQ zfYNJq2$TPBvD43mt}1(tdz>m>cy#cAvMEr8r@4QS1|2W1Rd9I>!-U)`_up5VD5<7b z5lhnC$yl#%=Z4u$$W`I%W#!X{oSs)o``Y7;;3R%3iW>=7xEaGOQeB0F*l=>vo@LXcK}#{S_D(X(^3+>aT>5Ah9Payq3Ss;Z&=?*v zOmyhmO|}>wGhFKJN-ZzY7-Q7)BGgyEBo~{U`b@(InnrLC zbvkefQREz+BTL=`hL%3SPj%-XKQuqkB;=<$_?hnf^r88Iz9B!;!JoiYIMmBG`*2s?uOSz5XGnj;&9pOjaTe%B&2*s-AWxhKCimUJ h)Gyl*rs)}{NZ09i2lq@w@{LoC+{Yju;1N~8xu1`_5k&w1 literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/auth/model/req/SysRolePermissionQueryReqDto.class b/target/classes/com/metalloop/modules/auth/model/req/SysRolePermissionQueryReqDto.class new file mode 100644 index 0000000000000000000000000000000000000000..dc8b26555f96893163b8d31de4b5ca3d6919e210 GIT binary patch literal 3804 zcmbtXZEqY`6@KpS%+A=}tv4Gx={BY~wF~yz&H~}3T_+)lounJqNopr9Z3A??d+|=Z zJLAmEri5>RP{oG|gsKXV0I3p0LXk>=BvL^Lz7&c7kzoDwaR zw!USAB{$-Nd&ckEU}dV>(qve1zc$Q-jBJ2)Ybo|;}AfQbPE zgINqAD{$(Gy%9*+4S{^^nsvh}w=8G9TyvfEd9~3~Sq!UPG9F{8Hk4{#76qlsZaxgH z+8E@*NEV|wAYj%l=gjqv)e;z;N`PKmyC&NUny$Fe3Nwtly@D6A3oWdI*p5i@nX)=rFm3Elg?M$e(F?=?QDNNJd zrsX#mn75GLYJr)a$zm3B0tegHhFox+x)r=)2Q+g0z;Xg#U@;k3=xwj}z0b+;Rszo^ z!O9EGz~=-;!q{xLydpi@YT4hl)>`zZxZH69yDe93-=^Y}npro7Vce z^vXAmmR*Y_xNX1!ZP-?MrQVcnYhGZeA^o~%Z>qPMyREl=cmKU#{p&C9-v9AEQm}RF zr&~YzLv@kjgJ1sO-#`C}67zoO%&PQM`Cd^fab6(TrD4@-b)-(Z)Q=D_)}qQ4u$jy! zF3ZPh5(cJ4sT;1@j=a!muSxH6MBbs8ysC4f4}FDN%Wbc@8|8D-k)9RE2C)h?w{Epo zE#`o9$2eNhw8{6vlSjlIbU!Nh{k!UCdXrE?J(%`9j`V&wL@OXI3%gWEC?X zu5!A!G1NY8(3Bo?qMV;p?QMpdP#g-CQAe{DqJ{3`zHl+w+uR~D*{RH}1Xg`x$=Zy0 z(l0Gnm(I|qsu~y4@3aDTRJfrr*+tJy?gTLdH);mWzJw}`;eT}&n7?b~^Z$-x!3 zQy~gbk#h$=K)Bru#%D)J}x+6vsH&Zw$QSCUy`OG`?Pg&rr{F~t&*pHL3e2RC@ed0xLmieSC^wOVT zsMk`7*T!&~8s!fSuz*G0Px4Zr5fG2WK0vu%pywV5#8b2nP`(#v>XATaa2Dy1lnMbA zEt%5H9T*=_O2$?Qkq$%_acnBGC}Zbnt+O4G?+N&&{_wfSg^%(c!w>I*ul9$}KQ4S! zJu!S?7d*dnB67qF419n=zCBa=Ep+Yn%->=D0($!P%->)x&6e(BfA~n@;DuTKsc3Wm zz)(^92>Wg!J6F{1;!xLOyrR=&ypk#E$|my>3b&9e>cvdLXrf}!Xrf{k4P|7;Mn=)> z8fmxbP&!e6QI4)gjy}xM+c=M}u>wc&9n@HpDNMq~5_M^mP{##I8qSf)i+WY+cd7c z7wMgg8F}j*KI1*UNyQSy6CkYbfG>a3BzU=M|jT=^h$pIn07o&&{%%H$@G}{ znOiXC?&33VDE)XvQwv2cUNKeDqNRz79xgFo;Y(&w50}RJr{F}iVVr_Ask@9T^j0Ua ztCUh0r1!7zN@Id!?(38^I(rbWQqn_`-$dpUD)>EW3PED|MfVBKx1Uo=F$%qF(6!Na zs$#QD!fe~JS4-ob27V2%M?7+TrWpcIP!uY6PiRv(#gN43xkpD%+sM`be z9**?3?Z_j?myWA(5nUyqM)yWa1PVu3Y4#3srMWxUH4a8Y+)`x!uu(?hVMdJbyip}N z5*{$=u+DPnaKNc4)H^D4e1pa*e6#oL`WD{cf=1#5EJ`NtYrLAc#-{>b;g=vb*s?7+ H*hKMv>%Ji- literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/auth/model/req/SysRolePermissionReqDto$SysRolePermissionReqDtoBuilder.class b/target/classes/com/metalloop/modules/auth/model/req/SysRolePermissionReqDto$SysRolePermissionReqDtoBuilder.class new file mode 100644 index 0000000000000000000000000000000000000000..7cc514eb1974dc554f24313dd54f73b9446c2d23 GIT binary patch literal 2099 zcmcJP?M@Rx6o%g^(3V=CKl{G`jAJZ;2%2JOPND@-hV%yC=9a_V zHS1$>LzFZ_bWFNZPcSrPb1SWgqcw&^5?7F9SS_itRTi2%j#3q?tn8{Ie2Z80x>*Rv z^2C<4wBs)-M=S`hEPY=pcTsFjYt?^>eX=SYTX+l+X;Vgpqm&BDUCWykt|pN(@uMDb z=WJuTmPE#wl9j_Sb9M|J3}cr`GJ$q<8gaT9Mzbe#Id7d?$&k$5N!&yaLsyw^iYeum zxc(&dI?a5|UF|bW|2w%R^pf@@3B%B{Sar25i#c~&`m*SVcdn~6*CaUw$rKz_E~-uI zy>NxcwXkVR^AueZL#iNMF<&hgg}2OUqw!WH?yPW6nssPw*6Wf;UkaCz^qhOAq*R?8 zx&It7{Xyt;WiN1#Q#lKd4%t#Pb;$5Gd%56rp14-Q9Wite?Wmv+Z!WQDy4nx@k)@tpNe860Sk{~cw(yVDMSBJIO%SyO<@I5gF>9) zC9S+2hOf1nhmHYsmb*5+>i&XKo7GCbKK&ZYv5m_+716+bwZ=baGWl9fLc|pHlqIP} zK8|M$E2l|viaqQhS!s{6;ohK2m|1Oe7-uhAD^pzMxCLb2cxAR}2Gnf;Q4A zhBt&e+m#wvAS(K(gGH!SG|@<%6;uSYiqiKseIusZ)!C@sov=m8m)bb_-=UdB|1x74 z+ync5fVoSffr7ePFO3FZw)Ej1eQQH9O5;AIV?cQVn&e`GLqBNvM$-sRqB;YY5Jk@6 zIr_=F#n93x_^HPHwhQwEO+tREj-P4FPhXfH=o|7gb^HN5pd%Z7CP+b}W5-Xle;(W= ziFVOOzw{oiHx?_~W@?%HxB;9+%`~94AV-`C29Mpr(1EQT!}N_) Zq(}4{#d8ypeB)FjFVKpYcuf`1{TGA#_woP$ literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/auth/model/req/SysRolePermissionReqDto.class b/target/classes/com/metalloop/modules/auth/model/req/SysRolePermissionReqDto.class new file mode 100644 index 0000000000000000000000000000000000000000..eb0d574ee80fd94e6d2e65e0f74f1cea216fccdd GIT binary patch literal 3753 zcmbtX-)|gO75?t-%+Ay?7_y zopE+%Q^Fe{RPj)O5JG?i4?GYFMS=oJq=FE<6p8;M#rzMH^4+$(hNlG5(=%%WurXj^FpD8% z1x`GP4+1H-E|9CF!P2oemaW+o)IuNWLV+u`RSR2X|(?!#__C$ zqgi}P!RB_{(@6A6s%-*=_gogwE4%^XDWbJYQ(3&Av?J8+P_Nd;@tG{9F++D7PS99n zq9SH1d8T$Yi#f~-9Bw(Aa?$r{PWYM|(#Q)!#|s02rDR}{x4qu?J}1Ll4cjgWR$dqu zJ}WR9#pe2@RoQl(ru%JYy-9xxD;+O%TXM|}Tq<7iJU?_o77sm`tI|Ap+u7KV?b5B| zCEsDq?HI5k>#kE;tuh-Epi3tI$)5`duv__k_UlJxnFy?b~XK$-z~>)2_*L zuIiideWvO$MV!F1y4>e=sXzSwAGg2rlkML<`0%~&PApxy#9p~5gK$}@s$xQNXM8^l z!nU)elNF3)P#Z)Y(!w{@px6+Y+R2FP-SRhONr$6n$2q4K`t92SKTC!d8*0#39k0$) zW2)-=o1LwNM8q*K3C*q-uiV~}eax>V?7MR}p^70Ed1kG;pjUp;9Pg7y~%L<3EK{ z)J*WMe(XO(y#4^`-%}R&GXG|H2M*$NEWg4#XFBopn-o*ucg%vo4Z=uSXOkoNxmZ?jlh#D?ZGH{+uUZP}ja{3<02Z5+W0 zB^#^Ua~4_4{tuqAV1I-|7RLE&i;wWM76+0dfuqv6&_k}FzB}W}dzs#;$}<(KDyaPm zuiI3ry{dFabkVCl=t6xa5{At#j`5x$=+)f93FBmxpz+*7gXytzvv*+4-^ZulQu>Lq zp%w~8yke`Q>7~iC87(ni(Mxv0jF!gxr{I*{Fit_5)Lp?&Rk2wnVYXx0tEF*I z1HXZ5nn#Y$G(!OLib6#fugUjWLg<}3x(@Xm%=evx{O2e}-5ID4aICj&M;|-BOk9tP z=sE!nx;I)RP&C4dbN4V@oWF-X<6tbpEo%EmjWQY!Gh#&NjVj5}=zvK_bvB%i2ArBg vy`#d!*J+%>H+s*mH}Mu13=${cP_lVn=heUsKIQoeKl-rAmTkhr77G6ZlUWJM literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/auth/model/req/SysRolePermissionUpdateByQueryReqDto$SysRolePermissionUpdateByQueryReqDtoBuilder.class b/target/classes/com/metalloop/modules/auth/model/req/SysRolePermissionUpdateByQueryReqDto$SysRolePermissionUpdateByQueryReqDtoBuilder.class new file mode 100644 index 0000000000000000000000000000000000000000..051bdd41a21acd5ad80b4725ac7d622b1091220a GIT binary patch literal 2619 zcmc(hZEq7t5Xb-P#5uZ`TAB}>k?&fQ*+ z-}52*F`M@1k6iQ{=dnkaf4WpCYHvhcGYs69p41BreWmj1AaWSAkS|~e1%|M$ns!rY?z&2~?51jj zt_W-%>NPVFuI-Brd!-#LD_6V}ep3d4RNl|62G?S-{ZlCX_OjUcQLE{0lomtjHiS<$ z2~SJiW>~29Wi{BY8m8$zw%PA*B(F$jjvhqv; zXK{{Uyvf%^MR|3uf025Po&wE19Wcx#Ve!g?tQ0)M7DM>!f~?)HC7jq+Esy!cG$HPv{@eNHt+_!P!}dv#_{rhYY#vNcn&7@n2>$EeaC z=d{{6Vq=8fJz4Q#V92ki(65Wf(j;oRo8o%aPze281p288sPY#VmC}Lsc`MqOV0ZvG z^SFiE7Vels`UAuC?z^S8sn&%ZnGl`Z$GonUPj&i_MD)R`Djp^mj8wQzE{%OJaoPd7?&hbl$=X`Wr4N_3TZR%R$H zc~n{|E)N1h2|jxSs)c!miw6Rp7Do#Y7|tH9N^LX>I?huY%uwac(2x2$7^Y}8K;!w2 zl=|a7S(fDV!9e;K=*gyknUTzFgZ_?p>8L7l5^Ay=!B5Bspiu?G(D5vp{bQGIxDqoLXf&}KGrYfX(jaO0fNz1rxML~Y rEUpqMLmQU#;95sEg6lNq=v_DHn!`PsjgoGTK06!?;yxDe5EEYj)&lMn literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/auth/model/req/SysRolePermissionUpdateByQueryReqDto.class b/target/classes/com/metalloop/modules/auth/model/req/SysRolePermissionUpdateByQueryReqDto.class new file mode 100644 index 0000000000000000000000000000000000000000..bc8fbfb41aaf4a4cd459f17602d9d324ea6027f7 GIT binary patch literal 3892 zcmb_f+jA3D82_DSH@Bv=)D}powLrn97oq|J4Xw}{E%ZiHihvik$+20Q?6$j`I`z%l zgAdL)%7Z%NWt`EzFd!-*INn}x#=pTw=+t)~Mf^^7({9r!ooL(SoIU3|zw>>+@3LQi z{p8&8U*KQsRN9qXwUg#uvJNyXyb3#YQ&SQzJXy_Vjz5uxs^noe>f2nHzx8D0kO5mi&IE(T9?WHJCh0zL#o zC`X84@PE^e?%|rHS_=$aL#3hGX2yhyn?k5W6+`*ls{IT-B?7xhj0Fk3I)q11!{ARS zTHjn&Ni)pMa~J~Eg@{hHip17xB46lk2Xh2RK>9|h&pWd zp+1C1g(6jjcMCR!Vy4jGu@D-ugJBbC;4+1wuVgh`FvLh5c7@P{-NZ;rF;hJhmbqvd z4B~M#`w$7C1+8n;j9Z4PO*8oBm2{SmzQnMn7=tcS?Gv$T%8m9A_9Du#HKWY%9$iZ) z)*02Jdo|NiG|OZ-BGtnxeB-_`OL#oC{vY9DvOxQGScW4^a=8F(jJ(SinQ~FHwIM=vAg(^u{ z)kAthNlz-oHWBOKNLETEW>1!wE=4S)n*!!)DjsVt5!%Vb$RxREm|H15Ii?s2RcdaK z!kg#{SCTOFmwJy2B_=Lox}d5s;mImlw^H1ouo9Ft<%?-3x4QCJmD`+iSH;b?#G18= zxTPd!hLu^z4f5Fd;BX&ZK1h|t;AS>$Q3$S}hMLx#_FH;BziTKsS9NtVk>QO}*>G4d z(PxER2IG3xNbr7DWOigD@5jBu7?LfLtV^HXT6+76ovC+!ys~uZmYu2PBiyuxxkwHQ zjH+&3w@k}WX6>LcE4_Fwi0AQw4=;+kc7dU3l`&PD*JpUtCeAK({Yt{p4SG+$?=EtV zpba{pXi4f4nuc_JCOaEj?*Z4!nu8Myv%HA-d6#_t<>p#)AbO}riK`Zm`7y=Nxe+>> z?J(_RZH=x7>SPgy(4a=Op(m}FCMVunHv;E$FFw%wWcNA}i*e&ailO1(MJeQMBC&(s zrghXBJ&7{x0gmxhjGN2cjk7eiEvIvXa>2mTMz%tu8U7C;doH*B1pjbb%MEPKJ<_Chq>a8h zr1oD>9+vK4^CCj+Vd)0Kd5MM&nM4{oykS|$c<-Qk5fx!M?9B^Fm+3B#%Vjn{1GWw; z{G`y2C=RCukLYPFwZGiQI3a zIz)PK5F;2Rm1G>i7|qHM#1lA0YI?AXdh>CbNjcI^Kzcw6)c^SzBcj0A0}@(&E)xs2 zkn;k08ENeji4_D}921V!T{Mc^tPuu(i#@_V8g8QvC`>^+Fzj5eDVodl51NC!S`=>L ziNX}Ad1x-nIPExnm;gPbU}Xyd>3FURmgT}MAZle* wZo!>{GA8MsGMp)_q0izhZAiou!#SGyX*^FK1qphp&N1jmlFBK^G*pED1}=xjtpET3 literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/auth/model/req/SysRoleQueryReqDto$SysRoleQueryReqDtoBuilder.class b/target/classes/com/metalloop/modules/auth/model/req/SysRoleQueryReqDto$SysRoleQueryReqDtoBuilder.class new file mode 100644 index 0000000000000000000000000000000000000000..80799fd91f9b6c25d324e0d1eadf125275c88b18 GIT binary patch literal 4051 zcmcInZByGu5Pr_Q7>o!6D1=Z_C=hIu;J(m?)*(%R5@;O=n2@Gv)5`W06lBSfPR#I6 z`Y+nfq?1fKlONEp{Xd=VNpdW6g7MJd!|Al^)w6rMd%Nqu|9$foz!H8=A%V6e+BI~b zlcE2)ex&D2-P+G>m7epmVCcMUScbU6(3Z~Zb)yU2Nu)INKx5c0+tpl^3*9tryOyik z70={uPWQxtB)FM#_={Ze*xj*BzU^`6c!$4O7522sTJ{XH!X1W$Q6W1D4MPgHwV#)Y zFKOsQKSR5vS2@E#M5ZVlBa|A@Fz8E_$pHD;dm4r@!jR;aUNSkM4@SORw#hWz@)e9~ zxGF#Gsc^UK7&T$omPB}8!?-+ds_bxG@JB9pB>Mvm6O!E>u(zCj$^B5n6sF$^?;6t9 z@I0O{%-kwL`0B1}nDr&ST7`I0QUYW&WPNP`yRPkqhMUs36v^sEp$pGVBFAv+oH0mY z9v{oFf5PxK9r1|o?+6|G_DoLQi)RX*1dh-R#{>u`X+I+)@;)6Jmf1^T0iPxDxrSR< zY)axlgkpcBn;zf#h2eVis6meBGpgAGbUnV*kjHI?k*a>kS8S`Si^qmIpf^|OmT(#V ziGrPCo{Ame{9nIC{SbjwLw1UBF(+pj+wm+x$+%%18LmNB=ALEQlyGz#=*$BJ)2^26 z!`yvtafkA@lBX-VLYIx9uV7ew)2o)avn%hKl(x&dxu-jZq(f%AI4}sQSU6|uo?br4 z6t2W1b0K>AA8>JCS03sPRU^S2I?#Spbv-*TMEOBfQ$2|;=A3nZHm>Bw=;I(^jZ*d zx33dBDHO4r#3NZF_86ucnhfj6KIFMTVNf>K^s=y>V}@U&aSH_l&~@FaQ16^B*!H1U z%d3`0I87h!9@lt`_|u4dOqmNIR;Y6q4eCc-_>SSX7;mVouv4dv$`ZRVA$zghWw(`k z*kt8vq>K6z@0w?WqMq3xWCN5`qa8LV*##xlXnsp9!=PxjHW7}llD8bC*;JU@Mu0!cr>CYJQ_w6 z-gt}-nnDygnn4sEO&bc2Mh%5WbH)kYB{~ZYh;*K>=q*RTGReul0{g>1=3RQqLxYB| zd-Rl`@{?t(&>nROjaOJjn-7#HKcJ5Dl{7$b4+@)s}YB&%Hp-4FN^VcNTA<_Cz z;P+uI4!^f${2*o_z9gFMAB@Mp+%kR;{}5ji&G^H(A7}qi%lJVqh4{k?{?&NNU} zre*x#9*6j|3Vt@;Kk1h7gPIWHXBGUL@%b~?GJa5BLVQUy=g$Vdp(`&7%`^1+b!6c$ z%si!r)8@PM=>u-W8^EuS}!hqQN*J=?S%;|Wm%B-=&*-@ZpT Lp5jORgwg*1mJfG_ literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/auth/model/req/SysRoleQueryReqDto.class b/target/classes/com/metalloop/modules/auth/model/req/SysRoleQueryReqDto.class new file mode 100644 index 0000000000000000000000000000000000000000..60803da2e7c27e4c534380c45877329f095de65e GIT binary patch literal 8724 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 literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/auth/model/req/SysRoleReqDto$SysRoleReqDtoBuilder.class b/target/classes/com/metalloop/modules/auth/model/req/SysRoleReqDto$SysRoleReqDtoBuilder.class new file mode 100644 index 0000000000000000000000000000000000000000..dd89c0d24344d642a94e054f5f51b2cd68d94cd0 GIT binary patch literal 3961 zcmb_f>r&fB6#mv+3`PV3lw2qj3Iy9Es7+}~>yRcuxwHWH8Z?P zU!ecnnRJp#XYv63+xO}8thA10q%cm)kJaiNAARTS*>m$>|Gat)U=cs1kU(1!?HW4J z$Hh;DvoT(;isb*Sb?lL6IGHK5@)aM=hAScyb(9nl| zhIZSiaE5`9OhLG&k{Zx3=u4GIt^Djg4a2y^kmR;ev^b#;hQ3^K$RNY^6oON4?XTm_6HiqCA&LdZ@CAO`=N$OOuZ4_F{Q2QJT+lj z`U*k#>aJ;+@g-~3GV!FO1juN}`q~0^UE6gHH>7bXk~Ip#5H&9eo#E!Ydp?CZd@S$z zCd2D=$Qiz?L$q@1nVh-<&lEZh9HJXO2@p=xeh7x-eOeio*-c>{pC)lj!)I7%irPSg zuKn1sYJBTwhHK%Y20@+6M9m(ceE32`4!0RDRg5FP?ARqkJTk>0y?Mg0g~#xB80;

bCiwClxGZmdDG^bwMvn@J2K6rv{N#yUBfjct(fiN&?Kad{JTeOY`q`@_98ct zIY;#V`&=A4`pBFVCyY(*iFL=Lw$)EA6rOO6YH*caUnjOx zC}1avhceH18KxRaO#9e5;(DMfNc~l#BpmmI;g|5uD8T@9-LT8l@TT&Pb5yJ5qDF@} zO&{)@RC$c}UPwNsR4IsMYPSWG+DR9_WB9e%5lxh8uW7Tq$gYpe1}b;iBIT|+qkIju zK40QZ$7@j3=o*CVT9Rt?um&Ytm!ujUYmsFbv<;ie$FgO39;b8~iZe8c9~h=1w-V>< zB=#A`&K9NNCAb+(P=`%Wh3}y!O)g+G`v9G^-=RGrCyWS>=7|W8Mv4fJhKC4mG)4za z4G}q-86rHI4kA1n4I(_63r_Ja&{=4Vqw{=8Z#w6*+1y<8@(oQm!4s$;Xp(|k+AafS0vXV(fUu}_hB^- zzqe)l;La4jB%19XjK{y&GJbIX3SSb<_`_I>vwx^%{2-PT{%{2UYP|iITgDIKQsGOY z+5XY^`yFW+KZtRKKN`UwkH;Tt89&Gug+Cs_pTv5c|0i0;4{}f8Pe$-(;_;_j#t-sX z;m<_yv+@2(w~Qau1cjfC;NOUkpV^l2gZiTICD9x|8~B=1UKW~t^!jyV{!h$3&OWCS z@f^LhF47vJb(z)(tua~?w5DmLY0bXCNAblZs7v#)b?F=AmEIy%6~ z8*IMjSNI$_OZP&I?hf21Z3%2Pd1A}w&EWyxFxQ3E8~MSr@!M>qEH1V7@+ EziMPrp#T5? literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/auth/model/req/SysRoleReqDto.class b/target/classes/com/metalloop/modules/auth/model/req/SysRoleReqDto.class new file mode 100644 index 0000000000000000000000000000000000000000..5a0eddbebfacb34c599b6c5f792c87bca2a5ed4d GIT binary patch literal 8673 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 literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/auth/model/req/SysRoleUpdateByQueryReqDto$SysRoleUpdateByQueryReqDtoBuilder.class b/target/classes/com/metalloop/modules/auth/model/req/SysRoleUpdateByQueryReqDto$SysRoleUpdateByQueryReqDtoBuilder.class new file mode 100644 index 0000000000000000000000000000000000000000..ad7a7ef04629345f176257971c3ca19b2d54af59 GIT binary patch literal 2419 zcmcgtZBG+H5Pr5$u9PYTQG6E^w8fY6UG#WSYJ5qmC@9AGY1^)Ha=k5gdnElQ`o-U% ziAJM|KfoVlob4UqfCH>1r0MPL+{`mG&(6;L`u+VUfJxlRB83hEojIh@#gKo?SGehL z_l-GQc`K@lp=-i+Z8gQvQ7A5SBZF=O*&KS1W8hU;H|s)i$C0vO)@3blgm3adE$WSM zOiwJE^G$zFI^ubw#+8_9J`IG|oD<7;l^ogn(@bDHHQ|we;VN4-8LpPw@fJF;bijLa z=tZ8PXL-#t!_BtfVnJI5`WdF%2__-+Ec!5@S>MmlD6|zzlv-Oh@%W1iSq$Q!fkQbQ z#*uZWKCe96eZyd^a3>J6uNh7k${UNqD#k>ih1E~>bS#JCIKePj=S!j_-6~fvY_&*l zzT&R(8OGyak>zHr1bBuca{(1XT|9JGY~QXp;*RS|#g$Fy4E<$C)+=(!yf0kgQJvK+ zhRzbzAVY82cE#hMUJ>3iPKH`rR=KmlJzMW1VW(QO38~r^uL&o+b5T=h@Bit@i@OqA z{*h3Nvi5{~obI;ph?EcQg}biWb|vO?MfVGaQsKWjqSMJJxq1->2ym_bqmpIF&db27 zihH&$rxRPZu?yOk03QoqJ&->2)BKE-%2yt5gf#oTUAU6PRa`T0U05jMT#Nl1Mb$S6OWXoTnZZ2<_uzzb%xKH4UwS!DyAO}hIKt4 zf+*1(n75U%GPud`d>dA_{uK57LfG{u*}0)u*PdiWhTKD!u6W7ezAvaWhj+v>Fv&2w ziP9vd3`{c|-(HnQQb;R?X}F}Q@1^KR^AHR}wCkdExFw~jvq6?7ISpFUKS^&UePvoQ z_7&_?%j6V2H2|;=BlOgu+GG@`X&s{fDm=|IoIytm$ZCZE7-MI@(BmVirLYm|0Le%t zg3@nc%mtFBHClcHelLni_VE*P9`7wHE&v&PGJsLT4+_{15cK9Q#Zue8!%y z*q5A0$VontlXEy9VNTJixf{@U-*7-f(()Zgf$eYy5^&SFKu9S%uy_U+Te3b}qBTRl YF4KP;w`kW-x)~bq7P>KkDcr`PKPDrZ7ytkO literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/auth/model/req/SysRoleUpdateByQueryReqDto.class b/target/classes/com/metalloop/modules/auth/model/req/SysRoleUpdateByQueryReqDto.class new file mode 100644 index 0000000000000000000000000000000000000000..8dc91737d294696dcbf4af4fb09752e3e2f9d504 GIT binary patch literal 3696 zcmbtX+gBS!82?SOn;W5|2yH`=LQ5;xrrJ9JYPl6^fR<2d>#a*Nk}XL#WH)&5(KjD_ zQ6D@$sK;}Zm!8&oY-{WB_EOLBZ}72l_yc^j)^Bz zegH6l>t47Rl!TUvWVoTE)0&oxWVB=<&Gm>2|>Y78>CJ38n5@WJmzAcz_S8P5DqO$eQ5 z4b@m-I2Nl0%Q7S?)Y%b49YPE>OPdxloURJaK~6M4nDs$Cg9Zj)LdlLU6_hkXV@K?| zvaCeXN_HVKJ%61ijA-XoA-pSy-Ppt6U*N{5ZOw^}&Z-o!?Fpa>d%b85;#skMsC-Ak zmrzF+`|b;(6>SVVXkUi`4ACk#cPu9Bn{XhAb{r(@Q;MD%rhqbiKM}xl=J;KYIcFayR4)OeELm>LzUQa5NNH4)>BmX25}e>hTR!ukq>LxgkoG)4ca%W8%oyD z8BRID?3G)wI=2o9VY=z}ak8GZaIm ztr>b^B(A@uEG+PRWcg@BQz*qY1t8}5j(WIedxw0;%X8BYhGtcw0 z77KfA7ACUG6?mwRrM1kwwir3bvpi3=BuQBHF)g8_=M*B7c(ZXNBc&2?XRC_*3f2(5 zU*F87lO0t7+NsnzN3>6JBc&xTD0zj-CC`&`I|$ej?+pFbp*z+_#THBxWR&MASs-gh zisvaV1S##sDi<_IH$Fq=QId6fuR>&v#m@3k6-}VR6VWBQVvz1S4 zpWR=3@1~VZkAA$l_ThainQErEZcK6!)8ymOkfs^Bkymn-|MfZ#UJc+iyza#tqS{W1E4t2!t+wq! z?Aw4BRM8J^A*>P)UZfaW{#le_)*=mUbc!|6RpWWM=$CF3)IUl`LJhUY=sB+A1WnNK zzIEaxN%?UKr%9lX*0fS9eth47UAYJMSJbDYklr3@LFakD-5)S#=*YHLMrdA0$X(yS zE0(z&%bGDrBSJ9}z!|(qZ7C3)!4-gN%YpVk73eI6;5KdPBS2w|r>px8ytk?6RH@!X z+GR=DDhVqs{)S0frm{nvmFhWy(Ms^O{}$fzf(AH)Z<|lO;r+VnsC-wetf-R0&+v-7TMQ%0-gTKWgVIMUQ z&;yjGpcNQaE;m%nW%`H5#@#Fm_i&^P-fHNK!fFSb&P~-@UVLasU7T literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/auth/model/req/SysUserLockConditionReqDto$SysUserLockConditionReqDtoBuilder.class b/target/classes/com/metalloop/modules/auth/model/req/SysUserLockConditionReqDto$SysUserLockConditionReqDtoBuilder.class new file mode 100644 index 0000000000000000000000000000000000000000..50c8fd4927b66ef6cf9a27153a339eb917dbc83c GIT binary patch literal 2730 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 literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/auth/model/req/SysUserQueryReqDto$SysUserQueryReqDtoBuilder.class b/target/classes/com/metalloop/modules/auth/model/req/SysUserQueryReqDto$SysUserQueryReqDtoBuilder.class new file mode 100644 index 0000000000000000000000000000000000000000..f347828b985e343a43bbfc8e86019647ca169f3d GIT binary patch literal 3801 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 literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/auth/model/req/SysUserReqDto$SysUserReqDtoBuilder.class b/target/classes/com/metalloop/modules/auth/model/req/SysUserReqDto$SysUserReqDtoBuilder.class new file mode 100644 index 0000000000000000000000000000000000000000..a9c4cea07e132e7fa34e36225dd6676c1b55f45b GIT binary patch literal 3701 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 R_(GE2#mK*;_vzQ9{RjLSJ#_#8 literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/auth/model/req/SysUserRoleLockConditionReqDto$SysUserRoleLockConditionReqDtoBuilder.class b/target/classes/com/metalloop/modules/auth/model/req/SysUserRoleLockConditionReqDto$SysUserRoleLockConditionReqDtoBuilder.class new file mode 100644 index 0000000000000000000000000000000000000000..652b243358ba128490fa24ce4a0da1ccc3c410fb GIT binary patch literal 2814 zcmcgu-EJF26#mAEvyO3z6HH1el(b2Uot7^Dgl=MJ++X3g5SJhXH{Lb3(ZIAm~_Ji&t;cAAdRq0FJWSFQoHm6a-w1sj7FQLL9T{W-=LUYekYR4X^ zUgU|;=8@hu3*p&;cx-p}!mmRSY$#8(mD_JAzbCa+{)TvbL#w6n+v}0^dLke_gs-LE zV_0cFuhc}4W0Zfnf*Dj9%I>}vAz9sy&5pG6?6wTGV_}Y=^}J$oj4NXnHRIb?8NR5$ zsNz}m8k=RD#%mVNRPZ{^j)bkF1LZ__N)+}Gr)m0_^-w**7Y;W9xXUW`{Ugd zQt_7;&a}pf>RG)f^tS4K$pcPBL*J&J*Z;5$ZcCq;6GR zS4xLE;5$ifg)>w5q>L4OYT=rxZluG~fmG@5s=lxj;Yq=}#a*oe>N7tNm%5ZO0lmZh z9`(7Uwo?6Q$2n}p5M|`xL&~Qd_V0%HleRljpi_tzb=i*8!YN^m;rk;zGk!bms`aF& zuCXf%2mNr3H5e*)eJaB(kB6b4YkBcla2Bo;>ml#vIn6?g;oNvu>iLO>ah^JNf%;Q{ ze)RAF!vd|QXgnWNsio7-g?PR=vR5P;y=-WAiDovPV1}~%6zsQ{{UUu05KzM<`WkR^ zjUSXeM8lPhwH*n@Z-7F$> literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/auth/model/req/SysUserRoleLockConditionReqDto.class b/target/classes/com/metalloop/modules/auth/model/req/SysUserRoleLockConditionReqDto.class new file mode 100644 index 0000000000000000000000000000000000000000..91e70847cc2538771451a24f571925766d45af8e GIT binary patch literal 4253 zcmc&%OLN>*7XGeV{cyXDjbj@+3BeEt{0f5MF~*%3h~p$C?IgH^8DMzG-50lFwd6=@ zPi1y2C}6_^vY@DfDmIf@q^KDl2?YfO8>r$puuLGcpXD&jcO|tg%Z(XQ6vVOb)xGC_ z_nhxMbo9-CKlvQMK{#1-2$)r;p*N&&SeE0g>J6vXw4|pSO~0-lq@}y^tX?_iJ?=?& z!Lel7sjkd8cFpun$6k0ZVs`44G^`&m@&$oA+VK#hCOlE;Ow-XT(lrgs{Hw8K(X8S^ zldfpUMbk66@Q7_YzM+Dgw@#EP?)}ABUY4%DcCYRjOpy%%CQ!{Z^h&iZ8%9Z>t0ujw zYp$x(0=vFH|M%}+xqRj0*REZ7{o1SVUw!F=YcHO^`rbQNK6`^PP%)Qn!*9A&;iZHJ z4kRLik=$@>z3RA9x0r`|n`BI$`T2}~tSQ}dQP5A9rm277U*})E`rcdLz5VW$PcPAx zOJN2JG_E5^+vxcJ6$~n(g%Q_NHf?#L*;tb9>CjobB4^FnYi-=sSGJtSlCz>8m9}&Z zU)G4#M@0;4(V)-i-UvtY>n8m>n;`n<>gPRFIx7s58m8AIZLz2=_I4Urb1(Tjk zJAPfdOl1`y!>yM|Ay{31>IY)J#-VZg72&& zM%8y*HXm=s-&T=e2zt!0YizWJ%Z{_sTrI^yFnV9bRyG|x%{*!&{&Y;f)oa9-B8VBb zc@@)_r5yN*eqeiYM#88+C?r9RcEC zC=scqtPS}*q7-JLki*UT9>pF?ILn>@RAUP;5!;nMzY+&s3(ERx+8d(02jd#dI;#64EZVHSJia!#Z^kJOfT8cgMG){7+;V9jGinBCjcHuG3GFTw~5Wk3W|G^De7^$Q>8TS z$K#xJAdkDTNHtT~%kQWsIMV{s9)#(Wsp{cW?IAHxyuMz&wZ-O1b>Xp`-m(=d&v zqBMMtfGN7AXN*8WrjJd0gf00v7(fn%qU%B16Qw(kNA+?eGu6r@!Bu8nh=kes s^d`bI{Fy=>cm~gM)JT}XbDZTkKF{A5Q0G%0CHP?pla==jEZ8Xi5AIJX?*IS* literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/auth/model/req/SysUserRolePageQueryReqDto.class b/target/classes/com/metalloop/modules/auth/model/req/SysUserRolePageQueryReqDto.class new file mode 100644 index 0000000000000000000000000000000000000000..107b53778c31c1efd921269524621bc04e1c63d8 GIT binary patch literal 3548 zcmbtXYi}G^8Gg>*y;(c%CXTzgI*A+XwcRN+g?86=n>tBjvvv}%13P@0-2nnI0LiiAo7KjrCsNhSH_!E2~uKS5UKuMo7GmgjhhFdJpo^#&w z&U>Esc`s-8um8I9A%HQs9f%;BL@a|i5(3XwtcKQ*u3oQOR#R(Oi>OHU~o!d>&jra0v2hAXo&Oj^vq`;=PMP^!1_R1Wl4i;t+Xs-(Ulg9alG9N8n_b3J=D1SYe!H*EYONIe;fK zIEkkO5~GG`xZ~cz^D2eDl)=+@hB%j1s+?yS_Y5$Kn=W~$#EDM*rIQ#F*z4^YmR6Rw zq1TN!^o2To$<4M**J#Lj!!am0Wtx`jB?*BKm#FT1L$6k)tt~&PSvu=rQ-M{oXy{tG zQj-n6D6nf$Iu+Y!subgScmMdKyKjB(lXq|a;}36t^82gnzkaWeG#y^M@dL`%u73FO zdw14;`tI6~-w*9S!8B){64y9`_Yhf0JASNomkd+Rv>FT2p7TAtER%b@%Q{iXW7*&OVfHY;HG<8x;1O@f^O?%M%v`*K#(<)=5m|7 z$(HI?W5HU|UXZ4=byqGDZv4XR>Cse|Fc9hQGJky>k zsyz9=Yx(uUeA`m(K@|xc-(ev{nO7#tV!CX#?20^VsFFDH;O73gDk6cQkKg&#+MBoj ze*63D*M7ME)^F~9=eO(Mdgtz&-&L9YvtO*=`1$&cTWcSDyYKYedA6G8Ez5OWTW|VA zI=d67rcr~D#AVezmIV4YYu7NBttF}X9{3IAtX^>~dqv=C*qcDnH+oJt7kN+hmn>_k z)hvdb45$c6w!ApE(v)q~UkT}NwC|88FfqYfvTV4rm_kEf zIK>U#u{$@O_p~N(nhIz5&M0D30=((x(wCDG6Sl=u{n`qK`9IjY44PwB=bP8ECe9AoMmMZnQBltq-9B1gdv6Yay^ z=PTTY9Vb`?JFq^p%{oh%5%OdDH;(G69P2KQ=5JwejGP~tIoMsSk=|7I&^07SRx$FL zlAkEV)J85A?4%Uw+&b8v%#*(1096zP((@IfO5rKI#90KLEdQ5@G>Q}G#Vee}JmRJh zyNCUVkvJj96@<7)rOh?P_ZXD;hQfwUY^#WBTWA#w$+5t3jYw3g##J(J&)-9#{EY_= zgySRBH>Ea)I=34-{vQp!%GC0Up+JKw(24xeO^6S+MS72C$&Ym6exwsYNe7XR?}+r* z+MDnEZ_WFSAuzvthxxDLwSb1FIVwK8R064Fxx-q)c0PPB{KnALmRNr03oKqDFUn#s z^YRP%^lf~RwB+}q;LSoF>}TD8KM7(u$k`$Gonr)g9Q!zK_MzSf9H$5LI~=35bF}?& zUQqJGH?ia3o;C;fcnA0S2Jc7fXb>&c8Wgb+uR=Ri1$I-gy$381O$3$g{dy6S8!2-0 RI-fdBuF{-YxB>^c&j8GmBOCw# literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/auth/model/req/SysUserRoleQueryReqDto$SysUserRoleQueryReqDtoBuilder.class b/target/classes/com/metalloop/modules/auth/model/req/SysUserRoleQueryReqDto$SysUserRoleQueryReqDtoBuilder.class new file mode 100644 index 0000000000000000000000000000000000000000..01cb2df69de25330e85729d075708b97629f4772 GIT binary patch literal 2634 zcmcJRZEq7t5Xb-PBtFL+wQE9f8lbcd)D92V7HA7cpo!BEOD+!yO@-*2wY^Q2oNvwD zUZi}JevDS40#T_SpdYI0tnY#^@exIe^5UMxGryUgnVt2&|GoPMzyg{@@1x#8f+BgN9;dw{(oSx9!^OWj4J=Kjo z5js55TjoP}P9R=6>$~C4p$OKLC!R(k*j*E^mbIG87B5B8>xzKL1&aeQQ>WP->C1a5YX=wlldoMD*k1cGbPU8MNSv3aDW=PZ+OV0+faG|n;PBsoYl z2CHrF5*)Qmu!57&-c}8T?f+N zWUzL)7m3HeF}=4Ci`$TQrp4;rbV;x9Ba@+}9z)uW8s` z2~w~OQNm9t#fwM@5*3EowaC}9Cz}3_3}xFBi@vWk*ODS&sI)xQYpZSNq3}gus_HU~ zH>kT9N-gP&M^UdWf@hozjkfA=Z-WQYd?&(jy(NkCqIHat9^S4LQa>w6^%Hej{z>R9 z)qTPPPMc5!w8mZ%#juY~HiSKY!_9ND{wCUHJ}^9}9m@~ZtDx21wwWT>aK^mv%i_9< zf{s{`rm<$T$JGsEN3cgC)T=5q^JYmY9qNGh61?Vhmm7ewQZgTuZ6#sPB$OpOWk|e74&c8R{=m`We$AK{RO2 zuS*)C1uW8b`anjq#mQW+#Z!HOUAq*IZS(eiTAL5qU0`(vyXn(*Z+JWm1@-lXL#Y;i zWVk$%)T~@tc*t<^a8)`};>6OREzki8jMJS?JTQDoUwL}g=$SJI(1?sqpb;4zHV0%D z+0&6rj5@tJ^eZ!x`8QyH4$$*-H;zEKt8_PxjL9`zr)N40Mxoun*Z|}b&;)GFU;T@2 zf6!|V2T{|pN`fNgWNnUdU})t7{8Bdm^pW{-o)Ug(gkQl|S@D;T%#U-P@GB$yX?&f< zpE@!>u3y5R9^rq3o0L*h$fcxa)xS}FKL46Z@EWJ-D$_Of2A^aXB(7~Wv$nTzJ7G7d z4NVWsq`7Z#!Jyya3*a#LOa^=c-wyiYyM5*Uejuyj4m}Ix@Gf0H(856ft#Tx(qJc>) JV+E_2`5)Pki~;}v literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/auth/model/req/SysUserRoleQueryReqDto.class b/target/classes/com/metalloop/modules/auth/model/req/SysUserRoleQueryReqDto.class new file mode 100644 index 0000000000000000000000000000000000000000..945a9ebd8ac4750ed2dfc46d9ffe54ae87aa0d5b GIT binary patch literal 4474 zcmbtX`)?dq75=V0vopIM#~a6XyGdHo)+v5wftEsdV@@OF;{6Hm8r644Pgakn-QfX+Csz?ZaDH4AN4etLyDc_x$^^VumCQ>Z#&Y5%0 z{qDWrdEC4I`rn6t12BOr8af2dRNa;0iWQjky6dhMSKL~oZuv#C5iH3Ut6uc13&pvM z{%POxX5G5=T*LA%&RQ3y0(UT7eW+pAYnGRTfMP&JMj*4_cI@DQKewj=9*coo6cgf;sn;B<(1`3+YI!`X)+!cU#Useb_2cGA&{+l zmKj*JgMmOk8r}%(dU1-%aBRPU0X!hkVRM4mBb;E`br#DxLKO_`#4Z87YC4B6G|aj{ z|4?EjCl=0I)u255f^>e!z{B_w=Uub{NvB+P|Il#4y}9rl9>Jp;9y2f~(etgXMS$Fn zC1>*`?BfQ$+=P`8s??-**uV%z1yoKZC+gia(Z&YG4eUcvz@Xb?i;fNN79ny?Up4SG zJi+ZQnf}rw(<6*%C5Nx$DGlE+@J&3uX}NQOXFH1m+L~E!SSQX2Jf22Rf`Vv7xtBRw zHn1NP0uQX1%hsgpRL$UdJK(&IADB+y3%ryBYm%1$OHsx638#>YWE5f-xnV`aGXi}f z|F&D4vpn0Z+pn7ob#A>d+i(JV#hSN$n~H;u;|6A6b9n+|({%S=GZ&eM#kD7juF0Zm zIk4nvwppC3E?FyPS)i+C`Bl$em7_`Tf8P1yoh!F1Qxw;){c`7BMeC6^dmwtZd z>a9<%zAwP?$}@?$o_WjjIqtM{63+^BHyN6jq^o37{s~55Au3IQmzfRsQFmWl`P`2Z zB}dP+?O4YfD+`u)D&lNc%vr@*OJS{dy6&zlxXZ<(mScIcHi^|c?N+%-lUpUrF^&=} z*`#^mes)3ZtluidfwW{Ao+r&SRr>re$?}*Va=U}gUT1{bjn~K+^*1gjGB#heaHMQtdSsB|wosX9 ze?5^cq3NCr%HQyG=WNzmXxa9tZGr4;B14;+??C+s@4%(*66PEGismYT3~NfX#f7;?WoK?zVw&% zH{ZGQ+uyIh`@8jbZ{K2LgkwVA{@_yKEJsy+&>9h*=F>@1nr3lKYMwBhX`}Q{zcIIPJR2jn#5uqcLd- z&8C5;F0NWB?k^_%o2ODj6+=w&9x!L~_|x$tR#!TCLs1@1h_O9U(518yZuw%@Cd4pP zvEs0dC+nu~TjcGbbh!Awpy4MB$QIht*wAoU;NdTJWtK+Nv5V{c2z-lokq&w1pnQ-G zv5U_`{7m|oqJg)Bt%k!i@UF1caD)cl4YnGN@qrdSjX7%M4(NbWIL+r~ zAl?yDfV$g(9=$6N?+YnF`F5b8y8`ikk^QEGwT^rnb7#`wyYCe~%B&c^XAArbcrk7D`Fn+r@-v3--2(p- zUQUDWyI1%q%VYR~E%3acM)2Yd^4diXZ;X!o0jhF+^dHcF4Yl+7=-;8wjE&sFgW)TM z-N(oHRZ_50Fs)nbqL`vQS&eqHkta9s3SMP__2V}< z%L41*<@{}!)OGTzeFY1Y6dc7es+3gLyoDO24C**S`BiA}@C?pT((w!Sq(w?uTqT1` zlyb1Sj;GM0>Hozx4f>}T(C`TVb@3@4jKu8ch=>F9N?U*w`THb}|I=K&EDlvhM(+9Z zYNOdeWGgw#m5C<$**0_`e-03ajZIwUQzPhVzPw+V2!p&kUtVH}_5A2HXydo=m9tX6 zx1>lzL5VH8418o7DygA~F%Jjn1+{4!D`i4cX2Zlx;Hcf{!8;bMB@SLER&bty;f0Fd zb$&WX_c>~1@E&8R97+lfa6c|36=&GnS1Dz}p!^B?XH@XlfGz|B!OQe#9N2pAkcxh& zO^2qBvRM_oWfE>J&vtF>tZjB~`KK5-q^);dV9G@Y&m{LJPltjGjSK@nV;|s2K88L- z325)TQ58f-N+I<~;cxpGymdC+#)0uwWA6vzMLBwoi|YS#qgl$Jspzz&z~mA05b6NeB>E`bDs5PTWiLo#H&6Lx1K znSyk695CM8)2rP~)iSqn+C-Df!68M)H-wAc`S(^&u5 zM#-4Y`-E%vjp!2_6`W?6?D>Lg(Vr);%hB>sOV?Q>;c)F48&#ZT$VoB~YYg|=QQk(= z!ZgFpPp!omd`7xCr3pA1BOb+RfDeDa_$RH_$HxEhVd4a6GN#Z zJ@FtMbcO$z(?X-IdfZ*-zBJ#la9nRnB0cIHFPn$fCpq#mD>RK0FjW3k=uOps$bC*7 zCVbjYFSb3ZnUgTQXJynGCt+oxYg(S+R{gkiN=8Aey-t`S&S+x1FSX*D3jLl~lBQOw zskw8*EFsPV5$I(Vn8C52ln%7dx1;z6r97HN+{T=RJEn2&GR%w&NpDAO2`91__0kgW zY31)S{FW@0STTYwbFWW>a;BryR=C|vJD!m2Tljc)TV$v|Pv~d#evD|*m|l}K3k#U1 z=12!4C5gv!JsQe$?AnEB>YBIr!`6Jr{v2yC*lmwmw&n655LB6vtck!v?FHUu>ZXdJd?ul`B5-|01ngQ#kx z5~D~t-kW0#7+U!Nzm&~Cb!2`Nr>EnK8=Ru6OxM&~e43q*D7UrD++;nVtnQc#E!IXk(y%MLCkx(844Zv4mwz{|`qT BYEl3I literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/auth/model/req/SysUserRoleReqDto.class b/target/classes/com/metalloop/modules/auth/model/req/SysUserRoleReqDto.class new file mode 100644 index 0000000000000000000000000000000000000000..257be315dc389b6302bdd986decc2f331d664ffa GIT binary patch literal 4423 zcmbVPZF3t}6@IS0t6jlc) z?!C`>xmW-E?A7q7IdTpQU_em4G#)*4h=7+VIplHW1$O{!2XAu zm!LH+q*xZ%F>~JDu=5q$Th14~&{=k>6LOMm7JB3isVY}nEKAjP3%%GOkSIrUJKnyewxZ?Y`=v8JR;EHa)Q_+nqbEFmM1cV%30WjM+MB1?H##LvnvAqLy48l zEuD8t;l%LE()lYE9>e3Dci9Oge{$LVL&FL8`oc4K0#6!v%EF*T&o;KE0J$AU&K5}6 zr!9Q74l6@aEKBXMg%OMj=$uSW)VpP(%?*rO*oVA;MYpL29h=?_LgbphZs8kvhTC1S zgOw@fLln$n2H(Vf1K+an9G>5@+=Z~}ddmXFhFz&SbLRw}Zbwgo0yScymq|Hc;Q%HD z9$B+johjcd+2KoW$a%dWw7oD8cr^)DCocikMit{HoFXogQHWjShBX5(2=qn#yMBJb zsk(N>ebZj5aO=7Gnislj&Y~N*R2=d=KeR)a%M%!zp?mO#z05q!Z#1Thk|vLl9Rl#0aA=@j*)BNhj`1tk7Q^1vA|#>g08pW zuR3|PLDj5|+NIF1UKIFsaA!R#T zkm75Afu9TPZ6T{22L>(+Jof)xnUIPwc4(6yfp7DQ(IKxAln=4lb@6$apQ!-TH1Gz{ zYB)jz?*Xlbqcrf`Z#5j_VSgM&8eZfa9rzA`)0o8x%5&80;Zy#Ze}Oo28=ZfmEO3(F zDL%ouz8lN)k%hN`cx0Y->7kE&1Vaw%NDSMJ1#09D=zvo=&F5Aip8sutx|@NXye|;% z0&Re@%|Ju<1>)VK4NzY*(7yWuE#f6~M(h>{DEUo|jNXLtA*Ccqy%ExY@`y>2ysMn} zo}`Wyj%*WiXWGMeKPbG)tQfwh1^#8c(r)$H2ZdMp8N>Isz`u&`w}bC{P14)EM$Sw)jTO># z8Y^USY3Y=Sozl5X-ATL7Rd*(eN#)79+RbL3+`wyiodwp9-{LF_tb-Tt_hD1l$!qi# zEK$;M467(n(pmEk%9K*5;3(zSVW5f^aE_9RU$Q4HQ%d718C;>1fy;I5M~`9t2ipvo zUtqw%6Z|*D7uc!9^gTqx0eY<|K$`sR5y$^|E?yRgE+ZrNe6QN5HxSuM&T?gXp>QpcV{P77-BO!dJV?-Eqv{))bA~5(vZ_)izx%IOhW}d zGBM`SATy`eO=E>rWJ+zCm%uL2kAaXtqk5%43$So z!$I!Hr=;Tyd;2=2R1}my!2FU5-tl*9E4WI(VkIKY2RjWN2g<_!;{c&+;+!2?{`S-&Iwhj+9*6BZWWN zWAMh=bQ=eoJ4@ev8@P@j&d~}1<*$)lBLs??_{i8zbdQYRM0O;n-9$^@>W|Q$RiieG zbywWfi4>jeGVgaqM|o!?$*!hFX}w*GTE6VdvUxUlI2|DebfDIJXV}0SG)PVben83O a^CCY#!P|W6${SxV2D(5D%MVp(c(uwbvE-6Mldf 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 Zx=jCZ+@f6{>1JraTj<6Frf>&`egiIpn;ZZD literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/auth/model/req/SysUserUpdateByQueryReqDto.class b/target/classes/com/metalloop/modules/auth/model/req/SysUserUpdateByQueryReqDto.class new file mode 100644 index 0000000000000000000000000000000000000000..6531511b1cd0da5d8171ebade7049168ea0c085b GIT binary patch literal 3696 zcmbtX+jkR182?SOn_JU1)D}po&_cmp3Cg``i}Xf|X$ws$0$$iAW3x2Lrn{SZ>Z4D- z_#_V=AJpSHiVqx+bA$>WZ!dU`e}j)$`2&0u@tf?X-K41)ZM!?OGvEB?`+nbLroa64 z;ClcAxaNh6K}l$tNQRqAI<0BBNJdNM)7*$Cc{3$Gcsio%B$%l*8^aXf{@{1@bs%$)f{AScXZDA;e+3cKoB(uGMxIKnh-kA znyR_Na3od@mSsp(s8bh2JwgmMOB)t4oU97YK~6M4m<>TZheifpLdlLU<&`u;Q%CHY zvaCeXN_HVKJ%5cS%xLFjA-p|^9oWg>U*P7bZOyTc&Z-o!?Fpb6yS!)#;(4)ssC-Ak zmr%zL`|b&%6>SW4w6DVehG>J+%HM_vzT~^Y0KK&NMfl6#S2((s28z`!KgE)u?!;Xxy$cMFTLNPC@CheOwOeJd? z3@4mm_R7szotuY*F_ITAF*FvKRJBN)>#CAg-%;k%WL9`4PY%oQIn_{U;B+>tnTn~> z)(kx{5;xvf78bZ3Sw0-m6iTrT0ZPE6szl<66wfG83cn;b61tibs~Lj7U;lFLz181t zef;RV4~VO^Pdm+d48kONv0&uF5OryanP~UQh5bRixpbtq-JwLS2RyE1%Xr zy}$PUEi0KG{cvmT`h6>zYNohhPI3{`=*mM!g5G1@JoF@ZwETZLTu3 zZ_uD-m$gM6vDmN*(3p}iHJwhS51pmQ7PLUem28qu-S(KKE#`C4&9pj3N*2zpd6Lh?9 zo;XfYew@Hb66m8ft<;Ji-?w0wR^k4N`g9c1+e0nrJny&r1BDqnvh9@-nimps*Vpih zWiH3E77WseP>cj{3NKSz3Pfjc1)$n;puNuoI*lQ?3%2wTps>c%)qNMN$eZO7OM+7T)rL4KF@Q;pxI+!~a2=c}a^@ch?t?rJLP9 z!S@kl_s#Af;hXH~x`%CrPwF&H_0X$N>irotVd){Z-9WH6EZsx6D6zXwCXwBJp0F%r zJP*-u1GQl}>?sOKH)$`o!(|pf33Gvvl5#4%28bkQAW1QRsoru)nw&QedJ zrwy;rTgD`IAx1q9^+3_(_xk=sofp0**zQF${rT7v?6kUm2Ai0%GGZigk+g|9N!tsz z%7PK0^;TXj2AT-DanfNOeY^~v>KOJDj7WfAsgiPY_O1EtQEpVxihZx^Wy+m?o8E9K|{6xe&l1oF_Hi*he?v8R|&| z(#}G9N&|EQ^D#z5fw89~wDIi{15J>N0!10Abcn>tf-R0&+v-7TMQ%0Q2r%w`~n-r|?BA`M(clF%GrmSl! zK(<<<>p@#@Cp9fER6$oE%>1HOh6)4D9F#Ff`?zqiyoSDtOEe)7PYjo-=cD!tJqi-^ R)lgv2ha{C#js>U){|y5zZ&v^S literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/auth/model/resp/AuthenticationResponse.class b/target/classes/com/metalloop/modules/auth/model/resp/AuthenticationResponse.class new file mode 100644 index 0000000000000000000000000000000000000000..2e70ca06611e7042c9072d1f9b6d87818dc0d55f GIT binary patch literal 2933 zcmbtW+j84f6kW&GEw++4rb%m3LIWw}T9VAX1# zcaX1p)n?81^Hww1lM}m^Z`l4pevNb64V;PF%#pMAg*G$m%eUVHG%Qj7-bkw zagHGyIAJ1(mjy=d*uh%diDR>Ku|1I+Qlyh6UXk>gExCP3@~Vkbk|a%%n~`(U{+fx` zrF|%}OaBr$ZQ>2QN&ogNe{Y@Qv=l96nTI(O^H>l#Ubpt`b*AFZ=@CB~L zBZ<7~_p{$JAQ%B9Jbkq6xc2pCeb;X6Si3d)lP!A{t9Hw3IC35tm0-`I2dm}(lk1|u z6yFtP<_qLP5R7A5tCHS^ zn2sTR1dzv?on<*4-VUtF{)TlB$*gW}l{PNXyAo@Rx29R+-7~vS9GdBn>#eb5G6FA@ zLLjy6H5(QCvLmxOIr!S0k++ONUi7@c4;t1%sGUEmVIzg>xS?ZH*5fAvGo1_Rxc7KV z^Wi~ZiC(rUf!DY%@Ljw(BVb5+)pDzB2s35R+ixBe`|C4i>Dst+|G*vq|00HO-{+Vq zqF84;+I9lFXkc5QI9P_+SbkT;;;FW>?QyBPBIcNZlFNEruUWot`#M-_r~5=16swL; z1*ZNR%0!34V47Vc!A6kelZ}<5glu}PH~SplX|O(_(Z0x8o-@I>I{z!gPc7IIpIXb9 z#u<*y5J2cz&fbbv&+#o}>+2)>8TyZ0OrS$F_FN*izX3$Uy+jkwC1SrEK$PhvntU$N z+jxg6N{tF6l$vVu3%@`gEYd`Xh(wYCO7#WaV3OAzo@tIXHfO zk&lA1^e56e= zkB_MGq<6CNRH>>ADt@WLpu)makAhMeirf|zUZICw$WI5-u&%`!zBQ8G%oLZEl~#gI zW{P`EkC9n;2z}`gGha#jR6&soIVD;#WYWT=>4Mr?V!m3NjGWq9IypE6tKor>w@GZ_ zBG&1xicNgPQ35G^j7y9l$uFOClwPJ_6~~zdnF1;DH_)EZpipEXC@h3{MtEnQkcM%n zZ9p5NbekfW7K3$=y;g#IF7VZ(MzhS*We?3t38h^8O+Usg(A#z54K*8y5O1hSlv+u? XMiIc85-9Vxg&odP9Nolie1_b=H@Gej literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/auth/model/resp/SysEnterpriseImageRespDto$SysEnterpriseImageRespDtoBuilder.class b/target/classes/com/metalloop/modules/auth/model/resp/SysEnterpriseImageRespDto$SysEnterpriseImageRespDtoBuilder.class new file mode 100644 index 0000000000000000000000000000000000000000..f4b32a084c606f4b733bde3d6ce26a7cd4c2dcb2 GIT binary patch literal 3186 zcmcgv>r&fB6#mxW3$9WKB%u_Xl9VJiNu%Cx4oSfTaN|HGq;xv@)3v>Y4YJlFt=-{G z`WWp@I_ab{eSkhxr)Mo0%aKT!A>$vq?9tJ8zH`wztAGD{`44~*8m zdd9olcDTE5@6?}(hGxjzk*?Ht8ODmGy$R$nkwxCZJFpmjZm5>s5}G@XQf<4XnjJ^@ zHt*;Ivk;E$3BPUc9{KlOExfiTeNk=keesyY>sl?H_++gkou=>@QnE?3Y6D(1eCixaDib$8Ujy_+G1FDO({okx2Jo_!Ytln$n|u8 z@EnHe2<)!*WJuzD3-eeY)P^Ux7R^RUQQ_nlxQucv_6G z=>;UR?mHb3^?i$oLLUOjfNE(kj}Nhw#Wf4pabu_=f>#)_UG8+m&MyqtqdbCwDVO3# zrm5CS7M5|7VYbB&MMb#{u78yJfbM+FUF|ctQLwk*RIiFdHxo!P%s=k9TDC;h?Mh$P z9kJ@VN^>oVlS#OvT6J}3ZwgmgmV!P9-3-1Z17mc=RaA%Ku(yT+_ zxIU1CRIi;e^>6%4h?$N>uQUp?QxAncP|Zi& zgtskxy`_B9i>VB>uRY!l3e}&?U@ead*0Z>8TG9r?(!ii}yXsKbf!&}>ZSaOx-VwuZ z(Hw`00q7QYn>6>9YDyh;+U2+d5y{YtW(p;!KaJ=obkz`|LQ{8F(s;>Xi=lgRP)>Xj z4%wn?uCQB+(J^Y)$8+*{L4(lTACI~fR-*A+b*VpA9PayqzW&8GS<9lva4i<{q)2A5 zP1%0EDs51Lu;U8t2~sp^(sZWX2^enCDnr+g=$bN{g_w+X1Th&+{+Ntr{426t&r*hP zZ_}MkPnnS{zX1EAXU?XxF%H^xd`xFU$dLO4pVBo-jS=0?FxCSq6QFS-yL|IcI{i+! zDMBBHx)i8{P^29C`#I^Q4cgQz_>=e|3IE)w@q^ff_+~N8e+FMB;h#S>evpR{eSx%`ut) literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/auth/model/resp/SysEnterpriseImageRespDto.class b/target/classes/com/metalloop/modules/auth/model/resp/SysEnterpriseImageRespDto.class new file mode 100644 index 0000000000000000000000000000000000000000..265be44f41ca42426d51f5685027b50679dc0f59 GIT binary patch literal 5325 zcmb_gZF3XX6@J#%YGrwiZGj;QkUELu+VYDMlhQ^860m`&wSn5;Hc4MtOB;K!yz59S zr=)2c5)vTfg%(n1GLz19+K>+btrp z8W2K*g0PB4s1hE(%ZW&+Gtv@TMh-{ z6%V3Af;^?$Nv@xLNob%87FgF z8FMjS!Y8icVLZa{iaC@*R_;&?nsC^l;!%7{LSxaviQB5O0ldfw__tMj2amb@L#5y? zE!7{sP7JEpgv|`!w3eG5VhKCtmJH)@JfUE#iftGwi-J3n1Z7^!v2Lt49|vUAcMc z<6BpcNm%jav6l+x-(S3XXz|j!$zciOF7EpID~0!u6Z>#q;nj16w=Z3P>yyGCUb%Jk zjYs-!EF8XZ;lmrB99sPA2UHC7T|f2v#mi@Je0;6&$0Jm1=;Hu4PW*|w!pTF&^VVKafIZk(a$(lQeo6VDubJOO*!V3N1q?PAC;=iGL)vZ}bdCm8Bc-JZ76d$g>^qlE!y zKcPc;KUwW}E$##1tqSf^8!5vTH;2GA7I9AZC~J}4UMRBpnnrQLrJf-`l2zWey%x)L zTK2S_Wig1*b%+Bd*cdd?oz#fD-bwy=ckoSoI?+#=022l09s$MJ@OH$^jlOF~EKh&0T3YetW|%Xa(w z4lQL{*@F_!_+#J!UD78tGtFyM$B1Rk+q@Wtcbr}8LgM)Ln(Q+}87-I78PE3H4&z+_ z6`YdrP*p^01xmqhneP7$WhuK+#r?b*bn+ln5#F`1fPqClhlsGZFfrV?jw(WO%?qC%+#Wf-YLDi8$J59RrGw>ap|Scn6@US=!>4%2ap5j zdj5vcyO8V8^?ZiVXm9Ky);o_B?%&nRKZ!u!KhPKre2&($Q2U~Ri+HGrh$Un~Vu@f> z7MS4Yh@3@JRE`FHp#FqHP=6v6RRk#Hfs|;-2O3B;5HyeoM;inv?137hVIOE?qLHAD z2{qa%K&l6#R0IXiacT9w&fwPSVRy+(wfY4zm}R$U!{1?IKSR=izrdod9x;4`IZ6TS z#0fk{NyaE%N0w5Mely5XQuwUHrWC@jc~IslHQ+R!z&xce7&tsnsS#J%DSt*u#X-(( zD~BV#D$xyd-BTk{l2(%3cjU#xOTI6?#q{mwZHw893g|emrSfC*K1=!aZD^E&r5Mk>uRTc%$=r}_Iez} z3-~$LDC0G}NU4sAI)qo&&EsGav8%w<>BLQL-&AQU-N+G|HRz#Lg}Rc6i-(6 zzg5egVlrOwcEO7z405LJF%mf^S*&*fO|iZOw8o-=1+>MY@&c-QY@0L27T0&FXS93g z8~L1Tl-OVG&b_JLkwk+JIFjhava^xeWak_dhm|-{MBA_I%`y(tsSdAJUe{j35gG!F gwZy{Zm5JZS_<5WC28hsw?_c;0yUt0x!_E`^FPS!KA6vt1auz-Ug8VurHG=Rp9sL_ZRVG$%Qmv9qeZnL{B49w1KW@a(ue!oAb z@}3V6Q)SAOsY>NJ@A*2ZoHO09GutgrX?XLYcjx@O=hr>kJ>CBUfB*a7PXOqL9~z+s zwxwXZ0ku%apk>)yHPg1~ET$)N%RC=2sJm=AR&a&Ewyy5E2B?RI6f_#J0}KXpdAFD@ z^1!rh*Da-sZlP>*KW&zSB?`Em_PAe4Pp|pcoPc{J&+_>cDno(WsS^jwmR;Z;gBq)V zgUMD#lXacNKI(m^0nO0DU?<-oj+;f!pf%EZI`AynzSV%;)P7f`{Xn6B!}5vti~(&_ z+j7VB_>x=pd8G1L1KO#wDepRgnGYtp=erKw)?vVYs@Y-lMbob62MstxdR=MBb@&-- zdc=UE6{(k`P6Litq_ZSFXFwN8O}VmfIXJj6`t_)$$AFVmW0XAiwq^5CC-7XVc;0~1 zRIwwl0+fr3vtD?^3kIACb&Fb7^s@$>BfWLKi>#IBj?d+7FB))xs++?{8Z8Wa_|UTM zB?B%|-A-9IXy#XB)nx-$5#8qIy^O~TR*=Dwj}~ZzFB@=`>I|!pF}=cgxtQY~RSX)C zfgv1vKD;Aq6)jw7ZDIn8CN7>qYjKF@t)gj%lRj*~2wcY-%rf>c9hgDcXRtdm-0vx!PsA2k*5sbf=Dda z`BNp_u^#bjR4=T^ueQE=gj880`dIDk;dgY;HNso)b_z@ba*&VhuwuLnQmdw2<`cIW zoQO`g*ns=GBjc1$*ou2MH{dobGT2)*S9r#C@@8<;3YPH74@@WU8T%&+d%AKeXUQYh zi8{RxQR1uSA&s7>GtJyH=$I-y0d7^J&Z^~GIhzkSj*DBOg;P(*pzRiO?n-)uJKUrF zsE@&R+LUpV&f?i3w&58QZ=}|4-n8dT&!Sk0+k+(wN%Psq-@!IJ-Eln2%F^uKy3Sh0 zc(CLaCQT200=f`~DQWD?8y9c2=7spUB`! z*OPRD>##m>#q2ZKgDho>Ko2qPmc2Y5M(4$#UFTU((_M%f=YDYA_0h<*;O`yyfoGP) z%JZA+;G;(P7(PkCr?hQ<#-Ov(m*uRwD?BX*B6jj&bepcX#^9&uG|Gkodfjvi=(Rhu zuDen$^{HczD6t!7)=FH{{8psB=H!ux3_AU33*A#ae8Jc++TTMbN@L$;75dq!!xbw| z);+FB|4m}GCnqgt#Yu=ba0-R--ni=BxH?N$>()1P*I`w}R8t)B(iBE4boBO$b0)RQ zFh?ZmlS!$v$0S8vF~t!xOku?8Qdse_80iN5S`2`ByN#cQXaGfUFp4e}%m=}RZ6T-+fwZVnJtu#|kGptT1J$TD(L|!K zv0Q&8Y+XyVmMVTTyrbhcCFYB@Ecq0~$G=<8-<6mz-V4d6AkJ^o^YgE;>`9VOL7abF z&p(!!FZMUdry$Pn((_Lw=8L^j@+pY(PwM&IiTPsRm3#`~{L^~=slj4x1HXHn!X7IJJ7C!EKu_g3=s4c(;_+5_= c^dXkd;Y*BK@j>hH{{&w_1AGnN!uQbrA2gorIRF3v literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/auth/model/resp/SysEnterpriseRespDto.class b/target/classes/com/metalloop/modules/auth/model/resp/SysEnterpriseRespDto.class new file mode 100644 index 0000000000000000000000000000000000000000..9850726564fe1c02b7ee961a85dec96b5f1be1cf GIT binary patch literal 18130 zcmeHPd7NBTl|HwsyQ`Pi`}#TySt?s)>7)}BUI57ot)0beEUuOAO1hHns!mmP5R{o9 z3W)*<5FjQ7L%;+y5)>-LbOd!qopJV2#~B?R_18->i_AXbDB^eSy;b$zt0z?n`ETUc zl|J`;-~H}=@7;5kcdGgJug|?gMAwT{fP8|s^uz}`1|q3&e}6na*f9|A9qNxHJHkV$ zJ}yN1I}(xPV8_NgldEE>NMbM%O-44rvoaMAdO4R5Mf-ariAoYwVo)iS2`alT8jGfG z5agddXG;Z@Q$>I(4XPqTkahXZ3-U#K1=V%$2=5Me^oL{HJG$es?Mu0Z8iQ)7PEbuG z+v&C8fry|68+&6a5!L(#gBqD%pW`pR6pKQ=o>@OSai^n31m^#&f2Rb8GkkF%mLpE+fWZBEBu!AL)vv5^)CR8?=Cds#G)u_rUhe30YyG zL5rk6%FLX9u|Z4N-;imdJK7V8B_q1p+YEX;!?p5~x_Vb9aM2pO)*y?q8jURv_w3Zr zbp~B8tHpZ~D-x03Xley|-qp)Je1}0dGG;`3SA-M2YljB5MiLAxH)sW|MAv&{jqd0` zG$p7-J-~r5#^>_r_LY&I=s>t%KJ?WF-9$H|LU;%*Y)pkyLrFo6wkN(k9`BEYW0L(& zgWg5mf+~|kTcNxu%ELnsrlC}{zhh-M6_L!f2CZXeh16vtckkT>ZIJy=M0P}aQX3*+ z{n$4dv{};8Z%FhmOELWxgKm}Hp}}6|t%Ub>gWf~$6;$36j;-1?6z&()Jlodcbz50` z>73h{{CKW!pLu!J;z3sW51HNQcr+-4T`XAT`n|~5(Zs_n@O_Xc7ysT ziU$V0W%gUv>=4e}G_JDKpne)aoS;f>K2V|6_#uPtWRS0-I~QmSeb}InFjN6(y^J;X{+>a<@9=iA_a1{j z>hLaR@5c=KID5I}<@TUs@P32#GFZ#fG49o-T<9_Mpg|91AQ`7B`WQN3 z(8CNh+nUP-ATu5{=pZv1z>rs)i$R7TH|Pn5`T1yAhasb%GU#xo@;YZEGW=xBsz94 z?udu6CCd@8Ve5^CJ2v+8MFzr4vEubcl0Av&AlF8FBj@iKIeWNkm>`uqc9 zdkuKXti(Gp zHD@NGEj+iCV#4D81Rm*DwUZZgJEr){-=@FWDFH*bL`}f8-Pq8oz27Dk9ustUbj5ai z1V}@7e|%tTd}qf^kys?blRmT>y5l|J{w-ld83Ib{l%)Eih^Xt{!X-euG^zGnjd^qR zoGn-@)p%l2Ul;5upNTiy&XbZ@H#d@Sd`(i zZGEuefkSP0Y&OC)>qnrnj$=!MSmbK9jf_&ZZC{kbwrRmu#U_*6s^D3`@7kcKo8sJ- zD57gKqIzQAf~bZa8xK=I3HQE(Zz$go$Bwqe{@60h0W+(?wC_wZ&o{R*VV056Q>O&J zPxftyB4jros+iq!AkN}EHr;!19#!#FUnGH8<1rfK(`>o)NV85l<(VUMmZ?{$!`CQj zxpS-Dj4P(w-Qpr=$6BkKpGBHw75B*(2QgJ6A83#jdhGjjjAg}kdDSKM=XUKFB8uqn zRY^s4TE@*)j7-r6Vuag46m1}{O}3gSs*Yw3y7DZY?WoIJuX^B!jRvjeaH=b^9k#Pq zc@)>zYKaK z=m_rGpgV#aY@Te4)(7*$uqNmVHY4Z=sz5LkLE1vNXbZ7X6U+=P9T(L>`>Q3yQqVD= zji6)THfF2a2W_3|fqhigW?b1JRu{}0M%B1Axpza{wqsOO1?`W&Qr$uI=&OUy=UK@$ zGtaUzXnRKGskmB^h4`v{vH0D2EVpi5!huMwcJ8&=wgzSvVdcs#x8CLa!{2YO!3%cf z#`sX8C$bu^LUGXYdQZK8FAJDD6k&HicF$=XmPQ|aaP-{4DJwUv!{V_vl1#0M@cYOl z_Dkq-Dw#@z2i0aTSz9KyRf_GRFCd~g{N((?lhDb2!$E*YCmZczoy3;8NTD%D?xHikt2njCj!BV^heyOSHMP#0tFp-x$T) z&T`Q&#G_ufYj(8vdNFT`b2f5%^lZdV_iV&I$85w7+ib)|H5+BE&aAbVEyrvmA=|Rc zW!r4TMcZs-ub!KY*y~ygZ7w|`FfH#{iI7$p^j- z0Ev}+;7pTz6$_3mVDrQ0FYtH2mS^C(kuDE_W>Zik`MeX0Hjg!fxiQQj7dK5 z0{}>n_aBgqGT1ORE0eBj3za{oX-0q|1{I3N9tuB8eZp;6dl@JzvP z{;zzP#BDE={{`5B#_?|%eiMe?1#MrH2ofo}W(RO)l!jiS09W(bs!gPSgvU?>`X~Bl zl$=6Hhj<88yM?9|6hex`L#W;@G`pY>QYjunO>UtD1%;4v@epct3oR)qg#3($P`g{m zDky|(j)%}Bx6q9Rg^&R95Sro^T3t{GIU^6D>29I!fXkW ztp$aUzw!{8=N5W@K_O(jJcK&jLcIlrkQ?(5>U0b3C@6#!nupNUZlS?~LP)lG2wmeA z+Feixc{vZErEZ~*6cj=R&qL@2x6nrm3L)L+A+*dbw6~xTa?Bn=tK32l6%;}$(L<=q zEp)J;5R!}@LTlVYhYJcJDd{1!-Ys;jpb#>c9zq-4LMI9eA>-*Gw8brSs-V!n(9g*) zmsSgcyttNy=B6p|Mb`@1AeCAaL$8p$=&Ie}Yhah+B!x|YbJ_e?`Zq86>SE>99#hM6 z!72am-tzUu%B!8Kmgj;~{y)6sn~IfJ`&}*11*iOfdds&KE3bCVTAm9|`Tz2kZ!cC} z?Y*@;7o76{?JYm4Sb4RB*YaF&%KwkI{FGwl)j2@RbHOS9zuxlGi?r?*=Tt#IOTuoEkCbVd38S0@?3Dr|H@mwqgZ)$%F^;& zaLT{#E#FzJygI9Cc`i8Rf9)-Qb+Pj5#HZ!C;FN#ETmG72<<+@S%X7gYj}wsRguJv^ zd3E~K@?3Dr3vc-wij`MqSS`;5r@T-2y_S<@#mcLbu$EtuCto5;z2sLFE3eMeTK=Xy z`7#mklJ6>3UY*Ld{JZkx%f02-6f3XJ_F8^jo_vM(qg`LDym~{R<+d^-3utmC>$Ui(cbb?AtPR;!ql^>>3|EalO zrSdiNLTBhUS%mSvwe#?gRWkouRArWYlj={BG2bjXL*Wc#n^g+RHml4mWlq^Qso^A5 zo26!%jkLoGfV9IZHv>#6*Q9`1ZX?C43Xoz}rCGtGN=>RTD{Z7*RuxFQEW@l~lA%ek zY^0P`4N}UgF{_zWqe<0fjg54NRSVJ`R-IYPq&iKiHS27oyR3SU?y?%pdL}h!QoY$= zBi(H^f^@glWHvIXNs}7QCL3vw)eO=etHo?)Qi~=vn=Lldy;dto_gZacE0fwZsnu+= zk?ylhknXeEO_NFOnq->oHqt(80!aI;iRJ_*P1K|b=0qFm0c#RS4_K4UNlcooNt4XU zHqw6UDvM$PG!vymRNri1jD6*Q+aDX2-) z&7h5R$eIDtA#0{NgGn4Y^O#S_*7Q^vspO`2~mu#uj#IzW2PT4;8# z(n3w@Fc;cLr>sRFow7R3MNI0{q(x?@jda>t4AN<9iMg0bOEhV*xgIfc`V-}ZJ; zo_%~xDy%bSAOEm0L^a+RHv3PA8oV*|QPBT{sD;l@A^*do4ps@>hG>Ij&<}k-5hko^ z`l;^+q8(NZ{y<__On_A@%6w@t5mud;;d@+6f>kf(`VNT6uo}cWeY?a}uo}gB-%c?F zR+EVPy2Vsj&0@&6T1xE|Ib|A*;DaRaPQ|6!Uc-T`Z|{}`_MMp#S4GQ5ADL~8@(zoMD| zmA_6c0osb6a`8H~DYN4Lw@GTz6ozZjEa5+i(EFil5l8&)p_Erk4nO4WUw zW|c5tmT07$7h?tOuu3I_by!v^H%l{6%qo*mSr)?TtZMDD0usW)tZM}_P|7NoPim&>^cyLQPo+n*vqqh}A41><4tM<_z?t)gqymEQDQxs&(9I zl@K-vx>jojI$^a*s4WX&+n{PaXPFYhjzQNlGteokT|(_y2>S?C>$EjNLfAs+S`#ER z(R29`?P>_?@$dINBbJL582_cd<6q{SPiR$Ztz9LO|VMoHs4xt zGpsU7`4(fM<>hC;uMOV~=H=&e;&t&ZSQYdQ@iWm4tCD^qz9rVcs-j2bQ@j^eyYB!N zsQ1B|z>{$03hI1=TKTK^Qo4OzT_gOzzHH0U_NboIT#k{ZThf-=!;~r8{O`iH_y&*cFr0-D|%> z-OKgxN-FA3PPlTN%=PmMi|VdUyrNyr_4dl^qQkCN((liv{h!7+6#2_zck;nSnG-3Yq0;ni4WA(lk9} zR;FoY$gE1!oRDdxXzPE$w7tVvU6$gEA%)giMkP1l6X`ZO&KnGI>WA!IhDX<5i@ zO4F*4*_@`XklB)^H6gP#P3uEuTbee8OfyY+@A8}Z+C-V^bN0o-A^n{NT!;J$E5CO* zB)_xjmlo&gOQgjqb^c4qL-K2=WzynAbwFC2Q!bYlr++J?#hKblX>n4uN?M%%G^E9; z%4%tGR1d; zv^XKsCN0ignDRwQ#6+jK!8&=te5rhqoZRON<4fX;;mhC);I4D0xx3s^?jm=NyT#cv zPH}M_ijzg$FsEJIxsg)wL3F|=!mh6ni>;yuKndbXh+bIb_#MG#rx-w~0b>n+CMRN4 Mfj_I;C6Z+R2Ayh_#sB~S literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/auth/model/resp/SysPermissionRespDto$SysPermissionRespDtoBuilder.class b/target/classes/com/metalloop/modules/auth/model/resp/SysPermissionRespDto$SysPermissionRespDtoBuilder.class new file mode 100644 index 0000000000000000000000000000000000000000..d32601bb74e0d812ec1f200efcb84bc86a250973 GIT binary patch literal 5572 zcmdUz>rxa)6vt14vdcOKM8s?G5>UX)YBU<LiMd&U-$$-$19 z%MDSFeIAwFSguin`{j^F&GORgXpx5vFN!=7JVDE>6hk)SOzin}9x~|g>KM#?JDPbB ztd3LfA2`qhy$tpRZi6%EOZhCx(9>Rh4jfLrY8VB5cEo`JIEtUi*G>HFaO$%eA$;xz z3H`VOC*UNyMIywpr`_fP$ya%pxP9orAdSD+bVDA53^rq~nZcN0~0X0KT?g(Zo(e#o#GP@VLLrop>MluF#!&%2V{m8pTcrfE@PIbxL&olo zq*gB36sfk}06SV*tDSOct!&D)8*-lB^Y~aI+#XJ<-Ch(G{`PiqmRrctfIFNYs=7LQx^6<=02Z6v-hY2B~?C6We zir6SW-~kWuZuCv}pT&{`wq8nl=l|00u`RV@kPTa!?8tLw~4(8sCIMZM2#O&etTFco^ zM0?oT{uNRT45mijrxVWYbs!5$uP4bKCmcF8Al2ue|HARnGB8nPYDk;+-$wY>fQlh37NQvu~E}~Xj z4z=HrwrRg>wb}w_l8rKO<^s&I72k~_j#=g84udZMIt&}@Zd=X*#0&;^c14Y@)*kg| z5%oMkAO5012V56ybzxn_x`ULnVMCp4*ib4PHq^z24MnhFLk(=$PzD<|l);7#MX+H* z32fL<{2DeCzJ?8juVF*gYuHfo8a5QSh7FbNHro-LSNzKf=k_T+mGLbj%h+3Bza>+? zjK8!1fPauY!(Zy0K6wr=uud-z%6a$-Iup=10%;)&V;6tNpI`B@1Gb|El#528vtIL; z)B(|YxAA-6Ya9PyZob+-noo^v{D}WV;=jRu MfNlsu!X_O57w?&&xBvhE literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/auth/model/resp/SysPermissionRespDto.class b/target/classes/com/metalloop/modules/auth/model/resp/SysPermissionRespDto.class new file mode 100644 index 0000000000000000000000000000000000000000..2f66dc5d525d71320b3c6ea29bb7ad4366cbf381 GIT binary patch literal 12892 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 GNdF~oPOM!3 literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/auth/model/resp/SysRolePermissionRespDto$SysRolePermissionRespDtoBuilder.class b/target/classes/com/metalloop/modules/auth/model/resp/SysRolePermissionRespDto$SysRolePermissionRespDtoBuilder.class new file mode 100644 index 0000000000000000000000000000000000000000..39b12449b12c1982c3541dc20046ac50135dd7a7 GIT binary patch literal 2116 zcmcJP`%V)<6vn?P(3VO?(VZ zFeI4x06vuQ47-6s%f%4?*twiN^E+q0nK{4z?EeBViHQUvXo{gZi55f|(wlsnTMl>E zt#`#uQPK?23F%5b#n6<^t+gVK))*2=TtSlIb4iu0ve4Xdl&V-|Wmg^HTfC|_%tSbr zC;W=Fvg0o+M=S}iEPY=pcbTlSS`D7|W4bCGTX+l+X;V^#qpS+bUC)~=t|pN(DMURY zFWAO(Es2aVB`b%47VH>07^W_lX9Df$GzxVwjAu_~bKX3+mLaXXlemcUoDxd3kk; z(xbF)(`Mz_2F}z?Hs?)TQ zR583_xP7)Om9s!s3{X9bP}yjrmP#!cZqY1CeJ}M9Q~T;{RQyiZqU1|;o&0ap$fCc@ zScdn&z8_%vs5MYfh3lu*0L+pB+@ZcUB%?I$QaT2dC!k3#Hazl!nr}3W;3TRua0yZ5 z9PVR~yju({eS)8A%x}9eKhPxPr|S5b#{Be!`GLM6KU2pa!adru(PxSjG&*+tMEl3# zU6N=QZSzENZ3!wFNoiL@<2p3`P!Y?HHv# aPLUqaH;$(!BKgMYjyyvvp5rCmfbPGXG5?hS literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/auth/model/resp/SysRolePermissionRespDto.class b/target/classes/com/metalloop/modules/auth/model/resp/SysRolePermissionRespDto.class new file mode 100644 index 0000000000000000000000000000000000000000..188486a73648c62293f8793dda26fc4c637c46d4 GIT binary patch literal 3766 zcmbtX-*X#R75=WYt6ketttfU&OPS&SFogesQog%)6|ZHPbS56J_w2c6 zzkAMie%$px{`=rB08Zi^11W*G>R!9twnMAc^1M#D?KQeBJ1AS-uqhwxR@t|MPI>KS zuD~OXj$mU2xLw;t`nXTNYBi!55dHcf#EDh zkQF%fWNrwgoQ6QYcHO#Rm0Om(S+05R=Azu?sVqk278#!bR2x!tAd7-jWjl}JsWyhW zFqXwQ4hfib%RT!}*J=rj&m=%EZCtnO;o|HY()j5tig-pq-?YOjcQ4G$CQPIKhcSU? z4Lp~{^Aa|{wKiJxr?}d6L#J)8JAp&RE3WH>R>%UP2lF+W2k%;&o3>xR zajfiFEW8~9mSw}S%4_we-L@75MjCcd_nnS>o4I@V!{2QG>X-le^Ut<_be|MFy#14h z@BO~IO!1$;`2N2?{IL}CLFCN3?aP|IDplfwK(0r_y4C91I_Z)>LcrKiWh=13WIkC< zKCU$wk*0DsT60|cVz<3v`&SfeM`G5h?u`Mw6>2T7z2R+@&)cr;TcO<`R-xwAt=76l z^2u|IqlHa}M4x`bPzbLFs>l!SshZh!^1Nb)O|Nm;@-5C1vdt>y3#y7)yOfi)%Pe@( zl~_L&Lk`Lt|mGtxxjNTgJK%nDEoy~hL5VzQ&Tg)-T#%&mo1eQU+)#3bpL zSF0;$=~Gn>2|MVvLiSO#p)uV<&rRru%Z*HzIksDj`A!5o?h92c7c(>p0~+#BAOT~_g^33AS=hn{~^;Dcmrv7rKe)p8p= zK&ES+x7F<|CPI#hNoaPxc;#lt9$@}v!oD|s6RH?uiO1KP6WWU=9D(Ee(Kh2WPKxc|=nFJZIDh?_c0`EWj7Jz=Lh?!k4(f<8AN4m+=g~g5z9xnNTTIki!s8@LM2- zQ`AiIE`Q8FLA-t+>EBWo_$vQqcn1#RbS%HZJ7+ub)SG2KNejL7M;P+8RN}P>oS{bg zLjx>fnfKGYB&Y)7u{QuH*AMjKV}W>54gkvc1I;`Z=q%159g$KYprj>Jn!5|*ca)N` z6(XcV$|8ik{5kaWow>ilT$wN3!@=m0!r_ba{8P~u{*IBN_7M);Ms}g7 z-NTWd#biaN$z&x{)TK@4BNT2USJaD{gwa&RpwU#tEE>|tjE#(<*)!7a(4lmq{#1^x zDMugW=oT*EYplR=d8(y;*D0kiOz&UgmBtju z+&3s`boMY_r=&+Dzl+Q#RPdYA6oSO^tL+n-?>wiZVjOzUpl74)R>fwSgxQW|zm~>* z4g3b)R6KHgrWpcIkQ7R~cuhTE388=Ls5(@0urP2A^53Kwb!VX7$IMWOz2ArHi v{i8z1H))*0Tm5I(x9~O>G!iFZQ8Ibo;MK%+J{9;1zx%MomTkdB2gUyZ7rYO0 literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/auth/model/resp/SysRoleRespDto$SysRoleRespDtoBuilder.class b/target/classes/com/metalloop/modules/auth/model/resp/SysRoleRespDto$SysRoleRespDtoBuilder.class new file mode 100644 index 0000000000000000000000000000000000000000..66a1d7d7315cbec5c05b123d06a7dfa24c30453e GIT binary patch literal 3987 zcmb_f>r&fB6#mv+3`PV3gj^^o6bQCSP%pHlbx0GS1X2f5Oi0tTG;4bc3bN#pR?P4w zeS`jOXVOV0oyi0AZ{MfWvyvRkNMSsbAFI_lKKjntv*+f&|9$-iz!IKkkU~cqof^8( z%`o_aA93B}*1o<~ejzH7q5HOB8S)N8M>e>w4+f-L_4!P4BDHo^BJ(Xl%!*XQbQVseW?m*R-awcFpA3zX<_lQDF}Ty^5wEkCUMJGa8<)K^=V&K zxE05!OT)Gl!h0IV)j2a2M{p?~yTVcI_ccr?c5lGma`qMX0}WG{ek;6VC|kqxc+xQS zRf6!<-Ow=WOM3Mx@sy+j$Z5#?+5&b%+f5C(lyMo77|;Lq*fBmF+|QzOaNt zL0c_QKCV!vF$@$9OKf_zvT$}(qA6*+!p&Xo7>W*=o$|mSq+;o#T-Qvyb5_t*R<)gBF?%*(y51gX zH?nzzP@2slbUT&BlI=Mav1X{i8*c3_^GcpTHiawKZI`;)Ao)_d(&6>sTHS$eY-doy zP8yF@=I=60H?)_6tQ&N0I;(JKlC1JHGDRjCh77j65{s~6%{M>s7X z?i|-eg7~wDd_wUGAy%jhmkeq#J@}5{*At#-CBvqhHL6SO=7egiYFCX@?P0%EuaSo6 zOT6uaO^VuIlTf`(QO(ZQq*OywRI`sQu^fZ8VNpq0F}dpsO0G+ZmZtFo!%XaAlKh>< z9>ew1MQN-FE(ep;cvDpN`{+qC4H!*DKsW7oXiurZBgUgKBgUgiBgUhdBE}m}&_TmQ zOpZp07>|aA7>_1~7>~w<6TAy_78>yAJYUh9PQNn6$-e^o-9P4Cda6T%W~h7gRG{jU zWvtL1bqP&LSVe~qR3Jd*ymWr<4|@DYuPNN6XB28Q5DB43IP~+^B-f?T22bD*U@Zy1 zzis^B&O&@ewAw$MjDN9h{NVmWd_}b4kK%rk{UdGT2eB05kH+w?CEI_cZTuiELwrTF z+CQFrzhiCV2QePvkH_#QlJT#%jUVJoh(8g-pTc^Q|0mnV4{|TWpNiqnCgabvjUVK3 zh(8;{&nNpQ+cths6GHra4F6Vg{LHnDAJmr+UlFbGvw;Vc@~Y76q2I3~3x8q$Y5paZ zh?nT6b&=Kxtt+&~XkDi@No$5yme$-We3)EJg1WSjSeL#*G1Ob8s-o)GB4M4X^G|%D z)CQZc`8B=(PSd@Zpt}nXNm~k=EuPr&dGmNgdk@+3Ev+YbO4Ja^_Rv4E@6n5A_z^$h F>VMUsT~7c2 literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/auth/model/resp/SysRoleRespDto.class b/target/classes/com/metalloop/modules/auth/model/resp/SysRoleRespDto.class new file mode 100644 index 0000000000000000000000000000000000000000..920fd7e6ab9cdbee96cbdf63343784ea954181ea GIT binary patch literal 8686 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 literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/auth/model/resp/SysUserRespDto$SysUserRespDtoBuilder.class b/target/classes/com/metalloop/modules/auth/model/resp/SysUserRespDto$SysUserRespDtoBuilder.class new file mode 100644 index 0000000000000000000000000000000000000000..6d809f677f130a0fe4605b7299bde81a78ed457a GIT binary patch literal 3730 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 D6zp`T literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/auth/model/resp/SysUserRoleRespDto.class b/target/classes/com/metalloop/modules/auth/model/resp/SysUserRoleRespDto.class new file mode 100644 index 0000000000000000000000000000000000000000..089fe058bbd03fe4c7ee58544f90435d4100b3f9 GIT binary patch literal 4436 zcmbVPZF3t}6@IS0t6jtNAs*T(3Am-mZr$^2Mp-YfezjFI)&t z2TpC?uQ>C3p9%e;cGaP}TPZuW32mD*^+-o;L7|g&~QaZEj5gayyQkEs(I! zTKIAUR)(cmmf8^uqZkv=IhmZOf73)88@ts^?2}WT_)uq59v*A&T?*8@8jc6(>`et3v zIbL5|a%!g(S&zqL6}|NiboI|x{Iw;2HGkCcoSH03V)f7ZCGO7V9!YPEqlGIj`7J#1 z@(G*{ngux6DTPKBN$#8zuK4AXcFks2B*ki+sxU@_7>R<}7Q-~_MPlf5ikee$5|wYX z3SaKAwYIrF-49os8nZ&~b*RzdtVp}@s*I|uaXHG^cr~JtvTd2lAjK__GST$YQDT+15|a7v~OhsYTgAouFP}uQWE+U<@@T>>iRcWQG!0X6QG{fBUB96W5nO zF-c2@THUN_Qk&pxgUrl=U$2#%Bd)B>9qmWbUdgk-ld81-_3?+Qu=Nk8rc;hZB=mm$v{^8GLfYj#zoL(rGPI~jZ*?;7}l>`y-w7;1*l_167W zC$Dy>TGkP}6#BIb0>4h~Hg;5?$84|6vvz3K_gCxH$;9?zsuG$_15aJ3Ivw0!OZYcV zpoA)hnC3~p;PR+5@gsqK?UW6x%$pM9yH%K_v=LzW;+Chx2$Qeqv1+F)b`Ut^EY}Vd zUkD8RRA5gVU7c7ka7o~a|L@A2RFtt(oBRlTlb4Myd8wd$kWH_L&qMr72biIOH-UD; zVH$WJXg3_8f#-j_;V2LNV<^(_GUw>Rw+NiZ9F9{yLCtPH<)8T%h%>j*{YT0IC;6S? z6P)YYu{@Ny9EMDep91kH(~sVQj(}r0 zYp^DA+AZvEc-1$T zQPOY}t0+;@S@RCclv1eR2<10npoW)lj*^LAuqQ23O5-XST%nYK%XPefKEwPEwiqx! z$Do0y_-~5O@t6|R_Yn~X=#7>DY4SHn9RGb>yetk~Mn>-WeznnPAhMO5<;p|@{cH=m zkXL@fu(63td>RC;W+(S+Q&Et2WhYk{Vlz8-4aUSReC4dv?GdzDfu3d$c~enACq{H72L1TV~AaA5PjODYDSHyj#1+GbVkmP)uaJzKT0 zv$5H^>EFS?AuYY@EvB40c&52Oc{=1|Xk-}p8UGm1^D%q}1)#O>swz-NO0MIP!XNK3 zc=K$!jRUQnW%~mgxQ-ys(Fy_Ouacdk1d5vY==e?aj!xV}b~LBmL|fk)h|r%`qc)0l zXWZ0@6rJoc?{`K=d3PkquBJt4y;X}^zU<4gdA4>q9U%vFq279DSjXEmNKOU5N6F;# Z0zdEJeZKW`2rt<9F$?@BxQL%2_dm9Al;!{c literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/auth/service/SysEnterpriseImageService.class b/target/classes/com/metalloop/modules/auth/service/SysEnterpriseImageService.class new file mode 100644 index 0000000000000000000000000000000000000000..69dee9068052ba5ee9fcd22d730b6037e091d231 GIT binary patch literal 4350 zcmc&&NpsXj6n+|Pj~9$Fdo~jGVO0VlKx~Y$*~T>#%M>SyqGYLS+(c3#Zwch*Q_g;V9?f?FN|1S|;r zOj8I)wS?iD%vCktTT@*o*SXHrcGtaadrUf#yR2zx9oCL4bsAA<_X}-ZQ%%k8s1H_O zFx{)um_ldrelfCyoqBAxeTT`|i$Y_%WSYkml8sjWyBr=2n5jCV1kl{+K|e$S_nEgQ zjE9=kKm?PnLVMgTDJwL!s(Jd_at!rEqZKCZd)!o8-1PtOCjK zHX0M8poFr=eNSo723fKaCc=ZUm5YC!+t!>Mt#;anB@qM*?L!@mjk!l z(?Xfz9@m9rswwn8)E53M3)|ox7j~a4$C&ML4>%_EWF=Dk=L>a z)z;Yq88t=DGUY%|mb#C8Cc(n1#>z^8))EQ$Ggw@r0-+NS9caj^CM<3UU$wgENA5bN z@2YGARd-Ph6~hj$)!`s-n<{%QvwXD)vB^y0d*a*|>;+hgnsb(eLm8_|Pdosj*R|+4*iBBOZf4o(wSwP!N7Ct8KuVIlg zRGj0w@a@7`nVnQ9e9CWZ2N2vG73h30)Tbf*<|Q?i#JEos(|h6*qet#`xr*(+$_HEsJH&|ijU zd-WvVi+_K9#QD~!P{lwKcZOP%7IA2;o6{?{f$ia@K{k3$!|1tIJPqS(Z1VWaJ=H2C zj2muS_)=$gxQR>E;l7W`3jxP?LE^fP-zeUyhw#d*(>O*G7>&Xc1rN_D+DWx!Y8sYZ z_|<3zrrk7))zNql#(VoO-ADT~#|J{k2YXi^N*#YQ@|wP-@8XyfHToW=A5!ySn1B4Z z`KOPWah0H>vGeI2bPSG<<98wra1x1}qDB@!SrX-W8s;-}HqHAS#^>omyd11$nW!-R z+_Ur-j4zfiy#&**bUEbZH@Xs26(@ic-&Q@_((acUm_a!9L{CA9ztH)yfU fbQ7kfa?>(Qx9D~;#+?EZc#XKZOZPxyjhY_-L^N8f literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/auth/service/SysEnterpriseService.class b/target/classes/com/metalloop/modules/auth/service/SysEnterpriseService.class new file mode 100644 index 0000000000000000000000000000000000000000..58522d80039a75d5aabb555006dd1196b4a6362d GIT binary patch literal 4180 zcmc&%NpsXj6n;I}9xn{W>|}#1B*QA!IKhqq8*s)oE}WW56_uQ1scYOuqZTd6;Digw zJyrP)xpK&v13w@?DwR+BNY>aO50%4ARrh;(?|a`{y8EAhU%w%u?`Wk?HAb_B>}fsj z>6Rs>qxGceTin%j-`mh!uC|21wa&Kt!1lOulyG?`+N{$Eqr;o}mabX4-PIngZ*s${ z(-@-*d6QW6q@5aTb$o}b*b1XDLvh{Xj5eC>{C7DhSa3^oWFE`h`3m0v_A2)_q`9Um z9g%b8GHST}F*2H3*F9rnDaLlL*$yN1Jz;5W;d*eKg}x}I#dUj*(V?6bn4Rc|uC05% zLV!ONjm%d7zc9da-2$q6mc{5uGsc#IWwg9wvzl{8(;+cGIwq2~xZN@tO(HX3Fa1aGEQ6;rZ-gBhKZDX6!vnoaPb0IHr z0UJ_r&636wt&P7WX`8|m(jE}t7`Hv)0m7t_Xd=2-?;lUK#Fp3daX-y-j@FZ|zQrG@ zs0wnDDM#<36n^lzLhQdbS5^vSmUQ*gKsn#o;rC!Rm;y8ypW zV*GuYs2aq0mwPR9Rd*Q8R?-Jun{Pu+{)noUq=2mH%yUfFAH$+zSP;hz z>Dz_#E<19N?__YrgXs4vb9e8=?J~KtLo2%;G!*a2t!zB5y#=awbP-fdI)0t~*?;%z z7>@Md9+CoB-5-E_wV*P88>YQ#4U)76W<(lhdswid!Sm-3&GpZt@b&tW{RtIZYBpO6l`&6%C zeZ5@u21GaMR>;fOG#gVD2M=rze?#BK+i((X-KM$X);u2aX|}SU7GU5G-7OQ{gJ`i_ Zv;@(8dQkN7uz&;)_;3O8QTB= literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/auth/service/SysPermissionService.class b/target/classes/com/metalloop/modules/auth/service/SysPermissionService.class new file mode 100644 index 0000000000000000000000000000000000000000..cb10d3d1d34862f54901402a0cf9ffc44e0c76c7 GIT binary patch literal 4180 zcmc&%NpsXj6n;I}9xn{WBm_tZ`!WzfKo%$17_b2|u5n>%imDWxWT|W1j-(b^9Gv8m z}71HWNn{^suw0~XQP!&V9y2``Vb*_1J z8ew!XZxSn0TB)&C$G5o?TVXV!Ib8KPqqSx`|6L9W7Ti#5na477p~5$Sz0AEesjsMx zipaU+GHSTJF*2H1RXuHOA;xyL*$yN1Jz*$q;d*eKg+4E(!BuO9(Y~A&m>uhguBCdu zg8-itjm%a6Ki9`|-2kdPhQa7SGsc#IWwf|uvzl{8lOZvWZ5>IQ-)!lO#*rDY7%dW} z!kTDHtJ?=}P2kIjbrH#J@Y3ag4KlBN3gj=5Q0AXB9G!fmaPmiZsV$19Kpr7VBN9!S1-QW+M zs0wnD30v)=6dw89LF|7vmzD}-mUQ*AKsn#o;rC!Rmg3D-7!SK-f* z;b0soSayZwDsU{&YQfeDFrXXjn(sJB1EV2V{DBS}4m~k?{rO;3%MM}*cn$meHo)(a z7=M>0ss=II05>KE<19N?__YrgXrHXb9d*&Z8N#DLo2%;G#qZqjch!wd;qGCbP-fdI)3fl+5h@Md9+CoB-W`B^wV*Qp8Kk{x4U)76W<(lhdr+{V!Six}=6dH*czfEps7nXvRPRiP zo9e$$iZh@5YRL+w+1_weq`4YIN#-UEe~yZGQ~PeunH9Z>if2}QolG8Ax%W`DFmcK3 zNZ--;ePQ65bENFOb|v5wk2Bn}@f*eq@Gu^5bsEKL469)nq2Nt7L3^o|Y&9U+hhL2* zA=*z<(2mvzu>PXI>X&pdGyGL(_)xF*;neVvp}*;C`X=@{R->a3eVdApL416B@rmuk zIP2+DY`n3DPQ&mS{LZEh&LNQV)Xe-RDp8ylAihZ7rEy=v`Z8UK)xla8i2~8p9@T4D zUoThv9-<%U$B>twXga1U4j$Mb{+WJ>x8Wq(x6Bw)bCfX!>1p)d?tg`!H9y2foJwW5ddzyjF9 zjve2?mIcLv58$Ix9KA=H8Jp5flEt{H`?hYMd+xobyZ!Z_&tHh>DlL|&B+-m24B23= zqU%CfvLQ52XO66R?uzU%dyT71t~Z^BLT5|NHn`((Vb()KnFb`%dZpFs7g-`lD^KH~@(z0+Rl;G$eDrS=A&OMaIBt zIEYybYNaO3Mi!@hd5j>h<3D zD0aoemB7EtBtRbY4kTMisM` zH6&`l5C1yeY*7?Xps#{k19?gE*RPVzC=^>qS2)QY&sxsD@I974`=aY={J6`!#fpcE zi)>wZw#sgE9oMHr-QJ96eSYyk#GM|$LA*rw;t^S89Ey+2Wx30GEC=M zmY&D>*Un3SgXwp=5b$!5rX#AN;DHV1OLRG!#wOv^6`ILU&Eg*lNw(6U=HTEOUGHSN e0n>bE(*jI4=~jM^+c_lg8gg@o?t;b=RlfmQ@=(_R literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/auth/service/SysRoleService.class b/target/classes/com/metalloop/modules/auth/service/SysRoleService.class new file mode 100644 index 0000000000000000000000000000000000000000..6fd9519999c04d7e3d1d984a1771129e8132c6a5 GIT binary patch literal 3976 zcmc&%$#T;`5bbdmXCWkE3;P~0s|Y(Jglr@@K&$`ME!qs0(z9H`7pcH#LJ@{!a7Wg4A?lJLR9EM= zB)iUrWOJ*bDO{><+E0bftHH2H-Hb+F$qiZ3WwR!&uD{}nQ>0!-7t_ixGK3kcDOcS( zw?Zw9dKHVy4rlbTR7vkkfxv+4Qe8wSCNJb#4X7*J*%0cQY{~GGTQ;Mj9eBiOa9wtk zjrkDCc&Xz1>0tud3H&VQ8vwC1VpgrrCAfwI%)zk+ea!gkeoHZ3!kdl#w^J z2J5J?qT*T>NN3b-YwuBAJ-!V_U;hW7ys-d&k43*~X8^cEGDL?e^26_|ai^@V$aO}e zsRn~7MCWOCZmOwKRvk-2kJvhEn!5TllnzBUy{?1mI+g7jQEmF|F96cWu4w@z?k&;2 z7He{Y9q_>}S;7TH>UQWzA1!%9;t@2Q*bFK9v{UYP4z5oTu9-Qfk^=+LjT%wdSl;IA zom&T}We-Y@ndJB$vbZ4{NsC+F29j+n_wpicp6cIf&T}Eck?Y+MVxvocYc!n$$Tt+% zmO$DQ6JJvDrh1gF*KJx9XpTl6?dy(;p$hU;8axR$~fH62%sz3G?E zRgX73YjBIj*MnEnK|Fnm)Q3?&Mm^Y0-fL)(c2Oak8iHguz5)$HG(w|T9gO#2ytn<* zeY8JOe85*c*1Y;)toTs(2RckgLYw^sIttOTSbQAf6Mq(;{F4|bFP#pR4|UNQC_amC zJT`C+j-01bVn13E_;~^1i*zaW`!dE?=xVqetRKoEN}QU8f`>HIN;C`6Tx-!hL<{sNYhy8k1X=@b Lmgq5PEKvCuzfr;h literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/auth/service/SysUserRoleService.class b/target/classes/com/metalloop/modules/auth/service/SysUserRoleService.class new file mode 100644 index 0000000000000000000000000000000000000000..dfcce31f737d5ce6881740bde08979872340ac77 GIT binary patch literal 4112 zcmc&%$8r-v5bYJV<%k0qlXDOzEXgDr;{--VCaIvP;{W{Fd&tKnv5YZi4$x}|CDVbNrDzhX_}O_q*uhpYpQdSru1786J*l#=@rKrmpMSmSXd(`Q@W0m!S&TIb3W$&lbPGfaU7%*Z>8 z)+9?_U-VI(DwJFwZA;a}l4@Eo8achdL5QSJ3p5zh0hN7awW3RwZNRaYX%#aq!=7zo zHLn5Dyru~>R`78}Kn1$DWipFtfred5p4SuvYN1|K1nNgLz@9evk6|i+~VM-h9vEju(AsMJi6(qq^ zn;G!CURYU45!s-I-#UxqW$f+-r%v^+NxZ5m+!m{KIo2_{_?VI7zltsU8edDRoCs>5$N0h0+l5$@WWx$t>`%bZ<7?WO%>T(=&dlT zsH{pgfkqPz2vdmEi}c(~tf7`ILq-4CK8sQ(!7LOH1$LdTgvvXX?kYjux-HTJ^De!n z0hqA&1p6AS$ppCH1-xu<8&s|T4K2x|C`))8qJ|^8K2@JOMMGx*_R8GWQ|DTAxFFI& zqw*Wiht_-S_5o|!r=p`NI{t?YR^=N}D}3}9h*~n>$rEK?NhixlN^oLzF$6H{vpO>z_WzN z=~#nqLkJ_(ehMbK3EM<|o1yl%vGd4#)uhiO|9TiajuJ1LEH2{8Smw4Nv-_%stINdJ z*VaXcM?9@?W5(Bw*V|q^zw*?JQ6EO#P(jX%Y=8zS7fcO7vJ+p9h9MfEQLOgHV;Jvh zzH~Q@M~e5jiYMZ$_lAo1b$z7$bilXSm!pFa9SX&VAwKeF@zFntaf;J%U-{4uIswHe z@tq0{oQ5N3s1Vr?mUw=ig?N(Ag?^vM_yS$@mxHy)6A_|Iv89(WzS4Nmvtw`n>(HG@ZZ7_G>uStz(mbB#pv5G^zoEkd+J_tG}*r;tFa N$IUW50F5~+{suD7`KSN@ literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/auth/service/SysUserService.class b/target/classes/com/metalloop/modules/auth/service/SysUserService.class new file mode 100644 index 0000000000000000000000000000000000000000..31556ec77378530361754885fd27777fcbb28e5d GIT binary patch literal 3976 zcmc&%$#T;`5bbdmXCWkE3;P~0s|Y(Jglr@@K&$`ME!qs0(z9H`A^5{S{Z7BK0!5m{x|7AY8lH@RM6MqoN&n#At9`c9f0z z5XpF{;``+~nl4o|+kvsf(K#V>E}N5#`ojHC)nCao%5qXmXuX))P=)MWs}jHd6=88n7s_j?f}eR|s+yw- zvyE%L+;lVt#s`#WCH(sGFOlR8W9wYq@5WJ0kvL|{4ZdmxF;7Vb>v9c&f8ufr{<@{* z>hq1aI4V(pCwTO#dR-QVrV3XwHj!hRUDsV(;_nbi8)Qou)-= zFqlGgo@VE!ni^%*u{89Et+S@7t4~AeP-N5VI;gHw*{%`Qrr-VoAdT#r7C_?O676fT zCO6mtAMBDPTu`KLhmQ2ok~btCLBom7kfKjJ<$mYj`V`@snR6;RFc96S5rvKAZNA>Q zb%0v-pyZfIj_)Ch8={f4xaDmi*|u^oFXHB@{;lRb7a|Z{ALvd{h zq&+e5B_(gFM~RLKkDXfV97@nIKJJL3<__ZDU$!PH)9gl@YdI{5&;JNpI&Q*nLDST1WamCo1e(7BG zc*C;>w^)2Vcr_iw)2B#%81-Y+gYD$Kh6ZUD6{4vjNOt2Z&@eX;1cn`*V+b`Wm z`xC_ne8pqUs}IJC4|RW_!*nFH*6XvSZMqXu z6*>=W5Z|SH;WUf{Q}<~yJ2i#JZyc?}sc9&9NHeWOvk=X-7R^JnK##IE7BfhoHQ;86 K9)rdLm45+4Ps6+b literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/auth/service/impl/SysEnterpriseImageServiceImpl.class b/target/classes/com/metalloop/modules/auth/service/impl/SysEnterpriseImageServiceImpl.class new file mode 100644 index 0000000000000000000000000000000000000000..4b256c7de3fac036041ac32bc14f48f7bda880cc GIT binary patch literal 10515 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 literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/auth/service/impl/SysEnterpriseServiceImpl.class b/target/classes/com/metalloop/modules/auth/service/impl/SysEnterpriseServiceImpl.class new file mode 100644 index 0000000000000000000000000000000000000000..d819c197cbf2d3650fa4cc9dbc45740d2f3f5a37 GIT binary patch literal 10275 zcmc&)d3+pI9sf?QO}3LJO(+nwKrzKMMTQpSN~vu_TUt_DNGZ^2b+S86rrF(DW@g(4 zP?ST(qgX-31FWFpfeMPTq9ERic;kWhec$(ie*C^SZ)avVlWW_4{3AOvZ{GXezwht& z-sF-0KJXBL^YEWE>QJ9TgN{ZtX;_wV@p7sIX}Mjn{S_MOdlqj^qZutJq;<@Ju3=>*!Mu|#KwSUu6#EET!sGbaV@HbD||)3rU@<UvI9v^%oI-NKqU*C(zUcT?Av31IPw>KQIc%S9fsnl4DP--?Wz9HM zhap6ouMA0J#RL=PT&iQ4m~o5{dXsypG1FGwhNw7GnCj#?^G`8cJDLhNy z-j1>bB$y63g<%byJq+du48@?tg6HTkF+`LP5|4?K1Od^)DdI??bykN3W=~T9VUgZ( zU{A88Ts@-0#x80!Y*DXs5=2Q_8q-UOmqJd%(rHt#NED9eo$y^j0KcQ*tXVOSyRRYe zk}JFvbNqA$pbJM)(y<$R=vo>;)Qhn0gs!C5#&A^%R|`*HqoF_l@ zmRdfm!3KZCrjVfX zm8?I)Z)KPbgKT-sC~8)+DD#5Mi?x6n_SBMuvu#*o0!B&DWDyK~HYn*#xwWMUj9Jpw zke%I%TEpRgA9dC zYU@6`R&RPAO#x+5^h8yvwS2Ioq}n`#GB8UPB0xesE*={FDfT9lwzYFa^ArlO@z4aQ z3=9V0b%&E)t+*Cs0#PGWbKr1^6+qGc!$>X;J+hyhKByBRbzVIERrua@MCGh>er?VY zz@)FohrK_%VLMtyokH?80tm)G`KSP;iC0liOCu<<4b}C{E$iqpG;d zP*aNn1{auxEWh$}4>-+RPYsJEcrwW;Dg0Z*@l#Lb*;U{{ETjT;JiC4_f9u4T zCf;Amv-c)mpU*4s0$f)$wt&z4rpVvx`QG4FBR{(0&E>0C@$c2!p=IzI-ra`d__oqA<2WYLEU?U(36=>6zm`N^m#oN>5)@f}q!f8Q z-k=mYkJr$c$154)ZeBHs47cMBDx+L2EASVVh!&sS%x5x^E( zM5x|U$BE!TIda|}X4pG8wx1a^xj0Wt5NGhninDAAaZXDR=ZYgKj)r&Q9vWWc({_nE zKxgj>3lHM-uEzQYan3mU9>y8f*|kH;)JyMjdg!rEybJGUpop>e@J@KX6Zhgi5*D6n zt>*;r6*yS-)_b|&eK=dma3QBQim8DN<9J2__e{(pts(c;kbA4*uA-yNGf4mY$?yFb zXYdG}ms15Ha7XV0SWP@6l2GflbK8ie&C2#Q{Z?8E^)Kqf*TV(|f90?r@e;D-}+xj3%NCDppPlj`yyDL#~_ z%cT{%NRn|~_8h7%A0g+5v4_9HFUx2{;g@E5Wa~j}tJdI}mfd5?ZVxyy-NZYe4yv z_|#;ShabjhwH@}&obspf85N={l+5X}%=v1vx5UV%!wgHyT&@r}h{MlPi%0M|MZRBU zKpQil2q?QuNT}OlJlaAYZIkhMlsrB^4UY+de*5fre1SZ^h%Zg%fGZOM@y-~BXU;aVttqy=7oddLM#@ASg!S(FQXShC&FwuJU z_%mD|Kw~w3ZW?B|K91IkKkG^mt&ihdG*KPC9rg*|;q!O-cLwKtk5T+n{2aehcfStr aeiz>TF}(W={))eIWtwvR1OLJk==vXWgEU3} literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/auth/service/impl/SysPermissionServiceImpl.class b/target/classes/com/metalloop/modules/auth/service/impl/SysPermissionServiceImpl.class new file mode 100644 index 0000000000000000000000000000000000000000..e73b3c316b30d074db560a083edf8d0f36b2a142 GIT binary patch literal 10275 zcmc&)d3+pY8GdGSY_gp+X+nXZr4$3CDKJn_j+ELqw2+e0LP{yEpp(rsnPzuqyGPmp zf`SJgfJGD!zyc~BsGt}t3gWGZHy(K3_kADe&*wXKW_B~#B-{4qAK97t=KJ3Ject!` zCXfC1p+^9mga0HDLtPy8CK}LaV0qF@TWP0Yr&6AmwfL0wGFINnjk`(5a?{zAHCW6# zxj{A3&jACCE8L7*SZScHd+C-0n$R3a!o)n723D05Onbw{l#{pYVqvs`>_mQ(lS{k# zyz6Dk$k*rXamT>I?tz{5xNW8E%!svdXs44b^e){d*v&W5iZ%nyV&WRRkQ_D8sb?1p zZp!NOQYlU+VY#9m9dR6HVj&JUupl71#`98+oiPv}w^K!D;|>FdcW+x7VykEL3a&?* z=)_S5>QipMV4%HQPm~-7I3{O3-NYgxTWc{pY!{StYbN@K1%<^Xj=>TGiJX)6C^?4% z!ClXy6dGjOJXvxQxTY%lE&dqpcf zF=Q9qd^T0gTh1OTE5gv?@G>I?I=UIm0T_xwi3QIyVPl9WuM&@m69oam!YXkj(R$c~17=U7g0MjE zFtA72Qm!5~;bJE>8gZ!CSrMW{Ee+|V#fu|l;M5sYFG~~-=bi9fMgYHO;EXvj54*2k zc_}Bn6mtAb2A~VaP&6@)-E=JtAnJu*cYIgUYZJIKj;n;HuQt#Y_-2r`LHPRk2+_mN zSM!)E*HFzWMk+N1Wj4~qo2Bex2A`XDwzzqhC2Vyj;}s-`Qs+f<$(WrZ5ZV5)b+ME8 zin*lI%V^Ap&Cc9m(?MA(Dn~h3%1Pz^QVU71zK>AKf;Ql0oC}NTAt$$4lvUb~#l}u; zu~};QtOx50qb`M9Q;l6ochwYyrPT%y%@H{_CUXuezkyMOg+X^!F1>{M%6RKlfH=1` z23pFjXW+DIil`zpg);+ZgHsswhBw(cn*umFT4WxpWOB4mYjm6rqae1!K~!p%h&5&6 zkW5=8q_NW~_rpZCCifxsG*G4p2+p`C}+=!LWid5Sn zOt;(1jah}9oyps(7KK87b1-a+XqlH|uR3HW$JTj__k|(gTDvFdWMxA{z!zm>b&3#n zURkvhZD(z&Fg2uWRoA3i(FB_h`dvMgd>z0{wDvKVprrj9%q>OExsoE`+Z7e>*eR|J zpi0&s;kOdZ`a!lLWE4FsT9gGU^Fl44f!(zv;anTmkbprFG&%&s0vnV>veeqr1lAmB z8yKG3idw_rzC&-Q+C+=?^${VP5868%0=k_W$%~8L)F zcAt5hEaq~I0|Ul-)}*|9CBdjcax>6-0CE|)|Np00ZGNORgl8m*6%TMHRjUL|vWb%I z{(>?f70tSVt(9Y8=+QmW%ubt9Sp}-KlsN0=e@SIUVyHXnt`Bj(hoSwd&&c=d)p0(F6p?GV+SzGm{gJp_?C1R7@kja>DDIH{J zWYSyrxwU#T`=|<(16^sDSmrfqBIiRQ@{V8ek4 zP#zcz!s`wuy;^ZiWdc#dS99QCiKU=u??EINh923^%^cK`kh&n8{yKc`IizxyJHIw( z3E(m%D)_!S7$F&My<40;jQG4yzh$t%4F(;lce_WX?DWvE-4(VUPo%m|6Wfa#oDuHO zbX{V@!%nAT3Zt&&-1&t^Wy}iZr}AjN;zidf2A-^thX63+7mDhRnf}zEg4Jxc>np1^ zait@JsN)ibL1IvzeynrFxx}KVN#aQ1WD#{dHH+M3=DAIGyaIR6;_HFW;~%oD}Qe|lUO zR~c%0kz#PZof+m=o~{AU8!Kje!>zeIfC`V4E!<4OYkR3!R$m*AOU<^AAG!wJg45fE zpUr$Mrq2#(zF&xgz+am9CZ1@+6CC)B82GJ;Z^)

  • E)B__}=hlX&{GiLdgh0fjdF z&A{3NO)QC&gpU49#>w@i?0nwI$MH`C$4&8MlvCpPw}GRpPvzN_@*tK_ff&!OpU>Zz z_|nAtYkBtG$mJWYcu@N&F@v|hLuZgoGu773&Jh?u|QC+3rTiTh-$M>wHY_#RV1{Rvz63h5;sw9|aPdJX?xyB$UnxAE?ER9Yz)SY{GO1ez(!ERV2^BK&$1c|)`!Pm56G%tNKf z8*#f<(095NGgEieuoNxQ~VxV6k1I z4$#rFc*%a8*4a?^FwUAp@1r=qGP|})nR@75PWL_5fp_8E3=}c;9^MJhci?_JK*GXP zEp?m#z5)kJ-g++=ybot;87|<|1~FC1Fo|bJaKAickrtnOi_g79bJx*P;;GXALGpV) zCK)_J=M_{z2;AQD5Y_-aL=tMfZW8BLsyrl_D$r`zOch1qGWO$xT7%0-Q6zH*DGrb# z@o__lWEdkyBuRz5VJlW9U)JtR#5ldswjUF zpPG*H$fFpmw8IUvr~GMrMu+H1EpwtIbGnl3jUloLKf@9-m&*iJarjwk@fbd*$@l3D zXk`Xu0d1El33W?|N2|}Hbvho8lgH<0;4vl8Z<`yBFObI<@ule;uqz@EZx3;p!L?uZ zgT|$W1ax+m9I$KkG0nH$iFp0JsIM!l0jf{C3klpUIjLan^zGHD?Umqva&0B%#_$!9 zHi$ii!|GRsebtr_eKa*x`K7u_kza-V*i#t*DxDSDHQ{S4#Nc{%<+EHLMwnndd;D3h zSI}6=pPPnRt`DQN=FhsKqV-99izbTU+kT($9X@}Tf2VWK_ZY=L#n168efMks?sxv( XAN{+(;IH^QS0*UeKkzR+h0gy0IhZvc literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/auth/service/impl/SysRolePermissionServiceImpl.class b/target/classes/com/metalloop/modules/auth/service/impl/SysRolePermissionServiceImpl.class new file mode 100644 index 0000000000000000000000000000000000000000..99f3116e3261149872b5cf0bb9f414781e8844b9 GIT binary patch literal 10467 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 K@Gm@pp8o+Q&bSEx literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/auth/service/impl/SysUserRoleServiceImpl.class b/target/classes/com/metalloop/modules/auth/service/impl/SysUserRoleServiceImpl.class new file mode 100644 index 0000000000000000000000000000000000000000..9bb0303005916582a4cf110c5dd0a63819ed0af4 GIT binary patch literal 10179 zcmc&)d3+pI9sf?QO}3LJO(+nMqZlwvk%0noq{Oxo{PbWrdq_i-QIl`<8A_q7`ikBuy-UX<)FDVAe~QGLCQArQ$>t*(v`5^4aKR zoC@MizP;Tsu()qzo4wt(GInmLW9d!084~sq{}p ze(=G`SeKWa!jv@{rN{YVK&ZUJWCk0JvI=q1ayeB_YL&v z40XU#tU_T)r9n{{HL*#EoG5x{6}(cu3ytcp@d)j0~8X zC?wKZ4PWf3Ds4ZNFWY~pYVL}f^%$h>+eY1S*6LD$=D(;~=z2)T>v{T!R~Wbayhy68 z!f01`g-NSeuyekxYK|7(o1$S`#K(dHJJK;bHM!PfbT8Hb>dYM}CokI`0=p;=t1^VD zGb^f^XfEqfgoz+ssyZXpZYJ4a(BJBz?BfVd;&pFu2|j^mqq*gXStBVDq+L{ROO}r@dTO5L3kxfW4Rc>Bs0INpY z2F7YzQC}$ByT6T8k67_OK1j3nsJ+!8Y}-|TozMKvs;Zs>!P?7wgLZyNb>(4zN#K(Zr-bR%Miiz;&=|-fNbjsB z6(jRtHTjr1b?KFqdddBTfr&k_UZiEcbxJ7R5%CQydc(dl!@d!)Rc@|iq_>xkBmx|| zs&;6d-#4?uRunT)C2B7p4+RpPw+9l{#6W~ah`X7+p+3hBW0qERfoO|D=I87U^U6?Q z*j>5rsMUvGD(;C7p@PHvMkEC}H|{fHI>5*dZT=9Bfz3sFng_vp*M5|-(&6>ENPv?m zb3gRZ-iM&xM7KLT7~g(Ky?wOEjRM^l>{1WT*x9kP-K$%UCrG^~ifuy8PS889pysfJ zVeisCgH7*p?%niJ8Kr{t3EZ_;z34sOz!O!{FxBV%mN2(VX4~mkF`9pqJvcDelJX{h z=FtY7pB$AZ6>D8_j&SJADdGs=I1y(&+lt*I`rKYSUXlA=al$XoP)N0t;9c~&eax$k zxZlx&?wfa1#Zu@105hugRxBiKjoCc!E#OD0bp+JgeQi zbdsn@uvnMNIfbE&?fZ_Oz&{NfJ;RT2E=l0u1`eNlDo>h}|FDGOH}HJhmuLiHp{U3nw0B;)b68?(Uz@fO7zowdi>+n)O z8F(39&RJsdN?sdyZS7w+jl_k^?&rN)FFr4V0<};iLE}I*FQCB{cm=K}tsD5R+2Dg9 zd?Q|oCP{cbrwamYf^hq8EE1F(HOY?CsJ4Yv+i(+ZCZSt6TS+ZOUKR1Vi7#HwzXseY z?X-}uZsXr;w!lc?wY+;B4&mEM%S_{-NHb-b6Jso+2)~|0ZjV>w&=^Hd+h2;j0dEWx zIfK{Gn1=^4=x!dIMTR?YCzT0YbO+65;I4Shj*8K2%`8-R&2Z5!yeZFu9c1M$TW@zpVd39DVFGmc|G&ECo4I%?x8@A>Jw@kgM@F+(QdRQ6om~<%m$d zt$`E4fpX-$JZ`&XRhbBJ?%j5wS3r#J@QiTh}HkxyGB>HyvS zM=aTm6MLE)AI53Z7T*Ga zE|R3KOL1>?`3N~biYxdl{IZ-j6n<%?M>g-qCDj^CX&ST!-Z1b{d@S(mNCZ5`sxW?D zkXkyfUM;E21w0~nD_}+lV&LQWM8Iej-7ehS-oH%oNyYHFPBV@ku!4H%Rz>-f_|$Ba z#~;OHwH>bCbIPB_XMzwN3}jB0WzJTUy;&oh3^Ob#bGbrb6^Eat7LVa`0r{aI13H)i zc_6UMjD)&Pu4SDXI)Xz`b~U`CThU9!#?3VeEu%~PU4*JF^YeRpW|1--LJ#D--UO7 W4DbGezvAy)nWS9*z`yVmdj1EUe+G#F literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/auth/service/impl/SysUserServiceImpl.class b/target/classes/com/metalloop/modules/auth/service/impl/SysUserServiceImpl.class new file mode 100644 index 0000000000000000000000000000000000000000..6c97c507a02f3480a8d3c5ed867038509321275a GIT binary patch literal 9987 zcmc&)d3+pI9sf?QO}3LJO(-QOlwyE11qKSpky6?Q3Mqj?(-vqEoa|21A-g-q^y44R%zN{Dzx(%nzxTF} z{P+F`0i2Eh#L0+mr9Y` z^)hlr4|-!b#KdA8YG6^obe-p=96MtmHf5)Z&c+=E4jtIGJS0|A3<;@+ndrme23k^X zzF?qdKod%dqnwjePd0Ic(5;n9(#lg@etCzF^qP>6^^qY}2)TOc$a_A*J=4_P}-G+_yq7Hdb+ zSs}%QJ5M&TQcx@rN^i_!rWCRE0^WgLglE@^#ikOB7-gJnJH*nBf^BCP*&?=+Fm_X!@4M*LajAI zt+fWOYEYjBMfDK4hE1G{^9;1w*=&lrxwNbVcN8OD3xLgM~HnNaA$Tgag)1n*y)E?l7cB`BJXlX~M-d zv}nSiU1vt9616mBmsT%^lz|m>i!Mw2RTU?qmJwj@892QmvEjhAsQBbWd_p0wXF7v7 ziK2-q>}F7Dy4WN9y~YnB<28+IV|a#$@iPr{2T>X0ejuWJY=r9Juq!$i$+HcdT*E!w zo@E=Ly`#5kZd{v~aBkY!>gHW;SZgyGuOK0l)*ityOxihukL^!eo1DB?%q5&51D$#0 zYE}x{3d*n8A<98f5|yH(mXJrwFu{^r)~K6tE-t3Wo!n-zanf7dPVCfHo0}=eda|Xk z)1_joY6&V?sv4fE&V(}C5;=#vx`8Vd+66sRxyBO4gNzzdU^iE4mbvziffHðS4g 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 RC+~f_A3Q~omX+6d_#5OjG0^}3 literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/bussiness/converter/BizEnterpriseProductConverterImpl.class b/target/classes/com/metalloop/modules/bussiness/converter/BizEnterpriseProductConverterImpl.class new file mode 100644 index 0000000000000000000000000000000000000000..b47a2be93c316307a9c307a8f828aabfb569ae91 GIT binary patch literal 5085 zcmbuC>3bX16~^Cd%NDUF8?oJlfJs6c?AVD)3bcvi1h2$kCyuu)K+0I2*po;ac{EON zx-UR!3spf~=nh?IOM%d3ObCUh3$(PK`n4bWfAo2}yk|yZ%eG|AlYFqx(ab&Po^yWp zo;&yb|GxP)fDZh<4ppd*BBG%NwF(=~=@;~PQcq9Ck4>C25{^RcK{IVShZL%tTgIcf zNue)crQ#{W(UVEb%EVLFhBN0I zHEFnAj5Hb*y@+AEh8<$DmKK9L3uWp_-(;tT4~ofJniRi@;Z6kGtK%;^%w~=r6;}2TQ#&{j~_sh&6Yv|mYeuxh->(eOtgl-8jc3;$1;-z_fp0o4aWmdi*KSBQP|`yUC&jg zZR>LbX4Z*e4BUPvG@QgKg>{QVVV|Y~I zCXF{q$7Q-9%kdkhmuL@}wsz*!bzai(C1LUdZs9yK20yqxf~SWIg$agGzF zy~j)G_`QS$Od=IUT7!j*!h@AId%{XzFl@$Ea<_K}Z~If3Byl@dp|L1D)jUwix8I}6 zG?Mm~koJ{&9E&*yTSFF7Dt(fzX~|M76sG00bR9Osi_#1qQ|Jj7zHQ8uEX}Yn<2BeA zHj2*%@xEEKt)exFwq3NHqTMN4t7vi2_K9|nX!}L$5Uo?RUeUO?E@Du$A))!ShG+0q zg}Sr0mGWm*crtADR}VilgmMt0_?kj*xJu5<8unbtS{|1-b;t>xyx{q|LVq}?6JtjB>&#FN|`+C@+k1!YD6{a>6JtjB>&#FN|`+C@+k17>eQ- z3inrvHsn6z=I-Xn&ZBRD=ls#x)P!M=>Jv%nmIGEoPs+(AzY7l|&a}x>V6fs|3OT>* zbDkOX6D7VW6b@IMX7w$vu(g!qg`RRGr2mR7frkf=yu|rIJyR&uhC#!bwkC&kTjyt$ zVY6sE3I~?gnx(^YH!L<{?*Us$seoy`Vdc3 zPM;MkD9+c6m{VzfX4qVPuPiUtjYq${+F?D0iv5;S+=A}e7qar@nv3s;6)LlwwRx4F1OQ7yQo9vRxDC7be=l#3_hK6_LECv-*}*Ht z9T>+>oZ(x^Wt$&wAs0rD%XpnRt>aDLSNJva`HeT1s>N@q)F{69b9QMdIsb#QhO#rr zdH7W86^ts(i=!->gs})p=U{j(=5nn>PGhrB)JijF@LV%okkD38qUf zJ}&YTEeME*=;8go`Ide$mBKBERI~%PTPNXU+#$kq+WH z%#7|M;7)?tTM* z#Ww`gH(h*7o$;HoBV19&| zo?%6FVonhABrzMre3qD}hm0UP#Ncu8-!^}lngvhTqR;V z!oE}OS6p-IO)TAPYa~Cz-DB}WD?O(njU8$?0vHO3kVyPJ*$KD}wP5%>9=|>z=dn_2 zXYx*Z(Z7nXQTh1;t^B6w#a##|?SdA)(`rWX6E|b5FouPMdP6S7GZ^Xm>7rWxo$$pa z9V;PHvJ@%#Iu!b7P{O{74Tg^wR5fwe#M1Vn{K?kDmqhFmawaaOm%i?LGLW{$FjcO+ zVMy2Mp)p);&`{b9{g%-CyyX#+-&3J>#S0l3%Uh#2ax$WxM30bX!*Vpe zXqQP-0hlLbfvjnUA`nAYkQzc)>Es%HDU|4F5lbWQ<=A@>3GeGC-YevN1FIwNn{+gT zTewZo9opZgHTo5b>>H+jf_+8q3)wVE=sy#mE>YThWTnV^jn*Qe59oWifif+Xw|Mji DQPAv4 literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/bussiness/converter/BizMaterialConverterImpl.class b/target/classes/com/metalloop/modules/bussiness/converter/BizMaterialConverterImpl.class new file mode 100644 index 0000000000000000000000000000000000000000..e52fd9bbc29eea94d96ffecc28002d029560cac6 GIT binary patch literal 4277 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 SS|IB^dhS0#k(SbHJop9ax*`z( literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/bussiness/converter/BizPurchaseRequestConverterImpl.class b/target/classes/com/metalloop/modules/bussiness/converter/BizPurchaseRequestConverterImpl.class new file mode 100644 index 0000000000000000000000000000000000000000..4e6d0ccda410022b7e38f29a4a4e789c7210f47c GIT binary patch literal 6835 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 JjhGY_A=ED!Z{Qum0&$;)W^S^uU zdoR5C)UyDVsg8W)U{nCP8hIG4F!3^bn;i_>k*?tCj?0{or!ab{8*#k~g;6D??E#EY zSRRV@1bZCM4u_-BSg_5!bXlm>Scz51^)&U`5zqDd6sD!))nj|zB95*qC*=0nVL$uT8Z|gSxzv7>>8XGX zwnzr8R^viWqh%XyqWs3V8}heOr%_L5TDCHv!@_EfMs8=KSgeXhJUiqyI`KquL(Lj3 z+|Wd^8q{f_O{1NbzUoqz-O-3Y-CB)xH1t)M(Pv?U#zxvrkr}I;u)EEP_tiy1b~=ii zG%lg-6q$5rzXe;PgZ4~qZI9jMw8j0@c4|1ZV`}@`Ep%yg!%eESvbWRqT0Gn9O(+zm zqwgOXE2Gh{V@LeZZ_x;&Cn?tqlcIrgOGAJvFqYjT>#-j1-F=x%j;ekug5~l=lx$PH?%#6`Ww4?7RAkm>YNKpSs(waV1@ilbsLjv2eA< zyBMniv8fD&qP-Dj*Nt}8%PB|GYc;N8&cGT};qeu}rsG*r#z1=j2+O9aey5$4*Ikzs7x>i)+p7vv5G;J?V3>E!LTFeje0# zAbk#I_E~sP<9+FjB+u4#Mjq1mKsqA>dn_E%_+Z*5=`U^bh{lK0HvK&Td_*1vzc~1U zsEo($zB)JIS$G^z1n{KBNAWR{QU4J3D&!{I?V>&@e6{&_6rW&`G}2sBTiQ& zQ*yYuayr^xG_FvTejxmrYE$jy7M{VU0(e&A(|Atw+&@!#h(e&-PBb`I$hSs-vN3L{1A?S7srVqbb>3+Y<|mD7C*vg`x63KQ!cuRGe=Xvb}N>5_}3!YQdclwV|6tK=c; zFDZV5l(UQ_iq*uSV{*fOp)1OazPyN}=Du){$S4kQYL^~gFVDQ`ONkRP)$mNVe@ zA8(L{TYbe4^=2FEW6G?E)oZ|k-5T|ODC|7$N;be-*5z#LFcnE6I4wg21DwnK?Rb?i zz>CZM$oV{tFiY;HIZ$f3d}|sF`3S?m zs#1Oh<(Cr7n{ycINg+9EWoi&GNv#sDlLJ(hs+M1h*IOAS#%d40SxMWgbDu|^dg5sW z)*Z&!`m(tO`34h-1qM@zCm5VWoM~_xvBY35alXM>#B&VJB`z^oMqFV~MZCb^B4UF< z6S37`4RO7}#l%YuLd4Ammk}cdapE?EKH^md*ATBaxRH3X!L7vG4elh~ZE!E~-3Ip) z-)r!G;==|XDtkiqHp-93Hk>595V`VkYP5WW8jl&mPDHV^pDusr%Lk@Kn28Drb&Y&b zYQU-TLE$uP!fb4o5fPk$Z77i!*i!7o9Ndn%@_JW>gYx0$VX=Np5@F;k&$Bp7Qndgt z%9ov2u+WeH%w&vH@t0_;8g;(pVZ6L%T%c+t7Z-A!kSpUwLh_WV5s*BoI$1rF{Ic}s z309`_^ys>|NAQ@!VSKz^*kOf+c}MWHlGn;&A)irr4%U*~vN_Xp4Zd&$U&+CmLvOw2 z2PD@INU^-Q0!t(yQ#d*u>kYb zYGFC5QTmHSP8?OQnvV80OCPs40i#C0fr0=Y58#>C<;6I))q2@!i}dHHR#CKEnuQ%x znwCiO>%KIXI6$=&^WV|%~y zlHpnPzi5|pm|>Vr>i4P8O-6)Wk*9dRdz4r1H+nmWkG$ zul2wf50RoDFRS8T$zEQ} zVfvAVi;;$JLZQ1o{tXoy3?DA1XX>btMLmhir|u*^gSaguN~Vsbm%ZV7GLUwQVXU-% z$S_`^m&I_kN;7Cb^qWFAc+(>!Uss`a#VZ*Z#ht;k7)+$6(W7QqsfB@+zSs>;rID1n z9R$j9D^)RK1x*1ar+$dM%+Dmd=Ij^c)m3(~>44bB2u3FlAXrbLvX8!*VpN zXqO!){+K0Xj;slWc_4L|?gkloC97iu96@6n6y+YA9v6@8RBG)8t z;|@W0Y5#!M=vSC$UorLr>SNM-Mnm7(Z0TIUIUNZ+I9DABV17LR`e Di@fIY literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/bussiness/converter/BizVarietyConverterImpl.class b/target/classes/com/metalloop/modules/bussiness/converter/BizVarietyConverterImpl.class new file mode 100644 index 0000000000000000000000000000000000000000..4cd59403a4a444c85fe7023a53208e177078696e GIT binary patch literal 4757 zcmbtXX?q)26@ITRTa7e{oy0bTCTW^Luwyr(X#>Pt>Lp2CY{!k4Hi3qY<%vCstdU2f zqz+rzT9z&X1f}eI*-2ThNdqlmX`%3muYBNt@H{N<8I3HBmspSaAe}Qa=bq(#?>+b4 z*Z=d<%K&=tw-{g#SB3}%6oc$BuvdaKl!Kgd z%^6D)-DluVao13G7krE3fPps)LUE28GhHjqie=0}18I1&clR)S*C$|hYq%cnXykuN-e!{>>oKo0I=L4=qkS1(leR($JJUf*bZE<01p5{nz0|Q|uuGFopRj(gqx4 z6#6z=?nx(o*>agz#d;qoy&Ia(q{y=81Pw(Y*E+nB$6`kcHIS~hDo3r|#|YOXTmxAM z80HKcQE2%GrMI1v9>a!rMH=2?3Z2!Z>RJmG#hN3?yS9T4rH zXlXnmrc5RH@O3Pwa56PBJf@C=?+h+S}<`C?RsY_<5Vm2}lG zhslZJGYVbRVYQI6+{FsC9+c-8@&bE7VE??r@#_x~r@#ye@hP_Shypt%H%c+%j&@rn$qqoGs6< zgk!Uru0*j~Kex!UvCKlLJ5}#>bw_38p-CrQmh6sh8sIfT2)xg27SeD(Dwf>UyJ~(` zi^1x-)FO?(qR&k@{)58fn``0&T7r6! zN)3J-7y;Yy6Y56M06)dg_@v}WMJpNn54p=xKHB~o>eRIxh@M@-mXVHjjhIHG$R>?9 zirlSnhsgaJZxPw5(Ju0^#@!N_4DfF{S9bFgjc9~ z?Bdhy)OPc(vj+$He;9Z0Zm^HX_&a&p-p?cP0Zj2mbDm$NmVL#1gIbt5uHi-2w2dd( zpW_#-=a+sgRgYg$sZ;!3tXXrU)ckkKI?BFM&1cTGU&n;P63&fKdxWd`uIn(_*07h# ztitaQ?~HUD+7;2bbR7#dc<6=y{?jii;up1-hjgHwMRl;K1e$m$O5kpE;|Px9UO(|e z{F=a4Ki!CgUoN4Kk$=q+nt0Q?POSzn@p}uUSS{hk^0(gv2 z3e0UPbdU*4#-%dPvW4R&*Z;?jw=?qC zr1^n$Xnut(6loU1SJV6o>z11TFPg8EXntyanoqN+F%~sW!X`-RBx#;vc@KwZmULIr zeDfAG-^A~iX}+-m%{P~6{sYJS5r0~b<~(WstWWdjG`=7-J*V+Sk;5GF>;C{Qe=rsR literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/bussiness/mapper/BizEnterpriseProductMapper.class b/target/classes/com/metalloop/modules/bussiness/mapper/BizEnterpriseProductMapper.class new file mode 100644 index 0000000000000000000000000000000000000000..f4a84fb6427403d4a9a8e3e25459ea437f83a5c9 GIT binary patch literal 463 zcmb7>&q@O^5XL7}yS6HL_2kW?^8l+t1wE}O7QD~y4mBmog!~co>{EI00emPi-GYLs z;31iTZ}MZlFK_QJuK;igdlifn%sR1XIgv3U9xH9~11orLzC-KgpTLvh!Jqb|XM8q-c1c^l z(^0pEXU<6~w#7vSM~#F9lBe#TQ4eV#eGT9`g}NlCV56L^@=;K_s@x;khRIN;uv6-| H=(_+PS8JBN literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/bussiness/mapper/BizMaterialMapper.class b/target/classes/com/metalloop/modules/bussiness/mapper/BizMaterialMapper.class new file mode 100644 index 0000000000000000000000000000000000000000..6f7809996a921f9f982238e038fe086b2ac1d56d GIT binary patch literal 436 zcmb7>%}N6?5P&CDyS6HL5_|!V&Q(|y^x$cW(1Q2b-Jzx=nUEhreKQX}fDa|6TToFD zJY*)!Bp>r7Z|^U!0B`{Z6^s;|bz;$SB4b26TIsXlh;5EhJB|@8dCvi__0xF)!40I;Kr ADF6Tf literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/bussiness/mapper/BizPurchaseRequestMapper.class b/target/classes/com/metalloop/modules/bussiness/mapper/BizPurchaseRequestMapper.class new file mode 100644 index 0000000000000000000000000000000000000000..f7aa6699126973a38fccf4f147aa319424e0050b GIT binary patch literal 457 zcmb7>ze)r#5XL8`-g>8kt%a?n^8o7~w6I!H?!bO_ci793Wa1_fwDhqod;lLx%%n(g|11gZY808tSRc?O$u4)`4gOpYm|b? zTz8IQ>RG{a^&MJP{{)^41Am&6mJNFO!CrY*DwxhCo8~KR@7Z-F7tTq{mc<1HN0sy)lBZ_DsD~twz8Y|yK$%lhu#wMJ{vyb)BHts}hRIN;u#@XJ H>$?CS3YwH1 literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/bussiness/mapper/BizSupplyInfoMapper.class b/target/classes/com/metalloop/modules/bussiness/mapper/BizSupplyInfoMapper.class new file mode 100644 index 0000000000000000000000000000000000000000..3688aad54a42c8bc0f76cd5a19d1d46dcd544f74 GIT binary patch literal 442 zcmb7>!Ab)$5I`qYyS6HL)F1HZ++7v)AP6f37rf8zjx{C8giRt;@W(v(0e+O2Zb4B* z@Q|4>lRV}nZ|^U!0B{C-1&kD&v|`b6Bx6K8TIrJEfK3WPI}QOYdCxsw>Zdw+ZmY_|r=|Ht6NMS$SS6nAVc|manwQ!yNo#e!QAb!QpLkQCq&#K{tjk zoRgSE#RUaNmGpBYPwfMv9{iEM4&d6m%x|S&Bd@LeCy;kVjw9HH$&jb8lk+(DcL6>C D=JAc~ literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/bussiness/mapper/BizVarietyMapper.class b/target/classes/com/metalloop/modules/bussiness/mapper/BizVarietyMapper.class new file mode 100644 index 0000000000000000000000000000000000000000..3f89d5a4d09493486900d4852f753ef51e47875d GIT binary patch literal 433 zcmb7>%}N6?5P&CDyS6HL@!$)1bdDZY1wD9L5iImRyF1jBBop!@w2$V&2k@c9bPFmy z2p%#MW|EKjl8?`~cL2D7lL|%(t~#-3Igv3U9t+{PH~$1)4;TKFlAaBE`K49g)(WOG$)V#1ZOSBPyUv%J$rPMFXP30)xsJLueCM2` zq9`sZxM(CSkUVuSjCwFf`Z<7GiG6#kmq!aB&hT*56O2m}@|gLh>^luHOG0Srh)ywvP&3ms->w&sF`zr>&5 zqgKU=6|1cB)gNVfdb?qVoe6G9;X}_%e|!2nr%#`A`s`nSzxV^d0=`Y73C$_A7-&Ts zL*}VxEhJk(zkZ?%b+xA3} zGxRBSBzQy?AFlACC|h<_>5ze8Dc<%y7l%iIRCmk32yPSP2UZaJ4BZiHmt5E8mQ!8( zx`8o_lc2}TmUqmMjR@`pp3ob+V_*_fWNFdkWb3XdlTF$MVIXXCh0rSFw1JtbWLPO_ z$rRpTSh&)Gq%jLqM#3D!v#E%URoDNwdA%)l~%L0(4;i&IzBLy_4YxMx+Uhv;e-oAw;l{T(;-ihNbb6dFjn9q-CjM77ENV9oXE zdd|>M2Y%pL6%~knR~tS{<1uzp*p+qbbB6JnF5#TG$J|sZRViDwih=8$GW-}lPA#ZN z*DR+*7yI~z>mG-deBAa3a$(`_X@w_4 zEwI_!(I!F8&wB$op%m3Eft;Op0&=46dHJQTclo96Z~0Zbq2;W03oo!7H74s0)yQSr z@_kPAVCWJfQ#fFlh@DT8+f(?O;nwA%)MKbK!YDN;O>}q329J6*Fyv|0M(=y{Zjv2T z45Q{LhEeMj!>DhHVbmPOFzSwC7&SsMjGCSpM(s@<)=73#lS;NP(3eTSGKow-2m7VE zrTg@h8w7gr5j~~ha>>V7q<3`tj9jvW<|U=bRSByWK%%5qPU!Aq)&&K$Blli+F=2vl}`Fmsh{a8uze_zA= zDh4%we~f=PnSZcheihG}e>lcJf(J?V-)xv)<%Z@TiSdtNHHm+;VSbfontv?DKZ%D) z{1XlHtDM#RlQI68Wd2;k{3`!7|4fX34eOMWvJiZ!^L*}i%nu@Om9=G_xMKQ#!OfP w(>|Y|y%ihP!u04uo!P8nv)H0{J6W_%V-H`@EK8QQ)8Dy$bdZO>!Z#TB2XSSx%m4rY literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/bussiness/model/po/BizEnterpriseProduct.class b/target/classes/com/metalloop/modules/bussiness/model/po/BizEnterpriseProduct.class new file mode 100644 index 0000000000000000000000000000000000000000..09b0b0bd96c0156e45680d59ec4cb2a9e4241e19 GIT binary patch literal 8707 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 literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/bussiness/model/po/BizPurchaseRequest.class b/target/classes/com/metalloop/modules/bussiness/model/po/BizPurchaseRequest.class new file mode 100644 index 0000000000000000000000000000000000000000..baac2282e0931f4a78d6fdee02f2b013764cbaca GIT binary patch literal 19733 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 literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/bussiness/model/po/BizVariety$BizVarietyBuilder.class b/target/classes/com/metalloop/modules/bussiness/model/po/BizVariety$BizVarietyBuilder.class new file mode 100644 index 0000000000000000000000000000000000000000..a28a248f047613f8b8082a2a727fee6a2652fbdb GIT binary patch literal 3893 zcmcInTT>iG6#kmqE}KEFg5*XJ2rOU*4H|VrG>~x71!6!V5@XHowlHCKdTXYaD*PqB z_#aGFtXN5vk3RULEKkq$*3L2`+1kQ~o|!&-`a7r3egFRF^`8Ki@M8vTXiuTTKqtBw z`kq@Smg!jTp}Adn&Wn#ptE@*YF`Om?puX>_NMF>nb6!^5H|n`JI7#}T4pmPM)R zaNjIcecyJu?<)#-%!)9V?VtB7&*t)Uvi`YTwVe|87~1R-$=Y@NiQ^MXc(2G8X zODEy!Evw8K1|qCG(z7-5fPq29Y-r{+&nj_+@~(klrEj`odEAv7B}IJCz^LNx)!dtw zbENft_EUD+%I}|McTqu^y>!3aD$=47arMWFrvqXEBPV!0bm#28=fiOk;*2Q}j5A-?i24v>~d}cFYGv4LD~F%mtj)N=b93@Bzc^7F>|Q zJWS>B1%?+hkvjxtkL=MaLp_f% zv79R3{)ypc^mbuH=duy0`ho+L44)eK44*TMl&xdFBHW@SpV;z; zfM20Zrd-KWUT;;)1@7%ybWm}NqUEUER(nnCkViHlt>s$?&Uk$w@%u5;XD%~R9mP7km3hXaoV;QC-7+$z2@Kl3BHzA7YAQ+MLk6?4!g6UIs(I;nU*jqP|{M= zs=yF|)H{myB9+=5QT2*^)mG8lTW?0U6fXg6abKk@4DL>zN76ciSaRjVk4cgpZf)a9Bn1YNh>67|ftWd|^v8lDB@r2>mh!yIex;xL3Scn9rKebxJ)+SPm963bFQ-*BlCtvHtNbIQ*Cn2sqNFigca}3p5I2zL5)c?@qi&myDoa)rFWZ}O=2_}L1HwTK4LT)K4LT)I$|^$IAS!K zE@CtqBw{og8P3ppNN*bTNcScBGU->QD6_A?UIbUVM^AM@UFe2M$?j$WUp zGAyG#0Ll@dGE{1I?st0pMxSjs3pE_FXeeUVHeFEy6k6XI{9Zgr!tZGsKlG2rSDQxt z2b1ypo5l})t?|{S5q~(@K0{68hjF9vhhzAo$@-5pjUUFK##ft0{jVnDUv3&djAxCn zHjVgWc$nnhYfa;axuNmLV)zqSO~M~<8b8c4jXx2?pT=4e{#4WWVa{s&=@|Z8GJdvc z{4oDD{#*=y9UGLAst|my^L*hA=J#h`QVPFB53PP$L$pR{U8Z%7);O&xTG>~)m7M5d z%~(jR8DHURE%O76EB a9?{yvceEQI9nEWo2Ph&(SHFF9c5bp literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/bussiness/model/po/BizVariety.class b/target/classes/com/metalloop/modules/bussiness/model/po/BizVariety.class new file mode 100644 index 0000000000000000000000000000000000000000..cd7d6b422199299ff1a22d302c7ea2cb13ca4dca GIT binary patch literal 8540 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 literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/bussiness/model/query/BizEnterpriseProductQuery$BizEnterpriseProductQueryBuilder.class b/target/classes/com/metalloop/modules/bussiness/model/query/BizEnterpriseProductQuery$BizEnterpriseProductQueryBuilder.class new file mode 100644 index 0000000000000000000000000000000000000000..40611f106c2f53aa2561b67a7f768a936bc2a85c GIT binary patch literal 4212 zcmcgv`%fE35dM~z!99v=9wCGTQXpWUIr?sKNE=>()&UYIX_`KCwm0~~`Oduu6;Uho z&*-1gR#d4{sZxLKA60eMyWqoj4pxi!VSTrAv)|0l&dh%P`=1wo0$9K|NwlCffi?~8 z=wL`aH4Y5jGVDElGyjwqe1?u&rfvGS8Cs_@yItr+R{}{5uRvpXQgF(8nfr!iIZj0{ zJH^1_o}Ldp&$PMc2?@9KZv*Zg>Wk*H72D@-#Wg*?<&ti}zc0RwH~g{~m{yUy3@v7n zoXgd`%Q^O5R(SKOh92RH#!s-}1Ks?jSNhJ|{^cih}7`NG^a4I>yOk>?wJ;4$=u zyj^r0iyL-z?duxGFiwgtFB|SYLpr3m?YpMh*bNPnm?BRLE+=1i%rg0;LJ;_-r7x4T zia4!drm7iKib^wqHyBpV<#dvmg)Y)#j^Su30pEPWa3j1ySpnHh)M%QD=K~ENVxHkr+1Tex zj$JVPho)bmH_8CprwsTj4E8^wRgJ)@?KY5{6{QBt6m-l!8Lm7CY@bqZ-99iqGjH)b zw(U@co3u@lx|UPUJNx=wZgZD%ub5?MTcV<8=*dwF*a*sb?(P`0P-r^^!`h{C6munP z^GhZnm2&5jtY@|o^6y#XSTYx9Jav!zC8xM$xCZr2?$XwORQ}Yb{{?#WLpUVIS#*K+ zzYp6#NyiJ%h*}r9z`eKU#U;nEK6Oq;DaAW|=eW1^5p3<+RI#O7W!nkd0$(*nVP0!^ z0pAo$32%dY{+iL^NjGq)W9E z4;g-K9F&G%6knM#iwkUaG|WiE{Dg>z301q|A7XYwJH$ki3h^engm{x=LA=%IfSA>; z`~{XF7PM|tBVMu$&*RiuM$hszfyWFJk>iRxg#^B$OnJE~u^M?~xK5O)g>Ff~FNrFG zAxpCkdfuXEi{NY#8PTLa`@nzm9 z{Qe03AeQ6eKhQM3%t3`e7{MQo#~*4MU*@yIACBOUU?tA~t4-s}+EDl-5&SW%#^GOY z8ei6#!XJy^PvUMI{zTLGvSt$&umm>v)H6(Cwa6*V;7&(EKQzv(jUi1=%NUH IiLY__Ur-C_5&!@I literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/bussiness/model/query/BizEnterpriseProductQuery.class b/target/classes/com/metalloop/modules/bussiness/model/query/BizEnterpriseProductQuery.class new file mode 100644 index 0000000000000000000000000000000000000000..d624c16abb54453750091999b8a991ca936c9d2c GIT binary patch literal 8480 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 literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/bussiness/model/query/BizMaterialQuery$BizMaterialQueryBuilder.class b/target/classes/com/metalloop/modules/bussiness/model/query/BizMaterialQuery$BizMaterialQueryBuilder.class new file mode 100644 index 0000000000000000000000000000000000000000..bf08cda38279933839ece6a4fe499a8e862ca79f GIT binary patch literal 3004 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 literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/bussiness/model/query/BizPurchaseRequestQuery$BizPurchaseRequestQueryBuilder.class b/target/classes/com/metalloop/modules/bussiness/model/query/BizPurchaseRequestQuery$BizPurchaseRequestQueryBuilder.class new file mode 100644 index 0000000000000000000000000000000000000000..14e68f595e51d4be62432187fda16f0b2e9effaf GIT binary patch literal 7426 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 LcLz4pyGZ{%w^XU2 literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/bussiness/model/query/BizSupplyInfoQuery$BizSupplyInfoQueryBuilder.class b/target/classes/com/metalloop/modules/bussiness/model/query/BizSupplyInfoQuery$BizSupplyInfoQueryBuilder.class new file mode 100644 index 0000000000000000000000000000000000000000..c733321013f621e9d2ae5be8047cbd79be365f4c GIT binary patch literal 7124 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 Cd-+=c literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/bussiness/model/req/BizEnterpriseProductLockConditionReqDto$BizEnterpriseProductLockConditionReqDtoBuilder.class b/target/classes/com/metalloop/modules/bussiness/model/req/BizEnterpriseProductLockConditionReqDto$BizEnterpriseProductLockConditionReqDtoBuilder.class new file mode 100644 index 0000000000000000000000000000000000000000..331eb8f6c844e8ae4751edfdb054f2f0539428f2 GIT binary patch literal 3063 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 Czlan7 literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/bussiness/model/req/BizEnterpriseProductPageQueryReqDto.class b/target/classes/com/metalloop/modules/bussiness/model/req/BizEnterpriseProductPageQueryReqDto.class new file mode 100644 index 0000000000000000000000000000000000000000..62f4ce83333b92d1931b6a16f55580f076794738 GIT binary patch literal 3605 zcmb_fYi}IY8Gg?0?8Te4V>WTj=7y7)V6Pp9mOx>BDa1*L&H9q8F$GG?czsw;ygRd* znRT0dqaUhPY6TKPijb;`3Ysqw0f{(KxCp+0)IZTLi3y+j2TIfD%#7o)y|htN%RA?s z_q_9-=Y8JG+5OwUZhQe?1YR3rh^L@skw8*lvSQcuy7Y`%&9)nQ-Ck(cq^r+2UDvdv z>ne$?>5e?7A2TnUusrEB9MhFE4mB&@j8T=Ro6z`0aJF?iWU}~;;L1yp(aw+V{ zVkf!;iVFI?Vb{$CyQ$aD&l{fUHfl{*m%sL;<(jsob6GVlS8o^`xKELSED*C_7kH*` zVxqtFznh^;F?46~Ao2p~iea5N*EDJZU40SXr{~YgiZ|5%at3>_H-&v!>{t5Z_s9GO z){{~l>?$}tSscJYflO6;V{5U<_4P*(h0*9$XdY&u)&mh>Rc0Q^qEDGg(M;Lreh&&+ z3}BF+E*kFQ81ur9(|88GDCC%3dKQo2M*`h-V@ZzLR>kmMG(Bosu4h=DD{wSQj1OZo ztSHX1=a_!p?7`z%9K{m?$zjtny;1+*Ih9a9$>J$IO`OXrai$s69es@Hx=a2k38GVf znG{9@cKW-ft(T=^8a4BRF<+xE`7=$+GwX8BbWIALwJh87Q-;6?OH_A%WmK!u(U%|B zZNt@#bp=+?f@$dG%A%|rLjv0tq+4;!hDtb|ckA=FZ~gv{-@SMBAD{iAlr=K8ox=#-wM~64xk$cON-QJ3*|rmsrtL&HB7_W&@9N zCA(tO<_xkxheM&}Et>Rr+CTIE))`1jTiL9#2Ad9jdTDsJ7zt8XBlqX&@a*i+D9;gW zL%FTS1roNmC>?>U^04=AqiXlX>+3duTQwY3QLq;*+RL6%S(-E&Ayb``(p$6_W(>z5 zPtqZ4d%_$Vx0YLEQLa?8>+|-K{+zU=V|a3ba1%3U#wSk@_Bhkqk#4ib=9ylHljseh zxRHY1v89mu=U4<(QN_ylJv*o#X5WU|4{J)`&=w03%KV~H7BgkL=~U!NQx!$5VcY6}m3>IOga8`AcC4t`cdN!?Pdr9hnA3>8jX;eJhIWKTA>Qkr~7(HcJ z3%u8QOSZk#Yz#$Q4GD=zHoQ1{z9CzvzY@`3Yw!_KXkv`FYT5MUP#SfCC+~s2zA!6C z#9)sK`-tdgzK&Z=m$91Ry3$RdA@J}PK3ch%0+W6Je^zDA1)T8Ki1C6F80HvLUk*4Q zWzXEk@u&PeixP3);vGs-lsf~3zapVs9{38ecaex+9{3Wm$-%-3cKOS~ zz%}d+W-EATYLJhjcH|pu%WGfbflJ69$!jY(w5D;mn4rqxVltmlI?1n*yM*?9BA;AS z(k}DVcm#3IM|>(k6Cx%qlrTxeU3e8!^dg2w$;LEgao${`nBh#rX|jBpvjkow*Jn6O zqD=b-cr&H{iH;OvZQo;83cdVKi|_GZFl`f)YL{^3wP3rbZ+f!P3Fxwt-f`kQ@vh*NH@>YC}K77zaBK~bt`-M(`3Ls|2Jc4eKo~968WgcHze3wo1$I)fxd+S>O$?RI Z{dxhC8){|40bI)VTI literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/bussiness/model/req/BizEnterpriseProductQueryReqDto$BizEnterpriseProductQueryReqDtoBuilder.class b/target/classes/com/metalloop/modules/bussiness/model/req/BizEnterpriseProductQueryReqDto$BizEnterpriseProductQueryReqDtoBuilder.class new file mode 100644 index 0000000000000000000000000000000000000000..8eff2c6a8aa71bc2a0e3c050aa238f7dff891da9 GIT binary patch literal 4314 zcmc&%ZBH9V5Pp_7gL@R$1VRW2p}ZO>rtd8dX#<2nYXSjEnx-#0+gsRhzH{z{ihizI zslT8s|2Sy9BF6;=}rO=jNW7ot>F|{P#c4o&%W2H%T<1Ie``f zt!QINJvI-_tYzA}+4aI>Ui2B-ZVFrYw-}lyGCLh;M@Irl1Fyhfs1%)Yw#4VT;cHzmo$t1{eZiNoBYX=?~I)BejyN6 ziMtFEf6Fiy-k_?7TqbHXO{MgKfe$gq zaJg*m^F_xln*Iaf@6n91!1gH%{tAQrk7!jRaB90Rken5z7ks9nWA@2#bu+MiO21Y6 zKzO2H@!PiTP?ihYrc7VUDHojm>|Jhim-4TaV`y2V7QoPzr-pDZC>OZ9ZPJHQ+bNpX z4wa-_YhjDOCkV;SpIgE<*jUKZA0h{oxd=B>Yuw*+N*ktYQfK8Zh2v-KS$#=dh<`tY z!*rZu7vjl}VNXud_5w4f)^{!>9<2p=NiwWWoTGUvjCS8S?v0lSx_0&InA6R)t}>oGb`)^XP;-4 zb=7N^&7$wPhYY`jb3!XB&=u1z5jh#jJI;Pk$wjvjlAQW*`>?`e)E|ZPW9|kGu}IWt zOVIV)jt30S&tN$-XS~-eXhM|c+4PMt&ynjBdLtLqD>SQ-s}nLK7mBLLnPMn%rYMM< z)kub1)riDA%MiC(wW+l)TBhf5YD{B|`J2EahSA6Y#+^$7Uol*NxhgRxb%+=uy46It zuVk@ANWqY!RU18T(z8kO!HA5gU_?elFd`!s7?Baxi^z!UMPx+lA~K?I5gC!SI$0}7SLP;$`POpRAO@K zcl!C2rcJ1a>QyQlij;Ls7o`D-ma4<=ipTG47+;-_#_x*Yr{nQc4dbh`*7)fNeos7p zcfX}#_x;Z55(j5H;k|HS>q2x@CR`x&i`u-gRh>P+JgNASmSHx7TaVSH7y8h<>3KNXLkX&7JCzs8@6;ICknN>Vn0FLa&H z{)y>_lSfp-N9d%HqR~yGmqtI0Ycz&vjMB(F#Y}vmtDZ3%+cQ4Fr`l$T+N$g=bA%PK z_Xpl2ald+;SXIjmJ)Yrx;APh5Vyw3!Uu{flr~1sjs%#qT^lT@OHfZeNb6Taz({}np O`Vbuyp)c_@uKWvhnh!_- literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/bussiness/model/req/BizEnterpriseProductQueryReqDto.class b/target/classes/com/metalloop/modules/bussiness/model/req/BizEnterpriseProductQueryReqDto.class new file mode 100644 index 0000000000000000000000000000000000000000..3c4039d592dc67b562933aed30065f8eac89376e GIT binary patch literal 8297 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 I!FRawFXH^=9RL6T literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/bussiness/model/req/BizEnterpriseProductReqDto.class b/target/classes/com/metalloop/modules/bussiness/model/req/BizEnterpriseProductReqDto.class new file mode 100644 index 0000000000000000000000000000000000000000..767b521cd1c49919cc734f4e6e149ea2250b6399 GIT binary patch literal 8246 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 literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/bussiness/model/req/BizEnterpriseProductUpdateByQueryReqDto$BizEnterpriseProductUpdateByQueryReqDtoBuilder.class b/target/classes/com/metalloop/modules/bussiness/model/req/BizEnterpriseProductUpdateByQueryReqDto$BizEnterpriseProductUpdateByQueryReqDtoBuilder.class new file mode 100644 index 0000000000000000000000000000000000000000..c26c5c49a63335a2306e2b84f98dfbed6f597611 GIT binary patch literal 2739 zcmd6p+iuf95QhIvn>r1Frlp)u1qvjk)SOSI1zIQ|!m&_uk8$e_zYcL7=SFchEj zMQ*#?duHFMJ{L93&~rh0Qco~+mCCcd$f4IlzJPToFubg(hTRaFyRK4AyP@i#D+0S3 z27&ZM5EzMYZC@LrHhN@vDI`#Z+N4F&X}$gpl<*)WEi9d3~D(y=hWaIZ6iQ=*qgKL*XK+{Ey@ z)S0N!{|`=PtL7+Vcv$)e zF{g~kY4xi%2WgAtl8mc}AwQ!+zb2-o$?(xO5AZPqBKmC+=<6z=MpK+rN(b8K&FHlS zeLXml$4Q*BaM~338HVBI?WMP<=7k+u5!L)OuW98|FL;xz_E<53Ugut&TGVhwsrj(! ztaT?LS+VfJQd6X;KS}6E9dpGQ6(gpoLC#1moE*+EsCGltre53&OHn5rXQM-jzBSIu z422sW9Zpj&4+23&F!pC)3*!t2)w0jzlpjrp9CxM`Gp#jV5-3hW81Z4U&e>*a`fO uJD9@FVvI-`dSOWqj<#g|I7VZR_Bu}2S)8ZY0O{uFTgE{zE?@$euRl~qVWlo7@6m2p#JaLgHt$5=(A-p+^E!fIXG|4UUplxwqLt}v| zxi%N08ry=X3FBpveMjf^@l#wPLlNbgIR>uQJ3{_)i81>ji45bw_ z-96T)tbTvcE0EwF)D3g=ih|TSb>53UsRs|^YQ>qe6B-4CaiBr&~ zxS2H68F89n>*Dv97w=#DrZce{q)worQ09X zb&m}bZxc>JGkjdIGYc;(WQ^o^y?lTQ*-& zH?2V~(uhJP(y8l~X&K6l6HaD%0B;xL9lRUFd!iOzV5nc^P}S!2DIRmEbjo9|lC*S# z-o2lD3!^LOfc7a`ikgx70bQTU&cxUI#Iv&I;Mn{O&m(@`BftED^enj$UDOICREx($ zm|!@%K|&jx*llMmb)K+lXN?TuevJxAS4J^SPSow$AfnqJ1wn73UF)dK$50SyhT8uY zrBra}#CCcgS5x!#8hrFiJr>RP(W|V4#{Kj;VB!thpk`+M#zB%Q!XX?cfi^l*N2B-& zJpwy>5B_gy&Jd^X0F9tt<%m0Pw|A%=aZko*Ur5MJ-ytZD`8>yJ&_OFgF%rO=I7;JM zAnGRa0F~wf?RX*3F?7Oj+tNmW!kR!+^Bn|l)6A<IW%8_mBUbPclqM)S`I4YoAh#U}fa zCRIZ%^wlP{{)&>Q^cb5K5N?f1cM)BdsBM!;q_!;(m4!^;F)9{N8kM7gWg+PX-R1YV z%;Bfc(P4$3Gdm^*Piuba!#Z$+W)gk2<0O5{7{oRV&@4bRP;?aq zLw}(xh|n`^4x*a=LhKo~I@2NsmzdrhVkFTdyTlx(>xElo!HCfM-@LjUXd>kLNQV{l zz8rL_aM(pKA_0DSu=Or>ToCKEZIalCO72cb5Kdb) z`H9@`pt?l*aS%foCY59yzzEHJD8^o#A~pTkNnQRZ%_N(&6Of+M0(Fid#)v2|_MC)P zpM7GX3i7hRvW&ELiNtb(ErBuD>JA!3ZdM9|?_;;HkA{b60diB&2@EHfEA!?u{R`;g zt`>!R*qfUol`qU?8K+&R4-%lC6fAEdAUmI%TJB(7)>YY%b&lvt(3ZPNO~>sj=(EGD zNYu)Rz2MD38RK-14`*^~=vz2T8xrxvaE@jn8qd>5L6V*-Yz9L}Q90$9go@}tOPTev literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/bussiness/model/req/BizMaterialLockConditionReqDto$BizMaterialLockConditionReqDtoBuilder.class b/target/classes/com/metalloop/modules/bussiness/model/req/BizMaterialLockConditionReqDto$BizMaterialLockConditionReqDtoBuilder.class new file mode 100644 index 0000000000000000000000000000000000000000..339ac9eaad0de9028eb8f2288e1decebc0d98cb5 GIT binary patch literal 2874 zcmc&$ZEq7t5PsH)bB=2oCpDpzmIe~29VplLQZ9B&OlgoDpai8t@MV48CX3Iv=58-i z`mrDT3;HkGN>o%->JR8|s;bW3T@?Fb84D_q<=ea2*=J^+ot@dg|9$!wfI7Y|B8Mpp z(vE`QkMS_G1NE#-Eb%I`=mm48P(x~A32`04dXdL0pv zGs4$W?=#d}&t*EX=9n;EFJTU4hN64mN=WgyVge#9J-a1C?O0e~*my2mBf>0V9u-6N zafaK~7YZTkXl=WQ6L{0Y$r9eesiCdh(t-4M7_2?+MdH@?4CkxK`hlHxY6GHVg|k3O z@=gh-@h-!O9`6d;Hka$~q~4{sP;*}sX_p7V(v?TCM!++ix)afc_QVZ;PlmGXiL1V^ zG&hMszzZ!;_1dayeUjZ-qwyD<)t?K`0oD#R7)j=hz5b|NGN^1_)@+}nwuDCAEv0EPBQ!bhH1bS11 zdP9ZO>B{R$=}-r}pX6IOH-pcMxQs6>TrpLUd{{ZOD*Zjx6?S4gDU8>-t5rbl>F2?c zm?|cq8{F?uk6dXf)s6bj(I^HaLksUxdW}%OKcJtq?4d%QLNuvEZ%Hkj0_qG8p25uc z>9iSFlU7`37ncq@Xr0v4G#<#2|o$LqU+HzNm7euIw9%(jO9y2O+wKX^1v`q{uA@} zRv%Mvk8$h?-WVNXVx~Njtq<^FirJviU{(y?A6PVyG(5%Iz&PB>2;4kABBUHX9*W?T hST>JOX)KVf&*;B~27N7%Zh@|BUt$(tVI9|S@;?xhI)DHG literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/bussiness/model/req/BizMaterialLockConditionReqDto.class b/target/classes/com/metalloop/modules/bussiness/model/req/BizMaterialLockConditionReqDto.class new file mode 100644 index 0000000000000000000000000000000000000000..1f0a3a8a7e560cc80a669dc4288d9ad17395e8e8 GIT binary patch literal 4316 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 literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/bussiness/model/req/BizMaterialQueryReqDto.class b/target/classes/com/metalloop/modules/bussiness/model/req/BizMaterialQueryReqDto.class new file mode 100644 index 0000000000000000000000000000000000000000..8fc9e8f7e60855766b51ec0f26293f0ffc3044ea GIT binary patch literal 5689 zcmb_g>vI#=75}ZR)vo20U$G%7kP=Y9mTlCM&=wg|Vmp9S+Yk&+^Jtp2w6PbP2klK?<4ZczkNwn{e(Fpy^nV~te|L9ft)wlcLp_%F z+;e{SxA&fN?zu<)%fGMx9>7k#qo6^;^I2;yJ!d$2K5tp`={YM`${Tiis$|<{!LV(i zG4ko6aU?xx9vjmgqiE{+Crd{0=mF!%uwx~|)q^E7pEHUvNQh{V5tR_#VHQm1Q3;LR zJ(EpP(WD@zp&6QlUH7^S2@PgWLfhzJeL+v>^}=*|)GAC5i1)N;XhoX@ZO&i*xISk{ z=m=mZoTBNYJ2c!^g&v{@1WlKQRl?AmGwf{9oOevCAoTZZNZ>OPV%eg>7aTMNxxbK- zW9HMt)Vd2HFS+f*uViLEBbwiO0lH7~(ay;Oo=Sk1Y~f$yW}q=bz3h zX5T|%%I7qEzIKXmlCV9j;SphLA>DArPr~#C4PV5UB*bYN3b<-{2Nh=tct*oO8Gb0> zug%!0;Zb~<{+iM48S!E_rAA_S41)@WGz{bMs%?8~m!K@@`I52kMG2e2{2TD2zuOL; zlsy{uVno8~Iepd`vI<$`~a*)i8Kt0p{OA`$Ca!58KqF_`)ryFV0 zN>8|_)I6q7<>{Qnfl|R?R!*9>NyTG@g5~HUd%5<$QNrz)^yz7%m|l1|ZRvJeuK-vY za;Bc1$j%sZ`T$+N^vjdCuKaFfn5W4TZ=8JV=7r14!H;fFP*;nuhUnA_1u-EQ5@F$zYJ=RHTR zj!`SC=O=YmQHH|ji8wPRV=;KoTj2|2+p7!r)g@)mBoD=y;mlaM{d$olkhPp|ZRLdO zgI`sA{3H{TgGkRMEu0%TuEu`B<7O;p#war2!a+$< z;8j=SitVnlrlx!5YGpOhTX{z{&{MX#jDhklq20q(=~`V_Rkim}L6rxp6ngsJ0|iy_ z2}jS)j_LD$BFOs>jEu2%Nvt=~qG6Zv4r`mc+jz2iQn)}>$Hx^!*n{nytIAKb@_c-*j^F+&_k=5gDgWjVG})aSh%w_Bt5aSSJLQo-Az zhW|uDvT_xgg#~NYNPCX(%KC0S>sZC363zs@;sZU>y?PqD(YZyY*SxdBKMIttm zAw;Wdi5^*zh%IIa(VAMK%!))=PKQq~2G#U4;q>iyOYfaApI!{A>CJHZ&by`ePO48Y2G#V3 zF&pNb)ptwpop+x;QAeK-r(bio^j_8Q>DSfK^Glky`i2OzqLmqNyEpY7WL_bEy z1;i6_A{qdtGYUcJjG9mcNcBNVLJfenW||1vnu#Tv1SsZ%ni8=9Xj`V4plul~(JVlk z526$RZO_CB+Ma1i#099u2gMUDWl-cI_um*ObKZG5rKI8SjMOnoar^^o@J&iB_!ieYiY`UHjTQy!Cs?ImGk;a-6Ws5KP5+a~ z6}UBEt|n0;yh!{+!FFz4lo(lLi165dt1#t@L0l0Q*DICTtr~Voe5EE0FRX^Wd^VBv zy|#fJk)3X`t!*2aVXCQZy%(VLU&W3WguXWu5r#y>x2PfkJySX(yC&wIJ4sE*Wz*J7 z)HOwyP0UDd*0zk|nwX6KETwGPo>5(sx@=;Ka@N}Lgn7=}fuAsq_zk{|m$`iz=kW@q z28Q?@yh@ieVk6$bYm_4N!3^qMmLz2)0~oPHI3OHw44NF;vJ{A}fC+XvXi$96uh^9-W)D)tJ3 z*Y_kt`yT$c(aU618mMb{qPARju6U=*_&y^ldbl5vP~me^ibU?cp6XjfJk`I5_EaLW zh|W|(Uc~BDBD#pWi=oSX(_W8ZxrS}>?|ibl&8s-jo7`@-(UrtK7jY$VKgq5nu9B#G zh7+P?Xmclu`&NL(%~gB7$as?z8}NhLmiah-NJE5SkhnW`r+mJ}&rk7ljygDnU$$|| Lt%<+DIVAoA>{qYq literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/bussiness/model/req/BizMaterialReqDto$BizMaterialReqDtoBuilder.class b/target/classes/com/metalloop/modules/bussiness/model/req/BizMaterialReqDto$BizMaterialReqDtoBuilder.class new file mode 100644 index 0000000000000000000000000000000000000000..3e8dbbcfaacca8d1c07ff6049719a62ac2945983 GIT binary patch literal 3006 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 literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/bussiness/model/req/BizMaterialUpdateByQueryReqDto$BizMaterialUpdateByQueryReqDtoBuilder.class b/target/classes/com/metalloop/modules/bussiness/model/req/BizMaterialUpdateByQueryReqDto$BizMaterialUpdateByQueryReqDtoBuilder.class new file mode 100644 index 0000000000000000000000000000000000000000..d8831e2c96eb6fe91cbb9437131d62c87ad8c885 GIT binary patch literal 2559 zcmcgu>rN9v6#k}Aw$v&G@qR-^Z4p`Tx3#FnC?v%jiZR9?({_}V?M~U9CBdIQg>RuI z7z`#pfDdIn(_O*>n@XxN&F;*cJ?EQq&U|xDfBsti0icAtS)|ZqpgV^&dKmKW_#!tQ z?!Gl2Ro{u4V(7VLyS5r<=qeOvdyzq}fou*tkYjLbvSBua;*KL_(`?9k;0WKW2EK2* z!uPdAIHo5S%(DG{nk(Vi+H{&%Yp6Gg-6Z^SJ`Tbp;YN; z>u@(qhp{V%KI9p8EUdf1Q0@#j7K&wHfMK#D_YyLbML!1h>FiE<<01X#6l}RE779lcCm@HSWxE;xVlwVYiyI38~pxf)fsXd)I;d z{PcH>DE@zs^V34j$@*jNaVi|bqr5G57{mr<{{KkQRb7=BDusWSMmo}rl51CKkdW7J zP(*r$?2HV&nz(OkLY{12Imfg;fj$(znv_1(^L$xK3t(wcSNIFU)ZB@MhlUH6=YN!XM*zGExjdC%IdvPB2`Naz1EUTce0cHW)rzYKjE) zS26vtF>R((W-~W<1H!mx=pe)$*Jj+ z{t23y^p$DJ$O_n(mdQzaYXD$3hUu+AwaF=*rg4a#HF)ZxID@VhkkxVlFh%|alweJ52&PIv2iSAaM`S0j| zIkHS4EMw;ib|(iC<|Ln(lTn_Fh(y)rdKs(&Q1l%;n2q{Ge7LVY3 hOV*DIG-hb8i}YN_OQ9|3gXLJ&R%Ev3)KXStQoV2~n^5nu=$QZ?1;X7D$+OokCcIEbG1)j1JEoX)DrU*7;3qyFCTm7zohnrhUv&8kV47J!A zL|p_g3Ok~OM++*2U8XSLr3f0ZjbQ^B;PHf^uT(2MD8xrCc0|yKCgLNbn3-ORLOW1~ z%J4FpgJ_AM6>WJ|j$4MRO)~@+lx&WVzRR$)7=Ip0ogIlP%7=~!b|KENc~+U>y}FiC ztkbGR=W3>RI+~$%KMM6fAQ#tPl&js%U?ga@zs+Xcb9H{(9kzAO2kb$ zNy=c9dWj_$2C`jpF1d1;3eQMxc8VJl4nJF6eulJ#A`DdxXZ6`BeI|a4Yuuo+lqRgI zVLhc}ClxAI#HfoSSs9fmJziRt6mg9X3Y)75c%->BWHCh1m^+{)xk2hPUu`5bua8cAlYel_^zQ&}VquAyTCWJse@(3@3ElM`c2>jSy1Nf7kLXj(&DF+PIGFx0QFO5yF0hi&w_ ztfju^75M0v+8dhhp;t~hjeF^{&%|rAK%K?fh5e)z#sM58g-+VjK%@8xeGhi#F8tro zoFPHq0UALa#36UyWv@_^;O>mmy3mkYZy_kQ`8?a|&`lCy7%AW|j?kD7L@)ayKox~R z+n)<`6g}|UzH}0x@FvjOb{oN)H1nENWg~5JG+dK}mkxiuq%Bj0BF^&d>_dMs_=^7u z@7#h5FCOyYsWWon|0K(TWJRW}^&802wYFanx&+yOt?g%olI^W`u+e^`NzF(*eRWD5 zzoI-QJ;cVVh;+oHJBTf7)OX6HQr{Vf$wDXa5LH)E5tCzqWhLnvo#ppjnZwVZW5WtR z84TbUU1JT#F-X_wqaLacLnQN4ztoN6G?VDF4X@L;j3l;Vm}UW*fubuM4E==-L4=-S zQxLWE7h+Gb#hHc~Tw(?ah>=9=>JoF1ju+P|3r2+1|8}d(fhIz3kZf2%A1pwpdWI%~ z5ee`+jWUg$(ZnIC%OT`s@>e8pz8E z%Q{lNh|~&#Z5$J>*WEOV+^iN3-@{Jf9}N%C4iu)K6Bte|R~OA?`tQrdT`dZCvAZxu zs-K(7GETXdo+Lm&8Ccm$Kz2U2w%^8@tgEph8ywY@psjS1nzq|j&}WBPSk%g>E%4@` rj7d7jhtq{M^bMS$1&MfKI7_n-jpyj2AVp7AHiIFgsho05Lq+T#F0!<9 literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/bussiness/model/req/BizPurchaseRequestLockConditionReqDto$BizPurchaseRequestLockConditionReqDtoBuilder.class b/target/classes/com/metalloop/modules/bussiness/model/req/BizPurchaseRequestLockConditionReqDto$BizPurchaseRequestLockConditionReqDtoBuilder.class new file mode 100644 index 0000000000000000000000000000000000000000..808c6a758a17be49795fc9d13f4b48bbef115447 GIT binary patch literal 3021 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 literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/bussiness/model/req/BizPurchaseRequestPageQueryReqDto.class b/target/classes/com/metalloop/modules/bussiness/model/req/BizPurchaseRequestPageQueryReqDto.class new file mode 100644 index 0000000000000000000000000000000000000000..9c460a03774e6006d3681dc13bf751e36925ed21 GIT binary patch literal 3596 zcmb_f+jARN8UGz=b+IBlt`f&pZgmpZwPm~8OL~(pv~g~BWygtJm$tNYEuYF8OS{VM z%8*#(+l$SbboGU%>zbBy zT_uq<-H{jcW9FsVrc+rmTzO7jXiC?cHLCJ#Q#u#9KJM89sY=svq~!^8md+b1hF&wQ zs$R0K>PQA@w55>AVh6GU9h5O5bqzDQaC%Z*r`Bju6apj@Cb4#?8;&{ zx&(>}_<~{A%|*MZ*Do#@p6NDfO;?xS^`zyRwxx4fH7!?f7#z4yk%BA`v)>bVxqoVE zp!C0+p-VAzXYnZV0_lojow(36Y64yT5#P@&oR<}EWZ=yV_F;bt2eLS*^iMqu@0&PJ zG8RV7RbYCuIE2FjnX2?A)+3SYABf-yW6`UyJkBs}gdsqx%si1rzcQ1enX=FPJ`}PT z#1Q>t_?IS_6MmE?Gw4Mj$IQ~RcnVJobk~h#IbmBB!+YKIsA;*LVR^2=(I_oGjIFSu zILn@6`dPCN&t`EH&j}<)P0RGg{e$OKI=zs^i+G7RS5(@ZVMurNGol+V`KKg^PW@$4 z7!%m-@0zw=mX2xE%uB{XjlSg1H7(Dq%X!l^DR{-QY|l>^0v{?--TjVHtx88{yg;#W5Qy-FV)eKm7d8kAC{ql^cKm{ZGF7-Q~N#{iugD z9bCKqGs@O3fA+VJZm)fCW$hOqNA{m$$}?w)Yn;J*hzzBjAXYm|tmc_!eL*^NfycR$ zT`_9&23erPp-}UdOnN-+pZS043Z$g1Y*tx+O@|)6F*;X_gea_!hx2oEZf<0p=Loi- z+;-yv3ENwejzCuV*L%N7wfo|Yb(_Dfnhk3x*b5fzWzVQAPaBPpr_O2VE!m5+hGUQ= z>5#L1VFpcFD=l&;SE||d1$$XPB`xU~o?Il{#O%4r=@W!K$>esV+pMv1rZ?audP68~ zq?~tcE2DvVmH<^$sq%Tx4r+(Fx2f{OiV`@o%|e7SzhsofOxb3$mnThC9(@n&{ZFd8 z5*YaM*86vUd}Vm;lkeaC^fzDr@ygowuHX6L4^*mu_^Z3ue|h)%O>XrZpF6|ebIi6q z*K>?Uz^1!1iE0K*FjF|M+R3s&??y43){4C>^}vmw!<;lKp6y%|xEysUR1A!sHmpTn zXuT!dUT!uJ3+3OEea!d^M zsF;t50VeCD#ax-F8Llhc6dD4LZ)2mClPNIM5B_IWCS1S>FN_#(CV^3oG4)Qs`8eC< z4vyd8=VceKaD(^o_Kjn{)&!1I;RK%NXE{sYb#i@A=dUa_N36u|FrlTj|S5=fjO!r1W)P2Yn&?f<~eHWts~^NvtcZ>u8%rRNF+WU`P&!j_X9CQZ=EHd29Y2 zh~#e~bRZfZq28cc7;4{Y=*R;NeT%6T6hn~)RiKlF!5a{ta2Ad9F5glR>E!)LC&Q8s zBc0e5>33S2Z~t%22aO>#zjK@UZ{yvNh8H<1K08zbsbsm$TESL60xyEb(9x1uz6*vH zUn4KdVmI^hnL_3ko+mAZ-6;CAhzEOFH{j0(4f{Dez`k>sK#yP#$BjPJ{cnylLi$~f zaoRc5`Zzx*g`peRc5qjVgS-5Ldjf;^qje~ZmTC=(*qC3TZK?u0DcITr7KkQ>%GQ3p X2+55!xp|MD8Z53doY}Yl7x{kydf_&2 literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/bussiness/model/req/BizPurchaseRequestQueryReqDto$BizPurchaseRequestQueryReqDtoBuilder.class b/target/classes/com/metalloop/modules/bussiness/model/req/BizPurchaseRequestQueryReqDto$BizPurchaseRequestQueryReqDtoBuilder.class new file mode 100644 index 0000000000000000000000000000000000000000..9a571dc2b84e7c24096e1accee29693b256a368a GIT binary patch literal 7528 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 z

    BkDO!<*mS$$BDzYb&oaQ?KDvQ^aC7sI|QyKANTzP}wTmOptE#SY^b%s^;lJ~&V zrC*MrL`vUVB(0N!q@=XVN~P6u^ORs&F2S^BUQ{K^odMCWko_`$)lV3QuWd`98E=4$uXl>$#gwOSyWZEX;iD4uI=dSstS)C?Fy&s z{68X%YG=MXz=lT%@{KXy1mhFIXCpoj;Ij#zE%_?97%4AH^9am1K1cD{fX{K6oW$1|`Z`heOBV9g2>BM`R>!vx z@xP;y`+U5cYQD~RioTg09H`0pwniZf%i{?4T?mdrlN<;@NW8HTn31HiKueN*0lgqe z)d9UQN%aA}C`pY0-IJuT0o|LV@d3R!Ns|J4Ns^`p^wJ~+0=kx@mVjQCq*(#IJW2Bc zdPS113Fy8g;Rv=eNjC)asw6E8=+#MT3+OdTS{l%6lXP=HuS-&AK(9|yS3qw_(u#nt zCuwy+Z%mRc{87vAkojcI%~MP|pxz?E-H6wg`7z4@@t(3_Jgo_fN0Q5g#e=@(!s7AS3Sse3s!v!v z>RBl)9-!p^!-NCkz1?bI@vvWwuy};7R#-fkRwpbT_o^2b4^cG;i${}mVe!CEqd0#G zH==qz6zxL+KFIh$@!>{&c%9mZH>Z7gN!o|^p?!Gu*@vFw!wbzm;sI(NMdqPi9*^Zg zQy$sm;YS`Lp? U^gsLplif$fY$N*&dw}%+25rZK0RR91 literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/bussiness/model/req/BizPurchaseRequestReqDto$BizPurchaseRequestReqDtoBuilder.class b/target/classes/com/metalloop/modules/bussiness/model/req/BizPurchaseRequestReqDto$BizPurchaseRequestReqDtoBuilder.class new file mode 100644 index 0000000000000000000000000000000000000000..ea1ffdd737d0864e323c731f9091da672e7f6104 GIT binary patch literal 7428 zcmd6s?Q#^y6^73U&-Z7>xOlWMCcQ;9vm;NfF3dkSrk?40bZR+m;5+&Mfnx zAVOj%c1U99<8LZg;Z!+Aid1p|{_8vNg}D5l>0WlU-9kf|Qu#;kOrP#~`b_tk?)OMv ze)H)6M0Ae+-b-DysYIIvZJ}<5`ft0-ZrOK(h4NJOwyY%%b)WSDFFEhfroo~4t<*zX zOVlf98wrQ1wXjic$i(&iFl?3^VLkO_T&|{Z>;*E8*&_XNB=3|*y?fJXR9kdoIV10+ zGEQ(APr}1%HH@a7Uzd?XU0xlIRob3a!eC*9J^6v4K6XRYBIzb_E|$?`og1DLG>|pO zAdyis@?xnPo)@%}b~&_7`m%w>Yb#CZ&_E78n?#<*|4`5#?%dam@M5)O3}Y;W(F%|7 zf}nle*3*D7@?4*dFA6%q#x04L_>wIz2|ARGSC?@u@|uYk25dhp=m;If<9AXwK<^cY zb}1*oTf}57jLVwWaQ*B(2L%mr@2x3TVmk6_8T%DM$C+pZuq&N3P1Mz z2VUU%)9wnd`nYuKJ_3|GTop9MPIt$dzifJ2&!b_@dwOl11Dh{DUNR zoUik+oU@(ITkGpA;~G=){eP;^%08>tC^T5-%B(rKB@i5XVFo)WcB9E)*^9lZFE0i` zi2V<}qxwI14M-H?O9Rs*J9=c#wPJT=3^z9D=B8 z`%J2$Nj z8osp(xovD?R$(PS<*l!0gI;<|m1U|!6NArUK*VxS5~`?yW&yLUdUY&87|n(d(sIJ% zuW$ca^7$k`3EWjE?aN^dA>WUwN#Z1On<{GKzHa(mFa4fAF3~4^F8slv!|n0BU^!fp zWi_liDkh*Zp?@9vM}Ee2M+Lp?26dzWhbv*Ylr~39|8tgA53&-sbibMFZ#mjDVhjn$ ztOw!RLw|If|E)PEYc=RxW6-OgbB-U(XA@k{ClOh_ojY)~BRgOdzQ8Og;QK5W;G0|u zz}1%W=ljRHo+~ZUp2_*VfmJ-$TY{XWdcNKg=xl50a=y>Wajxd{Hdos+JL}u2uGyFu z)m*n}X|^i~&3Ad_%=Nrr=6YKvw_8~rpL2$wyC(yjJ7c~Z#}Yg0fpu1`M4vfy#0Xql zJeKIM4!!u~u1Ez`@X|}j1-c-b_Tm@mE;+P>S~spfu3ema8aAYzh7B2~VMAhR*pN^f zHsq6r4H>0jLpEvHkTV)KWQ>LlxuRi1nrPUN4jMLOfrbr9pkYI*XV{SD88+m2h7FmW zVM9`9*pSB=HY9R}4LO`)L;7aekh^u*_G8`gcM`0919xS#I&2w!NY1~qkO=V00YbEc zLj3YT{794T;F=E~B)$~UrVKO!AO~7$_?3U-=X2b4Q73Ab>Y`ETtYb3f0hrd`!SA#4 zw-@HC_}2VBgFj&B_ZQ}?Z$g|SLdMSpEdXw?DK!VFkhXint#FI zkJ^lLo(H_y4WJe5FA&zhdyG z?D2D@Fkk5z&7U&(Gj{){3-gsW()<~NKW9JRXAAR{&eHrjgMZx~pYw(JO0#MHb%TG? z&c9KZuk@eh-!%AlX$6vuh2TH&zaZ9m&HvJ^8^d2f!hJ#8QTkDKpzKE3i?Sc(Aj-=q z$54h*PN2Ms@*2wPC~u&gN4bbHj&cd*EtD%L(OKtccj literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/bussiness/model/req/BizPurchaseRequestReqDto.class b/target/classes/com/metalloop/modules/bussiness/model/req/BizPurchaseRequestReqDto.class new file mode 100644 index 0000000000000000000000000000000000000000..24082d701a7d248b40520f0cc7257f281ce65955 GIT binary patch literal 18885 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 literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/bussiness/model/req/BizPurchaseRequestUpdateByQueryReqDto.class b/target/classes/com/metalloop/modules/bussiness/model/req/BizPurchaseRequestUpdateByQueryReqDto.class new file mode 100644 index 0000000000000000000000000000000000000000..8b6c4c54786e303651f17779241cd7dfb591a85e GIT binary patch literal 3969 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 literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/bussiness/model/req/BizSupplyInfoLockConditionReqDto.class b/target/classes/com/metalloop/modules/bussiness/model/req/BizSupplyInfoLockConditionReqDto.class new file mode 100644 index 0000000000000000000000000000000000000000..770ebd8cc08818ef68a5f7446b5ebaa4ad55665d GIT binary patch literal 4352 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 literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/bussiness/model/req/BizSupplyInfoQueryReqDto.class b/target/classes/com/metalloop/modules/bussiness/model/req/BizSupplyInfoQueryReqDto.class new file mode 100644 index 0000000000000000000000000000000000000000..d6b714b23b3488915923a1d46754a46db806ffea GIT binary patch literal 17967 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 literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/bussiness/model/req/BizSupplyInfoReqDto$BizSupplyInfoReqDtoBuilder.class b/target/classes/com/metalloop/modules/bussiness/model/req/BizSupplyInfoReqDto$BizSupplyInfoReqDtoBuilder.class new file mode 100644 index 0000000000000000000000000000000000000000..84b6bed5ce79abb48263542ad1a7e6f581148e1c GIT binary patch literal 7126 zcmc(k+jA5}6vod4$cEUM7~~Q_K?F%6u!y2)2m* zugS=v4zC7xDlLC1VX!dFjjt8xOoMNHAcn5=qr z*U#Q_K+quf-k4(kry{SKu^$w4klCB6VUW1hWJ*S{q8}Di<`&UxSqy{hk%t5w<%V9Y zg|{rDl}cE3n?5}v=omM4VcZ2d8)dKbn4shII3~a|M~&o7T*y0WfM3OdDIyXET*FOuAoC+3WxQFh`kw^|L; zfM3cBYv&O>-1?NDah?cKlZ`O;l4*9H8_o%u;K%O1;svfh<*xAJj!C!XBl@_*GlDAo z9-VRa3T(O{Xp)~1k>vQEmad+@X9Z1X(UUf6tHSD{pxMl46>m+SpA&Q`Gpqh=F46N2 zjoi{V(M^}>MgACHa-81>auc3~|9`0Kh|WE68!YW%s_1rWwu#(^F*8mx+|+=rn6lT+ zq5qSMs|Pb-nI*R#H+E-muA5$=S4-pyny2cj{Z&nkL#1WcPvztlhaSkUx7vP(2h9cS z!_F-QU7-bsw$$hv!{$Ea^b-Z0J78Z=W3wGzeiXYbJ!=>_B8OR7bSZ&y$^`qEB zah6rEAzn!9^D?^V;z90>Gr*s7afqR=jq8&|52WWSx3q=b4J=tb72hO+>2RH;v{k#DhA`8 zPI{-CuG70EdXM+-_Z`~T8p;cn!zEc(BdRTZ9QqE*)1j~Pi>W&*=s7p2L2~b_gyB-! z7&cwcSynyB8rahPg>+J3;RjW`GQ6nK?vT70O!J}@5Zsj zF1X{y3sj;{9olb1rY+z~^tnU#-n=X1w~9`>5Bj?U>ZKpQ$REj}MbtWR^>FRrw9c?0 zqcdzs<_sHhHp7No&9EU=Gi*rK3>y+P!-jOsupt>UY)Hcl8!|A%hQ!OTA@4G5$gT_< z(kR1*9LlgEb24m5nhYEAB*TV8$*>_uGHghX3>$KzHrp<&G5*Mab-s$bGFlzB4E;pT z_u29<;g^GfXfyfv<$?H-It94qLj}1eg|sdM4FkwQRT_HmNBn$;+YV|+ZB<<~3Y~TQ zHFyA~^|tYQ?EFoI`6`w*zsKPB+4;SN`RcpS{62%fg|6A=XLDh``o=VWi^1==^S2e| ztM66w`wjjsJAX%EzWVkxf0x1EZRg)pn6LH`&EIYC_uBb;3iH*Tr1^Ud{(g#V>wAA; zzS`e3f4{*WwDS)X=BvF@^9K$7LHqm+73QmbSMv`V{IZ>Ys4!pc;hJAI_($#hBZc|u zJkb232LG6y|8QZxI$JdVn880zu`PZcEzDQvl;$5d_$Mf_@t-KnS7)B)pD_5R?EI63 z`Re@C{8I*h)IR^G3-i@ktofq`f873kjTPprb6xYt4gQ4P|FebpN+W3ggu$=adHeMLJn9p?W^moE?f0EzVjZ9?fq*^IIcWe3VVD0@)uM>&8pgmMVw z2+G4KkD@$*auVe<${5O7l&4Y7qfDX9pv?V5FMMYeaY_&RRz3I{y{`TJ7U>1+#_M4H ztFJ%P%jkAMU929frjzQD`K@jZ*Ohq=mtUwxbhB5uZh3_bw35B_8>@uqo0;u0y@hKR dUh8d?59lM*`tZ74_-Db#w2?lc&*%&4{~IA;?hF6` literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/bussiness/model/req/BizSupplyInfoReqDto.class b/target/classes/com/metalloop/modules/bussiness/model/req/BizSupplyInfoReqDto.class new file mode 100644 index 0000000000000000000000000000000000000000..d9749c40e6e13592bd98abe02d3d4c0a9bbdbbe0 GIT binary patch literal 17916 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 literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/bussiness/model/req/BizVarietyLockConditionReqDto$BizVarietyLockConditionReqDtoBuilder.class b/target/classes/com/metalloop/modules/bussiness/model/req/BizVarietyLockConditionReqDto$BizVarietyLockConditionReqDtoBuilder.class new file mode 100644 index 0000000000000000000000000000000000000000..8e508d3e99b9c96fc5eeaae4e7fe9f99472783be GIT binary patch literal 2853 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 literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/bussiness/model/req/BizVarietyQueryReqDto.class b/target/classes/com/metalloop/modules/bussiness/model/req/BizVarietyQueryReqDto.class new file mode 100644 index 0000000000000000000000000000000000000000..19d71ce39752c0fb07bd0e2e7fa7044ee9f7647c GIT binary patch literal 8135 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 literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/bussiness/model/req/BizVarietyReqDto.class b/target/classes/com/metalloop/modules/bussiness/model/req/BizVarietyReqDto.class new file mode 100644 index 0000000000000000000000000000000000000000..3e539f97ad136856f9eddd7cde11a7999ca5bbf6 GIT binary patch literal 8084 zcmcIpYjjlA72YSA_uNS)lLuY|0S!tf#L)_Exd{|WL?TIe1Y*_JdXrqq$YdtWBfk0& z9~G%+6kpZa*0vhkqCiUm1+>~$Y_09D{%ZfUYmo$h@w=Pes!pg+@bD2y$X=O6J z#!AG})}Gjg_yc`rI&Nj}-)`;c$fg>LD>mffi9stJAVw~Y+~i^8X^SW0*>#L6S2Xqc z$wz)K1vCnh#>lwzt{GLt2N{LC?lDKrSi(&1igl%uyIOeB@~ZK3-eaXvd`h+HV*_QVcU2 zFq1d!$(ad8^(!2s+R}fIHIQv>x}Afs*XVO}10(k?3pRimS2Q`G!sY>5O`rGD7c}}J zrw!+qL^5Gc7Vjp*`3#L(IbRTbTa{&b{aTII(U%x`QQs>JRbSAPZ7PnvQKJpi&dATP z%36hJ+g==flSUiqW=2&&EBBQiQCHA`@(JFeQ=?mWi|Tv};TBxirBOH6Me;h^3AlQT zMqBO9I`V$NRogY{r5%hyXxZ*qx><|n7mvgHG`iJ>?{uu+YPwCM+vyIh-;kLZYDaX6 z;OY#}SLseKeNCgg$Sha}IW^dJ)J){8Eq61zy4-p@)>RoJf;=&x(IBCV1;gfUt38z* zFtfMDv*?8>humzRbZ)d>%d zr((S#xZ@9){Rvn=-=0fm5p8|(OdJ(ACX*>RAEF#KSlI=5=3a9b!Z|j2Lo8)xVrCwI z1UncvW4!}I*09-%9;OcNof$vS*>V2#zOyGzee&Gf=TAR@BqXb+#tzJkADJ!Ay!FJ) z$#FRF%)Utoc2oGE6hUzIorBY_j-5O9=4|D;*Iu7`?6Gr)k4?Yy6qu%;dUopM)6=g$ z^2y@|7%iFEKRNx-UUYt4%gh^lXP$fW{OKpJZp4tATYfkj<1 z5URVdY4zlW`>pg2xoVfIRqITSmRYw*S0XjspV}R}*-BbzB*{T=MY>W0W`gGmPN8^Q z*`YWVy6t}$KB(OpnMP|%Vy3ANG23lrhf;&ci`cTTv!K5!G$_bg1*uxOE^k|%2a05c z6pI==#bQ!t*+jvjij6eL-EdU@bTbNJ3|o1m#Zw z@H7c>R)w&r1G~G;5#{jit=l`hZ^EKjRyPTh^)>ts7V54*J!A9pOec6N$zCS;bBB*lAANXf$Br!s>>ewV z?Y4N5Lxu>W|7<3kHb-Rk$W(jiy#T#Wzwy#<`R4sQMveKHiYG@?yRDcsqTJ6nngiKX z`hG?)IW4Myl5~@q9K^Mtu`89@of~O&%wDA+M@>P)9ruq|W#D%>@b-DrQKcx_aVhDI z<237|GmM@oHrI;y;99nFsl(eGMd59{Y`dyMXL}y6a(Esua%UEA;mlmh`ywypeQ_;o z!p7K{#JdbFIj|gw)N7-jIOvi6agt0f|lW=xEj~3UAR$I z@LLt+I5yoN-uK{Hl%d^F;67BUNI-$RPpM)U3fz546-g*?|0z|Zpupv)R51btZa<}p zJy77jQ>sWqf%{FVA_E1kGo^|wEuaRa=t0O|N6k{a`H$}uvD=PQ z~c0@2WNQ8229xXDzJjNX!yAa~N(BHpJkC&ql&6i$gDMil1Ezk^t@0w`tOvdUpQZSnY|S~FBH;0 zNe9X;?c({;%RNBRFDapaik>b`x9)L(+6*s1ZH7Z;T5tFPT5kk&KL-UA$gc++pbjGlP=}%EK@QRs2$BP|$p`_o$*9sp98{%1A-&20 z+H6zJ+F}uXBKQ z8ub9}G#d1J4r)-KdcDC0xeg&CRyvLbGJl?vYh~w8Hbw{OIUE=2*@N^vjtdp|+?${m zP*+J&b~n8U$%T)Ho%9kUH+8di`Yt37C0HZ949QDrb_Klx$p@GFjJ^lSk9Pm0S0M#x zlKx8HhZLmK^cVU8B#r(?6ZAt!A^Ha$rq>`<;lwgVKY~=vJhY#F3@OZ(&OXTTBi-|u8?)J;FJfo> z8!TvWz;yAj3?VEd;np_SS`mDU!mUFHJzuzaoV+cQ^yRyF{Tjo?6}n4ld^{kfs?Bf< z6=G2|^673{wchXum1kCk2$iim46jfjI8`gJt=eSxgvvLoLdeQin+?BEAzD={zpd&q z0zws-RUw9Dt8GS5s1UxYRnS)LG&G^oW>uO{Eh--vk4kH)z^G)^^m94{Q@dG+-hxy? z0p_E(Vg5?o5zfPHd0?!AOCN#crrYRObQF?@vT*lbK=NY$c!Yil$p>c~qGOQ!^Z`EA zPe2OL-|}@-YTS#mCCe&}qJ0!7J*?Z3AqKtFTJJ zJPueMSzN2Y-a>F5Uq+#t_)41OTb0+ThWMwOoFMSdUol@7|DRlWwQ3%?fIi>*#Sn@l zcwv$}&m15{rCpRN&o(zs5r*a>%yZ5Q3fiIr)QQ=9&Ykc_erH_869t|QJe%;W!Lu1p z51uwW>+x(mL0`dZCtfG1pWy%HQkT4gt}1&6#Xn(XmO?JHFSEz#?&70K-JEv^H-b*y z9Xhx? zK=cWTpXK~Q;>WIl$nQ-7bQ2aG@OuG2ymLBE#LueyK*>*i#YZzYodi(@ohtt1a+=rN9v6#k}Aw$v&G@qR-DZ1J+*MHf)OsKg2?h%x+{wxg_UcgpT8N&V$x_z?b( zM5EEf2k@bcXS!=xVAGIlOtW)2bIv#CoH>{N{PpbzfC)@xkwS-o&K%O{V#vSY>)dp> z``Vl@zY!J1&^2zmwwh$Q(S$K<_1U0v;a7Tx*-bchvwPF*J+m?S5UVK-1Kw5tI zt7s_xZ*}vJg<6r-C*0#yEQCic+i1^%Eiw7O%}AGZA!2w`_-7uZx6CN{CxiM4cr$UL zSZByC$iSvBpO#Yj%H#F$5&WJmT+QMdt{b?alkXVy8EQKVwh~qbw-}aNJErAn)L{x?f0KlX7tN=eRBCP8XlbHTgD3t$ zTA6gpG-dP)*hW+242>E9*pDF^HK-OD#t6*=^!pZr!51RE+LbBQ(73g9 zc0Qq6ym#qLh8s)ce4*dcn>HQo&1k6vHv(Xgf{@{3@O5cv&FW$BHn&Wb!H+Tpfgs8e zWH|Xh8AYq`w53@~3|+BOFm2zW!o12Lst{r*Us!jV;Y3NWF5aR6!mbYDCDbtZ<7#?f zA)}@kYMW!1)kQUuQqwb$vFXb^Zbe%z2<5FoY{PbjvKej-INtR%x0Gav<6i)E*rA|4 zh?j*Kp~95~kHRcdtp7?7jo8UhN$a~DVdyK-2p0&kQHR|@G+__1kyOoOABA5wMur1; z70n7-f@noso{@CKgi%@$;w3-s3BZz&7Fl?JsXL+BVj;q!= z&7yVFrlqDWli{cv%$d0nt7W4|I3p=|ouMYnsHR6IxS^>j?TR{`BDcch8QQ=(KBbu& z2~MQbx}{ngEzQs#BX#owb!LVek;MZMT{R=>x&q~FLQ^9X@g$#9qZF12ZpIC5Ud$%o zmHXEpfAUqw%ERTy*FK`}pUYPt-~4>#$7@8~>KETUx%KsvTlZFPf85wVIYz`y+xf{b zU*aB?S`o-{$=>3s7}cB6%-l3LCT(_hIP46k7mM&y9ZTtR)B0@WBu{gL%29%_s$+Uw zO^GTcARHXYN@_&ta7h_b#4%c@%v{gC zFBtkuTg8PD6-zN)kW`r8GC+$DQz0?9nMqj`b8D!5Rw0jp z2|Z)P`Jg7!c-N+9-#+01LramAT>bLF>eZWeKCb+HbM?~)c0QJma?={&A{QtYLcO|f znU+i_x6`S5lC@8Dep?}_SliJ@toCM~_F&+>@PmR-;W)wrb_bP9gvE@h6Q4LYQz z6Lj!5#dLi(GaubZyGxQcadK&%7g4|H($5`VE|CM#N7s%C&Eio%rWp=z%44$~l-;bo z(G@SfoeTFFg`lton z8oHc*cXos>2F}a~jSCIA^?N8{n#VP*9z7%xhLHk};|*%_f#`%U0#s25wClM*C(sLT z)|XBK6yEq++wMTQO+B|s)mfyiwuWPp@Y3e5kF;efPQ+Qho&6Xn24C@_@b)e^@Zu#O zo~}a<{9k05LRKW(TEB%X-Dvw2{_BvvH`;!If26(jF1BP}sZ%@JPCuPe$8RVPOOLQ+ z8NrUQbQj^AMnk7eDh-{!uqlww3gSkWi~%Uwhe3iBr%ASw2ifx zzz}Vthi*>&7$%vQZb>~jMLmh0op_UeWsG14V$}0d4-{QxivMp^D)2wWRt0tR^|Png zZgb`r0y)a^`U5zsP%{1mZ5aq#jZ<2-q0zDfw1I^_yyrKR9~FPgEp!|q!&jpiZL=t z#vz=ho(BQ!#~Cuyi`{hJ9;cp^CG8ZXXC$C|ou4rx3XDA?rS*4@5Y$4>Ddcpdd=aS? z1lt5A9j|++6}ed>9KMge!ar&rq8%tqK|3()T&^ja%k=M-gS%c7?qPpniqt$emt~xF zHhqKuy<}ijD*#N~KEu+8WO(^W-Qa*%RIzBAEaZz&K~k-H2n zqDcPbY7XWcdoL>;df7ma^v2*P`0GWv@rr?7xzTlCx`O+MN_xRSzmz7+Cb=U_ONlQU z7{nz~4(Pa>t|)MZ0cDO9_sRdg6p;q=<>4ZmKb_Nirc;`^uewhn8Gx9T5vh}x+BWulMX@P3oEli z(kkMNf!V5NP$_E71YTuWJ(~+kVh$OZBJ&JK(;;W8cku7l^+8oA@zQES9!D@_PRB|~ zY7wblr+1Th9d9J?rh&Kc_Ng>i5DbX}(+c>5uNba}52&gjn~oaor2=}_zY&`E0Q{g`sxN}`b?p0aV2;!2 zd|mi1?7~TE{vX**SBm3mX3==hz!ai_HJfkeD z*12jHe8)Xx_%VF_T2XNcySI3Xf5L9MX?z^%`QC_|3MU zPi-e2GW^;oEDiQFlbII9MK(7Y<|=Z1LQ&*`8h~ada&N1vl>y5 zs~Qo#@hWy|zDPTl6(i+xStF~el!(&FwSfzKJPHdZCZqb?3(M3-9V11jk! zF-b6FY1Ki`oAhjvd@dp*Di@Ivk&DQP#YJR9)gm(DY7rUHvWSc*SVTr-t4`KUeiMZz z-xq0?p9RB+(NcBzJ@NS6P2;Qk(fBxxvP~#6q@Q35^hnmJ$`KR;o}M)23LP9-TD!Kb>;=YPlC zqnRTr;Ujd@NYUt{F+gL8#uXZ4G$v`JpW;S*p{t%TAKNqT;X`e+NNrX2mIcC!*!vBy zk$6ZwPOPeBnjX*a4$#Q@LX7ox)Uv}~& literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/bussiness/model/resp/BizEnterpriseProductRespDto.class b/target/classes/com/metalloop/modules/bussiness/model/resp/BizEnterpriseProductRespDto.class new file mode 100644 index 0000000000000000000000000000000000000000..6ff258476d542cc848735d04545a5b033b8afeb9 GIT binary patch literal 8259 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 literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/bussiness/model/resp/BizMaterialRespDto$BizMaterialRespDtoBuilder.class b/target/classes/com/metalloop/modules/bussiness/model/resp/BizMaterialRespDto$BizMaterialRespDtoBuilder.class new file mode 100644 index 0000000000000000000000000000000000000000..03fc1c258250f0c6652bda96506cf0296cf6318c GIT binary patch literal 3029 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 literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/bussiness/model/resp/BizPurchaseRequestRespDto$BizPurchaseRequestRespDtoBuilder.class b/target/classes/com/metalloop/modules/bussiness/model/resp/BizPurchaseRequestRespDto$BizPurchaseRequestRespDtoBuilder.class new file mode 100644 index 0000000000000000000000000000000000000000..a0373602f9941350e51640cdb3038f347295cbe6 GIT binary patch literal 7457 zcmd6sTXPi0701sA&ZliiBhc#Lj59kp|7qEOSv1 zc7iVncJ8mKdOAWOUUJ@{4gCW%o2iR7m#ACN z77`B0YFIDVW#amN7&glFu$KBVF3+ZM>;*E8S&@D@l5wMa$$L1FM%8&YmXq>+D&u4l z@<iIPpIn?3RU|XeSTqO+VhS->&2wXBd?KoVZizkK}YFje11Q51Jqt}Xs0p) zym<`Q+=#4tb=S}O*)M2-Yi~|5855CL&DgI9I?n8^)i6lhYBC|CSkYe-ROS-VESV33 z?314fI!QlA0Vc*;90SvvdxF>!vj?nM&LwjUC#a8{A7_=u0=q_-_ijz_x5@q_e&k&)@LsnT?kO4YS@Y zA2hs3HsxOl8s!$Zxz%cz2HaaOtX;zr^yY}))ALANtm)n~axzjbJ2Ep|>f-Jy4R=l;%dzU|Kqa<)C5Bd=F{?u#{0+Ly7S z+tuvES*6X^+I&tsn@di8){ben9S==!M~N8!u)`B!K6(11BmeK_{#1$lJOpgPkX7FcRT!YAKabq&? zfizcHi?eQ3F9GH)8OwHH-P-QGCX@NFHsMAt93tGq4!xH*N6*dr8T3fE-hO(mp9Rh7 z$Q^0xHXZNh$G*9l*01ZEX4!Rh=t}?Ew28&tm4s>y!IJ^CHQo zuIN?2#-D-TX?pXSpPv`lz2|(>Q)eGOpKp5ZtTi2We$V;ooXt7noNf8vS>1NGo5j4h z&3T)X&ARff`7Q5Kb3X4$bH3$3w@TS>KIaU;As-8H9S!?#97`Or2UnZ668+7gqsH2` zEy)u71KZ}ut0G8H>z588O6Y(ywFke5g~_1>VMXwuLSOBx!YNJB#aX=n%(4Gr<3p&>jpGz5W$h5*pe5d9e%Vm?Dd zxMygH@C*$ho}nSSGc*KthK8uFP1}!o#~)EJ_jSCLQR=WV_>`Q_vn3JWmlp`pb_(&! z4e=)px{qgm`5+{wh&E)PApm)yl?Gq=0zaSOwS(GGJ5?2pLS?-sV{U+Hy>0v+JAZ3o zzFOa!-(&Fm?EK!se6?3Jzt7=%va}><{virM=7<de#pqXvJ#&OcU| zug*`+A29gG?c+08n6J)a%|CAN%Xa>&h571S*Zi`zJD(l<}1HJ^T!N+#cu!A!hGd}Xnw`ukK5PJ zwZeSm&uIR*!Jo9-KT(*kd?U@DH2Bl@`+ce~U-?;@KW*@D+SlhyVZQR&H2J(id-M+cHv(sf1%CvSNc2slXm|A`wdM= literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/bussiness/model/resp/BizPurchaseRequestRespDto.class b/target/classes/com/metalloop/modules/bussiness/model/resp/BizPurchaseRequestRespDto.class new file mode 100644 index 0000000000000000000000000000000000000000..8291cb2988de8a2ceb9b3eac9cab57a70952e540 GIT binary patch literal 18898 zcmeHPdwf*Yo&TMgBr{2FlF2(a1PCxd7zp8|){9z^fQ?Ng@~V%vc1T7tGGtLhYhf6hsCPD74*eyW4i3?QVD5ZP&J$1olz)z1xR%zvpph?##V7gJ$=S z{VX!f@1F1Xe9yV(p2zQ;-yOg8n=|K$=z8{B9&#}X^+eaVtq;Y6kw`Q;(6&C>I}{1U z+SUxkV&VQ!EXGqpk+#85Y@qF?@B`gLgFSu0SZI0ZzM)Voz8uNz@u>f@$W24xNN;Gc zgcucQR7gdPimnUyhvPRea<|M_T})mo_E3pNrKB-xAB);Ba)o;t`8w|nZV0wTg8ggT zI-~t-7xJ>oHLBnRX+49XU_7)c78>m6ybDZ4n}z51dS&0 z#KL$u9trW3Ng7QS<@JVQJ%izacsSb6)BPGvrD@21-%zk0?2U}-WF?^2hi9|4J=7Ck zAB>3mY|&^2XBQ8lt-A-qJwkh?MzgqfSx>Y-9_)#ChX!L(eYQqz9MMdqFWN7%%++Wf z%?E&95Z(|P+}MuVry6%C9*(r}6jA6^8ePprd?vRu+7mSE{~?X8<)9aJTpL<7C~kkD zM%SS$QfY9gHymFP55|XLjH)e-ds8$T2?hIw{)aWXk=LbkU}#Mw9P3*dUN7o+lSYeq zdP(U1f$(6+OkSeVQeI+Zu%{Ygr zy4BD?FPbUc-#(_%?V`@IBbs%-Q=_{?vgGsR66k+IqfgS^XuO_a{}Ob72&38-ODio~ z!;4)w<4#TvYP5!W(5Kdh;vECQr_sYa-HY^N`ImfoHouN-<*qsQp;Qs=hRkZmw)l|5*Amd7>P$+KuE zVwE{=Iq-x=zr&010a$Dux*Xi2(UTk$k4J%g^m6QJjh>-rCDxuXfK#0!J%o9N=QP^K z#i~(~nZX>z96zAZ^Bm``)1d}3Pd}v57kEMZS$C&LCx^bM(eHAo4A7F)0OiPw8ok8D zYJe=t9;2M_C5>L;4Z?4&-7-u$_Nqp&@yzwWmO6}7&N-&h>zu>$FSm?Lj=iDL3A0+V zSDSC;&d^!(0W5)ii!qUiMXaNQzD(ymbU~x9&{s1?lk9ekJR5?M zq0q8>7)^5;wwB?kI%*Y`=-<=m_v!1n!}Y;+Av|`>r5_8&QEopbp8j}@v7cJS#K5*F z<+@fSS#tc}NHOP=|CJldtFY`RaoKjZ&eMv-XX*kE{Q*Xan54tewiUvA2tN>96F~>m zmt$$eGO;=w3nO7se}5Fq5}XDsq_a9fk9|70c5P^|ZNvPwXfW0mOcUVu^@f9OD|-4u z>w^m!HIBUg(8Uw44qrGlviWF7``hQX4WB-HY0qnKpWDtTklgu1^7NMBGiOHkyfm`y zl)#e@zj1N%p61xb*xf^LrJ64udP$JWN49TDzJ6f%+~(oadpp`Or6nKUGJ4|R=!-i> zU&jE_l22|;?%oVLx$PB3t@3hY|E`NCAh0cY_@TGY?HxVw%B9`=ezs}zrL&)t#-cfM zguEszI&$!lOJ8^fY8Q_l9zDBtWarL{7mi`HEA+`@mmb*(H4sMjJwLMVx#W%~htHnE z>Vi6tzHt_}!t)AybWh^q(fxpi&wTOXi5I~KB<+nPLe{L-eq7cV@5t9jz;pUOjQin_RU1$iD3(Pj2Js+rBjN>K8=Ds*5KMBjwVj?IVx9Jo3_^3rI^hA{I<$UGXmF(*eB;#M>*(L$F#M`IBhmG1 zqU+jj4)uoy;Y;*FtBNnDk<~%mHioOxDTw!lFNWnjT{Y8LYmYOtE@&SlhwLaIrF6P&Hq1{VEW%JS%t%NHqN^tf06OUX+xz z_)e0U_Ly{a3)v16FGzz*%2C37;WEQLQuk$Xie!rE*~q<&*+^+mh-+6v%;cFKkgS{O z_sFVec(!%c_BPiBuEyKW;uoQZBO&b#VRpy0%?C1To8F+n8vxPC-@yb0L^{nfpVi}$ zDOTrMRw3>A$m_JfgMk?3y)}Dlz)7G81KC8GC(ISVmfnC@gE2 zk4>2@)s|i+=;*>?wnKN2ymUf|Ac#W%bTWymD_JAUX#jS#l8})mi@>H$9S*1>ED55B z)Oi4UgjBJlR0&Ftb%%k0AZb~t>M>^wE%PyFBuZj$=H|n!zx7C=Rupa$(?hN3zn4WcA!2z{$6?QN0 z=vsowq623JI3*m4#IY$7GeMa@bHJDRGsm^&<ZRzd2aT{F!4?^Jk1bpWimViv8)K zROD9!NAqV4kYay&ER^^yy}sO^)wfacj4oUTA!|>qOkJltW3fNo?=*i#|0?xcJ5rV3 zp{wu`tlgy6@BF~a{F%?SR5h`DT&1er=47wt zQp-72oZ#jtA-#5AVXe$XT4u|Z$-cH%<%+7DS(sfceO8^TI^3rySrNr)d}wKyZv!V> z_6UA9U%?rT$4)Hy=%H5Y9xu6jNAk>`=Ju7#u;|>1^Zc$5cW&Vi`cTz)EIt?07chsAI%!7$4GY1bg!zahFV)FvO&VsTWl6z9u0`DXNtweu;W6#YoBzZby< ze`hqhZfIcPdp^00jQkAVfqs`o!8{SQBq@o-2z9Iow$ASSI=u*`Q9g%V z&t|}p>*&YkX>lYNi-piJn=kvkRH(_r9$+-p)-|1aoQL6TaKd|2v8u`LNt1AB7(yKD zn>3DGJX{6)53wsP#rL=HnH-~U13-Am4txgy!b^7Gj{qRNWC#8j076N2;7MZbBLGIx6J2zX7E&?&9sND*e?UqzzWE>T zSz>pbBKI-ajQ$b-7U7$yntrbAw*`W@k;>TyoHGgoC& zX9^);f;pP-kd^+>^TTslPxrmQwU*S2O%R{ zXhTjR#1tKbZpaq;Y)&CWARUAjWeYu&QwRY|2ch#(d#ZIw`}lMJ=g^3_}Vpa0GmVC>z zhqHWHzVgzGRq_=!`Tum5_vI@uePJbEWt0Ce`h`>DROc%%J!&OiYm@(_vwVHN^3pF? z^14m_SI+W{`N~W0UdcDvFLymkeuhn+IX6xqUwOHAQu4EG@-Aoj)_mpV4ou0n+2q}< zz^U!$fX_qR&^Mw@(zv;3lb<>f9}$uG9ampZq7d%p5=udU>l+T=CoQG0W~ z@^Z(nU`zpd5Ds~-6mhn!|Z6tsSmO7((oQ00rHwdw^Y zsn=wLjY3euMv-2~IYr-~su!tDFVu@Hq=?}GDPnka4<~sQ$)kHMq^MC0Qq(BXi#e%8 zk&5*a3n^xlf)q0}y_AzQMS^7^Z7|9}+F+FHWt>#5NM(Atg|yMA0BNJ)(0qG z&O+L1)PuCuXwd69sX>wI^#%)RyP<=$-DuQxPHI#nU2n9Ib{OM8+F>;5<2b2Fk;dsw z7Sb+bJV?8Y3Ho?WnxIJI^$8ZzZet=yyNzajA}2K~(nP)4LVC)W1kzK+WPK7RO;)5y z`eX}fuQ3Iry@p?(!byHbnxgwHr2WQJkoFtX^r@UQO_8SR(=4Qe#&nPl8ZG*CPHIu4 z>3WNW^nx)1q!)~UK7*42iZnwa#7RBSsrYM~pdo8&{g6NNxHY3+bpa7o?-cJbf-F%~Pbg`aBEixG^83Fo88Z{23UpE<=)M7SVa_Z$5|sR4-LBe**I8u zz1zKvHNh&Tr`;WFJggEr=?<_7uuAEi+s`J#(&&foLe>ncjDF&Jmra6Ij^Dbx#U{h5 zU`4JUuqm*7Y^v)l^TVoSGhGQb6;>6y#q|`M2CJHNyLPeZuxeP;bsuYiRm+B4>kwt|QPn&P^j z^|5PU`CU)rrGgK^n(Erm7PD(%O>>>Yof)vEyS|3@SqQ7e^%HuRT?cE1Ym|P$u7?$H z7ts&c4X|dqHToX=FsxbbnUr8R!fJKTrK4;Stl92v+Qn{y)#hGJkD`lFyqG~g?z>3qw{j7BW56i zpNQ1rS)|nM2LO19A2JA#R21NQJT$-NTX_8T<a|ECiH?)C!o3%1W!ZeI&9Pn2u_B| zRc}Hs8w~<#NI`HtWUeEIE+BXvDwl3TM~y}SHKri=A~M%;W1N8ChNxWQOekSA38*Or z!8t*$CdY+~`DO1`3zyqOhbJX;2<(DvtP^iv+zG3Ktz~!NKfZ81gz5R?uqxSpEL)#|RfXlFgnbfL zHTy2T&F+R(!+wq_{Zp`NUB&b!3&N^%`RM>#1FPQkVcNoaU^Tezq(0UQOLq-X7Yo5^ zbnT*f>>gO-T(4k}TMMg+PueBFqy_I%J^!tRmoZG#c-x#GC8e)jJfW5fO@hfO$V^hS zA`30e%uZEgPbN9dcK}otuPsYDmoug^;@7tF2En)f757`fe~jx4tL!D0!PBL`7ek4Z zUS1@vlY^wBwD*)stL5e?!LnR}Y0bQ-N|rkVqF*8Vd;C>TAz!u{UKU`^ZL9tu!`Ts$%+B zR4m=^Vax$gf>6cjNPvyxa?O zKR!`>4$7n#f&^6u^uh$y z2lS!@H3oD~g2o4QZ-SZwdU1lL1oV;wO%Ld$2?_*sEkUgTy(~d<0(yCZ76kN)1YHx* zeF?%5Y-NIO20=k}{)d9UR zLALNmEx$wNlQlO_G3kJMiv)KgUR&nJEC+g=Zl5K1L-Bg;xX@1Ve#;^CM+IFE)y0H`j!ie$7d^q#Y3q+VezPErLcH_ zlK)Q;4v6=5tA)kGel^145xQDo@nBk=uz1|7URXRt)gUY$P11$M13!)8{3+as>iJN# z4+Z!j;{(Nq8};FJY9HR5_TeRIAKr)d;nim!dXf(>H2a7LsCg8bhkAKDmIqCFWRr&< zd5n+;@_4k3hs1c?Dm%DT$nHf&Tx?y|OXMuV)&nTu9hUXO^5Q#+&k*}GuBy=g@Ow*k OKNYi$>@(~^(*GMwGjUA- literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/bussiness/model/resp/BizSupplyInfoRespDto$BizSupplyInfoRespDtoBuilder.class b/target/classes/com/metalloop/modules/bussiness/model/resp/BizSupplyInfoRespDto$BizSupplyInfoRespDtoBuilder.class new file mode 100644 index 0000000000000000000000000000000000000000..6b75c14d633e66aacfa584887a9d7b502f29c90a GIT binary patch literal 7155 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 literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/bussiness/model/resp/BizVarietyRespDto.class b/target/classes/com/metalloop/modules/bussiness/model/resp/BizVarietyRespDto.class new file mode 100644 index 0000000000000000000000000000000000000000..5bc837f023a22aaa0d6bf2814da140e83d52323c GIT binary patch literal 8097 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 literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/bussiness/service/BizPurchaseRequestService.class b/target/classes/com/metalloop/modules/bussiness/service/BizPurchaseRequestService.class new file mode 100644 index 0000000000000000000000000000000000000000..a081146d3b8f6593185b7a2e42b990b2f99f244e GIT binary patch literal 4505 zcmd5=*>2lL6unez%S&9x&e|>eqO5G2v}tPB^^#470y`0s0Lc?Y4&+HFj>;j0C}>dx zX!;3lf1uw`pbteK`jn3fdbo=el?tI8DYUAK zmfB*DW|~5@)s`?^lS#GVO35uIr7D@-;W|^-`138-*0(ju?y>J(CY^d^mqNBFvCo>EpkvT zo-On>Qn|yNZDDL_wgz69Efrd5^d+y*Oha?@?e!4!sY=bKz;(E(*0^+lBjIFC2$N~n zqC$K7T_M0!oi{Dbac!h;WIZhvN@#fikg^GotEP$UDk0PayFz#SCX2#QXwGNse%nBq z*Sb|hp=p#690!AlLcfb@!fFmcUgG#NVE?-Rxk9_R0T!?JGnbUWcQ}ZQ`Jnfz25Ys2 z!z{h4(2HVi_&8Iwu=#aiGu0IOQ?-Ua>%ua)!-X{<)d^-f+yR(rJz9x8|9O|lik3Zp z8|-)EE=ZAnP--2vX$L)$vdpx#CK~0g%WUxRva+#}A$X8VK&$L-j!^iXz`Lh44NbJT zAzZc9MUQgXHeIQ*XXpfp;;0xlxg}LV;Mk_#)E3ZSJC}9WwoxR7#w34^-8=4wQ|RCK z0btSEAwQ3GUnN$MP(iYOD(IqkI+IQ2RE;}YTcP=sz+np2Y-Hz_dNjQ5*c_TPWY^`N zP0I)}8)5KN54-tTR<$B6@Z~rF_Dgn64zO6;qVICn6b3)-gTG}97Zf_f(3L(FiGP!C51D&2GF?_YPubJ49AZ9FJaOu~cFLk$G)j~#K` ztBC%6aLDa4Sj^{pwJ6-ef4(E^>BcEqUQbzf`(hPWceE{@Qa$zzdr8KTe(X7CgZE?h zoDHwf(Q7pIb}X7YuGe*ew=KKLO*CNY}AXdIr% zdk)XgZYo7nv#@-CUy0^m+C%eL9gG(+-aB~dKH8r+KHxh(*t_~r?D)g67xWQ*9LAg~ z(I+r{8k-NpeB{mMqi-_fl0wHr=d-)$1RS5l?^GP%G!i*Ol_Y+&B*^nD%;)HQoc9Hc zFVdxOIao_FQDOS5XX)n{f04iRGE7(KOP`mo=xRt+m^`q-{54$*rx7HW`i2&>Q%m@7 qNL;NXsbx6$j#lzat1zwQo7Q2vPB*eKZf20cYrxGdx(ymjRQ(Uy-=Bp5 literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/bussiness/service/BizSupplyInfoService.class b/target/classes/com/metalloop/modules/bussiness/service/BizSupplyInfoService.class new file mode 100644 index 0000000000000000000000000000000000000000..a10727aa89ad1b6664bf330a220e9eff41284168 GIT binary patch literal 4335 zcmc&&NpllN6n-si%bPHUfLW4|1&AQP5H^R{F}6$~a)|<>;zUu@Xr>WuM$?m7T(&ER za1SSr{06Q$aL5nHk4o{)t{F=%MWc|zsH*#QzxTcGE#0lZ|9Srx5&cLTWhyaR)?`QN za91@9DJ`WVbu9K6|b(l!kCzSWii)NojD^Tw-)EqXlZG znxbv0u4lv5XL%*d!+NmN$9&lUv^B$EbhsJ;Oc66`?3pZpfYDq)(PK+TAZt5yozXM` z1wO+;%vq2p4QaOffG!E_4C%fTY-e;p=-_T~FJCF=fx><~%!k=k*Lla1E;qFuM!yZ6 zXisusiZWZ1HdhR(y;K_bS(m0RTp`UqUQTe+6)td0Yw=3B_~%CgRUpp26aA={ggwLZ zf}?Kn2X>eg8Oe;Lwvic+JZ^)9->VxNIa>P_{;&RyZ0!e1K(yaETB_^_U3yAq2l*%* z%kUh9ZzJjsqM=~e7N(=Xx*O%dGF0q%RY^gx^(grw}rRv>0RZF8ylh`2YS zB4wmFCpGDrxwA4osSy6S!9@-0_0XMqz+mpv=F(Fyy=hcz-jQ2rLw!6bzJF=QPp717 z?~cI8kheWt5&X+d0_B$xK*=T)lJ}31D=kn>aV?>>BwjxnDZsF4y&bjA?uHgz(*~@7 zo^5!(yPrh0`0l?)oK1}aQS^J_Y|v|xAdW0`GyRHhqdc6%$adFh7(UYSr(txBjbD42 z2U-D#al>s&&(`=|Vc=4AqSq_(vQICbjJWCJ8^`1HIG&Ydn#5=dqj4x9|D`!Yvs8+w zDv%t+SE4zH4$(YThvUN-AL+mJ6FQnIJ{Blm=w5w1QG8K_ z%7GIHK7fy+c-k%5ri^0XAXUxuO!w>8%gp@v`RzLqU7^K1k@4!1khrv5*1q}vznJ^%wy(ZT|?OB8$}JoAuQm~AB0qSSy2*3 zwFBZD$4;N+>)v*W)^H81U1()0rrJ~3iG*=Kmx>yz)rHLrwINX>TUtFyMJGsNRhUfH zh5B4B;kO_RjoVxp9b6n>hRtn&7*@lT@bAmNK$JDS?bCX~iK3k#ceACeuqD&ag@k0J zu2hi__Z?=!|2Kuj#T22Ps{4hzqp83>4dB=94HZSyxF#IA)<6z&tFAki%w8eV7J?vS zSmlN#!!$?Pxl{Lm0%e(39n(ZGBk8aB7nt@WBn6t&)@Xrc?TSEvCivfwnGYyLYbeXa%9&+s*tctd4%71z?Ta7>lm zFj1B<8iiyXz8sA~w4TPX z+8=Mgcw^_Kn`k0dJn1Rk+`M{Aq literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/bussiness/service/impl/BizEnterpriseProductServiceImpl.class b/target/classes/com/metalloop/modules/bussiness/service/impl/BizEnterpriseProductServiceImpl.class new file mode 100644 index 0000000000000000000000000000000000000000..9011c6b6ced5cd9ae26beb14225374c39e907488 GIT binary patch literal 10831 zcmd5?d3+pI9sf?QO}3LJO(+nQqZlAffq{Z@q%Cbj3n_uNq!efooa|21A-g-v%x-Av z1tOw&Ac_YdSVcuVK`~YkL`6l!8}IwR?_0r--}m0^% zZ}RAW?|TryN<5iF0~!-(($S0-4a-wb*2r1~Gm~+gyuqielQTTaov>4uVQ2FhW2Bh3 z+z~Z0!~qR0E9{(ISf!z{Z|T+~TG5t3QpW=58ivaWW}S2~V|m7C(evz_<$2|_*V?<+ z%lsDaEOMcjO`UPboKcYCC6co$yra=aj1~3qnJ;d1ts0u$)U8MaJY^m zutY=BwXzN+=Wr;v?HIIzZD#D<=4i(9RegqzUO{d_xWsECsiSoqgFdoJld)@$77JE- z*h!6RIHAHDzI#)SYZ)2NFwQJrA*Jruu?)wOoUrIn+REmgf|W~6YAD2bVXhpuS6d(? zA9QkQJ8)Smj@Mxbkrw-gq_HA`33HyPW4V}dkPv#Kdx11~*_@N{%mkjL;}o2#;dBwD zqo$L!(@xRIPL7%d+skK)o?-2xvL2(w;NzH`^NhU73*U2SlR3sTXpI+Oi56z-)98DqCY9ZDd4VTVQo;kAWBDf9eI1}qMG@JQ+hS7R>SyJvO<|GIh z>-`%#;4BRbB?1I#D?}dBu>t3hPQf|X%xf5lqRDhJ)6EoXxsVTu4s=1opkQ{Mj*Zwv z_!2-OK)}<`7iAcQFU2YlmQ)%Pl@T3Vgvg14bC&BA^Id3EFD}$^5iX`KDW{ktP!X^< zB(WWrB=Bs3ftQvnAc1w*$&G2~?qgtwz$gYKE<8tviBY1zN-ArSMIug{Qz^(M)Bz7n8T;cWSY3L07G{Tx8 z{C;$d=+Qt>^O!a-VC+^iSgC`E!z{nRv)rA}ptQ5rR@<{#=GNqLPC)`K^*@xZ8aG`6 zlo<>g=UbjrbW_%VhC@bUS_h^UdliaTQDmlfAz3*y)}4w7Su_n2d|3yF*|?ln%#K>_ z7Ez69Ue+ixv(;pU=CeQ8RM=@#?(?d$E}2F)SF_kh^jegnCFNRd9yDB~AT(^&VziRg zVummsP?);!>opt@XLJo`RMlCPv6%#8IG$@2b~@=zrfX6@%cUU~uqLN=4*JR;m6p);s|oC+m*8N zvO8nN5p`=#h8Q|hR>PJb$&Ad@>4DJEwZ&BpV`zhDpCi3#(5>xzYR);oKecZz^|5HWRW!z}cHn3uP_HF`Pvt+8_tUAf4;gSCjh3gTj3E@eJ zm{-qp3t10oT4l$`mWPKSWdP10hF!XHEDCdeLs+AeXDa>zP1{RS_&cB_l@*dISnudv5EF0=vpL!|`(h*AGTlW37e(R7PnG+hGWqN6XaTUgM6AHi^$z*y_NCq0#q9C|UhN|VZrB(E{+YzV88bVY zHhZHs<`HA>N%B;)wrrWndC?BmueWRh+5L4-W7@l%yY1+x%mX3FiEKM6Ui6-z;mL}? zqNG(nOVyC2RnL4X*v|EUWz|4c0;R*BS1pg{ z-{WD5&WOZ4h4~dH+Iwk7?ocDqexB@uG^cL;1|_&-}fH z?+soxUYq+r4DBA?G~mVj6|aFqa4mmzH32Wdb$nu5kC$BC_f$E-VF4}{)gnae{E_!RMi*Cdnc$*(4m-5=k`3w7(_1}x5j-A5N z7(s@lAV;W~L98sq+hqiDHQs?cX`wJ`#K=22B2;f{;6!ks6ghVV8TKxY-N+1@S)Aiy z#M!ui#aTX!I48u2bHV-;N5i}E9vWVN#de80KzIM)OZMWVp612}aM~0G9>U3$*|kl| z)KBkndf>5cych3dpop>e^GKxd^|ToGK!J5B&m=$YQ@R~?8YA4MazU9cl4MjDZ@#*GjGQ0BmHZWcSxy@Y zzqHaLTlZpHr3Skq8npV}(C~45!uRWN2t3ECFuu%BtthTuC8^8?JR*3@U`7a{;gfjS zXS9ZH7w&HFU#9q^V)$GeF-|mK1@*wKit?xM>6s{xJ%sT}J6vBo< zcuWiQo9D*k3*_-dd}$^JToDt9w?{ZsaqX9bps{Ho0i8W12VAk{h_;(nR3hi3)H5OuUJv;Oo*GCa1T+e>L#`OvsEBSK+QRDh3TKoK2S5&lq3*V-R z8t|QqC%e;h$nMTEvm2VK zfFde*U=>AFu!@R!0%EKvh_@o%c;9&6_l0)Da)|4`HV4K%vp}uGNwj`R-l0Z_&BIp|W%L!(kbTMOj#z@ig?40F!<+Rt^dp4T| z%eBo+8HWbX9Je$q?HRnv95;=OnHx2RMy|3_g}&w61;@oY+R(0{MNC|87E-%3bOp1E z1v_K(JDCip+fGid=s;%z2kBUfgEcIPh^}{>jAiCDB*x85(Hh#R;ozR_%N4f4j6T8j zP#s-3OhZG)_6iz0dV-0P;~>Z6tf%NWLde!u%%`cGly3dRKw3~ZO2^SyrXlHCS%;Ey zI1=1;3|fJ16G+Q#7&@ zBWA(&@|mJ%Si7mL$7nJ5IBMrSBX9D;_Z-?{jxreQ90teQo=uyUOI>Os)0eSW7!Z1|)|typzy?Z5(QfFOS|sUpk>QL*(-;uC^eN#TWYv!9 zp=s2NqbbB%E5ur-;fguRGe=e(gtC4e=ipoojb=WdVUQkGmWw-!Ihp&$hTw*FKTpGA znfPJ03XunNY{L1ZQ*bt$c@4uVh*XoQHdCzSB0ePA*8$?9V0M9yA#5RP3H%Vb?`h~! z8LFt|vkHYJl{%lwu#T-l;RY;Bo5n{ccd(53U6o?j16GsxT(>g3Lftq|2i}Y5p zJ^nqBtg9X0iY`*H&Q9Sx_?iNET>2H#Px zaFpWvnQTBWj-jYy9M{mhw1KD^Vf6{UNyklKPXf;p&VIIr_Q*ZMtPsN8$Hj=Q`rn_& zY`Hc-%cwV~MyXPppdeIG#aYuXVhGw5wW~i+?ARcvqDWUms?%?A7hSsK@=D2TrW>#ES%Z!{YIu2(d^?5tu5sKk zqu`o3&-4qFk^x(zVN(RoB9}evh?yGO;4lG}Drk1@?v$06jS{PXs3q$%#I;RjB~Y}Z zHEY9MkskIND!)rjvL&JW{fCmvBkYMcK%Gsb3LG8HEd|gyk|JT<7M1XrDj!GqCF_## zUI}}{SX-^wC72a2$`U^hmF`f(o*GkfuI;QMW0Vd}77?<*-X)nTHNLchF-O`OM(4I- z9zk*c|HNE13mEVBLlol=n>#I{z3Gm6BEdxWynaG<)f%p4Yd=d=iEqpUpssOaz)VgR zU6(PTLEFTd<=K0PP>qt8hBfmOO~d5>RlS;hO0x(rNr2lu&&}67glLvc7aIz8CuK0p zAx6@U$}ts{f}U!Y4y-8t0`po+%!4h%vdXH($dgbhLD83}TN&|7K?J6OK!Wsjm84<> zUsFjwW=`$OC8ct5BcmZZ8#_j-&a1`=_1hxmfo=CLltC6y%4WHrlPS!unJ zd6xc~66m5}it1Tw>3}Mbja%v2?X>2^MZ`;p+2iwOF*^w>l9HuEbX}nsTjniBd9*Mx zU$np^=Yf5Gk`PuxeTNoMI3KQVTUd%JLdm9ZmXTQDX8{pQREP*7`^mX9 zF2N&o-2#QG+RL|EyO|7L$f9+)z)cJN8tkVJ&6wGdwArm1l1E?Nr;060ZH`epy`Y-0 zYht_9S;eb+CAXF8s0?Jm{}ej6;zjq#8lI>Si3l;{H<4L*XsXkR3T`py8uBc-Dl%tW zS2~@jKA2!sB!}f;%LZGVf*f8wMVwunB%+W9b+LO`j|TykQ{WC=e6tW=i%7Md#h~DE zdz<%<47|1`d_RdF;D-r3q2ovRF?V@U>9BL-&X{Ek%JAR{b0;^&j>{dDQ{^8L;i=7q(%$VD+`* zr!ybJ1;>>%-_OOt<1ci41CO`kaSr@i4E#pN*X7gi#MAF}d`&+6Q9S)g$5;5&h(bI5 zs$t^-q?m+ILdifbXSw|u)AKAZfq!T?w#u1teo5e88jhTPD$mJ$Ct?|OsN;$GbNE{) zK5_B>I-dA9@p?V4z;p4uim@a3%JMc~#UVz08 zi8?@M?@`P4En~s>5*;wvAt4*-HHayfj2aK1Ro9jIv4@Z z34Rz~8KjnqtJg~^(*chN-ZGdGf@t^{J{~YyN4E=ixAv~^`J`g_+^85w4Ol@vbgNJK z6Zqs*lt&-ISfw3qo;~GH;nP8gt_fsLmSoOWlD$PCn+!87DRa3@U_TB&LoFV~X9M#6 zK?bxj1M)y%m#T!iRpHSV@@Sii$7AI2xfys=1^VrC@Gh3B)@U4l}s+ zOJUI1w2*+#u95?;UUziMt#=~Pa5oz2%W8n%r`?4ltHzC7;stX zI((V4*mORLgBsSVzG_d3R+<|6`Q>+&BEJgzvAZ$={B-uwt{GotAqLm8F`wmn6=9_RePonF;@;za~ literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/bussiness/service/impl/BizPurchaseRequestServiceImpl.class b/target/classes/com/metalloop/modules/bussiness/service/impl/BizPurchaseRequestServiceImpl.class new file mode 100644 index 0000000000000000000000000000000000000000..b6d188d159df89441d41d3c350e1b066568b7605 GIT binary patch literal 10735 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 literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/bussiness/service/impl/BizSupplyInfoServiceImpl.class b/target/classes/com/metalloop/modules/bussiness/service/impl/BizSupplyInfoServiceImpl.class new file mode 100644 index 0000000000000000000000000000000000000000..3279336c58efd9c06329e272d56ec074054edc59 GIT binary patch literal 10495 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 literal 0 HcmV?d00001 diff --git a/target/classes/com/metalloop/modules/bussiness/service/impl/BizVarietyServiceImpl.class b/target/classes/com/metalloop/modules/bussiness/service/impl/BizVarietyServiceImpl.class new file mode 100644 index 0000000000000000000000000000000000000000..8cd46586ce9ef2ffc0c90666a0d293c5a1930952 GIT binary patch literal 10351 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 literal 0 HcmV?d00001 diff --git a/target/classes/main/resources/application.yml b/target/classes/main/resources/application.yml new file mode 100644 index 0000000..d90bcb5 --- /dev/null +++ b/target/classes/main/resources/application.yml @@ -0,0 +1,52 @@ +spring: + application: + name: metaloop + datasource: + url: jdbc:mysql://localhost:3306/metalloop?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&useSSL=false&allowPublicKeyRetrieval=true + username: root + password: 123456 + driver-class-name: com.mysql.cj.jdbc.Driver + hikari: + maximum-pool-size: 20 + minimum-idle: 5 + connection-timeout: 30000 + + jackson: + date-format: yyyy-MM-dd HH:mm:ss + time-zone: Asia/Shanghai + serialization: + write-dates-as-timestamps: false + data: + redis: + host: localhost + port: 6379 + database: 0 + password: + timeout: 5000ms + +server: + port: 8080 + +# API文档 +springdoc: + api-docs: + enabled: true + path: /v3/api-docs + swagger-ui: + path: /swagger-ui.html + tags-sorter: alpha + operations-sorter: method + show-actuator: true + packages-to-scan: com.metalloop.modules + paths-to-match: /api/** + +# Sa-Token 配置 +sa-token: + token-name: metalloop-token + timeout: 86400 + active-timeout: -1 + is-concurrent: true + is-share: false + token-style: uuid + is-log: false + jwt-secret-key: metalloop-secret-key \ No newline at end of file diff --git a/target/classes/main/resources/mapper/BizEnterpriseProductMapper.xml b/target/classes/main/resources/mapper/BizEnterpriseProductMapper.xml new file mode 100644 index 0000000..4c210bf --- /dev/null +++ b/target/classes/main/resources/mapper/BizEnterpriseProductMapper.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + id, + enterprise_id, + variety_id, + material_id, + unit_price, + weight, + status, + remark, + create_time, + update_time + + diff --git a/target/classes/main/resources/mapper/BizMaterialMapper.xml b/target/classes/main/resources/mapper/BizMaterialMapper.xml new file mode 100644 index 0000000..f77c2b4 --- /dev/null +++ b/target/classes/main/resources/mapper/BizMaterialMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + id, + material_name, + material_code, + description, + create_time, + update_time + + diff --git a/target/classes/main/resources/mapper/BizPurchaseRequestMapper.xml b/target/classes/main/resources/mapper/BizPurchaseRequestMapper.xml new file mode 100644 index 0000000..fc0ba3d --- /dev/null +++ b/target/classes/main/resources/mapper/BizPurchaseRequestMapper.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, + create_user_id, + enterprise_id, + element_type, + product_category, + material, + title, + description, + quantity, + unit_price, + contact_person, + contact_phone, + delivery_date, + delivery_location, + image_url, + audit_status, + publish_time, + expire_time, + account_period_mode, + deposit_ratio, + final_payment_deadline, + status, + reject_reason, + update_user_id, + create_time, + update_time + + diff --git a/target/classes/main/resources/mapper/BizSupplyInfoMapper.xml b/target/classes/main/resources/mapper/BizSupplyInfoMapper.xml new file mode 100644 index 0000000..42b379a --- /dev/null +++ b/target/classes/main/resources/mapper/BizSupplyInfoMapper.xml @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, + create_user_id, + enterprise_id, + element_type, + product_category, + material, + title, + description, + quantity, + unit_price, + contact_person, + contact_phone, + delivery_location, + image_url, + audit_status, + publish_time, + expire_time, + account_period_mode, + deposit_ratio, + final_payment_deadline, + status, + reject_reason, + update_user_id, + create_time, + update_time + + diff --git a/target/classes/main/resources/mapper/BizVarietyMapper.xml b/target/classes/main/resources/mapper/BizVarietyMapper.xml new file mode 100644 index 0000000..5653e17 --- /dev/null +++ b/target/classes/main/resources/mapper/BizVarietyMapper.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + id, + variety_name, + variety_grade, + parent_id, + variety_material, + description, + sort, + status, + create_time, + update_time + + diff --git a/target/classes/main/resources/mapper/SysEnterpriseImageMapper.xml b/target/classes/main/resources/mapper/SysEnterpriseImageMapper.xml new file mode 100644 index 0000000..f1b91c3 --- /dev/null +++ b/target/classes/main/resources/mapper/SysEnterpriseImageMapper.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + id, + enterprise_id, + image_type, + image_url, + created_at + + diff --git a/target/classes/main/resources/mapper/SysEnterpriseMapper.xml b/target/classes/main/resources/mapper/SysEnterpriseMapper.xml new file mode 100644 index 0000000..4c1b950 --- /dev/null +++ b/target/classes/main/resources/mapper/SysEnterpriseMapper.xml @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, + enterprise_name, + enterprise_address, + warehouse_address, + contact_person, + legal_person, + phone1, + phone2, + phone3, + business_model, + profile_intro, + title_img_url, + intro_img_url, + business_license_url, + legal_id_front_url, + legal_id_back_url, + ocr_credit_code_id, + id_card_number, + credit_limit, + audit_status, + submit_time, + audit_time, + reject_reason, + created_at, + updated_at + + diff --git a/target/classes/main/resources/mapper/SysPermissionMapper.xml b/target/classes/main/resources/mapper/SysPermissionMapper.xml new file mode 100644 index 0000000..a6b6ef4 --- /dev/null +++ b/target/classes/main/resources/mapper/SysPermissionMapper.xml @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, + name, + code, + type, + sort, + parent_id, + icon, + api_path, + route_path, + component, + component_name, + description, + enabled, + create_user, + update_user, + create_time, + update_time, + data_status + + diff --git a/target/classes/main/resources/mapper/SysRoleMapper.xml b/target/classes/main/resources/mapper/SysRoleMapper.xml new file mode 100644 index 0000000..74f5de4 --- /dev/null +++ b/target/classes/main/resources/mapper/SysRoleMapper.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + id, + name, + code, + enabled, + description, + create_user, + create_org, + create_time, + update_time, + update_user, + data_status + + diff --git a/target/classes/main/resources/mapper/SysRolePermissionMapper.xml b/target/classes/main/resources/mapper/SysRolePermissionMapper.xml new file mode 100644 index 0000000..920fde9 --- /dev/null +++ b/target/classes/main/resources/mapper/SysRolePermissionMapper.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + id, + role_id, + permission_id + + diff --git a/target/classes/main/resources/mapper/SysUserMapper.xml b/target/classes/main/resources/mapper/SysUserMapper.xml new file mode 100644 index 0000000..be3871a --- /dev/null +++ b/target/classes/main/resources/mapper/SysUserMapper.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + id, + username, + password, + auth_status, + enterprise_id, + phone, + email, + user_status, + reg_time + + diff --git a/target/classes/main/resources/mapper/SysUserRoleMapper.xml b/target/classes/main/resources/mapper/SysUserRoleMapper.xml new file mode 100644 index 0000000..d95b7fa --- /dev/null +++ b/target/classes/main/resources/mapper/SysUserRoleMapper.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + user_id, + role_id, + created_at, + id + + diff --git a/target/classes/mapper/BizEnterpriseProductMapper.xml b/target/classes/mapper/BizEnterpriseProductMapper.xml new file mode 100644 index 0000000..4c210bf --- /dev/null +++ b/target/classes/mapper/BizEnterpriseProductMapper.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + id, + enterprise_id, + variety_id, + material_id, + unit_price, + weight, + status, + remark, + create_time, + update_time + + diff --git a/target/classes/mapper/BizMaterialMapper.xml b/target/classes/mapper/BizMaterialMapper.xml new file mode 100644 index 0000000..f77c2b4 --- /dev/null +++ b/target/classes/mapper/BizMaterialMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + id, + material_name, + material_code, + description, + create_time, + update_time + + diff --git a/target/classes/mapper/BizPurchaseRequestMapper.xml b/target/classes/mapper/BizPurchaseRequestMapper.xml new file mode 100644 index 0000000..fc0ba3d --- /dev/null +++ b/target/classes/mapper/BizPurchaseRequestMapper.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, + create_user_id, + enterprise_id, + element_type, + product_category, + material, + title, + description, + quantity, + unit_price, + contact_person, + contact_phone, + delivery_date, + delivery_location, + image_url, + audit_status, + publish_time, + expire_time, + account_period_mode, + deposit_ratio, + final_payment_deadline, + status, + reject_reason, + update_user_id, + create_time, + update_time + + diff --git a/target/classes/mapper/BizSupplyInfoMapper.xml b/target/classes/mapper/BizSupplyInfoMapper.xml new file mode 100644 index 0000000..42b379a --- /dev/null +++ b/target/classes/mapper/BizSupplyInfoMapper.xml @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, + create_user_id, + enterprise_id, + element_type, + product_category, + material, + title, + description, + quantity, + unit_price, + contact_person, + contact_phone, + delivery_location, + image_url, + audit_status, + publish_time, + expire_time, + account_period_mode, + deposit_ratio, + final_payment_deadline, + status, + reject_reason, + update_user_id, + create_time, + update_time + + diff --git a/target/classes/mapper/BizVarietyMapper.xml b/target/classes/mapper/BizVarietyMapper.xml new file mode 100644 index 0000000..5653e17 --- /dev/null +++ b/target/classes/mapper/BizVarietyMapper.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + id, + variety_name, + variety_grade, + parent_id, + variety_material, + description, + sort, + status, + create_time, + update_time + + diff --git a/target/classes/mapper/SysEnterpriseImageMapper.xml b/target/classes/mapper/SysEnterpriseImageMapper.xml new file mode 100644 index 0000000..f1b91c3 --- /dev/null +++ b/target/classes/mapper/SysEnterpriseImageMapper.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + id, + enterprise_id, + image_type, + image_url, + created_at + + diff --git a/target/classes/mapper/SysEnterpriseMapper.xml b/target/classes/mapper/SysEnterpriseMapper.xml new file mode 100644 index 0000000..4c1b950 --- /dev/null +++ b/target/classes/mapper/SysEnterpriseMapper.xml @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, + enterprise_name, + enterprise_address, + warehouse_address, + contact_person, + legal_person, + phone1, + phone2, + phone3, + business_model, + profile_intro, + title_img_url, + intro_img_url, + business_license_url, + legal_id_front_url, + legal_id_back_url, + ocr_credit_code_id, + id_card_number, + credit_limit, + audit_status, + submit_time, + audit_time, + reject_reason, + created_at, + updated_at + + diff --git a/target/classes/mapper/SysPermissionMapper.xml b/target/classes/mapper/SysPermissionMapper.xml new file mode 100644 index 0000000..a6b6ef4 --- /dev/null +++ b/target/classes/mapper/SysPermissionMapper.xml @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, + name, + code, + type, + sort, + parent_id, + icon, + api_path, + route_path, + component, + component_name, + description, + enabled, + create_user, + update_user, + create_time, + update_time, + data_status + + diff --git a/target/classes/mapper/SysRoleMapper.xml b/target/classes/mapper/SysRoleMapper.xml new file mode 100644 index 0000000..74f5de4 --- /dev/null +++ b/target/classes/mapper/SysRoleMapper.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + id, + name, + code, + enabled, + description, + create_user, + create_org, + create_time, + update_time, + update_user, + data_status + + diff --git a/target/classes/mapper/SysRolePermissionMapper.xml b/target/classes/mapper/SysRolePermissionMapper.xml new file mode 100644 index 0000000..920fde9 --- /dev/null +++ b/target/classes/mapper/SysRolePermissionMapper.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + id, + role_id, + permission_id + + diff --git a/target/classes/mapper/SysUserMapper.xml b/target/classes/mapper/SysUserMapper.xml new file mode 100644 index 0000000..be3871a --- /dev/null +++ b/target/classes/mapper/SysUserMapper.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + id, + username, + password, + auth_status, + enterprise_id, + phone, + email, + user_status, + reg_time + + diff --git a/target/classes/mapper/SysUserRoleMapper.xml b/target/classes/mapper/SysUserRoleMapper.xml new file mode 100644 index 0000000..d95b7fa --- /dev/null +++ b/target/classes/mapper/SysUserRoleMapper.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + user_id, + role_id, + created_at, + id + + diff --git a/target/generated-sources/annotations/com/metalloop/modules/auth/converter/SysEnterpriseConverterImpl.java b/target/generated-sources/annotations/com/metalloop/modules/auth/converter/SysEnterpriseConverterImpl.java new file mode 100644 index 0000000..4fd98c6 --- /dev/null +++ b/target/generated-sources/annotations/com/metalloop/modules/auth/converter/SysEnterpriseConverterImpl.java @@ -0,0 +1,157 @@ +package com.metalloop.modules.auth.converter; + +import com.metalloop.modules.auth.model.po.SysEnterprise; +import com.metalloop.modules.auth.model.query.SysEnterpriseQuery; +import com.metalloop.modules.auth.model.req.SysEnterpriseQueryReqDto; +import com.metalloop.modules.auth.model.req.SysEnterpriseReqDto; +import com.metalloop.modules.auth.model.resp.SysEnterpriseRespDto; +import java.util.ArrayList; +import java.util.List; +import javax.annotation.processing.Generated; + +@Generated( + value = "org.mapstruct.ap.MappingProcessor", + date = "2026-09-11T14:27:41+0800", + comments = "version: 1.6.3, compiler: javac, environment: Java 17.0.20.1 (Microsoft)" +) +public class SysEnterpriseConverterImpl implements SysEnterpriseConverter { + + @Override + public SysEnterpriseRespDto toRespDto(SysEnterprise sysEnterprise) { + if ( sysEnterprise == null ) { + return null; + } + + SysEnterpriseRespDto sysEnterpriseRespDto = new SysEnterpriseRespDto(); + + sysEnterpriseRespDto.setId( sysEnterprise.getId() ); + sysEnterpriseRespDto.setEnterpriseName( sysEnterprise.getEnterpriseName() ); + sysEnterpriseRespDto.setEnterpriseAddress( sysEnterprise.getEnterpriseAddress() ); + sysEnterpriseRespDto.setWarehouseAddress( sysEnterprise.getWarehouseAddress() ); + sysEnterpriseRespDto.setContactPerson( sysEnterprise.getContactPerson() ); + sysEnterpriseRespDto.setLegalPerson( sysEnterprise.getLegalPerson() ); + sysEnterpriseRespDto.setPhone1( sysEnterprise.getPhone1() ); + sysEnterpriseRespDto.setPhone2( sysEnterprise.getPhone2() ); + sysEnterpriseRespDto.setPhone3( sysEnterprise.getPhone3() ); + sysEnterpriseRespDto.setBusinessModel( sysEnterprise.getBusinessModel() ); + sysEnterpriseRespDto.setProfileIntro( sysEnterprise.getProfileIntro() ); + sysEnterpriseRespDto.setTitleImgUrl( sysEnterprise.getTitleImgUrl() ); + sysEnterpriseRespDto.setIntroImgUrl( sysEnterprise.getIntroImgUrl() ); + sysEnterpriseRespDto.setBusinessLicenseUrl( sysEnterprise.getBusinessLicenseUrl() ); + sysEnterpriseRespDto.setLegalIdFrontUrl( sysEnterprise.getLegalIdFrontUrl() ); + sysEnterpriseRespDto.setLegalIdBackUrl( sysEnterprise.getLegalIdBackUrl() ); + sysEnterpriseRespDto.setOcrCreditCodeId( sysEnterprise.getOcrCreditCodeId() ); + sysEnterpriseRespDto.setIdCardNumber( sysEnterprise.getIdCardNumber() ); + sysEnterpriseRespDto.setCreditLimit( sysEnterprise.getCreditLimit() ); + sysEnterpriseRespDto.setAuditStatus( sysEnterprise.getAuditStatus() ); + sysEnterpriseRespDto.setSubmitTime( sysEnterprise.getSubmitTime() ); + sysEnterpriseRespDto.setAuditTime( sysEnterprise.getAuditTime() ); + sysEnterpriseRespDto.setRejectReason( sysEnterprise.getRejectReason() ); + sysEnterpriseRespDto.setCreatedAt( sysEnterprise.getCreatedAt() ); + sysEnterpriseRespDto.setUpdatedAt( sysEnterprise.getUpdatedAt() ); + + return sysEnterpriseRespDto; + } + + @Override + public List toRespDto(List sysEnterprises) { + if ( sysEnterprises == null ) { + return null; + } + + List list = new ArrayList( sysEnterprises.size() ); + for ( SysEnterprise sysEnterprise : sysEnterprises ) { + list.add( toRespDto( sysEnterprise ) ); + } + + return list; + } + + @Override + public SysEnterprise fromReqDto(SysEnterpriseReqDto sysEnterpriseReqDto) { + if ( sysEnterpriseReqDto == null ) { + return null; + } + + SysEnterprise sysEnterprise = new SysEnterprise(); + + sysEnterprise.setId( sysEnterpriseReqDto.getId() ); + sysEnterprise.setEnterpriseName( sysEnterpriseReqDto.getEnterpriseName() ); + sysEnterprise.setEnterpriseAddress( sysEnterpriseReqDto.getEnterpriseAddress() ); + sysEnterprise.setWarehouseAddress( sysEnterpriseReqDto.getWarehouseAddress() ); + sysEnterprise.setContactPerson( sysEnterpriseReqDto.getContactPerson() ); + sysEnterprise.setLegalPerson( sysEnterpriseReqDto.getLegalPerson() ); + sysEnterprise.setPhone1( sysEnterpriseReqDto.getPhone1() ); + sysEnterprise.setPhone2( sysEnterpriseReqDto.getPhone2() ); + sysEnterprise.setPhone3( sysEnterpriseReqDto.getPhone3() ); + sysEnterprise.setBusinessModel( sysEnterpriseReqDto.getBusinessModel() ); + sysEnterprise.setProfileIntro( sysEnterpriseReqDto.getProfileIntro() ); + sysEnterprise.setTitleImgUrl( sysEnterpriseReqDto.getTitleImgUrl() ); + sysEnterprise.setIntroImgUrl( sysEnterpriseReqDto.getIntroImgUrl() ); + sysEnterprise.setBusinessLicenseUrl( sysEnterpriseReqDto.getBusinessLicenseUrl() ); + sysEnterprise.setLegalIdFrontUrl( sysEnterpriseReqDto.getLegalIdFrontUrl() ); + sysEnterprise.setLegalIdBackUrl( sysEnterpriseReqDto.getLegalIdBackUrl() ); + sysEnterprise.setOcrCreditCodeId( sysEnterpriseReqDto.getOcrCreditCodeId() ); + sysEnterprise.setIdCardNumber( sysEnterpriseReqDto.getIdCardNumber() ); + sysEnterprise.setCreditLimit( sysEnterpriseReqDto.getCreditLimit() ); + sysEnterprise.setAuditStatus( sysEnterpriseReqDto.getAuditStatus() ); + sysEnterprise.setSubmitTime( sysEnterpriseReqDto.getSubmitTime() ); + sysEnterprise.setAuditTime( sysEnterpriseReqDto.getAuditTime() ); + sysEnterprise.setRejectReason( sysEnterpriseReqDto.getRejectReason() ); + sysEnterprise.setCreatedAt( sysEnterpriseReqDto.getCreatedAt() ); + sysEnterprise.setUpdatedAt( sysEnterpriseReqDto.getUpdatedAt() ); + + return sysEnterprise; + } + + @Override + public List fromReqDto(List sysEnterpriseReqDtos) { + if ( sysEnterpriseReqDtos == null ) { + return null; + } + + List list = new ArrayList( sysEnterpriseReqDtos.size() ); + for ( SysEnterpriseReqDto sysEnterpriseReqDto : sysEnterpriseReqDtos ) { + list.add( fromReqDto( sysEnterpriseReqDto ) ); + } + + return list; + } + + @Override + public SysEnterpriseQuery fromQueryReqDtoToQuery(SysEnterpriseQueryReqDto sysEnterpriseQueryReqDto) { + if ( sysEnterpriseQueryReqDto == null ) { + return null; + } + + SysEnterpriseQuery sysEnterpriseQuery = new SysEnterpriseQuery(); + + sysEnterpriseQuery.setId( sysEnterpriseQueryReqDto.getId() ); + sysEnterpriseQuery.setEnterpriseName( sysEnterpriseQueryReqDto.getEnterpriseName() ); + sysEnterpriseQuery.setEnterpriseAddress( sysEnterpriseQueryReqDto.getEnterpriseAddress() ); + sysEnterpriseQuery.setWarehouseAddress( sysEnterpriseQueryReqDto.getWarehouseAddress() ); + sysEnterpriseQuery.setContactPerson( sysEnterpriseQueryReqDto.getContactPerson() ); + sysEnterpriseQuery.setLegalPerson( sysEnterpriseQueryReqDto.getLegalPerson() ); + sysEnterpriseQuery.setPhone1( sysEnterpriseQueryReqDto.getPhone1() ); + sysEnterpriseQuery.setPhone2( sysEnterpriseQueryReqDto.getPhone2() ); + sysEnterpriseQuery.setPhone3( sysEnterpriseQueryReqDto.getPhone3() ); + sysEnterpriseQuery.setBusinessModel( sysEnterpriseQueryReqDto.getBusinessModel() ); + sysEnterpriseQuery.setProfileIntro( sysEnterpriseQueryReqDto.getProfileIntro() ); + sysEnterpriseQuery.setTitleImgUrl( sysEnterpriseQueryReqDto.getTitleImgUrl() ); + sysEnterpriseQuery.setIntroImgUrl( sysEnterpriseQueryReqDto.getIntroImgUrl() ); + sysEnterpriseQuery.setBusinessLicenseUrl( sysEnterpriseQueryReqDto.getBusinessLicenseUrl() ); + sysEnterpriseQuery.setLegalIdFrontUrl( sysEnterpriseQueryReqDto.getLegalIdFrontUrl() ); + sysEnterpriseQuery.setLegalIdBackUrl( sysEnterpriseQueryReqDto.getLegalIdBackUrl() ); + sysEnterpriseQuery.setOcrCreditCodeId( sysEnterpriseQueryReqDto.getOcrCreditCodeId() ); + sysEnterpriseQuery.setIdCardNumber( sysEnterpriseQueryReqDto.getIdCardNumber() ); + sysEnterpriseQuery.setCreditLimit( sysEnterpriseQueryReqDto.getCreditLimit() ); + sysEnterpriseQuery.setAuditStatus( sysEnterpriseQueryReqDto.getAuditStatus() ); + sysEnterpriseQuery.setSubmitTime( sysEnterpriseQueryReqDto.getSubmitTime() ); + sysEnterpriseQuery.setAuditTime( sysEnterpriseQueryReqDto.getAuditTime() ); + sysEnterpriseQuery.setRejectReason( sysEnterpriseQueryReqDto.getRejectReason() ); + sysEnterpriseQuery.setCreatedAt( sysEnterpriseQueryReqDto.getCreatedAt() ); + sysEnterpriseQuery.setUpdatedAt( sysEnterpriseQueryReqDto.getUpdatedAt() ); + + return sysEnterpriseQuery; + } +} diff --git a/target/generated-sources/annotations/com/metalloop/modules/auth/converter/SysEnterpriseImageConverterImpl.java b/target/generated-sources/annotations/com/metalloop/modules/auth/converter/SysEnterpriseImageConverterImpl.java new file mode 100644 index 0000000..03681be --- /dev/null +++ b/target/generated-sources/annotations/com/metalloop/modules/auth/converter/SysEnterpriseImageConverterImpl.java @@ -0,0 +1,97 @@ +package com.metalloop.modules.auth.converter; + +import com.metalloop.modules.auth.model.po.SysEnterpriseImage; +import com.metalloop.modules.auth.model.query.SysEnterpriseImageQuery; +import com.metalloop.modules.auth.model.req.SysEnterpriseImageQueryReqDto; +import com.metalloop.modules.auth.model.req.SysEnterpriseImageReqDto; +import com.metalloop.modules.auth.model.resp.SysEnterpriseImageRespDto; +import java.util.ArrayList; +import java.util.List; +import javax.annotation.processing.Generated; + +@Generated( + value = "org.mapstruct.ap.MappingProcessor", + date = "2026-09-11T14:27:41+0800", + comments = "version: 1.6.3, compiler: javac, environment: Java 17.0.20.1 (Microsoft)" +) +public class SysEnterpriseImageConverterImpl implements SysEnterpriseImageConverter { + + @Override + public SysEnterpriseImageRespDto toRespDto(SysEnterpriseImage sysEnterpriseImage) { + if ( sysEnterpriseImage == null ) { + return null; + } + + SysEnterpriseImageRespDto sysEnterpriseImageRespDto = new SysEnterpriseImageRespDto(); + + sysEnterpriseImageRespDto.setId( sysEnterpriseImage.getId() ); + sysEnterpriseImageRespDto.setEnterpriseId( sysEnterpriseImage.getEnterpriseId() ); + sysEnterpriseImageRespDto.setImageType( sysEnterpriseImage.getImageType() ); + sysEnterpriseImageRespDto.setImageUrl( sysEnterpriseImage.getImageUrl() ); + sysEnterpriseImageRespDto.setCreatedAt( sysEnterpriseImage.getCreatedAt() ); + + return sysEnterpriseImageRespDto; + } + + @Override + public List toRespDto(List sysEnterpriseImages) { + if ( sysEnterpriseImages == null ) { + return null; + } + + List list = new ArrayList( sysEnterpriseImages.size() ); + for ( SysEnterpriseImage sysEnterpriseImage : sysEnterpriseImages ) { + list.add( toRespDto( sysEnterpriseImage ) ); + } + + return list; + } + + @Override + public SysEnterpriseImage fromReqDto(SysEnterpriseImageReqDto sysEnterpriseImageReqDto) { + if ( sysEnterpriseImageReqDto == null ) { + return null; + } + + SysEnterpriseImage sysEnterpriseImage = new SysEnterpriseImage(); + + sysEnterpriseImage.setId( sysEnterpriseImageReqDto.getId() ); + sysEnterpriseImage.setEnterpriseId( sysEnterpriseImageReqDto.getEnterpriseId() ); + sysEnterpriseImage.setImageType( sysEnterpriseImageReqDto.getImageType() ); + sysEnterpriseImage.setImageUrl( sysEnterpriseImageReqDto.getImageUrl() ); + sysEnterpriseImage.setCreatedAt( sysEnterpriseImageReqDto.getCreatedAt() ); + + return sysEnterpriseImage; + } + + @Override + public List fromReqDto(List sysEnterpriseImageReqDtos) { + if ( sysEnterpriseImageReqDtos == null ) { + return null; + } + + List list = new ArrayList( sysEnterpriseImageReqDtos.size() ); + for ( SysEnterpriseImageReqDto sysEnterpriseImageReqDto : sysEnterpriseImageReqDtos ) { + list.add( fromReqDto( sysEnterpriseImageReqDto ) ); + } + + return list; + } + + @Override + public SysEnterpriseImageQuery fromQueryReqDtoToQuery(SysEnterpriseImageQueryReqDto sysEnterpriseImageQueryReqDto) { + if ( sysEnterpriseImageQueryReqDto == null ) { + return null; + } + + SysEnterpriseImageQuery sysEnterpriseImageQuery = new SysEnterpriseImageQuery(); + + sysEnterpriseImageQuery.setId( sysEnterpriseImageQueryReqDto.getId() ); + sysEnterpriseImageQuery.setEnterpriseId( sysEnterpriseImageQueryReqDto.getEnterpriseId() ); + sysEnterpriseImageQuery.setImageType( sysEnterpriseImageQueryReqDto.getImageType() ); + sysEnterpriseImageQuery.setImageUrl( sysEnterpriseImageQueryReqDto.getImageUrl() ); + sysEnterpriseImageQuery.setCreatedAt( sysEnterpriseImageQueryReqDto.getCreatedAt() ); + + return sysEnterpriseImageQuery; + } +} diff --git a/target/generated-sources/annotations/com/metalloop/modules/auth/converter/SysPermissionConverterImpl.java b/target/generated-sources/annotations/com/metalloop/modules/auth/converter/SysPermissionConverterImpl.java new file mode 100644 index 0000000..1e3c1f3 --- /dev/null +++ b/target/generated-sources/annotations/com/metalloop/modules/auth/converter/SysPermissionConverterImpl.java @@ -0,0 +1,136 @@ +package com.metalloop.modules.auth.converter; + +import com.metalloop.modules.auth.model.po.SysPermission; +import com.metalloop.modules.auth.model.query.SysPermissionQuery; +import com.metalloop.modules.auth.model.req.SysPermissionQueryReqDto; +import com.metalloop.modules.auth.model.req.SysPermissionReqDto; +import com.metalloop.modules.auth.model.resp.SysPermissionRespDto; +import java.util.ArrayList; +import java.util.List; +import javax.annotation.processing.Generated; + +@Generated( + value = "org.mapstruct.ap.MappingProcessor", + date = "2026-09-11T14:27:41+0800", + comments = "version: 1.6.3, compiler: javac, environment: Java 17.0.20.1 (Microsoft)" +) +public class SysPermissionConverterImpl implements SysPermissionConverter { + + @Override + public SysPermissionRespDto toRespDto(SysPermission sysPermission) { + if ( sysPermission == null ) { + return null; + } + + SysPermissionRespDto sysPermissionRespDto = new SysPermissionRespDto(); + + sysPermissionRespDto.setId( sysPermission.getId() ); + sysPermissionRespDto.setName( sysPermission.getName() ); + sysPermissionRespDto.setCode( sysPermission.getCode() ); + sysPermissionRespDto.setType( sysPermission.getType() ); + sysPermissionRespDto.setSort( sysPermission.getSort() ); + sysPermissionRespDto.setParentId( sysPermission.getParentId() ); + sysPermissionRespDto.setIcon( sysPermission.getIcon() ); + sysPermissionRespDto.setApiPath( sysPermission.getApiPath() ); + sysPermissionRespDto.setRoutePath( sysPermission.getRoutePath() ); + sysPermissionRespDto.setComponent( sysPermission.getComponent() ); + sysPermissionRespDto.setComponentName( sysPermission.getComponentName() ); + sysPermissionRespDto.setDescription( sysPermission.getDescription() ); + sysPermissionRespDto.setEnabled( sysPermission.getEnabled() ); + sysPermissionRespDto.setCreateUser( sysPermission.getCreateUser() ); + sysPermissionRespDto.setUpdateUser( sysPermission.getUpdateUser() ); + sysPermissionRespDto.setCreateTime( sysPermission.getCreateTime() ); + sysPermissionRespDto.setUpdateTime( sysPermission.getUpdateTime() ); + sysPermissionRespDto.setDataStatus( sysPermission.getDataStatus() ); + + return sysPermissionRespDto; + } + + @Override + public List toRespDto(List sysPermissions) { + if ( sysPermissions == null ) { + return null; + } + + List list = new ArrayList( sysPermissions.size() ); + for ( SysPermission sysPermission : sysPermissions ) { + list.add( toRespDto( sysPermission ) ); + } + + return list; + } + + @Override + public SysPermission fromReqDto(SysPermissionReqDto sysPermissionReqDto) { + if ( sysPermissionReqDto == null ) { + return null; + } + + SysPermission sysPermission = new SysPermission(); + + sysPermission.setId( sysPermissionReqDto.getId() ); + sysPermission.setName( sysPermissionReqDto.getName() ); + sysPermission.setCode( sysPermissionReqDto.getCode() ); + sysPermission.setType( sysPermissionReqDto.getType() ); + sysPermission.setSort( sysPermissionReqDto.getSort() ); + sysPermission.setParentId( sysPermissionReqDto.getParentId() ); + sysPermission.setIcon( sysPermissionReqDto.getIcon() ); + sysPermission.setApiPath( sysPermissionReqDto.getApiPath() ); + sysPermission.setRoutePath( sysPermissionReqDto.getRoutePath() ); + sysPermission.setComponent( sysPermissionReqDto.getComponent() ); + sysPermission.setComponentName( sysPermissionReqDto.getComponentName() ); + sysPermission.setDescription( sysPermissionReqDto.getDescription() ); + sysPermission.setEnabled( sysPermissionReqDto.getEnabled() ); + sysPermission.setCreateUser( sysPermissionReqDto.getCreateUser() ); + sysPermission.setUpdateUser( sysPermissionReqDto.getUpdateUser() ); + sysPermission.setCreateTime( sysPermissionReqDto.getCreateTime() ); + sysPermission.setUpdateTime( sysPermissionReqDto.getUpdateTime() ); + sysPermission.setDataStatus( sysPermissionReqDto.getDataStatus() ); + + return sysPermission; + } + + @Override + public List fromReqDto(List sysPermissionReqDtos) { + if ( sysPermissionReqDtos == null ) { + return null; + } + + List list = new ArrayList( sysPermissionReqDtos.size() ); + for ( SysPermissionReqDto sysPermissionReqDto : sysPermissionReqDtos ) { + list.add( fromReqDto( sysPermissionReqDto ) ); + } + + return list; + } + + @Override + public SysPermissionQuery fromQueryReqDtoToQuery(SysPermissionQueryReqDto sysPermissionQueryReqDto) { + if ( sysPermissionQueryReqDto == null ) { + return null; + } + + SysPermissionQuery sysPermissionQuery = new SysPermissionQuery(); + + sysPermissionQuery.setId( sysPermissionQueryReqDto.getId() ); + sysPermissionQuery.setName( sysPermissionQueryReqDto.getName() ); + sysPermissionQuery.setCode( sysPermissionQueryReqDto.getCode() ); + sysPermissionQuery.setType( sysPermissionQueryReqDto.getType() ); + sysPermissionQuery.setSort( sysPermissionQueryReqDto.getSort() ); + sysPermissionQuery.setParentId( sysPermissionQueryReqDto.getParentId() ); + sysPermissionQuery.setIcon( sysPermissionQueryReqDto.getIcon() ); + sysPermissionQuery.setApiPath( sysPermissionQueryReqDto.getApiPath() ); + sysPermissionQuery.setRoutePath( sysPermissionQueryReqDto.getRoutePath() ); + sysPermissionQuery.setComponent( sysPermissionQueryReqDto.getComponent() ); + sysPermissionQuery.setComponentName( sysPermissionQueryReqDto.getComponentName() ); + sysPermissionQuery.setDescription( sysPermissionQueryReqDto.getDescription() ); + sysPermissionQuery.setEnabled( sysPermissionQueryReqDto.getEnabled() ); + sysPermissionQuery.setCreateUser( sysPermissionQueryReqDto.getCreateUser() ); + sysPermissionQuery.setUpdateUser( sysPermissionQueryReqDto.getUpdateUser() ); + sysPermissionQuery.setCreateTime( sysPermissionQueryReqDto.getCreateTime() ); + sysPermissionQuery.setUpdateTime( sysPermissionQueryReqDto.getUpdateTime() ); + sysPermissionQuery.setDataStatus( sysPermissionQueryReqDto.getDataStatus() ); + + return sysPermissionQuery; + } +} diff --git a/target/generated-sources/annotations/com/metalloop/modules/auth/converter/SysRoleConverterImpl.java b/target/generated-sources/annotations/com/metalloop/modules/auth/converter/SysRoleConverterImpl.java new file mode 100644 index 0000000..9270a31 --- /dev/null +++ b/target/generated-sources/annotations/com/metalloop/modules/auth/converter/SysRoleConverterImpl.java @@ -0,0 +1,115 @@ +package com.metalloop.modules.auth.converter; + +import com.metalloop.modules.auth.model.po.SysRole; +import com.metalloop.modules.auth.model.query.SysRoleQuery; +import com.metalloop.modules.auth.model.req.SysRoleQueryReqDto; +import com.metalloop.modules.auth.model.req.SysRoleReqDto; +import com.metalloop.modules.auth.model.resp.SysRoleRespDto; +import java.util.ArrayList; +import java.util.List; +import javax.annotation.processing.Generated; + +@Generated( + value = "org.mapstruct.ap.MappingProcessor", + date = "2026-09-11T14:27:41+0800", + comments = "version: 1.6.3, compiler: javac, environment: Java 17.0.20.1 (Microsoft)" +) +public class SysRoleConverterImpl implements SysRoleConverter { + + @Override + public SysRoleRespDto toRespDto(SysRole sysRole) { + if ( sysRole == null ) { + return null; + } + + SysRoleRespDto sysRoleRespDto = new SysRoleRespDto(); + + sysRoleRespDto.setId( sysRole.getId() ); + sysRoleRespDto.setName( sysRole.getName() ); + sysRoleRespDto.setCode( sysRole.getCode() ); + sysRoleRespDto.setEnabled( sysRole.getEnabled() ); + sysRoleRespDto.setDescription( sysRole.getDescription() ); + sysRoleRespDto.setCreateUser( sysRole.getCreateUser() ); + sysRoleRespDto.setCreateOrg( sysRole.getCreateOrg() ); + sysRoleRespDto.setCreateTime( sysRole.getCreateTime() ); + sysRoleRespDto.setUpdateTime( sysRole.getUpdateTime() ); + sysRoleRespDto.setUpdateUser( sysRole.getUpdateUser() ); + sysRoleRespDto.setDataStatus( sysRole.getDataStatus() ); + + return sysRoleRespDto; + } + + @Override + public List toRespDto(List sysRoles) { + if ( sysRoles == null ) { + return null; + } + + List list = new ArrayList( sysRoles.size() ); + for ( SysRole sysRole : sysRoles ) { + list.add( toRespDto( sysRole ) ); + } + + return list; + } + + @Override + public SysRole fromReqDto(SysRoleReqDto sysRoleReqDto) { + if ( sysRoleReqDto == null ) { + return null; + } + + SysRole sysRole = new SysRole(); + + sysRole.setId( sysRoleReqDto.getId() ); + sysRole.setName( sysRoleReqDto.getName() ); + sysRole.setCode( sysRoleReqDto.getCode() ); + sysRole.setEnabled( sysRoleReqDto.getEnabled() ); + sysRole.setDescription( sysRoleReqDto.getDescription() ); + sysRole.setCreateUser( sysRoleReqDto.getCreateUser() ); + sysRole.setCreateOrg( sysRoleReqDto.getCreateOrg() ); + sysRole.setCreateTime( sysRoleReqDto.getCreateTime() ); + sysRole.setUpdateTime( sysRoleReqDto.getUpdateTime() ); + sysRole.setUpdateUser( sysRoleReqDto.getUpdateUser() ); + sysRole.setDataStatus( sysRoleReqDto.getDataStatus() ); + + return sysRole; + } + + @Override + public List fromReqDto(List sysRoleReqDtos) { + if ( sysRoleReqDtos == null ) { + return null; + } + + List list = new ArrayList( sysRoleReqDtos.size() ); + for ( SysRoleReqDto sysRoleReqDto : sysRoleReqDtos ) { + list.add( fromReqDto( sysRoleReqDto ) ); + } + + return list; + } + + @Override + public SysRoleQuery fromQueryReqDtoToQuery(SysRoleQueryReqDto sysRoleQueryReqDto) { + if ( sysRoleQueryReqDto == null ) { + return null; + } + + SysRoleQuery sysRoleQuery = new SysRoleQuery(); + + sysRoleQuery.setId( sysRoleQueryReqDto.getId() ); + sysRoleQuery.setName( sysRoleQueryReqDto.getName() ); + sysRoleQuery.setCode( sysRoleQueryReqDto.getCode() ); + sysRoleQuery.setEnabled( sysRoleQueryReqDto.getEnabled() ); + sysRoleQuery.setDescription( sysRoleQueryReqDto.getDescription() ); + sysRoleQuery.setCreateUser( sysRoleQueryReqDto.getCreateUser() ); + sysRoleQuery.setCreateOrg( sysRoleQueryReqDto.getCreateOrg() ); + sysRoleQuery.setCreateTime( sysRoleQueryReqDto.getCreateTime() ); + sysRoleQuery.setUpdateTime( sysRoleQueryReqDto.getUpdateTime() ); + sysRoleQuery.setUpdateUser( sysRoleQueryReqDto.getUpdateUser() ); + sysRoleQuery.setDataStatus( sysRoleQueryReqDto.getDataStatus() ); + + return sysRoleQuery; + } +} diff --git a/target/generated-sources/annotations/com/metalloop/modules/auth/converter/SysRolePermissionConverterImpl.java b/target/generated-sources/annotations/com/metalloop/modules/auth/converter/SysRolePermissionConverterImpl.java new file mode 100644 index 0000000..aeb285b --- /dev/null +++ b/target/generated-sources/annotations/com/metalloop/modules/auth/converter/SysRolePermissionConverterImpl.java @@ -0,0 +1,91 @@ +package com.metalloop.modules.auth.converter; + +import com.metalloop.modules.auth.model.po.SysRolePermission; +import com.metalloop.modules.auth.model.query.SysRolePermissionQuery; +import com.metalloop.modules.auth.model.req.SysRolePermissionQueryReqDto; +import com.metalloop.modules.auth.model.req.SysRolePermissionReqDto; +import com.metalloop.modules.auth.model.resp.SysRolePermissionRespDto; +import java.util.ArrayList; +import java.util.List; +import javax.annotation.processing.Generated; + +@Generated( + value = "org.mapstruct.ap.MappingProcessor", + date = "2026-09-11T14:27:41+0800", + comments = "version: 1.6.3, compiler: javac, environment: Java 17.0.20.1 (Microsoft)" +) +public class SysRolePermissionConverterImpl implements SysRolePermissionConverter { + + @Override + public SysRolePermissionRespDto toRespDto(SysRolePermission sysRolePermission) { + if ( sysRolePermission == null ) { + return null; + } + + SysRolePermissionRespDto sysRolePermissionRespDto = new SysRolePermissionRespDto(); + + sysRolePermissionRespDto.setId( sysRolePermission.getId() ); + sysRolePermissionRespDto.setRoleId( sysRolePermission.getRoleId() ); + sysRolePermissionRespDto.setPermissionId( sysRolePermission.getPermissionId() ); + + return sysRolePermissionRespDto; + } + + @Override + public List toRespDto(List sysRolePermissions) { + if ( sysRolePermissions == null ) { + return null; + } + + List list = new ArrayList( sysRolePermissions.size() ); + for ( SysRolePermission sysRolePermission : sysRolePermissions ) { + list.add( toRespDto( sysRolePermission ) ); + } + + return list; + } + + @Override + public SysRolePermission fromReqDto(SysRolePermissionReqDto sysRolePermissionReqDto) { + if ( sysRolePermissionReqDto == null ) { + return null; + } + + SysRolePermission sysRolePermission = new SysRolePermission(); + + sysRolePermission.setId( sysRolePermissionReqDto.getId() ); + sysRolePermission.setRoleId( sysRolePermissionReqDto.getRoleId() ); + sysRolePermission.setPermissionId( sysRolePermissionReqDto.getPermissionId() ); + + return sysRolePermission; + } + + @Override + public List fromReqDto(List sysRolePermissionReqDtos) { + if ( sysRolePermissionReqDtos == null ) { + return null; + } + + List list = new ArrayList( sysRolePermissionReqDtos.size() ); + for ( SysRolePermissionReqDto sysRolePermissionReqDto : sysRolePermissionReqDtos ) { + list.add( fromReqDto( sysRolePermissionReqDto ) ); + } + + return list; + } + + @Override + public SysRolePermissionQuery fromQueryReqDtoToQuery(SysRolePermissionQueryReqDto sysRolePermissionQueryReqDto) { + if ( sysRolePermissionQueryReqDto == null ) { + return null; + } + + SysRolePermissionQuery sysRolePermissionQuery = new SysRolePermissionQuery(); + + sysRolePermissionQuery.setId( sysRolePermissionQueryReqDto.getId() ); + sysRolePermissionQuery.setRoleId( sysRolePermissionQueryReqDto.getRoleId() ); + sysRolePermissionQuery.setPermissionId( sysRolePermissionQueryReqDto.getPermissionId() ); + + return sysRolePermissionQuery; + } +} diff --git a/target/generated-sources/annotations/com/metalloop/modules/auth/converter/SysUserConverterImpl.java b/target/generated-sources/annotations/com/metalloop/modules/auth/converter/SysUserConverterImpl.java new file mode 100644 index 0000000..3f92f81 --- /dev/null +++ b/target/generated-sources/annotations/com/metalloop/modules/auth/converter/SysUserConverterImpl.java @@ -0,0 +1,109 @@ +package com.metalloop.modules.auth.converter; + +import com.metalloop.modules.auth.model.po.SysUser; +import com.metalloop.modules.auth.model.query.SysUserQuery; +import com.metalloop.modules.auth.model.req.SysUserQueryReqDto; +import com.metalloop.modules.auth.model.req.SysUserReqDto; +import com.metalloop.modules.auth.model.resp.SysUserRespDto; +import java.util.ArrayList; +import java.util.List; +import javax.annotation.processing.Generated; + +@Generated( + value = "org.mapstruct.ap.MappingProcessor", + date = "2026-09-11T14:27:41+0800", + comments = "version: 1.6.3, compiler: javac, environment: Java 17.0.20.1 (Microsoft)" +) +public class SysUserConverterImpl implements SysUserConverter { + + @Override + public SysUserRespDto toRespDto(SysUser sysUser) { + if ( sysUser == null ) { + return null; + } + + SysUserRespDto sysUserRespDto = new SysUserRespDto(); + + sysUserRespDto.setId( sysUser.getId() ); + sysUserRespDto.setUsername( sysUser.getUsername() ); + sysUserRespDto.setPassword( sysUser.getPassword() ); + sysUserRespDto.setAuthStatus( sysUser.getAuthStatus() ); + sysUserRespDto.setEnterpriseId( sysUser.getEnterpriseId() ); + sysUserRespDto.setPhone( sysUser.getPhone() ); + sysUserRespDto.setEmail( sysUser.getEmail() ); + sysUserRespDto.setUserStatus( sysUser.getUserStatus() ); + sysUserRespDto.setRegTime( sysUser.getRegTime() ); + + return sysUserRespDto; + } + + @Override + public List toRespDto(List sysUsers) { + if ( sysUsers == null ) { + return null; + } + + List list = new ArrayList( sysUsers.size() ); + for ( SysUser sysUser : sysUsers ) { + list.add( toRespDto( sysUser ) ); + } + + return list; + } + + @Override + public SysUser fromReqDto(SysUserReqDto sysUserReqDto) { + if ( sysUserReqDto == null ) { + return null; + } + + SysUser sysUser = new SysUser(); + + sysUser.setId( sysUserReqDto.getId() ); + sysUser.setUsername( sysUserReqDto.getUsername() ); + sysUser.setPassword( sysUserReqDto.getPassword() ); + sysUser.setAuthStatus( sysUserReqDto.getAuthStatus() ); + sysUser.setEnterpriseId( sysUserReqDto.getEnterpriseId() ); + sysUser.setPhone( sysUserReqDto.getPhone() ); + sysUser.setEmail( sysUserReqDto.getEmail() ); + sysUser.setUserStatus( sysUserReqDto.getUserStatus() ); + sysUser.setRegTime( sysUserReqDto.getRegTime() ); + + return sysUser; + } + + @Override + public List fromReqDto(List sysUserReqDtos) { + if ( sysUserReqDtos == null ) { + return null; + } + + List list = new ArrayList( sysUserReqDtos.size() ); + for ( SysUserReqDto sysUserReqDto : sysUserReqDtos ) { + list.add( fromReqDto( sysUserReqDto ) ); + } + + return list; + } + + @Override + public SysUserQuery fromQueryReqDtoToQuery(SysUserQueryReqDto sysUserQueryReqDto) { + if ( sysUserQueryReqDto == null ) { + return null; + } + + SysUserQuery sysUserQuery = new SysUserQuery(); + + sysUserQuery.setId( sysUserQueryReqDto.getId() ); + sysUserQuery.setUsername( sysUserQueryReqDto.getUsername() ); + sysUserQuery.setPassword( sysUserQueryReqDto.getPassword() ); + sysUserQuery.setAuthStatus( sysUserQueryReqDto.getAuthStatus() ); + sysUserQuery.setEnterpriseId( sysUserQueryReqDto.getEnterpriseId() ); + sysUserQuery.setPhone( sysUserQueryReqDto.getPhone() ); + sysUserQuery.setEmail( sysUserQueryReqDto.getEmail() ); + sysUserQuery.setUserStatus( sysUserQueryReqDto.getUserStatus() ); + sysUserQuery.setRegTime( sysUserQueryReqDto.getRegTime() ); + + return sysUserQuery; + } +} diff --git a/target/generated-sources/annotations/com/metalloop/modules/auth/converter/SysUserRoleConverterImpl.java b/target/generated-sources/annotations/com/metalloop/modules/auth/converter/SysUserRoleConverterImpl.java new file mode 100644 index 0000000..424666b --- /dev/null +++ b/target/generated-sources/annotations/com/metalloop/modules/auth/converter/SysUserRoleConverterImpl.java @@ -0,0 +1,94 @@ +package com.metalloop.modules.auth.converter; + +import com.metalloop.modules.auth.model.po.SysUserRole; +import com.metalloop.modules.auth.model.query.SysUserRoleQuery; +import com.metalloop.modules.auth.model.req.SysUserRoleQueryReqDto; +import com.metalloop.modules.auth.model.req.SysUserRoleReqDto; +import com.metalloop.modules.auth.model.resp.SysUserRoleRespDto; +import java.util.ArrayList; +import java.util.List; +import javax.annotation.processing.Generated; + +@Generated( + value = "org.mapstruct.ap.MappingProcessor", + date = "2026-09-11T14:27:41+0800", + comments = "version: 1.6.3, compiler: javac, environment: Java 17.0.20.1 (Microsoft)" +) +public class SysUserRoleConverterImpl implements SysUserRoleConverter { + + @Override + public SysUserRoleRespDto toRespDto(SysUserRole sysUserRole) { + if ( sysUserRole == null ) { + return null; + } + + SysUserRoleRespDto sysUserRoleRespDto = new SysUserRoleRespDto(); + + sysUserRoleRespDto.setUserId( sysUserRole.getUserId() ); + sysUserRoleRespDto.setRoleId( sysUserRole.getRoleId() ); + sysUserRoleRespDto.setCreatedAt( sysUserRole.getCreatedAt() ); + sysUserRoleRespDto.setId( sysUserRole.getId() ); + + return sysUserRoleRespDto; + } + + @Override + public List toRespDto(List sysUserRoles) { + if ( sysUserRoles == null ) { + return null; + } + + List list = new ArrayList( sysUserRoles.size() ); + for ( SysUserRole sysUserRole : sysUserRoles ) { + list.add( toRespDto( sysUserRole ) ); + } + + return list; + } + + @Override + public SysUserRole fromReqDto(SysUserRoleReqDto sysUserRoleReqDto) { + if ( sysUserRoleReqDto == null ) { + return null; + } + + SysUserRole sysUserRole = new SysUserRole(); + + sysUserRole.setUserId( sysUserRoleReqDto.getUserId() ); + sysUserRole.setRoleId( sysUserRoleReqDto.getRoleId() ); + sysUserRole.setCreatedAt( sysUserRoleReqDto.getCreatedAt() ); + sysUserRole.setId( sysUserRoleReqDto.getId() ); + + return sysUserRole; + } + + @Override + public List fromReqDto(List sysUserRoleReqDtos) { + if ( sysUserRoleReqDtos == null ) { + return null; + } + + List list = new ArrayList( sysUserRoleReqDtos.size() ); + for ( SysUserRoleReqDto sysUserRoleReqDto : sysUserRoleReqDtos ) { + list.add( fromReqDto( sysUserRoleReqDto ) ); + } + + return list; + } + + @Override + public SysUserRoleQuery fromQueryReqDtoToQuery(SysUserRoleQueryReqDto sysUserRoleQueryReqDto) { + if ( sysUserRoleQueryReqDto == null ) { + return null; + } + + SysUserRoleQuery sysUserRoleQuery = new SysUserRoleQuery(); + + sysUserRoleQuery.setUserId( sysUserRoleQueryReqDto.getUserId() ); + sysUserRoleQuery.setRoleId( sysUserRoleQueryReqDto.getRoleId() ); + sysUserRoleQuery.setCreatedAt( sysUserRoleQueryReqDto.getCreatedAt() ); + sysUserRoleQuery.setId( sysUserRoleQueryReqDto.getId() ); + + return sysUserRoleQuery; + } +} diff --git a/target/generated-sources/annotations/com/metalloop/modules/bussiness/converter/BizEnterpriseProductConverterImpl.java b/target/generated-sources/annotations/com/metalloop/modules/bussiness/converter/BizEnterpriseProductConverterImpl.java new file mode 100644 index 0000000..9a4d887 --- /dev/null +++ b/target/generated-sources/annotations/com/metalloop/modules/bussiness/converter/BizEnterpriseProductConverterImpl.java @@ -0,0 +1,112 @@ +package com.metalloop.modules.bussiness.converter; + +import com.metalloop.modules.bussiness.model.po.BizEnterpriseProduct; +import com.metalloop.modules.bussiness.model.query.BizEnterpriseProductQuery; +import com.metalloop.modules.bussiness.model.req.BizEnterpriseProductQueryReqDto; +import com.metalloop.modules.bussiness.model.req.BizEnterpriseProductReqDto; +import com.metalloop.modules.bussiness.model.resp.BizEnterpriseProductRespDto; +import java.util.ArrayList; +import java.util.List; +import javax.annotation.processing.Generated; + +@Generated( + value = "org.mapstruct.ap.MappingProcessor", + date = "2026-09-11T14:27:41+0800", + comments = "version: 1.6.3, compiler: javac, environment: Java 17.0.20.1 (Microsoft)" +) +public class BizEnterpriseProductConverterImpl implements BizEnterpriseProductConverter { + + @Override + public BizEnterpriseProductRespDto toRespDto(BizEnterpriseProduct bizEnterpriseProduct) { + if ( bizEnterpriseProduct == null ) { + return null; + } + + BizEnterpriseProductRespDto bizEnterpriseProductRespDto = new BizEnterpriseProductRespDto(); + + bizEnterpriseProductRespDto.setId( bizEnterpriseProduct.getId() ); + bizEnterpriseProductRespDto.setEnterpriseId( bizEnterpriseProduct.getEnterpriseId() ); + bizEnterpriseProductRespDto.setVarietyId( bizEnterpriseProduct.getVarietyId() ); + bizEnterpriseProductRespDto.setMaterialId( bizEnterpriseProduct.getMaterialId() ); + bizEnterpriseProductRespDto.setUnitPrice( bizEnterpriseProduct.getUnitPrice() ); + bizEnterpriseProductRespDto.setWeight( bizEnterpriseProduct.getWeight() ); + bizEnterpriseProductRespDto.setStatus( bizEnterpriseProduct.getStatus() ); + bizEnterpriseProductRespDto.setRemark( bizEnterpriseProduct.getRemark() ); + bizEnterpriseProductRespDto.setCreateTime( bizEnterpriseProduct.getCreateTime() ); + bizEnterpriseProductRespDto.setUpdateTime( bizEnterpriseProduct.getUpdateTime() ); + + return bizEnterpriseProductRespDto; + } + + @Override + public List toRespDto(List bizEnterpriseProducts) { + if ( bizEnterpriseProducts == null ) { + return null; + } + + List list = new ArrayList( bizEnterpriseProducts.size() ); + for ( BizEnterpriseProduct bizEnterpriseProduct : bizEnterpriseProducts ) { + list.add( toRespDto( bizEnterpriseProduct ) ); + } + + return list; + } + + @Override + public BizEnterpriseProduct fromReqDto(BizEnterpriseProductReqDto bizEnterpriseProductReqDto) { + if ( bizEnterpriseProductReqDto == null ) { + return null; + } + + BizEnterpriseProduct bizEnterpriseProduct = new BizEnterpriseProduct(); + + bizEnterpriseProduct.setId( bizEnterpriseProductReqDto.getId() ); + bizEnterpriseProduct.setEnterpriseId( bizEnterpriseProductReqDto.getEnterpriseId() ); + bizEnterpriseProduct.setVarietyId( bizEnterpriseProductReqDto.getVarietyId() ); + bizEnterpriseProduct.setMaterialId( bizEnterpriseProductReqDto.getMaterialId() ); + bizEnterpriseProduct.setUnitPrice( bizEnterpriseProductReqDto.getUnitPrice() ); + bizEnterpriseProduct.setWeight( bizEnterpriseProductReqDto.getWeight() ); + bizEnterpriseProduct.setStatus( bizEnterpriseProductReqDto.getStatus() ); + bizEnterpriseProduct.setRemark( bizEnterpriseProductReqDto.getRemark() ); + bizEnterpriseProduct.setCreateTime( bizEnterpriseProductReqDto.getCreateTime() ); + bizEnterpriseProduct.setUpdateTime( bizEnterpriseProductReqDto.getUpdateTime() ); + + return bizEnterpriseProduct; + } + + @Override + public List fromReqDto(List bizEnterpriseProductReqDtos) { + if ( bizEnterpriseProductReqDtos == null ) { + return null; + } + + List list = new ArrayList( bizEnterpriseProductReqDtos.size() ); + for ( BizEnterpriseProductReqDto bizEnterpriseProductReqDto : bizEnterpriseProductReqDtos ) { + list.add( fromReqDto( bizEnterpriseProductReqDto ) ); + } + + return list; + } + + @Override + public BizEnterpriseProductQuery fromQueryReqDtoToQuery(BizEnterpriseProductQueryReqDto bizEnterpriseProductQueryReqDto) { + if ( bizEnterpriseProductQueryReqDto == null ) { + return null; + } + + BizEnterpriseProductQuery bizEnterpriseProductQuery = new BizEnterpriseProductQuery(); + + bizEnterpriseProductQuery.setId( bizEnterpriseProductQueryReqDto.getId() ); + bizEnterpriseProductQuery.setEnterpriseId( bizEnterpriseProductQueryReqDto.getEnterpriseId() ); + bizEnterpriseProductQuery.setVarietyId( bizEnterpriseProductQueryReqDto.getVarietyId() ); + bizEnterpriseProductQuery.setMaterialId( bizEnterpriseProductQueryReqDto.getMaterialId() ); + bizEnterpriseProductQuery.setUnitPrice( bizEnterpriseProductQueryReqDto.getUnitPrice() ); + bizEnterpriseProductQuery.setWeight( bizEnterpriseProductQueryReqDto.getWeight() ); + bizEnterpriseProductQuery.setStatus( bizEnterpriseProductQueryReqDto.getStatus() ); + bizEnterpriseProductQuery.setRemark( bizEnterpriseProductQueryReqDto.getRemark() ); + bizEnterpriseProductQuery.setCreateTime( bizEnterpriseProductQueryReqDto.getCreateTime() ); + bizEnterpriseProductQuery.setUpdateTime( bizEnterpriseProductQueryReqDto.getUpdateTime() ); + + return bizEnterpriseProductQuery; + } +} diff --git a/target/generated-sources/annotations/com/metalloop/modules/bussiness/converter/BizMaterialConverterImpl.java b/target/generated-sources/annotations/com/metalloop/modules/bussiness/converter/BizMaterialConverterImpl.java new file mode 100644 index 0000000..7fb60d3 --- /dev/null +++ b/target/generated-sources/annotations/com/metalloop/modules/bussiness/converter/BizMaterialConverterImpl.java @@ -0,0 +1,100 @@ +package com.metalloop.modules.bussiness.converter; + +import com.metalloop.modules.bussiness.model.po.BizMaterial; +import com.metalloop.modules.bussiness.model.query.BizMaterialQuery; +import com.metalloop.modules.bussiness.model.req.BizMaterialQueryReqDto; +import com.metalloop.modules.bussiness.model.req.BizMaterialReqDto; +import com.metalloop.modules.bussiness.model.resp.BizMaterialRespDto; +import java.util.ArrayList; +import java.util.List; +import javax.annotation.processing.Generated; + +@Generated( + value = "org.mapstruct.ap.MappingProcessor", + date = "2026-09-11T14:27:41+0800", + comments = "version: 1.6.3, compiler: javac, environment: Java 17.0.20.1 (Microsoft)" +) +public class BizMaterialConverterImpl implements BizMaterialConverter { + + @Override + public BizMaterialRespDto toRespDto(BizMaterial bizMaterial) { + if ( bizMaterial == null ) { + return null; + } + + BizMaterialRespDto bizMaterialRespDto = new BizMaterialRespDto(); + + bizMaterialRespDto.setId( bizMaterial.getId() ); + bizMaterialRespDto.setMaterialName( bizMaterial.getMaterialName() ); + bizMaterialRespDto.setMaterialCode( bizMaterial.getMaterialCode() ); + bizMaterialRespDto.setDescription( bizMaterial.getDescription() ); + bizMaterialRespDto.setCreateTime( bizMaterial.getCreateTime() ); + bizMaterialRespDto.setUpdateTime( bizMaterial.getUpdateTime() ); + + return bizMaterialRespDto; + } + + @Override + public List toRespDto(List bizMaterials) { + if ( bizMaterials == null ) { + return null; + } + + List list = new ArrayList( bizMaterials.size() ); + for ( BizMaterial bizMaterial : bizMaterials ) { + list.add( toRespDto( bizMaterial ) ); + } + + return list; + } + + @Override + public BizMaterial fromReqDto(BizMaterialReqDto bizMaterialReqDto) { + if ( bizMaterialReqDto == null ) { + return null; + } + + BizMaterial bizMaterial = new BizMaterial(); + + bizMaterial.setId( bizMaterialReqDto.getId() ); + bizMaterial.setMaterialName( bizMaterialReqDto.getMaterialName() ); + bizMaterial.setMaterialCode( bizMaterialReqDto.getMaterialCode() ); + bizMaterial.setDescription( bizMaterialReqDto.getDescription() ); + bizMaterial.setCreateTime( bizMaterialReqDto.getCreateTime() ); + bizMaterial.setUpdateTime( bizMaterialReqDto.getUpdateTime() ); + + return bizMaterial; + } + + @Override + public List fromReqDto(List bizMaterialReqDtos) { + if ( bizMaterialReqDtos == null ) { + return null; + } + + List list = new ArrayList( bizMaterialReqDtos.size() ); + for ( BizMaterialReqDto bizMaterialReqDto : bizMaterialReqDtos ) { + list.add( fromReqDto( bizMaterialReqDto ) ); + } + + return list; + } + + @Override + public BizMaterialQuery fromQueryReqDtoToQuery(BizMaterialQueryReqDto bizMaterialQueryReqDto) { + if ( bizMaterialQueryReqDto == null ) { + return null; + } + + BizMaterialQuery bizMaterialQuery = new BizMaterialQuery(); + + bizMaterialQuery.setId( bizMaterialQueryReqDto.getId() ); + bizMaterialQuery.setMaterialName( bizMaterialQueryReqDto.getMaterialName() ); + bizMaterialQuery.setMaterialCode( bizMaterialQueryReqDto.getMaterialCode() ); + bizMaterialQuery.setDescription( bizMaterialQueryReqDto.getDescription() ); + bizMaterialQuery.setCreateTime( bizMaterialQueryReqDto.getCreateTime() ); + bizMaterialQuery.setUpdateTime( bizMaterialQueryReqDto.getUpdateTime() ); + + return bizMaterialQuery; + } +} diff --git a/target/generated-sources/annotations/com/metalloop/modules/bussiness/converter/BizPurchaseRequestConverterImpl.java b/target/generated-sources/annotations/com/metalloop/modules/bussiness/converter/BizPurchaseRequestConverterImpl.java new file mode 100644 index 0000000..2fac640 --- /dev/null +++ b/target/generated-sources/annotations/com/metalloop/modules/bussiness/converter/BizPurchaseRequestConverterImpl.java @@ -0,0 +1,160 @@ +package com.metalloop.modules.bussiness.converter; + +import com.metalloop.modules.bussiness.model.po.BizPurchaseRequest; +import com.metalloop.modules.bussiness.model.query.BizPurchaseRequestQuery; +import com.metalloop.modules.bussiness.model.req.BizPurchaseRequestQueryReqDto; +import com.metalloop.modules.bussiness.model.req.BizPurchaseRequestReqDto; +import com.metalloop.modules.bussiness.model.resp.BizPurchaseRequestRespDto; +import java.util.ArrayList; +import java.util.List; +import javax.annotation.processing.Generated; + +@Generated( + value = "org.mapstruct.ap.MappingProcessor", + date = "2026-09-11T14:27:41+0800", + comments = "version: 1.6.3, compiler: javac, environment: Java 17.0.20.1 (Microsoft)" +) +public class BizPurchaseRequestConverterImpl implements BizPurchaseRequestConverter { + + @Override + public BizPurchaseRequestRespDto toRespDto(BizPurchaseRequest bizPurchaseRequest) { + if ( bizPurchaseRequest == null ) { + return null; + } + + BizPurchaseRequestRespDto bizPurchaseRequestRespDto = new BizPurchaseRequestRespDto(); + + bizPurchaseRequestRespDto.setId( bizPurchaseRequest.getId() ); + bizPurchaseRequestRespDto.setCreateUserId( bizPurchaseRequest.getCreateUserId() ); + bizPurchaseRequestRespDto.setEnterpriseId( bizPurchaseRequest.getEnterpriseId() ); + bizPurchaseRequestRespDto.setElementType( bizPurchaseRequest.getElementType() ); + bizPurchaseRequestRespDto.setProductCategory( bizPurchaseRequest.getProductCategory() ); + bizPurchaseRequestRespDto.setMaterial( bizPurchaseRequest.getMaterial() ); + bizPurchaseRequestRespDto.setTitle( bizPurchaseRequest.getTitle() ); + bizPurchaseRequestRespDto.setDescription( bizPurchaseRequest.getDescription() ); + bizPurchaseRequestRespDto.setQuantity( bizPurchaseRequest.getQuantity() ); + bizPurchaseRequestRespDto.setUnitPrice( bizPurchaseRequest.getUnitPrice() ); + bizPurchaseRequestRespDto.setContactPerson( bizPurchaseRequest.getContactPerson() ); + bizPurchaseRequestRespDto.setContactPhone( bizPurchaseRequest.getContactPhone() ); + bizPurchaseRequestRespDto.setDeliveryDate( bizPurchaseRequest.getDeliveryDate() ); + bizPurchaseRequestRespDto.setDeliveryLocation( bizPurchaseRequest.getDeliveryLocation() ); + bizPurchaseRequestRespDto.setImageUrl( bizPurchaseRequest.getImageUrl() ); + bizPurchaseRequestRespDto.setAuditStatus( bizPurchaseRequest.getAuditStatus() ); + bizPurchaseRequestRespDto.setPublishTime( bizPurchaseRequest.getPublishTime() ); + bizPurchaseRequestRespDto.setExpireTime( bizPurchaseRequest.getExpireTime() ); + bizPurchaseRequestRespDto.setAccountPeriodMode( bizPurchaseRequest.getAccountPeriodMode() ); + bizPurchaseRequestRespDto.setDepositRatio( bizPurchaseRequest.getDepositRatio() ); + bizPurchaseRequestRespDto.setFinalPaymentDeadline( bizPurchaseRequest.getFinalPaymentDeadline() ); + bizPurchaseRequestRespDto.setStatus( bizPurchaseRequest.getStatus() ); + bizPurchaseRequestRespDto.setRejectReason( bizPurchaseRequest.getRejectReason() ); + bizPurchaseRequestRespDto.setUpdateUserId( bizPurchaseRequest.getUpdateUserId() ); + bizPurchaseRequestRespDto.setCreateTime( bizPurchaseRequest.getCreateTime() ); + bizPurchaseRequestRespDto.setUpdateTime( bizPurchaseRequest.getUpdateTime() ); + + return bizPurchaseRequestRespDto; + } + + @Override + public List toRespDto(List bizPurchaseRequests) { + if ( bizPurchaseRequests == null ) { + return null; + } + + List list = new ArrayList( bizPurchaseRequests.size() ); + for ( BizPurchaseRequest bizPurchaseRequest : bizPurchaseRequests ) { + list.add( toRespDto( bizPurchaseRequest ) ); + } + + return list; + } + + @Override + public BizPurchaseRequest fromReqDto(BizPurchaseRequestReqDto bizPurchaseRequestReqDto) { + if ( bizPurchaseRequestReqDto == null ) { + return null; + } + + BizPurchaseRequest bizPurchaseRequest = new BizPurchaseRequest(); + + bizPurchaseRequest.setId( bizPurchaseRequestReqDto.getId() ); + bizPurchaseRequest.setCreateUserId( bizPurchaseRequestReqDto.getCreateUserId() ); + bizPurchaseRequest.setEnterpriseId( bizPurchaseRequestReqDto.getEnterpriseId() ); + bizPurchaseRequest.setElementType( bizPurchaseRequestReqDto.getElementType() ); + bizPurchaseRequest.setProductCategory( bizPurchaseRequestReqDto.getProductCategory() ); + bizPurchaseRequest.setMaterial( bizPurchaseRequestReqDto.getMaterial() ); + bizPurchaseRequest.setTitle( bizPurchaseRequestReqDto.getTitle() ); + bizPurchaseRequest.setDescription( bizPurchaseRequestReqDto.getDescription() ); + bizPurchaseRequest.setQuantity( bizPurchaseRequestReqDto.getQuantity() ); + bizPurchaseRequest.setUnitPrice( bizPurchaseRequestReqDto.getUnitPrice() ); + bizPurchaseRequest.setContactPerson( bizPurchaseRequestReqDto.getContactPerson() ); + bizPurchaseRequest.setContactPhone( bizPurchaseRequestReqDto.getContactPhone() ); + bizPurchaseRequest.setDeliveryDate( bizPurchaseRequestReqDto.getDeliveryDate() ); + bizPurchaseRequest.setDeliveryLocation( bizPurchaseRequestReqDto.getDeliveryLocation() ); + bizPurchaseRequest.setImageUrl( bizPurchaseRequestReqDto.getImageUrl() ); + bizPurchaseRequest.setAuditStatus( bizPurchaseRequestReqDto.getAuditStatus() ); + bizPurchaseRequest.setPublishTime( bizPurchaseRequestReqDto.getPublishTime() ); + bizPurchaseRequest.setExpireTime( bizPurchaseRequestReqDto.getExpireTime() ); + bizPurchaseRequest.setAccountPeriodMode( bizPurchaseRequestReqDto.getAccountPeriodMode() ); + bizPurchaseRequest.setDepositRatio( bizPurchaseRequestReqDto.getDepositRatio() ); + bizPurchaseRequest.setFinalPaymentDeadline( bizPurchaseRequestReqDto.getFinalPaymentDeadline() ); + bizPurchaseRequest.setStatus( bizPurchaseRequestReqDto.getStatus() ); + bizPurchaseRequest.setRejectReason( bizPurchaseRequestReqDto.getRejectReason() ); + bizPurchaseRequest.setUpdateUserId( bizPurchaseRequestReqDto.getUpdateUserId() ); + bizPurchaseRequest.setCreateTime( bizPurchaseRequestReqDto.getCreateTime() ); + bizPurchaseRequest.setUpdateTime( bizPurchaseRequestReqDto.getUpdateTime() ); + + return bizPurchaseRequest; + } + + @Override + public List fromReqDto(List bizPurchaseRequestReqDtos) { + if ( bizPurchaseRequestReqDtos == null ) { + return null; + } + + List list = new ArrayList( bizPurchaseRequestReqDtos.size() ); + for ( BizPurchaseRequestReqDto bizPurchaseRequestReqDto : bizPurchaseRequestReqDtos ) { + list.add( fromReqDto( bizPurchaseRequestReqDto ) ); + } + + return list; + } + + @Override + public BizPurchaseRequestQuery fromQueryReqDtoToQuery(BizPurchaseRequestQueryReqDto bizPurchaseRequestQueryReqDto) { + if ( bizPurchaseRequestQueryReqDto == null ) { + return null; + } + + BizPurchaseRequestQuery bizPurchaseRequestQuery = new BizPurchaseRequestQuery(); + + bizPurchaseRequestQuery.setId( bizPurchaseRequestQueryReqDto.getId() ); + bizPurchaseRequestQuery.setCreateUserId( bizPurchaseRequestQueryReqDto.getCreateUserId() ); + bizPurchaseRequestQuery.setEnterpriseId( bizPurchaseRequestQueryReqDto.getEnterpriseId() ); + bizPurchaseRequestQuery.setElementType( bizPurchaseRequestQueryReqDto.getElementType() ); + bizPurchaseRequestQuery.setProductCategory( bizPurchaseRequestQueryReqDto.getProductCategory() ); + bizPurchaseRequestQuery.setMaterial( bizPurchaseRequestQueryReqDto.getMaterial() ); + bizPurchaseRequestQuery.setTitle( bizPurchaseRequestQueryReqDto.getTitle() ); + bizPurchaseRequestQuery.setDescription( bizPurchaseRequestQueryReqDto.getDescription() ); + bizPurchaseRequestQuery.setQuantity( bizPurchaseRequestQueryReqDto.getQuantity() ); + bizPurchaseRequestQuery.setUnitPrice( bizPurchaseRequestQueryReqDto.getUnitPrice() ); + bizPurchaseRequestQuery.setContactPerson( bizPurchaseRequestQueryReqDto.getContactPerson() ); + bizPurchaseRequestQuery.setContactPhone( bizPurchaseRequestQueryReqDto.getContactPhone() ); + bizPurchaseRequestQuery.setDeliveryDate( bizPurchaseRequestQueryReqDto.getDeliveryDate() ); + bizPurchaseRequestQuery.setDeliveryLocation( bizPurchaseRequestQueryReqDto.getDeliveryLocation() ); + bizPurchaseRequestQuery.setImageUrl( bizPurchaseRequestQueryReqDto.getImageUrl() ); + bizPurchaseRequestQuery.setAuditStatus( bizPurchaseRequestQueryReqDto.getAuditStatus() ); + bizPurchaseRequestQuery.setPublishTime( bizPurchaseRequestQueryReqDto.getPublishTime() ); + bizPurchaseRequestQuery.setExpireTime( bizPurchaseRequestQueryReqDto.getExpireTime() ); + bizPurchaseRequestQuery.setAccountPeriodMode( bizPurchaseRequestQueryReqDto.getAccountPeriodMode() ); + bizPurchaseRequestQuery.setDepositRatio( bizPurchaseRequestQueryReqDto.getDepositRatio() ); + bizPurchaseRequestQuery.setFinalPaymentDeadline( bizPurchaseRequestQueryReqDto.getFinalPaymentDeadline() ); + bizPurchaseRequestQuery.setStatus( bizPurchaseRequestQueryReqDto.getStatus() ); + bizPurchaseRequestQuery.setRejectReason( bizPurchaseRequestQueryReqDto.getRejectReason() ); + bizPurchaseRequestQuery.setUpdateUserId( bizPurchaseRequestQueryReqDto.getUpdateUserId() ); + bizPurchaseRequestQuery.setCreateTime( bizPurchaseRequestQueryReqDto.getCreateTime() ); + bizPurchaseRequestQuery.setUpdateTime( bizPurchaseRequestQueryReqDto.getUpdateTime() ); + + return bizPurchaseRequestQuery; + } +} diff --git a/target/generated-sources/annotations/com/metalloop/modules/bussiness/converter/BizSupplyInfoConverterImpl.java b/target/generated-sources/annotations/com/metalloop/modules/bussiness/converter/BizSupplyInfoConverterImpl.java new file mode 100644 index 0000000..df29496 --- /dev/null +++ b/target/generated-sources/annotations/com/metalloop/modules/bussiness/converter/BizSupplyInfoConverterImpl.java @@ -0,0 +1,157 @@ +package com.metalloop.modules.bussiness.converter; + +import com.metalloop.modules.bussiness.model.po.BizSupplyInfo; +import com.metalloop.modules.bussiness.model.query.BizSupplyInfoQuery; +import com.metalloop.modules.bussiness.model.req.BizSupplyInfoQueryReqDto; +import com.metalloop.modules.bussiness.model.req.BizSupplyInfoReqDto; +import com.metalloop.modules.bussiness.model.resp.BizSupplyInfoRespDto; +import java.util.ArrayList; +import java.util.List; +import javax.annotation.processing.Generated; + +@Generated( + value = "org.mapstruct.ap.MappingProcessor", + date = "2026-09-11T14:27:41+0800", + comments = "version: 1.6.3, compiler: javac, environment: Java 17.0.20.1 (Microsoft)" +) +public class BizSupplyInfoConverterImpl implements BizSupplyInfoConverter { + + @Override + public BizSupplyInfoRespDto toRespDto(BizSupplyInfo bizSupplyInfo) { + if ( bizSupplyInfo == null ) { + return null; + } + + BizSupplyInfoRespDto bizSupplyInfoRespDto = new BizSupplyInfoRespDto(); + + bizSupplyInfoRespDto.setId( bizSupplyInfo.getId() ); + bizSupplyInfoRespDto.setCreateUserId( bizSupplyInfo.getCreateUserId() ); + bizSupplyInfoRespDto.setEnterpriseId( bizSupplyInfo.getEnterpriseId() ); + bizSupplyInfoRespDto.setElementType( bizSupplyInfo.getElementType() ); + bizSupplyInfoRespDto.setProductCategory( bizSupplyInfo.getProductCategory() ); + bizSupplyInfoRespDto.setMaterial( bizSupplyInfo.getMaterial() ); + bizSupplyInfoRespDto.setTitle( bizSupplyInfo.getTitle() ); + bizSupplyInfoRespDto.setDescription( bizSupplyInfo.getDescription() ); + bizSupplyInfoRespDto.setQuantity( bizSupplyInfo.getQuantity() ); + bizSupplyInfoRespDto.setUnitPrice( bizSupplyInfo.getUnitPrice() ); + bizSupplyInfoRespDto.setContactPerson( bizSupplyInfo.getContactPerson() ); + bizSupplyInfoRespDto.setContactPhone( bizSupplyInfo.getContactPhone() ); + bizSupplyInfoRespDto.setDeliveryLocation( bizSupplyInfo.getDeliveryLocation() ); + bizSupplyInfoRespDto.setImageUrl( bizSupplyInfo.getImageUrl() ); + bizSupplyInfoRespDto.setAuditStatus( bizSupplyInfo.getAuditStatus() ); + bizSupplyInfoRespDto.setPublishTime( bizSupplyInfo.getPublishTime() ); + bizSupplyInfoRespDto.setExpireTime( bizSupplyInfo.getExpireTime() ); + bizSupplyInfoRespDto.setAccountPeriodMode( bizSupplyInfo.getAccountPeriodMode() ); + bizSupplyInfoRespDto.setDepositRatio( bizSupplyInfo.getDepositRatio() ); + bizSupplyInfoRespDto.setFinalPaymentDeadline( bizSupplyInfo.getFinalPaymentDeadline() ); + bizSupplyInfoRespDto.setStatus( bizSupplyInfo.getStatus() ); + bizSupplyInfoRespDto.setRejectReason( bizSupplyInfo.getRejectReason() ); + bizSupplyInfoRespDto.setUpdateUserId( bizSupplyInfo.getUpdateUserId() ); + bizSupplyInfoRespDto.setCreateTime( bizSupplyInfo.getCreateTime() ); + bizSupplyInfoRespDto.setUpdateTime( bizSupplyInfo.getUpdateTime() ); + + return bizSupplyInfoRespDto; + } + + @Override + public List toRespDto(List bizSupplyInfos) { + if ( bizSupplyInfos == null ) { + return null; + } + + List list = new ArrayList( bizSupplyInfos.size() ); + for ( BizSupplyInfo bizSupplyInfo : bizSupplyInfos ) { + list.add( toRespDto( bizSupplyInfo ) ); + } + + return list; + } + + @Override + public BizSupplyInfo fromReqDto(BizSupplyInfoReqDto bizSupplyInfoReqDto) { + if ( bizSupplyInfoReqDto == null ) { + return null; + } + + BizSupplyInfo bizSupplyInfo = new BizSupplyInfo(); + + bizSupplyInfo.setId( bizSupplyInfoReqDto.getId() ); + bizSupplyInfo.setCreateUserId( bizSupplyInfoReqDto.getCreateUserId() ); + bizSupplyInfo.setEnterpriseId( bizSupplyInfoReqDto.getEnterpriseId() ); + bizSupplyInfo.setElementType( bizSupplyInfoReqDto.getElementType() ); + bizSupplyInfo.setProductCategory( bizSupplyInfoReqDto.getProductCategory() ); + bizSupplyInfo.setMaterial( bizSupplyInfoReqDto.getMaterial() ); + bizSupplyInfo.setTitle( bizSupplyInfoReqDto.getTitle() ); + bizSupplyInfo.setDescription( bizSupplyInfoReqDto.getDescription() ); + bizSupplyInfo.setQuantity( bizSupplyInfoReqDto.getQuantity() ); + bizSupplyInfo.setUnitPrice( bizSupplyInfoReqDto.getUnitPrice() ); + bizSupplyInfo.setContactPerson( bizSupplyInfoReqDto.getContactPerson() ); + bizSupplyInfo.setContactPhone( bizSupplyInfoReqDto.getContactPhone() ); + bizSupplyInfo.setDeliveryLocation( bizSupplyInfoReqDto.getDeliveryLocation() ); + bizSupplyInfo.setImageUrl( bizSupplyInfoReqDto.getImageUrl() ); + bizSupplyInfo.setAuditStatus( bizSupplyInfoReqDto.getAuditStatus() ); + bizSupplyInfo.setPublishTime( bizSupplyInfoReqDto.getPublishTime() ); + bizSupplyInfo.setExpireTime( bizSupplyInfoReqDto.getExpireTime() ); + bizSupplyInfo.setAccountPeriodMode( bizSupplyInfoReqDto.getAccountPeriodMode() ); + bizSupplyInfo.setDepositRatio( bizSupplyInfoReqDto.getDepositRatio() ); + bizSupplyInfo.setFinalPaymentDeadline( bizSupplyInfoReqDto.getFinalPaymentDeadline() ); + bizSupplyInfo.setStatus( bizSupplyInfoReqDto.getStatus() ); + bizSupplyInfo.setRejectReason( bizSupplyInfoReqDto.getRejectReason() ); + bizSupplyInfo.setUpdateUserId( bizSupplyInfoReqDto.getUpdateUserId() ); + bizSupplyInfo.setCreateTime( bizSupplyInfoReqDto.getCreateTime() ); + bizSupplyInfo.setUpdateTime( bizSupplyInfoReqDto.getUpdateTime() ); + + return bizSupplyInfo; + } + + @Override + public List fromReqDto(List bizSupplyInfoReqDtos) { + if ( bizSupplyInfoReqDtos == null ) { + return null; + } + + List list = new ArrayList( bizSupplyInfoReqDtos.size() ); + for ( BizSupplyInfoReqDto bizSupplyInfoReqDto : bizSupplyInfoReqDtos ) { + list.add( fromReqDto( bizSupplyInfoReqDto ) ); + } + + return list; + } + + @Override + public BizSupplyInfoQuery fromQueryReqDtoToQuery(BizSupplyInfoQueryReqDto bizSupplyInfoQueryReqDto) { + if ( bizSupplyInfoQueryReqDto == null ) { + return null; + } + + BizSupplyInfoQuery bizSupplyInfoQuery = new BizSupplyInfoQuery(); + + bizSupplyInfoQuery.setId( bizSupplyInfoQueryReqDto.getId() ); + bizSupplyInfoQuery.setCreateUserId( bizSupplyInfoQueryReqDto.getCreateUserId() ); + bizSupplyInfoQuery.setEnterpriseId( bizSupplyInfoQueryReqDto.getEnterpriseId() ); + bizSupplyInfoQuery.setElementType( bizSupplyInfoQueryReqDto.getElementType() ); + bizSupplyInfoQuery.setProductCategory( bizSupplyInfoQueryReqDto.getProductCategory() ); + bizSupplyInfoQuery.setMaterial( bizSupplyInfoQueryReqDto.getMaterial() ); + bizSupplyInfoQuery.setTitle( bizSupplyInfoQueryReqDto.getTitle() ); + bizSupplyInfoQuery.setDescription( bizSupplyInfoQueryReqDto.getDescription() ); + bizSupplyInfoQuery.setQuantity( bizSupplyInfoQueryReqDto.getQuantity() ); + bizSupplyInfoQuery.setUnitPrice( bizSupplyInfoQueryReqDto.getUnitPrice() ); + bizSupplyInfoQuery.setContactPerson( bizSupplyInfoQueryReqDto.getContactPerson() ); + bizSupplyInfoQuery.setContactPhone( bizSupplyInfoQueryReqDto.getContactPhone() ); + bizSupplyInfoQuery.setDeliveryLocation( bizSupplyInfoQueryReqDto.getDeliveryLocation() ); + bizSupplyInfoQuery.setImageUrl( bizSupplyInfoQueryReqDto.getImageUrl() ); + bizSupplyInfoQuery.setAuditStatus( bizSupplyInfoQueryReqDto.getAuditStatus() ); + bizSupplyInfoQuery.setPublishTime( bizSupplyInfoQueryReqDto.getPublishTime() ); + bizSupplyInfoQuery.setExpireTime( bizSupplyInfoQueryReqDto.getExpireTime() ); + bizSupplyInfoQuery.setAccountPeriodMode( bizSupplyInfoQueryReqDto.getAccountPeriodMode() ); + bizSupplyInfoQuery.setDepositRatio( bizSupplyInfoQueryReqDto.getDepositRatio() ); + bizSupplyInfoQuery.setFinalPaymentDeadline( bizSupplyInfoQueryReqDto.getFinalPaymentDeadline() ); + bizSupplyInfoQuery.setStatus( bizSupplyInfoQueryReqDto.getStatus() ); + bizSupplyInfoQuery.setRejectReason( bizSupplyInfoQueryReqDto.getRejectReason() ); + bizSupplyInfoQuery.setUpdateUserId( bizSupplyInfoQueryReqDto.getUpdateUserId() ); + bizSupplyInfoQuery.setCreateTime( bizSupplyInfoQueryReqDto.getCreateTime() ); + bizSupplyInfoQuery.setUpdateTime( bizSupplyInfoQueryReqDto.getUpdateTime() ); + + return bizSupplyInfoQuery; + } +} diff --git a/target/generated-sources/annotations/com/metalloop/modules/bussiness/converter/BizVarietyConverterImpl.java b/target/generated-sources/annotations/com/metalloop/modules/bussiness/converter/BizVarietyConverterImpl.java new file mode 100644 index 0000000..d91417f --- /dev/null +++ b/target/generated-sources/annotations/com/metalloop/modules/bussiness/converter/BizVarietyConverterImpl.java @@ -0,0 +1,112 @@ +package com.metalloop.modules.bussiness.converter; + +import com.metalloop.modules.bussiness.model.po.BizVariety; +import com.metalloop.modules.bussiness.model.query.BizVarietyQuery; +import com.metalloop.modules.bussiness.model.req.BizVarietyQueryReqDto; +import com.metalloop.modules.bussiness.model.req.BizVarietyReqDto; +import com.metalloop.modules.bussiness.model.resp.BizVarietyRespDto; +import java.util.ArrayList; +import java.util.List; +import javax.annotation.processing.Generated; + +@Generated( + value = "org.mapstruct.ap.MappingProcessor", + date = "2026-09-11T14:27:41+0800", + comments = "version: 1.6.3, compiler: javac, environment: Java 17.0.20.1 (Microsoft)" +) +public class BizVarietyConverterImpl implements BizVarietyConverter { + + @Override + public BizVarietyRespDto toRespDto(BizVariety bizVariety) { + if ( bizVariety == null ) { + return null; + } + + BizVarietyRespDto bizVarietyRespDto = new BizVarietyRespDto(); + + bizVarietyRespDto.setId( bizVariety.getId() ); + bizVarietyRespDto.setVarietyName( bizVariety.getVarietyName() ); + bizVarietyRespDto.setVarietyGrade( bizVariety.getVarietyGrade() ); + bizVarietyRespDto.setParentId( bizVariety.getParentId() ); + bizVarietyRespDto.setVarietyMaterial( bizVariety.getVarietyMaterial() ); + bizVarietyRespDto.setDescription( bizVariety.getDescription() ); + bizVarietyRespDto.setSort( bizVariety.getSort() ); + bizVarietyRespDto.setStatus( bizVariety.getStatus() ); + bizVarietyRespDto.setCreateTime( bizVariety.getCreateTime() ); + bizVarietyRespDto.setUpdateTime( bizVariety.getUpdateTime() ); + + return bizVarietyRespDto; + } + + @Override + public List toRespDto(List bizVarietys) { + if ( bizVarietys == null ) { + return null; + } + + List list = new ArrayList( bizVarietys.size() ); + for ( BizVariety bizVariety : bizVarietys ) { + list.add( toRespDto( bizVariety ) ); + } + + return list; + } + + @Override + public BizVariety fromReqDto(BizVarietyReqDto bizVarietyReqDto) { + if ( bizVarietyReqDto == null ) { + return null; + } + + BizVariety bizVariety = new BizVariety(); + + bizVariety.setId( bizVarietyReqDto.getId() ); + bizVariety.setVarietyName( bizVarietyReqDto.getVarietyName() ); + bizVariety.setVarietyGrade( bizVarietyReqDto.getVarietyGrade() ); + bizVariety.setParentId( bizVarietyReqDto.getParentId() ); + bizVariety.setVarietyMaterial( bizVarietyReqDto.getVarietyMaterial() ); + bizVariety.setDescription( bizVarietyReqDto.getDescription() ); + bizVariety.setSort( bizVarietyReqDto.getSort() ); + bizVariety.setStatus( bizVarietyReqDto.getStatus() ); + bizVariety.setCreateTime( bizVarietyReqDto.getCreateTime() ); + bizVariety.setUpdateTime( bizVarietyReqDto.getUpdateTime() ); + + return bizVariety; + } + + @Override + public List fromReqDto(List bizVarietyReqDtos) { + if ( bizVarietyReqDtos == null ) { + return null; + } + + List list = new ArrayList( bizVarietyReqDtos.size() ); + for ( BizVarietyReqDto bizVarietyReqDto : bizVarietyReqDtos ) { + list.add( fromReqDto( bizVarietyReqDto ) ); + } + + return list; + } + + @Override + public BizVarietyQuery fromQueryReqDtoToQuery(BizVarietyQueryReqDto bizVarietyQueryReqDto) { + if ( bizVarietyQueryReqDto == null ) { + return null; + } + + BizVarietyQuery bizVarietyQuery = new BizVarietyQuery(); + + bizVarietyQuery.setId( bizVarietyQueryReqDto.getId() ); + bizVarietyQuery.setVarietyName( bizVarietyQueryReqDto.getVarietyName() ); + bizVarietyQuery.setVarietyGrade( bizVarietyQueryReqDto.getVarietyGrade() ); + bizVarietyQuery.setParentId( bizVarietyQueryReqDto.getParentId() ); + bizVarietyQuery.setVarietyMaterial( bizVarietyQueryReqDto.getVarietyMaterial() ); + bizVarietyQuery.setDescription( bizVarietyQueryReqDto.getDescription() ); + bizVarietyQuery.setSort( bizVarietyQueryReqDto.getSort() ); + bizVarietyQuery.setStatus( bizVarietyQueryReqDto.getStatus() ); + bizVarietyQuery.setCreateTime( bizVarietyQueryReqDto.getCreateTime() ); + bizVarietyQuery.setUpdateTime( bizVarietyQueryReqDto.getUpdateTime() ); + + return bizVarietyQuery; + } +}