<?php

namespace app\command;

use app\admin\common\User;
use think\console\Command;
use think\console\Input;
use think\console\Output;
use think\Exception;
use think\facade\Cache;
use think\facade\Db;

class TempHandleBusinessData extends Command
{

    private $key = 'temp_handle_business_data_lock_key';

    protected function configure()
    {
        // 指令配置
        $this->setName('TempHandleBusinessData')
            ->setDescription('将业务公司数据同步到结算平台');
    }

    protected function execute(Input $input, Output $output)
    {
        $tmp = Cache::store('redis')->handler()->get($this->key);

        if ($tmp) return '';//不执行

        Cache::store('redis')->handler()->set($this->key, 1, 5 * 60);

        try {

            //临时同步供应商数据
            $temp = Db::connect('mysql_sys')
                ->name('supplier')
                ->alias('a')
                ->field('a.*,b.contactor,b.position,b.mobile')
                ->leftJoin('supplier_contact b', 'b.code=a.code')
                ->where('a.is_del', 0)
                ->where('a.addtime', '>=', date('Y-m-d H:i:s', time() - 5 * 60))
                ->select()
                ->toArray();

            if (!empty($temp)) {
                $a = Db::connect('mysql_cxinv')
                    ->table('cfp_supplier_info')
                    ->whereIn('code', array_column($temp, 'code'))
                    ->column('code', 'code');

                $ins_supplier = [];
                foreach ($temp as $val) {

                    if (!isset($a[$val['code']])) {
                        $ins_supplier[] = [
                            'name' => $val['name'],
                            'code' => $val['code'],
                            'source' => $val['source'],
                            'contector' => $val['contactor'],
                            'post' => $val['position'],
                            'type' => $val['type'],
                            'nature' => $val['supplier_type'],
                            'corporation' => $val['legaler'],
                            'registertime' => $val['registertime'],
                            'capital' => $val['capital'],
                            'supplier_type' => $val['supplier_type'],
                            'pay_method' => $val['pay_type'],
                            'paydays' => $val['pay_day'],
                            'mobile' => $val['mobile'],
                            'address' => $val['addr'],
                            'return_ticket' => $val['ticket_type'],
                            'delivery' => $val['delivery_way'],
                            'status' => $val['status'],
                            'addtime' => $val['addtime'],
                            'updatetime' => $val['updatetime'],
                            'registercode' => $val['registercode'],
                            'level' => $val['level'],
                            'product_category' => $val['product_category'],
                            'license_img' => $val['license_img'],
                        ];
                    }

                }
                if ($ins_supplier) Db::connect('mysql_cxinv')->table('cfp_supplier_info')->insertAll($ins_supplier);
            }

            $userCommon = new User();
            $rs = $userCommon->handle('get_business_list_tmp', ['where' => [
                ['a.addtime', '>=', date('Y-m-d H:i:s', time() - 5 * 60)],
            ]]);

//            $output->writeln('---***---');
//            $output->writeln(json_encode($rs,JSON_UNESCAPED_UNICODE));
//            $output->writeln('---***---');
            if (isset($rs['code']) && $rs['code'] == 0 && !empty($rs['data'])) {

                $all_code = array_column($rs['data'], 'companyNo');

                //业务公司
                $exists = Db::connect('mysql_cxinv')
                    ->table('cfp_company_info')
                    ->whereIn('companyNo', $all_code)
                    ->column('id', 'companyNo');

                //供应商
                $gys_exists = Db::connect('mysql_cxinv')
                    ->table('cfp_supplier_info')
                    ->whereIn('code', array_column($rs['data'], 'supplierNo'))
                    ->column('*', 'code');

                $insert = $gys_insert = [];
                foreach ($rs['data'] as $item) {
                    if (!isset($exists[$item['companyNo']])) {
                        $insert[] = [
                            'companyNo' => $item['companyNo'],
                            'company_name' => $item['company'],
                            'company_address' => $item['addr'],
                            'company_license' => $item['inv_code'],
                            'bank_name' => $item['inv_bank'],
                            'bankNo' => $item['inv_bankNo'],
                            'contector' => $item['inv_legaler'],
                            'mobile' => $item['mobile'],
                            'company_img' => $item['license_img'],
                            'status' => 0,//默认禁用,需要在结算平台启用
                            'is_del' => $item['is_del'],
                            'addtime' => $item['addtime'],
                            'updatetime' => $item['updatetime'],
                            //以下字段填空字符串,需要用户在结算平台补充值
                            'input_ticket' => '',
                            'out_ticket' => '',
                            'voider' => '',
                            'payee' => '',
                            'drawer' => '',
                            'reviewer' => '',
                            'ownerPlace' => '',
                            'denomination' => '',
                            'invoiceType' => '',
                        ];

                        $gys_insert[] = array_merge(
                            $gys_exists[$item['supplierNo']],
                            [
                                'id' => null,
                                'code' => $item['companyNo'],
                                'type' => '企业',
                                'addtime' => date('Y-m-d H:i:s'),
                                'updatetime' => date('Y-m-d H:i:s'),
                            ]
                        );
                    }
                }

                if ($insert) {
                    $res = Db::connect('mysql_cxinv')
                        ->table('cfp_company_info')
                        ->insertAll($insert);
                    $output->writeln('同步业务公司数据成功,共' . $res);
                }
                if ($gys_insert) {
                    Db::connect('mysql_cxinv')
                        ->table('cfp_supplier_info')
                        ->insertAll($gys_insert);
                }

            }

            Cache::store('redis')->handler()->set($this->key, 0);

        } catch (Exception $exception) {

            Cache::store('redis')->handler()->set($this->key, 0);

            $output->writeln('脚本出错,' . $exception->getMessage() . '|' . $exception->getFile() . ':' . $exception->getLine());

        }
    }

}