From a542e48f866e94e9f2b50a63505f2ec6e1914b7e Mon Sep 17 00:00:00 2001 From: luoweijian <1329394916@qq.com> Date: Mon, 10 Aug 2026 21:16:14 +0800 Subject: [PATCH] commit --- .../compile/default-compile/inputFiles.lst | 2 +- .../auth/config/AuthProperties$DingTalk.class | Bin 2527 -> 2527 bytes .../crm/auth/config/AuthProperties$Jwt.class | Bin 2350 -> 2350 bytes .../com/crm/auth/config/AuthProperties.class | Bin 3853 -> 3853 bytes .../com/crm/auth/config/DataInitializer.class | Bin 5714 -> 5714 bytes .../com/crm/auth/config/SecurityConfig.class | Bin 7266 -> 7266 bytes .../auth/controller/SystemController.class | Bin 9165 -> 9165 bytes .../crm/auth/domain/dto/LoginResultDTO.class | Bin 2896 -> 2896 bytes .../com/crm/auth/domain/dto/UserInfoDTO.class | Bin 5967 -> 5967 bytes .../auth/domain/dto/UserListDTO$DeptRef.class | Bin 2567 -> 2567 bytes .../auth/domain/dto/UserListDTO$RoleRef.class | Bin 2567 -> 2567 bytes .../com/crm/auth/domain/dto/UserListDTO.class | Bin 9162 -> 9162 bytes .../com/crm/auth/domain/dto/UserStatsVO.class | Bin 3255 -> 3255 bytes .../crm/auth/domain/entity/AuthIdentity.class | Bin 5048 -> 5048 bytes .../com/crm/auth/domain/entity/AuthUser.class | Bin 8228 -> 8228 bytes .../com/crm/auth/domain/entity/SysDept.class | Bin 5657 -> 5657 bytes .../com/crm/auth/domain/entity/SysMenu.class | Bin 10330 -> 10330 bytes .../com/crm/auth/domain/entity/SysRole.class | Bin 5282 -> 5282 bytes .../crm/auth/domain/entity/SysRoleMenu.class | Bin 3499 -> 3499 bytes .../crm/auth/domain/entity/SysUserDept.class | Bin 3505 -> 3505 bytes .../crm/auth/domain/entity/SysUserRole.class | Bin 3499 -> 3499 bytes .../crm/auth/domain/param/UserPageParam.class | Bin 4094 -> 4094 bytes .../com/crm/auth/security/AuthLoginUser.class | Bin 3417 -> 3417 bytes .../auth/security/DataScopeInterceptor.class | Bin 9258 -> 9258 bytes .../com/crm/auth/security/TokenService.class | Bin 5765 -> 5765 bytes .../com/crm/auth/service/DeptTreeCache.class | Bin 4844 -> 4844 bytes .../service/client/DingTalkAuthClient.class | Bin 11730 -> 11730 bytes .../service/client/ThirdPartyUserInfo.class | Bin 4220 -> 4220 bytes .../impl/AuthIdentityServiceImpl.class | Bin 4080 -> 4080 bytes .../auth/service/impl/AuthServiceImpl.class | Bin 9359 -> 9359 bytes .../service/impl/AuthUserServiceImpl.class | Bin 8997 -> 8997 bytes .../service/impl/SysDeptServiceImpl.class | Bin 7958 -> 7958 bytes .../service/impl/SysMenuServiceImpl.class | Bin 3676 -> 3676 bytes .../service/impl/SysRoleServiceImpl.class | Bin 11149 -> 11149 bytes .../compile/default-compile/createdFiles.lst | 1 - .../compile/default-compile/inputFiles.lst | 144 +++++++++--------- .../default-testCompile/createdFiles.lst | 17 --- .../default-testCompile/inputFiles.lst | 14 -- ...ecurity.scope.DataScopeIntegrationTest.xml | 88 ----------- ....service.client.DingTalkAuthClientTest.xml | 103 ------------- ...client.ThirdPartyAuthClientFactoryTest.xml | 62 -------- ....auth.service.impl.AuthServiceImplTest.xml | 84 ---------- ...h.service.impl.AuthUserServiceImplTest.xml | 67 -------- ...th.service.impl.SysDeptServiceImplTest.xml | 69 --------- ...h.service.impl.UserListIntegrationTest.xml | 74 --------- ...ecurity.scope.DataScopeIntegrationTest.txt | 4 - ....service.client.DingTalkAuthClientTest.txt | 4 - ...client.ThirdPartyAuthClientFactoryTest.txt | 4 - ....auth.service.impl.AuthServiceImplTest.txt | 4 - ...h.service.impl.AuthUserServiceImplTest.txt | 4 - ...th.service.impl.SysDeptServiceImplTest.txt | 4 - ...h.service.impl.UserListIntegrationTest.txt | 4 - ...copeIntegrationTest$DeptQueryCounter.class | Bin 1932 -> 0 bytes .../scope/DataScopeIntegrationTest.class | Bin 29148 -> 0 bytes .../auth/security/scope/TestOwnedData.class | Bin 2158 -> 0 bytes .../security/scope/TestOwnedDataMapper.class | Bin 337 -> 0 bytes ...DingTalkAuthClientTest$StubbedClient.class | Bin 2965 -> 0 bytes .../client/DingTalkAuthClientTest.class | Bin 20782 -> 0 bytes ...artyAuthClientFactoryTest$StubClient.class | Bin 1134 -> 0 bytes .../ThirdPartyAuthClientFactoryTest.class | Bin 3634 -> 0 bytes .../service/impl/AuthServiceImplTest.class | Bin 16530 -> 0 bytes .../impl/AuthUserServiceImplTest.class | Bin 10916 -> 0 bytes .../service/impl/SysDeptServiceImplTest.class | Bin 10964 -> 0 bytes .../impl/UserListIntegrationTest.class | Bin 18668 -> 0 bytes .../base/advice/GlobalDataBindingAdvice.java | 32 ++++ .../advice/GlobalDataBindingAdviceTest.java | 107 +++++++++++++ .../advice/GlobalExceptionHandlerAdvice.class | Bin 12245 -> 12245 bytes .../InsertBatchOnDuplicateKeyUpdate.class | Bin 5408 -> 5408 bytes .../com/crm/base/config/JacksonConfig.class | Bin 4044 -> 4044 bytes .../base/config/MetaObjectFillHandler.class | Bin 3263 -> 3263 bytes .../crm/base/config/MybatisPlusConfig.class | Bin 2686 -> 2686 bytes .../base/config/ScheduledTaskProperties.class | Bin 2164 -> 2164 bytes .../crm/base/config/SnowflakeProperties.class | Bin 2300 -> 2300 bytes .../com/crm/base/domain/dto/BaseDTO.class | Bin 3445 -> 3445 bytes .../crm/base/domain/entity/BaseEntity.class | Bin 6436 -> 6436 bytes .../crm/base/domain/entity/OwnedEntity.class | Bin 3087 -> 3087 bytes .../com/crm/base/domain/param/BaseParam.class | Bin 4467 -> 4467 bytes .../crm/base/domain/result/PageResult.class | Bin 5923 -> 5923 bytes .../com/crm/base/security/DataOwnership.class | Bin 1613 -> 1613 bytes .../crm/base/security/DataScopeHelper.class | Bin 4643 -> 4643 bytes .../crm/base/security/DataScopeLevel.class | Bin 2402 -> 2402 bytes .../crm/base/security/DataVisibility.class | Bin 3513 -> 3513 bytes .../com/crm/base/utils/BeanCopyUtils.class | Bin 2627 -> 2627 bytes .../com/crm/base/utils/ExcelUtil.class | Bin 4411 -> 4411 bytes .../com/crm/base/utils/TreeUtils.class | Bin 4012 -> 4012 bytes .../compile/default-compile/createdFiles.lst | 1 + .../compile/default-compile/inputFiles.lst | 101 ++++++------ .../default-testCompile/createdFiles.lst | 2 + .../default-testCompile/inputFiles.lst | 3 +- ...m.crm.base.security.DataVisibilityTest.xml | 92 +++++------ ...m.crm.base.security.DataVisibilityTest.txt | 2 +- .../base/security/DataVisibilityTest.class | Bin 8936 -> 8936 bytes .../dict/controller/DictGroupController.java | 11 +- .../dict/controller/DictItemController.java | 11 +- .../com/crm/dict/domain/dto/DictGroupDTO.java | 50 ++++++ .../com/crm/dict/domain/dto/DictGroupVO.java | 34 ----- .../com/crm/dict/domain/dto/DictItemDTO.java | 65 ++++++++ .../com/crm/dict/domain/dto/DictItemVO.java | 49 ------ .../crm/dict/service/DictQueryService.java | 5 +- .../crm/dict/service/IDictGroupService.java | 8 +- .../crm/dict/service/IDictItemService.java | 6 +- .../service/impl/DictGroupServiceImpl.java | 38 +++-- .../service/impl/DictItemServiceImpl.java | 37 ++--- .../service/impl/DictQueryServiceImpl.java | 8 +- .../java/com/crm/dict/AbstractDictH2Test.java | 19 ++- .../service/impl/DictGroupServiceTest.java | 30 ++-- .../service/impl/DictItemServiceTest.java | 62 ++++---- .../file/config/FileProperties$Minio.class | Bin 3440 -> 3440 bytes .../file/config/FileProperties$Preview.class | Bin 2799 -> 2799 bytes .../com/crm/file/config/FileProperties.class | Bin 7998 -> 7998 bytes .../com/crm/file/config/MinioConfig.class | Bin 3973 -> 3973 bytes .../crm/file/controller/FileController.class | Bin 9785 -> 9785 bytes ...leDownloadDTO$FileDownloadDTOBuilder.class | Bin 2462 -> 2462 bytes .../com/crm/file/domain/dto/FileInfoDTO.class | Bin 6112 -> 6112 bytes .../file/domain/dto/MultipartInitDTO.class | Bin 3435 -> 3435 bytes .../crm/file/domain/dto/UploadSession.class | Bin 4332 -> 4332 bytes .../com/crm/file/domain/entity/FileInfo.class | Bin 7456 -> 7456 bytes .../crm/file/service/KkFileViewClient.class | Bin 3669 -> 3669 bytes .../crm/file/service/impl/FileApiImpl.class | Bin 26701 -> 26701 bytes .../compile/default-compile/inputFiles.lst | 54 +++---- .../default-testCompile/createdFiles.lst | 8 - .../default-testCompile/inputFiles.lst | 8 - ....crm.file.service.KkFileViewClientTest.xml | 63 -------- ....crm.file.service.impl.FileApiImplTest.xml | 111 -------------- ...m.file.task.OrphanChunkCleanupTaskTest.xml | 64 -------- ....crm.file.service.KkFileViewClientTest.txt | 4 - ....crm.file.service.impl.FileApiImplTest.txt | 4 - ...m.file.task.OrphanChunkCleanupTaskTest.txt | 4 - .../file/service/KkFileViewClientTest.class | Bin 3503 -> 0 bytes .../file/service/impl/FileApiImplTest.class | Bin 43461 -> 0 bytes .../task/OrphanChunkCleanupTaskTest.class | Bin 7942 -> 0 bytes test-output.txt | Bin 15134 -> 14390 bytes 132 files changed, 580 insertions(+), 1266 deletions(-) delete mode 100644 crm-auth/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst delete mode 100644 crm-auth/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst delete mode 100644 crm-auth/target/surefire-reports/TEST-com.crm.auth.security.scope.DataScopeIntegrationTest.xml delete mode 100644 crm-auth/target/surefire-reports/TEST-com.crm.auth.service.client.DingTalkAuthClientTest.xml delete mode 100644 crm-auth/target/surefire-reports/TEST-com.crm.auth.service.client.ThirdPartyAuthClientFactoryTest.xml delete mode 100644 crm-auth/target/surefire-reports/TEST-com.crm.auth.service.impl.AuthServiceImplTest.xml delete mode 100644 crm-auth/target/surefire-reports/TEST-com.crm.auth.service.impl.AuthUserServiceImplTest.xml delete mode 100644 crm-auth/target/surefire-reports/TEST-com.crm.auth.service.impl.SysDeptServiceImplTest.xml delete mode 100644 crm-auth/target/surefire-reports/TEST-com.crm.auth.service.impl.UserListIntegrationTest.xml delete mode 100644 crm-auth/target/surefire-reports/com.crm.auth.security.scope.DataScopeIntegrationTest.txt delete mode 100644 crm-auth/target/surefire-reports/com.crm.auth.service.client.DingTalkAuthClientTest.txt delete mode 100644 crm-auth/target/surefire-reports/com.crm.auth.service.client.ThirdPartyAuthClientFactoryTest.txt delete mode 100644 crm-auth/target/surefire-reports/com.crm.auth.service.impl.AuthServiceImplTest.txt delete mode 100644 crm-auth/target/surefire-reports/com.crm.auth.service.impl.AuthUserServiceImplTest.txt delete mode 100644 crm-auth/target/surefire-reports/com.crm.auth.service.impl.SysDeptServiceImplTest.txt delete mode 100644 crm-auth/target/surefire-reports/com.crm.auth.service.impl.UserListIntegrationTest.txt delete mode 100644 crm-auth/target/test-classes/com/crm/auth/security/scope/DataScopeIntegrationTest$DeptQueryCounter.class delete mode 100644 crm-auth/target/test-classes/com/crm/auth/security/scope/DataScopeIntegrationTest.class delete mode 100644 crm-auth/target/test-classes/com/crm/auth/security/scope/TestOwnedData.class delete mode 100644 crm-auth/target/test-classes/com/crm/auth/security/scope/TestOwnedDataMapper.class delete mode 100644 crm-auth/target/test-classes/com/crm/auth/service/client/DingTalkAuthClientTest$StubbedClient.class delete mode 100644 crm-auth/target/test-classes/com/crm/auth/service/client/DingTalkAuthClientTest.class delete mode 100644 crm-auth/target/test-classes/com/crm/auth/service/client/ThirdPartyAuthClientFactoryTest$StubClient.class delete mode 100644 crm-auth/target/test-classes/com/crm/auth/service/client/ThirdPartyAuthClientFactoryTest.class delete mode 100644 crm-auth/target/test-classes/com/crm/auth/service/impl/AuthServiceImplTest.class delete mode 100644 crm-auth/target/test-classes/com/crm/auth/service/impl/AuthUserServiceImplTest.class delete mode 100644 crm-auth/target/test-classes/com/crm/auth/service/impl/SysDeptServiceImplTest.class delete mode 100644 crm-auth/target/test-classes/com/crm/auth/service/impl/UserListIntegrationTest.class create mode 100644 crm-base/src/main/java/com/crm/base/advice/GlobalDataBindingAdvice.java create mode 100644 crm-base/src/test/java/com/crm/base/advice/GlobalDataBindingAdviceTest.java create mode 100644 crm-dict/src/main/java/com/crm/dict/domain/dto/DictGroupDTO.java delete mode 100644 crm-dict/src/main/java/com/crm/dict/domain/dto/DictGroupVO.java create mode 100644 crm-dict/src/main/java/com/crm/dict/domain/dto/DictItemDTO.java delete mode 100644 crm-dict/src/main/java/com/crm/dict/domain/dto/DictItemVO.java delete mode 100644 crm-file/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst delete mode 100644 crm-file/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst delete mode 100644 crm-file/target/surefire-reports/TEST-com.crm.file.service.KkFileViewClientTest.xml delete mode 100644 crm-file/target/surefire-reports/TEST-com.crm.file.service.impl.FileApiImplTest.xml delete mode 100644 crm-file/target/surefire-reports/TEST-com.crm.file.task.OrphanChunkCleanupTaskTest.xml delete mode 100644 crm-file/target/surefire-reports/com.crm.file.service.KkFileViewClientTest.txt delete mode 100644 crm-file/target/surefire-reports/com.crm.file.service.impl.FileApiImplTest.txt delete mode 100644 crm-file/target/surefire-reports/com.crm.file.task.OrphanChunkCleanupTaskTest.txt delete mode 100644 crm-file/target/test-classes/com/crm/file/service/KkFileViewClientTest.class delete mode 100644 crm-file/target/test-classes/com/crm/file/service/impl/FileApiImplTest.class delete mode 100644 crm-file/target/test-classes/com/crm/file/task/OrphanChunkCleanupTaskTest.class diff --git a/crm-app/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/crm-app/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst index dea1afb..49487b6 100644 --- a/crm-app/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst +++ b/crm-app/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst @@ -1 +1 @@ -D:\code\crm-backend-matt\crm-app\src\main\java\com\crm\app\CrmAppApplication.java +E:\code\crm-backend-matt\crm-app\src\main\java\com\crm\app\CrmAppApplication.java diff --git a/crm-auth/target/classes/com/crm/auth/config/AuthProperties$DingTalk.class b/crm-auth/target/classes/com/crm/auth/config/AuthProperties$DingTalk.class index 0e3ff9d201ea73630684f4a8100e27d5d7b199ee..e3f649612efb11d9a95d5f5851a506d74af12ef9 100644 GIT binary patch delta 72 zcmcaFd|!COR%T`n2Di!GEM|iIYz!V;44w>L>8?26qMzb_P!#1{DUc$^V%TF>^5ZOy0q4w)r3nBde?{10#bs cgD(REgAfA~0|$c>gC7GYgFizcLokCR09J?%hyVZp diff --git a/crm-auth/target/classes/com/crm/auth/config/AuthProperties$Jwt.class b/crm-auth/target/classes/com/crm/auth/config/AuthProperties$Jwt.class index d9be18f14c434a6b4eb169227b7b720e00b647e4..b6563498f0145edfce80861198d2c56ede6b1e54 100644 GIT binary patch delta 72 zcmZ1{v`%P4B{MSzgWF_(7A--3HUM603CM>s{jB1 diff --git a/crm-auth/target/classes/com/crm/auth/config/AuthProperties.class b/crm-auth/target/classes/com/crm/auth/config/AuthProperties.class index 1721b95cc4aaf9ceca2e7d61ced2bb50922d5d05..53b1779847192495e537e6fd99d8b8a63a6cbf76 100644 GIT binary patch delta 52 zcmeB`>y_Ie#?H*akT>}ayOAJ28$$sXLm@*EJ3}!KgDpeJWOepKo8>r8v9abeFf!y$ Ie#@r-07;Mx%K!iX delta 52 zcmeB`>y_Ie#xBUu#*oLwkk3%S&QQq1V9QW6IfnfZGY3P-WJz|T&2k*4*jRHJ7#WHu IzvWW^05I|lEdT%j diff --git a/crm-auth/target/classes/com/crm/auth/config/DataInitializer.class b/crm-auth/target/classes/com/crm/auth/config/DataInitializer.class index 92c18cdf99c40c40cbf79c81f571ede4efa48fa9..15682bb0b632af4d814d339e18dd772165cc227a 100644 GIT binary patch delta 87 zcmcblb4h2zYymz2hL`-T3^4+X3XBXE8k6_)sZ5?LC@aX%#;C%@sLH6u&Zy4AsKKZ? rd5ysS&ASAvS!9(NSQ%v*v1d&ASAvS!87ySQ%9qRTU<)){6N*7%}sUuA~>chsVehk z^3G_D55Xs6w_*7VcRO^llJ@X(N}C>YI_GjhSKKaWz{8A&Jn_l|RNT)FUrbpiqxLrj JKm78?#y_P8OSu35 delta 213 zcmXZUOKQSU6oBDBrdp6ob2HGQ*@z2pQUpP|w5+2TNCpZ9%)~)o*0=Vh#xS75FU z95_E8hZ7dUg7cIyjTA3wUU|FaUC`#keaI#>UDCCkj8*KX$ukf%2_!*uJXSCfH1H+9 zk>p#!kHE!~coEDL%mq~(sb*;#S?g}CbR(!ym(<TXIx+W#x*6p a)`AsVb`ZVMDYNH*$z!ySXq@=tOzr~jhCXuu diff --git a/crm-auth/target/classes/com/crm/auth/controller/SystemController.class b/crm-auth/target/classes/com/crm/auth/controller/SystemController.class index 2d3f25c6a245aec78ed9ceeccbdcb87e29c8bc80..f386298aa41d3fa4a0ee06975f4faa2818f37e77 100644 GIT binary patch delta 322 zcmXYrNlpSm6o%g~V4LcS7GdbFjw`iW98hoooM)kN!T~iMHzpEyE(~iA;I^*d0ZdqU z1vexZPrwB{gI%PPxA@-o{+ImSYPb6NWyJ(0)lb5*{jp)Vj7H&cNH{{z49HVGJFSGw zBI5cp?ajf2)N}>kJhX2$r(Mns*FAn9UO+C8n?i-#LrZaXQY+Yckr`!;rx+BOx-1QL^oCyNiIyxc&$x<5joM84@9{ zut}L-ruA1c7nwDfV?M-!qCionEvI`CDd_h^Mn7Az{$)cdtSD9~BH_Dct9J9)d}vi~ zP1g0Bl@D)tgH6R2+xpkau&W2`vZ@;Fu^-|f7-ND-Jep#Ll21!Mtx;y@-#Jt`^4l6`KApRCDI$iz6%DS% F{sZ82FUtS` diff --git a/crm-auth/target/classes/com/crm/auth/domain/dto/LoginResultDTO.class b/crm-auth/target/classes/com/crm/auth/domain/dto/LoginResultDTO.class index 5ff95531812058a3066d35571b344d52112d1eaa..bec710a6a96d68689db787c9e97df52f0bfe0f15 100644 GIT binary patch delta 64 zcmca0c0p`|6e}|aL&W3{tZIV%Yz$Fc4ABfR>laDd0Y~IVF%gXA>z{ub~ I`8}ru07TLZqW}N^ diff --git a/crm-auth/target/classes/com/crm/auth/domain/dto/UserListDTO$RoleRef.class b/crm-auth/target/classes/com/crm/auth/domain/dto/UserListDTO$RoleRef.class index c56abada833c137e12deb8fda4b2a06770aa20bf..9cd73369d70430bab222e2a92c8ccb80f650df75 100644 GIT binary patch delta 52 zcmZn{X&2dWn3laDd0Y~IVF%gXA>z{ub~ I`8}ru07TLZqW}N^ diff --git a/crm-auth/target/classes/com/crm/auth/domain/dto/UserListDTO.class b/crm-auth/target/classes/com/crm/auth/domain/dto/UserListDTO.class index 1e29409a4581c09b6140a0efb741b068c8ba6074..9ff5e3c6b1009e086ff54b7c1aaf1bc41227e54f 100644 GIT binary patch delta 52 zcmV-40L%Z%N6JUA=nVr10Nj(l4y+Lm1_0g)0N()M2LRy=0B!){llcw8vuY1J6b0P? K0RY>Rsv{r?IuhRi delta 52 zcmV-40L%Z%N6JUA=nWAM1_0a&0NnuI2LRs;0B!)_lc)~D0|)@(lj{wvvuY1J6b0J= K0RZ8Xsv{u%+Y-9~ diff --git a/crm-auth/target/classes/com/crm/auth/domain/dto/UserStatsVO.class b/crm-auth/target/classes/com/crm/auth/domain/dto/UserStatsVO.class index 4f73c3cf3f6e13d62d9925959111f71c967aa445..d0782c69347c46f1a0b475aa3654f99feb24bebf 100644 GIT binary patch delta 64 zcmdlkxm|L@MiyochN#KytbT(0Yz#4646zJx>Quc7|9U233Z*$-=CMm^l~{CU0T!+kBPvESqQ~10zE` TLm~qM0~e5$#E`;}#vlm*?9&a3 diff --git a/crm-auth/target/classes/com/crm/auth/domain/entity/AuthIdentity.class b/crm-auth/target/classes/com/crm/auth/domain/entity/AuthIdentity.class index c166579d0ad22aea24f7781d78c9b6024fc17996..f7af9ede5420c7873c51509478360bfa08f0d132 100644 GIT binary patch delta 64 zcmdm?zC(S(HV$SEhR(@7oF0PwYz*C83_T3J>claF&8+I)rcJf~~U$wHimm^m2wC-3C&*nEZaJf~;}10zEp T!vqEf1}-3LBEw{csSJ_;HpUP8 diff --git a/crm-auth/target/classes/com/crm/auth/domain/entity/AuthUser.class b/crm-auth/target/classes/com/crm/auth/domain/entity/AuthUser.class index 95b80f59d124a22f43c1c2e7888bfe2997227f02..083c20b51a464befac511d5879c100991062c8b6 100644 GIT binary patch delta 64 zcmZ4Du*6}51uruP!?nqLd`*JIFrwGcYn- UWw^`0z`zA$-D7yb@Q6VY0CIN{pa1{> delta 64 zcmZ4Du*6}51+O4K8^bj&hU*MB*coo}FvKw2ntYD;5HknEoypd`O`9k1)eDMVWng5u U&2X22fq@Iiy2tQ<;Sqx*0FhP`Q2+n{ diff --git a/crm-auth/target/classes/com/crm/auth/domain/entity/SysDept.class b/crm-auth/target/classes/com/crm/auth/domain/entity/SysDept.class index 92e7f8edb6e647704ecddb6061a671ea1bb895d6..e85bad1e23e651af215373d3d4463f6d3aafd8e6 100644 GIT binary patch delta 64 zcmbQKGgD{7R!(LPhFO!lxq=1x*%;<b0|OV3wTNK}!!ia*05>KO9RL6T diff --git a/crm-auth/target/classes/com/crm/auth/domain/entity/SysMenu.class b/crm-auth/target/classes/com/crm/auth/domain/entity/SysMenu.class index abddb0bf0d1da6d63a48d252c4ab31af78434209..c7a8eca1d7dae4611ad555bcc41b4dccb4564611 100644 GIT binary patch delta 64 zcmV-G0Kfm*P})$i8xI2r0Q!^h52g_h1_1mD0Q~^|2LS&J0B->RlPnLyvzHLA7Zv*e W0RZ^{0RR913IG8C0s#a81^^kj77+vh delta 64 zcmV-G0Kfm*P})$i8xIi=1_1gB0Q&&^2LSyH0B->PlhqHx0|)^ClO7MIvzHLA7Zv#c W0RaC20RR913IG8C0s#a81^^kV0ub5& diff --git a/crm-auth/target/classes/com/crm/auth/domain/entity/SysRole.class b/crm-auth/target/classes/com/crm/auth/domain/entity/SysRole.class index 76659dbab0a4a4b138d96c33e1618d54ee30f211..1af4b8afaef6afec141cf34bc1910e9332084785 100644 GIT binary patch delta 64 zcmZ3axkz(ECI>SIL-%BRP9H&jHilj0MrgF diff --git a/crm-auth/target/classes/com/crm/auth/domain/entity/SysUserDept.class b/crm-auth/target/classes/com/crm/auth/domain/entity/SysUserDept.class index 10d2373c760ac2aaedbdc911ef0a8209f5d9ac02..f00d4cc9bc9c9ec6160d4bc8a349df0d83175d46 100644 GIT binary patch delta 64 zcmdley-|9@Emmd@hV;oB*fa$B*%&gp7_u0$*%@+p7_=C2C%2VM?P diff --git a/crm-auth/target/classes/com/crm/auth/domain/entity/SysUserRole.class b/crm-auth/target/classes/com/crm/auth/domain/entity/SysUserRole.class index f58fbc815729fdd7010c1fe28cc3ab9c2fa8ae60..cdb32a875db3c159995be4ce38962a807efe790f 100644 GIT binary patch delta 64 zcmZ22y;^$16;@^rhV;p+*fa$B*%&gp7_u0$*%@+p7_=C2CqHF9wD}U-5jN2b21bT7 ThCBua1}-2gpP`VUm_ZT%9_9|z delta 64 zcmZ22y;^$16;?rhHimRAh75*Gc7`k-1}%o{$pUPLm^m17CtqjP*nElY2%Bgc10zEY TLmmSI0~e5$&rrxv%peH>0MrgF diff --git a/crm-auth/target/classes/com/crm/auth/domain/param/UserPageParam.class b/crm-auth/target/classes/com/crm/auth/domain/param/UserPageParam.class index e4758b38834c9f429b8494907580a44c1a74b8b9..ae81526b2fa06a77eecd7749113900d34a7bb574 100644 GIT binary patch delta 64 zcmew-|4)9yTQ+76hP=s#+1&*B*%%7A7z!DR*cpm>81xxRCjVnQw3(CR0lR2E10zE& TLn#9T0~e50#!$gf#UKd)RkjbE delta 64 zcmew-|4)9yTQ)&{HikSdhJ1zsc7{S827QL2$?oijm^m0qCVyaa+sw)FfL%0~fsvt@ Tp_GAvfeXkgW2j)LVvqy?IKB@P diff --git a/crm-auth/target/classes/com/crm/auth/security/AuthLoginUser.class b/crm-auth/target/classes/com/crm/auth/security/AuthLoginUser.class index a7c705b1a4d939cb07e98fb4245369cba2f585ff..f40d717292852299c08a9b0bdfe0fc89f8896841 100644 GIT binary patch delta 64 zcmca9byI4?3>Ib%hJ?v^tX6{jYz#?U49N^B>HCtHiiT)hD3%Wc7|jg1_Oqa$^4aO`gqSwRr{W9Cp!o21bTd ThI9r71}-2ggCUC{hd~km69EoV diff --git a/crm-auth/target/classes/com/crm/auth/security/DataScopeInterceptor.class b/crm-auth/target/classes/com/crm/auth/security/DataScopeInterceptor.class index 394d17da4ab5f8978e8d33e41ccb09feaca0f116..cf75a8796acb4a0906f56bd30bfa658e7a0a3770 100644 GIT binary patch delta 69 zcmZ4GvC3mZin}k0AmDDpn!|9kgIJevl;UybEzl*01+?_#sB~S delta 70 zcmZ4GvC3mZiFg8H*T8Cv&MN001$)4%z?! diff --git a/crm-auth/target/classes/com/crm/auth/security/TokenService.class b/crm-auth/target/classes/com/crm/auth/security/TokenService.class index c7cd22cae413156b007bfe1b31f2fd8a951f7e4a..047542f7ef48b5a5eff54ed8dd78420deba0dac8 100644 GIT binary patch delta 53 zcmZqGZPncn&Ckri$S~PZKvl|M$jHdV&dAKeaEg&-aufd{F%Cwcut0KAu2o`bNrqKPes*e} W72{?X0cAEehW`wVjI5J$#UudVwhrY0 diff --git a/crm-auth/target/classes/com/crm/auth/service/DeptTreeCache.class b/crm-auth/target/classes/com/crm/auth/service/DeptTreeCache.class index 76878f70cf4f88e2682c41a7401e707426e5189e..2fb2398aa639067a7d04152ea973370476455294 100644 GIT binary patch delta 150 zcmXZRISztA06@_Xs3en_0ZS_@8l#DYrL7G|u=hm7BS@#BxbOQG;~6*rhmb_Om%P+V zy{I8AmqFmGYB>^^j3hlmm(a;G5lorc%q0t!L09?4I!IJgZv{K{HV4Tui;AunodRdU ng{#d?a_14Zq-n%$-O1HXSo9e(=BJp|UztH1|7LtmM#KO`EoIvbd#1(o5-J#Sx&r@)c9zqj#U;aP# zVlS-etYgww3V$DXf)$G{&9o-N| s|E=rxS#jYixoPgn$XV5>Ww+Cn9x295S@6@6!(XRF4?rP!^5R4O3(cY`4FCWD diff --git a/crm-auth/target/classes/com/crm/auth/service/client/DingTalkAuthClient.class b/crm-auth/target/classes/com/crm/auth/service/client/DingTalkAuthClient.class index acb7721448fa29f0aeacc4cba20ebb05e6acb390..d681ccbc27fce47d5e61e9ffe820ec5601c90436 100644 GIT binary patch delta 72 zcmV-O0Js0rThd#wIvWEB0jiS_97GWh1_7)J0j&Y92LZ1P0b~KNlS>=Ivs4^m5gn@l e0RgE2u>b%75&!}K4gd%NvH%GIvjMdMw*VQ|^AW-T delta 72 zcmV-O0Js0rThd#wIvWuW1_7!H0jmM52LY`N0b~KLlad?40|)`IlRXb%75&!}K4gd%NvH%GIvjMdMw*VRO>=HEq diff --git a/crm-auth/target/classes/com/crm/auth/service/client/ThirdPartyUserInfo.class b/crm-auth/target/classes/com/crm/auth/service/client/ThirdPartyUserInfo.class index a7cd19f3a6e974b34cb62e771544e9300cdf3c7c..45abb40e56efa89fc61cb364c14a57e3be8f8735 100644 GIT binary patch delta 64 zcmeyP@JC?-2P-oNL-yo*tp0-hYz(-~zIW8A=(-86*MzHVs(- delta 64 zcmeyP@JC?-2df}I8$&i1Lk>eOJ3}51gAGIe0b0FpA@Y|GQZti6DNm0>x<3Wn7TYZ=xtKzQq+yp0SD3|tJ1 N44W9XFl=Lx1OT&495(;} diff --git a/crm-auth/target/classes/com/crm/auth/service/impl/AuthServiceImpl.class b/crm-auth/target/classes/com/crm/auth/service/impl/AuthServiceImpl.class index f1820fbadd5406b501948c9f31d25db6a45869bf..795375e3982e1bd6d190dd414e89216a274efc8c 100644 GIT binary patch delta 99 zcmeD8?DyO-S<+m9F@upoL_^ajE3qt5KPNFSUEe<`D>b>qnxBI)i;JP0!BT)RhM$cw zmy0ovF`u2WfQPY=v1s!WNhZe4XQWnfO6D*yGo~|UGG;RtGcYi4F)%WgFqSb^Fh~Lb D@sAdx delta 100 zcmeD8?DyO-SyGUnjWL6ZF_STioiUq-F^4gC^C?LtMl}J(d`1Ql4Nae{#Ii*FoW#6z zegCAa)Z`Lteh$V$E{1XjO9951&1a-maZ08$Ff-;c7BChu7Bes~a4|44mN1qvRxn5c E0M`Z<$p8QV diff --git a/crm-auth/target/classes/com/crm/auth/service/impl/AuthUserServiceImpl.class b/crm-auth/target/classes/com/crm/auth/service/impl/AuthUserServiceImpl.class index d8a13d9688d7e478c839514cad282d6c6c98cf86..566182d2bd004b2657493093b2104d91bd259b83 100644 GIT binary patch delta 371 zcmY+7IZFdk6ov0G#AKe2WE3)!LB&+s*eb-*B6jX;-1jXp?pxgBf`~4r6meB$7@;9Z3Ke|ecRgZ*T^x4qQ$cq79<9@K%F~q-JWyK?){N#!Ld2su2 zcbvF5OPuSK9*E7TVH#r?#{}237gabWB}`%3h8#vIIAqL%Dul+v14?1;f<#$ZWbmO{ z#xjp7?(&der=oi5RL@{r5jKupW0ZtLU^gVXL4?tl!QA4nN|hrj(Gwyvc10@Xe${>T zqg~s>wPZyzTF{P8bfKGoLGv9(fGna3V#fTp6uv)zH9l*<`pleuXwVf_vzXhPv@+# zQefm~V>IAmG-NblXEf$vaAq`_{6OfCAW+ndi_x6Xf}PQlhtZ1Bdh!q9{hJ#^BROsL y85kL*89}5hqbUO`qdcPmqY9%MqdJtQ!Ke-9fmG-++AuIMZ~ delta 207 zcmbPcH_dLtc_Bf5HbxmPMp;HVc1C#~24_Zv$?t>@F>^2~O}->#Euq55z|5$_2vnrT z#i-7x!Op13!>GlmJ^7%>esKYYbNsA~dR&b9j0Wrsmw6a=Gq4FT8co&~_T(|+Vl)Sd z-V|W8oZKMnC}YjYAn{~J*YjP=UpB9JIeo>G9lcN2&UiX!g_Q#1<_6J7PFraPMn*+O s5UI?l%D@V=R+rI`(U{Q$$}?rO0P{d9tQc(=7#O&KEL%o0UjP6A diff --git a/crm-auth/target/classes/com/crm/auth/service/impl/SysMenuServiceImpl.class b/crm-auth/target/classes/com/crm/auth/service/impl/SysMenuServiceImpl.class index a2d557cc924854c1f23cea710b7c1f62eff6a6fa..6de31f530ca57030e6d09d7b91a420df85d59f02 100644 GIT binary patch delta 151 zcmXZRISRr+7=Y1l44UveBq?l!fQ7ZCo!I6G-o>=;yN>&=h_#Tz*yI3S!A?QD2QLYd z;PG;DKB1SUCA8_-bTvKt#*7E>czt^OR~~CAh3Lbt0e0%divn n9Bhu76X*Etq*PqYYOA!xqCt}ZKaKvHvt+{s5ENH#+{u3cc1a|D delta 161 zcmXZSI}QOs0D$3tY*;fUYb6vC4H}J-Qmb(jH=y-?ENi^qMAQ;ja0~}<2n7kiS1efC xtTgNI@MJ-3%|n))y~5$3sZn>S-?I^I|J6ov00j5Gd@W}<=&aWW!q5Zn+#kf61NmZlaG1Q9_nt#6P*elVqL+!Ld5 ziEA|O`@W)97Ph{DGbV`5fphM650@MC2EDNwd#-|Vt3VC~qaZgQkSe)Lx2YB)5=|8mGYqDi`dMU#okSRywl zyVKv->hB4(_!O*w8vpTy)&#>Eq9W=QY^1wNxKl5!-ey#Vq>Mp?6oiaxQVbsK$=Ig~ zkYrT0cXS8*3JyU{{9ASMuwG!ZX5pCO1g9d-WSrxIH`|kDdc|;!8xglM_2Z6r6{qry z^uc5wWjx`Tr?mHYLigqL9+7|{3}Xai7)RQLGwzarDVREwnapASm%As6v9*BZOumZs ZzkCy0*g=}u#Q|Q7|1zWF6>s<;^#@XMYRLcq delta 388 zcmX|-OG^TA6vgjBrkTcx8H)%}rwGa*5+n*iiMB1GU9KyKAR-8K+b5`n{2^D-yDWQH z_OPrhd%xfB$Eq*TH)tlM&4qLBIX^CUz(3%RyKELY4cRABBCIoa~?$a@F?MlDnWwIX>IEc zX$oFI4eZBS%}N|aiDYTO+&fGhrZ9~tW)VYH&E?c00jn_PdTz6Ut-st3ne^5^j&uGg bF8=*1T;mSe#66zzs=rRu8E^Q&7g>J+Ipt=C diff --git a/crm-auth/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/crm-auth/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst index 12991ea..f2584c2 100644 --- a/crm-auth/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst +++ b/crm-auth/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst @@ -69,7 +69,6 @@ com\crm\auth\security\PermissionResolverImpl.class com\crm\auth\mapper\SysUserDeptMapper.class com\crm\auth\security\SecurityExceptionHandlers.class com\crm\auth\AuthApplication.class -com\crm\auth\domain\enums\MenuType$1.class com\crm\auth\mapper\SysUserRoleMapper.class com\crm\auth\domain\entity\SysRole.class com\crm\auth\mapper\SysDeptMapper.class diff --git a/crm-auth/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/crm-auth/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst index 632318b..5e31661 100644 --- a/crm-auth/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst +++ b/crm-auth/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst @@ -1,72 +1,72 @@ -D:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\AuthApplication.java -D:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\config\AuthProperties.java -D:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\config\DataInitializer.java -D:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\config\PermissionConfig.java -D:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\config\SecurityConfig.java -D:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\config\WebMvcConfig.java -D:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\constant\AuthConstants.java -D:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\controller\AuthController.java -D:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\controller\DebugTokenController.java -D:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\controller\ResourceController.java -D:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\controller\RoleController.java -D:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\controller\SystemController.java -D:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\domain\dto\LoginResultDTO.java -D:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\domain\dto\ResourceNode.java -D:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\domain\dto\RoleDetailVO.java -D:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\domain\dto\UserInfoDTO.java -D:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\domain\dto\UserListDTO.java -D:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\domain\dto\UserStatsVO.java -D:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\domain\entity\AuthIdentity.java -D:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\domain\entity\AuthUser.java -D:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\domain\entity\SysDept.java -D:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\domain\entity\SysMenu.java -D:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\domain\entity\SysRole.java -D:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\domain\entity\SysRoleMenu.java -D:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\domain\entity\SysUserDept.java -D:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\domain\entity\SysUserRole.java -D:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\domain\enums\DataScopeEnum.java -D:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\domain\enums\IdentityTypeEnum.java -D:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\domain\enums\MenuType.java -D:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\domain\param\UserPageParam.java -D:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\mapper\AuthIdentityMapper.java -D:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\mapper\AuthUserMapper.java -D:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\mapper\SysDeptMapper.java -D:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\mapper\SysMenuMapper.java -D:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\mapper\SysRoleMapper.java -D:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\mapper\SysRoleMenuMapper.java -D:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\mapper\SysUserDeptMapper.java -D:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\mapper\SysUserRoleMapper.java -D:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\security\ApiPermissionCache.java -D:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\security\ApiPermissionInterceptor.java -D:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\security\ApiPermissionRule.java -D:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\security\AuthLoginUser.java -D:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\security\DataScopeInterceptor.java -D:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\security\DataScopeTables.java -D:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\security\JwtAuthenticationFilter.java -D:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\security\PermissionGrant.java -D:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\security\PermissionResolver.java -D:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\security\PermissionResolverImpl.java -D:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\security\SecurityExceptionHandlers.java -D:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\security\TokenService.java -D:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\service\client\DingTalkAuthClient.java -D:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\service\client\ThirdPartyAuthClient.java -D:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\service\client\ThirdPartyAuthClientFactory.java -D:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\service\client\ThirdPartyUserInfo.java -D:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\service\DeptTreeCache.java -D:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\service\IAuthIdentityService.java -D:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\service\IAuthService.java -D:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\service\IAuthUserService.java -D:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\service\impl\AuthIdentityServiceImpl.java -D:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\service\impl\AuthServiceImpl.java -D:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\service\impl\AuthUserServiceImpl.java -D:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\service\impl\PermissionSeederImpl.java -D:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\service\impl\ResourceServiceImpl.java -D:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\service\impl\SysDeptServiceImpl.java -D:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\service\impl\SysMenuServiceImpl.java -D:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\service\impl\SysRoleServiceImpl.java -D:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\service\impl\UserQueryServiceImpl.java -D:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\service\IResourceService.java -D:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\service\ISysDeptService.java -D:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\service\ISysMenuService.java -D:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\service\ISysRoleService.java -D:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\service\IUserQueryService.java +E:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\AuthApplication.java +E:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\config\AuthProperties.java +E:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\config\DataInitializer.java +E:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\config\PermissionConfig.java +E:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\config\SecurityConfig.java +E:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\config\WebMvcConfig.java +E:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\constant\AuthConstants.java +E:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\controller\AuthController.java +E:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\controller\DebugTokenController.java +E:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\controller\ResourceController.java +E:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\controller\RoleController.java +E:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\controller\SystemController.java +E:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\domain\dto\LoginResultDTO.java +E:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\domain\dto\ResourceNode.java +E:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\domain\dto\RoleDetailVO.java +E:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\domain\dto\UserInfoDTO.java +E:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\domain\dto\UserListDTO.java +E:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\domain\dto\UserStatsVO.java +E:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\domain\entity\AuthIdentity.java +E:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\domain\entity\AuthUser.java +E:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\domain\entity\SysDept.java +E:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\domain\entity\SysMenu.java +E:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\domain\entity\SysRole.java +E:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\domain\entity\SysRoleMenu.java +E:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\domain\entity\SysUserDept.java +E:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\domain\entity\SysUserRole.java +E:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\domain\enums\DataScopeEnum.java +E:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\domain\enums\IdentityTypeEnum.java +E:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\domain\enums\MenuType.java +E:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\domain\param\UserPageParam.java +E:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\mapper\AuthIdentityMapper.java +E:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\mapper\AuthUserMapper.java +E:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\mapper\SysDeptMapper.java +E:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\mapper\SysMenuMapper.java +E:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\mapper\SysRoleMapper.java +E:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\mapper\SysRoleMenuMapper.java +E:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\mapper\SysUserDeptMapper.java +E:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\mapper\SysUserRoleMapper.java +E:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\security\ApiPermissionCache.java +E:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\security\ApiPermissionInterceptor.java +E:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\security\ApiPermissionRule.java +E:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\security\AuthLoginUser.java +E:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\security\DataScopeInterceptor.java +E:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\security\DataScopeTables.java +E:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\security\JwtAuthenticationFilter.java +E:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\security\PermissionGrant.java +E:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\security\PermissionResolver.java +E:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\security\PermissionResolverImpl.java +E:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\security\SecurityExceptionHandlers.java +E:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\security\TokenService.java +E:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\service\client\DingTalkAuthClient.java +E:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\service\client\ThirdPartyAuthClient.java +E:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\service\client\ThirdPartyAuthClientFactory.java +E:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\service\client\ThirdPartyUserInfo.java +E:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\service\DeptTreeCache.java +E:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\service\IAuthIdentityService.java +E:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\service\IAuthService.java +E:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\service\IAuthUserService.java +E:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\service\impl\AuthIdentityServiceImpl.java +E:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\service\impl\AuthServiceImpl.java +E:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\service\impl\AuthUserServiceImpl.java +E:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\service\impl\PermissionSeederImpl.java +E:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\service\impl\ResourceServiceImpl.java +E:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\service\impl\SysDeptServiceImpl.java +E:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\service\impl\SysMenuServiceImpl.java +E:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\service\impl\SysRoleServiceImpl.java +E:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\service\impl\UserQueryServiceImpl.java +E:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\service\IResourceService.java +E:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\service\ISysDeptService.java +E:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\service\ISysMenuService.java +E:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\service\ISysRoleService.java +E:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\service\IUserQueryService.java diff --git a/crm-auth/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst b/crm-auth/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst deleted file mode 100644 index cb4eb66..0000000 --- a/crm-auth/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst +++ /dev/null @@ -1,17 +0,0 @@ -com\crm\auth\service\client\DingTalkAuthClientTest.class -com\crm\auth\service\client\ThirdPartyAuthClientFactoryTest.class -com\crm\auth\service\impl\SysDeptServiceImplTest.class -com\crm\auth\security\scope\TestOwnedDataMapper.class -com\crm\auth\security\scope\TestOwnedData.class -com\crm\auth\service\impl\UserListIntegrationTest.class -com\crm\auth\service\client\DingTalkAuthClientTest$StubbedClient.class -com\crm\auth\service\impl\SysMenuServiceImplTest.class -com\crm\auth\security\ApiPermissionInterceptorTest.class -com\crm\auth\service\impl\PermissionSeederImplTest.class -com\crm\auth\security\scope\DataScopeIntegrationTest.class -com\crm\auth\service\impl\AuthServiceImplTest.class -com\crm\auth\service\client\ThirdPartyAuthClientFactoryTest$StubClient.class -com\crm\auth\service\impl\ResourceServiceImplTest.class -com\crm\auth\service\impl\SysRoleServiceImplTest.class -com\crm\auth\security\scope\DataScopeIntegrationTest$DeptQueryCounter.class -com\crm\auth\service\impl\AuthUserServiceImplTest.class diff --git a/crm-auth/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst b/crm-auth/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst deleted file mode 100644 index 422db7a..0000000 --- a/crm-auth/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst +++ /dev/null @@ -1,14 +0,0 @@ -D:\code\crm-backend-matt\crm-auth\src\test\java\com\crm\auth\security\ApiPermissionInterceptorTest.java -D:\code\crm-backend-matt\crm-auth\src\test\java\com\crm\auth\security\scope\DataScopeIntegrationTest.java -D:\code\crm-backend-matt\crm-auth\src\test\java\com\crm\auth\security\scope\TestOwnedData.java -D:\code\crm-backend-matt\crm-auth\src\test\java\com\crm\auth\security\scope\TestOwnedDataMapper.java -D:\code\crm-backend-matt\crm-auth\src\test\java\com\crm\auth\service\client\DingTalkAuthClientTest.java -D:\code\crm-backend-matt\crm-auth\src\test\java\com\crm\auth\service\client\ThirdPartyAuthClientFactoryTest.java -D:\code\crm-backend-matt\crm-auth\src\test\java\com\crm\auth\service\impl\AuthServiceImplTest.java -D:\code\crm-backend-matt\crm-auth\src\test\java\com\crm\auth\service\impl\AuthUserServiceImplTest.java -D:\code\crm-backend-matt\crm-auth\src\test\java\com\crm\auth\service\impl\PermissionSeederImplTest.java -D:\code\crm-backend-matt\crm-auth\src\test\java\com\crm\auth\service\impl\ResourceServiceImplTest.java -D:\code\crm-backend-matt\crm-auth\src\test\java\com\crm\auth\service\impl\SysDeptServiceImplTest.java -D:\code\crm-backend-matt\crm-auth\src\test\java\com\crm\auth\service\impl\SysMenuServiceImplTest.java -D:\code\crm-backend-matt\crm-auth\src\test\java\com\crm\auth\service\impl\SysRoleServiceImplTest.java -D:\code\crm-backend-matt\crm-auth\src\test\java\com\crm\auth\service\impl\UserListIntegrationTest.java diff --git a/crm-auth/target/surefire-reports/TEST-com.crm.auth.security.scope.DataScopeIntegrationTest.xml b/crm-auth/target/surefire-reports/TEST-com.crm.auth.security.scope.DataScopeIntegrationTest.xml deleted file mode 100644 index 00fc8fb..0000000 --- a/crm-auth/target/surefire-reports/TEST-com.crm.auth.security.scope.DataScopeIntegrationTest.xml +++ /dev/null @@ -1,88 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/crm-auth/target/surefire-reports/TEST-com.crm.auth.service.client.DingTalkAuthClientTest.xml b/crm-auth/target/surefire-reports/TEST-com.crm.auth.service.client.DingTalkAuthClientTest.xml deleted file mode 100644 index 0dc21ab..0000000 --- a/crm-auth/target/surefire-reports/TEST-com.crm.auth.service.client.DingTalkAuthClientTest.xml +++ /dev/null @@ -1,103 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/crm-auth/target/surefire-reports/TEST-com.crm.auth.service.client.ThirdPartyAuthClientFactoryTest.xml b/crm-auth/target/surefire-reports/TEST-com.crm.auth.service.client.ThirdPartyAuthClientFactoryTest.xml deleted file mode 100644 index 6a6515f..0000000 --- a/crm-auth/target/surefire-reports/TEST-com.crm.auth.service.client.ThirdPartyAuthClientFactoryTest.xml +++ /dev/null @@ -1,62 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/crm-auth/target/surefire-reports/TEST-com.crm.auth.service.impl.AuthServiceImplTest.xml b/crm-auth/target/surefire-reports/TEST-com.crm.auth.service.impl.AuthServiceImplTest.xml deleted file mode 100644 index edb82e0..0000000 --- a/crm-auth/target/surefire-reports/TEST-com.crm.auth.service.impl.AuthServiceImplTest.xml +++ /dev/null @@ -1,84 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/crm-auth/target/surefire-reports/TEST-com.crm.auth.service.impl.AuthUserServiceImplTest.xml b/crm-auth/target/surefire-reports/TEST-com.crm.auth.service.impl.AuthUserServiceImplTest.xml deleted file mode 100644 index 8be2092..0000000 --- a/crm-auth/target/surefire-reports/TEST-com.crm.auth.service.impl.AuthUserServiceImplTest.xml +++ /dev/null @@ -1,67 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/crm-auth/target/surefire-reports/TEST-com.crm.auth.service.impl.SysDeptServiceImplTest.xml b/crm-auth/target/surefire-reports/TEST-com.crm.auth.service.impl.SysDeptServiceImplTest.xml deleted file mode 100644 index f300687..0000000 --- a/crm-auth/target/surefire-reports/TEST-com.crm.auth.service.impl.SysDeptServiceImplTest.xml +++ /dev/null @@ -1,69 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/crm-auth/target/surefire-reports/TEST-com.crm.auth.service.impl.UserListIntegrationTest.xml b/crm-auth/target/surefire-reports/TEST-com.crm.auth.service.impl.UserListIntegrationTest.xml deleted file mode 100644 index ebd1666..0000000 --- a/crm-auth/target/surefire-reports/TEST-com.crm.auth.service.impl.UserListIntegrationTest.xml +++ /dev/null @@ -1,74 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/crm-auth/target/surefire-reports/com.crm.auth.security.scope.DataScopeIntegrationTest.txt b/crm-auth/target/surefire-reports/com.crm.auth.security.scope.DataScopeIntegrationTest.txt deleted file mode 100644 index cac32d9..0000000 --- a/crm-auth/target/surefire-reports/com.crm.auth.security.scope.DataScopeIntegrationTest.txt +++ /dev/null @@ -1,4 +0,0 @@ -------------------------------------------------------------------------------- -Test set: com.crm.auth.security.scope.DataScopeIntegrationTest -------------------------------------------------------------------------------- -Tests run: 28, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 3.906 s -- in com.crm.auth.security.scope.DataScopeIntegrationTest diff --git a/crm-auth/target/surefire-reports/com.crm.auth.service.client.DingTalkAuthClientTest.txt b/crm-auth/target/surefire-reports/com.crm.auth.service.client.DingTalkAuthClientTest.txt deleted file mode 100644 index 704132c..0000000 --- a/crm-auth/target/surefire-reports/com.crm.auth.service.client.DingTalkAuthClientTest.txt +++ /dev/null @@ -1,4 +0,0 @@ -------------------------------------------------------------------------------- -Test set: com.crm.auth.service.client.DingTalkAuthClientTest -------------------------------------------------------------------------------- -Tests run: 15, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.749 s -- in com.crm.auth.service.client.DingTalkAuthClientTest diff --git a/crm-auth/target/surefire-reports/com.crm.auth.service.client.ThirdPartyAuthClientFactoryTest.txt b/crm-auth/target/surefire-reports/com.crm.auth.service.client.ThirdPartyAuthClientFactoryTest.txt deleted file mode 100644 index e7e5ac1..0000000 --- a/crm-auth/target/surefire-reports/com.crm.auth.service.client.ThirdPartyAuthClientFactoryTest.txt +++ /dev/null @@ -1,4 +0,0 @@ -------------------------------------------------------------------------------- -Test set: com.crm.auth.service.client.ThirdPartyAuthClientFactoryTest -------------------------------------------------------------------------------- -Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.029 s -- in com.crm.auth.service.client.ThirdPartyAuthClientFactoryTest diff --git a/crm-auth/target/surefire-reports/com.crm.auth.service.impl.AuthServiceImplTest.txt b/crm-auth/target/surefire-reports/com.crm.auth.service.impl.AuthServiceImplTest.txt deleted file mode 100644 index f56ace5..0000000 --- a/crm-auth/target/surefire-reports/com.crm.auth.service.impl.AuthServiceImplTest.txt +++ /dev/null @@ -1,4 +0,0 @@ -------------------------------------------------------------------------------- -Test set: com.crm.auth.service.impl.AuthServiceImplTest -------------------------------------------------------------------------------- -Tests run: 9, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.025 s -- in com.crm.auth.service.impl.AuthServiceImplTest diff --git a/crm-auth/target/surefire-reports/com.crm.auth.service.impl.AuthUserServiceImplTest.txt b/crm-auth/target/surefire-reports/com.crm.auth.service.impl.AuthUserServiceImplTest.txt deleted file mode 100644 index bf7b302..0000000 --- a/crm-auth/target/surefire-reports/com.crm.auth.service.impl.AuthUserServiceImplTest.txt +++ /dev/null @@ -1,4 +0,0 @@ -------------------------------------------------------------------------------- -Test set: com.crm.auth.service.impl.AuthUserServiceImplTest -------------------------------------------------------------------------------- -Tests run: 7, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.336 s -- in com.crm.auth.service.impl.AuthUserServiceImplTest diff --git a/crm-auth/target/surefire-reports/com.crm.auth.service.impl.SysDeptServiceImplTest.txt b/crm-auth/target/surefire-reports/com.crm.auth.service.impl.SysDeptServiceImplTest.txt deleted file mode 100644 index 85d71f9..0000000 --- a/crm-auth/target/surefire-reports/com.crm.auth.service.impl.SysDeptServiceImplTest.txt +++ /dev/null @@ -1,4 +0,0 @@ -------------------------------------------------------------------------------- -Test set: com.crm.auth.service.impl.SysDeptServiceImplTest -------------------------------------------------------------------------------- -Tests run: 9, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.119 s -- in com.crm.auth.service.impl.SysDeptServiceImplTest diff --git a/crm-auth/target/surefire-reports/com.crm.auth.service.impl.UserListIntegrationTest.txt b/crm-auth/target/surefire-reports/com.crm.auth.service.impl.UserListIntegrationTest.txt deleted file mode 100644 index b49d493..0000000 --- a/crm-auth/target/surefire-reports/com.crm.auth.service.impl.UserListIntegrationTest.txt +++ /dev/null @@ -1,4 +0,0 @@ -------------------------------------------------------------------------------- -Test set: com.crm.auth.service.impl.UserListIntegrationTest -------------------------------------------------------------------------------- -Tests run: 14, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.532 s -- in com.crm.auth.service.impl.UserListIntegrationTest diff --git a/crm-auth/target/test-classes/com/crm/auth/security/scope/DataScopeIntegrationTest$DeptQueryCounter.class b/crm-auth/target/test-classes/com/crm/auth/security/scope/DataScopeIntegrationTest$DeptQueryCounter.class deleted file mode 100644 index 83f78ef1118a60635b979dae15bad073719c1a19..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1932 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 b^iF_}@G&VSDR=4r09DemBz=NatfBA^O}oaH diff --git a/crm-auth/target/test-classes/com/crm/auth/security/scope/TestOwnedDataMapper.class b/crm-auth/target/test-classes/com/crm/auth/security/scope/TestOwnedDataMapper.class deleted file mode 100644 index 6d0b7ab51ecc8477f4a0447fcbdd3607e7aeda71..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 337 zcmb7=JyHTe5QX1>xPS?vr?3yOYG7GLPy~2^-k}SI+S!?!A1$tCzyUmz<**u21Q2w0 z^uG6AfB$?P06gKY!a#wvv!sJ1&S^_gbPgu%DQf41-X*5xXD91dPP}06B~-XknCb!Ou^j_57Ia u3gBZexTsA1Tq{ghE(a}drY-*WXUaYtBb8#YrJ0+^blvM)JneuGmW` z{}oi>qRa!uV~P*pb0~U7E6E#;1B9Y@kani0=k)2Gp6>bWkDq@5@FDJ}5kp)s#C_Rvovkdp(zsTCUOM-#PA~-ZXqecX`wDbklLUUh~EJCqhu?-CoD= zd2#ho3X@1_NN15jmf>c^+FvrQbI)I{`9Y(>n*;8XzH`X!?ViPOvHI9}V(5Wyb@WzX zo4)1P`c60~3e(eBT!K(_YmmP7l5{9G2ZIM0wJ>b?5&0c%08M{#o{;7eJ|<7I|i zoBQRXhc;QMk7`}lofUuQZ=h>8-Cz&hKeelgJ^D@0_;0m9G8@e3|CYr1Fsb*V$Y|lJtGelyT)yg zO9b-o|Lt{C@g77hjL#W&MYVGfCFRahIOviyBq~mm&Ma58Y`!0K8{DlMjSfj>tBz@O z9vQAB=Akg*A6OnkIa+&Opc+s}Cwf$;2y8hDrY>ZpE-MzpjTf$I4D(T+j(P*XX6|wS zz-c}(M3MBl>oI2ke<%L8^0cHp-9gg)3y4AXC?M1}M;WEqGJc)LB_)}OIhTJMP}>+4 z^+*j3i^b{c6N(rnMf>b0^6WS~<#Gu9aMVkvvlynyJx`irI3KE1B5fsFRfqQGL*+Zq zwvtE%J+r(ieMk)(8iN+}+Y>{&<^-@#{l zeU1$K0_WJ5)Y!kG-uyML()w;64e#Jxnh`GE!~0}ijIQCj^kGqY5SKE+Jt0SewcxfW z`6h9L#)WV#Lw*kQ*N6HWL;X!+^#SSUlVlEL2xI~j7?ArQK!o8c(&jCC3&y1LW%`Ps zP8WWJwswM7V)zw{-;*RJolOej%#e=F_ce!(O{0X5XkD0{U^EeDb5jXDbtZJ{4Cw9C z(AyHaj0#y3M|O?ABA`>mdgcU6Ohx)oB8$8r#gKFYw{V->5Fqy`o+6?-0-0M|Kf&d= z3Z^Gvminqg-*ecJ1Vx1J&?qLOkcyEQBoMi>OaC$K;bZx|OZI>?v6;kO>?8drxBM!s diff --git a/crm-auth/target/test-classes/com/crm/auth/service/client/DingTalkAuthClientTest.class b/crm-auth/target/test-classes/com/crm/auth/service/client/DingTalkAuthClientTest.class deleted file mode 100644 index a3376afe41cd8623aa093d40c7d9ea04cee85b4a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20782 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 G$^QqD2}{uc diff --git a/crm-auth/target/test-classes/com/crm/auth/service/client/ThirdPartyAuthClientFactoryTest$StubClient.class b/crm-auth/target/test-classes/com/crm/auth/service/client/ThirdPartyAuthClientFactoryTest$StubClient.class deleted file mode 100644 index 88c698204ff2b3e0069deba5941dbed8d0a70bd0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1134 zcmb7D+invv5IxSNyV<5Kg!`pXN2X`err0v0?j*{PG2{1=;bC(QuoneFgBEEWFc<+MiXe(sRC&W)Rs&5P>vO6S~uv#!5)imCExc{atQ` zWhy-ulHo8k&-&6Qr~tn%P9oR8$CaFOQKB$p$DZRGF>mne35l1=ssc~qC6GF+u~mL7l%!!=x|*}`+O z%x+aa!TCUo3Gz}Be4HTWCkazTh8ws^S+;nGtmWo@#md_wteviZa)Ocji;;_U+#<{= bqjdsE<92fN2JR$w6GgHfCArwdJ$OF>b(r)d~6#rd7R>D>h6^m~LG=RFk#YQ^isc8eKM5uk?Cb=dH$!@y4LDRR^T17wl zrMA;)`>E5;lxk;ys?+J`PXCMs?3eaG==9vph6D{5+Q}rl_uP9P_jk_u-J9S3dGHH> zcHHuy4CN9kWUN3XL(QlVoKvpKTrz^IK(X!*+(MD7UjD^!|ANkJJSqN?|-zsNJKdlo`}pR;V8r5Tyum}iz~Sn zz8vOBn=-C+rYue8mepgLhS`%7d(ejC5?+wu!wG8VqChO-mO<7mzi!#89_9noL2ZTk z?1~d2i$R;S=%#Zeh~X;2MubaviJ>946Nlo$RIcR0Rvb!m2Ua=om*0afbW7-w(TkG| zYx4c;*KHoEfb>70z zUEd<|pp0`EVpvC!_fdA$DDN_Ko7kJ8W9Tdr^0I5|RR-UJjFjG5;?SYYc2Q;-RtKm6 z`%{S!H-n;osA&QQHSdsWYGUjPE9{s?faoV!gb1X!MJsC-<#AWqoQ*`7e_>g94f`4?~uvO8; zgv(}!QbtpBEl@^NNzLY_!|eiUilkwY>2A$R#?^E`Q7^4p;dBKZ`?I%iW~T4Y{`76; z`t7-U4>MohdOSTjcjsQ_#*dlFpED2cWPbQ&_Qv$w_mjl#c|7bGL{>1+vdg>IZTBopkIPaj2VgTw;jScjvr%UW6y54Pe9JXYQx(=(c6(hJnL2RJ=u8I&j-$o}_ zm}KRMkd@UW;q<&nYoZon^s3FrI6;oY#$ObH<>Smo7-)Tfy}%3()E=3_v0u?v+g{r- zgU%_OqQQLxrZ6yt!GgfI(*Fw3{dW}_=%U|5!0ti|cH=08-;QQy19e%C?grMARD{in z1v^^f5w%DPA{&S3DS)qPaa?aH@SDv@Q$a?m9IHTr6e>tfr{5&Km*H)gu1tbOZz6*> hf%Pulqwj|#*+?UaO5!5|@(Mo2CzVyWjvJUj{lDluUU&ci diff --git a/crm-auth/target/test-classes/com/crm/auth/service/impl/AuthServiceImplTest.class b/crm-auth/target/test-classes/com/crm/auth/service/impl/AuthServiceImplTest.class deleted file mode 100644 index acd7acd01f367393ab01c912dbe3c34aaa7edf57..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16530 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 diff --git a/crm-auth/target/test-classes/com/crm/auth/service/impl/AuthUserServiceImplTest.class b/crm-auth/target/test-classes/com/crm/auth/service/impl/AuthUserServiceImplTest.class deleted file mode 100644 index fb08e874872012ca8fd92d4002e04b419e1c9bfe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10916 zcmbta33yahnmvC4DX2UkL_|?Qgdia(C2FG>pba5FGzpl5C1^{(R9=#TN>y2}3Wz%@ ziY*8VHtzd^t>V(%p^|_yJu}WskF)Pf&rI7Sz%1=d&%Slfxo@d@m8uF&Prk1z@7?9! z?)jH{Z+-u#1D^m`CP)1!La`5HG>k=wplqwYT@QryNLOHO`&J{E5R@zpMM84}QTl!DvsQ zU61yJI-sG7EYRhU^H$78tsPKXrwdLm5h^WG~&m26pzCM0sQb`k`l5^u)MM% zR|3-@w`e4gMWDJNqfbjB9*T5TD;>%ObCfi}cuzo2Cb|P1(H=b%2^f(?DA60JVbglk zi2E@G7y2+&!$r7Quy}L@dW?kLp(pe}tKJ?q>LZ=eHAa}m5KK@8Ot%Vl^J-^|6#i{n;62TRtDBjX*D!o@4vBY>x#|$54YPbxu1dFm}am@Bmkc;0F3#YBs zVmH>at<^9I9G^2x5U^xTTl-wotH)usz~8Q$hK(mBOofKIxI!>dEtrzh?h;gF6YsGQ zn3l>ORqaP5=KD~kVF9kBIto8#OaY=ZuJ;%_qVa8k1f>on6QOXR+2{-t`-GFyWIdZq z!8p@MtO^<74#AR253X!K@h*^qwA?ZCH~29b#bfDu{3|}|$0A(g!?hZ&!&j(U2CNOy zNEa=*T@NRXwVi?sDsP_ep{Kg3(_~z);RY-bjHPh(lL`w~b5At5 zEtH4`8twmrF*~}Ah~P%Atj_%TmS?*&%tW%ioof_W8|jMje~a^8U5eFM<3qiMn-!Z1 zFPlP>s8oV{n~g*=9#M#D(9nn`x~JJ|D#*Klnv)k$^o`6Q+I}5w^`Tiq3t9!!y#mz4 zyOKQ&C5?K55i(Bb6zh>*!Ia882J>M9dn`Lz(5sDx9q5%}6WV;(tl>7?F1S43vSkTH z06D9s7}s}@aiwG85v1Lfvzi+iqpQn_$2&A^!Pgn^^@zDc#jVRIuvf9PWoxVf)+)4X z2!a@~Y-_g*>g)iQvy9HX0#rvXaybN@8oJO;$OQFpSP-tvUYm1866L;BRw==lX~Yv- z?PR0JLV?!qcyx!tG1C-#Dy(;ctd^WCc>A#x+k6OX=mFt+SzapkWJU^FyWHl{+N~!n zVv!YG^)4sapEvsgV%M~riMSrLIb_6VaE}SDb3vkFXF99x3=-WcH?ByUp$PM2T|6F* z*SXDp#9{i7(2&G-!Ik;-%+FS!h0OYh%JM-gP~G5lYBy7jO3}6;WByLH%+U_Rhr34R z=OFE?3JEK$Gs9aiW-;*N20!k_eLmc;V(0^c$(fK;A4wQp3dd6`>%E@mw9|*Pb zcvx_0w{BX&eQkVQJj$${=-n7fbZ=1cS8%IWslw4cKhE3*vm;zu+eZZBPo)OWK6K>l z;Uh|vJsKXvHy8{kN+TCZ?=q-qf^`W&DOiz5hVz7o3VM4r?86hZ6N8?c>)pUNFWb4C z)W8^%J&=a0!2u0V;wehIof)CCw<)Tus&Hw$!qm#!a+8Bfe>FIy;c0x6DJx=duHdQ> zQN|(|3R(qVV1uIWyfhLU7Vl>?Jd5WTsBGRN*2m4q3UqD+8l9#W9L{VXUSOT8ys2=- zN>Fx$EPVqT<5tz7GVMzmUdAgFE*WDrNbs!oE}Sde`BJW)Uti8jz0-%+1=o-6<;{i} zO~!*pQ#4Vxlfm8N=+p70hPPCqKT!p9wXW6>(@$s|(eO^XOXa$TXmndLR*qtHDpzY9 zhxY|VOO`nG3;gawsrxXc6yHUk563j5(C=0>=`_RHQ5G|6@>wL~x2}zHTAX!ClOq@g zaomR!8a~0NM3QS4tEN9!ZV;3*UWd9ON>xVhYrRrgrIQE2p7#uU8_&O_(D*$T*53J! z4tbEJDu-Xu@T;n9C<&QO$#B?*UlYvD626e{mEtq}hKBFsH#xh5HJU=$SM02KK1d~= z{P->WwhzCf;dk+Sf=j&q;+8PAdMpv8kB;k%#;st^THdRsH^95TmOa;U*gw$lhxjA9 zd?M6i(9{c6K=$$*-9MG2f1=?}mC1ZTij<5S$`F69;Vma46Je<$}t9KG@QlX(mISGVO9*P>>6bXYqhaB)-xZH0V`iW=84DYJ`~?51;otD@3IVEx zg^DYH=cpkcS1%nx=|AybKK!?a|H1zX=H+lzWnHd}f@uuZDv_FXJDH)vz4eirNblM> z4=hw(&6lZ0Pv!M0)uk&(*1_M!&lvH91#3k<2zr)NnU0FAlOk>%q?ms1o#6UYPUv$3 zY>>Rfr+D!kX0dnb&mT2Q#V@5k(KMML6CE?U&Krtsk2_?Ke6lxZ?q%ITM^R1Lj{9*~7-yEVW%ik(DriA>StLYd0)Pi?^kv$BS#(YY>e zbf{9ms4kU@WtvYe(d1H@F1RS;Em^cFL1!q;waV<+v+l=a;!CR$te%l9MV; z76{KWCf04LZ)vS>TD@gu-MZEm!6XmdT8sp(wNL^+xmuG&at*h;8EdhZvE6l!0`YUR zntz>w9FHjS7Be|$^(0O=3XhP9fqZ>SUGtXum2{e$DHKaxtEhJ>?(r>5%(@En-1%nD zUFxB3rRC+-^zh~+&+dAR4Iwk695WJ$Caell1^KL0qoAxNWHr`D)LEzMGTAq#mX)Tm zBR5M;$)0v2ZXMoPl(-Mwpz{obOq|9siS7`&T$^1ypR4+?cBbT^js_d_p7svCR-LDE zQ=p0x%M?5^wZqVPoU~H<%dJUUlO!D2nv8{re;(F`0xJwAaf8W^W7KicdZKvtsAKCW zkupb;$}mu6E0~Q?_sEpP=fn+VOmmAmr>wHX5JGA@wnO%E__8dO*>XD(nyN3?Eo8DT@x@!5X;m4mkJ^136 z$M>E}9XgfTH?;rB(}!L@H8^DNU_b>Jeu1aIKfM$9<{ru74R~|im z=*aM%V~WE2&kVhABtv?{WK~gSCa)Sg{xoN%r=5Q8VSCq?nNQKq9(wl72OpgJ^wr^A zAJ{6KK0Yw?#z)T35YJdHvFlZHOWdFlf`(ZW=~!uWBx944!>--_U_4hISu0`{@4R=RY0Z_ZlJODjH#R>_A3s$6Yk7ji@?lahmq2^e2L`^?c#PM@GA|Ay2D({sy57;juqFM5DSKQu$xjZajAZo z7N39^djEjE&|e^Rm&YF?ZiXL!Yk1GM=-Oc`QdD?>>cv_GBeXxg z-7|d>B9czT!F_1m)qDHdeMjS6s_1>9o8ZORE%s3#hRulk&a7*|#w1n~m(C=%j5D zEmH1V?nzuuT4eHL$A}w@LPQEkb~RJ@(qP!Rr1Q5}d;e7-Rb@|i!*WaZ-ONIT2`+Gf zAj_SC5wR}Q>eN$*ay=?x4|iikc7jo(-ZZiUQF60colcjo8rHWE@vzC7Q+*|ZIlWYcS^hih8Fe~h1 zi_tG+vL?1N4tj_G{GB$-(dT;4036Edh`EJ{xw=fcXqAU}`XUc&(kWeKD48@?9#su{ zG%>8VZ>YD&HR-V4_NligH2FG8%J4l7e$tO=@{}eA2_4bN-dsUMjiIfS? z(6#zV#IR2i42GvSd3KR^6PJ!uHTloxee$+*>%)*c>ajj?IPzfMCk&-?bC8!0L_T>> zFmv>wEaPp&VHOY3ig=My!h6=may>+D;9C(E@|~qR-b5%4y?`tfy@m=U%`M@9){VoKFGnLwRM6u~o+)AMv3`zRGWQ^ZQD3P1xUpfOFA zqixC4RM&7!kviFQOb{hiH7_uT$<*Mgh6PiwFomo8uvl@hU;1%l5l(_y-L#+|tBR1L z)H;mAttdw`*RaK6Kh-Ad8V>WMUT&rWMe6L-Vcx(urP55Yx+R6RC$YXC8;f`(deZ>D z2J}PE;$^G25i_8BRGjJXfZUQc)*)wcnyUt2fCNM3(LUUH67ljK<#(rWPak%vm)(7M zbmN#4C~7OF43D>@u-`W9!4wXkM71Rp^`>ag_v6K4ujVtk;RQNT%A2{*0Kgiiw(wvjeyGG#3v*QLci?14|a7gURdu1eWk(YZI@wZeouO{I@e1@?XB0_oQYYZV zQ}}%gZl5ja!yli-w0`^<2k_+wDg1Ek2@JIr58yP=(l%xQf5-oQ_g&UQSRPz#g}cQJ8NeQz^D&z9aa_&l+JFOS$5TZ0LEifv!b`l0 z`VfclIiA4}@J;*>&syfSz5ENu1G{-4xn4F9*&7`M*)5ycq9XVR?6=YMn_bi6JqBhK z47TQ)UTnQm_~|cX>5TnpbCI-xGqKZl<(FuJmuZ4m8JS<_4b>ZT<2UKlZ+VckwJ?%y zqdK>z)!FMfL{qLhHj>2FB@Z%edF=@FSs{^a|9zKS-lNDz>Bk>3@_fW!YJBVwx2dqW zjIVM>THGCu^_LYAcf=AnVi%HbD#-!IC|!!u4KgmCz*2nTk!)FE$+nag39B|I&#rbP zn?bW=yP}M-+)sfbvy^u7zSqNPhQmpxL`>PzPVy`f&q?0$bQ^Oc$;Zz@p7p3hzL8G~ z)pK&BcLIqDDk&++qeG{M$($S={Hh9enCxcEQc-I`RdK(JSE+h^!-9U9Bp47@JpFP} z5uawLrzYU~KOk-`Bip`kCpV7?a4_vCyW(i=s_yXyc5a*O)mTZ-6 z9v8P;!feSH*sls%wx}Yj$q}x6Q0BHBlX(pbs!n22pHwbTGT0T@L{=fd?S#tLP=-4^ ze9I*&G4_q)FC*`iIHb(4N@j=l^`xz=JKWgJ7n;<7hl5It@-3n_H*}H?ErrW@Sgq_mMzGl{nchSPT z)-oa@cu#US5#rowk?dHF=$MdATib$XjxxWW2m1 J@5=j__J38uq5%K^ diff --git a/crm-auth/target/test-classes/com/crm/auth/service/impl/SysDeptServiceImplTest.class b/crm-auth/target/test-classes/com/crm/auth/service/impl/SysDeptServiceImplTest.class deleted file mode 100644 index b4c01bc310ac345da0e9c349b25aa69d51000cab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10964 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

qh# zlB&z2@$;bZvZTfl(v`+3haY?Rv!|qS3?!zwMX0^J&r}cYQlgq>tSvxPvmmP35Y-%r z>H>)BB8X}(OuPpFO2WnPXJeg0!KZA0o`ipuM=hvoLr8nfN!jn92V)~ z&!Z)$AK_@ka2e&{@8L4q!#}{q zCA5C5Y1Il5JZ$f<=KuA>6SG?Y0U6)L|Sj>(QW;hFB3feNI+ qj`Lv_vmF;WE_BRA$#_inc5$tvhKg|jy4G通过 {@link WebDataBinder#setDisallowedFields(String...)} 在入参侧全局 strip + * 服务端裁定字段,防止客户端通过表单伪造 createTime / updateTime / creatorId / updaterId / + * deleted / builtin(ADR-0017 Route A 安全替代)

+ *

DTO 上有 createTime / updateTime(出参展示用),但绑定器拒绝从表单填入。 + * Spring 对目标类上不存在的字段会静默跳过,所以全局列表不会引发绑定错误。

+ *

新增服务端裁定字段时必须同步更新 {@link #DISALLOWED_FIELDS} 列表。

+ * + * @see com.crm.base.domain.dto.BaseDTO + */ +@Slf4j +@ControllerAdvice +public class GlobalDataBindingAdvice { + + /** 服务端裁定字段,禁止客户端通过表单写入 */ + private static final String[] DISALLOWED_FIELDS = { + "createTime", "updateTime", "creatorId", "updaterId", "deleted", "builtin" + }; + + @InitBinder + public void disallowServerManagedFields(WebDataBinder binder) { + binder.setDisallowedFields(DISALLOWED_FIELDS); + } +} diff --git a/crm-base/src/test/java/com/crm/base/advice/GlobalDataBindingAdviceTest.java b/crm-base/src/test/java/com/crm/base/advice/GlobalDataBindingAdviceTest.java new file mode 100644 index 0000000..f31d37f --- /dev/null +++ b/crm-base/src/test/java/com/crm/base/advice/GlobalDataBindingAdviceTest.java @@ -0,0 +1,107 @@ +package com.crm.base.advice; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.springframework.web.bind.WebDataBinder; + +import java.time.LocalDateTime; +import java.util.HashMap; +import java.util.Map; + +import static org.junit.jupiter.api.Assertions.*; + +/** + * 全局 mass assignment 防护测试(ADR-0017 ticket 02) + * + *

验证 {@link GlobalDataBindingAdvice#disallowServerManagedFields(WebDataBinder)} + * 配置的 {@code setDisallowedFields} 列表能正确 strip 服务端裁定字段, + * 同时不影响正常字段的绑定。

+ */ +class GlobalDataBindingAdviceTest { + + /** 测试用 DTO,含一个服务端裁定字段(createTime)和一个正常字段(builtin)和一个普通字段(name) */ + static class TestDTO { + private Long id; + private String name; + private LocalDateTime createTime; + private Boolean builtin; + + public Long getId() { return id; } + public void setId(Long id) { this.id = id; } + public String getName() { return name; } + public void setName(String name) { this.name = name; } + public LocalDateTime getCreateTime() { return createTime; } + public void setCreateTime(LocalDateTime createTime) { this.createTime = createTime; } + public Boolean getBuiltin() { return builtin; } + public void setBuiltin(Boolean builtin) { this.builtin = builtin; } + } + + private TestDTO bind(Map form) { + TestDTO target = new TestDTO(); + WebDataBinder binder = new WebDataBinder(target); + // 模拟 @ControllerAdvice 的 @InitBinder 行为 + new GlobalDataBindingAdvice().disallowServerManagedFields(binder); + binder.bind(new org.springframework.beans.MutablePropertyValues(form)); + return target; + } + + @Test + @DisplayName("提交 createTime 被 strip,DTO 上为 null") + void createTimeStripped() { + Map form = new HashMap<>(); + form.put("name", "测试角色"); + form.put("createTime", "2026-01-01T00:00:00"); + + TestDTO dto = bind(form); + + assertEquals("测试角色", dto.getName()); + assertNull(dto.getCreateTime(), "createTime 应被 InitBinder strip"); + } + + @Test + @DisplayName("提交 builtin=true 被 strip,DTO 上为 null") + void builtinStripped() { + Map form = new HashMap<>(); + form.put("name", "测试角色"); + form.put("builtin", "true"); + + TestDTO dto = bind(form); + + assertEquals("测试角色", dto.getName()); + assertNull(dto.getBuiltin(), "builtin 应被 InitBinder strip"); + } + + @Test + @DisplayName("不包含服务端裁定字段的正常表单提交不受影响") + void normalSubmissionUnaffected() { + Map form = new HashMap<>(); + form.put("id", "123"); + form.put("name", "正常角色"); + + TestDTO dto = bind(form); + + assertEquals(123L, dto.getId()); + assertEquals("正常角色", dto.getName()); + assertNull(dto.getCreateTime()); + assertNull(dto.getBuiltin()); + } + + @Test + @DisplayName("全部 6 个服务端裁定字段同时提交均被 strip") + void allDisallowedFieldsStripped() { + Map form = new HashMap<>(); + form.put("name", "测试"); + form.put("createTime", "2026-01-01T00:00:00"); + form.put("updateTime", "2026-01-02T00:00:00"); + form.put("creatorId", "fake-user"); + form.put("updaterId", "fake-user"); + form.put("deleted", "true"); + form.put("builtin", "true"); + + TestDTO dto = bind(form); + + assertEquals("测试", dto.getName(), "普通字段应正常绑定"); + assertNull(dto.getCreateTime(), "createTime 应被 strip"); + assertNull(dto.getBuiltin(), "builtin 应被 strip"); + } +} diff --git a/crm-base/target/classes/com/crm/base/advice/GlobalExceptionHandlerAdvice.class b/crm-base/target/classes/com/crm/base/advice/GlobalExceptionHandlerAdvice.class index ef17ef8395e4836c7e7ccf35b7103a7ba1fb0acd..af4bb625cf6cfbe981e44bb10b84289d9a0865dd 100644 GIT binary patch delta 201 zcmcZ_e>Hx?IwfWSM#IVLc$HlJld@8iORV|X7>&6YI2cWM7}Xgy1Q<1d0_GqA3m!&g zMil`@6%IygMh4+$eM_JAFMhJ4_vzXhPv@+7zh@RB2czxee=5?F_KXZHj8+PaK%I_U zj82Ts?2IlvjINAsoA)a*F$w~OJ-8S>8NJvUy?GdxF#1eZP&u?&QMI1S)PaGS(SXs2 m(UcLwGGnx4bZ1~>v;vbhVA77!mw|zS3n=Qx7{D0BAPE50rYNES delta 195 zcmcZ_e>Hx?Iwe7VHbz4(Mk7XJc19B(MpH(!%|6OZjLZUz7LzwB=@?jXF>o+i^DwG2 zY6viD02SMT1nhYjl^In87*&7*PF#%6j4teqt~?A&7~Lkvs~lqHVDy;$Ur9p6i;+R> z`JP=*H%xrGzxC{U+ diff --git a/crm-base/target/classes/com/crm/base/config/InsertBatchOnDuplicateKeyUpdate.class b/crm-base/target/classes/com/crm/base/config/InsertBatchOnDuplicateKeyUpdate.class index e037d1254a26da87ad612ebc9f58d18bfe97ecbd..dd4849ba4a3843184dbe3b44132764732b6d214a 100644 GIT binary patch delta 361 zcmZ3WwLojbK3;YKhAoT?Y8sPQ^2<&B#>ZFB!LWmofmMT1hf$NCjbRrT10%z39)|S{ zD>)eUGBWULC|75eq~_`|)&dm>FjN868~~{~$iuLfVVwZOI-tN2kibzMh7}-9#~B&K z7b9o#Dpj^Sn%qf%e7#Khy@POeF!xIKc0A5yHTL1t6 delta 357 zcmXw!NlU{}6ot>VYGZh5BZ$&nz)c#0bmOuM7lI4Xg{Vs@G)Tcpk+^UO{)qg6ZiKq9 z3UMB)t@B*xc|iRkz8Blg;hp=PcZaNzH5Lm>W4InmGM2Ft#45uY*1dA5h5{-!-J%i` zct^%Aib0eZ+Og;UgiA9L4hVHRnH1%LBN>Eah6T(?I3*~0>r~3N(rx7MfQm_;xe%F4 zhI!;w|6W_4D_>KKlCX>#MKt_yiyh`@%PV5%~k_xLmOS diff --git a/crm-base/target/classes/com/crm/base/config/JacksonConfig.class b/crm-base/target/classes/com/crm/base/config/JacksonConfig.class index 68e81698dca0bd4ef196295f9950a460f5a5d87d..6f87eef1981562790cc1c52e85b7837c32a2cfcc 100644 GIT binary patch delta 80 zcmX>je@1@8O>SlZhO)`;dHiH5xERKPg~zv5je@1@8O>RMcHij}ThH{1qc7{qGhAM{Y&2BtQjLZTIwUh5~`*GKEF|ac<@G#^u j!mCI%6Z diff --git a/crm-base/target/classes/com/crm/base/config/MetaObjectFillHandler.class b/crm-base/target/classes/com/crm/base/config/MetaObjectFillHandler.class index 975beae9a6b1c477c534143b13ed17bfa32bf828..f763747a2242fbb25f01ca83a4c60627b37ea95c 100644 GIT binary patch delta 94 zcmdllxnFXF7zeWeL)l~)hTnu## y_3R7{JPeHtO`Fv@m>4%VaH=s&)-W(LlroevR53I&Ffed2Ffz0-v@vurNCE(s`4Tb! delta 95 zcmdllxnFXF7>6J~8$%fvLpehQJ3}Q8Llr~y<~j~0MrHwq+R2g}(n9rI3{ngYJPg?k zIRXq#j0_qYlM~ognKZ*TH*l&kOO`S)Gt@BDF*GtXGcYi4F)%W;FtjmrFh~Lburv~N diff --git a/crm-base/target/classes/com/crm/base/config/MybatisPlusConfig.class b/crm-base/target/classes/com/crm/base/config/MybatisPlusConfig.class index 7c825c16e5f328db1e8a3ab80f1ed2e94d0381a2..d2c286ff63a5a5c8e5e56e8e44a380bd598bcae2 100644 GIT binary patch delta 95 zcmew-@=s)g9lNmrgEu3CsD@8gVp*boPGVlVzJF3yYI2FSW*9#!gQx(51V0;tKNmv) yLm)dt5D!BzL&#=-b|%Kn#T=g)CH)wf8N3*L771_wq4g~@vv#V7Z&a0>FXF*tECI5W7gGr00FC@{E9UdMcB^E8%| a%%YAAj12Y+?hFhJTtJowgBODjgCqb}S`HEb delta 64 zcmew&@I_$5TxLOjHU^4uOd23ZF8$@7>GZJx>!#3Jg%z{udh T;K9Jazy)M^GI%riGDrdd*>VgC delta 64 zcmew(_(yO8SV diff --git a/crm-base/target/classes/com/crm/base/domain/dto/BaseDTO.class b/crm-base/target/classes/com/crm/base/domain/dto/BaseDTO.class index 982bdcfb31dc529cbea6aeec3ab27bd9a613a16e..279b07fb5e77fa52a640f79a45459a1341018c4c 100644 GIT binary patch delta 52 zcmew=^;K#^I4d&;L-J%@HXT8JHilF#hBStBc7_Zd1|x>d$r-GNHb=7kXJbuaU}Q*| I9Lp;K09`-~y#N3J delta 52 zcmew=^;K#^IIAE(8$&V|LkdGGJ3|@|gAqges66&&Ha>z{rp> IIhI!f0B6$;7ytkO diff --git a/crm-base/target/classes/com/crm/base/domain/entity/BaseEntity.class b/crm-base/target/classes/com/crm/base/domain/entity/BaseEntity.class index b28f6a1747347c397631fa42e9c8a11ce67707ec..96f141e978b08e468ee744f990a5b310955d72d3 100644 GIT binary patch delta 64 zcmZ2tw8Ut`Gj3)MhP{*b@Pr8RvoY-FVmQEXke%TW4?`@&;mO~*4{a9U{m(7BkAab4 U55o}#1_mx5>nOuV_EhT6$H*=+>**%<1%7#bKF*%_L67+e{eCx2l(wD~K0CZ}i}10zEX TLkj}~0~e6h%Fxcx$sh>;Y`qYr delta 64 zcmeyY^jT@cV>Us4HilX*hB}6Nc7_HX23Lm0$;Rx5m^m1lCqHAe+5D9~lT);Yfsvt! Tp@o5gfeXlLWoT#UWRL^^QEw0t diff --git a/crm-base/target/classes/com/crm/base/domain/result/PageResult.class b/crm-base/target/classes/com/crm/base/domain/result/PageResult.class index f6adffb503bc0d6a20d9938a44d8c557760fdb0d..366aaef6b500b241cb5ea335c327d4027c7bc63c 100644 GIT binary patch delta 64 zcmZ3iw^(lj9~UzR!;Z;MxZDK!*%)?lG3;j8!_KgmhoO#P-(-2NLz}g@pKy!rWME|2 U&aj_>fq@IiI>2y<;Ru5y09G9lW&i*H delta 64 zcmZ3iw^(ljAD19M8^aDRhMf$%*co>7Fw`;ZnVi9Oh?#?7-(*29x6NAIPq;<5GcYpj UW!TTaz`zA$9bh=baD+h;06y6e+yDRo diff --git a/crm-base/target/classes/com/crm/base/security/DataOwnership.class b/crm-base/target/classes/com/crm/base/security/DataOwnership.class index 7d36b5f1d03eb8dafb766a0556bd38915edff8c7..146f8f8bf365818a18038c9e3fe3af2b250e247a 100644 GIT binary patch delta 70 zcmX@hbCzerZYE|92EEA}nH2>2*%*wt7>pTA*cnWD7|a;VC!b+@wD}@)B9pWs0}BHO agD!(Ug8_pD0|NsW10#bagEfOKgCqbQkPKV^ delta 70 zcmX@hbCzerZYDu~HU>Q|27Lwtb_PQp1|tUJ$?usSF>^4OPTt3)u=yf$B9pW(0}BHO ag9(EfgE@l*0|NsW10#bagEfOKgCqbP(hQ3L diff --git a/crm-base/target/classes/com/crm/base/security/DataScopeHelper.class b/crm-base/target/classes/com/crm/base/security/DataScopeHelper.class index cd6213a99167e04752cede1e1f712cbe0714de56..0efb3aca94faaf35aa3eb14a4f03ab57660390ab 100644 GIT binary patch delta 81 zcmWN_ISxQT7=Y1lh$Vj}q0s2Z4cu5`8r#@KoJgw_Uim6hneLV%rA$IPA*R>V*cAK6 fC``-|i)LkWuXxI3`U!G}PeaSV4hV{alZ*TVc<2>1 delta 82 zcmWN`xeh=u0D$2iaip3!(xtmc@Wx$qan&v2iL7S6^)r>J`bQL5L?`GOVn&H$a%Jj! fDyRNu6(nqu2AgA@l5eP60%jI=4nW{>a&e6SrrBO*%%VJ7?K#0*%?xJ7_1mlCv&hK+Wd|+o>?@3fsrAO TA&r57feXk=XUJs8W{?B`8cGfG delta 64 zcmaDP^hjvKcNRf@HimdEh6IL0c7`M#1}lc-$vUium^m0yC;wtm-29F;o>?@GfsrAF TA&r57feXk=XUJs8W{?B`7rzce diff --git a/crm-base/target/classes/com/crm/base/security/DataVisibility.class b/crm-base/target/classes/com/crm/base/security/DataVisibility.class index d5e68376db873018446c6aacef851f26b4d7fba4..b3df09b66526d626a1e260b10f52cf3a1ef6e33d 100644 GIT binary patch delta 52 zcmdlfy;FKaDhD$ML;YlH&KN;{Hikwnh9-t)c7_%n204b-$z>deHc#hdWnpb#U}UJ9 IypUG{0AHO9{{R30 delta 52 zcmdlfy;FKaDu*CH8$&%8Ljyx2J3|u>gB(Nisa#&whqbw delta 81 zcmX>sa#&JbQzXUKFxDz^GV)t eX6Z!?j12P_K;#036$}gvTtL=JhSdyf86*K<9~4;t delta 76 zcmdn3v|DMzE*?RCHir3J3=0?*vNJ5=VbEn*Jei&M5HknE(#d;yR ev-CU$MusH}AaWVQ3I+xSE+A_q!)k`L43YpoJQL~w diff --git a/crm-base/target/classes/com/crm/base/utils/TreeUtils.class b/crm-base/target/classes/com/crm/base/utils/TreeUtils.class index 8ff4e4a909a568e91169e52493679097301a1676..96ae1f20aba596de64d56bc09abf2775750f53bf 100644 GIT binary patch delta 81 zcmWN_xe0(U06@|2fno?~n<|yyLT+Rl?_0#e1uTT%I?kf6e3!oT-9~9b76;UVoJLY$ j63idHU| - + - + - - + + - + - + - - + + - + - + - + - + - + + + - - + + + - - - - + + + + + - - - + + + - + - - - + + + - + - + - - - - - - - - - - - - - - - - \ No newline at end of file + + + + + + + + + + + + + + + +testsuite> \ No newline at end of file diff --git a/crm-base/target/surefire-reports/com.crm.base.security.DataVisibilityTest.txt b/crm-base/target/surefire-reports/com.crm.base.security.DataVisibilityTest.txt index 00789a0..abbe7e7 100644 --- a/crm-base/target/surefire-reports/com.crm.base.security.DataVisibilityTest.txt +++ b/crm-base/target/surefire-reports/com.crm.base.security.DataVisibilityTest.txt @@ -1,4 +1,4 @@ ------------------------------------------------------------------------------- Test set: com.crm.base.security.DataVisibilityTest ------------------------------------------------------------------------------- -Tests run: 17, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.198 s -- in com.crm.base.security.DataVisibilityTest +Tests run: 17, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.060 s -- in com.crm.base.security.DataVisibilityTest diff --git a/crm-base/target/test-classes/com/crm/base/security/DataVisibilityTest.class b/crm-base/target/test-classes/com/crm/base/security/DataVisibilityTest.class index f11a7a84ebbd72ce5f0c50feb6f983899968e535..040328c99555867d7b1e285d784f586fa4fb8e4e 100644 GIT binary patch delta 218 zcmaFi`oeXCnn=9>0~Cl2CC@G!D~ zc~T&rG!G*)m?sP3$?-5Ufq4obo+1y!Uxt4`8iRTx#-8P#|g)fqJy8I-aT%M$f- uCOe4y+&oY8Esv`b12ZEJBQFp`SORdCFq|a@XGy|YGH{kWBhTauN)iAN85IEl delta 211 zcmX}h+YN$15QX7Api4qV7i3YqD=ON^mSRP|8f!425zFAk5;QVnG7l&Dznm^~;o11y zS&UMQ;Sywo9Fz9$BV03M`=?Be!<3MSD%PA}MN8I-FcfWATf#uJXVrvQbYz_fk?732 hkolNz`zYTO$iyh%`~7RCwa{8??X(VB4T{^Vu6`8D5%mB7 diff --git a/crm-dict/src/main/java/com/crm/dict/controller/DictGroupController.java b/crm-dict/src/main/java/com/crm/dict/controller/DictGroupController.java index 32c9a26..310fe85 100644 --- a/crm-dict/src/main/java/com/crm/dict/controller/DictGroupController.java +++ b/crm-dict/src/main/java/com/crm/dict/controller/DictGroupController.java @@ -3,8 +3,7 @@ package com.crm.dict.controller; import com.crm.base.domain.result.PageResult; import com.crm.base.domain.result.Result; import com.crm.dict.constant.DictConstants; -import com.crm.dict.domain.dto.DictGroupVO; -import com.crm.dict.domain.entity.DictGroup; +import com.crm.dict.domain.dto.DictGroupDTO; import com.crm.dict.domain.param.GroupPageParam; import com.crm.dict.service.IDictGroupService; import io.swagger.v3.oas.annotations.Operation; @@ -33,15 +32,15 @@ public class DictGroupController { @Operation(summary = "分组分页(keyword 匹配名称/编码,status 筛选)") @PreAuthorize("hasAuthority('" + DictConstants.PERM_GROUP_LIST + "')") @PostMapping("/page") - public Result> page(GroupPageParam param) { + public Result> page(GroupPageParam param) { return Result.success(dictGroupService.pageGroups(param)); } @Operation(summary = "新建/编辑分组(新建编码必填;编辑时编码/内置标记/状态只读)") @PreAuthorize("hasAuthority('" + DictConstants.PERM_GROUP_SAVE + "')") @PostMapping("/saveOrUpdate") - public Result saveOrUpdate(DictGroup group) { - dictGroupService.saveGroup(group); + public Result saveOrUpdate(DictGroupDTO dto) { + dictGroupService.saveGroup(dto); return Result.success(); } @@ -64,7 +63,7 @@ public class DictGroupController { @Operation(summary = "启用分组列表(新建字典项选分组用)") @PreAuthorize("hasAuthority('" + DictConstants.PERM_GROUP_LIST + "')") @GetMapping("/enabled-list") - public Result> enabledList() { + public Result> enabledList() { return Result.success(dictGroupService.listEnabled()); } } diff --git a/crm-dict/src/main/java/com/crm/dict/controller/DictItemController.java b/crm-dict/src/main/java/com/crm/dict/controller/DictItemController.java index 8ca736e..2e2809c 100644 --- a/crm-dict/src/main/java/com/crm/dict/controller/DictItemController.java +++ b/crm-dict/src/main/java/com/crm/dict/controller/DictItemController.java @@ -3,8 +3,7 @@ package com.crm.dict.controller; import com.crm.base.domain.result.PageResult; import com.crm.base.domain.result.Result; import com.crm.dict.constant.DictConstants; -import com.crm.dict.domain.dto.DictItemVO; -import com.crm.dict.domain.entity.DictItem; +import com.crm.dict.domain.dto.DictItemDTO; import com.crm.dict.domain.param.ItemPageParam; import com.crm.dict.service.DictQueryService; import com.crm.dict.service.IDictItemService; @@ -35,15 +34,15 @@ public class DictItemController { @Operation(summary = "字典项分页(groupId/keyword/status 筛选,附带默认/引用/有效可选标记)") @PreAuthorize("hasAuthority('" + DictConstants.PERM_ITEM_LIST + "')") @PostMapping("/page") - public Result> page(ItemPageParam param) { + public Result> page(ItemPageParam param) { return Result.success(dictItemService.pageItems(param)); } @Operation(summary = "新建/编辑字典项(新建编码空自动生成;分组/编码创建后只读;值被引用后只读)") @PreAuthorize("hasAuthority('" + DictConstants.PERM_ITEM_SAVE + "')") @PostMapping("/saveOrUpdate") - public Result saveOrUpdate(DictItem item) { - dictItemService.saveItem(item); + public Result saveOrUpdate(DictItemDTO dto) { + dictItemService.saveItem(dto); return Result.success(); } @@ -83,7 +82,7 @@ public class DictItemController { @Operation(summary = "某分组启用项列表(业务选择器渲染用,走 10s 本地缓存)") @PreAuthorize("hasAuthority('" + DictConstants.PERM_ITEM_LIST + "')") @GetMapping("/enabled-list") - public Result> enabledList(@RequestParam("groupCode") String groupCode) { + public Result> enabledList(@RequestParam("groupCode") String groupCode) { return Result.success(dictQueryService.listEnabledItems(groupCode)); } } diff --git a/crm-dict/src/main/java/com/crm/dict/domain/dto/DictGroupDTO.java b/crm-dict/src/main/java/com/crm/dict/domain/dto/DictGroupDTO.java new file mode 100644 index 0000000..4f88a95 --- /dev/null +++ b/crm-dict/src/main/java/com/crm/dict/domain/dto/DictGroupDTO.java @@ -0,0 +1,50 @@ +package com.crm.dict.domain.dto; + +import com.crm.base.domain.dto.BaseDTO; +import com.crm.dict.domain.entity.DictGroup; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 字典分组传输对象(写入参 + 出参双向,ADR-0017 Route A) + *

继承 {@link BaseDTO} 白拿 id/createTime/updateTime; + * builtin 由全局 @InitBinder 在入参侧 strip,出参侧展示原值

+ */ +@Data +@EqualsAndHashCode(callSuper = true) +public class DictGroupDTO extends BaseDTO { + + private String name; + + private String code; + + private Integer sortNo; + + private Integer status; + + private String description; + + private Boolean builtin; + + @Schema(description = "分组下未删除的字典项数量(含启用+停用)") + private Long itemCount; + + /** + * Entity → DTO(出参转换,Service 层调用) + */ + public static DictGroupDTO fromEntity(DictGroup entity) { + DictGroupDTO dto = new DictGroupDTO(); + org.springframework.beans.BeanUtils.copyProperties(entity, dto); + return dto; + } + + /** + * DTO → Entity(入参转换,Service 层调用) + */ + public DictGroup toEntity() { + DictGroup entity = new DictGroup(); + org.springframework.beans.BeanUtils.copyProperties(this, entity); + return entity; + } +} diff --git a/crm-dict/src/main/java/com/crm/dict/domain/dto/DictGroupVO.java b/crm-dict/src/main/java/com/crm/dict/domain/dto/DictGroupVO.java deleted file mode 100644 index 8d127af..0000000 --- a/crm-dict/src/main/java/com/crm/dict/domain/dto/DictGroupVO.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.crm.dict.domain.dto; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; - -import java.time.LocalDateTime; - -/** - * 字典分组视图对象:分页列表展示用 - *

独立字段(不继承实体),只暴露前端需要的业务字段 + createTime, - * 排除审计字段(creatorId/updaterId/updateTime/deleted)和软删内部字段(deleteKey)。

- */ -@Data -public class DictGroupVO { - - private Long id; - - private String name; - - private String code; - - private Integer sortNo; - - private Integer status; - - private String description; - - private Boolean builtin; - - private LocalDateTime createTime; - - @Schema(description = "分组下未删除的字典项数量(含启用+停用)") - private Long itemCount; -} diff --git a/crm-dict/src/main/java/com/crm/dict/domain/dto/DictItemDTO.java b/crm-dict/src/main/java/com/crm/dict/domain/dto/DictItemDTO.java new file mode 100644 index 0000000..dbac985 --- /dev/null +++ b/crm-dict/src/main/java/com/crm/dict/domain/dto/DictItemDTO.java @@ -0,0 +1,65 @@ +package com.crm.dict.domain.dto; + +import com.crm.base.domain.dto.BaseDTO; +import com.crm.dict.domain.entity.DictItem; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 字典项传输对象(写入参 + 出参双向,ADR-0017 Route A) + *

继承 {@link BaseDTO} 白拿 id/createTime/updateTime; + * builtin 由全局 @InitBinder 在入参侧 strip,出参侧展示原值

+ *

referenced 读实时引用计数(绝不进缓存);effectiveSelectable 供前端对 + * "自身启用但所属分组已停用"的失活项做视觉标记

+ */ +@Data +@EqualsAndHashCode(callSuper = true) +public class DictItemDTO extends BaseDTO { + + private Long groupId; + + private String name; + + private String code; + + private String value; + + private Integer sortNo; + + private Integer status; + + private String description; + + private Boolean builtin; + + @Schema(description = "所属分组名称") + private String groupName; + + @Schema(description = "是否为分组默认项") + private Boolean isDefault; + + @Schema(description = "是否被业务引用(实时计数)") + private Boolean referenced; + + @Schema(description = "是否有效可选(分组与项均启用)") + private Boolean effectiveSelectable; + + /** + * Entity → DTO(出参转换,Service 层调用) + */ + public static DictItemDTO fromEntity(DictItem entity) { + DictItemDTO dto = new DictItemDTO(); + org.springframework.beans.BeanUtils.copyProperties(entity, dto); + return dto; + } + + /** + * DTO → Entity(入参转换,Service 层调用) + */ + public DictItem toEntity() { + DictItem entity = new DictItem(); + org.springframework.beans.BeanUtils.copyProperties(this, entity); + return entity; + } +} diff --git a/crm-dict/src/main/java/com/crm/dict/domain/dto/DictItemVO.java b/crm-dict/src/main/java/com/crm/dict/domain/dto/DictItemVO.java deleted file mode 100644 index 524d088..0000000 --- a/crm-dict/src/main/java/com/crm/dict/domain/dto/DictItemVO.java +++ /dev/null @@ -1,49 +0,0 @@ -package com.crm.dict.domain.dto; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; - -import java.time.LocalDateTime; - -/** - * 字典项视图对象:分页列表展示用 - *

referenced 读实时引用计数(绝不进缓存);effectiveSelectable 供前端对 - * "自身启用但所属分组已停用"的失活项做视觉标记。 - * 独立字段(不继承实体),只暴露前端需要的业务字段 + createTime, - * 排除审计字段(creatorId/updaterId/updateTime/deleted)和软删内部字段(deleteKey)。

- */ -@Data -public class DictItemVO { - - private Long id; - - private Long groupId; - - private String name; - - private String code; - - private String value; - - private Integer sortNo; - - private Integer status; - - private String description; - - private Boolean builtin; - - private LocalDateTime createTime; - - @Schema(description = "所属分组名称") - private String groupName; - - @Schema(description = "是否为分组默认项") - private Boolean isDefault; - - @Schema(description = "是否被业务引用(实时计数)") - private Boolean referenced; - - @Schema(description = "是否有效可选(分组与项均启用)") - private Boolean effectiveSelectable; -} diff --git a/crm-dict/src/main/java/com/crm/dict/service/DictQueryService.java b/crm-dict/src/main/java/com/crm/dict/service/DictQueryService.java index c99d833..b69a807 100644 --- a/crm-dict/src/main/java/com/crm/dict/service/DictQueryService.java +++ b/crm-dict/src/main/java/com/crm/dict/service/DictQueryService.java @@ -1,5 +1,6 @@ package com.crm.dict.service; +import com.crm.dict.domain.dto.DictItemDTO; import com.crm.dict.domain.entity.DictItem; import java.util.List; @@ -8,7 +9,7 @@ import java.util.List; * 字典读路径服务(业务模块读契约,ADR-0015) *

带 Caffeine 本地缓存:10s TTL 正结果 + 2s 空结果防穿透,扛高频读; * 变更写入不主动 evict,接受多副本 10 秒最终一致。不含任何写方法。

- *

注意:本服务返回的实体是缓存快照(可能滞后 10s),只可用于渲染/校验; + *

注意:本服务返回的对象是缓存快照(可能滞后 10s),只可用于渲染/校验; * 需要实时数据(如删除判定)请走 {@link DictReferenceService}。

*/ public interface DictQueryService { @@ -22,7 +23,7 @@ public interface DictQueryService { * 某分组下的启用字典项列表(业务选择器渲染用):只返回分组与项均启用的项; * 分组不存在或分组停用时返回空列表,按 sort_no 排序(空排最后) */ - List listEnabledItems(String groupCode); + List listEnabledItems(String groupCode); /** * 分组当前默认项:联查 group.status,分组停用(休眠)或未设默认时返回 null diff --git a/crm-dict/src/main/java/com/crm/dict/service/IDictGroupService.java b/crm-dict/src/main/java/com/crm/dict/service/IDictGroupService.java index 8be532d..dfdb8ca 100644 --- a/crm-dict/src/main/java/com/crm/dict/service/IDictGroupService.java +++ b/crm-dict/src/main/java/com/crm/dict/service/IDictGroupService.java @@ -2,7 +2,7 @@ package com.crm.dict.service; import com.crm.base.domain.result.PageResult; import com.crm.base.service.IBaseService; -import com.crm.dict.domain.dto.DictGroupVO; +import com.crm.dict.domain.dto.DictGroupDTO; import com.crm.dict.domain.entity.DictGroup; import com.crm.dict.domain.param.GroupPageParam; @@ -16,13 +16,13 @@ public interface IDictGroupService extends IBaseService { /** * 分组分页(keyword 匹配名称/编码;status 筛选;itemCount 一次聚合查询) */ - PageResult pageGroups(GroupPageParam param); + PageResult pageGroups(GroupPageParam param); /** * 新建/编辑分组:新建编码必填且全局唯一、builtin 强制 false、status 默认启用; * 编辑时编码/builtin/status 保留原值(编码创建后不可改,启停走独立端点) */ - void saveGroup(DictGroup group); + void saveGroup(DictGroupDTO dto); /** * 删除分组:builtin 阻断;分组下仍有未删除字典项则阻断;软删除 + 复用键 @@ -37,5 +37,5 @@ public interface IDictGroupService extends IBaseService { /** * 启用分组列表(新建字典项选分组用),按 sort_no 排序 */ - List listEnabled(); + List listEnabled(); } diff --git a/crm-dict/src/main/java/com/crm/dict/service/IDictItemService.java b/crm-dict/src/main/java/com/crm/dict/service/IDictItemService.java index d4f2e5f..875d41b 100644 --- a/crm-dict/src/main/java/com/crm/dict/service/IDictItemService.java +++ b/crm-dict/src/main/java/com/crm/dict/service/IDictItemService.java @@ -2,7 +2,7 @@ package com.crm.dict.service; import com.crm.base.domain.result.PageResult; import com.crm.base.service.IBaseService; -import com.crm.dict.domain.dto.DictItemVO; +import com.crm.dict.domain.dto.DictItemDTO; import com.crm.dict.domain.entity.DictItem; import com.crm.dict.domain.param.ItemPageParam; @@ -14,13 +14,13 @@ public interface IDictItemService extends IBaseService { /** * 字典项分页(groupId/keyword/status 筛选;附带 groupName/isDefault/referenced/effectiveSelectable) */ - PageResult pageItems(ItemPageParam param); + PageResult pageItems(ItemPageParam param); /** * 新建/编辑字典项:新建时分组必选且须启用、编码空则自动生成 dict_+32位hex、组内唯一、 * 同事务预建引用计数行;编辑时分组/编码只读、被引用后字典值只读、builtin/status 保留原值 */ - void saveItem(DictItem item); + void saveItem(DictItemDTO dto); /** * 删除字典项:builtin 阻断;被引用阻断;软删除 + 复用键,同事务清默认项记录与引用计数行 diff --git a/crm-dict/src/main/java/com/crm/dict/service/impl/DictGroupServiceImpl.java b/crm-dict/src/main/java/com/crm/dict/service/impl/DictGroupServiceImpl.java index ee3d5ca..879f142 100644 --- a/crm-dict/src/main/java/com/crm/dict/service/impl/DictGroupServiceImpl.java +++ b/crm-dict/src/main/java/com/crm/dict/service/impl/DictGroupServiceImpl.java @@ -12,7 +12,7 @@ import com.crm.base.domain.result.PageResult; import com.crm.base.service.impl.BaseServiceImpl; import com.crm.base.utils.PageConverter; import com.crm.dict.constant.DictConstants; -import com.crm.dict.domain.dto.DictGroupVO; +import com.crm.dict.domain.dto.DictGroupDTO; import com.crm.dict.domain.entity.DictGroup; import com.crm.dict.domain.entity.DictGroupDefault; import com.crm.dict.domain.entity.DictItem; @@ -44,7 +44,7 @@ public class DictGroupServiceImpl extends BaseServiceImpl pageGroups(GroupPageParam param) { + public PageResult pageGroups(GroupPageParam param) { // 分组分页排序固定:sort_no 空排最后、再按创建时间;不支持前端自定义排序(spec 端点表) param.setOrderBy(null); param.setAsc(null); @@ -57,24 +57,21 @@ public class DictGroupServiceImpl extends BaseServiceImpl result = new PageResult<>(page) - .convert(g -> g.toDTO(DictGroupVO::new)); + PageResult result = new PageResult<>(page) + .convert(DictGroupDTO::fromEntity); fillItemCount(result.getContent()); return result; } @Override @Transactional(rollbackFor = Exception.class) - public void saveGroup(DictGroup group) { - if (group == null) { + public void saveGroup(DictGroupDTO dto) { + if (dto == null) { throw new BusinessErrorException(DictConstants.CODE_DICT_INVALID, "请求参数缺失"); } - // 审计字段由框架 strictInsertFill/strictUpdateFill 自动填充(仅 null 时填充), - // 客户端传入的审计值不可信且会被保留,统一清空防止伪造 - group.setCreateTime(null); - group.setUpdateTime(null); - group.setCreatorId(null); - group.setUpdaterId(null); + DictGroup group = dto.toEntity(); + // 审计字段(createTime/updateTime/creatorId/updaterId/deleted/builtin) + // 由全局 @InitBinder 在入参侧 strip,此处不再手工清空 if (StrUtil.isBlank(group.getName())) { throw new BusinessErrorException(DictConstants.CODE_DICT_INVALID, "分组名称不能为空"); } @@ -96,7 +93,7 @@ public class DictGroupServiceImpl extends BaseServiceImpl listEnabled() { + public List listEnabled() { return this.lambdaQuery() .eq(DictGroup::getStatus, DictConstants.STATUS_ENABLED) .last("ORDER BY sort_no IS NULL, sort_no ASC, create_time ASC") - .list(); + .list().stream() + .map(DictGroupDTO::fromEntity) + .collect(Collectors.toList()); } /** 填充当前页各分组的字典项数量(一次聚合查询) */ - private void fillItemCount(List vos) { + private void fillItemCount(List vos) { if (CollUtil.isEmpty(vos)) { return; } - List ids = vos.stream().map(DictGroupVO::getId).collect(Collectors.toList()); + List ids = vos.stream().map(DictGroupDTO::getId).collect(Collectors.toList()); List> counts = dictItemMapper.selectMaps(new QueryWrapper() .select("group_id AS group_id", "COUNT(*) AS item_count") .in("group_id", ids) diff --git a/crm-dict/src/main/java/com/crm/dict/service/impl/DictItemServiceImpl.java b/crm-dict/src/main/java/com/crm/dict/service/impl/DictItemServiceImpl.java index e1f7c8e..1f518c0 100644 --- a/crm-dict/src/main/java/com/crm/dict/service/impl/DictItemServiceImpl.java +++ b/crm-dict/src/main/java/com/crm/dict/service/impl/DictItemServiceImpl.java @@ -11,7 +11,7 @@ import com.crm.base.domain.result.PageResult; import com.crm.base.service.impl.BaseServiceImpl; import com.crm.base.utils.PageConverter; import com.crm.dict.constant.DictConstants; -import com.crm.dict.domain.dto.DictItemVO; +import com.crm.dict.domain.dto.DictItemDTO; import com.crm.dict.domain.entity.DictGroup; import com.crm.dict.domain.entity.DictGroupDefault; import com.crm.dict.domain.entity.DictItem; @@ -51,7 +51,7 @@ public class DictItemServiceImpl extends BaseServiceImpl pageItems(ItemPageParam param) { + public PageResult pageItems(ItemPageParam param) { // 字典项分页排序固定:sort_no 空排最后、再按创建时间;不支持前端自定义排序(spec 端点表) param.setOrderBy(null); param.setAsc(null); @@ -67,24 +67,21 @@ public class DictItemServiceImpl extends BaseServiceImpl result = new PageResult<>(page) - .convert(i -> i.toDTO(DictItemVO::new)); + PageResult result = new PageResult<>(page) + .convert(DictItemDTO::fromEntity); enrich(result.getContent()); return result; } @Override @Transactional(rollbackFor = Exception.class) - public void saveItem(DictItem item) { - if (item == null) { + public void saveItem(DictItemDTO dto) { + if (dto == null) { throw new BusinessErrorException(DictConstants.CODE_DICT_INVALID, "请求参数缺失"); } - // 审计字段由框架 strictInsertFill/strictUpdateFill 自动填充(仅 null 时填充), - // 客户端传入的审计值不可信且会被保留,统一清空防止伪造 - item.setCreateTime(null); - item.setUpdateTime(null); - item.setCreatorId(null); - item.setUpdaterId(null); + DictItem item = dto.toEntity(); + // 审计字段(createTime/updateTime/creatorId/updaterId/deleted/builtin) + // 由全局 @InitBinder 在入参侧 strip,此处不再手工清空 if (item.getGroupId() == null) { if (item.getId() == null) { throw new BusinessErrorException(DictConstants.CODE_DICT_INVALID, "请选择所属分组"); @@ -126,7 +123,7 @@ public class DictItemServiceImpl extends BaseServiceImpl vos) { + private void enrich(List vos) { if (CollUtil.isEmpty(vos)) { return; } - Set groupIds = vos.stream().map(DictItemVO::getGroupId).collect(Collectors.toSet()); + Set groupIds = vos.stream().map(DictItemDTO::getGroupId).collect(Collectors.toSet()); Map groups = dictGroupMapper.selectBatchIds(groupIds).stream() .collect(Collectors.toMap(DictGroup::getId, g -> g)); Map defaultMap = dictGroupDefaultMapper.selectList( @@ -314,11 +307,11 @@ public class DictItemServiceImpl extends BaseServiceImpl queryReferencedKeys(List vos, Map groups) { + private Set queryReferencedKeys(List vos, Map groups) { QueryWrapper qw = new QueryWrapper<>(); qw.and(w -> { boolean first = true; - for (DictItemVO v : vos) { + for (DictItemDTO v : vos) { DictGroup g = groups.get(v.getGroupId()); if (g == null) { continue; diff --git a/crm-dict/src/main/java/com/crm/dict/service/impl/DictQueryServiceImpl.java b/crm-dict/src/main/java/com/crm/dict/service/impl/DictQueryServiceImpl.java index 124f906..4824aa4 100644 --- a/crm-dict/src/main/java/com/crm/dict/service/impl/DictQueryServiceImpl.java +++ b/crm-dict/src/main/java/com/crm/dict/service/impl/DictQueryServiceImpl.java @@ -3,6 +3,7 @@ package com.crm.dict.service.impl; import cn.hutool.core.collection.CollUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.crm.dict.constant.DictConstants; +import com.crm.dict.domain.dto.DictItemDTO; import com.crm.dict.domain.entity.DictGroup; import com.crm.dict.domain.entity.DictGroupDefault; import com.crm.dict.domain.entity.DictItem; @@ -65,11 +66,12 @@ public class DictQueryServiceImpl implements DictQueryService { } @Override - public List listEnabledItems(String groupCode) { + public List listEnabledItems(String groupCode) { String key = "enabledItems:" + groupCode; Object cached = valueCache.getIfPresent(key); if (cached != null) { - return cached == EMPTY ? List.of() : castItems(cached); + return cached == EMPTY ? List.of() : castItems(cached).stream() + .map(DictItemDTO::fromEntity).toList(); } if (emptyCache.getIfPresent(key) == EMPTY) { return List.of(); @@ -92,7 +94,7 @@ public class DictQueryServiceImpl implements DictQueryService { } else { valueCache.put(key, items); } - return items; + return items.stream().map(DictItemDTO::fromEntity).toList(); } @Override diff --git a/crm-dict/src/test/java/com/crm/dict/AbstractDictH2Test.java b/crm-dict/src/test/java/com/crm/dict/AbstractDictH2Test.java index 656bcce..ebee953 100644 --- a/crm-dict/src/test/java/com/crm/dict/AbstractDictH2Test.java +++ b/crm-dict/src/test/java/com/crm/dict/AbstractDictH2Test.java @@ -8,8 +8,10 @@ import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; import com.crm.base.config.MetaObjectFillHandler; import com.crm.base.domain.exception.BusinessErrorException; +import com.crm.dict.constant.DictConstants; import com.crm.dict.domain.entity.DictGroup; import com.crm.dict.domain.entity.DictItem; +import com.crm.dict.domain.entity.DictRefCount; import com.crm.dict.mapper.DictGroupDefaultMapper; import com.crm.dict.mapper.DictGroupMapper; import com.crm.dict.mapper.DictItemMapper; @@ -137,7 +139,10 @@ public abstract class AbstractDictH2Test { DictGroup g = new DictGroup(); g.setCode(code); g.setName(name); - dictGroupService.saveGroup(g); + g.setStatus(DictConstants.STATUS_ENABLED); + g.setBuiltin(false); + g.setDeleteKey(0L); + dictGroupMapper.insert(g); return g; } @@ -147,7 +152,17 @@ public abstract class AbstractDictH2Test { i.setCode(code); i.setValue(value); i.setName("项-" + code); - dictItemService.saveItem(i); + i.setStatus(DictConstants.STATUS_ENABLED); + i.setBuiltin(false); + i.setDeleteKey(0L); + dictItemMapper.insert(i); + // 同事务预建引用计数行(与 saveItem 逻辑一致) + DictGroup group = dictGroupMapper.selectById(groupId); + DictRefCount ref = new DictRefCount(); + ref.setGroupCode(group.getCode()); + ref.setItemCode(code); + ref.setRefCount(0); + dictRefCountMapper.insert(ref); return i; } diff --git a/crm-dict/src/test/java/com/crm/dict/service/impl/DictGroupServiceTest.java b/crm-dict/src/test/java/com/crm/dict/service/impl/DictGroupServiceTest.java index 4e4ea39..62afd6e 100644 --- a/crm-dict/src/test/java/com/crm/dict/service/impl/DictGroupServiceTest.java +++ b/crm-dict/src/test/java/com/crm/dict/service/impl/DictGroupServiceTest.java @@ -2,7 +2,7 @@ package com.crm.dict.service.impl; import com.crm.dict.AbstractDictH2Test; import com.crm.dict.constant.DictConstants; -import com.crm.dict.domain.dto.DictGroupVO; +import com.crm.dict.domain.dto.DictGroupDTO; import com.crm.dict.domain.entity.DictGroup; import com.crm.dict.domain.param.GroupPageParam; import com.crm.base.domain.result.PageResult; @@ -31,7 +31,7 @@ class DictGroupServiceTest extends AbstractDictH2Test { GroupPageParam param = new GroupPageParam(); param.setCurrent(1); param.setSize(10); - PageResult result = dictGroupService.pageGroups(param); + PageResult result = dictGroupService.pageGroups(param); assertThat(result.getContent()).hasSize(1); assertThat(result.getContent().get(0).getItemCount()).isEqualTo(3); @@ -45,29 +45,29 @@ class DictGroupServiceTest extends AbstractDictH2Test { GroupPageParam byName = new GroupPageParam(); byName.setKeyword("来源"); - assertThat(dictGroupService.pageGroups(byName).getContent()).extracting(DictGroupVO::getCode) + assertThat(dictGroupService.pageGroups(byName).getContent()).extracting(DictGroupDTO::getCode) .containsExactly("lead_source"); GroupPageParam byCode = new GroupPageParam(); byCode.setKeyword("industry"); - assertThat(dictGroupService.pageGroups(byCode).getContent()).extracting(DictGroupVO::getCode) + assertThat(dictGroupService.pageGroups(byCode).getContent()).extracting(DictGroupDTO::getCode) .containsExactly("industry"); dictGroupService.updateGroupStatus(g1.getId(), DictConstants.STATUS_DISABLED); GroupPageParam onlyEnabled = new GroupPageParam(); onlyEnabled.setStatus(DictConstants.STATUS_ENABLED); - assertThat(dictGroupService.pageGroups(onlyEnabled).getContent()).extracting(DictGroupVO::getCode) + assertThat(dictGroupService.pageGroups(onlyEnabled).getContent()).extracting(DictGroupDTO::getCode) .containsExactly("industry"); } @Test @DisplayName("新建:编码必填且格式校验") void saveGroup_requiredAndFormat() { - DictGroup noCode = new DictGroup(); + DictGroupDTO noCode = new DictGroupDTO(); noCode.setName("缺编码"); assertDictError(() -> dictGroupService.saveGroup(noCode), DictConstants.CODE_DICT_INVALID); - DictGroup badCode = new DictGroup(); + DictGroupDTO badCode = new DictGroupDTO(); badCode.setCode("bad code!"); badCode.setName("坏格式"); assertDictError(() -> dictGroupService.saveGroup(badCode), DictConstants.CODE_DICT_INVALID); @@ -77,7 +77,7 @@ class DictGroupServiceTest extends AbstractDictH2Test { @DisplayName("新建:编码全局唯一,重复被拒") void saveGroup_codeDuplicate() { newGroup("lead_source", "客户来源"); - DictGroup dup = new DictGroup(); + DictGroupDTO dup = new DictGroupDTO(); dup.setCode("lead_source"); dup.setName("重复分组"); assertDictError(() -> dictGroupService.saveGroup(dup), DictConstants.CODE_GROUP_CODE_DUPLICATE); @@ -97,7 +97,7 @@ class DictGroupServiceTest extends AbstractDictH2Test { @DisplayName("编辑:改名成功,编码保持原值(前端传新编码也被忽略)") void saveGroup_updateKeepsCode() { DictGroup g = newGroup("lead_source", "客户来源"); - DictGroup edit = new DictGroup(); + DictGroupDTO edit = new DictGroupDTO(); edit.setId(g.getId()); edit.setCode("hacked_code"); edit.setName("改过的名称"); @@ -111,7 +111,7 @@ class DictGroupServiceTest extends AbstractDictH2Test { @Test @DisplayName("编辑:不存在的分组抛 63011") void saveGroup_updateNotExist() { - DictGroup edit = new DictGroup(); + DictGroupDTO edit = new DictGroupDTO(); edit.setId(999999L); edit.setName("不存在"); assertDictError(() -> dictGroupService.saveGroup(edit), DictConstants.CODE_GROUP_NOT_EXIST); @@ -156,13 +156,13 @@ class DictGroupServiceTest extends AbstractDictH2Test { DictGroup g2 = newGroup("g2", "分组二"); DictGroup g3 = newGroup("g3", "分组三"); - DictGroup edit = new DictGroup(); + DictGroupDTO edit = new DictGroupDTO(); edit.setId(g2.getId()); edit.setName("分组二"); edit.setSortNo(1); dictGroupService.saveGroup(edit); - DictGroup edit3 = new DictGroup(); + DictGroupDTO edit3 = new DictGroupDTO(); edit3.setId(g3.getId()); edit3.setName("分组三"); edit3.setSortNo(0); @@ -171,9 +171,9 @@ class DictGroupServiceTest extends AbstractDictH2Test { // 停用 g1 dictGroupService.updateGroupStatus(g1.getId(), DictConstants.STATUS_DISABLED); - List enabled = dictGroupService.listEnabled(); - assertThat(enabled).extracting(DictGroup::getCode) + List enabled = dictGroupService.listEnabled(); + assertThat(enabled).extracting(DictGroupDTO::getCode) .containsExactly("g3", "g2"); // sort_no 升序,g1 已停用 - assertThat(enabled).extracting(DictGroup::getCode).doesNotContain("g1"); + assertThat(enabled).extracting(DictGroupDTO::getCode).doesNotContain("g1"); } } diff --git a/crm-dict/src/test/java/com/crm/dict/service/impl/DictItemServiceTest.java b/crm-dict/src/test/java/com/crm/dict/service/impl/DictItemServiceTest.java index b547855..6c38962 100644 --- a/crm-dict/src/test/java/com/crm/dict/service/impl/DictItemServiceTest.java +++ b/crm-dict/src/test/java/com/crm/dict/service/impl/DictItemServiceTest.java @@ -2,7 +2,7 @@ package com.crm.dict.service.impl; import com.crm.dict.AbstractDictH2Test; import com.crm.dict.constant.DictConstants; -import com.crm.dict.domain.dto.DictItemVO; +import com.crm.dict.domain.dto.DictItemDTO; import com.crm.dict.domain.entity.DictGroup; import com.crm.dict.domain.entity.DictItem; import com.crm.dict.domain.param.ItemPageParam; @@ -22,12 +22,12 @@ class DictItemServiceTest extends AbstractDictH2Test { @DisplayName("新建:编码空自动生成 dict_+32位hex,并同事务预建引用计数行") void saveItem_autoCodeAndRefCountRow() { DictGroup g = newGroup("lead_source", "客户来源"); - DictItem item = new DictItem(); - item.setGroupId(g.getId()); - item.setName("未填编码"); - dictItemService.saveItem(item); + DictItemDTO dto = new DictItemDTO(); + dto.setGroupId(g.getId()); + dto.setName("未填编码"); + dictItemService.saveItem(dto); - DictItem saved = dictItemMapper.selectById(item.getId()); + DictItem saved = dictItemMapper.selectList(null).get(0); assertThat(saved.getCode()).startsWith(DictConstants.CODE_AUTO_PREFIX); assertThat(saved.getCode()).hasSize(DictConstants.CODE_AUTO_PREFIX.length() + 32); // 预建行:计数 0 且"未被引用" @@ -42,13 +42,13 @@ class DictItemServiceTest extends AbstractDictH2Test { DictGroup g2 = newGroup("g2", "分组二"); newItem(g1.getId(), "shared_code", "A"); - DictItem dup = new DictItem(); + DictItemDTO dup = new DictItemDTO(); dup.setGroupId(g1.getId()); dup.setCode("shared_code"); dup.setName("重复"); assertDictError(() -> dictItemService.saveItem(dup), DictConstants.CODE_ITEM_CODE_DUPLICATE); - DictItem cross = new DictItem(); + DictItemDTO cross = new DictItemDTO(); cross.setGroupId(g2.getId()); cross.setCode("shared_code"); cross.setName("跨组同名"); @@ -61,7 +61,7 @@ class DictItemServiceTest extends AbstractDictH2Test { DictGroup g = newGroup("g", "分组"); newItem(g.getId(), "a", "VALUE_A"); - DictItem dupValue = new DictItem(); + DictItemDTO dupValue = new DictItemDTO(); dupValue.setGroupId(g.getId()); dupValue.setCode("b"); dupValue.setName("重复值"); @@ -69,12 +69,12 @@ class DictItemServiceTest extends AbstractDictH2Test { assertDictError(() -> dictItemService.saveItem(dupValue), DictConstants.CODE_ITEM_VALUE_DUPLICATE); // 两个空值项共存(空串与 null 归一化) - DictItem nullValue = new DictItem(); + DictItemDTO nullValue = new DictItemDTO(); nullValue.setGroupId(g.getId()); nullValue.setCode("c"); nullValue.setName("空值一"); dictItemService.saveItem(nullValue); - DictItem blankValue = new DictItem(); + DictItemDTO blankValue = new DictItemDTO(); blankValue.setGroupId(g.getId()); blankValue.setCode("d"); blankValue.setName("空值二"); @@ -86,7 +86,7 @@ class DictItemServiceTest extends AbstractDictH2Test { @Test @DisplayName("新建:分组不存在 63011;分组停用 63005") void saveItem_groupNotAvailable() { - DictItem noGroup = new DictItem(); + DictItemDTO noGroup = new DictItemDTO(); noGroup.setGroupId(999999L); noGroup.setCode("x"); noGroup.setName("无分组"); @@ -94,7 +94,7 @@ class DictItemServiceTest extends AbstractDictH2Test { DictGroup g = newGroup("g", "分组"); dictGroupService.updateGroupStatus(g.getId(), DictConstants.STATUS_DISABLED); - DictItem disabledGroup = new DictItem(); + DictItemDTO disabledGroup = new DictItemDTO(); disabledGroup.setGroupId(g.getId()); disabledGroup.setCode("y"); disabledGroup.setName("停用分组"); @@ -108,19 +108,19 @@ class DictItemServiceTest extends AbstractDictH2Test { DictGroup g2 = newGroup("g2", "分组二"); DictItem item = newItem(g1.getId(), "item_a", "VALUE_A"); - DictItem edit = new DictItem(); + DictItemDTO edit = new DictItemDTO(); edit.setId(item.getId()); edit.setName("改名后"); dictItemService.saveItem(edit); assertThat(dictItemMapper.selectById(item.getId()).getName()).isEqualTo("改名后"); - DictItem move = new DictItem(); + DictItemDTO move = new DictItemDTO(); move.setId(item.getId()); move.setGroupId(g2.getId()); move.setName("改名后"); assertDictError(() -> dictItemService.saveItem(move), DictConstants.CODE_ITEM_IDENTITY_READONLY); - DictItem recode = new DictItem(); + DictItemDTO recode = new DictItemDTO(); recode.setId(item.getId()); recode.setCode("item_b"); recode.setName("改名后"); @@ -134,7 +134,7 @@ class DictItemServiceTest extends AbstractDictH2Test { DictItem item = newItem(g.getId(), "item_a", "OLD"); // 未引用:可改值 - DictItem edit = new DictItem(); + DictItemDTO edit = new DictItemDTO(); edit.setId(item.getId()); edit.setName("项-a"); edit.setValue("NEW"); @@ -143,19 +143,19 @@ class DictItemServiceTest extends AbstractDictH2Test { // 被引用:改值被拒;清空也被拒;名称仍可改 dictReferenceService.increment(g.getCode(), "item_a"); - DictItem edit2 = new DictItem(); + DictItemDTO edit2 = new DictItemDTO(); edit2.setId(item.getId()); edit2.setName("项-a"); edit2.setValue("ANOTHER"); assertDictError(() -> dictItemService.saveItem(edit2), DictConstants.CODE_ITEM_REFERENCED); - DictItem edit3 = new DictItem(); + DictItemDTO edit3 = new DictItemDTO(); edit3.setId(item.getId()); edit3.setName("项-a"); edit3.setValue(""); assertDictError(() -> dictItemService.saveItem(edit3), DictConstants.CODE_ITEM_REFERENCED); - DictItem edit4 = new DictItem(); + DictItemDTO edit4 = new DictItemDTO(); edit4.setId(item.getId()); edit4.setName("改名仍允许"); edit4.setValue("NEW"); @@ -170,7 +170,7 @@ class DictItemServiceTest extends AbstractDictH2Test { newItem(g.getId(), "a", "VALUE_A"); DictItem itemB = newItem(g.getId(), "b", "VALUE_B"); - DictItem edit = new DictItem(); + DictItemDTO edit = new DictItemDTO(); edit.setId(itemB.getId()); edit.setName("项-b"); edit.setValue("VALUE_A"); @@ -198,11 +198,13 @@ class DictItemServiceTest extends AbstractDictH2Test { assertDictError(() -> dictItemService.deleteItem(rebuilt.getId()), DictConstants.CODE_ITEM_REFERENCED); // 内置阻断 - DictItem builtin = new DictItem(); - builtin.setGroupId(g.getId()); - builtin.setCode("builtin_item"); - builtin.setName("内置项"); - dictItemService.saveItem(builtin); + DictItemDTO builtinDto = new DictItemDTO(); + builtinDto.setGroupId(g.getId()); + builtinDto.setCode("builtin_item"); + builtinDto.setName("内置项"); + dictItemService.saveItem(builtinDto); + DictItem builtin = dictItemMapper.selectList(null).stream() + .filter(i -> "builtin_item".equals(i.getCode())).findFirst().orElseThrow(); builtin.setBuiltin(true); dictItemMapper.updateById(builtin); assertDictError(() -> dictItemService.deleteItem(builtin.getId()), DictConstants.CODE_BUILTIN_DICT_PROTECTED); @@ -268,22 +270,22 @@ class DictItemServiceTest extends AbstractDictH2Test { ItemPageParam param = new ItemPageParam(); param.setGroupId(g.getId()); - PageResult result = dictItemService.pageItems(param); + PageResult result = dictItemService.pageItems(param); assertThat(result.getContent()).hasSize(2); - DictItemVO voA = result.getContent().get(0); + DictItemDTO voA = result.getContent().get(0); assertThat(voA.getGroupName()).isEqualTo("分组"); assertThat(voA.getIsDefault()).isTrue(); assertThat(voA.getReferenced()).isTrue(); assertThat(voA.getEffectiveSelectable()).isTrue(); - DictItemVO voB = result.getContent().get(1); + DictItemDTO voB = result.getContent().get(1); assertThat(voB.getIsDefault()).isFalse(); assertThat(voB.getReferenced()).isFalse(); assertThat(voB.getEffectiveSelectable()).isTrue(); // 分组停用后:项自身启用但整组失活(US-32 视觉标记数据源) dictGroupService.updateGroupStatus(g.getId(), DictConstants.STATUS_DISABLED); - PageResult after = dictItemService.pageItems(param); + PageResult after = dictItemService.pageItems(param); assertThat(after.getContent()).allMatch(v -> !v.getEffectiveSelectable()); } } diff --git a/crm-file/target/classes/com/crm/file/config/FileProperties$Minio.class b/crm-file/target/classes/com/crm/file/config/FileProperties$Minio.class index 7f9cda230e9dfd4c8f5f309463e8a7039f281459..0cc4b6ed5e6cc95aad3874eee27ade85565b4ce6 100644 GIT binary patch delta 72 zcmew$^+9UG6c%O^2^O`gu;zIh|-B6itm21bTN chGYf?1|bF}1}=sOh7<-)hE#@hhD-)Y0Fbf|QUCw| diff --git a/crm-file/target/classes/com/crm/file/config/FileProperties$Preview.class b/crm-file/target/classes/com/crm/file/config/FileProperties$Preview.class index a009ad08c6082e28db7c0c5102e0fb821b733264..069487cc031a9442a31641f1989f40570ef7c33d 100644 GIT binary patch delta 72 zcmaDa`d)OyW)@}+hVaRqtQLa&Yz&cH3{ecx>Y*laH_*+I)~zkX1Ht<8 delta 72 zcmaDa`d)OyW)?wyHimF6h6sj8c7`Y(1`~$p$^TgnF>^4)PTt01vH2jYAggQ`10zEW cLmUGGgAfA~g8)M?Lp%c~Ljpq*Lkfc=0D|)l!~g&Q diff --git a/crm-file/target/classes/com/crm/file/config/FileProperties.class b/crm-file/target/classes/com/crm/file/config/FileProperties.class index 3b406c499d05e139de055989e9ddd6fc62df0d62..46c51c9e0bebf87de03f5127c46c2443d50a0939 100644 GIT binary patch delta 52 zcmV-40L%ZrKE6J%_YDIG0O*s=4wexQ1_0^`0P6tk2LSC10Gt5slL!vNvttjg4+ZG} K0RZQd79S`94qX49{ adI|yov%(940|}l00|1!-n*f=UO%FI*tP#Qh delta 81 zcmV-X0IvUqAB7*VX$lb!1^}800Gj}u2LPQ60G4!h_k{Af&&Se00RJ^0HOe(lT8meGZz$G diff --git a/crm-file/target/classes/com/crm/file/controller/FileController.class b/crm-file/target/classes/com/crm/file/controller/FileController.class index 6104701315f75a7325372ca1da0d87f30a89b9ea..4c33e27cabf8a38a22215ae2b8b7ee780fd08ce7 100644 GIT binary patch delta 104 zcmdn#v(slopd>Q~qrzl$DMe-hMy1Jd((*DYTnrqHsyvJWjDq}ZjOtvB8jPCkj9NSl z@r>G&lOzv;M0L3s^%(Wp84Y+C4H=C#M@lg0djqavdcJEJlWLp-C(N7G(YE0IX5EIZ011d7)V&Gsj;$akE6x`e)-NeN&&%ns2%Bar3 P%&5m`z^FG_QcVE>R@xCQ diff --git a/crm-file/target/classes/com/crm/file/domain/dto/FileDownloadDTO$FileDownloadDTOBuilder.class b/crm-file/target/classes/com/crm/file/domain/dto/FileDownloadDTO$FileDownloadDTOBuilder.class index be98865bfb38eb508b1c79f3832b341b4bbc52ea..b8a617ae7e80bfbfce565bccd9aec49524ddb497 100644 GIT binary patch delta 72 zcmbOyJWqJTX%=P<2J6WSS)&E{*%)lO80;AA*%=&o7*rV?C*NT?wD}KfE3>Q(10#bK cgA)S-gAfA~0|$cygEIpsgA0Qjg9n2o07I1x5dZ)H delta 72 zcmbOyJWqJTX%<0#HU?`h1{(%jb_P2h22}?8$yTg~m^m06C!b@9-u#EPm08w`fsw(1 c!HI!^L5P8gfrCMU!I^=R!G*z%!Gl2(03ufmoB#j- diff --git a/crm-file/target/classes/com/crm/file/domain/dto/FileInfoDTO.class b/crm-file/target/classes/com/crm/file/domain/dto/FileInfoDTO.class index e197860e2578b1bfe56e9e95068982a7009bef1c..70bf0e8e0c0d98984ff12cf41ef6569dc7c1fcce 100644 GIT binary patch delta 64 zcmaE$|3H7kHV$SEhV_$sII9Ht*%&r*F>GSk%+9cdhoOdH>*V7chc>fu9px3>z`)3` Uj$s=E0|OV3wVh!n!)^vi0F;3eSpWb4 delta 64 zcmaE$|3H7kHV#34Hiq?F3>z3WvNLSrVW?r)JlTcw5HknE*2z0Lsy4H69px2W$H2(2 Ug<%^50|OV3wVh!n!)^vi0EDR$0{{R3 diff --git a/crm-file/target/classes/com/crm/file/domain/dto/MultipartInitDTO.class b/crm-file/target/classes/com/crm/file/domain/dto/MultipartInitDTO.class index b9e832a66fe9998d507e03e04259a31c42c707e2..f68625b722715c0acf72905e61aab3f3d188a06e 100644 GIT binary patch delta 64 zcmaDY^;&8}8Y?pgL&{_uHeW%0Hik4VhIEDuc7{wI25W|_$>pqvHg~d}WfM(hU}Q*U S$Yx+*-~zI881fhj7$gAzgbmsN delta 64 zcmaDY^;&8}8mk~b8$${gLn=cWJ3~4TgEd3OK;_;RJ&u0B$f68UO$Q diff --git a/crm-file/target/classes/com/crm/file/service/KkFileViewClient.class b/crm-file/target/classes/com/crm/file/service/KkFileViewClient.class index 848d32ebf7548888dda4b6714b1409421bebb3ed..626056e755b49fe96114698b8de58b970650f43e 100644 GIT binary patch delta 71 zcmV-N0J#6v9Mv4Kp9w4o0IvZ66#*}AZft38Wl(Zuc4=jIKXr0!Jpm5}0I>=HvH-IO d0JIDMeE_wSunEGmjS8a!1+V}C0IriY4j?b(79jut delta 72 zcmV-O0Js0u9Mv4Kp9v8U1^}-L0I&eD2LQ4R0DSMgu ea%FaDWp_Vya%?>TvyBR)0|l-C0RXgY{&cAr4S+%j%od%`q?2m~7z$Z{ zss9ml3t1}{NYQW?_w1ws>#e-v+aq0k+LUdzD%DAfm2{pqJ+cGXuy>rVm@d9)_BeEz z>Q!=)+e!@@8=^*@9o?yRn^kI|Rx7n>)J`4wiI4>OqRG1x-x9-)<1}l=Ffj|Sng$CiZ7D2zDot0^(W`p|{{ey4Qu0IeI z^b2ZlxNL+L>sUaQ%oD=i$7(?|C_eA{2_S7LPb|8y>58f~R&o(^wGC#Yc1#IbMon z#1GeEDKg-@1!l}A^O@0XY%)FP2VW|e;CK(rF*chCO-!cap?oeq9UBh;$48->J@71o zW}saDqT(yQ+3{V&5Byx;8c@Jv;5RVp8tNX=ZNyaOB+zgl4>+M%G&>Zk5G!Vro9tza zYq*Ph2C2Y2*2%D#3AicDNfRZrv#$o2;sZ_wu*$JyK09T-=jY@Erv6LNE67!@s?%^A zcMPfr)^1gajlMRgp&VLvlS&?i+o>6tSM>I~#Bx-JRa|UDENFs3o`D8mN(4L?N;83xpnL{r~^~ diff --git a/crm-file/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/crm-file/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst index 138865a..fd5c617 100644 --- a/crm-file/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst +++ b/crm-file/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst @@ -1,27 +1,27 @@ -D:\code\crm-backend-matt\crm-file\src\main\java\com\crm\file\api\FileApi.java -D:\code\crm-backend-matt\crm-file\src\main\java\com\crm\file\config\FileProperties.java -D:\code\crm-backend-matt\crm-file\src\main\java\com\crm\file\config\MinioConfig.java -D:\code\crm-backend-matt\crm-file\src\main\java\com\crm\file\config\SchedulingConfig.java -D:\code\crm-backend-matt\crm-file\src\main\java\com\crm\file\constant\FileConstants.java -D:\code\crm-backend-matt\crm-file\src\main\java\com\crm\file\controller\FileController.java -D:\code\crm-backend-matt\crm-file\src\main\java\com\crm\file\domain\dto\FileDownloadDTO.java -D:\code\crm-backend-matt\crm-file\src\main\java\com\crm\file\domain\dto\FileInfoDTO.java -D:\code\crm-backend-matt\crm-file\src\main\java\com\crm\file\domain\dto\MultipartInitDTO.java -D:\code\crm-backend-matt\crm-file\src\main\java\com\crm\file\domain\dto\ThumbnailDTO.java -D:\code\crm-backend-matt\crm-file\src\main\java\com\crm\file\domain\dto\UploadSession.java -D:\code\crm-backend-matt\crm-file\src\main\java\com\crm\file\domain\entity\FileInfo.java -D:\code\crm-backend-matt\crm-file\src\main\java\com\crm\file\mapper\FileInfoMapper.java -D:\code\crm-backend-matt\crm-file\src\main\java\com\crm\file\service\IFileInfoService.java -D:\code\crm-backend-matt\crm-file\src\main\java\com\crm\file\service\impl\FileApiImpl.java -D:\code\crm-backend-matt\crm-file\src\main\java\com\crm\file\service\impl\FileInfoServiceImpl.java -D:\code\crm-backend-matt\crm-file\src\main\java\com\crm\file\service\impl\ImageThumbnailRenderer.java -D:\code\crm-backend-matt\crm-file\src\main\java\com\crm\file\service\impl\OfficeThumbnailRenderer.java -D:\code\crm-backend-matt\crm-file\src\main\java\com\crm\file\service\impl\PdfThumbnailRenderer.java -D:\code\crm-backend-matt\crm-file\src\main\java\com\crm\file\service\impl\ThumbnailImageUtils.java -D:\code\crm-backend-matt\crm-file\src\main\java\com\crm\file\service\KkFileViewClient.java -D:\code\crm-backend-matt\crm-file\src\main\java\com\crm\file\service\ThumbnailPlaceholderService.java -D:\code\crm-backend-matt\crm-file\src\main\java\com\crm\file\service\ThumbnailRenderer.java -D:\code\crm-backend-matt\crm-file\src\main\java\com\crm\file\task\OrphanChunkCleanupTask.java -D:\code\crm-backend-matt\crm-file\src\main\java\com\crm\file\task\ThumbnailGenerationTask.java -D:\code\crm-backend-matt\crm-file\src\main\java\com\crm\file\task\ThumbnailRetryTask.java -D:\code\crm-backend-matt\crm-file\src\main\java\com\crm\file\util\FileNames.java +E:\code\crm-backend-matt\crm-file\src\main\java\com\crm\file\api\FileApi.java +E:\code\crm-backend-matt\crm-file\src\main\java\com\crm\file\config\FileProperties.java +E:\code\crm-backend-matt\crm-file\src\main\java\com\crm\file\config\MinioConfig.java +E:\code\crm-backend-matt\crm-file\src\main\java\com\crm\file\config\SchedulingConfig.java +E:\code\crm-backend-matt\crm-file\src\main\java\com\crm\file\constant\FileConstants.java +E:\code\crm-backend-matt\crm-file\src\main\java\com\crm\file\controller\FileController.java +E:\code\crm-backend-matt\crm-file\src\main\java\com\crm\file\domain\dto\FileDownloadDTO.java +E:\code\crm-backend-matt\crm-file\src\main\java\com\crm\file\domain\dto\FileInfoDTO.java +E:\code\crm-backend-matt\crm-file\src\main\java\com\crm\file\domain\dto\MultipartInitDTO.java +E:\code\crm-backend-matt\crm-file\src\main\java\com\crm\file\domain\dto\ThumbnailDTO.java +E:\code\crm-backend-matt\crm-file\src\main\java\com\crm\file\domain\dto\UploadSession.java +E:\code\crm-backend-matt\crm-file\src\main\java\com\crm\file\domain\entity\FileInfo.java +E:\code\crm-backend-matt\crm-file\src\main\java\com\crm\file\mapper\FileInfoMapper.java +E:\code\crm-backend-matt\crm-file\src\main\java\com\crm\file\service\IFileInfoService.java +E:\code\crm-backend-matt\crm-file\src\main\java\com\crm\file\service\impl\FileApiImpl.java +E:\code\crm-backend-matt\crm-file\src\main\java\com\crm\file\service\impl\FileInfoServiceImpl.java +E:\code\crm-backend-matt\crm-file\src\main\java\com\crm\file\service\impl\ImageThumbnailRenderer.java +E:\code\crm-backend-matt\crm-file\src\main\java\com\crm\file\service\impl\OfficeThumbnailRenderer.java +E:\code\crm-backend-matt\crm-file\src\main\java\com\crm\file\service\impl\PdfThumbnailRenderer.java +E:\code\crm-backend-matt\crm-file\src\main\java\com\crm\file\service\impl\ThumbnailImageUtils.java +E:\code\crm-backend-matt\crm-file\src\main\java\com\crm\file\service\KkFileViewClient.java +E:\code\crm-backend-matt\crm-file\src\main\java\com\crm\file\service\ThumbnailPlaceholderService.java +E:\code\crm-backend-matt\crm-file\src\main\java\com\crm\file\service\ThumbnailRenderer.java +E:\code\crm-backend-matt\crm-file\src\main\java\com\crm\file\task\OrphanChunkCleanupTask.java +E:\code\crm-backend-matt\crm-file\src\main\java\com\crm\file\task\ThumbnailGenerationTask.java +E:\code\crm-backend-matt\crm-file\src\main\java\com\crm\file\task\ThumbnailRetryTask.java +E:\code\crm-backend-matt\crm-file\src\main\java\com\crm\file\util\FileNames.java diff --git a/crm-file/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst b/crm-file/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst deleted file mode 100644 index 9a3146d..0000000 --- a/crm-file/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst +++ /dev/null @@ -1,8 +0,0 @@ -com\crm\file\service\impl\ImageThumbnailRendererTest.class -com\crm\file\service\impl\OfficeThumbnailRendererTest.class -com\crm\file\task\OrphanChunkCleanupTaskTest.class -com\crm\file\task\ThumbnailGenerationTaskTest.class -com\crm\file\task\ThumbnailRetryTaskTest.class -com\crm\file\service\KkFileViewClientTest.class -com\crm\file\service\impl\FileApiImplTest.class -com\crm\file\service\impl\PdfThumbnailRendererTest.class diff --git a/crm-file/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst b/crm-file/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst deleted file mode 100644 index 2450df7..0000000 --- a/crm-file/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst +++ /dev/null @@ -1,8 +0,0 @@ -D:\code\crm-backend-matt\crm-file\src\test\java\com\crm\file\service\impl\FileApiImplTest.java -D:\code\crm-backend-matt\crm-file\src\test\java\com\crm\file\service\impl\ImageThumbnailRendererTest.java -D:\code\crm-backend-matt\crm-file\src\test\java\com\crm\file\service\impl\OfficeThumbnailRendererTest.java -D:\code\crm-backend-matt\crm-file\src\test\java\com\crm\file\service\impl\PdfThumbnailRendererTest.java -D:\code\crm-backend-matt\crm-file\src\test\java\com\crm\file\service\KkFileViewClientTest.java -D:\code\crm-backend-matt\crm-file\src\test\java\com\crm\file\task\OrphanChunkCleanupTaskTest.java -D:\code\crm-backend-matt\crm-file\src\test\java\com\crm\file\task\ThumbnailGenerationTaskTest.java -D:\code\crm-backend-matt\crm-file\src\test\java\com\crm\file\task\ThumbnailRetryTaskTest.java diff --git a/crm-file/target/surefire-reports/TEST-com.crm.file.service.KkFileViewClientTest.xml b/crm-file/target/surefire-reports/TEST-com.crm.file.service.KkFileViewClientTest.xml deleted file mode 100644 index fb53ff4..0000000 --- a/crm-file/target/surefire-reports/TEST-com.crm.file.service.KkFileViewClientTest.xml +++ /dev/null @@ -1,63 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/crm-file/target/surefire-reports/TEST-com.crm.file.service.impl.FileApiImplTest.xml b/crm-file/target/surefire-reports/TEST-com.crm.file.service.impl.FileApiImplTest.xml deleted file mode 100644 index d791488..0000000 --- a/crm-file/target/surefire-reports/TEST-com.crm.file.service.impl.FileApiImplTest.xml +++ /dev/null @@ -1,111 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/crm-file/target/surefire-reports/TEST-com.crm.file.task.OrphanChunkCleanupTaskTest.xml b/crm-file/target/surefire-reports/TEST-com.crm.file.task.OrphanChunkCleanupTaskTest.xml deleted file mode 100644 index dbecdb1..0000000 --- a/crm-file/target/surefire-reports/TEST-com.crm.file.task.OrphanChunkCleanupTaskTest.xml +++ /dev/null @@ -1,64 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/crm-file/target/surefire-reports/com.crm.file.service.KkFileViewClientTest.txt b/crm-file/target/surefire-reports/com.crm.file.service.KkFileViewClientTest.txt deleted file mode 100644 index 4bfdb5f..0000000 --- a/crm-file/target/surefire-reports/com.crm.file.service.KkFileViewClientTest.txt +++ /dev/null @@ -1,4 +0,0 @@ -------------------------------------------------------------------------------- -Test set: com.crm.file.service.KkFileViewClientTest -------------------------------------------------------------------------------- -Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.015 s -- in com.crm.file.service.KkFileViewClientTest diff --git a/crm-file/target/surefire-reports/com.crm.file.service.impl.FileApiImplTest.txt b/crm-file/target/surefire-reports/com.crm.file.service.impl.FileApiImplTest.txt deleted file mode 100644 index ba84278..0000000 --- a/crm-file/target/surefire-reports/com.crm.file.service.impl.FileApiImplTest.txt +++ /dev/null @@ -1,4 +0,0 @@ -------------------------------------------------------------------------------- -Test set: com.crm.file.service.impl.FileApiImplTest -------------------------------------------------------------------------------- -Tests run: 48, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 6.533 s -- in com.crm.file.service.impl.FileApiImplTest diff --git a/crm-file/target/surefire-reports/com.crm.file.task.OrphanChunkCleanupTaskTest.txt b/crm-file/target/surefire-reports/com.crm.file.task.OrphanChunkCleanupTaskTest.txt deleted file mode 100644 index 2f595c5..0000000 --- a/crm-file/target/surefire-reports/com.crm.file.task.OrphanChunkCleanupTaskTest.txt +++ /dev/null @@ -1,4 +0,0 @@ -------------------------------------------------------------------------------- -Test set: com.crm.file.task.OrphanChunkCleanupTaskTest -------------------------------------------------------------------------------- -Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.053 s -- in com.crm.file.task.OrphanChunkCleanupTaskTest diff --git a/crm-file/target/test-classes/com/crm/file/service/KkFileViewClientTest.class b/crm-file/target/test-classes/com/crm/file/service/KkFileViewClientTest.class deleted file mode 100644 index fa0f867af782fbf38177e9469c3bf235f130a008..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3503 zcmbVPZF3XX6@IR5SX*o`D8=QiMSuaxMqb-7Z+46$8z>IK5absON!+z`Ev>!U6}u~k zBu$ehC21Nk&{9IDWXL4#gvp1b>45BsLz>U|9kC7hl7Eotxw}G^9GNm1+1k6i_nh-Q z=k@B_AHVz>KqqeaP=QJbRWep!CBvF=by8Jy)krEQM#p*FVOaUJW@yeqhRR@QP(n4s zwz!#A;#OK2({!%HO=C<;Do1F2(lRsLax`xHAfd7bs~}5wLdI&;GK5ORY;H|zajqPj z5R!u$f2l{;xZ(73n~bg&su$HU)JIFC%Np&Fu$Ey*$;Rc(_^<{~3evw|*cE&n<)J~r zr%uK%v7WpVchQn?sqAw0I)q0y%GiX>48A0HPFj4DNHa7AL!~Opa;wkp@2JMF$vr8@ z$+RoV#6SQh6sg5?r6AB;e>=Z!?$_Sx>p>{N@ z>504-T$nq{!Tc$5A9f=wp-F~hq#ju$Q z*CkN2r9S_*qXzvLkT57?2&X9n+>M52Dsc)5m7EfDR3o8U2?3q%DeqPc^dA|a;BWM_ z7H`gPq9$?%XC*u@;|09P@T8}ev<;k!7I3XhxCj}ZDNY72W*y7xE)yglehXE?s4y32 zSic-wiewp6p|jm0C%EXcV^ny-v)zxdJ}APSlA(zrtY-#Lo>6KjecALVxB5Lk z{-_yO^+DCr#C`r@m6Otld1L9oS#D;DQA{RQPj^4cArrSWGrse zOyCIyzn3@eu_T|zRExBsFtQ|1744P0?5EY{WiaJwZC~c~AdSpi)+U0-b?ZCkoRtOs)I1(gbt6IaQ-aBj`~J7Pt_>Q0RxRF3w&4{J|S<&t18C z|Gziprf$*S{PlO}l(W=BG*C2}70H;c+Npj^OQ(fDdP*S#=KlTlgST$aU%xs3!H0qH z!GMQ#?%hjsQ?n2L{!g;^-OQ!$zWik2+O4_E7rlKnWQy{CgqV2kmCkZBgcBncr(tY7 z%*)>So1Z?oaB1P*XMrWQg}JGZ=I_id{Nv92)W66Oaa*`{+cP?M`Re_<(+l^mF3jG% z|M~R%7jIJFVrJHgb8+mWq$+p*YZ8ryLGCpSZuJm#n^V?G`GHBRe6OQp&nh~-g>&H2Pa|cxq_3xE#o#t1nE?s_vm@xYB<( zmcwtpL0kUzn7AF9Mf>m!j)(t)*bIhq7@@^9675wRsz{R5CWjWWHxX)J3%Oz|`Ldo^ z?8G+gqNW%^6pb{=cGLW61V%BCxFwoiR?%5T5Ys^f|A!Lo9|t`Ll?1z??oRwPZW0Fy&z22Kty6**D- tpaKq3I(8KWzqTm&ONjr41pZ1Q6}X1K(bZ3@0R33Fjv5-jeRv-={{wXf@=pK& diff --git a/crm-file/target/test-classes/com/crm/file/service/impl/FileApiImplTest.class b/crm-file/target/test-classes/com/crm/file/service/impl/FileApiImplTest.class deleted file mode 100644 index 473cecf744d396b161ac81caa2444469e30dfcbb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43461 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%0Dy3`s|X$d2pj?Ykc|1H$;_7_Q=&38 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 J?JJ?a{|Du59RUCU diff --git a/crm-file/target/test-classes/com/crm/file/task/OrphanChunkCleanupTaskTest.class b/crm-file/target/test-classes/com/crm/file/task/OrphanChunkCleanupTaskTest.class deleted file mode 100644 index 69f0872a0c72fde15c5f756d0b7d581bfcc2fec0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7942 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 M=7@x_MG|#C2GA7oZU6uP diff --git a/test-output.txt b/test-output.txt index 2464645e69e8101693e31d9329513c95ffcd9f8b..1528484dbff089e256d074a09d02bbf08a40cb04 100644 GIT binary patch literal 14390 zcmeHOTT|Oc6yE2~^gsA5VOseX5*ntH77}Rbq?Ex<`v7?WU%;ttTw9Rx=i7eY9xvMU zuCRrTEz^ugmb5y%doJHOdn6tG`_G9wP={(?{iZ&uf~u*8I#Yf8I@m7I(pFb$i2VTn zSL%~$fg)BTRn)())mQ37{h@Z$F-GA?Kk0GO+G`l2hcV1}=cy!E&o~fb=f$24y@2uuYs2X*kM~+ECx4i9MOBFHCDG8g+zWA zS4J9p?SgJPetUdV~H=%_R|HaKkpDh#U>Ek#G8g z!J+FVMCuPgq`eLzt&$mO2U>dZBSxPKM20RjSI}M{F@zCKyqr-g2EU9l9rd?9V^kVp z3&lKYm6B7-q!2IT=sco7i8oPxxmM8jID9&bS!3;cpsy149+KV z3m+r2_qA5r;5Wu5ao|_*NUM-X*E)@z6Td+Yson{7R$bQz{t^97Mtf?Xv1Ci zWc`X@b2HcU^~xSGyTopf6UcAYn~x8Y(jCvYir*qV1QCM0NTZP$B`zC4#|XR(fR}4v zjqB95dI5BBtKgW}b*ULk7<(8cuhB0?f1k>%YQENmC!g05*5?j55&Y9jT8IqvEXFoj zKPTsThbwGjw5B)G$M?YXsYV*PJWNditNZagzY5?3rb{VaYrqHOXg%<{1}JK zN=|eqxf*i;Ms&vCCa9UAnMi5Jg4y&miPrl)jdKy}$9ix3XGmx1)Y~_d2j+t2y%goid53Ltf_{mFnyV2TxdYVNu@1XV1 zh`h{#&ftq?1!#i<+JipKNFL*yUd=3<*;5Qljc``NkGwKtD(W~c>t7Mn18mHc=-XU1 zE|$eNFO1J<%Z)$=`2p<)b@Hr3R)rS&O2%Pl);FMKzQJ5w&@+j&1Yt!F zALLQ)8Hr!6P4Qj+UR1xR4?qp?VU8xQ9bvvJ;MU9?LW7YZzj%1XbKSfmO+GhTq)~;mFdgxeI$8}@66}{e^p`BpkafrQjY#_gJxAjC5SZaz z-D_+waGZ=hOW(-q%cqEWLQ*10{&e(zz!`H5xj$}Y!kFFfsp89)F^m7%{X)7~7hGK- zR!|m``)(rcFoz7aGCDCYDW_0~9)u!qF(@oixb-1&u8Y0riN*H%J<1eG+@2wS31xq) zxEIK)e%1wFS?)R~??ahCn>z_V=W%n%Y<=AfQ=Vjp5Vx8fGKEiO4eBorZYfE+% zt-_b)!O&wx)TggGJ}G{jr(fcMPhW$N8Nb#;ds(7ewmXJJ-)&^q=W6an=81)2kFMyt zTD}oU#`f>-{HNjal)&`P+w-JEmePXmRg9#I(bE^a&8x?J<#GAN+pMdt`xOG8zPK$? zt+lLwfBu55mEXfV@EW$d-uqO`;!o!B=RejtQ}XSGZxSp_+hejHyrAvFPjQ!+I`%eshJDXG6^kt5-I4&G0_PWTlZ*m#~tB zbqf3%U=Or>+s|(wlGfU|YLf37Si^3p>lj78AmP^>T;o~UXejs&VoTRQkO%6C-$1bD za@o3=-4^7(q4grw+{HT^{0`n(t6|rA8y(N8{R;F!EiX&|WqjkoYLwaazbN^AjY!3z z)bbKrK84?6^y^}{iZ|$s(xN}7-?H3DGJQ6m!(G(w9N?Rwcd&I0$8YiDH$}C8mZy)u zTnb;BI^qwb9&2b>mCXplm{UNt#U>);E7*SvXQP00`#QqVQ(1Y(ZxR?m*}Do)sG@I# i{df3h7FS0L>(6;*8{3xpMqg!1IWYQiH8XuS>h3@1AXni4 literal 15134 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