Browse Source

fix on 2020.09.17

jiequan.bi 4 years ago
parent
commit
f5bcc9e58c
42 changed files with 1509 additions and 117 deletions
  1. 1 6
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/CreativeTitleController.java
  2. 16 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/MaterialImageInfoController.java
  3. 21 7
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/MaterialInfoController.java
  4. 0 6
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/MaterialUploadController.java
  5. 3 1
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/mapper/ProjectMemberMapper.java
  6. 13 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/mapper/xml/ProjectMemberMapper.xml
  7. 2 1
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/IProjectMemberService.java
  8. 0 1
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/impl/CreativeTitleServiceImpl.java
  9. 3 2
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/impl/ProjectMemberServiceImpl.java
  10. 16 0
      module-common/pom.xml
  11. 0 1
      module-common/src/main/java/cn/com/ctop/common/module/service/impl/FileInfoServiceImpl.java
  12. 217 0
      module-common/src/main/java/cn/com/ctop/common/module/utils/ParseInstallPackageUtil.java
  13. 1 0
      module-ctop/src/main/java/cn/com/ctop/manage/modules/material/service/IMaterialUploadService.java
  14. 1 5
      module-ctop/src/main/java/cn/com/ctop/manage/modules/material/service/impl/MaterialUploadServiceImpl.java
  15. 248 0
      module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/adlab/controller/CreateAdlabController.java
  16. 138 0
      module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/adlab/controller/CtopAdlabProjectController.java
  17. 157 0
      module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/adlab/controller/CtopAdlabProjectDetailController.java
  18. 28 0
      module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/adlab/controller/PlanAnalyzeReportController.java
  19. 50 0
      module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/adlab/entity/CtopAdlabProject.java
  20. 101 0
      module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/adlab/entity/CtopAdlabProjectDetail.java
  21. 11 0
      module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/adlab/mapper/CtopAdlabProjectDetailMapper.java
  22. 11 0
      module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/adlab/mapper/CtopAdlabProjectMapper.java
  23. 5 0
      module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/adlab/mapper/xml/CtopAdlabProjectDetailMapper.xml
  24. 5 0
      module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/adlab/mapper/xml/CtopAdlabProjectMapper.xml
  25. 6 4
      module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/adlab/service/ICreateProjectService.java
  26. 11 0
      module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/adlab/service/ICtopAdlabProjectDetailService.java
  27. 11 0
      module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/adlab/service/ICtopAdlabProjectService.java
  28. 2 2
      module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/adlab/service/IGetProjectService.java
  29. 16 0
      module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/adlab/service/IPlanAnalyzeReportService.java
  30. 3 1
      module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/adlab/service/IUpdateProjectService.java
  31. 77 64
      module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/adlab/service/impl/CreateProjectServiceImpl.java
  32. 15 0
      module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/adlab/service/impl/CtopAdlabProjectDetailServiceImpl.java
  33. 15 0
      module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/adlab/service/impl/CtopAdlabProjectServiceImpl.java
  34. 36 9
      module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/adlab/service/impl/GetProjectServiceImpl.java
  35. 85 0
      module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/adlab/service/impl/PlanAnalyzeReportServiceImpl.java
  36. 8 3
      module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/adlab/service/impl/UpdateProjectServiceImpl.java
  37. 7 0
      module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/tool/constants/QueryToolUrlConstant.java
  38. 36 3
      module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/tool/controller/ByteDanceQueryToolController.java
  39. 70 0
      module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/tool/controller/ParseInstallPackageController.java
  40. 13 0
      module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/tool/service/IByteDanceQueryMaterialInfoService.java
  41. 49 0
      module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/tool/service/impl/ByteDanceQueryMaterialInfoServiceImpl.java
  42. 1 1
      module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/tool/util/JsonObjectToJsonStringUtil.java

+ 1 - 6
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/CreativeTitleController.java

@@ -11,10 +11,10 @@ import org.springframework.web.bind.annotation.RestController;
 @RestController
 @RestController
 @RequestMapping("/ctop/creativeTitle/")
 @RequestMapping("/ctop/creativeTitle/")
 public class CreativeTitleController {
 public class CreativeTitleController {
+
     @Autowired
     @Autowired
     private ICreativeTitleService creativeTitleService;
     private ICreativeTitleService creativeTitleService;
 
 
-
     @GetMapping("getTitleLabel")
     @GetMapping("getTitleLabel")
     public Result<JSONArray> getTitleLabel() {
     public Result<JSONArray> getTitleLabel() {
         Result<JSONArray> result = new Result<>();
         Result<JSONArray> result = new Result<>();
@@ -24,7 +24,6 @@ public class CreativeTitleController {
         return result;
         return result;
     }
     }
 
 
-
     @GetMapping("titleSuggestion")
     @GetMapping("titleSuggestion")
     public Result<JSONArray> titleSuggestion(String firstCategory, String secondCategory, String keyword) {
     public Result<JSONArray> titleSuggestion(String firstCategory, String secondCategory, String keyword) {
         Result<JSONArray> result = new Result<>();
         Result<JSONArray> result = new Result<>();
@@ -34,8 +33,6 @@ public class CreativeTitleController {
         return result;
         return result;
     }
     }
 
 
-
-
     @GetMapping("titleSearch")
     @GetMapping("titleSearch")
     public Result<JSONArray> titleSearch(String firstCategory, String secondCategory, String keywords) {
     public Result<JSONArray> titleSearch(String firstCategory, String secondCategory, String keywords) {
         Result<JSONArray> result = new Result<>();
         Result<JSONArray> result = new Result<>();
@@ -44,6 +41,4 @@ public class CreativeTitleController {
         result.setResult(labelArr);
         result.setResult(labelArr);
         return result;
         return result;
     }
     }
-
-
 }
 }

+ 16 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/MaterialImageInfoController.java

@@ -106,6 +106,22 @@ public class MaterialImageInfoController {
 
 
     }
     }
 
 
+    @PostMapping(value = "/listByAccountIds")
+    public Result<IPage<MaterialImageInfo>> listByAccountIds(@RequestBody JSONObject requestBody) {
+        Result<IPage<MaterialImageInfo>> result = new Result<IPage<MaterialImageInfo>>();
+        QueryWrapper<MaterialImageInfo> queryWrapper = new QueryWrapper<>();
+        if (!Check.isNull(requestBody.getString("userId"))) {
+            queryWrapper.eq("user_id",requestBody.getString("userId"));
+            }
+        queryWrapper.orderByDesc(true,"create_time");
+        Page<MaterialImageInfo> page = new Page<>(requestBody.getInteger("pageNo"), requestBody.getInteger("pageSize"));
+        IPage<MaterialImageInfo> pageList = MaterialImageInfoService.page(page, queryWrapper);
+
+        result.setSuccess(true);
+        result.setResult(pageList);
+        return result;
+
+    }
 
 
     /**
     /**
      * 分页列表查询
      * 分页列表查询

+ 21 - 7
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/MaterialInfoController.java

@@ -1,6 +1,5 @@
 package org.jeecg.modules.ctop.controller;
 package org.jeecg.modules.ctop.controller;
 
 
-
 import cn.com.ctop.common.module.annotation.AutoLog;
 import cn.com.ctop.common.module.annotation.AutoLog;
 import cn.com.ctop.common.module.constant.CtopRoleCodeConstant;
 import cn.com.ctop.common.module.constant.CtopRoleCodeConstant;
 import cn.com.ctop.common.module.entity.*;
 import cn.com.ctop.common.module.entity.*;
@@ -205,7 +204,6 @@ public class MaterialInfoController {
                                                      @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
                                                      @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
                                                      HttpServletRequest req) {
                                                      HttpServletRequest req) {
 
 
-
         Result<IPage<MaterialInfo>> result = new Result<>();
         Result<IPage<MaterialInfo>> result = new Result<>();
         String materialName = materialInfo.getMaterialName();
         String materialName = materialInfo.getMaterialName();
         String startDate = materialInfo.getStartDate();
         String startDate = materialInfo.getStartDate();
@@ -292,11 +290,6 @@ public class MaterialInfoController {
                     material.setMediaId(project.getMediaId());
                     material.setMediaId(project.getMediaId());
                     material.setProjectName(project.getProjectName());
                     material.setProjectName(project.getProjectName());
                 }
                 }
-                /*JSONObject generalizationJson = materialInfoService.getGeneralizationInfo(material.getCode());
-                if (!Check.isNull(generalizationJson)) {
-                    material.setGeneralization(generaliz  ationJson);
-                }*/
-
                 QueryWrapper<MaterialImageInfo> imageInfoQueryWrapper = new QueryWrapper<>();
                 QueryWrapper<MaterialImageInfo> imageInfoQueryWrapper = new QueryWrapper<>();
                 imageInfoQueryWrapper.eq("video_id", material.getCode());
                 imageInfoQueryWrapper.eq("video_id", material.getCode());
                 imageInfoQueryWrapper.eq("status", 0);
                 imageInfoQueryWrapper.eq("status", 0);
@@ -653,5 +646,26 @@ public class MaterialInfoController {
         return result;
         return result;
     }
     }
 
 
+    /**
+     *  adlab 新加查询素材库接口
+     */
+    @PostMapping(value = "/listByAccountIds")
+    public Result<IPage<MaterialInfo>> listByAccountIds(@RequestBody JSONObject requestBody) {
 
 
+        Result<IPage<MaterialInfo>> result = new Result<>();
+        QueryWrapper<MaterialInfo> queryWrapper = new QueryWrapper<>();
+        if (!Check.isNull(requestBody.getString("userId"))) {
+            queryWrapper.eq("user_id",requestBody.getString("userId"));
+            List<Long> projects = memberService.getProjectByAccountIds(requestBody.getJSONArray("accountIds"));
+            if (!Check.isNull(projects)) {
+                queryWrapper.in("project_id", projects);
+            }
+        }
+        queryWrapper.orderByDesc(true,"create_time");
+        Page<MaterialInfo> page = new Page<>(requestBody.getInteger("pageNo"), requestBody.getInteger("pageSize"));
+        IPage<MaterialInfo> pageList = materialInfoService.page(page, queryWrapper);
+        result.setSuccess(true);
+        result.setResult(pageList);
+        return result;
+    }
 }
 }

+ 0 - 6
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/MaterialUploadController.java

@@ -48,7 +48,6 @@ public class MaterialUploadController {
             }
             }
             LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
             LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
 
 
-
             new Thread(() -> materialUploadService.uploadAccount(mediaId, materialArray, accountArray, sysUser.getId())).start();
             new Thread(() -> materialUploadService.uploadAccount(mediaId, materialArray, accountArray, sysUser.getId())).start();
             returnMap.put("success", true);
             returnMap.put("success", true);
             returnMap.put("message", "开始上传文件");
             returnMap.put("message", "开始上传文件");
@@ -58,11 +57,6 @@ public class MaterialUploadController {
             returnMap.put("success", false);
             returnMap.put("success", false);
             returnMap.put("message", e.getMessage());
             returnMap.put("message", e.getMessage());
         }
         }
-
-
         return returnMap;
         return returnMap;
-
     }
     }
-
-
 }
 }

+ 3 - 1
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/mapper/ProjectMemberMapper.java

@@ -1,5 +1,6 @@
 package org.jeecg.modules.ctop.mapper;
 package org.jeecg.modules.ctop.mapper;
 
 
+import com.alibaba.fastjson.JSONArray;
 import cn.com.ctop.common.module.entity.Project;
 import cn.com.ctop.common.module.entity.Project;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Param;
@@ -38,5 +39,6 @@ public interface ProjectMemberMapper extends BaseMapper<ProjectMember> {
 
 
     List<Long> getProjectByMap(@Param("userId") String userId);
     List<Long> getProjectByMap(@Param("userId") String userId);
 
 
-    List<Project> getProjectByUserId(@Param("userId")String userId);
+    List<Long> getProjectByAccountIds(@Param("accountIds")JSONArray accountIds);
+
 }
 }

+ 13 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/mapper/xml/ProjectMemberMapper.xml

@@ -160,4 +160,17 @@
             member.user_id = #{userId}
             member.user_id = #{userId}
     </select>
     </select>
 
 
+    <select id="getProjectByAccountIds" resultType="java.lang.Long">
+        SELECT
+            project_id
+        FROM
+            ctop_user_allocation
+        WHERE
+            account_id IN
+        <foreach collection="accountIds" item="item" separator=","
+                 open="(" close=")">
+            #{item}
+        </foreach>
+    </select>
+
 </mapper>
 </mapper>

+ 2 - 1
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/IProjectMemberService.java

@@ -2,6 +2,7 @@ package org.jeecg.modules.ctop.service;
 
 
 import cn.com.ctop.common.module.entity.Project;
 import cn.com.ctop.common.module.entity.Project;
 import cn.com.ctop.common.module.entity.SysUser;
 import cn.com.ctop.common.module.entity.SysUser;
+import com.alibaba.fastjson.JSONArray;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.baomidou.mybatisplus.extension.service.IService;
 import org.jeecg.modules.ctop.entity.ProjectMember;
 import org.jeecg.modules.ctop.entity.ProjectMember;
 
 
@@ -32,5 +33,5 @@ public interface IProjectMemberService extends IService<ProjectMember> {
 
 
     List<Long> getProjectByMap(String userId);
     List<Long> getProjectByMap(String userId);
 
 
-    List<Project> selectListByUserId(String userId);
+    List<Long> getProjectByAccountIds(JSONArray accountIds);
 }
 }

+ 0 - 1
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/impl/CreativeTitleServiceImpl.java

@@ -23,7 +23,6 @@ public class CreativeTitleServiceImpl implements ICreativeTitleService {
             if (!Check.isNull(dataJson)) {
             if (!Check.isNull(dataJson)) {
                 return dataJson.getJSONArray("title_label");
                 return dataJson.getJSONArray("title_label");
             }
             }
-
         }
         }
         return null;
         return null;
     }
     }

+ 3 - 2
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/impl/ProjectMemberServiceImpl.java

@@ -7,6 +7,7 @@ import cn.com.ctop.common.module.mapper.UserAllocationMapper;
 import cn.com.ctop.common.module.service.ISysRoleExtService;
 import cn.com.ctop.common.module.service.ISysRoleExtService;
 import cn.com.ctop.common.module.utils.Check;
 import cn.com.ctop.common.module.utils.Check;
 import cn.com.ctop.common.module.utils.CtopAdConstant;
 import cn.com.ctop.common.module.utils.CtopAdConstant;
+import com.alibaba.fastjson.JSONArray;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.apache.commons.lang.ArrayUtils;
 import org.apache.commons.lang.ArrayUtils;
@@ -195,8 +196,8 @@ public class ProjectMemberServiceImpl extends ServiceImpl<ProjectMemberMapper, P
     }
     }
 
 
     @Override
     @Override
-    public List<Project> selectListByUserId(String userId) {
-        return memberMapper.getProjectByUserId(userId);
+    public List<Long> getProjectByAccountIds(JSONArray accountIds) {
+        return memberMapper.getProjectByAccountIds(accountIds);
     }
     }
 
 
     //视频报表
     //视频报表

+ 16 - 0
module-common/pom.xml

@@ -84,6 +84,22 @@
             <artifactId>cos_api</artifactId>
             <artifactId>cos_api</artifactId>
             <version>5.6.25</version>
             <version>5.6.25</version>
         </dependency>
         </dependency>
+        <dependency>
+            <groupId>com.rabbitmq</groupId>
+            <artifactId>amqp-client</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.github.tony19</groupId>
+            <artifactId>apktool-lib</artifactId>
+            <version>1.4.4-3</version>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.googlecode.plist</groupId>
+            <artifactId>dd-plist</artifactId>
+            <version>1.16</version>
+            <scope>compile</scope>
+        </dependency>
 
 
     </dependencies>
     </dependencies>
 
 

+ 0 - 1
module-common/src/main/java/cn/com/ctop/common/module/service/impl/FileInfoServiceImpl.java

@@ -85,7 +85,6 @@ public class FileInfoServiceImpl extends ServiceImpl<FileInfoMapper, FileInfo> i
                 log.info("头条上传素材返回结果为空,返回信息:{},accountId:{}", jsonObject, accountId);
                 log.info("头条上传素材返回结果为空,返回信息:{},accountId:{}", jsonObject, accountId);
             }
             }
 
 
-
         } catch (Exception e) {
         } catch (Exception e) {
             log.error("头条上传视频文件失败,accountId:{}", accountId);
             log.error("头条上传视频文件失败,accountId:{}", accountId);
             log.error(e.getMessage(), e);
             log.error(e.getMessage(), e);

+ 217 - 0
module-common/src/main/java/cn/com/ctop/common/module/utils/ParseInstallPackageUtil.java

@@ -0,0 +1,217 @@
+package cn.com.ctop.common.module.utils;
+
+import brut.androlib.res.decoder.AXmlResourceParser;
+import com.dd.plist.NSDictionary;
+import com.dd.plist.NSString;
+import com.dd.plist.PropertyListParser;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.xmlpull.v1.XmlPullParser;
+
+import java.io.*;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipFile;
+import java.util.zip.ZipInputStream;
+
+import static android.util.TypedValue.*;
+
+/**
+ *  Created by JQ.bi on 2020.9.9
+ */
+public class ParseInstallPackageUtil {
+
+    private static final Logger log = LoggerFactory.getLogger(ParseInstallPackageUtil.class);
+
+    private static final float RADIX_MULTS[] = {0.00390625F, 3.051758E-005F, 1.192093E-007F, 4.656613E-010F};
+    private static final String DIMENSION_UNITS[] = {"px", "dip", "sp", "pt", "in", "mm", "", ""};
+    private static final String FRACTION_UNITS[] = {"%", "%p", "", "", "", "", "", ""};
+
+    /**
+     * 解析apk文件
+     *
+     * @param apkUrl apk的文件路径
+     * @return
+     */
+    public static Map<String, String> parseAPK(String apkUrl) {
+        Map<String, String> map = new HashMap();
+        ZipFile zipFile;
+        try {
+            zipFile = new ZipFile(apkUrl);
+            Enumeration<?> enumeration = zipFile.entries();
+            ZipEntry zipEntry = null;
+            while (enumeration.hasMoreElements()) {
+                zipEntry = (ZipEntry) enumeration.nextElement();
+                if (zipEntry.isDirectory()) {
+                } else {
+                    if ("androidmanifest.xml".equals(zipEntry.getName().toLowerCase())) {
+                        AXmlResourceParser parser = new AXmlResourceParser();
+                        parser.open(zipFile.getInputStream(zipEntry));
+                        while (true) {
+                            int type = parser.next();
+                            if (type == XmlPullParser.END_DOCUMENT) {
+                                break;
+                            }
+                            String name = parser.getName();
+                            if (null != name && name.toLowerCase().equals("manifest")) {
+                                for (int i = 0; i != parser.getAttributeCount(); i++) {
+                                    if ("versionName".equals(parser.getAttributeName(i))) {
+                                        String versionName = getAttributeValue(parser, i);
+                                        if (null == versionName) {
+                                            versionName = "";
+                                        }
+                                        map.put("versionName", versionName);
+                                    } else if ("package".equals(parser.getAttributeName(i))) {
+                                        String packageName = getAttributeValue(parser, i);
+                                        if (null == packageName) {
+                                            packageName = "";
+                                        }
+                                        map.put("package", packageName);
+                                    } else if ("versionCode".equals(parser.getAttributeName(i))) {
+                                        String versionCode = getAttributeValue(parser, i);
+                                        if (null == versionCode) {
+                                            versionCode = "";
+                                        }
+                                        map.put("versionCode", versionCode);
+                                    }
+                                }
+                                break;
+                            }
+                        }
+                    }
+
+                }
+            }
+            zipFile.close();
+        } catch (Exception e) {
+            log.info("APK解析异常!");
+        }
+        return map;
+    }
+
+    /**
+     * 解析ipa文件
+     *
+     * @param ipaUrl ipa的文件路径
+     * @return
+     */
+    public static Map<String, String> parseIpa(String ipaUrl) {
+        Map<String, String> map = new HashMap();
+        try {
+            File file = new File(ipaUrl);
+            InputStream is = new FileInputStream(file);
+            ZipInputStream zipIns = new ZipInputStream(is);
+            ZipEntry ze;
+            InputStream infoIs = null;
+            while ((ze = zipIns.getNextEntry()) != null) {
+                if (!ze.isDirectory()) {
+                    String name = ze.getName();
+                    if (null != name && name.toLowerCase().contains(".app/info.plist")) {
+                        ByteArrayOutputStream _copy = new ByteArrayOutputStream();
+                        int chunk = 0;
+                        byte[] data = new byte[1024];
+                        while (-1 != (chunk = zipIns.read(data))) {
+                            _copy.write(data, 0, chunk);
+                        }
+                        infoIs = new ByteArrayInputStream(_copy.toByteArray());
+                        break;
+                    }
+                }
+            }
+
+            NSDictionary rootDict = (NSDictionary) PropertyListParser.parse(infoIs);
+
+            // 如果想要查看有哪些key ,可以把下面注释放开
+//            for (String keyName : rootDict.allKeys()) {
+//                System.out.println(keyName + ":" + rootDict.get(keyName).toString());
+//            }
+
+            // 应用包名
+            NSString parameters = (NSString) rootDict.get("CFBundleIdentifier");
+            map.put("package", parameters.toString());
+            // 应用版本名
+            parameters = (NSString) rootDict.objectForKey("CFBundleShortVersionString");
+            map.put("versionName", parameters.toString());
+            // 应用版本号
+            parameters = (NSString) rootDict.get("CFBundleVersion");
+            map.put("versionCode", parameters.toString());
+
+            infoIs.close();
+            is.close();
+            zipIns.close();
+
+        } catch (Exception e) {
+            log.info("ipa包解析异常!");
+        }
+        return map;
+    }
+
+
+    private static String getAttributeValue(AXmlResourceParser parser, int index) {
+
+        int type = parser.getAttributeValueType(index);
+        int data = parser.getAttributeValueData(index);
+        if (type == TYPE_STRING) {
+            return parser.getAttributeValue(index);
+        }
+        if (type == TYPE_ATTRIBUTE) {
+            return String.format("?%s%08X", getPackage(data), data);
+        }
+        if (type == TYPE_REFERENCE) {
+            return String.format("@%s%08X", getPackage(data), data);
+        }
+        if (type == TYPE_FLOAT) {
+            return String.valueOf(Float.intBitsToFloat(data));
+        }
+        if (type == TYPE_INT_HEX) {
+            return String.format("0x%08X", data);
+        }
+        if (type == TYPE_INT_BOOLEAN) {
+            return data != 0 ? "true" : "false";
+        }
+        if (type == TYPE_DIMENSION) {
+            return Float.toString(complexToFloat(data)) + DIMENSION_UNITS[data & COMPLEX_UNIT_MASK];
+        }
+        if (type == TYPE_FRACTION) {
+            return Float.toString(complexToFloat(data)) + FRACTION_UNITS[data & COMPLEX_UNIT_MASK];
+        }
+        if (type >= TYPE_FIRST_COLOR_INT && type <= TYPE_LAST_COLOR_INT) {
+            return String.format("#%08X", data);
+        }
+        if (type >= TYPE_FIRST_INT && type <= TYPE_LAST_INT) {
+            return String.valueOf(data);
+        }
+        return String.format("<0x%X, type 0x%02X>", data, type);
+    }
+
+    private static String getPackage(int id) {
+        if (id >>> 24 == 1) {
+            return "android:";
+        }
+        return "";
+    }
+
+    private static float complexToFloat(int complex) {
+        return (float) (complex & 0xFFFFFF00) * RADIX_MULTS[(complex >> 4) & 3];
+    }
+
+    public static void printMap(Map<String, String> map) {
+        for (String key : map.keySet()) {
+            log.info(key + ":" + map.get(key));
+        }
+
+    }
+
+    public static void main(String[] args) {
+
+        System.out.println("************解析apk开始****************");
+        String apkUrl = "C:\\Users\\Arc\\Desktop\\YouYuan_1119929.apk";
+        Map<String, String> mapApk = parseAPK(apkUrl);
+        for (String key : mapApk.keySet()) {
+            System.out.println(key + ":" + mapApk.get(key));
+        }
+        System.out.println("************解析apk结束****************");
+    }
+}

+ 1 - 0
module-ctop/src/main/java/cn/com/ctop/manage/modules/material/service/IMaterialUploadService.java

@@ -12,4 +12,5 @@ public interface IMaterialUploadService {
      * @param accountArray
      * @param accountArray
      */
      */
     void uploadAccount(String mediaId, JSONArray materialArray, JSONArray accountArray,String userId);
     void uploadAccount(String mediaId, JSONArray materialArray, JSONArray accountArray,String userId);
+
 }
 }

+ 1 - 5
module-ctop/src/main/java/cn/com/ctop/manage/modules/material/service/impl/MaterialUploadServiceImpl.java

@@ -85,8 +85,6 @@ public class MaterialUploadServiceImpl implements IMaterialUploadService {
         } catch (Exception e) {
         } catch (Exception e) {
             e.printStackTrace();
             e.printStackTrace();
         }
         }
-
-
     }
     }
 
 
     private void touTiaoUpload(String mediaId, JSONArray materialArray, JSONArray accountArray, String userId) {
     private void touTiaoUpload(String mediaId, JSONArray materialArray, JSONArray accountArray, String userId) {
@@ -95,6 +93,7 @@ public class MaterialUploadServiceImpl implements IMaterialUploadService {
             MaterialInfo materialInfo = materialInfoMapper.selectById(materialId);
             MaterialInfo materialInfo = materialInfoMapper.selectById(materialId);
             if (Check.isNull(materialInfo) || Check.isNull(materialInfo.getUrl())) {
             if (Check.isNull(materialInfo) || Check.isNull(materialInfo.getUrl())) {
                 continue;
                 continue;
+
             }
             }
             try {
             try {
                 String url = materialInfo.getUrl();
                 String url = materialInfo.getUrl();
@@ -116,7 +115,6 @@ public class MaterialUploadServiceImpl implements IMaterialUploadService {
                                 } else if ("IMAGE".equals(materialInfo.getType())) {
                                 } else if ("IMAGE".equals(materialInfo.getType())) {
                                     fileInfoService.uploadImageToBytedance(String.valueOf(accountId), localUrl);
                                     fileInfoService.uploadImageToBytedance(String.valueOf(accountId), localUrl);
                                 }
                                 }
-
                             } catch (Exception e) {
                             } catch (Exception e) {
                                 e.printStackTrace();
                                 e.printStackTrace();
                             }
                             }
@@ -126,8 +124,6 @@ public class MaterialUploadServiceImpl implements IMaterialUploadService {
             } catch (Exception e) {
             } catch (Exception e) {
                 e.printStackTrace();
                 e.printStackTrace();
             }
             }
-
-
         }
         }
 
 
     }
     }

+ 248 - 0
module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/adlab/controller/CreateAdlabController.java

@@ -0,0 +1,248 @@
+package cn.com.ctop.toutiao.modules.adlab.controller;
+
+import cn.com.ctop.common.module.constant.CtopRoleCodeConstant;
+import cn.com.ctop.common.module.entity.CtopOauthToken;
+import cn.com.ctop.common.module.entity.MaterialImageInfo;
+import cn.com.ctop.common.module.entity.MaterialInfo;
+import cn.com.ctop.common.module.entity.Project;
+import cn.com.ctop.common.module.service.ICtopOauthTokenService;
+import cn.com.ctop.common.module.service.IMaterialInfoService;
+import cn.com.ctop.common.module.utils.Check;
+import cn.com.ctop.common.module.utils.JsonUtil;
+import cn.com.ctop.toutiao.modules.adlab.entity.CtopAdlabProjectDetail;
+import cn.com.ctop.toutiao.modules.adlab.service.ICreateProjectService;
+import cn.com.ctop.toutiao.modules.adlab.service.ICtopAdlabProjectDetailService;
+import cn.com.ctop.toutiao.modules.adlab.service.IGetProjectService;
+import cn.com.ctop.toutiao.modules.report.entity.ByteDanceCleanMaterialReport;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+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.jeecg.common.api.vo.Result;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.common.util.DateUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import java.text.ParseException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+@Slf4j
+@RestController
+@RequestMapping("/adlab/Project")
+public class CreateAdlabController {
+
+    @Autowired
+    ICreateProjectService createProjectService;
+    @Autowired
+    ICtopOauthTokenService ctopOauthTokenService;
+    @Autowired
+    ICtopAdlabProjectDetailService adlabProjectDetailService;
+    @Autowired
+    IGetProjectService getProjectService;
+    /**
+     *  投放管家创建项目第一步
+     */
+    @PostMapping(value = "/create")
+    public Result<List<JSONObject>> create(@RequestBody JSONObject requestBody){
+        Result<List<JSONObject>> result =new Result<>();
+        JSONArray accountIds=requestBody.getJSONArray("accountIds");
+        if(accountIds.isEmpty()){
+           result.error500("请选择账户再继续操作");
+        }else{
+            List<JSONObject> resultList=new ArrayList<>();
+            accountIds.forEach(accountId->{
+                //临时存每一个账户创建后的数据
+                JSONObject repoTemp=new JSONObject();
+                requestBody.put("accountId",accountId);
+                //查询该账户的token
+                CtopOauthToken token = ctopOauthTokenService.getTokenByAccountId((Long) accountId);
+                JSONObject repo = createProjectService.createGroup(token, requestBody);
+                if(repo.getInteger("code")==0){
+                    repoTemp.put("code",0);
+                    repoTemp.put("accountId",accountId);
+                    repoTemp.put("groupId",repo.getJSONObject("data").getLong("group_id"));
+                    //在此塞进去,前端后续会用来做判断条件
+                    repoTemp.put("name",requestBody.getString("name"));
+                    repoTemp.put("adTarget",requestBody.getString("adTarget"));
+                    repoTemp.put("deliveryRange",requestBody.getString("deliveryRange"));
+                    repoTemp.put("landingType",requestBody.getString("landingType"));
+                }else{
+                    repoTemp.put("code",500);
+                    repoTemp.put("message",repo.getString("message"));
+                    repoTemp.put("accountId",accountId);
+                }
+                resultList.add(repoTemp);
+            });
+            result.setResult(resultList);
+            result.setSuccess(true);
+        }
+        return result;
+    }
+    /**
+     *  投放管家创建项目第二步,设置项目定向信息
+     */
+    @PostMapping(value = "/setConvert")
+    public Result<List<JSONObject>> setConvert(@RequestBody JSONArray requestBody){
+        Result<List<JSONObject>> result =new Result<>();
+        List<JSONObject> resultList=new ArrayList<>();
+        if(requestBody.size()>0){
+            requestBody.forEach(convert->{
+                Map<String,Object> convert2Map=  (Map<String,Object>)convert;
+                JSONObject repoTemp=new JSONObject();
+                CtopOauthToken token = ctopOauthTokenService.getTokenByAccountId((Long) convert2Map.get("accountId"));
+                JSONObject repo = createProjectService.updateGroupConvert(token, convert2Map);
+                if(repo.getInteger("code")==0){
+                    repoTemp.put("code",0);
+                    repoTemp.put("accountId",convert2Map.get("accountId"));
+                    repoTemp.put("groupId",repo.getJSONObject("data").getLong("group_id"));
+                    repoTemp.put("name",convert2Map.get("name"));
+                    repoTemp.put("adTarget",convert2Map.get("adTarget"));
+                    repoTemp.put("deliveryRange",convert2Map.get("deliveryRange"));
+                    repoTemp.put("landingType",convert2Map.get("landingType"));
+                }else{
+                    repoTemp.put("code",500);
+                    repoTemp.put("message",repo.getString("message"));
+                    repoTemp.put("accountId",convert2Map.get("accountId"));
+                }
+                resultList.add(repoTemp);
+            });
+            result.setResult(resultList);
+            result.setSuccess(true);
+        }else {
+            result.error500("请选择需要设置转化信息的项目");
+        }
+        return result;
+    }
+    /**
+     *  投放管家创建项目第三步,设置项目定向信息
+     */
+    @PostMapping(value = "/setAudience")
+    public Result<List<JSONObject>> setAudience(@RequestBody JSONArray requestBody){
+
+        Result<List<JSONObject>> result =new Result<>();
+        List<JSONObject> resultList=new ArrayList<>();
+        if(requestBody.size()>0){
+            requestBody.forEach(convert->{
+                Map<String,Object> convert2Map= (Map<String,Object>)convert;
+                JSONObject repoTemp=new JSONObject();
+                CtopOauthToken token = ctopOauthTokenService.getTokenByAccountId((Long) convert2Map.get("accountId"));
+                JSONObject repo = createProjectService.updateGroupAudience(token, convert2Map);
+                 if(repo.getInteger("code")==0){
+                    repoTemp.put("code",0);
+                    repoTemp.put("accountId",convert2Map.get("accountId"));
+                    repoTemp.put("groupId",repo.getJSONObject("data").getLong("group_id"));
+                    repoTemp.put("name",convert2Map.get("name"));
+                    repoTemp.put("adTarget",convert2Map.get("adTarget"));
+                    repoTemp.put("deliveryRange",convert2Map.get("deliveryRange"));
+                    repoTemp.put("landingType",convert2Map.get("landingType"));
+                    repoTemp.put("inventoryType",convert2Map.get("inventoryType"));
+                }else{
+                    repoTemp.put("code",500);
+                    repoTemp.put("message",repo.getString("message"));
+                    repoTemp.put("accountId",convert2Map.get("accountId"));
+                }
+                resultList.add(repoTemp);
+            });
+            result.setResult(resultList);
+            result.setSuccess(true);
+        }else {
+            result.error500("请选择需要设置定向信息的项目");
+        }
+        return result;
+    }
+
+    /**
+     *  投放管家创建项目第四步,设置项目创意信息
+     */
+    @PostMapping(value = "/setCreative")
+    public Result<List<JSONObject>> setCreative(@RequestBody JSONArray requestBody){
+        Result<List<JSONObject>> result =new Result<>();
+        List<JSONObject> resultList=new ArrayList<>();
+        log.info(requestBody.toJSONString());
+        if(requestBody.size()>0){
+            requestBody.forEach(convert->{
+                Map<String,Object> convert2Map=  (Map<String,Object>)convert;
+                JSONObject repoTemp=new JSONObject();
+                CtopOauthToken token = ctopOauthTokenService.getTokenByAccountId((Long) convert2Map.get("accountId"));
+                JSONObject repo = createProjectService.updateGroupCreative(token, convert2Map);
+                log.info(repo.toJSONString());
+                if(repo.getInteger("code")==0){
+                    repoTemp.put("code",0);
+                    repoTemp.put("accountId",convert2Map.get("accountId"));
+                    repoTemp.put("groupId",repo.getJSONObject("data").getLong("group_id"));
+                    repoTemp.put("name",convert2Map.get("name"));
+                    repoTemp.put("adTarget",convert2Map.get("adTarget"));
+                    repoTemp.put("deliveryRange",convert2Map.get("deliveryRange"));
+                    repoTemp.put("landingType",convert2Map.get("landingType"));
+                    repoTemp.put("inventoryType",convert2Map.get("inventoryType"));
+                }else{
+                    repoTemp.put("code",500);
+                    repoTemp.put("message",repo.getString("message"));
+                    repoTemp.put("accountId",convert2Map.get("accountId"));
+                }
+                resultList.add(repoTemp);
+            });
+            result.setResult(resultList);
+            result.setSuccess(true);
+        }else {
+            result.error500("请选择需要设置定向信息的项目");
+        }
+        return result;
+    }
+
+    /**
+     *  投放管家创建项目第五步,设置项目预算信息
+     */
+    @PostMapping(value = "/setBudget")
+    public Result<List<JSONObject>> setBudget(@RequestBody JSONObject requestBody){
+
+        Result<List<JSONObject>> result =new Result<>();
+        JSONArray accountIds=requestBody.getJSONArray("accountIds");
+        if(accountIds.isEmpty()){
+            result.error500("请选择账户再继续操作");
+        }else{
+            List<JSONObject> resultList=new ArrayList<>();
+            accountIds.forEach(accountId->{
+                //临时存每一个账户创建后的数据
+                JSONObject repoTemp=new JSONObject();
+                requestBody.put("accountId",accountId);
+                //查询该账户的token
+                CtopOauthToken token = ctopOauthTokenService.getTokenByAccountId((Long) accountId);
+                JSONObject repo = createProjectService.updateGroupBudget(token, requestBody);
+                if(repo.getInteger("code")==0){
+                    repoTemp.put("code",0);
+                    repoTemp.put("accountId",accountId);
+                    repoTemp.put("groupId",repo.getJSONObject("data").getLong("group_id"));
+                }else{
+                    repoTemp.put("code",500);
+                    repoTemp.put("message",repo.getString("message"));
+                    repoTemp.put("accountId",accountId);
+                }
+                resultList.add(repoTemp);
+            });
+            //设置预算信息完成后,回写数据到数据库
+            putStorage(resultList);
+            result.setResult(resultList);
+            result.setSuccess(true);
+        }
+        return result;
+    }
+
+    /**
+     * 新建投放管家项目入库
+     */
+    private void putStorage(List<JSONObject> params){
+        params.forEach(it->{
+            JSONObject group = getProjectService.getGroup(ctopOauthTokenService.getTokenByAccountId(it.getLong("accountId")), it.getLong("accountId"), it.getLong("groupId"));
+            if(group.getInteger("code")==0){
+                adlabProjectDetailService.save((CtopAdlabProjectDetail) group.getJSONObject("data").get("group_info"));
+            }
+        });
+    }
+}

+ 138 - 0
module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/adlab/controller/CtopAdlabProjectController.java

@@ -0,0 +1,138 @@
+package cn.com.ctop.toutiao.modules.adlab.controller;
+
+import java.util.Arrays;
+
+import javax.servlet.http.HttpServletRequest;
+
+import cn.com.ctop.common.module.annotation.AutoLog;
+import cn.com.ctop.toutiao.modules.adlab.entity.CtopAdlabProject;
+import cn.com.ctop.toutiao.modules.adlab.service.ICtopAdlabProjectService;
+import com.alibaba.fastjson.JSONArray;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.jeecg.common.api.vo.Result;
+
+import org.jeecg.common.system.query.QueryGenerator;
+import lombok.extern.slf4j.Slf4j;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import io.swagger.annotations.ApiOperation;
+
+ /**
+ * 投放管家项目列表
+ */
+@Slf4j
+@RestController
+@RequestMapping("/adlab/ctopAdlabProject")
+public class CtopAdlabProjectController {
+	@Autowired
+	private ICtopAdlabProjectService ctopAdlabProjectService;
+
+	/**
+	  * 分页列表查询
+	 */
+	@GetMapping(value = "/list")
+	public Result<IPage<CtopAdlabProject>> queryPageList(CtopAdlabProject ctopAdlabProject,
+														 @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+														 @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+														 HttpServletRequest req) {
+		Result<IPage<CtopAdlabProject>> result = new Result<>();
+		QueryWrapper<CtopAdlabProject> queryWrapper = QueryGenerator.initQueryWrapper(ctopAdlabProject, req.getParameterMap());
+		Page<CtopAdlabProject> page = new Page<>(pageNo, pageSize);
+		IPage<CtopAdlabProject> pageList = ctopAdlabProjectService.page(page, queryWrapper);
+		result.setSuccess(true);
+		result.setResult(pageList);
+		return result;
+	}
+
+	/**
+	  *   添加
+	 */
+	@PostMapping(value = "/add")
+	public Result<CtopAdlabProject> add(@RequestBody CtopAdlabProject ctopAdlabProject) {
+		Result<CtopAdlabProject> result = new Result<>();
+		try {
+			ctopAdlabProjectService.save(ctopAdlabProject);
+			result.success("添加成功!");
+		} catch (Exception e) {
+			log.error(e.getMessage(),e);
+			result.error500("操作失败");
+		}
+		return result;
+	}
+
+	/**
+	  *  编辑
+	 */
+	@PostMapping(value = "/edit")
+	public Result<CtopAdlabProject> edit(@RequestParam JSONArray accountIds,
+										 @RequestParam JSONArray groupIds,
+										 @RequestParam String optStatus) {
+		Result<CtopAdlabProject> result = new Result<CtopAdlabProject>();
+
+
+		return result;
+	}
+
+	/**
+	  *   通过id删除
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "投放管家项目列表-通过id删除")
+	@ApiOperation(value="投放管家项目列表-通过id删除", notes="投放管家项目列表-通过id删除")
+	@DeleteMapping(value = "/delete")
+	public Result<?> delete(@RequestParam(name="id",required=true) String id) {
+		try {
+			ctopAdlabProjectService.removeById(id);
+		} catch (Exception e) {
+			log.error("删除失败",e.getMessage());
+			return Result.error("删除失败!");
+		}
+		return Result.ok("删除成功!");
+	}
+
+	/**
+	  *  批量删除
+	 * @param ids
+	 * @return
+	 */
+	@AutoLog(value = "投放管家项目列表-批量删除")
+	@ApiOperation(value="投放管家项目列表-批量删除", notes="投放管家项目列表-批量删除")
+	@DeleteMapping(value = "/deleteBatch")
+	public Result<CtopAdlabProject> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+		Result<CtopAdlabProject> result = new Result<>();
+		if(ids==null || "".equals(ids.trim())) {
+			result.error500("参数不识别!");
+		}else {
+			this.ctopAdlabProjectService.removeByIds(Arrays.asList(ids.split(",")));
+			result.success("删除成功!");
+		}
+		return result;
+	}
+
+	/**
+	  * 通过id查询
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "投放管家项目列表-通过id查询")
+	@ApiOperation(value="投放管家项目列表-通过id查询", notes="投放管家项目列表-通过id查询")
+	@GetMapping(value = "/queryById")
+	public Result<CtopAdlabProject> queryById(@RequestParam(name="id",required=true) String id) {
+		Result<CtopAdlabProject> result = new Result<>();
+		CtopAdlabProject ctopAdlabProject = ctopAdlabProjectService.getById(id);
+		if(ctopAdlabProject==null) {
+			result.error500("未找到对应实体");
+		}else {
+			result.setResult(ctopAdlabProject);
+			result.setSuccess(true);
+		}
+		return result;
+	}
+
+
+
+}

+ 157 - 0
module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/adlab/controller/CtopAdlabProjectDetailController.java

@@ -0,0 +1,157 @@
+package cn.com.ctop.toutiao.modules.adlab.controller;
+
+import java.util.Arrays;
+import java.util.Map;
+
+import javax.servlet.http.HttpServletRequest;
+
+import cn.com.ctop.common.module.service.ICtopOauthTokenService;
+import cn.com.ctop.toutiao.modules.adlab.entity.CtopAdlabProjectDetail;
+import cn.com.ctop.toutiao.modules.adlab.service.ICtopAdlabProjectDetailService;
+import cn.com.ctop.toutiao.modules.adlab.service.IUpdateProjectService;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.jeecg.common.api.vo.Result;
+
+import lombok.extern.slf4j.Slf4j;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+ /**
+ * 投放管家项目详情
+ */
+@Slf4j
+@RestController
+@RequestMapping("/adlab/ctopAdlabProjectDetail")
+public class CtopAdlabProjectDetailController {
+
+	@Autowired
+	private ICtopAdlabProjectDetailService ctopAdlabProjectDetailService;
+
+	@Autowired
+	private IUpdateProjectService updateProjectService;
+
+	@Autowired
+	private ICtopOauthTokenService oauthTokenService;
+
+	/**
+	  * 分页列表查询
+	 */
+	@PostMapping(value = "/list")
+	public Result<IPage<CtopAdlabProjectDetail>> queryPageList(@RequestBody JSONObject requestBody,
+															   @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+															   @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+															   HttpServletRequest req) {
+		Result<IPage<CtopAdlabProjectDetail>> result = new Result<>();
+		QueryWrapper<CtopAdlabProjectDetail> queryWrapper = new QueryWrapper<>();
+		queryWrapper.eq("user_id",requestBody.getString("userId"));
+		if(!requestBody.getString("name").isEmpty()){
+			queryWrapper.eq("name",requestBody.getString("name"));
+		}
+		if(!requestBody.getJSONArray("accountIds").isEmpty()){
+			queryWrapper.in("account_id",requestBody.getJSONArray("accountIds"));
+		}
+		if(requestBody.getInteger("optStatus")!=0){
+			queryWrapper.eq("opt_status",requestBody.getInteger("optStatus"));
+		}
+		if(!requestBody.getJSONArray("createTime").isEmpty()){
+			queryWrapper.ge("create_time",requestBody.getJSONArray("createTime").get(0));
+			queryWrapper.ne("create_time",requestBody.getJSONArray("createTime").get(1));
+		}
+		Page<CtopAdlabProjectDetail> page = new Page<>(pageNo, pageSize);
+		IPage<CtopAdlabProjectDetail> pageList = ctopAdlabProjectDetailService.page(page, queryWrapper);
+		result.setSuccess(true);
+		result.setResult(pageList);
+		return result;
+	}
+
+	/**
+	  *   添加
+	 */
+	@PostMapping(value = "/add")
+	public Result<CtopAdlabProjectDetail> add(@RequestBody CtopAdlabProjectDetail ctopAdlabProjectDetail) {
+		Result<CtopAdlabProjectDetail> result = new Result<>();
+		try {
+			ctopAdlabProjectDetailService.save(ctopAdlabProjectDetail);
+			result.success("添加成功!");
+		} catch (Exception e) {
+			log.error(e.getMessage(),e);
+			result.error500("操作失败");
+		}
+		return result;
+	}
+
+	/**
+	  *  编辑
+	 */
+	@PostMapping(value = "/edit")
+	public Result<CtopAdlabProjectDetail> edit(@RequestBody JSONArray requestBody) {
+		Result<CtopAdlabProjectDetail> result = new Result<>();
+		CtopAdlabProjectDetail ctopAdlabProjectDetail=new CtopAdlabProjectDetail();
+		ctopAdlabProjectDetail.setOptStatus((String) ((Map)requestBody.get(0)).get("optStatus"));
+		requestBody.forEach(it->{
+			Map<String,Object> temp= (Map<String,Object>)it;
+			//先更新头条后台数据
+			JSONObject repo = updateProjectService.updateGroupStatus(oauthTokenService.getTokenByAccountId((Long) temp.get("accountId")), temp);
+			QueryWrapper<CtopAdlabProjectDetail> queryWrapper= new QueryWrapper<>();
+			queryWrapper.eq("account_id",temp.get("accountId"));
+			queryWrapper.eq("group_id",temp.get("groupId"));
+			if(repo.getInteger("code")==0){
+				ctopAdlabProjectDetailService.update(ctopAdlabProjectDetail,queryWrapper);
+			}else {
+				result.error500(repo.getString("message"));
+			}
+		});
+		return result;
+	}
+
+	/**
+	  *   通过id删除
+	 */
+	@DeleteMapping(value = "/delete")
+	public Result<?> delete(@RequestParam(name="id",required=true) String id) {
+		try {
+			ctopAdlabProjectDetailService.removeById(id);
+		} catch (Exception e) {
+			log.error("删除失败",e.getMessage());
+			return Result.error("删除失败!");
+		}
+		return Result.ok("删除成功!");
+	}
+
+	/**
+	  *  批量删除
+	 */
+	@DeleteMapping(value = "/deleteBatch")
+	public Result<CtopAdlabProjectDetail> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+		Result<CtopAdlabProjectDetail> result = new Result<>();
+		if(ids==null || "".equals(ids.trim())) {
+			result.error500("参数不识别!");
+		}else {
+			this.ctopAdlabProjectDetailService.removeByIds(Arrays.asList(ids.split(",")));
+			result.success("删除成功!");
+		}
+		return result;
+	}
+
+	/**
+	  * 通过id查询
+	 */
+	@GetMapping(value = "/queryById")
+	public Result<CtopAdlabProjectDetail> queryById(@RequestParam(name="id",required=true) String id) {
+		Result<CtopAdlabProjectDetail> result = new Result<>();
+		CtopAdlabProjectDetail ctopAdlabProjectDetail = ctopAdlabProjectDetailService.getById(id);
+		if(ctopAdlabProjectDetail==null) {
+			result.error500("未找到对应实体");
+		}else {
+			result.setResult(ctopAdlabProjectDetail);
+			result.setSuccess(true);
+		}
+		return result;
+	}
+
+}

+ 28 - 0
module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/adlab/controller/PlanAnalyzeReportController.java

@@ -0,0 +1,28 @@
+package cn.com.ctop.toutiao.modules.adlab.controller;
+
+import cn.com.ctop.toutiao.modules.adlab.service.IPlanAnalyzeReportService;
+import com.alibaba.fastjson.JSONObject;
+import lombok.extern.slf4j.Slf4j;
+import org.jeecg.common.api.vo.Result;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+@Slf4j
+@RestController
+@RequestMapping("/adlab/planAnalyze")
+public class PlanAnalyzeReportController {
+
+    @Autowired
+    IPlanAnalyzeReportService planAnalyzeReportService;
+    
+    @GetMapping("/getList")
+    public Result<List<JSONObject>> getPlanAnalyze(@RequestBody JSONObject requestBody){
+        return null;
+    }
+
+}

+ 50 - 0
module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/adlab/entity/CtopAdlabProject.java

@@ -0,0 +1,50 @@
+package cn.com.ctop.toutiao.modules.adlab.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+/**
+ * 投放管家项目列表
+ */
+@Data
+@TableName("ctop_adlab_project")
+public class CtopAdlabProject {
+    
+	/**id*/
+	@TableId(type = IdType.AUTO)
+	private Long id;
+	/**项目名称*/
+	private String name;
+	/**项目操作状态*/
+	private String optStatus;
+	/**创建该项目时使用的App ID*/
+	private String appId;
+	/**出价*/
+	private java.math.BigDecimal bid;
+	/**预算*/
+	private java.math.BigDecimal budget;
+	/**预算模式*/
+	private String budgetMode;
+	/**广告组ID*/
+	private Integer campaignId;
+	/**项目组合状态*/
+	private String comboStatus;
+	/**赔付状态*/
+	private String compensation;
+	/**开始时间*/
+	private String startTime;
+	/**结束时间*/
+	private String endTime;
+	/**异常列表*/
+	private Object errorReason;
+	/**投放管家项目场景*/
+	private String scenario;
+	/**项目自动暂停规则的执行状态*/
+	private String stopStage;
+	/**项目当前是否支持复制*/
+	private Integer supportCopy;
+	/**项目系统状态*/
+	private String systemStatus;
+}

+ 101 - 0
module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/adlab/entity/CtopAdlabProjectDetail.java

@@ -0,0 +1,101 @@
+package cn.com.ctop.toutiao.modules.adlab.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+
+import lombok.Data;
+
+/**
+ * 投放管家项目详情
+ */
+@Data
+@TableName("ctop_adlab_project_detail")
+public class CtopAdlabProjectDetail {
+    
+	/**id*/
+	@TableId(type = IdType.AUTO)
+	private Long id;
+	/**name*/
+	private String name;
+	/**userId*/
+	private String userId;
+	/**accountId*/
+	private Long accountId;
+	/**campaignId*/
+	private Long campaignId;
+	/**scenario*/
+	private String scenario;
+	/**deliveryRange*/
+	private String deliveryRange;
+	/**status*/
+	private String status;
+	/**optStatus*/
+	private String optStatus;
+	/**statusName*/
+	private String statusName;
+	/**step*/
+	private Integer step;
+	/**platform*/
+	private String platform;
+	/**downloadType*/
+	private String downloadType;
+	/**appType*/
+	private String appType;
+	/**url*/
+	private String url;
+	/**webUrl*/
+	private String webUrl;
+	/**package*/
+	private String adlabPackage;
+	/**convertName*/
+	private String convertName;
+	/**convertId*/
+	private Integer convertId;
+	/**convertMode*/
+	private String convertMode;
+	/**inventoryType*/
+	private Object inventoryType;
+	/**unionVideoType*/
+	private String unionVideoType;
+	/**audience*/
+	private Object audience;
+	/**audiencePackageId*/
+	private Integer audiencePackageId;
+	/**adCreative*/
+	private Object adCreative;
+	/**startTime*/
+	private String startTime;
+	/**endTime*/
+	private String endTime;
+	/**weekTime*/
+	private Object weekTime;
+	/**bid*/
+	private java.math.BigDecimal bid;
+	/**budget*/
+	private java.math.BigDecimal budget;
+	/**budgetMode*/
+	private String budgetMode;
+	/**compensation*/
+	private String compensation;
+	/**deepBid*/
+	private java.math.BigDecimal deepBid;
+	/**deepBidType*/
+	private String deepBidType;
+	/**deepExternalAction*/
+	private String deepExternalAction;
+	/**stopStage*/
+	private String stopStage;
+	/**targetMode*/
+	private String targetMode;
+	/**downloadMode*/
+	private String downloadMode;
+	/**openUrl*/
+	private String openUrl;
+	/**inventoryTypes*/
+	private Object inventoryTypes;
+	/**adTarget*/
+	private String adTarget;
+	/**landingType*/
+	private String landingType;
+}

+ 11 - 0
module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/adlab/mapper/CtopAdlabProjectDetailMapper.java

@@ -0,0 +1,11 @@
+package cn.com.ctop.toutiao.modules.adlab.mapper;
+
+import cn.com.ctop.toutiao.modules.adlab.entity.CtopAdlabProjectDetail;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * 投放管家项目详情
+ */
+public interface CtopAdlabProjectDetailMapper extends BaseMapper<CtopAdlabProjectDetail> {
+
+}

+ 11 - 0
module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/adlab/mapper/CtopAdlabProjectMapper.java

@@ -0,0 +1,11 @@
+package cn.com.ctop.toutiao.modules.adlab.mapper;
+
+import cn.com.ctop.toutiao.modules.adlab.entity.CtopAdlabProject;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * 投放管家项目列表
+ */
+public interface CtopAdlabProjectMapper extends BaseMapper<CtopAdlabProject> {
+
+}

+ 5 - 0
module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/adlab/mapper/xml/CtopAdlabProjectDetailMapper.xml

@@ -0,0 +1,5 @@
+<?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.adlab.mapper.CtopAdlabProjectDetailMapper">
+
+</mapper>

+ 5 - 0
module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/adlab/mapper/xml/CtopAdlabProjectMapper.xml

@@ -0,0 +1,5 @@
+<?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.adlab.mapper.CtopAdlabProjectMapper">
+
+</mapper>

+ 6 - 4
module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/adlab/service/ICreateProjectService.java

@@ -3,21 +3,23 @@ package cn.com.ctop.toutiao.modules.adlab.service;
 import cn.com.ctop.common.module.entity.CtopOauthToken;
 import cn.com.ctop.common.module.entity.CtopOauthToken;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.JSONObject;
 
 
+import java.util.Map;
+
 public interface ICreateProjectService {
 public interface ICreateProjectService {
 
 
     //新建投放管家项目
     //新建投放管家项目
     JSONObject createGroup(CtopOauthToken oauthToken,JSONObject requestBody);
     JSONObject createGroup(CtopOauthToken oauthToken,JSONObject requestBody);
 
 
     //设置项目转化信息
     //设置项目转化信息
-    JSONObject updateGroupConvert(CtopOauthToken oauthToken, JSONObject requestBody);
+    JSONObject updateGroupConvert(CtopOauthToken oauthToken, Map<String,Object> requestBody);
 
 
     //设置项目定向信息
     //设置项目定向信息
-    JSONObject updateGroupAudience(CtopOauthToken oauthToken,JSONObject requestBody);
+    JSONObject updateGroupAudience(CtopOauthToken oauthToken,Map<String,Object> requestBody);
 
 
     //设置项目创意信息
     //设置项目创意信息
-    JSONObject updateGroupCreative(CtopOauthToken oauthToken,JSONObject requestBody);
+    JSONObject updateGroupCreative(CtopOauthToken oauthToken,Map<String,Object> requestBody);
 
 
     //设置项目预算信息
     //设置项目预算信息
-    JSONObject updateGroupBudget(CtopOauthToken oauthToken,JSONObject requestBody);
+    JSONObject updateGroupBudget(CtopOauthToken oauthToken,Map<String,Object> requestBody);
 
 
 }
 }

+ 11 - 0
module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/adlab/service/ICtopAdlabProjectDetailService.java

@@ -0,0 +1,11 @@
+package cn.com.ctop.toutiao.modules.adlab.service;
+
+import cn.com.ctop.toutiao.modules.adlab.entity.CtopAdlabProjectDetail;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * @Description: 投放管家项目详情
+ */
+public interface ICtopAdlabProjectDetailService extends IService<CtopAdlabProjectDetail> {
+
+}

+ 11 - 0
module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/adlab/service/ICtopAdlabProjectService.java

@@ -0,0 +1,11 @@
+package cn.com.ctop.toutiao.modules.adlab.service;
+
+import cn.com.ctop.toutiao.modules.adlab.entity.CtopAdlabProject;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * @Description: 投放管家项目列表
+ */
+public interface ICtopAdlabProjectService extends IService<CtopAdlabProject> {
+
+}

+ 2 - 2
module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/adlab/service/IGetProjectService.java

@@ -6,10 +6,10 @@ import com.alibaba.fastjson.JSONObject;
 public interface IGetProjectService {
 public interface IGetProjectService {
 
 
     //获取项目信息
     //获取项目信息
-    JSONObject getGroup(CtopOauthToken oauthToken, JSONObject requestBody);
+    JSONObject getGroup(CtopOauthToken oauthToken, Long accountId, Long groupId);
 
 
     //获取项目素材信息
     //获取项目素材信息
-    JSONObject getMaterial(CtopOauthToken oauthToken, JSONObject requestBody);
+    JSONObject getMaterialInfo(CtopOauthToken oauthToken, JSONObject requestBody);
 
 
     //获取项目列表
     //获取项目列表
     JSONObject getGroups(CtopOauthToken oauthToken, JSONObject requestBody);
     JSONObject getGroups(CtopOauthToken oauthToken, JSONObject requestBody);

+ 16 - 0
module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/adlab/service/IPlanAnalyzeReportService.java

@@ -1,4 +1,20 @@
 package cn.com.ctop.toutiao.modules.adlab.service;
 package cn.com.ctop.toutiao.modules.adlab.service;
 
 
+import cn.com.ctop.common.module.entity.CtopOauthToken;
+import com.alibaba.fastjson.JSONObject;
+
 public interface IPlanAnalyzeReportService {
 public interface IPlanAnalyzeReportService {
+
+    //更新计划目标成本
+    JSONObject updateAdBid(CtopOauthToken oauthToken, JSONObject requestBody);
+    //追加项目计划预算
+    JSONObject updateAdBudget(CtopOauthToken oauthToken, JSONObject requestBody);
+    //取消追加计划预算
+    JSONObject updateAdBudgetCancel(CtopOauthToken oauthToken, JSONObject requestBody);
+    //获取追加预算信息
+    JSONObject getBudget(CtopOauthToken oauthToken, JSONObject requestBody);
+    //获取可操作计划列表
+    public static final String ADLAB_GROUP_ADS_GET="https://ad.oceanengine.com/open_api/2/adlab/group_ads/get/";
+    JSONObject getGroupAds(CtopOauthToken oauthToken, JSONObject requestBody);
+
 }
 }

+ 3 - 1
module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/adlab/service/IUpdateProjectService.java

@@ -3,10 +3,12 @@ package cn.com.ctop.toutiao.modules.adlab.service;
 import cn.com.ctop.common.module.entity.CtopOauthToken;
 import cn.com.ctop.common.module.entity.CtopOauthToken;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.JSONObject;
 
 
+import java.util.Map;
+
 public interface IUpdateProjectService {
 public interface IUpdateProjectService {
 
 
     //更新项目状态
     //更新项目状态
-    JSONObject updateGroupStatus(CtopOauthToken oauthToken, JSONObject requestBody);
+    JSONObject updateGroupStatus(CtopOauthToken oauthToken, Map<String,Object> requestBody);
 
 
     //更新计划状态
     //更新计划状态
     JSONObject updateADStatus(CtopOauthToken oauthToken, JSONObject requestBody);
     JSONObject updateADStatus(CtopOauthToken oauthToken, JSONObject requestBody);

+ 77 - 64
module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/adlab/service/impl/CreateProjectServiceImpl.java

@@ -5,10 +5,17 @@ import cn.com.ctop.common.module.utils.HttpUtils;
 import cn.com.ctop.toutiao.modules.adlab.constants.CreateProjectUrlConstant;
 import cn.com.ctop.toutiao.modules.adlab.constants.CreateProjectUrlConstant;
 import cn.com.ctop.toutiao.modules.adlab.service.ICreateProjectService;
 import cn.com.ctop.toutiao.modules.adlab.service.ICreateProjectService;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.JSONObject;
+import org.springframework.stereotype.Service;
 
 
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 import java.util.Map;
 
 
+/**
+ *  Created by JQ.bi on 2020.09.02
+ */
+@Service
 public class CreateProjectServiceImpl implements ICreateProjectService {
 public class CreateProjectServiceImpl implements ICreateProjectService {
 
 
     @Override
     @Override
@@ -22,7 +29,8 @@ public class CreateProjectServiceImpl implements ICreateProjectService {
         JSONObject params = new JSONObject();
         JSONObject params = new JSONObject();
         params.put("advertiser_id", requestBody.getLong("accountId"));
         params.put("advertiser_id", requestBody.getLong("accountId"));
         params.put("name", requestBody.getString("name"));
         params.put("name", requestBody.getString("name"));
-        params.put("scenario", requestBody.getString("scenario"));
+        //暂时写死,只有项目网服定制
+        params.put("scenario", "INTERNET_SERVICE");
         params.put("ad_target", requestBody.getString("adTarget"));
         params.put("ad_target", requestBody.getString("adTarget"));
         params.put("delivery_range", requestBody.getString("deliveryRange") == null ? "DEFAULT" : requestBody.getString("deliveryRange"));
         params.put("delivery_range", requestBody.getString("deliveryRange") == null ? "DEFAULT" : requestBody.getString("deliveryRange"));
         params.put("landing_type", requestBody.getString("landingType"));
         params.put("landing_type", requestBody.getString("landingType"));
@@ -31,7 +39,7 @@ public class CreateProjectServiceImpl implements ICreateProjectService {
     }
     }
 
 
     @Override
     @Override
-    public JSONObject updateGroupConvert(CtopOauthToken oauthToken, JSONObject requestBody) {
+    public JSONObject updateGroupConvert(CtopOauthToken oauthToken, Map<String, Object> requestBody) {
 
 
         //请求头**
         //请求头**
         Map<String, String> headers = new HashMap<>();
         Map<String, String> headers = new HashMap<>();
@@ -39,23 +47,24 @@ public class CreateProjectServiceImpl implements ICreateProjectService {
         headers.put("Access-Token", oauthToken.getAccessToken());
         headers.put("Access-Token", oauthToken.getAccessToken());
         //请求参数
         //请求参数
         JSONObject params = new JSONObject();
         JSONObject params = new JSONObject();
-        params.put("advertiser_id", requestBody.getLong("accountId"));
-        params.put("group_id",requestBody.getLong("groupId"));
-        params.put("platform",requestBody.getString("platform"));
-        params.put("url",requestBody.getString("url"));
-        params.put("download_mode",requestBody.getString("download_mode")==null?"DEFAULT":requestBody.getString("download_mode"));
-        params.put("web_url",requestBody.getString("webUrl"));
-        params.put("convert_id",requestBody.getString("convertId"));
-        params.put("open_url",requestBody.getString("openUrl"));
-        params.put("download_type",requestBody.getString("downloadType"));
-        params.put("app_type",requestBody.getString("appType"));
+        params.put("advertiser_id", requestBody.get("accountId"));
+        params.put("group_id", requestBody.get("groupId"));
+        params.put("platform", requestBody.get("platform"));
+        params.put("url", requestBody.get("url"));
+        params.put("download_mode", requestBody.get("download_mode") == null ? "DEFAULT" : requestBody.get("download_mode"));
+        params.put("package", requestBody.get("adlabPackage"));
+        params.put("web_url", requestBody.get("webUrl"));
+        params.put("convert_id", requestBody.get("convertId"));
+        params.put("open_url", requestBody.get("openUrl"));
+        params.put("download_type", requestBody.get("downloadType"));
+        params.put("app_type", requestBody.get("appType"));
 
 
         return JSONObject.parseObject(HttpUtils.httpPostRequest(CreateProjectUrlConstant.ADLAB_GROUP_CONVERT_UPDATE, params, headers));
         return JSONObject.parseObject(HttpUtils.httpPostRequest(CreateProjectUrlConstant.ADLAB_GROUP_CONVERT_UPDATE, params, headers));
 
 
     }
     }
 
 
     @Override
     @Override
-    public JSONObject updateGroupAudience(CtopOauthToken oauthToken, JSONObject requestBody) {
+    public JSONObject updateGroupAudience(CtopOauthToken oauthToken, Map<String, Object> requestBody) {
 
 
         //请求头**
         //请求头**
         Map<String, String> headers = new HashMap<>();
         Map<String, String> headers = new HashMap<>();
@@ -63,36 +72,22 @@ public class CreateProjectServiceImpl implements ICreateProjectService {
         headers.put("Access-Token", oauthToken.getAccessToken());
         headers.put("Access-Token", oauthToken.getAccessToken());
         //请求参数
         //请求参数
         JSONObject params = new JSONObject();
         JSONObject params = new JSONObject();
-        params.put("advertiser_id", requestBody.getLong("accountId"));
-        params.put("group_id",requestBody.getLong("groupId"));
-        params.put("inventory_type",requestBody.getJSONArray("inventoryType"));
+        params.put("advertiser_id", requestBody.get("accountId"));
+        params.put("group_id", requestBody.get("groupId"));
+        params.put("inventory_type", requestBody.get("inventoryType"));
         //投放范围为穿山甲时可选 ORIGINAL_VIDEO 表示原生,REWARDED_VIDEO 表示激励视频
         //投放范围为穿山甲时可选 ORIGINAL_VIDEO 表示原生,REWARDED_VIDEO 表示激励视频
-        if(requestBody.getString("deliveryRange").equals("UNION")){
-            params.put("union_video_type",requestBody.getJSONArray("unionVideoType"));
+        if (requestBody.get("deliveryRange").equals("UNION")) {
+            params.put("union_video_type", requestBody.get("unionVideoType"));
         }
         }
         //定向信息
         //定向信息
-        JSONObject audience=new JSONObject();
-        audience.put("age",requestBody.getJSONArray("age"));
-        audience.put("city",requestBody.getJSONArray("city"));
-        audience.put("district",requestBody.getString("district"));
-        audience.put("gender",requestBody.getString("gender"));
-        audience.put("retargeting_tags_exclude",requestBody.getString("retargetingTagsExclude"));
-        audience.put("retargeting_tags_include",requestBody.getString("retargetingTagsInclude"));
-        if(requestBody.getString("deliveryRange").equals("UNION")){
-            audience.put("superior_popularity_type",requestBody.getString("superiorPopularityType"));
-            audience.put("exclude_flow_package",requestBody.getJSONArray("excludeFlowPackage"));
-            audience.put("flow_package",requestBody.getJSONArray("flowPackage"));
-        }
-        audience.put("auto_extend_enabled",requestBody.getString("autoExtendEnabled")==null?0:requestBody.getString("autoExtendEnabled"));
-        audience.put("auto_extend_targets",requestBody.getString("autoExtendTargets"));
-        params.put("audience",audience);
-        params.put("inventory_types",requestBody.getJSONArray("inventoryTypes"));
+        params.put("audience", requestBody.get("audience"));
+        params.put("inventory_types", requestBody.get("inventoryTypes"));
 
 
         return JSONObject.parseObject(HttpUtils.httpPostRequest(CreateProjectUrlConstant.ADLAB_GROUP_AUDIENCE_UPDATE, params, headers));
         return JSONObject.parseObject(HttpUtils.httpPostRequest(CreateProjectUrlConstant.ADLAB_GROUP_AUDIENCE_UPDATE, params, headers));
     }
     }
 
 
     @Override
     @Override
-    public JSONObject updateGroupCreative(CtopOauthToken oauthToken, JSONObject requestBody) {
+    public JSONObject updateGroupCreative(CtopOauthToken oauthToken, Map<String,Object> requestBody) {
 
 
         //请求头**
         //请求头**
         Map<String, String> headers = new HashMap<>();
         Map<String, String> headers = new HashMap<>();
@@ -100,31 +95,31 @@ public class CreateProjectServiceImpl implements ICreateProjectService {
         headers.put("Access-Token", oauthToken.getAccessToken());
         headers.put("Access-Token", oauthToken.getAccessToken());
         //请求参数
         //请求参数
         JSONObject params = new JSONObject();
         JSONObject params = new JSONObject();
-        params.put("advertiser_id", requestBody.getLong("accountId"));
-        params.put("group_id",requestBody.getLong("groupId"));
-        params.put("image_info",requestBody.get("imageInfo"));
-        params.put("video_info",requestBody.get("videoInfo"));
-        params.put("title", requestBody.getJSONArray("scenario"));
-        params.put("app_name", requestBody.getString("appName"));
-        params.put("source", requestBody.getString("source"));
-        params.put("is_follow_material", requestBody.getString("isFollowMaterial"));
-        params.put("third_industry_id", requestBody.getString("thirdIndustryId"));
-        params.put("ad_keywords", requestBody.getJSONArray("adKeywords"));
-        params.put("playable_url", requestBody.getString("playableUrl"));
-        params.put("action_track_url", requestBody.getString("actionTrackUrl"));
-        params.put("track_url", requestBody.getString("trackUrl"));
-        if(!requestBody.getString("deliveryRange").equals("UNION")){
-            params.put("video_play_track_url", requestBody.getString("videoPlayTrackUrl"));
-            params.put("video_play_done_track_url", requestBody.getString("videoPlayDoneTrackUrl"));
-            params.put("video_play_effective_track_url", requestBody.getString("videoPlayEffectiveTrackUrl"));
+        params.put("advertiser_id", requestBody.get("accountId"));
+        params.put("group_id", requestBody.get("groupId"));
+        params.put("image_info", requestBody.get("imageInfo"));
+        params.put("video_info", requestBody.get("videoInfo"));
+        params.put("title", requestBody.get("scenario"));
+        params.put("app_name", requestBody.get("appName"));
+        params.put("source", requestBody.get("source"));
+        params.put("is_follow_material", requestBody.get("isFollowMaterial"));
+        params.put("third_industry_id", requestBody.get("thirdIndustryId"));
+        params.put("ad_keywords", requestBody.get("adKeywords"));
+        params.put("playable_url", requestBody.get("playableUrl"));
+        params.put("action_track_url", requestBody.get("actionTrackUrl"));
+        params.put("track_url", requestBody.get("trackUrl"));
+        if (!requestBody.get("deliveryRange").equals("UNION")) {
+            params.put("video_play_track_url", requestBody.get("videoPlayTrackUrl"));
+            params.put("video_play_done_track_url", requestBody.get("videoPlayDoneTrackUrl"));
+            params.put("video_play_effective_track_url", requestBody.get("videoPlayEffectiveTrackUrl"));
         }
         }
-        params.put("creative_auto_generate_switch",requestBody.getString("creativeAutoGenerateSwitch"));
+        params.put("creative_auto_generate_switch", requestBody.get("creativeAutoGenerateSwitch"));
 
 
         return JSONObject.parseObject(HttpUtils.httpPostRequest(CreateProjectUrlConstant.ADLAB_GROUP_CREATIVE_UPDATE, params, headers));
         return JSONObject.parseObject(HttpUtils.httpPostRequest(CreateProjectUrlConstant.ADLAB_GROUP_CREATIVE_UPDATE, params, headers));
     }
     }
 
 
     @Override
     @Override
-    public JSONObject updateGroupBudget(CtopOauthToken oauthToken, JSONObject requestBody) {
+    public JSONObject updateGroupBudget(CtopOauthToken oauthToken, Map<String,Object> requestBody) {
 
 
         //请求头**
         //请求头**
         Map<String, String> headers = new HashMap<>();
         Map<String, String> headers = new HashMap<>();
@@ -132,18 +127,36 @@ public class CreateProjectServiceImpl implements ICreateProjectService {
         headers.put("Access-Token", oauthToken.getAccessToken());
         headers.put("Access-Token", oauthToken.getAccessToken());
         //请求参数
         //请求参数
         JSONObject params = new JSONObject();
         JSONObject params = new JSONObject();
-        params.put("advertiser_id", requestBody.getLong("accountId"));
-        params.put("group_id",requestBody.getLong("groupId"));
-        params.put("bid", requestBody.getFloat("bid"));
-        params.put("budget_mode", requestBody.getString("budgetMode")==null?"DAILY":requestBody.getString("budgetMode"));
-        params.put("budget", requestBody.getString("budget"));
-        params.put("auto_stop", requestBody.getString("autoStop")==null?0:requestBody.getString("autoStop"));
-        params.put("deep_bid", requestBody.getString("deepBid"));
-        params.put("start_time", requestBody.getString("startTime"));
-        params.put("end_time", requestBody.getString("endTime"));
-        params.put("week_time", requestBody.getString("weekTime"));
+        params.put("advertiser_id", requestBody.get("accountId"));
+        params.put("group_id", requestBody.get("groupId"));
+        params.put("bid", requestBody.get("bid"));
+        params.put("budget_mode", requestBody.get("budgetMode") == null ? "DAILY" : requestBody.get("budgetMode"));
+        params.put("budget", requestBody.get("budget"));
+        params.put("auto_stop", requestBody.get("autoStop") == null ? 0 : requestBody.get("autoStop"));
+        params.put("deep_bid", requestBody.get("deepBid"));
+        params.put("start_time", requestBody.get("startTime"));
+        params.put("end_time", requestBody.get("endTime"));
+        //weekTime字段需要处理为number[number[]]
+        params.put("week_time", weekTimeHandle((String) requestBody.get("weekTime")));
 
 
         return JSONObject.parseObject(HttpUtils.httpPostRequest(CreateProjectUrlConstant.ADLAB_GROUP_BUDGET_UPDATE, params, headers));
         return JSONObject.parseObject(HttpUtils.httpPostRequest(CreateProjectUrlConstant.ADLAB_GROUP_BUDGET_UPDATE, params, headers));
     }
     }
 
 
+    private List<List<Integer>> weekTimeHandle(String weekTime) {
+        List<List<Integer>> weekTime2List = null;
+        if (!weekTime.isEmpty() || (weekTime.contains("0") && weekTime.contains("1"))) {
+            weekTime2List=new ArrayList();
+            char[] chars = weekTime.toCharArray();
+            for(int i=0;i<chars.length;i++){
+                List<Integer> temp=new ArrayList<>();
+                if((i+1)%48==0){
+                    weekTime2List.add(temp);
+                    temp.clear();
+                }else{
+                    temp.add(i);
+                }
+            }
+        }
+        return weekTime2List;
+    }
 }
 }

+ 15 - 0
module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/adlab/service/impl/CtopAdlabProjectDetailServiceImpl.java

@@ -0,0 +1,15 @@
+package cn.com.ctop.toutiao.modules.adlab.service.impl;
+
+import cn.com.ctop.toutiao.modules.adlab.entity.CtopAdlabProjectDetail;
+import cn.com.ctop.toutiao.modules.adlab.mapper.CtopAdlabProjectDetailMapper;
+import cn.com.ctop.toutiao.modules.adlab.service.ICtopAdlabProjectDetailService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * 投放管家项目详情
+ */
+@Service
+public class CtopAdlabProjectDetailServiceImpl extends ServiceImpl<CtopAdlabProjectDetailMapper, CtopAdlabProjectDetail> implements ICtopAdlabProjectDetailService {
+
+}

+ 15 - 0
module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/adlab/service/impl/CtopAdlabProjectServiceImpl.java

@@ -0,0 +1,15 @@
+package cn.com.ctop.toutiao.modules.adlab.service.impl;
+
+import cn.com.ctop.toutiao.modules.adlab.entity.CtopAdlabProject;
+import cn.com.ctop.toutiao.modules.adlab.mapper.CtopAdlabProjectMapper;
+import cn.com.ctop.toutiao.modules.adlab.service.ICtopAdlabProjectService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * 投放管家项目列表
+ */
+@Service
+public class CtopAdlabProjectServiceImpl extends ServiceImpl<CtopAdlabProjectMapper, CtopAdlabProject> implements ICtopAdlabProjectService {
+
+}

+ 36 - 9
module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/adlab/service/impl/GetProjectServiceImpl.java

@@ -5,30 +5,30 @@ import cn.com.ctop.common.module.utils.HttpUtils;
 import cn.com.ctop.toutiao.modules.adlab.constants.GetProjectUrlConstant;
 import cn.com.ctop.toutiao.modules.adlab.constants.GetProjectUrlConstant;
 import cn.com.ctop.toutiao.modules.adlab.service.IGetProjectService;
 import cn.com.ctop.toutiao.modules.adlab.service.IGetProjectService;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.JSONObject;
+import org.springframework.stereotype.Service;
 
 
 import java.util.HashMap;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Map;
 
 
+@Service
 public class GetProjectServiceImpl implements IGetProjectService {
 public class GetProjectServiceImpl implements IGetProjectService {
 
 
     @Override
     @Override
-    public JSONObject getGroup(CtopOauthToken oauthToken, JSONObject requestBody) {
-
+    public JSONObject getGroup(CtopOauthToken oauthToken, Long accountId, Long groupId) {
         //请求头**
         //请求头**
         Map<String, String> headers = new HashMap<>();
         Map<String, String> headers = new HashMap<>();
         headers.put("Content-Type", "application/json");
         headers.put("Content-Type", "application/json");
         headers.put("Access-Token", oauthToken.getAccessToken());
         headers.put("Access-Token", oauthToken.getAccessToken());
         //请求参数
         //请求参数
         JSONObject params = new JSONObject();
         JSONObject params = new JSONObject();
-        params.put("advertiser_id", requestBody.getLong("accountId"));
-        params.put("group_id", requestBody.getString("groupId"));
-        params.put("campaign_id", requestBody.getString("campaignId"));
+        params.put("advertiser_id", accountId);
+        params.put("group_id", groupId);
 
 
         return JSONObject.parseObject(HttpUtils.httpGetRequest(GetProjectUrlConstant.ADLAB_GROUP_GET, headers, params));
         return JSONObject.parseObject(HttpUtils.httpGetRequest(GetProjectUrlConstant.ADLAB_GROUP_GET, headers, params));
     }
     }
 
 
     @Override
     @Override
-    public JSONObject getMaterial(CtopOauthToken oauthToken, JSONObject requestBody) {
+    public JSONObject getMaterialInfo(CtopOauthToken oauthToken, JSONObject requestBody) {
         //请求头**
         //请求头**
         Map<String, String> headers = new HashMap<>();
         Map<String, String> headers = new HashMap<>();
         headers.put("Content-Type", "application/json");
         headers.put("Content-Type", "application/json");
@@ -37,16 +37,43 @@ public class GetProjectServiceImpl implements IGetProjectService {
         JSONObject params = new JSONObject();
         JSONObject params = new JSONObject();
         params.put("advertiser_id", requestBody.getLong("accountId"));
         params.put("advertiser_id", requestBody.getLong("accountId"));
         params.put("group_id", requestBody.getString("groupId"));
         params.put("group_id", requestBody.getString("groupId"));
-        return null;
+
+        return JSONObject.parseObject(HttpUtils.httpGetRequest(GetProjectUrlConstant.ADLAB_GROUP_MATERIAL_GET, headers, params));
     }
     }
 
 
     @Override
     @Override
     public JSONObject getGroups(CtopOauthToken oauthToken, JSONObject requestBody) {
     public JSONObject getGroups(CtopOauthToken oauthToken, JSONObject requestBody) {
-        return null;
+
+        //请求头**
+        Map<String, String> headers = new HashMap<>();
+        headers.put("Content-Type", "application/json");
+        headers.put("Access-Token", oauthToken.getAccessToken());
+        //请求参数
+        JSONObject params = new JSONObject();
+        params.put("advertiser_id", requestBody.getLong("accountId"));
+        JSONObject filtering = new JSONObject();
+        filtering.put("campaign_ids", requestBody.getJSONArray("campaignIds"));
+        filtering.put("combo_status", requestBody.getString("comboStatus"));
+        filtering.put("group_ids", requestBody.getJSONArray("groupIds"));
+        filtering.put("group_name", requestBody.getString("groupName"));
+        filtering.put("landing_types", requestBody.getString("landingTypes"));
+        params.put("filtering", filtering);
+        //TODO 设置  pageSize pageNo
+        return JSONObject.parseObject(HttpUtils.httpGetRequest(GetProjectUrlConstant.ADLAB_GROUPS_GET, headers, params));
     }
     }
 
 
     @Override
     @Override
     public JSONObject getAds(CtopOauthToken oauthToken, JSONObject requestBody) {
     public JSONObject getAds(CtopOauthToken oauthToken, JSONObject requestBody) {
-        return null;
+        //请求头**
+        Map<String, String> headers = new HashMap<>();
+        headers.put("Content-Type", "application/json");
+        headers.put("Access-Token", oauthToken.getAccessToken());
+        //请求参数
+        JSONObject params = new JSONObject();
+        params.put("advertiser_id", requestBody.getLong("accountId"));
+        params.put("ad_ids", requestBody.getString("adIds"));
+
+        return JSONObject.parseObject(HttpUtils.httpGetRequest(GetProjectUrlConstant.ADLAB_ADS_GET, headers, params));
+
     }
     }
 }
 }

+ 85 - 0
module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/adlab/service/impl/PlanAnalyzeReportServiceImpl.java

@@ -1,6 +1,91 @@
 package cn.com.ctop.toutiao.modules.adlab.service.impl;
 package cn.com.ctop.toutiao.modules.adlab.service.impl;
 
 
+import cn.com.ctop.common.module.entity.CtopOauthToken;
+import cn.com.ctop.common.module.utils.HttpUtils;
+import cn.com.ctop.toutiao.modules.adlab.constants.PlanAnalyzeReport;
 import cn.com.ctop.toutiao.modules.adlab.service.IPlanAnalyzeReportService;
 import cn.com.ctop.toutiao.modules.adlab.service.IPlanAnalyzeReportService;
+import com.alibaba.fastjson.JSONObject;
+import org.springframework.stereotype.Service;
 
 
+import java.util.HashMap;
+import java.util.Map;
+
+@Service
 public class PlanAnalyzeReportServiceImpl implements IPlanAnalyzeReportService {
 public class PlanAnalyzeReportServiceImpl implements IPlanAnalyzeReportService {
+
+    @Override
+    public JSONObject updateAdBid(CtopOauthToken oauthToken, JSONObject requestBody) {
+        //请求头**
+        Map<String, String> headers = new HashMap<>();
+        headers.put("Content-Type", "application/json");
+        headers.put("Access-Token", oauthToken.getAccessToken());
+        //请求参数
+        JSONObject params = new JSONObject();
+        params.put("advertiser_id", requestBody.getLong("accountId"));
+        params.put("ad_id", requestBody.getString("adId"));
+        //给计划设置的新出价,0表示跟项目出价保持一致
+        params.put("bid", requestBody.getFloat("bid"));
+
+        return JSONObject.parseObject(HttpUtils.httpPostRequest(PlanAnalyzeReport.ADLAB_AD_BID_UPDATE, params, headers));
+    }
+
+    @Override
+    public JSONObject updateAdBudget(CtopOauthToken oauthToken, JSONObject requestBody) {
+        //请求头**
+        Map<String, String> headers = new HashMap<>();
+        headers.put("Content-Type", "application/json");
+        headers.put("Access-Token", oauthToken.getAccessToken());
+        //请求参数
+        JSONObject params = new JSONObject();
+        params.put("advertiser_id", requestBody.getLong("accountId"));
+        params.put("group_id", requestBody.getString("groupId"));
+        //设置的追加预算金额
+        params.put("budget", requestBody.getFloat("budget"));
+        //需要追加预算的计划列表,这些计划会共享这个追加的预算,并且必须属于group_id对应项目.
+        params.put("ad_ids", requestBody.getJSONArray("adIds"));
+
+        return JSONObject.parseObject(HttpUtils.httpPostRequest(PlanAnalyzeReport.ADLAB_AD_BUDGET_UPDATE, params, headers));
+    }
+
+    @Override
+    public JSONObject updateAdBudgetCancel(CtopOauthToken oauthToken, JSONObject requestBody) {
+        //请求头**
+        Map<String, String> headers = new HashMap<>();
+        headers.put("Content-Type", "application/json");
+        headers.put("Access-Token", oauthToken.getAccessToken());
+        //请求参数
+        JSONObject params = new JSONObject();
+        params.put("advertiser_id", requestBody.getLong("accountId"));
+        params.put("ad_id", requestBody.getString("adId"));
+
+        return JSONObject.parseObject(HttpUtils.httpPostRequest(PlanAnalyzeReport.ADLAB_AD_BUDGET_CANCEL, params, headers));
+    }
+
+    @Override
+    public JSONObject getBudget(CtopOauthToken oauthToken, JSONObject requestBody) {
+        //请求头**
+        Map<String, String> headers = new HashMap<>();
+        headers.put("Content-Type", "application/json");
+        headers.put("Access-Token", oauthToken.getAccessToken());
+        //请求参数
+        JSONObject params = new JSONObject();
+        params.put("advertiser_id", requestBody.getLong("accountId"));
+
+        return JSONObject.parseObject(HttpUtils.httpGetRequest(PlanAnalyzeReport.ADLAB_BUDGET_GET, headers, params));
+    }
+
+    @Override
+    public JSONObject getGroupAds(CtopOauthToken oauthToken, JSONObject requestBody) {
+        //请求头**
+        Map<String, String> headers = new HashMap<>();
+        headers.put("Content-Type", "application/json");
+        headers.put("Access-Token", oauthToken.getAccessToken());
+        //请求参数
+        JSONObject params = new JSONObject();
+        params.put("advertiser_id", requestBody.getLong("accountId"));
+        params.put("group_id", requestBody.getLong("groupId"));
+
+        return JSONObject.parseObject(HttpUtils.httpGetRequest(PlanAnalyzeReport.ADLAB_BUDGET_GET, headers, params));
+    }
+
 }
 }

+ 8 - 3
module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/adlab/service/impl/UpdateProjectServiceImpl.java

@@ -5,14 +5,18 @@ import cn.com.ctop.common.module.utils.HttpUtils;
 import cn.com.ctop.toutiao.modules.adlab.constants.UpdateProjectUrlConstant;
 import cn.com.ctop.toutiao.modules.adlab.constants.UpdateProjectUrlConstant;
 import cn.com.ctop.toutiao.modules.adlab.service.IUpdateProjectService;
 import cn.com.ctop.toutiao.modules.adlab.service.IUpdateProjectService;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.JSONObject;
+import org.springframework.stereotype.Service;
 
 
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 import java.util.Map;
 
 
+@Service
 public class UpdateProjectServiceImpl implements IUpdateProjectService {
 public class UpdateProjectServiceImpl implements IUpdateProjectService {
 
 
     @Override
     @Override
-    public JSONObject updateGroupStatus(CtopOauthToken oauthToken, JSONObject requestBody) {
+    public JSONObject updateGroupStatus(CtopOauthToken oauthToken, Map<String,Object> requestBody) {
 
 
         //请求头**
         //请求头**
         Map<String, String> headers = new HashMap<>();
         Map<String, String> headers = new HashMap<>();
@@ -20,8 +24,9 @@ public class UpdateProjectServiceImpl implements IUpdateProjectService {
         headers.put("Access-Token", oauthToken.getAccessToken());
         headers.put("Access-Token", oauthToken.getAccessToken());
         //请求参数
         //请求参数
         JSONObject params = new JSONObject();
         JSONObject params = new JSONObject();
-        params.put("advertiser_id", requestBody.getLong("accountId"));
-        params.put("group_ids", requestBody.getJSONArray("groupIds"));
+        params.put("advertiser_id", requestBody.get("accountId"));
+        Long[] groupIds={(Long) requestBody.get("groupId")};
+        params.put("group_ids", groupIds);
 
 
         return JSONObject.parseObject(HttpUtils.httpPostRequest(UpdateProjectUrlConstant.ADLAB_GROUP_STATUS_UPDATE, params, headers));
         return JSONObject.parseObject(HttpUtils.httpPostRequest(UpdateProjectUrlConstant.ADLAB_GROUP_STATUS_UPDATE, params, headers));
     }
     }

+ 7 - 0
module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/tool/constants/QueryToolUrlConstant.java

@@ -37,4 +37,11 @@ public class QueryToolUrlConstant {
 
 
     //【新】查询计划可用转化id
     //【新】查询计划可用转化id
     public static final String AD_CONVERT_QUERY="https://ad.oceanengine.com/open_api/2/tools/ad_convert/query/";
     public static final String AD_CONVERT_QUERY="https://ad.oceanengine.com/open_api/2/tools/ad_convert/query/";
+
+    //获取视频素材
+    public static final String FILE_VIDEO_GET="https://ad.oceanengine.com/open_api/2/file/video/get/";
+
+    //获取图片素材
+    public static final String FILE_IMAGE_GET="https://ad.oceanengine.com/open_api/2/file/image/get/";
+
 }
 }

+ 36 - 3
module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/tool/controller/ByteDanceQueryToolController.java

@@ -2,13 +2,13 @@ package cn.com.ctop.toutiao.modules.tool.controller;
 
 
 import cn.com.ctop.common.module.service.ICtopOauthTokenService;
 import cn.com.ctop.common.module.service.ICtopOauthTokenService;
 import cn.com.ctop.toutiao.modules.tool.service.IByteDanceConvertToolService;
 import cn.com.ctop.toutiao.modules.tool.service.IByteDanceConvertToolService;
+import cn.com.ctop.toutiao.modules.tool.service.IByteDanceQueryMaterialInfoService;
+import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.JSONObject;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.api.vo.Result;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 
 import java.util.ArrayList;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.HashMap;
@@ -24,6 +24,9 @@ public class ByteDanceQueryToolController {
     private IByteDanceConvertToolService byteDanceConvertToolService;
     private IByteDanceConvertToolService byteDanceConvertToolService;
 
 
     @Autowired
     @Autowired
+    private IByteDanceQueryMaterialInfoService byteDanceQueryMaterialInfoService;
+
+    @Autowired
     ICtopOauthTokenService ctopOauthTokenService;
     ICtopOauthTokenService ctopOauthTokenService;
 
 
     /**
     /**
@@ -46,6 +49,36 @@ public class ByteDanceQueryToolController {
         return result;
         return result;
     }
     }
 
 
+    @PostMapping(value="/queryVideoInfo")
+    public Result<JSONArray> queryVideoInfo(@RequestBody JSONObject requestBody){
+        Long accountId=requestBody.getLong("accountId");
+        JSONArray signatures=requestBody.getJSONArray("signatures");
+        Result<JSONArray> result=new Result<>();
+        JSONObject jsonObject = byteDanceQueryMaterialInfoService.queryVideoInfo(ctopOauthTokenService.getTokenByAccountId(accountId),accountId,signatures);
+        if(jsonObject.getInteger("code")!=0){
+            result.error500("视频素材信息查询失败");
+        }else{
+            result.setSuccess(true);
+            result.setResult(jsonObject.getJSONObject("data").getJSONArray("list"));
+        }
+        return result;
+    }
+
+    @PostMapping(value="/queryImageInfo")
+    public Result<JSONArray> queryImageInfo(@RequestBody JSONObject requestBody){
+        Long accountId=requestBody.getLong("accountId");
+        JSONArray signatures=requestBody.getJSONArray("signatures");
+        Result<JSONArray> result=new Result<>();
+        JSONObject jsonObject = byteDanceQueryMaterialInfoService.queryImageInfo(ctopOauthTokenService.getTokenByAccountId(accountId),accountId,signatures);
+        if(jsonObject.getInteger("code")!=0){
+            result.error500("图片素材信息查询失败");
+        }else{
+            result.setSuccess(true);
+            result.setResult(jsonObject.getJSONObject("data").getJSONArray("list"));
+        }
+        return result;
+    }
+
     private Map<String,Object> ConvertResultHandle(List convertResult){
     private Map<String,Object> ConvertResultHandle(List convertResult){
         Map<String,Object> resultMap=new HashMap<>();
         Map<String,Object> resultMap=new HashMap<>();
         if(convertResult.isEmpty()){
         if(convertResult.isEmpty()){

+ 70 - 0
module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/tool/controller/ParseInstallPackageController.java

@@ -0,0 +1,70 @@
+package cn.com.ctop.toutiao.modules.tool.controller;
+
+import cn.com.ctop.common.module.utils.ParseInstallPackageUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.jeecg.common.api.vo.Result;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.client.RestTemplate;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.util.HashMap;
+import java.util.Map;
+
+@Slf4j
+@RestController
+@RequestMapping("/ctop/queryTool")
+public class ParseInstallPackageController {
+
+    @Autowired
+    private RestTemplate restTemplate;
+
+    @PostMapping("/parseInstallPackage")
+    public Result<Map<String,String>> installPackageParse(@RequestParam String installUrl,
+                                                          @RequestParam String appType) {
+        Result<Map<String, String>> result = new Result<>();
+        //在此不需要判断安装包类型拼接后缀
+        String installPath="C:\\Users\\Arc\\Desktop\\install"+System.currentTimeMillis();
+        byte[] bytes = restTemplate.postForObject(installUrl, null, byte[].class);
+        if (null == bytes || bytes.length == 0) {
+            result.error500("请输入正确的下载链接");
+        } else {
+            File file = new File(installPath);
+            OutputStream outputStream = null;
+            try {
+                    outputStream = new FileOutputStream(file, true);
+                    outputStream.write(bytes);
+                    outputStream.flush();
+            } catch (IOException e) {
+                log.error("下载安装包失败>>>ParseInstallPackageController"+e.getMessage());
+            } finally {
+                if (outputStream != null) {
+                    try {
+                        outputStream.close();
+                    } catch (IOException e) {
+                        log.error(e.getMessage());
+                    }
+                }
+            }
+            Map<String, String> packageInfo=new HashMap<>();
+            if(appType.equals("ANDROID")){
+                packageInfo=ParseInstallPackageUtil.parseAPK(installPath);
+            }else if(appType.equals("IOS")){
+                packageInfo=ParseInstallPackageUtil.parseIpa(installPath);
+            }
+            if(packageInfo.isEmpty()){
+                result.error500("解析安装包失败");
+            }else {
+                result.setSuccess(true);
+                result.setResult(packageInfo);
+            }
+        }
+        return result;
+    }
+}

+ 13 - 0
module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/tool/service/IByteDanceQueryMaterialInfoService.java

@@ -0,0 +1,13 @@
+package cn.com.ctop.toutiao.modules.tool.service;
+
+import cn.com.ctop.common.module.entity.CtopOauthToken;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+
+public interface IByteDanceQueryMaterialInfoService {
+
+    JSONObject queryVideoInfo(CtopOauthToken token, Long accountId, JSONArray signatures);
+
+    JSONObject queryImageInfo(CtopOauthToken token, Long accountId, JSONArray signatures);
+
+}

+ 49 - 0
module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/tool/service/impl/ByteDanceQueryMaterialInfoServiceImpl.java

@@ -0,0 +1,49 @@
+package cn.com.ctop.toutiao.modules.tool.service.impl;
+
+import cn.com.ctop.common.module.entity.CtopOauthToken;
+import cn.com.ctop.common.module.utils.HttpUtils;
+import cn.com.ctop.toutiao.modules.tool.constants.QueryToolUrlConstant;
+import cn.com.ctop.toutiao.modules.tool.service.IByteDanceQueryMaterialInfoService;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import org.springframework.stereotype.Service;
+
+import java.util.HashMap;
+import java.util.Map;
+
+@Service
+public class ByteDanceQueryMaterialInfoServiceImpl implements IByteDanceQueryMaterialInfoService {
+
+    @Override
+    public JSONObject queryVideoInfo(CtopOauthToken token, Long accountId, JSONArray signatures) {
+
+        Map<String, String> headers = new HashMap<>();
+        headers.put("Content-Type", "application/json");
+        headers.put("Access-Token", token.getAccessToken());
+
+        JSONObject params=new JSONObject();
+        params.put("advertiser_id",accountId);
+        JSONObject filtering=new JSONObject();
+        filtering.put("signatures",signatures);
+        params.put("filtering",filtering);
+
+        return JSONObject.parseObject(HttpUtils.httpGet(QueryToolUrlConstant.FILE_VIDEO_GET, params, headers));
+    }
+
+    @Override
+    public JSONObject queryImageInfo(CtopOauthToken token, Long accountId, JSONArray signatures) {
+
+        Map<String, String> headers = new HashMap<>();
+        headers.put("Content-Type", "application/json");
+        headers.put("Access-Token", token.getAccessToken());
+
+        JSONObject params=new JSONObject();
+        params.put("advertiser_id",accountId);
+        JSONObject filtering=new JSONObject();
+        filtering.put("signatures",signatures);
+        params.put("filtering",filtering);
+
+        return JSONObject.parseObject(HttpUtils.httpGet(QueryToolUrlConstant.FILE_IMAGE_GET, params, headers));
+    }
+
+}

+ 1 - 1
module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/tool/util/JsonObjectToJsonStringUtil.java

@@ -3,7 +3,7 @@ package cn.com.ctop.toutiao.modules.tool.util;
 import cn.com.ctop.toutiao.modules.material.entity.ByteDanceAudiencePackage;
 import cn.com.ctop.toutiao.modules.material.entity.ByteDanceAudiencePackage;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.JSONObject;
 
 
-public class JsonObjectToJsonStringUtil {
+public class  JsonObjectToJsonStringUtil {
 
 
     public static ByteDanceAudiencePackage toAudiencePackage(ByteDanceAudiencePackage byteDanceAudiencePackage) {
     public static ByteDanceAudiencePackage toAudiencePackage(ByteDanceAudiencePackage byteDanceAudiencePackage) {
         if (byteDanceAudiencePackage.getRetargetingTags() != null) {
         if (byteDanceAudiencePackage.getRetargetingTags() != null) {