Przeglądaj źródła

Merge branch 'sit' into sit-bug-qxy

qinxuyang 2 miesięcy temu
rodzic
commit
1c0447781d
100 zmienionych plików z 3029 dodań i 258 usunięć
  1. 15 74
      alien-api/src/main/resources/logback-spring.xml
  2. 5 0
      alien-entity/src/main/java/shop/alien/entity/second/vo/SecondUserViolationDetailVo.java
  3. 3 3
      alien-entity/src/main/java/shop/alien/entity/store/CommentAppeal.java
  4. 1 0
      alien-entity/src/main/java/shop/alien/entity/store/LifeNotice.java
  5. 1 1
      alien-entity/src/main/java/shop/alien/entity/store/StoreClockIn.java
  6. 24 4
      alien-entity/src/main/java/shop/alien/entity/store/StoreCuisine.java
  7. 66 0
      alien-entity/src/main/java/shop/alien/entity/store/StoreCuisineCategory.java
  8. 4 0
      alien-entity/src/main/java/shop/alien/entity/store/StoreImg.java
  9. 4 0
      alien-entity/src/main/java/shop/alien/entity/store/StoreInfo.java
  10. 4 0
      alien-entity/src/main/java/shop/alien/entity/store/StoreOfficialAlbum.java
  11. 12 0
      alien-entity/src/main/java/shop/alien/entity/store/StoreOperationalStatisticsHistory.java
  12. 125 0
      alien-entity/src/main/java/shop/alien/entity/store/StorePlatformMenu.java
  13. 82 0
      alien-entity/src/main/java/shop/alien/entity/store/StorePlatformRole.java
  14. 44 0
      alien-entity/src/main/java/shop/alien/entity/store/StorePlatformRoleMenu.java
  15. 62 0
      alien-entity/src/main/java/shop/alien/entity/store/StorePlatformUserRole.java
  16. 74 0
      alien-entity/src/main/java/shop/alien/entity/store/StoreTable.java
  17. 78 0
      alien-entity/src/main/java/shop/alien/entity/store/StoreTableLog.java
  18. 20 2
      alien-entity/src/main/java/shop/alien/entity/store/StoreUser.java
  19. 5 1
      alien-entity/src/main/java/shop/alien/entity/store/StoreVideo.java
  20. 21 0
      alien-entity/src/main/java/shop/alien/entity/store/dto/BatchQueryTableStatusDTO.java
  21. 20 0
      alien-entity/src/main/java/shop/alien/entity/store/dto/CuisineComboDto.java
  22. 18 0
      alien-entity/src/main/java/shop/alien/entity/store/dto/CuisineTypeResponseDto.java
  23. 1 1
      alien-entity/src/main/java/shop/alien/entity/store/dto/LifeFeedbackDto.java
  24. 32 0
      alien-entity/src/main/java/shop/alien/entity/store/dto/StoreCuisineCategoryDTO.java
  25. 24 0
      alien-entity/src/main/java/shop/alien/entity/store/dto/StoreCuisineCategorySortDTO.java
  26. 0 36
      alien-entity/src/main/java/shop/alien/entity/store/dto/StoreStaffFitnessCourseGroup.java
  27. 0 37
      alien-entity/src/main/java/shop/alien/entity/store/dto/StoreStaffFitnessCourseItem.java
  28. 28 0
      alien-entity/src/main/java/shop/alien/entity/store/dto/StoreTableChangeDTO.java
  29. 29 0
      alien-entity/src/main/java/shop/alien/entity/store/dto/StoreTableDTO.java
  30. 33 0
      alien-entity/src/main/java/shop/alien/entity/store/dto/StoreVideoSaveDto.java
  31. 22 0
      alien-entity/src/main/java/shop/alien/entity/store/dto/TablewareFeeDto.java
  32. 56 0
      alien-entity/src/main/java/shop/alien/entity/store/dto/deserializer/JsonStringDeserializer.java
  33. 12 1
      alien-entity/src/main/java/shop/alien/entity/store/excelVo/StoreUserExcelVo.java
  34. 6 0
      alien-entity/src/main/java/shop/alien/entity/store/vo/LifeFeedbackListVo.java
  35. 12 0
      alien-entity/src/main/java/shop/alien/entity/store/vo/LifeUserDynamicsVo.java
  36. 1 0
      alien-entity/src/main/java/shop/alien/entity/store/vo/OrderRevenueVO.java
  37. 6 0
      alien-entity/src/main/java/shop/alien/entity/store/vo/PerformerVo.java
  38. 25 0
      alien-entity/src/main/java/shop/alien/entity/store/vo/PermissionItemVo.java
  39. 6 4
      alien-entity/src/main/java/shop/alien/entity/store/vo/PriceListVo.java
  40. 28 0
      alien-entity/src/main/java/shop/alien/entity/store/vo/RolePermissionTableVo.java
  41. 45 0
      alien-entity/src/main/java/shop/alien/entity/store/vo/RolePermissionVo.java
  42. 3 0
      alien-entity/src/main/java/shop/alien/entity/store/vo/StoreInfoVo.java
  43. 3 9
      alien-entity/src/main/java/shop/alien/entity/store/vo/StoreLicenseInfoVo.java
  44. 6 6
      alien-entity/src/main/java/shop/alien/entity/store/vo/StoreOperationalStatisticsComparisonVo.java
  45. 6 6
      alien-entity/src/main/java/shop/alien/entity/store/vo/StoreOperationalStatisticsVo.java
  46. 23 0
      alien-entity/src/main/java/shop/alien/entity/store/vo/StorePlatformMenuVo.java
  47. 33 0
      alien-entity/src/main/java/shop/alien/entity/store/vo/StorePlatformRoleVo.java
  48. 25 0
      alien-entity/src/main/java/shop/alien/entity/store/vo/StoreStaffReviewDetailVo.java
  49. 37 0
      alien-entity/src/main/java/shop/alien/entity/store/vo/StoreSubExcelVo.java
  50. 26 0
      alien-entity/src/main/java/shop/alien/entity/store/vo/StoreTableStatusVO.java
  51. 27 0
      alien-entity/src/main/java/shop/alien/entity/store/vo/StoreUserVo.java
  52. 39 0
      alien-entity/src/main/java/shop/alien/entity/store/vo/SubAccountDetailVo.java
  53. 55 0
      alien-entity/src/main/java/shop/alien/entity/store/vo/SubAccountStoreListVo.java
  54. 37 0
      alien-entity/src/main/java/shop/alien/entity/store/vo/SubAccountVo.java
  55. 39 0
      alien-entity/src/main/java/shop/alien/entity/storePlatform/StoreOperationalActivity.java
  56. 75 0
      alien-entity/src/main/java/shop/alien/entity/storePlatform/StoreOperationalActivityAchievement.java
  57. 93 0
      alien-entity/src/main/java/shop/alien/entity/storePlatform/StoreOperationalActivitySignup.java
  58. 82 0
      alien-entity/src/main/java/shop/alien/entity/storePlatform/StorePlatformOperationLog.java
  59. 61 0
      alien-entity/src/main/java/shop/alien/entity/storePlatform/vo/StoreOperationalActivityAchievementCaseDetailVo.java
  60. 42 0
      alien-entity/src/main/java/shop/alien/entity/storePlatform/vo/StoreOperationalActivityAchievementCaseItemVo.java
  61. 66 0
      alien-entity/src/main/java/shop/alien/entity/storePlatform/vo/StoreOperationalActivityAchievementCaseVo.java
  62. 46 0
      alien-entity/src/main/java/shop/alien/entity/storePlatform/vo/StoreOperationalActivityAchievementVo.java
  63. 26 0
      alien-entity/src/main/java/shop/alien/entity/storePlatform/vo/StoreOperationalActivityDTO.java
  64. 132 0
      alien-entity/src/main/java/shop/alien/entity/storePlatform/vo/StoreOperationalActivityDetailVo.java
  65. 79 0
      alien-entity/src/main/java/shop/alien/entity/storePlatform/vo/StoreOperationalActivityMySignupVo.java
  66. 126 0
      alien-entity/src/main/java/shop/alien/entity/storePlatform/vo/StoreOperationalActivityPlatformDetailVo.java
  67. 30 0
      alien-entity/src/main/java/shop/alien/entity/storePlatform/vo/StoreOperationalActivitySignupCheckVo.java
  68. 23 0
      alien-entity/src/main/java/shop/alien/entity/storePlatform/vo/StoreOperationalActivitySignupIdDTO.java
  69. 32 0
      alien-entity/src/main/java/shop/alien/entity/storePlatform/vo/StoreOperationalActivitySignupQueryDTO.java
  70. 70 0
      alien-entity/src/main/java/shop/alien/entity/storePlatform/vo/StoreOperationalActivitySignupVO.java
  71. 6 0
      alien-entity/src/main/java/shop/alien/entity/storePlatform/vo/StoreOperationalActivityVO.java
  72. 5 0
      alien-entity/src/main/java/shop/alien/mapper/CommonRatingMapper.java
  73. 3 3
      alien-entity/src/main/java/shop/alien/mapper/LifeUserDynamicsMapper.java
  74. 1 1
      alien-entity/src/main/java/shop/alien/mapper/PlatformStoreCouponMapper.java
  75. 1 1
      alien-entity/src/main/java/shop/alien/mapper/PlatformStoreLifeGroupBuyMainMapper.java
  76. 1 1
      alien-entity/src/main/java/shop/alien/mapper/StoreClockInMapper.java
  77. 3 3
      alien-entity/src/main/java/shop/alien/mapper/StoreCommentAppealMapper.java
  78. 13 0
      alien-entity/src/main/java/shop/alien/mapper/StoreCuisineCategoryMapper.java
  79. 1 1
      alien-entity/src/main/java/shop/alien/mapper/StoreInfoMapper.java
  80. 23 2
      alien-entity/src/main/java/shop/alien/mapper/StoreOfficialAlbumMapper.java
  81. 32 0
      alien-entity/src/main/java/shop/alien/mapper/StorePlatformMenuMapper.java
  82. 15 0
      alien-entity/src/main/java/shop/alien/mapper/StorePlatformOperationLogMapper.java
  83. 21 0
      alien-entity/src/main/java/shop/alien/mapper/StorePlatformRoleMapper.java
  84. 17 0
      alien-entity/src/main/java/shop/alien/mapper/StorePlatformRoleMenuMapper.java
  85. 34 0
      alien-entity/src/main/java/shop/alien/mapper/StorePlatformUserRoleMapper.java
  86. 13 0
      alien-entity/src/main/java/shop/alien/mapper/StoreTableLogMapper.java
  87. 13 0
      alien-entity/src/main/java/shop/alien/mapper/StoreTableMapper.java
  88. 11 0
      alien-entity/src/main/java/shop/alien/mapper/StoreTrackEventMapper.java
  89. 2 0
      alien-entity/src/main/java/shop/alien/mapper/StoreUserMapper.java
  90. 31 0
      alien-entity/src/main/java/shop/alien/mapper/SubAccountStoreMapper.java
  91. 68 0
      alien-entity/src/main/java/shop/alien/mapper/storePlantform/StoreOperationalActivityAchievementMapper.java
  92. 81 0
      alien-entity/src/main/java/shop/alien/mapper/storePlantform/StoreOperationalActivitySignupMapper.java
  93. 6 0
      alien-entity/src/main/resources/mapper/CommonRatingMapper.xml
  94. 3 0
      alien-entity/src/main/resources/mapper/LifeFeedbackMapper.xml
  95. 110 31
      alien-entity/src/main/resources/mapper/LifeUserDynamicsMapper.xml
  96. 10 3
      alien-entity/src/main/resources/mapper/StoreCuisineMapper.xml
  97. 25 27
      alien-entity/src/main/resources/mapper/StoreInfoMapper.xml
  98. 41 0
      alien-entity/src/main/resources/mapper/StorePlatformMenuMapper.xml
  99. 36 0
      alien-entity/src/main/resources/mapper/StorePlatformUserRoleMapper.xml
  100. 7 0
      alien-entity/src/main/resources/mapper/StoreStaffReviewMapper.xml

+ 15 - 74
alien-api/src/main/resources/logback-spring.xml

@@ -1,40 +1,28 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- 日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为WARN,则低于WARN的信息都不会输出 -->
-<!-- scan:当此属性设置为true时,配置文档如果发生改变,将会被重新加载,默认值为true -->
-<!-- scanPeriod:设置监测配置文档是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。 -->
-<!-- debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 -->
-<!-- 该信息是由于设置了当配置文件变化时重新加载,所以每当达到扫描时间的时候就会检查配置文件是否错误。但是由于一般配置文件都放在了JAR包中,
-    而扫描的时候无法扫描JAR包内,因此会提示没有可以检查的文件,所以每隔一段时间就输出一次-->
-<configuration scan="false" scanPeriod="60 seconds" debug="true">
-    <contextName>logback-spring</contextName>
+<configuration scan="false" scanPeriod="60 seconds" debug="false">
 
-    <!-- name的值是变量的名称,value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义后,可以使“${}”来使用变量。 -->
     <!-- 定义全局参数常量 -->
     <property name="log.level" value="debug"/>
-    <property name="log.maxHistory" value="30"/><!-- 30表示30 -->
+    <property name="log.maxHistory" value="30"/><!-- 30表示30天 -->
     <springProperty scope="context" name="logging.path" source="logging.path" defaultValue="C:/project/ext/log"/>
     <!--输出文件前缀-->
-    <property name="FILENAME" value="xiaokuihua_api"/>
-
-    <!--0. 日志格式和颜色渲染 -->
-    <!-- 彩色日志依赖的渲染类 -->
-    <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/>
-    <conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/>
-    <conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/>
+    <property name="FILENAME" value="alien"/>
 
     <!-- 文件输出格式 -->
     <property name="FILE_LOG_PATTERN" value="[%d{MM/dd HH:mm:ss.SSS}][%-10.10thread][%-5level][%-40.40c{1}:%5line]:[%15method] || %m%n"/>
-    <property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
+    
+    <!-- 控制台输出格式:纯文本,无颜色,适合 Docker/EFK -->
+    <property name="CONSOLE_LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5p ${PID:- } --- [%15.15t] %-40.40logger{39} : %m%n"/>
 
     <!--1. 输出到控制台-->
     <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
-        <!--此日志appender是为开发使用,只配置最底级别,控制台输出的日志级别是大于或等于此级别的日志信息-->
+        <!-- 【关键】控制台只输出 INFO 及以上,防止 SQL 刷屏 ES -->
         <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
-            <level>${log.level}</level>
+            <level>INFO</level>
         </filter>
         <encoder>
             <Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
-            <!-- 设置字符集 -->
             <charset>UTF-8</charset>
         </encoder>
     </appender>
@@ -42,27 +30,17 @@
     <!--2. 输出到文档-->
     <!-- DEBUG 日志 -->
     <appender name="DEBUG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
-        <!-- 当前的日志文件存放路径 -->
         <file>${logging.path}/DEBUG.log</file>
-        <!-- 日志滚动策略 -->
         <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-            <!-- 历史日志文件的存放路径和名称 -->
             <fileNamePattern>${logging.path}/%d{yyyy-MM-dd}_${FILENAME}_DEBUG.log.gz</fileNamePattern>
-            <!-- 日志文件最大的保存历史 数量-->
             <maxHistory>${log.maxHistory}</maxHistory>
         </rollingPolicy>
         <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
-            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
             <pattern>${FILE_LOG_PATTERN}</pattern>
         </encoder>
-        <!--日志文件最大的大小-->
-        <!--        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">-->
-        <!--            <MaxFileSize>10MB</MaxFileSize>-->
-        <!--        </triggeringPolicy>-->
-        <!-- 此日志文档只记录debug级别的 -->
         <filter class="ch.qos.logback.classic.filter.LevelFilter">
             <level>DEBUG</level>
-            <onMatch>ACCEPT</onMatch>  <!-- 用过滤器,只接受DEBUG级别的日志信息,其余全部过滤掉 -->
+            <onMatch>ACCEPT</onMatch>
             <onMismatch>DENY</onMismatch>
         </filter>
     </appender>
@@ -117,41 +95,14 @@
         </filter>
     </appender>
 
-    <!--
-      <logger>用来设置某一个包或者具体的某一个类的日志打印级别、
-      以及指定<appender>。<logger>仅有一个name属性,
-      一个可选的level和一个可选的addtivity属性。
-      name:用来指定受此logger约束的某一个包或者具体的某一个类。
-      level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,
-         还有一个特俗值INHERITED或者同义词NULL,代表强制执行上级的级别。
-         如果未设置此属性,那么当前logger将会继承上级的级别。
-      addtivity:是否向上级logger传递打印信息。默认是true。
-      <logger name="org.springframework.web" level="info"/>
-      <logger name="org.springframework.scheduling.annotation.ScheduledAnnotationBeanPostProcessor" level="INFO"/>
-    -->
-
-    <!--
-      使用mybatis的时候,sql语句是debug下才会打印,而这里我们只配置了info,所以想要查看sql语句的话,有以下两种操作:
-      第一种把<root level="info">改成<root level="DEBUG">这样就会打印sql,不过这样日志那边会出现很多其他消息
-      第二种就是单独给dao下目录配置debug模式,代码如下,这样配置sql语句会打印,其他还是正常info级别:
-      【logging.level.org.mybatis=debug logging.level.dao=debug】
-     -->
-    <!-- mybatis显示sql,修改此处扫描包名 -->
-
-
-    <!--
-      root节点是必选节点,用来指定最基础的日志输出级别,只有一个level属性
-      level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,
-      不能设置为INHERITED或者同义词NULL。默认是DEBUG
-      可以包含零个或多个元素,标识这个appender将会添加到这个logger。
-    -->
+    <!-- 降噪配置 -->
+    <logger name="springfox.documentation.spring.web.readers.operation.CachingOperationNameGenerator" level="WARN"/>
+    <logger name="org.springframework.security.web.DefaultSecurityFilterChain " level="WARN"/>
+    <logger name="com.netflix.config.sources.URLConfigurationSource " level="WARN"/>
+    <logger name="com.netflix.discovery" level="WARN"/>
+    <logger name="org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/]" level="WARN"/>
 
     <!-- 4. 最终的策略 -->
-    <!-- 4.1 开发环境:打印控制台-->
-    <!--打印sql-->
-    <!--    <logger name="com.veryhappy.music.dao" level="debug"/>-->
-
-    <!--打印log-->
     <root level="info">
         <appender-ref ref="CONSOLE"/>
         <appender-ref ref="DEBUG_FILE"/>
@@ -160,14 +111,4 @@
         <appender-ref ref="ERROR_FILE"/>
     </root>
 
-    <!--   4.2 生产环境:输出到文档-->
-    <springProfile name="pro">
-        <root level="info">
-            <appender-ref ref="CONSOLE"/>
-            <appender-ref ref="DEBUG_FILE"/>
-            <appender-ref ref="INFO_FILE"/>
-            <appender-ref ref="ERROR_FILE"/>
-            <appender-ref ref="WARN_FILE"/>
-        </root>
-    </springProfile>
 </configuration>

+ 5 - 0
alien-entity/src/main/java/shop/alien/entity/second/vo/SecondUserViolationDetailVo.java

@@ -5,6 +5,7 @@ import com.fasterxml.jackson.annotation.JsonInclude;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
+import shop.alien.entity.store.CommonComment;
 import shop.alien.entity.store.LifeUserDynamics;
 import shop.alien.entity.store.StoreComment;
 
@@ -42,4 +43,8 @@ public class SecondUserViolationDetailVo extends SecondUserViolationVo{
     @ApiModelProperty(value = "评论信息")
     StoreComment commentInfo;
 
+    // 评论信息
+    @ApiModelProperty(value = "评论信息")
+    CommonComment commonCommentInfo;
+
 }

+ 3 - 3
alien-entity/src/main/java/shop/alien/entity/store/CommentAppeal.java

@@ -97,8 +97,8 @@ public class CommentAppeal extends Model<CommentAppeal> {
     @TableField("order_id")
     private Integer orderId;
 
-//    @ApiModelProperty(value = "评价图片")
-//    @TableField("review_images")
-//    private String reviewImages;
+    @ApiModelProperty(value = "评价图片")
+    @TableField("review_images")
+    private String reviewImages;
 }
 

+ 1 - 0
alien-entity/src/main/java/shop/alien/entity/store/LifeNotice.java

@@ -30,6 +30,7 @@ public class LifeNotice {
     private Integer businessId;
 
     @ApiModelProperty(value = "标题")
+    @TableField(value = "title", insertStrategy = FieldStrategy.IGNORED)
     private String title;
 
     @ApiModelProperty(value = "公告内容")

+ 1 - 1
alien-entity/src/main/java/shop/alien/entity/store/StoreClockIn.java

@@ -80,7 +80,7 @@ public class StoreClockIn extends Model<StoreClockIn> {
     @TableField(value = "updated_user_id", fill = FieldFill.INSERT_UPDATE)
     private Integer updatedUserId;
 
-    @ApiModelProperty(value = "是否审核(未审核:0,审核中:1,审核完成:2)")
+    @ApiModelProperty(value = "是否审核(未审核:0,审核中:1,审核通过:2,审核拒绝:3)")
     @TableField("check_flag")
     private Integer checkFlag;
 

+ 24 - 4
alien-entity/src/main/java/shop/alien/entity/store/StoreCuisine.java

@@ -30,6 +30,14 @@ public class StoreCuisine {
     @TableField("store_id")
     private Integer storeId;
 
+    @ApiModelProperty(value = "美食类型: 1-单品,2-套餐")
+    @TableField("cuisine_type")
+    private Integer cuisineType;
+
+    @ApiModelProperty(value = "菜品分类ids(JSON数组,如:[1,2,3])")
+    @TableField("category_ids")
+    private String categoryIds;
+
     @ApiModelProperty(value = "菜名")
     @TableField("name")
     private String name;
@@ -38,6 +46,18 @@ public class StoreCuisine {
     @TableField("total_price")
     private BigDecimal totalPrice;
 
+    @ApiModelProperty(value = "首页展示(0:否, 1:是)")
+    @TableField("is_homepage_display")
+    private Integer isHomepageDisplay;
+
+    @ApiModelProperty(value = "菜品标签(JSON数组,如:[\"招牌菜\",\"推荐\"])")
+    @TableField("tags")
+    private String tags;
+
+    @ApiModelProperty(value = "菜品短评")
+    @TableField("dish_review")
+    private String dishReview;
+
     @ApiModelProperty(value = "图片列表,最多 9 张 URL")
     @TableField("images")
     private String images;
@@ -54,6 +74,10 @@ public class StoreCuisine {
     @TableField("detail_content")
     private String detailContent;
 
+    @ApiModelProperty(value = "菜品描述")
+    @TableField("description")
+    private String description;
+
     @ApiModelProperty(value = "补充说明")
     @TableField("extra_note")
     private String extraNote;
@@ -86,10 +110,6 @@ public class StoreCuisine {
     @TableField("rejection_reason")
     private String rejectionReason;
 
-    @ApiModelProperty(value = "美食类型: 1-单品,2-套餐")
-    @TableField("cuisine_type")
-    private Integer cuisineType;
-
     @ApiModelProperty(value = "删除标记, 0:未删除, 1:已删除")
     @TableField("delete_flag")
     @TableLogic

+ 66 - 0
alien-entity/src/main/java/shop/alien/entity/store/StoreCuisineCategory.java

@@ -0,0 +1,66 @@
+package shop.alien.entity.store;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 菜品分类表
+ *
+ * @author system
+ * @since 2025-01-XX
+ */
+@Data
+@JsonInclude
+@TableName("store_cuisine_category")
+@ApiModel(value = "StoreCuisineCategory对象", description = "菜品分类表")
+public class StoreCuisineCategory {
+
+    @ApiModelProperty(value = "主键ID")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty(value = "门店ID")
+    @TableField("store_id")
+    private Integer storeId;
+
+    @ApiModelProperty(value = "分类名称")
+    @TableField("category_name")
+    private String categoryName;
+
+    @ApiModelProperty(value = "状态(0:禁用, 1:启用)")
+    @TableField("status")
+    private Integer status;
+
+    @ApiModelProperty(value = "排序")
+    @TableField("sort")
+    private Integer sort;
+
+    @ApiModelProperty(value = "删除标记, 0:未删除, 1:已删除")
+    @TableField("delete_flag")
+    @TableLogic
+    private Integer deleteFlag;
+
+    @ApiModelProperty(value = "创建时间")
+    @TableField(value = "created_time", fill = FieldFill.INSERT)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date createdTime;
+
+    @ApiModelProperty(value = "创建人ID")
+    @TableField("created_user_id")
+    private Integer createdUserId;
+
+    @ApiModelProperty(value = "修改时间")
+    @TableField(value = "updated_time", fill = FieldFill.INSERT_UPDATE)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date updatedTime;
+
+    @ApiModelProperty(value = "修改人ID")
+    @TableField("updated_user_id")
+    private Integer updatedUserId;
+}

+ 4 - 0
alien-entity/src/main/java/shop/alien/entity/store/StoreImg.java

@@ -84,4 +84,8 @@ public class StoreImg extends Model<StoreImg> {
     @ApiModelProperty(value = "相册名称")
     @TableField(exist = false)
     private String albumName;
+
+    @ApiModelProperty(value = "活动类型:COMMENT-评论有礼,MARKETING-营销活动")
+    @TableField(exist = false)
+    private String activityType;
 }

+ 4 - 0
alien-entity/src/main/java/shop/alien/entity/store/StoreInfo.java

@@ -355,4 +355,8 @@ public class StoreInfo {
     @TableField("store_tickets")
     private Integer storeTickets;
 
+    @ApiModelProperty(value = "餐具费(限2位正整数)")
+    @TableField("tableware_fee")
+    private Integer tablewareFee;
+
 }

+ 4 - 0
alien-entity/src/main/java/shop/alien/entity/store/StoreOfficialAlbum.java

@@ -32,6 +32,10 @@ public class StoreOfficialAlbum extends Model<StoreOfficialAlbum> {
     @ApiModelProperty(value = "相册名称")
     @TableField("album_name")
     private String albumName;
+    
+    @ApiModelProperty(value = "是否固定 (0-否, 1-是)")
+    @TableField("is_fixed")
+    private Integer isFixed;
 
     @ApiModelProperty(value = "删除标记, 0:未删除, 1:已删除")
     @TableField("delete_flag")

+ 12 - 0
alien-entity/src/main/java/shop/alien/entity/store/StoreOperationalStatisticsHistory.java

@@ -62,6 +62,18 @@ public class StoreOperationalStatisticsHistory {
     @TableField("pdf_url")
     private String pdfUrl;
 
+    @ApiModelProperty(value = "AI分析是否完成, 0:未完成, 1:已完成")
+    @TableField("ai_analysis_completed")
+    private Integer aiAnalysisCompleted;
+
+    @ApiModelProperty(value = "总结")
+    @TableField("summary")
+    private String summary;
+
+    @ApiModelProperty(value = "优化建议")
+    @TableField("optimization_suggestions")
+    private String optimizationSuggestions;
+
     @ApiModelProperty(value = "删除标记, 0:未删除, 1:已删除")
     @TableField("delete_flag")
     @TableLogic

+ 125 - 0
alien-entity/src/main/java/shop/alien/entity/store/StorePlatformMenu.java

@@ -0,0 +1,125 @@
+package shop.alien.entity.store;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 商家PC菜单权限表
+ *
+ * @author system
+ * @since 2025-01-XX
+ */
+@Data
+@JsonInclude
+@JsonIgnoreProperties(ignoreUnknown = true)
+@TableName("store_platform_menu")
+@ApiModel(value = "StorePlatformMenu对象", description = "商家PC菜单权限表")
+public class StorePlatformMenu implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "菜单ID")
+    @TableId(value = "menu_id", type = IdType.AUTO)
+    private Long menuId;
+
+    @ApiModelProperty(value = "菜单名称")
+    @TableField("menu_name")
+    private String menuName;
+
+    @ApiModelProperty(value = "父菜单ID(0表示根菜单)")
+    @TableField("parent_id")
+    private Long parentId;
+
+    @ApiModelProperty(value = "菜单类型(M目录 C菜单 F按钮)")
+    @TableField("menu_type")
+    private String menuType;
+
+    @ApiModelProperty(value = "显示顺序")
+    @TableField("menu_sort")
+    private Integer menuSort;
+
+    @ApiModelProperty(value = "菜单层级(1一级菜单 2二级菜单 3三级菜单)")
+    @TableField("level")
+    private Integer level;
+
+    @ApiModelProperty(value = "路由地址")
+    @TableField("path")
+    private String path;
+
+    @ApiModelProperty(value = "组件路径")
+    @TableField("component")
+    private String component;
+
+    @ApiModelProperty(value = "权限标识(如:sys:user:list)")
+    @TableField("perms")
+    private String perms;
+
+    @ApiModelProperty(value = "菜单图标")
+    @TableField("icon")
+    private String icon;
+
+    @ApiModelProperty(value = "菜单状态(0正常 1停用)")
+    @TableField("status")
+    private String status;
+
+    @ApiModelProperty(value = "是否显示(0显示 1隐藏)")
+    @TableField("visible")
+    private String visible;
+
+    @ApiModelProperty(value = "是否为外链(0是 1否)")
+    @TableField("is_frame")
+    private String isFrame;
+
+    @ApiModelProperty(value = "是否缓存(0缓存 1不缓存)")
+    @TableField("is_cache")
+    private String isCache;
+
+    @ApiModelProperty(value = "删除标志(0存在 2删除)")
+    @TableField("del_flag")
+    @TableLogic(value = "0", delval = "2")
+    private String delFlag;
+
+    @ApiModelProperty(value = "创建者")
+    @TableField("create_by")
+    private String createBy;
+
+    @ApiModelProperty(value = "创建时间")
+    @TableField(value = "created_time", fill = FieldFill.INSERT)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date createdTime;
+
+    @ApiModelProperty(value = "更新者")
+    @TableField("update_by")
+    private String updateBy;
+
+    @ApiModelProperty(value = "更新时间")
+    @TableField(value = "updated_time", fill = FieldFill.INSERT_UPDATE)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date updatedTime;
+
+    @ApiModelProperty(value = "备注")
+    @TableField("remark")
+    private String remark;
+
+    @ApiModelProperty(value = "子菜单列表(用于树形结构)")
+    @TableField(exist = false)
+    private List<StorePlatformMenu> children;
+
+    @ApiModelProperty(value = "一级分类名称(用于展示,只读)")
+    @TableField(exist = false)
+    private String firstLevelMenuName;
+
+    @ApiModelProperty(value = "二级分类名称(用于展示,只读)")
+    @TableField(exist = false)
+    private String secondLevelMenuName;
+}
+

+ 82 - 0
alien-entity/src/main/java/shop/alien/entity/store/StorePlatformRole.java

@@ -0,0 +1,82 @@
+package shop.alien.entity.store;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 平台角色信息表
+ *
+ * @author system
+ * @since 2025-01-XX
+ */
+@Data
+@JsonInclude
+@TableName("store_platform_role")
+@ApiModel(value = "StorePlatformRole对象", description = "平台角色信息表")
+public class StorePlatformRole implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "角色ID")
+    @TableId(value = "role_id", type = IdType.AUTO)
+    private Long roleId;
+
+    @ApiModelProperty(value = "店铺ID")
+    @TableField("store_id")
+    private Integer storeId;
+
+    @ApiModelProperty(value = "角色名称")
+    @TableField("role_name")
+    private String roleName;
+
+    @ApiModelProperty(value = "显示顺序")
+    @TableField("role_sort")
+    private Integer roleSort;
+
+    @ApiModelProperty(value = "角色状态(0正常 1停用)")
+    @TableField("status")
+    private String status;
+
+    @ApiModelProperty(value = "删除标志(0代表存在 2代表删除)")
+    @TableField("del_flag")
+    @TableLogic(value = "0", delval = "2")
+    private String delFlag;
+
+    @ApiModelProperty(value = "创建者")
+    @TableField("create_by")
+    private String createBy;
+
+    @ApiModelProperty(value = "创建时间")
+    @TableField(value = "created_time", fill = FieldFill.INSERT)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date createdTime;
+
+    @ApiModelProperty(value = "更新者")
+    @TableField("update_by")
+    private String updateBy;
+
+    @ApiModelProperty(value = "更新时间")
+    @TableField(value = "updated_time", fill = FieldFill.INSERT_UPDATE)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date updatedTime;
+
+    @ApiModelProperty(value = "备注")
+    @TableField("remark")
+    private String remark;
+
+    @ApiModelProperty(value = "描述")
+    @TableField("description")
+    private String description;
+
+    @ApiModelProperty(value = "英文角色名称")
+    @TableField("role_name_en")
+    private String roleNameEn;
+}
+

+ 44 - 0
alien-entity/src/main/java/shop/alien/entity/store/StorePlatformRoleMenu.java

@@ -0,0 +1,44 @@
+package shop.alien.entity.store;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 角色菜单关联表
+ *
+ * @author system
+ * @since 2025-01-XX
+ */
+@Data
+@JsonInclude
+@TableName("store_platform_role_menu")
+@ApiModel(value = "StorePlatformRoleMenu对象", description = "角色菜单关联表")
+public class StorePlatformRoleMenu implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "主键ID")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    @ApiModelProperty(value = "角色ID")
+    @TableField("role_id")
+    private Long roleId;
+
+    @ApiModelProperty(value = "菜单ID")
+    @TableField("menu_id")
+    private Long menuId;
+
+    @ApiModelProperty(value = "创建时间")
+    @TableField(value = "created_time", fill = FieldFill.INSERT)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date createdTime;
+}
+

+ 62 - 0
alien-entity/src/main/java/shop/alien/entity/store/StorePlatformUserRole.java

@@ -0,0 +1,62 @@
+package shop.alien.entity.store;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 用户角色关联表
+ *
+ * @author system
+ * @since 2025-01-XX
+ */
+@Data
+@JsonInclude
+@TableName("store_platform_user_role")
+@ApiModel(value = "StorePlatformUserRole对象", description = "用户角色关联表")
+public class StorePlatformUserRole implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "主键ID")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    @ApiModelProperty(value = "用户ID(关联store_user.id)")
+    @TableField("user_id")
+    private Integer userId;
+
+    @ApiModelProperty(value = "角色ID(关联store_platform_role.role_id)")
+    @TableField("role_id")
+    private Long roleId;
+
+    @ApiModelProperty(value = "创建时间")
+    @TableField(value = "created_time", fill = FieldFill.INSERT)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date createdTime;
+
+    @ApiModelProperty(value = "店铺ID")
+    @TableField("store_id")
+    private Integer storeId;
+
+    @ApiModelProperty(value = "删除标志(0未删除 1已删除)")
+    @TableField("delete_flag")
+    @TableLogic(value = "0", delval = "1")
+    private Integer deleteFlag;
+
+
+    @ApiModelProperty(value = "删除标志(0未删除 1已删除)")
+    @TableField("account_name")
+    private String accountName;
+
+    @ApiModelProperty(value = "禁用标志(0启用 1 禁用)")
+    @TableField("status")
+    private Integer status;
+
+}

+ 74 - 0
alien-entity/src/main/java/shop/alien/entity/store/StoreTable.java

@@ -0,0 +1,74 @@
+package shop.alien.entity.store;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 桌号表
+ *
+ * @author system
+ * @since 2025-01-XX
+ */
+@Data
+@JsonInclude
+@TableName("store_table")
+@ApiModel(value = "StoreTable对象", description = "桌号表")
+public class StoreTable {
+
+    @ApiModelProperty(value = "主键ID")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty(value = "门店ID")
+    @TableField("store_id")
+    private Integer storeId;
+
+    @ApiModelProperty(value = "桌号")
+    @TableField("table_number")
+    private String tableNumber;
+
+    @ApiModelProperty(value = "当前进行中的订单ID(订单结账或取消后清空)")
+    @TableField("current_order_id")
+    private Integer currentOrderId;
+
+    @ApiModelProperty(value = "二维码URL")
+    @TableField("qrcode_url")
+    private String qrcodeUrl;
+
+    @ApiModelProperty(value = "状态(0:空闲, 1:就餐中, 2:其他)")
+    @TableField("status")
+    private Integer status;
+
+    @ApiModelProperty(value = "备注")
+    @TableField("remark")
+    private String remark;
+
+    @ApiModelProperty(value = "删除标记, 0:未删除, 1:已删除")
+    @TableField("delete_flag")
+    @TableLogic
+    private Integer deleteFlag;
+
+    @ApiModelProperty(value = "创建时间")
+    @TableField(value = "created_time", fill = FieldFill.INSERT)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date createdTime;
+
+    @ApiModelProperty(value = "创建人ID")
+    @TableField("created_user_id")
+    private Integer createdUserId;
+
+    @ApiModelProperty(value = "修改时间")
+    @TableField(value = "updated_time", fill = FieldFill.INSERT_UPDATE)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date updatedTime;
+
+    @ApiModelProperty(value = "修改人ID")
+    @TableField("updated_user_id")
+    private Integer updatedUserId;
+}

+ 78 - 0
alien-entity/src/main/java/shop/alien/entity/store/StoreTableLog.java

@@ -0,0 +1,78 @@
+package shop.alien.entity.store;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 桌号换桌记录表
+ *
+ * @author system
+ * @since 2025-01-XX
+ */
+@Data
+@JsonInclude
+@TableName("store_table_log")
+@ApiModel(value = "StoreTableLog对象", description = "桌号换桌记录表")
+public class StoreTableLog {
+
+    @ApiModelProperty(value = "主键ID")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty(value = "门店ID")
+    @TableField("store_id")
+    private Integer storeId;
+
+    @ApiModelProperty(value = "订单ID")
+    @TableField("order_id")
+    private Integer orderId;
+
+    @ApiModelProperty(value = "原桌号ID")
+    @TableField("from_table_id")
+    private Integer fromTableId;
+
+    @ApiModelProperty(value = "原桌号")
+    @TableField("from_table_number")
+    private String fromTableNumber;
+
+    @ApiModelProperty(value = "目标桌号ID")
+    @TableField("to_table_id")
+    private Integer toTableId;
+
+    @ApiModelProperty(value = "目标桌号")
+    @TableField("to_table_number")
+    private String toTableNumber;
+
+    @ApiModelProperty(value = "换桌原因")
+    @TableField("change_reason")
+    private String changeReason;
+
+    @ApiModelProperty(value = "删除标记, 0:未删除, 1:已删除")
+    @TableField("delete_flag")
+    @TableLogic
+    private Integer deleteFlag;
+
+    @ApiModelProperty(value = "创建时间")
+    @TableField(value = "created_time", fill = FieldFill.INSERT)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date createdTime;
+
+    @ApiModelProperty(value = "创建人ID")
+    @TableField("created_user_id")
+    private Integer createdUserId;
+
+    @ApiModelProperty(value = "修改时间")
+    @TableField(value = "updated_time", fill = FieldFill.INSERT_UPDATE)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date updatedTime;
+
+    @ApiModelProperty(value = "修改人ID")
+    @TableField("updated_user_id")
+    private Integer updatedUserId;
+}

+ 20 - 2
alien-entity/src/main/java/shop/alien/entity/store/StoreUser.java

@@ -10,6 +10,7 @@ import lombok.Data;
 import shop.alien.util.encryption.EncryptTypeHandler;
 
 import java.util.Date;
+import java.util.List;
 
 /**
  * 二期-门店用户
@@ -31,7 +32,7 @@ public class StoreUser extends Model<StoreUser> {
         this.money = money;
     }
 
-    @ApiModelProperty(value = "主键")
+    @ApiModelProperty(value = "主键(主账号Id)")
     @TableId(value = "id", type = IdType.AUTO)
     private Integer id;
 
@@ -64,10 +65,11 @@ public class StoreUser extends Model<StoreUser> {
     @TableField("money")
     private Integer money;
 
-    @ApiModelProperty(value = "用户状态")
+    @ApiModelProperty(value = "用户状态,0:启用 1:禁用")
     @TableField("status")
     private Integer status;
 
+
     @ApiModelProperty(value = "密码状态, 0:初始密码, 1:已修改, 2:手机号已验证")
     @TableField("pass_type")
     private Integer passType;
@@ -136,4 +138,20 @@ public class StoreUser extends Model<StoreUser> {
     private String jianjie;
     @TableField(exist = false)
     private String moneyStr;
+    @ApiModelProperty(value = "账号类型,1:主账号,2:子账号")
+    @TableField("account_type")
+    private  Integer accountType;
+    @ApiModelProperty(value = "子账号Id")
+    @TableField("sub_account_id")
+    private Integer subAccountId;
+    @TableField(exist = false)
+    private Integer storeUserParentAccount;
+    @TableField(exist = false)
+    @ApiModelProperty(value = "子账号数量")
+    private Integer childAccountCount;
+    @ApiModelProperty(value = "子账号联系方式列表")
+    @TableField(exist = false)
+    private List<String> childPhoneNumbers;
+
+
 }

+ 5 - 1
alien-entity/src/main/java/shop/alien/entity/store/StoreVideo.java

@@ -4,10 +4,13 @@ import com.baomidou.mybatisplus.annotation.*;
 import com.baomidou.mybatisplus.extension.activerecord.Model;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
+import shop.alien.entity.store.dto.deserializer.JsonStringDeserializer;
 
 import java.util.Date;
 
@@ -40,8 +43,9 @@ public class StoreVideo extends Model<StoreVideo> {
     @TableField("img_sort")
     private Integer imgSort;
 
-    @ApiModelProperty(value = "视频链接")
+    @ApiModelProperty(value = "视频链接和封面地址")
     @TableField("img_url")
+    @JsonDeserialize(using = JsonStringDeserializer.class)
     private String imgUrl;
 
     @ApiModelProperty(value = "删除标记, 0:未删除, 1:已删除")

+ 21 - 0
alien-entity/src/main/java/shop/alien/entity/store/dto/BatchQueryTableStatusDTO.java

@@ -0,0 +1,21 @@
+package shop.alien.entity.store.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 批量查询桌号状态DTO
+ *
+ * @author system
+ * @since 2025-01-XX
+ */
+@Data
+@ApiModel(value = "BatchQueryTableStatusDTO对象", description = "批量查询桌号状态")
+public class BatchQueryTableStatusDTO {
+
+    @ApiModelProperty(value = "桌号ID列表", required = true)
+    private List<Integer> tableIds;
+}

+ 20 - 0
alien-entity/src/main/java/shop/alien/entity/store/dto/CuisineComboDto.java

@@ -28,6 +28,10 @@ public class CuisineComboDto {
     @TableField("cuisine_type")
     private Integer cuisineType;
 
+    @ApiModelProperty(value = "菜品分类ids(JSON数组,如:[1,2,3])")
+    @TableField("category_ids")
+    private String categoryIds;
+
     @ApiModelProperty(value = "商户id")
     @TableField("store_id")
     private Integer storeId;
@@ -40,6 +44,18 @@ public class CuisineComboDto {
     @TableField("total_price")
     private BigDecimal totalPrice;
 
+    @ApiModelProperty(value = "首页展示(0:否, 1:是)")
+    @TableField("is_homepage_display")
+    private Integer isHomepageDisplay;
+
+    @ApiModelProperty(value = "菜品标签(JSON数组,如:[\"招牌菜\",\"推荐\"])")
+    @TableField("tags")
+    private String tags;
+
+    @ApiModelProperty(value = "菜品短评")
+    @TableField("dish_review")
+    private String dishReview;
+
     @ApiModelProperty(value = "图片列表,最多 9 张 URL")
     @TableField("images")
     private String images;
@@ -52,6 +68,10 @@ public class CuisineComboDto {
     @TableField("detail_content")
     private String detailContent;
 
+    @ApiModelProperty(value = "菜品描述")
+    @TableField("description")
+    private String description;
+
     @ApiModelProperty(value = "补充说明")
     @TableField("extra_note")
     private String extraNote;

+ 18 - 0
alien-entity/src/main/java/shop/alien/entity/store/dto/CuisineTypeResponseDto.java

@@ -38,6 +38,21 @@ public class CuisineTypeResponseDto {
         @ApiModelProperty(value = "总价")
         private BigDecimal totalPrice;
 
+        @ApiModelProperty(value = "菜品分类ids(JSON数组,如:[1,2,3])")
+        private String categoryIds;
+
+        @ApiModelProperty(value = "菜品分类名称(JSON数组,如:[\"热菜\",\"凉菜\"])")
+        private String categoryNames;
+
+        @ApiModelProperty(value = "首页展示(0:否, 1:是)")
+        private Integer isHomepageDisplay;
+
+        @ApiModelProperty(value = "菜品标签(JSON数组,如:[\"招牌菜\",\"推荐\"])")
+        private String tags;
+
+        @ApiModelProperty(value = "菜品短评")
+        private String dishReview;
+
         @ApiModelProperty(value = "图片列表,最多 9 张 URL,逗号分隔")
         private String images;
 
@@ -50,6 +65,9 @@ public class CuisineTypeResponseDto {
         @ApiModelProperty(value = "图文详情-文字")
         private String detailContent;
 
+        @ApiModelProperty(value = "菜品描述")
+        private String description;
+
         @ApiModelProperty(value = "补充说明")
         private String extraNote;
 

+ 1 - 1
alien-entity/src/main/java/shop/alien/entity/store/dto/LifeFeedbackDto.java

@@ -24,7 +24,7 @@ public class LifeFeedbackDto implements Serializable {
     @ApiModelProperty(value = "反馈方式:0-用户反馈,1-AI识别")
     private Integer feedbackWay;
 
-    @ApiModelProperty(value = "反馈类型:0-bug反馈,1-优化反馈,2-新增功能反馈")
+    @ApiModelProperty(value = "反馈类型:0-bug反馈,1-优化反馈,2-功能反馈")
     private Integer feedbackType;
 
     @ApiModelProperty(value = "反馈内容")

+ 32 - 0
alien-entity/src/main/java/shop/alien/entity/store/dto/StoreCuisineCategoryDTO.java

@@ -0,0 +1,32 @@
+package shop.alien.entity.store.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 菜品分类管理DTO
+ * 用于批量创建和编辑菜品分类
+ *
+ * @author system
+ * @since 2025-01-XX
+ */
+@Data
+@ApiModel(value = "StoreCuisineCategoryDTO对象", description = "菜品分类管理DTO")
+public class StoreCuisineCategoryDTO {
+
+    @ApiModelProperty(value = "分类ID", notes = "编辑分类时必填")
+    private Integer id;
+
+    @ApiModelProperty(value = "门店ID", notes = "批量创建分类时必填")
+    private Integer storeId;
+
+    @ApiModelProperty(value = "分类名称", notes = "编辑分类时必填")
+    private String categoryName;
+
+    @ApiModelProperty(value = "分类名称列表", notes = "批量创建分类时必填,多个分类名称用英文逗号分隔,如:热菜,水果,甜品")
+    private String categoryNames;
+
+}

+ 24 - 0
alien-entity/src/main/java/shop/alien/entity/store/dto/StoreCuisineCategorySortDTO.java

@@ -0,0 +1,24 @@
+package shop.alien.entity.store.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 菜品分类排序DTO
+ *
+ * @author system
+ * @since 2025-01-XX
+ */
+@Data
+@ApiModel(value = "StoreCuisineCategorySortDTO对象", description = "菜品分类排序DTO")
+public class StoreCuisineCategorySortDTO {
+
+    @ApiModelProperty(value = "门店ID", required = true)
+    private Integer storeId;
+
+    @ApiModelProperty(value = "分类排序列表", required = true, notes = "按顺序排列的分类ID列表")
+    private List<Integer> categoryIds;
+}

+ 0 - 36
alien-entity/src/main/java/shop/alien/entity/store/dto/StoreStaffFitnessCourseGroup.java

@@ -1,36 +0,0 @@
-package shop.alien.entity.store.dto;
-
-import com.fasterxml.jackson.annotation.JsonInclude;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import java.io.Serializable;
-import java.util.List;
-
-/**
- * 运动健身-课程类型分组(用于前端“课程类型下多项目”的绑定;不直接映射数据库表)
- */
-@Data
-@JsonInclude
-@ApiModel(value = "StoreStaffFitnessCourseGroup对象", description = "运动健身-课程类型分组(分组结构用)")
-public class StoreStaffFitnessCourseGroup implements Serializable {
-
-    private static final long serialVersionUID = 1L;
-
-    /**
-     * 课程类型编码:
-     * - 推荐传字典 dictId(更稳定)
-     * - 兼容传字典 dictDetail(名称)
-     */
-    @ApiModelProperty(value = "课程类型(推荐 dictId;兼容 dictDetail)")
-    private String courseType;
-
-    @ApiModelProperty(value = "课程类型名称(可选,便于回填展示)")
-    private String courseTypeName;
-
-    @ApiModelProperty(value = "项目列表")
-    private List<StoreStaffFitnessCourseItem> items;
-}
-
-

+ 0 - 37
alien-entity/src/main/java/shop/alien/entity/store/dto/StoreStaffFitnessCourseItem.java

@@ -1,37 +0,0 @@
-package shop.alien.entity.store.dto;
-
-import com.fasterxml.jackson.annotation.JsonInclude;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import java.io.Serializable;
-import java.math.BigDecimal;
-
-/**
- * 运动健身-课程项目(用于前端分组绑定;不直接映射数据库表)
- */
-@Data
-@JsonInclude
-@ApiModel(value = "StoreStaffFitnessCourseItem对象", description = "运动健身-课程项目(分组结构用)")
-public class StoreStaffFitnessCourseItem implements Serializable {
-
-    private static final long serialVersionUID = 1L;
-
-    @ApiModelProperty(value = "项目名称")
-    private String courseName;
-
-    @ApiModelProperty(value = "价格类型(0-固定价 1-价格区间)")
-    private Integer coursePriceType;
-
-    @ApiModelProperty(value = "固定价(coursePriceType=0)")
-    private BigDecimal coursePrice;
-
-    @ApiModelProperty(value = "最低价(coursePriceType=1)")
-    private BigDecimal courseMinPrice;
-
-    @ApiModelProperty(value = "最高价(coursePriceType=1)")
-    private BigDecimal courseMaxPrice;
-}
-
-

+ 28 - 0
alien-entity/src/main/java/shop/alien/entity/store/dto/StoreTableChangeDTO.java

@@ -0,0 +1,28 @@
+package shop.alien.entity.store.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 换桌DTO
+ *
+ * @author system
+ * @since 2025-01-XX
+ */
+@Data
+@ApiModel(value = "StoreTableChangeDTO对象", description = "换桌")
+public class StoreTableChangeDTO {
+
+    @ApiModelProperty(value = "订单ID", required = true)
+    private Integer orderId;
+
+    @ApiModelProperty(value = "原桌号ID", required = true)
+    private Integer fromTableId;
+
+    @ApiModelProperty(value = "目标桌号ID", required = true)
+    private Integer toTableId;
+
+    @ApiModelProperty(value = "换桌原因")
+    private String changeReason;
+}

+ 29 - 0
alien-entity/src/main/java/shop/alien/entity/store/dto/StoreTableDTO.java

@@ -0,0 +1,29 @@
+package shop.alien.entity.store.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 桌号管理DTO
+ * 用于批量创建桌号和编辑桌号
+ *
+ * @author system
+ * @since 2025-01-XX
+ */
+@Data
+@ApiModel(value = "StoreTableDTO对象", description = "桌号管理DTO")
+public class StoreTableDTO {
+
+    @ApiModelProperty(value = "桌号ID", notes = "编辑桌号时必填")
+    private Integer id;
+
+    @ApiModelProperty(value = "门店ID", notes = "批量创建桌号时必填")
+    private Integer storeId;
+
+    @ApiModelProperty(value = "桌号名称", notes = "编辑桌号时必填")
+    private String tableNumber;
+
+    @ApiModelProperty(value = "桌号列表", notes = "批量创建桌号时必填,多个桌号用英文逗号分隔,如:A01,A02,A03")
+    private String tableNumbers;
+}

+ 33 - 0
alien-entity/src/main/java/shop/alien/entity/store/dto/StoreVideoSaveDto.java

@@ -0,0 +1,33 @@
+package shop.alien.entity.store.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 视频保存DTO
+ *
+ * @author system
+ * @since 2025-01-XX
+ */
+@Data
+@ApiModel(value = "StoreVideoSaveDto对象", description = "视频保存DTO")
+public class StoreVideoSaveDto implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "门店ID", required = true)
+    private Integer storeId;
+
+    @ApiModelProperty(value = "相册ID(业务ID)")
+    private Integer businessId;
+
+    @ApiModelProperty(value = "视频URL列表", required = true)
+    private List<String> videoUrls;
+
+    @ApiModelProperty(value = "视频ID列表")
+    private List<Integer> videoIds;
+
+}

+ 22 - 0
alien-entity/src/main/java/shop/alien/entity/store/dto/TablewareFeeDto.java

@@ -0,0 +1,22 @@
+package shop.alien.entity.store.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 餐具费DTO
+ *
+ * @author auto-generated
+ * @since 2025-01-27
+ */
+@Data
+@ApiModel(value = "TablewareFeeDto", description = "餐具费DTO")
+public class TablewareFeeDto {
+
+    @ApiModelProperty(value = "门店ID")
+    private Integer storeId;
+
+    @ApiModelProperty(value = "餐具费(限2位正整数)")
+    private Integer tablewareFee;
+}

+ 56 - 0
alien-entity/src/main/java/shop/alien/entity/store/dto/deserializer/JsonStringDeserializer.java

@@ -0,0 +1,56 @@
+package shop.alien.entity.store.dto.deserializer;
+
+import com.fasterxml.jackson.core.JsonParser;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.DeserializationContext;
+import com.fasterxml.jackson.databind.JsonDeserializer;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+import java.io.IOException;
+
+/**
+ * 自定义反序列化器:将字符串或JSON数组/对象转换为字符串
+ * 支持以下格式:
+ * - 字符串:"xxx" 或 "[{\"video\":\"...\",\"cover\":\"...\"}]"
+ * - JSON数组:[{"video":"...","cover":"..."}]
+ * - JSON对象:{"video":"...","cover":"..."}
+ * - null:返回null
+ * 
+ * @author system
+ * @since 2025-01-16
+ */
+public class JsonStringDeserializer extends JsonDeserializer<String> {
+
+    @Override
+    public String deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
+        JsonNode node = p.getCodec().readTree(p);
+        
+        // 如果为null,返回null
+        if (node == null || node.isNull()) {
+            return null;
+        }
+        
+        // 如果是字符串,直接返回
+        if (node.isTextual()) {
+            return node.asText();
+        }
+        
+        // 如果是数组或对象,转换为JSON字符串
+        if (node.isArray() || node.isObject()) {
+            try {
+                // 使用ObjectMapper将JsonNode转换为JSON字符串
+                ObjectMapper mapper = (ObjectMapper) p.getCodec();
+                return mapper.writeValueAsString(node);
+            } catch (JsonProcessingException e) {
+                // 如果转换失败,使用toString()方法(注意:这可能不会生成标准的JSON格式)
+                // 但作为兜底方案,仍然返回
+                return node.toString();
+            }
+        }
+        
+        // 其他类型(数字、布尔值等),转换为字符串
+        return node.asText();
+    }
+}
+

+ 12 - 1
alien-entity/src/main/java/shop/alien/entity/store/excelVo/StoreUserExcelVo.java

@@ -12,7 +12,7 @@ import shop.alien.entity.store.excelVo.util.ExcelHeader;
  */
 @Data
 @JsonInclude
-@ApiModel(value = "StoreUser表Excel导出对象", description = "商家端账号信息")
+@ApiModel(value = "StoreUser表Excel导出对象", description = "商家端账号信息")
 public class StoreUserExcelVo {
 
     @ExcelHeader("序号")
@@ -23,6 +23,7 @@ public class StoreUserExcelVo {
     @ExcelHeader(value = "账号ID")
     private Integer id;
 
+
     @ApiModelProperty(value = "手机号码")
     @ExcelHeader(value = "手机号码")
     private String phone;
@@ -31,7 +32,17 @@ public class StoreUserExcelVo {
     @ExcelHeader(value = "创建时间")
     private String createdTime;
 
+    @ApiModelProperty(value = "子账号数量")
+    @ExcelHeader(value = "子账号数量")
+    private Integer childAccountCount;
+
     @ApiModelProperty(value = "状态")
     @ExcelHeader(value = "状态")
     private String status;
+
+
+
+
+
+
 }

+ 6 - 0
alien-entity/src/main/java/shop/alien/entity/store/vo/LifeFeedbackListVo.java

@@ -22,9 +22,15 @@ public class LifeFeedbackListVo implements Serializable {
     @ApiModelProperty(value = "用户昵称")
     private String nickName;
 
+    @ApiModelProperty(value = "用户昵称")
+    private String userNickName;
+
     @ApiModelProperty(value = "账号(手机号)")
     private String phone;
 
+    @ApiModelProperty(value = "用户手机号)")
+    private String userPhone;
+
     @ApiModelProperty(value = "反馈类型:0-bug反馈,1-优化反馈,2-新增功能反馈")
     private Integer feedbackType;
 

+ 12 - 0
alien-entity/src/main/java/shop/alien/entity/store/vo/LifeUserDynamicsVo.java

@@ -68,4 +68,16 @@ public class LifeUserDynamicsVo extends LifeUserDynamics {
 
     @ApiModelProperty(value = "商家名称")
     private String storeName;
+
+    @ApiModelProperty(value = "评分")
+    private Double scoreAvg;
+
+     @ApiModelProperty(value = "行业")
+    private String businessSection;
+
+    @ApiModelProperty(value = "评价数量")
+    private String ratingCount;
+
+    @ApiModelProperty(value = "评价类型")
+    private String businessTypeName;
 }

+ 1 - 0
alien-entity/src/main/java/shop/alien/entity/store/vo/OrderRevenueVO.java

@@ -46,3 +46,4 @@ public class OrderRevenueVO implements Serializable {
 
 
 
+

+ 6 - 0
alien-entity/src/main/java/shop/alien/entity/store/vo/PerformerVo.java

@@ -43,5 +43,11 @@ public class PerformerVo implements Serializable {
      */
     @ApiModelProperty(value = "职位")
     private String style;
+
+    /**
+     * 标签(对应 store_staff_config.tag)
+     */
+    @ApiModelProperty(value = "标签")
+    private String tag;
 }
 

+ 25 - 0
alien-entity/src/main/java/shop/alien/entity/store/vo/PermissionItemVo.java

@@ -0,0 +1,25 @@
+package shop.alien.entity.store.vo;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 权限项VO
+ *
+ * @author system
+ * @since 2025-01-XX
+ */
+@Data
+@JsonInclude
+@ApiModel(value = "PermissionItemVo对象", description = "权限项VO")
+public class PermissionItemVo {
+
+    @ApiModelProperty(value = "权限ID(菜单ID)")
+    private Long permissionId;
+
+    @ApiModelProperty(value = "权限名称(菜单名称)")
+    private String permissionName;
+}
+

+ 6 - 4
alien-entity/src/main/java/shop/alien/entity/store/vo/PriceListVo.java

@@ -1,18 +1,14 @@
 package shop.alien.entity.store.vo;
 
 import com.baomidou.mybatisplus.annotation.*;
-import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.annotation.JsonInclude;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
-import shop.alien.entity.store.StoreCuisine;
-import shop.alien.entity.store.StorePrice;
 
 import java.math.BigDecimal;
 import java.util.Date;
-import java.util.List;
 
 /**
  * 价目表通用VO
@@ -74,6 +70,12 @@ public class PriceListVo {
     @ApiModelProperty(value = "美食类型: 1-单品,2-套餐")
     private Integer cuisineType;
 
+    @ApiModelProperty(value = "菜品分类ids(JSON数组,如:[1,2,3])")
+    private String categoryIds;
+
+    @ApiModelProperty(value = "菜品分类名称(JSON数组,如:[\"热菜\",\"凉菜\"])")
+    private String categoryNames;
+
     @ApiModelProperty(value = "拒绝原因")
     private String rejectionReason;
 

+ 28 - 0
alien-entity/src/main/java/shop/alien/entity/store/vo/RolePermissionTableVo.java

@@ -0,0 +1,28 @@
+package shop.alien.entity.store.vo;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 角色权限表格VO(用于表格形式展示权限层级)
+ *
+ * @author system
+ * @since 2025-01-XX
+ */
+@Data
+@JsonInclude
+@ApiModel(value = "RolePermissionTableVo对象", description = "角色权限表格VO(用于表格形式展示权限层级)")
+public class RolePermissionTableVo {
+
+    @ApiModelProperty(value = "一级权限名称")
+    private String level1Permission;
+
+    @ApiModelProperty(value = "二级权限名称")
+    private String level2Permission;
+
+    @ApiModelProperty(value = "三级权限名称")
+    private String level3Permission;
+}
+

+ 45 - 0
alien-entity/src/main/java/shop/alien/entity/store/vo/RolePermissionVo.java

@@ -0,0 +1,45 @@
+package shop.alien.entity.store.vo;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 角色权限VO(用于展示权限层级结构)
+ *
+ * @author system
+ * @since 2025-01-XX
+ */
+@Data
+@JsonInclude
+@ApiModel(value = "RolePermissionVo对象", description = "角色权限VO(用于展示权限层级结构)")
+public class RolePermissionVo {
+
+    @ApiModelProperty(value = "菜单ID")
+    private Long menuId;
+
+    @ApiModelProperty(value = "菜单名称")
+    private String menuName;
+
+    @ApiModelProperty(value = "父菜单ID")
+    private Long parentId;
+
+    @ApiModelProperty(value = "菜单层级(1一级菜单 2二级菜单 3三级菜单)")
+    private Integer level;
+
+    @ApiModelProperty(value = "菜单类型(M目录 C菜单 F按钮)")
+    private String menuType;
+
+    @ApiModelProperty(value = "显示顺序")
+    private Integer menuSort;
+
+    @ApiModelProperty(value = "权限标识")
+    private String perms;
+
+    @ApiModelProperty(value = "子权限列表")
+    private List<RolePermissionVo> children;
+}
+

+ 3 - 0
alien-entity/src/main/java/shop/alien/entity/store/vo/StoreInfoVo.java

@@ -148,6 +148,9 @@ public class StoreInfoVo extends StoreInfo {
     @ApiModelProperty(value = "是否收藏")
     private Integer collection;
 
+    @ApiModelProperty(value = "是否关注(1:已关注,0:未关注)")
+    private Integer isFollowed;
+
     @ApiModelProperty(value = "优惠券列表")
     private List<LifeCouponVo> couponList;
 

+ 3 - 9
alien-entity/src/main/java/shop/alien/entity/store/vo/StoreLicenseInfoVo.java

@@ -1,6 +1,5 @@
 package shop.alien.entity.store.vo;
 
-import com.baomidou.mybatisplus.annotation.TableField;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.annotation.JsonInclude;
 import io.swagger.annotations.ApiModel;
@@ -12,7 +11,7 @@ import java.util.Date;
 /**
  * 门店证照查询结果 VO
  *
- * 对应证照类型(营业执照 / 娱乐经营许可证 / 食品经营许可证
+ * 对应证照类型(营业执照 / 其他资质证明
  * 及其当前状态、提交时间、到期时间等信息。
  */
 @Data
@@ -20,10 +19,10 @@ import java.util.Date;
 @JsonInclude(JsonInclude.Include.ALWAYS)
 public class StoreLicenseInfoVo {
 
-    @ApiModelProperty("证照类型描述:营业执照 / 娱乐经营许可证 / 食品经营许可证")
+    @ApiModelProperty("证照类型描述:营业执照 / 其他资质证明")
     private String imgDescription;
 
-    @ApiModelProperty("证照图片类型(14:营业执照;24/25:食品经营许可证;31/32:娱乐经营许可证)")
+    @ApiModelProperty("证照图片类型(14:营业执照;35:其他资质证明)")
     private Integer imgType;
 
     @ApiModelProperty("门店ID")
@@ -76,8 +75,3 @@ public class StoreLicenseInfoVo {
     @ApiModelProperty(value = "分类名称s")
     private String businessClassifyName;
 }
-
-
-
-
-

+ 6 - 6
alien-entity/src/main/java/shop/alien/entity/store/vo/StoreOperationalStatisticsComparisonVo.java

@@ -242,14 +242,14 @@ public class StoreOperationalStatisticsComparisonVo implements Serializable {
         @ApiModelProperty("店铺评分对比")
         private BaseComparisonData storeRating;
 
-        @ApiModelProperty("口味评分对比")
-        private BaseComparisonData tasteRating;
+        @ApiModelProperty("评分1对比")
+        private BaseComparisonData scoreOne;
 
-        @ApiModelProperty("环境评分对比")
-        private BaseComparisonData environmentRating;
+        @ApiModelProperty("评分2对比")
+        private BaseComparisonData scoreTwo;
 
-        @ApiModelProperty("服务评分对比")
-        private BaseComparisonData serviceRating;
+        @ApiModelProperty("评分3对比")
+        private BaseComparisonData scoreThree;
 
         @ApiModelProperty("评价数量对比")
         private BaseComparisonData totalReviews;

+ 6 - 6
alien-entity/src/main/java/shop/alien/entity/store/vo/StoreOperationalStatisticsVo.java

@@ -211,14 +211,14 @@ public class StoreOperationalStatisticsVo implements Serializable {
         @ApiModelProperty("店铺评分")
         private BigDecimal storeRating;
 
-        @ApiModelProperty("口味评分")
-        private BigDecimal tasteRating;
+        @ApiModelProperty("评分1")
+        private BigDecimal scoreOne;
 
-        @ApiModelProperty("环境评分")
-        private BigDecimal environmentRating;
+        @ApiModelProperty("评分2")
+        private BigDecimal scoreTwo;
 
-        @ApiModelProperty("服务评分")
-        private BigDecimal serviceRating;
+        @ApiModelProperty("评分3")
+        private BigDecimal scoreThree;
 
         @ApiModelProperty("评价数量")
         private Long totalReviews;

+ 23 - 0
alien-entity/src/main/java/shop/alien/entity/store/vo/StorePlatformMenuVo.java

@@ -0,0 +1,23 @@
+package shop.alien.entity.store.vo;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import shop.alien.entity.store.StorePlatformMenu;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ *  菜单Vo
+ */
+@Data
+@JsonInclude
+@ApiModel(value = "StorePlatformMenuVo对象", description = "菜单Vo")
+public class StorePlatformMenuVo extends StorePlatformMenu implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "子菜单列表(用于树形结构)")
+    private List<StorePlatformMenu> children;
+}

+ 33 - 0
alien-entity/src/main/java/shop/alien/entity/store/vo/StorePlatformRoleVo.java

@@ -0,0 +1,33 @@
+package shop.alien.entity.store.vo;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import shop.alien.entity.store.StorePlatformRole;
+
+import java.util.List;
+
+/**
+ * 平台角色信息VO(包含关联统计)
+ *
+ * @author system
+ * @since 2025-01-XX
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@JsonInclude
+@ApiModel(value = "StorePlatformRoleVo对象", description = "平台角色信息VO(包含关联统计)")
+public class StorePlatformRoleVo extends StorePlatformRole {
+
+    @ApiModelProperty(value = "关联子账号数量")
+    private Integer subAccountCount;
+
+    @ApiModelProperty(value = "关联权限数量")
+    private Integer permissionCount;
+
+    @ApiModelProperty(value = "权限列表(树形结构)")
+    private List<RolePermissionVo> permissions;
+}
+

+ 25 - 0
alien-entity/src/main/java/shop/alien/entity/store/vo/StoreStaffReviewDetailVo.java

@@ -25,5 +25,30 @@ public class StoreStaffReviewDetailVo {
 
     @ApiModelProperty(value = "人员信息")
     private StoreStaffConfig staffInfo;
+
+    @ApiModelProperty(value = "店铺信息")
+    private StoreInfoForStaffReviewVo storeInfo;
+    
+    /**
+     * 店铺信息VO(用于员工评价详情)
+     */
+    @Data
+    @ApiModel(value = "StoreInfoForStaffReviewVo对象", description = "店铺信息VO(用于员工评价详情)")
+    public static class StoreInfoForStaffReviewVo {
+        @ApiModelProperty(value = "店铺ID")
+        private Integer storeId;
+        
+        @ApiModelProperty(value = "店铺名称")
+        private String storeName;
+        
+        @ApiModelProperty(value = "店铺头像(来自store_user表的head_img字段)")
+        private String headImg;
+        
+        @ApiModelProperty(value = "店铺评分(平均评分)")
+        private Double score;
+        
+        @ApiModelProperty(value = "到商铺的距离(单位:千米,如果未提供用户位置则为null)")
+        private Double distance;
+    }
 }
 

+ 37 - 0
alien-entity/src/main/java/shop/alien/entity/store/vo/StoreSubExcelVo.java

@@ -0,0 +1,37 @@
+package shop.alien.entity.store.vo;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import shop.alien.entity.store.excelVo.util.ExcelHeader;
+
+@Data
+@JsonInclude
+@ApiModel(value = "StoreUser表Excel导出对象", description = "商家端子账号信息")
+public class StoreSubExcelVo {
+
+    @ExcelHeader("序号")
+    @ApiModelProperty(value = "序号")
+    private Integer serialNumber;
+
+    @ApiModelProperty(value = "账号ID")
+    @ExcelHeader(value = "账号ID")
+    private Integer id;
+
+    @ApiModelProperty(value = "主账号手机号")
+    @ExcelHeader(value = "主账号手机号码")
+    private String parentAccountPhone;
+
+    @ApiModelProperty(value = "手机号码")
+    @ExcelHeader(value = "手机号码")
+    private String phone;
+
+    @ApiModelProperty(value = "创建时间")
+    @ExcelHeader(value = "创建时间")
+    private String createdTime;
+
+    @ApiModelProperty(value = "状态")
+    @ExcelHeader(value = "状态")
+    private String status;
+}

+ 26 - 0
alien-entity/src/main/java/shop/alien/entity/store/vo/StoreTableStatusVO.java

@@ -0,0 +1,26 @@
+package shop.alien.entity.store.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 桌号状态VO
+ *
+ * @author system
+ * @since 2025-01-XX
+ */
+@Data
+@ApiModel(value = "StoreTableStatusVO对象", description = "桌号状态")
+public class StoreTableStatusVO implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "桌号ID")
+    private Integer id;
+
+    @ApiModelProperty(value = "状态(0:空闲, 1:就餐中, 2:其他)")
+    private Integer status;
+}

+ 27 - 0
alien-entity/src/main/java/shop/alien/entity/store/vo/StoreUserVo.java

@@ -7,6 +7,8 @@ import lombok.Data;
 import lombok.EqualsAndHashCode;
 import shop.alien.entity.store.StoreUser;
 
+import java.util.List;
+
 /**
  * 二期-门店用户扩展
  *
@@ -18,6 +20,8 @@ import shop.alien.entity.store.StoreUser;
 @JsonInclude
 @ApiModel(value = "StoreUserVo对象", description = "门店用户扩展")
 public class StoreUserVo extends StoreUser {
+     @ApiModelProperty(value = "父账号Id")
+    private Integer parentAccountId;
 
     @ApiModelProperty(value = "登录Token")
     private String token;
@@ -42,4 +46,27 @@ public class StoreUserVo extends StoreUser {
 
     @ApiModelProperty(value = "是否提供餐食")
     private Integer mealsFlag;
+
+    @ApiModelProperty(value = "子账号列表")
+    private List<StoreUser> childAccounts;
+
+    @ApiModelProperty(value = "主账号姓名")
+    private String parentAccountName;
+
+    @ApiModelProperty(value = "主账号手机号")
+    private String parentAccountPhone;
+
+    @ApiModelProperty(value = "角色ID(当前账号在目标门店的角色)")
+    private Long roleId;
+
+    @ApiModelProperty(value = "角色名称(当前账号在目标门店的角色名称)")
+    private String roleName;
+
+    @ApiModelProperty(value = "是否有子账号(主账号且有子账号时为true)")
+    private boolean hasSubAccount;
+
+
+    @ApiModelProperty(value = "门店类型(0-其他,1-装修公司)")
+    private Integer storeTickets;
+
 }

+ 39 - 0
alien-entity/src/main/java/shop/alien/entity/store/vo/SubAccountDetailVo.java

@@ -0,0 +1,39 @@
+package shop.alien.entity.store.vo;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 子账号详情VO(用于编辑账号页面)
+ *
+ * @author system
+ * @since 2025-01-XX
+ */
+@Data
+@JsonInclude
+@ApiModel(value = "SubAccountDetailVo对象", description = "子账号详情VO(用于编辑账号页面)")
+public class SubAccountDetailVo {
+
+    @ApiModelProperty(value = "用户ID")
+    private Integer userId;
+
+    @ApiModelProperty(value = "账号名称")
+    private String accountName;
+
+    @ApiModelProperty(value = "手机号")
+    private String phone;
+
+    @ApiModelProperty(value = "角色ID")
+    private Long roleId;
+
+    @ApiModelProperty(value = "角色名称")
+    private String roleName;
+
+    @ApiModelProperty(value = "权限列表(权限名称列表)")
+    private List<PermissionItemVo> permissions;
+}
+

+ 55 - 0
alien-entity/src/main/java/shop/alien/entity/store/vo/SubAccountStoreListVo.java

@@ -0,0 +1,55 @@
+package shop.alien.entity.store.vo;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 子账号关联门店列表 VO
+ *
+ * @author system
+ * @since 2025-01-01
+ */
+@Data
+@JsonInclude(JsonInclude.Include.ALWAYS)
+@ApiModel(value = "SubAccountStoreListVo对象", description = "子账号关联门店列表")
+public class SubAccountStoreListVo implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "门店ID")
+    private Integer storeId;
+
+    @ApiModelProperty(value = "门店名称")
+    private String storeName;
+
+    @ApiModelProperty(value = "门店地址")
+    private String storeAddress;
+
+    @ApiModelProperty(value = "门店电话")
+    private String storeTel;
+
+    @ApiModelProperty(value = "营业状态(-1:注销中, 0:正常营业, 1:暂停营业, 2:筹建中, 99:永久关门)")
+    private Integer businessStatus;
+
+    @ApiModelProperty(value = "角色ID")
+    private Long roleId;
+
+    @ApiModelProperty(value = "角色名称")
+    private String roleName;
+
+    @ApiModelProperty(value = "用户ID")
+    private Integer userId;
+
+    @ApiModelProperty(value = "账号名称")
+    private String accountName;
+
+    @ApiModelProperty(value = "手机号")
+    private String phone;
+
+    @ApiModelProperty(value = "禁用标志(0启用 1禁用)")
+    private Integer status;
+}

+ 37 - 0
alien-entity/src/main/java/shop/alien/entity/store/vo/SubAccountVo.java

@@ -0,0 +1,37 @@
+package shop.alien.entity.store.vo;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 子账号信息VO
+ *
+ * @author system
+ * @since 2025-01-XX
+ */
+@Data
+@JsonInclude
+@ApiModel(value = "SubAccountVo对象", description = "子账号信息VO")
+public class SubAccountVo {
+
+    @ApiModelProperty(value = "用户ID")
+    private Integer userId;
+
+    @ApiModelProperty(value = "账号名称")
+    private String accountName;
+
+    @ApiModelProperty(value = "手机号")
+    private String phone;
+
+    @ApiModelProperty(value = "角色ID")
+    private Long roleId;
+
+    @ApiModelProperty(value = "角色名称")
+    private String roleName;
+
+    @ApiModelProperty(value = "权限数量")
+    private Integer permissionCount;
+}
+

+ 39 - 0
alien-entity/src/main/java/shop/alien/entity/storePlatform/StoreOperationalActivity.java

@@ -97,5 +97,44 @@ public class StoreOperationalActivity {
     @ApiModelProperty(value = "拒绝原因")
     @TableField("approval_comments")
     private String approvalComments;
+
+    @ApiModelProperty(value = "活动类型:COMMENT-评论有礼, MARKETING-营销活动")
+    @TableField("activity_type")
+    private String activityType;
+
+    @ApiModelProperty(value = "报名开始时间")
+    @TableField("signup_start_time")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date signupStartTime;
+
+    @ApiModelProperty(value = "报名结束时间")
+    @TableField("signup_end_time")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date signupEndTime;
+
+    @ApiModelProperty(value = "活动限制人数")
+    @TableField("activity_limit_people")
+    private Integer activityLimitPeople;
+
+    @ApiModelProperty(value = "活动详情")
+    @TableField("activity_details")
+    private String activityDetails;
+
+    @ApiModelProperty(value = "结果类型:0-文字, 1-图片")
+    @TableField("result_type")
+    private Integer resultType;
+
+    @ApiModelProperty(value = "结果文字")
+    @TableField("result_text")
+    private String resultText;
+
+    @ApiModelProperty(value = "结果图片地址")
+    @TableField("result_media_url")
+    private String resultMediaUrl;
+
+    @ApiModelProperty(value = "审核时间")
+    @TableField("audit_time")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date auditTime;
 }
 

+ 75 - 0
alien-entity/src/main/java/shop/alien/entity/storePlatform/StoreOperationalActivityAchievement.java

@@ -0,0 +1,75 @@
+package shop.alien.entity.storePlatform;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 运营活动成果表
+ *
+ * @author system
+ * @since 2025-01-XX
+ */
+@Data
+@JsonInclude
+@TableName("store_operational_activity_achievement")
+@ApiModel(value = "StoreOperationalActivityAchievement对象", description = "运营活动成果表")
+public class StoreOperationalActivityAchievement {
+
+    @ApiModelProperty(value = "主键")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty(value = "活动ID")
+    @TableField("activity_id")
+    private Integer activityId;
+
+    @ApiModelProperty(value = "用户ID")
+    @TableField("user_id")
+    private Integer userId;
+
+    @ApiModelProperty(value = "报名ID")
+    @TableField("signup_id")
+    private Integer signupId;
+
+    @ApiModelProperty(value = "成果描述")
+    @TableField("achievement_desc")
+    private String achievementDesc;
+
+    @ApiModelProperty(value = "图片/视频URL(逗号分隔)")
+    @TableField("media_urls")
+    private String mediaUrls;
+
+    @ApiModelProperty(value = "删除标记, 0:未删除, 1:已删除")
+    @TableField("delete_flag")
+    @TableLogic
+    private Integer deleteFlag;
+
+    @ApiModelProperty(value = "创建时间")
+    @TableField(value = "created_time", fill = FieldFill.INSERT)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date createdTime;
+
+    @ApiModelProperty(value = "创建人ID")
+    @TableField("created_user_id")
+    private Integer createdUserId;
+
+    @ApiModelProperty(value = "修改时间")
+    @TableField(value = "updated_time", fill = FieldFill.UPDATE)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date updatedTime;
+
+    @ApiModelProperty(value = "修改人ID")
+    @TableField("updated_user_id")
+    private Integer updatedUserId;
+}

+ 93 - 0
alien-entity/src/main/java/shop/alien/entity/storePlatform/StoreOperationalActivitySignup.java

@@ -0,0 +1,93 @@
+package shop.alien.entity.storePlatform;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 运营活动报名表
+ *
+ * @author system
+ * @since 2025-01-XX
+ */
+@Data
+@JsonInclude
+@TableName("store_operational_activity_signup")
+@ApiModel(value = "StoreOperationalActivitySignup对象", description = "运营活动报名表")
+public class StoreOperationalActivitySignup {
+
+    @ApiModelProperty(value = "主键")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty(value = "活动ID")
+    @TableField("activity_id")
+    private Integer activityId;
+
+    @ApiModelProperty(value = "商户ID")
+    @TableField("store_id")
+    private Integer storeId;
+
+    @ApiModelProperty(value = "用户ID")
+    @TableField("user_id")
+    private Integer userId;
+
+    @ApiModelProperty(value = "报名人姓名")
+    @TableField("user_name")
+    private String userName;
+
+    @ApiModelProperty(value = "手机号")
+    @TableField("phone")
+    private String phone;
+
+    @ApiModelProperty(value = "报名状态:0-待审核,1-拒绝,2-通过")
+    @TableField("status")
+    private Integer status;
+
+    @ApiModelProperty(value = "审核拒绝原因")
+    @TableField("reject_reason")
+    private String rejectReason;
+
+    @ApiModelProperty(value = "审核时间")
+    @TableField("audit_time")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date auditTime;
+
+    @ApiModelProperty(value = "报名时间")
+    @TableField("signup_time")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date signupTime;
+
+    @ApiModelProperty(value = "删除标记, 0:未删除, 1:已删除")
+    @TableField("delete_flag")
+    @TableLogic
+    private Integer deleteFlag;
+
+    @ApiModelProperty(value = "创建时间")
+    @TableField(value = "created_time", fill = FieldFill.INSERT)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date createdTime;
+
+    @ApiModelProperty(value = "创建人ID")
+    @TableField("created_user_id")
+    private Integer createdUserId;
+
+    @ApiModelProperty(value = "修改时间")
+    @TableField(value = "updated_time", fill = FieldFill.UPDATE)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date updatedTime;
+
+    @ApiModelProperty(value = "修改人ID")
+    @TableField("updated_user_id")
+    private Integer updatedUserId;
+}

+ 82 - 0
alien-entity/src/main/java/shop/alien/entity/storePlatform/StorePlatformOperationLog.java

@@ -0,0 +1,82 @@
+package shop.alien.entity.storePlatform;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+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 io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 平台操作记录表
+ *
+ * @author system
+ * @since 2025-01-XX
+ */
+@Data
+@TableName("store_platform_operation_log")
+@ApiModel(value = "StorePlatformOperationLog对象", description = "平台操作记录")
+public class StorePlatformOperationLog {
+
+    @ApiModelProperty(value = "主键ID")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    @ApiModelProperty(value = "操作模块")
+    @TableField("operation_module")
+    private String operationModule;
+
+    @ApiModelProperty(value = "操作类型")
+    @TableField("operation_type")
+    private String operationType;
+
+    @ApiModelProperty(value = "操作内容")
+    @TableField("operation_content")
+    private String operationContent;
+
+    @ApiModelProperty(value = "操作入参(JSON)")
+    @TableField("operation_params")
+    private String operationParams;
+
+    @ApiModelProperty(value = "操作者ID")
+    @TableField("operator_id")
+    private String operatorId;
+
+    @ApiModelProperty(value = "操作者账号")
+    @TableField("operator_account")
+    private String operatorAccount;
+
+    @ApiModelProperty(value = "操作者姓名")
+    @TableField("operator_name")
+    private String operatorName;
+
+    @ApiModelProperty(value = "操作者店铺ID")
+    @TableField("store_id")
+    private Integer storeId;
+
+    @ApiModelProperty(value = "用户类型")
+    @TableField("user_type")
+    private String userType;
+
+    @ApiModelProperty(value = "请求方法")
+    @TableField("request_method")
+    private String requestMethod;
+
+    @ApiModelProperty(value = "请求路径")
+    @TableField("request_path")
+    private String requestPath;
+
+    @ApiModelProperty(value = "IP地址")
+    @TableField("ip_address")
+    private String ipAddress;
+
+    @ApiModelProperty(value = "操作时间")
+    @TableField(value = "operation_time", fill = FieldFill.INSERT)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date operationTime;
+}

+ 61 - 0
alien-entity/src/main/java/shop/alien/entity/storePlatform/vo/StoreOperationalActivityAchievementCaseDetailVo.java

@@ -0,0 +1,61 @@
+package shop.alien.entity.storePlatform.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 运营活动案例详情
+ *
+ * @author system
+ * @since 2025-01-XX
+ */
+@Data
+@JsonInclude(JsonInclude.Include.NON_NULL)
+@ApiModel(value = "StoreOperationalActivityAchievementCaseDetailVo对象", description = "运营活动案例详情")
+public class StoreOperationalActivityAchievementCaseDetailVo {
+
+    @ApiModelProperty(value = "活动ID")
+    private Integer activityId;
+
+    @ApiModelProperty(value = "活动名称")
+    private String activityName;
+
+    @ApiModelProperty(value = "活动开始时间")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private Date startTime;
+
+    @ApiModelProperty(value = "活动结束时间")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private Date endTime;
+
+    @ApiModelProperty(value = "用户ID")
+    private Integer userId;
+
+    @ApiModelProperty(value = "用户昵称")
+    private String nickName;
+
+    @ApiModelProperty(value = "用户姓名")
+    private String userName;
+
+    @ApiModelProperty(value = "联系方式(手机号)")
+    private String phone;
+
+    @ApiModelProperty(value = "用户头像")
+    private String userImage;
+
+    @ApiModelProperty(value = "创建时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date createdTime;
+
+    @ApiModelProperty(value = "上传情况:0-未上传, 1-已上传")
+    private Integer hasResult;
+
+    @ApiModelProperty(value = "成果列表")
+    private List<StoreOperationalActivityAchievementCaseItemVo> achievementList;
+}

+ 42 - 0
alien-entity/src/main/java/shop/alien/entity/storePlatform/vo/StoreOperationalActivityAchievementCaseItemVo.java

@@ -0,0 +1,42 @@
+package shop.alien.entity.storePlatform.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 运营活动案例详情-成果条目
+ *
+ * @author system
+ * @since 2025-01-XX
+ */
+@Data
+@JsonInclude(JsonInclude.Include.NON_NULL)
+@ApiModel(value = "StoreOperationalActivityAchievementCaseItemVo对象", description = "运营活动案例详情-成果条目")
+public class StoreOperationalActivityAchievementCaseItemVo {
+
+    @ApiModelProperty(value = "成果ID")
+    private Integer achievementId;
+
+    @ApiModelProperty(value = "成果描述")
+    private String achievementDesc;
+
+    @ApiModelProperty(value = "图片/视频URL(逗号分隔)")
+    private String mediaUrls;
+
+    @ApiModelProperty(value = "图片/视频URL列表")
+    private List<String> mediaUrlList;
+
+    @ApiModelProperty(value = "创建时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date createdTime;
+
+    @ApiModelProperty(value = "更新时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date updatedTime;
+}

+ 66 - 0
alien-entity/src/main/java/shop/alien/entity/storePlatform/vo/StoreOperationalActivityAchievementCaseVo.java

@@ -0,0 +1,66 @@
+package shop.alien.entity.storePlatform.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 运营活动成果案例列表
+ *
+ * @author system
+ * @since 2025-01-XX
+ */
+@Data
+@JsonInclude
+@ApiModel(value = "StoreOperationalActivityAchievementCaseVo对象", description = "运营活动成果案例列表")
+public class StoreOperationalActivityAchievementCaseVo {
+
+    @ApiModelProperty(value = "成果ID")
+    private Integer achievementId;
+
+    @ApiModelProperty(value = "用户ID")
+    private Integer userId;
+
+    @ApiModelProperty(value = "活动ID")
+    private Integer activityId;
+
+    @ApiModelProperty(value = "活动名称")
+    private String activityName;
+
+    @ApiModelProperty(value = "活动开始时间")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private Date startTime;
+
+    @ApiModelProperty(value = "活动结束时间")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private Date endTime;
+
+    @ApiModelProperty(value = "活动状态")
+    private Integer activityStatus;
+
+    @ApiModelProperty(value = "用户昵称")
+    private String nickName;
+
+    @ApiModelProperty(value = "店铺用户头像")
+    private String storeUserHeadImg;
+
+    @ApiModelProperty(value = "店铺用户昵称")
+    private String storeUserNickName;
+
+    @ApiModelProperty(value = "联系方式(手机号)")
+    private String phone;
+
+    @ApiModelProperty(value = "上传情况:0-未上传, 1-已上传")
+    private Integer hasResult;
+
+    @ApiModelProperty(value = "成果首图")
+    private String firstMediaUrl;
+
+    @ApiModelProperty(value = "更新时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date updatedTime;
+}

+ 46 - 0
alien-entity/src/main/java/shop/alien/entity/storePlatform/vo/StoreOperationalActivityAchievementVo.java

@@ -0,0 +1,46 @@
+package shop.alien.entity.storePlatform.vo;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+import java.util.Date;
+
+/**
+ * 运营活动成果返回对象
+ *
+ * @author system
+ * @since 2025-01-XX
+ */
+@Data
+@JsonInclude(JsonInclude.Include.NON_NULL)
+@ApiModel(value = "StoreOperationalActivityAchievementVo", description = "运营活动成果返回对象")
+public class StoreOperationalActivityAchievementVo {
+
+    @ApiModelProperty(value = "主键")
+    private Integer id;
+
+    @ApiModelProperty(value = "活动ID")
+    private Integer activityId;
+
+    @ApiModelProperty(value = "用户ID")
+    private Integer userId;
+
+    @ApiModelProperty(value = "报名ID")
+    private Integer signupId;
+
+    @ApiModelProperty(value = "成果描述")
+    private String achievementDesc;
+
+    @ApiModelProperty(value = "图片/视频URL(逗号分隔)")
+    private String mediaUrls;
+
+    @ApiModelProperty(value = "图片/视频URL列表")
+    private List<String> mediaUrlList;
+
+    @ApiModelProperty(value = "创建时间")
+    private Date createdTime;
+}

+ 26 - 0
alien-entity/src/main/java/shop/alien/entity/storePlatform/vo/StoreOperationalActivityDTO.java

@@ -82,5 +82,31 @@ public class StoreOperationalActivityDTO {
 
     @ApiModelProperty(value = "AI审核的输入参数")
     private JsonNode auditParam;
+
+    @ApiModelProperty(value = "活动类型:COMMENT-评论有礼, MARKETING-营销活动")
+    private String activityType;
+
+    @ApiModelProperty(value = "报名开始时间")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private Date signupStartTime;
+
+    @ApiModelProperty(value = "报名结束时间")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private Date signupEndTime;
+
+    @ApiModelProperty(value = "活动限制人数")
+    private Integer activityLimitPeople;
+
+    @ApiModelProperty(value = "活动详情")
+    private String activityDetails;
+
+    @ApiModelProperty(value = "结果类型:0-文字, 1-图片")
+    private Integer resultType;
+
+    @ApiModelProperty(value = "结果文字")
+    private String resultText;
+
+    @ApiModelProperty(value = "结果图片地址")
+    private String resultMediaUrl;
 }
 

+ 132 - 0
alien-entity/src/main/java/shop/alien/entity/storePlatform/vo/StoreOperationalActivityDetailVo.java

@@ -0,0 +1,132 @@
+package shop.alien.entity.storePlatform.vo;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 运营活动详情返回对象(用户端)
+ *
+ * @author system
+ * @since 2025-01-XX
+ */
+@Data
+@JsonInclude
+@ApiModel(value = "StoreOperationalActivityDetailVo", description = "运营活动详情返回对象")
+public class StoreOperationalActivityDetailVo {
+
+    @ApiModelProperty(value = "主键")
+    private Integer id;
+
+    @ApiModelProperty(value = "商户ID")
+    private Integer storeId;
+
+    @ApiModelProperty(value = "活动名称")
+    private String activityName;
+
+    @ApiModelProperty(value = "活动宣传图URL")
+    private String promotionalImage;
+
+    @ApiModelProperty(value = "活动开始时间")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private Date startTime;
+
+    @ApiModelProperty(value = "活动结束时间")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private Date endTime;
+
+    @ApiModelProperty(value = "用户可参与次数,0表示不限制")
+    private Integer participationLimit;
+
+    @ApiModelProperty(value = "活动规则")
+    private String activityRule;
+
+    @ApiModelProperty(value = "奖励类型")
+    private String rewardType;
+
+    @ApiModelProperty(value = "优惠券ID")
+    private Integer couponId;
+
+    @ApiModelProperty(value = "优惠券发放数量")
+    private Integer couponQuantity;
+
+    @ApiModelProperty(value = "状态")
+    private Integer status;
+
+    @ApiModelProperty(value = "拒绝原因")
+    private String approvalComments;
+
+    @ApiModelProperty(value = "活动类型")
+    private String activityType;
+
+    @ApiModelProperty(value = "报名开始时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date signupStartTime;
+
+    @ApiModelProperty(value = "报名结束时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date signupEndTime;
+
+    @ApiModelProperty(value = "活动限制人数")
+    private Integer activityLimitPeople;
+
+    @ApiModelProperty(value = "活动详情")
+    private String activityDetails;
+
+    @ApiModelProperty(value = "创建时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date createdTime;
+
+    @ApiModelProperty(value = "活动状态名称")
+    private String statusName;
+
+    @ApiModelProperty(value = "优惠券名称")
+    private String couponName;
+
+    @ApiModelProperty(value = "商户名称")
+    private String storeName;
+
+    @ApiModelProperty(value = "活动标题图片URL")
+    private String activityTitleImgUrl;
+
+    @ApiModelProperty(value = "活动详情图片URL")
+    private String activityDetailImgUrl;
+
+    @ApiModelProperty(value = "活动详情图片URL列表")
+    private List<String> activityDetailImgUrlList;
+
+    @ApiModelProperty(value = "当前报名人数")
+    private Integer currentSignupCount;
+
+    @ApiModelProperty(value = "当前通过人数")
+    private Integer currentApprovedCount;
+
+    @ApiModelProperty(value = "是否已报名")
+    private Boolean signedUp;
+
+    @ApiModelProperty(value = "是否在报名时间内")
+    private Boolean inSignupTime;
+
+    @ApiModelProperty(value = "详情按钮状态:0-活动已结束,1-报名已截止,2-等待活动开始,3-报名成功,4-已报名,5-立即报名")
+    private Integer detailStatus;
+
+    @ApiModelProperty(value = "结果类型:0-文字, 1-图片")
+    private Integer resultType;
+
+    @ApiModelProperty(value = "结果文字")
+    private String resultText;
+
+    @ApiModelProperty(value = "结果图片地址")
+    private String resultMediaUrl;
+
+    @ApiModelProperty(value = "审核时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date auditTime;
+
+}

+ 79 - 0
alien-entity/src/main/java/shop/alien/entity/storePlatform/vo/StoreOperationalActivityMySignupVo.java

@@ -0,0 +1,79 @@
+package shop.alien.entity.storePlatform.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 我的报名列表返回对象
+ *
+ * @author system
+ * @since 2025-01-XX
+ */
+@Data
+@JsonInclude(JsonInclude.Include.NON_NULL)
+@ApiModel(value = "StoreOperationalActivityMySignupVo", description = "我的报名列表返回对象")
+public class StoreOperationalActivityMySignupVo {
+
+    @ApiModelProperty(value = "活动ID")
+    private Integer activityId;
+
+    @ApiModelProperty(value = "报名ID")
+    private Integer signupId;
+
+    @ApiModelProperty(value = "商户ID")
+    private Integer storeId;
+
+    @ApiModelProperty(value = "活动名称")
+    private String activityName;
+
+    @ApiModelProperty(value = "活动宣传图URL")
+    private String promotionalImage;
+
+    @ApiModelProperty(value = "活动标题图URL")
+    private String activityTitleImgUrl;
+
+    @ApiModelProperty(value = "店铺用户头像")
+    private String storeUserHeadImg;
+
+    @ApiModelProperty(value = "店铺用户昵称")
+    private String storeUserNickName;
+
+    @ApiModelProperty(value = "活动开始时间")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private Date startTime;
+
+    @ApiModelProperty(value = "活动结束时间")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private Date endTime;
+
+    @ApiModelProperty(value = "活动状态")
+    private Integer activityStatus;
+
+    @ApiModelProperty(value = "报名状态")
+    private Integer signupStatus;
+
+    @JsonIgnore
+    private Integer signupAuditStatus;
+
+    @ApiModelProperty(value = "活动开始状态(0-已开始,1-已结束)")
+    private Integer activityStartStatus;
+
+    @ApiModelProperty(value = "是否有成果")
+    private Integer hasAchievement;
+
+    @ApiModelProperty(value = "列表状态")
+    private Integer status;
+
+    @ApiModelProperty(value = "报名时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date signupTime;
+
+    @ApiModelProperty(value = "状态文案")
+    private String statusLabel;
+}

+ 126 - 0
alien-entity/src/main/java/shop/alien/entity/storePlatform/vo/StoreOperationalActivityPlatformDetailVo.java

@@ -0,0 +1,126 @@
+package shop.alien.entity.storePlatform.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 运营活动详情返回对象(用户端)
+ *
+ * @author system
+ * @since 2025-01-XX
+ */
+@Data
+@JsonInclude(JsonInclude.Include.NON_NULL)
+@ApiModel(value = "StoreOperationalActivityDetailVo", description = "运营活动详情返回对象")
+public class StoreOperationalActivityPlatformDetailVo {
+
+    @ApiModelProperty(value = "主键")
+    private Integer id;
+
+    @ApiModelProperty(value = "商户ID")
+    private Integer storeId;
+
+    @ApiModelProperty(value = "活动名称")
+    private String activityName;
+
+    @ApiModelProperty(value = "活动宣传图URL")
+    private String promotionalImage;
+
+    @ApiModelProperty(value = "活动开始时间")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private Date startTime;
+
+    @ApiModelProperty(value = "活动结束时间")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private Date endTime;
+
+    @ApiModelProperty(value = "用户可参与次数,0表示不限制")
+    private Integer participationLimit;
+
+    @ApiModelProperty(value = "活动规则")
+    private String activityRule;
+
+    @ApiModelProperty(value = "奖励类型")
+    private String rewardType;
+
+    @ApiModelProperty(value = "优惠券ID")
+    private Integer couponId;
+
+    @ApiModelProperty(value = "优惠券发放数量")
+    private Integer couponQuantity;
+
+    @ApiModelProperty(value = "状态")
+    private Integer status;
+
+    @ApiModelProperty(value = "拒绝原因")
+    private String approvalComments;
+
+    @ApiModelProperty(value = "活动类型")
+    private String activityType;
+
+    @ApiModelProperty(value = "报名开始时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date signupStartTime;
+
+    @ApiModelProperty(value = "报名结束时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date signupEndTime;
+
+    @ApiModelProperty(value = "活动限制人数")
+    private Integer activityLimitPeople;
+
+    @ApiModelProperty(value = "活动详情")
+    private String activityDetails;
+
+    @ApiModelProperty(value = "创建时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date createdTime;
+
+    @ApiModelProperty(value = "活动状态名称")
+    private String statusName;
+
+    @ApiModelProperty(value = "优惠券名称")
+    private String couponName;
+
+    @ApiModelProperty(value = "商户名称")
+    private String storeName;
+
+    @ApiModelProperty(value = "活动标题图片URL")
+    private String activityTitleImgUrl;
+
+    @ApiModelProperty(value = "活动详情图片URL")
+    private String activityDetailImgUrl;
+
+    @ApiModelProperty(value = "活动详情图片URL列表")
+    private List<String> activityDetailImgUrlList;
+
+    @ApiModelProperty(value = "当前报名人数")
+    private Integer currentSignupCount;
+
+    @ApiModelProperty(value = "当前通过人数")
+    private Integer currentApprovedCount;
+
+    @ApiModelProperty(value = "是否已报名")
+    private Boolean signedUp;
+
+    @ApiModelProperty(value = "是否在报名时间内")
+    private Boolean inSignupTime;
+
+    @ApiModelProperty(value = "详情按钮状态:0-活动已结束,1-报名已截止,2-等待活动开始,3-报名成功,4-已报名,5-立即报名")
+    private Integer detailStatus;
+
+    @ApiModelProperty(value = "结果类型:0-文字, 1-图片")
+    private Integer resultType;
+
+    @ApiModelProperty(value = "结果文字")
+    private String resultText;
+
+    @ApiModelProperty(value = "结果图片地址")
+    private String resultMediaUrl;
+}

+ 30 - 0
alien-entity/src/main/java/shop/alien/entity/storePlatform/vo/StoreOperationalActivitySignupCheckVo.java

@@ -0,0 +1,30 @@
+package shop.alien.entity.storePlatform.vo;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 运营活动报名校验结果
+ *
+ * @author system
+ * @since 2025-01-XX
+ */
+@Data
+@JsonInclude(JsonInclude.Include.NON_NULL)
+@ApiModel(value = "StoreOperationalActivitySignupCheckVo", description = "运营活动报名校验结果")
+public class StoreOperationalActivitySignupCheckVo {
+
+    @ApiModelProperty(value = "是否已满")
+    private boolean full;
+
+    @ApiModelProperty(value = "是否已成功报名")
+    private boolean signedUp;
+
+    @ApiModelProperty(value = "当前报名人数")
+    private Integer currentSignupCount;
+
+    @ApiModelProperty(value = "活动限制人数")
+    private Integer activityLimitPeople;
+}

+ 23 - 0
alien-entity/src/main/java/shop/alien/entity/storePlatform/vo/StoreOperationalActivitySignupIdDTO.java

@@ -0,0 +1,23 @@
+package shop.alien.entity.storePlatform.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 运营活动报名ID DTO
+ *
+ * @author system
+ * @since 2025-01-XX
+ */
+@Data
+@ApiModel(value = "StoreOperationalActivitySignupIdDTO", description = "运营活动报名ID DTO")
+public class StoreOperationalActivitySignupIdDTO {
+
+    @ApiModelProperty(value = "报名ID", required = true)
+    private Integer id;
+
+    @ApiModelProperty(value = "审核拒绝原因(审核拒绝时必填)")
+    private String rejectReason;
+}
+

+ 32 - 0
alien-entity/src/main/java/shop/alien/entity/storePlatform/vo/StoreOperationalActivitySignupQueryDTO.java

@@ -0,0 +1,32 @@
+package shop.alien.entity.storePlatform.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 运营活动报名查询DTO
+ *
+ * @author system
+ * @since 2025-01-XX
+ */
+@Data
+@ApiModel(value = "StoreOperationalActivitySignupQueryDTO", description = "运营活动报名查询DTO")
+public class StoreOperationalActivitySignupQueryDTO {
+
+    @ApiModelProperty(value = "商户ID", required = true)
+    private Integer storeId;
+
+    @ApiModelProperty(value = "报名状态:0-待审核,1-拒绝,2-通过")
+    private Integer status;
+
+    @ApiModelProperty(value = "活动名称(模糊查询)")
+    private String activityName;
+
+    @ApiModelProperty(value = "页码", example = "1")
+    private Integer pageNum;
+
+    @ApiModelProperty(value = "每页大小", example = "10")
+    private Integer pageSize;
+}
+

+ 70 - 0
alien-entity/src/main/java/shop/alien/entity/storePlatform/vo/StoreOperationalActivitySignupVO.java

@@ -0,0 +1,70 @@
+package shop.alien.entity.storePlatform.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 运营活动报名列表返回对象
+ *
+ * @author system
+ * @since 2025-01-XX
+ */
+@Data
+@JsonInclude(JsonInclude.Include.NON_NULL)
+@ApiModel(value = "StoreOperationalActivitySignupVO", description = "运营活动报名列表返回对象")
+public class StoreOperationalActivitySignupVO {
+
+    @ApiModelProperty(value = "主键ID")
+    private Integer id;
+
+    @ApiModelProperty(value = "活动ID")
+    private Integer activityId;
+
+    @ApiModelProperty(value = "商户ID")
+    private Integer storeId;
+
+    @ApiModelProperty(value = "用户ID")
+    private Integer userId;
+
+    @ApiModelProperty(value = "报名人姓名")
+    private String userName;
+
+    @ApiModelProperty(value = "用户昵称")
+    private String nickName;
+
+    @ApiModelProperty(value = "手机号")
+    private String phone;
+
+    @ApiModelProperty(value = "所属活动")
+    private String activityName;
+
+    @ApiModelProperty(value = "活动类型:COMMENT-评论有礼, MARKETING-营销活动")
+    private String activityType;
+
+    @ApiModelProperty(value = "报名状态:0-待审核,1-拒绝,2-通过")
+    private Integer status;
+
+    @ApiModelProperty(value = "报名状态文字:待审核、拒绝、通过")
+    private String statusText;
+
+    @ApiModelProperty(value = "审核拒绝原因")
+    private String rejectReason;
+
+    @ApiModelProperty(value = "审核时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date auditTime;
+
+    @ApiModelProperty(value = "报名时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date signupTime;
+
+    @ApiModelProperty(value = "创建时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date createdTime;
+}
+

+ 6 - 0
alien-entity/src/main/java/shop/alien/entity/storePlatform/vo/StoreOperationalActivityVO.java

@@ -54,5 +54,11 @@ public class StoreOperationalActivityVO extends StoreOperationalActivity {
 
     @ApiModelProperty(value = "活动详情图片")
     private String activityDetailImgUrl;
+
+    @ApiModelProperty(value = "活动详情图片URL列表")
+    private java.util.List<String> activityDetailImgUrlList;
+
+    @ApiModelProperty(value = "活动类型名称")
+    private String activityTypeName;
 }
 

+ 5 - 0
alien-entity/src/main/java/shop/alien/mapper/CommonRatingMapper.java

@@ -2,7 +2,9 @@ package shop.alien.mapper;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Constants;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
@@ -37,6 +39,7 @@ public interface CommonRatingMapper extends BaseMapper<CommonRating> {
             "FROM `common_rating` " +  // FROM 后加空格,避免和表名拼接成 FROM`common_rating`
             "WHERE business_type = #{businessType} " +
             "AND delete_flag = 0 " +
+            "AND audit_status = 1 " +
             "AND business_id = #{businessId}")
     StoreInfoScoreVo getCommentCountAndScoreInfo(@Param("businessType")Integer businessType,@Param("businessId")Integer businessId);
 
@@ -67,5 +70,7 @@ public interface CommonRatingMapper extends BaseMapper<CommonRating> {
      */
     @Update("UPDATE common_rating SET delete_flag = 1, updated_time = NOW() WHERE id = #{id}")
     int logicDeleteById(@Param("id") Integer id);
+
+    IPage<CommonRating> getMyRatingList(Page<CommonRating> page, @Param(Constants.WRAPPER) QueryWrapper<CommonRating> wrapper);
 }
 

+ 3 - 3
alien-entity/src/main/java/shop/alien/mapper/LifeUserDynamicsMapper.java

@@ -23,7 +23,7 @@ public interface LifeUserDynamicsMapper extends BaseMapper<LifeUserDynamics> {
             "where lud.delete_flag = 0 and lud.enable_status = 0 and lud.draft = 0 and " +
             "not exists (select 1 from life_user_violation luv where luv.delete_flag = 0 and luv.processing_status = 1 " +
             "AND luv.dynamics_id = lud.id) order by lud.created_time desc) " +
-            "select dynamice.*, info.store_name userName, user.head_img userImage, info.id storeUserId, user.id storeOrUserId, 0 isExpert " +
+            "select dynamice.*, info.store_name userName, user.head_img userImage, info.id storeUserId, user.id storeOrUserId, 0 isExpert, info.score_avg scoreAvg, info.business_section businessSection, info.business_type_name businessTypeName " +
             "from dynamice " +
             "join store_user user on dynamice.phone = user.phone and user.delete_flag = 0 " +
             "and user.status = 0 and user.logout_flag = 0 " +
@@ -33,7 +33,7 @@ public interface LifeUserDynamicsMapper extends BaseMapper<LifeUserDynamics> {
             "where dynamice.flag = 'store' " +
             "union " +
             "select dynamice.*, user.user_name userName, user.user_image userImage, user.id storeUserId, user.id storeOrUserId, " +
-            "IF(lue.expert_code IS NOT NULL , 1, 0) AS isExpert " +
+            "IF(lue.expert_code IS NOT NULL , 1, 0) AS isExpert, 0 scoreAvg, 0 businessSection, 0 businessTypeName " +
             "from dynamice " +
             "join life_user user on dynamice.phone = user.user_phone and user.delete_flag = 0 " +
             "and user.logout_flag = 0 " +
@@ -49,7 +49,7 @@ public interface LifeUserDynamicsMapper extends BaseMapper<LifeUserDynamics> {
             "on llr.huifu_id = lud.id\n" +
             "and lu.user_phone = (select CONCAT('user_',lu1.user_phone) from life_user lu1 where lu1.id = #{userId})" +
             "${ew.customSqlSegment}")
-    List<LifeUserDynamicsVo> getStoreDynamicslist(@Param("userId") String userId, @Param(Constants.WRAPPER) QueryWrapper<LifeUserDynamics> dynamicsWrapper);
+    List<LifeUserDynamicsVo> getStoreDynamicslistWithWrapper(@Param("userId") String userId, @Param(Constants.WRAPPER) QueryWrapper<LifeUserDynamics> dynamicsWrapper);
 
     @Select("with middle_lud as (\n" +
             "  select distinct  \n" +

+ 1 - 1
alien-entity/src/main/java/shop/alien/mapper/PlatformStoreCouponMapper.java

@@ -26,7 +26,7 @@ public interface PlatformStoreCouponMapper extends BaseMapper<LifeCoupon> {
             "join store_info store on store.id = coupon.store_id " +
             "join store_user user on store.id = user.store_id " +
             "${ew.customSqlSegment}")
-    List<LifeCouponVo> getCouponList(@Param(Constants.WRAPPER) QueryWrapper<LifeCouponVo> wrapper);
+    List<LifeCouponVo> getCouponListWithoutPage(@Param(Constants.WRAPPER) QueryWrapper<LifeCouponVo> wrapper);
 
     @Select("select lc.*,si.store_name,si.store_tel phone\n" +
             "from life_coupon lc \n" +

+ 1 - 1
alien-entity/src/main/java/shop/alien/mapper/PlatformStoreLifeGroupBuyMainMapper.java

@@ -30,6 +30,6 @@ public interface PlatformStoreLifeGroupBuyMainMapper extends BaseMapper<LifeGrou
             "\tJOIN store_info store ON store.id = life.store_id\n" +
             "\tJOIN store_user user ON store.id = user.store_id\n"+
             "${ew.customSqlSegment}")
-    List<LifeGroupBuyMainVo> getLifeGroupBuyMainList(@Param(Constants.WRAPPER) QueryWrapper<LifeGroupBuyMainVo> wrapper);
+    List<LifeGroupBuyMainVo> getLifeGroupBuyMainListWithoutPage(@Param(Constants.WRAPPER) QueryWrapper<LifeGroupBuyMainVo> wrapper);
 
 }

+ 1 - 1
alien-entity/src/main/java/shop/alien/mapper/StoreClockInMapper.java

@@ -48,7 +48,7 @@ public interface StoreClockInMapper extends BaseMapper<StoreClockIn> {
      *
      * @return list
      */
-    @Select("SELECT store_id as storeId, count(store_id) as count FROM `store_clock_in` where delete_flag = 0 GROUP BY store_id ")
+    @Select("SELECT store_id as storeId, count(store_id) as count FROM `store_clock_in` where delete_flag = 0 and check_flag != 3 GROUP BY store_id ")
     List<Map<Integer, Integer>> getStoreClockInCount();
      /**
       * 获取所有店铺打卡次数(有图片并且设置为可见的)

+ 3 - 3
alien-entity/src/main/java/shop/alien/mapper/StoreCommentAppealMapper.java

@@ -53,7 +53,7 @@ public interface StoreCommentAppealMapper extends BaseMapper<StoreCommentAppeal>
             "left join life_user d on c.user_id = d.id and d.delete_flag = 0 " +
             "left join store_info e on a.store_id = e.id and e.delete_flag = 0 " +
             "Left join store_user f on e.id = f.store_id and f.delete_flag = 0 ${ew.customSqlSegment}")
-    List<StoreCommentAppealVo> getStoreCommentAppealPage(@Param(Constants.WRAPPER) QueryWrapper<StoreCommentAppealVo> queryWrapper);
+    List<StoreCommentAppealVo> getStoreCommentAppealList(@Param(Constants.WRAPPER) QueryWrapper<StoreCommentAppealVo> queryWrapper);
 
     /**
      * 申诉详情
@@ -87,9 +87,9 @@ public interface StoreCommentAppealMapper extends BaseMapper<StoreCommentAppeal>
     List<Map<String, Object>> getAppealList();
 
 
-    @Select("SELECT sca.id, sca.appeal_status, sca.final_result, sca.comment_id, sca.record_id " +
+    @Select("SELECT sca.id, sca.appeal_status, sca.final_result, sca.comment_id, sca.record_id, sca.store_id " +
             "FROM store_comment_appeal sca " +
-            "WHERE sca.appeal_status = 3")
+            "WHERE sca.appeal_status = 0 AND sca.record_id IS NOT NULL AND sca.delete_flag = 0")
     List<StoreCommentAppeal> getPendingAppeals();
 
     @Update("UPDATE store_comment_appeal " +

+ 13 - 0
alien-entity/src/main/java/shop/alien/mapper/StoreCuisineCategoryMapper.java

@@ -0,0 +1,13 @@
+package shop.alien.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import shop.alien.entity.store.StoreCuisineCategory;
+
+/**
+ * 菜品分类表 Mapper 接口
+ *
+ * @author system
+ * @since 2025-01-XX
+ */
+public interface StoreCuisineCategoryMapper extends BaseMapper<StoreCuisineCategory> {
+}

+ 1 - 1
alien-entity/src/main/java/shop/alien/mapper/StoreInfoMapper.java

@@ -194,7 +194,7 @@ public interface StoreInfoMapper extends BaseMapper<StoreInfo> {
      * @param storeContact    门店联系人(模糊)
      * @param storeTel        门店电话(模糊)
      * @param businessSection 经营板块
-     * @param imgType         证照图片类型(14:营业执照;24/25:食品经营许可证;31/32:娱乐经营许可证
+     * @param imgType         证照图片类型(14:营业执照;35:其他资质证明
      * @param states          证照状态
      * @param startSubmitDate 提交开始时间(yyyy-MM-dd HH:mm:ss)
      * @param endSubmitDate   提交结束时间(yyyy-MM-dd HH:mm:ss)

+ 23 - 2
alien-entity/src/main/java/shop/alien/mapper/StoreOfficialAlbumMapper.java

@@ -23,10 +23,31 @@ public interface StoreOfficialAlbumMapper extends BaseMapper<StoreOfficialAlbum>
      */
     //"图片类型, 0:其他, 1:入口图, 2:相册, 3:菜品, 4:环境, 5:价目表, 6:推荐菜, 7:菜单, 8:用户评论, 9:商家申诉, 10:商家头像, 11:店铺轮播图"
     @Select("SELECT a.*, b.img_url FROM store_official_album a LEFT JOIN store_img b ON b.id = " +
-            "(SELECT b2.id FROM store_img b2 WHERE b2.business_id = a.id and b2.img_type in ( '2','4') " +
+            "(SELECT b2.id FROM store_img b2 WHERE b2.business_id = a.id and b2.img_type in ( '2','4') and b2.delete_flag = 0 " +
             "order by b2.img_sort LIMIT 1) where a.delete_flag = '0' and  a.store_id = #{storeId}")
     List<StoreOfficialAlbumVo> getStoreOfficialAlbumList(@Param("storeId") Integer storeId);
 
-    @Select("select si.business_id as id ,count(*) as img_count from store_img si where si.delete_flag = '0' and si.store_id = #{storeId} group by si.business_id ")
+    @Select("select " +
+            " soa.id," +
+            " CASE " +
+            "     WHEN soa.album_name = '视频' THEN " +
+            "         (SELECT COUNT(*) " +
+            "          FROM store_video sv " +
+            "          WHERE sv.business_id = soa.id " +
+            "            AND sv.delete_flag = 0 " +
+            "            AND sv.store_id = #{storeId}) " +
+            "     ELSE " +
+            "         (SELECT COUNT(*) " +
+            "          FROM store_img b2 " +
+            "          WHERE b2.business_id = soa.id " +
+            "            AND b2.img_type IN ('2', '4') " +
+            "            AND b2.delete_flag = 0 " +
+            "            AND b2.store_id = #{storeId}) " +
+            " END as imgCount " +
+            " from" +
+            " store_official_album soa\n" +
+            " where " +
+            " soa.store_id = #{storeId} " +
+            " and soa.delete_flag = 0")
     List<StoreOfficialAlbum> getStoreOfficialAlbumImgCount(@Param("storeId") Integer storeId);
 }

+ 32 - 0
alien-entity/src/main/java/shop/alien/mapper/StorePlatformMenuMapper.java

@@ -0,0 +1,32 @@
+package shop.alien.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import shop.alien.entity.store.StorePlatformMenu;
+import shop.alien.entity.store.vo.StorePlatformMenuVo;
+
+import java.util.List;
+
+/**
+ * 商家PC菜单权限表 Mapper 接口
+ *
+ * @author system
+ * @since 2025-01-XX
+ */
+@Mapper
+public interface StorePlatformMenuMapper extends BaseMapper<StorePlatformMenu> {
+
+    IPage<StorePlatformMenuVo> selectList(IPage<StorePlatformMenuVo> store, LambdaQueryWrapper<StorePlatformMenuVo> queryWrapper);
+
+    /**
+     * 根据角色ID查询权限菜单列表
+     *
+     * @param roleId 角色ID
+     * @return 菜单列表
+     */
+    List<StorePlatformMenu> selectMenusByRoleId(@Param("roleId") Long roleId);
+}
+

+ 15 - 0
alien-entity/src/main/java/shop/alien/mapper/StorePlatformOperationLogMapper.java

@@ -0,0 +1,15 @@
+package shop.alien.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import shop.alien.entity.storePlatform.StorePlatformOperationLog;
+
+/**
+ * 平台操作记录 Mapper接口
+ *
+ * @author system
+ * @since 2025-01-XX
+ */
+@Mapper
+public interface StorePlatformOperationLogMapper extends BaseMapper<StorePlatformOperationLog> {
+}

+ 21 - 0
alien-entity/src/main/java/shop/alien/mapper/StorePlatformRoleMapper.java

@@ -0,0 +1,21 @@
+package shop.alien.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+import shop.alien.entity.store.StorePlatformRole;
+
+/**
+ * 平台角色信息表 Mapper 接口
+ *
+ * @author system
+ * @since 2025-01-XX
+ */
+@Mapper
+public interface StorePlatformRoleMapper extends BaseMapper<StorePlatformRole> {
+
+    @Select("SELECT role_name FROM store_platform_role WHERE role_id = #{roleId} LIMIT 1")
+    String selectRoleNameById(@Param("roleId") Long roleId);
+}
+

+ 17 - 0
alien-entity/src/main/java/shop/alien/mapper/StorePlatformRoleMenuMapper.java

@@ -0,0 +1,17 @@
+package shop.alien.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import shop.alien.entity.store.StorePlatformRoleMenu;
+
+/**
+ * 角色菜单关联表 Mapper 接口
+ *
+ * @author system
+ * @since 2025-01-XX
+ */
+@Mapper
+public interface StorePlatformRoleMenuMapper extends BaseMapper<StorePlatformRoleMenu> {
+
+}
+

+ 34 - 0
alien-entity/src/main/java/shop/alien/mapper/StorePlatformUserRoleMapper.java

@@ -0,0 +1,34 @@
+package shop.alien.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import shop.alien.entity.store.StorePlatformUserRole;
+import shop.alien.entity.store.vo.SubAccountVo;
+
+import java.util.List;
+
+/**
+ * 用户角色关联表 Mapper 接口
+ *
+ * @author system
+ * @since 2025-01-XX
+ */
+@Mapper
+public interface StorePlatformUserRoleMapper extends BaseMapper<StorePlatformUserRole> {
+
+    /**
+     * 根据店铺ID查询子账号列表(连表查询)
+     *
+     * @param storeId    店铺ID
+     * @param accountName 账号名称(模糊查询)
+     * @param phone       手机号(模糊查询)
+     * @param roleName    角色名称(模糊查询)
+     * @return 子账号列表
+     */
+    List<SubAccountVo> querySubAccounts(@Param("storeId") Integer storeId,
+                                        @Param("accountName") String accountName,
+                                        @Param("phone") String phone,
+                                        @Param("roleName") String roleName);
+}
+

+ 13 - 0
alien-entity/src/main/java/shop/alien/mapper/StoreTableLogMapper.java

@@ -0,0 +1,13 @@
+package shop.alien.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import shop.alien.entity.store.StoreTableLog;
+
+/**
+ * 桌号换桌记录表 Mapper 接口
+ *
+ * @author system
+ * @since 2025-01-XX
+ */
+public interface StoreTableLogMapper extends BaseMapper<StoreTableLog> {
+}

+ 13 - 0
alien-entity/src/main/java/shop/alien/mapper/StoreTableMapper.java

@@ -0,0 +1,13 @@
+package shop.alien.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import shop.alien.entity.store.StoreTable;
+
+/**
+ * 桌号表 Mapper 接口
+ *
+ * @author system
+ * @since 2025-01-XX
+ */
+public interface StoreTableMapper extends BaseMapper<StoreTable> {
+}

+ 11 - 0
alien-entity/src/main/java/shop/alien/mapper/StoreTrackEventMapper.java

@@ -137,4 +137,15 @@ public interface StoreTrackEventMapper extends BaseMapper<StoreTrackEvent> {
             "GROUP BY event_type")
     List<Map<String, Object>> calculateServiceStatistics(@Param("storeId") Integer storeId,
                                                           @Param("endDate") Date endDate);
+    
+    /**
+     * 统计店铺当前总浏览量(所有历史数据)
+     */
+    @Select("SELECT COUNT(*) as viewCount " +
+            "FROM store_track_event " +
+            "WHERE store_id = #{storeId} " +
+            "AND delete_flag = 0 " +
+            "AND event_category = 'TRAFFIC' " +
+            "AND event_type = 'VIEW'")
+    Long countStoreViewCount(@Param("storeId") Integer storeId);
 }

+ 2 - 0
alien-entity/src/main/java/shop/alien/mapper/StoreUserMapper.java

@@ -34,4 +34,6 @@ public interface StoreUserMapper extends BaseMapper<StoreUser> {
     List<Map<String,Object>> selectStore(@Param("userPhones") String userPhones);
 
     StoreUser getRemoveUser(@Param("id") String id);
+
+    StoreUser getUserIncludeDeleted(@Param("id") Integer id);
 }

+ 31 - 0
alien-entity/src/main/java/shop/alien/mapper/SubAccountStoreMapper.java

@@ -0,0 +1,31 @@
+package shop.alien.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import shop.alien.entity.store.vo.SubAccountStoreListVo;
+
+import java.util.List;
+
+/**
+ * 子账号关联门店 Mapper 接口
+ *
+ * @author system
+ * @since 2025-01-01
+ */
+@Mapper
+public interface SubAccountStoreMapper extends BaseMapper<Object> {
+    /**
+     * 根据用户ID查询子账号关联的门店列表
+     * @param userId 用户ID(store_user.id)
+     * @return 门店列表
+     */
+    List<SubAccountStoreListVo> selectSubAccountStoreListByUserId(@Param("userId") Integer userId);
+
+    /**
+     * 根据用户ID查询子账号关联的门店列表 (无主账号情况)
+     * @param userId 用户ID(store_user.id)
+     * @return 门店列表
+     */
+    List<SubAccountStoreListVo> selectSubAccountStoreListByUserIdTwo(@Param("userId") Integer userId);
+}

+ 68 - 0
alien-entity/src/main/java/shop/alien/mapper/storePlantform/StoreOperationalActivityAchievementMapper.java

@@ -0,0 +1,68 @@
+package shop.alien.mapper.storePlantform;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import shop.alien.entity.storePlatform.StoreOperationalActivityAchievement;
+import shop.alien.entity.storePlatform.vo.StoreOperationalActivityAchievementCaseDetailVo;
+import shop.alien.entity.storePlatform.vo.StoreOperationalActivityAchievementCaseItemVo;
+import shop.alien.entity.storePlatform.vo.StoreOperationalActivityAchievementCaseVo;
+
+import java.util.List;
+
+/**
+ * 运营活动成果 Mapper 接口
+ *
+ * @author system
+ * @since 2025-01-XX
+ */
+@Mapper
+public interface StoreOperationalActivityAchievementMapper extends BaseMapper<StoreOperationalActivityAchievement> {
+
+    /**
+     * 分页查询案例列表(同一用户同一活动最新成果)。
+     *
+     * @param page           分页
+     * @param activityStatus 活动状态
+     * @return 分页列表
+     */
+    IPage<StoreOperationalActivityAchievementCaseVo> selectCasePage(
+            IPage<?> page,
+            @Param("activityStatus") Integer activityStatus);
+
+    /**
+     * 案例详情头部信息
+     *
+     * @param activityId 活动ID
+     * @param userId 用户ID
+     * @return 详情
+     */
+    StoreOperationalActivityAchievementCaseDetailVo selectCaseHeader(@Param("activityId") Integer activityId,
+                                                                     @Param("userId") Integer userId);
+
+    /**
+     * 案例详情成果列表
+     *
+     * @param activityId 活动ID
+     * @param userId 用户ID
+     * @return 成果列表
+     */
+    List<StoreOperationalActivityAchievementCaseItemVo> selectCaseItems(@Param("activityId") Integer activityId,
+                                                                        @Param("userId") Integer userId);
+
+    /**
+     * 商家端分页查询案例列表(按商户ID、上传情况、活动名称筛选)
+     *
+     * @param page 分页
+     * @param storeId 商户ID
+     * @param hasResult 上传情况:0-未上传, 1-已上传
+     * @param activityName 活动名称(模糊查询)
+     * @return 分页列表
+     */
+    IPage<StoreOperationalActivityAchievementCaseVo> selectStoreCasePage(
+            IPage<?> page,
+            @Param("storeId") Integer storeId,
+            @Param("hasResult") Integer hasResult,
+            @Param("activityName") String activityName);
+}

+ 81 - 0
alien-entity/src/main/java/shop/alien/mapper/storePlantform/StoreOperationalActivitySignupMapper.java

@@ -0,0 +1,81 @@
+package shop.alien.mapper.storePlantform;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import shop.alien.entity.storePlatform.StoreOperationalActivitySignup;
+import shop.alien.entity.storePlatform.vo.StoreOperationalActivityMySignupVo;
+
+import java.util.List;
+
+/**
+ * 运营活动报名 Mapper 接口
+ *
+ * @author system
+ * @since 2025-01-XX
+ */
+@Mapper
+public interface StoreOperationalActivitySignupMapper extends BaseMapper<StoreOperationalActivitySignup> {
+
+    /**
+     * 根据活动ID查询报名列表(仅未删除)。
+     *
+     * @param activityId 活动ID
+     * @return 报名列表
+     */
+    List<StoreOperationalActivitySignup> selectByActivityId(@Param("activityId") Integer activityId);
+
+    /**
+     * 统计活动当前报名人数(待审核+通过,未删除)。
+     *
+     * @param activityId 活动ID
+     * @return 报名人数
+     */
+    Integer countSignupByActivityId(@Param("activityId") Integer activityId);
+
+    /**
+     * 统计活动当前通过人数(通过状态,未删除)。
+     *
+     * @param activityId 活动ID
+     * @return 通过人数
+     */
+    Integer countApprovedByActivityId(@Param("activityId") Integer activityId);
+
+    /**
+     * 统计用户是否已通过报名。
+     *
+     * @param activityId 活动ID
+     * @param userId     用户ID
+     * @return 报名数量
+     */
+    Integer countApprovedByActivityAndUser(@Param("activityId") Integer activityId,
+                                           @Param("userId") Integer userId);
+
+    /**
+     * 统计用户是否已报名(待审核/通过)。
+     *
+     * @param activityId 活动ID
+     * @param userId     用户ID
+     * @return 报名数量
+     */
+    Integer countSignedUpByActivityAndUser(@Param("activityId") Integer activityId,
+                                           @Param("userId") Integer userId);
+
+    /**
+     * 获取用户最新报名状态。
+     *
+     * @param activityId 活动ID
+     * @param userId     用户ID
+     * @return 报名状态
+     */
+    Integer selectLatestSignupStatus(@Param("activityId") Integer activityId,
+                                     @Param("userId") Integer userId);
+
+    /**
+     * 查询我的报名列表。
+     *
+     * @param userId 用户ID
+     * @return 报名列表
+     */
+    List<StoreOperationalActivityMySignupVo> selectMySignups(@Param("userId") Integer userId);
+}

+ 6 - 0
alien-entity/src/main/resources/mapper/CommonRatingMapper.xml

@@ -31,6 +31,12 @@
         is_anonymous, is_show, audit_status, like_count, score_one, score_two, score_three,
         delete_flag, created_user_id, updated_time, updated_user_id
     </sql>
+    <select id="getMyRatingList" resultType="shop.alien.entity.store.vo.CommonRatingVo">
+        select cr.*,si.store_name storeName
+        from common_rating cr
+        left join store_info si on cr.business_id = si.id
+        ${ew.customSqlSegment}
+    </select>
 
 </mapper>
 

+ 3 - 0
alien-entity/src/main/resources/mapper/LifeFeedbackMapper.xml

@@ -121,7 +121,9 @@
         SELECT
             f.id,
             u.nick_name AS nickName,
+            lu.user_name AS userNickName,
             u.phone AS phone,
+            lu.user_phone AS userPhone,
             f.feedback_type AS feedbackType,
             CASE f.feedback_type
                 WHEN 0 THEN 'bug反馈'
@@ -149,6 +151,7 @@
         FROM life_feedback f
         LEFT JOIN store_user u ON f.user_id = u.id
         LEFT JOIN life_sys s ON f.staff_id = s.id
+        LEFT JOIN life_user lu ON f.user_id = lu.id
         WHERE 1=1
         <if test="feedbackType != null">
             AND f.feedback_type = #{feedbackType}

+ 110 - 31
alien-entity/src/main/resources/mapper/LifeUserDynamicsMapper.xml

@@ -3,60 +3,139 @@
 <mapper namespace="shop.alien.mapper.LifeUserDynamicsMapper">
 
     <select id="getDynamicsList" resultType="shop.alien.entity.store.vo.LifeUserDynamicsVo">
-        select dyna1.*, COUNT(dyna1.id) AS fansCount from (
-        select dyna.*,COUNT(sc.id) AS commentCount,  COUNT(lm.id) AS transferNum from (
-        with dynamice as(
-        select
+        SELECT
+        -- 1. 用ANY_VALUE()包裹非聚合列,符合only_full_group_by规则
+        ANY_VALUE(dyna1.id) AS id,
+        ANY_VALUE(dyna1.dynamicsType) AS dynamicsType,
+        ANY_VALUE(dyna1.title) AS title,
+        ANY_VALUE(dyna1.phoneId) AS phoneId,
+        ANY_VALUE(dyna1.context) AS context,
+        ANY_VALUE(dyna1.image_path) AS image_path,
+        ANY_VALUE(dyna1.address) AS address,
+        ANY_VALUE(dyna1.address_name) AS address_name,
+        ANY_VALUE(dyna1.address_context) AS address_context,
+        ANY_VALUE(dyna1.liulan_count) AS liulan_count,
+        ANY_VALUE(dyna1.dianzan_count) AS dianzan_count,
+        ANY_VALUE(dyna1.type) AS type,
+        ANY_VALUE(dyna1.created_time) AS created_time,
+        ANY_VALUE(dyna1.userType) AS userType,
+        ANY_VALUE(dyna1.phone) AS phone,
+        ANY_VALUE(dyna1.draft) AS draft,
+        ANY_VALUE(dyna1.address_province) AS address_province,
+        ANY_VALUE(dyna1.top_status) AS top_status,
+        ANY_VALUE(dyna1.top_time) AS top_time,
+        ANY_VALUE(dyna1.enable_status) AS enable_status,
+        ANY_VALUE(dyna1.userName) AS userName,
+        ANY_VALUE(dyna1.userImage) AS userImage,
+        ANY_VALUE(dyna1.storeUserId) AS storeUserId,
+        ANY_VALUE(dyna1.storeOrUserId) AS storeOrUserId,
+        ANY_VALUE(dyna1.isExpert) AS isExpert,
+        ANY_VALUE(dyna1.store_name) AS store_name,
+        -- 2. 修正聚合计数逻辑:用COUNT(DISTINCT)避免重复计数,粉丝数统计lf1.id而非dyna1.id
+        COUNT(DISTINCT lf1.id) AS fansCount,
+        -- 保留内层的评论数、转发数(从dyna1中取聚合后的值)
+        ANY_VALUE(dyna1.commentCount) AS commentCount,
+        ANY_VALUE(dyna1.transferNum) AS transferNum
+        FROM (
+        SELECT
+        -- 内层同样用ANY_VALUE()包裹非聚合列
+        ANY_VALUE(dyna.id) AS id,
+        ANY_VALUE(dyna.dynamicsType) AS dynamicsType,
+        ANY_VALUE(dyna.title) AS title,
+        ANY_VALUE(dyna.phoneId) AS phoneId,
+        ANY_VALUE(dyna.context) AS context,
+        ANY_VALUE(dyna.image_path) AS image_path,
+        ANY_VALUE(dyna.address) AS address,
+        ANY_VALUE(dyna.address_name) AS address_name,
+        ANY_VALUE(dyna.address_context) AS address_context,
+        ANY_VALUE(dyna.liulan_count) AS liulan_count,
+        ANY_VALUE(dyna.dianzan_count) AS dianzan_count,
+        ANY_VALUE(dyna.type) AS type,
+        ANY_VALUE(dyna.created_time) AS created_time,
+        ANY_VALUE(dyna.userType) AS userType,
+        ANY_VALUE(dyna.phone) AS phone,
+        ANY_VALUE(dyna.draft) AS draft,
+        ANY_VALUE(dyna.address_province) AS address_province,
+        ANY_VALUE(dyna.top_status) AS top_status,
+        ANY_VALUE(dyna.top_time) AS top_time,
+        ANY_VALUE(dyna.enable_status) AS enable_status,
+        ANY_VALUE(dyna.userName) AS userName,
+        ANY_VALUE(dyna.userImage) AS userImage,
+        ANY_VALUE(dyna.storeUserId) AS storeUserId,
+        ANY_VALUE(dyna.storeOrUserId) AS storeOrUserId,
+        ANY_VALUE(dyna.isExpert) AS isExpert,
+        ANY_VALUE(dyna.store_name) AS store_name,
+        -- 3. 修正评论数/转发数:COUNT(DISTINCT)避免LEFT JOIN导致的重复计数
+        COUNT(DISTINCT sc.id) AS commentCount,
+        COUNT(DISTINCT lm.id) AS transferNum
+        FROM (
+        WITH dynamice AS (
+        SELECT
         CASE
         WHEN image_path REGEXP '.mp4|.avi|.flv|.mkv|.rmvb|.wmv|.3gp|.mov' THEN 2
         WHEN image_path REGEXP '.jpg|.jpeg|.png|.bmp|.webp|.gif|.svg' THEN 1
         ELSE 0
-        END AS dynamicsType,id, title, phone_id phoneId, context, image_path, address,address_name,address_context, liulan_count, dianzan_count, type, created_time, substring_index(phone_id, '_', 1) userType, substring_index(phone_id, '_', -1) phone, draft , address_province, top_status, top_time, enable_status
-        from life_user_dynamics
-        where delete_flag = 0 and draft = 0 order by created_time desc
+        END AS dynamicsType,
+        id, title, phone_id phoneId, context, image_path, address,address_name,address_context,
+        liulan_count, dianzan_count, type, created_time,
+        SUBSTRING_INDEX(phone_id, '_', 1) userType,
+        SUBSTRING_INDEX(phone_id, '_', -1) phone,
+        draft , address_province, top_status, top_time, enable_status
+        FROM life_user_dynamics
+        WHERE delete_flag = 0 AND draft = 0
         )
-        select dynamice.*, user.nick_name userName, user.head_img userImage, info.id storeUserId, user.id storeOrUserId, 0 isExpert, info.store_name
-        from dynamice
-        left join store_user user on dynamice.phone = user.phone and user.delete_flag = 0
-        left join store_info info on info.id = user.store_id and info.delete_flag = 0
-        left join store_img img on img.store_id = user.store_id and img.img_type = '10' and img.delete_flag = 0
-        where dynamice.userType = 'store'
-        union
-        select dynamice.*, user.user_name userName, user.user_image userImage, user.id storeUserId, user.id storeOrUserId, IF(lue.expert_code IS NOT NULL , 1, 0) AS isExpert, '' store_name
-        from dynamice
-        join life_user user on dynamice.phone = user.user_phone and user.delete_flag = 0
-        left join life_user_expert  lue on lue.user_id = user.id and lue.delete_flag = 0
-        where dynamice.userType = 'user') dyna
-        left join life_comment lc on lc.dongtai_shequ_id = dyna.id
-        left join store_comment sc on sc.business_id = dyna.id and sc.business_type = 2 and sc.delete_flag = 0
-        left join life_message lm on lm.business_id = dyna.id
-        GROUP BY dyna.id order by  dyna.created_time desc) dyna1
-        left join life_fans lf1 on lf1.followed_id =  dyna1.phoneId
-        where 1=1
+        SELECT
+        dynamice.*,
+        user.nick_name userName, user.head_img userImage,
+        info.id storeUserId, user.id storeOrUserId,
+        0 isExpert, info.store_name
+        FROM dynamice
+        LEFT JOIN store_user user ON dynamice.phone = user.phone AND user.delete_flag = 0
+        LEFT JOIN store_info info ON info.id = user.store_id AND info.delete_flag = 0
+        LEFT JOIN store_img img ON img.store_id = user.store_id AND img.img_type = '10' AND img.delete_flag = 0
+        WHERE dynamice.userType = 'store'
+        UNION
+        SELECT
+        dynamice.*,
+        user.user_name userName, user.user_image userImage,
+        user.id storeUserId, user.id storeOrUserId,
+        IF(lue.expert_code IS NOT NULL , 1, 0) AS isExpert,
+        '' store_name
+        FROM dynamice
+        JOIN life_user user ON dynamice.phone = user.user_phone AND user.delete_flag = 0
+        LEFT JOIN life_user_expert  lue ON lue.user_id = user.id AND lue.delete_flag = 0
+        WHERE dynamice.userType = 'user'
+        ) dyna
+        LEFT JOIN life_comment lc ON lc.dongtai_shequ_id = dyna.id
+        LEFT JOIN store_comment sc ON sc.business_id = dyna.id AND sc.business_type = 2 AND sc.delete_flag = 0
+        LEFT JOIN life_message lm ON lm.business_id = dyna.id
+        -- 4. GROUP BY仅保留主键id(因dyna.id是唯一主键,ANY_VALUE()包裹的列在同一id下值唯一)
+        GROUP BY dyna.id
+        ) dyna1
+        LEFT JOIN life_fans lf1 ON lf1.followed_id = dyna1.phoneId
+        WHERE 1=1
         <if test="nickName != null and nickName != ''">
             AND dyna1.userName LIKE CONCAT('%', #{nickName}, '%')
         </if>
-
         <if test="userType != null and userType != ''">
             AND dyna1.userType = #{userType}
         </if>
-
         <if test="dynamicsType != null and dynamicsType != ''">
             AND dyna1.dynamicsType = #{dynamicsType}
         </if>
-
         <if test="releaseStartTime != null and releaseStartTime != ''">
             AND dyna1.created_time >= #{releaseStartTime}
         </if>
-
         <if test="storeName != null and storeName != ''">
             AND dyna1.store_name LIKE CONCAT('%', #{storeName}, '%')
         </if>
-
         <if test="releaseEndTime != null and releaseEndTime != ''">
             AND dyna1.created_time &lt;= #{releaseEndTime}
         </if>
-        GROUP by dyna1.id order by dyna1.top_status desc, dyna1.top_time desc
+        -- 5. 外层GROUP BY仅保留主键id,保证分组逻辑正确
+        GROUP BY dyna1.id
+        -- 6. 最终排序移到外层,子查询的ORDER BY无意义且影响性能
+        ORDER BY dyna1.top_status DESC, dyna1.top_time DESC;
     </select>
 
     <select id="getDynamicsDetail" resultType="shop.alien.entity.store.vo.LifeUserDynamicsVo">

+ 10 - 3
alien-entity/src/main/resources/mapper/StoreCuisineMapper.xml

@@ -8,12 +8,18 @@
     <resultMap id="BaseResultMap" type="shop.alien.entity.store.StoreCuisine">
         <id column="id" property="id" />
         <result column="store_id" property="storeId" />
+        <result column="cuisine_type" property="cuisineType" />
+        <result column="category_ids" property="categoryIds" />
         <result column="name" property="name" />
         <result column="total_price" property="totalPrice" />
+        <result column="is_homepage_display" property="isHomepageDisplay" />
+        <result column="tags" property="tags" />
+        <result column="dish_review" property="dishReview" />
         <result column="images" property="images" />
         <result column="image_content" property="imageContent" />
         <result column="raw_json" property="rawJson" />
         <result column="detail_content" property="detailContent" />
+        <result column="description" property="description" />
         <result column="extra_note" property="extraNote" />
         <result column="need_reserve" property="needReserve" />
         <result column="reserve_rule" property="reserveRule" />
@@ -31,9 +37,10 @@
 
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
-        id, store_id, name, total_price, images, image_content, raw_json, detail_content,
-        extra_note, need_reserve, reserve_rule, people_limit, usage_rule, status, shelf_status,
-        rejection_reason, delete_flag, created_user_id, updated_user_id, created_time, updated_time
+        id, store_id, cuisine_type, category_ids, name, total_price, is_homepage_display, tags, dish_review,
+        images, image_content, raw_json, detail_content, description, extra_note, need_reserve, reserve_rule,
+        people_limit, usage_rule, status, shelf_status, rejection_reason, delete_flag, created_user_id,
+        updated_user_id, created_time, updated_time
     </sql>
 
 </mapper>

+ 25 - 27
alien-entity/src/main/resources/mapper/StoreInfoMapper.xml

@@ -8,18 +8,14 @@
         门店证照查询
         证照类型与状态、提交时间、到期时间映射关系:
           - img_type = 14: 营业执照
-          - img_type IN (31, 32): 娱乐经营许可证
-          - img_type IN (24, 25): 食品经营许可证
+          - img_type = 35: 其他资质证明
     -->
     <select id="getStoreLicensePage"
             resultType="shop.alien.entity.store.vo.StoreLicenseInfoVo">
         SELECT
             CASE
                 WHEN si.img_type = 14 THEN '营业执照'
-                WHEN si.img_type IN (31, 32) THEN '娱乐经营许可证'
-                WHEN si.img_type IN (24, 25) THEN '食品经营许可证'
-                WHEN si.img_type IN (33) THEN '身份证正面'
-                WHEN si.img_type IN (34) THEN '身份证反面'
+                WHEN si.img_type = 35 THEN '其他资质证明'
                 ELSE ''
             END AS img_description,
             si.img_type AS img_type,
@@ -33,39 +29,44 @@
             s.business_types_name,
             CASE
                 WHEN si.img_type = 14 THEN s.business_license_status
-                WHEN si.img_type IN (31, 32) THEN s.entertainment_licence_status
-                WHEN si.img_type IN (24, 25) THEN s.food_licence_status
-                WHEN si.img_type IN (33, 34) THEN s.id_card_status
+                WHEN si.img_type = 35 THEN slh.license_execute_status
                 ELSE ''
             END AS states,
             CASE
                 WHEN si.img_type = 14 THEN s.update_business_license_time
-                WHEN si.img_type IN (31, 32) THEN s.update_entertainment_licence_time
-                WHEN si.img_type IN (24, 25) THEN s.update_food_licence_time
-                WHEN si.img_type IN (33, 34) THEN s.update_id_card_time
+                WHEN si.img_type = 35 THEN slh.created_time
                 ELSE NULL
             END AS submit_date,
             CASE
                 WHEN si.img_type = 14 THEN s.business_license_expiration_time
-                WHEN si.img_type IN (31, 32) THEN s.entertainment_licence_expiration_time
-                WHEN si.img_type IN (24, 25) THEN s.food_licence_expiration_time
-                WHEN si.img_type IN (33, 34) THEN s.id_card_expiration_time
+                WHEN si.img_type = 35 THEN NULL
                 ELSE NULL
             END AS expiration_time,
             CASE
                 WHEN si.img_type = 14 THEN s.business_license_reason
-                WHEN si.img_type IN (31, 32) THEN s.entertainment_licence_reason
-                WHEN si.img_type IN (24, 25) THEN s.food_licence_reason
-                WHEN si.img_type IN (33, 34) THEN s.id_card_reason
+                WHEN si.img_type = 35 THEN slh.reason_refusal
                 ELSE NULL
             END AS expiration_reason
         FROM store_info s
                  LEFT JOIN store_img si
                            ON s.id = si.store_id
-                               AND si.img_type IN (14, 24, 25, 31, 32, 33, 34)
+                               AND si.img_type IN (14, 35)
                                AND si.delete_flag = 0
-                 left join store_user su on s.id = su.store_id
+                 LEFT JOIN store_user su ON s.id = su.store_id
+                 LEFT JOIN (
+                     SELECT slh.store_id, slh.license_execute_status, slh.created_time, slh.reason_refusal, slh.img_url
+                     FROM store_license_history slh
+                     INNER JOIN (
+                         SELECT store_id, MAX(created_time) AS max_time
+                         FROM store_license_history
+                         WHERE license_status = 2 AND delete_flag = 0
+                         GROUP BY store_id
+                     ) slh2 ON slh.store_id = slh2.store_id 
+                             AND slh.created_time = slh2.max_time
+                     WHERE slh.license_status = 2 AND slh.delete_flag = 0
+                 ) slh ON s.id = slh.store_id AND si.img_type = 35
         WHERE s.delete_flag = 0
+            AND si.img_type IS NOT NULL
         <if test="storeName != null and storeName != ''">
             AND s.store_name LIKE CONCAT('%', #{storeName}, '%')
         </if>
@@ -84,25 +85,22 @@
         <if test="states != null and states != ''">
             AND (
                 (si.img_type = 14 AND s.business_license_status = #{states})
-                OR (si.img_type IN (31, 32) AND s.entertainment_licence_status = #{states})
-                OR (si.img_type IN (24, 25) AND s.food_licence_status = #{states})
+                OR (si.img_type = 35 AND slh.license_execute_status = #{states})
             )
         </if>
         <if test="startSubmitDate != null and startSubmitDate != ''">
             AND (
                 (si.img_type = 14 AND s.update_business_license_time &gt;= #{startSubmitDate})
-                OR (si.img_type IN (31, 32) AND s.update_entertainment_licence_time &gt;= #{startSubmitDate})
-                OR (si.img_type IN (24, 25) AND s.update_food_licence_time &gt;= #{startSubmitDate})
+                OR (si.img_type = 35 AND slh.created_time &gt;= #{startSubmitDate})
             )
         </if>
         <if test="endSubmitDate != null and endSubmitDate != ''">
             AND (
                 (si.img_type = 14 AND s.update_business_license_time &lt;= #{endSubmitDate})
-                OR (si.img_type IN (31, 32) AND s.update_entertainment_licence_time &lt;= #{endSubmitDate})
-                OR (si.img_type IN (24, 25) AND s.update_food_licence_time &lt;= #{endSubmitDate})
+                OR (si.img_type = 35 AND slh.created_time &lt;= #{endSubmitDate})
             )
         </if>
-        ORDER BY s.store_name ASC
+        ORDER BY submit_date DESC, s.store_name ASC
     </select>
 
 </mapper>

+ 41 - 0
alien-entity/src/main/resources/mapper/StorePlatformMenuMapper.xml

@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="shop.alien.mapper.StorePlatformMenuMapper">
+
+    <!-- 根据角色ID查询权限菜单列表 -->
+    <select id="selectMenusByRoleId" resultType="shop.alien.entity.store.StorePlatformMenu">
+        SELECT
+            m.menu_id AS menuId,
+            m.menu_name AS menuName,
+            m.parent_id AS parentId,
+            m.menu_type AS menuType,
+            m.menu_sort AS menuSort,
+            m.level AS level,
+            m.path AS path,
+            m.component AS component,
+            m.perms AS perms,
+            m.icon AS icon,
+            m.status AS status,
+            m.visible AS visible,
+            m.is_frame AS isFrame,
+            m.is_cache AS isCache,
+            m.del_flag AS delFlag,
+            m.create_by AS createBy,
+            m.created_time AS createdTime,
+            m.update_by AS updateBy,
+            m.updated_time AS updatedTime,
+            m.remark AS remark
+        FROM
+            store_platform_menu m
+        INNER JOIN store_platform_role_menu rm ON m.menu_id = rm.menu_id
+        WHERE
+            rm.role_id = #{roleId}
+            AND m.del_flag = '0'
+            AND m.status = '0'
+        ORDER BY
+            m.menu_sort ASC
+    </select>
+
+</mapper>

+ 36 - 0
alien-entity/src/main/resources/mapper/StorePlatformUserRoleMapper.xml

@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="shop.alien.mapper.StorePlatformUserRoleMapper">
+
+    <!-- 根据店铺ID查询子账号列表(连表查询) -->
+    <select id="querySubAccounts" resultType="shop.alien.entity.store.vo.SubAccountVo">
+        SELECT
+            sur.id AS userId,
+            spur.account_name AS accountName,
+            sur.phone AS phone,
+            spr.role_id AS roleId,
+            spr.role_name AS roleName,
+            spur.store_id AS storeId,
+            0 AS permissionCount
+        FROM store_platform_user_role spur
+        INNER JOIN store_user sur ON spur.user_id = sur.id
+        LEFT JOIN store_platform_role spr ON spur.role_id = spr.role_id
+        WHERE spur.store_id = #{storeId}
+          AND sur.delete_flag = 0
+          AND spur.delete_flag = 0
+        <if test="accountName != null and accountName != ''">
+            AND (spur.account_name LIKE CONCAT('%', #{accountName}, '%') )
+        </if>
+        <if test="phone != null and phone != ''">
+            AND sur.phone LIKE CONCAT('%', #{phone}, '%')
+        </if>
+        <if test="roleName != null and roleName != ''">
+            AND spr.role_name LIKE CONCAT('%', #{roleName}, '%')
+        </if>
+        ORDER BY spur.created_time DESC
+    </select>
+
+</mapper>
+

+ 7 - 0
alien-entity/src/main/resources/mapper/StoreStaffReviewMapper.xml

@@ -65,6 +65,7 @@
             AND CONVERT(llr.dianzan_id, CHAR) = CONVERT(#{currentUserId}, CHAR)
             AND llr.delete_flag = 0
         WHERE ssr.delete_flag = 0
+          AND ssr.audit_status = 1
         <if test="staffUserId != null">
             AND ssr.staff_user_id = #{staffUserId}
         </if>
@@ -133,6 +134,7 @@
         SELECT COUNT(*)
         FROM store_staff_review
         WHERE staff_user_id = #{staffUserId}
+          AND audit_status = 1
         AND delete_flag = 0
     </select>
 
@@ -142,6 +144,7 @@
         SELECT COUNT(*)
         FROM store_staff_review
         WHERE staff_user_id = #{staffUserId}
+          AND audit_status = 1
         AND delete_flag = 0
         AND overall_rating IS NOT NULL
         AND overall_rating >= 4.5
@@ -155,6 +158,7 @@
         SELECT COUNT(*)
         FROM store_staff_review
         WHERE staff_user_id = #{staffUserId}
+          AND audit_status = 1
         AND delete_flag = 0
         AND overall_rating IS NOT NULL
         AND overall_rating >= 3
@@ -168,6 +172,7 @@
         SELECT COUNT(*)
         FROM store_staff_review
         WHERE staff_user_id = #{staffUserId}
+          AND audit_status = 1
         AND delete_flag = 0
         AND overall_rating IS NOT NULL
         AND overall_rating >= 0
@@ -180,6 +185,7 @@
         SELECT COUNT(*)
         FROM store_staff_review
         WHERE staff_user_id = #{staffUserId}
+          AND audit_status = 1
         AND delete_flag = 0
         AND review_images IS NOT NULL
         AND review_images != ''
@@ -232,6 +238,7 @@
             AND CONVERT(llr.dianzan_id, CHAR) = CONVERT(#{currentUserId}, CHAR)
             AND llr.delete_flag = 0
         WHERE ssr.delete_flag = 0
+        AND ssr.audit_status = 1
         AND ssr.staff_user_id = #{staffUserId}
         <if test="type != null">
             <choose>

Niektóre pliki nie zostały wyświetlone z powodu dużej ilości zmienionych plików