浏览代码

feat : 推广渠道接口提交

bilingfeng 2 年之前
父节点
当前提交
ebbf4dcee0
共有 15 个文件被更改,包括 745 次插入18 次删除
  1. 28 4
      game-module/game-manage/src/main/java/com/zanxiang/manage/controller/ChoiceController.java
  2. 54 0
      game-module/game-manage/src/main/java/com/zanxiang/manage/controller/PromoChannelController.java
  3. 61 0
      game-module/game-manage/src/main/java/com/zanxiang/manage/domain/params/PromoChannelAddUpdateParam.java
  4. 74 0
      game-module/game-manage/src/main/java/com/zanxiang/manage/domain/params/PromoChannelListParam.java
  5. 79 0
      game-module/game-manage/src/main/java/com/zanxiang/manage/domain/vo/PromoAccountLinkageChoiceVO.java
  6. 147 0
      game-module/game-manage/src/main/java/com/zanxiang/manage/domain/vo/PromoChannelListVO.java
  7. 25 0
      game-module/game-manage/src/main/java/com/zanxiang/manage/domain/vo/PromoProviderChoiceVO.java
  8. 43 0
      game-module/game-manage/src/main/java/com/zanxiang/manage/domain/vo/PromoSiteLinkageChoiceVO.java
  9. 21 0
      game-module/game-manage/src/main/java/com/zanxiang/manage/service/Impl/PromoAccountServiceImpl.java
  10. 129 3
      game-module/game-manage/src/main/java/com/zanxiang/manage/service/Impl/PromoChannelServiceImpl.java
  11. 23 0
      game-module/game-manage/src/main/java/com/zanxiang/manage/service/Impl/PromoSiteServiceImpl.java
  12. 8 0
      game-module/game-manage/src/main/java/com/zanxiang/manage/service/PromoAccountService.java
  13. 29 0
      game-module/game-manage/src/main/java/com/zanxiang/manage/service/PromoChannelService.java
  14. 10 0
      game-module/game-manage/src/main/java/com/zanxiang/manage/service/PromoSiteService.java
  15. 14 11
      game-module/game-mybatis/src/main/java/com/zanxiang/mybatis/entity/PromoChannel.java

+ 28 - 4
game-module/game-manage/src/main/java/com/zanxiang/manage/controller/ChoiceController.java

@@ -1,10 +1,7 @@
 package com.zanxiang.manage.controller;
 
 import com.zanxiang.common.domain.ResultVO;
-import com.zanxiang.common.enums.OsEnum;
-import com.zanxiang.common.enums.PromoAccountTypeEnum;
-import com.zanxiang.common.enums.PromoMediaTypeEnum;
-import com.zanxiang.common.enums.VipLevelEnum;
+import com.zanxiang.common.enums.*;
 import com.zanxiang.common.utils.bean.BeanUtils;
 import com.zanxiang.erp.security.annotation.PreAuthorize;
 import com.zanxiang.manage.domain.vo.*;
@@ -60,6 +57,9 @@ public class ChoiceController {
     @Autowired
     private PromoMediaService promoMediaService;
 
+    @Autowired
+    private PromoSiteService promoSiteService;
+
     @ApiOperation(value = "vip等级选择列表")
     @GetMapping(value = "/vip/level/list")
     @PreAuthorize(permissionKey = "sdk:choiceVipLevel:list")
@@ -172,4 +172,28 @@ public class ChoiceController {
         return ResultVO.ok(BeanUtils.copyList(Arrays.asList(PromoAccountTypeEnum.values()), PromoAccountTypeChoiceVO.class));
     }
 
+    @ApiOperation(value = "推广账号联动选择列表")
+    @GetMapping(value = "/promo/account/linkage/list")
+    @PreAuthorize(permissionKey = "sdk:promoAccountLinkageChoice:list")
+    @ApiResponses(value = {@ApiResponse(code = 200, message = "成功", response = PromoAccountLinkageChoiceVO.class, responseContainer = "list")})
+    public ResultVO<List<PromoAccountLinkageChoiceVO>> promoAccountLinkageChoiceList() {
+        return new ResultVO<>(promoAccountService.promoAccountLinkageChoiceList());
+    }
+
+    @ApiOperation(value = "推广媒体版位位置联动选择列表")
+    @GetMapping(value = "/promo/site/linkage/list")
+    @PreAuthorize(permissionKey = "sdk:promoSiteLinkageChoice:list")
+    @ApiResponses(value = {@ApiResponse(code = 200, message = "成功", response = PromoSiteLinkageChoiceVO.class, responseContainer = "list")})
+    public ResultVO<List<PromoSiteLinkageChoiceVO>> promoSiteLinkageChoiceList() {
+        return new ResultVO<>(promoSiteService.promoSiteLinkageChoiceList());
+    }
+
+    @ApiOperation(value = "推广服务商选择列表")
+    @GetMapping(value = "/promo/provider/list")
+    @PreAuthorize(permissionKey = "sdk:promoProviderChoice:list")
+    @ApiResponses(value = {@ApiResponse(code = 200, message = "成功", response = PromoProviderChoiceVO.class, responseContainer = "list")})
+    public ResultVO<List<PromoProviderChoiceVO>> promoProviderChoiceList() {
+        return ResultVO.ok(BeanUtils.copyList(Arrays.asList(PromoProviderEnum.values()), PromoProviderChoiceVO.class));
+    }
+
 }

+ 54 - 0
game-module/game-manage/src/main/java/com/zanxiang/manage/controller/PromoChannelController.java

@@ -0,0 +1,54 @@
+package com.zanxiang.manage.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.zanxiang.common.domain.ResultVO;
+import com.zanxiang.erp.security.annotation.PreAuthorize;
+import com.zanxiang.manage.domain.params.PromoChannelAddUpdateParam;
+import com.zanxiang.manage.domain.params.PromoChannelListParam;
+import com.zanxiang.manage.domain.vo.PromoChannelListVO;
+import com.zanxiang.manage.service.PromoChannelService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiResponse;
+import io.swagger.annotations.ApiResponses;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * @author : lingfeng
+ * @time : 2022-11-23
+ * @description : 推广渠道
+ */
+@Api(tags = "推广渠道接口")
+@RestController
+@RequestMapping("/promo/channel")
+public class PromoChannelController {
+
+    @Autowired
+    private PromoChannelService promoChannelService;
+
+    @ApiOperation(value = "查询推广渠道列表")
+    @PostMapping(value = "/list")
+    @PreAuthorize(permissionKey = "manage:promoChannel:list")
+    @ApiResponses(value = {@ApiResponse(code = 200, message = "成功", response = PromoChannelListVO.class)})
+    public ResultVO<IPage<PromoChannelListVO>> list(@Validated @RequestBody PromoChannelListParam param) {
+        return ResultVO.ok(promoChannelService.list(param));
+    }
+
+    @ApiOperation(value = "推广渠道添加或修改")
+    @PostMapping(value = "/add/or/update")
+    @PreAuthorize(permissionKey = "manage:promoChannel:addOrUpdate")
+    @ApiResponses(value = {@ApiResponse(code = 200, message = "成功", response = Boolean.class)})
+    public ResultVO<Boolean> addOrUpdate(@Validated @RequestBody PromoChannelAddUpdateParam param) {
+        return ResultVO.ok(promoChannelService.addOrUpdate(param));
+    }
+
+    @ApiOperation(value = "推广渠道状态变更")
+    @PatchMapping(value = "/status/update")
+    @PreAuthorize(permissionKey = "manage:promoAccount:statusUpdate")
+    @ApiResponses(value = {@ApiResponse(code = 200, message = "成功", response = Boolean.class)})
+    public ResultVO<Boolean> statusUpdate(@RequestParam Long id, @RequestParam Integer status) {
+        return new ResultVO<>(promoChannelService.statusUpdate(id, status));
+    }
+}

+ 61 - 0
game-module/game-manage/src/main/java/com/zanxiang/manage/domain/params/PromoChannelAddUpdateParam.java

@@ -0,0 +1,61 @@
+package com.zanxiang.manage.domain.params;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * @author : lingfeng
+ * @time : 2022-11-23
+ * @description : 推广渠道添加或者更新
+ */
+@Data
+public class PromoChannelAddUpdateParam {
+
+    /**
+     * 主键
+     */
+    @ApiModelProperty(notes = "主键, 不传是新建, 传是更新")
+    private Long id;
+
+    /**
+     * 账号联动选择列表主键id
+     */
+    @ApiModelProperty(notes = "账号联动选择列表主键id")
+    @NotNull(message = "账号联动选择列表主键id不可为空")
+    private Long promoAccountId;
+
+    /**
+     * 媒体版位位置联动选择列表主键id
+     */
+    @ApiModelProperty(notes = "媒体版位位置联动选择列表主键id")
+    @NotNull(message = "媒体版位位置联动选择列表主键id不可为空")
+    private Long promoSiteId;
+
+    /**
+     * 推广服务商id
+     */
+    @ApiModelProperty(notes = "推广服务商id")
+    @NotNull(message = "推广服务商id不可为空")
+    private Integer providerId;
+
+    /**
+     * 游戏id
+     */
+    @ApiModelProperty(notes = "游戏id")
+    @NotNull(message = "游戏id不可为空")
+    private Long gameId;
+
+    /**
+     * 推广渠道数量
+     */
+    @ApiModelProperty(notes = "推广渠道数量")
+    private Integer channelCount;
+
+    /**
+     * 备注
+     */
+    @ApiModelProperty(notes = "备注")
+    private String remark;
+}

+ 74 - 0
game-module/game-manage/src/main/java/com/zanxiang/manage/domain/params/PromoChannelListParam.java

@@ -0,0 +1,74 @@
+package com.zanxiang.manage.domain.params;
+
+import com.zanxiang.common.base.BasePage;
+import com.zanxiang.mybatis.entity.PromoChannel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @author : lingfeng
+ * @time : 2022-11-23
+ * @description : 推广列表参数
+ */
+public class PromoChannelListParam extends BasePage<PromoChannel> {
+
+    /**
+     * 推广游戏id
+     */
+    @ApiModelProperty(notes = "推广游戏id")
+    private Long gameId;
+
+    /**
+     * 游戏应用类型
+     */
+    @ApiModelProperty(notes = "游戏应用类型")
+    private Long gameCategory;
+
+    /**
+     * 推广渠道标识
+     */
+    @ApiModelProperty(notes = "推广渠道标识")
+    private String channel;
+
+    /**
+     * 投手id
+     */
+    @ApiModelProperty(notes = "投手id")
+    private String pitcherId;
+
+    /**
+     * 推广媒体id
+     */
+    @ApiModelProperty(notes = "推广媒体id")
+    private Long mediaId;
+
+    /**
+     * 推广版位位置id
+     */
+    @ApiModelProperty(notes = "推广版位位置id")
+    private Long promoSiteId;
+
+    /**
+     * 推广服务商id
+     */
+    @ApiModelProperty(notes = "推广版位位置id")
+    private Integer providerId;
+
+    /**
+     * 推广账号
+     */
+    @ApiModelProperty(notes = "推广账号")
+    private String account;
+
+    /**
+     * 推广账号类型
+     */
+    @ApiModelProperty(notes = "推广账号类型")
+    private Integer accountType;
+
+    /**
+     * 状态, 0 : 可用, 1: 禁用
+     */
+    @ApiModelProperty(notes = "状态, 0 : 可用, 1: 禁用")
+    private Integer status;
+
+}

+ 79 - 0
game-module/game-manage/src/main/java/com/zanxiang/manage/domain/vo/PromoAccountLinkageChoiceVO.java

@@ -0,0 +1,79 @@
+package com.zanxiang.manage.domain.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author : lingfeng
+ * @time : 2022-11-22
+ * @description : 推广账号联动列表
+ */
+@Data
+public class PromoAccountLinkageChoiceVO {
+
+    /**
+     * 主键
+     */
+    @ApiModelProperty(notes = "主键")
+    private Long id;
+
+    /**
+     * 推广账号id
+     */
+    @ApiModelProperty(notes = "推广账号id")
+    private String account;
+
+    /**
+     * 推广账号名称
+     */
+    @ApiModelProperty(notes = "推广账号名称")
+    private String name;
+
+    /**
+     * 投手项目组
+     */
+    @ApiModelProperty(notes = "投手项目组")
+    private String pitcherGroupId;
+
+    /**
+     * 投手项目组名称
+     */
+    @ApiModelProperty(notes = "投手项目组名称")
+    private String pitcherGroupName;
+
+    /**
+     * 投手id
+     */
+    @ApiModelProperty(notes = "投手id")
+    private String pitcherId;
+
+    /**
+     * 投手名称
+     */
+    @ApiModelProperty(notes = "投手名称")
+    private String pitcherName;
+
+    /**
+     * 推广媒体id
+     */
+    @ApiModelProperty(notes = "推广媒体id")
+    private Long mediaId;
+
+    /**
+     * 推广媒体名称
+     */
+    @ApiModelProperty(notes = "推广媒体名称")
+    private String mediaName;
+
+    /**
+     * 推广账号类型
+     */
+    @ApiModelProperty(notes = "推广账号类型")
+    private Integer accountType;
+
+    /**
+     * 推广账号类型名称
+     */
+    @ApiModelProperty(notes = "推广账号类型名称")
+    private String accountTypeName;
+}

+ 147 - 0
game-module/game-manage/src/main/java/com/zanxiang/manage/domain/vo/PromoChannelListVO.java

@@ -0,0 +1,147 @@
+package com.zanxiang.manage.domain.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * @author : lingfeng
+ * @time : 2022-11-23
+ * @description : 推广渠道
+ */
+@Data
+public class PromoChannelListVO {
+
+    /**
+     * 主键
+     */
+    @ApiModelProperty(notes = "主键")
+    private Long id;
+
+    /**
+     * 投手id
+     */
+    @ApiModelProperty(notes = "投手id")
+    private String pitcherId;
+
+    /**
+     * 投手名称
+     */
+    @ApiModelProperty(notes = "投手名称")
+    private String pitcherName;
+
+    /**
+     * 投手项目组
+     */
+    @ApiModelProperty(notes = "投手项目组")
+    private String pitcherGroupId;
+
+    /**
+     * 投手项目组名称
+     */
+    @ApiModelProperty(notes = "投手项目组名称")
+    private String pitcherGroupName;
+
+    /**
+     * 推广媒体id
+     */
+    @ApiModelProperty(notes = "推广媒体id")
+    private Long mediaId;
+
+    /**
+     * 推广媒体
+     */
+    @ApiModelProperty(notes = "推广媒体")
+    private Long mediaName;
+
+    /**
+     * 媒体位置
+     */
+    @ApiModelProperty(notes = "媒体位置")
+    private String mediaSite;
+
+    /**
+     * 媒体版位
+     */
+    @ApiModelProperty(notes = "媒体版位")
+    private String plateSite;
+
+    /**
+     * 推广服务商
+     */
+    @ApiModelProperty(notes = "推广服务商")
+    private String providerName;
+
+    /**
+     * 推广账号
+     */
+    @ApiModelProperty(notes = "推广账号")
+    private String accountName;
+
+    /**
+     * 推广账号类型
+     */
+    @ApiModelProperty(notes = "推广账号类型")
+    private String accountTypeName;
+
+    /**
+     * 推广游戏id
+     */
+    @ApiModelProperty(notes = "推广游戏id")
+    private Long gameId;
+
+    /**
+     * 推广游戏名称
+     */
+    @ApiModelProperty(notes = "推广游戏名称")
+    private String gameName;
+
+    /**
+     * 游戏应用类型
+     */
+    @ApiModelProperty(notes = "游戏应用类型")
+    private Long gameCategory;
+
+    /**
+     * 游戏应用类型名称
+     */
+    @ApiModelProperty(notes = "游戏应用类型名称")
+    private String gameCategoryName;
+
+    /**
+     * 推广码
+     */
+    @ApiModelProperty(notes = "推广码")
+    private String code;
+
+    /**
+     * 推广路径
+     */
+    @ApiModelProperty(notes = "推广路径")
+    private String path;
+
+    /**
+     * 推广渠道标识
+     */
+    @ApiModelProperty(notes = "推广渠道标识")
+    private String channel;
+
+    /**
+     * 备注
+     */
+    @ApiModelProperty(notes = "备注")
+    private String remark;
+
+    /**
+     * 状态, 0 : 可用, 1: 禁用
+     */
+    @ApiModelProperty(notes = "状态, 0 : 可用, 1: 禁用")
+    private Integer status;
+
+    /**
+     * 创建时间
+     */
+    @ApiModelProperty(notes = "创建时间")
+    private LocalDateTime createTime;
+}

+ 25 - 0
game-module/game-manage/src/main/java/com/zanxiang/manage/domain/vo/PromoProviderChoiceVO.java

@@ -0,0 +1,25 @@
+package com.zanxiang.manage.domain.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author : lingfeng
+ * @time : 2022-11-23
+ * @description : 推广服务商选择
+ */
+@Data
+public class PromoProviderChoiceVO {
+
+    /**
+     * 推广服务商id
+     */
+    @ApiModelProperty(notes = "推广服务商id")
+    private Integer providerId;
+
+    /**
+     * 推广服务商名称
+     */
+    @ApiModelProperty(notes = "推广服务商名称")
+    private String providerName;
+}

+ 43 - 0
game-module/game-manage/src/main/java/com/zanxiang/manage/domain/vo/PromoSiteLinkageChoiceVO.java

@@ -0,0 +1,43 @@
+package com.zanxiang.manage.domain.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author : lingfeng
+ * @time : 2022-11-23
+ * @description : 推广媒体版位位置
+ */
+@Data
+public class PromoSiteLinkageChoiceVO {
+
+    /**
+     * 主键
+     */
+    @ApiModelProperty(notes = "主键")
+    private Long id;
+
+    /**
+     * 推广媒体id
+     */
+    @ApiModelProperty(notes = "推广媒体id")
+    private Long mediaId;
+
+    /**
+     * 推广媒体名称
+     */
+    @ApiModelProperty(notes = "推广媒体名称")
+    private String mediaName;
+
+    /**
+     * 媒体版位
+     */
+    @ApiModelProperty(notes = "媒体版位")
+    private String plateSite;
+
+    /**
+     * 媒体位置
+     */
+    @ApiModelProperty(notes = "媒体位置")
+    private String mediaSite;
+}

+ 21 - 0
game-module/game-manage/src/main/java/com/zanxiang/manage/service/Impl/PromoAccountServiceImpl.java

@@ -17,6 +17,7 @@ import com.zanxiang.manage.domain.params.PromoAccountAddUpdateParam;
 import com.zanxiang.manage.domain.params.PromoAccountAssignParam;
 import com.zanxiang.manage.domain.params.PromoAccountListParam;
 import com.zanxiang.manage.domain.vo.PromoAccountChoiceVO;
+import com.zanxiang.manage.domain.vo.PromoAccountLinkageChoiceVO;
 import com.zanxiang.manage.domain.vo.PromoAccountListVO;
 import com.zanxiang.manage.domain.vo.PromoPitcherChoiceVO;
 import com.zanxiang.manage.service.PromoAccountLogService;
@@ -54,6 +55,26 @@ public class PromoAccountServiceImpl extends ServiceImpl<PromoAccountMapper, Pro
     @Autowired
     private PromoAccountLogService promoAccountLogService;
 
+    /**
+     * 获取账号联动选择列表
+     *
+     * @return : 返回列表
+     */
+    @Override
+    public List<PromoAccountLinkageChoiceVO> promoAccountLinkageChoiceList() {
+        List<PromoAccount> promoAccountList = super.list();
+        List<PromoAccountLinkageChoiceVO> choiceVOList = BeanUtils.copyList(promoAccountList, PromoAccountLinkageChoiceVO.class);
+        Map<Long, PromoMediaDTO> promoMediaMap = promoMediaService.promoMediaMap();
+        choiceVOList.forEach(promoAccountDTO -> {
+            Long mediaId = promoAccountDTO.getMediaId();
+            if (promoMediaMap.get(mediaId) != null) {
+                promoAccountDTO.setMediaName(promoMediaMap.get(mediaId).getName());
+            }
+            promoAccountDTO.setAccountTypeName(PromoAccountTypeEnum.getNameByType(promoAccountDTO.getAccountType()));
+        });
+        return choiceVOList;
+    }
+
     /**
      * 查询推广媒体列表
      *

+ 129 - 3
game-module/game-manage/src/main/java/com/zanxiang/manage/service/Impl/PromoChannelServiceImpl.java

@@ -1,23 +1,37 @@
 package com.zanxiang.manage.service.Impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zanxiang.common.enums.DeleteEnum;
+import com.zanxiang.common.enums.StatusEnum;
+import com.zanxiang.common.text.UUID;
 import com.zanxiang.common.utils.bean.BeanUtils;
 import com.zanxiang.manage.domain.dto.PromoChannelDTO;
+import com.zanxiang.manage.domain.dto.PromoMediaDTO;
+import com.zanxiang.manage.domain.params.PromoChannelAddUpdateParam;
+import com.zanxiang.manage.domain.params.PromoChannelListParam;
 import com.zanxiang.manage.domain.vo.PromoChannelChoiceVO;
+import com.zanxiang.manage.domain.vo.PromoChannelListVO;
 import com.zanxiang.manage.service.PromoAccountService;
 import com.zanxiang.manage.service.PromoChannelService;
+import com.zanxiang.manage.service.PromoMediaService;
+import com.zanxiang.manage.service.PromoSiteService;
+import com.zanxiang.mybatis.entity.PromoAccount;
 import com.zanxiang.mybatis.entity.PromoChannel;
+import com.zanxiang.mybatis.entity.PromoSite;
 import com.zanxiang.mybatis.mapper.PromoChannelMapper;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.logging.log4j.util.Strings;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
+import java.time.LocalDateTime;
+import java.util.*;
 import java.util.function.Function;
 import java.util.stream.Collectors;
 
@@ -33,6 +47,104 @@ public class PromoChannelServiceImpl extends ServiceImpl<PromoChannelMapper, Pro
     @Autowired
     private PromoAccountService promoAccountService;
 
+    @Autowired
+    private PromoMediaService promoMediaService;
+
+    @Autowired
+    private PromoSiteService promoSiteService;
+
+    /**
+     * 查询推广媒体列表
+     *
+     * @param param : 推广媒体列表查询参数
+     * @return : 返回分页信息
+     */
+    @Override
+    public IPage<PromoChannelListVO> list(PromoChannelListParam param) {
+        Map<Long, PromoMediaDTO> promoMediaMap = promoMediaService.promoMediaMap();
+        return page(param.toPage(), new QueryWrapper<PromoChannel>().lambda()
+                .orderByDesc(PromoChannel::getCreateTime))
+                .convert(promoAccount -> this.toVo(promoMediaMap, promoAccount));
+    }
+
+    /**
+     * 给签证官
+     *
+     * @param promoMediaMap 促销媒体地图
+     * @param promoChannel  推广渠道
+     * @return {@link PromoChannelListVO}
+     */
+    private PromoChannelListVO toVo(Map<Long, PromoMediaDTO> promoMediaMap, PromoChannel promoChannel) {
+        PromoChannelListVO promoChannelListVO = BeanUtils.copy(promoChannel, PromoChannelListVO.class);
+        if (Objects.isNull(promoChannelListVO)) {
+            return null;
+        }
+        return promoChannelListVO;
+    }
+
+    /**
+     * 推广账号新增或者更新
+     *
+     * @param param : 更新参数
+     * @return : 返回结果
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean addOrUpdate(PromoChannelAddUpdateParam param) {
+        PromoAccount promoAccount = promoAccountService.getById(param.getPromoAccountId());
+        PromoSite promoSite = promoSiteService.getById(param.getPromoSiteId());
+        Long id = param.getId();
+        //更新
+        if (id != null) {
+            PromoChannel promoChannel = super.getById(param.getId());
+            promoChannel.setAccountId(promoAccount.getId());
+            promoChannel.setMediaId(promoAccount.getMediaId());
+            promoChannel.setPromoSiteId(promoSite.getId());
+            promoChannel.setProviderId(param.getProviderId());
+            promoChannel.setGameId(param.getGameId());
+            promoChannel.setRemark(param.getRemark());
+            promoChannel.setUpdateTime(LocalDateTime.now());
+            return super.updateById(promoChannel);
+        }
+        //创建对象
+        PromoChannel promoChannel = PromoChannel.builder()
+                .accountId(promoAccount.getId())
+                .mediaId(promoAccount.getMediaId())
+                .promoSiteId(promoSite.getId())
+                .providerId(param.getProviderId())
+                .gameId(param.getGameId())
+                .remark(param.getRemark())
+                .status(StatusEnum.YES.getCode())
+                .isDelete(DeleteEnum.NO.getCode())
+                .createTime(LocalDateTime.now())
+                .updateTime(LocalDateTime.now())
+                .build();
+        //创建渠道
+        Integer channelCount = param.getChannelCount();
+        List<PromoChannel> promoChannelList = new ArrayList<>();
+        for (int i = 0; i < channelCount; i++) {
+            PromoChannel channel = BeanUtils.copy(promoChannel, PromoChannel.class);
+            channel.setChannel(UUID.randomUUID().toString().replace("-", ""));
+        }
+        return super.saveBatch(promoChannelList);
+    }
+
+    /**
+     * 根据主键更新状态
+     *
+     * @param id     : 主键id
+     * @param status : 状态
+     * @return : 返回更新结果
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean statusUpdate(Long id, Integer status) {
+        return super.update(new LambdaUpdateWrapper<PromoChannel>()
+                .set(PromoChannel::getStatus, status)
+                .set(PromoChannel::getUpdateTime, LocalDateTime.now())
+                .eq(PromoChannel::getId, id));
+    }
+
     /**
      * 注册渠道选择列表查询
      *
@@ -58,6 +170,13 @@ public class PromoChannelServiceImpl extends ServiceImpl<PromoChannelMapper, Pro
             return Collections.emptyMap();
         }
         List<PromoChannelDTO> promoChannelDTOList = BeanUtils.copyList(promoChannelList, PromoChannelDTO.class);
+        Map<Long, PromoMediaDTO> promoMediaMap = promoMediaService.promoMediaMap();
+        promoChannelDTOList.forEach(promoChannelDTO -> {
+            Long mediaId = promoChannelDTO.getMediaId();
+            if (promoMediaMap.get(mediaId) != null) {
+                promoChannelDTO.setMediaName(promoMediaMap.get(mediaId).getName());
+            }
+        });
         return promoChannelDTOList.stream().collect(Collectors.toMap(PromoChannelDTO::getId, Function.identity()));
     }
 
@@ -73,6 +192,13 @@ public class PromoChannelServiceImpl extends ServiceImpl<PromoChannelMapper, Pro
             return Collections.emptyMap();
         }
         List<PromoChannelDTO> promoChannelDTOList = BeanUtils.copyList(promoChannelList, PromoChannelDTO.class);
+        Map<Long, PromoMediaDTO> promoMediaMap = promoMediaService.promoMediaMap();
+        promoChannelDTOList.forEach(promoChannelDTO -> {
+            Long mediaId = promoChannelDTO.getMediaId();
+            if (promoMediaMap.get(mediaId) != null) {
+                promoChannelDTO.setMediaName(promoMediaMap.get(mediaId).getName());
+            }
+        });
         return promoChannelDTOList.stream().collect(Collectors.toMap(PromoChannelDTO::getId, Function.identity()));
     }
 

+ 23 - 0
game-module/game-manage/src/main/java/com/zanxiang/manage/service/Impl/PromoSiteServiceImpl.java

@@ -9,8 +9,10 @@ import com.zanxiang.common.enums.DeleteEnum;
 import com.zanxiang.common.enums.StatusEnum;
 import com.zanxiang.common.exception.BaseException;
 import com.zanxiang.common.utils.bean.BeanUtils;
+import com.zanxiang.manage.domain.dto.PromoMediaDTO;
 import com.zanxiang.manage.domain.params.PromoSiteAddOrUpdateParam;
 import com.zanxiang.manage.domain.params.PromoSiteListParam;
+import com.zanxiang.manage.domain.vo.PromoSiteLinkageChoiceVO;
 import com.zanxiang.manage.domain.vo.PromoSiteListVO;
 import com.zanxiang.manage.service.PromoMediaService;
 import com.zanxiang.manage.service.PromoSiteService;
@@ -24,6 +26,8 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.time.LocalDateTime;
+import java.util.List;
+import java.util.Map;
 import java.util.Objects;
 
 /**
@@ -38,6 +42,25 @@ public class PromoSiteServiceImpl extends ServiceImpl<PromoSiteMapper, PromoSite
     @Autowired
     private PromoMediaService promoMediaService;
 
+    /**
+     * 媒体版位位置联动选择列表
+     *
+     * @return : 返回选择列表
+     */
+    @Override
+    public List<PromoSiteLinkageChoiceVO> promoSiteLinkageChoiceList() {
+        List<PromoSite> promoSiteList = super.list();
+        List<PromoSiteLinkageChoiceVO> choiceVOList = BeanUtils.copyList(promoSiteList, PromoSiteLinkageChoiceVO.class);
+        Map<Long, PromoMediaDTO> promoMediaMap = promoMediaService.promoMediaMap();
+        choiceVOList.forEach(promoAccountDTO -> {
+            Long mediaId = promoAccountDTO.getMediaId();
+            if (promoMediaMap.get(mediaId) != null) {
+                promoAccountDTO.setMediaName(promoMediaMap.get(mediaId).getName());
+            }
+        });
+        return choiceVOList;
+    }
+
     /**
      * 查询游戏标签列表
      *

+ 8 - 0
game-module/game-manage/src/main/java/com/zanxiang/manage/service/PromoAccountService.java

@@ -7,6 +7,7 @@ import com.zanxiang.manage.domain.params.PromoAccountAddUpdateParam;
 import com.zanxiang.manage.domain.params.PromoAccountAssignParam;
 import com.zanxiang.manage.domain.params.PromoAccountListParam;
 import com.zanxiang.manage.domain.vo.PromoAccountChoiceVO;
+import com.zanxiang.manage.domain.vo.PromoAccountLinkageChoiceVO;
 import com.zanxiang.manage.domain.vo.PromoAccountListVO;
 import com.zanxiang.manage.domain.vo.PromoPitcherChoiceVO;
 import com.zanxiang.mybatis.entity.PromoAccount;
@@ -21,6 +22,13 @@ import java.util.Map;
  */
 public interface PromoAccountService extends IService<PromoAccount> {
 
+    /**
+     * 获取账号联动选择列表
+     *
+     * @return : 返回列表
+     */
+    List<PromoAccountLinkageChoiceVO> promoAccountLinkageChoiceList();
+
     /**
      * 查询推广媒体列表
      *

+ 29 - 0
game-module/game-manage/src/main/java/com/zanxiang/manage/service/PromoChannelService.java

@@ -1,8 +1,12 @@
 package com.zanxiang.manage.service;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.zanxiang.manage.domain.dto.PromoChannelDTO;
+import com.zanxiang.manage.domain.params.PromoChannelAddUpdateParam;
+import com.zanxiang.manage.domain.params.PromoChannelListParam;
 import com.zanxiang.manage.domain.vo.PromoChannelChoiceVO;
+import com.zanxiang.manage.domain.vo.PromoChannelListVO;
 import com.zanxiang.mybatis.entity.PromoChannel;
 
 import java.util.List;
@@ -15,6 +19,31 @@ import java.util.Map;
  */
 public interface PromoChannelService extends IService<PromoChannel> {
 
+    /**
+     * 查询推广媒体列表
+     *
+     * @param param : 推广媒体列表查询参数
+     * @return : 返回分页信息
+     */
+    IPage<PromoChannelListVO> list(PromoChannelListParam param);
+
+    /**
+     * 推广账号新增或者更新
+     *
+     * @param param : 更新参数
+     * @return : 返回结果
+     */
+    Boolean addOrUpdate(PromoChannelAddUpdateParam param);
+
+    /**
+     * 根据主键更新状态
+     *
+     * @param id     : 主键id
+     * @param status : 状态
+     * @return : 返回更新结果
+     */
+    Boolean statusUpdate(Long id, Integer status);
+
     /**
      * 注册渠道选择列表查询
      *

+ 10 - 0
game-module/game-manage/src/main/java/com/zanxiang/manage/service/PromoSiteService.java

@@ -4,9 +4,12 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.zanxiang.manage.domain.params.PromoSiteAddOrUpdateParam;
 import com.zanxiang.manage.domain.params.PromoSiteListParam;
+import com.zanxiang.manage.domain.vo.PromoSiteLinkageChoiceVO;
 import com.zanxiang.manage.domain.vo.PromoSiteListVO;
 import com.zanxiang.mybatis.entity.PromoSite;
 
+import java.util.List;
+
 /**
  * @author : lingfeng
  * @time : 2022-11-18
@@ -14,6 +17,13 @@ import com.zanxiang.mybatis.entity.PromoSite;
  */
 public interface PromoSiteService extends IService<PromoSite> {
 
+    /**
+     * 媒体版位位置联动选择列表
+     *
+     * @return : 返回选择列表
+     */
+    List<PromoSiteLinkageChoiceVO> promoSiteLinkageChoiceList();
+
     /**
      * 查询游戏标签列表
      *

+ 14 - 11
game-module/game-mybatis/src/main/java/com/zanxiang/mybatis/entity/PromoChannel.java

@@ -1,12 +1,9 @@
 package com.zanxiang.mybatis.entity;
 
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableLogic;
-import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.*;
 import lombok.*;
 
-import java.util.Date;
+import java.time.LocalDateTime;
 
 /**
  * @author : lingfeng
@@ -38,14 +35,14 @@ public class PromoChannel {
     private Long mediaId;
 
     /**
-     * 推广媒体名称
+     * 推广版位位置id
      */
-    private String mediaName;
+    private Long promoSiteId;
 
     /**
-     * 服务商
+     * 推广服务商id
      */
-    private String provider;
+    private Integer providerId;
 
     /**
      * 游戏id
@@ -67,6 +64,12 @@ public class PromoChannel {
      */
     private String channel;
 
+    /**
+     * 备注
+     */
+    @TableField(updateStrategy = FieldStrategy.IGNORED)
+    private String remark;
+
     /**
      * 状态, 0 : 可用, 1: 禁用
      */
@@ -81,10 +84,10 @@ public class PromoChannel {
     /**
      * 创建时间
      */
-    private Date createTime;
+    private LocalDateTime createTime;
 
     /**
      * 更新时间
      */
-    private Date updateTime;
+    private LocalDateTime updateTime;
 }