فهرست منبع

小程序投流 计划列表 Excel 导出:新增 POST /contentPlatform/plan/xcx/export(同 /xcx/list 入参 XcxPlanListParam),复用 audiencePackage/title/createTimestamp 时间范围过滤;未传时间窗口默认当天(本地时区 00:00 ~ 次日 00:00),pageSize 强制 2000;XcxPlanItemExportVO 6 列(人群包/视频标题/视频封面/推送链接/备注/创建时间),EasyExcel 写盘后上传 OSS 返 CDN URL,对齐 qwPlanExport 实现。

刘立冬 17 ساعت پیش
والد
کامیت
dcf6895b5a

+ 6 - 0
api-module/src/main/java/com/tzld/piaoquan/api/controller/contentplatform/ContentPlatformPlanController.java

@@ -132,6 +132,12 @@ public class ContentPlatformPlanController {
         return CommonResponse.success(planService.xcxPlanList(param));
         return CommonResponse.success(planService.xcxPlanList(param));
     }
     }
 
 
+    @ApiOperation(value = "小程序计划列表导出")
+    @PostMapping("/xcx/export")
+    public CommonResponse<String> xcxPlanExport(@RequestBody XcxPlanListParam param) {
+        return CommonResponse.success(planService.xcxPlanExport(param));
+    }
+
     @ApiOperation(value = "小程序计划 创建/更新")
     @ApiOperation(value = "小程序计划 创建/更新")
     @PostMapping("/xcx/save")
     @PostMapping("/xcx/save")
     public CommonResponse<List<XcxPlanItemVO>> xcxPlanSave(@RequestBody XcxPlanSaveParam param) {
     public CommonResponse<List<XcxPlanItemVO>> xcxPlanSave(@RequestBody XcxPlanSaveParam param) {

+ 36 - 0
api-module/src/main/java/com/tzld/piaoquan/api/model/vo/contentplatform/XcxPlanItemExportVO.java

@@ -0,0 +1,36 @@
+package com.tzld.piaoquan.api.model.vo.contentplatform;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.ContentRowHeight;
+import com.alibaba.excel.annotation.write.style.HeadRowHeight;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@ColumnWidth(25)
+@HeadRowHeight(40)
+@ContentRowHeight(25)
+public class XcxPlanItemExportVO {
+
+    @ExcelProperty("人群包")
+    private String audiencePackage;
+
+    @ExcelProperty("视频标题")
+    private String title;
+
+    @ExcelProperty("视频封面")
+    private String cover;
+
+    @ExcelProperty("推送链接")
+    private String pageUrl;
+
+    @ExcelProperty("备注")
+    private String remark;
+
+    @ExcelProperty("创建时间")
+    private String createTime;
+}

+ 2 - 0
api-module/src/main/java/com/tzld/piaoquan/api/service/contentplatform/ContentPlatformPlanService.java

@@ -99,6 +99,8 @@ public interface ContentPlatformPlanService {
 
 
     Page<XcxPlanItemVO> xcxPlanList(XcxPlanListParam param);
     Page<XcxPlanItemVO> xcxPlanList(XcxPlanListParam param);
 
 
+    String xcxPlanExport(XcxPlanListParam param);
+
     List<XcxPlanItemVO> xcxPlanSave(XcxPlanSaveParam param);
     List<XcxPlanItemVO> xcxPlanSave(XcxPlanSaveParam param);
 
 
     List<XcxPlanItemVO> xcxPlanMultiLink(XcxPlanMultiLinkParam param);
     List<XcxPlanItemVO> xcxPlanMultiLink(XcxPlanMultiLinkParam param);

+ 53 - 0
api-module/src/main/java/com/tzld/piaoquan/api/service/contentplatform/impl/ContentPlatformPlanServiceImpl.java

@@ -25,6 +25,7 @@ import com.tzld.piaoquan.api.model.vo.contentplatform.GzhPlanVideoContentItemVO;
 import com.tzld.piaoquan.api.model.vo.contentplatform.QwPlanItemExportVO;
 import com.tzld.piaoquan.api.model.vo.contentplatform.QwPlanItemExportVO;
 import com.tzld.piaoquan.api.model.vo.contentplatform.QwPlanItemVO;
 import com.tzld.piaoquan.api.model.vo.contentplatform.QwPlanItemVO;
 import com.tzld.piaoquan.api.model.vo.contentplatform.VideoContentItemVO;
 import com.tzld.piaoquan.api.model.vo.contentplatform.VideoContentItemVO;
+import com.tzld.piaoquan.api.model.vo.contentplatform.XcxPlanItemExportVO;
 import com.tzld.piaoquan.api.model.vo.contentplatform.XcxPlanItemVO;
 import com.tzld.piaoquan.api.model.vo.contentplatform.XcxPlanItemVO;
 import com.tzld.piaoquan.api.service.CgiReplyService;
 import com.tzld.piaoquan.api.service.CgiReplyService;
 import com.tzld.piaoquan.api.service.GhDetailService;
 import com.tzld.piaoquan.api.service.GhDetailService;
@@ -57,6 +58,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.util.StringUtils;
 import org.springframework.util.StringUtils;
 
 
 import java.time.LocalDate;
 import java.time.LocalDate;
+import java.time.ZoneId;
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.ByteArrayOutputStream;
 import java.util.*;
 import java.util.*;
@@ -2063,6 +2065,57 @@ public class ContentPlatformPlanServiceImpl implements ContentPlatformPlanServic
         return result;
         return result;
     }
     }
 
 
+    /**
+     * 小程序投流计划导出:复用 xcxPlanList 的 filter(audiencePackage/title/时间范围),
+     * 不传时间范围时默认仅导出当天数据,最多导出 2000 条。
+     */
+    @Override
+    public String xcxPlanExport(XcxPlanListParam param) {
+        // 未传时间窗口时,默认仅导出当天数据(本地时区 00:00 ~ 次日 00:00)
+        if (param.getCreateTimestampStart() == null && param.getCreateTimestampEnd() == null) {
+            ZoneId zone = ZoneId.systemDefault();
+            long startOfToday = LocalDate.now().atStartOfDay(zone).toInstant().toEpochMilli();
+            long startOfTomorrow = LocalDate.now().plusDays(1).atStartOfDay(zone).toInstant().toEpochMilli();
+            param.setCreateTimestampStart(startOfToday);
+            param.setCreateTimestampEnd(startOfTomorrow);
+        }
+        // 强制分页参数:最多导出 2000 条
+        param.setPageNum(1);
+        param.setPageSize(2000);
+
+        ContentPlatformAccount loginAccount = LoginUserContext.getUser();
+        List<ContentPlatformXcxPlan> planList = planMapperExt.getXcxPlanList(param,
+                loginAccount.getId(), 0, param.getPageSize());
+        List<XcxPlanItemVO> list = buildXcxPlanItemVOList(planList);
+        return generateXcxPlanExcelFile(list);
+    }
+
+    private String generateXcxPlanExcelFile(List<XcxPlanItemVO> dataList) {
+        List<XcxPlanItemExportVO> list = new ArrayList<>();
+        if (CollectionUtils.isNotEmpty(dataList)) {
+            for (XcxPlanItemVO data : dataList) {
+                XcxPlanItemExportVO vo = new XcxPlanItemExportVO();
+                vo.setAudiencePackage(data.getAudiencePackage());
+                vo.setTitle(data.getTitle());
+                vo.setCover(data.getShareCover() != null ? data.getShareCover() : data.getCover());
+                vo.setPageUrl(data.getPageUrl());
+                vo.setRemark(data.getRemark());
+                if (Objects.nonNull(data.getCreateTimestamp())) {
+                    vo.setCreateTime(DateUtil.getDateString(data.getCreateTimestamp(), "yyyy-MM-dd HH:mm:ss"));
+                }
+                list.add(vo);
+            }
+        } else {
+            list.add(new XcxPlanItemExportVO());
+        }
+        ByteArrayOutputStream out = new ByteArrayOutputStream();
+        EasyExcel.write(out, XcxPlanItemExportVO.class).sheet("小程序投流计划").doWrite(list);
+        ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(out.toByteArray());
+        String fileName = "小程序投流计划_" + System.currentTimeMillis() + ".xls";
+        AliOssFileTool.saveInPublicReturnHost(byteArrayInputStream, EnumPublicBuckets.PUBBUCKET, fileName, EnumFileType.TEMP_PICTURE);
+        return CdnUtil.DOWNLOAD_CDN_URL_HOST_PICTURE + fileName;
+    }
+
     @Override
     @Override
     public List<XcxPlanItemVO> xcxPlanSave(XcxPlanSaveParam param) {
     public List<XcxPlanItemVO> xcxPlanSave(XcxPlanSaveParam param) {
         ContentPlatformAccount loginUser = LoginUserContext.getUser();
         ContentPlatformAccount loginUser = LoginUserContext.getUser();