This commit is contained in:
jiangyong 2025-03-05 10:11:07 +08:00
parent 7da69a2b48
commit 3921d84177
6 changed files with 71 additions and 26 deletions

View File

@ -5,6 +5,7 @@ import (
"enterprise/server/session"
"enterprise/worker"
"github.com/gin-gonic/gin"
"github.com/spf13/cast"
"net/http"
"strings"
"time"
@ -16,6 +17,11 @@ type Staff struct {
func (s *Staff) Salary(ctx *gin.Context) {
month := ctx.Query("month")
tp := ctx.Query("type")
cid := cast.ToInt64(ctx.Query("cid"))
if cid == 0 {
cid = 1000
}
if month == "" {
month = time.Now().AddDate(0, -1, 0).Format("200601")
}
@ -26,24 +32,19 @@ func (s *Staff) Salary(ctx *gin.Context) {
serv := new(service.StaffSalary)
if tp == service.StaffSalaryTypeAgent {
serv.Agent(month, ctx)
serv.Agent(cid, month, ctx)
} else if tp == service.StaffSalaryTypeBank {
serv.Bank(month, ctx)
serv.Bank(cid, month, ctx)
} else {
serv.Summary(month, ctx)
serv.Summary(cid, month, ctx)
}
}
func (s *Staff) SalaryHistory(ctx *gin.Context) {
}
func (s *Staff) SyncStaffInfo(ctx *gin.Context) {
ctx.JSON(http.StatusOK, session.NewRspOk())
}
func (s *Staff) SyncStaffSalary(ctx *gin.Context) {
go new(worker.Staff).SyncStaffSalary(1000, "")
corpId := cast.ToInt64(ctx.Query("cid"))
if corpId == 0 {
corpId = 1000
}
go new(worker.Staff).SyncStaffSalary(corpId, "")
ctx.JSON(http.StatusOK, session.NewRspOk())
}

View File

@ -26,9 +26,9 @@ var (
type StaffSalary struct {
}
func (s *StaffSalary) Agent(month string, ctx *gin.Context) {
func (s *StaffSalary) Agent(cid int64, month string, ctx *gin.Context) {
xls := ctx.Query("xls")
staffSalarys, err := dao.NewStaffSalaryDao().Query(1000, 0, month)
staffSalarys, err := dao.NewStaffSalaryDao().Query(cid, 0, month)
if err != nil {
panic(config.ErrDb.New().Append(err))
}
@ -69,15 +69,15 @@ func (s *StaffSalary) Agent(month string, ctx *gin.Context) {
} else {
links := make([]map[string]string, 0)
links = append(links, map[string]string{
"url": "/staff/salary?type=agent&xls=1",
"url": "/staff/salary?type=agent&xls=1&cid=" + cast.ToString(cid),
"name": "下载",
})
links = append(links, map[string]string{
"url": "/staff/salary?type=bank",
"url": "/staff/salary?type=bank&cid=" + cast.ToString(cid),
"name": "银行",
})
links = append(links, map[string]string{
"url": "/staff/salary?type=summary",
"url": "/staff/salary?type=summary&cid=" + cast.ToString(cid),
"name": "汇总",
})
ctx.HTML(http.StatusOK, "salary.html", gin.H{
@ -89,9 +89,9 @@ func (s *StaffSalary) Agent(month string, ctx *gin.Context) {
}
}
func (s *StaffSalary) Bank(month string, ctx *gin.Context) {
func (s *StaffSalary) Bank(cid int64, month string, ctx *gin.Context) {
xls := ctx.Query("xls")
staffSalarys, err := dao.NewStaffSalaryDao().Query(1000, 0, month)
staffSalarys, err := dao.NewStaffSalaryDao().Query(cid, 0, month)
if err != nil {
panic(config.ErrDb.New().Append(err))
}
@ -130,15 +130,15 @@ func (s *StaffSalary) Bank(month string, ctx *gin.Context) {
} else {
links := make([]map[string]string, 0)
links = append(links, map[string]string{
"url": "/staff/salary?type=bank&xls=1",
"url": "/staff/salary?type=bank&xls=1&cid=" + cast.ToString(cid),
"name": "下载",
})
links = append(links, map[string]string{
"url": "/staff/salary?type=summary",
"url": "/staff/salary?type=summary&cid=" + cast.ToString(cid),
"name": "汇总",
})
links = append(links, map[string]string{
"url": "/staff/salary?type=agent",
"url": "/staff/salary?type=agent&cid=" + cast.ToString(cid),
"name": "代理",
})
ctx.HTML(http.StatusOK, "salary.html", gin.H{
@ -150,7 +150,7 @@ func (s *StaffSalary) Bank(month string, ctx *gin.Context) {
}
}
func (s *StaffSalary) Summary(month string, ctx *gin.Context) {
func (s *StaffSalary) Summary(cid int64, month string, ctx *gin.Context) {
xls := ctx.Query("xls")
staffSalarys, err := dao.NewStaffSalaryDao().Query(1000, 0, month)
if err != nil {
@ -240,11 +240,11 @@ func (s *StaffSalary) Summary(month string, ctx *gin.Context) {
} else {
links := make([]map[string]string, 0)
links = append(links, map[string]string{
"url": "/staff/salary?type=bank",
"url": "/staff/salary?type=bank&cid=" + cast.ToString(cid),
"name": "银行",
})
links = append(links, map[string]string{
"url": "/staff/salary?type=agent",
"url": "/staff/salary?type=agent&cid=" + cast.ToString(cid),
"name": "代理",
})
ctx.HTML(http.StatusOK, "salary.html", gin.H{

View File

@ -4,5 +4,6 @@ import "enterprise/common/registry"
func init() {
registry.RegisterSalaryCalculator("1000", NewSalaryCalculator1000)
registry.RegisterSalaryCalculator("1002", NewSalaryCalculator1002)
registry.RegisterSalaryCalculator("1000_wujiefeng", NewSalaryCalculator1000Wujiefeng)
}

View File

@ -43,6 +43,7 @@ func (s *SalaryCalculator1000) Calculate(salary *model.StaffSalary) {
if userConfig.SalaryCalcutor == SalaryCalculatorOperation {
s.operationCalculate(salary)
}
}
func (s *SalaryCalculator1000) operationCalculate(salary *model.StaffSalary) {

View File

@ -0,0 +1,31 @@
package salary_calculator
import (
"enterprise/common/model"
"enterprise/common/registry"
"github.com/spf13/cast"
)
type SalaryCalculator1002 struct {
corp *model.Corp
user *model.StaffUser
}
func NewSalaryCalculator1002(corp *model.Corp, user *model.StaffUser) registry.SalaryCalculator {
return &SalaryCalculator1002{
corp: corp,
user: user,
}
}
func (s *SalaryCalculator1002) Calculate(salary *model.StaffSalary) {
userSlary := s.user.GetSalary()
if s.user.Status == model.StaffUserStatusAttach { //挂靠直接算工资
salary.AttendSalary = cast.ToFloat64(userSlary.Base)
salary.TargetSalary = cast.ToFloat64(userSlary.Target)
return
}
salary.AttendSalary = cast.ToFloat64(userSlary.Base) * (salary.AttendDay / float64(salary.ShouldDay))
salary.TargetSalary = cast.ToFloat64(userSlary.Target)
}

View File

@ -1,6 +1,7 @@
package service
import (
butil "enterprise/base/util"
"enterprise/common/dao"
"enterprise/common/model"
"enterprise/common/registry"
@ -83,9 +84,19 @@ func (s *StaffSalary) CalcSalary(salary *model.StaffSalary, month string) (*mode
if calculator != nil {
calculator.Calculate(salary)
}
s.formatFloat(salary)
return salary, nil
}
func (s *StaffSalary) formatFloat(salary *model.StaffSalary) {
salary.AwardSalary = butil.FloatCut(salary.AwardSalary)
salary.AttendSalary = butil.FloatCut(salary.AttendSalary)
salary.TargetSalary = butil.FloatCut(salary.TargetSalary)
salary.OtherSalary = butil.FloatCut(salary.OtherSalary)
salary.AttendDay = butil.FloatCut(salary.AttendDay)
salary.HolidayDay = butil.FloatCut(salary.HolidayDay)
}
func (s *StaffSalary) getRealVacationDay(month string) (float64, float64) {
// 休假申请
approveVacations, err := dao.NewApprovalVacationDao().GetByUsername(s.user.CorpId, s.user.Username, month, "")