102 Commits

Author SHA1 Message Date
jihaipeng 144c296eb0 正式环境 3 weeks ago
jihaipeng 70b6497f86 修改 3 weeks ago
jihaipeng 2efab94a0d 修改地址逻辑 3 weeks ago
jihaipeng 08971e9023 Merge branch 'milestone-20250723-wwl' of http://39.101.133.168:8807/qimaohong/ActivityProject into milestone-20250723-wwl 3 weeks ago
jihaipeng caba10623d 修改地址 3 weeks ago
willy c7e142a187 小修改 3 weeks ago
jihaipeng f0ee6915db Merge branch 'milestone-20250723-wwl' into jihaipeng/feature-20250714184358-抽奖众筹 3 weeks ago
jihaipeng 64f4240453 添加地址 3 weeks ago
willy 52dfd81b80 Merge branch 'wuweili/feature-20250715095139-抽奖众筹' into milestone-20250723-wwl 3 weeks ago
willy 4268b7d19f 添加地区字段 3 weeks ago
willy 62f4fe7392 Merge branch 'milestone-20250723-wwl' of http://39.101.133.168:8807/qimaohong/ActivityProject into milestone-20250723-wwl 3 weeks ago
willy 71eaf8faa3 修改内定用户软删 3 weeks ago
jihaipeng 9406e3c182 正式版 3 weeks ago
jihaipeng c01e83bff7 Merge branch 'milestone-20250723-wwl' into jihaipeng/feature-20250714184358-抽奖众筹 3 weeks ago
lihuilin 1a95fb8e4e 批量删除 3 weeks ago
willy 4f212ebfda 修改 3 weeks ago
willy 54a95e0a11 Merge branch 'milestone-20250723-wwl' into wuweili/feature-20250715095139-抽奖众筹 3 weeks ago
willy 2dbba1f07a 修改 3 weeks ago
lihuilin 45c278e3bb 总数,删除默认pageNum,paheSize 3 weeks ago
lihuilin 83c890d99c 总数,搜索 3 weeks ago
lihuilin 376f96e601 忘记修改啥了 3 weeks ago
jihaipeng 6e521d2b40 Merge branch 'milestone-20250723-wwl' into jihaipeng/feature-20250714184358-抽奖众筹 3 weeks ago
jihaipeng b55df8da81 最终版 3 weeks ago
lihuilin d53137da2e 礼品小修 3 weeks ago
willy ac69c5fa74 修改导出条数不得大于10000 3 weeks ago
willy 10f7894397 Merge branch 'milestone-20250723-wwl' into wuweili/feature-20250715095139-抽奖众筹 3 weeks ago
willy 14d9f6b369 修改bug 3 weeks ago
lihuilin 6fa2b91b69 奖品bug修复 3 weeks ago
willy 3875710c1c Merge branch 'wuweili/feature-20250715095139-抽奖众筹' into milestone-20250723-wwl 4 weeks ago
willy 68f1846653 小修改 4 weeks ago
willy 9f4b6bb0a3 Merge branch 'wuweili/feature-20250715095139-抽奖众筹' into milestone-20250723-wwl 4 weeks ago
willy dca7928a49 修复bug 4 weeks ago
jihaipeng 338f5edbd5 Merge branch 'milestone-20250723-wwl' into jihaipeng/feature-20250714184358-抽奖众筹 4 weeks ago
jihaipeng 2de97be967 区分测试正式环境 4 weeks ago
willy 820213a42d Merge branch 'wuweili/feature-20250715095139-抽奖众筹' into milestone-20250723-wwl 4 weeks ago
willy deba57659e 修改bug 4 weeks ago
jihaipeng 232a12a68b Merge branch 'milestone-20250723-wwl' into jihaipeng/feature-20250714184358-抽奖众筹 4 weeks ago
jihaipeng 25c50f7ea9 修改虚拟次数 4 weeks ago
willy edacf2cd42 小修 4 weeks ago
willy 35b7fc3257 Merge branch 'milestone-20250723-wwl' into wuweili/feature-20250715095139-抽奖众筹 4 weeks ago
willy 637b09f0b1 Merge branch 'milestone-20250723-wwl' of http://39.101.133.168:8807/qimaohong/ActivityProject into milestone-20250723-wwl 4 weeks ago
willy 40dda140c0 小修 4 weeks ago
willy f5921adaf2 小修 4 weeks ago
jihaipeng d8e0617ccf Merge branch 'jihaipeng/feature-20250714184358-抽奖众筹' into milestone-20250723-wwl 4 weeks ago
jihaipeng b8dd58bbd5 修改 4 weeks ago
jihaipeng b17b183c0c 修改虚拟添加次数1500限制 4 weeks ago
willy e4b7ab969d 修改小bug 4 weeks ago
jihaipeng c565dc8eb6 Merge branch 'jihaipeng/feature-20250714184358-抽奖众筹' into milestone-20250723-wwl 4 weeks ago
jihaipeng 06bf838ac7 修改异常捕获 4 weeks ago
willy fc5a92ee05 4 weeks ago
willy ff3fb59217 Merge branch 'milestone-20250723-wwl' into wuweili/feature-20250715095139-抽奖众筹 4 weeks ago
willy 787205d220 修复bug 4 weeks ago
jihaipeng 48d3657b63 跨域拦截继承WebMvcConfigurer 4 weeks ago
jihaipeng 35f9583ba1 Merge branch 'milestone-20250723-wwl' into jihaipeng/feature-20250714184358-抽奖众筹 4 weeks ago
jihaipeng 8ae6d73fb8 登录权限校验 4 weeks ago
willy a44782a72b 全部整理完前端反馈的bug 4 weeks ago
willy e816e4e7ab 小修 4 weeks ago
willy 2432139005 实现软删之后的细节修改,修改一些bug 4 weeks ago
jihaipeng 73388fb96f Merge branch 'milestone-20250723-wwl' of http://39.101.133.168:8807/qimaohong/ActivityProject into milestone-20250723-wwl合并代码 4 weeks ago
jihaipeng 0050dd1620 暂存 4 weeks ago
willy 3e63344878 对五张表实现软删 4 weeks ago
willy 9e056a1b36 Merge branch 'milestone-20250723-wwl' of http://39.101.133.168:8807/qimaohong/ActivityProject into milestone-20250723-wwl 4 weeks ago
willy 3817111ac9 tijiao 4 weeks ago
jihaipeng 58338b82d3 Merge branch 'jihaipeng/feature-20250714184358-抽奖众筹' into milestone-20250723-wwl 4 weeks ago
jihaipeng ac99edf70b 修改返回内容格式 4 weeks ago
willy 100b2f5afc Merge branch 'wuweili/feature-20250715095139-抽奖众筹' into milestone-20250723-wwl 4 weeks ago
willy cb75551bef 修改 4 weeks ago
jihaipeng 4870ec9a1f 修改代码 4 weeks ago
willy a3d81b47dd Merge branch 'milestone-20250723-wwl' into wuweili/feature-20250715095139-抽奖众筹 4 weeks ago
willy 2b372ff080 完善抽奖逻辑,修改其他接口的细节。 4 weeks ago
jihaipeng 79d0092727 修改市场id导致的获取接口 1 month ago
jihaipeng 6a7a110165 修改id传参 1 month ago
willy bae3e5552b Merge branch 'wuweili/feature-20250715095139-抽奖众筹' into milestone-20250723-wwl 1 month ago
jihaipeng 039b3e03a2 添加活动接口修改 1 month ago
willy 23d340c323 完成所有接口,先上一版,导出内定名单接口未完善 1 month ago
jihaipeng 5dc61e0397 添加股票名称 1 month ago
willy 727c0c7d4d Merge branch 'milestone-20250723-wwl' of http://39.101.133.168:8807/qimaohong/ActivityProject into milestone-20250723-wwl 1 month ago
willy ebe78527ee 暂存 1 month ago
jihaipeng 587f2df76f 暂存 1 month ago
willy 724079281f Merge branch 'milestone-20250723-wwl' of http://39.101.133.168:8807/qimaohong/ActivityProject into milestone-20250723-wwl 1 month ago
willy b5fda80ec8 完成中奖逻辑和后台其他接口 1 month ago
jihaipeng e397c3bd3d 众筹全部写完 1 month ago
jihaipeng 2b4bfe7c48 Merge branch 'milestone-20250723-wwl' into jihaipeng/feature-20250714184358-抽奖众筹 1 month ago
jihaipeng 04aadcf2cb 众筹 1 month ago
willy df8740dee1 基本完成抽奖的所有接口 1 month ago
jihaipeng 6d3f7e5338 提交 1 month ago
jihaipeng 4dddc0aef6 Merge branch 'jihaipeng/feature-20250714184358-抽奖众筹' into milestone-20250723-wwl 1 month ago
jihaipeng 62e59ed612 众筹接口实现 1 month ago
willy 6ce63ec647 编写抽奖后台相关接口 1 month ago
willy 52771015a5 实现一些接口 1 month ago
jihaipeng df2fc44e9b 胡罗 1 month ago
jihaipeng 7212f45905 删掉众筹,合并到admin,api 1 month ago
jihaipeng a1b9237931 Merge branch 'milestone-20250723-wwl' of http://39.101.133.168:8807/qimaohong/ActivityProject into milestone-20250723-wwl 1 month ago
jihaipeng 02a6f1cfd3 Merge branch 'milestone-20250723-wwl' of http://39.101.133.168:8807/qimaohong/ActivityProject into milestone-20250723-wwl 1 month ago
willy d15bd952ec 实现等级管理的所有接口 1 month ago
jihaipeng 319ab7655a 获奖记录 1 month ago
willy 64e9ce96d5 hahah 1 month ago
willy 96b6520db8 实现查询用户、等级、奖品 1 month ago
jihaipeng 2047d624cb 修改项目结构 1 month ago
willy 2f9683cbda 实现user登录一部分接口 1 month ago
willy 8c56af12fa 实现user登录一部分接口 1 month ago
willy 3599d738f7 编写实体类和工具类 1 month ago
  1. 8
      .idea/.gitignore
  2. 22
      .idea/compiler.xml
  3. 10
      .idea/encodings.xml
  4. 20
      .idea/jarRepositories.xml
  5. 9
      .idea/lottery.iml
  6. 14
      .idea/misc.xml
  7. 8
      .idea/modules.xml
  8. 124
      .idea/uiDesigner.xml
  9. 6
      .idea/vcs.xml
  10. BIN
      lottery-system/.idea/.cache/.Apifox_Helper/.toolWindow.db
  11. 13
      lottery-system/.idea/ApifoxUploaderProjectSetting.xml
  12. 17
      lottery-system/.idea/dataSources.xml
  13. 25
      lottery-system/lottery-common/pom.xml
  14. 14
      lottery-system/lottery-common/src/main/java/com/lottery/constant/RedisCacheConstant.java
  15. 20
      lottery-system/lottery-common/src/main/java/com/lottery/exception/Accountexception.java
  16. 15
      lottery-system/lottery-common/src/main/java/com/lottery/exception/BaseException.java
  17. 23
      lottery-system/lottery-common/src/main/java/com/lottery/exception/BusinessException.java
  18. 23
      lottery-system/lottery-common/src/main/java/com/lottery/exception/GlobalException.java
  19. 138
      lottery-system/lottery-common/src/main/java/com/lottery/exception/GlobalExceptionHandler.java
  20. 21
      lottery-system/lottery-common/src/main/java/com/lottery/exception/SomeException.java
  21. 27
      lottery-system/lottery-common/src/main/java/com/lottery/propertise/jwtPropertice.java
  22. 19
      lottery-system/lottery-common/src/main/java/com/lottery/result/Result.java
  23. 101
      lottery-system/lottery-common/src/main/java/com/lottery/utils/ExcelUtil.java
  24. 56
      lottery-system/lottery-common/src/main/java/com/lottery/utils/HttpUtils.java
  25. 74
      lottery-system/lottery-common/src/main/java/com/lottery/utils/JwtUtil.java
  26. 30
      lottery-system/lottery-common/src/main/java/com/lottery/utils/LoginHttpUtils.java
  27. 68
      lottery-system/lottery-common/src/main/java/com/lottery/utils/ValidationUtils.java
  28. 20
      lottery-system/lottery-pojo/pom.xml
  29. 21
      lottery-system/lottery-pojo/src/main/java/com/lottery/dto/ActivityDto.java
  30. 27
      lottery-system/lottery-pojo/src/main/java/com/lottery/dto/ActivityTimeDto.java
  31. 29
      lottery-system/lottery-pojo/src/main/java/com/lottery/dto/AdminLogin.java
  32. 26
      lottery-system/lottery-pojo/src/main/java/com/lottery/dto/ApiUrlResp.java
  33. 32
      lottery-system/lottery-pojo/src/main/java/com/lottery/dto/FixUserDto.java
  34. 35
      lottery-system/lottery-pojo/src/main/java/com/lottery/dto/FundingActivityDto.java
  35. 26
      lottery-system/lottery-pojo/src/main/java/com/lottery/dto/FundingRecordDto.java
  36. 30
      lottery-system/lottery-pojo/src/main/java/com/lottery/dto/FundingUserDto.java
  37. 44
      lottery-system/lottery-pojo/src/main/java/com/lottery/dto/GradeDto.java
  38. 19
      lottery-system/lottery-pojo/src/main/java/com/lottery/dto/PageSimpleDto.java
  39. 51
      lottery-system/lottery-pojo/src/main/java/com/lottery/dto/Prize.java
  40. 36
      lottery-system/lottery-pojo/src/main/java/com/lottery/dto/PrizeDto.java
  41. 19
      lottery-system/lottery-pojo/src/main/java/com/lottery/dto/SimpleQueryDto.java
  42. 26
      lottery-system/lottery-pojo/src/main/java/com/lottery/dto/StartLotteryDto.java
  43. 29
      lottery-system/lottery-pojo/src/main/java/com/lottery/dto/UserByJwcodeDto.java
  44. 24
      lottery-system/lottery-pojo/src/main/java/com/lottery/dto/UserByJwcodePageDto.java
  45. 35
      lottery-system/lottery-pojo/src/main/java/com/lottery/dto/UserDto.java
  46. 26
      lottery-system/lottery-pojo/src/main/java/com/lottery/dto/UserImportDto.java
  47. 21
      lottery-system/lottery-pojo/src/main/java/com/lottery/dto/UserLoginDto.java
  48. 25
      lottery-system/lottery-pojo/src/main/java/com/lottery/dto/UserQueryDto.java
  49. 27
      lottery-system/lottery-pojo/src/main/java/com/lottery/dto/VriableAddDto.java
  50. 34
      lottery-system/lottery-pojo/src/main/java/com/lottery/dto/WinUserExportDto.java
  51. 26
      lottery-system/lottery-pojo/src/main/java/com/lottery/dto/WinUserQueryDto.java
  52. 39
      lottery-system/lottery-pojo/src/main/java/com/lottery/entity/Activity.java
  53. 32
      lottery-system/lottery-pojo/src/main/java/com/lottery/entity/FundingData.java
  54. 45
      lottery-system/lottery-pojo/src/main/java/com/lottery/entity/FundingExport.java
  55. 36
      lottery-system/lottery-pojo/src/main/java/com/lottery/entity/FundingUser.java
  56. 52
      lottery-system/lottery-pojo/src/main/java/com/lottery/entity/Grade.java
  57. 30
      lottery-system/lottery-pojo/src/main/java/com/lottery/entity/JwcodeTable.java
  58. 28
      lottery-system/lottery-pojo/src/main/java/com/lottery/entity/Market.java
  59. 30
      lottery-system/lottery-pojo/src/main/java/com/lottery/entity/Prize.java
  60. 11
      lottery-system/lottery-pojo/src/main/java/com/lottery/entity/User.java
  61. 36
      lottery-system/lottery-pojo/src/main/java/com/lottery/entity/UserDetail.java
  62. 16
      lottery-system/lottery-pojo/src/main/java/com/lottery/entity/WinnerRecord.java
  63. 23
      lottery-system/lottery-pojo/src/main/java/com/lottery/vo/AdminLoginVo.java
  64. 21
      lottery-system/lottery-pojo/src/main/java/com/lottery/vo/ApiFundingTimeVo.java
  65. 16
      lottery-system/lottery-pojo/src/main/java/com/lottery/vo/ApiFundingVO.java
  66. 23
      lottery-system/lottery-pojo/src/main/java/com/lottery/vo/ApimarketVo.java
  67. 26
      lottery-system/lottery-pojo/src/main/java/com/lottery/vo/FundingActivityVo.java
  68. 23
      lottery-system/lottery-pojo/src/main/java/com/lottery/vo/FundingDataVO.java
  69. 20
      lottery-system/lottery-pojo/src/main/java/com/lottery/vo/FundingUserNewVo.java
  70. 26
      lottery-system/lottery-pojo/src/main/java/com/lottery/vo/FundingUserVo.java
  71. 27
      lottery-system/lottery-pojo/src/main/java/com/lottery/vo/FundingVo.java
  72. 18
      lottery-system/lottery-pojo/src/main/java/com/lottery/vo/GradeSimpleVo.java
  73. 33
      lottery-system/lottery-pojo/src/main/java/com/lottery/vo/GradeVo.java
  74. 23
      lottery-system/lottery-pojo/src/main/java/com/lottery/vo/ImportResultVo.java
  75. 26
      lottery-system/lottery-pojo/src/main/java/com/lottery/vo/LoginUserVo.java
  76. 21
      lottery-system/lottery-pojo/src/main/java/com/lottery/vo/LotteryVo.java
  77. 21
      lottery-system/lottery-pojo/src/main/java/com/lottery/vo/MarketVo.java
  78. 37
      lottery-system/lottery-pojo/src/main/java/com/lottery/vo/PageInfo.java
  79. 38
      lottery-system/lottery-pojo/src/main/java/com/lottery/vo/PrizeAndGradeVo.java
  80. 33
      lottery-system/lottery-pojo/src/main/java/com/lottery/vo/PrizeVo.java
  81. 29
      lottery-system/lottery-pojo/src/main/java/com/lottery/vo/UserLoginVo.java
  82. 19
      lottery-system/lottery-pojo/src/main/java/com/lottery/vo/UserVo.java
  83. 35
      lottery-system/lottery-pojo/src/main/java/com/lottery/vo/WinUserVo.java
  84. 56
      lottery-system/lottery-service/pom.xml
  85. 11
      lottery-system/lottery-service/src/main/java/com/lottery/LotteryApplication.java
  86. 128
      lottery-system/lottery-service/src/main/java/com/lottery/admin/controller/AdminGradeController.java
  87. 50
      lottery-system/lottery-service/src/main/java/com/lottery/admin/controller/AdminIsLoginController.java
  88. 89
      lottery-system/lottery-service/src/main/java/com/lottery/admin/controller/AdminPrizeController.java
  89. 200
      lottery-system/lottery-service/src/main/java/com/lottery/admin/controller/AdminUserController.java
  90. 57
      lottery-system/lottery-service/src/main/java/com/lottery/admin/controller/AdminWInController.java
  91. 183
      lottery-system/lottery-service/src/main/java/com/lottery/admin/controller/FundingController.java
  92. 29
      lottery-system/lottery-service/src/main/java/com/lottery/admin/controller/TongBuController.java
  93. 33
      lottery-system/lottery-service/src/main/java/com/lottery/admin/mapper/AdminGradeMapper.java
  94. 26
      lottery-system/lottery-service/src/main/java/com/lottery/admin/mapper/AdminIsLoginMapper.java
  95. 27
      lottery-system/lottery-service/src/main/java/com/lottery/admin/mapper/AdminPrizeMapper.java
  96. 27
      lottery-system/lottery-service/src/main/java/com/lottery/admin/mapper/AdminUserDetailMapper.java
  97. 55
      lottery-system/lottery-service/src/main/java/com/lottery/admin/mapper/AdminUserMapper.java
  98. 21
      lottery-system/lottery-service/src/main/java/com/lottery/admin/mapper/AdminWinMapper.java
  99. 102
      lottery-system/lottery-service/src/main/java/com/lottery/admin/mapper/IFundingMapper.java
  100. 45
      lottery-system/lottery-service/src/main/java/com/lottery/admin/service/AdminGradeService.java

8
.idea/.gitignore

@ -0,0 +1,8 @@
# Default ignored files
/shelf/
/workspace.xml
# Editor-based HTTP Client requests
/httpRequests/
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml

22
.idea/compiler.xml

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CompilerConfiguration">
<annotationProcessing>
<profile name="Maven default annotation processors profile" enabled="true">
<sourceOutputDir name="target/generated-sources/annotations" />
<sourceTestOutputDir name="target/generated-test-sources/test-annotations" />
<outputRelativeToContentRoot value="true" />
<module name="lottery-service" />
<module name="lottery-common" />
<module name="lottery-pojo" />
</profile>
</annotationProcessing>
</component>
<component name="JavacSettings">
<option name="ADDITIONAL_OPTIONS_OVERRIDE">
<module name="lottery-common" options="-parameters" />
<module name="lottery-pojo" options="-parameters" />
<module name="lottery-service" options="-parameters" />
</option>
</component>
</project>

10
.idea/encodings.xml

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Encoding">
<file url="file://$PROJECT_DIR$/lottery-system/lottery-common/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/lottery-system/lottery-pojo/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/lottery-system/lottery-service/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/lottery-system/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/lottery-system/src/main/resources" charset="UTF-8" />
</component>
</project>

20
.idea/jarRepositories.xml

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="RemoteRepositoriesConfiguration">
<remote-repository>
<option name="id" value="central" />
<option name="name" value="Maven Central repository" />
<option name="url" value="https://repo1.maven.org/maven2" />
</remote-repository>
<remote-repository>
<option name="id" value="jboss.community" />
<option name="name" value="JBoss Community repository" />
<option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" />
</remote-repository>
<remote-repository>
<option name="id" value="central" />
<option name="name" value="Central Repository" />
<option name="url" value="https://maven.aliyun.com/repository/public" />
</remote-repository>
</component>
</project>

9
.idea/lottery.iml

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$" />
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

14
.idea/misc.xml

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ExternalStorageConfigurationManager" enabled="true" />
<component name="MavenProjectsManager">
<option name="originalFiles">
<list>
<option value="$PROJECT_DIR$/lottery-system/pom.xml" />
</list>
</option>
</component>
<component name="ProjectRootManager" version="2" project-jdk-name="11" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/out" />
</component>
</project>

8
.idea/modules.xml

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/lottery.iml" filepath="$PROJECT_DIR$/.idea/lottery.iml" />
</modules>
</component>
</project>

124
.idea/uiDesigner.xml

@ -0,0 +1,124 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Palette2">
<group name="Swing">
<item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" />
</item>
<item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" />
</item>
<item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" />
</item>
<item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.svg" removable="false" auto-create-binding="false" can-attach-label="true">
<default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" />
</item>
<item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" />
<initial-values>
<property name="text" value="Button" />
</initial-values>
</item>
<item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
<initial-values>
<property name="text" value="RadioButton" />
</initial-values>
</item>
<item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
<initial-values>
<property name="text" value="CheckBox" />
</initial-values>
</item>
<item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" />
<initial-values>
<property name="text" value="Label" />
</initial-values>
</item>
<item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" />
</item>
<item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
<preferred-size width="200" height="200" />
</default-constraints>
</item>
<item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
<preferred-size width="200" height="200" />
</default-constraints>
</item>
<item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
</item>
<item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
</item>
<item class="javax.swing.JSeparator" icon="/com/intellij/uiDesigner/icons/separator.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3" />
</item>
<item class="javax.swing.JProgressBar" icon="/com/intellij/uiDesigner/icons/progressbar.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1" />
</item>
<item class="javax.swing.JToolBar" icon="/com/intellij/uiDesigner/icons/toolbar.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1">
<preferred-size width="-1" height="20" />
</default-constraints>
</item>
<item class="javax.swing.JToolBar$Separator" icon="/com/intellij/uiDesigner/icons/toolbarSeparator.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="0" anchor="0" fill="1" />
</item>
<item class="javax.swing.JScrollBar" icon="/com/intellij/uiDesigner/icons/scrollbar.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="0" anchor="0" fill="2" />
</item>
</group>
</component>
</project>

6
.idea/vcs.xml

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="" vcs="Git" />
</component>
</project>

BIN
lottery-system/.idea/.cache/.Apifox_Helper/.toolWindow.db

13
lottery-system/.idea/ApifoxUploaderProjectSetting.xml

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ApifoxUploaderProjectSetting">
<option name="apiAccessToken" value="APS-xj8kOQmafbg1T5dq6bs6LJfHku7PRk9n" />
<option name="apiProjectIds">
<array>
<option value="&lt;byte-array&gt;rO0ABXNyADZjb20uaXRhbmdjZW50LmlkZWEucGx1Z2luLmFwaS5hY2NvdW50LlByb2plY3RBbmRNb2R1bGUAAAAAAAAAAQIAFVoABmVuYWJsZUwACG1vZHVsZUlkdAASTGphdmEvbGFuZy9TdHJpbmc7TAAGb3RoZXIxcQB+AAFMAAdvdGhlcjEwcQB+AAFMAAdvdGhlcjExcQB+AAFMAAdvdGhlcjEycQB+AAFMAAZvdGhlcjJxAH4AAUwABm90aGVyM3EAfgABTAAGb3RoZXI0cQB+AAFMAAZvdGhlcjVxAH4AAUwABm90aGVyNnEAfgABTAAGb3RoZXI3cQB+AAFMAAZvdGhlcjhxAH4AAUwABm90aGVyOXEAfgABTAAKcGF0aEJlZm9yZXEAfgABTAANcHJvamVjdEZvbGRlcnEAfgABTAAPcHJvamVjdEZvbGRlcklkcQB+AAFMAAlwcm9qZWN0SWRxAH4AAUwAC3Byb2plY3ROYW1lcQB+AAFMAAxzY2hlbWFGb2xkZXJxAH4AAUwACHNjaGVtYUlkcQB+AAF4cAF0AA9sb3R0ZXJ5LXNlcnZpY2V0AABwcHBxAH4ABHQAC2JyYW5jaC1tYWludAAM6buY6K6k5qih5Z2XcHBwcHBxAH4ABHQACeagueebruW9lXQAATB0AAc2ODIyNTU4dAAM5Liq5Lq66aG555uucQB+AAdxAH4ACA==&lt;/byte-array&gt;" />
</array>
</option>
<option name="treeNodes" value="&lt;byte-array&gt;rO0ABXNyABdqYXZhLnV0aWwuTGlua2VkSGFzaE1hcDTATlwQbMD7AgABWgALYWNjZXNzT3JkZXJ4cgARamF2YS51dGlsLkhhc2hNYXAFB9rBwxZg0QMAAkYACmxvYWRGYWN0b3JJAAl0aHJlc2hvbGR4cD9AAAAAAAAMdwgAAAAQAAAAAXQABzM2OTM2NjhzcgAuY29tLml0YW5nY2VudC5pZGVhLnBsdWdpbi5hcGkuYWNjb3VudC5UcmVlTm9kZQAAAAAAAAABAgAQTAAHYWxsUGF0aHQAEkxqYXZhL2xhbmcvU3RyaW5nO1sAFGJyYW5jaEFuZFZlcnNpb25JdGVtdABLW0xjb20vaXRhbmdjZW50L2lkZWEvcGx1Z2luL2RpYWxvZy9jb21wb25lbnQvYWNjb3VudC9BY2NvdW50UmlnaHRQYW5lbEl0ZW07TAAUYnJhbmNoSWRBbmRWZXJzaW9uSWRxAH4ABUwACGNoaWxkcmVudAAPTGphdmEvdXRpbC9NYXA7TAAKZm9sZGVyVHlwZXEAfgAFTAAIZnVsbFBhdGhxAH4ABUwAA2tleXEAfgAFWwAJbW9kZWxJdGVtcQB+AAZMAAhtb2R1bGVJZHEAfgAFTAAEbmFtZXEAfgAFTAAIcGFyZW50SWRxAH4ABUwACXByb2plY3RJZHEAfgAFTAALcHJvamVjdE5hbWVxAH4ABUwABnRlYW1JZHEAfgAFTAAIdGVhbU5hbWVxAH4ABUwABHR5cGV0ADBMY29tL2l0YW5nY2VudC9pZGVhL3BsdWdpbi9hcGkvYWNjb3VudC9Ob2RlVHlwZTt4cHQADOS4quS6uuWboumYn3Bwc3EAfgAAP0AAAAAAAAx3CAAAABAAAAABdAAHNjgyMjU1OHNxAH4ABHQAGeS4quS6uuWboumYny/kuKrkurrpobnnm65wcHNxAH4AAD9AAAAAAAAAdwgAAAAQAAAAAHgAcHBxAH4ADHBwdAAW5Liq5Lq66aG555uuICg2ODIyNTU4KXQABzM2OTM2NjhxAH4ADHQADOS4quS6uumhueebrnEAfgARcH5yAC5jb20uaXRhbmdjZW50LmlkZWEucGx1Z2luLmFwaS5hY2NvdW50Lk5vZGVUeXBlAAAAAAAAAAASAAB4cgAOamF2YS5sYW5nLkVudW0AAAAAAAAAABIAAHhwdAAHUFJPSkVDVHgAcHBxAH4AA3BwcQB+AApwcHBxAH4AA3EAfgAKfnEAfgATdAAEVEVBTXgA&lt;/byte-array&gt;" />
<option name="treeNodesJTree" value="&lt;byte-array&gt;rO0ABXNyACFqYXZheC5zd2luZy50cmVlLkRlZmF1bHRUcmVlTW9kZWynvpEmGsXl2QMAA1oAEmFza3NBbGxvd3NDaGlsZHJlbkwADGxpc3RlbmVyTGlzdHQAJUxqYXZheC9zd2luZy9ldmVudC9FdmVudExpc3RlbmVyTGlzdDtMAARyb290dAAbTGphdmF4L3N3aW5nL3RyZWUvVHJlZU5vZGU7eHAAc3IAI2phdmF4LnN3aW5nLmV2ZW50LkV2ZW50TGlzdGVuZXJMaXN0kUjMLXPfDt4DAAB4cHB4c3IAJ2phdmF4LnN3aW5nLnRyZWUuRGVmYXVsdE11dGFibGVUcmVlTm9kZcRYv/zyqHHgAwADWgAOYWxsb3dzQ2hpbGRyZW5MAAhjaGlsZHJlbnQAEkxqYXZhL3V0aWwvVmVjdG9yO0wABnBhcmVudHQAIkxqYXZheC9zd2luZy90cmVlL011dGFibGVUcmVlTm9kZTt4cAFzcgAQamF2YS51dGlsLlZlY3RvctmXfVuAO68BAwADSQARY2FwYWNpdHlJbmNyZW1lbnRJAAxlbGVtZW50Q291bnRbAAtlbGVtZW50RGF0YXQAE1tMamF2YS9sYW5nL09iamVjdDt4cAAAAAAAAAABdXIAE1tMamF2YS5sYW5nLk9iamVjdDuQzlifEHMpbAIAAHhwAAAACnNxAH4ABgFzcQB+AAoAAAAAAAAAAXVxAH4ADQAAAApzcQB+AAYBcHEAfgAPdXEAfgANAAAAAnQACnVzZXJPYmplY3RzcgAuY29tLml0YW5nY2VudC5pZGVhLnBsdWdpbi5hcGkuYWNjb3VudC5UcmVlTm9kZQAAAAAAAAABAgAQTAAHYWxsUGF0aHQAEkxqYXZhL2xhbmcvU3RyaW5nO1sAFGJyYW5jaEFuZFZlcnNpb25JdGVtdABLW0xjb20vaXRhbmdjZW50L2lkZWEvcGx1Z2luL2RpYWxvZy9jb21wb25lbnQvYWNjb3VudC9BY2NvdW50UmlnaHRQYW5lbEl0ZW07TAAUYnJhbmNoSWRBbmRWZXJzaW9uSWRxAH4AFkwACGNoaWxkcmVudAAPTGphdmEvdXRpbC9NYXA7TAAKZm9sZGVyVHlwZXEAfgAWTAAIZnVsbFBhdGhxAH4AFkwAA2tleXEAfgAWWwAJbW9kZWxJdGVtcQB+ABdMAAhtb2R1bGVJZHEAfgAWTAAEbmFtZXEAfgAWTAAIcGFyZW50SWRxAH4AFkwACXByb2plY3RJZHEAfgAWTAALcHJvamVjdE5hbWVxAH4AFkwABnRlYW1JZHEAfgAWTAAIdGVhbU5hbWVxAH4AFkwABHR5cGV0ADBMY29tL2l0YW5nY2VudC9pZGVhL3BsdWdpbi9hcGkvYWNjb3VudC9Ob2RlVHlwZTt4cHQAGeS4quS6uuWboumYny/kuKrkurrpobnnm651cgBLW0xjb20uaXRhbmdjZW50LmlkZWEucGx1Z2luLmRpYWxvZy5jb21wb25lbnQuYWNjb3VudC5BY2NvdW50UmlnaHRQYW5lbEl0ZW07KbxSniq4DKkCAAB4cAAAAAFzcgBIY29tLml0YW5nY2VudC5pZGVhLnBsdWdpbi5kaWFsb2cuY29tcG9uZW50LmFjY291bnQuQWNjb3VudFJpZ2h0UGFuZWxJdGVtAAAAAAAAAAECAARaAA9pc01haW5PckRlZmF1bHRMAAhpY29uVHlwZXEAfgAWTAACaWRxAH4AFkwABG5hbWVxAH4AFnhwAXQABmJyYW5jaHQAAHQABG1haW5wc3IAF2phdmEudXRpbC5MaW5rZWRIYXNoTWFwNMBOXBBswPsCAAFaAAthY2Nlc3NPcmRlcnhyABFqYXZhLnV0aWwuSGFzaE1hcAUH2sHDFmDRAwACRgAKbG9hZEZhY3RvckkACXRocmVzaG9sZHhwP0AAAAAAAAB3CAAAABAAAAAAeABwcHQABzY4MjI1NTh1cQB+ABwAAAABc3EAfgAeAXQABW1vZGVscQB+ACF0AAzpu5jorqTmqKHlnZdwdAAW5Liq5Lq66aG555uuICg2ODIyNTU4KXQABzM2OTM2Njh0AAc2ODIyNTU4dAAM5Liq5Lq66aG555uudAAHMzY5MzY2OHB+cgAuY29tLml0YW5nY2VudC5pZGVhLnBsdWdpbi5hcGkuYWNjb3VudC5Ob2RlVHlwZQAAAAAAAAAAEgAAeHIADmphdmEubGFuZy5FbnVtAAAAAAAAAAASAAB4cHQAB1BST0pFQ1R4cHBwcHBwcHBweHEAfgAJdXEAfgANAAAAAnEAfgAUc3EAfgAVdAAM5Liq5Lq65Zui6ZifcHBzcQB+ACM/QAAAAAAAAHcIAAAAEAAAAAB4AHBwdAAHMzY5MzY2OHBwdAAM5Liq5Lq65Zui6ZifcHBwdAAHMzY5MzY2OHQADOS4quS6uuWboumYn35xAH4AMHQABFRFQU14cHBwcHBwcHBweHB1cQB+AA0AAAACcQB+ABRzcQB+ABV0AARSb290cHBwcHB0AAEwcHBxAH4AQHBwcHBwcQB+ADx4c3EAfgAKAAAAAAAAAAJ1cQB+AA0AAAAKdAAEcm9vdHEAfgAJcHBwcHBwcHB4eA==&lt;/byte-array&gt;" />
</component>
</project>

17
lottery-system/.idea/dataSources.xml

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="DataSourceManagerImpl" format="xml" multifile-model="true">
<data-source source="LOCAL" name="lottery_system@localhost" uuid="296b2e99-571b-4184-8fa0-ad8c7969124e">
<driver-ref>mysql.8</driver-ref>
<synchronize>true</synchronize>
<jdbc-driver>com.mysql.cj.jdbc.Driver</jdbc-driver>
<jdbc-url>jdbc:mysql://localhost:3306/lottery_system</jdbc-url>
<jdbc-additional-properties>
<property name="com.intellij.clouds.kubernetes.db.host.port" />
<property name="com.intellij.clouds.kubernetes.db.enabled" value="false" />
<property name="com.intellij.clouds.kubernetes.db.container.port" />
</jdbc-additional-properties>
<working-dir>$ProjectFileDir$</working-dir>
</data-source>
</component>
</project>

25
lottery-system/lottery-common/pom.xml

@ -4,7 +4,7 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.example</groupId>
<groupId>com.lottery</groupId>
<artifactId>lottery-system</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
@ -16,5 +16,28 @@
<maven.compiler.target>11</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>5.2.3</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>5.2.3</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel-core</artifactId>
<version>3.3.2</version>
<scope>compile</scope>
</dependency>
</dependencies>
</project>

14
lottery-system/lottery-common/src/main/java/com/lottery/constant/RedisCacheConstant.java

@ -0,0 +1,14 @@
package com.lottery.constant;
/**
* @program: lottery
* @ClassName RedisCacheConstant
* @description:
* @author: wwl
* @create: 2025-07-15 17:59
* @Version 1.0
**/
public class RedisCacheConstant {
public static final String ALL_USER_CACHE = "all_user_cache";
}

20
lottery-system/lottery-common/src/main/java/com/lottery/exception/Accountexception.java

@ -0,0 +1,20 @@
package com.lottery.exception;
/**
* @program: lottery-system
* @ClassName Accountexception
* @description:
* @author: wwl
* @create: 2025-07-12 10:56
* @Version 1.0
**/
public class Accountexception extends BaseException{
public Accountexception(){
}
public Accountexception(String massage){
super(massage);
}
}

15
lottery-system/lottery-common/src/main/java/com/lottery/exception/BaseException.java

@ -0,0 +1,15 @@
package com.lottery.exception;
/**
* 业务异常
*/
public class BaseException extends RuntimeException {
public BaseException() {
}
public BaseException(String msg) {
super(msg);
}
}

23
lottery-system/lottery-common/src/main/java/com/lottery/exception/BusinessException.java

@ -0,0 +1,23 @@
package com.lottery.exception;
/**
* @program: lottery-system
* @ClassName BusinessException
* @description:
* @author:jihaipeng
* @create: 202507-21 17:09
* @Version 1.0
**/
public class BusinessException extends RuntimeException {
private int code; // 错误码 400
public BusinessException(int code, String message) {
super(message);
this.code = code;
}
public int getCode() {
return code;
}
}

23
lottery-system/lottery-common/src/main/java/com/lottery/exception/GlobalException.java

@ -0,0 +1,23 @@
package com.lottery.exception;
import org.springframework.web.bind.annotation.ControllerAdvice;
/**
* @program: lottery-system
* @ClassName GolbalException
* @description:
* @author:jihaipeng
* @create: 202507-14 16:43
* @Version 1.0
**/
@ControllerAdvice
public class GlobalException extends BaseException{
public GlobalException(){
}
public GlobalException(String massage){
super(massage);
}
}

138
lottery-system/lottery-common/src/main/java/com/lottery/exception/GlobalExceptionHandler.java

@ -0,0 +1,138 @@
package com.lottery.exception;
import com.lottery.result.Result;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpHeaders;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.BindException;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.MissingServletRequestParameterException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import org.springframework.web.method.annotation.MethodArgumentTypeMismatchException;
import javax.servlet.http.HttpServletRequest;
import javax.validation.ConstraintViolation;
import javax.validation.ConstraintViolationException;
import java.util.List;
import java.util.stream.Collectors;
/**
* 全局异常处理器
*/
@RestControllerAdvice
@Slf4j
public class GlobalExceptionHandler {
/**
* 处理参数校验异常统一入口
*/
@ExceptionHandler({
MethodArgumentNotValidException.class,
BindException.class,
ConstraintViolationException.class,
MethodArgumentTypeMismatchException.class,
MissingServletRequestParameterException.class
})
public Result<Object> handleValidationException(Exception ex) {
String errorMessage;
if (ex instanceof MethodArgumentNotValidException) {
errorMessage = handleMethodArgumentNotValid((MethodArgumentNotValidException) ex);
} else if (ex instanceof BindException) {
errorMessage = handleBindException((BindException) ex);
} else if (ex instanceof ConstraintViolationException) {
errorMessage = handleConstraintViolation((ConstraintViolationException) ex);
} else if (ex instanceof MethodArgumentTypeMismatchException) {
errorMessage = handleTypeMismatch((MethodArgumentTypeMismatchException) ex);
} else if (ex instanceof MissingServletRequestParameterException) {
errorMessage = handleMissingParameter((MissingServletRequestParameterException) ex);
} else {
errorMessage = "参数校验失败";
}
log.warn("参数校验异常: {}", errorMessage);
return Result.failure(400, errorMessage);
}
/**
* 处理 MethodArgumentNotValidException
*/
private String handleMethodArgumentNotValid(MethodArgumentNotValidException ex) {
List<String> errors = ex.getBindingResult().getFieldErrors().stream()
.map(error -> error.getField() + ": " + error.getDefaultMessage())
.collect(Collectors.toList());
return String.join(", ", errors);
}
/**
* 处理 BindException
*/
private String handleBindException(BindException ex) {
List<String> errors = ex.getBindingResult().getFieldErrors().stream()
.map(error -> error.getField() + ": " + error.getDefaultMessage())
.collect(Collectors.toList());
return String.join(", ", errors);
}
/**
* 处理 ConstraintViolationException
*/
private String handleConstraintViolation(ConstraintViolationException ex) {
List<String> errors = ex.getConstraintViolations().stream()
.map(ConstraintViolation::getMessage)
.collect(Collectors.toList());
return String.join(", ", errors);
}
/**
* 处理类型不匹配异常
*/
private String handleTypeMismatch(MethodArgumentTypeMismatchException ex) {
return String.format("参数 '%s' 类型不匹配,期望类型: %s",
ex.getName(),
ex.getRequiredType().getSimpleName());
}
/**
* 处理缺失参数异常
*/
private String handleMissingParameter(MissingServletRequestParameterException ex) {
return String.format("缺失必填参数: '%s' (类型: %s)",
ex.getParameterName(),
ex.getParameterType());
}
// 捕获自定义业务异常
// @ExceptionHandler(BusinessException.class)
// public ResponseEntity<Result> handleBusinessException(BusinessException ex, HttpServletRequest request) {
// HttpHeaders headers = new HttpHeaders();
// headers.set("Access-Control-Allow-Origin", "*"); // 或指定域名
// headers.set("Access-Control-Allow-Credentials", "true");
// // 构建统一的错误响应
// Result<Void> errorResult = Result.failure(ex.getCode(), ex.getMessage());
//
//
// return ResponseEntity
// .status(ex.getCode()) // 使用 BusinessException 中的状态码
// .headers(headers)
// .body(errorResult); // 返回 Result 作为响应体
// }
// 捕获自定义业务异常
@ExceptionHandler(BusinessException.class)
public Result<Void> handleBusinessException(BusinessException e) {
return Result.failure(e.getCode(), e.getMessage());
}
/**
* 处理系统异常
*/
@ExceptionHandler(Exception.class)
public Result<String> handleSystemException(Exception e) {
log.error("系统异常: ", e);
return Result.failure(500, "系统繁忙,请稍后再试");
}
}

21
lottery-system/lottery-common/src/main/java/com/lottery/exception/SomeException.java

@ -0,0 +1,21 @@
package com.lottery.exception;
/**
* @program: lottery-system
* @ClassName SomeException
* @description:
* @author: wwl
* @create: 2025-07-14 15:07
* @Version 1.0
**/
public class SomeException extends BaseException {
public SomeException(){
}
public SomeException(String massage){
super(massage);
}
}

27
lottery-system/lottery-common/src/main/java/com/lottery/propertise/jwtPropertice.java

@ -0,0 +1,27 @@
package com.lottery.propertise;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
/**
* @program: lottery-system
* @ClassName jwtPropertice
* @description:
* @author: wwl
* @create: 2025-07-12 10:31
* @Version 1.0
**/
@Component
@ConfigurationProperties(prefix = "lottery.jwt")
@Data
public class jwtPropertice {
/**
* 用户jwt相关配置
*
*/
private String userSecretKey;
private long userTtl;
private String userTokenName;
}

19
lottery-system/lottery-common/src/main/java/com/lottery/result/Result.java

@ -1,5 +1,7 @@
package com.lottery.result;
import lombok.Data;
/**
* @program: lottery-system
* @ClassName Result
@ -8,10 +10,10 @@ package com.lottery.result;
* @create: 202507-10 15:59
* @Version 1.0
**/
@Data
public class Result<T> {
// 状态码 200 表示成功500 表示失败
private int code;
// 状态码 200 表示成功400 表示失败
private Integer code;
// 提示信息 "操作成功" "操作失败"
private String message;
@ -35,15 +37,22 @@ public class Result<T> {
result.setData(data);
return result;
}
// 失败结果
public static <T> Result<T> failure(int code, String message) {
public static <T> Result<T> failure(String message) {
Result<T> result = new Result<>();
result.setCode(400);
result.setMessage(message);
return result;
}
// 失败结果
public static <T> Result<T> failure(Integer code,String message) {
Result<T> result = new Result<>();
result.setCode(code);
result.setMessage(message);
return result;
}
// Getter Setter 方法
public int getCode() {
return code;

101
lottery-system/lottery-common/src/main/java/com/lottery/utils/ExcelUtil.java

@ -0,0 +1,101 @@
package com.lottery.utils;
import com.alibaba.excel.annotation.ExcelProperty;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.web.multipart.MultipartFile;
import java.io.InputStream;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @program: lottery
* @ClassName ExcelUtil
* @description:
* @author: wwl
* @create: 2025-07-15 16:32
* @Version 1.0
**/
public class ExcelUtil {
public static <T> List<T> parseExcel(MultipartFile file, Class<T> clazz) throws Exception {
try (InputStream inputStream = file.getInputStream()) {
Workbook workbook = WorkbookFactory.create(inputStream);
Sheet sheet = workbook.getSheetAt(0);
// 获取表头映射
Row headerRow = sheet.getRow(0);
Map<String, Integer> headerMap = new HashMap<>();
for (Cell cell : headerRow) {
headerMap.put(cell.getStringCellValue().trim(), cell.getColumnIndex());
}
// 验证必要列是否存在
for (Field field : clazz.getDeclaredFields()) {
ExcelProperty annotation = field.getAnnotation(ExcelProperty.class);
if (annotation != null && !headerMap.containsKey(annotation.value()[0])) {
throw new IllegalArgumentException("缺少必要列: " + annotation.value()[0]);
}
}
// 读取数据
List<T> dataList = new ArrayList<>();
for (int i = 1; i <= sheet.getLastRowNum(); i++) {
Row row = sheet.getRow(i);
if (row == null) continue;
T dto = clazz.getDeclaredConstructor().newInstance();
boolean hasValue = false;
for (Field field : clazz.getDeclaredFields()) {
ExcelProperty annotation = field.getAnnotation(ExcelProperty.class);
if (annotation != null) {
String headerName = annotation.value()[0];
Integer colIndex = headerMap.get(headerName);
if (colIndex != null) {
Cell cell = row.getCell(colIndex);
Object value = getCellValue(cell);
if (value != null) {
field.setAccessible(true);
field.set(dto, value);
hasValue = true;
}
}
}
}
if (hasValue) {
dataList.add(dto);
}
}
return dataList;
}
}
private static Object getCellValue(Cell cell) {
if (cell == null) return null;
switch (cell.getCellType()) {
case STRING:
return cell.getStringCellValue().trim();
case NUMERIC:
if (DateUtil.isCellDateFormatted(cell)) {
return cell.getDateCellValue();
}
return cell.getNumericCellValue();
case BOOLEAN:
return cell.getBooleanCellValue();
case FORMULA:
return cell.getCellFormula();
default:
return null;
}
}
}

56
lottery-system/lottery-common/src/main/java/com/lottery/utils/HttpUtils.java

@ -0,0 +1,56 @@
package com.lottery.utils;
import java.net.URI;
import java.net.URLEncoder;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.nio.charset.StandardCharsets;
import java.util.Map;
public class HttpUtils{
private static final HttpClient client = HttpClient.newHttpClient();
/**
* 发送 POST 请求urlencoded 格式仅设置 Content-Type
* @param url 接口地址
* @param params 请求参数键值对自动编码
* @return 响应字符串
*/
public static String postUrlencoded(String url, Map<String, String> params) throws Exception {
// 1. 构建 urlencoded 请求体
StringBuilder requestBody = new StringBuilder();
for (Map.Entry<String, String> entry : params.entrySet()) {
if (requestBody.length() > 0) {
requestBody.append("&");
}
requestBody.append(URLEncoder.encode(entry.getKey(), StandardCharsets.UTF_8))
.append("=")
.append(URLEncoder.encode(entry.getValue(), StandardCharsets.UTF_8));
}
// 2. 创建 HTTP 请求仅设置 Content-Type
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(url))
.header("Content-Type", "application/x-www-form-urlencoded") // 仅设置 Content-Type
.POST(HttpRequest.BodyPublishers.ofString(requestBody.toString()))
.build();
// 3. 发送请求并返回响应
return sendRequest(request);
}
/**
* 发送请求并返回响应
*/
private static String sendRequest(HttpRequest request) throws Exception {
HttpResponse<String> response = client.send(
request, HttpResponse.BodyHandlers.ofString());
if (response.statusCode() >= 400) {
throw new RuntimeException("HTTP 错误,状态码: " + response.statusCode() + ", 响应: " + response.body());
}
return response.body();
}
}

74
lottery-system/lottery-common/src/main/java/com/lottery/utils/JwtUtil.java

@ -0,0 +1,74 @@
package com.lottery.utils;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.JwtBuilder;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import java.nio.charset.StandardCharsets;
import java.util.Date;
import java.util.Map;
/**
* @program: lottery-system
* @ClassName JwtUtils
* @description:
* @author: wwl
* @create: 2025-07-12 10:25
* @Version 1.0
**/
public class JwtUtil {
/**
* 生成jwt
* 使用Hs256算法, 私匙使用固定秘钥
*
* @param secretKey jwt秘钥
* @param ttlMillis jwt过期时间(毫秒)
* @param claims 设置的信息
* @return
*/
public static String createJWT(String secretKey, long ttlMillis, Map<String, Object> claims) {
// 指定签名的时候使用的签名算法也就是header那部分
SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;
// 生成JWT的时间
long expMillis = System.currentTimeMillis() + ttlMillis;
Date exp = new Date(expMillis);
// 设置jwt的body
JwtBuilder builder = Jwts.builder()
// 如果有私有声明一定要先设置这个自己创建的私有的声明这个是给builder的claim赋值一旦写在标准的声明赋值之后就是覆盖了那些标准的声明的
.setClaims(claims)
// 设置签名使用的签名算法和签名使用的秘钥
.signWith(signatureAlgorithm, secretKey.getBytes(StandardCharsets.UTF_8))
// 设置过期时间
.setExpiration(exp);
return builder.compact();
}
/**
* Token解密
*
* @param secretKey jwt秘钥 此秘钥一定要保留好在服务端, 不能暴露出去, 否则sign就可以被伪造, 如果对接多个客户端建议改造成多个
* @param token 加密后的token
* @return
*/
public static Claims parseJWT(String secretKey, String token) {
// 得到DefaultJwtParser
Claims claims = Jwts.parser()
// 设置签名的秘钥
.setSigningKey(secretKey.getBytes(StandardCharsets.UTF_8))
// 设置需要解析的jwt
.parseClaimsJws(token).getBody();
return claims;
}
//
// private static final String SECRET = "willy";
// public static Claims parseToken(String token) {
// return Jwts.parser()
// .setSigningKey(SECRET)
// .parseClaimsJws(token)
// .getBody();
// }
}

30
lottery-system/lottery-common/src/main/java/com/lottery/utils/LoginHttpUtils.java

@ -0,0 +1,30 @@
//package com.lottery.utils;
//
//import org.springframework.stereotype.Component;
//
///**
// * @program: lottery
// * @ClassName LoginHttpUtils
// * @description:
// * @author: wwl
// * @create: 2025-07-16 10:07
// * @Version 1.0
// **/
//
//@Component
//public class LoginHttpUtils {
// private final RestTemplate restTemplate;
//
// public HttpUtil(RestTemplateBuilder restTemplateBuilder) {
// this.restTemplate = restTemplateBuilder.build();
// }
//
// public <T> T post(String url, Object request, Class<T> responseType) {
// HttpHeaders headers = new HttpHeaders();
// headers.setContentType(MediaType.APPLICATION_JSON);
// HttpEntity<Object> entity = new HttpEntity<>(request, headers);
//
// ResponseEntity<T> response = restTemplate.postForEntity(url, entity, responseType);
// return response.getBody();
// }
//}

68
lottery-system/lottery-common/src/main/java/com/lottery/utils/ValidationUtils.java

@ -0,0 +1,68 @@
package com.lottery.utils;
/**
* @program: lottery-system
* @ClassName ValidationUtils
* @description:
* @author:jihaipeng
* @create: 202507-15 16:26
* @Version 1.0
**/
public class ValidationUtils {
/**
* 校验数值是否满足
* 1. 可以小于 0允许负数
* 2. 必须是整数不能是小数
*
* @param value 待校验的数值可以是 String Number 类型
* @return 是否校验通过
*/
public static boolean validateInteger(Object value) {
try {
// 如果是 String 类型先尝试转为 Number
if (value instanceof String) {
// 去掉可能的空格
String strValue = ((String) value).trim();
// 检查是否为空
if (strValue.isEmpty()) {
return false;
}
// 尝试解析为 Long支持更大的整数范围
try {
Long.parseLong(strValue);
} catch (NumberFormatException e) {
return false; // 解析失败说明不是整数
}
}
// 如果是 Number 类型IntegerLong
else if (value instanceof Number) {
Number num = (Number) value;
// 检查是否是整数避免浮点数
if (num instanceof Double || num instanceof Float) {
double doubleValue = num.doubleValue();
if (doubleValue != Math.floor(doubleValue)) {
return false; // 有小数部分不合法
}
}
// 如果是 Integer Long直接合法
return true;
}
// 其他类型如非数值类型
else {
return false;
}
// 所有检查通过
return true;
} catch (Exception e) {
return false; // 任何异常都视为不合法
}
}
}

20
lottery-system/lottery-pojo/pom.xml

@ -4,7 +4,7 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.example</groupId>
<groupId>com.lottery</groupId>
<artifactId>lottery-system</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
@ -16,5 +16,23 @@
<maven.compiler.target>11</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<!-- <dependency>-->
<!-- <groupId>org.apache.poi</groupId>-->
<!-- <artifactId>poi</artifactId>-->
<!-- <version>5.2.3</version>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>org.apache.poi</groupId>-->
<!-- <artifactId>poi-ooxml</artifactId>-->
<!-- <version>5.2.3</version>-->
<!-- </dependency> &lt;!&ndash; POI 核心 &ndash;&gt;-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.1.3</version> <!-- 建议使用最新版本 -->
</dependency>
</dependencies>
</project>

21
lottery-system/lottery-pojo/src/main/java/com/lottery/dto/ActivityDto.java

@ -0,0 +1,21 @@
package com.lottery.dto;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import javax.validation.constraints.NotNull;
/**
* @program: lottery-system
* @ClassName ActivityDto
* @description:
* @author:jihaipeng
* @create: 202507-21 16:07
* @Version 1.0
**/
@Data
@Slf4j
public class ActivityDto {
@NotNull(message = "活动id不能为空")
private Integer activityId;
}

27
lottery-system/lottery-pojo/src/main/java/com/lottery/dto/ActivityTimeDto.java

@ -0,0 +1,27 @@
package com.lottery.dto;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import javax.validation.constraints.NotNull;
/**
* @program: lottery-system
* @ClassName ActivityTimeDto
* @description:
* @author:jihaipeng
* @create: 202507-21 17:47
* @Version 1.0
**/
@Data
@Slf4j
@AllArgsConstructor
@NoArgsConstructor
public class ActivityTimeDto {
@NotNull(message = "活动ID不能为空")
private Integer activityId;
@NotNull(message = "时间不能为空")
private Integer time;
}

29
lottery-system/lottery-pojo/src/main/java/com/lottery/dto/AdminLogin.java

@ -0,0 +1,29 @@
package com.lottery.dto;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
/**
* @program: lottery
* @ClassName AdminLogin
* @description:
* @author: wwl
* @create: 2025-07-16 10:19
* @Version 1.0
**/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Slf4j
public class AdminLogin {
@NotNull(message = "用户名不能为空")
@Size(min = 8,max = 8,message = "用户名长度为8位")
private String username;
@NotNull(message = "密码不能为空")
private String password;
}

26
lottery-system/lottery-pojo/src/main/java/com/lottery/dto/ApiUrlResp.java

@ -0,0 +1,26 @@
package com.lottery.dto;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;
/**
* @program: lottery
* @ClassName ApiUrlResp
* @description:
* @author: wwl
* @create: 2025-07-26 14:12
* @Version 1.0
**/
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class ApiUrlResp {
private int code;
private String msg;
private Data data;
@lombok.Data
public static class Data {
private String loc_market;
}
}

32
lottery-system/lottery-pojo/src/main/java/com/lottery/dto/FixUserDto.java

@ -0,0 +1,32 @@
package com.lottery.dto;
import lombok.Data;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;
/**
* @program: lottery
* @ClassName WinUserDto
* @description:
* @author: wwl
* @create: 2025-07-16 14:01
* @Version 1.0
**/
@Data
public class FixUserDto {
@NotNull(message = "用户名不能为空")
@Size(max = 30, message = "姓名长度不能超过30个字符")
@Pattern(regexp = "^[\\u4e00-\\u9fa5\\u3400-\\u4dbf\\u20000-\\u2a6df\\u2a700-\\u2b73f\\u2b740-\\u2b81f\\u2b820-\\u2ceaf\\uf900-\\ufaffa-zA-Z]+$",
message = "姓名只能包含中文(简繁体)或英文字符")
private String username;
@Pattern(regexp = "^\\d{5,12}$", message = "精网号必须是5到12位的数字")
@NotNull(message = "精网号不能为空")
private String jwcode;
@NotNull(message = "等级不能为空")
private Long GradeId;
}

35
lottery-system/lottery-pojo/src/main/java/com/lottery/dto/FundingActivityDto.java

@ -0,0 +1,35 @@
package com.lottery.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.time.LocalDate;
import java.util.Date;
/**
* @program: lottery-system
* @ClassName FundingDataDto
* @description:
* @author:jihaipeng
* @create: 202507-14 15:09
* @Version 1.0
**/
@Data
public class FundingActivityDto {
@NotNull(message = "活动名称不能为空")
@Size(min = 1, max = 20, message = "活动名称长度必须在 1 到 20 个字符之间")
private String activityName; // 活动名称
@NotNull(message = "市场一不能为空")
private Integer marketOne; // 市场一(如USA)
@NotNull(message = "市场二不能为空")
private Integer marketTwo; // 市场二(如HK)
@NotNull(message = "活动状态不能为空")
private Integer status; // 状态(1-启用,0-禁用)
@NotNull(message = "活动开始时间不能为空")
private LocalDate startTime; // 活动开始时间
@NotNull(message = "活动结束时间不能为空")
private LocalDate endTime; // 活动结束时间
}

26
lottery-system/lottery-pojo/src/main/java/com/lottery/dto/FundingRecordDto.java

@ -0,0 +1,26 @@
package com.lottery.dto;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import javax.validation.constraints.NotNull;
/**
* @program: lottery-system
* @ClassName FundingRecordDto
* @description:
* @author:jihaipeng
* @create: 202507-15 14:27
* @Version 1.0
**/
@Slf4j
@Data
public class FundingRecordDto {
@NotNull(message = "活动ID不能为空")
private Integer activityId;
@NotNull(message = "市场标识不能为空")
private Integer marketSign;
}

30
lottery-system/lottery-pojo/src/main/java/com/lottery/dto/FundingUserDto.java

@ -0,0 +1,30 @@
package com.lottery.dto;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import javax.validation.constraints.NotNull;
import java.time.LocalDateTime;
/**
* @program: lottery-system
* @ClassName FundingUserDto
* @description:
* @author:jihaipeng
* @create: 202507-15 10:47
* @Version 1.0
**/
@Slf4j
@Data
public class FundingUserDto {
@NotNull(message = "活动ID不能为空")
public Integer activityId;
private Integer marketSign; // 市场标识(usa/hk)
private String username; // 用户名
private String jwcode; // 用户唯一码
private Integer page=1;
private Integer pagesize=10;
}

44
lottery-system/lottery-pojo/src/main/java/com/lottery/dto/GradeDto.java

@ -0,0 +1,44 @@
package com.lottery.dto;
import com.baomidou.mybatisplus.annotation.TableField;
import lombok.Data;
import javax.validation.constraints.*;
/**
* @program: lottery-system
* @ClassName GradeDto
* @description:
* @author: wwl
* @create: 2025-07-14 14:56
* @Version 1.0
**/
@Data
public class GradeDto {
private Long id;
@NotNull(message = "等级名称不能为空")
@Size(max = 15, message = "等级名称长度不能超过15个字符")
@Pattern(regexp = "^[a-zA-Z0-9\\u4e00-\\u9fa5]+$", message = "等级名称只能包含中文、英文和数字")
private String gradeName; // 等级名称
@Min(value = 1, message = "数量必须为正数")
@Max(value = 100000, message = "数量不能超过100000")
@NotNull(message = "数量不能为空")
private Integer amount; //等级数量
@Min(value = 0, message = "数量必须为正数")
@Max(value = 100, message = "数量不能超过100")
@NotNull(message = "排序数不能为空")
private Integer sort;
@Min(value = 1, message = "数量必须为正数")
@Max(value = 500, message = "数量不能超过500")
@NotNull(message = "每轮人数不能为空")
private Integer perWin;
}

19
lottery-system/lottery-pojo/src/main/java/com/lottery/dto/PageSimpleDto.java

@ -0,0 +1,19 @@
package com.lottery.dto;
import lombok.Data;
/**
* @program: lottery
* @ClassName PageSimpleDto
* @description:
* @author: wwl
* @create: 2025-07-22 16:50
* @Version 1.0
**/
@Data
public class PageSimpleDto {
private Integer pageNum;
private Integer pageSize;
}

51
lottery-system/lottery-pojo/src/main/java/com/lottery/dto/Prize.java

@ -1,51 +0,0 @@
package com.lottery.dto;
/**
* @program: lottery-system
* @ClassName Gift
* @description:
* @author:jihaipeng
* @create: 202507-10 15:20
* @Version 1.0
**/
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.math.BigDecimal;
import java.util.Date;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Prize {
// 主键ID
private Long id;
// 名称
private String name;
// 描述
private String description;
// 图片URL
private String imageUrl;
// 库存数量
private Integer stock;
// 中奖概率
private BigDecimal probability;
// 奖品类型
private Integer prizeType;
// 状态
private Integer status;
// 创建时间
private Date createTime;
// 更新时间
private Date updateTime;
}

36
lottery-system/lottery-pojo/src/main/java/com/lottery/dto/PrizeDto.java

@ -0,0 +1,36 @@
package com.lottery.dto;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;
/**
* @program: lottery
* @ClassName PrizeDto
* @description:
* @author: wwl
* @create: 2025-07-15 11:56
* @Version 1.0
**/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class PrizeDto {
private Long id;
@NotNull(message = "奖品名不能为空")
@Size(max = 15, message = "奖品名长度不能超过15个字符")
@Pattern(regexp = "^[\\u4e00-\\u9fa5a-zA-Z0-9]+$", message = "奖品名只能包含中文、英文或数字")
private String prizeName;
@NotNull(message = "等级不能为空")
private Long gradeId;
@NotNull(message = "请上传图片")
private String imageUrl;
}

19
lottery-system/lottery-pojo/src/main/java/com/lottery/dto/SimpleQueryDto.java

@ -0,0 +1,19 @@
package com.lottery.dto;
import lombok.Data;
/**
* @program: lottery
* @ClassName SimpleQueryDto
* @description:
* @author: wwl
* @create: 2025-07-24 16:06
* @Version 1.0
**/
@Data
public class SimpleQueryDto {
private Integer pageNum;
private Integer pageSize;
}

26
lottery-system/lottery-pojo/src/main/java/com/lottery/dto/StartLotteryDto.java

@ -0,0 +1,26 @@
package com.lottery.dto;
import lombok.Data;
/**
* @program: lottery
* @ClassName StartLotteryDto
* @description:
* @author: wwl
* @create: 2025-07-16 16:49
* @Version 1.0
**/
@Data
public class StartLotteryDto {
private int perWin;
private Long gradeId;
private Long PrizeId;
private int remainNum;
// private String gradeName;
// private String prizeName;
}

29
lottery-system/lottery-pojo/src/main/java/com/lottery/dto/UserByJwcodeDto.java

@ -0,0 +1,29 @@
package com.lottery.dto;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;
/**
* @program: lottery-system
* @ClassName UserByJwcodeDto
* @description:
* @author:jihaipeng
* @create: 202507-22 11:51
* @Version 1.0
**/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Slf4j
public class UserByJwcodeDto {
@NotNull(message = "jwcode不能为空")
@Size(min = 8, max = 8, message = "jwcode必须是8位")
@Pattern(regexp = "^\\d{8}$", message = "jwcode必须全是数字")
private String jwcode;
}

24
lottery-system/lottery-pojo/src/main/java/com/lottery/dto/UserByJwcodePageDto.java

@ -0,0 +1,24 @@
package com.lottery.dto;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.extern.slf4j.Slf4j;
/**
* @program: lottery-system
* @ClassName UserByJwcodePageDto
* @description:
* @author:jihaipeng
* @create: 202507-22 15:03
* @Version 1.0
**/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Slf4j
public class UserByJwcodePageDto {
private String jwcode;
private int pageNum = 1;
private int pageSize = 10;
}

35
lottery-system/lottery-pojo/src/main/java/com/lottery/dto/UserDto.java

@ -0,0 +1,35 @@
package com.lottery.dto;
import lombok.Builder;
import lombok.Data;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;
/**
* @program: lottery
* @ClassName UserDto
* @description:
* @author: wwl
* @create: 2025-07-15 15:12
* @Version 1.0
**/
@Data
@Builder
public class UserDto {
private int id;
@NotNull(message = "用户名不能为空")
@Size(max = 30, message = "姓名长度不能超过30个字符")
@Pattern(regexp = "^[\\u4e00-\\u9fa5\\u3400-\\u4dbf\\u20000-\\u2a6df\\u2a700-\\u2b73f\\u2b740-\\u2b81f\\u2b820-\\u2ceaf\\uf900-\\ufaffa-zA-Z]+$",
message = "姓名只能包含中文(简繁体)或英文字符")
private String username;
@Size(min = 8, max = 8, message = "jwcode必须是8位")
@Pattern(regexp = "^\\d{8}$", message = "jwcode必须全是数字")
@NotNull(message = "精网号不能为空")
private String jwcode;
}

26
lottery-system/lottery-pojo/src/main/java/com/lottery/dto/UserImportDto.java

@ -0,0 +1,26 @@
package com.lottery.dto;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;
/**
* @program: lottery
* @ClassName UserImportDto
* @description:
* @author: wwl
* @create: 2025-07-15 16:27
* @Version 1.0
**/
@Data
public class UserImportDto {
@ExcelProperty("姓名")
private String username;
@ExcelProperty("精网号")
private String jwcode;
}

21
lottery-system/lottery-pojo/src/main/java/com/lottery/dto/UserLoginDto.java

@ -0,0 +1,21 @@
package com.lottery.dto;
import lombok.Data;
import java.io.Serializable;
/**
* @program: lottery-system
* @ClassName UserLoginDto
* @description:
* @author: wwl
* @create: 2025-07-12 10:07
* @Version 1.0
**/
@Data
public class UserLoginDto implements Serializable {
// private String username;
private String password;
}

25
lottery-system/lottery-pojo/src/main/java/com/lottery/dto/UserQueryDto.java

@ -0,0 +1,25 @@
package com.lottery.dto;
import lombok.Data;
/**
* @program: lottery
* @ClassName UserQueryDto
* @description:
* @author: wwl
* @create: 2025-07-15 16:03
* @Version 1.0
**/
@Data
public class UserQueryDto {
private Long gradeId;
private String username;
private String jwcode;
private Integer pageNum;
private Integer pageSize;
}

27
lottery-system/lottery-pojo/src/main/java/com/lottery/dto/VriableAddDto.java

@ -0,0 +1,27 @@
package com.lottery.dto;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.validation.constraints.NotNull;
/**
* @program: lottery-system
* @ClassName VriableAdd
* @description:
* @author:jihaipeng
* @create: 202507-18 19:17
* @Version 1.0
**/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class VriableAddDto {
@NotNull(message = "活动ID不能为空")
private Integer activityId;
@NotNull(message = "市场不能为空")
private Integer stock;
@NotNull(message = "添加数量不能为空")
private Integer addTotal;
}

34
lottery-system/lottery-pojo/src/main/java/com/lottery/dto/WinUserExportDto.java

@ -0,0 +1,34 @@
package com.lottery.dto;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.format.DateTimeFormat;
import lombok.Data;
import java.util.Date;
@Data
public class WinUserExportDto {
@ExcelProperty("序号")
private int index;
@ExcelProperty("姓名")
private String username;
@ExcelProperty("精网号")
private String jwcode;
@ExcelProperty("中奖等级")
private String GradeName;
@ExcelProperty("所中礼品")
private String prizeName;
@ExcelProperty("中奖时间")
@DateTimeFormat("yyyy-MM-dd HH:mm:ss")
private Date winTime;
@ExcelProperty("所在地区")
private String locMarket;
}

26
lottery-system/lottery-pojo/src/main/java/com/lottery/dto/WinUserQueryDto.java

@ -0,0 +1,26 @@
package com.lottery.dto;
import lombok.Data;
import javax.persistence.criteria.CriteriaBuilder;
/**
* @program: lottery
* @ClassName WinUserQuertDto
* @description:
* @author: wwl
* @create: 2025-07-17 14:12
* @Version 1.0
**/
@Data
public class WinUserQueryDto {
private String username;
private String jwcode;
private Long gradeId;
private Integer pageNum;
private Integer pageSize;
}

39
lottery-system/lottery-pojo/src/main/java/com/lottery/entity/Activity.java

@ -0,0 +1,39 @@
package com.lottery.entity;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Date;
/**
* @program: lottery-system
* @ClassName Activity
* @description:
* @author:jihaipeng
* @create: 202507-14 14:17
* @Version 1.0
**/
@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName("activity")
public class Activity {
@TableId(type = IdType.AUTO) // 主键自增策略
private Integer id;
private String activityName; // 活动名称
private Integer marketOne; // 市场一(如USA)
private Integer marketTwo; // 市场二(如HK)
private Integer status; // 状态(1-启用,0-禁用)
@TableField(value = "create_time", fill = FieldFill.INSERT) // 自动填充创建时间
private LocalDateTime createdTime; // 创建时间
@TableField(value = "create_time", fill = FieldFill.INSERT) // 自动填充创建时间
private LocalDateTime updatedTime; // 更新时间
private LocalDate startTime; // 活动开始时间
private LocalDate endTime; // 活动结束时间
}

32
lottery-system/lottery-pojo/src/main/java/com/lottery/entity/FundingData.java

@ -0,0 +1,32 @@
package com.lottery.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
/**
* @program: lottery-system
* @ClassName FundingData
* @description:
* @author:jihaipeng
* @create: 202507-14 14:52
* @Version 1.0
**/
@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName("data")
public class FundingData {
@TableId(type = IdType.AUTO) // 主键自增策略
private Integer id;
private Integer time; // 统计时间(众筹初始时间)
private String stock; // 市场(美股/港股)
private Integer addTotal; // 虚拟参与人数
private Integer activityId; // 关联的活动ID
}

45
lottery-system/lottery-pojo/src/main/java/com/lottery/entity/FundingExport.java

@ -0,0 +1,45 @@
package com.lottery.entity;
import com.alibaba.excel.annotation.ExcelProperty;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.time.LocalDateTime;
/**
* @program: lottery-system
* @ClassName FundingExport
* @description:
* @author:jihaipeng
* @create: 202507-17 10:49
* @Version 1.0
**/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class FundingExport {
@ExcelProperty("用户名")
private String username; // 用户名
@ExcelProperty("精网号") // 定义 Excel 表头为用户唯一码
private String jwcode; // 用户唯一码
@ExcelProperty("市场") // 定义 Excel 表头为市场标识
private String text; // 市场标识(usa/hk)
@ExcelProperty("参与时间") // 定义 Excel 表头为参与时间
private LocalDateTime joinTime; // 参与时间
// 方法1通过 @JsonFormat 直接格式化适用于JSON序列化
@JsonFormat(pattern = "yyyy年M月d日 HH:mm")
public LocalDateTime getJoinTime() {
return joinTime;
}
@ExcelProperty("所在地区")
private String locMarket;
}

36
lottery-system/lottery-pojo/src/main/java/com/lottery/entity/FundingUser.java

@ -0,0 +1,36 @@
package com.lottery.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Date;
/**
* @program: lottery-system
* @ClassName Funding
* @description:
* @author:jihaipeng
* @create: 202507-14 14:36
* @Version 1.0
**/
@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName("z_user")
public class FundingUser {
@TableId(type = IdType.AUTO) // 主键自增策略
private Integer id;
private String marketSign; // 市场标识(usa/hk)
private String username; // 用户名
private String jwcode; // 用户唯一码
private LocalDateTime joinTime; // 参与时间
private Integer activityId; // 关联的活动ID
private String LocMarket; //地区
}

52
lottery-system/lottery-pojo/src/main/java/com/lottery/entity/Grade.java

@ -0,0 +1,52 @@
package com.lottery.entity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import java.util.Date;
/**
* @program: lottery-system
* @ClassName Grade
* @description:
* @author: wwl
* @create: 2025-07-12 17:31
* @Version 1.0
**/
@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName("grade")
@Builder
public class Grade {
@TableId(type = IdType.AUTO) // 主键自增策略
private Long id;
private String gradeName; // 等级名称
private int amount; //等级数量
private int sort;
@TableField("per_win")
private int perWin; //每轮抽取人数
@TableField("remain_num")
private int remainNum;
@TableField("is_del")
private int isDel;
@TableField(value = "create_time", fill = FieldFill.INSERT) // 自动填充创建时间
private Date createTime;
@TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE) // 自动填充更新时间
private Date updateTime;
}

30
lottery-system/lottery-pojo/src/main/java/com/lottery/entity/JwcodeTable.java

@ -0,0 +1,30 @@
package com.lottery.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.time.LocalDate;
import java.time.LocalDateTime;
/**
* @program: lottery-system
* @ClassName JwcodeTable
* @description:
* @author:jihaipeng
* @create: 202507-22 15:11
* @Version 1.0
**/
@Data
@NoArgsConstructor
@AllArgsConstructor
@TableName("jwcode_table")
public class JwcodeTable {
@TableId(value = "id", type = IdType.AUTO) // 明确指定主键字段和生成策略
private Long id;
private String jwcode;
private LocalDateTime createTime;
}

28
lottery-system/lottery-pojo/src/main/java/com/lottery/entity/Market.java

@ -0,0 +1,28 @@
package com.lottery.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @program: lottery-system
* @ClassName market
* @description:
* @author:jihaipeng
* @create: 202507-16 12:01
* @Version 1.0
**/
@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName("market")
public class Market {
private Integer id;
private String market;
private String text;
private String icon;
private Integer des;
private Integer flag;
}

30
lottery-system/lottery-pojo/src/main/java/com/lottery/entity/Prize.java

@ -9,47 +9,45 @@ package com.lottery.entity;
* @Version 1.0
**/
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.math.BigDecimal;
import java.util.Date;
@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName("prize")
@Builder
public class Prize {
// 主键ID
@TableId(type = IdType.AUTO)
private Long id;
// 名称
private String name;
private String PrizeName;
// 描述
private String description;
private Long gradeId;
// 图片URL
private String imageUrl;
// 库存数量
private Integer stock;
// 中奖概率
private BigDecimal probability;
// 奖品类型
private Integer prizeType;
// 状态
private Integer status;
// 创建时间
private Date createTime;
// 更新时间
private Date updateTime;
@TableField("is_del")
private int is_del;
// 用于标记实体类中的非数据库字段一般可以用关联查询的额外字段
@TableField(exist = false)
private String gradeName;
}

11
lottery-system/lottery-pojo/src/main/java/com/lottery/entity/User.java

@ -13,6 +13,7 @@ import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@ -23,23 +24,25 @@ import java.util.Date;
@AllArgsConstructor
@NoArgsConstructor
@TableName("user")
@Builder
public class User {
@TableId(type = IdType.AUTO)
private Long id; // 主键ID表中未显示但建议添加
private String username; // 用户名
private String password; //密码
private String phone; // 手机号
private String jwcode; // 手机号
private int isWin; //是否中奖
private Integer status; // 状态tinyint对应Integer
private int isDel;
private String locMarket;
private Date createTime; // 创建时间
private Date updateTime; // 更新时间
}

36
lottery-system/lottery-pojo/src/main/java/com/lottery/entity/UserDetail.java

@ -0,0 +1,36 @@
package com.lottery.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @program: lottery
* @ClassName UserDetail
* @description:
* @author: wwl
* @create: 2025-07-16 9:32
* @Version 1.0
**/
@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName("user_detail")
public class UserDetail {
@TableId(type = IdType.AUTO)
private Long id; // 主键ID表中未显示但建议添加
private Long userId;
private Long gradeId;
private int isFixed;
@TableField("is_del")
private int isDel;
}

16
lottery-system/lottery-pojo/src/main/java/com/lottery/entity/WinnerRecord.java

@ -9,9 +9,12 @@ package com.lottery.entity;
* @Version 1.0
**/
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@ -20,7 +23,8 @@ import java.util.Date;
@AllArgsConstructor
@NoArgsConstructor
@Data
@TableName("winner_record")
@TableName("winning_record")
@Builder
public class WinnerRecord {
@TableId(type = IdType.AUTO)
@ -30,11 +34,15 @@ public class WinnerRecord {
private Long prizeId; // 奖品ID
private Long roundId; // 轮次ID
@TableField("loc_market")
private String locMarket;
@TableField("is_del")
private int isDel;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date winTime; // 中奖时间
private Boolean isClaimed; // 是否已领取tinyint映射为Boolean
private Date claimTime; // 领取时间
}

23
lottery-system/lottery-pojo/src/main/java/com/lottery/vo/AdminLoginVo.java

@ -0,0 +1,23 @@
//package com.lottery.vo;
//
//import com.alibaba.excel.converters.string.StringErrorConverter;
//import lombok.Data;
//
///**
// * @program: lottery
// * @ClassName AdminLoginVo
// * @description:
// * @author: wwl
// * @create: 2025-07-21 11:46
// * @Version 1.0
// **/
//@Data
//public class AdminLoginVo {
//
// private long id;
//
// private String username;
//
// private String token;
//
//}

21
lottery-system/lottery-pojo/src/main/java/com/lottery/vo/ApiFundingTimeVo.java

@ -0,0 +1,21 @@
package com.lottery.vo;
import lombok.Data;
import java.time.LocalDate;
/**
* @program: lottery-system
* @ClassName ApiFundingTimeVo
* @description:
* @author:jihaipeng
* @create: 202507-16 13:49
* @Version 1.0
**/
@Data
public class ApiFundingTimeVo {
private Integer marketOne;
private Integer marketTwo;
private LocalDate startTime;
private LocalDate endTime;
}

16
lottery-system/lottery-pojo/src/main/java/com/lottery/vo/ApiFundingVO.java

@ -0,0 +1,16 @@
package com.lottery.vo;
import lombok.Data;
import java.time.LocalDate;
import java.util.List;
@Data
public class ApiFundingVO {
private Integer activityId;
private List<ApimarketVo> data;
private LocalDate startTime;
private LocalDate endTime;
private Integer Totalcount;
}

23
lottery-system/lottery-pojo/src/main/java/com/lottery/vo/ApimarketVo.java

@ -0,0 +1,23 @@
package com.lottery.vo;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import java.time.LocalDate;
/**
* @program: lottery-system
* @ClassName ApimarketVo
* @description:
* @author:jihaipeng
* @create: 202507-21 14:10
* @Version 1.0
**/
@Slf4j
@Data
public class ApimarketVo {
private Integer marketId;
private String market;
private Integer marketCount;
private String marketStatus;
}

26
lottery-system/lottery-pojo/src/main/java/com/lottery/vo/FundingActivityVo.java

@ -0,0 +1,26 @@
package com.lottery.vo;
import lombok.Data;
import java.time.LocalDate;
import java.util.Date;
/**
* @program: lottery-system
* @ClassName FundingDataDto
* @description:
* @author:jihaipeng
* @create: 202507-14 15:09
* @Version 1.0
**/
@Data
public class FundingActivityVo {
private Integer id;
private String activityName; // 活动名称
private String marketOne; // 市场一(如USA)
private String marketTwo; // 市场二(如HK)
private Integer status; // 状态(1-启用,0-禁用)
private LocalDate startTime; // 活动开始时间
private LocalDate endTime; // 活动结束时间
}

23
lottery-system/lottery-pojo/src/main/java/com/lottery/vo/FundingDataVO.java

@ -0,0 +1,23 @@
package com.lottery.vo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
/**
* @program: lottery-system
* @ClassName FundingDataVO
* @description:
* @author:jihaipeng
* @create: 202507-18 11:06
* @Version 1.0
**/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class FundingDataVO {
private List<FundingVo> data;
private Integer time;
}

20
lottery-system/lottery-pojo/src/main/java/com/lottery/vo/FundingUserNewVo.java

@ -0,0 +1,20 @@
package com.lottery.vo;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
import java.time.LocalDateTime;
/**
* @program: lottery
* @ClassName FundingUserNewVo
* @description:
* @author: wwl
* @create: 2025-07-26 13:49
* @Version 1.0
**/
@Data
public class FundingUserNewVo {
}

26
lottery-system/lottery-pojo/src/main/java/com/lottery/vo/FundingUserVo.java

@ -0,0 +1,26 @@
package com.lottery.vo;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
import java.time.LocalDateTime;
/**
* @program: lottery-system
* @ClassName FundingUserDto
* @description:
* @author:jihaipeng
* @create: 202507-15 10:09
* @Version 1.0
**/
@Data
public class FundingUserVo {
@TableId(type = IdType.AUTO) // 主键自增策略
private Integer id;
private String text; // 市场标识(usa/hk)
private String username; // 用户名
private String jwcode; // 用户唯一码
private LocalDateTime joinTime; // 参与时间
private String locMarket;
}

27
lottery-system/lottery-pojo/src/main/java/com/lottery/vo/FundingVo.java

@ -0,0 +1,27 @@
package com.lottery.vo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.extern.slf4j.Slf4j;
/**
* @program: lottery-system
* @ClassName FundingVo
* @description:
* @author:jihaipeng
* @create: 202507-21 16:43
* @Version 1.0
**/
@Data
@Slf4j
@AllArgsConstructor
@NoArgsConstructor
public class FundingVo {
private Integer marketId;
private String market;
private Integer show;
private Integer markerVirtual;
private Integer markerTotal;
}

18
lottery-system/lottery-pojo/src/main/java/com/lottery/vo/GradeSimpleVo.java

@ -0,0 +1,18 @@
package com.lottery.vo;
import lombok.Data;
/**
* @program: lottery
* @ClassName GradeSimpleVo
* @description:
* @author: wwl
* @create: 2025-07-19 11:50
* @Version 1.0
**/
@Data
public class GradeSimpleVo {
private String gradeName;
private int id;
}

33
lottery-system/lottery-pojo/src/main/java/com/lottery/vo/GradeVo.java

@ -0,0 +1,33 @@
package com.lottery.vo;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import lombok.Data;
import java.util.Date;
/**
* @program: lottery-system
* @ClassName GradeVo
* @description:
* @author: wwl
* @create: 2025-07-12 17:32
* @Version 1.0
**/
@Data
public class GradeVo {
private Long id;
private String GradeName; // 等级名称
private int amount; //等级数量
private int sort;
private int perWin;
private Date createTime;
private Date updateTime;
}

23
lottery-system/lottery-pojo/src/main/java/com/lottery/vo/ImportResultVo.java

@ -0,0 +1,23 @@
package com.lottery.vo;
import lombok.Data;
import java.util.List;
/**
* @program: lottery
* @ClassName ImportResultVo
* @description:
* @author: wwl
* @create: 2025-07-26 17:10
* @Version 1.0
**/
// 导入结果内部类
@Data
public class ImportResultVo {
private int successCount;
private int addedCount;
private int updatedCount;
private int skipCount;
private List<String> invalidJwCodes;
}

26
lottery-system/lottery-pojo/src/main/java/com/lottery/vo/LoginUserVo.java

@ -0,0 +1,26 @@
package com.lottery.vo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import java.time.LocalDate;
import java.time.LocalDateTime;
/**
* @program: lottery-system
* @ClassName LoginUserVo
* @description:
* @author:jihaipeng
* @create: 202507-22 15:00
* @Version 1.0
**/
@Data
@Slf4j
@NoArgsConstructor
@AllArgsConstructor
public class LoginUserVo {
private String jwcode;
private LocalDateTime createTime;
}

21
lottery-system/lottery-pojo/src/main/java/com/lottery/vo/LotteryVo.java

@ -0,0 +1,21 @@
package com.lottery.vo;
import lombok.Data;
import java.util.List;
/**
* @program: lottery
* @ClassName lotteryVo
* @description:
* @author: wwl
* @create: 2025-07-19 10:45
* @Version 1.0
**/
@Data
public class LotteryVo {
private List<UserVo> data; // 只包含jwcode和username
private Boolean round; // 整体是否还有下一轮
}

21
lottery-system/lottery-pojo/src/main/java/com/lottery/vo/MarketVo.java

@ -0,0 +1,21 @@
package com.lottery.vo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @program: lottery-system
* @ClassName marketVo
* @description:
* @author:jihaipeng
* @create: 202507-18 17:37
* @Version 1.0
**/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class MarketVo {
private Integer id;
private String market;
}

37
lottery-system/lottery-pojo/src/main/java/com/lottery/vo/PageInfo.java

@ -0,0 +1,37 @@
package com.lottery.vo;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
/**
* @program: lottery
* @ClassName PageInfo
* @description:
* @author: wwl
* @create: 2025-07-15 10:20
* @Version 1.0
**/
@Data
public class PageInfo<T> implements Serializable {
private static final long serialVersionUID = 1L;
private List<T> list; // 当前页数据
private long total; // 总记录数
private int pageNum; // 当前页码
private int pageSize; // 每页数量
private int pages; // 总页数
// 可以从Page对象构造
public static <T> PageInfo<T> of(Page<?> page, List<T> list) {
PageInfo<T> pageInfo = new PageInfo<>();
pageInfo.setList(list);
pageInfo.setTotal(page.getTotal());
pageInfo.setPageNum((int) page.getCurrent());
pageInfo.setPageSize((int) page.getSize());
pageInfo.setPages((int) page.getPages());
return pageInfo;
}
}

38
lottery-system/lottery-pojo/src/main/java/com/lottery/vo/PrizeAndGradeVo.java

@ -0,0 +1,38 @@
package com.lottery.vo;
import lombok.Data;
/**
* @program: lottery-system
* @ClassName PrizeAndGradeVo
* @description:
* @author: wwl
* @create: 2025-07-14 13:34
* @Version 1.0
**/
@Data
public class PrizeAndGradeVo {
private String prizeName;
private String imageUrl;
private String GradeName;
private int amount;
private int perWin;
private int remainNum;
private int gradeId;
private int prizeId;
// private Integer isRound;
//
// private Integer currentRound;
// 总轮次
}

33
lottery-system/lottery-pojo/src/main/java/com/lottery/vo/PrizeVo.java

@ -0,0 +1,33 @@
package com.lottery.vo;
import lombok.Data;
import java.security.PrivateKey;
import java.util.Date;
/**
* @program: lottery-system
* @ClassName PrizeVo
* @description:
* @author: wwl
* @create: 2025-07-12 16:48
* @Version 1.0
**/
@Data
public class PrizeVo {
private Long id;
private String PrizeName;
private String imageUrl;
private Long GradeId;
private String gradeName;
private Date createTime;
private Date updateTime;
}

29
lottery-system/lottery-pojo/src/main/java/com/lottery/vo/UserLoginVo.java

@ -0,0 +1,29 @@
package com.lottery.vo;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* @program: lottery-system
* @ClassName UserLoginVo
* @description:
* @author: wwl
* @create: 2025-07-12 10:15
* @Version 1.0
**/
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class UserLoginVo implements Serializable {
private long id;
private String username;
private String token;
}

19
lottery-system/lottery-pojo/src/main/java/com/lottery/vo/UserVo.java

@ -0,0 +1,19 @@
package com.lottery.vo;
/**
* @program: lottery-system
* @ClassName UserVo
* @description:
* @author: wwl
* @create: 2025-07-12 15:15
* @Version 1.0
**/
import lombok.Data;
@Data
public class UserVo {
private Long id;
private String jwcode;
private String username;
}

35
lottery-system/lottery-pojo/src/main/java/com/lottery/vo/WinUserVo.java

@ -0,0 +1,35 @@
package com.lottery.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.util.Date;
/**
* @program: lottery
* @ClassName WinUserVo
* @description:
* @author: wwl
* @create: 2025-07-17 14:09
* @Version 1.0
**/
@Data
public class WinUserVo {
private Long id;
private String username;
private String jwcode;
private String gradeName;
private String prizeName;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date winTime; // 中奖时间;
private String locMarket;
}

56
lottery-system/lottery-service/pom.xml

@ -4,26 +4,66 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.example</groupId>
<groupId>com.lottery</groupId>
<artifactId>lottery-system</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>lottery-service</artifactId>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<!-- Spring Boot 基础依赖 -->
<dependency>
<groupId>org.example</groupId>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.lottery</groupId>
<artifactId>lottery-pojo</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
</dependencies>
<dependency>
<groupId>com.lottery</groupId>
<artifactId>lottery-common</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>2.0.1.Final</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.1.3</version> <!-- 建议使用最新版本 -->
</dependency>
</dependencies>
<!-- 构建配置(修正位置) -->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<!-- 不需要指定版本,继承自父 POM -->
<configuration>
<mainClass>com.lottery.LotteryApplication</mainClass> <!-- 指定主类 -->
</configuration>
</plugin>
</plugins>
</build>
</project>

11
lottery-system/lottery-service/src/main/java/com/lottery/LotteryApplication.java

@ -1,14 +1,25 @@
package com.lottery;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.lottery.admin.mapper.AdminUserMapper;
import com.lottery.entity.User;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.WebApplicationType;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import javax.swing.*;
@SpringBootApplication
@MapperScan("com.lottery.*.mapper")
@EnableTransactionManagement
public class LotteryApplication {
public static void main(String[] args) {
SpringApplication.run(LotteryApplication.class, args);
}
}

128
lottery-system/lottery-service/src/main/java/com/lottery/admin/controller/AdminGradeController.java

@ -0,0 +1,128 @@
package com.lottery.admin.controller;
import com.lottery.admin.mapper.AdminGradeMapper;
import com.lottery.admin.service.AdminGradeService;
import com.lottery.dto.GradeDto;
import com.lottery.dto.PageSimpleDto;
import com.lottery.entity.Grade;
import com.lottery.exception.SomeException;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.lottery.result.Result;
import com.lottery.utils.ConvertBeanUtil;
import com.lottery.vo.GradeSimpleVo;
import com.lottery.vo.GradeVo;
import com.lottery.vo.PageInfo;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import java.util.Date;
import java.util.List;
/**
* @program: lottery-system
* @ClassName GradeController
* @description:
* @author: wwl
* @create: 2025-07-14 14:44
* @Version 1.0
**/
//TODo 删除等级时 把奖品表关联删除删除用户表时把内定用户表关联删除增加内定多一个逻辑如果增加的内定用户已存在表中增加失败其实就是一个用户只能内定一个等级
@RestController
@RequestMapping("/admin/grade")
public class AdminGradeController {
@Autowired
private AdminGradeService adminGradeService;
@Autowired
private AdminGradeMapper adminGradeMapper;
private final static Logger LOGGER = LoggerFactory.getLogger(AdminGradeController.class);
@PostMapping("/list")
public Result<PageInfo<GradeVo>> selectGrade(@RequestBody PageSimpleDto pageSimpleDto){
if (pageSimpleDto.getPageNum() == null) {
pageSimpleDto.setPageNum(1);
}
if (pageSimpleDto.getPageSize() == null) {
pageSimpleDto.setPageSize(10);
}
LOGGER.info("列分页查询等级表, 页码: {}, 每页大小: {}", pageSimpleDto.getPageNum(), pageSimpleDto.getPageSize());
PageInfo<GradeVo> pageSelectGrade = adminGradeService.pageSelectGrade(pageSimpleDto.getPageNum(), pageSimpleDto.getPageSize());
return Result.success(pageSelectGrade);
}
@PostMapping("/details")
public Result<GradeVo> selectById(@RequestParam Long id){
LOGGER.info("根据id查找等级:{}",id);
return Result.success(ConvertBeanUtil.convert(adminGradeService.getById(id), GradeVo.class));
}
@PostMapping("/allGradeName")
public Result<List<GradeSimpleVo>> selectAllGrade(){
LOGGER.info("查询所有等级,仅反等级名和id,为了下拉框");
return Result.success(adminGradeService.selectAllGrade());
}
@PostMapping("/add")
public Result add(@RequestBody @Valid GradeDto gradeDto){
LOGGER.info("新增等级:{}", gradeDto);
LambdaQueryWrapper<Grade> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(Grade::getGradeName, gradeDto.getGradeName())
.eq(Grade::getIsDel, 0);
if (adminGradeService.count(queryWrapper) > 0) {
return Result.failure("等级已存在,新增失败");
}
if (!adminGradeService.saveGrade(gradeDto)) return Result.failure("每轮抽取的人数不能大于总数,");
return Result.success();
}
@PostMapping("/update")
public Result update(@RequestBody GradeDto gradeDto){
LOGGER.info("修改等级:{}", gradeDto);
if (adminGradeService.getById(gradeDto.getId())== null) {
return Result.failure("修改的id不存在");
}
LambdaQueryWrapper<Grade> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(Grade::getGradeName, gradeDto.getGradeName())
.eq(Grade::getIsDel, 0)
.ne(Grade::getId, gradeDto.getId());
if (adminGradeService.count(queryWrapper) > 0) {
return Result.failure("等级已存在,修改失败");
}
Grade grade = ConvertBeanUtil.convert(gradeDto, Grade.class);
grade.setUpdateTime(new Date());
grade.setRemainNum(gradeDto.getAmount());
if (!adminGradeService.updateGradeById(gradeDto)) return Result.failure("每轮抽取人数不能大于总数");
return Result.success();
}
//TODO
@PostMapping("/delete")
public Result delete(@RequestParam Long id){
LOGGER.info("删除id为:{} 的等级" ,id);
if (!adminGradeService.removeGradeById(id)){
return Result.failure("删除失败");
}
return Result.success();
}
}

50
lottery-system/lottery-service/src/main/java/com/lottery/admin/controller/AdminIsLoginController.java

@ -0,0 +1,50 @@
package com.lottery.admin.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.lottery.admin.service.AdminIsLoginService;
import com.lottery.dto.UserByJwcodeDto;
import com.lottery.dto.UserByJwcodePageDto;
import com.lottery.result.Result;
import com.lottery.vo.LoginUserVo;
import com.lottery.vo.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.validation.Valid;
/**
* @program: lottery-system
* @ClassName LoginController
* @description:
* @author:jihaipeng
* @create: 202507-22 11:15
* @Version 1.0
**/
@RestController
@RequestMapping("/admin/isLogin")
public class AdminIsLoginController {
@Autowired
private AdminIsLoginService adminIsLoginService;
//添加精网号
@RequestMapping("/addUser")
public Result<String> addUser(@RequestBody @Valid UserByJwcodeDto userDto) {
return adminIsLoginService.addUser(userDto.getJwcode());
}
//删除精网号
@RequestMapping("/deleteUser")
public Result<String> deleteUser(@RequestBody @Valid UserByJwcodeDto userDto) {
return adminIsLoginService.deleteUser(userDto.getJwcode());
}
//分页返回数据
@RequestMapping("/selectByJwcode")
public Result<PageInfo<LoginUserVo>> selectByJwcode(@RequestBody UserByJwcodePageDto userByJwcodePageDto) {
return adminIsLoginService.selectByJwcode(userByJwcodePageDto.getJwcode(), userByJwcodePageDto.getPageNum(), userByJwcodePageDto.getPageSize(),userByJwcodePageDto.getPageNum());
}
}

89
lottery-system/lottery-service/src/main/java/com/lottery/admin/controller/AdminPrizeController.java

@ -0,0 +1,89 @@
package com.lottery.admin.controller;
import com.lottery.admin.service.AdminPrizeService;
import com.lottery.dto.PageSimpleDto;
import com.lottery.dto.PrizeDto;
import com.lottery.dto.FixUserDto;
import com.lottery.result.Result;
import com.lottery.vo.PageInfo;
import com.lottery.vo.PrizeVo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
/**
* @program: lottery
* @ClassName AdminPrizeController
* @description:
* @author: wwl
* @create: 2025-07-15 10:06
* @Version 1.0
**/
@RestController
@RequestMapping("/admin/prize")
public class AdminPrizeController {
@Autowired
private AdminPrizeService adminPrizeService;
private final static Logger LOGGER = LoggerFactory.getLogger(AdminPrizeController.class);
@PostMapping("list")
public Result<PageInfo<PrizeVo>> listPrize(@RequestBody PageSimpleDto pageSimpleDto) {
if (pageSimpleDto.getPageNum() == null) {
pageSimpleDto.setPageNum(1);
}
if (pageSimpleDto.getPageSize() == null) {
pageSimpleDto.setPageSize(10);
}
LOGGER.info("列分页查询l礼品表, 页码: {}, 每页大小: {}", pageSimpleDto.getPageNum(), pageSimpleDto.getPageSize());
PageInfo<PrizeVo> pageInfo = adminPrizeService.pageListPrize(pageSimpleDto.getPageNum(), pageSimpleDto.getPageSize());
return Result.success(pageInfo);
}
@PostMapping("/details")
public Result<PrizeVo> selectById(@RequestParam Long id) {
LOGGER.info("根据id查询奖品:{}",id);
return Result.success(adminPrizeService.getPrizeById(id));
}
//TODO 添加图片oss
@PostMapping("/add")
public Result addPrize(@RequestBody @Valid PrizeDto prizeDto) {
LOGGER.info("新增奖品:{}", prizeDto);
return adminPrizeService.add(prizeDto);
}
@PostMapping("/update")
public Result updatePrize(@RequestBody @Valid PrizeDto prizeDto) {
LOGGER.info("修改奖品信息:{}",prizeDto);
if (adminPrizeService.getById(prizeDto.getId())== null) {
return Result.failure("修改的id不存在");
}
return adminPrizeService.updatePrize(prizeDto);
}
@PostMapping("/delete")
public Result deletePrize(@RequestParam Long id) {
LOGGER.info("根基id:{},删除奖品",id);
if (!adminPrizeService.removePrizeById(id)){
return Result.failure("删除失败");
}
return Result.success();
}
//新增内定
@PostMapping("/addFixUser")
public Result addWinUser(@RequestBody @Valid FixUserDto fixUserDto) throws Exception {
if(!fixUserDto.getJwcode().startsWith("9")){
return Result.failure("添加精网号失败");
}
return adminPrizeService.addWinUser(fixUserDto);
}
}

200
lottery-system/lottery-service/src/main/java/com/lottery/admin/controller/AdminUserController.java

@ -0,0 +1,200 @@
package com.lottery.admin.controller;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.lottery.admin.mapper.AdminUserMapper;
import com.lottery.admin.service.AdminUserDetailService;
import com.lottery.admin.service.AdminUserService;
import com.lottery.dto.AdminLogin;
import com.lottery.dto.UserDto;
import com.lottery.dto.UserImportDto;
import com.lottery.dto.UserQueryDto;
import com.lottery.entity.User;
import com.lottery.result.Result;
import com.lottery.utils.ConvertBeanUtil;
import com.lottery.utils.ExcelUtil;
import com.lottery.vo.PageInfo;
import com.lottery.vo.UserLoginVo;
import com.lottery.vo.UserVo;
import org.apache.logging.log4j.util.PerformanceSensitive;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid;
import java.util.*;
import java.util.stream.Collectors;
/**
* @program: lottery
* @ClassName AdminUserController
* @description:
* @author: wwl
* @create: 2025-07-15 14:56
* @Version 1.0
**/
@RestController
@RequestMapping("/admin/user")
public class AdminUserController {
@Autowired
private AdminUserService adminUserService;
@Autowired
private AdminUserDetailService adminUserDetailService;
private final static Logger LOGGER = LoggerFactory.getLogger(AdminUserController.class);
@Autowired
private com.lottery.propertise.jwtPropertice jwtPropertice;
@PostMapping("/add")
public Result add(@RequestBody @Valid UserDto userDto) throws Exception {
if(!userDto.getJwcode().startsWith("9")){
return Result.failure("添加精网号失败");
}
LOGGER.info("新增用户:{}",userDto);
if (!adminUserService.addUser(userDto)){
return Result.failure("用户名或精网号已存在,无法添加");
}
return Result.success();
}
@PostMapping("/list")
public Result<PageInfo<UserVo>> getAllUser(@RequestBody UserQueryDto userQueryDto ){
LOGGER.info("分页查询所有用户");
if (userQueryDto.getPageNum() == null) {
userQueryDto.setPageNum(1);
}
if (userQueryDto.getPageSize() == null) {
userQueryDto.setPageSize(10);
}
return Result.success(adminUserService.listUser(userQueryDto.getPageNum(), userQueryDto.getPageSize(), userQueryDto));
}
@PostMapping("/delete")
public Result delete(@RequestParam Long id) {
LOGGER.info("根据id删除用户:{}",id);
adminUserService.removeUserById(id);
return Result.success();
}
@PostMapping("/delete/batch")
public Result deleteBatch(@RequestParam List<Long> ids) {
LOGGER.info("批量删除用户:{}",ids);
if (ids == null || ids.size() == 0) {
return Result.failure("请传入id");
}
if (adminUserService.removeUserBatchByIds(ids)){
return Result.success();
};
return Result.failure("删除失败");
}
@PostMapping("/import")
public Result importUsers(@RequestParam("file") MultipartFile file) {
LOGGER.info("开始导入用户Excel文件: {}", file.getOriginalFilename());
// 1. 基本文件校验
if (file.isEmpty()) {
return Result.failure("请上传文件");
}
String fileName = file.getOriginalFilename();
if (!fileName.endsWith(".xlsx") && !fileName.endsWith(".xls")) {
return Result.failure("仅支持Excel文件(.xlsx, .xls)");
}
return adminUserService.importUsers(file);
}
@PostMapping("/login")
public Result<UserLoginVo> login(@RequestBody AdminLogin adminLogin) {
LOGGER.info("管理员登录:{}",adminLogin);
return adminUserService.AdminUserlogin(adminLogin);
}
@PostMapping("/list/fix")
public Result<PageInfo<UserVo>> getAllFixUser(@RequestBody UserQueryDto userQueryDto){
LOGGER.info("分页查询所有内定用户");
//if (userQueryDto.getPageNum() == null) {
// userQueryDto.setPageNum(1);
//}
//if (userQueryDto.getPageSize() == null) {
// userQueryDto.setPageSize(10);
//}
System.out.println(userQueryDto.getPageNum() + " " +userQueryDto.getPageSize() + " " +userQueryDto);
return Result.success(adminUserDetailService.listFixUser(userQueryDto.getPageNum(),userQueryDto.getPageSize(),userQueryDto));
}
// @PostMapping
// public Result<PageInfo<UserVo>> getAllFixUserById(@RequestBody UserQueryDto userQueryDto){
//
// }
@PostMapping("/delete/fix")
public Result deleteFix(@RequestParam Long id) {
LOGGER.info("根据id删除内定用户:{}",id);
if (adminUserDetailService.removeFixUserById(id)){
return Result.success();
};
return Result.failure("删除失败");
}
@PostMapping("/delete/fix/batch")
public Result deleteBatchFix(@RequestParam List<Long> ids) {
LOGGER.info("批量删除内定用户:{}",ids);
if (ids == null || ids.size() == 0) {
return Result.failure("ids is null");
}
if (adminUserDetailService.removeFixUserBatchByIds(ids)){
return Result.success();
};
return Result.failure("删除失败");
}
@PostMapping("/import/fix")
public Result importFixUsers(@RequestParam("file") MultipartFile file, @RequestParam Long gradeId) {
LOGGER.info("开始导入内定用户Excel文件: {}", file.getOriginalFilename());
// 1. 基本文件校验
if (file.isEmpty()) {
return Result.failure("请上传文件");
}
String fileName = file.getOriginalFilename();
if (!fileName.endsWith(".xlsx") && !fileName.endsWith(".xls")) {
return Result.failure("仅支持Excel文件(.xlsx, .xls)");
}
return adminUserDetailService.importFixUsers(file,gradeId);
}
/**
* 退出
* @return
*/
@PostMapping("/logout")
public Result<String> logout(HttpServletRequest request) {
LOGGER.info("用户登出");
String token = request.getHeader(jwtPropertice.getUserTokenName());
return adminUserService.logout(token);
}
@Autowired
private AdminUserMapper adminUserMapper;
@PostMapping("/updateUserWin")
public void updateUser(){
LambdaUpdateWrapper<User> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.set(User::getIsWin, 0);
adminUserMapper.update(null, updateWrapper);
}
}

57
lottery-system/lottery-service/src/main/java/com/lottery/admin/controller/AdminWInController.java

@ -0,0 +1,57 @@
package com.lottery.admin.controller;
import com.lottery.admin.service.AdminWinService;
import com.lottery.dto.UserQueryDto;
import com.lottery.dto.WinUserQueryDto;
import com.lottery.result.Result;
import com.lottery.vo.PageInfo;
import com.lottery.vo.UserVo;
import com.lottery.vo.WinUserVo;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* @program: lottery-system
* @ClassName wincontroller
* @description:
* @author:wwl
* @create: 202507-17 15:18
* @Version 1.0
**/
@Slf4j
@RestController
@RequestMapping("/admin/win")
public class AdminWInController {
@Autowired
private AdminWinService adminWinService;
private final static Logger LOGGER = LoggerFactory.getLogger(AdminWInController.class);
@PostMapping("/list")
public Result<PageInfo<WinUserVo>> WInController(@RequestBody WinUserQueryDto winUserQueryDto) {
LOGGER.info("分页查询所有中奖用户");
if (winUserQueryDto.getPageNum() == null) {
winUserQueryDto.setPageNum(1);
}
if (winUserQueryDto.getPageSize() == null) {
winUserQueryDto.setPageSize(10);
}
return Result.success(adminWinService.listWinUser(winUserQueryDto.getPageNum(), winUserQueryDto.getPageSize(), winUserQueryDto));
}
@PostMapping("/export")
public void export(@RequestBody WinUserQueryDto winUserQueryDto, HttpServletResponse response) throws IOException {
log.info("导出中奖用户数据");
adminWinService.exportWinUser(winUserQueryDto, response);
}
}

183
lottery-system/lottery-service/src/main/java/com/lottery/admin/controller/FundingController.java

@ -0,0 +1,183 @@
package com.lottery.admin.controller;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.lottery.dto.*;
import com.lottery.admin.service.IFundingService;
import com.lottery.result.Result;
import com.lottery.vo.FundingActivityVo;
import com.lottery.vo.FundingDataVO;
import com.lottery.vo.MarketVo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.persistence.criteria.CriteriaBuilder;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import java.io.IOException;
import java.util.List;
import java.util.Map;
/**
* @program: lottery-system
* @ClassName fundingController
* @description:
* @author:jihaipeng
* @create: 202507-14 15:03
* @Version 1.0
**/
@RestController
@RequestMapping("/admin/funding")
public class FundingController {
@Autowired
private IFundingService fundingService;
private final static Logger LOGGER = LoggerFactory.getLogger(FundingController.class);
/**
* 获取所有众筹活动
*
* @return
*/
@GetMapping("/getActivity")
public Result<List<FundingActivityVo>> getFundingActivity() {
LOGGER.info("获取所有众筹活动");
List<FundingActivityVo> list = fundingService.getFundingActivity();
return Result.success(list);
}
//修改众筹的活动状态
@PostMapping("/updateActivityStatus")
public Result updateActivityStatus(@RequestParam @Validated Integer id, @RequestParam @Validated Integer status) {
LOGGER.info("修改的众筹活动id为{},修改的众筹活动状态为{}", id, status);
//查看活动是否存在
// 参数校验
if (id == null || status == null) {
return Result.failure("参数不能为空");
}
if (status != 0 && status != 1) { // 假设状态只有0/1
// return Result.failure("活动状态值非法");
return Result.failure("活动状态值非法");
}
try {
return fundingService.updateActivityStatus(id, status);
} catch (Exception e) {
return Result.failure("修改活动状态失败");
}
}
//添加活动
@PostMapping("/addActivity")
public Result<String> addActivity(@Validated @RequestBody FundingActivityDto fundingActivityDto) {
LOGGER.info("添加活动,参数为{}", fundingActivityDto);
return fundingService.addActivity(fundingActivityDto);
}
//根据活动id查询助力详情
@PostMapping("/getActivityDetail")
public Result<Map<String, Object>> getActivityDetail(@RequestBody @Valid FundingUserDto fundingUserDto) {
//检查活动是否存在
LOGGER.info("接口getActivityDetail查询助力详情,查询条件{}", fundingUserDto);
// 必填参数校验可选但推荐
if (fundingUserDto.getActivityId() == null) {
throw new IllegalArgumentException("activityId 不能为空");
}
return fundingService.getActivityDetail(fundingUserDto);
}
// //根据活动id查询数据统计
@PostMapping("/getActivityDate")
public Result<Map<String, Object>> getActivityDate(@RequestBody @Valid ActivityDto activityIdDto) {
LOGGER.info("接口getActivityDate查询后台数据统计,活动id为{}", activityIdDto.getActivityId());
if(fundingService.getActivityDate(activityIdDto.getActivityId())==null){
return Result.failure("活动不存在,查询失败");
}
return Result.success(fundingService.getActivityDate(activityIdDto.getActivityId()));
}
// //添加用户参与记录
// @PostMapping("/addRecord")
// public Result<String> addRecord(@RequestBody FundingRecordDto fundingRecordDto) throws Exception {
// return fundingService.addRecord(fundingRecordDto);
// }
//设置活动初始时间
@PostMapping("/setActivityTime")
public Result<String> setActivityTime(@RequestBody ActivityTimeDto activityTimeDto) {
LOGGER.info("设置id={}的活动初始时间为{}", activityTimeDto.getActivityId(), activityTimeDto.getTime());
return fundingService.setActivityTime( activityTimeDto.getActivityId(), activityTimeDto.getTime());
}
//添加虚拟次数
@PostMapping("/addDateVirtual")
public Result<String> addVirtual(@RequestBody @Valid VriableAddDto vriableAddDto) {
LOGGER.info("添加虚拟次数");
Integer activityId = vriableAddDto.getActivityId();
Integer stock = vriableAddDto.getStock();
Integer addTotal = vriableAddDto.getAddTotal();
return fundingService.addVirtual(activityId, stock, addTotal);
}
//返回数据详情
@PostMapping("/getDate")
public Result<FundingDataVO> getDate(@RequestBody @Valid ActivityDto activityIdDto) {
LOGGER.info("返回id={}的活动的设置数据详情", activityIdDto.getActivityId());
//
// try {
// ObjectMapper mapper = new ObjectMapper();
// String json = mapper.writeValueAsString(date);
// LOGGER.info("返回的 JSON 数据: {}", json);
// } catch (JsonProcessingException e) {
// LOGGER.error("JSON 转换失败", e);
// }
return fundingService.getDate1(activityIdDto.getActivityId());
}
//获取市场股票列表
@GetMapping("/getMarketList")
public Result<List<MarketVo>> getMarket() {
LOGGER.info("获取市场股票列表");
return Result.success(fundingService.getMarketList());
}
//导出活动数据
@PostMapping("/exportActivityData")
public void exportActivityData(@RequestBody @Valid FundingUserDto fundingUserDto, HttpServletResponse response) throws IOException {
LOGGER.info("导出活动数据,参数为{}", fundingUserDto);
fundingService.exportActivityData(fundingUserDto,response);
}
//删除活动
@PostMapping("/deleteActivity")
public Result<String> deleteActivity(@RequestBody ActivityDto activityIdDto) {
LOGGER.info("删除活动:{}",activityIdDto.getActivityId());
return fundingService.deleteActivity(activityIdDto.getActivityId());
}
//查看对应活动的市场列表
@PostMapping("/getMarketList")
public Result<List<MarketVo>> getMarketList(@RequestBody ActivityDto activityIdDto) {
LOGGER.info("查看对应活动的市场列表");
return fundingService.getMarketListByActivityId(activityIdDto.getActivityId());
}
}

29
lottery-system/lottery-service/src/main/java/com/lottery/admin/controller/TongBuController.java

@ -0,0 +1,29 @@
package com.lottery.admin.controller;
import com.lottery.admin.service.IFundingService;
import com.lottery.result.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @program: lottery
* @ClassName TongBuController
* @description:
* @author: wwl
* @create: 2025-07-26 13:46
* @Version 1.0
**/
@RestController
@RequestMapping("/admin/funding")
public class TongBuController {
@Autowired
private IFundingService fundingService;
@PostMapping("/flush")
public boolean flushData() throws Exception {
return fundingService.flushData();
}
}

33
lottery-system/lottery-service/src/main/java/com/lottery/admin/mapper/AdminGradeMapper.java

@ -0,0 +1,33 @@
package com.lottery.admin.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.lottery.entity.Grade;
import com.lottery.vo.GradeSimpleVo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import java.util.List;
/**
* @program: lottery-system
* @ClassName IGradeMapper
* @description:
* @author: wwl
* @create: 2025-07-14 14:37
* @Version 1.0
**/
@Mapper
public interface AdminGradeMapper extends BaseMapper<Grade> {
@Select("select * from grade where grade_name = #{gradeName}")
Grade selectByName(String gradeName);
@Select("select grade_name, id from grade where is_del = 0 order by sort desc, id asc ")
List<GradeSimpleVo> selectAllGrade();
@Update("update grade set is_del = 1 where id = #{id}")
void deleteGradeById(Long id);
}

26
lottery-system/lottery-service/src/main/java/com/lottery/admin/mapper/AdminIsLoginMapper.java

@ -0,0 +1,26 @@
package com.lottery.admin.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.lottery.entity.JwcodeTable;
import org.apache.ibatis.annotations.Mapper;
import java.time.LocalDateTime;
/**
* @program: lottery-system
* @ClassName AdminIsLoginMappper
* @description:
* @author:jihaipeng
* @create: 202507-22 14:09
* @Version 1.0
**/
@Mapper
public interface AdminIsLoginMapper extends BaseMapper<JwcodeTable> {
void addUser(String jwcode, LocalDateTime now);
Integer selectByJwcode(String jwcode);
int deleteUser(String jwcode);
}

27
lottery-system/lottery-service/src/main/java/com/lottery/admin/mapper/AdminPrizeMapper.java

@ -0,0 +1,27 @@
package com.lottery.admin.mapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.lottery.entity.Prize;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
/**
* @program: lottery
* @ClassName AdminPrizeMapper
* @description:
* @author: wwl
* @create: 2025-07-15 15:00
* @Version 1.0
**/
public interface AdminPrizeMapper extends BaseMapper<Prize> {
Page<Prize> pageListPrize(Page<Prize> page, LambdaQueryWrapper<Prize> prizeLambdaQueryWrapper);
@Select("select id from prize where prize_name = #{prizeName}")
Long selectByName(String prizeName);
@Update("update prize set is_del = 1 where id = #{id}")
boolean deletePrizeById(Long id);
}

27
lottery-system/lottery-service/src/main/java/com/lottery/admin/mapper/AdminUserDetailMapper.java

@ -0,0 +1,27 @@
package com.lottery.admin.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.lottery.entity.UserDetail;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import java.util.Set;
/**
* @program: lottery
* @ClassName IUserDetailMapper
* @description:
* @author: wwl
* @create: 2025-07-16 9:47
* @Version 1.0
**/
@Mapper
public interface AdminUserDetailMapper extends BaseMapper<UserDetail> {
@Select("select jwcode from user_detail")
Set<String> selectAllUserCodes();
@Update("UPDATE user_detail SET is_del = 1 WHERE id = #{id}")
int removeFixUserById(Long id);
}

55
lottery-system/lottery-service/src/main/java/com/lottery/admin/mapper/AdminUserMapper.java

@ -0,0 +1,55 @@
package com.lottery.admin.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.lottery.entity.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import java.util.Collection;
import java.util.List;
import java.util.Set;
/**
* @program: lottery
* @ClassName AdminUserMapper
* @description:
* @author: wwl
* @create: 2025-07-15 14:59
* @Version 1.0
**/
@Mapper
public interface AdminUserMapper extends BaseMapper<User> {
@Select("select jwcode from user")
Set<String> selectAllUserCodes();
Long selectByJwcode(String jwcode);
@Update("update user set is_del = 1 where id = #{id}")
void deleteUserById(Long id);
@Select("SELECT jwcode, is_del as isDel FROM user")
List<User> selectAllUserCodesWithDelStatus();
@Select("SELECT * FROM user WHERE jwcode = #{jwcode}")
User selectByJwCode(String jwcode);
@Select("select * from user where jwcode = #{jwcode}")
User selectUserByJwcode(String jwcode);
@Select("select * from user where username = #{username}")
User selectByName(String username);
@Select("<script>" +
"SELECT jwcode FROM member_info WHERE jwcode IN " +
"<foreach collection='jwcode' item='code' open='(' separator=',' close=')'>" +
"#{code}" +
"</foreach>" +
"</script>")
Set<String> selectExistingJwCodes(@Param("jwcode") List<String> batchJwCodes);
@Select("select loc_market from member_info where jwcode = #{jwcode}")
String selectLocMarketByJwcode(String jwcode);
}

21
lottery-system/lottery-service/src/main/java/com/lottery/admin/mapper/AdminWinMapper.java

@ -0,0 +1,21 @@
package com.lottery.admin.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.lottery.entity.WinnerRecord;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
import java.util.Map;
/**
* @program: lottery-system
* @ClassName IWinMapper
* @description:
* @author:jihaipeng
* @create: 202507-12 17:53
* @Version 1.0
**/
@Mapper
public interface AdminWinMapper extends BaseMapper<WinnerRecord> {
}

102
lottery-system/lottery-service/src/main/java/com/lottery/admin/mapper/IFundingMapper.java

@ -0,0 +1,102 @@
package com.lottery.admin.mapper;
import com.lottery.entity.Activity;
import com.lottery.entity.FundingExport;
import com.lottery.vo.FundingActivityVo;
import com.lottery.vo.FundingUserVo;
import com.lottery.vo.MarketVo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
* @program: lottery-system
* @ClassName IFundingMapper
* @description:
* @author:jihaipeng
* @create: 202507-14 15:05
* @Version 1.0
**/
@Mapper
public interface IFundingMapper {
List<FundingActivityVo> getFundingActivity();
void updateActivityStatus(Integer id, Integer status);
void addActivity(Activity activity);
List<FundingUserVo> selectByCondition(Integer activityId, String username, String jwcode, Integer marketSign, Integer pagesize, int offset);
int searchcount(Integer activityId, String username, String jwcode, Integer marketSign);
Integer searchPeopleTotal(Integer activityId);
Integer searchMarketPeople(Integer activityId, Integer marketSign);
Integer searchMarketTotal(Integer activityId, Integer marketSign);
// void addRecord(Integer activityId, String username, String jwcode, String marketSign, LocalDateTime joinTime);
void setActivityDate(Integer activityId, Integer time);
void addDate(Integer time, Integer stock, Integer addTotal, Integer activityId);
void setVirtual(Integer activityId, Integer stock, Integer addTotal);
Integer searchVirtual(Integer activityId, Integer stock);
Integer getTime(Integer activityId, Integer stock);
List<MarketVo> getMarketList();
Integer selectStatus();
String selectActivityName(Integer activityId);
List<FundingExport> selectByConditionExport(Integer activityId, String username, String jwcode, Integer marketSign);
Integer selectCount(Integer activityId);
void deleteActivity(Integer id);
void deleteDate(Integer id);
void deleteZuser(Integer id);
Map<String, Object> getMarket(Integer activityId);
String selectMarketName(Integer one);
List<MarketVo> getMarketListByActivityId(Integer activityId);
Integer selectActivityCount(Integer id);
Integer selectmarket(Integer id);
Integer selectmarketCount(Integer market);
Integer selectActivityStatus(Integer id);
@Select("select jwcode from z_user where loc_market in('usa','cn','sg','my','th','hk','vi','can')")
ArrayList<String> selectJwcode();
@Update("update z_user set loc_market = #{locMarket} where jwcode = #{jwcode}")
void updateLocMarket(String jwcode, String locMarket);
@Select("select text from market where market = #{locMarket}")
String updateLocMarketToCn(String locMarket);
String selectm(String locM);
}

45
lottery-system/lottery-service/src/main/java/com/lottery/admin/service/AdminGradeService.java

@ -0,0 +1,45 @@
package com.lottery.admin.service;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.lottery.dto.GradeDto;
import com.lottery.entity.Grade;
import com.lottery.vo.GradeSimpleVo;
import com.lottery.vo.GradeVo;
import com.lottery.vo.PageInfo;
import org.springframework.stereotype.Service;
import javax.persistence.criteria.CriteriaBuilder;
import java.util.List;
/**
* @program: lottery-system
* @ClassName IGradeService
* @description:
* @author: wwl
* @create: 2025-07-14 14:40
*
* @Version 1.0
**/
public interface AdminGradeService extends IService<Grade> {
PageInfo<GradeVo> pageSelectGrade(Integer pageNum, Integer pageSize);
List<GradeSimpleVo> selectAllGrade();
boolean saveGrade(GradeDto gradeDto);
boolean removeGradeById(Long id);
boolean updateGradeById(GradeDto gradeDto);
// boolean updateGradeById(GradeDto GradeDto);
// boolean updateGrade(GradeDto gradeDto);
}

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save