瀏覽代碼

Merge remote-tracking branch 'origin/test' into test

songyh 4 年之前
父節點
當前提交
612ff9b383

+ 247 - 0
module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/material/controller/ByteDanceCreativeWordPackageController.java

@@ -0,0 +1,247 @@
+package cn.com.ctop.toutiao.modules.material.controller;
+
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import cn.com.ctop.toutiao.modules.material.entity.ByteDanceCreativeWordPackage;
+import cn.com.ctop.toutiao.modules.material.service.IByteDanceCreativeWordPackageService;
+import org.jeecg.common.api.vo.Result;
+import cn.com.ctop.common.module.utils.QueryGenerator;
+import org.jeecg.common.util.oConvertUtils;
+
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.extern.slf4j.Slf4j;
+
+import org.jeecgframework.poi.excel.ExcelImportUtil;
+import org.jeecgframework.poi.excel.def.NormalExcelConstants;
+import org.jeecgframework.poi.excel.entity.ExportParams;
+import org.jeecgframework.poi.excel.entity.ImportParams;
+import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
+import org.springframework.web.servlet.ModelAndView;
+import com.alibaba.fastjson.JSON;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+/**
+ * 创意动态词包信息
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2021-05-19
+ */
+@Slf4j
+@Api(tags = "创意动态词包信息")
+@RestController
+@RequestMapping("/ctop/ByteDanceCreativeWordPackage")
+public class ByteDanceCreativeWordPackageController {
+    @Autowired
+    private IByteDanceCreativeWordPackageService ByteDanceCreativeWordPackageService;
+
+    /**
+     * 分页列表查询
+     *
+     * @param ByteDanceCreativeWordPackage
+     * @param pageNo
+     * @param pageSize
+     * @param req
+     * @return
+     */
+    @ApiOperation(value = "创意动态词包信息-分页列表查询", notes = "创意动态词包信息-分页列表查询")
+    @GetMapping(value = "/list")
+    public Result<IPage<ByteDanceCreativeWordPackage>> queryPageList(ByteDanceCreativeWordPackage ByteDanceCreativeWordPackage,
+                                                                     @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
+                                                                     @RequestParam(name = "pageSize", defaultValue = "100") Integer pageSize,
+                                                                     HttpServletRequest req) {
+        Result<IPage<ByteDanceCreativeWordPackage>> result = new Result<>();
+        QueryWrapper<ByteDanceCreativeWordPackage> queryWrapper = QueryGenerator.initQueryWrapper(ByteDanceCreativeWordPackage, req.getParameterMap());
+        Page<ByteDanceCreativeWordPackage> page = new Page<ByteDanceCreativeWordPackage>(pageNo, pageSize);
+        IPage<ByteDanceCreativeWordPackage> pageList = ByteDanceCreativeWordPackageService.page(page, queryWrapper);
+        result.setSuccess(true);
+        result.setResult(pageList);
+        return result;
+    }
+
+    /**
+     * 添加
+     *
+     * @param ByteDanceCreativeWordPackage
+     * @return
+     */
+    @ApiOperation(value = "创意动态词包信息-添加", notes = "创意动态词包信息-添加")
+    @PostMapping(value = "/add")
+    public Result<ByteDanceCreativeWordPackage> add(@RequestBody ByteDanceCreativeWordPackage ByteDanceCreativeWordPackage) {
+        Result<ByteDanceCreativeWordPackage> result = new Result<>();
+        try {
+            ByteDanceCreativeWordPackageService.save(ByteDanceCreativeWordPackage);
+            result.success("添加成功!");
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+            result.error500("操作失败");
+        }
+        return result;
+    }
+
+    /**
+     * 编辑
+     *
+     * @param ByteDanceCreativeWordPackage
+     * @return
+     */
+    @ApiOperation(value = "创意动态词包信息-编辑", notes = "创意动态词包信息-编辑")
+    @PutMapping(value = "/edit")
+    public Result<ByteDanceCreativeWordPackage> edit(@RequestBody ByteDanceCreativeWordPackage ByteDanceCreativeWordPackage) {
+        Result<ByteDanceCreativeWordPackage> result = new Result<ByteDanceCreativeWordPackage>();
+        ByteDanceCreativeWordPackage ByteDanceCreativeWordPackageEntity = ByteDanceCreativeWordPackageService.getById(ByteDanceCreativeWordPackage.getId());
+        if (ByteDanceCreativeWordPackageEntity == null) {
+            result.error500("未找到对应实体");
+        } else {
+            boolean ok = ByteDanceCreativeWordPackageService.updateById(ByteDanceCreativeWordPackage);
+            if (ok) {
+                result.success("修改成功!");
+            }
+        }
+
+        return result;
+    }
+
+    /**
+     * 通过id删除
+     *
+     * @param id
+     * @return
+     */
+    @ApiOperation(value = "创意动态词包信息-通过id删除", notes = "创意动态词包信息-通过id删除")
+    @DeleteMapping(value = "/delete")
+    public Result<?> delete(@RequestParam(name = "id") String id) {
+        try {
+            ByteDanceCreativeWordPackageService.removeById(id);
+        } catch (Exception e) {
+            log.error("删除失败", e.getMessage());
+            return Result.error("删除失败!");
+        }
+        return Result.ok("删除成功!");
+    }
+
+    /**
+     * 批量删除
+     *
+     * @param ids
+     * @return
+     */
+    @ApiOperation(value = "创意动态词包信息-批量删除", notes = "创意动态词包信息-批量删除")
+    @DeleteMapping(value = "/deleteBatch")
+    public Result<ByteDanceCreativeWordPackage> deleteBatch(@RequestParam(name = "ids") String ids) {
+        Result<ByteDanceCreativeWordPackage> result = new Result<>();
+        if (ids == null || "".equals(ids.trim())) {
+            result.error500("参数不识别!");
+        } else {
+            this.ByteDanceCreativeWordPackageService.removeByIds(Arrays.asList(ids.split(",")));
+            result.success("删除成功!");
+        }
+        return result;
+    }
+
+    /**
+     * 通过id查询
+     *
+     * @param id
+     * @return
+     */
+    @ApiOperation(value = "创意动态词包信息-通过id查询", notes = "创意动态词包信息-通过id查询")
+    @GetMapping(value = "/queryById")
+    public Result<ByteDanceCreativeWordPackage> queryById(@RequestParam(name = "id", required = true) String id) {
+        Result<ByteDanceCreativeWordPackage> result = new Result<>();
+        ByteDanceCreativeWordPackage ByteDanceCreativeWordPackage = ByteDanceCreativeWordPackageService.getById(id);
+        if (ByteDanceCreativeWordPackage == null) {
+            result.error500("未找到对应实体");
+        } else {
+            result.setResult(ByteDanceCreativeWordPackage);
+            result.setSuccess(true);
+        }
+        return result;
+    }
+
+    /**
+     * 导出excel
+     *
+     * @param request
+     * @param response
+     */
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, HttpServletResponse response) {
+        // Step.1 组装查询条件
+        QueryWrapper<ByteDanceCreativeWordPackage> queryWrapper = null;
+        try {
+            String paramsStr = request.getParameter("paramsStr");
+            if (oConvertUtils.isNotEmpty(paramsStr)) {
+                String deString = URLDecoder.decode(paramsStr, "UTF-8");
+                ByteDanceCreativeWordPackage ByteDanceCreativeWordPackage = JSON.parseObject(deString, ByteDanceCreativeWordPackage.class);
+                queryWrapper = QueryGenerator.initQueryWrapper(ByteDanceCreativeWordPackage, request.getParameterMap());
+            }
+        } catch (UnsupportedEncodingException e) {
+            e.printStackTrace();
+        }
+
+        //Step.2 AutoPoi 导出Excel
+        ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
+        List<ByteDanceCreativeWordPackage> pageList = ByteDanceCreativeWordPackageService.list(queryWrapper);
+        //导出文件名称
+        mv.addObject(NormalExcelConstants.FILE_NAME, "创意动态词包信息列表");
+        mv.addObject(NormalExcelConstants.CLASS, ByteDanceCreativeWordPackage.class);
+        mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("创意动态词包信息列表数据", "导出人:Jeecg", "导出信息"));
+        mv.addObject(NormalExcelConstants.DATA_LIST, pageList);
+        return mv;
+    }
+
+    /**
+     * 通过excel导入数据
+     *
+     * @param request
+     * @param response
+     * @return
+     */
+    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+        MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
+        Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
+        for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
+            MultipartFile file = entity.getValue();
+            ImportParams params = new ImportParams();
+            params.setTitleRows(2);
+            params.setHeadRows(1);
+            params.setNeedSave(true);
+            try {
+                List<ByteDanceCreativeWordPackage> listByteDanceCreativeWordPackages = ExcelImportUtil.importExcel(file.getInputStream(), ByteDanceCreativeWordPackage.class, params);
+                ByteDanceCreativeWordPackageService.saveBatch(listByteDanceCreativeWordPackages);
+                return Result.ok("文件导入成功!数据行数:" + listByteDanceCreativeWordPackages.size());
+            } catch (Exception e) {
+                log.error(e.getMessage(), e);
+                return Result.error("文件导入失败:" + e.getMessage());
+            } finally {
+                try {
+                    file.getInputStream().close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+        return Result.ok("文件导入失败!");
+    }
+
+}
+

+ 108 - 0
module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/material/entity/ByteDanceCreativeWordPackage.java

@@ -0,0 +1,108 @@
+package cn.com.ctop.toutiao.modules.material.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import com.alibaba.fastjson.JSONObject;
+import org.jeecgframework.poi.excel.annotation.Excel;
+
+import java.util.Date;
+
+@Data
+@TableName("ctop_bytedance_creative_word_package")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value = "ctop_bytedance_creative_word_package对象", description = "今日头条创意词包")
+public class ByteDanceCreativeWordPackage {
+
+
+    /**id*/
+    @TableId(type = IdType.UUID)
+    @ApiModelProperty(value = "id")
+    private java.lang.Integer id;
+    /**creativeWordId*/
+    @Excel(name = "creativeWordId", width = 15)
+    @ApiModelProperty(value = "creativeWordId")
+    private java.lang.Integer creativeWordId;
+    /**name*/
+    @Excel(name = "name", width = 15)
+    @ApiModelProperty(value = "name")
+    private java.lang.String name;
+    /**defaultWord*/
+    @Excel(name = "defaultWord", width = 15)
+    @ApiModelProperty(value = "defaultWord")
+    private java.lang.String defaultWord;
+    /**words*/
+    @Excel(name = "words", width = 15)
+    @ApiModelProperty(value = "words")
+    private java.lang.Object words;
+    /**contentType*/
+    @Excel(name = "contentType", width = 15)
+    @ApiModelProperty(value = "contentType")
+    private java.lang.String contentType;
+    /**maxWordLen*/
+    @Excel(name = "maxWordLen", width = 15)
+    @ApiModelProperty(value = "maxWordLen")
+    private java.lang.Integer maxWordLen;
+    /**status*/
+    @Excel(name = "status", width = 15)
+    @ApiModelProperty(value = "status")
+    private java.lang.String status;
+    /**userRate*/
+    @Excel(name = "userRate", width = 15)
+    @ApiModelProperty(value = "userRate")
+    private Float userRate;
+    /**createTime*/
+    @ApiModelProperty(value = "createTime")
+    private java.util.Date createTime;
+    /**updateTime*/
+    @ApiModelProperty(value = "updateTime")
+    private java.util.Date updateTime;
+
+
+
+    public ByteDanceCreativeWordPackage(){}
+
+    public ByteDanceCreativeWordPackage(JSONObject jsonObject){
+        int creativeWordId = jsonObject.getInteger("creative_word_id");
+        this.creativeWordId = creativeWordId;
+
+        int maxWordLen = jsonObject.getInteger("max_word_len");
+        this.maxWordLen = maxWordLen;
+
+        String name = jsonObject.getString("name");
+        if (null != name && !"".equals(name.trim())) {
+            this.name = name;
+        }
+
+        String defaultWord = jsonObject.getString("default_word");
+        if (null != defaultWord && !"".equals(defaultWord.trim())) {
+            this.defaultWord = defaultWord;
+        }
+
+        String words = jsonObject.getString("words");
+        if (null != words && !"".equals(words.trim())) {
+            this.words = words;
+        }
+
+        String contentType = jsonObject.getString("content_type");
+        if (null != contentType && !"".equals(contentType.trim())) {
+            this.contentType = contentType;
+        }
+
+        String status = jsonObject.getString("status");
+        if (null != status && !"".equals(status.trim())) {
+            this.status = status;
+        }
+
+        Float userRate = jsonObject.getFloat("user_rate");
+        this.userRate = userRate;
+    }
+
+
+}

+ 4 - 1
module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/material/entity/BytedanceVideoSlogenInfo.java

@@ -35,7 +35,9 @@ public class BytedanceVideoSlogenInfo {
 	/**status*/
 	private Integer status;
 
-	public BytedanceVideoSlogenInfo(String videoCode, String slogan, String userId) {
+	private String creativeWordIds;
+
+	public BytedanceVideoSlogenInfo(String videoCode, String slogan, String userId, String creativeWordIds) {
 		this.videoCode = videoCode;
 		this.slogan = slogan;
 		this.createBy = userId;
@@ -43,6 +45,7 @@ public class BytedanceVideoSlogenInfo {
 		this.createTime = new Date();
 		this.updateTime = new Date();
 		this.status = 1;
+		this.creativeWordIds = creativeWordIds;
 	}
 
 	public BytedanceVideoSlogenInfo() {

+ 18 - 0
module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/material/mapper/ByteDanceCreativeWordPackageMapper.java

@@ -0,0 +1,18 @@
+package cn.com.ctop.toutiao.modules.material.mapper;
+
+import cn.com.ctop.toutiao.modules.material.entity.ByteDanceCreative;
+import cn.com.ctop.toutiao.modules.material.entity.ByteDanceCreativeWordPackage;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * @Description: 今日头条创意信息
+ * @Author: jeecg-boot
+ * @Date: 2019-07-22
+ * @Version: V1.0
+ */
+public interface ByteDanceCreativeWordPackageMapper extends BaseMapper<ByteDanceCreativeWordPackage> {
+    void replaceBatch(@Param(value = "creativeWordPackages") List<ByteDanceCreativeWordPackage> creativeWordPackages);
+}

+ 29 - 0
module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/material/mapper/xml/ByteDanceCreativeWordPackageMapper.xml

@@ -0,0 +1,29 @@
+<?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="cn.com.ctop.toutiao.modules.material.mapper.ByteDanceCreativeWordPackageMapper">
+
+    <insert id="replaceBatch">
+        replace into ctop_bytedance_creative_word_package(
+        creative_word_id,
+        name,
+        default_word,
+        words,
+        content_type,
+        max_word_len,
+        status,
+        user_rate)
+        values
+        <foreach collection="creativeWordPackages" item="report" separator=",">
+            (
+            #{report.creativeWordId},
+            #{report.name},
+            #{report.defaultWord},
+            #{report.words},
+            #{report.contentType},
+            #{report.maxWordLen},
+            #{report.status},
+            #{report.userRate}
+            )
+        </foreach>
+    </insert>
+</mapper>

+ 21 - 0
module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/material/service/IByteDanceCreativeWordPackageService.java

@@ -0,0 +1,21 @@
+package cn.com.ctop.toutiao.modules.material.service;
+
+import cn.com.ctop.common.module.entity.CtopOauthToken;
+import cn.com.ctop.toutiao.modules.material.entity.ByteDanceCreative;
+import cn.com.ctop.toutiao.modules.material.entity.ByteDanceCreativeWordPackage;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description: 今日头条创意词包
+ * @Author: jeecg-boot
+ * @Date: 2021-05-18
+ * @Version: test
+ */
+public interface IByteDanceCreativeWordPackageService extends IService<ByteDanceCreativeWordPackage> {
+    Map<String, Object> getCreativeWordPackage();
+
+}

+ 66 - 0
module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/material/service/impl/ByteDanceCreativeWordPackageServiceImpl.java

@@ -0,0 +1,66 @@
+package cn.com.ctop.toutiao.modules.material.service.impl;
+
+import cn.com.ctop.common.module.entity.CtopOauthToken;
+import cn.com.ctop.common.module.service.ICtopOauthTokenService;
+import cn.com.ctop.common.module.utils.HttpUtils;
+import cn.com.ctop.common.module.utils.PropertiesUtils;
+import cn.com.ctop.toutiao.modules.material.entity.ByteDanceCreativeWordPackage;
+import cn.com.ctop.toutiao.modules.material.mapper.ByteDanceCreativeWordPackageMapper;
+import cn.com.ctop.toutiao.modules.material.service.IByteDanceCreativeWordPackageService;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+@Slf4j
+@Service
+public class ByteDanceCreativeWordPackageServiceImpl extends ServiceImpl<ByteDanceCreativeWordPackageMapper, ByteDanceCreativeWordPackage> implements IByteDanceCreativeWordPackageService {
+
+    @Autowired
+    private ICtopOauthTokenService tokenService;
+    @Resource
+    private ByteDanceCreativeWordPackageMapper byteDanceCreativeWordPackageMapper;
+
+    @Override
+    public Map<String, Object> getCreativeWordPackage(){
+        String accountId = "1649600126891015";
+        JSONObject data = new JSONObject();
+
+        //1:获取token
+        CtopOauthToken token = tokenService.getOauthTokenByAccountId(accountId);
+        Map<String, String> headers = new HashMap<>();
+        headers.put("Content-Type", "application/json");
+        headers.put("Access-Token", token.getAccessToken());
+
+        data.put("advertiser_id", token.getAccountId());
+//        data.put("creative_word_ids","");  不填,默认返回所有创意词包
+        String url = PropertiesUtils.getValue("bytedance_config", "bytedance_api_url") + PropertiesUtils.getValue("bytedance_config", "bytedance_v2_creative_word_select");
+        String result = HttpUtils.httpGetRequest(url,headers,data);
+        JSONObject jsonObject = JSONObject.parseObject(result);
+        saveCreativeWordPackageToDb(jsonObject);
+        return null;
+    }
+
+    public void saveCreativeWordPackageToDb(JSONObject result){
+        List<ByteDanceCreativeWordPackage> resultList = new ArrayList<ByteDanceCreativeWordPackage>();
+        Integer code = result.getInteger("code");
+        if(code != null && 0 == code){
+            JSONObject data = result.getJSONObject("data");
+            JSONArray dataJSONArray = data.getJSONArray("creative_word");
+            for (int i = 0 ; i < dataJSONArray.size() ; i++) {
+                JSONObject creativeWord = (JSONObject)dataJSONArray.get(i);
+                ByteDanceCreativeWordPackage byteDanceCreativeWordPackage = new ByteDanceCreativeWordPackage(creativeWord);
+                resultList.add(byteDanceCreativeWordPackage);
+            }
+            byteDanceCreativeWordPackageMapper.replaceBatch(resultList);
+        }
+    }
+
+}

+ 5 - 2
module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/material/service/impl/BytedanceVideoSlogenInfoServiceImpl.java

@@ -5,6 +5,7 @@ import cn.com.ctop.toutiao.modules.material.entity.BytedanceVideoSlogenInfo;
 import cn.com.ctop.toutiao.modules.material.mapper.BytedanceVideoSlogenInfoMapper;
 import cn.com.ctop.toutiao.modules.material.service.IBytedanceVideoSlogenInfoService;
 import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.stereotype.Service;
@@ -25,8 +26,10 @@ public class BytedanceVideoSlogenInfoServiceImpl extends ServiceImpl<BytedanceVi
             return;
         }
         for(int i=0;i<slogans.size();i++){
-            String slogan = slogans.getString(i);
-            BytedanceVideoSlogenInfo slogenInfo = new BytedanceVideoSlogenInfo(videoCode,slogan,userId);
+            JSONObject sloganObject = slogans.getJSONObject(i);
+            String title = sloganObject.getString("title");
+            String creativeWordIds = sloganObject.getJSONArray("creative_word_ids").toJSONString();
+            BytedanceVideoSlogenInfo slogenInfo = new BytedanceVideoSlogenInfo(videoCode,title,userId,creativeWordIds);
             this.save(slogenInfo);
         }
     }

+ 1 - 0
module-toutiao/src/main/resources/bytedance_config.properties

@@ -32,3 +32,4 @@ bytedance_v2_advertiser_report_get=/2/report/advertiser/get/
 bytedance_v2_campaign_report_get=/2/report/campaign/get/
 bytedance_v2_ad_report_get=/2/report/ad/get/
 bytedance_v2_ad_creative_get=/2/report/creative/get/
+bytedance_v2_creative_word_select=/2/tools/creative_word/select/