package controller import ( "enterprise/common/dao" "enterprise/common/model" "enterprise/server/api" "enterprise/server/service" "enterprise/server/session" "enterprise/worker" "github.com/gin-gonic/gin" "github.com/smbrave/goutil" "github.com/spf13/cast" "net/http" "strings" "time" ) type Staff struct { } 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 := new(service.StaffUser).Login(sess, &req) ctx.JSON(http.StatusOK, session.NewRsp(data)) } func (s *Staff) List(ctx *gin.Context) { sess := ctx.Keys[session.ContextSession].(*session.AdminSession) var req api.StaffListReq session.CheckParamError(ctx.ShouldBind(&req)) req.Default() staffs, total, err := dao.NewStaffUserDao().Query(req.Page, req.Size, sess.GetCorpId(), cast.ToInt(req.Status), req.Username, req.Realname, req.Phone, req.Idno) session.CheckDBError(err) items := make([]*api.StaffUser, 0) for _, st := range staffs { i := new(api.StaffUser) i.From(st) items = append(items, i) } ctx.JSON(http.StatusOK, session.NewListRsp(total, items)) } func (s *Staff) Create(ctx *gin.Context) { sess := ctx.Keys[session.ContextSession].(*session.AdminSession) var req api.StaffCreateReq session.CheckParamError(ctx.ShouldBindJSON(&req)) staffUser, err := dao.NewStaffUserDao().GetByUsername(sess.GetAdmin().CorpId, req.Username) session.CheckDBError(err) if staffUser != nil { panic("用户已存在") } staffUser = new(model.StaffUser) staffUser.CorpId = sess.GetAdmin().CorpId staffUser.Username = req.Username _, err = dao.NewStaffUserDao().Create(staffUser) session.CheckDBError(err) ctx.JSON(http.StatusOK, session.NewRspOk()) } func (s *Staff) Update(ctx *gin.Context) { var req api.StaffUpdateReq session.CheckParamError(ctx.ShouldBindJSON(&req)) staffUser, err := dao.NewStaffUserDao().Get(cast.ToInt64(req.Id)) session.CheckDBError(err) session.CheckNilError(staffUser, "用户不存在") staffUser.Username = goutil.If(req.Username != "", req.Username, staffUser.Username) staffUser.Realname = goutil.If(req.Realname != "", req.Realname, staffUser.Realname) staffUser.Phone = goutil.If(req.Phone != "", req.Phone, staffUser.Phone) staffUser.Idno = goutil.If(req.Idno != "", req.Idno, staffUser.Idno) staffUser.EntryDate = goutil.If(req.EntryDate != "", req.EntryDate, staffUser.EntryDate) staffUser.OfficialDate = goutil.If(req.OfficialDate != "", req.OfficialDate, staffUser.OfficialDate) staffUser.LeaveDate = goutil.If(req.LeaveDate != "", req.LeaveDate, staffUser.LeaveDate) staffUser.Config = goutil.If(req.Config != "", req.Config, staffUser.Config) staffUser.Status = goutil.If(req.Status != "", cast.ToInt(req.Status), staffUser.Status) staffSalary := staffUser.GetSalary() staffSalary.Base = goutil.If(req.SalaryBase != "", req.SalaryBase, staffSalary.Base) staffSalary.Target = goutil.If(req.SalaryTarget != "", req.SalaryTarget, staffSalary.Target) staffSalary.Calculator = goutil.If(req.SalaryCalculator != "", req.SalaryCalculator, staffSalary.Calculator) staffUser.Salary = goutil.EncodeJSON(staffSalary) staffPayee := staffUser.GetPayee() staffPayee.BankName = goutil.If(req.PayeeBankName != "", req.PayeeBankName, staffPayee.BankName) staffPayee.BankCard = goutil.If(req.PayeeBankCard != "", req.PayeeBankCard, staffPayee.BankCard) staffPayee.AlipayUid = goutil.If(req.PayeeAlipayUid != "", req.PayeeAlipayUid, staffPayee.AlipayUid) staffUser.Payee = goutil.EncodeJSON(staffPayee) err = dao.NewStaffUserDao().Update(staffUser) session.CheckDBError(err) ctx.JSON(http.StatusOK, session.NewRspOk()) } func (s *Staff) Delete(ctx *gin.Context) { id := cast.ToInt64(ctx.Query("id")) session.CheckDBError(dao.NewStaffUserDao().Delete(id)) ctx.JSON(http.StatusOK, session.NewRspOk()) } func (s *Staff) Salary(ctx *gin.Context) { sess := ctx.Keys[session.ContextSession].(*session.AdminSession) month := ctx.Query("month") tp := ctx.Query("type") corp, err := dao.NewCorpDao().GetByHost(sess.GetHeader().Host) session.CheckDBError(err) session.CheckNilError(corp, "企业不存在") if month == "" { month = time.Now().AddDate(0, -1, 0).Format("200601") } month = strings.ReplaceAll(month, "-", "") if tp == "" { tp = service.StaffSalaryTypeSummary } serv := new(service.StaffSalary) if tp == service.StaffSalaryTypeAgent { serv.Agent(corp.Id, month, ctx) } else if tp == service.StaffSalaryTypeBank { serv.Bank(corp.Id, month, ctx) } else { serv.Summary(corp.Id, month, ctx) } } func (s *Staff) SyncStaffSalary(ctx *gin.Context) { corpId := cast.ToInt64(ctx.Query("cid")) if corpId == 0 { corpId = 1000 } go new(worker.Staff).SyncStaffSalary(corpId, "") ctx.JSON(http.StatusOK, session.NewRspOk()) }