<?php
namespace app\common\model;

use app\hander\HelpHander;
use think\Db;
use think\Model;
use think\response\Json;

class OfficialSealApply extends Model
{

    public function advancedStartSealApply($id,$orgId,$userId,$formJson,$extra){
        $formJson = json_decode($formJson,true);
        $data = [
            'org_id' => $orgId,
            'user_id' => $userId,
            'apply_id' => $id,
            'dep_id' => $extra['depId'],
            'create_time' => date('Y-m-d H:i:s'),
            'status' => 0,
        ];
        $sealarr = [];
        $values = [];
        foreach ($formJson as $k=>$v){
            if($v['componentName'] == 'ddofficialsealfield'){
                foreach ($v['components'] as $key=>$val){
                    switch ($val['idx']){
                        case '0':
                            $sealarr = isset($val['values'])?json_decode($val['values'],true):[];
                            break;
                        case '1':
                            $data['nums'] = isset($val['values'])?$val['values']:0;
                            break;
                        case '2':
                            $data['content'] = isset($val['values'])?$val['values']:0;
                            break;
                        case '3':
                            $data['use_date'] = isset($val['values'])?$val['values']:null;
                            break;
                    }
                }
                break;
            }
        }
        $seals = [];
        foreach ($sealarr as $k=>$v){
            $seals[] = $v['id'];
        }
        $data['seals'] = implode(',',$seals);

        $ret = Db::name('official_seal_apply')->insert($data);
        return $ret?true:false;
    }

    public function advancedEndSealApply($id,$orgId,$userId,$formJson){
        $data = [
            'update_time' => date('Y-m-d H:i:s'),
            'status' => 1
        ];
        $ret = Db::name('official_seal_apply')->where('apply_id',$id)->update($data);
        return $ret?true:false;
    }

    public function advancedDisagreeSealApply($id){
        $data = [
            'update_time' => date('Y-m-d H:i:s'),
            'status' => 2
        ];

        $ret = Db::name('official_seal_apply')->where('apply_id',$id)->update($data);
        return $ret?true:false;
    }

    public function lists($page,$size,$orgId,$sealId,$dep){
        $map[] = ['status','=',1];
        $map[] = ['org_id','=',$orgId];
        if($dep){
            $depids = Db::name('dep')->where('name','like','%'.$dep.'%')->where('del',0)->column('id');
            if($depids){
                $map[] = ['dep_id','in',$depids];
            }
        }

        if($sealId > 0){
            $map[] = ['','exp',Db::raw("FIND_IN_SET(".$sealId.",seals)")];
        }
        $content = input('content','','trim');
        if($content){
            $map[] = ['content','like','%'.$content.'%'];
        }

        $lists = Db::name('official_seal_apply')
            ->where($map)
            ->page($page,$size)
            ->order('id desc')
            ->select();
        $lists = $lists?$lists:[];
        foreach ($lists as $k=>$v){
            $lists[$k]['userName'] = Db::name('user_info')->where('user_id',$v['user_id'])->value('name');
            $lists[$k]['depName'] = Db::name('dep')->where('id',$v['dep_id'])->value('name');
            $seals = Db::name('official_seal')->where('id','in',$v['seals'])->column('title');
            $lists[$k]['sealName'] = $seals?implode(',',$seals):'';
        }
        $total = Db::name('official_seal_apply')->where($map)->count();
        $data = [
            'total' => $total,
            'list' => $lists?$lists:[]
        ];
        return $data;
    }

}