Przeglądaj źródła

feat: remove danshop subsystem

liaoxg 4 miesięcy temu
rodzic
commit
f83478d756
78 zmienionych plików z 0 dodań i 3421 usunięć
  1. 0 57
      dan/danshop/.classpath
  2. 0 87
      dan/danshop/.factorypath
  3. 0 34
      dan/danshop/.project
  4. 0 4
      dan/danshop/.settings/org.eclipse.core.resources.prefs
  5. 0 4
      dan/danshop/.settings/org.eclipse.jdt.apt.core.prefs
  6. 0 10
      dan/danshop/.settings/org.eclipse.jdt.core.prefs
  7. 0 4
      dan/danshop/.settings/org.eclipse.m2e.core.prefs
  8. 0 142
      dan/danshop/pom.xml
  9. 0 16
      dan/danshop/src/main/java/com/etotem/danshop/DanShopApplication.java
  10. 0 72
      dan/danshop/src/main/java/com/etotem/danshop/common/DanShopConstants.java
  11. 0 50
      dan/danshop/src/main/java/com/etotem/danshop/common/Result.java
  12. 0 81
      dan/danshop/src/main/java/com/etotem/danshop/config/CfcBackendClient.java
  13. 0 93
      dan/danshop/src/main/java/com/etotem/danshop/config/JwtAuthFilter.java
  14. 0 18
      dan/danshop/src/main/java/com/etotem/danshop/config/MybatisPlusConfig.java
  15. 0 24
      dan/danshop/src/main/java/com/etotem/danshop/config/RedisConfig.java
  16. 0 35
      dan/danshop/src/main/java/com/etotem/danshop/config/WebMvcConfig.java
  17. 0 16
      dan/danshop/src/main/java/com/etotem/danshop/config/WechatPayConfig.java
  18. 0 20
      dan/danshop/src/main/java/com/etotem/danshop/controller/LogisticsController.java
  19. 0 49
      dan/danshop/src/main/java/com/etotem/danshop/controller/PaymentController.java
  20. 0 43
      dan/danshop/src/main/java/com/etotem/danshop/controller/admin/AdminCategoryController.java
  21. 0 33
      dan/danshop/src/main/java/com/etotem/danshop/controller/admin/AdminLogisticsController.java
  22. 0 47
      dan/danshop/src/main/java/com/etotem/danshop/controller/admin/AdminOrderController.java
  23. 0 54
      dan/danshop/src/main/java/com/etotem/danshop/controller/admin/AdminProductController.java
  24. 0 53
      dan/danshop/src/main/java/com/etotem/danshop/controller/admin/AdminProfitRuleController.java
  25. 0 46
      dan/danshop/src/main/java/com/etotem/danshop/controller/buyer/AddressController.java
  26. 0 42
      dan/danshop/src/main/java/com/etotem/danshop/controller/buyer/CartController.java
  27. 0 24
      dan/danshop/src/main/java/com/etotem/danshop/controller/buyer/CategoryController.java
  28. 0 59
      dan/danshop/src/main/java/com/etotem/danshop/controller/buyer/OrderController.java
  29. 0 40
      dan/danshop/src/main/java/com/etotem/danshop/controller/buyer/ProductController.java
  30. 0 44
      dan/danshop/src/main/java/com/etotem/danshop/controller/seller/SellerOrderController.java
  31. 0 51
      dan/danshop/src/main/java/com/etotem/danshop/controller/seller/SellerProductController.java
  32. 0 41
      dan/danshop/src/main/java/com/etotem/danshop/controller/seller/SellerProfitController.java
  33. 0 20
      dan/danshop/src/main/java/com/etotem/danshop/dto/AddressDTO.java
  34. 0 17
      dan/danshop/src/main/java/com/etotem/danshop/dto/CartItemDTO.java
  35. 0 13
      dan/danshop/src/main/java/com/etotem/danshop/dto/CategoryDTO.java
  36. 0 16
      dan/danshop/src/main/java/com/etotem/danshop/dto/LogisticsDTO.java
  37. 0 20
      dan/danshop/src/main/java/com/etotem/danshop/dto/OrderCreateDTO.java
  38. 0 26
      dan/danshop/src/main/java/com/etotem/danshop/dto/OrderDTO.java
  39. 0 17
      dan/danshop/src/main/java/com/etotem/danshop/dto/OrderItemDTO.java
  40. 0 14
      dan/danshop/src/main/java/com/etotem/danshop/dto/PayNotifyDTO.java
  41. 0 26
      dan/danshop/src/main/java/com/etotem/danshop/dto/ProductDTO.java
  42. 0 15
      dan/danshop/src/main/java/com/etotem/danshop/dto/ProductQueryDTO.java
  43. 0 15
      dan/danshop/src/main/java/com/etotem/danshop/dto/ProfitRuleDTO.java
  44. 0 40
      dan/danshop/src/main/java/com/etotem/danshop/entity/Address.java
  45. 0 41
      dan/danshop/src/main/java/com/etotem/danshop/entity/Category.java
  46. 0 21
      dan/danshop/src/main/java/com/etotem/danshop/entity/Favorite.java
  47. 0 50
      dan/danshop/src/main/java/com/etotem/danshop/entity/Logistics.java
  48. 0 72
      dan/danshop/src/main/java/com/etotem/danshop/entity/Order.java
  49. 0 40
      dan/danshop/src/main/java/com/etotem/danshop/entity/OrderItem.java
  50. 0 27
      dan/danshop/src/main/java/com/etotem/danshop/entity/OrderLog.java
  51. 0 72
      dan/danshop/src/main/java/com/etotem/danshop/entity/Product.java
  52. 0 38
      dan/danshop/src/main/java/com/etotem/danshop/entity/ProfitLog.java
  53. 0 37
      dan/danshop/src/main/java/com/etotem/danshop/entity/ProfitRule.java
  54. 0 9
      dan/danshop/src/main/java/com/etotem/danshop/mapper/AddressMapper.java
  55. 0 9
      dan/danshop/src/main/java/com/etotem/danshop/mapper/CategoryMapper.java
  56. 0 9
      dan/danshop/src/main/java/com/etotem/danshop/mapper/FavoriteMapper.java
  57. 0 9
      dan/danshop/src/main/java/com/etotem/danshop/mapper/LogisticsMapper.java
  58. 0 9
      dan/danshop/src/main/java/com/etotem/danshop/mapper/OrderItemMapper.java
  59. 0 9
      dan/danshop/src/main/java/com/etotem/danshop/mapper/OrderLogMapper.java
  60. 0 9
      dan/danshop/src/main/java/com/etotem/danshop/mapper/OrderMapper.java
  61. 0 9
      dan/danshop/src/main/java/com/etotem/danshop/mapper/ProductMapper.java
  62. 0 9
      dan/danshop/src/main/java/com/etotem/danshop/mapper/ProfitLogMapper.java
  63. 0 9
      dan/danshop/src/main/java/com/etotem/danshop/mapper/ProfitRuleMapper.java
  64. 0 107
      dan/danshop/src/main/java/com/etotem/danshop/service/AddressService.java
  65. 0 89
      dan/danshop/src/main/java/com/etotem/danshop/service/CartService.java
  66. 0 58
      dan/danshop/src/main/java/com/etotem/danshop/service/CategoryService.java
  67. 0 65
      dan/danshop/src/main/java/com/etotem/danshop/service/LogisticsService.java
  68. 0 240
      dan/danshop/src/main/java/com/etotem/danshop/service/OrderService.java
  69. 0 40
      dan/danshop/src/main/java/com/etotem/danshop/service/PaymentService.java
  70. 0 68
      dan/danshop/src/main/java/com/etotem/danshop/service/ProductService.java
  71. 0 72
      dan/danshop/src/main/java/com/etotem/danshop/service/ProfitService.java
  72. 0 67
      dan/danshop/src/main/java/com/etotem/danshop/service/ProfitSettlementService.java
  73. 0 93
      dan/danshop/src/main/java/com/etotem/danshop/service/WechatPayService.java
  74. 0 71
      dan/danshop/src/main/java/com/etotem/danshop/util/LogisticsUtil.java
  75. 0 19
      dan/danshop/src/main/java/com/etotem/danshop/util/OrderNoGenerator.java
  76. 0 67
      dan/danshop/src/main/resources/application.yml
  77. 0 193
      dan/danshop/src/main/resources/schema.sql
  78. 0 52
      dan/danshop/src/main/resources/seed.sql

+ 0 - 57
dan/danshop/.classpath

@@ -1,57 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="src" output="target/classes" path="src/main/java">
-		<attributes>
-			<attribute name="optional" value="true"/>
-			<attribute name="maven.pomderived" value="true"/>
-		</attributes>
-	</classpathentry>
-	<classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources">
-		<attributes>
-			<attribute name="maven.pomderived" value="true"/>
-			<attribute name="optional" value="true"/>
-		</attributes>
-	</classpathentry>
-	<classpathentry kind="src" output="target/test-classes" path="src/test/java">
-		<attributes>
-			<attribute name="optional" value="true"/>
-			<attribute name="maven.pomderived" value="true"/>
-			<attribute name="test" value="true"/>
-		</attributes>
-	</classpathentry>
-	<classpathentry excluding="**" kind="src" output="target/test-classes" path="src/test/resources">
-		<attributes>
-			<attribute name="maven.pomderived" value="true"/>
-			<attribute name="test" value="true"/>
-			<attribute name="optional" value="true"/>
-		</attributes>
-	</classpathentry>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
-		<attributes>
-			<attribute name="maven.pomderived" value="true"/>
-		</attributes>
-	</classpathentry>
-	<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
-		<attributes>
-			<attribute name="maven.pomderived" value="true"/>
-		</attributes>
-	</classpathentry>
-	<classpathentry kind="src" path="target/generated-sources/annotations">
-		<attributes>
-			<attribute name="optional" value="true"/>
-			<attribute name="maven.pomderived" value="true"/>
-			<attribute name="ignore_optional_problems" value="true"/>
-			<attribute name="m2e-apt" value="true"/>
-		</attributes>
-	</classpathentry>
-	<classpathentry kind="src" output="target/test-classes" path="target/generated-test-sources/test-annotations">
-		<attributes>
-			<attribute name="optional" value="true"/>
-			<attribute name="maven.pomderived" value="true"/>
-			<attribute name="ignore_optional_problems" value="true"/>
-			<attribute name="m2e-apt" value="true"/>
-			<attribute name="test" value="true"/>
-		</attributes>
-	</classpathentry>
-	<classpathentry kind="output" path="target/classes"/>
-</classpath>

+ 0 - 87
dan/danshop/.factorypath

@@ -1,87 +0,0 @@
-<factorypath>
-    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-web/2.7.18/spring-boot-starter-web-2.7.18.jar" enabled="true" runInBatchMode="false"/>
-    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter/2.7.18/spring-boot-starter-2.7.18.jar" enabled="true" runInBatchMode="false"/>
-    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot/2.7.18/spring-boot-2.7.18.jar" enabled="true" runInBatchMode="false"/>
-    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-logging/2.7.18/spring-boot-starter-logging-2.7.18.jar" enabled="true" runInBatchMode="false"/>
-    <factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-classic/1.2.12/logback-classic-1.2.12.jar" enabled="true" runInBatchMode="false"/>
-    <factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-core/1.2.12/logback-core-1.2.12.jar" enabled="true" runInBatchMode="false"/>
-    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/logging/log4j/log4j-to-slf4j/2.17.2/log4j-to-slf4j-2.17.2.jar" enabled="true" runInBatchMode="false"/>
-    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/logging/log4j/log4j-api/2.17.2/log4j-api-2.17.2.jar" enabled="true" runInBatchMode="false"/>
-    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/jul-to-slf4j/1.7.36/jul-to-slf4j-1.7.36.jar" enabled="true" runInBatchMode="false"/>
-    <factorypathentry kind="VARJAR" id="M2_REPO/jakarta/annotation/jakarta.annotation-api/1.3.5/jakarta.annotation-api-1.3.5.jar" enabled="true" runInBatchMode="false"/>
-    <factorypathentry kind="VARJAR" id="M2_REPO/org/yaml/snakeyaml/1.30/snakeyaml-1.30.jar" enabled="true" runInBatchMode="false"/>
-    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-json/2.7.18/spring-boot-starter-json-2.7.18.jar" enabled="true" runInBatchMode="false"/>
-    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.13.5/jackson-datatype-jdk8-2.13.5.jar" enabled="true" runInBatchMode="false"/>
-    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.13.5/jackson-datatype-jsr310-2.13.5.jar" enabled="true" runInBatchMode="false"/>
-    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/module/jackson-module-parameter-names/2.13.5/jackson-module-parameter-names-2.13.5.jar" enabled="true" runInBatchMode="false"/>
-    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-tomcat/2.7.18/spring-boot-starter-tomcat-2.7.18.jar" enabled="true" runInBatchMode="false"/>
-    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/tomcat/embed/tomcat-embed-core/9.0.83/tomcat-embed-core-9.0.83.jar" enabled="true" runInBatchMode="false"/>
-    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/tomcat/embed/tomcat-embed-websocket/9.0.83/tomcat-embed-websocket-9.0.83.jar" enabled="true" runInBatchMode="false"/>
-    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-web/5.3.31/spring-web-5.3.31.jar" enabled="true" runInBatchMode="false"/>
-    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-beans/5.3.31/spring-beans-5.3.31.jar" enabled="true" runInBatchMode="false"/>
-    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-webmvc/5.3.31/spring-webmvc-5.3.31.jar" enabled="true" runInBatchMode="false"/>
-    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-aop/5.3.31/spring-aop-5.3.31.jar" enabled="true" runInBatchMode="false"/>
-    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-context/5.3.31/spring-context-5.3.31.jar" enabled="true" runInBatchMode="false"/>
-    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-expression/5.3.31/spring-expression-5.3.31.jar" enabled="true" runInBatchMode="false"/>
-    <factorypathentry kind="VARJAR" id="M2_REPO/com/baomidou/mybatis-plus-boot-starter/3.5.3.1/mybatis-plus-boot-starter-3.5.3.1.jar" enabled="true" runInBatchMode="false"/>
-    <factorypathentry kind="VARJAR" id="M2_REPO/com/baomidou/mybatis-plus/3.5.3.1/mybatis-plus-3.5.3.1.jar" enabled="true" runInBatchMode="false"/>
-    <factorypathentry kind="VARJAR" id="M2_REPO/com/baomidou/mybatis-plus-extension/3.5.3.1/mybatis-plus-extension-3.5.3.1.jar" enabled="true" runInBatchMode="false"/>
-    <factorypathentry kind="VARJAR" id="M2_REPO/com/baomidou/mybatis-plus-core/3.5.3.1/mybatis-plus-core-3.5.3.1.jar" enabled="true" runInBatchMode="false"/>
-    <factorypathentry kind="VARJAR" id="M2_REPO/com/baomidou/mybatis-plus-annotation/3.5.3.1/mybatis-plus-annotation-3.5.3.1.jar" enabled="true" runInBatchMode="false"/>
-    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jsqlparser/jsqlparser/4.4/jsqlparser-4.4.jar" enabled="true" runInBatchMode="false"/>
-    <factorypathentry kind="VARJAR" id="M2_REPO/org/mybatis/mybatis/3.5.10/mybatis-3.5.10.jar" enabled="true" runInBatchMode="false"/>
-    <factorypathentry kind="VARJAR" id="M2_REPO/org/mybatis/mybatis-spring/2.0.7/mybatis-spring-2.0.7.jar" enabled="true" runInBatchMode="false"/>
-    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-autoconfigure/2.7.18/spring-boot-autoconfigure-2.7.18.jar" enabled="true" runInBatchMode="false"/>
-    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-jdbc/2.7.18/spring-boot-starter-jdbc-2.7.18.jar" enabled="true" runInBatchMode="false"/>
-    <factorypathentry kind="VARJAR" id="M2_REPO/com/zaxxer/HikariCP/4.0.3/HikariCP-4.0.3.jar" enabled="true" runInBatchMode="false"/>
-    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-jdbc/5.3.31/spring-jdbc-5.3.31.jar" enabled="true" runInBatchMode="false"/>
-    <factorypathentry kind="VARJAR" id="M2_REPO/com/mysql/mysql-connector-j/8.0.33/mysql-connector-j-8.0.33.jar" enabled="true" runInBatchMode="false"/>
-    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-data-redis/2.7.18/spring-boot-starter-data-redis-2.7.18.jar" enabled="true" runInBatchMode="false"/>
-    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/data/spring-data-redis/2.7.18/spring-data-redis-2.7.18.jar" enabled="true" runInBatchMode="false"/>
-    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/data/spring-data-keyvalue/2.7.18/spring-data-keyvalue-2.7.18.jar" enabled="true" runInBatchMode="false"/>
-    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/data/spring-data-commons/2.7.18/spring-data-commons-2.7.18.jar" enabled="true" runInBatchMode="false"/>
-    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-tx/5.3.31/spring-tx-5.3.31.jar" enabled="true" runInBatchMode="false"/>
-    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-oxm/5.3.31/spring-oxm-5.3.31.jar" enabled="true" runInBatchMode="false"/>
-    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-context-support/5.3.31/spring-context-support-5.3.31.jar" enabled="true" runInBatchMode="false"/>
-    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
-    <factorypathentry kind="VARJAR" id="M2_REPO/io/lettuce/lettuce-core/6.1.10.RELEASE/lettuce-core-6.1.10.RELEASE.jar" enabled="true" runInBatchMode="false"/>
-    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.101.Final/netty-common-4.1.101.Final.jar" enabled="true" runInBatchMode="false"/>
-    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-handler/4.1.101.Final/netty-handler-4.1.101.Final.jar" enabled="true" runInBatchMode="false"/>
-    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.101.Final/netty-resolver-4.1.101.Final.jar" enabled="true" runInBatchMode="false"/>
-    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.101.Final/netty-buffer-4.1.101.Final.jar" enabled="true" runInBatchMode="false"/>
-    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport-native-unix-common/4.1.101.Final/netty-transport-native-unix-common-4.1.101.Final.jar" enabled="true" runInBatchMode="false"/>
-    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.101.Final/netty-codec-4.1.101.Final.jar" enabled="true" runInBatchMode="false"/>
-    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.101.Final/netty-transport-4.1.101.Final.jar" enabled="true" runInBatchMode="false"/>
-    <factorypathentry kind="VARJAR" id="M2_REPO/io/projectreactor/reactor-core/3.4.34/reactor-core-3.4.34.jar" enabled="true" runInBatchMode="false"/>
-    <factorypathentry kind="VARJAR" id="M2_REPO/org/reactivestreams/reactive-streams/1.0.4/reactive-streams-1.0.4.jar" enabled="true" runInBatchMode="false"/>
-    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-pool2/2.11.1/commons-pool2-2.11.1.jar" enabled="true" runInBatchMode="false"/>
-    <factorypathentry kind="VARJAR" id="M2_REPO/io/jsonwebtoken/jjwt-api/0.11.5/jjwt-api-0.11.5.jar" enabled="true" runInBatchMode="false"/>
-    <factorypathentry kind="VARJAR" id="M2_REPO/io/jsonwebtoken/jjwt-impl/0.11.5/jjwt-impl-0.11.5.jar" enabled="true" runInBatchMode="false"/>
-    <factorypathentry kind="VARJAR" id="M2_REPO/io/jsonwebtoken/jjwt-jackson/0.11.5/jjwt-jackson-0.11.5.jar" enabled="true" runInBatchMode="false"/>
-    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.13.5/jackson-databind-2.13.5.jar" enabled="true" runInBatchMode="false"/>
-    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.13.5/jackson-annotations-2.13.5.jar" enabled="true" runInBatchMode="false"/>
-    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.13.5/jackson-core-2.13.5.jar" enabled="true" runInBatchMode="false"/>
-    <factorypathentry kind="VARJAR" id="M2_REPO/com/squareup/okhttp3/okhttp/3.14.9/okhttp-3.14.9.jar" enabled="true" runInBatchMode="false"/>
-    <factorypathentry kind="VARJAR" id="M2_REPO/com/squareup/okio/okio/1.17.2/okio-1.17.2.jar" enabled="true" runInBatchMode="false"/>
-    <factorypathentry kind="VARJAR" id="M2_REPO/com/alibaba/fastjson2/fastjson2/2.0.40/fastjson2-2.0.40.jar" enabled="true" runInBatchMode="false"/>
-    <factorypathentry kind="VARJAR" id="M2_REPO/org/projectlombok/lombok/1.18.30/lombok-1.18.30.jar" enabled="true" runInBatchMode="false"/>
-    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.12.0/commons-lang3-3.12.0.jar" enabled="true" runInBatchMode="false"/>
-    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-validation/2.7.18/spring-boot-starter-validation-2.7.18.jar" enabled="true" runInBatchMode="false"/>
-    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/tomcat/embed/tomcat-embed-el/9.0.83/tomcat-embed-el-9.0.83.jar" enabled="true" runInBatchMode="false"/>
-    <factorypathentry kind="VARJAR" id="M2_REPO/org/hibernate/validator/hibernate-validator/6.2.5.Final/hibernate-validator-6.2.5.Final.jar" enabled="true" runInBatchMode="false"/>
-    <factorypathentry kind="VARJAR" id="M2_REPO/jakarta/validation/jakarta.validation-api/2.0.2/jakarta.validation-api-2.0.2.jar" enabled="true" runInBatchMode="false"/>
-    <factorypathentry kind="VARJAR" id="M2_REPO/org/jboss/logging/jboss-logging/3.4.3.Final/jboss-logging-3.4.3.Final.jar" enabled="true" runInBatchMode="false"/>
-    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/classmate/1.5.1/classmate-1.5.1.jar" enabled="true" runInBatchMode="false"/>
-    <factorypathentry kind="VARJAR" id="M2_REPO/org/springdoc/springdoc-openapi-ui/1.8.0/springdoc-openapi-ui-1.8.0.jar" enabled="true" runInBatchMode="false"/>
-    <factorypathentry kind="VARJAR" id="M2_REPO/org/springdoc/springdoc-openapi-webmvc-core/1.8.0/springdoc-openapi-webmvc-core-1.8.0.jar" enabled="true" runInBatchMode="false"/>
-    <factorypathentry kind="VARJAR" id="M2_REPO/org/springdoc/springdoc-openapi-common/1.8.0/springdoc-openapi-common-1.8.0.jar" enabled="true" runInBatchMode="false"/>
-    <factorypathentry kind="VARJAR" id="M2_REPO/io/swagger/core/v3/swagger-core/2.2.20/swagger-core-2.2.20.jar" enabled="true" runInBatchMode="false"/>
-    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/dataformat/jackson-dataformat-yaml/2.13.5/jackson-dataformat-yaml-2.13.5.jar" enabled="true" runInBatchMode="false"/>
-    <factorypathentry kind="VARJAR" id="M2_REPO/io/swagger/core/v3/swagger-annotations/2.2.20/swagger-annotations-2.2.20.jar" enabled="true" runInBatchMode="false"/>
-    <factorypathentry kind="VARJAR" id="M2_REPO/io/swagger/core/v3/swagger-models/2.2.20/swagger-models-2.2.20.jar" enabled="true" runInBatchMode="false"/>
-    <factorypathentry kind="VARJAR" id="M2_REPO/org/webjars/swagger-ui/5.11.8/swagger-ui-5.11.8.jar" enabled="true" runInBatchMode="false"/>
-    <factorypathentry kind="VARJAR" id="M2_REPO/jakarta/xml/bind/jakarta.xml.bind-api/2.3.3/jakarta.xml.bind-api-2.3.3.jar" enabled="true" runInBatchMode="false"/>
-    <factorypathentry kind="VARJAR" id="M2_REPO/jakarta/activation/jakarta.activation-api/1.2.2/jakarta.activation-api-1.2.2.jar" enabled="true" runInBatchMode="false"/>
-    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-core/5.3.31/spring-core-5.3.31.jar" enabled="true" runInBatchMode="false"/>
-    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-jcl/5.3.31/spring-jcl-5.3.31.jar" enabled="true" runInBatchMode="false"/>
-</factorypath>

+ 0 - 34
dan/danshop/.project

@@ -1,34 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>danshop</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.m2e.core.maven2Builder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-		<nature>org.eclipse.m2e.core.maven2Nature</nature>
-	</natures>
-	<filteredResources>
-		<filter>
-			<id>1781272892739</id>
-			<name></name>
-			<type>30</type>
-			<matcher>
-				<id>org.eclipse.core.resources.regexFilterMatcher</id>
-				<arguments>node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__</arguments>
-			</matcher>
-		</filter>
-	</filteredResources>
-</projectDescription>

+ 0 - 4
dan/danshop/.settings/org.eclipse.core.resources.prefs

@@ -1,4 +0,0 @@
-eclipse.preferences.version=1
-encoding//src/main/java=UTF-8
-encoding//src/main/resources=UTF-8
-encoding/<project>=UTF-8

+ 0 - 4
dan/danshop/.settings/org.eclipse.jdt.apt.core.prefs

@@ -1,4 +0,0 @@
-eclipse.preferences.version=1
-org.eclipse.jdt.apt.aptEnabled=true
-org.eclipse.jdt.apt.genSrcDir=target/generated-sources/annotations
-org.eclipse.jdt.apt.genTestSrcDir=target/generated-test-sources/test-annotations

+ 0 - 10
dan/danshop/.settings/org.eclipse.jdt.core.prefs

@@ -1,10 +0,0 @@
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.methodParameters=generate
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
-org.eclipse.jdt.core.compiler.compliance=1.8
-org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
-org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
-org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore
-org.eclipse.jdt.core.compiler.processAnnotations=enabled
-org.eclipse.jdt.core.compiler.release=disabled
-org.eclipse.jdt.core.compiler.source=1.8

+ 0 - 4
dan/danshop/.settings/org.eclipse.m2e.core.prefs

@@ -1,4 +0,0 @@
-activeProfiles=
-eclipse.preferences.version=1
-resolveWorkspaceProjects=true
-version=1

+ 0 - 142
dan/danshop/pom.xml

@@ -1,142 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         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.springframework.boot</groupId>
-        <artifactId>spring-boot-starter-parent</artifactId>
-        <version>2.7.18</version>
-        <relativePath/>
-    </parent>
-
-    <groupId>com.etotem</groupId>
-    <artifactId>danshop</artifactId>
-    <version>1.0.0</version>
-    <packaging>jar</packaging>
-    <name>DanShop</name>
-    <description>浠艾福电商模块 - DanShop E-commerce Module</description>
-
-    <properties>
-        <java.version>1.8</java.version>
-        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-        <mybatis-plus.version>3.5.3.1</mybatis-plus.version>
-        <fastjson2.version>2.0.40</fastjson2.version>
-    </properties>
-
-    <dependencies>
-        <!-- Spring Boot Web -->
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-web</artifactId>
-        </dependency>
-
-        <!-- MyBatis-Plus -->
-        <dependency>
-            <groupId>com.baomidou</groupId>
-            <artifactId>mybatis-plus-boot-starter</artifactId>
-            <version>${mybatis-plus.version}</version>
-        </dependency>
-
-        <!-- MySQL -->
-        <dependency>
-            <groupId>mysql</groupId>
-            <artifactId>mysql-connector-java</artifactId>
-            <version>8.0.33</version>
-        </dependency>
-
-        <!-- Redis -->
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-data-redis</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.commons</groupId>
-            <artifactId>commons-pool2</artifactId>
-        </dependency>
-
-        <!-- JWT -->
-        <dependency>
-            <groupId>io.jsonwebtoken</groupId>
-            <artifactId>jjwt-api</artifactId>
-            <version>0.11.5</version>
-        </dependency>
-        <dependency>
-            <groupId>io.jsonwebtoken</groupId>
-            <artifactId>jjwt-impl</artifactId>
-            <version>0.11.5</version>
-            <scope>runtime</scope>
-        </dependency>
-        <dependency>
-            <groupId>io.jsonwebtoken</groupId>
-            <artifactId>jjwt-jackson</artifactId>
-            <version>0.11.5</version>
-            <scope>runtime</scope>
-        </dependency>
-
-        <!-- OkHttp for calling cfc-backend -->
-        <dependency>
-            <groupId>com.squareup.okhttp3</groupId>
-            <artifactId>okhttp</artifactId>
-            <version>3.14.9</version>
-        </dependency>
-
-        <!-- FastJSON2 -->
-        <dependency>
-            <groupId>com.alibaba.fastjson2</groupId>
-            <artifactId>fastjson2</artifactId>
-            <version>${fastjson2.version}</version>
-        </dependency>
-
-        <!-- Lombok -->
-        <dependency>
-            <groupId>org.projectlombok</groupId>
-            <artifactId>lombok</artifactId>
-            <optional>true</optional>
-        </dependency>
-
-        <!-- Commons Lang3 -->
-        <dependency>
-            <groupId>org.apache.commons</groupId>
-            <artifactId>commons-lang3</artifactId>
-        </dependency>
-
-        <!-- Validation -->
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-validation</artifactId>
-        </dependency>
-
-        <!-- SpringDoc OpenAPI -->
-        <dependency>
-            <groupId>org.springdoc</groupId>
-            <artifactId>springdoc-openapi-ui</artifactId>
-            <version>1.8.0</version>
-        </dependency>
-
-        <!-- Test -->
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-test</artifactId>
-            <scope>test</scope>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.springframework.boot</groupId>
-                <artifactId>spring-boot-maven-plugin</artifactId>
-                <configuration>
-                    <excludes>
-                        <exclude>
-                            <groupId>org.projectlombok</groupId>
-                            <artifactId>lombok</artifactId>
-                        </exclude>
-                    </excludes>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-</project>

+ 0 - 16
dan/danshop/src/main/java/com/etotem/danshop/DanShopApplication.java

@@ -1,16 +0,0 @@
-package com.etotem.danshop;
-
-import org.mybatis.spring.annotation.MapperScan;
-import org.springframework.boot.SpringApplication;
-import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.scheduling.annotation.EnableScheduling;
-
-@SpringBootApplication(scanBasePackages = "com.etotem.danshop")
-@MapperScan("com.etotem.danshop.mapper")
-@EnableScheduling
-public class DanShopApplication {
-
-    public static void main(String[] args) {
-        SpringApplication.run(DanShopApplication.class, args);
-    }
-}

+ 0 - 72
dan/danshop/src/main/java/com/etotem/danshop/common/DanShopConstants.java

@@ -1,72 +0,0 @@
-package com.etotem.danshop.common;
-
-/**
- * DanShop 常量
- */
-public class DanShopConstants {
-
-    // ========== 商品状态 ==========
-    public static final String PRODUCT_STATUS_PENDING = "pending";       // 待审核
-    public static final String PRODUCT_STATUS_APPROVED = "approved";     // 已通过
-    public static final String PRODUCT_STATUS_REJECTED = "rejected";      // 已拒绝
-    public static final String PRODUCT_STATUS_ON_SHELF = "on_shelf";       // 上架
-    public static final String PRODUCT_STATUS_OFF_SHELF = "off_shelf";    // 下架
-
-    // ========== 商品类型 ==========
-    public static final String PRODUCT_TYPE_PHYSICAL = "physical";       // 实物商品
-    public static final String PRODUCT_TYPE_VIRTUAL = "virtual";          // 虚拟商品
-    public static final String PRODUCT_TYPE_COUPON = "coupon";           // 优惠券
-    public static final String PRODUCT_TYPE_COURSE = "course";           // 课程
-
-    // ========== 订单状态 ==========
-    public static final String ORDER_STATUS_PENDING = "pending";           // 待支付
-    public static final String ORDER_STATUS_PAID = "paid";                 // 已支付(待发货)
-    public static final String ORDER_STATUS_SHIPPED = "shipped";           // 已发货(待收货)
-    public static final String ORDER_STATUS_COMPLETED = "completed";       // 已完成
-    public static final String ORDER_STATUS_REFUNDING = "refunding";       // 退款中
-    public static final String ORDER_STATUS_REFUNDED = "refunded";        // 已退款
-    public static final String ORDER_STATUS_CANCELLED = "cancelled";      // 已取消
-
-    // ========== 物流状态 ==========
-    public static final String LOGISTICS_STATUS_PENDING = "pending";       // 待发货
-    public static final String LOGISTICS_STATUS_SHIPPED = "shipped";       // 运输中
-    public static final String LOGISTICS_STATUS_SIGNING = "signing";      // 签收中
-    public static final String LOGISTICS_STATUS_COMPLETED = "completed";  // 已签收
-
-    // ========== 物流公司编码 ==========
-    public static final String LOGISTICS_SF = "sf";     // 顺丰
-    public static final String LOGISTICS_YTO = "yto"; // 圆通
-    public static final String LOGISTICS_ZT = "zt";    // 中通
-    public static final String LOGISTICS_STO = "sto";  // 申通
-    public static final String LOGISTICS_YD = "yd";    // 韵达
-    public static final String LOGISTICS_TTKD = "ttkd"; // 天天快递
-
-    // ========== 订单操作 ==========
-    public static final String ORDER_ACTION_CREATE = "create";
-    public static final String ORDER_ACTION_PAY = "pay";
-    public static final String ORDER_ACTION_SHIP = "ship";
-    public static final String ORDER_ACTION_CONFIRM = "confirm";
-    public static final String ORDER_ACTION_REFUND = "refund";
-    public static final String ORDER_ACTION_CANCEL = "cancel";
-
-    // ========== 操作者类型 ==========
-    public static final String OPERATOR_TYPE_BUYER = "buyer";
-    public static final String OPERATOR_TYPE_VENDOR = "vendor";
-    public static final String OPERATOR_TYPE_ADMIN = "admin";
-    public static final String OPERATOR_TYPE_SYSTEM = "system";
-
-    // ========== Redis Key 前缀 ==========
-    public static final String REDIS_CART_PREFIX = "danshop:cart:";
-
-    // ========== 分润规则类型 ==========
-    public static final String PROFIT_RULE_GLOBAL = "global";
-    public static final String PROFIT_RULE_CATEGORY = "product_category";
-    public static final String PROFIT_RULE_VENDOR = "vendor_level";
-
-    // ========== 支付方式 ==========
-    public static final String PAYMENT_METHOD_WECHAT = "wechat";
-    public static final String PAYMENT_METHOD_ALIPAY = "alipay";
-
-    // ========== 能量来源 ==========
-    public static final String ENERGY_SOURCE_PRODUCT = "danshop_product";
-}

+ 0 - 50
dan/danshop/src/main/java/com/etotem/danshop/common/Result.java

@@ -1,50 +0,0 @@
-package com.etotem.danshop.common;
-
-import lombok.Data;
-
-import java.io.Serializable;
-
-@Data
-public class Result<T> implements Serializable {
-
-    private Integer code;
-    private String message;
-    private T data;
-
-    public static <T> Result<T> success() {
-        Result<T> result = new Result<>();
-        result.setCode(200);
-        result.setMessage("success");
-        return result;
-    }
-
-    public static <T> Result<T> success(T data) {
-        Result<T> result = new Result<>();
-        result.setCode(200);
-        result.setMessage("success");
-        result.setData(data);
-        return result;
-    }
-
-    public static <T> Result<T> success(String message, T data) {
-        Result<T> result = new Result<>();
-        result.setCode(200);
-        result.setMessage(message);
-        result.setData(data);
-        return result;
-    }
-
-    public static <T> Result<T> error(String message) {
-        Result<T> result = new Result<>();
-        result.setCode(500);
-        result.setMessage(message);
-        return result;
-    }
-
-    public static <T> Result<T> error(Integer code, String message) {
-        Result<T> result = new Result<>();
-        result.setCode(code);
-        result.setMessage(message);
-        return result;
-    }
-}

+ 0 - 81
dan/danshop/src/main/java/com/etotem/danshop/config/CfcBackendClient.java

@@ -1,81 +0,0 @@
-package com.etotem.danshop.config;
-
-import com.alibaba.fastjson2.JSON;
-import com.alibaba.fastjson2.JSONObject;
-import okhttp3.MediaType;
-import okhttp3.OkHttpClient;
-import okhttp3.Request;
-import okhttp3.RequestBody;
-import okhttp3.Response;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.stereotype.Component;
-import java.io.IOException;
-
-@Component
-public class CfcBackendClient {
-
-    private static final MediaType JSON_TYPE = MediaType.parse("application/json; charset=utf-8");
-    private static final OkHttpClient CLIENT = new OkHttpClient();
-
-    @Value("${danshop.cfc-backend.url:http://localhost:8080}")
-    private String cfcUrl;
-
-    /**
-     * 验证 JWT token,获取用户信息
-     * @return 用户ID or null
-     */
-    public Long verifyToken(String token) {
-        if (token == null || token.isEmpty()) return null;
-        try {
-            Request request = new Request.Builder()
-                    .url(cfcUrl + "/api/auth/verify")
-                    .header("Authorization", "Bearer " + token)
-                    .get()
-                    .build();
-            try (Response response = CLIENT.newCall(request).execute()) {
-                if (!response.isSuccessful()) return null;
-                String body = response.body().string();
-                JSONObject json = JSONObject.parseObject(body);
-                if (json.getIntValue("code") == 200) {
-                    return json.getJSONObject("data").getLong("userId");
-                }
-            }
-        } catch (Exception ignored) {}
-        return null;
-    }
-
-    /**
-     * 发放能量值给用户
-     */
-    public void grantEnergy(Long userId, Integer amount, String reason) {
-        try {
-            JSONObject body = new JSONObject();
-            body.put("userId", userId);
-            body.put("amount", amount);
-            body.put("reason", reason);
-            Request request = new Request.Builder()
-                    .url(cfcUrl + "/api/energy/grant")
-                    .post(RequestBody.create(JSON_TYPE, body.toString()))
-                    .build();
-            CLIENT.newCall(request).execute();
-        } catch (IOException ignored) {}
-    }
-
-    /**
-     * 查询用户层级关系
-     */
-    public JSONObject getUserRelation(Long userId) {
-        try {
-            Request request = new Request.Builder()
-                    .url(cfcUrl + "/api/user/" + userId + "/relation")
-                    .get()
-                    .build();
-            try (Response response = CLIENT.newCall(request).execute()) {
-                if (!response.isSuccessful()) return null;
-                String body = response.body().string();
-                return JSONObject.parseObject(body);
-            }
-        } catch (Exception ignored) {}
-        return null;
-    }
-}

+ 0 - 93
dan/danshop/src/main/java/com/etotem/danshop/config/JwtAuthFilter.java

@@ -1,93 +0,0 @@
-package com.etotem.danshop.config;
-
-import com.fasterxml.jackson.databind.ObjectMapper;
-import org.springframework.stereotype.Component;
-import org.springframework.util.StringUtils;
-import org.springframework.web.filter.OncePerRequestFilter;
-
-import javax.annotation.Resource;
-import javax.servlet.FilterChain;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * JWT Token 验证过滤器
- * 
- * 从 Authorization header 提取 Bearer token,调用 cfc-backend /api/auth/verify 验证,
- * 验证通过后将 userId 设置到 request attribute 中,供 Controller 通过 @RequestAttribute 获取。
- * 
- * 公开路径(无需登录):
- *   - /api/shop/category/**
- *   - /api/shop/product/list
- *   - /api/shop/product/detail
- *   - /api/shop/logistics/**
- */
-@Component
-public class JwtAuthFilter extends OncePerRequestFilter {
-
-    @Resource
-    private CfcBackendClient cfcBackendClient;
-
-    private static final String[] PUBLIC_PATHS = {
-        "/api/shop/category/",
-        "/api/shop/product/list",
-        "/api/shop/product/detail",
-        "/api/shop/logistics/",
-    };
-
-    @Override
-    protected void doFilterInternal(HttpServletRequest request,
-                                     HttpServletResponse response,
-                                     FilterChain filterChain) throws ServletException, IOException {
-
-        // 放行 OPTIONS 请求(CORS 预检)
-        if ("OPTIONS".equalsIgnoreCase(request.getMethod())) {
-            filterChain.doFilter(request, response);
-            return;
-        }
-
-        String path = request.getRequestURI();
-
-        // 检查是否为公开路径
-        for (String publicPath : PUBLIC_PATHS) {
-            if (path.equals(publicPath) || path.startsWith(publicPath)) {
-                filterChain.doFilter(request, response);
-                return;
-            }
-        }
-
-        // 提取 Bearer token
-        String authHeader = request.getHeader("Authorization");
-        if (!StringUtils.hasText(authHeader) || !authHeader.startsWith("Bearer ")) {
-            writeUnauthorized(response, "缺少Token");
-            return;
-        }
-
-        String token = authHeader.substring(7);
-
-        // 调用 cfc-backend 验证 token
-        Long userId = cfcBackendClient.verifyToken(token);
-        if (userId == null) {
-            writeUnauthorized(response, "Token无效或已过期");
-            return;
-        }
-
-        // 设置 userId 到 request attribute,供 Controller 使用
-        request.setAttribute("userId", userId);
-
-        filterChain.doFilter(request, response);
-    }
-
-    private void writeUnauthorized(HttpServletResponse response, String message) throws IOException {
-        response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
-        response.setContentType("application/json;charset=UTF-8");
-        Map<String, Object> body = new HashMap<>();
-        body.put("code", 401);
-        body.put("message", message);
-        response.getWriter().write(new ObjectMapper().writeValueAsString(body));
-    }
-}

+ 0 - 18
dan/danshop/src/main/java/com/etotem/danshop/config/MybatisPlusConfig.java

@@ -1,18 +0,0 @@
-package com.etotem.danshop.config;
-
-import com.baomidou.mybatisplus.annotation.DbType;
-import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
-import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-
-@Configuration
-public class MybatisPlusConfig {
-
-    @Bean
-    public MybatisPlusInterceptor mybatisPlusInterceptor() {
-        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
-        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
-        return interceptor;
-    }
-}

+ 0 - 24
dan/danshop/src/main/java/com/etotem/danshop/config/RedisConfig.java

@@ -1,24 +0,0 @@
-package com.etotem.danshop.config;
-
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.data.redis.connection.RedisConnectionFactory;
-import org.springframework.data.redis.core.RedisTemplate;
-import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
-import org.springframework.data.redis.serializer.StringRedisSerializer;
-
-@Configuration
-public class RedisConfig {
-
-    @Bean
-    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
-        RedisTemplate<String, Object> template = new RedisTemplate<>();
-        template.setConnectionFactory(factory);
-        template.setKeySerializer(new StringRedisSerializer());
-        template.setValueSerializer(new GenericJackson2JsonRedisSerializer());
-        template.setHashKeySerializer(new StringRedisSerializer());
-        template.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
-        template.afterPropertiesSet();
-        return template;
-    }
-}

+ 0 - 35
dan/danshop/src/main/java/com/etotem/danshop/config/WebMvcConfig.java

@@ -1,35 +0,0 @@
-package com.etotem.danshop.config;
-
-import org.springframework.boot.web.servlet.FilterRegistrationBean;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.web.servlet.config.annotation.CorsRegistry;
-import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
-
-import javax.annotation.Resource;
-
-@Configuration
-public class WebMvcConfig implements WebMvcConfigurer {
-
-    @Resource
-    private JwtAuthFilter jwtAuthFilter;
-
-    @Override
-    public void addCorsMappings(CorsRegistry registry) {
-        registry.addMapping("/**")
-                .allowedOriginPatterns("*")
-                .allowedMethods("GET", "POST", "OPTIONS")
-                .allowedHeaders("*")
-                .allowCredentials(true)
-                .maxAge(3600);
-    }
-
-    @Bean
-    public FilterRegistrationBean<JwtAuthFilter> jwtAuthFilterRegistration() {
-        FilterRegistrationBean<JwtAuthFilter> registration = new FilterRegistrationBean<>();
-        registration.setFilter(jwtAuthFilter);
-        registration.addUrlPatterns("/api/shop/*", "/api/seller/*");
-        registration.setOrder(1);
-        return registration;
-    }
-}

+ 0 - 16
dan/danshop/src/main/java/com/etotem/danshop/config/WechatPayConfig.java

@@ -1,16 +0,0 @@
-package com.etotem.danshop.config;
-
-import org.springframework.boot.context.properties.ConfigurationProperties;
-import lombok.Data;
-
-@Data
-@ConfigurationProperties(prefix = "danshop.payment.wechat")
-public class WechatPayConfig {
-
-    private String appId;
-    private String mchId;
-    private String apiV3Key;
-    private String privateKeyPath;
-    private String notifyUrl;
-    private String refundNotifyUrl;
-}

+ 0 - 20
dan/danshop/src/main/java/com/etotem/danshop/controller/LogisticsController.java

@@ -1,20 +0,0 @@
-package com.etotem.danshop.controller;
-
-import com.etotem.danshop.common.Result;
-import com.etotem.danshop.service.LogisticsService;
-import org.springframework.web.bind.annotation.*;
-import javax.annotation.Resource;
-import java.util.Map;
-
-@RestController
-@RequestMapping("/api/shop/logistics")
-public class LogisticsController {
-
-    @Resource
-    private LogisticsService logisticsService;
-
-    @PostMapping("/query")
-    public Result<Map<String, Object>> query(@RequestParam Long orderId) {
-        return logisticsService.getLogistics(orderId);
-    }
-}

+ 0 - 49
dan/danshop/src/main/java/com/etotem/danshop/controller/PaymentController.java

@@ -1,49 +0,0 @@
-package com.etotem.danshop.controller;
-
-import com.alibaba.fastjson2.JSON;
-import com.alibaba.fastjson2.JSONObject;
-import com.etotem.danshop.common.Result;
-import com.etotem.danshop.service.OrderService;
-import com.etotem.danshop.service.PaymentService;
-import okhttp3.MediaType;
-import okhttp3.OkHttpClient;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
-import javax.annotation.Resource;
-
-@RestController
-@RequestMapping("/api/shop/payment")
-public class PaymentController {
-
-    private static final MediaType JSON_TYPE = MediaType.parse("application/json; charset=utf-8");
-    private static final OkHttpClient CLIENT = new OkHttpClient();
-
-    @Resource
-    private PaymentService paymentService;
-    @Resource
-    private OrderService orderService;
-
-    @Value("${danshop.payment.wechat.notify-url:}")
-    private String notifyUrl;
-
-    @PostMapping("/createOrder")
-    public Result<JSONObject> createOrder(@RequestParam Long userId,
-                                          @RequestParam String orderNo,
-                                          @RequestParam java.math.BigDecimal amount,
-                                          @RequestParam String openId) {
-        return paymentService.createWxPayOrder(userId, orderNo, amount, openId);
-    }
-
-    @PostMapping("/notify")
-    public String notify(@RequestBody String notifyData) {
-        Result<Void> result = paymentService.handleWxPayNotify(notifyData);
-        if (result.getCode() == 200) {
-            return "SUCCESS";
-        }
-        return "FAIL";
-    }
-}

+ 0 - 43
dan/danshop/src/main/java/com/etotem/danshop/controller/admin/AdminCategoryController.java

@@ -1,43 +0,0 @@
-package com.etotem.danshop.controller.admin;
-
-import com.etotem.danshop.common.Result;
-import com.etotem.danshop.entity.Category;
-import com.etotem.danshop.mapper.CategoryMapper;
-import org.springframework.web.bind.annotation.*;
-import javax.annotation.Resource;
-import java.util.List;
-
-@RestController
-@RequestMapping("/api/admin/shop/category")
-public class AdminCategoryController {
-
-    @Resource
-    private CategoryMapper categoryMapper;
-
-    @PostMapping("/list")
-    public Result<List<Category>> list() {
-        List<Category> list = categoryMapper.selectList(
-            new com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper<Category>()
-                .orderByAsc(Category::getSortOrder)
-        );
-        return Result.success(list);
-    }
-
-    @PostMapping("/create")
-    public Result<Void> create(@RequestBody Category category) {
-        categoryMapper.insert(category);
-        return Result.success(null);
-    }
-
-    @PostMapping("/update")
-    public Result<Void> update(@RequestBody Category category) {
-        categoryMapper.updateById(category);
-        return Result.success(null);
-    }
-
-    @PostMapping("/delete")
-    public Result<Void> delete(@RequestParam Long id) {
-        categoryMapper.deleteById(id);
-        return Result.success(null);
-    }
-}

+ 0 - 33
dan/danshop/src/main/java/com/etotem/danshop/controller/admin/AdminLogisticsController.java

@@ -1,33 +0,0 @@
-package com.etotem.danshop.controller.admin;
-
-import com.etotem.danshop.common.Result;
-import com.etotem.danshop.entity.Logistics;
-import com.etotem.danshop.mapper.LogisticsMapper;
-import org.springframework.web.bind.annotation.*;
-import javax.annotation.Resource;
-import java.util.List;
-
-@RestController
-@RequestMapping("/api/admin/shop/logistics")
-public class AdminLogisticsController {
-
-    @Resource
-    private LogisticsMapper logisticsMapper;
-
-    @PostMapping("/list")
-    public Result<List<Logistics>> list() {
-        return Result.success(logisticsMapper.selectList(
-            new com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper<Logistics>()
-                .orderByDesc(Logistics::getCreatedAt)
-        ));
-    }
-
-    @PostMapping("/update")
-    public Result<Void> update(@RequestParam Long id, @RequestParam String status) {
-        Logistics l = logisticsMapper.selectById(id);
-        if (l == null) return Result.error("物流不存在");
-        l.setStatus(status);
-        logisticsMapper.updateById(l);
-        return Result.success(null);
-    }
-}

+ 0 - 47
dan/danshop/src/main/java/com/etotem/danshop/controller/admin/AdminOrderController.java

@@ -1,47 +0,0 @@
-package com.etotem.danshop.controller.admin;
-
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.etotem.danshop.common.Result;
-import com.etotem.danshop.entity.Order;
-import com.etotem.danshop.entity.ProfitLog;
-import com.etotem.danshop.mapper.OrderMapper;
-import com.etotem.danshop.mapper.ProfitLogMapper;
-import com.etotem.danshop.service.ProfitService;
-import org.springframework.web.bind.annotation.*;
-import javax.annotation.Resource;
-import java.util.List;
-
-@RestController
-@RequestMapping("/api/admin/shop/order")
-public class AdminOrderController {
-
-    @Resource
-    private OrderMapper orderMapper;
-    @Resource
-    private ProfitLogMapper profitLogMapper;
-    @Resource
-    private ProfitService profitService;
-
-    @PostMapping("/list")
-    public Result<Page<Order>> list(@RequestParam(required = false) Integer status,
-                                    @RequestParam(defaultValue = "1") Integer page,
-                                    @RequestParam(defaultValue = "20") Integer pageSize) {
-        com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper<Order> q =
-            new com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper<>();
-        if (status != null) q.eq(Order::getStatusInt, status);
-        q.orderByDesc(Order::getCreatedAt);
-        Page<Order> p = orderMapper.selectPage(new Page<>(page, pageSize), q);
-        return Result.success(p);
-    }
-
-    @PostMapping("/profitLogs")
-    public Result<List<ProfitLog>> profitLogs(@RequestParam(required = false) Long vendorId) {
-        if (vendorId != null) {
-            return profitService.listByVendor(vendorId);
-        }
-        return Result.success(profitLogMapper.selectList(
-            new com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper<ProfitLog>()
-                .orderByDesc(ProfitLog::getCreatedAt)
-        ));
-    }
-}

+ 0 - 54
dan/danshop/src/main/java/com/etotem/danshop/controller/admin/AdminProductController.java

@@ -1,54 +0,0 @@
-package com.etotem.danshop.controller.admin;
-
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.etotem.danshop.common.Result;
-import com.etotem.danshop.entity.Product;
-import com.etotem.danshop.mapper.ProductMapper;
-import org.springframework.web.bind.annotation.*;
-import javax.annotation.Resource;
-
-@RestController
-@RequestMapping("/api/admin/shop/product")
-public class AdminProductController {
-
-    @Resource
-    private ProductMapper productMapper;
-
-    @PostMapping("/list")
-    public Result<Page<Product>> list(@RequestParam(required = false) String status,
-                                      @RequestParam(defaultValue = "1") Integer page,
-                                      @RequestParam(defaultValue = "20") Integer pageSize) {
-        com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper<Product> q =
-            new com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper<>();
-        if (status != null && !status.isEmpty()) q.eq(Product::getStatus, status);
-        q.orderByDesc(Product::getCreatedAt);
-        Page<Product> p = productMapper.selectPage(new Page<>(page, pageSize), q);
-        return Result.success(p);
-    }
-
-    @PostMapping("/review")
-    public Result<Void> review(@RequestParam Long id,
-                               @RequestParam String action,
-                               @RequestParam(required = false) String reason) {
-        Product p = productMapper.selectById(id);
-        if (p == null) return Result.error("商品不存在");
-        if ("approve".equals(action)) {
-            p.setStatus("1"); // 上架
-        } else if ("reject".equals(action)) {
-            p.setStatus("2"); // 下架
-            p.setRejectReason(reason);
-        }
-        productMapper.updateById(p);
-        return Result.success(null);
-    }
-
-    @PostMapping("/setProfitRule")
-    public Result<Void> setProfitRule(@RequestParam Long id,
-                                      @RequestParam java.math.BigDecimal profitRate) {
-        Product p = productMapper.selectById(id);
-        if (p == null) return Result.error("商品不存在");
-        p.setProfitRate(profitRate);
-        productMapper.updateById(p);
-        return Result.success(null);
-    }
-}

+ 0 - 53
dan/danshop/src/main/java/com/etotem/danshop/controller/admin/AdminProfitRuleController.java

@@ -1,53 +0,0 @@
-package com.etotem.danshop.controller.admin;
-
-import com.etotem.danshop.common.Result;
-import com.etotem.danshop.entity.ProfitRule;
-import com.etotem.danshop.mapper.ProfitRuleMapper;
-import org.springframework.web.bind.annotation.*;
-import javax.annotation.Resource;
-import java.math.BigDecimal;
-import java.util.List;
-
-@RestController
-@RequestMapping("/api/admin/shop/profitRule")
-public class AdminProfitRuleController {
-
-    @Resource
-    private ProfitRuleMapper profitRuleMapper;
-
-    @PostMapping("/list")
-    public Result<List<ProfitRule>> list() {
-        return Result.success(profitRuleMapper.selectList(
-            new com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper<ProfitRule>()
-                .orderByAsc(ProfitRule::getRuleType)
-        ));
-    }
-
-    @PostMapping("/create")
-    public Result<Void> create(@RequestBody ProfitRule rule) {
-        rule.setIsActive(1);
-        profitRuleMapper.insert(rule);
-        return Result.success(null);
-    }
-
-    @PostMapping("/update")
-    public Result<Void> update(@RequestBody ProfitRule rule) {
-        profitRuleMapper.updateById(rule);
-        return Result.success(null);
-    }
-
-    @PostMapping("/delete")
-    public Result<Void> delete(@RequestParam Long id) {
-        profitRuleMapper.deleteById(id);
-        return Result.success(null);
-    }
-
-    @PostMapping("/toggle")
-    public Result<Void> toggle(@RequestParam Long id, @RequestParam Integer isActive) {
-        ProfitRule r = profitRuleMapper.selectById(id);
-        if (r == null) return Result.error("规则不存在");
-        r.setIsActive(isActive);
-        profitRuleMapper.updateById(r);
-        return Result.success(null);
-    }
-}

+ 0 - 46
dan/danshop/src/main/java/com/etotem/danshop/controller/buyer/AddressController.java

@@ -1,46 +0,0 @@
-package com.etotem.danshop.controller.buyer;
-
-import com.etotem.danshop.common.Result;
-import com.etotem.danshop.dto.AddressDTO;
-import com.etotem.danshop.service.AddressService;
-import org.springframework.web.bind.annotation.*;
-import javax.annotation.Resource;
-import java.util.List;
-
-@RestController
-@RequestMapping("/api/shop/address")
-public class AddressController {
-
-    @Resource
-    private AddressService addressService;
-
-    @PostMapping("/list")
-    public Result<List<AddressDTO>> list(@RequestAttribute Long userId) {
-        return addressService.listByUser(userId);
-    }
-
-    @PostMapping("/get")
-    public Result<AddressDTO> get(@RequestParam Long id) {
-        return addressService.getById(id);
-    }
-
-    @PostMapping("/create")
-    public Result<Void> create(@RequestAttribute Long userId, @RequestBody AddressDTO dto) {
-        return addressService.create(userId, dto);
-    }
-
-    @PostMapping("/update")
-    public Result<Void> update(@RequestParam Long id, @RequestBody AddressDTO dto) {
-        return addressService.update(id, dto);
-    }
-
-    @PostMapping("/delete")
-    public Result<Void> delete(@RequestParam Long id) {
-        return addressService.delete(id);
-    }
-
-    @PostMapping("/setDefault")
-    public Result<Void> setDefault(@RequestAttribute Long userId, @RequestParam Long addressId) {
-        return addressService.setDefault(userId, addressId);
-    }
-}

+ 0 - 42
dan/danshop/src/main/java/com/etotem/danshop/controller/buyer/CartController.java

@@ -1,42 +0,0 @@
-package com.etotem.danshop.controller.buyer;
-
-import com.etotem.danshop.common.Result;
-import com.etotem.danshop.service.CartService;
-import org.springframework.web.bind.annotation.*;
-import javax.annotation.Resource;
-
-@RestController
-@RequestMapping("/api/shop/cart")
-public class CartController {
-
-    @Resource
-    private CartService cartService;
-
-    @PostMapping("/list")
-    public Result<?> list(@RequestAttribute Long userId) {
-        return cartService.getCart(userId);
-    }
-
-    @PostMapping("/add")
-    public Result<?> add(@RequestAttribute Long userId,
-                         @RequestParam Long productId,
-                         @RequestParam(defaultValue = "1") Integer quantity) {
-        return cartService.addItem(userId, productId, quantity);
-    }
-
-    @PostMapping("/remove")
-    public Result<?> remove(@RequestAttribute Long userId,
-                           @RequestParam Long productId) {
-        return cartService.removeItem(userId, productId);
-    }
-
-    @PostMapping("/clear")
-    public Result<?> clear(@RequestAttribute Long userId) {
-        return cartService.clearCart(userId);
-    }
-
-    @PostMapping("/total")
-    public Result<?> total(@RequestAttribute Long userId) {
-        return cartService.calculateTotal(userId);
-    }
-}

+ 0 - 24
dan/danshop/src/main/java/com/etotem/danshop/controller/buyer/CategoryController.java

@@ -1,24 +0,0 @@
-package com.etotem.danshop.controller.buyer;
-
-import com.etotem.danshop.common.Result;
-import com.etotem.danshop.service.CategoryService;
-import org.springframework.web.bind.annotation.*;
-import javax.annotation.Resource;
-
-@RestController
-@RequestMapping("/api/shop/category")
-public class CategoryController {
-
-    @Resource
-    private CategoryService categoryService;
-
-    @PostMapping("/list")
-    public Result<?> list() {
-        return categoryService.listEnabled();
-    }
-
-    @PostMapping("/listAll")
-    public Result<?> listAll() {
-        return categoryService.listAll();
-    }
-}

+ 0 - 59
dan/danshop/src/main/java/com/etotem/danshop/controller/buyer/OrderController.java

@@ -1,59 +0,0 @@
-package com.etotem.danshop.controller.buyer;
-
-import com.etotem.danshop.common.Result;
-import com.etotem.danshop.dto.OrderCreateDTO;
-import com.etotem.danshop.dto.OrderDTO;
-import com.etotem.danshop.service.OrderService;
-import com.etotem.danshop.service.PaymentService;
-import org.springframework.web.bind.annotation.*;
-import javax.annotation.Resource;
-import java.util.List;
-import java.util.Map;
-
-@RestController
-@RequestMapping("/api/shop/order")
-public class OrderController {
-
-    @Resource
-    private OrderService orderService;
-    @Resource
-    private PaymentService paymentService;
-
-    @PostMapping("/create")
-    public Result<OrderDTO> create(@RequestAttribute Long userId, @RequestBody OrderCreateDTO dto) {
-        return orderService.create(userId, dto);
-    }
-
-    @PostMapping("/list")
-    public Result<List<OrderDTO>> list(@RequestAttribute Long userId,
-                                       @RequestParam(required = false) Integer status) {
-        return orderService.listByBuyer(userId, status);
-    }
-
-    @PostMapping("/detail")
-    public Result<OrderDTO> detail(@RequestParam String orderNo) {
-        return orderService.getByOrderNo(orderNo);
-    }
-
-    @PostMapping("/pay")
-    public Result<?> pay(@RequestAttribute Long userId,
-                        @RequestParam String orderNo,
-                        @RequestParam String openId) {
-        // 先查订单金额
-        Result<OrderDTO> orderResult = orderService.getByOrderNo(orderNo);
-        if (orderResult.getData() == null) return Result.error("订单不存在");
-        return paymentService.createWxPayOrder(userId, orderNo,
-            orderResult.getData().getTotalAmount(), openId);
-    }
-
-    @PostMapping("/confirmReceive")
-    public Result<Void> confirmReceive(@RequestAttribute Long userId, @RequestParam Long orderId) {
-        return orderService.confirmReceive(orderId);
-    }
-
-    @PostMapping("/cancel")
-    public Result<Void> cancel(@RequestAttribute Long userId, @RequestParam String orderNo) {
-        // TODO: 实现取消
-        return Result.success(null);
-    }
-}

+ 0 - 40
dan/danshop/src/main/java/com/etotem/danshop/controller/buyer/ProductController.java

@@ -1,40 +0,0 @@
-package com.etotem.danshop.controller.buyer;
-
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.etotem.danshop.common.Result;
-import com.etotem.danshop.entity.Product;
-import com.etotem.danshop.mapper.ProductMapper;
-import com.etotem.danshop.service.ProductService;
-import org.springframework.web.bind.annotation.*;
-import javax.annotation.Resource;
-
-@RestController
-@RequestMapping("/api/shop/product")
-public class ProductController {
-
-    @Resource
-    private ProductService productService;
-    @Resource
-    private ProductMapper productMapper;
-
-    @PostMapping("/list")
-    public Result<?> list(
-            @RequestParam(required = false) Long categoryId,
-            @RequestParam(defaultValue = "1") Integer page,
-            @RequestParam(defaultValue = "20") Integer pageSize) {
-        return productService.listByCategory(categoryId, page, pageSize);
-    }
-
-    @PostMapping("/detail")
-    public Result<?> detail(@RequestParam Long id) {
-        return productService.getDetail(id);
-    }
-
-    @PostMapping("/search")
-    public Result<?> search(
-            @RequestParam(required = false) String keyword,
-            @RequestParam(defaultValue = "1") Integer page,
-            @RequestParam(defaultValue = "20") Integer pageSize) {
-        return productService.search(keyword, page, pageSize);
-    }
-}

+ 0 - 44
dan/danshop/src/main/java/com/etotem/danshop/controller/seller/SellerOrderController.java

@@ -1,44 +0,0 @@
-package com.etotem.danshop.controller.seller;
-
-import com.etotem.danshop.common.Result;
-import com.etotem.danshop.entity.Order;
-import com.etotem.danshop.mapper.OrderMapper;
-import com.etotem.danshop.service.OrderService;
-import com.etotem.danshop.service.LogisticsService;
-import org.springframework.web.bind.annotation.*;
-import javax.annotation.Resource;
-import java.util.List;
-
-@RestController
-@RequestMapping("/api/seller/order")
-public class SellerOrderController {
-
-    @Resource
-    private OrderMapper orderMapper;
-    @Resource
-    private OrderService orderService;
-    @Resource
-    private LogisticsService logisticsService;
-
-    @PostMapping("/list")
-    public Result<List<Order>> list(@RequestAttribute Long sellerId,
-                                     @RequestParam(required = false) Integer status) {
-        com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper<Order> q =
-            new com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper<>();
-        if (status != null) q.eq(Order::getStatusInt, status);
-        q.orderByDesc(Order::getCreatedAt);
-        return Result.success(orderMapper.selectList(q));
-    }
-
-    @PostMapping("/ship")
-    public Result<Void> ship(@RequestParam Long orderId,
-                             @RequestParam String company,
-                             @RequestParam String companyName,
-                             @RequestParam String trackingNo) {
-        Result<Void> r = orderService.ship(orderId, company, trackingNo);
-        if (r.getCode() == 200) {
-            logisticsService.createLogistics(orderId, company, companyName, trackingNo);
-        }
-        return r;
-    }
-}

+ 0 - 51
dan/danshop/src/main/java/com/etotem/danshop/controller/seller/SellerProductController.java

@@ -1,51 +0,0 @@
-package com.etotem.danshop.controller.seller;
-
-import com.etotem.danshop.common.Result;
-import com.etotem.danshop.entity.Product;
-import com.etotem.danshop.mapper.ProductMapper;
-import org.springframework.web.bind.annotation.*;
-import javax.annotation.Resource;
-import java.math.BigDecimal;
-import java.util.List;
-
-@RestController
-@RequestMapping("/api/seller/product")
-public class SellerProductController {
-
-    @Resource
-    private ProductMapper productMapper;
-
-    @PostMapping("/list")
-    public Result<List<Product>> list(@RequestAttribute Long sellerId,
-                                      @RequestParam(defaultValue = "1") Integer page,
-                                      @RequestParam(defaultValue = "20") Integer pageSize) {
-        com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper<Product> q =
-            new com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper<>();
-        q.eq(Product::getVendorId, sellerId)
-         .orderByDesc(com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper::getCreatedAt);
-        com.baomidou.mybatisplus.extension.plugins.pagination.Page<Product> p =
-            productMapper.selectPage(new com.baomidou.mybatisplus.extension.plugins.pagination.Page<>(page, pageSize), q);
-        return Result.success(p.getRecords());
-    }
-
-    @PostMapping("/create")
-    public Result<Void> create(@RequestAttribute Long sellerId, @RequestBody Product product) {
-        product.setVendorId(sellerId);
-        product.setStatus("pending");
-        productMapper.insert(product);
-        return Result.success(null);
-    }
-
-    @PostMapping("/update")
-    public Result<Void> update(@RequestParam Long id, @RequestBody Product product) {
-        product.setId(id);
-        productMapper.updateById(product);
-        return Result.success(null);
-    }
-
-    @PostMapping("/delete")
-    public Result<Void> delete(@RequestParam Long id) {
-        productMapper.deleteById(id);
-        return Result.success(null);
-    }
-}

+ 0 - 41
dan/danshop/src/main/java/com/etotem/danshop/controller/seller/SellerProfitController.java

@@ -1,41 +0,0 @@
-package com.etotem.danshop.controller.seller;
-
-import com.etotem.danshop.common.Result;
-import com.etotem.danshop.entity.ProfitLog;
-import com.etotem.danshop.service.ProfitService;
-import com.etotem.danshop.service.ProfitSettlementService;
-import org.springframework.web.bind.annotation.*;
-import javax.annotation.Resource;
-import java.util.List;
-import java.util.Map;
-
-@RestController
-@RequestMapping("/api/shop/seller/profit")
-public class SellerProfitController {
-
-    @Resource
-    private ProfitService profitService;
-    @Resource
-    private ProfitSettlementService profitSettlementService;
-
-    @PostMapping("/logs")
-    public Result<List<ProfitLog>> listLogs(
-            @RequestAttribute("userId") Long userId,
-            @RequestBody(required = false) Map<String, Object> params) {
-        int page = params != null && params.get("page") != null ? ((Number) params.get("page")).intValue() : 1;
-        int size = params != null && params.get("size") != null ? ((Number) params.get("size")).intValue() : 20;
-        return profitService.listByVendor(userId, page, size);
-    }
-
-    @PostMapping("/summary")
-    public Result<Map<String, Object>> getSummary(@RequestAttribute("userId") Long userId) {
-        return Result.success(profitSettlementService.getProfitSummary(userId));
-    }
-
-    @PostMapping("/settle")
-    public Result<Void> settleOrder(@RequestBody Map<String, Object> params) {
-        Long orderId = ((Number) params.get("orderId")).longValue();
-        profitSettlementService.settleOrder(orderId);
-        return Result.success(null);
-    }
-}

+ 0 - 20
dan/danshop/src/main/java/com/etotem/danshop/dto/AddressDTO.java

@@ -1,20 +0,0 @@
-package com.etotem.danshop.dto;
-
-import lombok.Data;
-import java.io.Serializable;
-import java.math.BigDecimal;
-
-@Data
-public class AddressDTO implements Serializable {
-    private Long id;
-    private Long userId;
-    private String receiverName;
-    private String phone;
-    private String province;
-    private String city;
-    private String district;
-    private String street;
-    private String detail;
-    private Integer isDefault;
-    private String fullAddress;
-}

+ 0 - 17
dan/danshop/src/main/java/com/etotem/danshop/dto/CartItemDTO.java

@@ -1,17 +0,0 @@
-package com.etotem.danshop.dto;
-
-import lombok.Data;
-import java.io.Serializable;
-import java.math.BigDecimal;
-
-@Data
-public class CartItemDTO implements Serializable {
-    private Long id;
-    private Long productId;
-    private String productName;
-    private String coverImage;
-    private BigDecimal price;
-    private Integer quantity;
-    private Long skuId;
-    private String skuName;
-}

+ 0 - 13
dan/danshop/src/main/java/com/etotem/danshop/dto/CategoryDTO.java

@@ -1,13 +0,0 @@
-package com.etotem.danshop.dto;
-
-import lombok.Data;
-import java.io.Serializable;
-
-@Data
-public class CategoryDTO implements Serializable {
-    private Long id;
-    private String name;
-    private String icon;
-    private Integer sort;
-    private Integer productCount;
-}

+ 0 - 16
dan/danshop/src/main/java/com/etotem/danshop/dto/LogisticsDTO.java

@@ -1,16 +0,0 @@
-package com.etotem.danshop.dto;
-
-import lombok.Data;
-import java.io.Serializable;
-
-@Data
-public class LogisticsDTO implements Serializable {
-    private Long id;
-    private Long orderId;
-    private String company;
-    private String trackingNo;
-    private Integer status;
-    private String statusName;
-    private String currentInfo;
-    private String updatedAt;
-}

+ 0 - 20
dan/danshop/src/main/java/com/etotem/danshop/dto/OrderCreateDTO.java

@@ -1,20 +0,0 @@
-package com.etotem.danshop.dto;
-
-import lombok.Data;
-import java.io.Serializable;
-import java.util.List;
-
-@Data
-public class OrderCreateDTO implements Serializable {
-    private List<CartItem> items;
-    private Long addressId;
-    private String remark;
-    private Integer paymentMethod;
-
-    @Data
-    public static class CartItem {
-        private Long productId;
-        private Long skuId;
-        private Integer quantity;
-    }
-}

+ 0 - 26
dan/danshop/src/main/java/com/etotem/danshop/dto/OrderDTO.java

@@ -1,26 +0,0 @@
-package com.etotem.danshop.dto;
-
-import lombok.Data;
-import java.io.Serializable;
-import java.math.BigDecimal;
-import java.util.List;
-
-@Data
-public class OrderDTO implements Serializable {
-    private Long id;
-    private String orderNo;
-    private Long buyerId;
-    private BigDecimal totalAmount;
-    private BigDecimal freight;
-    private BigDecimal profitAmount;
-    private Integer status;
-    private String statusName;
-    private Integer paymentMethod;
-    private String paymentTime;
-    private String remark;
-    private String receiverName;
-    private String receiverPhone;
-    private String receiverAddress;
-    private List<OrderItemDTO> items;
-    private String createdAt;
-}

+ 0 - 17
dan/danshop/src/main/java/com/etotem/danshop/dto/OrderItemDTO.java

@@ -1,17 +0,0 @@
-package com.etotem.danshop.dto;
-
-import lombok.Data;
-import java.io.Serializable;
-import java.math.BigDecimal;
-
-@Data
-public class OrderItemDTO implements Serializable {
-    private Long id;
-    private Long orderId;
-    private Long productId;
-    private String productName;
-    private String coverImage;
-    private BigDecimal price;
-    private Integer quantity;
-    private BigDecimal subtotal;
-}

+ 0 - 14
dan/danshop/src/main/java/com/etotem/danshop/dto/PayNotifyDTO.java

@@ -1,14 +0,0 @@
-package com.etotem.danshop.dto;
-
-import lombok.Data;
-import java.io.Serializable;
-import java.math.BigDecimal;
-
-@Data
-public class PayNotifyDTO implements Serializable {
-    private String orderNo;
-    private String transactionId;
-    private String tradeState;
-    private BigDecimal totalFee;
-    private String successTime;
-}

+ 0 - 26
dan/danshop/src/main/java/com/etotem/danshop/dto/ProductDTO.java

@@ -1,26 +0,0 @@
-package com.etotem.danshop.dto;
-
-import lombok.Data;
-import java.io.Serializable;
-import java.math.BigDecimal;
-import java.util.List;
-
-@Data
-public class ProductDTO implements Serializable {
-    private Long id;
-    private Long categoryId;
-    private String name;
-    private String subtitle;
-    private String coverImage;
-    private List<String> images;
-    private BigDecimal price;
-    private BigDecimal originalPrice;
-    private Integer stock;
-    private String unit;
-    private String description;
-    private String status;
-    private Long sellerId;
-    private String sellerName;
-    private Boolean hasProfit;
-    private Integer salesCount;
-}

+ 0 - 15
dan/danshop/src/main/java/com/etotem/danshop/dto/ProductQueryDTO.java

@@ -1,15 +0,0 @@
-package com.etotem.danshop.dto;
-
-import lombok.Data;
-import java.io.Serializable;
-
-@Data
-public class ProductQueryDTO implements Serializable {
-    private Long categoryId;
-    private String keyword;
-    /** pending/approved/rejected/shelved */
-    private String status;
-    private Long vendorId;
-    private Integer page = 1;
-    private Integer pageSize = 20;
-}

+ 0 - 15
dan/danshop/src/main/java/com/etotem/danshop/dto/ProfitRuleDTO.java

@@ -1,15 +0,0 @@
-package com.etotem.danshop.dto;
-
-import lombok.Data;
-import java.io.Serializable;
-import java.math.BigDecimal;
-
-@Data
-public class ProfitRuleDTO implements Serializable {
-    private Long id;
-    private Integer level;
-    private String levelName;
-    private BigDecimal ratio;
-    private String description;
-    private Boolean enabled;
-}

+ 0 - 40
dan/danshop/src/main/java/com/etotem/danshop/entity/Address.java

@@ -1,40 +0,0 @@
-package com.etotem.danshop.entity;
-
-import com.baomidou.mybatisplus.annotation.*;
-import lombok.Data;
-import java.io.Serializable;
-import java.util.Date;
-
-@Data
-@TableName("danshop_addresses")
-public class Address implements Serializable {
-
-    @TableId(type = IdType.AUTO)
-    private Long id;
-
-    private Long userId;
-
-    private String receiverName;
-
-    private String phone;
-
-    private String province;
-
-    private String city;
-
-    private String district;
-
-    private String street;
-
-    private Integer isDefault;
-
-    @TableField(fill = FieldFill.INSERT)
-    private Date createdAt;
-
-    @TableField(fill = FieldFill.INSERT_UPDATE)
-    private Date updatedAt;
-
-    // === 非数据库字段 ===
-    @TableField(exist = false)
-    private String fullAddress;  // 省份+城市+区县+街道
-}

+ 0 - 41
dan/danshop/src/main/java/com/etotem/danshop/entity/Category.java

@@ -1,41 +0,0 @@
-package com.etotem.danshop.entity;
-
-import com.baomidou.mybatisplus.annotation.*;
-import lombok.Data;
-import java.io.Serializable;
-import java.util.Date;
-import java.util.List;
-
-@Data
-@TableName("danshop_categories")
-public class Category implements Serializable {
-
-    @TableId(type = IdType.AUTO)
-    private Long id;
-
-    private Long parentId;
-
-    private String name;
-
-    private String image;
-
-    private Integer sortOrder;
-
-    private Long energyDimensionId;
-
-    private Integer status;
-
-    @TableField(fill = FieldFill.INSERT)
-    private Date createdAt;
-
-    @TableField(fill = FieldFill.INSERT_UPDATE)
-    private Date updatedAt;
-
-    // 非数据库字段:子分类列表(用于树结构)
-    @TableField(exist = false)
-    private List<Category> children;
-
-    // 非数据库字段:分类名称(用于关联查询显示)
-    @TableField(exist = false)
-    private String dimensionName;
-}

+ 0 - 21
dan/danshop/src/main/java/com/etotem/danshop/entity/Favorite.java

@@ -1,21 +0,0 @@
-package com.etotem.danshop.entity;
-
-import com.baomidou.mybatisplus.annotation.*;
-import lombok.Data;
-import java.io.Serializable;
-import java.util.Date;
-
-@Data
-@TableName("danshop_favorites")
-public class Favorite implements Serializable {
-
-    @TableId(type = IdType.AUTO)
-    private Long id;
-
-    private Long userId;
-
-    private Long productId;
-
-    @TableField(fill = FieldFill.INSERT)
-    private Date createdAt;
-}

+ 0 - 50
dan/danshop/src/main/java/com/etotem/danshop/entity/Logistics.java

@@ -1,50 +0,0 @@
-package com.etotem.danshop.entity;
-
-import com.baomidou.mybatisplus.annotation.*;
-import lombok.Data;
-import java.io.Serializable;
-import java.util.Date;
-
-@Data
-@TableName("danshop_logistics")
-public class Logistics implements Serializable {
-
-    @TableId(type = IdType.AUTO)
-    private Long id;
-
-    private Long orderId;
-
-    private Long orderItemId;
-
-    private String logisticsNo;
-
-    private String logisticsCompany;
-
-    private String logisticsName;
-
-    private String senderName;
-
-    private String senderPhone;
-
-    private String senderAddress;
-
-    private String receiverName;
-
-    private String receiverPhone;
-
-    private String receiverAddress;
-
-    private String status;
-
-    private String trackingData;
-
-    private Date shippedAt;
-
-    private Date signedAt;
-
-    @TableField(fill = FieldFill.INSERT)
-    private Date createdAt;
-
-    @TableField(fill = FieldFill.INSERT_UPDATE)
-    private Date updatedAt;
-}

+ 0 - 72
dan/danshop/src/main/java/com/etotem/danshop/entity/Order.java

@@ -1,72 +0,0 @@
-package com.etotem.danshop.entity;
-
-import com.baomidou.mybatisplus.annotation.*;
-import lombok.Data;
-import java.io.Serializable;
-import java.math.BigDecimal;
-import java.util.Date;
-import java.util.List;
-
-@Data
-@TableName("danshop_orders")
-public class Order implements Serializable {
-
-    @TableId(type = IdType.AUTO)
-    private Long id;
-
-    private String orderNo;
-
-    private Long buyerId;
-
-    private Long familyId;
-
-    private BigDecimal totalAmount;
-
-    private BigDecimal discountAmount;
-
-    private BigDecimal actualAmount;
-
-    private BigDecimal freight;
-
-    private String status;
-
-    private Integer statusInt;
-
-    private String paymentMethod;
-
-    private String transactionId;
-
-    private Date paidAt;
-
-    private Date shippedAt;
-
-    private Date completedAt;
-
-    private String remark;
-
-    private String cancelReason;
-
-    private String receiverName;
-
-    private String receiverPhone;
-
-    private String receiverAddress;
-
-    private BigDecimal profitAmount;
-
-    @TableField(fill = FieldFill.INSERT)
-    private Date createdAt;
-
-    @TableField(fill = FieldFill.INSERT_UPDATE)
-    private Date updatedAt;
-
-    // === 非数据库字段 ===
-    @TableField(exist = false)
-    private String buyerName;
-
-    @TableField(exist = false)
-    private List<OrderItem> items;
-
-    @TableField(exist = false)
-    private Logistics logistics;
-}

+ 0 - 40
dan/danshop/src/main/java/com/etotem/danshop/entity/OrderItem.java

@@ -1,40 +0,0 @@
-package com.etotem.danshop.entity;
-
-import com.baomidou.mybatisplus.annotation.*;
-import lombok.Data;
-import java.io.Serializable;
-import java.math.BigDecimal;
-import java.util.Date;
-
-@Data
-@TableName("danshop_order_items")
-public class OrderItem implements Serializable {
-
-    @TableId(type = IdType.AUTO)
-    private Long id;
-
-    private Long orderId;
-
-    private Long productId;
-
-    private String productName;
-
-    private String coverImage;
-
-    private BigDecimal price;
-
-    private BigDecimal unitPrice;
-
-    private Integer quantity;
-
-    private BigDecimal subtotal;
-
-    private String productType;
-
-    private Long vendorId;
-
-    private String vendorName;
-
-    @TableField(fill = FieldFill.INSERT)
-    private Date createdAt;
-}

+ 0 - 27
dan/danshop/src/main/java/com/etotem/danshop/entity/OrderLog.java

@@ -1,27 +0,0 @@
-package com.etotem.danshop.entity;
-
-import com.baomidou.mybatisplus.annotation.*;
-import lombok.Data;
-import java.io.Serializable;
-import java.util.Date;
-
-@Data
-@TableName("danshop_order_logs")
-public class OrderLog implements Serializable {
-
-    @TableId(type = IdType.AUTO)
-    private Long id;
-
-    private Long orderId;
-
-    private String action;
-
-    private Long operatorId;
-
-    private String operatorType;
-
-    private String detail;
-
-    @TableField(fill = FieldFill.INSERT)
-    private Date createdAt;
-}

+ 0 - 72
dan/danshop/src/main/java/com/etotem/danshop/entity/Product.java

@@ -1,72 +0,0 @@
-package com.etotem.danshop.entity;
-
-import com.baomidou.mybatisplus.annotation.*;
-import lombok.Data;
-import java.io.Serializable;
-import java.math.BigDecimal;
-import java.util.Date;
-
-@Data
-@TableName("danshop_products")
-public class Product implements Serializable {
-
-    @TableId(type = IdType.AUTO)
-    private Long id;
-
-    private Long categoryId;
-
-    private String name;
-
-    private String description;
-
-    private String coverImage;
-
-    private String images;
-
-    private BigDecimal price;
-
-    private BigDecimal memberPrice;
-
-    private BigDecimal costPrice;
-
-    private Integer stock;
-
-    private Integer salesCount;
-
-    private String productType;
-
-    private Long vendorId;
-
-    private String vendorName;
-
-    private String status;
-
-    private String rejectReason;
-
-    private BigDecimal profitRate;
-
-    private String externalSource;
-
-    private String externalId;
-
-    private String externalData;
-
-    @TableField(fill = FieldFill.INSERT)
-    private Date createdAt;
-
-    @TableField(fill = FieldFill.INSERT_UPDATE)
-    private Date updatedAt;
-
-    // === 非数据库字段 ===
-    @TableField(exist = false)
-    private String categoryName;
-
-    @TableField(exist = false)
-    private Long energyDimensionId;
-
-    @TableField(exist = false)
-    private String dimensionName;
-
-    @TableField(exist = false)
-    private Boolean canBuy;  // 是否可购买(库存>0且已上架)
-}

+ 0 - 38
dan/danshop/src/main/java/com/etotem/danshop/entity/ProfitLog.java

@@ -1,38 +0,0 @@
-package com.etotem.danshop.entity;
-
-import com.baomidou.mybatisplus.annotation.*;
-import lombok.Data;
-import java.io.Serializable;
-import java.math.BigDecimal;
-import java.util.Date;
-
-@Data
-@TableName("danshop_profit_logs")
-public class ProfitLog implements Serializable {
-
-    @TableId(type = IdType.AUTO)
-    private Long id;
-
-    private Long orderId;
-
-    private String orderNo;
-
-    private BigDecimal orderAmount;
-
-    private BigDecimal costAmount;
-
-    private BigDecimal profitAmount;
-
-    private BigDecimal platformRetained;
-
-    private BigDecimal vendorIncome;
-
-    private BigDecimal commissionL1;
-
-    private BigDecimal commissionL2;
-
-    private Long ruleId;
-
-    @TableField(fill = FieldFill.INSERT)
-    private Date createdAt;
-}

+ 0 - 37
dan/danshop/src/main/java/com/etotem/danshop/entity/ProfitRule.java

@@ -1,37 +0,0 @@
-package com.etotem.danshop.entity;
-
-import com.baomidou.mybatisplus.annotation.*;
-import lombok.Data;
-import java.io.Serializable;
-import java.math.BigDecimal;
-import java.util.Date;
-
-@Data
-@TableName("danshop_profit_rules")
-public class ProfitRule implements Serializable {
-
-    @TableId(type = IdType.AUTO)
-    private Long id;
-
-    private String ruleName;
-
-    private String ruleType;
-
-    private Long targetId;
-
-    private BigDecimal platformProfitRate;
-
-    private BigDecimal referrerL1Rate;
-
-    private BigDecimal referrerL2Rate;
-
-    private BigDecimal platformServiceRate;
-
-    private Integer isActive;
-
-    @TableField(fill = FieldFill.INSERT)
-    private Date createdAt;
-
-    @TableField(fill = FieldFill.INSERT_UPDATE)
-    private Date updatedAt;
-}

+ 0 - 9
dan/danshop/src/main/java/com/etotem/danshop/mapper/AddressMapper.java

@@ -1,9 +0,0 @@
-package com.etotem.danshop.mapper;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.etotem.danshop.entity.Address;
-import org.apache.ibatis.annotations.Mapper;
-
-@Mapper
-public interface AddressMapper extends BaseMapper<Address> {
-}

+ 0 - 9
dan/danshop/src/main/java/com/etotem/danshop/mapper/CategoryMapper.java

@@ -1,9 +0,0 @@
-package com.etotem.danshop.mapper;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.etotem.danshop.entity.Category;
-import org.apache.ibatis.annotations.Mapper;
-
-@Mapper
-public interface CategoryMapper extends BaseMapper<Category> {
-}

+ 0 - 9
dan/danshop/src/main/java/com/etotem/danshop/mapper/FavoriteMapper.java

@@ -1,9 +0,0 @@
-package com.etotem.danshop.mapper;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.etotem.danshop.entity.Favorite;
-import org.apache.ibatis.annotations.Mapper;
-
-@Mapper
-public interface FavoriteMapper extends BaseMapper<Favorite> {
-}

+ 0 - 9
dan/danshop/src/main/java/com/etotem/danshop/mapper/LogisticsMapper.java

@@ -1,9 +0,0 @@
-package com.etotem.danshop.mapper;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.etotem.danshop.entity.Logistics;
-import org.apache.ibatis.annotations.Mapper;
-
-@Mapper
-public interface LogisticsMapper extends BaseMapper<Logistics> {
-}

+ 0 - 9
dan/danshop/src/main/java/com/etotem/danshop/mapper/OrderItemMapper.java

@@ -1,9 +0,0 @@
-package com.etotem.danshop.mapper;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.etotem.danshop.entity.OrderItem;
-import org.apache.ibatis.annotations.Mapper;
-
-@Mapper
-public interface OrderItemMapper extends BaseMapper<OrderItem> {
-}

+ 0 - 9
dan/danshop/src/main/java/com/etotem/danshop/mapper/OrderLogMapper.java

@@ -1,9 +0,0 @@
-package com.etotem.danshop.mapper;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.etotem.danshop.entity.OrderLog;
-import org.apache.ibatis.annotations.Mapper;
-
-@Mapper
-public interface OrderLogMapper extends BaseMapper<OrderLog> {
-}

+ 0 - 9
dan/danshop/src/main/java/com/etotem/danshop/mapper/OrderMapper.java

@@ -1,9 +0,0 @@
-package com.etotem.danshop.mapper;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.etotem.danshop.entity.Order;
-import org.apache.ibatis.annotations.Mapper;
-
-@Mapper
-public interface OrderMapper extends BaseMapper<Order> {
-}

+ 0 - 9
dan/danshop/src/main/java/com/etotem/danshop/mapper/ProductMapper.java

@@ -1,9 +0,0 @@
-package com.etotem.danshop.mapper;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.etotem.danshop.entity.Product;
-import org.apache.ibatis.annotations.Mapper;
-
-@Mapper
-public interface ProductMapper extends BaseMapper<Product> {
-}

+ 0 - 9
dan/danshop/src/main/java/com/etotem/danshop/mapper/ProfitLogMapper.java

@@ -1,9 +0,0 @@
-package com.etotem.danshop.mapper;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.etotem.danshop.entity.ProfitLog;
-import org.apache.ibatis.annotations.Mapper;
-
-@Mapper
-public interface ProfitLogMapper extends BaseMapper<ProfitLog> {
-}

+ 0 - 9
dan/danshop/src/main/java/com/etotem/danshop/mapper/ProfitRuleMapper.java

@@ -1,9 +0,0 @@
-package com.etotem.danshop.mapper;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.etotem.danshop.entity.ProfitRule;
-import org.apache.ibatis.annotations.Mapper;
-
-@Mapper
-public interface ProfitRuleMapper extends BaseMapper<ProfitRule> {
-}

+ 0 - 107
dan/danshop/src/main/java/com/etotem/danshop/service/AddressService.java

@@ -1,107 +0,0 @@
-package com.etotem.danshop.service;
-
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.etotem.danshop.common.Result;
-import com.etotem.danshop.dto.AddressDTO;
-import com.etotem.danshop.entity.Address;
-import com.etotem.danshop.mapper.AddressMapper;
-import org.springframework.stereotype.Service;
-import javax.annotation.Resource;
-import java.util.List;
-import java.util.stream.Collectors;
-
-@Service
-public class AddressService {
-
-    @Resource
-    private AddressMapper addressMapper;
-
-    public Result<List<AddressDTO>> listByUser(Long userId) {
-        LambdaQueryWrapper<Address> q = new LambdaQueryWrapper<>();
-        q.eq(Address::getUserId, userId).orderByDesc(Address::getIsDefault);
-        List<Address> list = addressMapper.selectList(q);
-        List<AddressDTO> result = list.stream().map(this::toDTO).collect(Collectors.toList());
-        return Result.success(result);
-    }
-
-    public Result<AddressDTO> getById(Long id) {
-        Address a = addressMapper.selectById(id);
-        if (a == null) return Result.error("地址不存在");
-        return Result.success(toDTO(a));
-    }
-
-    public Result<Void> create(Long userId, AddressDTO dto) {
-        Address a = new Address();
-        a.setUserId(userId);
-        a.setReceiverName(dto.getReceiverName());
-        a.setPhone(dto.getPhone());
-        a.setProvince(dto.getProvince());
-        a.setCity(dto.getCity());
-        a.setDistrict(dto.getDistrict());
-        a.setStreet(dto.getStreet());
-        a.setIsDefault(dto.getIsDefault() != null ? dto.getIsDefault() : 0);
-        if (a.getIsDefault() == 1) {
-            clearDefault(userId);
-        }
-        addressMapper.insert(a);
-        return Result.success(null);
-    }
-
-    public Result<Void> update(Long id, AddressDTO dto) {
-        Address a = addressMapper.selectById(id);
-        if (a == null) return Result.error("地址不存在");
-        a.setReceiverName(dto.getReceiverName());
-        a.setPhone(dto.getPhone());
-        a.setProvince(dto.getProvince());
-        a.setCity(dto.getCity());
-        a.setDistrict(dto.getDistrict());
-        a.setStreet(dto.getStreet());
-        if (dto.getIsDefault() != null && dto.getIsDefault() == 1) {
-            clearDefault(a.getUserId());
-        }
-        a.setIsDefault(dto.getIsDefault() != null ? dto.getIsDefault() : a.getIsDefault());
-        addressMapper.updateById(a);
-        return Result.success(null);
-    }
-
-    public Result<Void> delete(Long id) {
-        addressMapper.deleteById(id);
-        return Result.success(null);
-    }
-
-    public Result<Void> setDefault(Long userId, Long addressId) {
-        clearDefault(userId);
-        Address a = addressMapper.selectById(addressId);
-        if (a != null) {
-            a.setIsDefault(1);
-            addressMapper.updateById(a);
-        }
-        return Result.success(null);
-    }
-
-    private void clearDefault(Long userId) {
-        List<Address> list = addressMapper.selectList(
-            new LambdaQueryWrapper<Address>().eq(Address::getUserId, userId).eq(Address::getIsDefault, 1)
-        );
-        for (Address a : list) {
-            a.setIsDefault(0);
-            addressMapper.updateById(a);
-        }
-    }
-
-    private AddressDTO toDTO(Address a) {
-        AddressDTO dto = new AddressDTO();
-        dto.setId(a.getId());
-        dto.setUserId(a.getUserId());
-        dto.setReceiverName(a.getReceiverName());
-        dto.setPhone(a.getPhone());
-        dto.setProvince(a.getProvince());
-        dto.setCity(a.getCity());
-        dto.setDistrict(a.getDistrict());
-        dto.setStreet(a.getStreet());
-        dto.setIsDefault(a.getIsDefault());
-        dto.setFullAddress(a.getProvince() + a.getCity() + a.getDistrict() + a.getStreet());
-        return dto;
-    }
-}

+ 0 - 89
dan/danshop/src/main/java/com/etotem/danshop/service/CartService.java

@@ -1,89 +0,0 @@
-package com.etotem.danshop.service;
-
-import com.alibaba.fastjson2.JSON;
-import com.alibaba.fastjson2.JSONObject;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.etotem.danshop.common.Result;
-import com.etotem.danshop.entity.Product;
-import com.etotem.danshop.mapper.ProductMapper;
-import org.springframework.data.redis.core.StringRedisTemplate;
-import org.springframework.stereotype.Service;
-import javax.annotation.Resource;
-import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.Set;
-import java.util.stream.Collectors;
-
-@Service
-public class CartService {
-
-    private static final String CART_KEY_PREFIX = "danshop:cart:";
-
-    @Resource
-    private StringRedisTemplate redisTemplate;
-    @Resource
-    private ProductMapper productMapper;
-
-    public Result<ArrayList<JSONObject>> getCart(Long userId) {
-        String key = CART_KEY_PREFIX + userId;
-        Set<String> members = redisTemplate.opsForZSet().range(key, 0, -1);
-        ArrayList<JSONObject> items = new ArrayList<>();
-        if (members != null) {
-            for (String m : members) {
-                items.add(JSON.parseObject(m));
-            }
-        }
-        return Result.success(items);
-    }
-
-    public Result<Void> addItem(Long userId, Long productId, Integer quantity) {
-        Product product = productMapper.selectById(productId);
-        if (product == null) return Result.error("商品不存在");
-
-        JSONObject item = new JSONObject();
-        item.put("productId", productId);
-        item.put("quantity", quantity);
-        item.put("price", product.getPrice());
-        item.put("name", product.getName());
-        item.put("coverImage", product.getCoverImage());
-
-        String key = CART_KEY_PREFIX + userId;
-        redisTemplate.opsForZSet().add(key, item.toJSONString(), System.currentTimeMillis());
-        return Result.success(null);
-    }
-
-    public Result<Void> removeItem(Long userId, Long productId) {
-        String key = CART_KEY_PREFIX + userId;
-        Set<String> members = redisTemplate.opsForZSet().range(key, 0, -1);
-        if (members != null) {
-            for (String m : members) {
-                JSONObject item = JSON.parseObject(m);
-                if (item.getLong("productId").equals(productId)) {
-                    redisTemplate.opsForZSet().remove(key, m);
-                    break;
-                }
-            }
-        }
-        return Result.success(null);
-    }
-
-    public Result<Void> clearCart(Long userId) {
-        redisTemplate.delete(CART_KEY_PREFIX + userId);
-        return Result.success(null);
-    }
-
-    public Result<BigDecimal> calculateTotal(Long userId) {
-        String key = CART_KEY_PREFIX + userId;
-        Set<String> members = redisTemplate.opsForZSet().range(key, 0, -1);
-        BigDecimal total = BigDecimal.ZERO;
-        if (members != null) {
-            for (String m : members) {
-                JSONObject item = JSON.parseObject(m);
-                BigDecimal price = item.getBigDecimal("price");
-                Integer qty = item.getInteger("quantity");
-                total = total.add(price.multiply(new BigDecimal(qty)));
-            }
-        }
-        return Result.success(total);
-    }
-}

+ 0 - 58
dan/danshop/src/main/java/com/etotem/danshop/service/CategoryService.java

@@ -1,58 +0,0 @@
-package com.etotem.danshop.service;
-
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.etotem.danshop.common.Result;
-import com.etotem.danshop.dto.CategoryDTO;
-import com.etotem.danshop.entity.Category;
-import com.etotem.danshop.mapper.CategoryMapper;
-import com.etotem.danshop.mapper.ProductMapper;
-import org.springframework.stereotype.Service;
-import javax.annotation.Resource;
-import java.util.List;
-import java.util.stream.Collectors;
-
-@Service
-public class CategoryService {
-
-    @Resource
-    private CategoryMapper categoryMapper;
-    @Resource
-    private ProductMapper productMapper;
-
-    public Result<List<CategoryDTO>> listEnabled() {
-        LambdaQueryWrapper<Category> q = new LambdaQueryWrapper<>();
-        q.eq(Category::getStatus, 1).orderByAsc(Category::getSort);
-        List<Category> list = categoryMapper.selectList(q);
-        List<CategoryDTO> result = list.stream().map(c -> {
-            CategoryDTO dto = new CategoryDTO();
-            dto.setId(c.getId());
-            dto.setName(c.getName());
-            dto.setIcon(c.getIcon());
-            dto.setSort(c.getSort());
-            dto.setProductCount(
-                productMapper.selectCount(
-                    new LambdaQueryWrapper<com.etotem.danshop.entity.Product>()
-                        .eq(com.etotem.danshop.entity.Product::getCategoryId, c.getId())
-                        .eq(com.etotem.danshop.entity.Product::getStatus, 1)
-                ).intValue()
-            );
-            return dto;
-        }).collect(Collectors.toList());
-        return Result.success(result);
-    }
-
-    public Result<List<CategoryDTO>> listAll() {
-        LambdaQueryWrapper<Category> q = new LambdaQueryWrapper<>();
-        q.orderByAsc(Category::getSort);
-        List<Category> list = categoryMapper.selectList(q);
-        List<CategoryDTO> result = list.stream().map(c -> {
-            CategoryDTO dto = new CategoryDTO();
-            dto.setId(c.getId());
-            dto.setName(c.getName());
-            dto.setIcon(c.getIcon());
-            dto.setSort(c.getSort());
-            return dto;
-        }).collect(Collectors.toList());
-        return Result.success(result);
-    }
-}

+ 0 - 65
dan/danshop/src/main/java/com/etotem/danshop/service/LogisticsService.java

@@ -1,65 +0,0 @@
-package com.etotem.danshop.service;
-
-import com.etotem.danshop.common.Result;
-import com.etotem.danshop.entity.Logistics;
-import com.etotem.danshop.mapper.LogisticsMapper;
-import com.etotem.danshop.util.LogisticsUtil;
-import org.springframework.stereotype.Service;
-import javax.annotation.Resource;
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.Map;
-
-@Service
-public class LogisticsService {
-
-    @Resource
-    private LogisticsMapper logisticsMapper;
-    @Resource
-    private LogisticsUtil logisticsUtil;
-
-    public Result<Map<String, Object>> getLogistics(Long orderId) {
-        Logistics l = logisticsMapper.selectOne(
-            new com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper<Logistics>()
-                .eq(Logistics::getOrderId, orderId)
-        );
-        if (l == null) return Result.error("物流信息不存在");
-
-        Map<String, Object> result = new HashMap<>();
-        result.put("id", l.getId());
-        result.put("orderId", l.getOrderId());
-        result.put("company", l.getLogisticsCompany());
-        result.put("companyName", l.getLogisticsName());
-        result.put("trackingNo", l.getLogisticsNo());
-        result.put("status", l.getStatus());
-        result.put("shippedAt", l.getShippedAt() != null ? l.getShippedAt().toString() : null);
-
-        // 查询最新轨迹
-        try {
-            String trace = logisticsUtil.query(l.getLogisticsCompany(), l.getLogisticsNo());
-            result.put("traces", trace);
-        } catch (IOException e) {
-            result.put("traces", "物流信息查询中...");
-        }
-        return Result.success(result);
-    }
-
-    public Result<Void> createLogistics(Long orderId, String company, String companyName, String trackingNo) {
-        Logistics l = new Logistics();
-        l.setOrderId(orderId);
-        l.setLogisticsCompany(company);
-        l.setLogisticsName(companyName);
-        l.setLogisticsNo(trackingNo);
-        l.setStatus("shipped");
-        logisticsMapper.insert(l);
-        return Result.success(null);
-    }
-
-    public Result<Void> updateStatus(Long logisticsId, String status) {
-        Logistics l = logisticsMapper.selectById(logisticsId);
-        if (l == null) return Result.error("物流不存在");
-        l.setStatus(status);
-        logisticsMapper.updateById(l);
-        return Result.success(null);
-    }
-}

+ 0 - 240
dan/danshop/src/main/java/com/etotem/danshop/service/OrderService.java

@@ -1,240 +0,0 @@
-package com.etotem.danshop.service;
-
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.etotem.danshop.common.Result;
-import com.etotem.danshop.config.CfcBackendClient;
-import com.etotem.danshop.config.WechatPayConfig;
-import com.etotem.danshop.dto.OrderCreateDTO;
-import com.etotem.danshop.dto.OrderDTO;
-import com.etotem.danshop.dto.OrderItemDTO;
-import com.etotem.danshop.entity.*;
-import com.etotem.danshop.mapper.*;
-import com.etotem.danshop.util.OrderNoGenerator;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import okhttp3.*;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-import javax.annotation.Resource;
-import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.stream.Collectors;
-
-@Service
-public class OrderService {
-
-    @Resource private OrderMapper orderMapper;
-    @Resource private OrderItemMapper orderItemMapper;
-    @Resource private OrderLogMapper orderLogMapper;
-    @Resource private ProductMapper productMapper;
-    @Resource private AddressMapper addressMapper;
-    @Resource private OrderNoGenerator orderNoGenerator;
-    @Resource private CfcBackendClient cfcBackendClient;
-    @Resource private ProfitService profitService;
-    @Value("${danshop.payment.wechat.app-id:}") private String appId;
-    @Value("${danshop.payment.wechat.mch-id:}") private String mchId;
-
-    @Transactional
-    public Result<OrderDTO> create(Long buyerId, OrderCreateDTO dto) {
-        if (dto.getItems() == null || dto.getItems().isEmpty()) {
-            return Result.error("订单项不能为空");
-        }
-
-        String orderNo = orderNoGenerator.generate();
-        BigDecimal totalAmount = BigDecimal.ZERO;
-
-        Order order = new Order();
-        order.setOrderNo(orderNo);
-        order.setBuyerId(buyerId);
-        order.setStatus(0); // 待支付
-        order.setRemark(dto.getRemark());
-        order.setPaymentMethod(dto.getPaymentMethod() != null ? dto.getPaymentMethod() : 1);
-
-        if (dto.getAddressId() != null) {
-            Address addr = addressMapper.selectById(dto.getAddressId());
-            if (addr != null) {
-                order.setReceiverName(addr.getReceiverName());
-                order.setReceiverPhone(addr.getPhone());
-                order.setReceiverAddress(addr.getProvince() + addr.getCity() + addr.getDistrict() + addr.getDetail());
-            }
-        }
-
-        orderMapper.insert(order);
-
-        List<OrderItem> orderItems = new ArrayList<>();
-        for (OrderCreateDTO.CartItem ci : dto.getItems()) {
-            Product product = productMapper.selectById(ci.getProductId());
-            if (product == null) continue;
-
-            BigDecimal subtotal = product.getPrice().multiply(new BigDecimal(ci.getQuantity()));
-            totalAmount = totalAmount.add(subtotal);
-
-            OrderItem item = new OrderItem();
-            item.setOrderId(order.getId());
-            item.setProductId(product.getId());
-            item.setProductName(product.getName());
-            item.setCoverImage(product.getCoverImage());
-            item.setPrice(product.getPrice());
-            item.setQuantity(ci.getQuantity());
-            orderItemMapper.insert(item);
-            orderItems.add(item);
-        }
-
-        order.setTotalAmount(totalAmount);
-        order.setFreight(BigDecimal.ZERO);
-        orderMapper.updateById(order);
-
-        OrderLog log = new OrderLog();
-        log.setOrderId(order.getId());
-        log.setAction("create");
-        log.setOperator("buyer:" + buyerId);
-        log.setRemark("订单创建");
-        orderLogMapper.insert(log);
-
-        return Result.success(toDTO(order, orderItems));
-    }
-
-    public Result<OrderDTO> getByOrderNo(String orderNo) {
-        LambdaQueryWrapper<Order> q = new LambdaQueryWrapper<>();
-        q.eq(Order::getOrderNo, orderNo);
-        Order order = orderMapper.selectOne(q);
-        if (order == null) return Result.error("订单不存在");
-
-        List<OrderItem> items = orderItemMapper.selectList(
-            new LambdaQueryWrapper<OrderItem>().eq(OrderItem::getOrderId, order.getId())
-        );
-        return Result.success(toDTO(order, items));
-    }
-
-    public Result<List<OrderDTO>> listByBuyer(Long buyerId, Integer status) {
-        LambdaQueryWrapper<Order> q = new LambdaQueryWrapper<>();
-        q.eq(Order::getBuyerId, buyerId);
-        if (status != null) q.eq(Order::getStatus, status);
-        q.orderByDesc(Order::getCreatedAt);
-        List<Order> orders = orderMapper.selectList(q);
-
-        List<OrderDTO> result = orders.stream().map(o -> {
-            List<OrderItem> items = orderItemMapper.selectList(
-                new LambdaQueryWrapper<OrderItem>().eq(OrderItem::getOrderId, o.getId())
-            );
-            return toDTO(o, items);
-        }).collect(Collectors.toList());
-        return Result.success(result);
-    }
-
-    @Transactional
-    public Result<Void> paySuccess(String orderNo, String transactionId) {
-        LambdaQueryWrapper<Order> q = new LambdaQueryWrapper<>();
-        q.eq(Order::getOrderNo, orderNo);
-        Order order = orderMapper.selectOne(q);
-        if (order == null) return Result.error("订单不存在");
-
-        order.setStatus(1); // 待发货
-        order.setPaymentTime(java.time.LocalDateTime.now().toString());
-        order.setTransactionId(transactionId);
-        orderMapper.updateById(order);
-
-        // 发放能量
-        cfcBackendClient.grantEnergy(order.getBuyerId(), 10, "购物奖励");
-
-        // 生成分润
-        profitService.distributeProfit(order);
-
-        OrderLog log = new OrderLog();
-        log.setOrderId(order.getId());
-        log.setAction("pay");
-        log.setOperator("system");
-        log.setRemark("支付成功");
-        orderLogMapper.insert(log);
-
-        return Result.success(null);
-    }
-
-    @Transactional
-    public Result<Void> ship(Long orderId, String company, String trackingNo) {
-        Order order = orderMapper.selectById(orderId);
-        if (order == null) return Result.error("订单不存在");
-        if (order.getStatus() != 1) return Result.error("订单状态不允许发货");
-
-        order.setStatus(2); // 待收货
-        order.setFreight(new BigDecimal("10.00")); // TODO: 实际运费
-        orderMapper.updateById(order);
-
-        OrderLog log = new OrderLog();
-        log.setOrderId(orderId);
-        log.setAction("ship");
-        log.setOperator("seller");
-        log.setRemark("发货成功,物流单号:" + trackingNo);
-        orderLogMapper.insert(log);
-
-        return Result.success(null);
-    }
-
-    @Transactional
-    public Result<Void> confirmReceive(Long orderId) {
-        Order order = orderMapper.selectById(orderId);
-        if (order == null) return Result.error("订单不存在");
-        if (order.getStatus() != 2) return Result.error("订单状态不允许确认收货");
-
-        order.setStatus(3); // 已完成
-        orderMapper.updateById(order);
-
-        OrderLog log = new OrderLog();
-        log.setOrderId(orderId);
-        log.setAction("receive");
-        log.setOperator("buyer");
-        log.setRemark("确认收货");
-        orderLogMapper.insert(log);
-
-        return Result.success(null);
-    }
-
-    private OrderDTO toDTO(Order o, List<OrderItem> items) {
-        OrderDTO dto = new OrderDTO();
-        dto.setId(o.getId());
-        dto.setOrderNo(o.getOrderNo());
-        dto.setBuyerId(o.getBuyerId());
-        dto.setTotalAmount(o.getTotalAmount());
-        dto.setFreight(o.getFreight());
-        dto.setProfitAmount(o.getProfitAmount());
-        dto.setStatus(o.getStatus());
-        dto.setStatusName(getStatusName(o.getStatus()));
-        dto.setPaymentMethod(o.getPaymentMethod());
-        dto.setPaymentTime(o.getPaymentTime());
-        dto.setRemark(o.getRemark());
-        dto.setReceiverName(o.getReceiverName());
-        dto.setReceiverPhone(o.getReceiverPhone());
-        dto.setReceiverAddress(o.getReceiverAddress());
-        dto.setCreatedAt(o.getCreatedAt() != null ? o.getCreatedAt().toString() : null);
-
-        List<OrderItemDTO> itemDTOs = items.stream().map(i -> {
-            OrderItemDTO idto = new OrderItemDTO();
-            idto.setId(i.getId());
-            idto.setOrderId(i.getOrderId());
-            idto.setProductId(i.getProductId());
-            idto.setProductName(i.getProductName());
-            idto.setCoverImage(i.getCoverImage());
-            idto.setPrice(i.getPrice());
-            idto.setQuantity(i.getQuantity());
-            idto.setSubtotal(i.getPrice().multiply(new BigDecimal(i.getQuantity())));
-            return idto;
-        }).collect(Collectors.toList());
-        dto.setItems(itemDTOs);
-        return dto;
-    }
-
-    private String getStatusName(Integer status) {
-        if (status == null) return "未知";
-        switch (status) {
-            case 0: return "待支付";
-            case 1: return "待发货";
-            case 2: return "待收货";
-            case 3: return "已完成";
-            case 4: return "已取消";
-            case 5: return "退款中";
-            case 6: return "已退款";
-            default: return "未知";
-        }
-    }
-}

+ 0 - 40
dan/danshop/src/main/java/com/etotem/danshop/service/PaymentService.java

@@ -1,40 +0,0 @@
-package com.etotem.danshop.service;
-
-import com.alibaba.fastjson2.JSONObject;
-import com.etotem.danshop.common.Result;
-import com.etotem.danshop.entity.Order;
-import com.etotem.danshop.mapper.OrderMapper;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-import javax.annotation.Resource;
-import java.math.BigDecimal;
-
-@Service
-public class PaymentService {
-
-    @Resource
-    private OrderMapper orderMapper;
-    @Resource
-    private OrderService orderService;
-    @Resource
-    private WechatPayService wechatPayService;
-
-    public Result<JSONObject> createWxPayOrder(Long userId, String orderNo, BigDecimal amount, String openId) {
-        return wechatPayService.createJsapiOrder(orderNo, amount, openId);
-    }
-
-    @Transactional
-    public Result<Void> handleWxPayNotify(String notifyData) {
-        try {
-            JSONObject result = wechatPayService.parseNotify(notifyData);
-            if (result == null || !result.getBooleanValue("success")) {
-                return Result.success(null);
-            }
-            String payOrderNo = result.getString("payOrderNo");
-            String transactionId = result.getString("transactionId");
-            return orderService.paySuccess(payOrderNo, transactionId);
-        } catch (Exception e) {
-            return Result.error("处理失败");
-        }
-    }
-}

+ 0 - 68
dan/danshop/src/main/java/com/etotem/danshop/service/ProductService.java

@@ -1,68 +0,0 @@
-package com.etotem.danshop.service;
-
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.etotem.danshop.common.Result;
-import com.etotem.danshop.dto.ProductDTO;
-import com.etotem.danshop.entity.Product;
-import com.etotem.danshop.mapper.ProductMapper;
-import org.springframework.stereotype.Service;
-import javax.annotation.Resource;
-import java.util.Arrays;
-import java.util.List;
-import java.util.stream.Collectors;
-
-@Service
-public class ProductService {
-
-    @Resource
-    private ProductMapper productMapper;
-
-    public Result<Page<ProductDTO>> listByCategory(Long categoryId, Integer page, Integer pageSize) {
-        LambdaQueryWrapper<Product> q = new LambdaQueryWrapper<>();
-        q.eq(categoryId != null, Product::getCategoryId, categoryId)
-         .eq(Product::getStatus, 1)
-         .orderByDesc(Product::getSalesCount);
-        Page<Product> p = productMapper.selectPage(new Page<>(page, pageSize), q);
-        Page<ProductDTO> result = p.convert(this::toDTO);
-        return Result.success(result);
-    }
-
-    public Result<ProductDTO> getDetail(Long id) {
-        Product p = productMapper.selectById(id);
-        if (p == null) return Result.error("商品不存在");
-        return Result.success(toDTO(p));
-    }
-
-    public Result<Page<ProductDTO>> search(String keyword, Integer page, Integer pageSize) {
-        LambdaQueryWrapper<Product> q = new LambdaQueryWrapper<>();
-        q.like(keyword != null && !keyword.isEmpty(), Product::getName, keyword)
-         .eq(Product::getStatus, 1)
-         .orderByDesc(Product::getSalesCount);
-        Page<Product> p = productMapper.selectPage(new Page<>(page, pageSize), q);
-        Page<ProductDTO> result = p.convert(this::toDTO);
-        return Result.success(result);
-    }
-
-    private ProductDTO toDTO(Product p) {
-        ProductDTO dto = new ProductDTO();
-        dto.setId(p.getId());
-        dto.setCategoryId(p.getCategoryId());
-        dto.setName(p.getName());
-        dto.setSubtitle(p.getSubtitle());
-        dto.setCoverImage(p.getCoverImage());
-        if (p.getImages() != null) {
-            dto.setImages(Arrays.asList(p.getImages().split(",")));
-        }
-        dto.setPrice(p.getPrice());
-        dto.setOriginalPrice(p.getOriginalPrice());
-        dto.setStock(p.getStock());
-        dto.setUnit(p.getUnit());
-        dto.setDescription(p.getDescription());
-        dto.setStatus(p.getStatus());
-        dto.setSellerId(p.getSellerId());
-        dto.setHasProfit(p.getHasProfit());
-        dto.setSalesCount(p.getSalesCount());
-        return dto;
-    }
-}

+ 0 - 72
dan/danshop/src/main/java/com/etotem/danshop/service/ProfitService.java

@@ -1,72 +0,0 @@
-package com.etotem.danshop.service;
-
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.etotem.danshop.common.Result;
-import com.etotem.danshop.entity.Order;
-import com.etotem.danshop.entity.OrderItem;
-import com.etotem.danshop.entity.ProfitLog;
-import com.etotem.danshop.entity.ProfitRule;
-import com.etotem.danshop.mapper.OrderMapper;
-import com.etotem.danshop.mapper.ProfitLogMapper;
-import com.etotem.danshop.mapper.ProfitRuleMapper;
-import org.springframework.stereotype.Service;
-import javax.annotation.Resource;
-import java.math.BigDecimal;
-import java.util.List;
-
-@Service
-public class ProfitService {
-
-    @Resource
-    private ProfitRuleMapper profitRuleMapper;
-    @Resource
-    private ProfitLogMapper profitLogMapper;
-    @Resource
-    private OrderMapper orderMapper;
-
-    public void distributeProfit(Order order) {
-        List<OrderItem> items = order.getItems();
-        if (items == null || items.isEmpty()) return;
-
-        for (OrderItem item : items) {
-            ProfitRule rule = getRule(item.getVendorId());
-            if (rule == null || rule.getIsActive() != 1) continue;
-
-            BigDecimal itemTotal = item.getUnitPrice().multiply(new BigDecimal(item.getQuantity()));
-            BigDecimal profitAmount = itemTotal.multiply(rule.getPlatformProfitRate());
-
-            ProfitLog plog = new ProfitLog();
-            plog.setOrderId(order.getId());
-            plog.setOrderNo(order.getOrderNo());
-            plog.setOrderAmount(itemTotal);
-            plog.setCostAmount(item.getUnitPrice().multiply(new BigDecimal(item.getQuantity())));
-            plog.setProfitAmount(profitAmount);
-            plog.setPlatformRetained(profitAmount.multiply(rule.getPlatformServiceRate()));
-            plog.setVendorIncome(profitAmount.multiply(rule.getReferrerL1Rate()));
-            plog.setCommissionL1(profitAmount.multiply(rule.getReferrerL1Rate()));
-            plog.setCommissionL2(profitAmount.multiply(rule.getReferrerL2Rate()));
-            plog.setRuleId(rule.getId());
-            profitLogMapper.insert(plog);
-
-            // 更新订单分润金额
-            order.setProfitAmount(order.getProfitAmount() != null
-                ? order.getProfitAmount().add(profitAmount) : profitAmount);
-        }
-        orderMapper.updateById(order);
-    }
-
-    private ProfitRule getRule(Long vendorId) {
-        return profitRuleMapper.selectOne(
-            new LambdaQueryWrapper<ProfitRule>()
-                .eq(ProfitRule::getTargetId, vendorId)
-                .eq(ProfitRule::getRuleType, "vendor")
-                .eq(ProfitRule::getIsActive, 1)
-        );
-    }
-
-    public Result<List<ProfitLog>> listByVendor(Long vendorId) {
-        LambdaQueryWrapper<ProfitLog> q = new LambdaQueryWrapper<>();
-        q.eq(ProfitLog::getRuleId, vendorId).orderByDesc(ProfitLog::getCreatedAt);
-        return Result.success(profitLogMapper.selectList(q));
-    }
-}

+ 0 - 67
dan/danshop/src/main/java/com/etotem/danshop/service/ProfitSettlementService.java

@@ -1,67 +0,0 @@
-package com.etotem.danshop.service;
-
-import com.etotem.danshop.entity.Order;
-import com.etotem.danshop.entity.OrderItem;
-import com.etotem.danshop.entity.ProfitLog;
-import com.etotem.danshop.entity.ProfitRule;
-import com.etotem.danshop.mapper.OrderMapper;
-import com.etotem.danshop.mapper.ProfitLogMapper;
-import com.etotem.danshop.mapper.ProfitRuleMapper;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-import javax.annotation.Resource;
-import java.math.BigDecimal;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-@Service
-public class ProfitSettlementService {
-
-    @Resource
-    private ProfitRuleMapper profitRuleMapper;
-    @Resource
-    private ProfitLogMapper profitLogMapper;
-    @Resource
-    private OrderMapper orderMapper;
-    @Resource
-    private ProfitService profitService;
-
-    @Transactional
-    public void settleOrder(Long orderId) {
-        Order order = orderMapper.selectById(orderId);
-        if (order == null) return;
-        profitService.distributeProfit(order);
-    }
-
-    public Map<String, Object> getProfitSummary(Long vendorId) {
-        Map<String, Object> summary = new HashMap<>();
-
-        LambdaQueryWrapper<ProfitLog> allWrapper = new LambdaQueryWrapper<ProfitLog>()
-                .eq(ProfitLog::getRuleId, vendorId);
-        List<ProfitLog> allLogs = profitLogMapper.selectList(allWrapper);
-
-        BigDecimal totalProfit = BigDecimal.ZERO;
-        BigDecimal totalPlatform = BigDecimal.ZERO;
-        BigDecimal totalVendor = BigDecimal.ZERO;
-        BigDecimal totalL1 = BigDecimal.ZERO;
-        BigDecimal totalL2 = BigDecimal.ZERO;
-
-        for (ProfitLog log : allLogs) {
-            if (log.getProfitAmount() != null) totalProfit = totalProfit.add(log.getProfitAmount());
-            if (log.getPlatformRetained() != null) totalPlatform = totalPlatform.add(log.getPlatformRetained());
-            if (log.getVendorIncome() != null) totalVendor = totalVendor.add(log.getVendorIncome());
-            if (log.getCommissionL1() != null) totalL1 = totalL1.add(log.getCommissionL1());
-            if (log.getCommissionL2() != null) totalL2 = totalL2.add(log.getCommissionL2());
-        }
-
-        summary.put("totalProfit", totalProfit);
-        summary.put("platformRetained", totalPlatform);
-        summary.put("vendorIncome", totalVendor);
-        summary.put("commissionL1", totalL1);
-        summary.put("commissionL2", totalL2);
-        summary.put("orderCount", allLogs.size());
-        return summary;
-    }
-}

+ 0 - 93
dan/danshop/src/main/java/com/etotem/danshop/service/WechatPayService.java

@@ -1,93 +0,0 @@
-package com.etotem.danshop.service;
-
-import com.alibaba.fastjson2.JSON;
-import com.alibaba.fastjson2.JSONObject;
-import com.etotem.danshop.common.Result;
-import com.etotem.danshop.config.WechatPayConfig;
-import com.etotem.danshop.util.OrderNoGenerator;
-import okhttp3.*;
-import org.springframework.stereotype.Service;
-import javax.annotation.Resource;
-import java.math.BigDecimal;
-import java.util.UUID;
-
-@Service
-public class WechatPayService {
-
-    private static final MediaType JSON_TYPE = MediaType.parse("application/json; charset=utf-8");
-    private static final OkHttpClient CLIENT = new OkHttpClient();
-
-    @Resource
-    private WechatPayConfig wechatPayConfig;
-
-    @Resource
-    private OrderNoGenerator orderNoGenerator;
-
-    public Result<JSONObject> createJsapiOrder(String orderNo, BigDecimal amount, String openId) {
-        if (wechatPayConfig.getAppId() == null || wechatPayConfig.getAppId().isEmpty()) {
-            return Result.error("支付未配置");
-        }
-
-        String payOrderNo = "PAY" + orderNoGenerator.generate();
-        JSONObject body = new JSONObject();
-        body.put("mchid", wechatPayConfig.getMchId());
-        body.put("appid", wechatPayConfig.getAppId());
-        body.put("description", "浠艾福商品订单");
-        body.put("notify_url", wechatPayConfig.getNotifyUrl());
-        body.put("out_trade_no", payOrderNo);
-
-        JSONObject amountObj = new JSONObject();
-        amountObj.put("total", amount.multiply(new BigDecimal("100")).intValue());
-        amountObj.put("currency", "CNY");
-        body.put("amount", amountObj);
-
-        JSONObject payer = new JSONObject();
-        payer.put("openid", openId);
-        body.put("payer", payer);
-
-        try {
-            Request request = new Request.Builder()
-                .url("https://api.mch.weixin.qq.com/v3/pay/transactions/jsapi")
-                .post(RequestBody.create(JSON_TYPE, body.toJSONString()))
-                .header("Authorization", "WECHATPAY2-SHA256-RSA2048 nonce_str=" + UUID.randomUUID())
-                .build();
-
-            try (Response response = CLIENT.newCall(request).execute()) {
-                String respBody = response.body().string();
-                if (!response.isSuccessful()) {
-                    return Result.error("支付下单失败:" + respBody);
-                }
-                JSONObject resp = JSON.parseObject(respBody);
-                JSONObject result = new JSONObject();
-                result.put("prepayId", resp.getString("prepay_id"));
-                result.put("payOrderNo", payOrderNo);
-                return Result.success(result);
-            }
-        } catch (Exception e) {
-            return Result.error("支付异常:" + e.getMessage());
-        }
-    }
-
-    public JSONObject parseNotify(String notifyData) {
-        try {
-            JSONObject notify = JSON.parseObject(notifyData);
-            JSONObject resource = notify.getJSONObject("resource");
-            String payOrderNo = resource.getString("out_trade_no");
-            String tradeState = resource.getString("trade_state");
-            String transactionId = resource.getString("transaction_id");
-
-            JSONObject result = new JSONObject();
-            result.put("payOrderNo", payOrderNo);
-            result.put("tradeState", tradeState);
-            result.put("transactionId", transactionId);
-            result.put("success", "SUCCESS".equals(tradeState));
-            return result;
-        } catch (Exception e) {
-            return null;
-        }
-    }
-
-    public String getAppId() {
-        return wechatPayConfig.getAppId();
-    }
-}

+ 0 - 71
dan/danshop/src/main/java/com/etotem/danshop/util/LogisticsUtil.java

@@ -1,71 +0,0 @@
-package com.etotem.danshop.util;
-
-import com.alibaba.fastjson2.JSON;
-import com.alibaba.fastjson2.JSONArray;
-import com.alibaba.fastjson2.JSONObject;
-import okhttp3.MediaType;
-import okhttp3.OkHttpClient;
-import okhttp3.Request;
-import okhttp3.RequestBody;
-import okhttp3.Response;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.stereotype.Component;
-import java.io.IOException;
-
-@Component
-public class LogisticsUtil {
-
-    private static final MediaType JSON_TYPE = MediaType.parse("application/json; charset=utf-8");
-
-    @Value("${danshop.logistics.api-url:}")
-    private String apiUrl;
-
-    @Value("${danshop.logistics.app-key:}")
-    private String appKey;
-
-    /**
-     * 查询物流轨迹,返回格式化轨迹列表
-     */
-    public String query(String company, String trackingNo) throws IOException {
-        if (apiUrl == null || apiUrl.isEmpty()) {
-            return "{}";
-        }
-        JSONObject body = new JSONObject();
-        body.put("company", company);
-        body.put("trackingNo", trackingNo);
-        body.put("appKey", appKey);
-
-        Request request = new Request.Builder()
-                .url(apiUrl)
-                .post(RequestBody.create(JSON_TYPE, JSON.toJSONString(body)))
-                .build();
-
-        try (Response response = new OkHttpClient().newCall(request).execute()) {
-            if (!response.isSuccessful()) return "{}";
-            String respBody = response.body().string();
-            return formatLogisticsResp(respBody);
-        }
-    }
-
-    private String formatLogisticsResp(String raw) {
-        try {
-            JSONObject json = JSON.parseObject(raw);
-            if (json.getIntValue("status") != 0) return raw;
-            JSONObject result = json.getJSONObject("result");
-            if (result == null) return raw;
-
-            JSONArray traces = result.getJSONArray("traces");
-            if (traces == null || traces.isEmpty()) return raw;
-
-            StringBuilder sb = new StringBuilder();
-            for (int i = 0; i < traces.size(); i++) {
-                JSONObject trace = traces.getJSONObject(i);
-                sb.append(trace.getString("time")).append(" ")
-                  .append(trace.getString("desc")).append("\n");
-            }
-            return sb.toString().trim();
-        } catch (Exception e) {
-            return raw;
-        }
-    }
-}

+ 0 - 19
dan/danshop/src/main/java/com/etotem/danshop/util/OrderNoGenerator.java

@@ -1,19 +0,0 @@
-package com.etotem.danshop.util;
-
-import org.springframework.stereotype.Component;
-import java.time.LocalDateTime;
-import java.time.format.DateTimeFormatter;
-import java.util.concurrent.atomic.AtomicLong;
-
-@Component
-public class OrderNoGenerator {
-
-    private static final DateTimeFormatter DFT = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
-    private static final AtomicLong SEQ = new AtomicLong(0);
-
-    public String generate() {
-        String timestamp = LocalDateTime.now().format(DFT);
-        long seq = SEQ.incrementAndGet() % 10000;
-        return "DS" + timestamp + String.format("%04d", seq);
-    }
-}

+ 0 - 67
dan/danshop/src/main/resources/application.yml

@@ -1,67 +0,0 @@
-server:
-  port: 9081
-
-spring:
-  application:
-    name: danshop
-
-  datasource:
-    driver-class-name: com.mysql.cj.jdbc.Driver
-    url: jdbc:mysql://192.168.16.251:3306/cfc?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
-    username: cfc
-    password: cfc@123
-    hikari:
-      maximum-pool-size: 20
-      minimum-idle: 5
-
-  redis:
-    host: 192.168.16.251
-    port: 6379
-    database: 0
-    timeout: 5000ms
-    lettuce:
-      pool:
-        max-active: 20
-        max-idle: 10
-        min-idle: 5
-        max-wait: 3000ms
-
-mybatis-plus:
-  mapper-locations: classpath:mapper/**/*.xml
-  type-aliases-package: com.etotem.danshop.entity
-  configuration:
-    map-underscore-to-camel-case: true
-    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
-  global-config:
-    db-config:
-      id-type: auto
-      logic-delete-field: deleted
-      logic-delete-value: 1
-      logic-not-delete-value: 0
-
-# cfc-backend 调用地址(用于 JWT 验证、能量发放、分佣结算)
-cfc:
-  backend:
-    url: http://localhost:9082
-
-# 微信支付配置
-danshop:
-  payment:
-    wechat:
-      app-id: wx5ba8038ef16fb245
-      mch-id: ${WX_MCH_ID:YOUR_MCH_ID}
-      api-v3-key: ${WX_API_V3_KEY:YOUR_API_V3_KEY}
-      private-key-path: ${WX_PRIVATE_KEY_PATH:}
-      notify-url: ${DANSHOP_NOTIFY_URL:https://danshop.etotem.com.cn/api/danshop/payment/wechat/notify}
-      refund-notify-url: ${DANSHOP_REFUND_NOTIFY_URL:https://danshop.etotem.com.cn/api/danshop/payment/wechat/refund-notify}
-
-# JWT 配置
-jwt:
-  secret: ${JWT_SECRET:cfc-danshop-secret-key-2026}
-  expiration: 604800000
-
-# 日志
-logging:
-  level:
-    com.etotem.danshop: DEBUG
-    com.etotem.danshop.mapper: DEBUG

+ 0 - 193
dan/danshop/src/main/resources/schema.sql

@@ -1,193 +0,0 @@
--- =============================================
--- DanShop 电商模块建表语句
--- 与 cfc-backend 共享 MySQL 数据库 (cfc)
--- 使用 danshop_ 前缀避免冲突
--- =============================================
-
--- 商品分类表(支持多级树形结构)
-CREATE TABLE IF NOT EXISTS danshop_categories (
-    id BIGINT AUTO_INCREMENT PRIMARY KEY,
-    parent_id BIGINT DEFAULT NULL COMMENT '父分类ID(null=一级)',
-    name VARCHAR(64) NOT NULL COMMENT '分类名称',
-    image VARCHAR(512) DEFAULT NULL COMMENT '分类图标URL',
-    sort_order INT DEFAULT 0 COMMENT '排序(越小越靠前)',
-    energy_dimension_id BIGINT DEFAULT NULL COMMENT '关联五维维度ID(energy_dimension.id)',
-    status INT DEFAULT 1 COMMENT '1启用/0禁用',
-    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
-    updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
-    INDEX idx_parent (parent_id),
-    INDEX idx_status (status)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商品分类表';
-
--- 商品表
-CREATE TABLE IF NOT EXISTS danshop_products (
-    id BIGINT AUTO_INCREMENT PRIMARY KEY,
-    category_id BIGINT NOT NULL COMMENT '所属分类ID',
-    name VARCHAR(128) NOT NULL COMMENT '商品名称',
-    description TEXT COMMENT '商品详细描述',
-    cover_image VARCHAR(512) COMMENT '封面图URL',
-    images TEXT COMMENT '多图(JSON数组)',
-    price DECIMAL(10,2) NOT NULL COMMENT '售价(元)',
-    member_price DECIMAL(10,2) DEFAULT NULL COMMENT '会员价',
-    cost_price DECIMAL(10,2) DEFAULT NULL COMMENT '成本价(用于利润计算)',
-    stock INT DEFAULT 0 COMMENT '库存数量',
-    sales_count INT DEFAULT 0 COMMENT '销量',
-    product_type VARCHAR(32) NOT NULL COMMENT '类型: physical/virtual/coupon/course',
-    vendor_id BIGINT DEFAULT NULL COMMENT '供应商ID(users.id)',
-    vendor_name VARCHAR(64) COMMENT '供应商名称',
-    status VARCHAR(16) NOT NULL DEFAULT 'pending' COMMENT 'pending/approved/rejected/on_shelf/off_shelf',
-    reject_reason VARCHAR(255) DEFAULT NULL COMMENT '审核拒绝原因',
-    profit_rate DECIMAL(5,2) DEFAULT 0.00 COMMENT '平台利润率(%),例:30.00表示30%',
-    external_source VARCHAR(32) COMMENT '外部商品来源(如: self, taobao, jd)',
-    external_id VARCHAR(64) COMMENT '外部商品ID',
-    external_data TEXT COMMENT '外部商品完整数据(JSON)',
-    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
-    updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
-    INDEX idx_category (category_id),
-    INDEX idx_vendor (vendor_id),
-    INDEX idx_status (status),
-    INDEX idx_product_type (product_type)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商品表';
-
--- 主订单表
-CREATE TABLE IF NOT EXISTS danshop_orders (
-    id BIGINT AUTO_INCREMENT PRIMARY KEY,
-    order_no VARCHAR(32) NOT NULL UNIQUE COMMENT '订单号(DS+时间戳+6位随机)',
-    buyer_id BIGINT NOT NULL COMMENT '买家ID(users.id)',
-    family_id BIGINT DEFAULT NULL COMMENT '家庭ID',
-    total_amount DECIMAL(10,2) NOT NULL COMMENT '订单总金额(标价)',
-    discount_amount DECIMAL(10,2) DEFAULT 0.00 COMMENT '优惠金额',
-    actual_amount DECIMAL(10,2) NOT NULL COMMENT '实付金额',
-    status VARCHAR(20) NOT NULL DEFAULT 'pending' COMMENT 'pending/paid/shipped/completed/refunding/refunded/cancelled',
-    payment_method VARCHAR(16) DEFAULT 'wechat' COMMENT 'wechat/alipay',
-    transaction_id VARCHAR(64) DEFAULT NULL COMMENT '微信/支付宝交易号',
-    paid_at DATETIME DEFAULT NULL COMMENT '支付时间',
-    shipped_at DATETIME DEFAULT NULL COMMENT '发货时间',
-    completed_at DATETIME DEFAULT NULL COMMENT '完成时间',
-    remark VARCHAR(255) DEFAULT NULL COMMENT '买家备注',
-    cancel_reason VARCHAR(255) DEFAULT NULL COMMENT '取消原因',
-    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
-    updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
-    INDEX idx_buyer (buyer_id),
-    INDEX idx_family (family_id),
-    INDEX idx_status (status),
-    INDEX idx_created (created_at),
-    INDEX idx_order_no (order_no)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='主订单表';
-
--- 订单明细表
-CREATE TABLE IF NOT EXISTS danshop_order_items (
-    id BIGINT AUTO_INCREMENT PRIMARY KEY,
-    order_id BIGINT NOT NULL COMMENT '所属订单ID',
-    product_id BIGINT NOT NULL COMMENT '商品ID',
-    product_name VARCHAR(128) NOT NULL COMMENT '商品名称(快照)',
-    cover_image VARCHAR(512) COMMENT '封面图(快照)',
-    unit_price DECIMAL(10,2) NOT NULL COMMENT '单价(快照下单时价格)',
-    quantity INT NOT NULL DEFAULT 1 COMMENT '购买数量',
-    subtotal DECIMAL(10,2) NOT NULL COMMENT '小计(unit_price × quantity)',
-    product_type VARCHAR(32) COMMENT '商品类型(快照)',
-    vendor_id BIGINT COMMENT '供应商ID(快照)',
-    vendor_name VARCHAR(64) COMMENT '供应商名称(快照)',
-    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
-    INDEX idx_order (order_id),
-    INDEX idx_product (product_id)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='订单明细表';
-
--- 订单操作日志表
-CREATE TABLE IF NOT EXISTS danshop_order_logs (
-    id BIGINT AUTO_INCREMENT PRIMARY KEY,
-    order_id BIGINT NOT NULL COMMENT '订单ID',
-    action VARCHAR(32) NOT NULL COMMENT '操作: create/pay/ship/confirm/refund/cancel',
-    operator_id BIGINT DEFAULT NULL COMMENT '操作人ID',
-    operator_type VARCHAR(16) DEFAULT NULL COMMENT 'buyer/vendor/admin/system',
-    detail TEXT DEFAULT NULL COMMENT '操作详情(JSON)',
-    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
-    INDEX idx_order (order_id)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='订单操作日志表';
-
--- 物流信息表
-CREATE TABLE IF NOT EXISTS danshop_logistics (
-    id BIGINT AUTO_INCREMENT PRIMARY KEY,
-    order_id BIGINT NOT NULL COMMENT '订单ID',
-    order_item_id BIGINT DEFAULT NULL COMMENT '订单明细ID(NULL表示整个订单一起发货)',
-    logistics_no VARCHAR(64) NOT NULL COMMENT '物流单号',
-    logistics_company VARCHAR(32) NOT NULL COMMENT '物流公司编码: sf/yto/zt/sto/yd/ttkd',
-    logistics_name VARCHAR(32) DEFAULT NULL COMMENT '物流公司名称',
-    sender_name VARCHAR(32) DEFAULT NULL COMMENT '发货人姓名',
-    sender_phone VARCHAR(16) DEFAULT NULL COMMENT '发货人电话',
-    sender_address VARCHAR(256) DEFAULT NULL COMMENT '发货人地址',
-    receiver_name VARCHAR(32) NOT NULL COMMENT '收件人姓名',
-    receiver_phone VARCHAR(16) NOT NULL COMMENT '收件人电话',
-    receiver_address VARCHAR(256) NOT NULL COMMENT '收件人地址(省市区街道)',
-    status VARCHAR(16) NOT NULL DEFAULT 'pending' COMMENT 'pending/shipped/signing/completed',
-    tracking_data TEXT DEFAULT NULL COMMENT '物流轨迹(JSON数组 [{time, content, status}])',
-    shipped_at DATETIME DEFAULT NULL COMMENT '发货时间',
-    signed_at DATETIME DEFAULT NULL COMMENT '签收时间',
-    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
-    updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
-    INDEX idx_order (order_id),
-    INDEX idx_logistics_no (logistics_no),
-    INDEX idx_status (status)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='物流信息表';
-
--- 分润规则配置表
-CREATE TABLE IF NOT EXISTS danshop_profit_rules (
-    id BIGINT AUTO_INCREMENT PRIMARY KEY,
-    rule_name VARCHAR(64) NOT NULL COMMENT '规则名称',
-    rule_type VARCHAR(32) NOT NULL COMMENT '规则类型: product_category/vendor_level/global',
-    target_id BIGINT DEFAULT NULL COMMENT '关联目标ID(category_id/vendor_id/null=全局)',
-    platform_profit_rate DECIMAL(5,2) NOT NULL COMMENT '平台利润率(%),例:30.00表示利润的30%归平台',
-    referrer_l1_rate DECIMAL(5,2) DEFAULT 0.00 COMMENT '直接推荐人分润比例(占利润%)',
-    referrer_l2_rate DECIMAL(5,2) DEFAULT 0.00 COMMENT '间接推荐人分润比例(占利润%,仅会员)',
-    platform_service_rate DECIMAL(5,2) DEFAULT 0.00 COMMENT '平台服务费率(占订单金额%)',
-    is_active INT DEFAULT 1 COMMENT '1启用/0禁用',
-    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
-    updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
-    INDEX idx_type (rule_type, target_id),
-    INDEX idx_active (is_active)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='分润规则配置表';
-
--- 分润流水表
-CREATE TABLE IF NOT EXISTS danshop_profit_logs (
-    id BIGINT AUTO_INCREMENT PRIMARY KEY,
-    order_id BIGINT NOT NULL COMMENT '订单ID',
-    order_no VARCHAR(32) NOT NULL COMMENT '订单号',
-    order_amount DECIMAL(10,2) NOT NULL COMMENT '订单实付金额',
-    cost_amount DECIMAL(10,2) DEFAULT 0.00 COMMENT '成本金额',
-    profit_amount DECIMAL(10,2) NOT NULL COMMENT '利润金额(actual_amount - cost_price)',
-    platform_retained DECIMAL(10,2) NOT NULL COMMENT '平台留存金额',
-    vendor_income DECIMAL(10,2) NOT NULL COMMENT '供应商实收金额(cost_price)',
-    commission_l1 DECIMAL(10,2) DEFAULT 0.00 COMMENT 'L1直接推荐人佣金',
-    commission_l2 DECIMAL(10,2) DEFAULT 0.00 COMMENT 'L2间接推荐人佣金',
-    rule_id BIGINT DEFAULT NULL COMMENT '使用的分润规则ID',
-    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
-    INDEX idx_order (order_id),
-    INDEX idx_order_no (order_no)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='分润流水表';
-
--- 商品收藏表
-CREATE TABLE IF NOT EXISTS danshop_favorites (
-    id BIGINT AUTO_INCREMENT PRIMARY KEY,
-    user_id BIGINT NOT NULL COMMENT '用户ID',
-    product_id BIGINT NOT NULL COMMENT '商品ID',
-    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
-    UNIQUE INDEX idx_user_product (user_id, product_id),
-    INDEX idx_user (user_id)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商品收藏表';
-
--- 收货地址表
-CREATE TABLE IF NOT EXISTS danshop_addresses (
-    id BIGINT AUTO_INCREMENT PRIMARY KEY,
-    user_id BIGINT NOT NULL COMMENT '用户ID',
-    receiver_name VARCHAR(32) NOT NULL COMMENT '收货人姓名',
-    phone VARCHAR(16) NOT NULL COMMENT '收货人电话',
-    province VARCHAR(32) NOT NULL COMMENT '省份',
-    city VARCHAR(32) NOT NULL COMMENT '城市',
-    district VARCHAR(32) NOT NULL COMMENT '区县',
-    street VARCHAR(256) NOT NULL COMMENT '详细地址(街道门牌)',
-    is_default INT DEFAULT 0 COMMENT '是否默认地址 1=是 0=否',
-    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
-    updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
-    INDEX idx_user (user_id),
-    INDEX idx_user_default (user_id, is_default)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='收货地址表';

+ 0 - 52
dan/danshop/src/main/resources/seed.sql

@@ -1,52 +0,0 @@
--- =============================================
--- DanShop 种子数据
--- =============================================
-
--- 默认商品分类(对应五维能量维度)
-INSERT INTO danshop_categories (name, parent_id, sort_order, energy_dimension_id, status) VALUES
--- 一级分类
-('亲子教育', NULL, 10, 3, 1),       -- 智
-('营养健康', NULL, 20, 1, 1),        -- 身
-('户外运动', NULL, 30, 4, 1),       -- 行
-('图书文具', NULL, 40, 3, 1),       -- 智
-('家居生活', NULL, 50, 1, 1),       -- 身
-('会员权益', NULL, 60, 5, 1);       -- 富
-
--- 二级分类(亲子教育下)
-INSERT INTO danshop_categories (name, parent_id, sort_order, status) VALUES
-('益智玩具', 1, 1, 1),
-('亲子课程', 1, 2, 1),
-('家庭教育', 1, 3, 1),
-('素质教育', 1, 4, 1);
-
--- 二级分类(营养健康下)
-INSERT INTO danshop_categories (name, parent_id, sort_order, status) VALUES
-('儿童营养', 2, 1, 1),
-('健康监测', 2, 2, 1),
-('康复保健', 2, 3, 1);
-
--- 二级分类(户外运动下)
-INSERT INTO danshop_categories (name, parent_id, sort_order, status) VALUES
-('户外装备', 3, 1, 1),
-('运动培训', 3, 2, 1),
-('赛事活动', 3, 3, 1);
-
--- 二级分类(图书文具下)
-INSERT INTO danshop_categories (name, parent_id, sort_order, status) VALUES
-('儿童绘本', 4, 1, 1),
-('学习文具', 4, 2, 1),
-('课外读物', 4, 3, 1);
-
--- 二级分类(家居生活下)
-INSERT INTO danshop_categories (name, parent_id, sort_order, status) VALUES
-('儿童家居', 5, 1, 1),
-('健康电器', 5, 2, 1);
-
--- 二级分类(会员权益下)
-INSERT INTO danshop_categories (name, parent_id, sort_order, status) VALUES
-('家庭会员', 6, 1, 1),
-('成长会员', 6, 2, 1);
-
--- 默认全局分润规则(平台留存30%,L1推荐人20%)
-INSERT INTO danshop_profit_rules (rule_name, rule_type, target_id, platform_profit_rate, referrer_l1_rate, referrer_l2_rate, platform_service_rate, is_active) VALUES
-('全局默认分润规则', 'global', NULL, 30.00, 20.00, 0.00, 0.00, 1);