Bläddra i källkod

获取行业分类列表

yangzian 4 år sedan
förälder
incheckning
f6811e690a
14 ändrade filer med 286 tillägg och 62 borttagningar
  1. 14 4
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/common/api/vo/Result.java
  2. 4 1
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/config/shiro/ShiroConfig.java
  3. 10 11
      jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/advertise/dockapi/marketing.java
  4. 23 3
      jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/advertise/entity/AiBytedanceAdvertiserStrategy.java
  5. 1 1
      jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/advertise/entity/UpdAdStaOrCpaOrBudget.java
  6. 4 1
      jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/advertise/service/IAiBytedanceAdvertiserStrategyService.java
  7. 88 18
      jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/advertise/service/impl/AiBytedanceAdvertiserStrategyServiceImpl.java
  8. 36 0
      jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/advertise/vo/IndustryVo.java
  9. 6 0
      jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/common/constant/BytedanceConstant.java
  10. 29 5
      jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/common/service/impl/MaterialImageInfoServiceImpl.java
  11. 59 1
      jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/common/utils/Check.java
  12. 10 15
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/bytedance/advertise/controller/AiBytedanceAdvertiserStrategyController.java
  13. 1 1
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/SysRoleMapper.java
  14. 1 1
      jeecg-boot-module-system/src/main/resources/application-dev.yml

+ 14 - 4
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/common/api/vo/Result.java

@@ -113,15 +113,25 @@ public class Result<T> implements Serializable {
 		return r;
 	}
 
-	public static Result<Object> successMsg(String msg,Object data) {
-		Result<Object> r = new Result<Object>();
+	public static<T> Result<T> successMsg(String msg,T t) {
+		Result<T> r = new Result<T>();
 		r.setSuccess(true);
-		r.setCode(CommonConstant.SC_OK_200);
-		r.setResult(data);
+		r.setCode(CommonConstant.STATUS_NORMAL);
+		r.setResult(t);
 		r.setMessage(msg);
 		return r;
 	}
 
+	public static<T> Result<T> errorMsg(String msg) {
+		Result<T> r = new Result<T>();
+		r.setSuccess(true);
+		r.setCode(CommonConstant.STATUS_NORMAL);
+		//r.setResult(t);
+		r.setMessage(msg);
+		return r;
+	}
+
+
 	
 	public static Result<Object> error(String msg) {
 		return error(CommonConstant.SC_INTERNAL_SERVER_ERROR_500, msg);

+ 4 - 1
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/config/shiro/ShiroConfig.java

@@ -129,7 +129,10 @@ public class ShiroConfig {
         filterChainDefinitionMap.put("/vxeSocket/**", "anon");//JVxeTable无痕刷新示例
         filterChainDefinitionMap.put("/eoaSocket/**","anon");//我的聊天
 
-        filterChainDefinitionMap.put("/ctop/aiBytedanceAdvertiserStrategy/**","anon");//
+        filterChainDefinitionMap.put("/advertiser/aiBytedanceAdvertiserStrategy/**","anon");//
+        filterChainDefinitionMap.put("/file/**","anon");//
+
+        filterChainDefinitionMap.put("/sys/dict/**","anon");//
 
         //性能监控  TODO 存在安全漏洞泄露TOEKN(durid连接池也有)
         filterChainDefinitionMap.put("/actuator/**", "anon");

+ 10 - 11
jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/advertise/dockapi/marketing.java

@@ -24,9 +24,7 @@ import java.io.BufferedReader;
 import java.io.IOException;
 import java.io.InputStreamReader;
 import java.net.URI;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 /**
  * 头条-巨量引擎API 接口
@@ -447,7 +445,7 @@ public class marketing {
         //行动号召
         params.put("action_text", strategy.getCreativeCallToAction());
         //是否使用智能优选,true为使用,false为不使用
-        params.put("enable_personal_action", strategy.getCreativeEnablePersonalAction());
+        params.put("enable_personal_action", strategy.isCreativeEnablePersonalAction());
         //卡片标题
         params.put("product_description", strategy.getCreativeProductDescription());
         //推广卖点 长度6-9个字,最多可填10个卖点
@@ -990,19 +988,20 @@ public class marketing {
         params.put("level",type.equalsIgnoreCase(BytedanceConstant.LEVEL_AGENT) ? 1 : "");
         params = Check.jsonRemoveEmpty(params);
         JSONObject jsonObject = HttpUtils.bytedanceGetRequest(token.getAccessToken(),
-                PropertiesUtils.getValue("bytedance_config", "bytedance_v2_tools_industry_get"),
+                urlPath + PropertiesUtils.getValue("bytedance_config", "bytedance_v2_tools_industry_get"),
                 params);
         Integer code = jsonObject.getInteger("code");
         String message = jsonObject.getString("message");
         if (null == code || !code.equals(0)) {
             log.info("获取行业类别信息接口异常==》accountId:{},message:{}", token.getAccountId(), message);
-            return Result.error(message);
+            return Result.errorMsg(message);
         }
-        JSONArray data = jsonObject.getJSONObject("data").getJSONArray("custom_audience_list");
+        JSONArray data = jsonObject.getJSONObject("data").getJSONArray("list");
         if (null == data || data.isEmpty()) {
             log.info("行业类别信息不存在==》accountId:{},message:{}", token.getAccountId(), message);
-            return Result.error("人群包信息不存在");
+            return Result.errorMsg("行业类别信息不存在");
         }
+
         return Result.successMsg("行业类别信息获取成功",data);
     }
 
@@ -1038,12 +1037,12 @@ public class marketing {
         //小程序app_schema
         params.put("app_schema", convertQueryVo.getAppSchema());
         //附加创意类型
-        params.put("advanced_creative_type", convertQueryVo.getAdvancedCreativeType());
+        params.put("advanced_creative_type", convertQueryVo.getAdvancedCreativeType() == null ? "ATTACHED_CREATIVE_NONE" : convertQueryVo.getAdvancedCreativeType());
         //游戏预约场景
         params.put("marketing_scene",convertQueryVo.getMarketingScene());
         params = Check.jsonRemoveEmpty(params);
         JSONObject jsonObject = HttpUtils.bytedanceGetRequest(token.getAccessToken(),
-                PropertiesUtils.getValue("bytedance_config", "bytedance_v2_tools_ad_convert_query"),
+                urlPath + PropertiesUtils.getValue("bytedance_config", "bytedance_v2_tools_ad_convert_query"),
                 params);
         Integer code = jsonObject.getInteger("code");
         String message = jsonObject.getString("message");
@@ -1051,7 +1050,7 @@ public class marketing {
             log.info("查询广告计划可用转化目标接口异常==》accountId:{},message:{}", token.getAccountId(), message);
             return Result.error(message);
         }
-        JSONArray data = jsonObject.getJSONObject("data").getJSONArray("custom_audience_list");
+        JSONArray data = jsonObject.getJSONObject("data").getJSONArray("list");
         if (null == data || data.isEmpty()) {
             log.info("查询广告计划可用转化目标不存在==》accountId:{},message:{}", token.getAccountId(), message);
             return Result.error("人群包信息不存在");

+ 23 - 3
jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/advertise/entity/AiBytedanceAdvertiserStrategy.java

@@ -1,11 +1,13 @@
 package org.jeecg.modules.bytedance.advertise.entity;
 
 import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.Data;
 import org.jeecg.common.aspect.annotation.Dict;
 
+import java.io.Serializable;
 import java.math.BigDecimal;
 import java.util.Date;
 
@@ -245,20 +247,30 @@ public class AiBytedanceAdvertiserStrategy{
 	private Integer creativeIsCommentDisable;
 	/**商品卖点*/
 	private String creativeProductSellingPoints;
+	//商品卖点
+	@TableField(exist = false)
+	private String[] productSellingPoints;
+
 	/**商品描述-卡片标题*/
 	private String creativeProductDescription;
 	/**推广卡片的行动号召*/
 	private String creativeCallToAction;
 	/**是否使用智能优选*/
-	private Integer creativeEnablePersonalAction;
+	private boolean creativeEnablePersonalAction;
 	/**商品卡片id*/
 	private String creativeProductImageId;
+	//商品卡片md5
+	private String creativeProductImageCode;
 	/**创意展现方式*/
 	private String creativeDisplayMode;
 	/**创意分类*/
-	private Integer creativeThirdIndustryId;
+	private String creativeThirdIndustryId;
+
 	/**创意标签*/
-	private String creativeAdKeywords;
+	private Object creativeAdKeywords;
+	@TableField(exist = false)
+	private String[] adKeywords;
+
 	/**展示监测链接*/
 	private String creativeTrackUrl;
 	/**点击监测链接*/
@@ -277,4 +289,12 @@ public class AiBytedanceAdvertiserStrategy{
 	private Date updateTime;
 	/**创建人id*/
 	private String userId;
+
+	@TableField(exist = false)
+	private String logingUserId;
+
+	@TableField(exist = false)
+	private String imageUrl;
+
+
 }

+ 1 - 1
jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/advertise/entity/UpdAdStaOrCpaOrBudget.java

@@ -27,7 +27,7 @@ public class UpdAdStaOrCpaOrBudget implements Serializable {
     @ApiModelProperty(value = "计划id")
     private String adId;
     @ApiModelProperty(value = "出价")
-    private String bid;
+    private String bId;
     @ApiModelProperty(value = "预算")
     private String budget;
 

+ 4 - 1
jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/advertise/service/IAiBytedanceAdvertiserStrategyService.java

@@ -57,7 +57,7 @@ public interface IAiBytedanceAdvertiserStrategyService extends IService<AiByteda
      * @param type
      * @return
      */
-    Result getIndustryList(String accountId,String type);
+    Result getIndustryList(String accountId,String type) throws Exception;
 
     /**
      *  获取广告组
@@ -94,4 +94,7 @@ public interface IAiBytedanceAdvertiserStrategyService extends IService<AiByteda
      */
     Result getToolConvert(AdConvertQueryVo adConvertQueryVo);
 
+
+    Result<AiBytedanceAdvertiserStrategy> addBytedanceStrategy(AiBytedanceAdvertiserStrategy aiBytedanceAdvertiserStrategy);
+
 }

+ 88 - 18
jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/advertise/service/impl/AiBytedanceAdvertiserStrategyServiceImpl.java

@@ -2,6 +2,8 @@ package org.jeecg.modules.bytedance.advertise.service.impl;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.poi.ss.formula.functions.T;
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.util.DateUtils;
 import org.jeecg.modules.bytedance.advertise.dockapi.marketing;
@@ -16,19 +18,26 @@ import org.jeecg.modules.bytedance.advertise.service.IAiBytedanceAdvertiserStrat
 import org.jeecg.modules.bytedance.advertise.service.IByteDanceVideoInfoService;
 import org.jeecg.modules.bytedance.advertise.vo.AdConvertQueryVo;
 import org.jeecg.modules.bytedance.advertise.vo.AdGroupSearchVo;
+import org.jeecg.modules.bytedance.advertise.vo.IndustryVo;
 import org.jeecg.modules.bytedance.advertise.vo.PlanSearchVo;
 import org.jeecg.modules.bytedance.common.constant.BytedanceConstant;
 import org.jeecg.modules.bytedance.common.entity.CtopOauthToken;
+import org.jeecg.modules.bytedance.common.entity.MaterialImageInfo;
 import org.jeecg.modules.bytedance.common.entity.UserAllocation;
 import org.jeecg.modules.bytedance.common.service.ICtopOauthTokenService;
+import org.jeecg.modules.bytedance.common.service.IMaterialImageInfoService;
 import org.jeecg.modules.bytedance.common.service.IUserAllocationService;
+import org.jeecg.modules.bytedance.common.utils.Check;
 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;
+import java.util.spi.LocaleServiceProvider;
+import java.util.stream.Collectors;
 
 /**
  * 头条智能投放账户配置信息表
@@ -48,6 +57,8 @@ public class AiBytedanceAdvertiserStrategyServiceImpl extends ServiceImpl<AiByte
     @Autowired
     private IUserAllocationService userAllocationService;
 
+    @Autowired
+    private IMaterialImageInfoService materialImageInfoService;
 
 
     @Override
@@ -141,22 +152,22 @@ public class AiBytedanceAdvertiserStrategyServiceImpl extends ServiceImpl<AiByte
     public Result updStaOrCpaOrBudgetById(UpdAdStaOrCpaOrBudget updAdStaOrCpaOrBudget) {
         Result updResult = new Result();
         CtopOauthToken token = tokenService.getOauthTokenByAccountId(updAdStaOrCpaOrBudget.getAccountId());
-        List<Map<String,Object>> priceList = updAdStaOrCpaOrBudget.getList();
+        List<Map<String,Object>> priceList = new ArrayList<>();
         Map<String,Object> mapPrice = new HashMap<>();
         //1-修改出价
         if (BytedanceConstant.UPDTYPE_BID.equals(updAdStaOrCpaOrBudget.getType())) {
-            mapPrice.put("ad_id",updAdStaOrCpaOrBudget.getAdId());
-            mapPrice.put("bid",updAdStaOrCpaOrBudget.getBid());
+              mapPrice.put("ad_id",updAdStaOrCpaOrBudget.getAdId());
+            mapPrice.put("bid",updAdStaOrCpaOrBudget.getBId());
             priceList.add(mapPrice);
 
-            // api 更新计划出价
-            updResult = marketing.updatePlanBid(token,updAdStaOrCpaOrBudget.getAccountId(),priceList);
+            // api 更新计划出价 TODO
+         /* updResult = marketing.updatePlanBid(token,updAdStaOrCpaOrBudget.getAccountId(),priceList);
             if (!"200".equals(updResult.getCode())){
                 return Result.error(updResult.getMessage());
-            }
+            }*/
             // 修改 出价
             priceList.forEach(map-> {
-                aiBytedanceAdvertiserStrategyMapper.updCpaById(updAdStaOrCpaOrBudget.getId(),map.get("bid").toString());
+                aiBytedanceAdvertiserStrategyMapper.updCpaById(updAdStaOrCpaOrBudget.getId(),updAdStaOrCpaOrBudget.getBId());
             });
         }
         //2-修改预算
@@ -165,13 +176,13 @@ public class AiBytedanceAdvertiserStrategyServiceImpl extends ServiceImpl<AiByte
             mapPrice.put("budget",updAdStaOrCpaOrBudget.getBudget());
             priceList.add(mapPrice);
             // api 修改计划 预算
-            updResult = marketing.updatePlanBudget(token,updAdStaOrCpaOrBudget.getAccountId(),priceList);
+           /* updResult = marketing.updatePlanBudget(token,updAdStaOrCpaOrBudget.getAccountId(),priceList);
             if (!"200".equals(updResult.getCode())){
                 return Result.error(updResult.getMessage());
-            }
-            // 修改 预算
+            }*/
+            // 修改 预算 TODO
             priceList.forEach(map-> {
-                aiBytedanceAdvertiserStrategyMapper.updBudgetById(updAdStaOrCpaOrBudget.getId(),map.get("budget").toString());
+                aiBytedanceAdvertiserStrategyMapper.updBudgetById(updAdStaOrCpaOrBudget.getId(),updAdStaOrCpaOrBudget.getBudget());
             });
         }
         return Result.successMsg("修改"+(BytedanceConstant.UPDTYPE_BID.equals(updAdStaOrCpaOrBudget.getType()) ? "出价" : "预算")+"成功。", updResult.getResult());
@@ -188,16 +199,57 @@ public class AiBytedanceAdvertiserStrategyServiceImpl extends ServiceImpl<AiByte
      * @return: org.jeecg.common.api.vo.Result
      * @author: zianY
      */
-    public Result getIndustryList(String accountId,String type) {
+    public Result getIndustryList(String accountId,String type) throws Exception {
         CtopOauthToken token = tokenService.getOauthTokenByAccountId(accountId);
         if (null == token) {
             log.info("token获取失败=>accountId:{}", token.getAccountId());
             return Result.error("token获取失败====>>>>accountId:"+token.getAccountId());
         }
-        // 获取行业列表
-        Result industryList = marketing.getToolIndustryList(token,type);
-        log.error("行业列表=======>>>>>>>>>>>", industryList.getResult());
-        return Result.successMsg("获取行业列表成功。", industryList.getResult());
+        // api 获取行业列表
+        Result listResult = marketing.getToolIndustryList(token,type);
+        List<Map<String,Object>> industryListMap = (List<Map<String,Object>>) listResult.getResult();
+        // list map 数据格式 转 list entity 数据格式
+        List<IndustryVo> industryList = Check.convertListMap2ListBean(industryListMap,IndustryVo.class);
+        //所有行业分类 设置 父id
+        industryList.forEach(industryVo -> {
+            if ("1".equals(industryVo.getLevel())){
+                industryVo.setPId("0");
+            }
+            if ("2".equals(industryVo.getLevel())){
+                industryVo.setPId(industryVo.getFirst_industry_id());
+            }
+            if ("3".equals(industryVo.getLevel())){
+                industryVo.setPId(industryVo.getSecond_industry_id());
+            }
+        });
+
+        //行业分类 层级展示
+        List<Map<String,Object>> classificationVos = treeCategoryData(industryList,"0");
+        return Result.successMsg("获取行业列表成功。",classificationVos);
+
+    }
+
+    /**
+     * 递归 行业分类 tree 层级展示
+     * @param allList
+     * @param parentId
+     * @return
+     */
+    public List<Map<String,Object>> treeCategoryData(List<IndustryVo> allList, String parentId) {
+        List<Map<String,Object>> mapList = new ArrayList<>();
+        for (IndustryVo vo : allList) {
+            if (parentId.equals(vo.getPId())){
+                Map<String,Object> map = new HashMap();
+                map.put("industryId", vo.getIndustry_id());
+                map.put("industryName", vo.getIndustry_name());
+                map.put("level", vo.getLevel());
+                map.put("pId", vo.getPId());
+                map.put("children", treeCategoryData(allList,vo.getIndustry_id()));
+                mapList.add(map);
+            }
+        }
+        return mapList;
+
     }
 
 
@@ -360,8 +412,26 @@ public class AiBytedanceAdvertiserStrategyServiceImpl extends ServiceImpl<AiByte
             log.info("token获取失败=>accountId:{}", token.getAccountId());
             return Result.error("token获取失败====>>>>accountId:"+token.getAccountId());
         }
-        Result resultCampaign = marketing.getToolConvertQuery(token,adConvertQueryVo);
-        return Result.successMsg("查询广告计划可用转化目标成功。", resultCampaign.getResult());
+        return marketing.getToolConvertQuery(token,adConvertQueryVo);
+    }
+
+
+    public Result addBytedanceStrategy(AiBytedanceAdvertiserStrategy aiBytedanceAdvertiserStrategy) {
+
+        // 数据入库 string[] 转 string
+        //商品卖点
+        aiBytedanceAdvertiserStrategy.setCreativeProductSellingPoints(StringUtils.join(aiBytedanceAdvertiserStrategy.getProductSellingPoints(), ","));
+        //创意标签
+        aiBytedanceAdvertiserStrategy.setCreativeAdKeywords(StringUtils.join(aiBytedanceAdvertiserStrategy.getAdKeywords(), ","));
+
+        //添加素材信息
+        MaterialImageInfo imageInfo = new MaterialImageInfo();
+        imageInfo.setUrl(aiBytedanceAdvertiserStrategy.getImageUrl());
+        imageInfo.setUserId(aiBytedanceAdvertiserStrategy.getUserId());
+        materialImageInfoService.initImageCode(imageInfo);
+        aiBytedanceAdvertiserStrategyMapper.insert(aiBytedanceAdvertiserStrategy);
+
+        return Result.successMsg("新增成功。",aiBytedanceAdvertiserStrategy);
     }
 
 

+ 36 - 0
jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/advertise/vo/IndustryVo.java

@@ -0,0 +1,36 @@
+package org.jeecg.modules.bytedance.advertise.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author zianY
+ *查询广告计划可用转化目标 入参
+ */
+@Data
+public class IndustryVo implements Serializable {
+    //行业ID
+    private String industry_id;
+    //行业名称
+    private String industry_name;
+    //所在级别,1:一级行业、2:二级行业、3:三级行业
+    private String level;
+    //该行业的一级行业ID
+    private String first_industry_id;
+    //该行业的一级行业名称
+    private String first_industry_name;
+    //该行业的二级行业ID
+    private String second_industry_id;
+    //该行业的二级行业名称
+    private String second_industry_name;
+    //该行业的三级行业ID
+    private String third_industry_id;
+    //该行业的三级行业名称
+    private String third_industry_name;
+
+
+    //父id
+    private String pId;
+
+}

+ 6 - 0
jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/common/constant/BytedanceConstant.java

@@ -57,4 +57,10 @@ public class BytedanceConstant {
 
 
     public static final String UPLOAD_TYPE_BY_URL = "UPLOAD_BY_URL";
+
+    //图片类型
+    public static final String IMAGE_TYPE_ICON = "ICON";
+    public static final String IMAGE_TYPE_IMA = "IMAGE";
+
+
 }

+ 29 - 5
jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/common/service/impl/MaterialImageInfoServiceImpl.java

@@ -5,6 +5,7 @@ import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import lombok.extern.slf4j.Slf4j;
+import org.jeecg.modules.bytedance.common.constant.BytedanceConstant;
 import org.jeecg.modules.bytedance.common.entity.MaterialImageInfo;
 import org.jeecg.modules.bytedance.common.mapper.MaterialImageInfoMapper;
 import org.jeecg.modules.bytedance.common.service.IMaterialImageInfoService;
@@ -58,7 +59,7 @@ public class MaterialImageInfoServiceImpl extends ServiceImpl<MaterialImageInfoM
                     MaterialImageInfo materialImageInfo = new MaterialImageInfo();
                     materialImageInfo.setVideoId(videoId);
                     materialImageInfo.setMaterialDescribe(json.getString("materialDescribe"));
-                    materialImageInfo.setType("IMAGE");
+                    materialImageInfo.setType("ICON");
                     String url = "https:" + json.getString("url");
                     materialImageInfo.setUrl(url);
                     materialImageInfo.setMaterialName(json.getString("materialName"));
@@ -102,7 +103,7 @@ public class MaterialImageInfoServiceImpl extends ServiceImpl<MaterialImageInfoM
         Map<String, Object> result = new HashMap<>();
         QueryWrapper<MaterialImageInfo> queryWrapper = new QueryWrapper<>();
         queryWrapper.eq("code", code);
-        queryWrapper.eq("video_id", videoId);
+        queryWrapper.eq("type", BytedanceConstant.IMAGE_TYPE_ICON);
         queryWrapper.last("limit 1");
         MaterialImageInfo info = this.getOne(queryWrapper);
         if (null != info) {
@@ -131,12 +132,35 @@ public class MaterialImageInfoServiceImpl extends ServiceImpl<MaterialImageInfoM
 
     @Override
     public void initImageCode(MaterialImageInfo image) {
-        String localUrl = LoadFileUtil.downLoadFromUrl(image.getUrl(), downloadUrl);
-        String md5Code = null;
+        //String localUrl = LoadFileUtil.downLoadFromUrl(image.getUrl(), downloadUrl);
+        //String md5Code = null;
         try {
-            md5Code = MD5Util.getFileMd5(localUrl);
+            /*md5Code = MD5Util.getFileMd5(localUrl);
             image.setCode(md5Code);
             image.setUpdateTime(new Date());
+            this.saveOrUpdate(image);*/
+
+            image.setType("ICON");
+            String url = "https:" + image.getUrl();
+            image.setUrl(url);
+            image.setStatus(0);
+
+            String imaUrl = LoadFileUtil.downLoadFromUrl(url, downloadUrl);
+            String urlMd5 = MD5Util.getFileMd5(imaUrl);
+            image.setCode(urlMd5);
+            File picture = new File(imaUrl);
+            BufferedImage sourceImg = null;
+            try {
+                sourceImg = ImageIO.read(new FileInputStream(picture));
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+            String size = String.format("%.1f", picture.length() / 1024.0);
+            Integer width = sourceImg.getWidth();
+            Integer height = sourceImg.getHeight();
+            image.setSize(size);
+            image.setHeight(String.valueOf(height));
+            image.setWidth(String.valueOf(width));
             this.saveOrUpdate(image);
         } catch (Exception e) {
             e.printStackTrace();

+ 59 - 1
jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/common/utils/Check.java

@@ -3,8 +3,17 @@ package org.jeecg.modules.bytedance.common.utils;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.beanutils.BeanUtils;
 import org.apache.commons.lang3.StringUtils;
-
+import org.apache.poi.ss.formula.functions.T;
+import org.jeecg.modules.bytedance.advertise.vo.IndustryVo;
+
+import java.beans.BeanInfo;
+import java.beans.Introspector;
+import java.beans.PropertyDescriptor;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
 import java.util.Map;
@@ -83,6 +92,55 @@ public class Check {
     }
 
 
+
+    /**
+     * 将 Map对象转化为JavaBean
+     * @author loulan
+     * @param map
+     * @return Object对象
+     */
+    public static <T> T convertMap2Bean(Map map, Class T) throws Exception {
+        if(map==null || map.size()==0){
+            return null;
+        }
+        BeanInfo beanInfo = Introspector.getBeanInfo(T);
+        T bean = (T)T.newInstance();
+        PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
+        for (int i = 0, n = propertyDescriptors.length; i <n ; i++) {
+            PropertyDescriptor descriptor = propertyDescriptors[i];
+            String propertyName = descriptor.getName();
+            //将字母大写,这里先注掉,因为本例子直接读取名字匹配即可。
+            //String upperPropertyName = propertyName.toUpperCase();
+            if (map.containsKey(propertyName)) {
+                Object value = map.get(propertyName);
+                //这个方法不会报参数类型不匹配的错误。
+                BeanUtils.copyProperty(bean, propertyName, value);
+                //用这个方法对int等类型会报参数类型不匹配错误,需要我们手动判断类型进行转换,比较麻烦。
+                //descriptor.getWriteMethod().invoke(bean, value);
+                //用这个方法对时间等类型会报参数类型不匹配错误,也需要我们手动判断类型进行转换,比较麻烦。
+                //BeanUtils.setProperty(bean, propertyName, value);
+            }
+        }
+        return bean;
+    }
+
+    /**
+     * 将 List<Map>对象转化为List<JavaBean>
+     * @author loulan
+
+     * @return Object对象
+     */
+    public static <T> List<T> convertListMap2ListBean(List<Map<String,Object>> listMap, Class T) throws Exception {
+        List<T> beanList = new ArrayList<T>();
+        for(int i=0, n=listMap.size(); i<n; i++){
+            Map<String,Object> map = listMap.get(i);
+            T bean = convertMap2Bean(map,T);
+            beanList.add(bean);
+        }
+        return beanList;
+    }
+
+
     public static void main(String[] args) {
         JSONObject params = new JSONObject();
         params.put("advertiser_id", "123");

+ 10 - 15
jeecg-boot-module-system/src/main/java/org/jeecg/modules/bytedance/advertise/controller/AiBytedanceAdvertiserStrategyController.java

@@ -31,7 +31,7 @@ import java.util.List;
  * @version V1.0
  */
 @RestController
-@RequestMapping("/ctop/aiBytedanceAdvertiserStrategy")
+@RequestMapping("/advertiser/aiBytedanceAdvertiserStrategy")
 @Api(tags="头条智能投放账户配置信息表")
 @Slf4j
 public class AiBytedanceAdvertiserStrategyController {
@@ -58,12 +58,10 @@ public class AiBytedanceAdvertiserStrategyController {
 																	  HttpServletRequest req) {
 		Result<IPage<AiBytedanceAdvertiserStrategy>> result = new Result<>();
 		QueryWrapper<AiBytedanceAdvertiserStrategy> queryWrapper = QueryGenerator.initQueryWrapper(aiBytedanceAdvertiserStrategy, req.getParameterMap());
-		//获取登录用户信息
-		LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
 		//获取用户角色code
-		String roleCode = sysRoleService.getRoleCodeByUserId(loginUser.getId());
-		if(!BytedanceConstant.COMMON_ROLE_CODE_ADMIN.equals(roleCode)){
-			queryWrapper.eq("user_id", loginUser.getId());
+		String roleCode = sysRoleService.getRoleCodeByUserId(aiBytedanceAdvertiserStrategy.getLogingUserId());
+		if(null != roleCode && !BytedanceConstant.COMMON_ROLE_CODE_ADMIN.equals(roleCode)){
+			queryWrapper.eq("user_id", aiBytedanceAdvertiserStrategy.getLogingUserId());
 		}
 		Page<AiBytedanceAdvertiserStrategy> page = new Page<AiBytedanceAdvertiserStrategy>(pageNo, pageSize);
 		//查询
@@ -79,17 +77,14 @@ public class AiBytedanceAdvertiserStrategyController {
 	 * @return
 	 */
 	@ApiOperation(value="头条智能投放账户配置信息表-添加", notes="头条智能投放账户配置信息表-添加")
-	@PostMapping(value = "/add")
-	public Result<AiBytedanceAdvertiserStrategy> add(@RequestBody AiBytedanceAdvertiserStrategy aiBytedanceAdvertiserStrategy) {
-		Result<AiBytedanceAdvertiserStrategy> result = new Result<>();
+	@PostMapping(value = "/addBytedanceStrategy")
+	public Result addBytedanceStrategy(@RequestBody AiBytedanceAdvertiserStrategy aiBytedanceAdvertiserStrategy) {
 		try {
-			aiBytedanceAdvertiserStrategyService.save(aiBytedanceAdvertiserStrategy);
-			result.success("添加成功!");
+			return aiBytedanceAdvertiserStrategyService.addBytedanceStrategy(aiBytedanceAdvertiserStrategy);
 		} catch (Exception e) {
 			log.error(e.getMessage(),e);
-			result.error500("操作失败");
+			return Result.error("请求失败,请联系开发人员!");
 		}
-		return result;
 	}
 
 
@@ -202,7 +197,7 @@ public class AiBytedanceAdvertiserStrategyController {
 
 	@ApiOperation(value="头条智能投放账户配置-获取行业类别", notes="头条智能投放账户配置-获取行业类别")
 	@PostMapping(value = "/getIndustryList")
-	public Result getIndustryList(@RequestParam("accountId") String accountId, @RequestParam("type") String type) {
+	public Result getIndustryList(@RequestParam("accountId") String accountId, @RequestParam(value = "type",defaultValue = "ADVERTISER") String type) {
 		try {
 			return aiBytedanceAdvertiserStrategyService.getIndustryList(accountId,type);
 		}catch (Exception e){
@@ -235,7 +230,7 @@ public class AiBytedanceAdvertiserStrategyController {
 		try {
 			return aiBytedanceAdvertiserStrategyService.getCampaignPlan(accountId,planSearchVoList,pageNo,pageSize);
 		}catch (Exception e){
-			log.error("获取广告异常。",e.getMessage());
+			log.error("获取广告计划异常。",e.getMessage());
 			return Result.error("请求失败,请联系开发人员!");
 		}
 	}

+ 1 - 1
jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/SysRoleMapper.java

@@ -41,6 +41,6 @@ public interface SysRoleMapper extends BaseMapper<SysRole> {
      * @param userId
      * @return
      */
-    @Select("select c.role_code from sys_user left join sys_user_role b on a.id = b.user_id left join sys_role c on b.role_id = c.id where a.id = #{userId}")
+    @Select("select c.role_code from sys_user a left join sys_user_role b on a.id = b.user_id left join sys_role c on b.role_id = c.id where a.id = #{userId}")
     String getRoleCodeByUserId(@Param("userId") String userId);
 }

+ 1 - 1
jeecg-boot-module-system/src/main/resources/application-dev.yml

@@ -7,7 +7,7 @@ server:
     include-stacktrace: ALWAYS
     include-message: ALWAYS
   servlet:
-    context-path: /jeecg-boot
+    context-path: /bytedance-api
   compression:
     enabled: true
     min-response-size: 1024