package controllers import ( "basic.com/valib/bhomeclient.git" "basic.com/valib/logger.git" "github.com/satori/go.uuid" "time" "vamicro/extend/util" "vamicro/system-service/models" "vamicro/system-service/sys" ) type SysInitController struct { } //comment 获取mqtt配置 //router /data/api-v/sysinit/getInitInfo func (sic *SysInitController) GetInitInfo(h *bhomeclient.WrapperHandler, c *bhomeclient.Request) *bhomeclient.Reply { var conf models.SysInit rows, _ := conf.Select() inited := false initUsername := "" initReg := false if rows > 0 { inited = conf.InitPwd initUsername = conf.InitUsername } if conf.UserType != "" && conf.Name != "" && conf.ProvinceId != "" && conf.CityId != "" && conf.Email != "" { initReg = true } return &bhomeclient.Reply{Success: true, Msg: "查询成功", Data: map[string]interface{}{ "initPwd": inited, "initRegInfo": initReg, "username": initUsername, }} } //初始化系统密码 //router /data/api-v/sysinit/savePassword func (sic *SysInitController) SavePassword(h *bhomeclient.WrapperHandler, c *bhomeclient.Request) *bhomeclient.Reply { type arg struct { Username string `json:"username"` Password string `json:"password"` } var reqBody arg c.BindJSON(&reqBody) if reqBody.Username == "" || reqBody.Password == "" || reqBody.Username == "basic" { return &bhomeclient.Reply{Msg: "用户名或密码不能为空"} } //先保存用户名密码,然后将sysinit中的initPwd置为true encryPwd, pe := util.Encrypt(reqBody.Password) if pe != nil { return &bhomeclient.Reply{Msg: pe.Error()} } tx := models.GetDB().Begin() var err error defer func() { if tx != nil && err != nil { tx.Rollback() } }() var tmpUser models.SysUser ru, _ := tmpUser.FindByName(reqBody.Username) targetUID := "" defHeadPic := "" var dhp models.DefHeadPic if headPics, err := dhp.FindAll(); err == nil && len(headPics) > 0 { defHeadPic = headPics[0].Path } if ru > 0 { targetUID = tmpUser.Id if err = tx.Exec("update "+tmpUser.TableName()+" set password=?,headpic=?,backgroundpic=? where id=?", encryPwd, defHeadPic, models.DefaultBgPic, targetUID).Error; err != nil { return &bhomeclient.Reply{Msg: err.Error()} } } else { targetUID = uuid.NewV4().String() if err = tx.Table(tmpUser.TableName()).Create(&models.SysUser{Id: targetUID, Username: reqBody.Username, Password: encryPwd, HeadPic: defHeadPic, BackgroundPic: models.DefaultBgPic}).Error; err != nil { return &bhomeclient.Reply{Msg: err.Error()} } } //给用户添加菜单权限 var sysR models.SysRole _, err = sysR.FindByName("管理员") if err != nil { return &bhomeclient.Reply{Msg: err.Error()} } userRole := models.SysUserRole{ Id: uuid.NewV4().String(), UserId: targetUID, RoleId: sysR.Id, } if err = tx.Table(userRole.TableName()).Create(&userRole).Error; err != nil { return &bhomeclient.Reply{Msg: err.Error()} } var siModel models.SysInit err = tx.Table(siModel.TableName()).First(&siModel).Error if err != nil { if err.Error() != models.RecordNotFound { return &bhomeclient.Reply{Msg: err.Error()} } else { if err = tx.Table(siModel.TableName()).Create(models.SysInit{ InitPwd: true, InitUsername: reqBody.Username, InitTime: time.Now().Format("2006-01-02 15:04:05"), NetName: "", UserType: "", PhoneNum: "", Name: "", ProvinceId: "", CityId: "", CountyId: "", Email: "", }).Error; err != nil { return &bhomeclient.Reply{Msg: err.Error()} } } } else { err = tx.Exec("update "+siModel.TableName()+" set initPwd=?, initUsername=?", true, reqBody.Username).Error if err != nil { return &bhomeclient.Reply{Msg: err.Error()} } } //初始化时给管理员所有的菜单权限 var sysMenu models.SysMenu allMenus := sysMenu.FindAll() err = tx.Exec("delete from "+models.SysRoleMenu{}.TableName()+" where role_id=?", sysR.Id).Error if err != nil { return &bhomeclient.Reply{Msg: err.Error()} } for _, n := range allMenus { tmpMenu := models.SysRoleMenu{ Id: uuid.NewV4().String(), RoleId: sysR.Id, MenuId: n.Id, } err = tx.Table(tmpMenu.TableName()).Create(&tmpMenu).Error if err != nil { return &bhomeclient.Reply{Msg: err.Error()} } } err = tx.Exec("delete from "+models.SysUserMenu{}.TableName()+" where user_id=?", targetUID).Error if err != nil { return &bhomeclient.Reply{Msg: err.Error()} } tx.Commit() return &bhomeclient.Reply{Success: true, Msg: "保存成功"} } //comment 获取网卡下拉菜单 //router /data/api-v/sysinit/networkList func (sic *SysInitController) NetworkList(h *bhomeclient.WrapperHandler, c *bhomeclient.Request) *bhomeclient.Reply { cards, e := sys.GetNetWorkCards() if e != nil { return &bhomeclient.Reply{Msg: e.Error()} } return &bhomeclient.Reply{Success: true, Data: cards} } //comment 系统第一次启动时初始化网络 // router /data/api-v/sysinit/initNetwork func (sic *SysInitController) InitNetwork(h *bhomeclient.WrapperHandler, c *bhomeclient.Request) *bhomeclient.Reply { type arg struct { NetName string `json:"netName"` //网卡 Ip string `json:"ip"` //ip SubMask string `json:"subMask"` //子网掩码 Gateway string `json:"gateway"` //网关 Dns string `json:"dns"` //dns } var reqBody arg c.BindJSON(&reqBody) if reqBody.NetName == "" || reqBody.Ip == "" || reqBody.SubMask == "" || reqBody.Gateway == "" || reqBody.Dns == "" { return &bhomeclient.Reply{Msg: "参数有误,请检查"} } isOk, msg := sys.SetNetworkConfig( reqBody.Ip, reqBody.SubMask, reqBody.Gateway, reqBody.Dns, reqBody.NetName) logger.Debug("isOk:", isOk, "msg:", msg) if !isOk { return &bhomeclient.Reply{Msg: msg} } return &bhomeclient.Reply{Success: true, Msg: "初始化成功"} } type RegInfo struct { UserType string `json:"userType"` //personal:个人 company:公司 Name string `json:"name"` //姓名 ProvinceId string `json:"provinceId"` //省份id CityId string `json:"cityId"` //城市id Addr string `json:"addr"` //地址 Email string `json:"email"` //邮箱 } //comment 保存注册信息 //router /data/api-v/sysinit/saveRegInfo func (sic *SysInitController) SaveRegInfo(h *bhomeclient.WrapperHandler, c *bhomeclient.Request) *bhomeclient.Reply { var reqBody RegInfo c.BindJSON(&reqBody) if reqBody.UserType == "" || reqBody.Name == "" || reqBody.ProvinceId == "" || reqBody.CityId == "" || reqBody.Email == "" || reqBody.Addr == "" { return &bhomeclient.Reply{Msg: "参数有误"} } var siModel models.SysInit i, _ := siModel.Select() if i == 0 { return &bhomeclient.Reply{Msg: "请先配置用户名和密码信息"} } siModel.UserType = reqBody.UserType siModel.Name = reqBody.Name siModel.ProvinceId = reqBody.ProvinceId siModel.CityId = reqBody.CityId siModel.Email = reqBody.Email if siModel.Update() { return &bhomeclient.Reply{Success: true, Msg: "保存成功"} } return &bhomeclient.Reply{Msg: "保存失败"} } //comment 获取注册信息 //router /data/api-v/sysinit/getRegInfo func (sic *SysInitController) GetRegInfo(h *bhomeclient.WrapperHandler, c *bhomeclient.Request) *bhomeclient.Reply { var siModel models.SysInit i, _ := siModel.Select() if i > 0 { return &bhomeclient.Reply{Success: true, Data: map[string]string{ "userType": siModel.UserType, "name": siModel.Name, "provinceId": siModel.ProvinceId, "cityId": siModel.CityId, "countyId": siModel.CountyId, "email": siModel.Email, }} } return &bhomeclient.Reply{Msg: "获取失败"} }