enterprise/server/controller/salary.go

139 lines
4.1 KiB
Go

package controller
import (
"enterprise/common/config"
"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 Salary struct {
}
func NewSalary() *Salary {
return &Salary{}
}
func (s *Salary) List(ctx *gin.Context) {
sess := ctx.Keys[session.ContextSession].(*session.AdminSession)
var req api.ListSalaryReq
session.CheckParamError(ctx.ShouldBind(&req))
total, summary, items := service.NewStaffSalary().List(sess, &req)
ctx.JSON(http.StatusOK, session.NewSummaryRsp(total, summary, items))
}
func (s *Salary) Create(ctx *gin.Context) {
sess := ctx.Keys[session.ContextSession].(*session.AdminSession)
if !sess.GetAdmin().GetConfig().IsFinance() {
panic(config.ErrPriv.New())
}
var req api.CreateSalaryReq
session.CheckParamError(ctx.ShouldBind(&req))
ctx.Keys[session.ContextRequest] = req
service.NewStaffSalary().Create(ctx.Keys[session.ContextSession].(*session.AdminSession), &req)
ctx.JSON(http.StatusOK, session.NewRspOk())
}
func (s *Salary) Update(ctx *gin.Context) {
sess := ctx.Keys[session.ContextSession].(*session.AdminSession)
if !sess.GetAdmin().GetConfig().IsFinance() {
panic(config.ErrPriv.New())
}
var req api.UpdateSalaryReq
session.CheckParamError(ctx.ShouldBind(&req))
ctx.Keys[session.ContextRequest] = req
service.NewStaffSalary().Update(ctx.Keys[session.ContextSession].(*session.AdminSession), &req)
ctx.JSON(http.StatusOK, session.NewRspOk())
}
func (s *Salary) Upload(ctx *gin.Context) {
sess := ctx.Keys[session.ContextSession].(*session.AdminSession)
rsp := service.NewStaffSalary().Upload(sess, ctx)
ctx.Keys[session.ContextResponse] = rsp
ctx.JSON(http.StatusOK, session.NewRsp(rsp))
}
func (s *Salary) Download(ctx *gin.Context) {
sess := ctx.Keys[session.ContextSession].(*session.AdminSession)
tp := ctx.Query("type")
corp, err := dao.NewCorpDao().Get(sess.GetCorpId())
session.CheckDBError(err)
if corp == nil {
corp, err = dao.NewCorpDao().GetByHost(sess.GetHeader().Host)
session.CheckDBError(err)
session.CheckNilError(corp, "企业不存在")
}
month := time.Now().AddDate(0, -1, 0).Format("200601")
month = strings.ReplaceAll(month, "-", "")
if tp == "" {
tp = service.StaffSalaryTypeBank
}
serv := new(service.StaffSalary)
if tp == service.StaffSalaryTypeAgent {
serv.Agent(corp.Id, month, "xls", ctx)
} else if tp == service.StaffSalaryTypeBank {
serv.Bank(corp.Id, month, "xls", ctx)
}
}
func (s *Salary) Pay(ctx *gin.Context) {
sess := ctx.Keys[session.ContextSession].(*session.AdminSession)
if !sess.GetAdmin().GetConfig().IsAdmin() {
panic(config.ErrPriv.New())
}
var req api.PaySalaryReq
session.CheckParamError(ctx.ShouldBind(&req))
ctx.Keys[session.ContextRequest] = req
service.NewStaffSalary().Pay(ctx.Keys[session.ContextSession].(*session.AdminSession), &req)
ctx.JSON(http.StatusOK, session.NewRspOk())
}
func (s *Salary) Delete(ctx *gin.Context) {
sess := ctx.Keys[session.ContextSession].(*session.AdminSession)
if !sess.GetAdmin().GetConfig().IsFinance() {
panic(config.ErrPriv.New())
}
id := cast.ToInt64(ctx.Query("id"))
service.NewStaffSalary().Delete(ctx.Keys[session.ContextSession].(*session.AdminSession), id)
ctx.JSON(http.StatusOK, session.NewRspOk())
}
func (s *Salary) SyncStaffSalary(ctx *gin.Context) {
cid := cast.ToInt64(ctx.Query("cid"))
var err error
var corp *model.Corp
if cid != 0 {
corp, err = dao.NewCorpDao().Get(cid)
session.CheckDBError(err)
} else {
sess := ctx.Keys[session.ContextSession].(*session.AdminSession)
corp, err = dao.NewCorpDao().GetByHost(sess.GetHeader().Host)
session.CheckDBError(err)
}
session.CheckNilError(corp, "域名未绑定")
go new(worker.Staff).SyncStaffSalary(corp.Id, "")
ctx.JSON(http.StatusOK, session.NewRspOk())
}
func (s *Salary) Bill(ctx *gin.Context) {
id := ctx.Query("id")
test := cast.ToBool(ctx.Query("test"))
realId := goutil.DecryptID(id, "@@salary@@")
service.NewStaffSalary().Bill(realId, test, ctx)
}