AfterDayCount.php 7.4 KB
<?php
/**
 * @remark :
 * @name   :AfterDayCount.php
 * @author :lyh
 * @method :post
 * @time   :2025/3/26 15:28
 */

namespace App\Console\Commands\DayCount;

use App\Models\Manage\ManageHr;
use App\Models\Project\Project;
use App\Models\RankData\RankDataLog;
use Carbon\Carbon;
use App\Models\HomeCount\AfterCount as AfterCountModel;
use Illuminate\Console\Command;

class AfterDayCount extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'after_count';

    protected $managerHrModel;

    public $after_manager = [
        1 => ['许璐','王袁袁'],
        2 => ['陈思蓓'],
        3 => ['张国英']
    ];

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = '统计昨日售后数据';

    public function handle(){
        echo date('Y-m-d H:i:s').'统计start->'.PHP_EOL;
        $saveData = $this->_action();
        $afterModel = new AfterCountModel();
        //保存数据
        $afterModel->insertAll($saveData);
        echo date('Y-m-d H:i:s').'->统计end'.PHP_EOL;
        return true;
    }

    /**
     * @remark :执行方法
     * @name   :_action
     * @author :lyh
     * @method :post
     * @time   :2025/3/26 15:29
     */
    public function _action(){
        $this->managerHrModel = new ManageHr();
        $projectModel = new Project();
        $rankDataLogModel = new RankDataLog();
        $date = date('Y-m-d');
        $saveData = [];
//        $projectIdArr = $rankDataLogModel->selectField(['is_compliance'=>1,'lang'=>'','date'=>date('Y-m-d', strtotime('-3 months'))],'project_id');//3个月前达标的项目id
        foreach ($this->after_manager as $key => $valM){
            $idArr = $this->managerHrModel->selectField(['name'=>['in',$valM]],'id');
            $project_count = $projectModel->where('gl_project.extend_type',0)
                ->where('gl_project.delete_status',0)
                ->where('gl_project.old_project_id',0)
                ->where('gl_project_deploy_optimize.start_date','<=',$date)
                ->whereIn('gl_project_deploy_optimize.optimist_mid',$idArr)
                ->whereIn('gl_project.type',[2,4,6])
                ->leftJoin('gl_project_deploy_optimize', 'gl_project.id', '=', 'gl_project_deploy_optimize.project_id')
                ->whereRaw("FIND_IN_SET('2', gl_project.level) = 0 AND FIND_IN_SET('3', gl_project.level) = 0")
                ->whereRaw("FIND_IN_SET('7', gl_project_deploy_optimize.special) = 0 AND FIND_IN_SET('8', gl_project_deploy_optimize.special) = 0")
                ->count();
            $qualified_count = $projectModel->where('gl_project.extend_type',0)
                ->where('gl_project.delete_status',0)
                ->where('gl_project.old_project_id',0)
                ->where('gl_project_deploy_optimize.start_date','<=',$date)
                ->where('gl_project.is_remain_today',1)
                ->where('gl_project_deploy_build.plan','!=',0)
                ->whereIn('gl_project_deploy_optimize.optimist_mid',$idArr)
                ->whereIn('gl_project.type',[2,4,6])
                ->leftJoin('gl_project_deploy_optimize', 'gl_project.id', '=', 'gl_project_deploy_optimize.project_id')
                ->leftJoin('gl_project_deploy_build', 'gl_project.id', '=', 'gl_project_deploy_build.project_id')
                ->whereRaw("FIND_IN_SET('2', gl_project.level) = 0 AND FIND_IN_SET('3', gl_project.level) = 0")
                ->whereRaw("FIND_IN_SET('7', gl_project_deploy_optimize.special) = 0 AND FIND_IN_SET('8', gl_project_deploy_optimize.special) = 0")
                ->count();
            $rate = number_format($qualified_count / $project_count, 2);
            $threeMonthsAgo = date('Y-m', strtotime('-3 months'));
            $three_project_count = $projectModel->where('gl_project.extend_type',0)
                ->where('gl_project.delete_status',0)
                ->where('gl_project.old_project_id',0)
                ->where('gl_project_deploy_optimize.start_date','>=',$threeMonthsAgo.'-01')
                ->where('gl_project_deploy_optimize.start_date','<=',$threeMonthsAgo.'-31')
                ->whereIn('gl_project_deploy_optimize.optimist_mid',$idArr)
                ->whereIn('gl_project.type',[2,4,6])
                ->leftJoin('gl_project_deploy_optimize', 'gl_project.id', '=', 'gl_project_deploy_optimize.project_id')
                ->whereRaw("FIND_IN_SET('2', gl_project.level) = 0 AND FIND_IN_SET('3', gl_project.level) = 0")
                ->whereRaw("FIND_IN_SET('7', gl_project_deploy_optimize.special) = 0 AND FIND_IN_SET('8', gl_project_deploy_optimize.special) = 0")
                ->count();
            $three_qualified_count = $projectModel->where('gl_project.extend_type',0)
                ->where('gl_project.delete_status',0)
                ->where('gl_project.old_project_id',0)
                ->where('gl_project.is_remain_today',1)
                ->where('gl_project_deploy_optimize.start_date','>=',$threeMonthsAgo.'-01')
                ->where('gl_project_deploy_optimize.start_date','<=',$threeMonthsAgo.'-31')
                ->whereIn('gl_project_deploy_optimize.optimist_mid',$idArr)
                ->whereIn('gl_project.type',[2,4,6])
                ->where('gl_project_deploy_build.plan','!=',0)
                ->leftJoin('gl_project_deploy_optimize', 'gl_project.id', '=', 'gl_project_deploy_optimize.project_id')
                ->leftJoin('gl_project_deploy_build', 'gl_project.id', '=', 'gl_project_deploy_build.project_id')
                ->whereRaw("FIND_IN_SET('2', gl_project.level) = 0 AND FIND_IN_SET('3', gl_project.level) = 0")
                ->whereRaw("FIND_IN_SET('7', gl_project_deploy_optimize.special) = 0 AND FIND_IN_SET('8', gl_project_deploy_optimize.special) = 0")
                ->count();
            if($three_project_count != 0){
                $three_rate = number_format($three_qualified_count / $three_project_count, 2);
            }else{
                $three_rate = 0;
            }
            $data = $projectModel->where('gl_project.extend_type',0)
                ->where('gl_project.delete_status',0)
                ->where('gl_project_deploy_optimize.start_date','<=',$date)
                ->where('gl_project.is_remain_today',1)
                ->whereIn('gl_project_deploy_optimize.optimist_mid',$idArr)
                ->whereIn('gl_project.type',[2,4,6])
                ->leftJoin('gl_project_deploy_optimize', 'gl_project.id', '=', 'gl_project_deploy_optimize.project_id')
                ->whereRaw("FIND_IN_SET('2', gl_project.level) = 0 AND FIND_IN_SET('3', gl_project.level) = 0")
                ->whereRaw("FIND_IN_SET('7', gl_project_deploy_optimize.special) = 0 AND FIND_IN_SET('8', gl_project_deploy_optimize.special) = 0")
                ->select(['gl_project.title','gl_project.finish_remain_day','gl_project_deploy_optimize.start_date'])->get()->toArray();
            $saveData[] = [
                'date'=>date('Y-m-d', strtotime('yesterday')),
                'type'=> $key,
                'project_count'=>$project_count,
                'qualified_count'=>$qualified_count,
                'rate'=>$rate,
                'three_project_count'=>$three_project_count,
                'three_qualified_count'=>$three_qualified_count,
                'three_rate'=>$three_rate,
                'data' => json_encode($data,true)
            ];
        }
        return $saveData;
    }

}