From acc93e4a2c07b98e8fa33f6d0470653072edecbc Mon Sep 17 00:00:00 2001 From: jiangyong Date: Mon, 16 Jun 2025 15:48:50 +0800 Subject: [PATCH] corpuser --- common/dao/corp_user.go | 68 ++++++++++++++++++++++++++++++++++ common/model/corp_user.go | 12 ++++++ server/api/corp_user.go | 6 +++ server/controller/corp_user.go | 24 ++++++++++++ server/controller/staff.go | 8 ---- server/server.go | 3 +- server/service/corp_user.go | 48 ++++++++++++++++++++++++ server/service/staff_user.go | 31 ---------------- worker/worker.go | 1 + 9 files changed, 161 insertions(+), 40 deletions(-) create mode 100644 common/dao/corp_user.go create mode 100644 common/model/corp_user.go create mode 100644 server/api/corp_user.go create mode 100644 server/controller/corp_user.go create mode 100644 server/service/corp_user.go diff --git a/common/dao/corp_user.go b/common/dao/corp_user.go new file mode 100644 index 0000000..afcbdfd --- /dev/null +++ b/common/dao/corp_user.go @@ -0,0 +1,68 @@ +package dao + +import ( + "enterprise/common/model" + "errors" + "gorm.io/gorm" + "time" +) + +type CorpUserDao struct { +} + +func NewCorpUserDao() *CorpUserDao { + return &CorpUserDao{} +} + +func (d *CorpUserDao) TableName() string { + return "corp_user" +} + +func (d *CorpUserDao) Create(o *model.CorpUser) (int64, error) { + o.CreateTime = time.Now().Unix() + res := GetDB().Table(d.TableName()).Create(o) + return o.Id, res.Error +} + +func (d *CorpUserDao) Update(o *model.CorpUser) error { + o.UpdateTime = time.Now().Unix() + tx := GetDB().Table(d.TableName()) + res := tx.Save(o) + return res.Error +} + +func (d *CorpUserDao) Delete(id int64) error { + res := GetDB().Table(d.TableName()).Delete(&model.CorpUser{}, id) + return res.Error +} + +func (d *CorpUserDao) Get(id int64) (*model.CorpUser, error) { + var u model.CorpUser + tx := GetDB().Table(d.TableName()) + tx = tx.Where("id = ?", id) + res := tx.First(&u) + if errors.Is(res.Error, gorm.ErrRecordNotFound) { + return nil, nil + } + + if res.Error != nil { + return nil, res.Error + } + return &u, nil +} + +func (d *CorpUserDao) GetByUsername(corpId int64, username string) (*model.CorpUser, error) { + var u model.CorpUser + tx := GetDB().Table(d.TableName()) + tx = tx.Where("corp_id = ?", corpId) + tx = tx.Where("username = ?", username) + res := tx.First(&u) + if errors.Is(res.Error, gorm.ErrRecordNotFound) { + return nil, nil + } + + if res.Error != nil { + return nil, res.Error + } + return &u, nil +} diff --git a/common/model/corp_user.go b/common/model/corp_user.go new file mode 100644 index 0000000..d52e7dd --- /dev/null +++ b/common/model/corp_user.go @@ -0,0 +1,12 @@ +package model + +type CorpUser struct { + Id int64 + CorpId int64 + Username string + Password string + Realname string + Config string + CreateTime int64 + UpdateTime int64 +} diff --git a/server/api/corp_user.go b/server/api/corp_user.go new file mode 100644 index 0000000..d4c3152 --- /dev/null +++ b/server/api/corp_user.go @@ -0,0 +1,6 @@ +package api + +type CorpLoginReq struct { + Username string `json:"username"` + Password string `json:"password"` +} diff --git a/server/controller/corp_user.go b/server/controller/corp_user.go new file mode 100644 index 0000000..05c4793 --- /dev/null +++ b/server/controller/corp_user.go @@ -0,0 +1,24 @@ +package controller + +import ( + "enterprise/server/api" + "enterprise/server/service" + "enterprise/server/session" + + "github.com/gin-gonic/gin" + "net/http" +) + +type CorpUser struct { +} + +func NewCorpUser() *CorpUser { + return &CorpUser{} +} +func (s *CorpUser) Login(ctx *gin.Context) { + var req api.CorpLoginReq + session.CheckParamError(ctx.ShouldBindJSON(&req)) + sess := ctx.Keys[session.ContextSession].(*session.AdminSession) + data := service.NewCorpUser().Login(sess, &req) + ctx.JSON(http.StatusOK, session.NewRsp(data)) +} diff --git a/server/controller/staff.go b/server/controller/staff.go index ef6f15b..dc8d413 100644 --- a/server/controller/staff.go +++ b/server/controller/staff.go @@ -20,14 +20,6 @@ func NewStaff() *Staff { return &Staff{} } -func (s *Staff) Login(ctx *gin.Context) { - var req api.StaffLoginReq - session.CheckParamError(ctx.ShouldBindJSON(&req)) - sess := ctx.Keys[session.ContextSession].(*session.AdminSession) - data := service.NewStaffUser().Login(sess, &req) - ctx.JSON(http.StatusOK, session.NewRsp(data)) -} - func (s *Staff) Suggest(ctx *gin.Context) { sess := ctx.Keys[session.ContextSession].(*session.AdminSession) staffs, _, err := dao.NewStaffUserDao().Query(1, -1, sess.GetCorpId(), 0, "", "", "", "") diff --git a/server/server.go b/server/server.go index f17651e..a257886 100644 --- a/server/server.go +++ b/server/server.go @@ -29,7 +29,8 @@ func initRoutge(engine *gin.Engine) { apiGroup.Any("/checkin/sync", controller.NewStaffCheckin().Sync) group.GET("/staff/salary", controller.NewStaff().Salary) - noTokenGroup.POST("/staff/login", controller.NewStaff().Login) + noTokenGroup.POST("/staff/login", controller.NewCorpUser().Login) //todo delete + noTokenGroup.POST("/corp/login", controller.NewCorpUser().Login) noTokenGroup.Any("/sync/salary", controller.NewSalary().SyncStaffSalary) apiGroup.GET("/staff/salary", controller.NewSalary().List) diff --git a/server/service/corp_user.go b/server/service/corp_user.go new file mode 100644 index 0000000..25851b8 --- /dev/null +++ b/server/service/corp_user.go @@ -0,0 +1,48 @@ +package service + +import ( + "enterprise/common/dao" + "enterprise/common/model" + "enterprise/server/api" + "enterprise/server/session" + "github.com/google/uuid" + log "github.com/sirupsen/logrus" + "github.com/smbrave/goutil" + "time" +) + +type CorpUser struct { +} + +func NewCorpUser() *CorpUser { + return &CorpUser{} +} + +func (s *CorpUser) Login(sess *session.AdminSession, req *api.CorpLoginReq) interface{} { + host := sess.GetHeader().Host + log.Infof("login host[%s] req[%s]", host, goutil.EncodeJSON(req)) + + corp, err := dao.NewCorpDao().GetByHost(host) + session.CheckDBError(err) + session.CheckNilError(corp, "企业不存在的域名") + + user, err := dao.NewCorpUserDao().GetByUsername(corp.Id, req.Username) + session.CheckDBError(err) + session.CheckNilError(user, "企业用户不存在") + + if user.Password == "" || user.Password != req.Password { + panic("密码错误") + } + + token := new(model.StaffToken) + token.UserId = user.Id + token.ExpireTime = time.Now().Unix() + 86400*30 + token.Token = uuid.New().String() + _, err = dao.NewStaffTokenDao().Create(token) + session.CheckDBError(err) + + data := token.ToLogin() + data["username"] = user.Username + data["realname"] = user.Realname + return data +} diff --git a/server/service/staff_user.go b/server/service/staff_user.go index ff073a7..371afd3 100644 --- a/server/service/staff_user.go +++ b/server/service/staff_user.go @@ -9,11 +9,9 @@ import ( "enterprise/server/session" CommonService "enterprise/service" "git.u8t.cn/open/gosdk/qyweixin" - "github.com/google/uuid" log "github.com/sirupsen/logrus" "github.com/smbrave/goutil" "github.com/spf13/cast" - "time" ) type StaffUser struct { @@ -23,35 +21,6 @@ func NewStaffUser() *StaffUser { return &StaffUser{} } -func (s *StaffUser) Login(sess *session.AdminSession, req *api.StaffLoginReq) interface{} { - host := sess.GetHeader().Host - log.Infof("login host[%s] req[%s]", host, goutil.EncodeJSON(req)) - - corp, err := dao.NewCorpDao().GetByHost(host) - session.CheckDBError(err) - session.CheckNilError(corp, "企业不存在的域名") - - user, err := dao.NewStaffUserDao().GetByUsername(corp.Id, req.Username) - session.CheckDBError(err) - session.CheckNilError(user, "企业用户不存在") - - if user.Password == "" || user.Password != req.Password { - panic("密码错误") - } - - token := new(model.StaffToken) - token.UserId = user.Id - token.ExpireTime = time.Now().Unix() + 86400*30 - token.Token = uuid.New().String() - _, err = dao.NewStaffTokenDao().Create(token) - session.CheckDBError(err) - - data := token.ToLogin() - data["username"] = user.Username - data["realname"] = user.Realname - return data -} - func (s *StaffUser) List(sess *session.AdminSession, req *api.StaffListReq) (int64, interface{}) { staffs, total, err := dao.NewStaffUserDao().Query(req.Page, req.Size, sess.GetCorpId(), cast.ToInt(req.Status), req.Username, req.Realname, req.Phone, req.Idno) diff --git a/worker/worker.go b/worker/worker.go index 8d451df..f92af3b 100644 --- a/worker/worker.go +++ b/worker/worker.go @@ -58,6 +58,7 @@ func InitCorp1002(cron *gocron.Scheduler) { staff.PayStaffSalary(corpId, time.Now().AddDate(0, -1, 0).Format("200601")) staff.SendStaffSalaryBill(corpId, time.Now().AddDate(0, -1, 0).Format("200601")) }) + } func InitCorp1000(cron *gocron.Scheduler) {