zhangzengfei
2023-09-05 63645d248c765244488cd34dbc1bb6528ca6b7c7
system-service/controllers/sysInit.go
@@ -1,243 +1,243 @@
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: "获取失败"}
}
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: "获取失败"}
}