yinbentan
2024-07-25 1bd58eb901da8ca32d15c121effa7e22cc89e1bd
controllers/salary_plan_controller.go
@@ -2,6 +2,8 @@
import (
   "github.com/gin-gonic/gin"
   "gorm.io/gorm"
   "silkserver/constvar"
   "silkserver/controllers/request"
   "silkserver/extend/code"
   "silkserver/extend/util"
@@ -20,7 +22,7 @@
//   @Tags      员工薪资/薪酬方案
//   @Summary   保存薪酬方案
//   @Produce   application/json
//   @Param      object   body      models.SaveSalaryPlan   true   "参数"
//   @Param      object   body      models.SalaryPlan   true   "参数"
//   @Param        Authorization   header string true "token"
//   @Success   200      {object}   util.Response      "成功"
//   @Router      /api-jl/v1/salary/saveSalaryPlan [post]
@@ -69,7 +71,7 @@
      util.ResponseFormat(c, code.RequestParamError, "参数解析失败,数据类型错误")
      return
   }
   find, total, err := models.NewSalaryPlanSearch().SetPage(params.Page, params.PageSize).Find()
   find, total, err := models.NewSalaryPlanSearch().SetPage(params.Page, params.PageSize).SetPreload(true).Find()
   if err != nil {
      util.ResponseFormat(c, code.RequestParamError, "查找失败")
      return
@@ -82,7 +84,7 @@
//   @Tags      员工薪资/薪酬方案
//   @Summary   删除薪酬方案
//   @Produce   application/json
//   @Param      number   path      string         true   "id"
//   @Param      id   path      string         true   "id"
//   @Param        Authorization   header string true "token"
//   @Success   200      {object}   util.Response      "成功"
//   @Router      /api-jl/v1/salary/deleteSalaryPlanInfo/{id} [delete]
@@ -104,3 +106,232 @@
   }
   util.ResponseFormat(c, code.Success, "删除成功")
}
// SaveSalaryType
//
//   @Tags      员工薪资/薪酬方案
//   @Summary   保存薪资类型
//   @Produce   application/json
//   @Param      object   body      request.SalaryType   true   "参数"
//   @Param        Authorization   header string true "token"
//   @Success   200      {object}   util.Response      "成功"
//   @Router      /api-jl/v1/salary/saveSalaryType [post]
func (slf SalaryPlanController) SaveSalaryType(c *gin.Context) {
   var params request.SalaryType
   err := c.BindJSON(&params)
   if err != nil {
      util.ResponseFormat(c, code.RequestParamError, "参数解析失败,数据类型错误")
      return
   }
   if params.Type == 0 {
      util.ResponseFormat(c, code.RequestParamError, "类型不能为空")
      return
   }
   miniDicts, err := models.NewMiniDictSearch().SetType(params.Type).FindNotTotal()
   if err != nil {
      util.ResponseFormat(c, code.RequestParamError, err)
      return
   }
   dicts := params.Values
   add := make([]*models.MiniDict, 0)
   del := make([]uint, 0)
   update := make([]*models.MiniDict, 0)
   for _, mini := range miniDicts {
      flag := true
      for i, value := range dicts {
         var dict models.MiniDict
         dict.Name = value.Name
         dict.IsDefault = value.IsDefault
         dict.Type = params.Type
         if value.Id == 0 {
            add = append(add, &dict)
            flag = false
            if i < len(dicts)-1 {
               dicts = append(dicts[:i], dicts[i+1:]...)
            } else {
               dicts = dicts[:i]
            }
            break
         } else if value.Id == mini.ID {
            dict.ID = mini.ID
            update = append(update, &dict)
            flag = false
            if i < len(dicts)-1 {
               dicts = append(dicts[:i], dicts[i+1:]...)
            } else {
               dicts = dicts[:i]
            }
            break
         }
      }
      if flag {
         del = append(del, mini.ID)
      }
   }
   //新增的
   for _, value := range dicts {
      var dict models.MiniDict
      dict.Name = value.Name
      dict.IsDefault = value.IsDefault
      dict.Type = params.Type
      add = append(add, &dict)
   }
   err = models.WithTransaction(func(db *gorm.DB) error {
      if len(del) > 0 {
         err = models.NewMiniDictSearch().SetOrm(db).SetIds(del).Delete()
         if err != nil {
            return err
         }
      }
      if len(update) > 0 {
         err = models.NewMiniDictSearch().SetOrm(db).SaveBatch(update)
         if err != nil {
            return err
         }
      }
      if len(add) > 0 {
         err = models.NewMiniDictSearch().SetOrm(db).CreateBatch(add)
         if err != nil {
            return err
         }
      }
      return nil
   })
   if err != nil {
      util.ResponseFormat(c, code.RequestParamError, "保存失败")
      return
   }
   util.ResponseFormat(c, code.Success, "保存成功")
}
// GetSalaryTypeList
//
//   @Tags      员工薪资/薪酬方案
//   @Summary   获取薪资类型列表
//   @Produce   application/json
//   @Param      number   path      string         true   "type"   "参数"
//   @Param        Authorization   header string true "token"
//   @Success   200      {object}   util.ResponseList{data=[]models.MiniDict}      "成功"
//   @Router      /api-jl/v1/salary/getSalaryTypeList/{type} [get]
func (slf SalaryPlanController) GetSalaryTypeList(c *gin.Context) {
   tp := c.Param("type")
   if tp == "" {
      util.ResponseFormat(c, code.RequestParamError, "无效的类型")
      return
   }
   atoi, _ := strconv.Atoi(tp)
   if atoi == 0 {
      util.ResponseFormat(c, code.RequestParamError, "无效的类型")
      return
   }
   dicts, err := models.NewMiniDictSearch().SetType(constvar.MiniDictType(atoi)).FindNotTotal()
   if err != nil {
      util.ResponseFormat(c, code.RequestParamError, "查询失败")
      return
   }
   util.ResponseFormat(c, code.Success, dicts)
}
// GetPayrollProductionCarList
//
//   @Tags      员工薪资/薪酬方案
//   @Summary   获取车台每天的产量列表
//   @Produce   application/json
//   @Param        Authorization   header string true "token"
//   @Param        object  query    request.PayrollProductionCar true  "查询参数"
//   @Success   200      {object}   util.ResponseList{data=[]models.PayrollProductionCar}   "成功"
//   @Router      /api-jl/v1/salary/getPayrollProductionCarList [get]
func (slf SalaryPlanController) GetPayrollProductionCarList(c *gin.Context) {
   var params request.PayrollProductionCar
   if err := c.ShouldBindQuery(&params); err != nil {
      util.ResponseFormat(c, code.RequestParamError, "参数解析失败,数据类型错误")
      return
   }
   carSearch := models.NewPayrollProductionCarSearch()
   if len(params.Cycle) == 0 && len(params.Monthly) == 0 {
      util.ResponseFormat(c, code.RequestParamError, "请检查查询周期,必须输入按天查询或按月查询。格式:Cycle(yyyy-MM-dd) 或 Monthly(yyyy-MM)")
      return
   }
   carSearch.SetPage(params.Page, params.PageSize)
   carSearch.SetWorkshopNumber(params.WorkshopNumber).SetGroupNumber(params.GroupNumber).SetCarNumber(params.CarNumber).SetMarketNumber(params.MarketNumber).SetSpec(params.Spec)
   list, total, err := carSearch.Find()
   if err != nil {
      util.ResponseFormat(c, code.RequestParamError, "查找失败")
      return
   }
   util.ResponseFormatList(c, code.Success, list, total)
}
// GetPayrollProductionGroupList
//
//   @Tags      员工薪资/薪酬方案
//   @Summary   获取小组每天的产量列表
//   @Produce   application/json
//   @Param        Authorization   header string true "token"
//   @Param        object  query    request.PayrollProductionGroup true  "查询参数"
//   @Success   200      {object}   util.ResponseList{data=[]models.PayrollProductionGroup}   "成功"
//   @Router      /api-jl/v1/salary/getPayrollProductionGroupList [get]
func (slf SalaryPlanController) GetPayrollProductionGroupList(c *gin.Context) {
   var params request.PayrollProductionGroup
   if err := c.ShouldBindQuery(&params); err != nil {
      util.ResponseFormat(c, code.RequestParamError, "参数解析失败,数据类型错误")
      return
   }
   //params = request.PayrollProductionGroup{
   //   Cycle:          c.Query("cycle"),
   //   Monthly:        c.Query("monthly"),
   //   WorkshopNumber: c.Query("workshopNumber"),
   //}
   //params.GroupNumber, _ = strconv.Atoi(c.Query("groupNumber"))
   //params.Page, _ = strconv.Atoi(c.Query("page"))
   //params.PageSize, _ = strconv.Atoi(c.Query("pageSize"))
   if len(params.Cycle) == 0 && len(params.Monthly) == 0 {
      util.ResponseFormat(c, code.RequestParamError, "请检查查询周期,必须输入按天查询或按月查询。格式:Cycle(yyyy-MM-dd) 或 Monthly(yyyy-MM)")
      return
   }
   list, total, err := models.NewPayrollProductionGroupSearch().SetPage(params.Page, params.PageSize).
      SetCycle(params.Cycle).SetMonthly(params.Monthly).SetWorkshopNumber(params.WorkshopNumber).SetGroupNumber(params.GroupNumber).
      Find()
   if err != nil {
      util.ResponseFormat(c, code.RequestParamError, "查找失败")
      return
   }
   util.ResponseFormatList(c, code.Success, list, total)
}
// GetPayrollSalaryPlanList
//
//   @Tags      员工薪资/薪酬方案
//   @Summary   获取人员每月的薪资列表
//   @Produce   application/json
//   @Param        Authorization   header string true "token"
//   @Param        object  query    request.PayrollSalaryPlan true  "查询参数"
//   @Success   200      {object}   util.ResponseList{data=[]models.PayrollSalaryPlan}   "成功"
//   @Router      /api-jl/v1/salary/getPayrollSalaryPlanList [get]
func (slf SalaryPlanController) GetPayrollSalaryPlanList(c *gin.Context) {
   var params request.PayrollSalaryPlan
   if err := c.ShouldBindQuery(&params); err != nil {
      util.ResponseFormat(c, code.RequestParamError, "参数解析失败,数据类型错误")
      return
   }
   if len(params.Cycle) == 0 {
      util.ResponseFormat(c, code.RequestParamError, "请检查查询周期。格式:Cycle(yyyy-MM-dd)")
      return
   }
   list, total, err := models.NewPayrollSalaryPlanSearch().SetPage(params.Page, params.PageSize).
      SetCycle(params.Cycle).SetWorkerID(params.WorkerID).SetKeyword(params.Keyword).SetWorkTypeID(uint(params.WorkTypeID)).SetWorkTypeCode(constvar.JobType(params.WorkTypeCode)).
      Find()
   if err != nil {
      util.ResponseFormat(c, code.RequestParamError, "查找失败")
      return
   }
   util.ResponseFormatList(c, code.Success, list, total)
}