| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161 | <?phpnamespace App\Service\HeaderWord;use App\Model\Header_ext;use App\Model\Header_ext_sub;use App\Service\Service;use Illuminate\Support\Facades\DB;/** * 表头相关工厂模式 * @package App\Models */class HeaderWordHookService extends Service{    protected static $instance;    protected static $header;    protected static $header_detail;    public function __construct(){    }    public static function getInstance(): self    {        if (self::$instance == null) {            self::$instance = new HeaderWordHookService();        }        return self::$instance;    }    public function getHeaderWord($data){        if(!isset($data['type'])) return [false,'not found type'];        $type = $data['type'];        $list = Header_ext::where('type',$type)->orderBy('sort','asc')->select('*')->get()->toArray();//        self::$header_detail = Header_ext::where('type',$type_detail)->pluck('value','key')->toArray();        return [true,$list];    }    public function getHeaderSettings($data){//        if($this->isEmpty($data,'menu_id')) return [false,'菜单ID不能为空!'];//        $type = 1;//        if(! $this->isEmpty($data,'type')) $type = $data['type'];////        $header = config("header.{$data['menu_id']}")[$type] ?? [];////        return [true,$header];    }    public function edit($data){        list($status,$msg) = $this->headerRule($data,false);        if(!$status) return [$status,$msg];        return [true,'保存成功!'];    }    public function add($data){        list($status,$msg) = $this->headerRule($data);        if(!$status) return [$status,$msg];        DB::beginTransaction();        try{            Header_ext::where('menu_id',$data['menu_id'])                ->where('type',$data['type'])                ->where('del_time',0)                ->update(['del_time'=>time()]);            Header_ext_sub::where('menu_id',$data['menu_id'])                ->where('type',$data['type'])                ->where('del_time',0)                ->update(['del_time'=>time()]);            $insert = [];            foreach ($data['data'] as $value){                $insert[] = [                    'key' => $value['key'] ?? '',                    'value' => $value['value'],                    'type' => $value['type'],                    'menu_id' => $value['menu_id'],                    'position' => $value['position'],                    'x_axis' => $value['x'],                    'y_axis' => $value['y'],                ];            }Header_ext::insert($insert);            Header_ext_sub::insert([                'type' => $data['type'],                'menu_id' => $data['menu_id'],                'merge_cells' => json_encode($data['mergeCells']),                'max_length' => $data['maxLength'],            ]);            DB::commit();        }catch (\Exception $e){            DB::rollBack();            return [false,$e->getMessage()];        }        return [true,'保存成功!'];    }    public function del($data){        if($this->isEmpty($data,'id')) return [false,'ID不能为空!'];        return [true,'删除成功'];    }    public function detail($data){        if($this->isEmpty($data,'menu_id')) return [false,'菜单ID不能为空!'];        if($this->isEmpty($data,'type')) return [false,'TYPE不能为空!'];        $result = Header_ext::where('del_time',0)            ->select('key','value','position','x_axis as x','y_axis as y')            ->where('menu_id',$data['menu_id'])            ->where('type',$data['type'])            ->get()->toArray();        $result_sub = Header_ext_sub::where('del_time',0)            ->select('merge_cells','max_length')            ->where('menu_id',$data['menu_id'])            ->where('type',$data['type'])            ->get()->toArray();        $return['data'] = $result;        $return['mergeCells'] = ! empty($result_sub[0]['merge_cells']) ? json_decode($result_sub[0]['merge_cells'],true) : [];        $return['maxLength'] = $result_sub[0]['max_length'] ?? 1;        return [true,$return];    }    public function headerRule(&$data,$is_add = true){        if($this->isEmpty($data,'menu_id')) return [false,'菜单ID不能为空!'];        if($this->isEmpty($data,'data')) return [false,'数据不能为空!'];        foreach ($data['data'] as $key => $value){            if (strpos($value['position'], ',') !== false) {                $tmp = explode(',',$value['position']);                $str_col = $str_ros =  '';                foreach ($tmp as $v){                    $tmp_v = explode(':',$v);                    if($tmp_v[0] != $tmp_v[1]) {                        // 截取头部                        $head = explode(':', $tmp[0])[0];                        // 截取尾部                        $tail = explode(':', end($tmp))[1];                        $str_ros = $head . ":" . $tail;                        continue;                    }else{                        $str_col .= $tmp_v[0] . ':';                    }                }                $str_col = rtrim($str_col,':');                if($str_col) $data['data'][$key]['position'] = $str_col;                if($str_ros) $data['data'][$key]['position'] = $str_ros;            }        }        return [true,''];    }}
 |