|
@@ -0,0 +1,178 @@
|
|
|
+package org.jeecg.ctop.material.service.impl;
|
|
|
+
|
|
|
+
|
|
|
+import com.alibaba.fastjson.JSONObject;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.jeecg.common.api.vo.Result;
|
|
|
+import org.jeecg.ctop.material.constants.CtopAdConstant;
|
|
|
+import org.jeecg.ctop.material.mapper.MaterialStareMapper;
|
|
|
+import org.jeecg.ctop.material.service.MaterialStareService;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+
|
|
|
+import javax.annotation.Resource;
|
|
|
+import java.text.ParseException;
|
|
|
+import java.text.SimpleDateFormat;
|
|
|
+import java.util.*;
|
|
|
+
|
|
|
+/**
|
|
|
+ * 盯盘接口
|
|
|
+ */
|
|
|
+@Slf4j
|
|
|
+@Service
|
|
|
+public class MaterialStareServiceImpl implements MaterialStareService {
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ MaterialStareMapper materialStareMapper;
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 数据总览
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public Result<JSONObject> sumData(Integer mediaId, Integer userType, String userId, String startDate, String endDate, Integer type) {
|
|
|
+ Result result = new Result();
|
|
|
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
|
|
|
+ Long start = Long.parseLong(startDate.replace("-", ""));
|
|
|
+ Long end = Long.parseLong(endDate.replace("-", ""));
|
|
|
+
|
|
|
+ if (mediaId == CtopAdConstant.PLATFORM_TYPE_BYTEDANCE_INT) {
|
|
|
+ //头条
|
|
|
+ //功能待完善
|
|
|
+ } else if (mediaId == CtopAdConstant.PLATFORM_TYPE_KUAISHOU_INT) {
|
|
|
+ //快手
|
|
|
+ if (userType == 1) { //运营经理界面
|
|
|
+ //查询当前人员所有下级
|
|
|
+ Set<String> operatorUserIds = getAffiliateId(userId);
|
|
|
+ if (type == 1) { //汇总查看
|
|
|
+ if (start.equals(end)) { //查看当日
|
|
|
+ Long beforeDay = dayBefore(start);
|
|
|
+ //查询账户时报表当日数据
|
|
|
+ List<Map> list = materialStareMapper.getCostByUserIdList(start, beforeDay, operatorUserIds);
|
|
|
+ result.setResult(list);
|
|
|
+ result.setSuccess(true);
|
|
|
+ return result;
|
|
|
+ } else { //查看多日
|
|
|
+ //查询账户日报表当日数据
|
|
|
+ List<Map> list = materialStareMapper.getCostByUserIdListMoreDay(start, end, operatorUserIds);
|
|
|
+ result.setResult(list);
|
|
|
+ result.setSuccess(true);
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ } else if (type == 2) { //运营个人查看
|
|
|
+ if (start.equals(end)) { //查看当日
|
|
|
+ //查询个人top5当日时报
|
|
|
+ List<JSONObject> resultList = new ArrayList<>();
|
|
|
+ List<JSONObject> list = materialStareMapper.getCostByTop5List(start, operatorUserIds);
|
|
|
+ int size = 0;
|
|
|
+ int firstHour = list.get(0).getInteger("hour");
|
|
|
+ //判断每个小时取出几条
|
|
|
+ for (JSONObject jsonObject : list) {
|
|
|
+ //判断每个小时取出几条
|
|
|
+ Integer hour = jsonObject.getInteger("hour");
|
|
|
+ if (hour == firstHour) {
|
|
|
+ size++;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ for (int i = 0; i < list.size() / size; i++) {
|
|
|
+ //没top条数据切割出来封装
|
|
|
+ List<JSONObject> objects = list.subList(i * size, (i + 1) * size);
|
|
|
+ JSONObject resultObj = new JSONObject();
|
|
|
+ int j = 1;
|
|
|
+ for (JSONObject object : objects) {
|
|
|
+ resultObj.put("hours", object.getInteger("hour"));
|
|
|
+ resultObj.put("top" + j, object.getBigDecimal("cost"));
|
|
|
+ j++;
|
|
|
+ }
|
|
|
+ resultList.add(resultObj);
|
|
|
+ }
|
|
|
+ result.setResult(resultList);
|
|
|
+ result.setSuccess(true);
|
|
|
+ return result;
|
|
|
+ } else { //查看多日
|
|
|
+ List<JSONObject> resultList = new ArrayList<>();
|
|
|
+ //查询个人top5当日日报
|
|
|
+ List<JSONObject> list = materialStareMapper.getCostByTop5ListMoreDay(start, end, operatorUserIds);
|
|
|
+ int size = 0;
|
|
|
+ int firstDate = list.get(0).getInteger("statDate");
|
|
|
+ //判断每个小时取出几条
|
|
|
+ for (JSONObject jsonObject : list) {
|
|
|
+ //判断每个小时取出几条
|
|
|
+ Integer hour = jsonObject.getInteger("statDate");
|
|
|
+ if (hour == firstDate) {
|
|
|
+ size++;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ for (int i = 0; i < list.size() / size; i++) {
|
|
|
+ //没top条数据切割出来封装
|
|
|
+ List<JSONObject> objects = list.subList(i * size, (i + 1) * size);
|
|
|
+ JSONObject resultObj = new JSONObject();
|
|
|
+ int j = 1;
|
|
|
+ for (JSONObject object : objects) {
|
|
|
+ resultObj.put("date", object.getInteger("statDate"));
|
|
|
+ resultObj.put("top" + j, object.getBigDecimal("cost"));
|
|
|
+ j++;
|
|
|
+ }
|
|
|
+ resultList.add(resultObj);
|
|
|
+ }
|
|
|
+ result.setResult(resultList);
|
|
|
+ result.setSuccess(true);
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else if (userType == 2) {
|
|
|
+ //运营个人界面
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取指定日期前一日 LONG类型
|
|
|
+ */
|
|
|
+ public Long dayBefore(Long date) {
|
|
|
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
|
|
|
+ Long beforeDay = null;
|
|
|
+ try {
|
|
|
+ Date parse = sdf.parse(date.toString());
|
|
|
+ Calendar c = Calendar.getInstance();
|
|
|
+ c.setTime(parse);
|
|
|
+ int day1 = c.get(Calendar.DATE);
|
|
|
+ c.set(Calendar.DATE, day1 - 1);
|
|
|
+ beforeDay = Long.parseLong(sdf.format(c.getTime()));
|
|
|
+ } catch (ParseException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ return beforeDay;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 查询当前人员所有下级 返回自己和下属id
|
|
|
+ */
|
|
|
+
|
|
|
+ public Set<String> getAffiliateId(String userId) {
|
|
|
+ Set<String> result;
|
|
|
+ //查询当前用户是否存在下级
|
|
|
+ Set<String> subordinate = materialStareMapper.getAffiliateId(userId);
|
|
|
+ if (subordinate.isEmpty()) {
|
|
|
+ subordinate.add(userId);
|
|
|
+ return subordinate;
|
|
|
+ } else {
|
|
|
+ result = querySubordinate(subordinate, subordinate);
|
|
|
+ result.add(userId);
|
|
|
+ }
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ //递归查询
|
|
|
+ private Set<String> querySubordinate(Set<String> leaderIds, Set<String> result) {
|
|
|
+ if (leaderIds.isEmpty()) {
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+ Set<String> temp = materialStareMapper.querySubordinateRecursive(leaderIds);
|
|
|
+ result.addAll(temp);
|
|
|
+ querySubordinate(temp, result);
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+}
|