<?php

namespace Controller;


use Model\sendJobsSql;
use Model\sendJobStatusSql;


/**
 * 邮件发送任务
 * @author:dc
 * @time 2023/4/17 15:56
 * Class Job
 * @package Controller
 */
class Job extends Base {


    /**
     * 任务列表
     * @author:dc
     * @time 2023/4/17 15:57
     */
    public function index(){

        $page = app()->request('page',1,'intval');
        $limit = app()->request('limit',20,'intval');

        $where = dbWhere([
            'email_id'  =>  $this->getEmails('id')
        ]);

        $lists = db()->all(sendJobsSql::all($where,$page,$limit));

        foreach ($lists as &$list){
            $list['created_at'] = date('Y-m-d H:i:s',$list['send_time']);

            // 检查状态
            if($list['status'] === 1){
                $total = db()->first(\Model\sendJobStatusSql::countSum($list['id']));
                if($total && $total['t'] == $list['total']){
                    // 更新状态
                    db()->update(\Model\sendJobsSql::$table,[
                        'status'    =>  2,
                        'success'   =>  $total['s'],
                        'error'   =>  $total['e'],
                    ],dbWhere(['id'=>$list['id']]));
                    $list['status'] = 2;
                    $list['error'] = $total['e'];
                    $list['success'] = $total['s'];
                }

            }

        }

        return listsPage($lists,
            db()->count(sendJobsSql::count($where))
            ,1,20);
    }


    public function stop(){
        $id = app()->request('id',0,'intval');

        $ret = db()->update(sendJobsSql::$table,[
            'status'    =>  3
        ],dbWhere([
            'id'    =>  $id,
            'email_id'  =>  $this->getEmails('id')
        ]));

        if($ret){
            return ['status'=>200];
        }

        app()->e('send_job_stop_error');
    }

    /**
     * @throws \Lib\Err
     * @author:dc
     * @time 2023/4/17 17:03
     */
    public function start(){
        $id = app()->request('id',0,'intval');

        $ret = db()->update(sendJobsSql::$table,[
            'status'    =>  0
        ],dbWhere([
            'id'    =>  $id,
            'email_id'  =>  $this->getEmails('id')
        ]));

        if($ret){
            return ['status'=>200];
        }

        app()->e('send_job_start_error');

    }

    /**
     * 黑格发件任务详情
     * @author:dc
     * @time 2023/4/17 15:57
     */
    public function jobDetail()
    {
        $page  = app()->request('page', 1, 'intval');
        $limit = app()->request('limit', 20, 'intval');
        $jobId = app()->request('id', 0, 'intval');
        $status = app()->request('status');
        $isExport = app()->request('is_export', 0);

        if (!$jobId) {
            app()->e('send_job_id_null_error');
        }
        $whereArray   = [
            'job_id' => $jobId
        ];
        if ($status || $status === '0') {
            $whereArray['status'] = $status;
        }
        $where = dbWhere($whereArray);

        $lists = db()->all(sendJobStatusSql::detail($where, $page, $limit, $isExport));

        return listsPage($lists,
            db()->count(sendJobStatusSql::detailCount($where))
            , $page, $limit);
    }




}