Browse Source

clode getwey entity 修正

wxd 1 tháng trước cách đây
mục cha
commit
492e452b0a
35 tập tin đã thay đổi với 413 bổ sung35 xóa
  1. 1 1
      alien-entity/src/main/java/shop/alien/entity/store/dto/NearMeDto.java
  2. 1 1
      alien-entity/src/main/java/shop/alien/entity/store/dto/StoreInfoDto.java
  3. 1 1
      alien-entity/src/main/java/shop/alien/entity/store/vo/LifeCouponVo.java
  4. 1 1
      alien-entity/src/main/java/shop/alien/entity/store/vo/LifeFansVo.java
  5. 1 1
      alien-entity/src/main/java/shop/alien/entity/store/vo/LifeMessageVo.java
  6. 1 1
      alien-entity/src/main/java/shop/alien/entity/store/vo/LifeUserDynamicsVo.java
  7. 1 1
      alien-entity/src/main/java/shop/alien/entity/store/vo/LifeUserOrderVo.java
  8. 1 1
      alien-entity/src/main/java/shop/alien/entity/store/vo/LifeUserVo.java
  9. 1 1
      alien-entity/src/main/java/shop/alien/entity/store/vo/ScreeningOfEightMajorCategoriesVO.java
  10. 22 0
      alien-entity/src/main/java/shop/alien/entity/store/vo/StoreCommentAppealLogVo.java
  11. 61 0
      alien-entity/src/main/java/shop/alien/entity/store/vo/StoreCommentAppealVo.java
  12. 1 1
      alien-entity/src/main/java/shop/alien/entity/store/vo/StoreDictionaryVo.java
  13. 40 0
      alien-entity/src/main/java/shop/alien/entity/store/vo/StoreDynamicDiscountVo.java
  14. 1 1
      alien-entity/src/main/java/shop/alien/entity/store/vo/StoreImgTypeVo.java
  15. 1 1
      alien-entity/src/main/java/shop/alien/entity/store/vo/StoreInfoVo.java
  16. 1 1
      alien-entity/src/main/java/shop/alien/entity/store/vo/StoreMainInfoVo.java
  17. 1 1
      alien-entity/src/main/java/shop/alien/entity/store/vo/StoreMenuVo.java
  18. 1 1
      alien-entity/src/main/java/shop/alien/entity/store/vo/StoreUserExcelVo.java
  19. 1 1
      alien-entity/src/main/java/shop/alien/entity/store/vo/StoreUserVo.java
  20. 10 0
      alien-gateway/pom.xml
  21. 1 1
      alien-gateway/src/main/java/shop/alien/gateway/controller/LifeUserController.java
  22. 2 2
      alien-gateway/src/main/java/shop/alien/gateway/controller/StoreUserController.java
  23. 1 1
      alien-gateway/src/main/java/shop/alien/gateway/mapper/LifeFansMapper.java
  24. 2 2
      alien-gateway/src/main/java/shop/alien/gateway/mapper/LifeMessageMapper.java
  25. 3 3
      alien-gateway/src/main/java/shop/alien/gateway/mapper/LifeUserMapper.java
  26. 1 1
      alien-gateway/src/main/java/shop/alien/gateway/mapper/StoreImgMapper.java
  27. 2 2
      alien-gateway/src/main/java/shop/alien/gateway/mapper/StoreInfoMapper.java
  28. 2 2
      alien-gateway/src/main/java/shop/alien/gateway/service/LifeUserService.java
  29. 2 2
      alien-gateway/src/main/java/shop/alien/gateway/service/StoreInfoService.java
  30. 1 1
      alien-gateway/src/main/java/shop/alien/gateway/service/StoreUserService.java
  31. 3 2
      alien-gateway/src/main/java/shop/alien/gateway/service/impl/StoreUserServiceImpl.java
  32. 95 0
      alien-gateway/src/main/java/shop/alien/gateway/util/ExcelExporter.java
  33. 126 0
      alien-gateway/src/main/java/shop/alien/gateway/util/ExcelGenerator.java
  34. 12 0
      alien-gateway/src/main/java/shop/alien/gateway/util/ExcelHeader.java
  35. 11 0
      alien-gateway/src/main/java/shop/alien/gateway/util/ExcelImage.java

+ 1 - 1
alien-gateway/src/main/java/shop/alien/gateway/entity/dto/NearMeDto.java → alien-entity/src/main/java/shop/alien/entity/store/dto/NearMeDto.java

@@ -1,4 +1,4 @@
-package shop.alien.gateway.entity.dto;
+package shop.alien.entity.store.dto;
 
 import com.fasterxml.jackson.annotation.JsonInclude;
 import io.swagger.annotations.ApiModel;

+ 1 - 1
alien-gateway/src/main/java/shop/alien/gateway/entity/dto/StoreInfoDto.java → alien-entity/src/main/java/shop/alien/entity/store/dto/StoreInfoDto.java

@@ -1,4 +1,4 @@
-package shop.alien.gateway.entity.dto;
+package shop.alien.entity.store.dto;
 
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.fasterxml.jackson.annotation.JsonFormat;

+ 1 - 1
alien-gateway/src/main/java/shop/alien/gateway/entity/vo/LifeCouponVo.java → alien-entity/src/main/java/shop/alien/entity/store/vo/LifeCouponVo.java

@@ -1,4 +1,4 @@
-package shop.alien.gateway.entity.vo;
+package shop.alien.entity.store.vo;
 
 import com.baomidou.mybatisplus.annotation.*;
 import com.fasterxml.jackson.annotation.JsonFormat;

+ 1 - 1
alien-gateway/src/main/java/shop/alien/gateway/entity/vo/LifeFansVo.java → alien-entity/src/main/java/shop/alien/entity/store/vo/LifeFansVo.java

@@ -1,4 +1,4 @@
-package shop.alien.gateway.entity.vo;
+package shop.alien.entity.store.vo;
 
 import com.fasterxml.jackson.annotation.JsonInclude;
 import io.swagger.annotations.ApiModel;

+ 1 - 1
alien-gateway/src/main/java/shop/alien/gateway/entity/vo/LifeMessageVo.java → alien-entity/src/main/java/shop/alien/entity/store/vo/LifeMessageVo.java

@@ -1,4 +1,4 @@
-package shop.alien.gateway.entity.vo;
+package shop.alien.entity.store.vo;
 
 import com.fasterxml.jackson.annotation.JsonInclude;
 import io.swagger.annotations.ApiModel;

+ 1 - 1
alien-gateway/src/main/java/shop/alien/gateway/entity/vo/LifeUserDynamicsVo.java → alien-entity/src/main/java/shop/alien/entity/store/vo/LifeUserDynamicsVo.java

@@ -1,4 +1,4 @@
-package shop.alien.gateway.entity.vo;
+package shop.alien.entity.store.vo;
 
 import com.fasterxml.jackson.annotation.JsonInclude;
 import io.swagger.annotations.ApiModel;

+ 1 - 1
alien-gateway/src/main/java/shop/alien/gateway/entity/vo/LifeUserOrderVo.java → alien-entity/src/main/java/shop/alien/entity/store/vo/LifeUserOrderVo.java

@@ -1,4 +1,4 @@
-package shop.alien.gateway.entity.vo;
+package shop.alien.entity.store.vo;
 
 import com.baomidou.mybatisplus.annotation.*;
 import com.fasterxml.jackson.annotation.JsonFormat;

+ 1 - 1
alien-gateway/src/main/java/shop/alien/gateway/entity/vo/LifeUserVo.java → alien-entity/src/main/java/shop/alien/entity/store/vo/LifeUserVo.java

@@ -1,4 +1,4 @@
-package shop.alien.gateway.entity.vo;
+package shop.alien.entity.store.vo;
 
 import com.fasterxml.jackson.annotation.JsonInclude;
 import io.swagger.annotations.ApiModelProperty;

+ 1 - 1
alien-gateway/src/main/java/shop/alien/gateway/entity/vo/ScreeningOfEightMajorCategoriesVO.java → alien-entity/src/main/java/shop/alien/entity/store/vo/ScreeningOfEightMajorCategoriesVO.java

@@ -1,4 +1,4 @@
-package shop.alien.gateway.entity.vo;
+package shop.alien.entity.store.vo;
 
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;

+ 22 - 0
alien-entity/src/main/java/shop/alien/entity/store/vo/StoreCommentAppealLogVo.java

@@ -0,0 +1,22 @@
+package shop.alien.entity.store.vo;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import shop.alien.entity.store.StoreCommentAppealLog;
+
+/**
+ * 申诉记录返回类
+ *
+ * @author ssk
+ * @version 1.0
+ * @date 2025/1/6 16:52
+ */
+@Data
+@JsonInclude
+public class StoreCommentAppealLogVo extends StoreCommentAppealLog {
+
+    @ApiModelProperty(value = "流程状态, 0:商家提交, 1:系统审核, 2:系统初审失败, 3:系统初审成功, 4:申诉失败, 5:申诉成功")
+    private String processTypeStr;
+
+}

+ 61 - 0
alien-entity/src/main/java/shop/alien/entity/store/vo/StoreCommentAppealVo.java

@@ -0,0 +1,61 @@
+package shop.alien.entity.store.vo;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import shop.alien.entity.store.StoreCommentAppeal;
+
+import java.util.List;
+
+/**
+ * 评论申诉返回类
+ *
+ * @author ssk
+ * @version 1.0
+ * @date 2025/1/6 13:15
+ */
+@Data
+@JsonInclude
+public class StoreCommentAppealVo extends StoreCommentAppeal {
+
+    @ApiModelProperty(value = "商家申诉图片链接")
+    private List<String> imgList;
+
+    @ApiModelProperty(value = "申诉状态字符串")
+    private String appealStatusStr;
+
+    @ApiModelProperty(value = "顾客评论")
+    private String commentContent;
+
+    @ApiModelProperty(value = "顾客评论星级")
+    private Integer commentStar;
+
+    @ApiModelProperty(value = "顾客用户名")
+    private String userName;
+
+    @ApiModelProperty(value = "顾客头像")
+    private String userImage;
+
+    @ApiModelProperty(value = "顾客评价时间")
+    private String commentTime;
+
+    @ApiModelProperty(value = "门店名称")
+    private String storeName;
+
+    @ApiModelProperty(value = "门店联系人")
+    private String storeContact;
+
+    @ApiModelProperty(value = "门店联系人电话")
+    private String storePhone;
+
+    @ApiModelProperty(value = "门店类型(1:中餐, 2:烧烤, 3:饮品, 4:甜点, 5:火锅, 6:宵夜, 7:西餐, 8:轻食, 9:水果)")
+    @TableField("store_type")
+    private String storeType;
+
+    @ApiModelProperty(value = "门店状态字符串")
+    private String storeTypeStr;
+
+    @ApiModelProperty(value = "申诉流程记录")
+    private List<StoreCommentAppealLogVo> storeCommentAppealLogList;
+}

+ 1 - 1
alien-gateway/src/main/java/shop/alien/gateway/entity/vo/StoreDictionaryVo.java → alien-entity/src/main/java/shop/alien/entity/store/vo/StoreDictionaryVo.java

@@ -1,4 +1,4 @@
-package shop.alien.gateway.entity.vo;
+package shop.alien.entity.store.vo;
 
 import com.baomidou.mybatisplus.extension.activerecord.Model;
 import io.swagger.annotations.ApiModel;

+ 40 - 0
alien-entity/src/main/java/shop/alien/entity/store/vo/StoreDynamicDiscountVo.java

@@ -0,0 +1,40 @@
+package shop.alien.entity.store.vo;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import shop.alien.entity.store.LifeUser;
+import shop.alien.entity.store.StoreDynamicDiscount;
+
+import java.util.List;
+
+/**
+ * 商户动态折扣列表返回类
+ *
+ * @author ssk
+ * @version 1.0
+ * @date 2025/3/18 16:45
+ */
+@JsonInclude
+@Data
+public class StoreDynamicDiscountVo extends StoreDynamicDiscount {
+
+    @ApiModelProperty(value = "状态字符串")
+    private String statusStr;
+
+    @ApiModelProperty(value = "团购类型字符串, 1:邀请好友,")
+    private String groupTypeStr;
+
+    @ApiModelProperty(value = "折扣适用范围, 0:堂食, 1外卖")
+    private String discountRangeStr;
+
+    @ApiModelProperty(value = "活动人群, 0:所有人, 逗号分割id:固定人群")
+    private List<LifeUser> activityCrowdList;
+
+    @ApiModelProperty(value = "门店名称")
+    private String storeName;
+
+    @ApiModelProperty(value = "图片url")
+    private String imgUrl;
+
+}

+ 1 - 1
alien-gateway/src/main/java/shop/alien/gateway/entity/vo/StoreImgTypeVo.java → alien-entity/src/main/java/shop/alien/entity/store/vo/StoreImgTypeVo.java

@@ -1,4 +1,4 @@
-package shop.alien.gateway.entity.vo;
+package shop.alien.entity.store.vo;
 
 import com.fasterxml.jackson.annotation.JsonInclude;
 import io.swagger.annotations.ApiModelProperty;

+ 1 - 1
alien-gateway/src/main/java/shop/alien/gateway/entity/vo/StoreInfoVo.java → alien-entity/src/main/java/shop/alien/entity/store/vo/StoreInfoVo.java

@@ -1,4 +1,4 @@
-package shop.alien.gateway.entity.vo;
+package shop.alien.entity.store.vo;
 
 import com.fasterxml.jackson.annotation.JsonInclude;
 import io.swagger.annotations.ApiModel;

+ 1 - 1
alien-gateway/src/main/java/shop/alien/gateway/entity/vo/StoreMainInfoVo.java → alien-entity/src/main/java/shop/alien/entity/store/vo/StoreMainInfoVo.java

@@ -1,4 +1,4 @@
-package shop.alien.gateway.entity.vo;
+package shop.alien.entity.store.vo;
 
 import com.fasterxml.jackson.annotation.JsonInclude;
 import io.swagger.annotations.ApiModelProperty;

+ 1 - 1
alien-gateway/src/main/java/shop/alien/gateway/entity/vo/StoreMenuVo.java → alien-entity/src/main/java/shop/alien/entity/store/vo/StoreMenuVo.java

@@ -1,4 +1,4 @@
-package shop.alien.gateway.entity.vo;
+package shop.alien.entity.store.vo;
 
 import com.fasterxml.jackson.annotation.JsonInclude;
 import io.swagger.annotations.ApiModelProperty;

+ 1 - 1
alien-gateway/src/main/java/shop/alien/gateway/entity/vo/StoreUserExcelVo.java → alien-entity/src/main/java/shop/alien/entity/store/vo/StoreUserExcelVo.java

@@ -1,4 +1,4 @@
-package shop.alien.gateway.entity.vo;
+package shop.alien.entity.store.vo;
 
 import com.fasterxml.jackson.annotation.JsonInclude;
 import io.swagger.annotations.ApiModel;

+ 1 - 1
alien-gateway/src/main/java/shop/alien/gateway/entity/vo/StoreUserVo.java → alien-entity/src/main/java/shop/alien/entity/store/vo/StoreUserVo.java

@@ -1,4 +1,4 @@
-package shop.alien.gateway.entity.vo;
+package shop.alien.entity.store.vo;
 
 import com.fasterxml.jackson.annotation.JsonInclude;
 import io.swagger.annotations.ApiModel;

+ 10 - 0
alien-gateway/pom.xml

@@ -191,6 +191,16 @@
             <groupId>com.alibaba.cloud</groupId>
             <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.apache.poi</groupId>
+            <artifactId>poi</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.poi</groupId>
+            <artifactId>poi-ooxml</artifactId>
+        </dependency>
+
 
     </dependencies>
 

+ 1 - 1
alien-gateway/src/main/java/shop/alien/gateway/controller/LifeUserController.java

@@ -10,7 +10,7 @@ import org.springframework.web.multipart.MultipartFile;
 import shop.alien.entity.result.R;
 import shop.alien.entity.store.LifeFans;
 import shop.alien.entity.store.LifeUser;
-import shop.alien.gateway.entity.vo.LifeUserVo;
+import shop.alien.entity.store.vo.LifeUserVo;
 import shop.alien.gateway.mapper.LifeUserMapper;
 import shop.alien.gateway.service.LifeUserService;
 import shop.alien.gateway.util.FileUpload;

+ 2 - 2
alien-gateway/src/main/java/shop/alien/gateway/controller/StoreUserController.java

@@ -9,8 +9,8 @@ import org.springframework.web.bind.annotation.*;
 import shop.alien.entity.result.R;
 import shop.alien.entity.store.StoreImg;
 import shop.alien.entity.store.StoreUser;
-import shop.alien.gateway.entity.vo.StoreInfoVo;
-import shop.alien.gateway.entity.vo.StoreUserVo;
+import shop.alien.entity.store.vo.StoreInfoVo;
+import shop.alien.entity.store.vo.StoreUserVo;
 import shop.alien.gateway.mapper.StoreImgMapper;
 import shop.alien.gateway.mapper.StoreUserMapper;
 import shop.alien.gateway.service.StoreInfoService;

+ 1 - 1
alien-gateway/src/main/java/shop/alien/gateway/mapper/LifeFansMapper.java

@@ -8,7 +8,7 @@ import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
 import shop.alien.entity.store.LifeFans;
-import shop.alien.gateway.entity.vo.LifeFansVo;
+import shop.alien.entity.store.vo.LifeFansVo;
 
 import java.util.List;
 

+ 2 - 2
alien-gateway/src/main/java/shop/alien/gateway/mapper/LifeMessageMapper.java

@@ -9,8 +9,8 @@ import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
 import org.apache.ibatis.annotations.Update;
 import shop.alien.entity.store.LifeMessage;
-import shop.alien.gateway.entity.vo.LifeFansVo;
-import shop.alien.gateway.entity.vo.LifeMessageVo;
+import shop.alien.entity.store.vo.LifeFansVo;
+import shop.alien.entity.store.vo.LifeMessageVo;
 
 import java.util.List;
 

+ 3 - 3
alien-gateway/src/main/java/shop/alien/gateway/mapper/LifeUserMapper.java

@@ -8,9 +8,9 @@ import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
 import shop.alien.entity.store.LifeUser;
-import shop.alien.gateway.entity.vo.LifeFansVo;
-import shop.alien.gateway.entity.vo.LifeUserOrderVo;
-import shop.alien.gateway.entity.vo.LifeUserVo;
+import shop.alien.entity.store.vo.LifeFansVo;
+import shop.alien.entity.store.vo.LifeUserOrderVo;
+import shop.alien.entity.store.vo.LifeUserVo;
 
 import java.util.List;
 

+ 1 - 1
alien-gateway/src/main/java/shop/alien/gateway/mapper/StoreImgMapper.java

@@ -5,7 +5,7 @@ import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
 import shop.alien.entity.store.StoreImg;
-import shop.alien.gateway.entity.vo.StoreImgTypeVo;
+import shop.alien.entity.store.vo.StoreImgTypeVo;
 
 import java.util.List;
 

+ 2 - 2
alien-gateway/src/main/java/shop/alien/gateway/mapper/StoreInfoMapper.java

@@ -9,8 +9,8 @@ import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
 import shop.alien.entity.store.StoreInfo;
-import shop.alien.gateway.entity.vo.StoreInfoVo;
-import shop.alien.gateway.entity.vo.StoreMainInfoVo;
+import shop.alien.entity.store.vo.StoreInfoVo;
+import shop.alien.entity.store.vo.StoreMainInfoVo;
 
 import java.util.List;
 

+ 2 - 2
alien-gateway/src/main/java/shop/alien/gateway/service/LifeUserService.java

@@ -16,10 +16,10 @@ import org.springframework.util.CollectionUtils;
 import shop.alien.entity.store.LifeFans;
 import shop.alien.entity.store.LifeNotice;
 import shop.alien.entity.store.LifeUser;
+import shop.alien.entity.store.vo.LifeMessageVo;
+import shop.alien.entity.store.vo.LifeUserVo;
 import shop.alien.gateway.config.BaseRedisService;
 import shop.alien.gateway.config.JWTUtils;
-import shop.alien.gateway.entity.vo.LifeMessageVo;
-import shop.alien.gateway.entity.vo.LifeUserVo;
 import shop.alien.gateway.mapper.LifeFansMapper;
 import shop.alien.gateway.mapper.LifeMessageMapper;
 import shop.alien.gateway.mapper.LifeNoticeMapper;

+ 2 - 2
alien-gateway/src/main/java/shop/alien/gateway/service/StoreInfoService.java

@@ -6,8 +6,8 @@ import org.springframework.http.ResponseEntity;
 import org.springframework.web.multipart.MultipartRequest;
 import shop.alien.entity.store.StoreInfo;
 import shop.alien.entity.store.StoreInfoDraft;
-import shop.alien.gateway.entity.dto.StoreInfoDto;
-import shop.alien.gateway.entity.vo.*;
+import shop.alien.entity.store.dto.StoreInfoDto;
+import shop.alien.entity.store.vo.*;
 
 import java.io.IOException;
 import java.util.List;

+ 1 - 1
alien-gateway/src/main/java/shop/alien/gateway/service/StoreUserService.java

@@ -4,7 +4,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
 import shop.alien.entity.result.R;
 import shop.alien.entity.store.StoreUser;
-import shop.alien.gateway.entity.vo.StoreUserVo;
+import shop.alien.entity.store.vo.StoreUserVo;
 
 import java.io.IOException;
 import java.util.List;

+ 3 - 2
alien-gateway/src/main/java/shop/alien/gateway/service/impl/StoreUserServiceImpl.java

@@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import lombok.RequiredArgsConstructor;
+import org.apache.commons.lang3.tuple.Triple;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
@@ -14,10 +15,10 @@ import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 import shop.alien.entity.result.R;
 import shop.alien.entity.store.*;
+import shop.alien.entity.store.vo.StoreUserExcelVo;
+import shop.alien.entity.store.vo.StoreUserVo;
 import shop.alien.gateway.config.BaseRedisService;
 import shop.alien.gateway.config.JWTUtils;
-import shop.alien.gateway.entity.vo.StoreUserExcelVo;
-import shop.alien.gateway.entity.vo.StoreUserVo;
 import shop.alien.gateway.mapper.*;
 import shop.alien.gateway.service.StoreUserService;
 import shop.alien.gateway.util.DateUtils;

+ 95 - 0
alien-gateway/src/main/java/shop/alien/gateway/util/ExcelExporter.java

@@ -0,0 +1,95 @@
+package shop.alien.gateway.util;
+
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.springframework.util.StringUtils;
+import shop.alien.entity.store.LifeClassManage;
+import shop.alien.entity.store.vo.StoreCommentAppealVo;
+import shop.alien.entity.store.vo.StoreDynamicDiscountVo;
+import shop.alien.entity.store.vo.StoreInfoVo;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.text.SimpleDateFormat;
+import java.util.List;
+
+public class ExcelExporter {
+
+    public static <T> byte[] exportToExcel(List<T> data, String[] headers, String sheetName) throws IOException {
+        Workbook workbook = new XSSFWorkbook();
+        Sheet sheet = workbook.createSheet(sheetName);
+
+        Row headerRow = sheet.createRow(0);
+        for (int i = 0; i < headers.length; i++) {
+            headerRow.createCell(i).setCellValue(headers[i]);
+        }
+        SimpleDateFormat simpleFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+
+        int rowNum = 1;
+        for (T item : data) {
+            Row row = sheet.createRow(rowNum++);
+            if (item instanceof StoreInfoVo) {
+                StoreInfoVo storeInfoVo = (StoreInfoVo) item;
+                row.createCell(0).setCellValue(storeInfoVo.getStoreName());
+                row.createCell(1).setCellValue(storeInfoVo.getStoreContact());
+                row.createCell(2).setCellValue(storeInfoVo.getStorePhone());
+                row.createCell(3).setCellValue(storeInfoVo.getStoreTypeStr());
+                if (!StringUtils.isEmpty(storeInfoVo.getCreatedTime())) {
+                    String date = simpleFormat.format(storeInfoVo.getCreatedTime());
+                    row.createCell(4).setCellValue(date);
+                }
+//                row.createCell(6).setCellValue(storeInfoVo.getStoreState());
+            } else if (item instanceof StoreCommentAppealVo) {
+                StoreCommentAppealVo user = (StoreCommentAppealVo) item;
+                row.createCell(0).setCellValue(user.getStoreName());
+                row.createCell(1).setCellValue(user.getStoreContact());
+                row.createCell(2).setCellValue(user.getStorePhone());
+                row.createCell(3).setCellValue(user.getStoreTypeStr());
+                if (!StringUtils.isEmpty(user.getCreatedTime())) {
+                    String date = simpleFormat.format(user.getCreatedTime());
+                    row.createCell(4).setCellValue(date);
+                }
+                row.createCell(5).setCellValue(user.getCommentContent());
+                row.createCell(6).setCellValue(user.getAppealReason());
+                row.createCell(7).setCellValue(user.getAppealStatusStr());
+            } else if (item instanceof LifeClassManage) {
+                LifeClassManage manage = (LifeClassManage) item;
+                row.createCell(0).setCellValue(manage.getClassName());
+                row.createCell(1).setCellValue(manage.getClassLength());
+                row.createCell(2).setCellValue(manage.getClassTeacher());
+                row.createCell(3).setCellValue(manage.getPlayCount());
+                row.createCell(4).setCellValue(manage.getClassBigType());
+                if (!StringUtils.isEmpty(manage.getCreatedTime())) {
+                    String date = simpleFormat.format(manage.getCreatedTime());
+                    row.createCell(5).setCellValue(date);
+                }
+                if (!StringUtils.isEmpty(manage.getClassState())) {
+                    row.createCell(6).setCellValue(manage.getClassState().equals("1") ? "正常" : "隐藏");
+                }
+            } else if (item instanceof StoreDynamicDiscountVo) {
+                StoreDynamicDiscountVo dynamicDiscountVo = (StoreDynamicDiscountVo) item;
+                row.createCell(0).setCellValue(dynamicDiscountVo.getActivityNo());
+                row.createCell(1).setCellValue(dynamicDiscountVo.getActivityName());
+                row.createCell(2).setCellValue(dynamicDiscountVo.getCreatedTime());
+                row.createCell(3).setCellValue(dynamicDiscountVo.getActivityStartTime() + " - " + dynamicDiscountVo.getActivityEndTime());
+                switch (dynamicDiscountVo.getStatus()) {
+                    case 0:
+                        row.createCell(4).setCellValue("待审核");
+                        break;
+                    case 1:
+                        row.createCell(4).setCellValue("已通过");
+                        break;
+                    case 2:
+                        row.createCell(4).setCellValue("已拒绝");
+                        break;
+                }
+            }
+        }
+        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+        workbook.write(outputStream);
+        workbook.close();
+        return outputStream.toByteArray();
+    }
+}

+ 126 - 0
alien-gateway/src/main/java/shop/alien/gateway/util/ExcelGenerator.java

@@ -0,0 +1,126 @@
+package shop.alien.gateway.util;
+
+import org.apache.poi.ss.usermodel.*;
+import org.apache.poi.xssf.usermodel.XSSFClientAnchor;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+
+import java.io.ByteArrayOutputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.lang.reflect.Field;
+import java.net.URL;
+import java.util.List;
+
+public class ExcelGenerator {
+
+    public static <T> void generateExcel(String filePath, List<T> dataList, Class<T> clazz) throws IOException {
+        // 创建一个新的工作簿
+        XSSFWorkbook workbook = new XSSFWorkbook();
+        // 创建一个工作表
+        Sheet sheet = workbook.createSheet("Sheet1");
+
+        // 获取类的所有字段
+        Field[] fields = clazz.getDeclaredFields();
+
+        // 创建加粗字体
+        Font headerFont = workbook.createFont();
+        headerFont.setBold(true);
+
+        // 创建表头样式并应用字体
+        CellStyle headerCellStyle = workbook.createCellStyle();
+        headerCellStyle.setFont(headerFont);
+
+        // 创建表头
+        Row headerRow = sheet.createRow(0);
+        for (int i = 0; i < fields.length; i++) {
+            Field field = fields[i];
+            ExcelHeader excelHeader = field.getAnnotation(ExcelHeader.class);
+            String headerName;
+            if (excelHeader != null) {
+                headerName = excelHeader.value();
+            } else {
+                headerName = field.getName();
+            }
+            Cell cell = headerRow.createCell(i);
+            cell.setCellValue(headerName);
+//            Cell cell = headerRow.createCell(i);
+//            cell.setCellValue(fields[i].getName());
+            cell.setCellStyle(headerCellStyle);
+        }
+
+        // 添加数据
+        for (int i = 0; i < dataList.size(); i++) {
+            Row row = sheet.createRow(i + 1);
+
+            T obj = dataList.get(i);
+            for (int j = 0; j < fields.length; j++) {
+                Field field = fields[j];
+                field.setAccessible(true);
+                if (field.isAnnotationPresent(ExcelImage.class)) {
+                    row.setHeightInPoints(80); // 数据行行高
+                    try {
+                        String imageUrl = (String) field.get(obj);
+                        if (imageUrl != null && !imageUrl.isEmpty()) {
+                            try (InputStream is = new URL(imageUrl).openStream();
+                                 ByteArrayOutputStream baos = new ByteArrayOutputStream()) {
+                                byte[] buffer = new byte[1024];
+                                int length;
+                                while ((length = is.read(buffer)) != -1) {
+                                    baos.write(buffer, 0, length);
+                                }
+                                byte[] imageBytes = baos.toByteArray();
+                                int pictureIndex = workbook.addPicture(imageBytes, Workbook.PICTURE_TYPE_JPEG);
+                                // 去掉泛型参数 <Sheet>
+                                Drawing patriarch = sheet.createDrawingPatriarch();
+                                ClientAnchor anchor = new XSSFClientAnchor(0, 0, 0, 0, (short) j, i + 1, (short) (j + 1), i + 2);
+                                patriarch.createPicture(anchor, pictureIndex);
+                            } catch (Exception e) {
+                                e.printStackTrace();
+                                Cell cell = row.createCell(j);
+                                cell.setCellValue("图片加载失败");
+                            }
+                        } else {
+                            Cell cell = row.createCell(j);
+                            cell.setCellValue("");
+                        }
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                        Cell cell = row.createCell(j);
+                        cell.setCellValue("图片加载失败");
+                    }
+                } else {
+                    // 常规字段处理(保持原有)...
+                    try {
+                        Object value = field.get(obj);
+                        Cell cell = row.createCell(j);
+                        if (value != null) {
+                            cell.setCellValue(value.toString());
+                        }
+                    } catch (IllegalAccessException e) {
+                        e.printStackTrace();
+                    }
+                }
+
+            }
+        }
+
+        // 自动调整列宽
+        for (int i = 0; i < fields.length; i++) {
+//            sheet.autoSizeColumn(i);
+            sheet.setColumnWidth(i, Math.max(sheet.getColumnWidth(i), 15 * 256));
+            // 处理图片列等特殊情况,确保列宽足够
+            if (fields[i].isAnnotationPresent(ExcelImage.class)) {
+                sheet.setColumnWidth(i, Math.max(sheet.getColumnWidth(i), 12 * 256)); // 图片列适当加宽
+            }
+        }
+
+        // 将工作簿写入文件
+        try (FileOutputStream fileOut = new FileOutputStream(filePath)) {
+            workbook.write(fileOut);
+        }
+
+        // 关闭工作簿
+        workbook.close();
+    }
+}    

+ 12 - 0
alien-gateway/src/main/java/shop/alien/gateway/util/ExcelHeader.java

@@ -0,0 +1,12 @@
+package shop.alien.gateway.util;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.FIELD)
+public @interface ExcelHeader {
+    String value();
+}

+ 11 - 0
alien-gateway/src/main/java/shop/alien/gateway/util/ExcelImage.java

@@ -0,0 +1,11 @@
+package shop.alien.gateway.util;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.FIELD)
+public @interface ExcelImage {
+}