package org.jeecg.modules.ctop.job;

import cn.com.ctop.common.module.entity.CtopOauthToken;
import cn.com.ctop.common.module.entity.UserAllocation;
import cn.com.ctop.common.module.service.ICtopOauthTokenService;
import cn.com.ctop.common.module.service.IUserAllocationService;
import cn.com.ctop.common.module.utils.CtopAdConstant;
import cn.com.ctop.toutiao.modules.report.entity.BytedancePlanDailyReport;
import cn.com.ctop.toutiao.modules.report.service.IBytedancePlanDailyReportService;
import cn.com.ctop.toutiao.modules.report.service.IReportService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import lombok.extern.slf4j.Slf4j;
import org.jeecg.common.util.DateUtils;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.beans.factory.annotation.Autowired;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

/**
 * DONE
 * 头条计划日报数据任务
 * @author 宋英豪
 */
@Slf4j
public class BytedancePlanDailyReportLoadJob implements Job {
    @Autowired
    private ICtopOauthTokenService tokenService;
    @Autowired
    private IReportService reportService;
    @Autowired
    private IUserAllocationService userAllocationService;
    @Autowired
    private IBytedancePlanDailyReportService planDailyReportService;


    @Override
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        Date getDate = DateUtils.addDay(new Date(), -1);
        //1:查询当日数据
        List<CtopOauthToken> tokens = tokenService.getTokenListByType(CtopAdConstant.PLATFORM_TYPE_BYTEDANCE);
        if (null == tokens || tokens.size() <= 0) {
            log.info("定时获取头条数据异常：为获取到可用的token");
            return;
        }
        tokens.forEach(token -> {
            //获取广告计划信息数据
            reportService.getAdvertiserPlanReport(token, getDate, getDate, CtopAdConstant.BYTEDANCE_REPORT_TYPE_DAILY);
        });
        formatZybData(215, getDate);
        planDailyReportService.cleanChannelCodeData(112, getDate);
        planDailyReportService.cleanChannelCodeData(113, getDate);
        planDailyReportService.cleanChannelCodeData(222, getDate);
        planDailyReportService.cleanYzData(151);
        planDailyReportService.cleanChannelCodeData(235, getDate);
        planDailyReportService.cleanChannelCodeData(270, getDate);
    }

    private void formatZybData(Integer projectId, Date getDate) {
        //清洗关于作业帮数据
        //1:查询作业帮相关的用户数据
        QueryWrapper<UserAllocation> wrapper = new QueryWrapper<>();
        wrapper.eq("project_id", projectId);
        List<UserAllocation> allocations = userAllocationService.list(wrapper);
        if(null!=allocations&&allocations.size()>0){
            allocations.forEach(allocation->{
                //根据accountId和时间，查询相关的日报表信息
                QueryWrapper<BytedancePlanDailyReport> queryWrapper = new QueryWrapper<>();
                SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
                String dateString = dateFormat.format(getDate)+" 00:00:00";
                queryWrapper.eq("advertiser_id",allocation.getAccountId())
                        .eq("stat_datetime",dateString)
                ;
                List<BytedancePlanDailyReport>bytedancePlanDailyReports = planDailyReportService.list(queryWrapper);
                if(null!=bytedancePlanDailyReports&&bytedancePlanDailyReports.size()>0){
                    bytedancePlanDailyReports.forEach(report->{
                        String adName = report.getAdName();
                        String[] tags = adName.split("-");
                        report.setAdsense(tags[1]);
                        report.setPlanCode(tags[2]);
                        String materialName = tags[3];
                        report.setMaterialName(materialName);
                        if (materialName.contains("其他")) {
                            report.setMaterialType("其他");
                        } else if (materialName.contains("图片轮播")) {
                            report.setMaterialType("图片轮播");
                        } else if (materialName.contains("大字报")) {
                            report.setMaterialType("大字报");
                        } else if (materialName.contains("文字动画")) {
                            report.setMaterialType("文字动画");
                        } else if (materialName.contains("采访形式")) {
                            report.setMaterialType("采访形式");
                        } else if (materialName.contains("剧情")) {
                            report.setMaterialType("剧情");
                        } else if (materialName.contains("口播")) {
                            report.setMaterialType("口播");
                        }else{
                            report.setMaterialType("其他");
                        }
                        planDailyReportService.updateById(report);
                    });
                }
            });
        }
    }
}
