<?php
namespace app\index\controller;

use app\common\util\ExcelUtil;
use app\hander\HelpHander;
use Eden\Mail\Pop3;
use MailSo\Mail\MailClient;
use PhpImap\Mailbox;
use PHPMailer\PHPMailer\Exception;
use PHPMailer\PHPMailer\PHPMailer;
use PhpOffice\PhpWord\PhpWord;
use PhpOffice\PhpWord\TemplateProcessor;
use think\App;
use think\Controller;
use think\Db;
use think\Env;
use think\helper\Time;
use tools\Oaimap;
use tools\Oaimap2;
use tools\Qxsms;
use app\api\controller\v1\HouseFloorInfo;
use Webklex\PHPIMAP\Client;
use Webklex\PHPIMAP\ClientManager;
use Webklex\PHPIMAP\Folder;

class Index extends Controller
{
    public function __construct(App $app = null)
    {
        parent::__construct($app);
//        exit();
    }

    public function delemail(){
        exit();
        model('Email')->batchDel();
    }

    public function apply(){
        $id = 32884;
        $content = '';
        $userList = '';
        $formJson = '';
        $userId = 100221;
        model('ApplyRecord')->audit($id,$userId,$content,$formJson,$userList);
    }

    public function index(){
//        $day = "2024-01-04";
//        $lastmonth = get_lastmonth_by_day($day);
//        halt($lastmonth);

//        $day = "1981-11-04";
//        halt(calculate_age($day));

        //&ipmc_jjzx$.ipmc.
//        $qxsms = new Qxsms(config('app.sms_config'));
//        $content = "【基建中心】谢正辉提交的上会文件需要您审批。";
//        $phone = '13838379499';
//        $ret = $qxsms->send($phone,$content);
//        dump($qxsms->getError());
//        halt($ret);

//        $str = 'ABCDEFHHIGKLMNOPGRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890';
//        $str1 = msubstr(str_shuffle($str), 0, mt_rand(2,6));
//        $str2 = msubstr(str_shuffle($str), 0, mt_rand(2,6));
//        $str3 = msubstr(str_shuffle($str), 0, mt_rand(2,6));
//        $password = $str1.'&'.$str2.'.'.$str3;
        halt(404);

    }

    public function xgsb(){
        exit();
//        $salaryRecordId = 521;
        $salaryRecordId = 520;
        $lists = Db::name('salary_record_special')
            ->alias('a')
            ->join('salary_record_log b','b.salary_record_id = a.salary_record_id and b.user_id = a.user_id')
            ->where('a.salary_record_id',$salaryRecordId)
            ->field('a.*,b.btjson')
            ->select();
        foreach ($lists as $k=>$v){
            $ggj = 0;
            $qynj = 0;
            $yla = 0;
            $yli = 0;
            $sye = 0;
            $btjson = json_decode($v['btjson'],true);
            foreach ($btjson as $kk=>$vv){
                // 1=公积金 2=企业年金 3=养老保险 4=医疗保险 5=失业保险
                if($vv['sbtype'] == 1){
                    $ggj += $vv['money'];
                }else if($vv['sbtype'] == 2){
                    $qynj += $vv['money'];
                }else if($vv['sbtype'] == 3){
                    $yla += $vv['money'];
                }else if($vv['sbtype'] == 4){
                    $yli += $vv['money'];
                }else if($vv['sbtype'] == 5){
                    $sye += $vv['money'];
                }
            }

            $data = [
                'ljgjj' => $v['ljgjj'] + $ggj*2,
                'ljylobx' => $v['ljylobx'] + $yla*2,
                'ljsybx' => $v['ljsybx'] + $sye*2,
                'ljylibx' => $v['ljylibx'] + $yli*2,
                'ljnj' => $v['ljnj'] + $qynj*2,
            ];

            $data['ljsqljxmhj'] = $v['ljsqljxmhj'] + 2*($ggj+$yla+$sye+$yli+$qynj);
            Db::name('salary_record_special')->where('id',$v['id'])->update($data);
        }
        halt(date('Y-m-d H:i:s').'完成');
    }

    public function dinneruser(){
        $lists = Db::name('user')
            ->alias('a')
            ->join('user_info b','a.id = b.user_id')
            ->where('a.enable',1)
            ->where('a.del',0)
            ->field('a.id,a.phone,a.password,b.name')
            ->select();
        $lists = $lists?$lists:[];
        $count = 0;
        foreach ($lists as $k=>$v){
            if(!$v['phone']){
                continue;
            }
            $id = Db::name('dinner_user')->where('phone',$v['phone'])->where('del',0)->value('id');
            if($id){
                continue;
            }
            Db::name('dinner_user')->insert([
                'phone' => $v['phone'],
                'password' => $v['password'],
                'name' => $v['name'],
                'company_id' => 5,
                'create_time' => date('Y-m-d H:i:s'),
                'enable' => 1,
                'del' => 0
            ]);
            $count++;
        }
        halt($count);
    }

    public function douser(){ // u1=53 u6=38 u2=40 u3=34 u4=120
        exit();
        $companyId = input('company/d',0);
        if(!in_array($companyId,[1,2,3,4,6])){
            halt('参数错误');
        }
        $reader = new \PhpOffice\PhpSpreadsheet\Reader\Xlsx();
        $spreadsheet = $reader->load('./u'.$companyId.'.xlsx');
        $sheet = $spreadsheet->getActiveSheet();
        $keys = ['A','B'];
        $data = [];
        foreach ($sheet->getRowIterator(2) as $row) {
            $tmp = array();
            foreach ($row->getCellIterator() as $k=>$cell) {
                if(!in_array($k,$keys)){
                    continue;
                }
                $val = $cell->getFormattedValue();
                if(in_array($k,$keys)){
                    $tmp[$k] = str_ireplace(',','',$val);
                }
            }
            $data[] = $tmp;
        }
        dump(count($data));
        $count = 0;
        foreach ($data as $k=>$v){
            $id = Db::name('dinner_user')->where('phone',$v['B'])->where('del',0)->value('id');
            if($id){
                continue;
            }
            $ret = Db::name('dinner_user')->insert([
                'phone' => $v['B'],
                'password' => password_hash('123456',PASSWORD_DEFAULT),
                'name' => $v['A'],
                'company_id' => $companyId,
                'create_time' => date('Y-m-d H:i:s'),
                'enable' => 1,
                'del' => 0
            ]);
            if($ret){
                $count++;
            }
        }

        halt($count);

    }

    public function email(){
        exit();
        $lists = Db::name('user_email')->where('id','>',161)->order('id asc')->limit(50)->select();
        $lists = $lists?$lists:[];
        $count = 0;
        $password = "ipmcoa@2020.";
        foreach ($lists as $k=>$v){
            $ret = $this->editEmail($v['eid'],$v['user_id'],$password);
            if($ret){
                $count++;
            }
        }
        dump($count);
        halt($lists);
    }

    private function editEmail($id,$userId,$password){
        $data = [
            'id' => $id,
            'password' => $password,
            'is_password' => 0,
            'uname' => '',
            'position' => '',
            'tel' => '',
            'branch_id' => 0,
            'active' => 1, // 启用
            'is_imap' => 1,
            'limits' => 0,
            'limitg' => 0,
            'is_convert' => 0,
            'login_password' => 0,
            'disabled_password' => 1,
            'my_spam_mode' => 2,
        ];
        if(!empty($data['password'])){
            $data['password'] = $password;
            $data['is_password'] = 1;
        }

        //获取用户最优先的部门
        $dep = Db::name('user_job')
            ->alias('uj')
            ->join('job j','j.id = uj.job_id')
            ->join('dep d','d.id = j.dep_id')
            ->where('uj.user_id',$userId)
            ->where('j.del',0)
            ->where('j.enable',1)
            ->where('d.del',0)
            ->where('d.enable',1)
            ->order('d.sorts asc,d.id asc')
            ->value('d.email_branch');
        $data['branch_id'] = $dep?$dep:0;

        $config = config('app.email');
        $param = [
            '_key' => $config['key'],
            '_lang' => 'zh-cn',
        ];

        $name = Db::name('user_info')->where('user_id',$userId)->value('name');
        $data['uname'] = $name;
        $param = array_merge($param,$data);

        $url = $config['host'].'User/update';

        Db::startTrans();
        try{
            $sdata = [
                'eid' => $data['id'],
                'update_time' => date('Y-m-d H:i:s'),
                'active' => $data['active']
            ];
            if(!empty($data['password'])){
                $sdata['password'] = think_encrypt($data['password']);
            }
            $res = Db::name('user_email')->where('user_id',$userId)->update($sdata);
            if(!$res){
                \exception('操作失败');
            }

            $ret = $this->http_post($url,$param);
            if(!$ret){
                \exception($this->error);
            }

            Db::commit();
        }catch (\think\Exception $e){
            Db::rollback();
            trace($e->getMessage());
            return false;
        }

        return true;
    }

    private function http_post($url,$param){
        try{
            $ret = curl_post($url,$param);
            trace($url);
            trace($ret);
            $data = json_decode($ret,true);
            if($data['status'] == 1){
                return $data;
            }else{
                \exception($data['msg']);
            }
        }catch (\think\Exception $e){
            $this->error = $e->getMessage();
            return false;
        }
    }

    public function apply2(){
//        $start = '2022-01-28 下午';
//        $end = '2022-01-28 下午';
//        $type = 1;
//        $days = calculate_leave($start,$end,$type);
//        halt($days);
//        $id = 15016;
//        $userId = 100221;
//        $content = '同意';
//        model('ApplyRecord')->audit($id,$userId,$content,[],[]);
//        HelpHander::success([],'操作成功');

        $formJson = '[{"componentName":"ddleavefield","components":[{"componentName":"ddleaveselectfield","defaultApi":0,"defaultAutorekonTime":false,"defaultImportant":true,"defaultLable":"请假类型","defaultPrint":false,"defaultProps":"请选择","defaultShow":false,"defaultTotal":false,"defaultTranslate":false,"idx":0,"important":false,"inTablefield":false,"isModify":true,"label":false,"name":"请假类型选择框","placeholder":false,"print":false,"required":false,"values":"{\"id\":2,\"name\":\"病假\"}"},{"componentName":"dddatefield","defaultApi":0,"defaultAutorekonTime":false,"defaultFormat":"yyyy-MM-dd 上下午","defaultImportant":true,"defaultLable":"开始日期","defaultPrint":false,"defaultProps":"请选择","defaultShow":false,"defaultTotal":false,"defaultTranslate":false,"idx":1,"important":false,"inTablefield":false,"isModify":true,"label":false,"name":"日期","placeholder":false,"print":false,"required":false,"values":"2022-01-10  上午"},{"componentName":"dddatefield","defaultApi":0,"defaultAutorekonTime":false,"defaultFormat":"yyyy-MM-dd 上下午","defaultImportant":true,"defaultLable":"结束日期","defaultPrint":false,"defaultProps":"请选择","defaultShow":false,"defaultTotal":false,"defaultTranslate":false,"idx":2,"important":false,"inTablefield":false,"isModify":true,"label":false,"name":"日期","placeholder":false,"print":false,"required":false,"values":"2022-01-10  上午"},{"componentName":"ddselectfield","defaultApi":0,"defaultAutorekonTime":false,"defaultImportant":false,"defaultLable":"是否离京","defaultOptions":[{"idx":1,"isCheck":false,"text":"是"},{"idx":2,"isCheck":false,"text":"否"}],"defaultPrint":false,"defaultProps":"请选择","defaultShow":false,"defaultTotal":false,"defaultTranslate":false,"idx":3,"important":false,"inTablefield":false,"isModify":true,"label":false,"name":"单选框","placeholder":false,"print":false,"required":false,"values":"否"},{"componentName":"dddatefield","defaultApi":0,"defaultAutorekonTime":false,"defaultFormat":"yyyy-MM-dd 上下午","defaultImportant":false,"defaultLable":"离京日期","defaultPrint":false,"defaultProps":"请选择","defaultShow":false,"defaultTotal":false,"defaultTranslate":false,"idx":4,"important":false,"inTablefield":false,"isModify":true,"label":false,"name":"日期","placeholder":false,"print":false,"required":false,"values":""},{"componentName":"dddatefield","defaultApi":0,"defaultAutorekonTime":false,"defaultFormat":"yyyy-MM-dd 上下午","defaultImportant":false,"defaultLable":"返京日期","defaultPrint":false,"defaultProps":"请选择","defaultShow":false,"defaultTotal":false,"defaultTranslate":false,"idx":5,"important":false,"inTablefield":false,"isModify":true,"label":false,"name":"日期","placeholder":false,"print":false,"required":false,"values":""},{"componentName":"textfield","defaultApi":0,"defaultAutorekonTime":false,"defaultImportant":false,"defaultLable":"前往地区","defaultPrint":false,"defaultProps":"请输入","defaultShow":false,"defaultTotal":false,"defaultTranslate":false,"idx":6,"important":false,"inTablefield":false,"isModify":true,"label":false,"name":"单行输入框","placeholder":false,"print":false,"required":false,"values":""}],"defaultApi":0,"defaultAutorekonTime":false,"defaultImportant":true,"defaultLable":"请假套件","defaultPrint":true,"defaultProps":"","defaultShow":false,"defaultTotal":false,"defaultTranslate":false,"idx":7,"important":false,"inTablefield":false,"isModify":true,"label":false,"name":"请假套件","placeholder":false,"print":false,"required":false},{"componentName":"textareafield","defaultApi":0,"defaultAutorekonTime":false,"defaultImportant":true,"defaultLable":"事由及说明","defaultPrint":true,"defaultProps":"请输入","defaultShow":false,"defaultTotal":false,"defaultTranslate":false,"idx":6,"important":true,"inTablefield":false,"isModify":true,"label":true,"name":"多行输入框","placeholder":true,"print":true,"required":true,"values":"就诊"},{"componentName":"ddattachment","defaultApi":0,"defaultAutorekonTime":false,"defaultImportant":false,"defaultLable":"附件","defaultPrint":false,"defaultShow":false,"defaultTotal":false,"defaultTranslate":false,"idx":3,"important":false,"inTablefield":false,"isModify":true,"label":false,"name":"附件","placeholder":false,"print":false,"required":false,"values":""},{"componentName":"ddphotofield","defaultApi":0,"defaultAutorekonTime":false,"defaultImportant":false,"defaultLable":"图片","defaultPrint":false,"defaultShow":false,"defaultTotal":false,"defaultTranslate":false,"idx":8,"important":false,"inTablefield":false,"isModify":true,"label":false,"name":"图片","placeholder":false,"print":false,"required":false,"values":"http://oaapi.dr-ipmc.org.cn/uploads2/20220110/7a3838a1e2945a45c0027ac9dc5942c1.jpeg"}]';
        $formJson = json_decode($formJson,true);
        $start = '';
        $end = '';
        $isleavebj = '否'; // 默认不离京
        $lbjstart = '';
        $lbjend = '';
        $address = '';
        $type = 1; // 1=减去节假日 0=不减节假日

        $data = [
            'org_id' => 3,
            'user_id' => 1,
            'apply_id' => 5650,
            'create_time' => date('Y-m-d H:i:s'),
            'status' => 0
        ];
        foreach ($formJson as $k=>$v){
            if($v['componentName'] == 'ddleavefield'){
                foreach ($v['components'] as $key=>$val){
                    switch ($val['idx']){
                        case '0':
                            $leave = json_decode($val['values'],true);
                            $data['leave_type'] = $leave['id'];
                            break;
                        case '1':
                            $start = $val['values'];
                            $starts = explode(' ',$start);
                            if($starts[count($starts)-1] == '上午'){
                                $data['start_time'] = $starts[0].' 00:00:00';
                            }else{
                                $data['start_time'] = $starts[0].' 12:00:00';
                            }
                            break;
                        case '2':
                            $end = $val['values'];
                            $ends = explode(' ',$end);
                            if($ends[count($ends)-1] == '上午'){
                                $data['end_time'] = $ends[0].' 11:59:59';
                            }else{
                                $data['end_time'] = $ends[0].' 23:59:59';
                            }
                            break;
                        case '3':
                            $isleavebj = isset($val['values'])?$val['values']:'否';
                            break;
                        case '4':
                            $lbjstart = isset($val['values'])?$val['values']:'';
                            break;
                        case '5':
                            $lbjend = isset($val['values'])?$val['values']:'';
                            break;
                        case '6':
                            $address = isset($val['values'])?$val['values']:'';
                            break;
                    }
                }
                break;
            }
        }

        if($data['leave_type'] == 6){// 产假,不减节假日
            $type = 0;
        }
        dump($start);
        dump($end);
        dump($type);
        $data['days'] = calculate_leave($start,$end,$type);
        $data['cur_days'] = $data['days'];

        halt($data);


    }

    public function sb(){
        exit();
        $reader = new \PhpOffice\PhpSpreadsheet\Reader\Xlsx();
        $spreadsheet = $reader->load('./xinhua.xlsx');
        $sheet = $spreadsheet->getActiveSheet();
        $keys = ['A','G','I','K','N','P','R','T','X','Z','AC','AE'];
        $data = [];
        foreach ($sheet->getRowIterator(2) as $row) {
            $tmp = array();
            foreach ($row->getCellIterator() as $k=>$cell) {
                if(!in_array($k,$keys)){
                    continue;
                }
                $val = $cell->getFormattedValue();
                if(in_array($k,$keys)){
                    $tmp[$k] = floatval(str_ireplace(',','',$val));
                }
            }
            $data[] = $tmp;
        }
//        halt($data);
        $salaryId = 370;
        $num1 = $num2 = 0;
        foreach ($data as $k=>$v){
            $ret = Db::name('salary_record_sb')
                ->where('salary_record_id',$salaryId)
                ->where('user_id',$v['A'])
                ->find();
            if($ret){
                $res = Db::name('salary_record_sb')->where('id',$ret['id'])->update([
                    'ylap' => $ret['ylap'] + floatval($v['G']),
                    'syep' => $ret['syep'] + floatval($v['I']),
                    'ylip' => $ret['ylip'] + floatval($v['K']),
                    'ylac' => $ret['ylac'] + floatval($v['N']),
                    'syec' => $ret['syec'] + floatval($v['P']),
                    'ylic' => $ret['ylic'] + floatval($v['R']),
                    'gsc' => $ret['gsc'] + floatval($v['T']),
                    'gjjp' => $ret['gjjp'] + floatval($v['X']),
                    'gjjc' => $ret['gjjc'] + floatval($v['Z']),
                    'qynjp' => $ret['qynjp'] + floatval($v['AC']),
                    'qynjc' => $ret['qynjc'] + floatval($v['AE']),
                ]);
                if($res){
                    $num1++;
                }
            }

            $ret = Db::name('salary_record_special')
                ->where('salary_record_id',$salaryId)
                ->where('user_id',$v['A'])
                ->find();
            if($ret){
                $res = Db::name('salary_record_special')->where('id',$ret['id'])->update([
                    'ljgjj' => $ret['ljgjj'] + floatval($v['X']),
                    'ljnj' => $ret['ljnj'] + floatval($v['AC']),
                    'ljsybx' => $ret['ljsybx'] + floatval($v['I']),
                    'ljylobx' => $ret['ljylobx'] + floatval($v['G']),
                    'ljylibx' => $ret['ljylibx'] + floatval($v['K']),
                    'ljsqljxmhj' => $ret['ljsqljxmhj'] + floatval($v['X']) + floatval($v['AC']) + floatval($v['I']) + floatval($v['G']) + floatval($v['K'])
                ]);
                if($res){
                    $num2++;
                }
            }
        }
        dump($num1);
        dump($num2);
        halt($data);

    }

    public function oa(){
        exit();
        $reader = new \PhpOffice\PhpSpreadsheet\Reader\Xlsx();
        $spreadsheet = $reader->load('./oa.xlsx');
        $sheet = $spreadsheet->getActiveSheet();
        $keys = ['A','F','G','I','J','K','N','O','Q','R'];
        $data = [];
        foreach ($sheet->getRowIterator(2) as $row) {
            $tmp = array();
            foreach ($row->getCellIterator() as $k=>$cell) {
                if(!in_array($k,$keys)){
                    continue;
                }
                $val = $cell->getFormattedValue();
                if(in_array($k,$keys)){
                    $tmp[$k] = floatval(str_ireplace(',','',$val));
                }
            }
            $data[] = $tmp;
        }

        $salaryId = 376;
        $num1 = $num2 = 0;
        foreach ($data as $k=>$v){
            $ret = Db::name('salary_record_sb')
                ->where('salary_record_id',$salaryId)
                ->where('user_id',$v['A'])
                ->find();
            if($ret){
                $res = Db::name('salary_record_sb')->where('id',$ret['id'])->update([
                    'syep' => $ret['syep'] + floatval($v['F']),
                    'ylip' => $ret['ylip'] + floatval($v['G']),
                    'syec' => $ret['syec'] + floatval($v['I']),
                    'ylic' => $ret['ylic'] + floatval($v['J']),
                    'gsc' => $ret['gsc'] + floatval($v['K']),
                    'gjjp' => $ret['gjjp'] + floatval($v['N']),
                    'gjjc' => $ret['gjjc'] + floatval($v['O']),
                ]);
                if($res){
                    $num1++;
                }
            }

            $ret = Db::name('salary_record_special')
                ->where('salary_record_id',$salaryId)
                ->where('user_id',$v['A'])
                ->find();
            if($ret){
                $res = Db::name('salary_record_special')->where('id',$ret['id'])->update([
                    'ljgjj' => $ret['ljgjj'] + floatval($v['N']),
                    'ljsybx' => $ret['ljsybx'] + floatval($v['F']),
                    'ljylibx' => $ret['ljylibx'] + floatval($v['G']),
                    'ljsqljxmhj' => $ret['ljsqljxmhj'] + floatval($v['N']) + floatval($v['F']) + floatval($v['G'])
                ]);
                if($res){
                    $num2++;
                }
            }
        }
        dump($num1);
        dump($num2);
        halt($data);

    }

    public function save(){
        $username = "hzd@dr-ipmc.org.cn";
        $password = "12345678";
        $c = new Oaimap($username,$password);
        $filepath = './email/';
        $ret = $c->messageMimeStream('Sent','30','',false,$filepath);
//        $c->putFile($filepath,$ret['resource']);
        dump(file_get_contents($ret['resource']));
        halt($ret);
    }

    public function important(){
        // 已办结的改成已完成
        $count = Db::name('important_record')->where('status',2)->setField('status',5);
        dump($count);

        $count2 = Db::name('important_record')->where('status',0)->where('pid',0)->setField('status',1);
        dump($count2);
    }

    public function salary(){
        return false;
        //工伤(单位)=取两位小数(基数*0.003)+取两位小数(基数*0.003)-取两位小数(基数*0.0024)
        $lists = Db::name('salary_record_sb')->where('salary_record_id',360)->field('id,sb,gsc')->select();
        $count = 0;
        foreach ($lists as $k=>$v){
            $ngsc = round($v['sb']*0.003,2) + round($v['sb']*0.003,2) - round($v['sb']*0.0024,2);
            $lists[$k]['ngsc'] = $ngsc;
            if($ngsc != $v['gsc']){
                $count++;
                Db::name('salary_record_sb')->where('id',$v['id'])->update(['gsc'=>$ngsc]);
            }
        }
        halt($lists);
    }

    public function salarysy(){
        return false;
        //失业(单位)=取两位小数(基数*0.005)- (取两位小数(基数*0.008)-取两位小数(基数*0.005))
        $lists = Db::name('salary_record_sb')->where('salary_record_id',360)->field('id,sb,syec')->select();
        $count = 0;
        foreach ($lists as $k=>$v){
            $ngsc = round($v['sb']*0.005,2) - (round($v['sb']*0.008,2) - round($v['sb']*0.005,2));
            $lists[$k]['nsyec'] = $ngsc;
            if($ngsc != $v['syec']){
                $count++;
                Db::name('salary_record_sb')->where('id',$v['id'])->update(['syec'=>$ngsc]);
            }
        }
        halt($lists);
    }

    public function salary2(){
        return false;
        $sid = 319;
        $lists = Db::name('salary_record_log')->where('salary_record_id',$sid)->field('id,user_id,btjson')->select();
        foreach ($lists as $k=>$v){
            $btjson = json_decode($v['btjson'],true);
            $bt = 0;
            foreach ($btjson as $kk=>$vv){
                if($vv['id'] == 50){
                    $bt = $vv['money'];
                }
            }
            $info = Db::name('salary_record_special')->where('salary_record_id',$sid)->where('user_id',$v['user_id'])->find();
            if($info){
                Db::name('salary_record_special')->where('id',$info['id'])->update([
                    'ljsybx' => round($info['ljsybx'] - $bt,2),
                    'ljsqljxmhj' => round($info['ljsqljxmhj'] - $bt,2)
                ]);
            }

            $sb = Db::name('salary_record_sb')->where('salary_record_id',$sid)->where('user_id',$v['user_id'])->find();
            if($sb){
                Db::name('salary_record_sb')->where('id',$sb['id'])->update([
                    'syep' => round($sb['syep'] + $bt,2),
                ]);
            }

            $lists[$k]['bt'] = $bt;
        }

        halt($lists);
    }


    public function index2(){
        $val = '';
        $val = (float)$val;
        halt($val);
        $url = 'https://www.lzfh.com/api/dwz.php?cb=1&sturl=3&longurl=http://yyh2.app8888.top/index/user/register/invite_code/JT5XVC.html';
        $ret = curl_post($url);
//        $ret = file_get_contents($url);
        halt($ret);
        return false;
        $username = "hfp@dr-ipmc.org.cn";
        $password = "12345678";
        $c = new Oaimap($username,$password);
//        $ret = $c->getMessages('Drafts');
//        $ret = $c->getMessageByUid('Drafts',5008);
        $fromFolder = 'Archive';
        $toFolder = 'Trash';
        $uids = 6;
        $ret = $c->messageMove($fromFolder,$toFolder,$uids,true);
        halt($ret);

        // 输入文件标签
//        Header("Content-type: application/octet-stream");
//        Header("Accept-Ranges: bytes");
//        Header("Accept-Length: ".$ret['size']);
//        Header("Content-Disposition: attachment; filename=" . $ret['name']);
//        // 输出文件内容
//        echo $ret['content'];
//        exit;
    }

    public function sendMail(){
        $username = "hfp@dr-ipmc.org.cn";
        $password = "12345678";
        $c = new Oaimap($username,$password);
        $data = [
            'subject' => '3333',
            'body' => '4444',
            'to' => '[{"email":"hzd@dr-ipmc.org.cn","name":"黄志东"}]',
            'cc' => '[]',
            'bcc' => '',
            'attachment' => '[{"size":974,"name":"JZBRPLYM.png","big":0,"md5":"","url":"http://test.dr-ipmc.org.cn/uploads/20210712/c733555eda22f153b44b4680461f0e67.png"}]', // [{"big":0,"md5":"sdssfwe232323rfwefwef","url":"","name":"","size":122,"source":{"mimeIndex":"","uid":"1","folder":"Sent"}}}]
            'bookTime' => '',
            'priority' => 1,
            'dnt' => 0, // 0=阅读不回复 1=阅读回复
            'draftFolder' => 'Drafts', // 保存草稿时传
            'messageFolder' => '',// 编辑草稿箱时填写
            'messageUid' => '', // 编辑草稿箱uid
            'draftInfo' => null, // 回复、转发
            'inReplyTo' => '',
            'references' => '',
            'dsn' => 0 // 0=发送成功不回复 1=发送成功回复
        ];
        $from = [
            'name' => 'hfp',
            'email' => 'hfp@dr-ipmc.org.cn'
        ];
        $data['from'] = $from;
        $ret = $c->sendMessage($data);
        halt($ret);


//        $this->createEml($data,$from);
//        exit();

    }

    public function createEml($data,$from){
        $date = date('D, d M Y H:i:s');
        $data['date'] = $date;
        $altbody = strip_tags($data['body']);
        $messageId = md5(json_encode($data));
        $partend = get_rand_num().'.'.time();
        $part1 = '1_'.$partend;
        $emlstr = "Mime-Version: 1.0".PHP_EOL;
        $emlstr .= "Date: ".$date.' +0800'.PHP_EOL;
        $emlstr .= "Content-Type: multipart/mixed;".PHP_EOL;
        $emlstr .= " boundary=\"--=_Part_{$part1}\"".PHP_EOL;
        $emlstr .= "Message-ID: <{$messageId}@localhost>".PHP_EOL;
        $emlstr .= "X-Mailer: Postfix".PHP_EOL;
        if($data['book_time']){
            $emlstr .= "TimedSendDate: 1".PHP_EOL;
        }
        $emlstr .= 'From: "=?utf-8?B?'.base64_encode($from['name']).'?=" <'.$from['email'].'>'.PHP_EOL;
        $tos = json_decode($data['to'],true);
        $tostr = [];
        foreach ($tos as $k=>$v){
            $str = '';
            if($v['name']){
                $str .= '"=?utf-8?B?'.base64_encode($v['name']).'?=" <'.$v['email'].'>';
            }else{
                $str .= '<'.$v['email'].'>';
            }
            $tostr[] = $str;
        }
        $emlstr .= 'To: '.implode(',',$tostr).PHP_EOL;
        $ccs = json_decode($data['cc'],true);
        if($ccs){
            $ccstr = [];
            foreach ($ccs as $k=>$v){
                $str = '';
                if($v['name']){
                    $str .= '"=?utf-8?B?'.base64_encode($v['name']).'?=" <'.$v['email'].'>';
                }else{
                    $str .= '<'.$v['email'].'>';
                }
                $ccstr[] = $str;
            }
            $emlstr .= 'Cc: '.implode(',',$ccstr).PHP_EOL;
        }
        $bccs = json_decode($data['bcc'],true);
        if($bccs){
            $bccstr = [];
            foreach ($bccs as $k=>$v){
                $str = '';
                if($v['name']){
                    $str .= '"=?utf-8?B?'.base64_encode($v['name']).'?=" <'.$v['email'].'>';
                }else{
                    $str .= '<'.$v['email'].'>';
                }
                $bccstr[] = $str;
            }
            $emlstr .= 'Bcc: '.implode(',',$bccstr).PHP_EOL;
        }
        if($data['dnt'] == 1){
            $emlstr .= 'Disposition-Notification-To: '.$from['name'].PHP_EOL;
            $emlstr .= 'X-Confirm-Reading-To: '.$from['name'].PHP_EOL;
        }
        if($data['priority'] == 1){
            $emlstr .= 'X-Priority: 1 (Highest)'.PHP_EOL;
        }
        $emlstr .= 'Subject: =?utf-8?B?'.base64_encode($data['subject']).'?='.PHP_EOL;
        $emlstr .= PHP_EOL.'----=_Part_'.$part1.PHP_EOL;

        $part2 = '2_'.$partend;
        $emlstr .= "Content-Type: multipart/alternative;".PHP_EOL;
        $emlstr .= " boundary=\"--=_Part_{$part2}".PHP_EOL;
        $emlstr .= PHP_EOL.'----=_Part_'.$part2.PHP_EOL;
        $emlstr .= 'Content-Type: text/plain; charset="utf-8"'.PHP_EOL;
        $emlstr .= 'Content-Transfer-Encoding: quoted-printable'.PHP_EOL;
        $emlstr .= PHP_EOL.quoted_printable_encode($altbody).PHP_EOL;
        $emlstr .= PHP_EOL.'----=_Part_'.$part2.PHP_EOL;

        $emlstr .= 'Content-Type: text/html; charset="utf-8"'.PHP_EOL;
        $emlstr .= 'Content-Transfer-Encoding: quoted-printable'.PHP_EOL;
        $emlstr .= PHP_EOL.quoted_printable_encode($data['body']).PHP_EOL;
        $emlstr .= PHP_EOL.'----=_Part_'.$part2.'--'.PHP_EOL;

        // 附件
//        $emlstr .= PHP_EOL.'----=_Part_'.$part1.PHP_EOL;
//        $emlstr .= 'Content-Type: image/png; name="favicon.png"'.PHP_EOL;
//        $emlstr .= 'Content-Disposition: attachment; filename="favicon.png"'.PHP_EOL;
//        $emlstr .= 'Content-Transfer-Encoding: base64'.PHP_EOL;
//        $emlstr .= PHP_EOL.base64_encode(file_get_contents('./favicon.png')).PHP_EOL;
//        $emlstr .= PHP_EOL.'----=_Part_'.$part1.'--'.PHP_EOL;


        file_put_contents('./email/'.date('Ymd_').$messageId.'.eml', $emlstr);
    }

    public function login(){
        $email = 'hzd@dr-ipmc.org.cn';
        $res = model('Email')->login($email);
        halt($res);
    }

    public function p(){
        halt(config('database.db_email'));
        $url = "http://124.71.111.86:8010/Api/Smtp/send";
        $param = [
            '_key' => '3zMTJH1WHxYVz7yr',
            '_lang' => 'zh-cn',
            'from' => 'test@dr-ipmc.org.cn',
            'from_name' => 'hzdong',
            'to' => '13838379499@163.com',
            'subject' => 'test',
            'content' => 'Neri',
            'save_sent' => 1
        ];
        $ret = curl_post($url,$param);
        halt(json_decode($ret,true));
    }

    public function send(){
        $mail = new PHPMailer(true);
        try {
            //服务器配置
            $mail->CharSet ="UTF-8";                     //设定邮件编码
            $mail->isSMTP();                             // 使用SMTP
            $mail->Host = 'mail.dr-ipmc.org.cn';                // SMTP服务器
            $mail->SMTPAuth = true;                      // 允许 SMTP 认证
            $mail->Username = 'hzd@dr-ipmc.org.cn';                // SMTP 用户名  即邮箱的用户名
            $mail->Password = '12345678';             // SMTP 密码  部分邮箱是授权码(例如163邮箱)
            $mail->Port = 25;                            // 服务器端口 25 或者465 具体要看邮箱服务器支持

            $mail->SMTPOptions = array(
                'ssl' => array(
                    'verify_peer' => false,
                    'verify_peer_name' => false,
                    'allow_self_signed' => true
                )
            );

            // 设置优先级(1:紧急	3:普通	5:低)
            //message.setHeader("X-Priority", "1");
            // 要求阅读回执(收件人阅读邮件时会提示回复发件人,表明邮件已收到,并已阅读)
            //message.setHeader("Disposition-Notification-To", from);

            $mail->setFrom('hzd@dr-ipmc.org.cn', 'hzd');  //发件人
            $mail->addAddress('1570246817@qq.com', '黄志东');  // 收件人
            //$mail->addAddress('ellen@example.com');  // 可添加多个收件人
//            $mail->addReplyTo('xxxx@163.com', 'info'); //回复的时候回复给哪个邮箱 建议和发件人一致
            //$mail->addCC('cc@example.com');                    //抄送
            //$mail->addBCC('bcc@example.com');                    //密送

            //发送附件
            // $mail->addAttachment('../xy.zip');         // 添加附件
            // $mail->addAttachment('../thumb-1.jpg', 'new.jpg');    // 发送附件并且重命名

            //Content
            $mail->isHTML(true);                                  // 是否以HTML文档格式发送  发送后客户端可直接显示对应HTML内容
            $mail->Subject = '这里是邮件标题' . time();
            $mail->Body    = '<h1>这里是邮件内容</h1>' . date('Y-m-d H:i:s');
            $mail->AltBody = '如果邮件客户端不支持HTML则显示此内容';

            $ret = $mail->send();
            dump($mail->getLastMessageID());
            dump($ret);
            echo '邮件发送成功';
        } catch (Exception $e) {
            echo '邮件发送失败: ', $mail->ErrorInfo;
        }
    }

    public function email111(){
        $username = "hzd@dr-ipmc.org.cn";
        $password = "12345678";
        $c = new Oaimap($username,$password);
        $ret = $c->getMessageByUid('INBOX',11);
//        $msg = file_get_contents('./msg.eml');
//        $ret = $c->getFoldersTree($msg);
//        $ret = $c->getMessages();
//        $c->disconnect();
//        $header = [];
//        foreach ($ret as $message){
//            dump($message->getSubject()) ;
//        }
        halt($ret);
    }

    public function email2(){
        $username = "hzd@dr-ipmc.org.cn";
        $password = "12345678";
        $c = new Oaimap2($username,$password);
        $ret = $c->getMessageByUid('INBOX',11);
//        $msg = file_get_contents('./msg.eml');
//        $ret = $c->getFoldersTree($msg);
//        $ret = $c->getMessages();
//        $c->disconnect();
//        $header = [];
//        foreach ($ret as $message){
//            dump($message->getSubject()) ;
//        }
        halt($ret);
    }


    public function mailso(){
        include \think\facade\Env::get('root_path') . 'extend/MailSo/MailSo.php';
        $username = "hzd@dr-ipmc.org.cn";
        $password = "12345678";
        $sLogFileFullPath = 'E:/website/';
        define('APP_START_TIME', time());
//        $oDriver = \MailSo\Log\Drivers\File::NewInstance($sLogFileFullPath);
        $oDriver = \MailSo\Log\Drivers\Syslog::NewInstance();
        $oLogger = \MailSo\Log\Logger::SingletonInstance()->Add(
            $oDriver->WriteOnErrorOnly(false)
                ->WriteOnPhpErrorOnly(false)
                ->WriteOnTimeoutOnly(20)
        );
        $oMailClient = MailClient::NewInstance()->SetLogger($oLogger);
//        $oData = $oMailClient
//            ->Connect('mail.dr-ipmc.org.cn', 143)
//            ->Login($username, $password)
//            ->MessageList('INBOX',0,10);
//
//        $list = $this->responseObject($oData, 'MessageList');
//        $oData = $oMailClient
//            ->Connect('mail.dr-ipmc.org.cn', 143)
//            ->Login($username, $password)
//            ->Message('INBOX',12);
//
//        $list = $this->responseObject($oData, 'Message');

        $oData = $oMailClient
            ->Connect('mail.dr-ipmc.org.cn', 143)
            ->Login($username, $password)
            ->Folders();
        $list = $this->responseObject($oData);

//        $ret = $this->std_class_object_to_array($oData);
        halt($list);

    }



    public  function std_class_object_to_array($stdclassobject)
    {
        $array = [];
        $_array = is_object($stdclassobject) ? get_object_vars($stdclassobject) : $stdclassobject;
        foreach ($_array as $key => $value) {
            $value = (is_array($value) || is_object($value)) ? $this->std_class_object_to_array($value) : $value;
            $array[$key] = $value;
        }

        return $array;
    }

    public function index3(){
        $config = config('app.imap');
//        halt($config);
        $cm = new ClientManager($config);
        $oClient = $cm->account();
        $oClient->connect();


        $folders = $oClient->getFolders();

//Loop through every Mailbox
        /** @var \Webklex\PHPIMAP\Folder $folder */
        foreach($folders as $folder){

            //Get all Messages of the current Mailbox $folder
            /** @var \Webklex\PHPIMAP\Support\MessageCollection $messages */
            $messages = $folder->messages()->all()->get();

            /** @var \Webklex\PHPIMAP\Message $message */
            foreach($messages as $message){
                dump(is_utf8($message->getSubject()));
                if(!is_utf8($message->getSubject())){
                    echo iconv("GBK","UTF-8",$message->getSubject()).'<br />';
                }else{
                    echo $message->getSubject().'<br />';
                }

                echo 'Attachments: '.$message->getAttachments()->count().'<br />';
                echo $message->getHTMLBody().'<br />';

                //Move the current Message to 'INBOX.read'
//                if($message->move('INBOX.read') == true){
//                    echo 'Message has ben moved';
//                }else{
//                    echo 'Message could not be moved';
//                }
            }
        }
        exit();

//        $aFolder = $oClient->getFolders();
//        $ret = $oClient->createFolder('ssss.sssss');
//        halt($ret);
        $folder = $oClient->getFolderByPath('INBOX');

        $aMessage = $folder->messages()->all()->get();
        include \think\facade\Env::get('root_path') . 'extend/MailSo/lib/MailSo/Base/Utils.php';

        foreach($aMessage as $oMessage){
//                echo imap_mime_header_decode($oMessage->getAttributes()["subject"]).'<br />';
            echo \MailSo\Base\Utils::Utf8Clear($oMessage->getAttributes()["subject"]).'<br />';
                echo 'Attachments: '.$oMessage->getAttachments()->count().'<br />';
//                echo $oMessage->getHTMLBody(true);

                //Move the current Message to 'INBOX.read'
//                if($oMessage->moveToFolder('INBOX.read') == true){
//                    echo 'Message has ben moved';
//                }else{
//                    echo 'Message could not be moved';
//                }
        }

        halt('1111');

        $aFolder = $oClient->getFolders();

       foreach($aFolder as $oFolder){
//           $info = $oFolder->overview('1:*');
           $ret = $oFolder->getClient()->createFolder('subsss');
           halt($ret);
               dump($oFolder->path);
           dump($oFolder->name);
           dump($oFolder->full_name);
           dump($oFolder->children);
           halt(1111);
//           dump($info);
//
//            //Get all Messages of the current Mailbox $oFolder
//            /** @var \Webklex\PHPIMAP\Support\MessageCollection $aMessage */
//            $aMessage = $oFolder->messages()->all()->get();
//
//            /** @var \Webklex\PHPIMAP\Message $oMessage */
//            foreach($aMessage as $oMessage){
//                echo $oMessage->getSubject().'<br />';
//                echo 'Attachments: '.$oMessage->getAttachments()->count().'<br />';
//                echo $oMessage->getHTMLBody(true);
//
//                //Move the current Message to 'INBOX.read'
////                if($oMessage->moveToFolder('INBOX.read') == true){
////                    echo 'Message has ben moved';
////                }else{
////                    echo 'Message could not be moved';
////                }
//            }
       }

//        $aMessage = $oFolder->query()->all()->get();
//        halt($aMessage);
    }

    public function import(){
        halt('1111');
        $start = "2021-05-01 00:00:00";
        $end = "2021-05-31 23:59:59";
        $lists = Db::name('file')
            ->where('del',0)
            ->where('enable',1)
            ->where('create_time','>=',$start)
            ->where('create_time','<=',$end)
            ->order('id asc')
            ->select();
        $sn = $this->createNewSn(4);
        Db::startTrans();
        try{
            foreach ($lists as $k=>$v){
                $data = [
                    'title' => $v['title'],
                    'sn' => $sn,
                    'source' => $v['source'],
                    'proof' => $v['sn'],
                    'org_id' => 4,
                    'transfer' => 1,
                    'status' => 1,
                    'transfer_id' => $v['id'],
                    'create_time' => $v['create_time']
                ];
                $ret = Db::name('important')->insert($data);
                if(!$ret){
                    \exception('操作失吧');
                }

                $sn++;
            }

            Db::commit();
            echo '操作完成';
        }catch (\think\Exception $e){
            Db::commit();
            halt('错误'.$e->getMessage());
        }

    }

    private function createNewSn($orgId){
        $newsn = '';
        $sn = Db::name('important')->where('del',0)->where('org_id',$orgId)->order('id desc')->value('sn');
        $curY = date('y');
        if(!$sn){
            $newsn = $curY.'0001';
        }else{
            $y = substr($sn,0,2);
            if($curY != $y){
                $newsn = $curY.'0001';
            }else{
                $newsn = $sn+1;
            }
        }
        return $newsn;
    }

    private function matchMailHead($str){
        $headList = array();
        $headArr = array(
            'from',
            'to',
            'date',
            'subject'
        );

        foreach ($headArr as $key){
            if(preg_match('/'.$key.':(.*?)[\n\r]/is', $str,$m)){
                $match = trim($m[1]);
                $headList[$key] = $key=='date'?date('Y-m-d H:i:s',strtotime($match)):$match;
            }
        }
        return $headList;
    }

    public function word4(){
        $PHPWord  = new PhpWord();
        $templateProcessor  = new TemplateProcessor(__DIR__.'\test.docx');
        $arr = [
            [
                'programSn' => 'N0001',
                'company' => '中心',
                'fhUserName' => '张三',
                'agent' => '李四',
                'name' => [
                    ['name' => '未制定安全生','val'=>'sss'],
                    ['name' => '未制定安全生','val'=>'sss'],
                ]
            ],
            [
                'programSn' => 'N0002',
                'company' => '新华',
                'fhUserName' => '张三2',
                'agent' => '李四2',
                'name' => [
                    ['name' => '未制定安全生','val'=>'sss'],
                    ['name' => '未制定安全生','val'=>'sss'],
                ]
            ],
        ];

        $templateProcessor->cloneBlock('block_name', 0, true, false, $arr);

        // 循环次数
        $count = count($arr);
//        $templateProcessor->cloneRow('programSn', $count); //复制行、
//        foreach ($arr as $kk => $vv) {
//            $list = '';
//            for ($i = 0; $i < count($vv['list']); $i++) {
//                if ($i == (count($vv['list']) - 1)) {
//                    $list = $list . ($i + 1) . ' .${name#' . ($kk + 1) . '#' . ($i + 1) . '}';
//                } else {
//                    // <w:br/> 换行符
//                    $list = $list . ($i + 1) . ' .${name#' . ($kk + 1) . '#' . ($i + 1) . '}<w:br/>';
//                }
//            }
//            $templateProcessor->setValue('name#' . ($kk + 1), $list);
//        }

        // 保存新word文档
        $path = md5(time());
        // 将 word 文档保存至 你设置的路径
        $templateProcessor->saveAs('./zss' . time() . ".docx");

    }

    public function word(){
        $templateProcessor  = new TemplateProcessor(__DIR__.'/../../../public/word/stamp_tmp.docx');

        $templateProcessor->setValue('firstname', 'John');
        $templateProcessor->setValue('lastname', 'Doe');

        $arr = [
            [
                'programSn' => 'N0001',
                'company' => '中心',
                'fhUserName' => '张三',
                'agent' => '李四',
                'name1' => '应税凭证名称',
                'title' => '111',
                'name2' => '对方单位名称',
                'company2' => '111',
                'name3' => '签订日期',
                'handleDate' => '111',
                'name4' => '适用印花税税目',
                'stampTitle' => '111',
                'name5' => '计税金额',
                'money' => '111',
                'name6' => '适用税率',
                'stampBl' => '111',
                'name7' => '本期应纳税额',
                'sdMoney' => '111',
            ],
            [
                'programSn' => 'N0002',
                'company' => '中心',
                'fhUserName' => '张三',
                'agent' => '李四',
                'name1' => '应税凭证名称',
                'title' => '111',
                'name2' => '对方单位名称',
                'company2' => '111',
                'name3' => '签订日期',
                'handleDate' => '111',
                'name4' => '适用印花税税目',
                'stampTitle' => '111',
                'name5' => '计税金额',
                'money' => '111',
                'name6' => '适用税率',
                'stampBl' => '111',
                'name7' => '本期应纳税额',
                'sdMoney' => '111',
            ],
        ];
        $templateProcessor->cloneBlock('block_name', 0, true, false, $arr);
        $templateProcessor->cloneBlock('block_name2', 0, true, false, $arr);

        // 将 word 文档保存至 你设置的路径
        $file_dir = './word/zs' . time() . ".docx";
        $templateProcessor->saveAs($file_dir);

        $file = fopen ( $file_dir, "rb" );//以只读和二进制模式打开文件
        Header ( "Content-type: application/octet-stream" ); //告诉浏览器这是一个文件流格式的文件
        Header ( "Accept-Ranges: bytes" );  //请求范围的度量单位
        Header ( "Accept-Length: " . filesize ( $file_dir ) ); //Content-Length是指定包含于请求或响应中数据的字节长度
        //用来告诉浏览器,文件是可以当做附件被下载,下载后的文件名称为$file_name该变量的值。
        Header ( "Content-Disposition: attachment; filename=印花税计算表.docx" );
        echo fread ( $file, filesize ( $file_dir ) );   //读取文件内容并直接输出到浏览器
        fclose ( $file );
        @unlink($file_dir);
        exit ();

    }

    public function word2(){
        $templateProcessor  = new TemplateProcessor(__DIR__.'/../../../public/word/gerenjianli(1).docx');

        $templateProcessor->setValue('name', 'John');
//        $templateProcessor->setValue('lastname', 'Doe');

        $arr = [
            [
                'project' => 'N0001',
                'project_time' => '中心',
                'project_content' => '张三',
                'project_link' => '李四',
                'project_yeji' => '应税凭证名称',
            ],
            [
                'project' => 'N0002',
                'project_time' => '中心2',
                'project_content' => '张三',
                'project_link' => '李四',
                'project_yeji' => '应税凭证名称',
            ],
        ];
        $templateProcessor->cloneBlock('block_name2', 0, true, false, $arr);
//        $templateProcessor->cloneBlock('block_name2', 0, true, false, $arr);

        $arr2 = [
            [
                'programSn' => 'N0001',
                'company' => '中心',
                'fhUserName' => '张三',
                'agent' => '李四',
                'name1' => '应税凭证名称',
                'title' => '111',
                'name2' => '对方单位名称',
                'company2' => '111',
                'name3' => '签订日期',
                'handleDate' => '111',
                'name4' => '适用印花税税目',
                'stampTitle' => '111',
                'name5' => '计税金额',
                'money' => '111',
                'name6' => '适用税率',
                'stampBl' => '111',
                'name7' => '本期应纳税额',
                'sdMoney' => '111',
            ],
            [
                'programSn' => 'N0002',
                'company' => '中心',
                'fhUserName' => '张三',
                'agent' => '李四',
                'name1' => '应税凭证名称',
                'title' => '111',
                'name2' => '对方单位名称',
                'company2' => '111',
                'name3' => '签订日期',
                'handleDate' => '111',
                'name4' => '适用印花税税目',
                'stampTitle' => '111',
                'name5' => '计税金额',
                'money' => '111',
                'name6' => '适用税率',
                'stampBl' => '111',
                'name7' => '本期应纳税额',
                'sdMoney' => '111',
            ],
        ];
        $templateProcessor->cloneBlock('block_name3', 0, true, false, $arr2);

        // 将 word 文档保存至 你设置的路径
        $file_dir = './word/zs' . time() . ".docx";
        $templateProcessor->saveAs($file_dir);

        $file = fopen ( $file_dir, "rb" );//以只读和二进制模式打开文件
        Header ( "Content-type: application/octet-stream" ); //告诉浏览器这是一个文件流格式的文件
        Header ( "Accept-Ranges: bytes" );  //请求范围的度量单位
        Header ( "Accept-Length: " . filesize ( $file_dir ) ); //Content-Length是指定包含于请求或响应中数据的字节长度
        //用来告诉浏览器,文件是可以当做附件被下载,下载后的文件名称为$file_name该变量的值。
        Header ( "Content-Disposition: attachment; filename=印花税计算表.docx" );
        echo fread ( $file, filesize ( $file_dir ) );   //读取文件内容并直接输出到浏览器
        fclose ( $file );
        @unlink($file_dir);
        exit ();

    }

    public function wordold(){
        $PHPWord  = new PhpWord();
        $templateProcessor  = new TemplateProcessor(__DIR__.'\test.docx');
        $arr = [
            [
                'programSn' => 'N0001',
                'company' => '中心',
                'fhUserName' => '张三',
                'agent' => '李四',
                'list' => [
                    ['list' => '未制定安全生产责任制,扣10分;未经责任人签字确认,扣5分'],
                    ['list' => '未制定安全生产责任制,扣9分;未经责任人签字确认,扣2分'],
                ]
            ],
            [
                'programSn' => 'N0002',
                'company' => '新华',
                'fhUserName' => '张三2',
                'agent' => '李四2',
                'list' => [
                    ['list' => '未制定安全生产责任制,扣10分;未经责任人签字确认,扣5分'],
                    ['list' => '未制定安全生产责任制,扣9分;未经责任人签字确认,扣2分'],
                ]
            ],
        ];

        // 循环次数
        $count = count($arr);
        $templateProcessor->cloneRow('programSn', $count); //复制行、
        foreach ($arr as $kk => $vv) {
            $list = '';
            for ($i = 0; $i < count($vv['list']); $i++) {
                if ($i == (count($vv['list']) - 1)) {
                    $list = $list . ($i + 1) . ' .${list#' . ($kk + 1) . '#' . ($i + 1) . '}';
                } else {
                    // <w:br/> 换行符
                    $list = $list . ($i + 1) . ' .${list#' . ($kk + 1) . '#' . ($i + 1) . '}<w:br/>';
                }
            }
            $templateProcessor->setValue('list#' . ($kk + 1), $list);
        }

        // 保存新word文档
        $path = md5(time());
        // 将 word 文档保存至 你设置的路径
        $templateProcessor->saveAs('./zs' . time() . ".docx");

    }

    public function word3(){
        header('Content-Type: application/vnd.openxmlformats-officedocument.wordprocessingml.document');
        header('Content-Disposition: attachment;filename="印花税单.docx"');
        header('Cache-Control: max-age=0');

        $html = '';
        $html .= '<div class="stamp-box">';
        $html .= '<div class="stamp-title"> 印花税计算表 </div>';
        $html .= '<div class="stamp-desc"> 项目编号: {{ item.programSn }} </div>';
        $html .= '<div class="stamp-desc"> 报税单位: {{ item.company }} <span class="pull-right">单位: 元</span> </div>';
        $html .= '<table border="1" style="width:100%;border-color: #000;">';
        $html .= '<tr> <td width="150">应税凭证名称</td><td>{{ item.title }}</td></tr>';
        $html .= '<tr><td>对方单位名称</td><td>{{ item.company2 }}</td></tr>';
        $html .= '<tr><td>签订日期</td><td>{{ item.handleDate }}</td></tr>';
        $html .= '<tr><td>适用印花税税目</td><td>{{ item.stamp.title }}</td></tr>';
        $html .= '<tr><td>计税金额</td><td>{{ item.money }}</td></tr>';
        $html .= '<tr><td>适用税率</td><td>{{ item.stamp.bl }}‰</td></tr>';
        $html .= '<tr><td>本期应纳税额</td><td>{{ item.sdMoney }}</td></tr>';
        $html .= '</table>';
        $html .= '<table style="width:100%;margin-top: 5px;"><tr><td>核税人: {{ item.fhUserName }}</td><td /><td>填报人: {{ item.agent }}</td><td /></tr></table>';
        $html .= '</div>';


        $phpword = new PhpWord();
        $section = $phpword->addSection();
        \PhpOffice\PhpWord\Shared\Html::addHtml($section, $html, false, false);
        $objWriter = \PhpOffice\PhpWord\IOFactory::createWriter($phpword, 'Word2007');
        $objWriter->save('php://output');
    }

    public function import2(){
        exit();
        $reader = new \PhpOffice\PhpSpreadsheet\Reader\Xls();
//        $spreadsheet = $reader->load('./xinhua.xlsx');
        $spreadsheet = $reader->load('./mx.xls');
        $sheet = $spreadsheet->getActiveSheet();

//        $users = Db::name('user_info')->column('user_id','name');
        $adds = Db::name('asset_add')->column('id','title');
        $cates = Db::name('asset_cate')->column('id','title');
        $units = Db::name('asset_unit')->column('id','title');
        $classs = Db::name('asset_class')->column('id','title');
        $enables = ['使用' => 2,'在库' => 1];
        $company = 2;
        $orgId = 4;

        $res = array();
        $keys = ['A','B','C','D','E','F','G','H','I','J','K','L','M'];
        $names = [
            'A' => 'sn',
            'B' => 'old_sn',
            'C' => 'title',
            'D' => 'class_id',
            'E' => 'cate_id',
            'F' => 'nums',
            'G' => 'enable',
            'H' => 'add_id',
            'I' => 'spec',
            'J' => 'unit_id',
            'K' => 'price',
            'L' => 'buy_time',
            'M' => 'brand'
        ];
        $oldsn = [];
        $data = [];
        foreach ($sheet->getRowIterator(2) as $row) {
            $tmp = array();
            foreach ($row->getCellIterator() as $k=>$cell) {
                if(!in_array($k,$keys)){
                    break;
                }
                $val = $cell->getFormattedValue();
                if($k == 'D'){
                    if(!empty($classs[$val])){
                        $tmp[$names[$k]] = $classs[$val];
                    }else{
                        $tmp[$names[$k]] = 0;
                    }
                }else if($k == 'E'){
                    $val = $cell->getFormattedValue();
                    if(!empty($cates[$val])){
                        $tmp[$names[$k]] = $cates[$val];
                    }else{
                        $tmp[$names[$k]] = 0;
                    }
                }else if($k == 'G'){
                    $val = $cell->getFormattedValue();
                    if(!empty($enables[$val])){
                        $tmp[$names[$k]] = $enables[$val];
                    }else{
                        $tmp[$names[$k]] = 0;
                    }
                }else if($k == 'H'){
                    $val = $cell->getFormattedValue();
                    if(!empty($adds[$val])){
                        $tmp[$names[$k]] = $adds[$val];
                    }else{
                        $tmp[$names[$k]] = 0;
                    }
                }else if($k == 'J'){
                    $val = $cell->getFormattedValue();
                    if(!empty($units[$val])){
                        $tmp[$names[$k]] = $units[$val];
                    }else{
                        $tmp[$names[$k]] = 0;
                    }
                }else{
                    $tmp[$names[$k]] = $cell->getFormattedValue();
                }
            }

            if(!$tmp['buy_time']){
                $tmp['buy_time'] = null;
            }
            $tmp['buy_time'] = !$tmp['buy_time']?null:date('Y-m-d',strtotime($tmp['buy_time']));
            $tmp['company_id'] = $company;
            $tmp['org_id'] = $orgId;
            $tmp['create_time'] = date('Y-m-d H:i:s');
            if(!in_array($tmp['old_sn'],$oldsn)){
                $oldsn[] = $tmp['old_sn'];
            }
            $data[] = $tmp;
        }

        Db::name('asset_items')->where('old_sn','in',$oldsn)->setField('del',1);

        $ret = Db::name('asset_items')->insertAll($data);
        dump($ret);
        dump($oldsn);
        halt($data);

    }

    public function import1(){

        $reader = new \PhpOffice\PhpSpreadsheet\Reader\Xlsx();
//        $spreadsheet = $reader->load('./xinhua.xlsx');
        $spreadsheet = $reader->load('./zhongxin.xlsx');
        $sheet = $spreadsheet->getActiveSheet();

        $users = Db::name('user_info')->column('user_id','name');
        $adds = Db::name('asset_add')->column('id','title');
        $cates = Db::name('asset_cate')->column('id','title');
        $units = Db::name('asset_unit')->column('id','title');
        $classs = Db::name('asset_class')->column('id','title');
        $enables = ['使用' => 2,'在库' => 1];
        $company = 1;
        $orgId = 4;

        $res = array();
        $keys = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S'];
        $names = [
            'A' => 'sn',
            'B' => 'old_sn',
            'C' => 'title',
            'D' => 'class_id',
            'E' => 'cate_id',
            'F' => 'nums',
            'H' => 'user_id',
            'I' => 'enable',
            'J' => 'add_id',
            'K' => 'spec',
            'L' => 'unit_id',
            'M' => 'price',
            'N' => 'buy_time',
            'O' => 'brand',
            'P' => 'remark',
            'Q' => 'remark2',
            'R' => 'remark3',
            'S' => 'remark4'
        ];

        foreach ($sheet->getRowIterator(2) as $row) {
            $tmp = array();
            foreach ($row->getCellIterator() as $k=>$cell) {
                if(!in_array($k,$keys)){
                    break;
                }
                if($k != 'G'){
                    $val = $cell->getFormattedValue();
                    if($k == 'D'){
                        if(!empty($classs[$val])){
                            $tmp[$names[$k]] = $classs[$val];
                        }else{
                            $tmp[$names[$k]] = 0;
                        }
                    }else if($k == 'E'){
                        $val = $cell->getFormattedValue();
                        if(!empty($cates[$val])){
                            $tmp[$names[$k]] = $cates[$val];
                        }else{
                            $tmp[$names[$k]] = 0;
                        }
                    }else if($k == 'I'){
                        $val = $cell->getFormattedValue();
                        if(!empty($enables[$val])){
                            $tmp[$names[$k]] = $enables[$val];
                        }else{
                            $tmp[$names[$k]] = 0;
                        }
                    }else if($k == 'H'){
                        $val = $cell->getFormattedValue();
                        if(!empty($users[$val])){
                            $tmp[$names[$k]] = $users[$val];
                            $depId = Db::name('user_job')
                                ->alias('uj')
                                ->join('job j','j.id = uj.job_id')
                                ->where('uj.user_id',$users[$val])
                                ->value('j.dep_id');
                            $tmp['dep_id'] = $depId?$depId:0;
                        }else{
                            $tmp[$names[$k]] = 0;
                            $tmp['dep_id'] = 0;
                        }
                    }else if($k == 'J'){
                        $val = $cell->getFormattedValue();
                        if(!empty($adds[$val])){
                            $tmp[$names[$k]] = $adds[$val];
                        }else{
                            $tmp[$names[$k]] = 0;
                        }
                    }else if($k == 'L'){
                        $val = $cell->getFormattedValue();
                        if(!empty($units[$val])){
                            $tmp[$names[$k]] = $units[$val];
                        }else{
                            $tmp[$names[$k]] = 0;
                        }
                    }else{
                        $tmp[$names[$k]] = $cell->getFormattedValue();
                    }
                }
            }

            if(!$tmp['buy_time']){
                $tmp['buy_time'] = null;
            }

            $tmp['company_id'] = $company;
            $tmp['org_id'] = $orgId;
            $tmp['create_time'] = date('Y-m-d H:i:s');
            if($tmp['user_id'] == 0&&$tmp['enable'] == 2){
//                $errors[] = $tmp;
//                $errorids[] = $row->getRowIndex();
            }else{
                if($tmp['sn']){
                    $ret = Db::name('asset_items')->where('sn',$tmp['sn'])->find();
                    if(!$ret){
                        $res[] = $tmp;
                    }
                }

            }
        }
//        halt($res);
        dump(count($res));

        $ret = Db::name('asset_items')->insertAll($res);

        halt($ret);

    }

    public function programSn(){
        exit();
        // 获取主合同编号
        $programs = Db::name('program')->select();
        foreach ($programs as $k=>$v){
            $lists = Db::name('contract')
                ->alias('c')
                ->join('apply a','a.id = c.apply_id')
                ->where('c.status',1)
                ->where('a.del',0)
                ->where('c.type',0)
                ->where('c.program_id',$v['id'])
                ->order('a.finish_time asc')
                ->field('c.*')
                ->select();
            $i = 1;
            foreach ($lists as $kk=>$vv){
                $sn = $v['sn'].str_pad($i,4,'0',STR_PAD_LEFT);
                Db::name('contract')->where('id',$vv['id'])->update(['program_sn'=>$sn]);
                $subs = Db::name('contract')
                    ->alias('c')
                    ->join('apply a','a.id = c.apply_id')
                    ->where('c.status',1)
                    ->where('a.del',0)
                    ->where('c.type',1)
                    ->where('c.parent_apply_id',$vv['id'])
                    ->order('a.finish_time asc')
                    ->field('c.*')
                    ->select();
                $j = 1;
                foreach ($subs as $kkk => $vvv){
                    $ssn = $sn.'补'.str_pad($j,2,'0',STR_PAD_LEFT);
                    Db::name('contract')->where('id',$vvv['id'])->update(['program_sn'=>$ssn]);
                    $j++;
                }

                $i++;
            }
        }

        echo '完成';
    }

    public function budgetDep(){
        exit();
        $id = 2126;
        $info = Db::name('apply')->where('id',$id)->find();
        $formJson = $info['form_json'];
        $values = [];
        $formJson = json_decode($formJson,true);
        foreach ($formJson as $k=>$v){
            if($v['componentName'] == 'ddbudgetfield'){
                foreach ($v['components'] as $key=>$val){
                    switch ($val['idx']){
                        case '0':
                            $values = json_decode($val['values'],true);
                            break;
                    }
                }
                break;
            }
        }
        $items = $values['items'];
        $curTime = '2021-01-22 10:41:56';
        $orgId = 4;

        $apply = Db::name('budget_apply')->where('apply_id',$id)->find();

        foreach ($items as $k=>$v){
            $sdata = [
                'org_id' => $orgId,
                'dep_id' => $apply['dep_id'],
                'budget_id' => $apply['budget_id'],
                'company_id' => $apply['company_id'],
                'items_id' => $v['id'],
                'money' => floatval($v['money']),
                'money2' => !empty($v['money2'])?floatval($v['money2']):0,
                'money3' => !empty($v['money3'])?floatval($v['money3']):0,
                'intro' => !empty($v['intro'])?$v['intro']:'',
                'create_time' => $curTime
            ];

            $res = Db::name('budget_dep')->insert($sdata);
        }

        halt('成功');
    }

    public function stamp(){
        exit();
        $ids = Db::name('contract_stamp_log')->column('contract_id');
        trace($ids);
        dump($ids);
        if($ids){
            $ids = array_unique($ids);
            $lists = Db::name('contract')->where('id','not in',$ids)->where('type',0)->where('status',1)->select();
        }else{
            $lists = Db::name('contract')->where('type',0)->where('status',1)->select();
        }

        foreach ($lists as $k=>$v){
            if($v['sdid'] > 0){
                $sdinfo = Db::name('stamp_duty')->where('id',$v['sdid'])->find();
                $sd_money = round($v['money'] * $sdinfo['bl'] / 1000,1);

                if($sd_money < 1 && $sdinfo['type'] == 1){
                    $sd_money = 1;
                }
                if($sd_money < 1 && $sdinfo['type'] == 2){
                    $sd_money = 0;
                }
                if($sd_money != $v['sd_money']){
                    trace('修改:'.json_encode($v));
                    trace('修改为:'.$sd_money);
                    dump('修改:'.json_encode($v));
                    dump('修改为:'.$sd_money);
                    Db::name('contract')->where('id',$v['id'])->update(['sd_money'=>$sd_money]);
                }
            }
        }

        halt('完成');

    }

    public function bksb(){
        exit();
        $names = ['name','total','sye','yli','gjj'];
        $file = './bksb.xlsx';
        $data = ExcelUtil::read($file,$names,2);
        $salaryRecordId = 493;

        $lists = Db::name('salary_record_special')
            ->alias('srs')
            ->join('user_info ui','ui.user_id = srs.user_id')
            ->where('srs.salary_record_id',$salaryRecordId)
            ->field('srs.*,ui.name')
            ->select();
        $count = 0;
        foreach ($lists as $k=>$v){
            foreach ($data as $kk=>$vv){
                if($v['name'] == $vv['name']){
                    $nljgjj = round($v['ljgjj'] - round($vv['gjj'],2),2);
                    $nljsybx = round($v['ljsybx'] - round($vv['sye'],2),2);
                    $nljylibx = round($v['ljylibx'] - round($vv['yli'],2),2);

                    $lists[$k]['gjj'] = round($vv['gjj'],2);
                    $lists[$k]['sye'] = round($vv['sye'],2);
                    $lists[$k]['yli'] = round($vv['yli'],2);
                    $lists[$k]['nljgjj'] = $nljgjj;
                    $lists[$k]['nljsybx'] = $nljsybx;
                    $lists[$k]['nljylibx'] = $nljylibx;

                    Db::name('salary_record_special')->where('id',$v['id'])->update([
                        'ljgjj' => $nljgjj,
                        'ljsybx' => $nljsybx,
                        'ljylibx' => $nljylibx
                    ]);

                    $count++;
                    break;
                }
            }
        }
        dump($count);
        halt($lists);

        halt($data);
    }

    public function bksb2(){
        exit();
        $names = ['name','total','yla','sye','yli','gjj','qynj'];
        $file = './bksb2.xlsx';
        $data = ExcelUtil::read($file,$names,2);
        dump(count($data));
        $salaryRecordId = 489;

        $lists = Db::name('salary_record_special')
            ->alias('srs')
            ->join('user_info ui','ui.user_id = srs.user_id')
            ->where('srs.salary_record_id',$salaryRecordId)
            ->field('srs.*,ui.name')
            ->select();
        $count = 0;
        foreach ($lists as $k=>$v){
            foreach ($data as $kk=>$vv){
                if($v['name'] == $vv['name']){
                    $nljgjj = round($v['ljgjj'] - round($vv['gjj'],2),2);
                    $nljsybx = round($v['ljsybx'] - round($vv['sye'],2),2);
                    $nljylibx = round($v['ljylibx'] - round($vv['yli'],2),2);
                    $nljylobx = round($v['ljylobx'] - round($vv['yla'],2),2);
                    $nljnj = round($v['ljnj'] - round($vv['qynj'],2),2);

                    $lists[$k]['gjj'] = round($vv['gjj'],2);
                    $lists[$k]['sye'] = round($vv['sye'],2);
                    $lists[$k]['yli'] = round($vv['yli'],2);
                    $lists[$k]['yla'] = round($vv['yla'],2);
                    $lists[$k]['qynj'] = round($vv['qynj'],2);
                    $lists[$k]['nljgjj'] = $nljgjj;
                    $lists[$k]['nljsybx'] = $nljsybx;
                    $lists[$k]['nljylibx'] = $nljylibx;
                    $lists[$k]['nljylobx'] = $nljylobx;
                    $lists[$k]['nljnj'] = $nljnj;

                    Db::name('salary_record_special')->where('id',$v['id'])->update([
                        'ljgjj' => $nljgjj,
                        'ljsybx' => $nljsybx,
                        'ljylibx' => $nljylibx,
                        'ljylobx' => $nljylobx,
                        'ljnj' => $nljnj
                    ]);

                    $count++;
                    break;
                }
            }
        }
        dump($count);
        halt($lists);

        halt($data);
    }

}