Bladeren bron

Merge remote-tracking branch 'origin/main'

classic_blue 1 week geleden
bovenliggende
commit
b66d13ac90
100 gewijzigde bestanden met toevoegingen van 1816 en 372 verwijderingen
  1. 0 12
      .idea/ApifoxUploaderProjectSetting.xml
  2. 1 1
      edu-travel-api/edu-travel-api-web/Dockerfile
  3. 9 0
      edu-travel-common/edu-travel-common-datasource/pom.xml
  4. 47 13
      edu-travel-common/edu-travel-common-datasource/src/main/java/edu/travel/datasource/ProjectInterceptor.java
  5. 2 1
      edu-travel-common/edu-travel-common-datasource/src/main/java/edu/travel/service/SysServiceImpl.java
  6. 36 0
      edu-travel-common/edu-travel-common-guava/pom.xml
  7. 10 0
      edu-travel-common/edu-travel-common-guava/src/main/java/edu/travel/guava/annotation/RateLimitAble.java
  8. 38 0
      edu-travel-common/edu-travel-common-guava/src/main/java/edu/travel/guava/aop/RateLimitAspect.java
  9. 42 0
      edu-travel-common/edu-travel-common-guava/src/main/java/edu/travel/guava/cache/GuavaCacheConfig.java
  10. 43 0
      edu-travel-common/edu-travel-common-guava/src/main/java/edu/travel/guava/cache/GuavaCacheUtils.java
  11. 15 0
      edu-travel-common/edu-travel-common-guava/src/main/java/edu/travel/guava/limiter/RateLimiterConfig.java
  12. 14 0
      edu-travel-common/edu-travel-common-guava/src/main/java/edu/travel/guava/limiter/RateLimiterUtils.java
  13. 14 0
      edu-travel-common/edu-travel-common-resp/src/main/java/edu/travel/rpc/RPCBaseResponse.java
  14. 1 0
      edu-travel-common/pom.xml
  15. 1 0
      edu-travel-model/edu-travel-model-base/src/main/java/edu/travel/entity/BaseEntity.java
  16. 0 14
      edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/remote/BaseCountryServeRemoteController.java
  17. 1 1
      edu-travel-remote/edu-travel-remote-country/src/main/java/edu/travel/dto/BaseCountryDto.java
  18. 109 0
      edu-travel-remote/edu-travel-remote-country/src/main/java/edu/travel/dto/BaseCountryServeCurrencyDto.java
  19. 13 0
      edu-travel-remote/edu-travel-remote-country/src/main/java/edu/travel/dto/BaseCountryServeDto.java
  20. 77 0
      edu-travel-remote/edu-travel-remote-country/src/main/java/edu/travel/dto/ShopCurrencyDto.java
  21. 60 0
      edu-travel-remote/edu-travel-remote-country/src/main/java/edu/travel/entity/ShopCurrency.java
  22. 2 2
      edu-travel-remote/edu-travel-remote-country/src/main/java/edu/travel/mapper/ShopCurrencyMapper.java
  23. 33 0
      edu-travel-remote/edu-travel-remote-country/src/main/java/edu/travel/remote/BaseCountryServeRemoteController.java
  24. 28 0
      edu-travel-remote/edu-travel-remote-country/src/main/java/edu/travel/remote/ShopCurrencyRemoteController.java
  25. 111 0
      edu-travel-remote/edu-travel-remote-country/src/main/java/edu/travel/vo/BaseCountryServeCurrencyVo.java
  26. 20 1
      edu-travel-remote/edu-travel-remote-country/src/main/java/edu/travel/vo/BaseCountryServeVo.java
  27. 1 1
      edu-travel-remote/edu-travel-remote-country/src/main/java/edu/travel/vo/BaseCountryVo.java
  28. 60 0
      edu-travel-remote/edu-travel-remote-country/src/main/java/edu/travel/vo/ShopCurrencyVo.java
  29. 5 1
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/constant/BaseConstant.java
  30. 4 0
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/constant/RedisKey.java
  31. 16 0
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/dto/SearchProductDto.java
  32. 9 0
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/dto/SearchRecordListDto.java
  33. 6 0
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/entity/ShopFavorite.java
  34. 1 1
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/entity/ShopProduct.java
  35. 5 1
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/entity/ShopProductImage.java
  36. 6 1
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/entity/ShopProductSku.java
  37. 0 5
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/entity/ShopSpecValue.java
  38. 20 0
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/enums/SearchType.java
  39. 2 0
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/mapper/ShopProductSkuMapper.java
  40. 6 0
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/mapper/ShopProductSpecMapper.java
  41. 0 14
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/BaseCountryServeService.java
  42. 3 2
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/ShopCategoryService.java
  43. 0 8
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/ShopCurrencyService.java
  44. 7 0
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/ShopFavoriteService.java
  45. 0 8
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/ShopLanguageService.java
  46. 5 2
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/ShopProductService.java
  47. 3 3
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/ShopProductSkuService.java
  48. 0 2
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/ShopProductSpecService.java
  49. 7 0
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/ShopSearchRecordsService.java
  50. 1 4
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/impl/ShopAddressServiceImpl.java
  51. 5 5
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/impl/ShopCategoryServiceImpl.java
  52. 0 12
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/impl/ShopCurrencyServiceImpl.java
  53. 59 2
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/impl/ShopFavoriteServiceImpl.java
  54. 0 13
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/impl/ShopLanguageServiceImpl.java
  55. 1 1
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/impl/ShopOpinionTypeServiceImpl.java
  56. 4 1
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/impl/ShopParametersServiceImpl.java
  57. 22 7
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/impl/ShopProductServiceImpl.java
  58. 17 70
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/impl/ShopProductSkuServiceImpl.java
  59. 58 54
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/impl/ShopProductSpecServiceImpl.java
  60. 45 0
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/impl/ShopSearchRecordsServiceImpl.java
  61. 19 6
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/impl/ShopShoppingCartServiceImpl.java
  62. 19 0
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/utils/ObjectUtils.java
  63. 7 1
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/utils/PageUtil.java
  64. 29 0
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/vo/ProductImageVo.java
  65. 31 10
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/vo/ProductSkuVo.java
  66. 5 1
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/vo/ProductSpecVo.java
  67. 34 0
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/vo/SearchRecordsVo.java
  68. 7 0
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/vo/ShopCartListVo.java
  69. 49 0
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/vo/ShopFavoriteVo.java
  70. 1 1
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/vo/ShopParametersVo.java
  71. 4 0
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/vo/ShopProductVo.java
  72. 27 0
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/vo/ShopSkuSpecValueVo.java
  73. 2 0
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/vo/SpecSortVo.java
  74. 2 2
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/vo/SpecValueSortVo.java
  75. 9 3
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/vo/SpecValueVo.java
  76. 8 4
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/web/ShopAddressController.java
  77. 10 9
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/web/ShopCategoryController.java
  78. 0 23
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/web/ShopCurrencyController.java
  79. 14 2
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/web/ShopFavoriteController.java
  80. 6 3
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/web/ShopParametersController.java
  81. 16 4
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/web/ShopProductController.java
  82. 7 3
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/web/ShopProductSpecController.java
  83. 2 0
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/web/ShopReviewController.java
  84. 30 1
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/web/ShopSearchRecordsController.java
  85. 9 6
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/web/ShopShoppingCartController.java
  86. 2 1
      edu-travel-service/edu-travel-service-commodity/src/main/resources/mapper/ShopProductImageMapper.xml
  87. 3 1
      edu-travel-service/edu-travel-service-commodity/src/main/resources/mapper/ShopProductSkuMapper.xml
  88. 19 0
      edu-travel-service/edu-travel-service-commodity/src/main/resources/mapper/ShopProductSpecMapper.xml
  89. 1 2
      edu-travel-service/edu-travel-service-commodity/src/main/resources/mapper/ShopSpecValueMapper.xml
  90. 8 1
      edu-travel-service/edu-travel-service-country/src/main/java/edu/travel/country/entity/BaseCountryServe.java
  91. 5 2
      edu-travel-service/edu-travel-service-country/src/main/java/edu/travel/country/entity/ShopCurrency.java
  92. 3 2
      edu-travel-service/edu-travel-service-country/src/main/java/edu/travel/country/mapper/BaseCountryServeMapper.java
  93. 7 0
      edu-travel-service/edu-travel-service-country/src/main/java/edu/travel/country/mapper/ShopCurrencyMapper.java
  94. 18 0
      edu-travel-service/edu-travel-service-country/src/main/java/edu/travel/country/service/BaseCountryServeService.java
  95. 14 0
      edu-travel-service/edu-travel-service-country/src/main/java/edu/travel/country/service/ShopCurrencyService.java
  96. 110 0
      edu-travel-service/edu-travel-service-country/src/main/java/edu/travel/country/service/impl/BaseCountryServeServiceImpl.java
  97. 1 1
      edu-travel-service/edu-travel-service-country/src/main/java/edu/travel/country/service/impl/BaseCountryServiceImpl.java
  98. 31 0
      edu-travel-service/edu-travel-service-country/src/main/java/edu/travel/country/service/impl/ShopCurrencyServiceImpl.java
  99. 29 20
      edu-travel-service/edu-travel-service-country/src/main/java/edu/travel/country/web/BaseCountryServeController.java
  100. 113 0
      edu-travel-service/edu-travel-service-country/src/main/java/edu/travel/country/web/ShopCurrencyController.java

+ 0 - 12
.idea/ApifoxUploaderProjectSetting.xml

@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="ApifoxUploaderProjectSetting">
-    <option name="apiAccessToken" value="APS-zVX12fxhdOW93TBWYxvewP8rxF9dEXvJ" />
-    <option name="apiProjectIds">
-      <array>
-        <option value="&lt;byte-array&gt;rO0ABXNyADZjb20uaXRhbmdjZW50LmlkZWEucGx1Z2luLmFwaS5hY2NvdW50LlByb2plY3RBbmRNb2R1bGUAAAAAAAAAAQIAFVoABmVuYWJsZUwACG1vZHVsZUlkdAASTGphdmEvbGFuZy9TdHJpbmc7TAAGb3RoZXIxcQB+AAFMAAdvdGhlcjEwcQB+AAFMAAdvdGhlcjExcQB+AAFMAAdvdGhlcjEycQB+AAFMAAZvdGhlcjJxAH4AAUwABm90aGVyM3EAfgABTAAGb3RoZXI0cQB+AAFMAAZvdGhlcjVxAH4AAUwABm90aGVyNnEAfgABTAAGb3RoZXI3cQB+AAFMAAZvdGhlcjhxAH4AAUwABm90aGVyOXEAfgABTAAKcGF0aEJlZm9yZXEAfgABTAANcHJvamVjdEZvbGRlcnEAfgABTAAPcHJvamVjdEZvbGRlcklkcQB+AAFMAAlwcm9qZWN0SWRxAH4AAUwAC3Byb2plY3ROYW1lcQB+AAFMAAxzY2hlbWFGb2xkZXJxAH4AAUwACHNjaGVtYUlkcQB+AAF4cAB0AAZoaWRkZW5wcHBwcHBwcHBwcHB0AApwYXRoQmVmb3JldAANcHJvamVjdEZvbGRlcnQAD3Byb2plY3RGb2xkZXJJZHQAC3Byb2plY3ROYW1ldAAIaGlkZGVuSWR0AABxAH4ACQ==&lt;/byte-array&gt;" />
-      </array>
-    </option>
-    <option name="treeNodes" value="" />
-  </component>
-</project>

+ 1 - 1
edu-travel-api/edu-travel-api-web/Dockerfile

@@ -3,4 +3,4 @@ FROM openjdk:8-jdk-slim
 WORKDIR /opt
 COPY ./target/edu-travel-api-web-1.0-SNAPSHOT.jar  edu-travel-api-web-1.0-SNAPSHOT.jar
 EXPOSE 10005
-ENTRYPOINT ["nohup","java", "-jar","-server","-Xms2048m","-Xmx2048m","edu-travel-api-web-1.0-SNAPSHOT.jar",">","edu-travel-api-web-1.0-SNAPSHOT.log","&"]
+ENTRYPOINT ["nohup","java", "-jar","-server","-Dspring.profiles.active=prod","-Xms2048m","-Xmx2048m","edu-travel-api-web-1.0-SNAPSHOT.jar",">","edu-travel-api-web-1.0-SNAPSHOT.log","&"]

+ 9 - 0
edu-travel-common/edu-travel-common-datasource/pom.xml

@@ -62,5 +62,14 @@
             <version>1.0-SNAPSHOT</version>
             <scope>provided</scope>
         </dependency>
+        <dependency>
+            <groupId>com.github.jsqlparser</groupId>
+            <artifactId>jsqlparser</artifactId>
+            <version>4.5</version>  <!-- 检查最新版本 -->
+        </dependency>
+        <dependency>
+            <groupId>cn.hutool</groupId>
+            <artifactId>hutool-all</artifactId>
+        </dependency>
     </dependencies>
 </project>

+ 47 - 13
edu-travel-common/edu-travel-common-datasource/src/main/java/edu/travel/datasource/ProjectInterceptor.java

@@ -1,22 +1,27 @@
 package edu.travel.datasource;
 
+import cn.hutool.core.util.ReflectUtil;
 import com.baomidou.mybatisplus.core.toolkit.PluginUtils;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.extension.plugins.inner.InnerInterceptor;
 import net.sf.jsqlparser.JSQLParserException;
 import net.sf.jsqlparser.expression.Expression;
+import net.sf.jsqlparser.expression.LongValue;
 import net.sf.jsqlparser.expression.StringValue;
 import net.sf.jsqlparser.expression.operators.conditional.AndExpression;
 import net.sf.jsqlparser.expression.operators.relational.EqualsTo;
 import net.sf.jsqlparser.parser.CCJSqlParserUtil;
 import net.sf.jsqlparser.schema.Column;
 import net.sf.jsqlparser.statement.Statement;
+import net.sf.jsqlparser.statement.delete.Delete;
 import net.sf.jsqlparser.statement.select.PlainSelect;
 import net.sf.jsqlparser.statement.select.Select;
 import net.sf.jsqlparser.statement.select.SelectBody;
+import net.sf.jsqlparser.statement.update.Update;
 import org.apache.ibatis.executor.Executor;
 import org.apache.ibatis.mapping.BoundSql;
 import org.apache.ibatis.mapping.MappedStatement;
+import org.apache.ibatis.mapping.SqlCommandType;
 import org.apache.ibatis.session.ResultHandler;
 import org.apache.ibatis.session.RowBounds;
 import org.slf4j.Logger;
@@ -25,7 +30,9 @@ import org.springframework.web.context.request.RequestContextHolder;
 import org.springframework.web.context.request.ServletRequestAttributes;
 
 import javax.servlet.http.HttpServletRequest;
+import java.lang.reflect.Field;
 import java.sql.SQLException;
+import java.util.ArrayList;
 
 /**
  * @anthor 畅
@@ -33,19 +40,50 @@ import java.sql.SQLException;
  */
 public class ProjectInterceptor implements InnerInterceptor {
     Logger logger = LoggerFactory.getLogger(ProjectInterceptor.class);
+    private String convertDeleteToUpdate(String originalSql) {
+        // 示例:将DELETE FROM table WHERE ... 转为 UPDATE table SET deleted=1 WHERE ...
+        String newUPDATE = originalSql.replaceFirst("DELETE FROM", "UPDATE");
+        if (newUPDATE.contains("where")||newUPDATE.contains("WHERE")) {
+           newUPDATE =  newUPDATE.replace("WHERE", "SET delete_flag=1 WHERE ");
+        }else {
+            newUPDATE =  "";
+        }
+        return newUPDATE;
+
+    }
+
+//    @Override
+//    public void beforeUpdate(Executor executor, MappedStatement ms, Object parameter) throws SQLException {
+//        BoundSql boundSql = ms.getBoundSql(parameter);
+//        if (ms.getSqlCommandType().equals(SqlCommandType.DELETE)) {
+//
+////            // 转换DELETE为UPDATE,此处需复杂处理,示例简化
+////            // 实际需解析原始SQL并替换,此处仅为思路
+////            String newSql = convertDeleteToUpdate(boundSql.getSql());
+////            // 反射修改BoundSql中的SQL
+////            Class<? extends BoundSql> aClass = boundSql.getClass();
+////            Field declaredField = null;
+////            try {
+////                declaredField = aClass.getDeclaredField("sql");
+////                declaredField.setAccessible(true);
+////                declaredField.set(boundSql,newSql);
+////            } catch (Exception e) {
+////                throw new RuntimeException(e);
+////            }
+//
+//        }
+//    }
+
     @Override
     public void beforeQuery(Executor executor, MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler, BoundSql boundSql) throws SQLException {
         HttpServletRequest request = ((ServletRequestAttributes) (RequestContextHolder.currentRequestAttributes())).getRequest();
         String project = request.getHeader("project");
         if (StringUtils.isNotBlank(project)) {
             String originSql = boundSql.getSql();
+            if (originSql.contains("join") || originSql.contains("JOIN")) {
+                return;
+            }
             logger.debug("origin sql: " + originSql);
-//            Map parameterMap = (Map) parameter;
-//            // QueryWrapper,实际上就是 在 代码查询的地方创建的QueryWrapper。
-//            Object obj = parameterMap.get("ew");
-//            QueryWrapper queryWrapper = (QueryWrapper) obj;
-//            queryWrapper.eq("project", project);
-//            queryWrapper.eq("delete_flag",0);
             //获取 Statement 执行sql的对象
             Statement statement = null;
             try {
@@ -66,17 +104,13 @@ public class ProjectInterceptor implements InnerInterceptor {
                 EqualsTo projectEq = new EqualsTo();
                 projectEq.setLeftExpression(new Column("project"));
                 projectEq.setRightExpression(new StringValue(project));
-                EqualsTo deleteFlag = new EqualsTo();
-                deleteFlag.setLeftExpression(new Column("delete_flag"));
-                deleteFlag.setRightExpression(new StringValue("0"));
                 String plainSelectString = plainSelect.toString();
-                if (!plainSelectString.contains("project = ") && !plainSelectString.contains("delete_flag = ")) {
-                    AndExpression targetExpression = new AndExpression(projectEq, deleteFlag);
+                if (!plainSelectString.contains("project = ")) {
                     if (plainSelectString.contains("where") || plainSelectString.contains("WHERE")) {
-                        AndExpression andExpression = new AndExpression(where, targetExpression);
+                        AndExpression andExpression = new AndExpression(projectEq,where);
                         plainSelect.setWhere(andExpression);
                     }else {
-                        plainSelect.setWhere(targetExpression);
+                        plainSelect.setWhere(projectEq);
                     }
 
                     targetSql = plainSelect.toString();

+ 2 - 1
edu-travel-common/edu-travel-common-datasource/src/main/java/edu/travel/service/SysServiceImpl.java

@@ -10,6 +10,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import edu.travel.annotation.LinkConst;
 import edu.travel.annotation.LinkMany;
 import edu.travel.annotation.LinkOne;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.ApplicationContext;
 
 import java.lang.reflect.Field;
@@ -28,7 +29,7 @@ import java.util.concurrent.ConcurrentHashMap;
  */
 public class SysServiceImpl<M extends BaseMapper<T>, T> extends ServiceImpl<M,T> implements IService<T> {
     private ApplicationContext applicationContext;
-
+    @Autowired
     public void setApplicationContext(ApplicationContext applicationContext) {
         this.applicationContext = applicationContext;
     }

+ 36 - 0
edu-travel-common/edu-travel-common-guava/pom.xml

@@ -0,0 +1,36 @@
+<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>edu.travel</groupId>
+        <artifactId>edu-travel-common</artifactId>
+        <version>1.0-SNAPSHOT</version>
+    </parent>
+
+    <artifactId>edu-travel-common-guava</artifactId>
+    <packaging>jar</packaging>
+
+    <name>edu-travel-common-guava</name>
+    <url>http://maven.apache.org</url>
+
+    <properties>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>com.google.guava</groupId>
+            <artifactId>guava</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-aop</artifactId>
+            <scope>provided</scope>
+        </dependency>
+    </dependencies>
+</project>

+ 10 - 0
edu-travel-common/edu-travel-common-guava/src/main/java/edu/travel/guava/annotation/RateLimitAble.java

@@ -0,0 +1,10 @@
+package edu.travel.guava.annotation;
+
+import java.lang.annotation.*;
+
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.METHOD)
+@Documented
+@Inherited
+public @interface RateLimitAble {
+}

+ 38 - 0
edu-travel-common/edu-travel-common-guava/src/main/java/edu/travel/guava/aop/RateLimitAspect.java

@@ -0,0 +1,38 @@
+package edu.travel.guava.aop;
+
+import com.google.common.util.concurrent.RateLimiter;
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.annotation.Around;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Pointcut;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import org.springframework.web.context.request.RequestAttributes;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+
+import javax.servlet.http.HttpServletResponse;
+
+@Aspect
+@Component
+public class RateLimitAspect {
+    @Autowired
+    private RateLimiter rateLimiter;
+    @Pointcut("@annotation(edu.travel.guava.annotation.RateLimitAble)")
+    public void pointCut() {}
+
+    @Around("pointCut()")
+    public Object around(ProceedingJoinPoint joinPoint) throws Throwable {
+        if (rateLimiter.tryAcquire()) {
+            return joinPoint.proceed(joinPoint.getArgs());
+        }else {
+            RequestAttributes requestAttributes = RequestContextHolder.currentRequestAttributes();
+            HttpServletResponse response = ((ServletRequestAttributes)requestAttributes).getResponse();
+            response.setStatus(HttpServletResponse.SC_SERVICE_UNAVAILABLE);
+            response.setContentType("application/json");
+            response.setCharacterEncoding("UTF-8");
+            response.getWriter().write("每秒请求数量达到最高,目前是熔断降级");
+            return null;
+        }
+    }
+}

+ 42 - 0
edu-travel-common/edu-travel-common-guava/src/main/java/edu/travel/guava/cache/GuavaCacheConfig.java

@@ -0,0 +1,42 @@
+package edu.travel.guava.cache;
+
+import com.google.common.cache.Cache;
+import com.google.common.cache.CacheBuilder;
+import com.google.common.cache.CacheLoader;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.cache.CacheManager;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import java.util.concurrent.TimeUnit;
+
+@Configuration
+public class GuavaCacheConfig {
+    Logger logger = LoggerFactory.getLogger(GuavaCacheConfig.class);
+    @Bean
+    public Cache<String,Object> cache()    {
+        return CacheBuilder.newBuilder()
+                .initialCapacity(1000)
+                .maximumSize(1000)
+                .expireAfterWrite(30,TimeUnit.DAYS)
+                .expireAfterAccess(30, TimeUnit.DAYS)
+                .concurrencyLevel(8)
+                .removalListener(notification -> {
+                    logger.debug("Key " + notification.getKey() + " 被移除,原因: " + notification.getCause());
+                })
+
+                .weakKeys()
+
+                .weakValues()
+                .recordStats().build(new CacheLoader<String, Object>() {
+                    @Override
+                    public Object load(String s) throws Exception {
+                        return null;
+                    }
+                });
+    }
+
+
+
+}

+ 43 - 0
edu-travel-common/edu-travel-common-guava/src/main/java/edu/travel/guava/cache/GuavaCacheUtils.java

@@ -0,0 +1,43 @@
+package edu.travel.guava.cache;
+
+import com.google.common.cache.Cache;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.Collections;
+import java.util.List;
+import java.util.concurrent.Callable;
+import java.util.concurrent.ExecutionException;
+
+@Component
+public class GuavaCacheUtils {
+    @Autowired
+    private Cache cache;
+
+    public boolean put(String key, Object value) {
+        try {
+            cache.put(key, value);
+            return true;
+        }catch (Exception e) {
+            return false;
+        }
+    }
+    public Object get(String key, Callable<Object> callable) throws ExecutionException {
+        Object object = cache.get(key, callable);
+        return object;
+    }
+    public Object get(String key){
+        Object ifPresent = cache.getIfPresent(key);
+        return ifPresent;
+
+    }
+    public void invalidateAll(){
+        cache.invalidateAll();
+    }
+    public void invalidate(String key){
+        cache.invalidate(key);
+    }
+    public void invalidateList(List<String> keys){
+        cache.invalidateAll(keys);
+    }
+}

+ 15 - 0
edu-travel-common/edu-travel-common-guava/src/main/java/edu/travel/guava/limiter/RateLimiterConfig.java

@@ -0,0 +1,15 @@
+package edu.travel.guava.limiter;
+
+import com.google.common.util.concurrent.RateLimiter;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import java.util.concurrent.TimeUnit;
+
+@Configuration
+public class RateLimiterConfig {
+    @Bean
+    public RateLimiter rateLimiter() {
+        return RateLimiter.create(1000, 1000, TimeUnit.MILLISECONDS);
+    }
+}

+ 14 - 0
edu-travel-common/edu-travel-common-guava/src/main/java/edu/travel/guava/limiter/RateLimiterUtils.java

@@ -0,0 +1,14 @@
+package edu.travel.guava.limiter;
+
+import com.google.common.util.concurrent.RateLimiter;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.concurrent.Callable;
+
+@Component
+public class RateLimiterUtils {
+    @Autowired
+    private RateLimiter rateLimiter;
+
+}

+ 14 - 0
edu-travel-common/edu-travel-common-resp/src/main/java/edu/travel/rpc/RPCBaseResponse.java

@@ -13,4 +13,18 @@ public class RPCBaseResponse<T> implements Serializable {
     private Integer code;
     private String msg;
     private T data;
+
+
+    public static <T> RPCBaseResponse<T> success(T data) {
+        return new RPCBaseResponse<>(0, "success", data);
+    }
+    public static <T> RPCBaseResponse<T> success() {
+        return new RPCBaseResponse<>(200, "success",null);
+    }
+    public static <T> RPCBaseResponse<T> success(String message) {
+        return new RPCBaseResponse<>(200, message, null);
+    }
+    public static <T> RPCBaseResponse<T> success(String message,T data) {
+        return new RPCBaseResponse<>(200, message, data);
+    }
 }

+ 1 - 0
edu-travel-common/pom.xml

@@ -27,6 +27,7 @@
         <module>edu-travel-common-debezium</module>
         <module>edu-travel-common-adapter</module>
         <module>edu-travel-kafka</module>
+        <module>edu-travel-common-guava</module>
     </modules>
 
     <properties>

+ 1 - 0
edu-travel-model/edu-travel-model-base/src/main/java/edu/travel/entity/BaseEntity.java

@@ -19,5 +19,6 @@ public class BaseEntity {
     @TableField(value = "update_user_id",fill = FieldFill.UPDATE)
     public String updateUserId;
     @TableField(value = "delete_flag",fill = FieldFill.INSERT)
+    @TableLogic(value = "0",delval = "1")
     public Integer deleteFlag;
 }

+ 0 - 14
edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/remote/BaseCountryServeRemoteController.java

@@ -1,14 +0,0 @@
-package edu.travel.remote;
-
-import edu.travel.dto.BaseCountryServeDto;
-import edu.travel.remote.base.RemoteBaseController;
-import edu.travel.rpc.RPCBaseResponse;
-import edu.travel.vo.BaseCountryServeVo;
-import org.springframework.cloud.openfeign.FeignClient;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-
-@FeignClient(path = "/baseCountryServe",name = "commodity")
-public interface BaseCountryServeRemoteController extends RemoteBaseController<BaseCountryServeVo, BaseCountryServeDto> {
-    
-}

+ 1 - 1
edu-travel-remote/edu-travel-remote-country/src/main/java/edu/travel/dto/BaseCountryDto.java

@@ -42,7 +42,7 @@ public class BaseCountryDto extends PagePO {
     /**
      * 国家区号
      */
-    private Integer areaCode;
+    private String areaCode;
     /**
      * 创建时间
      */

+ 109 - 0
edu-travel-remote/edu-travel-remote-country/src/main/java/edu/travel/dto/BaseCountryServeCurrencyDto.java

@@ -0,0 +1,109 @@
+package edu.travel.dto;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import edu.travel.po.PagePO;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 服务国家表
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class BaseCountryServeCurrencyDto extends PagePO {
+    /**
+     * ID
+     */
+    private Long id;
+
+    /**
+     * 所属洲
+     */
+    private Long parentId;
+
+    /**
+     * 关联国家id
+     */
+    private Long countryId;
+
+    /**
+     * 服务费比率
+     */
+    private BigDecimal serviceChargeValue;
+
+    /**
+     * 结算显示方式 -0 CNY100 -1 ¥100 -2 100RMB
+     */
+    private Integer payViewWay;
+
+    /**
+     * 中文国家/洲名称
+     */
+    private String countryNameZh;
+
+    /**
+     * 英文国家/洲名称
+     */
+    private String countryNameEn;
+
+    /**
+     * 本地国家/洲名称
+     */
+    private String countryNameLocal;
+
+    /**
+     * 服务状态,默认0,-0未开通,-1开通
+     */
+    private Integer serveEnable;
+
+
+    /**
+     * 货币表id
+     */
+    private Long currencyId;
+    /**
+     * 创建时间
+     */
+    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+
+    /**
+     * 更新时间
+     */
+    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date updateTime;
+    /**
+     * 货币名称_en
+     */
+    @TableField(value = "currency_name_en")
+    private String currencyNameEn;
+
+    /**
+     * 货币名称_zh
+     */
+    @TableField(value = "currency_name_zh")
+    private String currencyNameZh;
+
+    /**
+     * 货币代码
+     */
+    @TableField(value = "currency_code")
+    private String currencyCode;
+
+    /**
+     * 货币符号
+     * */
+    @TableField(value = "currency_symbol")
+    private String currencySymbol;
+    /**
+     * 货币单位
+     * */
+    @TableField(value = "currency_unit")
+    private String currencyUnit;
+}

+ 13 - 0
edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/dto/BaseCountryServeDto.java → edu-travel-remote/edu-travel-remote-country/src/main/java/edu/travel/dto/BaseCountryServeDto.java

@@ -1,11 +1,13 @@
 package edu.travel.dto;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import edu.travel.po.PagePO;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
 import java.math.BigDecimal;
+import java.util.Date;
 
 /**
  * 服务国家表
@@ -64,4 +66,15 @@ public class BaseCountryServeDto extends PagePO {
      * 货币表id
      */
     private Long currencyId;
+    /**
+     * 创建时间
+     */
+    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+
+    /**
+     * 更新时间
+     */
+    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date updateTime;
 }

+ 77 - 0
edu-travel-remote/edu-travel-remote-country/src/main/java/edu/travel/dto/ShopCurrencyDto.java

@@ -0,0 +1,77 @@
+package edu.travel.dto;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import edu.travel.entity.BaseEntity;
+import edu.travel.po.PagePO;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.Date;
+
+/**
+ * 货币表
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@TableName(value = "shop_currency")
+public class ShopCurrencyDto extends PagePO {
+    /**
+     * ID
+     */
+    @TableId(value = "id", type = IdType.ASSIGN_ID)
+    private Long id;
+
+    /**
+     * 货币名称_en
+     */
+    @TableField(value = "currency_name_en")
+    private String currencyNameEn;
+
+    /**
+     * 货币名称_zh
+     */
+    @TableField(value = "currency_name_zh")
+    private String currencyNameZh;
+
+    /**
+     * 货币代码
+     */
+    @TableField(value = "currency_code")
+    private String currencyCode;
+
+    /**
+     * 货币符号
+     * */
+    @TableField(value = "currency_symbol")
+    private String currencySymbol;
+    /**
+     * 货币单位
+     * */
+    @TableField(value = "currency_unit")
+    private String currencyUnit;
+
+    /**
+     * 状态 -0启用  -1禁用
+     * */
+    @TableField(value = "status")
+    private String status;
+    /**
+     * 创建时间
+     */
+    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+
+
+    /**
+     * 更新时间
+     */
+    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date updateTime;
+
+}

+ 60 - 0
edu-travel-remote/edu-travel-remote-country/src/main/java/edu/travel/entity/ShopCurrency.java

@@ -0,0 +1,60 @@
+package edu.travel.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * 货币表
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@TableName(value = "shop_currency")
+public class ShopCurrency extends BaseEntity {
+    /**
+     * ID
+     */
+    @TableId(value = "id", type = IdType.ASSIGN_ID)
+    private Long id;
+
+    /**
+     * 货币名称_en
+     */
+    @TableField(value = "currency_name_en")
+    private String currencyNameEn;
+
+    /**
+     * 货币名称_zh
+     */
+    @TableField(value = "currency_name_zh")
+    private String currencyNameZh;
+
+    /**
+     * 货币代码
+     */
+    @TableField(value = "currency_code")
+    private String currencyCode;
+
+    /**
+     * 货币符号
+     * */
+    @TableField(value = "currency_symbol")
+    private String currencySymbol;
+    /**
+     * 货币单位
+     * */
+    @TableField(value = "currency_unit")
+    private String currencyUnit;
+
+    /**
+     * 状态 -0启用  -1禁用
+     * */
+    @TableField(value = "status")
+    private String status;
+
+}

+ 2 - 2
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/mapper/ShopCurrencyMapper.java → edu-travel-remote/edu-travel-remote-country/src/main/java/edu/travel/mapper/ShopCurrencyMapper.java

@@ -1,7 +1,7 @@
-package edu.travel.commodity.mapper;
+package edu.travel.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import edu.travel.commodity.entity.ShopCurrency;
+import edu.travel.entity.ShopCurrency;
 
 public interface ShopCurrencyMapper extends BaseMapper<ShopCurrency> {
 }

+ 33 - 0
edu-travel-remote/edu-travel-remote-country/src/main/java/edu/travel/remote/BaseCountryServeRemoteController.java

@@ -0,0 +1,33 @@
+package edu.travel.remote;
+
+import edu.travel.dto.BaseCountryServeDto;
+import edu.travel.remote.base.RemoteBaseController;
+import edu.travel.rpc.RPCBaseResponse;
+import edu.travel.vo.BaseCountryServeVo;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+
+import java.util.List;
+
+@FeignClient(path = "/baseCountryServe",name = "commodity")
+public interface BaseCountryServeRemoteController extends RemoteBaseController<BaseCountryServeVo, BaseCountryServeDto> {
+    //服务国家树
+    @GetMapping("/getCountryServeTree")
+    public RPCBaseResponse<List<BaseCountryServeVo>> getCountryServeTree();
+    //获取服务国家信息
+    @GetMapping("/getCountryServeFormId")
+    public RPCBaseResponse<BaseCountryServeVo> getFormId(String id);
+    //更新服务国家信息
+    @GetMapping("/updateCountryServeFormId")
+    public RPCBaseResponse<BaseCountryServeVo> updateTargetFormId(@RequestBody BaseCountryServeDto entity);
+    //新增服务国家信息
+    @GetMapping("/saveCountryServeForm")
+    public RPCBaseResponse<BaseCountryServeVo> saveFormTarget(@RequestBody BaseCountryServeDto entity);
+    //删除服务国家信息
+    @GetMapping("/deleteCountryServeFormId")
+    public RPCBaseResponse<BaseCountryServeVo> deleteTargetFormId(@RequestBody List<String> ids);
+    //获取服务国家列表
+    @GetMapping("/listForm")
+    public RPCBaseResponse<List<BaseCountryServeVo>> getAllForm();
+}

+ 28 - 0
edu-travel-remote/edu-travel-remote-country/src/main/java/edu/travel/remote/ShopCurrencyRemoteController.java

@@ -0,0 +1,28 @@
+package edu.travel.remote;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import edu.travel.dto.ShopCurrencyDto;
+import edu.travel.remote.base.RemoteBaseController;
+import edu.travel.rpc.RPCBaseResponse;
+import edu.travel.vo.ShopCurrencyVo;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+
+import java.util.List;
+
+@FeignClient(path = "/shopCurrency",name = "commodity")
+public interface ShopCurrencyRemoteController extends RemoteBaseController<ShopCurrencyVo, ShopCurrencyDto> {
+    @GetMapping("/getCurrencyPage")
+    public RPCBaseResponse<IPage<ShopCurrencyVo>> getCurrencyPage(ShopCurrencyDto dto);
+    @GetMapping("/getCurrencyFormId")
+    public RPCBaseResponse<ShopCurrencyVo> getFormId(String id);
+    @PostMapping("/updateCurrencyFormId")
+    public RPCBaseResponse<ShopCurrencyVo> updateTargetFormId(ShopCurrencyDto entity);
+    @PostMapping("/saveCurrencyForm")
+    public RPCBaseResponse<ShopCurrencyVo> saveFormTarget(ShopCurrencyDto entity);
+    @PostMapping("/deleteCurrencyFormId")
+    public RPCBaseResponse<ShopCurrencyVo> deleteTargetFormId(List<String> ids);
+    @GetMapping("/listCurrencyForm")
+    public RPCBaseResponse<List<ShopCurrencyVo>> getAllForm();
+}

+ 111 - 0
edu-travel-remote/edu-travel-remote-country/src/main/java/edu/travel/vo/BaseCountryServeCurrencyVo.java

@@ -0,0 +1,111 @@
+package edu.travel.vo;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import edu.travel.entity.BaseEntity;
+import edu.travel.po.PagePO;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 服务国家货币表
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class BaseCountryServeCurrencyVo extends BaseEntity {
+    /**
+     * ID
+     */
+    private Long id;
+
+    /**
+     * 所属洲
+     */
+    private Long parentId;
+
+    /**
+     * 关联国家id
+     */
+    private Long countryId;
+
+    /**
+     * 服务费比率
+     */
+    private BigDecimal serviceChargeValue;
+
+    /**
+     * 结算显示方式 -0 CNY100 -1 ¥100 -2 100RMB
+     */
+    private Integer payViewWay;
+
+    /**
+     * 中文国家/洲名称
+     */
+    private String countryNameZh;
+
+    /**
+     * 英文国家/洲名称
+     */
+    private String countryNameEn;
+
+    /**
+     * 本地国家/洲名称
+     */
+    private String countryNameLocal;
+
+    /**
+     * 服务状态,默认0,-0未开通,-1开通
+     */
+    private Integer serveEnable;
+
+
+    /**
+     * 货币表id
+     */
+    private Long currencyId;
+    /**
+     * 创建时间
+     */
+    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+
+    /**
+     * 更新时间
+     */
+    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date updateTime;
+    /**
+     * 货币名称_en
+     */
+    @TableField(value = "currency_name_en")
+    private String currencyNameEn;
+
+    /**
+     * 货币名称_zh
+     */
+    @TableField(value = "currency_name_zh")
+    private String currencyNameZh;
+
+    /**
+     * 货币代码
+     */
+    @TableField(value = "currency_code")
+    private String currencyCode;
+
+    /**
+     * 货币符号
+     * */
+    @TableField(value = "currency_symbol")
+    private String currencySymbol;
+    /**
+     * 货币单位
+     * */
+    @TableField(value = "currency_unit")
+    private String currencyUnit;
+
+}

+ 20 - 1
edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/vo/BaseCountryServeVo.java → edu-travel-remote/edu-travel-remote-country/src/main/java/edu/travel/vo/BaseCountryServeVo.java

@@ -1,6 +1,9 @@
 package edu.travel.vo;
 
+import com.baomidou.mybatisplus.annotation.TableField;
+import edu.travel.annotation.LinkOne;
 import edu.travel.entity.BaseEntity;
+import edu.travel.mapper.ShopCurrencyMapper;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
@@ -8,6 +11,7 @@ import lombok.NoArgsConstructor;
 import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 
 /**
  * 服务国家表
@@ -67,7 +71,22 @@ public class BaseCountryServeVo extends BaseEntity {
      */
     private Long currencyId;
     /**
+     * 图片url
+     */
+    private String imageUrl;
+    /**
+     * 区号
+     */
+    private String areaCode;
+
+    /**
+     *map
+     */
+    @TableField(exist = false)
+    @LinkOne(linkField = "currencyId", linkMapper = ShopCurrencyMapper.class, linkPrimaryField = "id")
+    private Map<String, Object> map;
+    /**
      * 子类
      */
     private List<BaseCountryServeVo> children = new ArrayList<>();
-}
+}

+ 1 - 1
edu-travel-remote/edu-travel-remote-country/src/main/java/edu/travel/vo/BaseCountryVo.java

@@ -44,7 +44,7 @@ public class BaseCountryVo extends BaseEntity {
     /**
      * 国家区号
      */
-    private Integer areaCode;
+    private String areaCode;
     /**
      * 子类
      */

+ 60 - 0
edu-travel-remote/edu-travel-remote-country/src/main/java/edu/travel/vo/ShopCurrencyVo.java

@@ -0,0 +1,60 @@
+package edu.travel.vo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import edu.travel.entity.BaseEntity;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * 货币表
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@TableName(value = "shop_currency")
+public class ShopCurrencyVo extends BaseEntity {
+    /**
+     * ID
+     */
+    @TableId(value = "id", type = IdType.ASSIGN_ID)
+    private Long id;
+
+    /**
+     * 货币名称_en
+     */
+    @TableField(value = "currency_name_en")
+    private String currencyNameEn;
+
+    /**
+     * 货币名称_zh
+     */
+    @TableField(value = "currency_name_zh")
+    private String currencyNameZh;
+
+    /**
+     * 货币代码
+     */
+    @TableField(value = "currency_code")
+    private String currencyCode;
+
+    /**
+     * 货币符号
+     * */
+    @TableField(value = "currency_symbol")
+    private String currencySymbol;
+    /**
+     * 货币单位
+     * */
+    @TableField(value = "currency_unit")
+    private String currencyUnit;
+
+    /**
+     * 状态 -0启用  -1禁用
+     * */
+    @TableField(value = "status")
+    private String status;
+}

+ 5 - 1
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/constant/BaseConstant.java

@@ -14,5 +14,9 @@ public class BaseConstant {
     public static final Integer BASIC_STATUS_YES_NUM = 1;
     public static final String BASIC_STATUS_YES_STR = "1";
 
-
+    /**
+     * 删除标记 正常
+     */
+    public static final Integer BASIC_IS_DEFAULT_YES = 0;
+    public static final Integer BASIC_IS_DEFAULT_YES_NO = 1;
 }

+ 4 - 0
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/constant/RedisKey.java

@@ -9,4 +9,8 @@ public interface RedisKey {
    String PRODUCT_HOT_TYPE = BASH +"product:hot:type";
     /**热门二级商品类型*/
    String PRODUCT_TO_HOT_TYPE = BASH +"product:to:hot:type";
+    /**
+     * 加上国家
+     */
+
 }

+ 16 - 0
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/dto/SearchProductDto.java

@@ -0,0 +1,16 @@
+package edu.travel.commodity.dto;
+
+import lombok.Data;
+
+/**
+ * 类功能描述:
+ *  收拾商品
+ * @author 大春
+ * @date 2025/03/03
+ */
+
+@Data
+public class SearchProductDto extends BaseDto{
+    /**搜索关键词*/
+    private String searchKeyword;
+}

+ 9 - 0
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/dto/SearchRecordListDto.java

@@ -0,0 +1,9 @@
+package edu.travel.commodity.dto;
+
+import lombok.Data;
+
+@Data
+public class SearchRecordListDto extends BaseDto{
+    /**模块*/
+    private String searchType;
+}

+ 6 - 0
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/entity/ShopFavorite.java

@@ -5,7 +5,10 @@ import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import java.util.Date;
+import java.util.Map;
 
+import edu.travel.annotation.LinkOne;
+import edu.travel.commodity.mapper.ShopProductMapper;
 import edu.travel.entity.BaseEntity;
 import lombok.AllArgsConstructor;
 import lombok.Data;
@@ -37,4 +40,7 @@ public class ShopFavorite extends BaseEntity {
     @TableField(value = "product_id")
     private Long productId;
 
+    @TableField(exist = false)
+    @LinkOne(linkField="productId",linkMapper= ShopProductMapper.class,linkPrimaryField="id")
+    private Map<String,Object> productIdMap;
 }

+ 1 - 1
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/entity/ShopProduct.java

@@ -87,7 +87,7 @@ public class ShopProduct extends BaseEntity {
     private Long warehouseId;
 
     /**
-     * 0 上架 1 下架
+     * 国家ID
      */
     @TableField(value = "`country_id`")
     private Integer countryId;

+ 5 - 1
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/entity/ShopProductImage.java

@@ -54,6 +54,10 @@ public class ShopProductImage extends BaseEntity {
      */
     @TableField(value = "sort_order")
     private Integer sortOrder;
-
+    /**
+     * 是否默认列表
+     */
+    @TableField(value = "is_default")
+    private Integer isDefault;
 
 }

+ 6 - 1
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/entity/ShopProductSku.java

@@ -85,9 +85,14 @@ public class ShopProductSku extends BaseEntity {
     @TableField(value = "barcodes")
     private Integer barcodes;
     /**
-     * 条码
+     * 成本价格
      */
     @TableField(value = "cost_price")
     private BigDecimal costPrice;
+    /**
+     * 计件单位id
+     */
+    @TableField(value = "unit_id")
+    private Long unitId;
 
 }

+ 0 - 5
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/entity/ShopSpecValue.java

@@ -43,10 +43,5 @@ public class ShopSpecValue extends BaseEntity {
     @TableField(value = "sort_order")
     private String sortOrder;
 
-    /**
-     * 商品ID
-     */
-    @TableField(value = "product_id")
-    private String productId;
 
 }

+ 20 - 0
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/enums/SearchType.java

@@ -0,0 +1,20 @@
+package edu.travel.commodity.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * 类功能描述:
+ *  搜索历史模块类型
+ * @author 大春
+ * @date 2025/03/03
+ */
+@Getter
+@AllArgsConstructor
+public enum SearchType {
+    HOME_PAGE("首页",1);
+
+    private final String name;
+    private final Integer code;
+
+}

+ 2 - 0
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/mapper/ShopProductSkuMapper.java

@@ -3,5 +3,7 @@ package edu.travel.commodity.mapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import edu.travel.commodity.entity.ShopProductSku;
 
+
 public interface ShopProductSkuMapper extends BaseMapper<ShopProductSku> {
+
 }

+ 6 - 0
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/mapper/ShopProductSpecMapper.java

@@ -2,6 +2,12 @@ package edu.travel.commodity.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import edu.travel.commodity.entity.ShopProductSpec;
+import edu.travel.commodity.vo.ShopSkuSpecValueVo;
+
+import java.util.List;
+import java.util.Set;
 
 public interface ShopProductSpecMapper extends BaseMapper<ShopProductSpec> {
+
+    List<ShopSkuSpecValueVo> getSkuValue(Set<String> skus,String project);
 }

+ 0 - 14
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/BaseCountryServeService.java

@@ -1,14 +0,0 @@
-package edu.travel.commodity.service;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import edu.travel.commodity.entity.BaseCountryServe;
-import com.baomidou.mybatisplus.extension.service.IService;
-import edu.travel.dto.BaseCountryServeDto;
-import edu.travel.rpc.RPCBaseResponse;
-import edu.travel.vo.BaseCountryServeVo;
-
-public interface BaseCountryServeService extends IService<BaseCountryServe>{
-
-
-    RPCBaseResponse<IPage<BaseCountryServeVo>> getCountryServePage(BaseCountryServeDto dto);
-}

+ 3 - 2
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/ShopCategoryService.java

@@ -7,10 +7,11 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import edu.travel.commodity.vo.ShopTypeVo;
 
 import java.util.List;
+import java.util.concurrent.ExecutionException;
 
 public interface ShopCategoryService extends IService<ShopCategory>{
 
-    List<ShopTypeVo> getShopType(ShopTypeDto param);
+    List<ShopTypeVo> getShopType(ShopTypeDto param) throws ExecutionException;
 
-    List<ShopTypeVo> getLevelToShopType(BaseDto param);
+    List<ShopTypeVo> getLevelToShopType(BaseDto param) throws ExecutionException;
 }

+ 0 - 8
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/ShopCurrencyService.java

@@ -1,8 +0,0 @@
-package edu.travel.commodity.service;
-
-import edu.travel.commodity.entity.ShopCurrency;
-import com.baomidou.mybatisplus.extension.service.IService;
-public interface ShopCurrencyService extends IService<ShopCurrency>{
-
-
-}

+ 7 - 0
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/ShopFavoriteService.java

@@ -1,8 +1,15 @@
 package edu.travel.commodity.service;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import edu.travel.commodity.dto.BaseDto;
 import edu.travel.commodity.entity.ShopFavorite;
 import com.baomidou.mybatisplus.extension.service.IService;
+import edu.travel.commodity.vo.ShopFavoriteVo;
+import edu.travel.commodity.vo.ShopProductVo;
+
 public interface ShopFavoriteService extends IService<ShopFavorite>{
 
 
+    Page<ShopFavoriteVo> getFavorite(BaseDto baseDto);
+
 }

+ 0 - 8
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/ShopLanguageService.java

@@ -1,8 +0,0 @@
-package edu.travel.commodity.service;
-
-import edu.travel.commodity.entity.ShopLanguage;
-import com.baomidou.mybatisplus.extension.service.IService;
-public interface ShopLanguageService extends IService<ShopLanguage>{
-
-
-}

+ 5 - 2
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/ShopProductService.java

@@ -1,13 +1,16 @@
 package edu.travel.commodity.service;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import edu.travel.commodity.dto.GetProductByTypeDto;
+import edu.travel.commodity.dto.SearchProductDto;
 import edu.travel.commodity.entity.ShopProduct;
 import com.baomidou.mybatisplus.extension.service.IService;
 import edu.travel.commodity.vo.ShopProductVo;
 
-import java.util.List;
 
 public interface ShopProductService extends IService<ShopProduct>{
 
-    List<ShopProductVo> getHotProduct(GetProductByTypeDto param);
+    Page<ShopProductVo> getHotProduct(GetProductByTypeDto param);
+
+    Page<ShopProductVo> searchProduct(SearchProductDto param);
 }

+ 3 - 3
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/ShopProductSkuService.java

@@ -2,7 +2,7 @@ package edu.travel.commodity.service;
 
 import edu.travel.commodity.entity.ShopProductSku;
 import com.baomidou.mybatisplus.extension.service.IService;
-import edu.travel.commodity.vo.SpecValueVo;
+import edu.travel.commodity.vo.ShopSkuSpecValueVo;
 
 import java.util.List;
 import java.util.Map;
@@ -10,7 +10,7 @@ import java.util.Set;
 
 public interface ShopProductSkuService extends IService<ShopProductSku>{
 
-    Map<String,List<SpecValueVo>> getSkuValuesById(Set<String> skuId);
+    Map<String, List<ShopSkuSpecValueVo>> getSkuValuesById(Set<String> skuId);
+
 
-    Map<String,List<SpecValueVo>> getShopProductSkuId(Set<String> shopProductSkuId);
 }

+ 0 - 2
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/ShopProductSpecService.java

@@ -5,8 +5,6 @@ import edu.travel.commodity.entity.ShopProductSpec;
 import com.baomidou.mybatisplus.extension.service.IService;
 import edu.travel.commodity.vo.ProductSpecVo;
 
-import java.util.List;
-
 public interface ShopProductSpecService extends IService<ShopProductSpec>{
 
 

+ 7 - 0
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/ShopSearchRecordsService.java

@@ -1,8 +1,15 @@
 package edu.travel.commodity.service;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import edu.travel.commodity.dto.SearchRecordListDto;
 import edu.travel.commodity.entity.ShopSearchRecords;
 import com.baomidou.mybatisplus.extension.service.IService;
+import edu.travel.commodity.vo.SearchRecordsVo;
+
 public interface ShopSearchRecordsService extends IService<ShopSearchRecords>{
 
 
+    void clearSearchRecords(SearchRecordListDto baseDto);
+
+    Page<SearchRecordsVo> searchRecordList(SearchRecordListDto baseDto);
 }

+ 1 - 4
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/impl/ShopAddressServiceImpl.java

@@ -14,16 +14,13 @@ import edu.travel.commodity.service.ShopAddressService;
 import edu.travel.commodity.utils.PageUtil;
 import edu.travel.commodity.utils.TokenData;
 import edu.travel.commodity.vo.ShopAddressVo;
-import edu.travel.remote.BaseCountryRemoteController;
 import org.springframework.stereotype.Service;
 
-import javax.annotation.Resource;
 
 
 @Service
 public class ShopAddressServiceImpl extends ServiceImpl<ShopAddressMapper, ShopAddress> implements ShopAddressService {
-    @Resource
-    private BaseCountryRemoteController baseCountryRemoteController;
+
     @Override
     public Page<ShopAddressVo> getShopAddress(BaseDto dto) {
         //当前登录对象

+ 5 - 5
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/impl/ShopCategoryServiceImpl.java

@@ -38,7 +38,7 @@ public class ShopCategoryServiceImpl extends ServiceImpl<ShopCategoryMapper, Sho
         }else {
             redisKey=RedisKey.PRODUCT_TYPE;
         }
-        String string = redisUtil.getString(redisKey);
+        String string = redisUtil.getString(redisKey+shopTypeDto.getCountryId());
         if(!ObjectUtil.isEmpty(string)){
             JSONArray objects = JSONUtil.parseArray(string);
             return JSONUtil.toList(objects, ShopTypeVo.class);
@@ -69,16 +69,16 @@ public class ShopCategoryServiceImpl extends ServiceImpl<ShopCategoryMapper, Sho
         }
         if(shopTypeDto.getIsHeat().equals(BaseConstant.BASIC_STATUS_NO_STR)){
             //24小时热门过期
-            redisUtil.setString(RedisKey.PRODUCT_TYPE,JSONUtil.toJsonStr(parent),24*60*60*60, TimeUnit.SECONDS);
+            redisUtil.setString(RedisKey.PRODUCT_HOT_TYPE+shopTypeDto.getCountryId(),JSONUtil.toJsonStr(parent),24*60*60*60, TimeUnit.SECONDS);
         }else {
-            redisUtil.setString(RedisKey.PRODUCT_TYPE,JSONUtil.toJsonStr(parent));
+            redisUtil.setString(RedisKey.PRODUCT_TYPE+shopTypeDto.getCountryId(),JSONUtil.toJsonStr(parent));
         }
         return parent;
     }
 
     @Override
     public List<ShopTypeVo> getLevelToShopType(BaseDto param) {
-        String string = redisUtil.getString(RedisKey.PRODUCT_TO_HOT_TYPE);
+        String string = redisUtil.getString(RedisKey.PRODUCT_TO_HOT_TYPE+param.getCountryId());
         if(!ObjectUtil.isEmpty(string)){
             JSONArray objects = JSONUtil.parseArray(string);
             return JSONUtil.toList(objects, ShopTypeVo.class);
@@ -93,7 +93,7 @@ public class ShopCategoryServiceImpl extends ServiceImpl<ShopCategoryMapper, Sho
         }
         List<ShopTypeVo> parent = BeanUtil.copyToList(list, ShopTypeVo.class);
         //24小时热门过期
-        redisUtil.setString(RedisKey.PRODUCT_TO_HOT_TYPE,JSONUtil.toJsonStr(parent),24*60*60*60, TimeUnit.SECONDS);
+        redisUtil.setString(RedisKey.PRODUCT_TO_HOT_TYPE+param.getCountryId(),JSONUtil.toJsonStr(parent),24*60*60*60, TimeUnit.SECONDS);
         return parent;
     }
 }

+ 0 - 12
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/impl/ShopCurrencyServiceImpl.java

@@ -1,12 +0,0 @@
-package edu.travel.commodity.service.impl;
-
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import edu.travel.commodity.entity.ShopCurrency;
-import edu.travel.commodity.mapper.ShopCurrencyMapper;
-import edu.travel.commodity.service.ShopCurrencyService;
-import org.springframework.stereotype.Service;
-
-@Service
-public class ShopCurrencyServiceImpl extends ServiceImpl<ShopCurrencyMapper, ShopCurrency> implements ShopCurrencyService {
-
-}

+ 59 - 2
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/impl/ShopFavoriteServiceImpl.java

@@ -1,12 +1,69 @@
 package edu.travel.commodity.service.impl;
 
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import edu.travel.commodity.dto.BaseDto;
 import edu.travel.commodity.entity.ShopFavorite;
+import edu.travel.commodity.entity.ShopProduct;
 import edu.travel.commodity.mapper.ShopFavoriteMapper;
 import edu.travel.commodity.service.ShopFavoriteService;
+import edu.travel.commodity.service.ShopProductService;
+import edu.travel.commodity.utils.PageUtil;
+import edu.travel.commodity.utils.TokenData;
+import edu.travel.commodity.vo.ShopFavoriteVo;
+import edu.travel.commodity.vo.ShopProductVo;
+import edu.travel.service.SysServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+
 @Service
-public class ShopFavoriteServiceImpl extends ServiceImpl<ShopFavoriteMapper, ShopFavorite> implements ShopFavoriteService {
+public class ShopFavoriteServiceImpl extends SysServiceImpl<ShopFavoriteMapper, ShopFavorite> implements ShopFavoriteService {
+    @Autowired
+    private ShopProductService shopProductService;
+
+    @Override
+    public Page<ShopFavoriteVo> getFavorite(BaseDto baseDto) {
+        String userId = TokenData.getUserId();
+        LambdaQueryWrapper<ShopFavorite> query = Wrappers.<ShopFavorite>lambdaQuery()
+                .eq(ShopFavorite::getUserId, userId).orderByDesc(ShopFavorite::getCreateTime);
+        Page<ShopFavorite> page = page(new Page<>(baseDto.getCurrentPage(), baseDto.getPageSize()), query);
+        Page<ShopFavoriteVo> pageEntity = PageUtil.toPageEntity(page, ShopFavoriteVo.class);
+        List<ShopFavoriteVo> records = pageEntity.getRecords();
+        if(ObjectUtil.isEmpty(records)){
+            return pageEntity;
+        }
+        //商品Ids
+        Set<String> productIds = records.stream().map(ShopFavoriteVo::getProductId).collect(Collectors.toSet());
 
+        List<ShopProduct> shopProducts = shopProductService.getBaseMapper().selectBatchIds(productIds);
+        Map<String, ShopProduct> map = new HashMap<>();
+        for (ShopProduct shopProduct : shopProducts) {
+            map.put(shopProduct.getId().toString(), shopProduct);
+        }
+        //填充商品详情信息
+        for (ShopFavoriteVo shopProductVo : records) {
+            ShopProduct shopProduct = map.get(shopProductVo.getProductId());
+            if(!ObjectUtil.isEmpty(shopProduct)){
+                shopProductVo.setProductName(shopProduct.getProductName());
+                shopProductVo.setDescription(shopProduct.getDescription());
+                shopProductVo.setMainImageUrl(shopProduct.getDescription());
+                shopProductVo.setHeatValue(shopProduct.getHeatValue());
+                shopProductVo.setSalesVolume(shopProduct.getSalesVolume());
+                shopProductVo.setDefaultPrice(shopProduct.getDefaultPrice());
+                shopProductVo.setScoring(shopProduct.getScoring());
+                shopProductVo.setCountryId(shopProduct.getCountryId().toString());
+            }
+        }
+        return pageEntity;
+    }
 }

+ 0 - 13
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/impl/ShopLanguageServiceImpl.java

@@ -1,13 +0,0 @@
-package edu.travel.commodity.service.impl;
-
-
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import edu.travel.commodity.entity.ShopLanguage;
-import edu.travel.commodity.mapper.ShopLanguageMapper;
-import edu.travel.commodity.service.ShopLanguageService;
-import org.springframework.stereotype.Service;
-
-@Service
-public class ShopLanguageServiceImpl extends ServiceImpl<ShopLanguageMapper, ShopLanguage> implements ShopLanguageService {
-
-}

+ 1 - 1
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/impl/ShopOpinionTypeServiceImpl.java

@@ -1,4 +1,4 @@
-package edu.travel.commodity.serviceImpl;
+package edu.travel.commodity.service.impl;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import edu.travel.commodity.entity.ShopOpinionType;

+ 4 - 1
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/impl/ShopParametersServiceImpl.java

@@ -9,6 +9,7 @@ import edu.travel.commodity.entity.ShopProductParameters;
 import edu.travel.commodity.mapper.ShopParametersMapper;
 import edu.travel.commodity.service.ShopParametersService;
 import edu.travel.commodity.service.ShopProductParametersService;
+import edu.travel.commodity.service.ShopProductService;
 import edu.travel.commodity.utils.PageUtil;
 import edu.travel.commodity.vo.ShopParametersVo;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -23,6 +24,8 @@ import java.util.stream.Collectors;
 public class ShopParametersServiceImpl extends ServiceImpl<ShopParametersMapper, ShopParameters> implements ShopParametersService {
     @Autowired
     private ShopProductParametersService shopProductParametersService;
+    @Autowired
+    private ShopProductService shopProductService;
     @Override
     public Page<ShopParametersVo> getShopParameters(ProductSpecDto param) {
         Page<ShopProductParameters> page = shopProductParametersService.lambdaQuery().eq(ShopProductParameters::getProductId, param.getProductId())
@@ -44,7 +47,7 @@ public class ShopParametersServiceImpl extends ServiceImpl<ShopParametersMapper,
         //封装返回结果
         for (ShopParametersVo shopParametersVo : list) {
             ShopParameters shopParameters = map.get(shopParametersVo.getParametersId());
-            if(!ObjectUtil.isNotEmpty(shopParameters)){
+            if(ObjectUtil.isNotEmpty(shopParameters)){
                 shopParametersVo.setParametersName(shopParameters.getParametersName());
                 shopParametersVo.setIsNecessary(shopParameters.getIsNecessary());
             }

+ 22 - 7
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/impl/ShopProductServiceImpl.java

@@ -1,26 +1,41 @@
 package edu.travel.commodity.service.impl;
 
 import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import edu.travel.commodity.constant.BaseConstant;
 import edu.travel.commodity.dto.GetProductByTypeDto;
+import edu.travel.commodity.dto.SearchProductDto;
 import edu.travel.commodity.entity.ShopProduct;
 import edu.travel.commodity.mapper.ShopProductMapper;
 import edu.travel.commodity.service.ShopProductService;
+import edu.travel.commodity.utils.PageUtil;
 import edu.travel.commodity.vo.ShopProductVo;
 import org.springframework.stereotype.Service;
 
-import java.util.List;
-
 @Service
 public class ShopProductServiceImpl extends ServiceImpl<ShopProductMapper, ShopProduct> implements ShopProductService {
 
     @Override
-    public List<ShopProductVo> getHotProduct(GetProductByTypeDto type) {
-        List<ShopProduct> list = lambdaQuery().eq(ShopProduct::getCategoryId, type.getType())
+    public Page<ShopProductVo> getHotProduct(GetProductByTypeDto type) {
+        LambdaQueryWrapper<ShopProduct> query = Wrappers.<ShopProduct>lambdaQuery()
                 .eq(ShopProduct::getStatus, BaseConstant.BASIC_STATUS_NO_NUM)
-                .eq(ShopProduct::getCountryId, type.getCountryId())
-                .orderByDesc(ShopProduct::getHeatValue).list();
-        return BeanUtil.copyToList(list, ShopProductVo.class);
+                .eq(ShopProduct::getCountryId, type.getCountryId());
+
+        if(!ObjectUtil.isEmpty(type.getType())){
+            query.eq(ShopProduct::getCategoryId, type.getType());
+        }
+        query.orderByDesc(ShopProduct::getHeatValue);
+        Page<ShopProduct> shopProductPage = baseMapper.selectPage(new Page<ShopProduct>(type.getCurrentPage(), type.getPageSize()), query);
+
+        return PageUtil.toPageEntity(shopProductPage, ShopProductVo.class);
+    }
+
+    @Override
+    public Page<ShopProductVo> searchProduct(SearchProductDto param) {
+        return null;
     }
 }

+ 17 - 70
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/impl/ShopProductSkuServiceImpl.java

@@ -2,92 +2,39 @@ package edu.travel.commodity.service.impl;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import edu.travel.commodity.entity.ShopProductSku;
-import edu.travel.commodity.entity.ShopSkuSpecValue;
-import edu.travel.commodity.entity.ShopSpec;
-import edu.travel.commodity.entity.ShopSpecValue;
 import edu.travel.commodity.mapper.ShopProductSkuMapper;
+import edu.travel.commodity.mapper.ShopProductSpecMapper;
 import edu.travel.commodity.service.ShopProductSkuService;
-import edu.travel.commodity.service.ShopSkuSpecValueService;
-import edu.travel.commodity.service.ShopSpecService;
-import edu.travel.commodity.service.ShopSpecValueService;
-import edu.travel.commodity.vo.SpecValueVo;
+import edu.travel.commodity.vo.ShopSkuSpecValueVo;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
 
+import javax.servlet.http.HttpServletRequest;
 import java.util.*;
 import java.util.stream.Collectors;
 
 @Service
 public class ShopProductSkuServiceImpl extends ServiceImpl<ShopProductSkuMapper, ShopProductSku> implements ShopProductSkuService {
 
+
     @Autowired
-    private ShopProductSkuService shopProductSkuService;
-    @Autowired
-    private ShopSkuSpecValueService shopSkuSpecValueService;
-    @Autowired
-    private ShopSpecValueService shopSpecValueService;
-    @Autowired
-    private ShopSpecService shopSpecService;
-    @Override
-    public Map<String,List<SpecValueVo>> getSkuValuesById(Set<String> skuId) {
-        List<ShopSkuSpecValue> shopSkuSpecValues = shopSkuSpecValueService.listByIds(skuId);
-        //规格值ID
-        Set<Long> collect1 = shopSkuSpecValues.stream().map(ShopSkuSpecValue::getSpecValueId).collect(Collectors.toSet());
-        //规格值对象
-        List<ShopSpecValue> shopSpecValues = shopSpecValueService.listByIds(collect1);
-        //规格ID
-        Set<Long> collect2 = shopSpecValues.stream().map(ShopSpecValue::getSpecId).collect(Collectors.toSet());
-        //规格对象
-        List<ShopSpec> shopSpecs = shopSpecService.listByIds(collect2);
-        HashMap<String, ShopSpec> specs = new HashMap<>();
-        for (ShopSpec shopSpec : shopSpecs) {
-            specs.put(shopSpec.getId().toString(),shopSpec);
-        }
-        HashMap<String, List<SpecValueVo>> map = new HashMap<>();
-        for (String s : skuId) {
-            ArrayList<SpecValueVo> list = new ArrayList<>();
-            //当前sku拥有的规格值Ids
-            List<String> collect = shopSkuSpecValues.stream().filter(item -> item.getSkuId().toString().equals(s)).map(item -> item.getSpecValueId().toString()).collect(Collectors.toList());
-            List<ShopSpecValue> collect3 = shopSpecValues.stream().filter(item -> collect.contains(item.getId().toString())).collect(Collectors.toList());
-            for (ShopSpecValue string : collect3) {
-                SpecValueVo specValueVo = new SpecValueVo();
-                specValueVo.setValueId(string.getId().toString());
-                specValueVo.setValue(string.getSpecValue());
-                specValueVo.setKeyId(string.getSpecId().toString());
-                ShopSpec shopSpec1 = specs.get(string.getSpecId().toString());
-                specValueVo.setKey(shopSpec1.getSpecName());
-                list.add(specValueVo);
-            }
-            map.put(s,list);
-        }
-        return map;
-    }
+    private ShopProductSpecMapper shopProductSpecMapper;
 
     /**
-     *  商品和sku关联表ID  ->sku详情
-     * @param shopProductSkuIds 商品和sku关联表ID
-     * @return {@link Map }<{@link String },{@link SpecValueVo }>
+     *  查询SKU下的规格和对应的规格值 规格 排序  规格值排序
+     *  sku -> 规格 ->规格值
+     * @param skuId
+     * @return {@link Map }<{@link String },{@link List }<{@link SpecVo }>>
      */
     @Override
-    public Map<String,List<SpecValueVo>> getShopProductSkuId(Set<String> shopProductSkuIds) {
-        List<ShopProductSku> shopProductSkus = shopProductSkuService.listByIds(shopProductSkuIds);
-        //sku ids
-        Set<String> collect = shopProductSkus.stream().map(item->item.getSkuId().toString()).collect(Collectors.toSet());
-        //shopProductSkuIds ->sku
-        HashMap<String, String> stringStringHashMap = new HashMap<>();
-        for (ShopProductSku productSkus : shopProductSkus) {
-            stringStringHashMap.put(productSkus.getId().toString(),productSkus.getSkuId().toString());
-        }
-
-        Map<String, List<SpecValueVo>> map = getSkuValuesById(collect);
+    public Map<String, List<ShopSkuSpecValueVo>> getSkuValuesById(Set<String> skuId) {
+        HttpServletRequest request = ((ServletRequestAttributes) (RequestContextHolder.currentRequestAttributes())).getRequest();
+        String project = request.getHeader("project");
+        List<ShopSkuSpecValueVo> list = shopProductSpecMapper.getSkuValue(skuId, project);
+        return  list.stream().collect(Collectors.groupingBy(ShopSkuSpecValueVo::getSkuId));
+    }
 
-        HashMap<String, List<SpecValueVo>> result = new HashMap<>();
-        for (String shopProductSkuId : shopProductSkuIds) {
-            String skuId = stringStringHashMap.get(shopProductSkuId);
-            List<SpecValueVo> specValueVos = map.get(skuId);
-            result.put(shopProductSkuId,specValueVos);
-        }
 
-        return result;
-    }
 }

+ 58 - 54
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/impl/ShopProductSpecServiceImpl.java

@@ -2,6 +2,7 @@ package edu.travel.commodity.service.impl;
 
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -10,13 +11,13 @@ import edu.travel.commodity.dto.ProductSpecDto;
 import edu.travel.commodity.entity.*;
 import edu.travel.commodity.mapper.ShopProductSpecMapper;
 import edu.travel.commodity.service.*;
-import edu.travel.commodity.vo.ProductSkuVo;
-import edu.travel.commodity.vo.ProductSpecVo;
-import edu.travel.commodity.vo.SpecSortVo;
-import edu.travel.commodity.vo.SpecValueVo;
+import edu.travel.commodity.vo.*;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
 
+import javax.servlet.http.HttpServletRequest;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -29,21 +30,22 @@ public class ShopProductSpecServiceImpl extends ServiceImpl<ShopProductSpecMappe
     @Autowired
     private ShopProductSkuService shopProductSkuService;
     @Autowired
-    private ShopSkuSpecValueService shopSkuSpecValueService;
-    @Autowired
-    private ShopSpecService shopSpecService;
+    private ShopProductImageService shopProductImageService;
     @Autowired
     private ShopProductSpecService shopProductSpecService;
+    @Autowired
+    private ShopProductSpecMapper shopProductSpecMapper;
 
     @Override
     public ProductSpecVo getShopSpec(ProductSpecDto param) {
-        LambdaQueryChainWrapper<ShopProduct> query = shopProductService.lambdaQuery().eq(ShopProduct::getId, param.getProductId())
+        LambdaQueryWrapper<ShopProduct> query =  Wrappers.<ShopProduct>lambdaQuery().eq(ShopProduct::getId, param.getProductId())
                 .eq(ShopProduct::getCountryId, param.getCountryId());
         //商品信息
         ShopProduct one = shopProductService.getOne(query);
         if(ObjectUtil.isEmpty(one)){
             return null;
         }
+
         List<ShopProductSku> list1 = shopProductSkuService.list(Wrappers.<ShopProductSku>lambdaQuery()
                 .eq(ShopProductSku::getStatus, BaseConstant.BASIC_STATUS_NO_NUM)
                 .eq(ShopProductSku::getProductId, one.getId()));
@@ -51,59 +53,61 @@ public class ShopProductSpecServiceImpl extends ServiceImpl<ShopProductSpecMappe
         if(ObjectUtil.isEmpty(list1)){
             return null;
         }
+
         ProductSpecVo bean = BeanUtil.toBean(one, ProductSpecVo.class);
+        //商品的全部图片
+        List<ShopProductImage> list = shopProductImageService.lambdaQuery()
+                .eq(ShopProductImage::getProductId, one.getId()).list();
+        List<ProductImageVo> productImageVos = BeanUtil.copyToList(list, ProductImageVo.class);
+
+        List<ProductImageVo> collect = productImageVos.stream().filter(item -> item.getIsDefault().equals(BaseConstant.BASIC_IS_DEFAULT_YES)).collect(Collectors.toList());
+        bean.setImages(collect);
+
+        Map<String, List<ProductImageVo>> imageMap = collect.stream().collect(Collectors.groupingBy(ProductImageVo::getSkuId));
         //SKU
-        Set<Long> skus = list1.stream().map(ShopProductSku::getSkuId).collect(Collectors.toSet());
-        //规格和规格对应的值
-        List<ShopSkuSpecValue> skuValues = shopSkuSpecValueService.lambdaQuery().eq(ShopSkuSpecValue::getSkuId, skus).list();
-        //规格值ID
-        Set<Long> collect = skuValues.stream().map(ShopSkuSpecValue::getSpecValueId).collect(Collectors.toSet());
-        List<ShopSpecValue> list2 = shopSpecValueService.list(Wrappers.<ShopSpecValue>lambdaQuery()
-                .orderByAsc(ShopSpecValue::getSortOrder)
-                .in(ShopSpecValue::getId, collect));
-
-        //规格ID
-        List<ShopProductSpec> list = shopProductSpecService.lambdaQuery().eq(ShopProductSpec::getProductId, one.getId())
-                .orderByAsc(ShopProductSpec::getSortOrder).list();
-        Set<Long> collect3 = list.stream().map(ShopProductSpec::getSpecId).collect(Collectors.toSet());
-        Map<String, ShopSpec> specs = new HashMap<>();
-        List<ShopSpec> list11 = shopSpecService.lambdaQuery().in(ShopSpec::getId, collect3).list();
-
-        for (ShopSpec spec : list11) {
-            specs.put(spec.getId().toString(), spec);
-        }
-        List<SpecSortVo> specSortVoList = new ArrayList<>();
-        for (ShopProductSpec shopProductSpec : list) {
-            SpecSortVo specSortVo = new SpecSortVo();
-            specSortVo.setId(shopProductSpec.getSpecId().toString());
-            specSortVo.setSpecName(shopProductSpec.getSpecName());
-        }
+        Set<String> skus = list1.stream().map(item->item.getSkuId().toString()).collect(Collectors.toSet());
 
-        bean.setSpecSortVoList(specSortVoList);
+        HttpServletRequest request = ((ServletRequestAttributes) (RequestContextHolder.currentRequestAttributes())).getRequest();
+        String project = request.getHeader("project");
+
+        //sku规格和规格对应的值
+        List<ShopSkuSpecValueVo> skuValue=shopProductSpecMapper.getSkuValue(skus,project);
+        Map<String, List<ShopSkuSpecValueVo>> map = skuValue.stream().collect(Collectors.groupingBy(ShopSkuSpecValueVo::getSkuId));
 
-        Set<Long> skuIds = skuValues.stream().map(ShopSkuSpecValue::getSkuId).collect(Collectors.toSet());
-        //SKU -> ShopSpecValue
         ArrayList<ProductSkuVo> productSkuVos = new ArrayList<>();
-        for (Long skuId : skuIds) {
-            List<Long> collect2 = skuValues.stream().filter(item -> item.getSkuId().equals(skuId)).map(ShopSkuSpecValue::getSpecValueId).collect(Collectors.toList());
-            List<ShopSpecValue> collect1 = list2.stream().filter(item -> collect2.contains(item.getId())).collect(Collectors.toList());
-
-            ProductSkuVo productSkuVo = new ProductSkuVo();
-            List<SpecValueVo> specValueVos = new ArrayList<>();
-            for (ShopSpecValue shopSpecValue : collect1) {
-                SpecValueVo specValueVo = new SpecValueVo();
-//                ShopSpec shopSpec = specs.get(shopSpecValue.getSpecId().toString());
-//                specValueVo.setKeyId(shopSpecValue.getSpecId().toString());
-//                specValueVo.setKey(shopSpec.getSpecName());
-                specValueVo.setValueId(shopSpecValue.getId().toString());
-                specValueVo.setValue(shopSpecValue.getSpecValue());
-                specValueVos.add(specValueVo);
-            }
-            productSkuVo.setSpecValue(specValueVos);
-            productSkuVos.add(productSkuVo);
+        for (ShopProductSku info : list1) {
+            ProductSkuVo infoVo = BeanUtil.toBean(info, ProductSkuVo.class);
+            infoVo.setDescription(one.getDescription());
+            infoVo.setProductName(one.getProductName());
+            bean.setImages(imageMap.get(info.getSkuId().toString()));
+            List<ShopSkuSpecValueVo> shopSkuSpecValueVos = map.get(info.getSkuId().toString());
+            infoVo.setSpecValue(shopSkuSpecValueVos);
+            productSkuVos.add(infoVo);
         }
+        List<SpecSortVo> specSortVoList= getSpecSortVoList(param.getProductId());
+        bean.setSpecSortVoList(specSortVoList);
         bean.setSkuList(productSkuVos);
-
         return bean;
     }
+
+
+    public  List<SpecSortVo> getSpecSortVoList(String productId){
+        List<ShopProductSpec> specs = shopProductSpecService.lambdaQuery().eq(ShopProductSpec::getProductId, productId).orderByAsc(ShopProductSpec::getSortOrder).list();
+        List<SpecSortVo> list = BeanUtil.copyToList(specs, SpecSortVo.class);
+        if(ObjectUtil.isEmpty(list)){
+            return list;
+        }
+        Set<Long> collect = specs.stream().map(ShopProductSpec::getId).collect(Collectors.toSet());
+        List<ShopSpecValue> list1 = shopSpecValueService.lambdaQuery().in(ShopSpecValue::getProductSpecId, collect).list();
+        for (SpecSortVo spec : list) {
+            List<ShopSpecValue> collect1 = list1.stream().filter(item -> item.getProductSpecId().toString().equals(spec.getId()))
+                    .sorted(Comparator.comparing(ShopSpecValue::getSortOrder)).collect(Collectors.toList());
+            List<SpecValueSortVo> specValueSortVos = BeanUtil.copyToList(collect1, SpecValueSortVo.class);
+            spec.setList(specValueSortVos);
+        }
+        return list;
+    }
+
+
+
 }

+ 45 - 0
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/impl/ShopSearchRecordsServiceImpl.java

@@ -1,12 +1,57 @@
 package edu.travel.commodity.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import edu.travel.commodity.dto.SearchRecordListDto;
 import edu.travel.commodity.entity.ShopSearchRecords;
 import edu.travel.commodity.mapper.ShopSearchRecordsMapper;
 import edu.travel.commodity.service.ShopSearchRecordsService;
+import edu.travel.commodity.utils.PageUtil;
+import edu.travel.commodity.vo.SearchRecordsVo;
 import org.springframework.stereotype.Service;
 
+import java.util.Date;
+
 @Service
 public class ShopSearchRecordsServiceImpl extends ServiceImpl<ShopSearchRecordsMapper, ShopSearchRecords> implements ShopSearchRecordsService {
 
+    @Override
+    public void clearSearchRecords(SearchRecordListDto baseDto) {
+        LambdaQueryWrapper<ShopSearchRecords> query = Wrappers.<ShopSearchRecords>lambdaQuery();
+        query.eq(ShopSearchRecords::getCountryId, baseDto.getCountryId());
+        query.eq(ShopSearchRecords::getSearchType, baseDto.getSearchType());
+        remove(query);
+    }
+
+    @Override
+    public Page<SearchRecordsVo> searchRecordList(SearchRecordListDto baseDto) {
+
+        LambdaQueryWrapper<ShopSearchRecords> query = Wrappers.<ShopSearchRecords>lambdaQuery();
+        query.eq(ShopSearchRecords::getCountryId, baseDto.getCountryId());
+        query.eq(ShopSearchRecords::getSearchType, baseDto.getSearchType());
+        query.orderByDesc(ShopSearchRecords::getSearchTime);
+
+        Page<ShopSearchRecords> page = this.page(new Page<>(baseDto.getCurrentPage(), baseDto.getPageSize()), query);
+
+        return PageUtil.toPageEntity(page, SearchRecordsVo.class);
+    }
+
+
+    public void add(String searchString, Long countryId,Integer searchType){
+        LambdaQueryWrapper<ShopSearchRecords> query = Wrappers.<ShopSearchRecords>lambdaQuery();
+        query.eq(ShopSearchRecords::getCountryId, countryId);
+        query.eq(ShopSearchRecords::getSearchType, searchType);
+        query.eq(ShopSearchRecords::getSearchKeyword, searchString);
+        ShopSearchRecords one = getOne(query);
+        if(one==null){
+            ShopSearchRecords shopSearchRecords = new ShopSearchRecords();
+            shopSearchRecords.setSearchCount(1);
+            shopSearchRecords.setSearchKeyword(searchString);
+            shopSearchRecords.setCountryId(countryId);
+            shopSearchRecords.setSearchTime(new Date());
+            save(shopSearchRecords);
+        }
+    }
 }

+ 19 - 6
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/impl/ShopShoppingCartServiceImpl.java

@@ -18,7 +18,6 @@ import edu.travel.commodity.service.ShopShoppingCartService;
 import edu.travel.commodity.utils.PageUtil;
 import edu.travel.commodity.utils.TokenData;
 import edu.travel.commodity.vo.ShopCartListVo;
-import edu.travel.commodity.vo.SpecValueVo;
 import edu.travel.exception.BaseException;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -54,6 +53,7 @@ public class ShopShoppingCartServiceImpl extends ServiceImpl<ShopShoppingCartMap
 
     @Override
     public Page<ShopCartListVo> getShopCartList(BaseDto params) {
+        //登录用户
         String userId = TokenData.getUserId();
         LambdaQueryWrapper<ShopShoppingCart> query = Wrappers.<ShopShoppingCart>lambdaQuery()
                 .eq(ShopShoppingCart::getUserId, userId).orderByDesc(ShopShoppingCart::getCreateTime);
@@ -61,7 +61,9 @@ public class ShopShoppingCartServiceImpl extends ServiceImpl<ShopShoppingCartMap
         Page<ShopShoppingCart> page = this.page(new Page<ShopShoppingCart>(params.getCurrentPage(), params.getPageSize()), query);
         //转换为结果集
         Page<ShopCartListVo> pageEntity = PageUtil.toPageEntity(page, ShopCartListVo.class);
+        //购物车数据
         List<ShopCartListVo> records = pageEntity.getRecords();
+
         if(ObjectUtil.isEmpty(records)){
             return pageEntity;
         }
@@ -73,15 +75,14 @@ public class ShopShoppingCartServiceImpl extends ServiceImpl<ShopShoppingCartMap
             map.put(shopProduct.getId().toString(), shopProduct);
         }
         //商品和sku关联表的id
-        Set<String> productToSkus = records.stream().map(ShopCartListVo::getProductSkuId).collect(Collectors.toSet());
+        Set<String> collect1 = records.stream().map(ShopCartListVo::getProductSkuId).collect(Collectors.toSet());
 
-        List<ShopProductSku> shopProductSkus = shopProductSkuService.listByIds(productToSkus);
+        List<ShopProductSku> shopProductSkus = shopProductSkuService.listByIds(collect1);
         HashMap<String, ShopProductSku> productSkuMap = new HashMap<>();
         for (ShopProductSku shopProduct : shopProductSkus) {
             productSkuMap.put(shopProduct.getId().toString(), shopProduct);
         }
-        Set<String> collect1 = records.stream().map(ShopCartListVo::getProductSkuId).collect(Collectors.toSet());
-        Map<String, List<SpecValueVo>> shopProductSkuId = shopProductSkuService.getShopProductSkuId(collect1);
+//        Map<String, List<SortSpecVo>> Specmap = shopProductSkuService.getShopProductSkuId(collect1);
 
         //封装结果集
         for (ShopCartListVo record : records) {
@@ -96,7 +97,19 @@ public class ShopShoppingCartServiceImpl extends ServiceImpl<ShopShoppingCartMap
                     record.setPrice(shopProductSku.getPrice());
                 }
                 String productSkuId = record.getProductSkuId();
-                record.setSpecValue(shopProductSkuId.get(productSkuId));
+//                List<SortSpecVo> sortSpecVos = Specmap.get(productSkuId);
+//                ArrayList<SpecValueVo> specValueVos = new ArrayList<>();
+//                if(ObjectUtil.isEmpty(sortSpecVos)){
+//                    for (SortSpecVo sortSpecVo : sortSpecVos) {
+//                        SpecValueVo specValueVo = new SpecValueVo();
+//                        specValueVo.setKeyId(sortSpecVo.getSpecId());
+//                        specValueVo.setKey(sortSpecVo.getSpecName());
+//                        specValueVo.setValueId(sortSpecVo.getSpecValueId());
+//                        specValueVo.setValue(sortSpecVo.getSpecValue());
+//                        specValueVos.add(specValueVo);
+//                    }
+//                }
+//                record.setSpecValue(specValueVos);
             }
         }
         return pageEntity;

+ 19 - 0
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/utils/ObjectUtils.java

@@ -0,0 +1,19 @@
+package edu.travel.commodity.utils;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class ObjectUtils {
+
+
+    public static <T> List<T> castList(Object obj, Class<T> clazz) {
+        List<T> result = new ArrayList<T>();
+        if (obj instanceof List<?>) {
+            for (Object o : (List<?>) obj) {
+                result.add(clazz.cast(o));
+            }
+            return result;
+        }
+        return null;
+    }
+}

+ 7 - 1
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/utils/PageUtil.java

@@ -1,6 +1,7 @@
 package edu.travel.commodity.utils;
 
 import cn.hutool.core.bean.BeanUtil;
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import org.springframework.beans.BeanUtils;
 
@@ -18,5 +19,10 @@ public class PageUtil{
         target.setRecords(BeanUtil.copyToList(source.getRecords(), type));
         return target;
     }
-
+    public static <T,E> Page<E> toPageEntity(IPage<T> source, Class<E> type) {
+        Page<E> target = new Page<E>();
+        BeanUtils.copyProperties(source, target);
+        target.setRecords(BeanUtil.copyToList(source.getRecords(), type));
+        return target;
+    }
 }

+ 29 - 0
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/vo/ProductImageVo.java

@@ -0,0 +1,29 @@
+package edu.travel.commodity.vo;
+
+import lombok.Data;
+
+@Data
+public class ProductImageVo {
+    /**
+     * sku
+     */
+    private String skuId;
+
+    /**
+     * 商品ID
+     */
+    private String productId;
+
+    /**
+     * 图片/视频地址
+     */
+    private String url;
+
+    /**
+     * 判断图片/视频,默认0,0图片,1视频
+     */
+    private Integer urlType;
+
+    /**是否默认列表图片*/
+    private Integer isDefault;
+}

+ 31 - 10
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/vo/ProductSkuVo.java

@@ -1,7 +1,5 @@
 package edu.travel.commodity.vo;
 
-
-
 import lombok.Data;
 
 import java.math.BigDecimal;
@@ -11,6 +9,10 @@ import java.util.List;
 @Data
 public class ProductSkuVo {
     /**
+     * 商品SKU表ID
+     */
+    private String id;
+    /**
      * SKU ID
      */
     private String skuId;
@@ -29,26 +31,45 @@ public class ProductSkuVo {
     private String description;
 
     /**
-     * SKU商品图片
+     * 库房ID
      */
-    private String skuImage;
+    private String warehouseId;
 
     /**
-     * 销量
+     * 库存
      */
-    private Integer salesVolume;
+    private Integer inventory;
+
+    /**
+     * 0 上架 1 下架
+     */
+    private Integer status;
+
     /**
      * 价格
      */
-    private BigDecimal defaultPrice;
+    private BigDecimal price;
 
     /**
-     * 库存
+     * 商品SKU图片
      */
-    private Integer inventory;
+    private List<ProductImageVo> imageUrl;
+    /**
+     * 销量
+     */
+    private Integer salesVolume;
+
+    /**
+     * 条码
+     */
+    private Integer barcodes;
+    /**
+     * 成本价格
+     */
+    private BigDecimal costPrice;
 
     /**
      * 规格值
      */
-    private List<SpecValueVo> specValue;
+    private List<ShopSkuSpecValueVo> specValue;
 }

+ 5 - 1
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/vo/ProductSpecVo.java

@@ -21,7 +21,11 @@ public class ProductSpecVo {
     /**
      * 列表展示图片
      */
-    private List<String> images;
+    private String mainImageUrl;
+    /**
+     *  详情商品图片集
+     */
+    private List<ProductImageVo> images;
 
     /**
      * 商品描述

+ 34 - 0
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/vo/SearchRecordsVo.java

@@ -0,0 +1,34 @@
+package edu.travel.commodity.vo;
+
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class SearchRecordsVo {
+    /**
+     * 主键id
+     */
+    private String id;
+
+
+    /**
+     * 搜索关键词
+     */
+    private String searchKeyword;
+
+    /**
+     * 搜索次数
+     */
+    private Integer searchCount;
+
+    /**
+     * 搜索源
+     */
+    private Integer searchType;
+
+    /**
+     * 搜索时间
+     */
+    private Date searchTime;
+}

+ 7 - 0
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/vo/ShopCartListVo.java

@@ -5,6 +5,13 @@ import lombok.Data;
 import java.math.BigDecimal;
 import java.util.List;
 
+/**
+ * 类功能描述:
+ *  购物车列表
+ * @author 大春
+ * @date 2025/03/03
+ */
+
 @Data
 public class ShopCartListVo {
     /**

+ 49 - 0
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/vo/ShopFavoriteVo.java

@@ -0,0 +1,49 @@
+package edu.travel.commodity.vo;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+@Data
+public class ShopFavoriteVo {
+    /**
+     * 商品ID
+     */
+    private String productId;
+    /**
+     * 商品名称
+     */
+    private String productName;
+
+    /**
+     * 商品描述
+     */
+    private String description;
+
+    /**
+     * 列表展示图片
+     */
+    private String mainImageUrl;
+
+    /**
+     * 热度值
+     */
+    private Integer heatValue;
+
+    /**
+     * 销量
+     */
+    private Integer salesVolume;
+    /**
+     * 价格
+     */
+    private BigDecimal defaultPrice;
+
+    /**
+     * 评分满分五分
+     */
+    private Integer scoring;
+    /**
+     *  国家ID
+     */
+    private String countryId;
+}

+ 1 - 1
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/vo/ShopParametersVo.java

@@ -16,7 +16,7 @@ public class ShopParametersVo {
     /**
      * 商品参数值ID
      */
-    private String Id;
+    private String id;
 
     /**
      * 参数值

+ 4 - 0
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/vo/ShopProductVo.java

@@ -44,4 +44,8 @@ public class ShopProductVo {
      * 评分满分五分
      */
     private Integer scoring;
+    /**
+     *  国家ID
+     */
+    private String countryId;
 }

+ 27 - 0
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/vo/ShopSkuSpecValueVo.java

@@ -0,0 +1,27 @@
+package edu.travel.commodity.vo;
+
+import lombok.Data;
+
+@Data
+public class ShopSkuSpecValueVo {
+    /**
+     * SKU规格值关联表ID
+     */
+    private String id;
+    /**
+     * SKU
+     */
+    private String skuId;
+    /**
+     * 规格值id
+     */
+    private String specValueId;
+    /**规格值*/
+    private String specValue;
+    /**
+     * 规格值id
+     */
+    private String specId;
+    /**规格名称*/
+    private String specName;
+}

+ 2 - 0
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/vo/SpecSortVo.java

@@ -11,6 +11,8 @@ public class SpecSortVo {
 
     /**规格ID*/
     private String specName;
+    /**规格排序*/
+    private Long sortOrder;
 
     private List<SpecValueSortVo> list;
 }

+ 2 - 2
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/vo/SpecValueSortVo.java

@@ -6,8 +6,8 @@ import lombok.Data;
 public class SpecValueSortVo {
     /**商品规格和规格值关联ID*/
     private String id;
-
     /**规制值*/
     private String specValue;
-
+    /**规格值排序*/
+    private Long sortOrder;
 }

+ 9 - 3
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/vo/SpecValueVo.java

@@ -2,15 +2,21 @@ package edu.travel.commodity.vo;
 
 import lombok.Data;
 
+/**
+ * 类功能描述:
+ *      购物车商品规格值
+ * @author 大春
+ * @date 2025/02/28
+ */
+
 @Data
 public class SpecValueVo {
     /**规格ID*/
-    private String keyId;
+    private String specId;
     /**规格值*/
-    private String key;
+    private String specName;
     /**值ID*/
     private String valueId;
     /**值*/
     private String value;
-
 }

+ 8 - 4
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/web/ShopAddressController.java

@@ -7,11 +7,15 @@ import edu.travel.commodity.entity.ShopAddress;
 import edu.travel.commodity.service.ShopAddressService;
 import edu.travel.commodity.vo.ShopAddressVo;
 import edu.travel.resp.BaseResponse;
+import edu.travel.rpc.RPCBaseResponse;
 import edu.travel.web.BaseController;
 import org.springframework.web.bind.annotation.*;
 
 import org.springframework.beans.factory.annotation.Autowired;
 
+import static edu.travel.rpc.RPCBaseResponse.success;
+import static org.bouncycastle.asn1.cmc.CMCStatus.success;
+
 /**
 * 地址表(shop_address)表控制层
 *
@@ -31,8 +35,8 @@ public class ShopAddressController extends BaseController<ShopAddress> {
      * @return {@link BaseResponse }<{@link Page }<{@link ShopAddress }>>
      */
     @GetMapping("/getShopAddress")
-    public BaseResponse<Page<ShopAddressVo>> getShopAddress(BaseDto dto) {
-        return new BaseResponse<>(200, "success", shopAddressService.getShopAddress(dto)) ;
+    public RPCBaseResponse<Page<ShopAddressVo>> getShopAddress(BaseDto dto) {
+        return success(shopAddressService.getShopAddress(dto)) ;
     }
 
     /**
@@ -41,8 +45,8 @@ public class ShopAddressController extends BaseController<ShopAddress> {
      * @return {@link BaseResponse }<{@link Void }>
      */
     @PostMapping("/savaOrUpdateAddressById")
-    public BaseResponse<Boolean> updateAddressById(@RequestBody UpdateAddressDto param) {
-        return new BaseResponse<>(200, "success", shopAddressService.updateAddressById(param)) ;
+    public RPCBaseResponse<Boolean> updateAddressById(@RequestBody UpdateAddressDto param) {
+        return success(shopAddressService.updateAddressById(param)) ;
     }
 
 

+ 10 - 9
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/web/ShopCategoryController.java

@@ -1,20 +1,22 @@
 package edu.travel.commodity.web;
 
-import cn.hutool.core.bean.BeanUtil;
 import edu.travel.commodity.dto.BaseDto;
 import edu.travel.commodity.dto.ShopTypeDto;
 import edu.travel.commodity.entity.ShopCategory;
 import edu.travel.commodity.service.ShopCategoryService;
 import edu.travel.commodity.vo.ShopTypeVo;
 import edu.travel.remote.feign.mode.vo.tenant.AddMenuVo;
-import edu.travel.remote.feign.mode.vo.tenant.SysRoleVo;
 import edu.travel.resp.BaseResponse;
+import edu.travel.rpc.RPCBaseResponse;
 import edu.travel.web.BaseController;
 import org.springframework.web.bind.annotation.*;
 
 import org.springframework.beans.factory.annotation.Autowired;
 
 import java.util.List;
+import java.util.concurrent.ExecutionException;
+
+import static edu.travel.rpc.RPCBaseResponse.success;
 
 /**
 * 商品类型(shop_category)表控制层
@@ -34,19 +36,18 @@ public class ShopCategoryController  extends BaseController<ShopCategory> {
      *  获取商品类型
      * @return {@link BaseResponse }<{@link AddMenuVo }>
      */
-    @GetMapping("getShopType")
-    public BaseResponse<List<ShopTypeVo>> getShopType(ShopTypeDto param){
-        return new BaseResponse<>(200,"success",shopCategoryService.getShopType(param));
+    @GetMapping("/getShopType")
+    public RPCBaseResponse<List<ShopTypeVo>> getShopType(ShopTypeDto param) throws ExecutionException {
+        return success(shopCategoryService.getShopType(param));
     }
 
     /**
      *  获取二级热门商品类型
      * @return {@link BaseResponse }<{@link AddMenuVo }>
      */
-    @GetMapping("getLevelToShopType")
-    public BaseResponse<List<ShopTypeVo>> getLevelToShopType(BaseDto param){
-
-        return new BaseResponse<>(200,"success",shopCategoryService.getLevelToShopType(param));
+    @GetMapping("/getLevelToShopType")
+    public RPCBaseResponse<List<ShopTypeVo>> getLevelToShopType(BaseDto param) throws ExecutionException {
+        return success(shopCategoryService.getLevelToShopType(param));
     }
 
 }

+ 0 - 23
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/web/ShopCurrencyController.java

@@ -1,23 +0,0 @@
-package edu.travel.commodity.web;
-
-import edu.travel.commodity.service.ShopCurrencyService;
-import org.springframework.web.bind.annotation.*;
-
-import org.springframework.beans.factory.annotation.Autowired;
-
-/**
-* 货币表(shop_currency)表控制层
-*
-* @author xxxxx
-*/
-@RestController
-@RequestMapping("/shop_currency")
-public class ShopCurrencyController {
-/**
-* 服务对象
-*/
-    @Autowired
-    private ShopCurrencyService shopCurrencyService;
-
-
-}

+ 14 - 2
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/web/ShopFavoriteController.java

@@ -1,6 +1,11 @@
 package edu.travel.commodity.web;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import edu.travel.commodity.dto.BaseDto;
 import edu.travel.commodity.service.ShopFavoriteService;
+import edu.travel.commodity.vo.ShopFavoriteVo;
+import edu.travel.commodity.vo.ShopProductVo;
+import edu.travel.rpc.RPCBaseResponse;
 import org.springframework.web.bind.annotation.*;
 
 import org.springframework.beans.factory.annotation.Autowired;
@@ -11,7 +16,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 * @author xxxxx
 */
 @RestController
-@RequestMapping("/shop_favorite")
+@RequestMapping("/shopFavorite")
 public class ShopFavoriteController {
 /**
 * 服务对象
@@ -19,5 +24,12 @@ public class ShopFavoriteController {
     @Autowired
     private ShopFavoriteService shopFavoriteService;
 
-
+    /**
+     *  获取收藏商品
+     * @return {@link RPCBaseResponse }<{@link Page }<{@link ShopProductVo }>>
+     */
+    @GetMapping("/getFavorite")
+    public RPCBaseResponse<Page<ShopFavoriteVo>> getFavorite(BaseDto baseDto){
+        return RPCBaseResponse.success(shopFavoriteService.getFavorite(baseDto));
+    }
 }

+ 6 - 3
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/web/ShopParametersController.java

@@ -5,17 +5,20 @@ import edu.travel.commodity.dto.ProductSpecDto;
 import edu.travel.commodity.service.ShopParametersService;
 import edu.travel.commodity.vo.ShopParametersVo;
 import edu.travel.resp.BaseResponse;
+import edu.travel.rpc.RPCBaseResponse;
 import org.springframework.web.bind.annotation.*;
 
 import org.springframework.beans.factory.annotation.Autowired;
 
+import static edu.travel.rpc.RPCBaseResponse.success;
+
 /**
 * 商品参数(shop_parameters)表控制层
 *
 * @author xxxxx
 */
 @RestController
-@RequestMapping("/shop_parameters")
+@RequestMapping("/shopParameters")
 public class ShopParametersController {
 /**
 * 服务对象
@@ -29,7 +32,7 @@ public class ShopParametersController {
      * @return {@link BaseResponse }<{@link Page }<{@link ShopParametersVo }>>
      */
     @GetMapping("getShopParameters")
-    public BaseResponse<Page<ShopParametersVo>> getShopParameters(ProductSpecDto param){
-        return new BaseResponse<>(200,"success",shopParametersService.getShopParameters(param));
+    public RPCBaseResponse<Page<ShopParametersVo>> getShopParameters(ProductSpecDto param){
+        return success(shopParametersService.getShopParameters(param));
     }
 }

+ 16 - 4
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/web/ShopProductController.java

@@ -1,10 +1,13 @@
 package edu.travel.commodity.web;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import edu.travel.commodity.dto.GetProductByTypeDto;
+import edu.travel.commodity.dto.SearchProductDto;
 import edu.travel.commodity.entity.ShopProduct;
 import edu.travel.commodity.service.ShopProductService;
 import edu.travel.commodity.vo.ShopProductVo;
 import edu.travel.resp.BaseResponse;
+import edu.travel.rpc.RPCBaseResponse;
 import edu.travel.web.BaseController;
 import org.springframework.web.bind.annotation.*;
 
@@ -12,6 +15,8 @@ import org.springframework.beans.factory.annotation.Autowired;
 
 import java.util.List;
 
+import static edu.travel.rpc.RPCBaseResponse.success;
+
 /**
 * 商品表(shop_product)表控制层
 *
@@ -32,14 +37,21 @@ public class ShopProductController extends BaseController<ShopProduct> {
      * @return {@link BaseResponse }<{@link List }<{@link ShopProductVo }>>
      */
     @GetMapping("/getHotProduct")
-    public BaseResponse<List<ShopProductVo>> getHotProduct(GetProductByTypeDto param){
-        return new BaseResponse<>(200,"success",shopProductService.getHotProduct(param));
+    public RPCBaseResponse<Page<ShopProductVo>> getHotProduct(GetProductByTypeDto param){
+        return success(shopProductService.getHotProduct(param));
     }
 
-
     /**
-     * 搜索商品
+     *  搜索商品
+     * @param param 类型
+     * @return {@link BaseResponse }<{@link List }<{@link ShopProductVo }>>
      */
+    @GetMapping("/searchProduct")
+    public RPCBaseResponse<Page<ShopProductVo>> searchProduct(SearchProductDto param){
+        return success(shopProductService.searchProduct(param));
+    }
+
+
 
 
 }

+ 7 - 3
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/web/ShopProductSpecController.java

@@ -6,6 +6,7 @@ import edu.travel.commodity.service.ShopProductSpecService;
 import edu.travel.commodity.vo.ProductSpecVo;
 import edu.travel.commodity.vo.ShopProductVo;
 import edu.travel.resp.BaseResponse;
+import edu.travel.rpc.RPCBaseResponse;
 import edu.travel.web.BaseController;
 import org.springframework.web.bind.annotation.*;
 
@@ -13,6 +14,8 @@ import org.springframework.beans.factory.annotation.Autowired;
 
 import java.util.List;
 
+import static edu.travel.rpc.RPCBaseResponse.success;
+
 /**
 * 商品规格表(shop_product_spec)表控制层
 *
@@ -28,11 +31,12 @@ public class ShopProductSpecController extends BaseController<ShopProductSpec> {
     private ShopProductSpecService shopProductSpecService;
 
     /**
-     * @param param 查询商品
+     * 查询商品详情
+     * @param param
      * @return {@link BaseResponse }<{@link List }<{@link ShopProductVo }>>
      */
     @GetMapping("/getShopSpec")
-    public BaseResponse<ProductSpecVo> getShopSpec(ProductSpecDto param){
-        return new BaseResponse<>(200,"success",shopProductSpecService.getShopSpec(param));
+    public RPCBaseResponse<ProductSpecVo> getShopSpec(ProductSpecDto param){
+        return success(shopProductSpecService.getShopSpec(param));
     }
 }

+ 2 - 0
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/web/ShopReviewController.java

@@ -5,6 +5,7 @@ import org.springframework.web.bind.annotation.*;
 
 import org.springframework.beans.factory.annotation.Autowired;
 
+
 /**
 * 商品评论表(shop_review)表控制层
 *
@@ -19,4 +20,5 @@ public class ShopReviewController {
     @Autowired
     private ShopReviewService shopReviewService;
 
+
 }

+ 30 - 1
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/web/ShopSearchRecordsController.java

@@ -1,10 +1,18 @@
 package edu.travel.commodity.web;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import edu.travel.commodity.dto.SearchRecordListDto;
+import edu.travel.commodity.entity.ShopSearchRecords;
 import edu.travel.commodity.service.ShopSearchRecordsService;
+import edu.travel.commodity.vo.SearchRecordsVo;
+import edu.travel.rpc.RPCBaseResponse;
+import edu.travel.web.BaseController;
 import org.springframework.web.bind.annotation.*;
 
 import org.springframework.beans.factory.annotation.Autowired;
 
+import static edu.travel.rpc.RPCBaseResponse.success;
+
 /**
 * 列表搜索记录表(shop_search_records)表控制层
 *
@@ -12,7 +20,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 */
 @RestController
 @RequestMapping("/shop_search_records")
-public class ShopSearchRecordsController {
+public class ShopSearchRecordsController extends BaseController<ShopSearchRecords> {
 /**
 * 服务对象
 */
@@ -20,4 +28,25 @@ public class ShopSearchRecordsController {
     private ShopSearchRecordsService shopSearchRecordsService;
 
 
+    /**
+     * 清空游记历史搜索记录(searchType:1)
+     * @return 结果
+     */
+    @PostMapping("/clearSearchRecord")
+    public RPCBaseResponse<Void> clearProjectSearchRecords(@RequestBody SearchRecordListDto clear){
+        shopSearchRecordsService.clearSearchRecords(clear);
+        return success();
+    }
+
+
+    /**
+     * 获取游记搜索记录列表
+     * @param baseDto 参数DTO对象
+     * @return 结果
+     */
+    @GetMapping("/searchRecordList")
+    public RPCBaseResponse<Page<SearchRecordsVo>> searchRecordList(SearchRecordListDto baseDto){
+        return success(shopSearchRecordsService.searchRecordList(baseDto));
+    }
+
 }

+ 9 - 6
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/web/ShopShoppingCartController.java

@@ -6,17 +6,20 @@ import edu.travel.commodity.dto.BaseDto;
 import edu.travel.commodity.service.ShopShoppingCartService;
 import edu.travel.commodity.vo.ShopCartListVo;
 import edu.travel.resp.BaseResponse;
+import edu.travel.rpc.RPCBaseResponse;
 import org.springframework.web.bind.annotation.*;
 
 import org.springframework.beans.factory.annotation.Autowired;
 
+import static edu.travel.rpc.RPCBaseResponse.success;
+
 /**
 * 购物车表(shop_shopping_cart)表控制层
 *
 * @author xxxxx
 */
 @RestController
-@RequestMapping("/shop_shopping_cart")
+@RequestMapping("/shopShoppingCart")
 public class ShopShoppingCartController {
 /**
 * 服务对象
@@ -31,8 +34,8 @@ public class ShopShoppingCartController {
      * @return {@link BaseResponse }<{@link Boolean }>
      */
     @PostMapping("/addShopCart")
-    public BaseResponse<Boolean> addShopCart(@RequestBody AddShopCartDto params) {
-        return new BaseResponse<>(200,"success",shopShoppingCartService.addShopCart(params));
+    public RPCBaseResponse<Boolean> addShopCart(@RequestBody AddShopCartDto params) {
+        return success(shopShoppingCartService.addShopCart(params));
     }
 
     /**
@@ -41,9 +44,9 @@ public class ShopShoppingCartController {
      * @return {@link BaseResponse }<{@link Page }<{@link ShopCartListVo }>>
      */
 
-    @PostMapping("/getShopCartList")
-    public BaseResponse<Page<ShopCartListVo>> getShopCartList(BaseDto params) {
-        return new BaseResponse<>(200,"success",shopShoppingCartService.getShopCartList(params));
+    @GetMapping("/getShopCartList")
+    public RPCBaseResponse<Page<ShopCartListVo>> getShopCartList(BaseDto params) {
+        return success(shopShoppingCartService.getShopCartList(params));
     }
 
 

+ 2 - 1
edu-travel-service/edu-travel-service-commodity/src/main/resources/mapper/ShopProductImageMapper.xml

@@ -16,10 +16,11 @@
     <result column="update_time" jdbcType="TIMESTAMP" property="updateTime" />
     <result column="update_user_id" jdbcType="VARCHAR" property="updateUserId" />
     <result column="delete_flag" jdbcType="INTEGER" property="deleteFlag" />
+    <result column="is_default" jdbcType="INTEGER" property="isDefault" />
   </resultMap>
   <sql id="Base_Column_List">
     <!--@mbg.generated-->
     id, sku_id, product_id, url, url_type, sort_order, project, create_time, create_user_id, 
-    update_time, update_user_id, delete_flag
+    update_time, update_user_id, delete_flag,is_default
   </sql>
 </mapper>

+ 3 - 1
edu-travel-service/edu-travel-service-commodity/src/main/resources/mapper/ShopProductSkuMapper.xml

@@ -22,10 +22,12 @@
     <result column="update_time" jdbcType="TIMESTAMP" property="updateTime" />
     <result column="update_user_id" jdbcType="VARCHAR" property="updateUserId" />
     <result column="delete_flag" jdbcType="INTEGER" property="deleteFlag" />
+    <result column="unit_id" jdbcType="BIGINT" property="unitId" />
   </resultMap>
   <sql id="Base_Column_List">
     <!--@mbg.generated-->
     id, sku_id, product_id, warehouse_id, `freeze`, inventory, `status`, price, project, image_url,sales_volume,barcodes,
-    create_time, create_user_id, update_time, update_user_id, delete_flag,cost_price
+    create_time, create_user_id, update_time, update_user_id, delete_flag,cost_price,unit_id
   </sql>
+
 </mapper>

+ 19 - 0
edu-travel-service/edu-travel-service-commodity/src/main/resources/mapper/ShopProductSpecMapper.xml

@@ -21,4 +21,23 @@
     id, product_id, spec_name, project, create_time, create_user_id, update_time, update_user_id, 
     delete_flag,sort_order,spec_id
   </sql>
+
+  <select id="getSkuValue" resultType="edu.travel.commodity.vo.ShopSkuSpecValueVo">
+    SELECT sk.id,sk.sku_id,sk.spec_id,sp.spec_name,sk.spec_value_id,sv.spec_value
+    FROM
+        shop_sku_spec_value  sk
+    inner JOIN shop_product_spec sp
+        on sp.id=sk.spec_id
+    inner JOIN shop_spec_value sv
+        on sv.id=sk.spec_value_id
+    WHERE
+    sk.project=#{project}
+    AND sk.delete_flag=0
+    AND sp.delete_flag=0
+    AND sv.delete_flag=0
+    AND sk.sku_id
+    <foreach collection="skus" item="sku" open="IN(" separator="," close=")">
+      #{sku}
+    </foreach>
+    </select>
 </mapper>

+ 1 - 2
edu-travel-service/edu-travel-service-commodity/src/main/resources/mapper/ShopSpecValueMapper.xml

@@ -14,11 +14,10 @@
     <result column="update_user_id" jdbcType="VARCHAR" property="updateUserId" />
     <result column="delete_flag" jdbcType="INTEGER" property="deleteFlag" />
     <result column="sort_order" jdbcType="BIGINT" property="sortOrder" />
-    <result column="product_id" jdbcType="BIGINT" property="productId" />
   </resultMap>
   <sql id="Base_Column_List">
     <!--@mbg.generated-->
     id, product_spec_id, spec_value, project, create_time, create_user_id, update_time, update_user_id,
-    delete_flag,sort_order,product_id
+    delete_flag,sort_order
   </sql>
 </mapper>

+ 8 - 1
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/entity/BaseCountryServe.java → edu-travel-service/edu-travel-service-country/src/main/java/edu/travel/country/entity/BaseCountryServe.java

@@ -1,4 +1,4 @@
-package edu.travel.commodity.entity;
+package edu.travel.country.entity;
 
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
@@ -6,7 +6,10 @@ import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import java.math.BigDecimal;
 import java.util.Date;
+import java.util.Map;
 
+import edu.travel.annotation.LinkOne;
+import edu.travel.country.mapper.ShopCurrencyMapper;
 import edu.travel.entity.BaseEntity;
 import lombok.AllArgsConstructor;
 import lombok.Data;
@@ -115,4 +118,8 @@ public class BaseCountryServe extends BaseEntity {
      */
     @TableField(value = "currency_id")
     private Long currencyId;
+
+    @TableField(exist = false)
+    @LinkOne(linkField = "currencyId", linkMapper = ShopCurrencyMapper.class, linkPrimaryField = "id")
+    private Map<String, Object> map;
 }

+ 5 - 2
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/entity/ShopCurrency.java → edu-travel-service/edu-travel-service-country/src/main/java/edu/travel/country/entity/ShopCurrency.java

@@ -1,16 +1,18 @@
-package edu.travel.commodity.entity;
+package edu.travel.country.entity;
 
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
-import java.util.Date;
 
+import edu.travel.annotation.LinkOne;
 import edu.travel.entity.BaseEntity;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
+import java.util.Map;
+
 /**
  * 货币表
  */
@@ -59,4 +61,5 @@ public class ShopCurrency extends BaseEntity {
      * */
     @TableField(value = "status")
     private String status;
+
 }

+ 3 - 2
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/mapper/BaseCountryServeMapper.java → edu-travel-service/edu-travel-service-country/src/main/java/edu/travel/country/mapper/BaseCountryServeMapper.java

@@ -1,7 +1,8 @@
-package edu.travel.commodity.mapper;
+package edu.travel.country.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import edu.travel.commodity.entity.BaseCountryServe;
+import edu.travel.country.entity.BaseCountryServe;
+
 
 public interface BaseCountryServeMapper extends BaseMapper<BaseCountryServe> {
 }

+ 7 - 0
edu-travel-service/edu-travel-service-country/src/main/java/edu/travel/country/mapper/ShopCurrencyMapper.java

@@ -0,0 +1,7 @@
+package edu.travel.country.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import edu.travel.country.entity.ShopCurrency;
+
+public interface ShopCurrencyMapper extends BaseMapper<ShopCurrency> {
+}

+ 18 - 0
edu-travel-service/edu-travel-service-country/src/main/java/edu/travel/country/service/BaseCountryServeService.java

@@ -0,0 +1,18 @@
+package edu.travel.country.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import edu.travel.country.entity.BaseCountryServe;
+import edu.travel.dto.BaseCountryServeDto;
+import edu.travel.rpc.RPCBaseResponse;
+import edu.travel.vo.BaseCountryServeVo;
+
+import java.util.List;
+
+public interface BaseCountryServeService extends IService<BaseCountryServe>{
+
+
+//服务国家树
+    RPCBaseResponse<List<BaseCountryServeVo>> getCountryServeTree();
+//分页
+    RPCBaseResponse<List<BaseCountryServe>> getCountryServeCurrencyPageForm(BaseCountryServeDto dto);
+}

+ 14 - 0
edu-travel-service/edu-travel-service-country/src/main/java/edu/travel/country/service/ShopCurrencyService.java

@@ -0,0 +1,14 @@
+package edu.travel.country.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import edu.travel.country.entity.ShopCurrency;
+import edu.travel.dto.ShopCurrencyDto;
+import edu.travel.rpc.RPCBaseResponse;
+import edu.travel.vo.ShopCurrencyVo;
+
+public interface ShopCurrencyService extends IService<ShopCurrency>{
+
+
+    RPCBaseResponse<IPage<ShopCurrencyVo>> getCurrencyPage(ShopCurrencyDto dto);
+}

+ 110 - 0
edu-travel-service/edu-travel-service-country/src/main/java/edu/travel/country/service/impl/BaseCountryServeServiceImpl.java

@@ -0,0 +1,110 @@
+package edu.travel.country.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+
+import edu.travel.country.entity.BaseCountry;
+import edu.travel.country.entity.BaseCountryServe;
+import edu.travel.country.mapper.BaseCountryMapper;
+import edu.travel.country.mapper.BaseCountryServeMapper;
+import edu.travel.country.mapper.ShopCurrencyMapper;
+import edu.travel.country.service.BaseCountryServeService;
+import edu.travel.dto.BaseCountryServeDto;
+import edu.travel.rpc.RPCBaseResponse;
+import edu.travel.service.SysServiceImpl;
+import edu.travel.vo.BaseCountryServeVo;
+
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.*;
+
+@Service
+public class BaseCountryServeServiceImpl extends SysServiceImpl<BaseCountryServeMapper, BaseCountryServe> implements BaseCountryServeService {
+    @Autowired
+    private BaseCountryMapper baseCountryMapper;
+    @Autowired
+    private ShopCurrencyMapper shopCurrencyMapper;
+
+//分页连表
+@Override
+public RPCBaseResponse<List<BaseCountryServe>> getCountryServeCurrencyPageForm(BaseCountryServeDto dto) {
+    // 查询所有国家服务数据
+    LambdaQueryWrapper<BaseCountryServe> queryWrapper = new LambdaQueryWrapper<>();
+    // 查询所有的数据
+    List<BaseCountryServe> baseCountryServeList = super.getListLink(queryWrapper);
+    return new RPCBaseResponse <>(200, "SUCCESS", baseCountryServeList);
+}
+
+
+    /**
+     * 服务国家树
+     * @return
+     */
+    @Override
+    public RPCBaseResponse<List<BaseCountryServeVo>> getCountryServeTree() {
+        // 查询所有国家服务数据
+        LambdaQueryWrapper<BaseCountryServe> queryWrapper = new LambdaQueryWrapper<>();
+        List<BaseCountryServe> baseCountryServeList = super.getListLink(queryWrapper);
+
+        // 构建树形结构
+        List<BaseCountryServeVo> baseCountryServeTree = buildCountryServeTree(baseCountryServeList);
+
+        // 返回结果
+        return new RPCBaseResponse<>(200, "SUCCESS", baseCountryServeTree);
+    }
+
+
+
+    // 树构建方法
+    private List<BaseCountryServeVo> buildCountryServeTree(List<BaseCountryServe> baseCountryServeList) {
+        Map<Long, BaseCountryServeVo> serveMap = new HashMap<>();
+        List<BaseCountryServeVo> rootCountries = new ArrayList<>();
+
+        // 构建每个国家服务VO对象
+        for (BaseCountryServe serve : baseCountryServeList) {
+            BaseCountryServeVo serveVo = new BaseCountryServeVo();
+            BeanUtils.copyProperties(serve, serveVo);
+
+            // 关联国家信息
+            BaseCountry country = baseCountryMapper.selectById(serve.getCountryId());
+            if (country != null) {
+                serveVo.setImageUrl(country.getImageUrl());
+                serveVo.setAreaCode(String.valueOf(country.getAreaCode()));
+            }
+
+            serveMap.put(serve.getId(), serveVo);
+        }
+
+        // 构建树形结构
+        for (BaseCountryServe serve : baseCountryServeList) {
+            Long parentId = serve.getParentId();
+            BaseCountryServeVo serveVo = serveMap.get(serve.getId());
+
+            if (serveVo == null) {
+                System.err.println("服务对象为 null,服务ID: " + serve.getId());
+                continue; // 跳过这个服务
+            }
+
+            if (parentId == null || parentId == 0) {
+                rootCountries.add(serveVo);
+            } else {
+                BaseCountryServeVo parentServeVo = serveMap.get(parentId);
+                if (parentServeVo != null) {
+                    // 确保 children 列表被初始化
+                    if (parentServeVo.getChildren() == null) {
+                        parentServeVo.setChildren(new ArrayList<>());
+                    }
+                    parentServeVo.getChildren().add(serveVo);
+                } else {
+                    // 日志记录未找到父节点
+                    System.err.println("未找到父节点,parentId: " + parentId);
+                }
+            }
+        }
+
+        return rootCountries;
+    }
+}

+ 1 - 1
edu-travel-service/edu-travel-service-country/src/main/java/edu/travel/country/service/impl/BaseCountryServiceImpl.java

@@ -61,7 +61,7 @@ public class BaseCountryServiceImpl extends SysServiceImpl<BaseCountryMapper, Ba
             baseCountryVo.setCountryNameZh(baseCountry.getCountryNameZh());
             baseCountryVo.setCountryNameEn(baseCountry.getCountryNameEn());
             baseCountryVo.setCountryNameLocal(baseCountry.getCountryNameLocal());
-            baseCountryVo.setAreaCode(baseCountry.getAreaCode());
+            baseCountryVo.setAreaCode(String.valueOf(baseCountry.getAreaCode()));
             countryMap.put(baseCountry.getId(),baseCountryVo);
         }
 

+ 31 - 0
edu-travel-service/edu-travel-service-country/src/main/java/edu/travel/country/service/impl/ShopCurrencyServiceImpl.java

@@ -0,0 +1,31 @@
+package edu.travel.country.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+
+import edu.travel.country.entity.ShopCurrency;
+import edu.travel.country.mapper.ShopCurrencyMapper;
+import edu.travel.country.service.ShopCurrencyService;
+import edu.travel.dto.ShopCurrencyDto;
+import edu.travel.rpc.RPCBaseResponse;
+import edu.travel.service.SysServiceImpl;
+import edu.travel.vo.ShopCurrencyVo;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service
+public class ShopCurrencyServiceImpl extends SysServiceImpl<ShopCurrencyMapper, ShopCurrency> implements ShopCurrencyService {
+
+    @Autowired
+    private ShopCurrencyMapper shopCurrencyMapper;
+    @Override
+    public RPCBaseResponse<IPage<ShopCurrencyVo>> getCurrencyPage(ShopCurrencyDto dto) {
+        Page<ShopCurrency> baseCountryServePage = new Page<>(dto.getCurrentPage(), dto.getPageSize());
+        IPage<ShopCurrency> pageLink = super.getPageLink(new LambdaQueryWrapper<ShopCurrency>(), baseCountryServePage);
+        IPage<ShopCurrencyVo> result = new Page<>();
+        BeanUtils.copyProperties(pageLink, result);
+        return new RPCBaseResponse<>(200,"SUCCESS",result);
+    }
+}

+ 29 - 20
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/web/BaseCountryServeController.java → edu-travel-service/edu-travel-service-country/src/main/java/edu/travel/country/web/BaseCountryServeController.java

@@ -1,9 +1,8 @@
-package edu.travel.commodity.web;
+package edu.travel.country.web;
 
 
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import edu.travel.commodity.entity.BaseCountryServe;
-import edu.travel.commodity.service.BaseCountryServeService;
+import edu.travel.country.entity.BaseCountryServe;
+import edu.travel.country.service.BaseCountryServeService;
 import edu.travel.dto.BaseCountryServeDto;
 import edu.travel.remote.BaseCountryServeRemoteController;
 import edu.travel.rpc.RPCBaseResponse;
@@ -16,34 +15,40 @@ import org.springframework.web.bind.annotation.*;
 import java.util.List;
 
 /**
-* 服务国家表(base_country_serve)表控制层
-*
-* @author xxxxx
-*/
+ * 服务国家表(base_country_serve)表控制层
+ *
+ * @author xxxxx
+ */
 @RestController
-@RequestMapping("/base_country_serve")
-public class BaseCountryServeController  extends BaseController<BaseCountryServe> implements BaseCountryServeRemoteController {
+@RequestMapping("/baseCountryServe")
+public class BaseCountryServeController extends BaseController<BaseCountryServe> implements BaseCountryServeRemoteController {
 
     /**
      * 服务国家表(base_country_serve)表控制层
-     *
      */
-
     @Autowired
     private BaseCountryServeService baseCountryServeService;
 
     /**
-     * 分页
-     * @param dto
-     * @return
+     * 分页连表
+     */
+    @GetMapping("/getCountryServeCurrencyPageForm")
+    public RPCBaseResponse<List<BaseCountryServe>> getCountryServeCurrencyPageForm(BaseCountryServeDto dto) {
+        return baseCountryServeService.getCountryServeCurrencyPageForm(dto);
+    }
+
+
+    /**
+     * 服务国家树
      */
-    @GetMapping("/getCountryServePage")
-    public RPCBaseResponse<IPage<BaseCountryServeVo>> getCountryServePage(BaseCountryServeDto dto) {
-        return baseCountryServeService.getCountryServePage(dto);
+    @GetMapping("/getCountryServeTree")
+    public RPCBaseResponse<List<BaseCountryServeVo>> getCountryServeTree() {
+        return baseCountryServeService.getCountryServeTree();
     }
 
     /**
      * 获取服务国家信息
+     *
      * @param id
      * @return
      */
@@ -58,6 +63,7 @@ public class BaseCountryServeController  extends BaseController<BaseCountryServe
 
     /**
      * 更新服务国家信息
+     *
      * @param entity
      * @return
      */
@@ -74,6 +80,7 @@ public class BaseCountryServeController  extends BaseController<BaseCountryServe
 
     /**
      * 新增服务国家信息
+     *
      * @param entity
      * @return
      */
@@ -90,12 +97,13 @@ public class BaseCountryServeController  extends BaseController<BaseCountryServe
 
     /**
      * 删除服务国家信息
+     *
      * @param ids
      * @return
      */
     @Override
     @PostMapping("/deleteCountryServeFormId")
-    public RPCBaseResponse<BaseCountryServeVo> deleteTargetFormId(@RequestBody  List<String> ids) {
+    public RPCBaseResponse<BaseCountryServeVo> deleteTargetFormId(@RequestBody List<String> ids) {
         RPCBaseResponse<BaseCountryServe> baseCountryServeRPCBaseResponse = super.deleteTargetById(ids);
         RPCBaseResponse<BaseCountryServeVo> baseCountryServeVoRPCBaseResponse = new RPCBaseResponse<>();
         BeanUtils.copyProperties(baseCountryServeRPCBaseResponse, baseCountryServeVoRPCBaseResponse);
@@ -103,7 +111,8 @@ public class BaseCountryServeController  extends BaseController<BaseCountryServe
     }
 
     /**
-     * 获取服务国家信息
+     * 获取服务国家列表
+     *
      * @return
      */
     @Override

+ 113 - 0
edu-travel-service/edu-travel-service-country/src/main/java/edu/travel/country/web/ShopCurrencyController.java

@@ -0,0 +1,113 @@
+package edu.travel.country.web;
+
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import edu.travel.country.entity.ShopCurrency;
+import edu.travel.country.service.ShopCurrencyService;
+import edu.travel.dto.ShopCurrencyDto;
+import edu.travel.remote.ShopCurrencyRemoteController;
+import edu.travel.rpc.RPCBaseResponse;
+import edu.travel.vo.ShopCurrencyVo;
+import edu.travel.web.BaseController;
+import org.springframework.beans.BeanUtils;
+import org.springframework.web.bind.annotation.*;
+
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.util.List;
+
+/**
+* 货币表(shop_currency)表控制层
+*
+* @author xxxxx
+*/
+@RestController
+@RequestMapping("/shop_currency")
+public class ShopCurrencyController extends BaseController<ShopCurrency> implements ShopCurrencyRemoteController {
+/**
+* 服务对象
+*/
+    @Autowired
+    private ShopCurrencyService shopCurrencyService;
+    /**
+     * 分页
+     */
+
+    @GetMapping("/getCurrencyPage")
+    public RPCBaseResponse<IPage<ShopCurrencyVo>> getCurrencyPage(ShopCurrencyDto dto) {
+        return shopCurrencyService.getCurrencyPage(dto);
+    }
+    /**
+     * 获取货币信息
+     * @param id
+     * @return
+     */
+
+    @Override
+    @GetMapping("/getCurrencyFormId")
+    public RPCBaseResponse<ShopCurrencyVo> getFormId(String id) {
+        RPCBaseResponse<ShopCurrency> shopCurrencyRPCBaseResponse = super.getId(id);
+        RPCBaseResponse<ShopCurrencyVo> shopCurrencyVoRPCBaseResponse = new RPCBaseResponse<>();
+        BeanUtils.copyProperties(shopCurrencyRPCBaseResponse, shopCurrencyVoRPCBaseResponse);
+        return shopCurrencyVoRPCBaseResponse;
+    }
+
+    /**
+     * 更新货币信息
+     * @param entity
+     * @return
+     */
+    @Override
+    @PostMapping("/updateCurrencyFormId")
+    public RPCBaseResponse<ShopCurrencyVo> updateTargetFormId(@RequestBody ShopCurrencyDto entity) {
+        ShopCurrency shopCurrency = new ShopCurrency();
+        BeanUtils.copyProperties(entity, shopCurrency);
+        RPCBaseResponse<ShopCurrency> shopCurrencyRPCBaseResponse = super.updateTargetById(shopCurrency);
+        RPCBaseResponse<ShopCurrencyVo> shopCurrencyVoRPCBaseResponse = new RPCBaseResponse<>();
+        BeanUtils.copyProperties(shopCurrencyRPCBaseResponse, shopCurrencyVoRPCBaseResponse);
+        return shopCurrencyVoRPCBaseResponse;
+    }
+
+    /**
+     * 新增货币信息
+     * @param entity
+     * @return
+     */
+    @Override
+    @PostMapping("/saveCurrencyForm")
+    public RPCBaseResponse<ShopCurrencyVo> saveFormTarget(@RequestBody ShopCurrencyDto entity) {
+        ShopCurrency shopCurrency = new ShopCurrency();
+        BeanUtils.copyProperties(entity, shopCurrency);
+        RPCBaseResponse<ShopCurrency> shopCurrencyRPCBaseResponse = super.saveTarget(shopCurrency);
+        RPCBaseResponse<ShopCurrencyVo> shopCurrencyVoRPCBaseResponse = new RPCBaseResponse<>();
+        BeanUtils.copyProperties(shopCurrencyRPCBaseResponse, shopCurrencyVoRPCBaseResponse);
+        return shopCurrencyVoRPCBaseResponse;
+    }
+
+    /**
+     * 删除货币信息
+     * @param ids
+     * @return
+     */
+    @Override
+    @PostMapping("/deleteCurrencyFormId")
+    public RPCBaseResponse<ShopCurrencyVo> deleteTargetFormId(@RequestBody List<String> ids) {
+        RPCBaseResponse<ShopCurrency> shopCurrencyRPCBaseResponse = super.deleteTargetById(ids);
+        RPCBaseResponse<ShopCurrencyVo> shopCurrencyVoRPCBaseResponse = new RPCBaseResponse<>();
+        BeanUtils.copyProperties(shopCurrencyRPCBaseResponse, shopCurrencyVoRPCBaseResponse);
+        return shopCurrencyVoRPCBaseResponse;
+    }
+
+    /**
+     * 获取所有货币信息
+     * @return
+     */
+    @Override
+    @GetMapping("/listCurrencyForm")
+    public RPCBaseResponse<List<ShopCurrencyVo>> getAllForm() {
+        RPCBaseResponse<List<ShopCurrency>> listRPCBaseResponse = super.listAll();
+        RPCBaseResponse<List<ShopCurrencyVo>> shopCurrencyVoRPCBaseResponse = new RPCBaseResponse<>();
+        BeanUtils.copyProperties(listRPCBaseResponse, shopCurrencyVoRPCBaseResponse);
+        return shopCurrencyVoRPCBaseResponse;
+    }
+}

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