<?php
namespace app\common\command;

use app\admin\model\Record;
use app\admin\model\User;
use app\crm\model\Customer;
use think\Config;
use think\console\Command;
use think\console\Input;
use think\console\input\Argument;
use think\console\Output;
use think\Request;

class ImportFollowRecord extends Command
{
    protected function configure()
    {
        $this->setName('import:record')
            ->addArgument('file_path', null, '导入文件路径')
            ->setDescription('导入跟进记录');
    }

    protected function execute(Input $input, Output $output)
    {
        /**
         * 第三行开始、共六列
         * 
         * 客户名称*	客户号码*	跟进方式*	跟进内容*	跟进人*	 跟进时间
         */
        set_time_limit(0);
        Request::instance()->module('crm');
        Config::load(APP_PATH . '../config/database.php', 'database');

        $file_path = $input->getArgument('file_path');

        $user_list = User::field(['id', 'realname'])->select();
        $user_map = array_column($user_list, 'id', 'realname');

        if (file_exists($file_path)) {

            // 加载导入数据文件
            $objRender = \PhpOffice\PhpSpreadsheet\IOFactory::createReader('Xlsx');
            $objRender->setReadDataOnly(true);
            $ExcelObj = $objRender->load($file_path);

            // 指定工作表
            $sheet = $ExcelObj->getSheet(0);

            // 总行数
            $max_row = $sheet->getHighestRow();
            $max_column = $sheet->getHighestColumn();

            $log_file = RUNTIME_PATH . 'import_record/' . date('Y_m_d_H_i') . '.log';
            $data_file = RUNTIME_PATH . 'import_record/' . date('Y_m_d_H_i') . '.data';
            if (!file_exists(RUNTIME_PATH . 'import_record')) {
                $res = mkdir(RUNTIME_PATH . 'import_record', '0777', true);
                if (!$res) {
                    $output->writeln('Runtime 目录无权限');
                    return;
                }
            }

            $ask = $output->ask($input, '共 ' . ($max_row - 2) . ' 条数据,开始导入(yes OR no)?', 'no');
            if ($ask != 'yes') {
                $output->writeln('已取消');
                return;
            }

            for ($i = 3; $i <= $max_row; $i++) {
                $res = $sheet->rangeToArray("A{$i}:F{$i}")[0];

                $user_id = $user_map[$res[4]] ?? 1;

                $time = strtotime($res[5]);

                $mobile = preg_replace('/[^\d]/', '', $res[1]);

                $customer_id = Customer::where(['name' => $res[0], 'mobile' => $mobile])->value('customer_id');

                if (!$customer_id) {
                    $info = "{$res[0]}@{$res[1]}  未找到客户". PHP_EOL;
                    $output->writeln($info);
                    file_put_contents($log_file, $info . PHP_EOL, FILE_APPEND);

                    file_put_contents($data_file, json_encode($res) . PHP_EOL, FILE_APPEND);

                    continue;
                }

                $data = [
                    'types' => 'crm_customer',
                    'types_id' => $customer_id,
                    'content' => $res[3],
                    'category' => $res[2],
                    'next_time' => 0,
                    'business_ids' => '',
                    'contacts_ids' => '',
                    'create_time' => $time,
                    'update_time' => $time,
                    'create_user_id' => $user_id,
                ];

                if (!Record::insert($data)) {
                    $info = "{$res[0]}@{$res[1]} 写入数据库失败" . PHP_EOL;
                    $output->writeln($info);
                    file_put_contents($log_file, $info . PHP_EOL, FILE_APPEND);

                    file_put_contents($data_file, json_encode($res) . PHP_EOL, FILE_APPEND);
                }

            }

        } else {
            $output->writeln('请输入正确的文件路径');
        }
    }
}