enterprise/server/controller/calculator.go

78 lines
2.3 KiB
Go

package controller
import (
"enterprise/common/dao"
"enterprise/common/model"
"enterprise/server/api"
"enterprise/server/session"
"github.com/gin-gonic/gin"
"github.com/smbrave/goutil"
"github.com/spf13/cast"
"net/http"
)
type Calculator struct{}
func NewCalculator() *Calculator {
return &Calculator{}
}
// Create 创建一个新的计算项
func (c *Calculator) Create(ctx *gin.Context) {
sess := ctx.Keys[session.ContextSession].(*session.AdminSession)
var req api.CreateCalculatorReq
session.CheckParamError(ctx.ShouldBindJSON(&req))
ctx.Keys[session.ContextRequest] = req
calculator := new(model.SalaryCalculator)
calculator.CorpId = sess.GetAdmin().CorpId
calculator.Name = req.Name
calculator.Expression = req.Expression
_, err := dao.NewSalaryCalculatorDao().Create(calculator)
session.CheckDBError(err)
ctx.JSON(http.StatusOK, session.NewRspOk())
}
// Update 更新已有的计算项
func (c *Calculator) Update(ctx *gin.Context) {
var req api.UpdateCalculatorReq
session.CheckParamError(ctx.ShouldBindJSON(&req))
ctx.Keys[session.ContextRequest] = req
calculator, err := dao.NewSalaryCalculatorDao().Get(cast.ToInt64(req.Id))
session.CheckDBError(err)
session.CheckNilError(calculator, "计算项不存在")
calculator.Name = goutil.If(req.Name != "", req.Name, calculator.Name)
calculator.Expression = goutil.If(req.Expression != "", req.Expression, calculator.Expression)
err = dao.NewSalaryCalculatorDao().Update(calculator)
session.CheckDBError(err)
ctx.JSON(http.StatusOK, session.NewRspOk())
}
// Delete 删除指定的计算项
func (c *Calculator) Delete(ctx *gin.Context) {
id := cast.ToInt64(ctx.Query("id"))
session.CheckDBError(dao.NewSalaryCalculatorDao().Delete(id))
ctx.JSON(http.StatusOK, session.NewRspOk())
}
// List 列出符合条件的计算项
func (c *Calculator) List(ctx *gin.Context) {
sess := ctx.Keys[session.ContextSession].(*session.AdminSession)
var req api.ListCalculatorReq
session.CheckParamError(ctx.ShouldBind(&req))
req.Default()
calculators, total, err := dao.NewSalaryCalculatorDao().Query(req.Page, req.Size, sess.GetCorpId(), req.Name)
session.CheckDBError(err)
items := make([]*api.Calculator, 0)
for _, calc := range calculators {
i := new(api.Calculator)
i.From(calc)
items = append(items, i)
}
ctx.JSON(http.StatusOK, session.NewListRsp(total, items))
}