123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338 |
- /*
- * @description:登陆相关数据操作
- * @Author: CP
- * @Date: 2020-09-02 09:56:28
- * @FilePath: \construction_management\services\backstage_service.go
- */
- package services
- import (
- "errors"
- "log"
- "net/http"
- "net/url"
- "strconv"
- "time"
- "github.com/kataras/iris/v12"
- "go.mod/comm"
- "go.mod/conf"
- "go.mod/dao"
- "go.mod/datasource"
- "go.mod/lib"
- "go.mod/models"
- "go.mod/web/viewmodels"
- )
- // 定义项目用户Service接口
- type BackstageService interface {
- ValidRuleLogin(ctx iris.Context) (viewmodels.StaffCld, error)
- ValidCldStaff(loginData viewmodels.StaffCld, writer http.ResponseWriter) (*viewmodels.ResultCld, error)
- ValidRuleProject(ctx iris.Context) (viewmodels.Project, error)
- ValidRuleProjectAdd(ctx iris.Context) (viewmodels.Project, error)
- ValidRuleProjectSave(ctx iris.Context) (viewmodels.Project, error)
- ValidRuleAccountAdd(ctx iris.Context) (viewmodels.ProjectAccount, error)
- ValidRuleAccountSync(ctx iris.Context) (viewmodels.Project, error)
- ValidRuleAccountSave(ctx iris.Context) (viewmodels.ProjectAccount, error)
- ValidRuleAccountEnable(ctx iris.Context) (viewmodels.ProjectAccount, error)
- ValidRuleAccountPassword(ctx iris.Context) (viewmodels.ProjectAccount, error)
- GetCldByCategoryId(categoryId string) (map[string]interface{}, error)
- Out(ctx iris.Context) error
- }
- // 返回service操作类
- type backstageService struct {
- // projectAccountDao *dao.ProjectAccountDao
- managerDao *dao.ManagerDao
- }
- // 创建项目用户service
- func NewBackstageService() BackstageService {
- return &backstageService{
- // projectAccountDao: dao.NewProjectAccountDao(datasource.InstanceDbMaster()),
- managerDao: dao.NewManagerDao(datasource.InstanceDbMaster()),
- }
- }
- // 登陆验证
- func (s *backstageService) ValidRuleLogin(ctx iris.Context) (viewmodels.StaffCld, error) {
- loginVaild := viewmodels.StaffCld{}
- err := ctx.ReadJSON(&loginVaild)
- if err != nil {
- log.Println("ReadForm转换异常, error=", err)
- return loginVaild, err
- }
- err = loginVaild.ValidateLogin()
- if err != nil {
- log.Println("登录验证, error=", err)
- return loginVaild, err
- }
- return loginVaild, nil
- }
- // 验证项目
- func (s *backstageService) ValidRuleProject(ctx iris.Context) (viewmodels.Project, error) {
- projectVaild := viewmodels.Project{}
- err := ctx.ReadForm(&projectVaild)
- if err != nil {
- log.Println("ReadForm转换异常, error=", err)
- return projectVaild, err
- }
- err = projectVaild.ValidateId()
- if err != nil {
- log.Println("验证项目, error=", err)
- return projectVaild, err
- }
- return projectVaild, nil
- }
- // 验证项目
- func (s *backstageService) ValidRuleProjectAdd(ctx iris.Context) (viewmodels.Project, error) {
- projectVaild := viewmodels.Project{}
- err := ctx.ReadJSON(&projectVaild)
- if err != nil {
- log.Println("ReadForm转换异常, error=", err)
- return projectVaild, err
- }
- err = projectVaild.ValidateAdd()
- if err != nil {
- log.Println("添加项目验证, error=", err)
- return projectVaild, err
- }
- return projectVaild, nil
- }
- // 验证账号同步的接口
- func (s *backstageService) ValidRuleAccountSync(ctx iris.Context) (viewmodels.Project, error) {
- projectVaild := viewmodels.Project{}
- err := ctx.ReadJSON(&projectVaild)
- if err != nil {
- log.Println("ReadForm转换异常, error=", err)
- return projectVaild, err
- }
- err = projectVaild.ValidateSync()
- if err != nil {
- log.Println("添加项目验证, error=", err)
- return projectVaild, err
- }
- return projectVaild, nil
- }
- // 项目保存
- func (s *backstageService) ValidRuleProjectSave(ctx iris.Context) (viewmodels.Project, error) {
- projectVaild := viewmodels.Project{}
- err := ctx.ReadJSON(&projectVaild)
- if err != nil {
- log.Println("ReadForm转换异常, error=", err)
- return projectVaild, err
- }
- err = projectVaild.ValidateSave()
- if err != nil {
- log.Println("添加项目验证, error=", err)
- return projectVaild, err
- }
- return projectVaild, nil
- }
- // 验证账号新增
- func (s *backstageService) ValidRuleAccountAdd(ctx iris.Context) (viewmodels.ProjectAccount, error) {
- projectVaild := viewmodels.ProjectAccount{}
- err := ctx.ReadJSON(&projectVaild)
- if err != nil {
- log.Println("ReadForm转换异常, error=", err)
- return projectVaild, err
- }
- err = projectVaild.ValidateAddBs()
- if err != nil {
- log.Println("添加账号验证, error=", err)
- return projectVaild, err
- }
- return projectVaild, nil
- }
- // 验证账号编辑
- func (s *backstageService) ValidRuleAccountSave(ctx iris.Context) (viewmodels.ProjectAccount, error) {
- projectVaild := viewmodels.ProjectAccount{}
- err := ctx.ReadJSON(&projectVaild)
- if err != nil {
- log.Println("ReadForm转换异常, error=", err)
- return projectVaild, err
- }
- err = projectVaild.ValidateSaveBs()
- if err != nil {
- log.Println("编辑账号验证, error=", err)
- return projectVaild, err
- }
- return projectVaild, nil
- }
- // 验证账号启用
- func (s *backstageService) ValidRuleAccountEnable(ctx iris.Context) (viewmodels.ProjectAccount, error) {
- accounttVaild := viewmodels.ProjectAccount{}
- err := ctx.ReadForm(&accounttVaild)
- if err != nil {
- log.Println("ReadForm转换异常, error=", err)
- return accounttVaild, err
- }
- err = accounttVaild.ValidateEnableBs()
- if err != nil {
- log.Println("编辑账号验证, error=", err)
- return accounttVaild, err
- }
- return accounttVaild, nil
- }
- // 验证账号启用
- func (s *backstageService) ValidRuleAccountPassword(ctx iris.Context) (viewmodels.ProjectAccount, error) {
- accounttVaild := viewmodels.ProjectAccount{}
- err := ctx.ReadForm(&accounttVaild)
- if err != nil {
- log.Println("ReadForm转换异常, error=", err)
- return accounttVaild, err
- }
- err = accounttVaild.ValidatePasswordBs()
- if err != nil {
- log.Println("账号密码验证, error=", err)
- return accounttVaild, err
- }
- return accounttVaild, nil
- }
- // 验证项目用户登陆相关
- func (s *backstageService) ValidCldStaff(loginData viewmodels.StaffCld, writer http.ResponseWriter) (*viewmodels.ResultCld, error) {
- // 1.cld账号写入管理员表
- managerData := s.managerDao.GetUserName(loginData.StaffName)
- // result := &lib.Result{}
- // 1.验证CLD账号密码
- cld := lib.NewCld()
- result, err := cld.LoginValid(loginData)
- if managerData.Id != 0 && managerData.IsAdmin == 1 && managerData.Username == "admin" {
- result.Data.UserName = "admin"
- result.Data.Category = "admin"
- managerData.CanLogin = 1
- if !(managerData.Username == loginData.StaffName && managerData.Password == loginData.Password) {
- return nil, errors.New("账号或者密码不正确")
- }
- } else {
- if err != nil {
- return nil, err
- }
- if result.Code != 0 {
- return nil, errors.New(result.Msg)
- }
- if managerData.Id == 0 {
- // 写入管理表
- manager := &models.CmManager{}
- manager.Username = result.Data.UserName
- manager.CreateTime = time.Now()
- manager.UpdateTime = time.Now()
- manager.LastLogin = time.Now()
- manager.Category = result.Data.Category
- manager.Office = result.Data.CategoryId
- manager.Telephone = result.Data.Telephone
- manager.Email = result.Data.Email
- manager.Qq = result.Data.Qq
- manager.Fixedphone = result.Data.Fixedphone
- manager.Position = result.Data.Position
- manager.CanLogin = 1
- sid, _ := strconv.Atoi(result.Data.Sid)
- manager.StaffId = sid
- if result.Data.Category == "总部" {
- manager.IsAdmin = 1
- } else {
- groupDao := dao.NewGroupDao(datasource.InstanceDbMaster())
- groups, _ := groupDao.GetAll()
- if len(groups) != 0 {
- manager.GroupId = groups[0].Id
- }
- }
- err = s.managerDao.Create(manager)
- if err != nil {
- return nil, err
- }
- }
- }
- // 2-1
- // if managerData.CanLogin == 0 {
- // return nil, errors.New("不允许登陆")
- // }
- // 3.写入登录态
- // 加密用户标识
- identity, err := comm.AesEncrypt(result.Data.UserName, conf.CookieSecret)
- if err != nil {
- return nil, err
- }
- // 加密项目标识
- category, err := comm.AesEncrypt(result.Data.Category, conf.CookieSecret)
- if err != nil {
- return nil, err
- }
- digitalToken := comm.CreateSign(conf.CookieSecret + identity)
- // 设置cookie
- maxAge := 60 * 60 * 24 * 7
- params := url.Values{}
- params.Add("identity", identity)
- params.Add("attachedIdentity", category)
- params.Add("digitalToken", digitalToken)
- params.Add("manager", strconv.Itoa(managerData.IsAdmin))
- c := &http.Cookie{
- Name: "cmBackstage",
- Value: params.Encode(),
- Path: "/",
- MaxAge: maxAge,
- HttpOnly: true,
- }
- http.SetCookie(writer, c)
- // staffCld := &viewmodels.StaffCld{}
- // staffCld.Category = result.Data.Category
- // staffCld.StaffName = result.Data.UserName
- return &result.Data, nil
- }
- // 登出
- func (s *backstageService) Out(ctx iris.Context) error {
- // 移除cookie
- ctx.RemoveCookie("cmBackstage")
- return nil
- }
- // 获得cld办事处和员工 列表
- func (s *backstageService) GetCldByCategoryId(categoryId string) (map[string]interface{}, error) {
- cld := lib.NewCld()
- result, err := cld.GetList(categoryId)
- if err != nil {
- return nil, err
- }
- if result["code"].(float64) != 0 {
- return nil, errors.New(result["code"].(string))
- }
- return result, nil
- }
|