|
@@ -2,8 +2,10 @@ package cn.com.ctop.kuaishou.modules.ai.service.impl;
|
|
|
|
|
|
import cn.com.ctop.common.module.entity.CtopOauthToken;
|
|
|
import cn.com.ctop.common.module.service.ICtopOauthTokenService;
|
|
|
+import cn.com.ctop.common.module.service.ISysRoleExtService;
|
|
|
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 +13,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;
|
|
@@ -25,12 +30,17 @@ import org.apache.poi.ss.usermodel.Row;
|
|
|
import org.apache.poi.ss.usermodel.Sheet;
|
|
|
import org.apache.poi.ss.usermodel.Workbook;
|
|
|
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
|
|
|
+import org.apache.shiro.SecurityUtils;
|
|
|
import org.jeecg.common.api.vo.Result;
|
|
|
+import org.jeecg.common.system.vo.LoginUser;
|
|
|
+import org.jeecg.common.util.DateUtils;
|
|
|
import org.jeecg.common.util.MD5Util;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.beans.factory.annotation.Value;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.web.multipart.MultipartFile;
|
|
|
|
|
|
+import java.io.IOException;
|
|
|
import java.text.DecimalFormat;
|
|
|
import java.text.SimpleDateFormat;
|
|
|
import java.util.ArrayList;
|
|
@@ -38,6 +48,7 @@ import java.util.Date;
|
|
|
import java.util.HashMap;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
|
+import java.util.UUID;
|
|
|
|
|
|
/**
|
|
|
* 项目绑定的应用
|
|
@@ -51,7 +62,8 @@ public class KuaishouAppPackageServiceImpl extends ServiceImpl<KuaishouAppPackag
|
|
|
|
|
|
@Autowired
|
|
|
private KuaishouAppPackageMapper appPackageMapper;
|
|
|
-
|
|
|
+ @Autowired
|
|
|
+ private ISysRoleExtService sysRoleService;
|
|
|
@Autowired
|
|
|
private KuaishouAppPackageRelMapper relMapper;
|
|
|
|
|
@@ -62,9 +74,15 @@ public class KuaishouAppPackageServiceImpl extends ServiceImpl<KuaishouAppPackag
|
|
|
private ICtopOauthTokenService tokenService;
|
|
|
@Autowired
|
|
|
private IKuaiShouMaterialUploadService materialUploadService;
|
|
|
+ @Autowired
|
|
|
+ private IKuaiShouImageGetService imageGetService;
|
|
|
+ @Autowired
|
|
|
+ private IKuaiShouMaterialUploadService uploadService;
|
|
|
+ @Value("${zip.local.download-path}")
|
|
|
+ private String downloadPath;
|
|
|
|
|
|
@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();
|
|
@@ -84,6 +102,16 @@ public class KuaishouAppPackageServiceImpl extends ServiceImpl<KuaishouAppPackag
|
|
|
if (rows == 0) {
|
|
|
throw new Exception("请填写数据");
|
|
|
}
|
|
|
+ String newFileUrl = getDownloadPath(imageUrl);
|
|
|
+ if (Check.isNull(newFileUrl)) {
|
|
|
+ return Result.error("本地下载文件失败,路径:" + imageUrl);
|
|
|
+ }
|
|
|
+ String md5 = null;
|
|
|
+ try {
|
|
|
+ md5 = LoadFileUtil.getMD5(newFileUrl);
|
|
|
+ } catch (IOException e) {
|
|
|
+ log.error("获取MD5签名失败", e);
|
|
|
+ }
|
|
|
//查询项目下的应用标记(同一账户下应用标记不能重复),在此视为同一项目不可重复
|
|
|
List<String> appVersions = appPackageMapper.queryAppVersions(projectId);
|
|
|
StringBuffer errAppVersions = new StringBuffer();
|
|
@@ -109,8 +137,6 @@ public class KuaishouAppPackageServiceImpl extends ServiceImpl<KuaishouAppPackag
|
|
|
return Result.error("解析失败,文档中应用名称列缺失数据");
|
|
|
} else if (Check.isNull(url)) {
|
|
|
return Result.error("解析失败,文档中下载链接列缺失数据");
|
|
|
- } else if (Check.isNull(trackUrl)) {
|
|
|
- return Result.error("解析失败,文档中监测链接列缺失数据");
|
|
|
}
|
|
|
if (appVersions.contains(appVersion)) {
|
|
|
errAppVersions.append(appVersion).append("、");
|
|
@@ -121,14 +147,14 @@ public class KuaishouAppPackageServiceImpl extends ServiceImpl<KuaishouAppPackag
|
|
|
appPackage.setAppIconUrl(imageUrl);
|
|
|
appPackage.setPackageName(packageName);
|
|
|
appPackage.setPlatform(platform);
|
|
|
- appPackage.setImageToken(imageToken);
|
|
|
+ appPackage.setImageMd5(md5);
|
|
|
appPackage.setTrackUrl(trackUrl);
|
|
|
appPackage.setAppPrivacyUrl(appPrivacyUrl);
|
|
|
appPackage.setDataStatus(1);//有效
|
|
|
appPackage.setUrl(url);
|
|
|
- String md5 = MD5Util.getMd5(url);
|
|
|
- if (!Check.isNull(md5)) {
|
|
|
- appPackage.setAppMd5(md5);
|
|
|
+ String appmd5 = MD5Util.getMd5(url);
|
|
|
+ if (!Check.isNull(appmd5)) {
|
|
|
+ appPackage.setAppMd5(appmd5);
|
|
|
}
|
|
|
if (!Check.isNull(useSdk)) {
|
|
|
appPackage.setUseSdk(Integer.valueOf(useSdk));
|
|
@@ -136,6 +162,7 @@ public class KuaishouAppPackageServiceImpl extends ServiceImpl<KuaishouAppPackag
|
|
|
appList.add(appPackage);
|
|
|
}
|
|
|
}
|
|
|
+ LoadFileUtil.delFile(newFileUrl);
|
|
|
String errVersion = errAppVersions.toString();
|
|
|
if (!Check.isNull(errVersion)) {
|
|
|
return Result.error("数据异常,重复的应用标记:" + errVersion.substring(0, errVersion.length() - 1));
|
|
@@ -144,6 +171,15 @@ public class KuaishouAppPackageServiceImpl extends ServiceImpl<KuaishouAppPackag
|
|
|
return Result.ok("文件导入成功");
|
|
|
}
|
|
|
|
|
|
+ public String getDownloadPath(String url) {
|
|
|
+ StringBuffer path = new StringBuffer();
|
|
|
+ path.append(downloadPath).append(DateUtils.getNowDate(DateUtils.WEB_FORMAT)).append("/").append(UUID.randomUUID().toString()).append("/");
|
|
|
+ if (!url.contains("http")) {
|
|
|
+ url = "https:".concat(url);
|
|
|
+ }
|
|
|
+ return LoadFileUtil.downLoadFromUrl(url, path.toString());
|
|
|
+ }
|
|
|
+
|
|
|
private String getCellValue(Cell cell) {
|
|
|
String value = "";
|
|
|
if (cell != null) {
|
|
@@ -189,7 +225,7 @@ public class KuaishouAppPackageServiceImpl extends ServiceImpl<KuaishouAppPackag
|
|
|
public Result<Object> pushAppPackage(Long id, JSONArray accountIds) {
|
|
|
KuaishouAppPackage appPackage = appPackageMapper.selectById(id);
|
|
|
if (Check.isNull(appPackage)) {
|
|
|
- return Result.error("为获取到应用信息");
|
|
|
+ return Result.error("未获取到应用信息");
|
|
|
}
|
|
|
KuaishouAppPackageRel rel = new KuaishouAppPackageRel();
|
|
|
rel.setApptemId(appPackage.getId());
|
|
@@ -199,16 +235,25 @@ 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);
|
|
|
+ JSONObject dataJson = getImageToken(appPackage.getImageMd5(), accountId, oauthToken);
|
|
|
+ String imageToken = dataJson.getString("image_token");
|
|
|
+ if (Check.isNull(imageToken)) {
|
|
|
+ rel.setMessage(dataJson.getString("message"));
|
|
|
+ rel.setDataStatus(0);
|
|
|
+ list.add(rel);
|
|
|
+ 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 +265,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 +294,33 @@ public class KuaishouAppPackageServiceImpl extends ServiceImpl<KuaishouAppPackag
|
|
|
}
|
|
|
return Result.ok("推送完成");
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取图片token
|
|
|
+ */
|
|
|
+ private JSONObject getImageToken(String md5, Long accountId, CtopOauthToken oauthToken) {
|
|
|
+ JSONObject request = new JSONObject();
|
|
|
+ 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)) {
|
|
|
+ request.put("image_token", imageGet.getImageToken());
|
|
|
+ return request;
|
|
|
+ } else {
|
|
|
+ String url = appPackageMapper.getUrlByMd5(md5);
|
|
|
+ JSONObject resultJson = uploadService.kuauiShouImageUploadOnly(url, md5, accountId, oauthToken.getAccessToken());
|
|
|
+ if (resultJson.getInteger("code") == 0) {
|
|
|
+ return resultJson.getJSONObject("data");
|
|
|
+ }
|
|
|
+ return resultJson;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return request;
|
|
|
+ }
|
|
|
+
|
|
|
@Override
|
|
|
public Result<Object> queryPushResults(String id, JSONArray accountIds, String status) {
|
|
|
List<JSONObject> lsit = relMapper.queryPushResults(id, accountIds, status);
|
|
@@ -256,8 +328,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, Integer dataStatus) {
|
|
|
+ return appPackageMapper.queryByAppVersion(projectId, appVersion, dataStatus);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -272,8 +344,18 @@ public class KuaishouAppPackageServiceImpl extends ServiceImpl<KuaishouAppPackag
|
|
|
|
|
|
@Override
|
|
|
public Result<Object> queryPageList(KuaishouAppPackage kuaishouAppPackage, Integer pageNo, Integer pageSize) {
|
|
|
+ LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
|
|
|
+ String userId = null;
|
|
|
+ if (!Check.isNull(user)) {
|
|
|
+ userId = user.getId();
|
|
|
+ String roleCode = sysRoleService.getRoleCodeByUserId(userId);
|
|
|
+ //角色为管理员、销售、媒介可以查看所有项目信息
|
|
|
+ if ("admin".equals(roleCode) || roleCode.contains("sale") || "meidaManager".equals(roleCode)) {
|
|
|
+ userId = null;
|
|
|
+ }
|
|
|
+ }
|
|
|
PageHelper.startPage(pageNo, pageSize);
|
|
|
- List<JSONObject> list = appPackageMapper.queryPageList(kuaishouAppPackage.getAppVersion(), kuaishouAppPackage.getProjectId(), kuaishouAppPackage.getPlatform());
|
|
|
+ List<JSONObject> list = appPackageMapper.queryPageList(userId, kuaishouAppPackage.getAppName(), kuaishouAppPackage.getAppVersion(), kuaishouAppPackage.getProjectId(), kuaishouAppPackage.getPlatform());
|
|
|
for (JSONObject object : list) {
|
|
|
object.put("unitCount", appPackageMapper.queryUnitCount(object.getLong("id")));
|
|
|
}
|