|
@@ -0,0 +1,187 @@
|
|
|
+package cn.com.ctop.kuaishou.modules.report.service.impl;
|
|
|
+
|
|
|
+import cn.com.ctop.common.module.entity.MaterialAscription;
|
|
|
+import cn.com.ctop.common.module.entity.MaterialInfo;
|
|
|
+import cn.com.ctop.common.module.service.IMaterialAscriptionService;
|
|
|
+import cn.com.ctop.common.module.service.IMaterialInfoService;
|
|
|
+import cn.com.ctop.kuaishou.modules.batch.service.IKuaiShouReportDailyMaterialService;
|
|
|
+import cn.com.ctop.kuaishou.modules.report.entity.KuaiShouReportDailyMaterial;
|
|
|
+import cn.com.ctop.kuaishou.modules.report.entity.KuaishouVideoEtlInfo;
|
|
|
+import cn.com.ctop.kuaishou.modules.report.mapper.KuaishouVideoEtlInfoMapper;
|
|
|
+import cn.com.ctop.kuaishou.modules.report.service.IKuaishouVideoEtlInfoService;
|
|
|
+import com.alibaba.fastjson.JSONObject;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.jeecg.common.util.DateUtils;
|
|
|
+import org.opencv.core.Mat;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+
|
|
|
+import java.math.BigDecimal;
|
|
|
+import java.util.Date;
|
|
|
+import java.util.List;
|
|
|
+import java.util.concurrent.CountDownLatch;
|
|
|
+import java.util.concurrent.ExecutorService;
|
|
|
+import java.util.concurrent.Executors;
|
|
|
+import java.util.logging.Logger;
|
|
|
+
|
|
|
+/**
|
|
|
+ * 快手视频信息清洗表(有效,爆款)
|
|
|
+ * @author jeecg-boot
|
|
|
+ * @date 2020-12-17
|
|
|
+ * @version V1.0
|
|
|
+ */
|
|
|
+@Slf4j
|
|
|
+@Service
|
|
|
+public class KuaishouVideoEtlInfoServiceImpl extends ServiceImpl<KuaishouVideoEtlInfoMapper, KuaishouVideoEtlInfo> implements IKuaishouVideoEtlInfoService {
|
|
|
+ @Autowired
|
|
|
+ private KuaishouVideoEtlInfoMapper kuaishouVideoEtlInfoMapper;
|
|
|
+ @Autowired
|
|
|
+ private IKuaiShouReportDailyMaterialService dailyMaterialService;
|
|
|
+ static ExecutorService executorService = Executors.newFixedThreadPool(50);
|
|
|
+ @Override
|
|
|
+ public void etlKuaishouVideoInfo(Date getDate) {
|
|
|
+ String date = DateUtils.formatDate(getDate);
|
|
|
+ //1:查询单当日视频信息
|
|
|
+ List<KuaiShouReportDailyMaterial> materials = dailyMaterialService.getSignatureByDate(date);
|
|
|
+ if(null!=materials&&!materials.isEmpty()){
|
|
|
+ CountDownLatch countDownLatch= new CountDownLatch(materials.size());
|
|
|
+ materials.forEach(material->{
|
|
|
+ executorService.submit(()->{
|
|
|
+ try {
|
|
|
+ if(null == material.getSignature()||material.getSignature().trim().equals("")){
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ String signature = material.getSignature();
|
|
|
+ KuaishouVideoEtlInfo etlInfo = this.getBySignature(signature);
|
|
|
+ KuaiShouReportDailyMaterial nowData = dailyMaterialService.getEtlDataByParams(signature,date);
|
|
|
+ System.out.println("code:"+signature+";nowDataCode:"+nowData.getSignature());
|
|
|
+ String minDate = nowData.getStatDate();
|
|
|
+ Integer days = DateUtils.getdaysOfTwoDate(minDate,date);
|
|
|
+ if(null == etlInfo){
|
|
|
+ //第一次查询的数据
|
|
|
+ etlInfo = new KuaishouVideoEtlInfo(nowData);
|
|
|
+ BigDecimal totalCost = etlInfo.getTotalCost();
|
|
|
+ JSONObject ascription = materialAscriptionService.getDetailByCode(signature);
|
|
|
+ String planId = null;
|
|
|
+ if(null!=ascription){
|
|
|
+ planId = ascription.getString("planId");
|
|
|
+ if(null!=planId&&!planId.trim().equals("")){
|
|
|
+ etlInfo.setPlanId(planId);
|
|
|
+ }
|
|
|
+ String planName = ascription.getString("planName");
|
|
|
+ if(null!=planName&&!planName.trim().equals("")){
|
|
|
+ etlInfo.setPlanName(planName);
|
|
|
+ }
|
|
|
+ String clipId = ascription.getString("clipId");
|
|
|
+ if(null!=clipId&&!clipId.trim().equals("")){
|
|
|
+ etlInfo.setClipId(clipId);
|
|
|
+ }
|
|
|
+ String clipName = ascription.getString("clipName");
|
|
|
+ if(null!=clipName&&!clipName.trim().equals("")){
|
|
|
+ etlInfo.setClipName(clipName);
|
|
|
+ }
|
|
|
+ String shotId = ascription.getString("shotId");
|
|
|
+ if(null!=shotId&&!shotId.trim().equals("")){
|
|
|
+ etlInfo.setShotId(shotId);
|
|
|
+ }
|
|
|
+ String shotName = ascription.getString("shotName");
|
|
|
+ if(null!=shotName&&!shotName.trim().equals("")){
|
|
|
+ etlInfo.setShotName(shotName);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(null!=planId){
|
|
|
+ String companyName = kuaishouVideoEtlInfoMapper.getCompanyNameByUserId(planId);
|
|
|
+ if (null!=companyName&&!companyName.trim().equals("")){
|
|
|
+ etlInfo.setCompanyName(companyName);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //计算投放总天数
|
|
|
+ if(days == 7){
|
|
|
+ etlInfo.setSingleWeekCost(nowData.getCharge());
|
|
|
+ }
|
|
|
+ if(days == 14){
|
|
|
+ etlInfo.setTwoWeekCost(nowData.getCharge());
|
|
|
+ }
|
|
|
+ if(days == 28){
|
|
|
+ etlInfo.setFourWeekCost(nowData.getCharge());
|
|
|
+ }
|
|
|
+ //计算是否有效,爆款
|
|
|
+ if(totalCost.compareTo(new BigDecimal("5000"))>0){
|
|
|
+ //此刻成为有效
|
|
|
+ etlInfo.setEffectDate(date);
|
|
|
+ etlInfo.setEffectDayNum(days);
|
|
|
+ }
|
|
|
+ if(totalCost.compareTo(new BigDecimal("100000"))>0){
|
|
|
+ //此刻成为爆款
|
|
|
+ etlInfo.setEffectDate(date);
|
|
|
+ etlInfo.setEffectDayNum(days);
|
|
|
+ }
|
|
|
+ etlInfo.setCreateTime(new Date());
|
|
|
+ etlInfo.setUpdateTime(new Date());
|
|
|
+ this.save(etlInfo);
|
|
|
+ }else{
|
|
|
+ BigDecimal totalCost = etlInfo.getTotalCost();
|
|
|
+ //只需要更新汇总数据
|
|
|
+ etlInfo.setTotalCost(nowData.getCharge());
|
|
|
+ etlInfo.setAclick(nowData.getAclick());
|
|
|
+ etlInfo.setBclick(nowData.getBclick());
|
|
|
+ etlInfo.setPhotoClick(nowData.getPhotoClick());
|
|
|
+ etlInfo.setPhotoShow(nowData.getPhotoShow());
|
|
|
+ etlInfo.setUpdateTime(new Date());
|
|
|
+ //计算投放总天数
|
|
|
+ if(days == 7){
|
|
|
+ etlInfo.setSingleWeekCost(nowData.getCharge());
|
|
|
+ }
|
|
|
+ if(days == 14){
|
|
|
+ etlInfo.setTwoWeekCost(nowData.getCharge());
|
|
|
+ }
|
|
|
+ if(days == 28){
|
|
|
+ etlInfo.setFourWeekCost(nowData.getCharge());
|
|
|
+ }
|
|
|
+ if(null == etlInfo.getEffectDayNum()){
|
|
|
+ if(totalCost.compareTo(new BigDecimal("5000"))>0){
|
|
|
+ //此刻成为有效
|
|
|
+ etlInfo.setEffectDate(date);
|
|
|
+ etlInfo.setEffectDayNum(days);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(null == etlInfo.getFaddishDayNum()){
|
|
|
+ if(totalCost.compareTo(new BigDecimal("100000"))>0){
|
|
|
+ //此刻成为爆款
|
|
|
+ etlInfo.setEffectDate(date);
|
|
|
+ etlInfo.setEffectDayNum(days);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ this.updateById(etlInfo);
|
|
|
+ }
|
|
|
+ }catch (Exception e){
|
|
|
+
|
|
|
+ }finally {
|
|
|
+ countDownLatch.countDown();
|
|
|
+ }
|
|
|
+ });
|
|
|
+ });
|
|
|
+
|
|
|
+ try {
|
|
|
+ countDownLatch.await();
|
|
|
+ } catch (InterruptedException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ log.info("{}数据获取完成",date);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private IMaterialAscriptionService materialAscriptionService;
|
|
|
+ @Autowired
|
|
|
+ private IMaterialInfoService materialInfoService;
|
|
|
+ @Override
|
|
|
+ public KuaishouVideoEtlInfo getBySignature(String signature) {
|
|
|
+ QueryWrapper<KuaishouVideoEtlInfo> queryWrapper = new QueryWrapper<>();
|
|
|
+ queryWrapper.eq("video_code",signature).last("limit 1");
|
|
|
+ return this.getOne(queryWrapper);
|
|
|
+ }
|
|
|
+}
|