Sfoglia il codice sorgente

优化应用管理功能

zhaoxian 4 anni fa
parent
commit
d6561fe62d

+ 30 - 17
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/ai/controller/KuaishouAppPackageController.java

@@ -3,7 +3,7 @@ package cn.com.ctop.kuaishou.modules.ai.controller;
 import cn.com.ctop.common.module.annotation.AutoLog;
 import cn.com.ctop.common.module.utils.Check;
 import cn.com.ctop.common.module.utils.ExportExcelUtils;
-import cn.com.ctop.common.module.utils.HttpUtils;
+import cn.com.ctop.common.module.utils.LoadFileUtil;
 import cn.com.ctop.kuaishou.modules.ai.entity.KuaishouAppPackage;
 import cn.com.ctop.kuaishou.modules.ai.service.IKuaishouAppPackageService;
 import com.alibaba.fastjson.JSONArray;
@@ -25,15 +25,13 @@ import org.springframework.web.bind.annotation.ResponseBody;
 import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.multipart.MultipartFile;
 
-import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 import java.io.OutputStream;
+import java.io.UnsupportedEncodingException;
 import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
 
 /**
  * 项目绑定的应用
@@ -114,6 +112,7 @@ public class KuaishouAppPackageController {
         return Result.error("查询失败");
 
     }
+
     /**
      * 查询项目下有效账户
      *
@@ -141,6 +140,7 @@ public class KuaishouAppPackageController {
         }
         return Result.error("查询失败");
     }
+
     /**
      * 推送应用
      *
@@ -244,7 +244,7 @@ public class KuaishouAppPackageController {
                 return Result.error("请选择应用类型");
             } else {
                 Integer platform = kuaishouAppPackage.getPlatform();
-                if ((platform == 1 || platform == 3) && Check.isNull(kuaishouAppPackage.getImageToken())) {
+                if ((platform == 1 || platform == 3) && Check.isNull(kuaishouAppPackage.getAppIconUrl())) {
                     return Result.error("请上传图标");
                 }
                 if ((platform == 1 || platform == 2) && Check.isNull(kuaishouAppPackage.getAppPrivacyUrl())) {
@@ -254,6 +254,7 @@ public class KuaishouAppPackageController {
                     return Result.error("请填写应用包名");
                 }
             }
+            kuaishouAppPackage.setImageMd5(LoadFileUtil.getMD5(kuaishouAppPackage.getAppIconUrl()));
             kuaishouAppPackage.setDataStatus(1);//有效
             kuaishouAppPackageService.saveOrUpdate(kuaishouAppPackage);
             return Result.ok("操作成功!");
@@ -373,23 +374,35 @@ public class KuaishouAppPackageController {
         return result;
     }
 
+    //发送响应流方法
+    public void setResponseHeader(HttpServletResponse response, String fileName) {
+        try {
+            try {
+                fileName = new String(fileName.getBytes(), "ISO8859-1");
+            } catch (UnsupportedEncodingException e) {
+                e.printStackTrace();
+            }
+//            response.setContentType("multipart/form-data;charset=ISO8859-1");
+            response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
+            response.addHeader("Pargam", "no-cache");
+            response.addHeader("Cache-Control", "no-cache");
+        } catch (Exception ex) {
+            ex.printStackTrace();
+        }
+    }
+
     /**
      * 导出应用模板
-     *
-     * @param request
-     * @param response
      */
-    @RequestMapping(value = "/exportAppTemplate")
-    public void exportXls(HttpServletRequest request, HttpServletResponse response) {
-        Map<String, Object> paramsMap = new HashMap<>();
+    @GetMapping("/exportAppTemplate")
+    public void getExcel(HttpServletResponse response) {
         try {
-            List<List<Object>> excelList = new ArrayList<>();
             OutputStream os = response.getOutputStream();
             ExportExcelUtils eeu = new ExportExcelUtils();
             XSSFWorkbook workbook = new XSSFWorkbook();
             String[] titles = {"应用名称", "应用包名", "应用标记", "隐私政策链接", "下载链接", "监测链接", "广告监测SDK"};
-            eeu.exportExcelForAttendance(workbook, 0, "Sheet1", titles, excelList);
-            HttpUtils.setResponseHeader(response, "AppTemplate.xlsx");
+            eeu.exportExcelForAttendance(workbook, 0, "Sheet1", titles, new ArrayList<>());
+            this.setResponseHeader(response, "应用模板.xlsx");
             workbook.write(os);
             os.flush();
             os.close();
@@ -398,6 +411,7 @@ public class KuaishouAppPackageController {
         }
     }
 
+
     /**
      * 导入应用程序excel
      *
@@ -412,7 +426,6 @@ public class KuaishouAppPackageController {
                                       @RequestParam("file") MultipartFile file,
                                       @RequestParam("projectId") Long projectId,
                                       @RequestParam("platform") Integer platform,
-                                      @RequestParam("imageToken") String imageToken,
                                       @RequestParam("imageUrl") String imageUrl) {
         response.setHeader("Access-Control-Allow-Origin", "*");
         try {
@@ -420,12 +433,12 @@ public class KuaishouAppPackageController {
                 return Result.error("执行失败,请上传应用Excel文件");
             } else if (Check.isNull(projectId)) {
                 return Result.error("请选择项目");
-            } else if (Check.isNull(imageToken) || Check.isNull(imageUrl)) {
+            } else if (Check.isNull(imageUrl)) {
                 return Result.error("请上传图标");
             } else if (Check.isNull(platform)) {
                 return Result.error("请选择应用类型");
             }
-            return kuaishouAppPackageService.importExcel(file, projectId, platform, imageToken, imageUrl);
+            return kuaishouAppPackageService.importExcel(file, projectId, platform, imageUrl);
         } catch (Exception e) {
             e.printStackTrace();
             log.error("解析应用Excel文档异常", e);

+ 4 - 4
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/ai/entity/KuaishouAppPackage.java

@@ -75,11 +75,11 @@ public class KuaishouAppPackage {
      */
     private String appPrivacyUrl;
     /**
-     * 图片token
+     * 图片MD5标识
      */
-    @Excel(name = "图片token", width = 15)
-    @ApiModelProperty(value = "图片token")
-    private String imageToken;
+    @Excel(name = "图片MD5标识", width = 15)
+    @ApiModelProperty(value = "图片MD5标识")
+    private String imageMd5;
     /**
      * 应用包名
      */

+ 75 - 53
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/ai/entity/KuaishouAppPackageRel.java

@@ -1,79 +1,101 @@
 package cn.com.ctop.kuaishou.modules.ai.entity;
 
-import java.io.Serializable;
-import java.util.Date;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
-import com.baomidou.mybatisplus.annotation.TableField;
+import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.experimental.Accessors;
-import com.fasterxml.jackson.annotation.JsonFormat;
-import org.springframework.format.annotation.DateTimeFormat;
 import org.jeecgframework.poi.excel.annotation.Excel;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
 
 /**
  * 应用和账户关联表
+ *
  * @author jeecg-boot
- * @date   2021-05-13
  * @version V1.0
+ * @date 2021-05-13
  */
 @Data
 @TableName("ctop_kuaishou_app_package_rel")
 @EqualsAndHashCode(callSuper = false)
 @Accessors(chain = true)
-@ApiModel(value="ctop_kuaishou_app_package_rel对象", description="应用和账户关联表")
+@ApiModel(value = "ctop_kuaishou_app_package_rel对象", description = "应用和账户关联表")
 public class KuaishouAppPackageRel {
 
-	/**id*/
-	@TableId(type = IdType.AUTO)
-	@ApiModelProperty(value = "id")
-	private Long id;
-	/**应用模板ID*/
-	@Excel(name = "应用模板ID", width = 15)
-	@ApiModelProperty(value = "应用模板ID")
-	private Long apptemId;
-	/**项目ID*/
-	@Excel(name = "项目ID", width = 15)
-	@ApiModelProperty(value = "项目ID")
-	private Long projectId;
-	/**账户ID*/
-	@Excel(name = "账户ID", width = 15)
-	@ApiModelProperty(value = "账户ID")
-	private Long accountId;
-	/**账户ID*/
-	@Excel(name = "账户ID", width = 15)
-	@ApiModelProperty(value = "账户ID")
-	private Long appId;
-	/**快手方-应用地址*/
-	@Excel(name = "快手方-应用地址", width = 15)
-	@ApiModelProperty(value = "快手方-应用地址")
-	private String returnUrl;
+    /**
+     * id
+     */
+    @TableId(type = IdType.AUTO)
+    @ApiModelProperty(value = "id")
+    private Long id;
+    /**
+     * 应用模板ID
+     */
+    @Excel(name = "应用模板ID", width = 15)
+    @ApiModelProperty(value = "应用模板ID")
+    private Long apptemId;
+    /**
+     * 项目ID
+     */
+    @Excel(name = "项目ID", width = 15)
+    @ApiModelProperty(value = "项目ID")
+    private Long projectId;
+    /**
+     * 账户ID
+     */
+    @Excel(name = "账户ID", width = 15)
+    @ApiModelProperty(value = "账户ID")
+    private Long accountId;
+    /**
+     * 账户ID
+     */
+    @Excel(name = "账户ID", width = 15)
+    @ApiModelProperty(value = "账户ID")
+    private Long appId;
+    /**
+     * 快手方-应用地址
+     */
+    @Excel(name = "快手方-应用地址", width = 15)
+    @ApiModelProperty(value = "快手方-应用地址")
+    private String returnUrl;
+
+    private Integer dataStatus;
 
-	private Integer dataStatus;
+    private String appVersion;
 
-	private String appVersion;
-	/**返回信息*/
-	@Excel(name = "返回信息", width = 15)
-	@ApiModelProperty(value = "返回信息")
-	private String message;
-	/**更新时间*/
-	@Excel(name = "更新时间", width = 15)
-	@ApiModelProperty(value = "更新时间")
-	private String returnUpdateTime;
-	/**创建时间*/
-	@Excel(name = "创建时间", width = 20, format = "yyyy-MM-dd HH:mm:ss")
-	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
-	@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
-	@ApiModelProperty(value = "创建时间")
-	private Date createTime;
-	/**修改时间*/
-	@Excel(name = "修改时间", width = 20, format = "yyyy-MM-dd HH:mm:ss")
-	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
-	@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
-	@ApiModelProperty(value = "修改时间")
-	private Date updateTime;
+    private String imageToken;
+    /**
+     * 返回信息
+     */
+    @Excel(name = "返回信息", width = 15)
+    @ApiModelProperty(value = "返回信息")
+    private String message;
+    /**
+     * 更新时间
+     */
+    @Excel(name = "更新时间", width = 15)
+    @ApiModelProperty(value = "更新时间")
+    private String returnUpdateTime;
+    /**
+     * 创建时间
+     */
+    @Excel(name = "创建时间", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+    /**
+     * 修改时间
+     */
+    @Excel(name = "修改时间", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "修改时间")
+    private Date updateTime;
 }

+ 1 - 1
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/ai/service/IKuaishouAppPackageService.java

@@ -17,7 +17,7 @@ import java.util.List;
  */
 public interface IKuaishouAppPackageService extends IService<KuaishouAppPackage> {
 
-    Result<Object> importExcel(MultipartFile file, Long projectId, Integer platform, String imageToken, String imageUrl) throws Exception;
+    Result<Object> importExcel(MultipartFile file, Long projectId, Integer platform, String imageUrl) throws Exception;
 
     Result<Object> pushAppPackage(Long id, JSONArray accountIds);
 

+ 43 - 6
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/ai/service/impl/KuaishouAppPackageServiceImpl.java

@@ -4,6 +4,7 @@ import cn.com.ctop.common.module.entity.CtopOauthToken;
 import cn.com.ctop.common.module.service.ICtopOauthTokenService;
 import cn.com.ctop.common.module.utils.Check;
 import cn.com.ctop.common.module.utils.KuaishouInterfaceConstant;
+import cn.com.ctop.common.module.utils.LoadFileUtil;
 import cn.com.ctop.common.module.utils.PropertiesUtils;
 import cn.com.ctop.kuaishou.modules.ai.entity.KuaishouAppPackage;
 import cn.com.ctop.kuaishou.modules.ai.entity.KuaishouAppPackageRel;
@@ -11,9 +12,12 @@ import cn.com.ctop.kuaishou.modules.ai.mapper.KuaishouAppGroupMapper;
 import cn.com.ctop.kuaishou.modules.ai.mapper.KuaishouAppPackageMapper;
 import cn.com.ctop.kuaishou.modules.ai.mapper.KuaishouAppPackageRelMapper;
 import cn.com.ctop.kuaishou.modules.ai.service.IKuaishouAppPackageService;
+import cn.com.ctop.kuaishou.modules.batch.entity.KuaiShouImageGet;
+import cn.com.ctop.kuaishou.modules.batch.service.IKuaiShouImageGetService;
 import cn.com.ctop.kuaishou.modules.batch.service.IKuaiShouMaterialUploadService;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
@@ -62,9 +66,13 @@ public class KuaishouAppPackageServiceImpl extends ServiceImpl<KuaishouAppPackag
     private ICtopOauthTokenService tokenService;
     @Autowired
     private IKuaiShouMaterialUploadService materialUploadService;
+    @Autowired
+    private IKuaiShouImageGetService imageGetService;
+    @Autowired
+    private IKuaiShouMaterialUploadService uploadService;
 
     @Override
-    public Result<Object> importExcel(MultipartFile file, Long projectId, Integer platform, String imageToken, String imageUrl) throws Exception {
+    public Result<Object> importExcel(MultipartFile file, Long projectId, Integer platform, String imageUrl) throws Exception {
         JSONObject returnJson = new JSONObject();
         Workbook workbook = null;
         String fileName = file.getOriginalFilename();
@@ -121,7 +129,7 @@ public class KuaishouAppPackageServiceImpl extends ServiceImpl<KuaishouAppPackag
                 appPackage.setAppIconUrl(imageUrl);
                 appPackage.setPackageName(packageName);
                 appPackage.setPlatform(platform);
-                appPackage.setImageToken(imageToken);
+                appPackage.setImageMd5(LoadFileUtil.getMD5(imageUrl));
                 appPackage.setTrackUrl(trackUrl);
                 appPackage.setAppPrivacyUrl(appPrivacyUrl);
                 appPackage.setDataStatus(1);//有效
@@ -199,16 +207,23 @@ public class KuaishouAppPackageServiceImpl extends ServiceImpl<KuaishouAppPackag
         for (Object account : accountIds) {
             try {
                 Long accountId = Long.valueOf(String.valueOf(account));
+                rel.setAccountId(accountId);
                 KuaishouAppPackageRel entity = relMapper.queryEntityByAccountId(accountId, appPackage.getAppVersion());
                 if (!Check.isNull(entity)) {
                     continue;
                 }
                 CtopOauthToken oauthToken = tokenService.getTokenByAccountId(accountId);
+                String imageToken = getImageToken(appPackage.getImageMd5(), accountId, oauthToken);
+                if (Check.isNull(imageToken) && (appPackage.getPlatform() == 1 || appPackage.getPlatform() == 3)) {
+                    rel.setDataStatus(0);
+                    rel.setMessage("获取图片文件失败");
+                    continue;
+                }
                 JSONObject requestJson = new JSONObject();
                 requestJson.put("advertiser_id", accountId);
                 requestJson.put("app_version", appPackage.getAppVersion());
                 requestJson.put("app_name", appPackage.getAppName());
-                requestJson.put("image_token", appPackage.getImageToken());
+                requestJson.put("image_token", imageToken);
                 requestJson.put("package_name", appPackage.getPackageName());
                 requestJson.put("platform", appPackage.getPlatform());
                 requestJson.put("url", appPackage.getUrl());
@@ -220,7 +235,7 @@ public class KuaishouAppPackageServiceImpl extends ServiceImpl<KuaishouAppPackag
                 headerMap.put("Access-Token", oauthToken.getAccessToken());
                 String result = materialUploadService.exceptInfoForRestTemplate(url, requestJson, headerMap);
                 JSONObject resultJson = JSONObject.parseObject(result);
-                rel.setAccountId(accountId);
+
                 if (!Check.isNull(resultJson)) {
                     Integer code = resultJson.getInteger("code");
                     if (code == 0) {
@@ -249,6 +264,28 @@ public class KuaishouAppPackageServiceImpl extends ServiceImpl<KuaishouAppPackag
         }
         return Result.ok("推送完成");
     }
+
+    /**
+     * 获取图片token
+     */
+    private String getImageToken(String md5, Long accountId, CtopOauthToken oauthToken) {
+        String imageToken = null;
+        if (!Check.isNull(md5)) {
+            QueryWrapper<KuaiShouImageGet> queryWrapper = new QueryWrapper<>();
+            queryWrapper.eq("account_id", accountId);
+            queryWrapper.eq("signature", md5);
+            queryWrapper.last("limit 1");
+            KuaiShouImageGet imageGet = imageGetService.getOne(queryWrapper);
+            if (!Check.isNull(imageGet)) {
+                imageToken = imageGet.getImageToken();
+            } else {
+                String url = imageGetService.getUrlByCode(md5);
+                imageToken = uploadService.kuauiShouImageUpload(url, md5, accountId, oauthToken.getAccessToken());
+            }
+        }
+        return imageToken;
+    }
+
     @Override
     public Result<Object> queryPushResults(String id, JSONArray accountIds, String status) {
         List<JSONObject> lsit = relMapper.queryPushResults(id, accountIds, status);
@@ -256,8 +293,8 @@ public class KuaishouAppPackageServiceImpl extends ServiceImpl<KuaishouAppPackag
     }
 
     @Override
-    public List<Long> queryByAppVersion(Long projectId,String appVersion) {
-        return appPackageMapper.queryByAppVersion(projectId,appVersion);
+    public List<Long> queryByAppVersion(Long projectId, String appVersion) {
+        return appPackageMapper.queryByAppVersion(projectId, appVersion);
     }
 
     @Override

+ 36 - 3
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/service/impl/KuaishouProjectVideoGetServiceImpl.java

@@ -4,6 +4,8 @@ import cn.com.ctop.common.module.utils.Check;
 import cn.com.ctop.kuaishou.modules.batch.entity.KuaishouProjectVideoGet;
 import cn.com.ctop.kuaishou.modules.batch.mapper.KuaiShouVideoGetMapper;
 import cn.com.ctop.kuaishou.modules.batch.mapper.KuaishouProjectVideoGetMapper;
+import cn.com.ctop.kuaishou.modules.batch.service.IKuaiShouImageGetService;
+import cn.com.ctop.kuaishou.modules.batch.service.IKuaiShouMaterialUploadService;
 import cn.com.ctop.kuaishou.modules.batch.service.IKuaishouProjectVideoGetService;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -31,6 +33,10 @@ public class KuaishouProjectVideoGetServiceImpl extends ServiceImpl<KuaishouProj
     private KuaishouProjectVideoGetMapper projectVideoGetMapper;
     @Autowired
     private KuaiShouVideoGetMapper videoGetMapper;
+    @Autowired
+    private IKuaiShouImageGetService imageGetService;
+    @Autowired
+    private IKuaiShouMaterialUploadService uploadService;
 
     @Override
     public void clearProjectVideo(Long projectId) {
@@ -53,8 +59,35 @@ public class KuaishouProjectVideoGetServiceImpl extends ServiceImpl<KuaishouProj
 
     @Override
     public Result<Object> getVideoTotalNumber(Long projectId) {
-        JSONObject data = projectVideoGetMapper.getVideoTotalNumber(projectId);
-//        DateUtils.getLastDay()
-        return null;
+        //本周一
+        String monday = DateUtils.getdateFromWeek(1);
+        //当天日期
+        String today = DateUtils.formatDate(new Date());
+        //上周一日期
+        String lastStartDate = DateUtils.getLastDay(monday, 7);
+        //上周当天日期
+        String lastEndDate = DateUtils.getLastDay(today, 7);
+        Map<String, Object> paramsMap = new HashMap<>();
+        paramsMap.put("lastStartDate", lastStartDate);
+        paramsMap.put("lastEndDate", lastEndDate);
+        paramsMap.put("monday", monday);
+        paramsMap.put("today", today);
+        paramsMap.put("projectId", projectId);
+        return Result.ok(projectVideoGetMapper.getVideoTotalNumber(paramsMap));
+    }
+
+    @Override
+    public Result<Object> getVideoDetails(String signature) {
+        return Result.ok(projectVideoGetMapper.getVideoDetails(signature));
     }
+
+    @Override
+    public Result<Object> getAccountVideos(String signature, Long projectId, Integer pageNo, Integer pageSize) {
+        Long total = projectVideoGetMapper.getAccountVideosTotal(signature, projectId);
+        PageHelper.startPage(pageNo, pageSize, false);
+        PageInfo<JSONObject> list = new PageInfo<>(projectVideoGetMapper.getAccountVideos(signature, projectId));
+        list.setTotal(total);
+        return Result.ok(list);
+    }
+
 }