920 lines
36 KiB
Go
920 lines
36 KiB
Go
package approval
|
||
|
||
import (
|
||
"context"
|
||
"dubbo.apache.org/dubbo-go/v3/common/logger"
|
||
"errors"
|
||
"fmt"
|
||
approvalApi "github.com/fonchain_enterprise/fonchain-main/api/approval"
|
||
oaApi "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/service"
|
||
"github.com/fonchain_enterprise/fonchain-main/pkg/service/oa_new/common"
|
||
"github.com/fonchain_enterprise/fonchain-main/pkg/service/oa_new/model"
|
||
"github.com/fonchain_enterprise/fonchain-main/pkg/service/oa_new/oa_logic"
|
||
"github.com/fonchain_enterprise/fonchain-main/pkg/utils/holiday"
|
||
"github.com/jinzhu/copier"
|
||
"strconv"
|
||
"strings"
|
||
"time"
|
||
)
|
||
|
||
func SyncApprovalToOA(req *approvalApi.CreateRequest) (saveRes *oaApi.CommonRes, err error) {
|
||
|
||
// 赋值 给 oa系统中的 oa 审批
|
||
oaApply := retOaApply(req, true, false, false)
|
||
|
||
//oaApply.ApprovalID = strconv.FormatUint(approvalID, 10)
|
||
//oaApply.StaffUID = strconv.FormatUint(req.SubmitterID, 10)
|
||
//oaApply.StaffName = req.SubmitterName
|
||
|
||
// 保存 oa 审批内容
|
||
saveRes, err = service.GrpcOAImpl.SaveOaApply(context.Background(), oaApply)
|
||
fmt.Println("保存 oa 审批 UUID 到 审批 开始")
|
||
fmt.Println("oa apply uuid is :", saveRes.ID)
|
||
fmt.Println("保存 oa 审批 UUID 到 审批 结束")
|
||
|
||
return
|
||
|
||
}
|
||
|
||
// 更新--通过或者拒绝
|
||
func UpdateApprovalStatusToOAStatus(req *approvalApi.CreateRequest) (updateRes *oaApi.CommonRes, err error) {
|
||
// 赋值 给 oa系统中的 oa 审批
|
||
oaApply := retOaApply(req, false, true, false)
|
||
// 保存 oa 审批内容
|
||
updateRes, err = service.GrpcOAImpl.UpdateOaApply(context.Background(), oaApply)
|
||
err = UpdateSlackBalance(req)
|
||
if err != nil {
|
||
fmt.Printf("更新假勤余额失败---%v", err)
|
||
}
|
||
return
|
||
|
||
}
|
||
|
||
// 撤销
|
||
func RevokeOaApproval(req *approvalApi.CreateRequest) (updateRes *oaApi.CommonRes, err error) {
|
||
// 赋值 给 oa系统中的 oa 审批
|
||
oaApply := retOaApply(req, false, false, true)
|
||
// 保存 oa 审批内容
|
||
updateRes, err = service.GrpcOAImpl.UpdateOaApply(context.Background(), oaApply)
|
||
err = UpdateSlackBalance(req)
|
||
if err != nil {
|
||
fmt.Printf("更新假勤余额失败---%v", err)
|
||
}
|
||
return
|
||
|
||
}
|
||
|
||
// 删除
|
||
func DeleteApproval(req *approvalApi.CreateRequest) (updateRes *oaApi.CommonRes, err error) {
|
||
// 赋值 给 oa系统中的 oa 审批
|
||
oaApply := retOaApply(req, false, false, false)
|
||
// 保存 oa 审批内容
|
||
updateRes, err = service.GrpcOAImpl.DeleteOaApply(context.Background(), oaApply)
|
||
req.Status = e.ApprovalWorkStatusRevokeOk
|
||
err = UpdateSlackBalance(req)
|
||
if err != nil {
|
||
fmt.Printf("更新假勤余额失败---%v", err)
|
||
}
|
||
return
|
||
|
||
}
|
||
func UpdateSlackBalance(req *approvalApi.CreateRequest) error {
|
||
// ty := 1 //增加假期天数 ty = 2 // 减少假期天数
|
||
fmt.Printf("更新假勤余额请求参数---%v", req.ApprovalOA.Leave)
|
||
switch req.Type {
|
||
case oa_model.TypeAnnualLeave, oa_model.TypeParentalLeave, oa_model.TypeNursingLeave:
|
||
fmt.Printf("这里是额度余额变动---:%v", req.Type)
|
||
if req.Status == e.ApprovalWorkStatusRevokeOk || req.Status == e.ApprovalWorkStatusFail { //撤销或者拒绝才会减去假勤余额
|
||
return modifyLeaveBalance(req, req.Type, 1)
|
||
} else {
|
||
return nil
|
||
}
|
||
case oa_model.TypeParentalLeaveApply, oa_model.TypeNursingLeaveApply:
|
||
fmt.Printf("这里是额度申请---:%v", req.Type)
|
||
if req.Status == e.ApprovalWorkStatusOk { //只有审批通过才会添加假勤余额
|
||
return updateFalseAttendanceStatus(req, req.Type, 2)
|
||
} else {
|
||
return nil
|
||
}
|
||
default:
|
||
return nil
|
||
}
|
||
}
|
||
|
||
func modifyLeaveBalance(req *approvalApi.CreateRequest, leaveType string, ty int) error {
|
||
date, _ := time.Parse("2006-01-02 15:04:05", req.ApprovalOA.Leave.ActionTime)
|
||
year := int32(date.Year())
|
||
_, err := service.GrpcOAImpl.ModifyTheLeaveBalance(context.Background(), &oaApi.ModifyTheLeaveBalanceReq{
|
||
StaffUid: req.SubmitterID,
|
||
LeaveType: leaveType,
|
||
Movement: int32(ty),
|
||
Year: year,
|
||
Days: req.ApprovalOA.Leave.Days,
|
||
})
|
||
if err != nil {
|
||
fmt.Printf("更新假勤余额失败---%v", err)
|
||
}
|
||
return err
|
||
}
|
||
|
||
func updateFalseAttendanceStatus(req *approvalApi.CreateRequest, leaveType string, ty int) error {
|
||
date, _ := time.Parse("2006-01-02 15:04:05", req.ApprovalOA.LeaveApply.ActionTime)
|
||
year := int32(date.Year())
|
||
_, err := service.GrpcOAImpl.UpdateFalseAttendanceStatus(context.Background(), &oaApi.UpdateFalseAttendanceStatusReq{
|
||
StaffUid: req.SubmitterID,
|
||
LeaveType: leaveType,
|
||
Year: year,
|
||
Days: req.ApprovalOA.LeaveApply.LeaveBalance,
|
||
Status: int32(ty),
|
||
})
|
||
if err != nil {
|
||
fmt.Printf("更新假勤余额失败---%v", err)
|
||
}
|
||
return err
|
||
}
|
||
func retOaApply(req *approvalApi.CreateRequest, save, updateStatus, revoke bool) (oaApply *oaApi.OAApply) {
|
||
oaApply = new(oaApi.OAApply)
|
||
fmt.Println("============== 打印 approval 审批内容 ========== 开始 =========")
|
||
fmt.Printf("CreateRequest info is : %+v \n", req)
|
||
fmt.Println("============== 打印 approval 审批内容 ========== 结束 =========")
|
||
|
||
// 通过 copier 赋值 可行
|
||
if req.ApprovalOA.MakeUp != nil {
|
||
copier.CopyWithOption(&oaApply, req.ApprovalOA.MakeUp, copier.Option{DeepCopy: true})
|
||
copier.CopyWithOption(&oaApply.ApplyTimes, req.ApprovalOA.MakeUp.ApplyTimes, copier.Option{DeepCopy: true})
|
||
copier.CopyWithOption(&oaApply.ApprovalUsers, req.ApprovalOA.MakeUp.ApprovalUsers, copier.Option{DeepCopy: true})
|
||
copier.CopyWithOption(&oaApply.CopyUsers, req.ApprovalOA.MakeUp.CopyUsers, copier.Option{DeepCopy: true})
|
||
}
|
||
|
||
if req.ApprovalOA.OutWork != nil {
|
||
copier.CopyWithOption(&oaApply, req.ApprovalOA.OutWork, copier.Option{DeepCopy: true})
|
||
copier.CopyWithOption(&oaApply.ApplyTimes, req.ApprovalOA.OutWork.ApplyTimes, copier.Option{DeepCopy: true})
|
||
copier.CopyWithOption(&oaApply.ApprovalUsers, req.ApprovalOA.OutWork.ApprovalUsers, copier.Option{DeepCopy: true})
|
||
copier.CopyWithOption(&oaApply.CopyUsers, req.ApprovalOA.OutWork.CopyUsers, copier.Option{DeepCopy: true})
|
||
}
|
||
|
||
if req.ApprovalOA.LeaveApply != nil {
|
||
copier.CopyWithOption(&oaApply, req.ApprovalOA.LeaveApply, copier.Option{DeepCopy: true})
|
||
copier.CopyWithOption(&oaApply.ApprovalUsers, req.ApprovalOA.LeaveApply.ApprovalUsers, copier.Option{DeepCopy: true})
|
||
copier.CopyWithOption(&oaApply.CopyUsers, req.ApprovalOA.LeaveApply.CopyUsers, copier.Option{DeepCopy: true})
|
||
}
|
||
|
||
if req.ApprovalOA.Turnover != nil {
|
||
copier.CopyWithOption(&oaApply, req.ApprovalOA.Turnover, copier.Option{DeepCopy: true})
|
||
//copier.CopyWithOption(&oaApply.ApplyTimes, req.ApprovalOA.Turnover.ApplyTimes, copier.Option{DeepCopy: true})
|
||
copier.CopyWithOption(&oaApply.ApprovalUsers, req.ApprovalOA.Turnover.ApprovalUsers, copier.Option{DeepCopy: true})
|
||
copier.CopyWithOption(&oaApply.CopyUsers, req.ApprovalOA.Turnover.CopyUsers, copier.Option{DeepCopy: true})
|
||
//copier.CopyWithOption(&oaApply.Positions, req.ApprovalOA.Turnover.Positions, copier.Option{DeepCopy: true})
|
||
}
|
||
|
||
if req.ApprovalOA.OverTime != nil {
|
||
copier.CopyWithOption(&oaApply, req.ApprovalOA.OverTime, copier.Option{DeepCopy: true})
|
||
copier.CopyWithOption(&oaApply.ApplyTimes, req.ApprovalOA.OverTime.ApplyTimes, copier.Option{DeepCopy: true})
|
||
copier.CopyWithOption(&oaApply.ApprovalUsers, req.ApprovalOA.OverTime.ApprovalUsers, copier.Option{DeepCopy: true})
|
||
copier.CopyWithOption(&oaApply.CopyUsers, req.ApprovalOA.OverTime.CopyUsers, copier.Option{DeepCopy: true})
|
||
}
|
||
|
||
if req.ApprovalOA.Leave != nil {
|
||
copier.CopyWithOption(&oaApply, req.ApprovalOA.Leave, copier.Option{DeepCopy: true})
|
||
copier.CopyWithOption(&oaApply.ApplyTimes, req.ApprovalOA.Leave.ApplyTimes, copier.Option{DeepCopy: true})
|
||
copier.CopyWithOption(&oaApply.ApprovalUsers, req.ApprovalOA.Leave.ApprovalUsers, copier.Option{DeepCopy: true})
|
||
copier.CopyWithOption(&oaApply.CopyUsers, req.ApprovalOA.Leave.CopyUsers, copier.Option{DeepCopy: true})
|
||
}
|
||
|
||
if req.ApprovalOA.BusinessTrip != nil {
|
||
copier.CopyWithOption(&oaApply, req.ApprovalOA.BusinessTrip, copier.Option{DeepCopy: true})
|
||
copier.CopyWithOption(&oaApply.ApprovalUsers, req.ApprovalOA.BusinessTrip.ApprovalUsers, copier.Option{DeepCopy: true})
|
||
copier.CopyWithOption(&oaApply.CopyUsers, req.ApprovalOA.BusinessTrip.CopyUsers, copier.Option{DeepCopy: true})
|
||
}
|
||
|
||
if req.ApprovalOA.GoOut != nil {
|
||
copier.CopyWithOption(&oaApply, req.ApprovalOA.GoOut, copier.Option{DeepCopy: true})
|
||
copier.CopyWithOption(&oaApply.ApprovalUsers, req.ApprovalOA.GoOut.ApprovalUsers, copier.Option{DeepCopy: true})
|
||
copier.CopyWithOption(&oaApply.CopyUsers, req.ApprovalOA.GoOut.CopyUsers, copier.Option{DeepCopy: true})
|
||
}
|
||
|
||
oaApply.Remark = req.Reply
|
||
oaApply.ApplyType = req.Type
|
||
oaApply.ApprovalID = strconv.FormatUint(req.ID, 10)
|
||
oaApply.NowLevel = req.NowLevel
|
||
oaApply.NowUserId = req.NowUserId
|
||
oaApply.NowUserName = req.NowUserName
|
||
oaApply.RevokeReason = req.ApprovalOA.RevokeReason
|
||
oaApply.Domain = req.Domain
|
||
|
||
// 保存
|
||
oaApply.Status = int32(req.Status)
|
||
if save {
|
||
for i := 0; i < len(oaApply.ApprovalUsers); i++ {
|
||
oaApply.ApprovalUsers[i].Status = req.Status
|
||
}
|
||
}
|
||
|
||
// 更新 状态
|
||
if updateStatus {
|
||
for i := 0; i < len(oaApply.ApprovalUsers); i++ {
|
||
for j := 0; j < len(req.WorkFlows); j++ {
|
||
if oaApply.ApprovalUsers[i].ID == req.WorkFlows[j].UserID {
|
||
oaApply.ApprovalUsers[i].Status = req.WorkFlows[j].Status
|
||
oaApply.ApprovalUsers[i].Reply = req.WorkFlows[j].Reply
|
||
oaApply.ApprovalUsers[i].Tips = req.WorkFlows[j].Tips
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
if revoke {
|
||
fmt.Println("============== 打印 OA approvalUser ========== 开始 =========")
|
||
fmt.Printf("approvalUser is : %+v \n", oaApply.ApprovalUsers)
|
||
fmt.Println("============== 打印 OA approvalUser ========== 结束 =========")
|
||
//newApprovalUsers := make([]*oaApi.ApplyUser, 0)
|
||
for i := 0; i < len(oaApply.ApprovalUsers); i++ {
|
||
//newApprovalUsers = append(newApprovalUsers, &oaApi.ApplyUser{
|
||
// ID: req.ApprovalUsers[i].ID,
|
||
// Name: req.ApprovalUsers[i].Name,
|
||
// Status: e.ApprovalWorkStatusDoing,
|
||
//})
|
||
oaApply.ApprovalUsers[i].Status = e.ApprovalWorkStatusDoing
|
||
}
|
||
//oaApply.ApprovalUsers = newApprovalUsers
|
||
}
|
||
fmt.Println("============== 打印 OA 审批内容 ========== 开始 =========")
|
||
fmt.Printf("oa_apply info is : %+v \n", oaApply)
|
||
fmt.Println("============== 打印 OA 审批内容 ========== 结束 =========")
|
||
return oaApply
|
||
}
|
||
|
||
// 旧的 补卡规则
|
||
func CheckMakeUpApplyApprovalV1(req *approvalApi.CreateRequest) (err error) {
|
||
oaSettingReq := new(oaApi.OaSettingReq)
|
||
oaSettingReq.Keyword = e.MakeUpNum
|
||
oaSettingRes, err := service.GrpcOAImpl.QueryOaSetting(context.Background(), oaSettingReq)
|
||
if err != nil {
|
||
return err
|
||
}
|
||
|
||
if len(oaSettingRes.Data) != 1 {
|
||
return errors.New("查询OA补卡次数设置错误")
|
||
}
|
||
|
||
queryOaApplyReq := new(oaApi.ApplyRecordReq)
|
||
queryOaApplyReq.StaffUID = req.SubmitterID
|
||
queryOaApplyReq.ApplyType = []string{req.Type}
|
||
// 当前月 的 月初 和 月底
|
||
queryOaApplyReq.BeginTime = time.Now().Format("2006-01") + "-01" + " 00:00:00"
|
||
queryOaApplyReq.EndTime = time.Now().AddDate(0, 1, -1).Format("2006-01-02") + " 23:59:59"
|
||
queryOaApplyReq.ApplyStatus = []int32{e.ApprovalWorkStatusDoing, e.ApprovalWorkStatusOk}
|
||
|
||
queryOaApplyRes, err := service.GrpcOAImpl.QueryOaApply(context.Background(), queryOaApplyReq)
|
||
if err != nil {
|
||
return err
|
||
}
|
||
|
||
if oaSettingRes.Data[0].Value.Num > int32(queryOaApplyRes.Total) {
|
||
return nil
|
||
}
|
||
return errors.New("当月补卡次数已用完")
|
||
}
|
||
|
||
// 新的补卡规则
|
||
func CheckMakeUpApplyApproval(req *approvalApi.CreateRequest, userInfo login.Info) (err error) {
|
||
// 查询 考勤信息
|
||
workingTime, workingTimeErr := oa_logic.QueryWorkingTimeInUse(userInfo.PositionUsers, userInfo.ID)
|
||
if workingTimeErr != nil {
|
||
return workingTimeErr
|
||
}
|
||
|
||
logger.Infof("workingTime: %+v", workingTime)
|
||
fmt.Printf("workingTime: %+v", workingTime)
|
||
|
||
makeUpRule := new(oaApi.MakeUp)
|
||
for i := 0; i < len(workingTime.OaRules); i++ {
|
||
if workingTime.OaRules[i].Keyword == model.MakeUpRule && workingTime.OaRules[i].MakeUpRule != nil {
|
||
makeUpRule = workingTime.OaRules[i].MakeUpRule
|
||
}
|
||
}
|
||
|
||
if makeUpRule.Num == 0 {
|
||
return errors.New(e.ErrMissMakeUpRule)
|
||
}
|
||
|
||
// 获取当前考勤周期
|
||
//month := common.CurrentMonth()
|
||
|
||
// 根据补卡的时间 确定 考勤的周期
|
||
month := common.CheckAttendanceMonth(req.ApprovalOA.MakeUp.ApplyTimes[0].Date)
|
||
|
||
month = common.Add25ForMonth(month)
|
||
|
||
dates := holiday.SplitMonthV1(month, common.YYMMDD)
|
||
|
||
var queryMakeUpDates []string
|
||
|
||
// 暂时 使用 当前周期的 日期
|
||
queryMakeUpDates = append(queryMakeUpDates, dates...)
|
||
|
||
// 查询 oa审批
|
||
oaApplys, oaApplyErr := oa_logic.QueryOaApplyDates(userInfo.ID, queryMakeUpDates, []int32{e.ApprovalWorkStatusDoing, e.ApprovalWorkStatusOk}, []string{oa_model.TypeMakeUp})
|
||
if oaApplyErr != nil {
|
||
return oaApplyErr
|
||
}
|
||
|
||
if makeUpRule.Num > int64(len(oaApplys)) {
|
||
return nil
|
||
}
|
||
return errors.New("当月补卡次数已用完")
|
||
}
|
||
|
||
// 新的加班规则
|
||
func CheckOverTimeApplyApproval(req *approvalApi.CreateRequest, userInfo login.Info) (err error) {
|
||
// 查询 考勤信息
|
||
workingTime, workingTimeErr := oa_logic.QueryWorkingTimeInUse(userInfo.PositionUsers, userInfo.ID)
|
||
if workingTimeErr != nil {
|
||
return workingTimeErr
|
||
}
|
||
|
||
logger.Infof("workingTime: %+v", workingTime)
|
||
fmt.Printf("workingTime: %+v", workingTime)
|
||
|
||
overtimeRule := new(oaApi.Overtime)
|
||
for i := 0; i < len(workingTime.OaRules); i++ {
|
||
if workingTime.OaRules[i].Keyword == model.OvertimeRule && workingTime.OaRules[i].OvertimeRule != nil {
|
||
overtimeRule = workingTime.OaRules[i].OvertimeRule
|
||
}
|
||
}
|
||
|
||
// 获取当前考勤周期
|
||
month := common.CurrentMonth()
|
||
|
||
currentMonth := common.Add25ForMonth(month)
|
||
|
||
dates := holiday.SplitMonthV1(currentMonth, common.YYMMDD)
|
||
|
||
// 添加 上个考勤周期
|
||
if dates[0] == common.CurrentDateStr() {
|
||
addDate := common.PreDate().Format(common.YYMMDD)
|
||
if !common.IsInArray(addDate, dates) {
|
||
dates = append([]string{addDate}, dates...)
|
||
}
|
||
}
|
||
|
||
dateMap := make(map[string]string)
|
||
|
||
for i := 0; i < len(dates); i++ {
|
||
dateMap[dates[i]] = dates[i]
|
||
}
|
||
|
||
fmt.Println("========= CheckOverTimeApplyApproval SplitMonthV1 currentMonth ========================= ")
|
||
fmt.Printf("=== %+v\n", dates)
|
||
fmt.Println("========= CheckOverTimeApplyApproval SplitMonthV1 currentMonth ========================= ")
|
||
|
||
if overtimeRule.TimeLimit == model.TimeLimitMonth {
|
||
if dateMap[req.ApprovalOA.OverTime.ApplyTimes[0].Date] == "" && dateMap[req.ApprovalOA.OverTime.ApplyTimes[1].Date] == "" {
|
||
return errors.New("加班时间不在本次考勤周期内")
|
||
}
|
||
}
|
||
|
||
if overtimeRule.TimeLimit == model.TimeLimitYesterday {
|
||
if common.ConvertApplyTimeToTime(req.ApprovalOA.OverTime.ApplyTimes[0].Date, req.ApprovalOA.OverTime.ApplyTimes[0].Hour).Before(common.PreDateFour()) {
|
||
return errors.New("加班开始时间不得早于昨天凌晨4点")
|
||
}
|
||
}
|
||
|
||
return nil
|
||
}
|
||
|
||
func CheckLeaveApproval(req *approvalApi.CreateRequest, userInfo login.Info) (err error) {
|
||
if len(req.ApprovalOA.Leave.ApplyTimes) != 2 {
|
||
return errors.New(e.ErrApplyTime)
|
||
}
|
||
|
||
use, forMoney, canDayOffErr := oa_logic.QueryCanDayOffUserWithWorkTimeTemplate(userInfo)
|
||
if canDayOffErr != nil {
|
||
return canDayOffErr
|
||
}
|
||
|
||
checkLeaveReq := new(oa_model.CheckLeave)
|
||
checkLeaveReq.ApplyType = req.Type
|
||
checkLeaveReq.StartTime = req.ApprovalOA.Leave.ApplyTimes[0].Date
|
||
checkLeaveReq.M = req.ApprovalOA.Leave.ApplyTimes[0].M
|
||
checkLeaveReq.Children = req.ApprovalOA.Leave.Children
|
||
checkLeaveReq.Month = req.ApprovalOA.Leave.Month
|
||
checkLeaveReq.Dystocia = req.ApprovalOA.Leave.Dystocia
|
||
res, err := service.CheckLeaveHandle(checkLeaveReq, userInfo, forMoney)
|
||
if err != nil {
|
||
return err
|
||
}
|
||
fmt.Println("========= checkLeaveReq 1 ========================= ")
|
||
fmt.Printf("=== %+v\n", checkLeaveReq)
|
||
fmt.Println("========= checkLeaveReq 2 ========================= ")
|
||
|
||
fmt.Println("========= CheckLeaveHandle 1 ========================= ")
|
||
fmt.Printf("=== %+v\n", res)
|
||
fmt.Println("========= CheckLeaveHandle 2 ========================= ")
|
||
|
||
if res.OtherLeave.EndTime != "" {
|
||
req.ApprovalOA.Leave.ApplyTimes[1].Date = res.OtherLeave.EndTime
|
||
req.ApprovalOA.Leave.ApplyTimes[1].M = res.OtherLeave.EndM
|
||
if req.Type == oa_model.TypeMatingCheckLeave {
|
||
req.ApprovalOA.Leave.Days = 1 // 孕检假 默认是一次一天
|
||
}
|
||
}
|
||
|
||
if req.Type == oa_model.TypeAnnualLeave || req.Type == oa_model.TypeParentalLeave || req.Type == oa_model.TypeNursingLeave {
|
||
if strings.Split(req.ApprovalOA.Leave.ApplyTimes[0].Date, "-")[0] != time.Now().Format("2006") || strings.Split(req.ApprovalOA.Leave.ApplyTimes[1].Date, "-")[0] != time.Now().Format("2006") {
|
||
return errors.New(e.ErrNotInCurrentYear)
|
||
}
|
||
}
|
||
|
||
if req.Type == oa_model.TypeNursingLeave || req.Type == oa_model.TypeParentalLeave || req.Type == oa_model.TypeMatingCheckLeave {
|
||
if req.ApprovalOA.Leave.Days > res.CommonLeave.Balance {
|
||
return errors.New(e.ErrNoBalance)
|
||
}
|
||
}
|
||
|
||
//年假新处理
|
||
if req.Type == oa_model.TypeAnnualLeave {
|
||
|
||
date := req.ApprovalOA.Leave.ApplyTimes[0].Date
|
||
year, err1 := strconv.ParseInt(date[0:4], 10, 32)
|
||
if err1 != nil {
|
||
return err1
|
||
}
|
||
balanceList, err2 := service.GrpcOAImpl.GetLeaveBalanceList(context.Background(), &oaApi.LeaveBalanceListReq{
|
||
Page: 1,
|
||
PageSize: 10,
|
||
StaffUID: userInfo.ID,
|
||
Year: int32(year),
|
||
})
|
||
if err2 != nil {
|
||
return err2
|
||
}
|
||
|
||
fmt.Println("===========================新假期余额=======================================")
|
||
fmt.Println(year)
|
||
fmt.Println(balanceList)
|
||
|
||
if len(balanceList.Data) < 1 {
|
||
return errors.New("未查到假期余额")
|
||
}
|
||
|
||
if req.ApprovalOA.Leave.Days > balanceList.Data[0].AnnualLeave {
|
||
return errors.New(e.ErrNoBalance)
|
||
}
|
||
|
||
}
|
||
|
||
if req.Type == oa_model.TypeBreastFeedingLeave {
|
||
if req.ApprovalOA.Leave.Hours > res.CommonLeave.Balance {
|
||
return errors.New(e.ErrHourNoBalance)
|
||
}
|
||
}
|
||
|
||
if req.Type == oa_model.TypeDayOff {
|
||
//调休时间限制:上月的26号到本月的25号
|
||
fmt.Println("====================================上月的26号到本月的25号=====================================================")
|
||
fmt.Println(isDateInRange(req.ApprovalOA.Leave.ApplyTimes[0].Date))
|
||
fmt.Println(isDateInRange(req.ApprovalOA.Leave.ApplyTimes[1].Date))
|
||
if !isDateInRange(req.ApprovalOA.Leave.ApplyTimes[0].Date) {
|
||
return errors.New(e.ErrNotInCurrentMonth)
|
||
}
|
||
if !isDateInRange(req.ApprovalOA.Leave.ApplyTimes[1].Date) {
|
||
return errors.New(e.ErrNotInCurrentMonth)
|
||
}
|
||
|
||
//if strings.Join(strings.Split(req.ApprovalOA.Leave.ApplyTimes[0].Date, "-")[:2], "-") != time.Now().Format("2006-01") || strings.Join(strings.Split(req.ApprovalOA.Leave.ApplyTimes[1].Date, "-")[:2], "-") != time.Now().Format("2006-01") {
|
||
// return errors.New(e.ErrNotInCurrentMonth)
|
||
//}
|
||
// 特殊设置的用户 可以无加班调休
|
||
users, userErr := QueryCanDayOffUser()
|
||
if userErr != nil {
|
||
return userErr
|
||
}
|
||
|
||
if forMoney {
|
||
if req.ApprovalOA.Leave.Hours > res.CommonLeave.Balance {
|
||
if users[req.SubmitterName] == req.SubmitterID || !use {
|
||
return nil
|
||
} else {
|
||
return errors.New(e.ErrNoBalance)
|
||
}
|
||
}
|
||
} else {
|
||
balance, CheckDayOffBalanceErr := service.CheckDayOffBalance(userInfo.ID)
|
||
if CheckDayOffBalanceErr != nil {
|
||
return CheckDayOffBalanceErr
|
||
}
|
||
if req.ApprovalOA.Leave.Hours > balance {
|
||
return errors.New(e.ErrNoBalance)
|
||
}
|
||
}
|
||
|
||
}
|
||
|
||
if req.ApprovalOA.Leave.Days <= 0 && req.ApprovalOA.Leave.Hours <= 0 {
|
||
return errors.New(e.ErrNoBalance)
|
||
}
|
||
|
||
return nil
|
||
}
|
||
|
||
func CheckOutWorkTime(req *approvalApi.CreateRequest) (err error) {
|
||
outWorkStartTime, _ := time.ParseInLocation("2006-01-02 15:04:05", req.ApprovalOA.OutWork.ApplyTimes[0].Date+" 00:00:00", time.Local)
|
||
nowTime, _ := time.ParseInLocation("2006-01-02 15:04:05", time.Now().Format("2006-01-02")+" 00:00:00", time.Local)
|
||
if !outWorkStartTime.Before(nowTime) {
|
||
return nil
|
||
}
|
||
return errors.New("当前外勤申请时间无效")
|
||
}
|
||
|
||
func CheckLeaveApprovalV1(req *approvalApi.CreateRequest) (err error) {
|
||
leaveApplyRecordReq := new(oaApi.LeaveApplyInfoReq)
|
||
leaveApplyRecordReq.StaffUID = req.SubmitterID
|
||
leaveApplyRecordReq.LeaveApplyType = e.CheckLeaveApplyMap[req.Type]
|
||
leaveApplyRecordReq.IsOver = e.IsNotOver
|
||
leaveApplyRecordRes, err := service.GrpcOAImpl.QueryLeaveApplyInfo(context.Background(), leaveApplyRecordReq)
|
||
if err != nil {
|
||
fmt.Println("=========== approval_oa QueryLeaveApplyInfo ====== start =====")
|
||
fmt.Println(err.Error())
|
||
fmt.Println("=========== approval_oa QueryLeaveApplyInfo ====== end =====")
|
||
return errors.New("未查询到相关假期余额申请")
|
||
}
|
||
|
||
if req.ApprovalOA.Leave.Days > leaveApplyRecordRes.LeaveApply.LeaveBalance {
|
||
return errors.New("假期余额不足")
|
||
}
|
||
|
||
return nil
|
||
}
|
||
|
||
func CheckLeaveApply(req *approvalApi.CreateRequest, userInfo login.Info) (err error) {
|
||
//leaveApplyRecordReq := new(oaApi.LeaveApplyInfoReq)
|
||
//leaveApplyRecordReq.StaffUID = req.SubmitterID
|
||
//leaveApplyRecordReq.LeaveApplyType = req.Type
|
||
//leaveApplyRecordReq.IsOver = e.IsNotOver
|
||
//leaveApplyRecordReq.UsefulTime = time.Now().Format("2006")
|
||
//leaveApplyRecordRes, err := service.GrpcOAImpl.QueryLeaveApplyInfo(context.Background(), leaveApplyRecordReq)
|
||
//if err != nil && err.Error() != e.ErrNotHaveBalance {
|
||
// fmt.Println("=========== approval_oa QueryLeaveApplyInfo ====== start =====")
|
||
// fmt.Println(err.Error())
|
||
// fmt.Println("=========== approval_oa QueryLeaveApplyInfo ====== end =====")
|
||
// //return errors.New("未查询到相关假期余额申请")
|
||
// return errors.New(e.ErrNotHaveBalance)
|
||
//}
|
||
//
|
||
//if leaveApplyRecordRes.LeaveApply != nil {
|
||
// return errors.New(e.ErrHaveBalanceApply)
|
||
//}
|
||
|
||
reqList := &approvalApi.ListRequest{}
|
||
reqList.Domain = req.Domain
|
||
reqList.Type = req.Type
|
||
reqList.UserID = userInfo.ID
|
||
reqList.Status = 1
|
||
res1, err := service.ApprovalProvider.MySubmit(context.Background(), reqList)
|
||
if err != nil {
|
||
return errors.New(e.ErrNotHaveBalance)
|
||
}
|
||
|
||
if len(res1.Data) > 0 {
|
||
for i := 0; i < len(res1.Data); i++ {
|
||
if strings.Split(strings.Split(res1.Data[i].ApprovalOA.LeaveApply.ActionTime, " ")[0], "-")[0] == time.Now().Format("2006") {
|
||
return errors.New(e.ErrHaveBalanceApply)
|
||
}
|
||
}
|
||
}
|
||
|
||
reqList.Status = 2
|
||
res2, err := service.ApprovalProvider.MySubmit(context.Background(), reqList)
|
||
if err != nil {
|
||
return errors.New(e.ErrNotHaveBalance)
|
||
}
|
||
|
||
for i := 0; i < len(res2.Data); i++ {
|
||
if strings.Split(strings.Split(res2.Data[i].ApprovalOA.LeaveApply.ActionTime, " ")[0], "-")[0] == time.Now().Format("2006") {
|
||
return errors.New(e.ErrHaveBalanceApply)
|
||
}
|
||
}
|
||
|
||
reqList.Status = 6
|
||
res3, err := service.ApprovalProvider.MySubmit(context.Background(), reqList)
|
||
if err != nil {
|
||
return errors.New(e.ErrNotHaveBalance)
|
||
}
|
||
|
||
for i := 0; i < len(res3.Data); i++ {
|
||
if strings.Split(strings.Split(res3.Data[i].ApprovalOA.LeaveApply.ActionTime, " ")[0], "-")[0] == time.Now().Format("2006") {
|
||
return errors.New(e.ErrHaveBalanceApply)
|
||
}
|
||
}
|
||
|
||
return nil
|
||
}
|
||
|
||
func CheckLeaveTime(req *approvalApi.CreateRequest, userInfo login.Info) (err error) {
|
||
queryOaApplyReq := new(oaApi.ApplyRecordReq)
|
||
queryOaApplyReq.StaffUID = req.SubmitterID
|
||
queryOaApplyReq.Page = 1
|
||
queryOaApplyReq.PageSize = 9999
|
||
if req.ApprovalOA.Leave != nil {
|
||
queryOaApplyReq.BeginTime = req.ApprovalOA.Leave.ApplyTimes[0].Date
|
||
queryOaApplyReq.EndTime = req.ApprovalOA.Leave.ApplyTimes[len(req.ApprovalOA.Leave.ApplyTimes)-1].Date
|
||
} else if req.ApprovalOA.OverTime != nil {
|
||
queryOaApplyReq.BeginTime = req.ApprovalOA.OverTime.ApplyTimes[0].Date
|
||
queryOaApplyReq.EndTime = req.ApprovalOA.OverTime.ApplyTimes[len(req.ApprovalOA.OverTime.ApplyTimes)-1].Date
|
||
// 如果是加班 则 剔除 外勤申请
|
||
queryOaApplyReq.ApplyType = append(queryOaApplyReq.ApplyType, common.WithOutOutworkApply...)
|
||
} else if req.ApprovalOA.OutWork != nil {
|
||
queryOaApplyReq.BeginTime = req.ApprovalOA.OutWork.ApplyTimes[0].Date
|
||
queryOaApplyReq.EndTime = req.ApprovalOA.OutWork.ApplyTimes[len(req.ApprovalOA.OutWork.ApplyTimes)-1].Date
|
||
// 如果是外勤申请 则 剔除 加班
|
||
queryOaApplyReq.ApplyType = append(queryOaApplyReq.ApplyType, common.WithOutOvertimeApply...)
|
||
} else if req.ApprovalOA.GoOut != nil { //外出
|
||
queryOaApplyReq.BeginTime = req.ApprovalOA.GoOut.ApplyTimes[0].Date
|
||
queryOaApplyReq.EndTime = req.ApprovalOA.GoOut.ApplyTimes[len(req.ApprovalOA.GoOut.ApplyTimes)-1].Date
|
||
queryOaApplyReq.ApplyType = append(queryOaApplyReq.ApplyType, common.WithGoOutApply...)
|
||
}
|
||
|
||
queryOaApplyReq.ApplyStatus = []int32{e.ApprovalWorkStatusDoing, e.ApprovalWorkStatusOk, e.ApprovalWorkStatusRevoking}
|
||
|
||
queryOaApplyRes, err := service.GrpcOAImpl.QueryOaApply(context.Background(), queryOaApplyReq)
|
||
if err != nil {
|
||
return err
|
||
}
|
||
// 查询 考勤信息
|
||
workingTime, workingTimeErr := oa_logic.QueryWorkingTimeInUse(userInfo.PositionUsers, userInfo.ID)
|
||
if workingTimeErr != nil {
|
||
return workingTimeErr
|
||
}
|
||
// 当前的申请
|
||
applyStartTimeStr := ""
|
||
applyEndTimeStr := ""
|
||
if req.ApprovalOA.Leave != nil {
|
||
applyTimes := make([]oa_model.ApplyTime, 0)
|
||
_ = copier.CopyWithOption(&applyTimes, req.ApprovalOA.Leave.ApplyTimes, copier.Option{DeepCopy: true})
|
||
applyStartTimeStr, applyEndTimeStr = oa_logic.ConvertApplyTime(applyTimes, workingTime.Time)
|
||
} else if req.ApprovalOA.OverTime != nil {
|
||
applyTimes := make([]oa_model.ApplyTime, 0)
|
||
_ = copier.CopyWithOption(&applyTimes, req.ApprovalOA.OverTime.ApplyTimes, copier.Option{DeepCopy: true})
|
||
applyStartTimeStr, applyEndTimeStr = oa_logic.ConvertApplyTime(applyTimes, workingTime.Time)
|
||
} else if req.ApprovalOA.OutWork != nil {
|
||
applyTimes := make([]oa_model.ApplyTime, 0)
|
||
_ = copier.CopyWithOption(&applyTimes, req.ApprovalOA.OutWork.ApplyTimes, copier.Option{DeepCopy: true})
|
||
applyStartTimeStr, applyEndTimeStr = oa_logic.ConvertApplyTime(applyTimes, workingTime.Time)
|
||
} else if req.ApprovalOA.GoOut != nil {
|
||
applyTimes := make([]oa_model.ApplyTime, 0)
|
||
_ = copier.CopyWithOption(&applyTimes, req.ApprovalOA.GoOut.ApplyTimes, copier.Option{DeepCopy: true})
|
||
applyStartTimeStr, applyEndTimeStr = oa_logic.ConvertApplyTime(applyTimes, workingTime.Time)
|
||
}
|
||
|
||
applyStartTime, _ := time.ParseInLocation("2006-01-02 15:04:05", applyStartTimeStr, time.Local)
|
||
applyEndTime, _ := time.ParseInLocation("2006-01-02 15:04:05", applyEndTimeStr, time.Local)
|
||
|
||
//fmt.Println("======== applyStartTime ,applyEndTime 1 =================")
|
||
//fmt.Println("======= applyStartTime", applyStartTime)
|
||
//fmt.Println("======= applyEndTime", applyEndTime)
|
||
//fmt.Println("======== applyStartTime ,applyEndTime 1 =================")
|
||
// 历史的申请
|
||
for i := 0; i < len(queryOaApplyRes.Data); i++ {
|
||
hadApplyStartTimeStr := ""
|
||
hadApplyEndTimeStr := ""
|
||
|
||
if queryOaApplyRes.Data[i] != nil {
|
||
applyTimes := make([]oa_model.ApplyTime, 0)
|
||
//如果是出差,循环走流程
|
||
if len(queryOaApplyRes.Data[i].ItineraryList) > 0 {
|
||
for _, itinerary := range queryOaApplyRes.Data[i].ItineraryList {
|
||
applyTimes2 := make([]oa_model.ApplyTime, 0)
|
||
_ = copier.CopyWithOption(&applyTimes2, itinerary.ApplyTimes, copier.Option{DeepCopy: true})
|
||
hadApplyStartTimeStr, hadApplyEndTimeStr = oa_logic.ConvertApplyTime(applyTimes2, workingTime.Time)
|
||
hadApplyStartTime, _ := time.ParseInLocation("2006-01-02 15:04:05", hadApplyStartTimeStr, time.Local)
|
||
hadApplyEndTime, _ := time.ParseInLocation("2006-01-02 15:04:05", hadApplyEndTimeStr, time.Local)
|
||
if (applyStartTime.After(hadApplyStartTime) && applyStartTime.Before(hadApplyEndTime)) || (applyEndTime.After(hadApplyStartTime) && applyEndTime.Before(hadApplyEndTime)) {
|
||
return errors.New(e.ErrSelectTimeRepeat)
|
||
}
|
||
|
||
// 当前申请时间 不包含 历史申请的时间段
|
||
/*if (!hadApplyStartTime.Before(applyStartTime) && !hadApplyStartTime.After(applyEndTime)) || (!hadApplyEndTime.Before(applyStartTime) && !hadApplyEndTime.After(applyEndTime)) {
|
||
return errors.New(e.ERR_SELECT_TIME_REPEAT)
|
||
}*/
|
||
if (hadApplyStartTime.After(applyStartTime) && hadApplyStartTime.Before(applyEndTime)) || (hadApplyEndTime.After(applyStartTime) && hadApplyEndTime.Before(applyEndTime)) {
|
||
return errors.New(e.ErrSelectTimeRepeat)
|
||
}
|
||
|
||
if applyStartTime.Equal(hadApplyStartTime) || applyEndTime.Equal(hadApplyEndTime) {
|
||
return errors.New(e.ErrSelectTimeRepeat)
|
||
}
|
||
}
|
||
return
|
||
} else {
|
||
_ = copier.CopyWithOption(&applyTimes, queryOaApplyRes.Data[i].ApplyTimes, copier.Option{DeepCopy: true})
|
||
hadApplyStartTimeStr, hadApplyEndTimeStr = oa_logic.ConvertApplyTime(applyTimes, workingTime.Time)
|
||
}
|
||
|
||
} else if req.ApprovalOA.OverTime != nil {
|
||
applyTimes := make([]oa_model.ApplyTime, 0)
|
||
_ = copier.CopyWithOption(&applyTimes, req.ApprovalOA.OverTime.ApplyTimes, copier.Option{DeepCopy: true})
|
||
hadApplyStartTimeStr, hadApplyEndTimeStr = oa_logic.ConvertApplyTime(applyTimes, workingTime.Time)
|
||
} else if req.ApprovalOA.OutWork != nil {
|
||
applyTimes := make([]oa_model.ApplyTime, 0)
|
||
_ = copier.CopyWithOption(&applyTimes, req.ApprovalOA.OutWork.ApplyTimes, copier.Option{DeepCopy: true})
|
||
hadApplyStartTimeStr, hadApplyEndTimeStr = oa_logic.ConvertApplyTime(applyTimes, workingTime.Time)
|
||
}
|
||
hadApplyStartTime, _ := time.ParseInLocation("2006-01-02 15:04:05", hadApplyStartTimeStr, time.Local)
|
||
hadApplyEndTime, _ := time.ParseInLocation("2006-01-02 15:04:05", hadApplyEndTimeStr, time.Local)
|
||
|
||
//fmt.Println("======== hadApplyStartTime ,hadApplyEndTime 2 =================")
|
||
//fmt.Println("======= hadApplyStartTime", hadApplyStartTime)
|
||
//fmt.Println("======= hadApplyEndTime", hadApplyEndTime)
|
||
//fmt.Println("======== hadApplyStartTime ,hadApplyEndTime 2 =================")
|
||
// 当前申请时间 不在 历史申请的时间段内
|
||
/*if (!applyStartTime.Before(hadApplyStartTime) && !applyStartTime.After(hadApplyEndTime)) || (!applyEndTime.Before(hadApplyStartTime) && !applyEndTime.After(hadApplyEndTime)) {
|
||
return errors.New(e.ERR_SELECT_TIME_REPEAT)
|
||
}*/
|
||
if (applyStartTime.After(hadApplyStartTime) && applyStartTime.Before(hadApplyEndTime)) || (applyEndTime.After(hadApplyStartTime) && applyEndTime.Before(hadApplyEndTime)) {
|
||
return errors.New(e.ErrSelectTimeRepeat)
|
||
}
|
||
|
||
// 当前申请时间 不包含 历史申请的时间段
|
||
/*if (!hadApplyStartTime.Before(applyStartTime) && !hadApplyStartTime.After(applyEndTime)) || (!hadApplyEndTime.Before(applyStartTime) && !hadApplyEndTime.After(applyEndTime)) {
|
||
return errors.New(e.ERR_SELECT_TIME_REPEAT)
|
||
}*/
|
||
if (hadApplyStartTime.After(applyStartTime) && hadApplyStartTime.Before(applyEndTime)) || (hadApplyEndTime.After(applyStartTime) && hadApplyEndTime.Before(applyEndTime)) {
|
||
return errors.New(e.ErrSelectTimeRepeat)
|
||
}
|
||
|
||
if applyStartTime.Equal(hadApplyStartTime) || applyEndTime.Equal(hadApplyEndTime) {
|
||
return errors.New(e.ErrSelectTimeRepeat)
|
||
}
|
||
|
||
}
|
||
|
||
return
|
||
}
|
||
|
||
// CheckBusinessTripTime 出差专用
|
||
func CheckBusinessTripTime(req *approvalApi.CreateRequest, userInfo login.Info) (err error) {
|
||
queryOaApplyReq := new(oaApi.ApplyRecordReq)
|
||
queryOaApplyReq.StaffUID = req.SubmitterID
|
||
queryOaApplyReq.Page = 1
|
||
queryOaApplyReq.PageSize = 9999
|
||
queryOaApplyReq.ApplyStatus = []int32{e.ApprovalWorkStatusDoing, e.ApprovalWorkStatusOk, e.ApprovalWorkStatusRevoking}
|
||
queryOaApplyReq.ApplyType = append(queryOaApplyReq.ApplyType, common.WithBusinessTripApply...)
|
||
if req.ApprovalOA.BusinessTrip != nil {
|
||
//每个行程都得走一遍检查流程
|
||
for _, itinerary := range req.ApprovalOA.BusinessTrip.ItineraryList {
|
||
queryOaApplyReq.BeginTime = itinerary.ApplyTimes[0].Date
|
||
queryOaApplyReq.EndTime = itinerary.ApplyTimes[len(itinerary.ApplyTimes)-1].Date
|
||
queryOaApplyRes, err := service.GrpcOAImpl.QueryOaApply(context.Background(), queryOaApplyReq)
|
||
if err != nil {
|
||
return err
|
||
}
|
||
|
||
// 查询 考勤信息
|
||
workingTime, workingTimeErr := oa_logic.QueryWorkingTimeInUse(userInfo.PositionUsers, userInfo.ID)
|
||
if workingTimeErr != nil {
|
||
return workingTimeErr
|
||
}
|
||
// 当前的申请
|
||
applyStartTimeStr := ""
|
||
applyEndTimeStr := ""
|
||
applyTimes := make([]oa_model.ApplyTime, 0)
|
||
_ = copier.CopyWithOption(&applyTimes, itinerary.ApplyTimes, copier.Option{DeepCopy: true})
|
||
applyStartTimeStr, applyEndTimeStr = oa_logic.ConvertApplyTime(applyTimes, workingTime.Time)
|
||
|
||
applyStartTime, _ := time.ParseInLocation("2006-01-02 15:04:05", applyStartTimeStr, time.Local)
|
||
applyEndTime, _ := time.ParseInLocation("2006-01-02 15:04:05", applyEndTimeStr, time.Local)
|
||
|
||
// 历史的申请
|
||
if len(queryOaApplyRes.Data) > 0 {
|
||
for i := 0; i < len(queryOaApplyRes.Data); i++ {
|
||
hadApplyStartTimeStr := ""
|
||
hadApplyEndTimeStr := ""
|
||
applyTimes2 := make([]oa_model.ApplyTime, 0)
|
||
_ = copier.CopyWithOption(&applyTimes2, queryOaApplyRes.Data[i].ApplyTimes, copier.Option{DeepCopy: true})
|
||
hadApplyStartTimeStr, hadApplyEndTimeStr = oa_logic.ConvertApplyTime(applyTimes2, workingTime.Time)
|
||
hadApplyStartTime, _ := time.ParseInLocation("2006-01-02 15:04:05", hadApplyStartTimeStr, time.Local)
|
||
hadApplyEndTime, _ := time.ParseInLocation("2006-01-02 15:04:05", hadApplyEndTimeStr, time.Local)
|
||
|
||
if (applyStartTime.After(hadApplyStartTime) && applyStartTime.Before(hadApplyEndTime)) || (applyEndTime.After(hadApplyStartTime) && applyEndTime.Before(hadApplyEndTime)) {
|
||
return errors.New(e.ErrSelectTimeRepeat)
|
||
}
|
||
|
||
if (hadApplyStartTime.After(applyStartTime) && hadApplyStartTime.Before(applyEndTime)) || (hadApplyEndTime.After(applyStartTime) && hadApplyEndTime.Before(applyEndTime)) {
|
||
return errors.New(e.ErrSelectTimeRepeat)
|
||
}
|
||
|
||
if applyStartTime.Equal(hadApplyStartTime) || applyEndTime.Equal(hadApplyEndTime) {
|
||
return errors.New(e.ErrSelectTimeRepeat)
|
||
}
|
||
|
||
}
|
||
}
|
||
|
||
}
|
||
|
||
}
|
||
|
||
return err
|
||
}
|
||
|
||
func isDateInRange(dateStr string) bool {
|
||
t, _ := time.Parse("2006-01-02", dateStr)
|
||
now := time.Now().Format("2006-01-02")
|
||
t1, _ := time.Parse("2006-01-02", now)
|
||
|
||
//上月25号
|
||
lastMonth25 := time.Date(t1.Year(), t1.Month()-1, 25, 0, 0, 0, 0, t1.Location())
|
||
//本月25号
|
||
thisMonth25 := time.Date(t1.Year(), t1.Month(), 25, 0, 0, 0, 0, t1.Location())
|
||
//下月26号
|
||
nextMonth26 := time.Date(t1.Year(), t1.Month()+1, 26, 0, 0, 0, 0, t1.Location())
|
||
|
||
//如果传入时间在本月25号之后,传入时间就得在下月26号之前
|
||
if t.After(thisMonth25) {
|
||
return t.Before(nextMonth26)
|
||
} else {
|
||
//如果不在本月25号之后,则传入时间必须在上月25号之后
|
||
return t.After(lastMonth25)
|
||
}
|
||
}
|
||
|
||
func CheckLeaveApplyIsUse(req *approvalApi.CreateRequest) (err error) {
|
||
queryOaApplyReq := new(oaApi.ApplyRecordReq)
|
||
queryOaApplyReq.StaffUID = req.SubmitterID
|
||
queryOaApplyReq.ApplyType = []string{oa_model.LeaveApplyOaApplyMap[req.Type]}
|
||
// 当前月 的 年初 和 年底
|
||
queryOaApplyReq.BeginTime = time.Now().Format("2006") + "-01-01" + " 00:00:00"
|
||
queryOaApplyReq.EndTime = time.Now().Format("2006") + "-12-31" + " 23:59:59"
|
||
queryOaApplyReq.ApplyStatus = []int32{e.ApprovalWorkStatusDoing, e.ApprovalWorkStatusOk, e.ApprovalWorkStatusRevoking}
|
||
|
||
queryOaApplyRes, err := service.GrpcOAImpl.QueryOaApply(context.Background(), queryOaApplyReq)
|
||
if err != nil {
|
||
return err
|
||
}
|
||
if queryOaApplyRes.Total > 0 {
|
||
return errors.New(e.ErrIsUsed)
|
||
}
|
||
return nil
|
||
}
|
||
|
||
const (
|
||
CanDayOff = "canDayOff" // 无需加班,亦可调休
|
||
)
|
||
|
||
func QueryCanDayOffUser() (users map[string]uint64, err error) {
|
||
users = make(map[string]uint64, 0)
|
||
req := &oaApi.OaSettingReq{
|
||
Keyword: CanDayOff,
|
||
}
|
||
res, err := service.GrpcOAImpl.QueryOaSetting(context.Background(), req)
|
||
if err != nil {
|
||
return nil, errors.New(e.ErrQueryOaSetting)
|
||
}
|
||
|
||
if len(res.Data) > 0 {
|
||
for i := 0; i < len(res.Data); i++ {
|
||
if res.Data[i].Value.CanDayOff != nil {
|
||
for j := 0; j < len(res.Data[i].Value.CanDayOff); j++ {
|
||
users[res.Data[i].Value.CanDayOff[j].Name] = res.Data[i].Value.CanDayOff[j].ID
|
||
}
|
||
}
|
||
}
|
||
}
|
||
return users, nil
|
||
}
|
||
|
||
/*// 使用考勤组设置的 是否用于加班调休
|
||
func QueryCanDayOffUserWithWorkTimeTemplate(userInfo login.Info) (use bool, forMoney bool, err error) {
|
||
canDayOff := false
|
||
forMoney = false
|
||
// 查询 考勤信息
|
||
workingTime, workingTimeErr := oa_logic.QueryWorkingTimeInUse(userInfo.PositionUsers, userInfo.ID)
|
||
if workingTimeErr != nil {
|
||
canDayOff = true
|
||
return canDayOff, forMoney, workingTimeErr
|
||
}
|
||
logger.Infof("workingTime: %+v", workingTime)
|
||
fmt.Printf("workingTime: %+v", workingTime)
|
||
|
||
if len(workingTime.OaRules) > 0 {
|
||
for i := 0; i < len(workingTime.OaRules); i++ {
|
||
if workingTime.OaRules[i].Keyword == model.OvertimeRule && workingTime.OaRules[i].OvertimeRule != nil {
|
||
if workingTime.OaRules[i].OvertimeRule.ForDayOff == model.ForDayOffYes {
|
||
canDayOff = true
|
||
}
|
||
if workingTime.OaRules[i].OvertimeRule.ForDayOff == model.ForDayOffYes && workingTime.OaRules[i].OvertimeRule.ForMoney == model.ForMoneyYes {
|
||
forMoney = true
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
return canDayOff, forMoney, nil
|
||
}
|
||
*/
|