fonchain-fiee/pkg/service/oa_new/workTimeTemplate.go

543 lines
18 KiB
Go
Raw Normal View History

2025-02-19 06:24:15 +00:00
package oa_new
import (
"context"
"dubbo.apache.org/dubbo-go/v3/common/logger"
"fmt"
"github.com/fonchain_enterprise/fonchain-main/api/employee"
"github.com/fonchain_enterprise/fonchain-main/api/oa"
"github.com/fonchain_enterprise/fonchain-main/pkg/e"
"github.com/fonchain_enterprise/fonchain-main/pkg/model/login"
"github.com/fonchain_enterprise/fonchain-main/pkg/model/oa_model"
"github.com/fonchain_enterprise/fonchain-main/pkg/serializer"
"github.com/fonchain_enterprise/fonchain-main/pkg/service"
"github.com/fonchain_enterprise/fonchain-main/pkg/service/oa_new/common"
"github.com/fonchain_enterprise/fonchain-main/pkg/service/oa_new/oa_logic"
"github.com/gin-gonic/gin"
"github.com/gin-gonic/gin/binding"
"strconv"
"strings"
)
func SaveWorkTimeTemplate(c *gin.Context) {
var req oa.SaveWorkTimeTemplateReq
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.ResponseMsg(c, e.SUCCESS, serializer.Response{
Msg: err.Error(),
Status: e.Failed,
})
return
}
fmt.Println("============================================================= SaveWorkTimeTemplateRelation ===================================================")
fmt.Printf("WorkingTimeTemplateRelation is %+v\n", req)
fmt.Println("============================================================= SaveWorkTimeTemplateRelation ====================================if=============")
resData := serializer.Response{}
if req.Relations != nil {
// 新的关联 内部去重
multipleDepartments, err := oa_logic.VerifyNewRelationDepartmentAndPositionAndUserForSave(req.Relations)
if err != nil {
service.ResponseMsg(c, e.SUCCESS, serializer.Response{
Msg: err.Error(),
Status: e.Failed,
})
return
}
fmt.Println("============================================================= multipleDepartments ===================================================")
fmt.Printf("multipleDepartments is %+v\n", multipleDepartments)
fmt.Println("============================================================= multipleDepartments ===================================================")
if len(multipleDepartments) > 0 {
resData.Data = multipleDepartments
resData.Status = common.DuplicatePersonnelsCode
}
// 新的关联 和 旧的关联对比
duplicatePersonals, err := oa_logic.VerifyDepartmentAndPositionAndUserForSave(req.Relations)
if err != nil {
service.ResponseMsg(c, e.SUCCESS, serializer.Response{
Msg: err.Error(),
Status: e.Failed,
})
return
}
fmt.Println("============================================================= duplicatePersonals ===================================================")
fmt.Printf("duplicatePersonals is %+v\n", duplicatePersonals)
fmt.Println("============================================================= duplicatePersonals ===================================================")
if duplicatePersonals != nil {
text := make([]string, 0)
addPositionName := make([]string, 0)
addPositionNameMap := make(map[string]string)
for i := 0; i < len(duplicatePersonals); i++ {
text = append(text, fmt.Sprintf("%s (%s/%s)", duplicatePersonals[i].Name, duplicatePersonals[i].DepartmentName, duplicatePersonals[i].PositionName))
if addPositionNameMap[duplicatePersonals[i].AddPositionName] == "" {
addPositionNameMap[duplicatePersonals[i].AddPositionName] = duplicatePersonals[i].AddPositionName
addPositionName = append(addPositionName, duplicatePersonals[i].AddPositionName)
}
}
fmt.Println("============================================================= addPositionName ===================================================")
fmt.Printf("addPositionName is %+v\n", addPositionName)
fmt.Printf("text is %+v\n", text)
fmt.Println("============================================================= addPositionName ===================================================")
resData.Msg = fmt.Sprintf("员工 %s 已存在考勤,无法对 %s 岗位进行考勤创建", strings.Join(text, ","), strings.Join(addPositionName, ","))
resData.Status = common.DuplicatePersonnelsCode
}
}
userInfo := login.GetUserInfoFromC(c)
req.WorkTimeTemplate.Operator = userInfo.NickName
res, err := service.GrpcOAImpl.SaveWorkTimeTemplate(c, &req)
if err != nil {
service.ResponseMsg(c, e.SUCCESS, serializer.Response{
Msg: err.Error(),
Status: e.Failed,
})
return
}
go updateEmployeeWorkingTime(req.Relations)
if resData.Status == common.DuplicatePersonnelsCode {
service.ResponseMsg(c, e.SUCCESS, resData)
return
} else {
service.ResponseMsg(c, e.SUCCESS, serializer.Response{
Data: res,
Status: e.Ok,
})
}
}
func GetWorkTimeTemplateList(c *gin.Context) {
var req oa.WorkTimeTemplateListReq
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.ResponseMsg(c, e.SUCCESS, serializer.Response{
Msg: err.Error(),
Status: e.Failed,
})
return
}
//if req.TempGroupUUID == "" {
// service.ResponseMsg(c, e.SUCCESS, serializer.Response{
// Msg: "分类参数缺失",
// Status: e.Failed,
// })
// return
//}
res, err := service.GrpcOAImpl.GetWorkTimeTemplateList(c, &req)
if err != nil {
service.ResponseMsg(c, e.SUCCESS, serializer.Response{
Msg: err.Error(),
Status: e.Failed,
})
return
}
service.ResponseMsg(c, e.SUCCESS, serializer.Response{
Data: res,
Status: e.Ok,
})
}
func DeleteWorkTimeTemplate(c *gin.Context) {
var req oa.WorkTimeTemplate
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.ResponseMsg(c, e.SUCCESS, serializer.Response{
Msg: err.Error(),
Status: e.Failed,
})
return
}
res, err := service.GrpcOAImpl.DeleteWorkTimeTemplate(c, &req)
if err != nil {
service.ResponseMsg(c, e.SUCCESS, serializer.Response{
Msg: err.Error(),
Status: e.Failed,
})
return
}
service.ResponseMsg(c, e.SUCCESS, serializer.Response{
Data: res,
Status: e.Ok,
})
}
func WorkingTimeTemplateEffective(c *gin.Context) {
var req oa.CommonReq
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.ResponseMsg(c, e.SUCCESS, serializer.Response{
Msg: err.Error(),
Status: e.Failed,
})
return
}
res, err := service.GrpcOAImpl.WorkingTimeTemplateEffective(c, &req)
if err != nil {
service.ResponseMsg(c, e.SUCCESS, serializer.Response{
Msg: err.Error(),
Status: e.Failed,
})
return
}
service.ResponseMsg(c, e.SUCCESS, serializer.Response{
Data: res,
Status: e.Ok,
})
}
func WorkingTimeTemplateNotEffective(c *gin.Context) {
var req oa.CommonReq
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.ResponseMsg(c, e.SUCCESS, serializer.Response{
Msg: err.Error(),
Status: e.Failed,
})
return
}
res, err := service.GrpcOAImpl.WorkingTimeTemplateNotEffective(c, &req)
if err != nil {
service.ResponseMsg(c, e.SUCCESS, serializer.Response{
Msg: err.Error(),
Status: e.Failed,
})
return
}
service.ResponseMsg(c, e.SUCCESS, serializer.Response{
Data: res,
Status: e.Ok,
})
}
// SaveWorkTimeTemplateRelation 次日生效
func SaveWorkTimeTemplateRelation(c *gin.Context) {
var req oa.WorkingTimeTemplateRelation
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.ResponseMsg(c, e.SUCCESS, serializer.Response{
Msg: err.Error(),
Status: e.Failed,
})
return
}
fmt.Println("============================================================= SaveWorkTimeTemplateRelation ===================================================")
fmt.Printf("WorkingTimeTemplateRelation is %+v\n", req)
fmt.Println("============================================================= SaveWorkTimeTemplateRelation ===================================================")
resData := serializer.Response{}
// 新的关联 内部去重
multipleDepartments, err := oa_logic.VerifyNewRelationDepartmentAndPositionAndUser(&req)
if err != nil {
service.ResponseMsg(c, e.SUCCESS, serializer.Response{
Msg: err.Error(),
Status: e.Failed,
})
return
}
fmt.Println("============================================================= multipleDepartments ===================================================")
fmt.Printf("multipleDepartments is %+v\n", multipleDepartments)
fmt.Println("============================================================= multipleDepartments ===================================================")
if len(multipleDepartments) > 0 {
resData.Data = multipleDepartments
resData.Status = common.DuplicatePersonnelsCode
}
// 新的关联 和 旧的关联对比
duplicatePersonals, err := oa_logic.VerifyDepartmentAndPositionAndUser(&req)
if err != nil {
service.ResponseMsg(c, e.SUCCESS, serializer.Response{
Msg: err.Error(),
Status: e.Failed,
})
return
}
fmt.Println("============================================================= duplicatePersonals ===================================================")
fmt.Printf("duplicatePersonals is %+v\n", duplicatePersonals)
fmt.Println("============================================================= duplicatePersonals ===================================================")
if duplicatePersonals != nil {
text := make([]string, 0)
addPositionName := make([]string, 0)
addPositionNameMap := make(map[string]string)
for i := 0; i < len(duplicatePersonals); i++ {
text = append(text, fmt.Sprintf("%s (%s/%s)", duplicatePersonals[i].Name, duplicatePersonals[i].DepartmentName, duplicatePersonals[i].PositionName))
if addPositionNameMap[duplicatePersonals[i].AddPositionName] == "" {
addPositionNameMap[duplicatePersonals[i].AddPositionName] = duplicatePersonals[i].AddPositionName
addPositionName = append(addPositionName, duplicatePersonals[i].AddPositionName)
}
}
fmt.Println("============================================================= addPositionName ===================================================")
fmt.Printf("addPositionName is %+v\n", addPositionName)
fmt.Printf("text is %+v\n", text)
fmt.Println("============================================================= addPositionName ===================================================")
resData.Msg = fmt.Sprintf("员工 %s 已存在考勤,无法对 %s 岗位进行考勤创建", strings.Join(text, ","), strings.Join(addPositionName, ","))
resData.Status = common.DuplicatePersonnelsCode
}
//if resData.Status == common.DuplicatePersonnelsCode {
// service.ResponseMsg(c, e.SUCCESS, resData)
// return
//}
res, err := service.GrpcOAImpl.SaveWorkingTimeTemplateRelation(c, &req)
if err != nil {
service.ResponseMsg(c, e.SUCCESS, serializer.Response{
Msg: err.Error(),
Status: e.Failed,
})
return
}
if resData.Status == common.DuplicatePersonnelsCode {
service.ResponseMsg(c, e.SUCCESS, resData)
return
} else {
service.ResponseMsg(c, e.SUCCESS, serializer.Response{
Data: res,
Status: e.Ok,
})
}
}
func BatchCancelWorkingTimeTemplateRelation(c *gin.Context) {
var req oa.WorkingTimeTemplateRelationBatch
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.ResponseMsg(c, e.SUCCESS, serializer.Response{
Msg: err.Error(),
Status: e.Failed,
})
return
}
if req.Relations == nil || len(req.Relations) == 0 {
service.ResponseMsg(c, e.SUCCESS, serializer.Response{
Status: e.Ok,
})
return
}
res, err := service.GrpcOAImpl.BatchCancelWorkingTimeTemplateRelation(c, &req)
if err != nil {
service.ResponseMsg(c, e.SUCCESS, serializer.Response{
Msg: err.Error(),
Status: e.Failed,
})
return
}
service.ResponseMsg(c, e.SUCCESS, serializer.Response{
Data: res,
Status: e.Ok,
})
}
func WorkingTimeWithPositions(c *gin.Context) {
var req oa.WorkingTimeWithPositionsReq
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.ResponseMsg(c, e.SUCCESS, serializer.Response{
Msg: err.Error(),
Status: e.Failed,
})
return
}
res, err := service.GrpcOAImpl.QueryWorkingTimeWithPositions(c, &req)
if err != nil {
service.ResponseMsg(c, e.SUCCESS, serializer.Response{
Msg: err.Error(),
Status: e.Failed,
})
return
}
service.ResponseMsg(c, e.SUCCESS, serializer.Response{
Data: res,
Status: e.Ok,
})
}
// SaveWorkTimeTemplateRelationEffectiveNow 立即生效
func SaveWorkTimeTemplateRelationEffectiveNow(c *gin.Context) {
var req oa.WorkingTimeTemplateRelation
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.ResponseMsg(c, e.SUCCESS, serializer.Response{
Msg: err.Error(),
Status: e.Failed,
})
return
}
fmt.Println("============================================================= SaveWorkTimeTemplateRelation ===================================================")
fmt.Printf("WorkingTimeTemplateRelation is %+v\n", req)
fmt.Println("============================================================= SaveWorkTimeTemplateRelation ===================================================")
resData := serializer.Response{}
// 新的关联 内部去重
multipleDepartments, err := oa_logic.VerifyNewRelationDepartmentAndPositionAndUser(&req)
if err != nil {
service.ResponseMsg(c, e.SUCCESS, serializer.Response{
Msg: err.Error(),
Status: e.Failed,
})
return
}
if len(multipleDepartments) > 0 {
resData.Data = multipleDepartments
resData.Status = common.DuplicatePersonnelsCode
}
fmt.Println("============================================================= multipleDepartments ===================================================")
fmt.Printf("multipleDepartments is %+v\n", multipleDepartments)
fmt.Println("============================================================= multipleDepartments ===================================================")
res, err := service.GrpcOAImpl.WorkingTimeTemplateEffectiveNow(c, &req)
if err != nil {
service.ResponseMsg(c, e.SUCCESS, serializer.Response{
Msg: err.Error(),
Status: e.Failed,
})
return
}
if resData.Status == common.DuplicatePersonnelsCode {
service.ResponseMsg(c, e.SUCCESS, resData)
return
} else {
service.ResponseMsg(c, e.SUCCESS, serializer.Response{
Data: res,
Status: e.Ok,
})
}
}
// QueryWorkTimeTemplateDate 查询考勤组的生效时间以及失效时间
func QueryWorkTimeTemplateDate(c *gin.Context) {
var req oa.WorkTimeTemplateDateReq
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.ResponseMsg(c, e.SUCCESS, serializer.Response{
Msg: err.Error(),
Status: e.Failed,
})
return
}
res, err := service.GrpcOAImpl.QueryWorkTimeTemplateDate(c, &req)
if err != nil {
service.ResponseMsg(c, e.SUCCESS, serializer.Response{
Msg: err.Error(),
Status: e.Failed,
})
return
}
if res != nil {
if res.EffectiveDate != common.NextDate() {
res.EffectiveDate = ""
}
}
service.ResponseMsg(c, e.SUCCESS, serializer.Response{
Data: res,
Status: e.Ok,
})
}
func updateEmployeeWorkingTime(relations *oa.WorkingTimeTemplateRelation) {
if relations == nil {
return
}
// 删除
if relations.DelPositionsNow != nil && len(relations.DelPositionsNow) > 0 {
fmt.Println("=====================================================================================")
fmt.Println("============================================================= workingTimeWithPositions ===================================================")
fmt.Printf("workingTimeWithPositions is %+v\n", relations)
fmt.Println("============================================================= workingTimeWithPositions ===================================================")
fmt.Println("=====================================================================================")
// 更新 员工档案的 考勤信息
for i := 0; i < len(relations.DelPositionsNow); i++ {
req := new(employee.ModifyTheEmployeeAttendanceGroupByOtherReq)
req.PositionId, _ = strconv.ParseUint(relations.DelPositionsNow[i].PositionUID, 10, 64)
req.DepartmentId, _ = strconv.ParseUint(relations.DelPositionsNow[i].DepartmentUID, 10, 64)
_, err := service.GrpcEmployeeProvider.ModifyTheEmployeeAttendanceGroupByOther(context.Background(), req)
if err != nil {
logger.Errorf("删除 员工档案 考勤绑定 %s", err.Error())
}
}
}
// 保存成功后,根据 addPositionNow 的 部门和岗位信息 查询 workingTime 信息
if relations.AddPositionsNow != nil && len(relations.AddPositionsNow) > 0 {
positionsReq := new(oa.WorkingTimeWithPositionsReq)
for i := 0; i < len(relations.AddPositionsNow); i++ {
positionsReq.Positions = append(positionsReq.Positions, &oa.WorkingTimeWithPositionsReqPosition{
PositionUID: relations.AddPositionsNow[i].PositionUID,
DepartmentUID: relations.AddPositionsNow[i].DepartmentUID,
})
}
positionsReq.InUse = oa_model.InUse
positionsReq.Page = 1
positionsReq.PageSize = 99999
workingTimeWithPositions, workingTimeWithPositionsErr := service.GrpcOAImpl.QueryWorkingTimeWithPositions(context.Background(), positionsReq)
if workingTimeWithPositionsErr != nil {
logger.Errorf("查询考勤信息失败:%s", workingTimeWithPositionsErr.Error())
}
fmt.Println("=====================================================================================")
fmt.Println("============================================================= workingTimeWithPositions ===================================================")
fmt.Printf("workingTimeWithPositions is %+v\n", workingTimeWithPositions)
fmt.Println("============================================================= workingTimeWithPositions ===================================================")
fmt.Println("=====================================================================================")
// 更新 员工档案的 考勤信息
for i := 0; i < len(workingTimeWithPositions.Data); i++ {
req := new(employee.ModifyTheEmployeeAttendanceGroupByOtherReq)
req.PositionId, _ = strconv.ParseUint(workingTimeWithPositions.Data[i].PositionUID, 10, 64)
req.DepartmentId, _ = strconv.ParseUint(workingTimeWithPositions.Data[i].DepartmentUID, 10, 64)
req.AttendanceSectionId = workingTimeWithPositions.Data[i].UUID
req.AttendanceSectionName = workingTimeWithPositions.Data[i].WorkTimeTemplateName
_, err := service.GrpcEmployeeProvider.ModifyTheEmployeeAttendanceGroupByOther(context.Background(), req)
if err != nil {
logger.Errorf("更新 员工档案 考勤绑定 %s", err.Error())
}
}
}
}