<?php
namespace app\common\model;

use think\Db;

class UserMenuGroup extends Base
{
    public function updates($userId){
        $data = request()->post();
        $data['user_id'] = $userId;
        $result = validate('UserMenuGroup')->check($data,[],'');
        if(true !== $result){
            $this->error = validate('UserMenuGroup')->getError();
            return false;
        }
        $id = $data['id'];
        unset($data['id']);

        Db::startTrans();
        try{
            if($id > 0){
                $data['update_time'] = date('Y-m-d H:i:s');
                $ret = $this->allowField(true)->save($data,['id'=>$id]);
            }else{
                $data['create_time'] = date('Y-m-d H:i:s');
                $ret = $this->allowField(true)->save($data);
                $id = $this->id;
            }
            if(!$ret){
                exception('操作失败');
            }
            $menus = $data['menus']?explode(',',$data['menus']):[];
            if($menus){
                $map[] = ['user_id','=',$data['user_id']];
                $map[] = ['id','<>',$id];
                $lists = Db::name('user_menu_group')->where($map)->select();
                $lists = $lists?$lists:[];
                foreach ($lists as $k=>$v){
                    $omenus = $v['menus']?explode(',',$v['menus']):[];
                    if(empty($omenus)){
                        continue;
                    }
                    $nmenus = [];
                    foreach ($omenus as $kk=>$vv){
                        if(!in_array($vv,$menus)){
                            $nmenus[] = $vv;
                        }
                    }
                    if(count($nmenus) != count($nmenus)){
                        $mes = $nmenus?implode(',',$nmenus):'';
                        $res = Db::name('user_menu_group')->where('id',$v['id'])->setField('menus',$mes);
                        if(!$res){
                            exception('操作失败');
                        }
                    }
                }
            }

            Db::commit();
        }catch (\Exception $e){
            Db::rollback();
            $this->error = '操作失败';
            return false;
        }

        return true;
    }

}