2023-09-04 21:59:27 +08:00
|
|
|
package controller
|
|
|
|
|
|
|
|
import (
|
2025-03-09 10:44:36 +08:00
|
|
|
"enterprise/common/dao"
|
2025-03-11 16:09:19 +08:00
|
|
|
"enterprise/common/model"
|
2025-03-07 12:05:59 +08:00
|
|
|
"enterprise/server/api"
|
2023-09-04 21:59:27 +08:00
|
|
|
"enterprise/server/service"
|
2023-10-07 14:21:00 +08:00
|
|
|
"enterprise/server/session"
|
2023-10-07 14:18:46 +08:00
|
|
|
"enterprise/worker"
|
2023-09-04 21:59:27 +08:00
|
|
|
"github.com/gin-gonic/gin"
|
2025-03-11 16:09:19 +08:00
|
|
|
"github.com/smbrave/goutil"
|
2025-03-05 10:11:07 +08:00
|
|
|
"github.com/spf13/cast"
|
2023-10-07 14:21:00 +08:00
|
|
|
"net/http"
|
2023-09-04 21:59:27 +08:00
|
|
|
"strings"
|
|
|
|
"time"
|
|
|
|
)
|
|
|
|
|
|
|
|
type Staff struct {
|
|
|
|
}
|
|
|
|
|
2025-03-11 10:59:41 +08:00
|
|
|
func NewStaff() *Staff {
|
|
|
|
return &Staff{}
|
|
|
|
}
|
2025-03-11 15:01:26 +08:00
|
|
|
|
2025-03-07 12:05:59 +08:00
|
|
|
func (s *Staff) Login(ctx *gin.Context) {
|
|
|
|
var req api.StaffLoginReq
|
|
|
|
session.CheckParamError(ctx.ShouldBindJSON(&req))
|
|
|
|
sess := ctx.Keys[session.ContextSession].(*session.AdminSession)
|
2025-03-07 12:17:13 +08:00
|
|
|
data := new(service.StaffUser).Login(sess, &req)
|
|
|
|
ctx.JSON(http.StatusOK, session.NewRsp(data))
|
2025-03-07 12:05:59 +08:00
|
|
|
}
|
|
|
|
|
2025-03-11 16:09:19 +08:00
|
|
|
func (s *Staff) List(ctx *gin.Context) {
|
2025-03-11 17:06:52 +08:00
|
|
|
sess := ctx.Keys[session.ContextSession].(*session.AdminSession)
|
|
|
|
var req api.StaffListReq
|
|
|
|
session.CheckParamError(ctx.ShouldBind(&req))
|
|
|
|
req.Default()
|
2025-03-11 16:09:19 +08:00
|
|
|
|
2025-03-11 17:06:52 +08:00
|
|
|
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))
|
2025-03-11 16:09:19 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
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)
|
2025-03-11 17:06:52 +08:00
|
|
|
staffUser.Config = goutil.If(req.Config != "", req.Config, staffUser.Config)
|
|
|
|
staffUser.Status = goutil.If(req.Status != "", cast.ToInt(req.Status), staffUser.Status)
|
2025-03-11 16:09:19 +08:00
|
|
|
|
|
|
|
staffSalary := staffUser.GetSalary()
|
|
|
|
staffSalary.Base = goutil.If(req.SalaryBase != "", req.SalaryBase, staffSalary.Base)
|
|
|
|
staffSalary.Target = goutil.If(req.SalaryTarget != "", req.SalaryTarget, staffSalary.Target)
|
2025-03-11 17:06:52 +08:00
|
|
|
staffSalary.Calculator = goutil.If(req.SalaryCalculator != "", req.SalaryCalculator, staffSalary.Calculator)
|
|
|
|
staffUser.Salary = goutil.EncodeJSON(staffSalary)
|
|
|
|
|
|
|
|
staffPayee := staffUser.GetPayee()
|
2025-03-11 16:09:19 +08:00
|
|
|
staffPayee.BankName = goutil.If(req.PayeeBankName != "", req.PayeeBankName, staffPayee.BankName)
|
|
|
|
staffPayee.BankCard = goutil.If(req.PayeeBankCard != "", req.PayeeBankCard, staffPayee.BankCard)
|
2025-03-11 17:06:52 +08:00
|
|
|
staffPayee.AlipayUid = goutil.If(req.PayeeAlipayUid != "", req.PayeeAlipayUid, staffPayee.AlipayUid)
|
|
|
|
staffUser.Payee = goutil.EncodeJSON(staffPayee)
|
2025-03-11 16:09:19 +08:00
|
|
|
|
|
|
|
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())
|
|
|
|
}
|
|
|
|
|
2023-09-04 21:59:27 +08:00
|
|
|
func (s *Staff) Salary(ctx *gin.Context) {
|
2025-03-09 10:44:36 +08:00
|
|
|
|
|
|
|
sess := ctx.Keys[session.ContextSession].(*session.AdminSession)
|
|
|
|
|
2023-09-04 21:59:27 +08:00
|
|
|
month := ctx.Query("month")
|
|
|
|
tp := ctx.Query("type")
|
2025-03-05 10:11:07 +08:00
|
|
|
|
2025-03-09 10:44:36 +08:00
|
|
|
corp, err := dao.NewCorpDao().GetByHost(sess.GetHeader().Host)
|
|
|
|
session.CheckDBError(err)
|
|
|
|
session.CheckNilError(corp, "企业不存在")
|
|
|
|
|
2023-09-04 21:59:27 +08:00
|
|
|
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 {
|
2025-03-09 10:44:36 +08:00
|
|
|
serv.Agent(corp.Id, month, ctx)
|
2023-09-04 21:59:27 +08:00
|
|
|
} else if tp == service.StaffSalaryTypeBank {
|
2025-03-09 10:44:36 +08:00
|
|
|
serv.Bank(corp.Id, month, ctx)
|
2023-09-04 21:59:27 +08:00
|
|
|
} else {
|
2025-03-09 10:44:36 +08:00
|
|
|
serv.Summary(corp.Id, month, ctx)
|
2023-09-04 21:59:27 +08:00
|
|
|
}
|
|
|
|
}
|
2023-10-07 14:18:46 +08:00
|
|
|
|
|
|
|
func (s *Staff) SyncStaffSalary(ctx *gin.Context) {
|
2025-03-05 10:11:07 +08:00
|
|
|
corpId := cast.ToInt64(ctx.Query("cid"))
|
|
|
|
if corpId == 0 {
|
|
|
|
corpId = 1000
|
|
|
|
}
|
|
|
|
go new(worker.Staff).SyncStaffSalary(corpId, "")
|
2023-10-07 14:21:00 +08:00
|
|
|
ctx.JSON(http.StatusOK, session.NewRspOk())
|
2023-10-07 14:18:46 +08:00
|
|
|
}
|