package com.fs.qw.qwTask;

import com.fs.course.service.IFsUserCourseService;
import com.fs.qw.domain.QwIpadServerLog;
import com.fs.qw.domain.QwUser;
import com.fs.qw.mapper.QwUserMapper;
import com.fs.qw.service.*;
import com.fs.sop.service.impl.QwSopLogsServiceImpl;
import com.fs.sop.service.impl.QwSopServiceImpl;
import com.fs.sop.service.ISopUserLogsService;
import com.fs.statis.IFsStatisQwWatchService;
import com.fs.statis.service.FsStatisSalerWatchService;
import com.fs.wxwork.dto.WxWorkGetQrCodeDTO;
import com.fs.wxwork.service.WxWorkService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.time.LocalDate;
import java.util.Date;
import java.util.List;

@Component("qwTask")
public class qwTask {

    @Autowired
    private QwSopServiceImpl qwSopService;

    @Autowired
    private QwSopLogsServiceImpl qwSopLogsService;

    @Autowired
    private IQwGroupMsgService qwGroupMsgService;

    @Autowired
    private ISopUserLogsService sopUserLogsService;
    @Autowired
    private IQwExternalContactService qwExternalContactService;

    @Autowired
    private IFsUserCourseService iFsUserCourseService;

    @Autowired
    private IQwUserService qwUserService;

    @Autowired
    private IQwAcquisitionAssistantService qwAcquisitionAssistantService;


    @Autowired
    private FsStatisSalerWatchService fsStatisSalerWatchService;

    @Autowired
    private IFsStatisQwWatchService fsStatisQwWatchService;

    @Autowired
    private IQwMaterialService iQwMaterialService;

    @Autowired
    private QwUserMapper qwUserMapper;

    @Autowired
    private IQwIpadServerService ipadServerService;

    @Autowired
    private IQwIpadServerLogService qwIpadServerLogService;

    @Autowired
    private IQwIpadServerUserService qwIpadServerUserService;

    @Autowired
    private WxWorkService wxWorkService;


    //正在使用
    public void qwExternalContact()
    {
        qwExternalContactService.qwExternalContactSync();
    }
    //正在使用
    public void qwExternalContactAddAndDel()
    {
        qwExternalContactService.qwExternalContactSyncAddAndDel();
    }
    //正在使用
    public void qwExternalContactSyncAddRedis()
    {
        qwExternalContactService.qwExternalContactSyncAddRedis();
    }
    //正在使用
    public void qwExternalContactAddRedis()
    {
        qwExternalContactService.qwExternalContactAddRedis();
    }
    //正在使用
    public void qwExternalContactAddAndDelByRedis()
    {
        qwExternalContactService.qwExternalContactAddAndDelByRedis();
    }
    //正在使用
    public void qwExternalContactAddTag()
    {
        qwExternalContactService.qwExternalContactAddCourseTag();
    }

    /**
    * 定时任务 将 qw_sop任务 符合条件的录入到sop_user_Logs(clickHouse)
    */
    public void qwCheckSopRuleTime()
    {
        qwSopService.checkSopRuleTime();
    }

    /**
    * 定时任务 将 clickHouse的sopUserLogs(营期表)按每小时的巡回 录入clickHouse的qw_sop_logs(消息发送表)
    */
    public void selectSopUserLogsListByTime(){
        sopUserLogsService.selectSopUserLogsListByTime();
    }

    /**
    * 定时 发送 通过调用 企业微信接口 发送的 SOP 群发消息
    */
    public void SendQwApiSopLogTimer(){
        qwSopLogsService.checkQwSopLogs();
    }

    /**
    * 定时获取 通过调用 企业微信接口 发送的 SOP 客户群发消息 的反馈结果
    */
    public void GetQwApiSopLogResultTimer(){
        qwSopLogsService.qwSopLogsResult();
    }

    /**
    * 定时群发API接口的 客户/群 群发
    */
    public void sendQwGroupMsgTask(){
        qwGroupMsgService.qwGroupMsgTask();
    }

    /**
    *  定时更新 待发送中已经算过期了的不能发的消息
    */
    public void updateQwSopLogsBySendStatusTask(){
        qwSopLogsService.updateQwSopLogsBySendStatus();
    }

    /**
     * 2天跑一次 将 课程的封面 上传企业微信 并上传到redis
     */
    public void processQwSopCourseMaterialTimer() {

        iFsUserCourseService.processQwSopCourseMaterialTimer();

    }
    /**
    *  同步待同步客户
    */
    public void synchronizeQwExternalContactTask(){
        qwExternalContactService.synchronizeQwExternalContactTask();
    }


    /**
     * 定时解除 已经删除了的销售 绑定的企业微信云主机。或者是没有绑定销售 却绑定了云主机的
     */
    public void unlockQwUserLoginCodeUrlTask(){
        qwUserService.unlockQwUserLoginCodeUrlTask();
    }


    /**
     * 看课统计
     */
    public void watchCourseStatis(String date){
        if("1".equals(date)){
            fsStatisSalerWatchService.writeData(null);
        } else {
            fsStatisSalerWatchService.writeData(date);
        }
    }

    /**
     * 看课统计昨天
     */
    public void watchCourseStatisPrevious(){
        LocalDate localDate = LocalDate.now().minusDays(1);
        fsStatisSalerWatchService.writeData(localDate.toString());
    }
    /**
     * 看课统计-统计当天的-每15分钟统计一次
     */
    public void watchCourseStatisToday(){
        fsStatisSalerWatchService.writeDataToday();
    }

    /**
     * 进线转化统计
     */
    public void qwWatchCourseStatis(String date){
        if("1".equals(date)){
            fsStatisQwWatchService.writeData(null);
        } else {
            fsStatisQwWatchService.writeData(date);
        }
    }

    /**
     * 进线转化统计
     */
    public void qwWatchCourseStatisToday(){
        LocalDate today = LocalDate.now();
        fsStatisQwWatchService.writeData(today.toString());
    }

    /**
    * 每俩天 更新一次 素材库
    */
    public void updateMaterialByTwoDays(){
        iQwMaterialService.updateQwMaterialByQw();
    }


    /**
     * 定时清除 占着茅坑不拉屎的ipad 账号
     */
    public void selectQwUserByUnbindIpad(){
        List<QwUser> list = qwUserMapper.selectQwUserByTest();
        for (QwUser qwUser : list) {
            try {
                Integer serverStatus = qwUser.getServerStatus();
                Long serverId = qwUser.getServerId();
                if (serverStatus==0){
                    System.out.println("不需要解绑");
                }
                if (serverId==null){
                    System.out.println("serverId不存在");
                }
                QwUser u = new QwUser();
                u.setId(qwUser.getId());
                u.setServerId(null);
                u.setServerStatus(0);
                qwUserMapper.updateQwUser(u);
                ipadServerService.addServer(serverId);
                QwIpadServerLog qwIpadServerLog = new QwIpadServerLog();
                qwIpadServerLog.setType(2);
                qwIpadServerLog.setTilie("解绑");
                qwIpadServerLog.setServerId(serverId);
                qwIpadServerLog.setQwUserId(qwUser.getId());
                qwIpadServerLog.setCompanyUserId(qwUser.getCompanyUserId());
                qwIpadServerLog.setCompanyId(qwUser.getCompanyId());
                qwIpadServerLog.setCreateTime(new Date());
                qwIpadServerLogService.insertQwIpadServerLog(qwIpadServerLog);
                qwIpadServerUserService.deleteQwIpadServerUserByQwUserId(qwUser.getId());
                WxWorkGetQrCodeDTO wxWorkGetQrCodeDTO = new WxWorkGetQrCodeDTO();
                wxWorkGetQrCodeDTO.setUuid(qwUser.getUid());
                wxWorkService.LoginOut(wxWorkGetQrCodeDTO,qwUser.getServerId());
                updateIpadStatus(qwUser.getId(),0);
            } catch (Exception e) {
                System.out.println("解绑ipad报错"+e);

            }
        }
    }


    void updateIpadStatus(Long id ,Integer status){
        QwUser u = new QwUser();
        u.setId(id);
        u.setIpadStatus(status);
        qwUserMapper.updateQwUser(u);
    }

    /**
     * 2天跑一次 将 授权手机红包的封面 上传企业微信 并上传到redis
     */
    public void processQwSopPhoneRedPacketMaterialTimer() {

        Integer companyServerNum=1;
        iFsUserCourseService.processQwSopPhoneRedPacketMaterialTimer(companyServerNum);
    }
    /**
    * 每天重置 获客链接里的 员工账号可添加次数
    */
    public void resetAcquisitionLinkUserLimit() {
        qwAcquisitionAssistantService.resetAcquisitionLinkUserLimit();

    }

}
