Просмотр исходного кода

小程序投流 多链接生成接口:POST /contentPlatform/plan/xcx/multiLink {planId, count(1-200)} → 基于源计划 N 份复制,各调 messageAttachmentService.getPageNoCache 产独立 pageUrl/rootSourceId 落 xcx_plan + xcx_plan_video,返回新增 XcxPlanItemVO 列表。权限放宽至 type=2(内部) || type=3(代理商),合作方 type=1 抛 XCX_PLAN_INTERNAL_ONLY。校验:源 plan 归属当前账号、status=NORMAL、有 plan_video,count 1~200。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
刘立冬 17 часов назад
Родитель
Сommit
2764f42311

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

@@ -145,6 +145,12 @@ public class ContentPlatformPlanController {
         return CommonResponse.success();
     }
 
+    @ApiOperation(value = "小程序计划 多链接生成(同 video 复制 N 份)")
+    @PostMapping("/xcx/multiLink")
+    public CommonResponse<List<XcxPlanItemVO>> xcxPlanMultiLink(@RequestBody XcxPlanMultiLinkParam param) {
+        return CommonResponse.success(planService.xcxPlanMultiLink(param));
+    }
+
     @ApiOperation(value = "获取小程序分享二维码")
     @GetMapping("/xcx/getSharePic")
     public CommonResponse<String> getXcxSharePic(@RequestParam String pageUrl) {

+ 14 - 0
api-module/src/main/java/com/tzld/piaoquan/api/model/param/contentplatform/XcxPlanMultiLinkParam.java

@@ -0,0 +1,14 @@
+package com.tzld.piaoquan.api.model.param.contentplatform;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class XcxPlanMultiLinkParam {
+
+    @ApiModelProperty(value = "源计划 id")
+    private Long planId;
+
+    @ApiModelProperty(value = "生成数量 (1-200)")
+    private Integer count;
+}

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

@@ -101,6 +101,8 @@ public interface ContentPlatformPlanService {
 
     List<XcxPlanItemVO> xcxPlanSave(XcxPlanSaveParam param);
 
+    List<XcxPlanItemVO> xcxPlanMultiLink(XcxPlanMultiLinkParam param);
+
     void xcxPlanDelete(Long id);
 
     List<String> getXcxAudiencePackageList();

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

@@ -2111,6 +2111,61 @@ public class ContentPlatformPlanServiceImpl implements ContentPlatformPlanServic
         xcxPlanMapper.updateByPrimaryKeySelective(plan);
     }
 
+    @Override
+    public List<XcxPlanItemVO> xcxPlanMultiLink(XcxPlanMultiLinkParam param) {
+        ContentPlatformAccount loginUser = LoginUserContext.getUser();
+        if (!Objects.equals(loginUser.getType(), 2) && !Objects.equals(loginUser.getType(), 3)) {
+            throw new CommonException(ExceptionEnum.XCX_PLAN_INTERNAL_ONLY);
+        }
+        if (Objects.isNull(param.getPlanId()) || Objects.isNull(param.getCount())
+                || param.getCount() < 1 || param.getCount() > 200) {
+            throw new CommonException(ExceptionEnum.PARAM_ERROR);
+        }
+        ContentPlatformXcxPlan src = xcxPlanMapper.selectByPrimaryKey(param.getPlanId());
+        if (Objects.isNull(src) || !Objects.equals(src.getCreateAccountId(), loginUser.getId())
+                || !Objects.equals(src.getStatus(), PlanStatusEnum.NORMAL.getVal())) {
+            throw new CommonException(ExceptionEnum.XCX_PLAN_NOT_EXISTS);
+        }
+        ContentPlatformXcxPlanVideoExample videoExample = new ContentPlatformXcxPlanVideoExample();
+        videoExample.createCriteria().andPlanIdEqualTo(src.getId());
+        List<ContentPlatformXcxPlanVideo> srcVideoList = xcxPlanVideoMapper.selectByExample(videoExample);
+        if (CollectionUtils.isEmpty(srcVideoList)) {
+            throw new CommonException(ExceptionEnum.XCX_PLAN_NOT_EXISTS);
+        }
+        ContentPlatformXcxPlanVideo srcVideo = srcVideoList.get(0);
+
+        Long now = System.currentTimeMillis();
+        List<ContentPlatformXcxPlan> created = new ArrayList<>();
+        for (int i = 0; i < param.getCount(); i++) {
+            ContentPlatformXcxPlan xcxPlan = new ContentPlatformXcxPlan();
+            xcxPlan.setAudiencePackage(src.getAudiencePackage());
+            xcxPlan.setRemark(src.getRemark());
+            Staff staff = new Staff();
+            staff.setCarrierId("wxf7261ed54f2e450e");
+            staff.setRemark(src.getRemark());
+            String pageUrl = messageAttachmentService.getPageNoCache("touliu", "tencent", staff,
+                    srcVideo.getVideoId(), "小程序", null, null, srcVideo.getExperimentId());
+            String rootSourceId = MessageUtil.getRootSourceId(pageUrl);
+            xcxPlan.setPageUrl(pageUrl);
+            xcxPlan.setRootSourceId(rootSourceId);
+            xcxPlan.setStatus(PlanStatusEnum.NORMAL.getVal());
+            xcxPlan.setCreateAccountId(loginUser.getId());
+            xcxPlan.setCreateTimestamp(now);
+            xcxPlan.setUpdateTimestamp(now);
+            planMapperExt.insertXcxPlanReturnId(xcxPlan);
+            created.add(xcxPlan);
+
+            XcxPlanSaveVideoParam vp = new XcxPlanSaveVideoParam();
+            vp.setVideoId(srcVideo.getVideoId());
+            vp.setTitle(srcVideo.getTitle());
+            vp.setCover(srcVideo.getCover());
+            vp.setVideo(srcVideo.getVideo());
+            vp.setExperimentId(srcVideo.getExperimentId());
+            saveXcxPlanVideo(vp, xcxPlan.getId(), loginUser.getId());
+        }
+        return buildXcxPlanItemVOList(created);
+    }
+
     @Override
     public List<String> getXcxAudiencePackageList() {
         String dt = demandVideoMapperExt.getMaxDt(CHANNEL_NAME_XCX);