3371 lines
111 KiB
Go
3371 lines
111 KiB
Go
package approval
|
||
|
||
import (
|
||
"context"
|
||
"dubbo.apache.org/dubbo-go/v3/common/logger"
|
||
"errors"
|
||
"fmt"
|
||
"github.com/360EntSecGroup-Skylar/excelize"
|
||
"github.com/fonchain_enterprise/fonchain-main/api/account"
|
||
api "github.com/fonchain_enterprise/fonchain-main/api/approval"
|
||
artShowApi "github.com/fonchain_enterprise/fonchain-main/api/artShow"
|
||
"github.com/fonchain_enterprise/fonchain-main/api/artistinfoArtshow"
|
||
"github.com/fonchain_enterprise/fonchain-main/api/department"
|
||
oaApi "github.com/fonchain_enterprise/fonchain-main/api/oa"
|
||
"github.com/fonchain_enterprise/fonchain-main/api/position"
|
||
"github.com/fonchain_enterprise/fonchain-main/pkg/cache"
|
||
"github.com/fonchain_enterprise/fonchain-main/pkg/config"
|
||
"github.com/fonchain_enterprise/fonchain-main/pkg/e"
|
||
"github.com/fonchain_enterprise/fonchain-main/pkg/model"
|
||
"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/model/vo"
|
||
"github.com/fonchain_enterprise/fonchain-main/pkg/serializer"
|
||
"github.com/fonchain_enterprise/fonchain-main/pkg/service"
|
||
m "github.com/fonchain_enterprise/fonchain-main/pkg/service/approval/model"
|
||
"github.com/fonchain_enterprise/fonchain-main/pkg/service/es_service/approval/logic"
|
||
"github.com/getsentry/sentry-go"
|
||
"github.com/gin-gonic/gin"
|
||
"github.com/gin-gonic/gin/binding"
|
||
"github.com/jinzhu/copier"
|
||
"go.uber.org/zap"
|
||
"sort"
|
||
"strconv"
|
||
"strings"
|
||
"time"
|
||
)
|
||
|
||
func CreateV2(c *gin.Context) {
|
||
var req api.CreateRequest
|
||
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
|
||
service.Error(c, e.Error, errors.New("参数获取错误"))
|
||
return
|
||
}
|
||
|
||
userInfo := login.GetUserInfoFromC(c)
|
||
// 创建审批 防止重复提交
|
||
lockKey := fmt.Sprintf("create_approval_%v_%v", userInfo.ID, req.Type)
|
||
reply := cache.RedisClient.SetNX(lockKey, 0, 10*time.Second)
|
||
if !reply.Val() {
|
||
service.Error(c, e.Error, nil, e.ErrorCreateApproval)
|
||
return
|
||
}
|
||
|
||
//提交人
|
||
req.SubmitterName = userInfo.NickName
|
||
req.SubmitterID = userInfo.ID
|
||
fmt.Println("====================提交前处理逻辑=========================")
|
||
// 提交之前的逻辑处理
|
||
err := createBefore(userInfo, &req)
|
||
if err != nil {
|
||
service.Error(c, e.Error, err)
|
||
return
|
||
}
|
||
fmt.Println("====================获取审批人=========================")
|
||
approvalAndCopy, err := makeApprovalAndUser(userInfo, &req)
|
||
if err != nil {
|
||
service.Error(c, e.Error, err)
|
||
return
|
||
}
|
||
|
||
req.ApprovalUsers = make([]*api.ApprovalUser, 0)
|
||
req.CopyUsers = make([]*api.CopyUser, 0)
|
||
|
||
req.ApprovalUsers = approvalAndCopy.ApprovalUsers
|
||
req.CopyUsers = approvalAndCopy.CopyUsers
|
||
|
||
fmt.Println("____________________ 打印 请求参数 CreateV2 createRequest 1 ________________________")
|
||
fmt.Printf("CreateV2 createRequest : %+v\n", req)
|
||
fmt.Println("____________________ 打印 请求参数 CreateV2 createRequest 1 ________________________")
|
||
|
||
res, err := service.ApprovalProvider.Create(c, &req)
|
||
if err != nil {
|
||
service.Error(c, e.Error, err)
|
||
return
|
||
}
|
||
fmt.Println("====================创建后=========================")
|
||
// 提交之后的逻辑处理
|
||
err = createAfter(c, userInfo, &req, res)
|
||
if err != nil {
|
||
service.Error(c, e.Error, err)
|
||
return
|
||
}
|
||
|
||
createReq := api.DetailRequest{ID: res.ID, Domain: req.Domain}
|
||
createDetail, detailErr := service.ApprovalProvider.Detail(c, &createReq)
|
||
if detailErr != nil {
|
||
service.Error(c, e.Error, err)
|
||
}
|
||
|
||
//创建时推送给第一个审批人
|
||
err = service.SendAppMessage("审批通知", "您有一条"+createDetail.TypeName+"审批待处理,点击查看详情 >", createDetail.NowUserId, createDetail.ID, "approval")
|
||
if err != nil {
|
||
fmt.Println("==============APP推送失败=====================")
|
||
fmt.Println(err)
|
||
}
|
||
|
||
service.Success(c, res)
|
||
}
|
||
|
||
// 创建 审批之前 要处理的逻辑
|
||
func createBefore(userInfo login.Info, req *api.CreateRequest) (err error) {
|
||
if strings.Contains(req.Type, "turnover") {
|
||
reqList := &api.ListRequest{}
|
||
reqList.Domain = req.Domain
|
||
reqList.Type = "turnover"
|
||
reqList.UserID = userInfo.ID
|
||
reqList.Status = 2
|
||
submitRes2, err := service.ApprovalProvider.MySubmit(context.Background(), reqList)
|
||
if err != nil {
|
||
return errors.New("查询离职申请失败")
|
||
}
|
||
reqList.Status = 1
|
||
submitRes1, err := service.ApprovalProvider.MySubmit(context.Background(), reqList)
|
||
if err != nil {
|
||
return errors.New("查询离职申请失败")
|
||
}
|
||
|
||
reqList.Status = 6
|
||
submitRes3, err := service.ApprovalProvider.MySubmit(context.Background(), reqList)
|
||
if err != nil {
|
||
return errors.New("查询离职申请失败")
|
||
}
|
||
|
||
if len(submitRes1.Data) > 0 || len(submitRes2.Data) > 0 || len(submitRes3.Data) > 0 {
|
||
return errors.New("用户已提交过离职申请")
|
||
}
|
||
}
|
||
|
||
if strings.Contains(req.Type, "handover") {
|
||
reqList := &api.ListRequest{}
|
||
reqList.Domain = req.Domain
|
||
reqList.Type = "handover"
|
||
reqList.UserID = userInfo.ID
|
||
reqList.Status = 2
|
||
submitRes2, err := service.ApprovalProvider.MySubmit(context.Background(), reqList)
|
||
if err != nil {
|
||
return errors.New("查询离职交接失败")
|
||
}
|
||
reqList.Status = 1
|
||
submitRes1, err := service.ApprovalProvider.MySubmit(context.Background(), reqList)
|
||
if err != nil {
|
||
return errors.New("查询离职交接失败")
|
||
}
|
||
|
||
reqList.Status = 6
|
||
submitRes3, err := service.ApprovalProvider.MySubmit(context.Background(), reqList)
|
||
if err != nil {
|
||
return errors.New("查询离职交接失败")
|
||
}
|
||
|
||
if len(submitRes1.Data) > 0 || len(submitRes2.Data) > 0 || len(submitRes3.Data) > 0 {
|
||
return errors.New("用户已提交过离职交接")
|
||
}
|
||
}
|
||
|
||
if req.Type == oa_model.TypeGoOut {
|
||
if req.ApprovalOA.GoOut.Hours == 0 {
|
||
return errors.New(e.ErrorTimeIsZero)
|
||
}
|
||
}
|
||
|
||
if req.Type == oa_model.TypeBusinessTrip {
|
||
if req.ApprovalOA.BusinessTrip.TotalDays == 0 {
|
||
return errors.New(e.ErrorTimeIsZero)
|
||
}
|
||
}
|
||
|
||
if req.Type == oa_model.TypeMakeUp {
|
||
err = CheckMakeUpApplyApproval(req, userInfo)
|
||
if err != nil {
|
||
//service.Error(c, e.Error, err)
|
||
return err
|
||
}
|
||
}
|
||
|
||
if req.Type == oa_model.TypeOverTime {
|
||
err = CheckOverTimeApplyApproval(req, userInfo)
|
||
if err != nil {
|
||
return
|
||
}
|
||
}
|
||
|
||
if req.Type == oa_model.TypeOutWork {
|
||
|
||
if req.ApprovalOA.OutWork.Hours == 0 {
|
||
return errors.New(e.ErrorTimeIsZero)
|
||
}
|
||
|
||
err = CheckLeaveTime(req, userInfo)
|
||
if err != nil {
|
||
//service.Error(c, e.Error, err)
|
||
return err
|
||
}
|
||
err = CheckOutWorkTime(req)
|
||
if err != nil {
|
||
//service.Error(c, e.Error, err)
|
||
return err
|
||
}
|
||
}
|
||
|
||
if oa_model.LeaveApplyMap[req.Type] != "" {
|
||
|
||
if (req.ApprovalOA.Leave != nil && req.ApprovalOA.Leave.Hours == 0 && req.ApprovalOA.Leave.Days == 0) || (req.ApprovalOA.OverTime != nil && req.ApprovalOA.OverTime.Hours == 0) {
|
||
return errors.New(e.ErrorTimeIsZero)
|
||
}
|
||
|
||
err = CheckLeaveTime(req, userInfo)
|
||
if err != nil {
|
||
//service.Error(c, e.Error, err)
|
||
return err
|
||
}
|
||
|
||
if oa_model.LeaveApplyMap[req.Type] != "" && req.Type != oa_model.TypeOverTime && req.Type != oa_model.TypeLeave {
|
||
err = CheckLeaveApproval(req, userInfo)
|
||
if err != nil {
|
||
//service.Error(c, e.Error, err)
|
||
return err
|
||
}
|
||
}
|
||
}
|
||
|
||
if oa_model.LeaveBalanceApplyMap[req.Type] != "" {
|
||
err = CheckLeaveApply(req, userInfo)
|
||
if err != nil {
|
||
//service.Error(c, e.Error, err)
|
||
return err
|
||
}
|
||
}
|
||
|
||
if strings.Contains(req.Type, "employ") {
|
||
if req.Employ.ResumeID != "" {
|
||
resumeID, _ := strconv.ParseInt(req.Employ.ResumeID, 10, 64)
|
||
err = resumeHireJudge(userInfo, resumeID)
|
||
if err != nil {
|
||
//service.Error(c, e.Error, err)
|
||
return err
|
||
}
|
||
}
|
||
|
||
}
|
||
|
||
if (req.Type == "exhibition" || req.Type == "artExhibitionReward") && req.Exhibition != nil {
|
||
showMap := make(map[string]string)
|
||
for _, exhibition := range req.Exhibition.ApprovalExhibitions {
|
||
if _, ok := showMap[exhibition.PackageID]; !ok {
|
||
showMap[exhibition.PackageID] = exhibition.PackageName
|
||
} else {
|
||
return errors.New("请勿提交重复的画展包")
|
||
}
|
||
}
|
||
}
|
||
|
||
if req.Type == oa_model.TypeBusinessTrip {
|
||
err = CheckBusinessTripTime(req, userInfo)
|
||
if err != nil {
|
||
return err
|
||
}
|
||
}
|
||
|
||
if req.Type == oa_model.TypeGoOut {
|
||
err = CheckLeaveTime(req, userInfo)
|
||
if err != nil {
|
||
return err
|
||
}
|
||
}
|
||
return nil
|
||
}
|
||
|
||
// 创建 审批之后 要处理的逻辑
|
||
func createAfter(c *gin.Context, userInfo login.Info, req *api.CreateRequest, res *api.ApprovalResponse) (err error) {
|
||
|
||
// 同步至 es
|
||
go func() {
|
||
fmt.Println("同步至 es ")
|
||
// 查询 审批状态已经 更新的 审批信息
|
||
createReq := api.DetailRequest{ID: res.ID, Domain: req.Domain}
|
||
createDetail, detailErr := service.ApprovalProvider.Detail(c, &createReq)
|
||
if detailErr != nil {
|
||
zap.L().Error("同步至 es 查询审批信息失败", zap.Error(detailErr))
|
||
//return
|
||
}
|
||
fmt.Println("============================== 查询 审批 ========================")
|
||
fmt.Printf("approval detail %+v\n", createDetail)
|
||
fmt.Println("============================== 查询 审批 ========================")
|
||
|
||
// 同步至 es
|
||
createErr := logic.CreateIndexApprovalDoc(config.ApprovalIndex, createDetail)
|
||
if createErr != nil {
|
||
zap.L().Error("同步至 es 失败 插入 ", zap.Error(createErr))
|
||
//return
|
||
}
|
||
fmt.Println("同步至 es 查询审批信息成功 ")
|
||
}()
|
||
|
||
//此处同步到画展包的数据
|
||
if req.Type == "exhibition" {
|
||
applyId, err := synToArtShow(c, req, res)
|
||
if err != nil {
|
||
//service.Error(c, e.Error, err)
|
||
return err
|
||
}
|
||
|
||
upReq := &api.UpdateEhApplyIDRequest{
|
||
ApplyId: applyId,
|
||
ApprovalID: res.ID,
|
||
}
|
||
|
||
_, upErr := service.ApprovalProvider.UpdateExhibitionApplyID(c, upReq)
|
||
if upErr != nil {
|
||
//service.Error(c, e.Error, err)
|
||
return upErr
|
||
}
|
||
}
|
||
|
||
fmt.Println("============================== es before 0 ========================")
|
||
|
||
// 同步 oa 审批到 oa
|
||
if e.TypeMap[req.Type] == "oa" {
|
||
fmt.Println("同步 oa系统 ")
|
||
|
||
// 查询 审批状态已经 更新的 审批信息
|
||
createReq := api.DetailRequest{ID: res.ID, Domain: req.Domain}
|
||
createDetail, detailErr := service.ApprovalProvider.Detail(c, &createReq)
|
||
if detailErr != nil {
|
||
//service.Error(c, e.Error, err)
|
||
return detailErr
|
||
}
|
||
|
||
oaRes, err := SyncApprovalToOA(createDetail)
|
||
if err != nil {
|
||
//service.Error(c, e.Error, err)
|
||
return err
|
||
}
|
||
|
||
fmt.Println("更新 oa系统 UUID ")
|
||
// 获取到 OA审批的 UUID 更新 approvalOA 中的 UUID
|
||
updateUUID := &api.UpdateApprovalOAUUIDReq{
|
||
UUID: oaRes.ID, // OA 返回
|
||
ApplyType: req.Type,
|
||
ApprovalID: res.ID, // approval 返回
|
||
}
|
||
_, updateUUIDErr := service.ApprovalProvider.UpdateApprovalOAUUID(context.Background(), updateUUID)
|
||
if updateUUIDErr != nil {
|
||
fmt.Printf("updateUUIDErr %+v\n", updateUUIDErr)
|
||
//service.Error(c, e.Error, err)
|
||
return updateUUIDErr
|
||
}
|
||
fmt.Println("更新 oa系统 UUID 成功 ")
|
||
//更新假期余额数据
|
||
if req.Type == oa_model.TypeAnnualLeave || req.Type == oa_model.TypeParentalLeave || req.Type == oa_model.TypeNursingLeave {
|
||
if len(req.ApprovalOA.Leave.ApplyTimes) == 0 {
|
||
return errors.New("获取开始日期失败")
|
||
}
|
||
date, _ := time.Parse("2006-01-02", req.ApprovalOA.Leave.ApplyTimes[0].Date)
|
||
year := int32(date.Year())
|
||
_, err = service.GrpcOAImpl.ModifyTheLeaveBalance(context.Background(), &oaApi.ModifyTheLeaveBalanceReq{
|
||
StaffUid: req.SubmitterID,
|
||
LeaveType: req.Type,
|
||
Movement: 2,
|
||
Year: year,
|
||
Days: req.ApprovalOA.Leave.Days,
|
||
})
|
||
if err != nil {
|
||
fmt.Printf("更新假勤余额失败---%v", err)
|
||
}
|
||
//return err
|
||
}
|
||
|
||
}
|
||
fmt.Println("============================== es before 1 ========================")
|
||
// 人才招聘
|
||
if strings.Contains(req.Type, "staffSupply") {
|
||
err = createPostApprove(c, userInfo, res, req.DepartmentID)
|
||
if err != nil {
|
||
//service.Error(c, e.Error, err)
|
||
return err
|
||
}
|
||
}
|
||
|
||
fmt.Println("============================== es before 2 ========================")
|
||
|
||
if strings.Contains(req.Type, "employ") {
|
||
if req.Employ.ResumeID != "" {
|
||
err = createOfferApprove(c, userInfo, res, req.DepartmentID)
|
||
if err != nil {
|
||
//service.Error(c, e.Error, err)
|
||
return err
|
||
}
|
||
}
|
||
}
|
||
//提交离职后扣除年假
|
||
if strings.Contains(req.Type, "turnover") {
|
||
UpdateDeductAnnualLeave(req.ApprovalOA.Turnover, userInfo)
|
||
}
|
||
fmt.Println("============================== es before 3 ========================")
|
||
|
||
return nil
|
||
}
|
||
|
||
func MakeApprovalAndUserV2(c *gin.Context) {
|
||
var req api.CreateRequest
|
||
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
|
||
service.Error(c, e.Error, err)
|
||
return
|
||
}
|
||
|
||
res := new(api.ApprovalAndCopy)
|
||
|
||
userInfo := login.GetUserInfoFromC(c)
|
||
|
||
if len(userInfo.PositionUsers) > 1 && req.DepartmentID == 0 {
|
||
service.Error(c, e.Error, errors.New(e.ErrorNotSelectDepartment))
|
||
return
|
||
}
|
||
|
||
res, err := makeApprovalAndUser(userInfo, &req)
|
||
if err != nil {
|
||
service.Error(c, e.Error, err)
|
||
return
|
||
}
|
||
|
||
service.Success(c, res)
|
||
}
|
||
|
||
func makeApprovalAndUser(userInfo login.Info, req *api.CreateRequest) (res *api.ApprovalAndCopy, err error) {
|
||
|
||
res = new(api.ApprovalAndCopy)
|
||
|
||
// 提交人
|
||
req.SubmitterName = userInfo.NickName
|
||
req.SubmitterID = userInfo.ID
|
||
|
||
// 查看 审批类型 的 审批人 以及 抄送人
|
||
settingReq := new(api.DetailSettingRequest)
|
||
settingReq.KeyWord = req.Type
|
||
if req.Domain == "" {
|
||
return nil, errors.New("domain为空(必传)")
|
||
} else {
|
||
settingReq.Domain = req.Domain
|
||
}
|
||
settingRes, err := service.ApprovalProvider.DetailSetting(context.Background(), settingReq)
|
||
if err != nil {
|
||
//service.Error(c, e.Error, errors.New(e.ErrorApprovalUser))
|
||
return nil, errors.New(e.ErrorApprovalUser)
|
||
}
|
||
|
||
fmt.Println("============================================= 获取 审批 审批人 ===============================================")
|
||
fmt.Printf("settingRes %+v\n", settingRes)
|
||
fmt.Println("=========================================================================================================================")
|
||
|
||
// 判断是否是 特殊的 提交人
|
||
isSpecialSubmitter := false
|
||
if result := cache.RedisClient.Get(fmt.Sprintf(cache.SpecialSubmitter+"_%v", userInfo.TelNum)); result.Err() == nil && result.Val() == "1" {
|
||
isSpecialSubmitter = true
|
||
}
|
||
|
||
if m.GetOaType(req.Type) != "" { //OA审批
|
||
|
||
fmt.Println("============================================= 进入 OA审批 ===============================================")
|
||
if !isSpecialSubmitter {
|
||
//耿阳接口的doamin是环境,写死
|
||
departmentDomain := "fontree"
|
||
approvaluser, isLeader := DepartmentBossesV3(new(gin.Context), departmentDomain, req.DepartmentID, req.SubmitterID)
|
||
if len(approvaluser) > 0 {
|
||
for index, user := range approvaluser {
|
||
user.Level = uint64(index + 1)
|
||
user.Tier = settingRes.ApprovalUsers[0].Tier
|
||
user.IsDirect = settingRes.ApprovalUsers[0].IsDirect
|
||
user.Signature = "AND"
|
||
user.IsLive = settingRes.ApprovalUsers[0].IsLive
|
||
user.BalanceFillIn = settingRes.ApprovalUsers[0].BalanceFillIn
|
||
}
|
||
}
|
||
req.ApprovalUsers = approvaluser
|
||
req.IsLeader = isLeader
|
||
fmt.Printf("req approvalUsers %+v\n", req.ApprovalUsers)
|
||
fmt.Printf("req leader %+v\n", req.IsLeader)
|
||
}
|
||
res.ApprovalUsers, res.CopyUsers = buildApprovalUsers(userInfo, req, settingRes.ApprovalUsers, settingRes.CopyUsers, settingRes)
|
||
fmt.Println("============================================= OA审批 获取 审批 审批人 剔除 离职 审批人之前 ===============================================")
|
||
fmt.Printf("res approvalUsers %+v\n", res.ApprovalUsers)
|
||
fmt.Printf("res CopyUsers %+v\n", res.CopyUsers)
|
||
fmt.Println("=============================================================================================================================")
|
||
} else if strings.Contains(req.Type, "staffSupply") || strings.Contains(req.Type, "position") {
|
||
|
||
if !isSpecialSubmitter {
|
||
//耿阳接口的doamin是环境,写死
|
||
departmentDomain := "fontree"
|
||
approvaluser, isLeader := DepartmentBossesV3(new(gin.Context), departmentDomain, req.DepartmentID, req.SubmitterID)
|
||
if len(approvaluser) > 0 {
|
||
for index, user := range approvaluser {
|
||
user.Level = uint64(index + 1)
|
||
user.Tier = settingRes.ApprovalUsers[0].Tier
|
||
user.IsDirect = settingRes.ApprovalUsers[0].IsDirect
|
||
user.Signature = "AND"
|
||
user.IsLive = settingRes.ApprovalUsers[0].IsLive
|
||
user.BalanceFillIn = settingRes.ApprovalUsers[0].BalanceFillIn
|
||
}
|
||
}
|
||
req.ApprovalUsers = approvaluser
|
||
req.IsLeader = isLeader
|
||
fmt.Printf("req approvalUsers %+v\n", req.ApprovalUsers)
|
||
fmt.Printf("req leader %+v\n", req.IsLeader)
|
||
}
|
||
res.ApprovalUsers, res.CopyUsers = buildApprovalUsers(userInfo, req, settingRes.ApprovalUsers, settingRes.CopyUsers, settingRes)
|
||
|
||
fmt.Println("============================================= 进入 人员增补审批 ===============================================")
|
||
//去重
|
||
//原逻辑:把直属领导追加到审批人后面,去掉前面的重复数据
|
||
//var result []*api.ApprovalUser
|
||
//approvalUserMap := make(map[uint64]*api.ApprovalUser)
|
||
//
|
||
//for _, userReq := range req.ApprovalUsers {
|
||
// approvalUserMap[userReq.ID] = userReq
|
||
//}
|
||
//for _, userRes := range res.ApprovalUsers {
|
||
// if _, exists := approvalUserMap[userRes.ID]; !exists {
|
||
// result = append(result, userRes)
|
||
// }
|
||
//}
|
||
//res.ApprovalUsers = result
|
||
//res.ApprovalUsers = append(res.ApprovalUsers, req.ApprovalUsers...)
|
||
//for index, ret := range res.ApprovalUsers {
|
||
// ret.Level = uint64(index + 1)
|
||
//
|
||
//}
|
||
fmt.Printf("把审批人追加到直属领导后面 %+v\n", res.ApprovalUsers)
|
||
|
||
} else {
|
||
|
||
fmt.Println("============================================= 进入 其他审批 ===============================================")
|
||
/*组装 从配置中获取的 审批人*/
|
||
// 获取任命审批的 审批人
|
||
req.ApprovalUsers = make([]*api.ApprovalUser, 0)
|
||
//approvalUser, err := buildPromotionApprovalUser(req)
|
||
//if err != nil {
|
||
// return nil, err
|
||
//}
|
||
//
|
||
//if approvalUser != nil {
|
||
// req.ApprovalUsers = approvalUser
|
||
//}
|
||
|
||
// 直属 和 指定部门 需要去查询 account
|
||
res.ApprovalUsers, res.CopyUsers = buildApprovalUsers(userInfo, req, settingRes.ApprovalUsers, settingRes.CopyUsers, settingRes)
|
||
|
||
if len(res.ApprovalUsers) == 0 {
|
||
return nil, errors.New(e.ErrorQueryDirectOrDepartmentApprovalUser)
|
||
}
|
||
|
||
}
|
||
|
||
// 剔除 离职 的 审批人
|
||
res.ApprovalUsers, err = verifyApprovalUserIsActive(res.ApprovalUsers)
|
||
if err != nil {
|
||
//service.Error(c, e.Error, err)
|
||
return nil, err
|
||
}
|
||
|
||
fmt.Println("============================================= OA审批 获取 审批 审批人 剔除 离职 审批人之后 ===============================================")
|
||
fmt.Printf("res approvalUsers %+v\n", res.ApprovalUsers)
|
||
fmt.Printf("res CopyUsers %+v\n", res.CopyUsers)
|
||
fmt.Println("=============================================================================================================================")
|
||
|
||
return res, nil
|
||
}
|
||
|
||
// buildApprovalUsers 组装 审批流程
|
||
func buildApprovalUsers(userInfo login.Info, req *api.CreateRequest, approvalUsers []*api.ApprovalUser, inCopyUsers []*api.CopyUser, setting *api.SettingRequest) (retApprovalUsers []*api.ApprovalUser, copyUsers []*api.CopyUser) {
|
||
|
||
fmt.Println("============ 获取 审批 审批人 组装前 ==============")
|
||
fmt.Printf("approvalUsers %+v\n", approvalUsers)
|
||
fmt.Println("============ 获取 审批 审批人 组装前 ==============")
|
||
fmt.Println()
|
||
|
||
approvalUsers = MakeRetApprovalUser(req, approvalUsers)
|
||
|
||
fmt.Println("============ 获取 审批 审批人 根据 OA 请假 天数 筛选 审判人 后 ==============")
|
||
fmt.Printf("approvalUsers %+v\n", approvalUsers)
|
||
fmt.Println("============ 获取 审批 审批人 根据 OA 请假 天数 筛选 审判人 后 ==============")
|
||
fmt.Println()
|
||
|
||
var currentLevel uint64 = 0 // 当前审批节点
|
||
//var approvalUserLevel uint64 = 0 // 审批人节点
|
||
|
||
retApprovalUsers = make([]*api.ApprovalUser, 0)
|
||
//signalUsers := make([]*api.ApprovalUser, 0) //指定人员
|
||
retApprovalUsers = append(retApprovalUsers, req.ApprovalUsers...)
|
||
if len(retApprovalUsers) > 0 {
|
||
currentLevel = uint64(len(retApprovalUsers))
|
||
}
|
||
copyUsers = make([]*api.CopyUser, 0)
|
||
retApprovalUsersMap := make(map[uint64]*api.ApprovalUser)
|
||
copyUsersMap := make(map[uint64]*api.CopyUser)
|
||
for _, user := range req.ApprovalUsers {
|
||
retApprovalUsersMap[user.ID] = user
|
||
}
|
||
for i := 0; i < len(approvalUsers); i++ {
|
||
// 判断当前审批节点是否是指定人员 如果不是指定人员 则需要查询 department 获取审批人
|
||
if approvalUsers[i].ID == 0 {
|
||
|
||
currentLevel++
|
||
|
||
if approvalUsers[i].DepartmentUID != "" && approvalUsers[i].PositionUID != "" {
|
||
listReq := new(account.ListV2Request)
|
||
departmentId, err := strconv.ParseUint(approvalUsers[i].DepartmentUID, 0, 64)
|
||
positionId, err := strconv.ParseUint(approvalUsers[i].PositionUID, 0, 64)
|
||
if err != nil {
|
||
return nil, nil
|
||
}
|
||
listReq.DepartmentId = uint32(departmentId)
|
||
listReq.PositionId = uint32(positionId)
|
||
// 查询部门下的审批人
|
||
listRes, err := service.AccountProvider.ListV2(context.Background(), listReq)
|
||
if err != nil {
|
||
return nil, nil
|
||
}
|
||
|
||
fmt.Println("============ 获取 审批 指定部门 审批人 ==============")
|
||
fmt.Printf("listRes %+v\n", listRes)
|
||
fmt.Println("============ 获取 审批 指定部门 审批人 ==============")
|
||
fmt.Println()
|
||
|
||
for j := 0; j < len(listRes.Data); j++ {
|
||
if listRes.Data[j].ID == userInfo.ID && req.Type != "nursingLeaveApply" && req.Type != "parentalLeaveApply" {
|
||
if j == len(listRes.Data)-1 {
|
||
currentLevel--
|
||
}
|
||
continue
|
||
}
|
||
|
||
if retApprovalUsersMap[listRes.Data[j].ID] != nil {
|
||
|
||
//if req.Type == "nursingLeaveApply" || req.Type == "parentalLeaveApply" {
|
||
// if req.Domain != "8fa1d8936af32f97aae832a3224bc93d" {
|
||
// for _, user := range retApprovalUsers {
|
||
// if user.ID == listRes.Data[j].ID {
|
||
// retApprovalUsers = DeleteApprovalUser(listRes.Data[j].ID, retApprovalUsers)
|
||
// }
|
||
// }
|
||
// } else {
|
||
// if j == len(listRes.Data)-1 {
|
||
// currentLevel--
|
||
// }
|
||
// continue
|
||
// }
|
||
//
|
||
//} else {
|
||
if j == len(listRes.Data)-1 {
|
||
currentLevel--
|
||
}
|
||
continue
|
||
//}
|
||
}
|
||
approvalUser := new(api.ApprovalUser)
|
||
approvalUser.ID = listRes.Data[j].ID
|
||
approvalUser.Name = listRes.Data[j].NickName
|
||
//指定部门有多个审批人,会签时等级++
|
||
if approvalUsers[i].Signature == "AND" && j > 0 {
|
||
currentLevel++
|
||
}
|
||
approvalUser.Level = currentLevel
|
||
approvalUser.Signature = approvalUsers[i].Signature
|
||
approvalUser.Type = approvalUsers[i].Type
|
||
approvalUser.Tier = approvalUsers[i].Tier
|
||
approvalUser.BalanceFillIn = approvalUsers[i].BalanceFillIn
|
||
retApprovalUsers = append(retApprovalUsers, approvalUser)
|
||
retApprovalUsersMap[listRes.Data[j].ID] = approvalUser
|
||
}
|
||
|
||
} else if approvalUsers[i].IsDirect == 1 {
|
||
myBossReq := new(department.MyBossesReq)
|
||
if strings.Contains(req.Type, "employ") {
|
||
departmentId, _ := strconv.ParseUint(req.Employ.DepartmentId, 10, 32)
|
||
myBossReq.DepartmentId = uint32(departmentId)
|
||
} else {
|
||
myBossReq.UserId = uint32(userInfo.ID)
|
||
myBossReq.DepartmentId = uint32(req.DepartmentID)
|
||
}
|
||
|
||
myBossReq.Level = uint32(approvalUsers[i].Level)
|
||
if approvalUsers[i].IsDesignate == 1 {
|
||
myBossReq.IsDesignate = true
|
||
} else {
|
||
myBossReq.IsDesignate = false
|
||
}
|
||
|
||
fmt.Println("============ 获取 审批 直属领导 审批人 请求参数 ==============")
|
||
fmt.Printf("myBossReq %+v\n", myBossReq)
|
||
fmt.Println("============ 获取 审批 直属领导 审批人 请求参数 ==============")
|
||
|
||
myBossRes, err := service.DepartmentProvider.MyBosses(context.Background(), myBossReq)
|
||
if err != nil {
|
||
return nil, nil
|
||
}
|
||
|
||
//if req.Type == "position" && len(myBossRes.List) > 1 {
|
||
// myBossRes.List = myBossRes.List[:1]
|
||
//}
|
||
|
||
fmt.Println("============ 获取 审批 直属领导 审批人 ==============")
|
||
fmt.Printf("myBossRes %+v\n", myBossRes)
|
||
fmt.Println("============ 获取 审批 直属领导 审批人 ==============")
|
||
fmt.Println()
|
||
|
||
flag := 0
|
||
for j := 0; j < len(myBossRes.List); j++ {
|
||
if j > 0 && approvalUsers[i].Signature == "OR" {
|
||
currentLevel++
|
||
}
|
||
for k := 0; k < len(myBossRes.List[j].Bosses); k++ {
|
||
if myBossRes.List[j].Bosses[k].ID == uint32(userInfo.ID) {
|
||
if j > 0 && approvalUsers[i].Signature == "OR" {
|
||
currentLevel--
|
||
} else if j == 0 {
|
||
currentLevel--
|
||
}
|
||
if k > 0 {
|
||
currentLevel++
|
||
}
|
||
continue
|
||
}
|
||
if retApprovalUsersMap[uint64(myBossRes.List[j].Bosses[k].ID)] != nil {
|
||
if j > 0 && approvalUsers[i].Signature == "OR" {
|
||
currentLevel--
|
||
} else if j == 0 {
|
||
currentLevel--
|
||
}
|
||
if k > 0 {
|
||
currentLevel++
|
||
}
|
||
continue
|
||
}
|
||
approvalUser := new(api.ApprovalUser)
|
||
approvalUser.ID = uint64(myBossRes.List[j].Bosses[k].ID)
|
||
approvalUser.Name = myBossRes.List[j].Bosses[k].Name
|
||
//直属有多个审批人,会签时等级++
|
||
if approvalUsers[i].Signature == "AND" && flag > 0 {
|
||
currentLevel++
|
||
}
|
||
|
||
approvalUser.Level = currentLevel
|
||
fmt.Println("========================currentLevel=========================================")
|
||
fmt.Println(approvalUser.Level)
|
||
fmt.Println(currentLevel)
|
||
approvalUser.IsDirect = approvalUsers[i].IsDirect
|
||
approvalUser.Signature = approvalUsers[i].Signature
|
||
approvalUser.Type = approvalUsers[i].Type
|
||
approvalUser.BalanceFillIn = approvalUsers[i].BalanceFillIn
|
||
approvalUser.IsDesignate = approvalUsers[i].IsDesignate
|
||
approvalUser.Tier = approvalUsers[i].Tier
|
||
retApprovalUsers = append(retApprovalUsers, approvalUser)
|
||
retApprovalUsersMap[uint64(myBossRes.List[j].Bosses[k].ID)] = approvalUser
|
||
flag++
|
||
}
|
||
if myBossRes.List[j].Bosses == nil {
|
||
currentLevel--
|
||
}
|
||
}
|
||
//currentLevel = currentLevel + uint64(len(myBossRes.List)-1)
|
||
|
||
}
|
||
} else {
|
||
currentLevel++
|
||
|
||
if approvalUsers[i].ID == userInfo.ID {
|
||
currentLevel--
|
||
continue
|
||
}
|
||
|
||
if retApprovalUsersMap[approvalUsers[i].ID] != nil {
|
||
currentLevel--
|
||
continue
|
||
}
|
||
|
||
approvalUser := new(api.ApprovalUser)
|
||
approvalUser.ID = approvalUsers[i].ID
|
||
approvalUser.Name = approvalUsers[i].Name
|
||
if len(retApprovalUsers) > 0 {
|
||
if approvalUsers[i].Signature == "OR" && retApprovalUsers[len(retApprovalUsers)-1].Type == "designatedPersonnel" && retApprovalUsers[len(retApprovalUsers)-1].Signature == "OR" && approvalUsers[i].Tier == retApprovalUsers[len(retApprovalUsers)-1].Tier {
|
||
approvalUser.Level = retApprovalUsers[len(retApprovalUsers)-1].Level
|
||
currentLevel--
|
||
} else if approvalUsers[i].Signature == "OR" && retApprovalUsers[len(retApprovalUsers)-1].Type == "designatedPersonnel" && retApprovalUsers[len(retApprovalUsers)-1].Signature != "OR" {
|
||
approvalUser.Level = retApprovalUsers[len(retApprovalUsers)-1].Level + 1
|
||
} else {
|
||
approvalUser.Level = currentLevel
|
||
}
|
||
} else {
|
||
approvalUser.Level = currentLevel
|
||
}
|
||
approvalUser.Signature = approvalUsers[i].Signature
|
||
approvalUser.IsDesignate = approvalUsers[i].IsDesignate
|
||
approvalUser.IsDirect = approvalUsers[i].IsDirect
|
||
approvalUser.Tier = approvalUsers[i].Tier
|
||
if approvalUsers[i].Type == "" {
|
||
approvalUser.Type = e.AndSignType
|
||
} else {
|
||
approvalUser.Type = approvalUsers[i].Type
|
||
}
|
||
retApprovalUsers = append(retApprovalUsers, approvalUser)
|
||
retApprovalUsersMap[approvalUsers[i].ID] = approvalUser
|
||
|
||
}
|
||
}
|
||
|
||
//OA
|
||
// 病假 事假
|
||
// 又要改,完犊子了
|
||
if m.GetOaType(req.Type) != "" {
|
||
if req.Type == "nursingLeaveApply" || req.Type == "parentalLeaveApply" {
|
||
//去重,究极特殊处理,我人晕了
|
||
//if req.IsLeader {
|
||
// retApprovalUsers = GetCombineOaApproveUsers(setting, retApprovalUsers)
|
||
//} else {
|
||
var result []*api.ApprovalUser
|
||
approvalUserMap := make(map[uint64]*api.ApprovalUser)
|
||
|
||
for _, userReq := range setting.OaApprovalUsers {
|
||
approvalUserMap[userReq.ID] = userReq
|
||
}
|
||
for _, userRes := range retApprovalUsers {
|
||
if _, exists := approvalUserMap[userRes.ID]; !exists {
|
||
result = append(result, userRes)
|
||
}
|
||
}
|
||
retApprovalUsers = result
|
||
retApprovalUsers = append(retApprovalUsers, setting.OaApprovalUsers...)
|
||
//var tmpAppUser *api.ApprovalUser
|
||
//tmpAppUser = retApprovalUsers[len(retApprovalUsers)-1]
|
||
//retApprovalUsers[len(retApprovalUsers)-1] = retApprovalUsers[len(retApprovalUsers)-2]
|
||
//retApprovalUsers[len(retApprovalUsers)-2] = tmpAppUser
|
||
//}
|
||
//retApprovalUsers = GetCombineOaApproveUsers(setting, retApprovalUsers)
|
||
//retApprovalUsers[len(retApprovalUsers)-2].BalanceFillIn = 0
|
||
|
||
inCopyUsers = GetCombineOaCopyUsers(setting, inCopyUsers)
|
||
|
||
//新逻辑:加班/外勤 丧假 陪产假 婚假 育儿假 独生子女护理假 哺乳假 孕检假 年假 调休 出差 外出=====》直属1级
|
||
} else if req.Type == "overTime" ||
|
||
req.Type == "makeUp" ||
|
||
req.Type == "breastFeedingLeave" ||
|
||
req.Type == "dayOff" {
|
||
//if in.IsLeader {
|
||
retApprovalUsers = GetCombineOaApproveUsers(setting, retApprovalUsers)
|
||
if len(retApprovalUsers) > 1 && req.Domain != "8fa1d8936af32f97aae832a3224bc93d" {
|
||
for _, user := range retApprovalUsers[1:] {
|
||
delete(retApprovalUsersMap, user.ID)
|
||
}
|
||
retApprovalUsers = retApprovalUsers[:1]
|
||
}
|
||
|
||
}
|
||
}
|
||
|
||
// 抄送人,岗位与人员混合,老子真晕了
|
||
// 无特殊处理,与设置保持一致
|
||
for _, copyUser := range inCopyUsers {
|
||
if copyUser.ID == 0 {
|
||
//指定岗位
|
||
if copyUser.DepartmentUID != "" && copyUser.PositionUID != "" {
|
||
listReq := new(account.ListV2Request)
|
||
departmentId, err := strconv.ParseUint(copyUser.DepartmentUID, 0, 64)
|
||
positionId, err := strconv.ParseUint(copyUser.PositionUID, 0, 64)
|
||
if err != nil {
|
||
return nil, nil
|
||
}
|
||
listReq.DepartmentId = uint32(departmentId)
|
||
listReq.PositionId = uint32(positionId)
|
||
// 查询部门下的审批人
|
||
listRes, err := service.AccountProvider.ListV2(context.Background(), listReq)
|
||
if err != nil {
|
||
return nil, nil
|
||
}
|
||
|
||
fmt.Println("============ 获取 审批 指定部门 抄送人 ==============")
|
||
fmt.Printf("listRes %+v\n", listRes)
|
||
fmt.Println("============ 获取 审批 指定部门 抄送人 ==============")
|
||
for _, res := range listRes.Data {
|
||
tmpCopyUser := &api.CopyUser{
|
||
ID: res.ID,
|
||
Name: res.NickName,
|
||
IsLive: copyUser.IsLive,
|
||
Type: copyUser.Type,
|
||
IsViewed: copyUser.IsViewed,
|
||
}
|
||
if _, exists := copyUsersMap[tmpCopyUser.ID]; !exists {
|
||
if _, existsApproval := retApprovalUsersMap[tmpCopyUser.ID]; !existsApproval {
|
||
if tmpCopyUser.ID != userInfo.ID {
|
||
copyUsers = append(copyUsers, tmpCopyUser)
|
||
copyUsersMap[tmpCopyUser.ID] = tmpCopyUser
|
||
}
|
||
}
|
||
}
|
||
|
||
}
|
||
}
|
||
} else {
|
||
//指定人员
|
||
if _, exists := copyUsersMap[copyUser.ID]; !exists {
|
||
if _, existsApproval := retApprovalUsersMap[copyUser.ID]; !existsApproval {
|
||
if copyUser.ID != userInfo.ID {
|
||
copyUsers = append(copyUsers, copyUser)
|
||
copyUsersMap[copyUser.ID] = copyUser
|
||
}
|
||
|
||
}
|
||
}
|
||
}
|
||
|
||
}
|
||
|
||
//剔除掉离职的抄送人
|
||
filterCopyUsers := make([]*api.CopyUser, 0)
|
||
|
||
for _, copyU := range copyUsers {
|
||
req1 := new(account.ListByIDsRequest)
|
||
req1.IDs = []uint64{copyU.ID}
|
||
res1, err := service.AccountProvider.ListByIDs(context.Background(), req1)
|
||
if err != nil {
|
||
return nil, nil
|
||
}
|
||
if res1.Data[0].Status == "notactive" {
|
||
filterCopyUsers = append(filterCopyUsers, copyU)
|
||
}
|
||
}
|
||
copyUsers = filterCopyUsers
|
||
|
||
for index, singleCopy := range copyUsers {
|
||
singleCopy.Level = uint64(index + 1)
|
||
}
|
||
|
||
//for index2, user := range retApprovalUsers {
|
||
// user.Level = uint64(index2 + 1)
|
||
//}
|
||
|
||
fmt.Println("============ 获取 审批 审批人 组装后 ==============")
|
||
fmt.Printf("retApprovalUsers %+v\n", retApprovalUsers)
|
||
fmt.Printf("copyUsers %+v\n", copyUsers)
|
||
fmt.Println("============ 获取 审批 审批人 组装后 ==============")
|
||
fmt.Println()
|
||
return
|
||
}
|
||
|
||
// 备份
|
||
func buildApprovalUsersV2(userInfo login.Info, req *api.CreateRequest, approvalUsers []*api.ApprovalUser, inCopyUsers []*api.CopyUser, setting *api.SettingRequest) (retApprovalUsers []*api.ApprovalUser, copyUsers []*api.CopyUser) {
|
||
|
||
fmt.Println("============ 获取 审批 审批人 组装前 ==============")
|
||
fmt.Printf("approvalUsers %+v\n", approvalUsers)
|
||
fmt.Println("============ 获取 审批 审批人 组装前 ==============")
|
||
fmt.Println()
|
||
|
||
var currentLevel uint64 = 0 // 当前审批节点
|
||
var approvalUserLevel uint64 = 0 // 审批人节点
|
||
|
||
retApprovalUsers = make([]*api.ApprovalUser, 0)
|
||
copyUsers = make([]*api.CopyUser, 0)
|
||
retApprovalUsersMap := make(map[uint64]*api.ApprovalUser)
|
||
for i := 0; i < len(approvalUsers); i++ {
|
||
// 判断当前审批节点是否是指定人员 如果不是指定人员 则需要查询 department 获取审批人
|
||
if approvalUsers[i].ID == 0 {
|
||
|
||
currentLevel++
|
||
|
||
if approvalUsers[i].DepartmentUID != "" && approvalUsers[i].PositionUID != "" {
|
||
listReq := new(account.ListV2Request)
|
||
departmentId, err := strconv.ParseUint(approvalUsers[i].DepartmentUID, 0, 64)
|
||
positionId, err := strconv.ParseUint(approvalUsers[i].PositionUID, 0, 64)
|
||
if err != nil {
|
||
return nil, nil
|
||
}
|
||
listReq.DepartmentId = uint32(departmentId)
|
||
listReq.PositionId = uint32(positionId)
|
||
// 查询部门下的审批人
|
||
listRes, err := service.AccountProvider.ListV2(context.Background(), listReq)
|
||
if err != nil {
|
||
return nil, nil
|
||
}
|
||
|
||
fmt.Println("============ 获取 审批 指定部门 审批人 ==============")
|
||
fmt.Printf("listRes %+v\n", listRes)
|
||
fmt.Println("============ 获取 审批 指定部门 审批人 ==============")
|
||
fmt.Println()
|
||
|
||
for j := 0; j < len(listRes.Data); j++ {
|
||
if listRes.Data[j].ID == userInfo.ID && req.Type != "nursingLeaveApply" && req.Type != "parentalLeaveApply" {
|
||
continue
|
||
}
|
||
if retApprovalUsersMap[listRes.Data[j].ID] != nil {
|
||
continue
|
||
}
|
||
approvalUser := new(api.ApprovalUser)
|
||
approvalUser.ID = listRes.Data[j].ID
|
||
approvalUser.Name = listRes.Data[j].NickName
|
||
approvalUser.Level = currentLevel
|
||
approvalUser.Signature = approvalUsers[i].Signature
|
||
approvalUser.Type = approvalUsers[i].Type
|
||
approvalUser.BalanceFillIn = approvalUsers[i].BalanceFillIn
|
||
retApprovalUsers = append(retApprovalUsers, approvalUser)
|
||
retApprovalUsersMap[listRes.Data[j].ID] = approvalUser
|
||
}
|
||
|
||
} else if approvalUsers[i].IsDirect == 1 {
|
||
myBossReq := new(department.MyBossesReq)
|
||
if strings.Contains(req.Type, "employ") {
|
||
departmentId, _ := strconv.ParseUint(req.Employ.DepartmentId, 10, 32)
|
||
myBossReq.DepartmentId = uint32(departmentId)
|
||
} else {
|
||
myBossReq.UserId = uint32(userInfo.ID)
|
||
myBossReq.DepartmentId = uint32(req.DepartmentID)
|
||
}
|
||
//这不怪我,我也不想这么写
|
||
if req.Type == "outWork" ||
|
||
req.Type == "funeralLeave" ||
|
||
req.Type == "paternityLeave" ||
|
||
req.Type == "maritalLeave" ||
|
||
req.Type == "parentalLeave" ||
|
||
req.Type == "nursingLeave" ||
|
||
req.Type == "matingCheckLeave" ||
|
||
req.Type == "annualLeave" ||
|
||
req.Type == "businessTrip" ||
|
||
req.Type == "sick" ||
|
||
req.Type == "leave" ||
|
||
req.Type == "maternityLeave" ||
|
||
req.Type == "abortLeave" ||
|
||
req.Type == "goOut" {
|
||
var days float32
|
||
if req.ApprovalOA.Leave != nil {
|
||
days = req.ApprovalOA.Leave.Days
|
||
}
|
||
if req.ApprovalOA.BusinessTrip != nil {
|
||
days = req.ApprovalOA.BusinessTrip.TotalDays
|
||
}
|
||
if req.ApprovalOA.GoOut != nil {
|
||
days = req.ApprovalOA.GoOut.Hours / 8
|
||
}
|
||
if req.ApprovalOA.OutWork != nil {
|
||
days = req.ApprovalOA.OutWork.Hours / 8
|
||
}
|
||
|
||
//不同时长直属级数不同(晕)
|
||
if days > 1 {
|
||
myBossReq.Level = uint32(approvalUsers[i].Level)
|
||
} else {
|
||
myBossReq.Level = 1
|
||
}
|
||
|
||
} else {
|
||
myBossReq.Level = uint32(approvalUsers[i].Level)
|
||
}
|
||
|
||
fmt.Println("============ 获取 审批 直属领导 审批人 请求参数 ==============")
|
||
fmt.Printf("myBossReq %+v\n", myBossReq)
|
||
fmt.Println("============ 获取 审批 直属领导 审批人 请求参数 ==============")
|
||
|
||
myBossRes, err := service.DepartmentProvider.MyBosses(context.Background(), myBossReq)
|
||
if err != nil {
|
||
return nil, nil
|
||
}
|
||
|
||
if strings.Contains(req.Type, "position") && len(myBossRes.List) > 1 {
|
||
myBossRes.List = myBossRes.List[:1]
|
||
}
|
||
|
||
fmt.Println("============ 获取 审批 直属领导 审批人 ==============")
|
||
fmt.Printf("myBossRes %+v\n", myBossRes)
|
||
fmt.Println("============ 获取 审批 直属领导 审批人 ==============")
|
||
fmt.Println()
|
||
|
||
for j := 0; j < len(myBossRes.List); j++ {
|
||
for k := 0; k < len(myBossRes.List[j].Bosses); k++ {
|
||
if myBossRes.List[j].Bosses[k].ID == uint32(userInfo.ID) {
|
||
continue
|
||
}
|
||
if retApprovalUsersMap[uint64(myBossRes.List[j].Bosses[k].ID)] != nil {
|
||
continue
|
||
}
|
||
approvalUser := new(api.ApprovalUser)
|
||
approvalUser.ID = uint64(myBossRes.List[j].Bosses[k].ID)
|
||
approvalUser.Name = myBossRes.List[j].Bosses[k].Name
|
||
approvalUser.Level = currentLevel + uint64(j)
|
||
approvalUser.IsDirect = approvalUsers[i].IsDirect
|
||
approvalUser.Signature = approvalUsers[i].Signature
|
||
approvalUser.Type = approvalUsers[i].Type
|
||
approvalUser.BalanceFillIn = approvalUsers[i].BalanceFillIn
|
||
retApprovalUsers = append(retApprovalUsers, approvalUser)
|
||
retApprovalUsersMap[uint64(myBossRes.List[j].Bosses[k].ID)] = approvalUser
|
||
}
|
||
}
|
||
currentLevel = currentLevel + uint64(len(myBossRes.List)-1)
|
||
|
||
}
|
||
} else {
|
||
|
||
if approvalUserLevel != approvalUsers[i].Level {
|
||
currentLevel++
|
||
}
|
||
|
||
approvalUserLevel = approvalUsers[i].Level
|
||
|
||
if approvalUsers[i].ID == userInfo.ID {
|
||
continue
|
||
}
|
||
|
||
if retApprovalUsersMap[approvalUsers[i].ID] != nil {
|
||
continue
|
||
}
|
||
|
||
approvalUser := new(api.ApprovalUser)
|
||
approvalUser.ID = approvalUsers[i].ID
|
||
approvalUser.Name = approvalUsers[i].Name
|
||
approvalUser.Level = currentLevel
|
||
approvalUser.Signature = approvalUsers[i].Signature
|
||
if approvalUsers[i].Type == "" {
|
||
approvalUser.Type = e.AndSignType
|
||
} else {
|
||
approvalUser.Type = approvalUsers[i].Type
|
||
}
|
||
retApprovalUsers = append(retApprovalUsers, approvalUser)
|
||
retApprovalUsersMap[approvalUsers[i].ID] = approvalUser
|
||
|
||
}
|
||
}
|
||
|
||
//OA
|
||
// 病假 事假
|
||
// 又要改,完犊子了
|
||
if m.GetOaType(req.Type) != "" {
|
||
//又是新逻辑,事假/年假/出差/外出
|
||
if req.Type == "leave" || req.Type == "annualLeave" || req.Type == "businessTrip" || req.Type == "goOut" {
|
||
var days float32
|
||
if req.ApprovalOA.Leave != nil {
|
||
days = req.ApprovalOA.Leave.Days
|
||
}
|
||
if req.ApprovalOA.BusinessTrip != nil {
|
||
days = req.ApprovalOA.BusinessTrip.TotalDays
|
||
}
|
||
if req.ApprovalOA.GoOut != nil {
|
||
days = req.ApprovalOA.GoOut.Hours / 8
|
||
}
|
||
retApprovalUsers = GetCombineOaApproveUsers(setting, retApprovalUsers)
|
||
inCopyUsers = GetCombineOaCopyUsers(setting, inCopyUsers)
|
||
if days <= 3 {
|
||
retApprovalUsers = retApprovalUsers[:len(retApprovalUsers)-1]
|
||
}
|
||
|
||
//if req.ApprovalOA.Leave.Days >= 2 {
|
||
// retApprovalUsers = GetCombineOaApproveUsers(setting, retApprovalUsers)
|
||
// inCopyUsers = GetCombineOaCopyUsers(setting, inCopyUsers)
|
||
//} else {
|
||
//
|
||
// retApprovalUsers = GetCombineOaApproveUsers(setting, retApprovalUsers)
|
||
// if len(retApprovalUsers) > 1 {
|
||
// for _, user := range retApprovalUsers[1:] {
|
||
// delete(retApprovalUsersMap, user.ID)
|
||
// }
|
||
// retApprovalUsers = retApprovalUsers[:1]
|
||
// }
|
||
// inCopyUsers = GetCombineOaCopyUsers(setting, inCopyUsers)
|
||
// if len(inCopyUsers) > 1 {
|
||
// inCopyUsers = inCopyUsers[:len(inCopyUsers)-1]
|
||
// }
|
||
// //}
|
||
//
|
||
//}
|
||
|
||
for index, ret := range retApprovalUsers {
|
||
ret.Level = uint64(index + 1)
|
||
}
|
||
|
||
//新逻辑:独生子女护理假申请 育儿假申请====》直属3级+指定岗位
|
||
//TODO离职暂时放着(in.Type == "turnover")
|
||
} else if req.Type == "nursingLeaveApply" || req.Type == "parentalLeaveApply" {
|
||
//去重,究极特殊处理,我人晕了
|
||
//if req.IsLeader {
|
||
// retApprovalUsers = GetCombineOaApproveUsers(setting, retApprovalUsers)
|
||
//} else {
|
||
var result []*api.ApprovalUser
|
||
approvalUserMap := make(map[uint64]*api.ApprovalUser)
|
||
|
||
for _, userReq := range setting.OaApprovalUsers {
|
||
approvalUserMap[userReq.ID] = userReq
|
||
}
|
||
for _, userRes := range retApprovalUsers {
|
||
if _, exists := approvalUserMap[userRes.ID]; !exists {
|
||
result = append(result, userRes)
|
||
}
|
||
}
|
||
retApprovalUsers = result
|
||
retApprovalUsers = append(retApprovalUsers, setting.OaApprovalUsers...)
|
||
//var tmpAppUser *api.ApprovalUser
|
||
//tmpAppUser = retApprovalUsers[len(retApprovalUsers)-1]
|
||
//retApprovalUsers[len(retApprovalUsers)-1] = retApprovalUsers[len(retApprovalUsers)-2]
|
||
//retApprovalUsers[len(retApprovalUsers)-2] = tmpAppUser
|
||
//}
|
||
retApprovalUsers = GetCombineOaApproveUsers(setting, retApprovalUsers)
|
||
retApprovalUsers[len(retApprovalUsers)-2].BalanceFillIn = 1
|
||
|
||
inCopyUsers = GetCombineOaCopyUsers(setting, inCopyUsers)
|
||
|
||
//新逻辑:加班/外勤 丧假 陪产假 婚假 育儿假 独生子女护理假 哺乳假 孕检假 年假 调休 出差 外出=====》直属1级
|
||
} else if req.Type == "outWork" ||
|
||
req.Type == "funeralLeave" ||
|
||
req.Type == "paternityLeave" ||
|
||
req.Type == "maritalLeave" ||
|
||
req.Type == "parentalLeave" ||
|
||
req.Type == "nursingLeave" ||
|
||
req.Type == "matingCheckLeave" ||
|
||
req.Type == "maternityLeave" ||
|
||
req.Type == "abortLeave" ||
|
||
req.Type == "sick" {
|
||
var days float32
|
||
if req.ApprovalOA.Leave != nil {
|
||
days = req.ApprovalOA.Leave.Days
|
||
}
|
||
if req.ApprovalOA.OutWork != nil {
|
||
days = req.ApprovalOA.OutWork.Hours / 8
|
||
}
|
||
retApprovalUsers = GetCombineOaApproveUsers(setting, retApprovalUsers)
|
||
inCopyUsers = GetCombineOaCopyUsers(setting, inCopyUsers)
|
||
//if days > 1 && days <= 3 {
|
||
// retApprovalUsers = retApprovalUsers[:len(retApprovalUsers)-1]
|
||
//} else if days <= 1 {
|
||
// retApprovalUsers = retApprovalUsers[:len(retApprovalUsers)-2]
|
||
//}
|
||
if days <= 3 {
|
||
retApprovalUsers = retApprovalUsers[:len(retApprovalUsers)-1]
|
||
}
|
||
//加班外勤 不是主管截取掉最后一个
|
||
if req.Type == "outWork" {
|
||
inCopyUsers = GetCombineOaCopyUsers(setting, inCopyUsers)
|
||
if !req.IsLeader {
|
||
if len(inCopyUsers) > 1 {
|
||
inCopyUsers = inCopyUsers[:len(inCopyUsers)-1]
|
||
}
|
||
}
|
||
|
||
}
|
||
|
||
} else if req.Type == "overTime" ||
|
||
req.Type == "makeUp" ||
|
||
req.Type == "breastFeedingLeave" ||
|
||
req.Type == "dayOff" {
|
||
//if in.IsLeader {
|
||
retApprovalUsers = GetCombineOaApproveUsers(setting, retApprovalUsers)
|
||
if len(retApprovalUsers) > 1 {
|
||
for _, user := range retApprovalUsers[1:] {
|
||
delete(retApprovalUsersMap, user.ID)
|
||
}
|
||
retApprovalUsers = retApprovalUsers[:1]
|
||
}
|
||
//加班外勤 不是主管截取掉最后一个
|
||
if req.Type == "overTime" {
|
||
inCopyUsers = GetCombineOaCopyUsers(setting, inCopyUsers)
|
||
if !req.IsLeader {
|
||
if len(inCopyUsers) > 1 {
|
||
inCopyUsers = inCopyUsers[:len(inCopyUsers)-1]
|
||
}
|
||
}
|
||
|
||
}
|
||
|
||
}
|
||
|
||
//// 去重 审批人 剔除 提交人 抄送人 剔除 审批人
|
||
//approvalUsers, copyUsers = UniqueUsersV2(in.SubmitterID, approvalUsers, copyUsers)
|
||
index := 0
|
||
for i := 0; i < len(retApprovalUsers); i++ {
|
||
index++
|
||
retApprovalUsers[i].Level = uint64(index)
|
||
}
|
||
fmt.Println("------------t5---------- start ")
|
||
fmt.Println("1-----", retApprovalUsers)
|
||
fmt.Println("2-----", inCopyUsers)
|
||
fmt.Println("------------t5---------- end ")
|
||
}
|
||
|
||
if len(inCopyUsers) > 0 {
|
||
for i := 0; i < len(inCopyUsers); i++ {
|
||
if inCopyUsers[i].ID == userInfo.ID {
|
||
continue
|
||
} else if _, ok := retApprovalUsersMap[inCopyUsers[i].ID]; ok {
|
||
continue
|
||
} else {
|
||
copyUsers = append(copyUsers, inCopyUsers[i])
|
||
}
|
||
}
|
||
}
|
||
|
||
for index2, user := range retApprovalUsers {
|
||
user.Level = uint64(index2 + 1)
|
||
}
|
||
|
||
fmt.Println("============ 获取 审批 审批人 组装后 ==============")
|
||
fmt.Printf("retApprovalUsers %+v\n", retApprovalUsers)
|
||
fmt.Printf("copyUsers %+v\n", copyUsers)
|
||
fmt.Println("============ 获取 审批 审批人 组装后 ==============")
|
||
fmt.Println()
|
||
return
|
||
}
|
||
|
||
// verifyApprovalUserIsActive 检查审批人是否在职 并 用于 审批流程 展示 以及 创建
|
||
func verifyApprovalUserIsActive(approvalUsers []*api.ApprovalUser) (retApprovalUsers []*api.ApprovalUser, err error) {
|
||
userIDs := make([]uint64, 0)
|
||
|
||
for i := 0; i < len(approvalUsers); i++ {
|
||
userIDs = append(userIDs, approvalUsers[i].ID)
|
||
}
|
||
|
||
if len(userIDs) > 0 {
|
||
req := new(account.ListByIDsRequest)
|
||
res := new(account.ListResponse)
|
||
retApprovalUsers = make([]*api.ApprovalUser, 0)
|
||
req.IDs = userIDs
|
||
res, err = service.AccountProvider.ListByIDs(context.Background(), req)
|
||
if err != nil {
|
||
return nil, errors.New(e.ErrorGetUserStatus)
|
||
}
|
||
|
||
usersMap := make(map[uint64]*account.AccountInfo)
|
||
for i := 0; i < len(res.Data); i++ {
|
||
fmt.Println("==================================== 校验审批人 状态 ============================================")
|
||
fmt.Printf("审批人状态 %+v\n", res.Data[i])
|
||
fmt.Println("==================================== 校验审批人 状态 ============================================")
|
||
//if res.Data[i].Status != "notactive" {
|
||
usersMap[res.Data[i].ID] = res.Data[i]
|
||
//}
|
||
}
|
||
|
||
if len(usersMap) > 0 {
|
||
isLiveInvalidNum := 0
|
||
for i := 0; i < len(approvalUsers); i++ {
|
||
if usersMap[approvalUsers[i].ID] != nil && usersMap[approvalUsers[i].ID].Status == "notactive" {
|
||
approvalUsers[i].IsLive = e.IsLive
|
||
retApprovalUsers = append(retApprovalUsers, approvalUsers[i])
|
||
} else {
|
||
isLiveInvalidNum++
|
||
approvalUsers[i].IsLive = e.IsLiveInvalid
|
||
retApprovalUsers = append(retApprovalUsers, approvalUsers[i])
|
||
}
|
||
}
|
||
|
||
if isLiveInvalidNum == len(approvalUsers) {
|
||
return nil, errors.New(e.ErrorCurrentApprovalIsNotUsed)
|
||
}
|
||
}
|
||
}
|
||
return
|
||
}
|
||
|
||
// 获取 promotion 中的 员工信息
|
||
func buildPromotionApprovalUser(req *api.CreateRequest) (approvalUsers []*api.ApprovalUser, err error) {
|
||
if req.Promotion == nil {
|
||
return nil, nil
|
||
} else if req.Promotion.StaffUID == 0 {
|
||
return nil, errors.New(e.ErrorEmptyPromotionStaffUid)
|
||
} else {
|
||
fmt.Println("============ 获取 promotion 中的 员工信息 ==============")
|
||
fmt.Printf("req.Promotion %+v\n", req.Promotion)
|
||
fmt.Println("============ 获取 promotion 中的 员工信息 ==============")
|
||
staffInfo, err := service.AccountProvider.Info(context.Background(), &account.InfoRequest{ID: req.Promotion.StaffUID})
|
||
fmt.Println("============ 获取 account 中的 员工信息 ==============")
|
||
fmt.Printf("staffInfo %+v\n", staffInfo)
|
||
fmt.Printf("err %+v\n", err)
|
||
fmt.Println("============ 获取 account 中的 员工信息 ==============")
|
||
if err != nil {
|
||
return nil, errors.New(e.GetMsg(e.ErrorGetUserInfo))
|
||
}
|
||
var departmentUid uint64
|
||
for i := 0; i < len(staffInfo.Info.Departments); i++ {
|
||
if staffInfo.Info.Departments[i].ID != 0 {
|
||
departmentUid = uint64(staffInfo.Info.Departments[i].ID)
|
||
break
|
||
}
|
||
}
|
||
|
||
myBossReq := new(department.MyBossesReq)
|
||
myBossReq.UserId = uint32(staffInfo.Info.ID)
|
||
myBossReq.DepartmentId = uint32(departmentUid)
|
||
myBossReq.Level = 1
|
||
|
||
myBossRes, err := service.DepartmentProvider.MyBosses(context.Background(), myBossReq)
|
||
if err != nil {
|
||
return nil, nil
|
||
}
|
||
|
||
if myBossRes.List == nil || len(myBossRes.List) == 0 {
|
||
return nil, errors.New(e.ErrorNotCatchUserDepartmentBoss)
|
||
}
|
||
|
||
approvalUsers = make([]*api.ApprovalUser, 0)
|
||
for i := 0; i < len(myBossRes.List); i++ {
|
||
for j := 0; j < len(myBossRes.List[i].Bosses); j++ {
|
||
approvalUser := new(api.ApprovalUser)
|
||
approvalUser.ID = uint64(myBossRes.List[i].Bosses[j].ID)
|
||
approvalUser.Name = myBossRes.List[i].Bosses[j].Name
|
||
approvalUser.Level = 1
|
||
approvalUsers = append(approvalUsers, approvalUser)
|
||
}
|
||
}
|
||
|
||
if req.ApprovalUsers != nil {
|
||
approvalUsers = append(approvalUsers, req.ApprovalUsers...)
|
||
}
|
||
|
||
return approvalUsers, nil
|
||
}
|
||
}
|
||
|
||
func UniqueUsers(submitterID uint64, inApprovalUsers []*api.ApprovalUser, inCopyUsers []*api.CopyUser) (newApprovalUsers []*api.ApprovalUser, copyUsers []*api.CopyUser) {
|
||
approvalUsers := make([]*api.ApprovalUser, 0)
|
||
approvalUserMap := make(map[uint64]*api.ApprovalUser)
|
||
copyUsers = make([]*api.CopyUser, 0)
|
||
uniqueUsersMap := make(map[uint64]struct{})
|
||
|
||
// 剔除 提交人 在审批人中
|
||
for i := 0; i < len(inApprovalUsers); i++ {
|
||
approvalUser := new(api.ApprovalUser)
|
||
approvalUser = inApprovalUsers[i]
|
||
approvalUserMap[approvalUser.ID] = approvalUser
|
||
if approvalUser.ID == submitterID {
|
||
continue
|
||
} else if _, ok := uniqueUsersMap[approvalUser.ID]; ok {
|
||
continue
|
||
} else {
|
||
uniqueUsersMap[approvalUser.ID] = struct{}{}
|
||
approvalUsers = append(approvalUsers, approvalUser)
|
||
}
|
||
}
|
||
|
||
var currentLevel uint64 = 0
|
||
var preLevel uint64 = 0
|
||
for i := 0; i < len(approvalUsers); i++ {
|
||
if i == 0 {
|
||
preLevel = approvalUsers[i].Level
|
||
currentLevel = approvalUsers[i].Level
|
||
} else {
|
||
currentLevel = approvalUsers[i].Level
|
||
if approvalUsers[i].Level == preLevel {
|
||
approvalUsers[i].Level = currentLevel
|
||
} else {
|
||
approvalUsers[i].Level = currentLevel
|
||
preLevel = currentLevel
|
||
currentLevel++
|
||
}
|
||
}
|
||
}
|
||
|
||
approvalUsersMap := make(map[uint64][]*api.ApprovalUser)
|
||
levels := make([]int, 0)
|
||
|
||
for i := 0; i < len(approvalUsers); i++ {
|
||
approvalUser := new(api.ApprovalUser)
|
||
approvalUser = approvalUsers[i]
|
||
if approvalUsersMap[approvalUser.Level] == nil {
|
||
levels = append(levels, int(approvalUser.Level))
|
||
}
|
||
approvalUsersMap[approvalUser.Level] = append(approvalUsersMap[approvalUser.Level], approvalUser)
|
||
}
|
||
|
||
newApprovalUsers = make([]*api.ApprovalUser, 0)
|
||
sort.Ints(levels)
|
||
|
||
if len(levels) > 0 {
|
||
for i := 0; i < len(levels); i++ {
|
||
for j := 0; j < len(approvalUsersMap[uint64(levels[i])]); j++ {
|
||
if approvalUsersMap[uint64(levels[i])][j].Level == 0 {
|
||
approvalUsersMap[uint64(levels[i])][j].Level = 1
|
||
approvalUsersMap[uint64(levels[i])][j].Signature = e.AndSignType
|
||
} else if approvalUsersMap[uint64(levels[i])][j].Level == 1 {
|
||
approvalUsersMap[uint64(levels[i])][j].Level = approvalUsersMap[uint64(levels[0])][len(approvalUsersMap[uint64(levels[0])])-1].Level
|
||
} else {
|
||
approvalUsersMap[uint64(levels[i])][j].Level = approvalUsersMap[uint64(levels[i-1])][len(approvalUsersMap[uint64(levels[i])])-1].Level + 1
|
||
}
|
||
}
|
||
newApprovalUsers = append(newApprovalUsers, approvalUsersMap[uint64(levels[i])]...)
|
||
}
|
||
}
|
||
|
||
approvalUsers = newApprovalUsers
|
||
|
||
if len(inCopyUsers) > 0 {
|
||
for i := 0; i < len(inCopyUsers); i++ {
|
||
if inCopyUsers[i].ID == submitterID {
|
||
continue
|
||
} else if _, ok := approvalUsersMap[inCopyUsers[i].ID]; ok {
|
||
continue
|
||
} else {
|
||
copyUsers = append(copyUsers, inCopyUsers[i])
|
||
}
|
||
}
|
||
}
|
||
|
||
return
|
||
}
|
||
|
||
// buildWorkFlow 组装 workflow
|
||
func buildWorkFlow(approvalUsers []*api.ApprovalUser) (retWorkFlows []*api.WorkFlow) {
|
||
retWorkFlows = make([]*api.WorkFlow, 0)
|
||
for i := 0; i < len(approvalUsers); i++ {
|
||
workFlow := new(api.WorkFlow)
|
||
workFlow.UserID = approvalUsers[i].ID
|
||
workFlow.Name = approvalUsers[i].Name
|
||
workFlow.Level = approvalUsers[i].Level
|
||
workFlow.Signature = approvalUsers[i].Signature
|
||
retWorkFlows = append(retWorkFlows, workFlow)
|
||
}
|
||
return
|
||
|
||
}
|
||
|
||
// verifyWorkflowIsActive 检查审批人是否在职 并 更新审批流程 用于审批流程的更新
|
||
func verifyWorkflowIsActive(workflows []*api.WorkFlow) (retWorkFlows []*api.WorkFlow, err error) {
|
||
userIDs := make([]uint64, 0)
|
||
|
||
for i := 0; i < len(workflows); i++ {
|
||
userIDs = append(userIDs, workflows[i].UserID)
|
||
}
|
||
|
||
if len(userIDs) > 0 {
|
||
req := new(account.ListByIDsRequest)
|
||
res := new(account.ListResponse)
|
||
retWorkFlows = make([]*api.WorkFlow, 0)
|
||
req.IDs = userIDs
|
||
res, err = service.AccountProvider.ListByIDs(context.Background(), req)
|
||
if err != nil {
|
||
return nil, errors.New(e.ErrorGetUserStatus)
|
||
}
|
||
|
||
usersMap := make(map[uint64]*account.AccountInfo)
|
||
for i := 0; i < len(res.Data); i++ {
|
||
if res.Data[i].Status != "notactive" {
|
||
usersMap[res.Data[i].ID] = res.Data[i]
|
||
}
|
||
}
|
||
|
||
if len(usersMap) > 0 {
|
||
for i := 0; i < len(workflows); i++ {
|
||
if usersMap[workflows[i].UserID] != nil {
|
||
workflows[i].IsLive = e.IsLiveInvalid
|
||
retWorkFlows = append(retWorkFlows, workflows[i])
|
||
}
|
||
}
|
||
|
||
updateWorkflowReq := new(api.UpdateWorkflowRequest)
|
||
updateWorkflowReq.WorkFlows = retWorkFlows
|
||
_, err = service.ApprovalProvider.UpdateWorkflow(context.Background(), updateWorkflowReq)
|
||
if err != nil {
|
||
return nil, err
|
||
}
|
||
}
|
||
}
|
||
return
|
||
}
|
||
|
||
func MyWorkV2(c *gin.Context) {
|
||
var req api.ListRequest
|
||
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
|
||
service.Error(c, e.Error, err)
|
||
return
|
||
}
|
||
|
||
userInfo := login.GetUserInfoFromC(c)
|
||
req.UserID = userInfo.ID
|
||
|
||
req.Domain = "all"
|
||
|
||
//if req.Status == 0 {
|
||
// for i := 0; i < len(userInfo.PositionUsers); i++ {
|
||
// if userInfo.PositionUsers[i].DepartmentName == "超级管理员" {
|
||
// req.UserID = 0
|
||
// }
|
||
// }
|
||
//}
|
||
|
||
if req.OrderBy == "" {
|
||
req.OrderBy = "desc"
|
||
}
|
||
|
||
if req.StartTime != "" && req.EndTime != "" {
|
||
req.StartTime = req.StartTime + " 00:00:00"
|
||
req.EndTime = req.EndTime + " 23:59:59"
|
||
req.OrderBy = "asc"
|
||
}
|
||
// 范围搜索
|
||
//
|
||
//positionList, dataErr := service.GrpcApprovalDataImpl.DetailApprovalData(context.Background(), &approvalData.DetailApprovalDataReq{UserId: userInfo.ID})
|
||
//if dataErr != nil {
|
||
// service.Error(c, e.Error, dataErr)
|
||
// return
|
||
//}
|
||
//
|
||
//if len(positionList.Data) > 0 {
|
||
// userList := make([]uint64, 0)
|
||
// for _, position := range positionList.Data {
|
||
// positionId, _ := strconv.ParseUint(position.PositionUID, 10, 32)
|
||
// userRes, userErr := service.AccountProvider.ListV2(context.Background(), &account.ListV2Request{Page: 1, PageSize: 99999, PositionId: uint32(positionId)})
|
||
// if userErr != nil {
|
||
// service.Error(c, e.Error, userErr)
|
||
// return
|
||
// }
|
||
// if len(userRes.Data) > 0 {
|
||
// for _, user := range userRes.Data {
|
||
// userList = append(userList, user.ID)
|
||
// }
|
||
// }
|
||
// }
|
||
// req.UserList = userList
|
||
//}
|
||
|
||
var authRes = new(position.DoIHavaAuthResponse)
|
||
authRes.Hava = false
|
||
|
||
if req.IsSpecial {
|
||
var authReq position.DoIHavaAuthRequest
|
||
var authErr error
|
||
|
||
authReq.Url = "moceapp/mywork/category/"
|
||
authReq.Type = "button"
|
||
|
||
authRes, authErr = service.PositionProvider.DoIHavaAuth(c, &authReq)
|
||
if authErr != nil {
|
||
zap.L().Error("DoIHavaAuth", zap.Error(authErr))
|
||
}
|
||
|
||
if authRes.Hava {
|
||
req.PageSize = 9999
|
||
}
|
||
}
|
||
|
||
res, err := service.ApprovalProvider.MyWorkV2(c, &req)
|
||
if err != nil {
|
||
service.Error(c, e.Error, err)
|
||
return
|
||
}
|
||
|
||
//全局搜索过滤
|
||
if len(res.Data) > 0 && req.AllQuery != "" {
|
||
fmt.Println("========================全局搜索过滤==============================")
|
||
filterData := make([]*api.CreateRequest, 0)
|
||
for _, approvalItem := range res.Data {
|
||
flag := 0
|
||
if strings.Contains(approvalItem.Content, req.AllQuery) ||
|
||
strings.Contains(approvalItem.Reply, req.AllQuery) ||
|
||
strings.Contains(approvalItem.SubmitterName, req.AllQuery) ||
|
||
strings.Contains(approvalItem.NowUserName, req.AllQuery) ||
|
||
strings.Contains(approvalItem.CreatedAt, req.AllQuery) ||
|
||
strings.Contains(approvalItem.TypeName, req.AllQuery) {
|
||
flag = flag + 1
|
||
}
|
||
if approvalItem.Work != nil {
|
||
if len(approvalItem.Work.ApprovalWorks) > 0 {
|
||
for _, work := range approvalItem.Work.ApprovalWorks {
|
||
if strings.Contains(work.ArtworkName, req.AllQuery) ||
|
||
strings.Contains(work.ArtistShowCount, req.AllQuery) ||
|
||
strings.Contains(work.ArtworkCover, req.AllQuery) {
|
||
flag = flag + 1
|
||
break
|
||
}
|
||
}
|
||
}
|
||
}
|
||
if len(approvalItem.Show) > 0 {
|
||
for _, show := range approvalItem.Show {
|
||
if strings.Contains(show.Address, req.AllQuery) {
|
||
flag = flag + 1
|
||
break
|
||
}
|
||
}
|
||
}
|
||
if approvalItem.Exhibition != nil {
|
||
if strings.Contains(approvalItem.Exhibition.Address, req.AllQuery) {
|
||
flag = flag + 1
|
||
}
|
||
if len(approvalItem.Exhibition.ApprovalExhibitions) > 0 {
|
||
|
||
for _, exhibition := range approvalItem.Exhibition.ApprovalExhibitions {
|
||
if len(exhibition.Artworks) > 0 {
|
||
for _, artwork := range exhibition.Artworks {
|
||
if strings.Contains(artwork.ArtworkName, req.AllQuery) ||
|
||
strings.Contains(artwork.ArtistShowCount, req.AllQuery) ||
|
||
strings.Contains(artwork.SaleAddress, req.AllQuery) ||
|
||
strings.Contains(artwork.Reward, req.AllQuery) ||
|
||
strings.Contains(artwork.Tfnum, req.AllQuery) {
|
||
flag = flag + 1
|
||
break
|
||
}
|
||
}
|
||
}
|
||
if exhibition.ArtExhibitionDetail != nil {
|
||
if strings.Contains(exhibition.ArtExhibitionDetail.ArtistShowCount, req.AllQuery) ||
|
||
strings.Contains(exhibition.ArtExhibitionDetail.ShowTime, req.AllQuery) ||
|
||
strings.Contains(exhibition.ArtExhibitionDetail.ShowName, req.AllQuery) ||
|
||
strings.Contains(exhibition.ArtExhibitionDetail.Address, req.AllQuery) {
|
||
flag = flag + 1
|
||
break
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
if len(approvalItem.WorkFlows) > 0 {
|
||
for _, user := range approvalItem.WorkFlows {
|
||
if strings.Contains(user.Name, req.AllQuery) {
|
||
flag = flag + 1
|
||
break
|
||
}
|
||
}
|
||
}
|
||
if len(approvalItem.CopyUsers) > 0 {
|
||
for _, copyUser := range approvalItem.CopyUsers {
|
||
if strings.Contains(copyUser.Name, req.AllQuery) {
|
||
flag = flag + 1
|
||
break
|
||
}
|
||
}
|
||
}
|
||
if len(approvalItem.CustomizeInfo) > 0 {
|
||
for _, keyInfo := range approvalItem.CustomizeInfo {
|
||
if strings.Contains(keyInfo.ApprovalValue, req.AllQuery) {
|
||
flag = flag + 1
|
||
break
|
||
}
|
||
}
|
||
}
|
||
if approvalItem.BundlePayPrice != nil {
|
||
if strings.Contains(approvalItem.BundlePayPrice.ShowName, req.AllQuery) ||
|
||
strings.Contains(approvalItem.BundlePayPrice.ArtistShowCount, req.AllQuery) ||
|
||
strings.Contains(approvalItem.BundlePayPrice.ShowLowPrice, req.AllQuery) ||
|
||
strings.Contains(approvalItem.BundlePayPrice.ArtworkSize, req.AllQuery) ||
|
||
strings.Contains(approvalItem.BundlePayPrice.ShowAddress, req.AllQuery) ||
|
||
strings.Contains(approvalItem.BundlePayPrice.ShowDate, req.AllQuery) {
|
||
flag = flag + 1
|
||
}
|
||
}
|
||
if approvalItem.ApprovalOA != nil {
|
||
if strings.Contains(approvalItem.ApprovalOA.RevokeReason, req.AllQuery) {
|
||
flag = flag + 1
|
||
}
|
||
if approvalItem.ApprovalOA.LeaveApply != nil {
|
||
if strings.Contains(approvalItem.ApprovalOA.LeaveApply.StaffName, req.AllQuery) ||
|
||
strings.Contains(approvalItem.ApprovalOA.LeaveApply.Reason, req.AllQuery) ||
|
||
strings.Contains(approvalItem.ApprovalOA.LeaveApply.StaffNum, req.AllQuery) ||
|
||
strings.Contains(approvalItem.ApprovalOA.LeaveApply.ActionTime, req.AllQuery) {
|
||
flag = flag + 1
|
||
}
|
||
}
|
||
if approvalItem.ApprovalOA.OutWork != nil {
|
||
|
||
if strings.Contains(approvalItem.ApprovalOA.OutWork.StaffName, req.AllQuery) ||
|
||
strings.Contains(approvalItem.ApprovalOA.OutWork.Reason, req.AllQuery) ||
|
||
strings.Contains(approvalItem.ApprovalOA.OutWork.StaffNum, req.AllQuery) ||
|
||
strings.Contains(approvalItem.ApprovalOA.OutWork.OutWorkAddress, req.AllQuery) ||
|
||
strings.Contains(approvalItem.ApprovalOA.OutWork.Vehicle, req.AllQuery) ||
|
||
strings.Contains(approvalItem.ApprovalOA.OutWork.ActionTime, req.AllQuery) {
|
||
flag = flag + 1
|
||
}
|
||
for _, applyTime := range approvalItem.ApprovalOA.OutWork.ApplyTimes {
|
||
if strings.Contains(applyTime.Date, req.AllQuery) {
|
||
flag = flag + 1
|
||
break
|
||
}
|
||
}
|
||
}
|
||
if approvalItem.ApprovalOA.MakeUp != nil {
|
||
if strings.Contains(approvalItem.ApprovalOA.MakeUp.StaffName, req.AllQuery) ||
|
||
strings.Contains(approvalItem.ApprovalOA.MakeUp.Reason, req.AllQuery) ||
|
||
strings.Contains(approvalItem.ApprovalOA.MakeUp.StaffNum, req.AllQuery) ||
|
||
strings.Contains(approvalItem.ApprovalOA.MakeUp.ActionTime, req.AllQuery) {
|
||
flag = flag + 1
|
||
}
|
||
for _, applyTime := range approvalItem.ApprovalOA.MakeUp.ApplyTimes {
|
||
if strings.Contains(applyTime.Date, req.AllQuery) {
|
||
flag = flag + 1
|
||
break
|
||
}
|
||
}
|
||
}
|
||
if approvalItem.ApprovalOA.Turnover != nil {
|
||
fmt.Println("=====================turnover=====================")
|
||
fmt.Println(approvalItem.ApprovalOA.Turnover)
|
||
if strings.Contains(approvalItem.ApprovalOA.Turnover.StaffName, req.AllQuery) ||
|
||
strings.Contains(approvalItem.ApprovalOA.Turnover.Reason, req.AllQuery) ||
|
||
strings.Contains(approvalItem.ApprovalOA.Turnover.StaffNum, req.AllQuery) ||
|
||
strings.Contains(approvalItem.ApprovalOA.Turnover.HandoverName, req.AllQuery) ||
|
||
strings.Contains(approvalItem.ApprovalOA.Turnover.JoinTime, req.AllQuery) ||
|
||
strings.Contains(approvalItem.ApprovalOA.Turnover.LeftTime, req.AllQuery) ||
|
||
strings.Contains(approvalItem.ApprovalOA.Turnover.ContactInfo, req.AllQuery) ||
|
||
strings.Contains(approvalItem.ApprovalOA.Turnover.HandoverNum, req.AllQuery) ||
|
||
strings.Contains(approvalItem.ApprovalOA.Turnover.Address, req.AllQuery) ||
|
||
strings.Contains(approvalItem.ApprovalOA.Turnover.SuperviseName, req.AllQuery) ||
|
||
strings.Contains(approvalItem.ApprovalOA.Turnover.SuperviseNum, req.AllQuery) ||
|
||
strings.Contains(approvalItem.ApprovalOA.Turnover.WorkItems, req.AllQuery) ||
|
||
strings.Contains(approvalItem.ApprovalOA.Turnover.FinanceItems, req.AllQuery) ||
|
||
strings.Contains(approvalItem.ApprovalOA.Turnover.ActionTime, req.AllQuery) {
|
||
flag = flag + 1
|
||
}
|
||
for _, applyTime := range approvalItem.ApprovalOA.Turnover.ApplyTimes {
|
||
if strings.Contains(applyTime.Date, req.AllQuery) {
|
||
flag = flag + 1
|
||
break
|
||
}
|
||
}
|
||
fmt.Println("=====================flag=====================")
|
||
fmt.Println(flag)
|
||
}
|
||
if approvalItem.ApprovalOA.OverTime != nil {
|
||
if strings.Contains(approvalItem.ApprovalOA.OverTime.StaffName, req.AllQuery) ||
|
||
strings.Contains(approvalItem.ApprovalOA.OverTime.Reason, req.AllQuery) ||
|
||
strings.Contains(approvalItem.ApprovalOA.OverTime.StaffNum, req.AllQuery) ||
|
||
strings.Contains(approvalItem.ApprovalOA.OverTime.ActionTime, req.AllQuery) {
|
||
flag = flag + 1
|
||
}
|
||
for _, applyTime := range approvalItem.ApprovalOA.OverTime.ApplyTimes {
|
||
if strings.Contains(applyTime.Date, req.AllQuery) {
|
||
flag = flag + 1
|
||
break
|
||
}
|
||
}
|
||
}
|
||
if approvalItem.ApprovalOA.Leave != nil {
|
||
if strings.Contains(approvalItem.ApprovalOA.Leave.StaffName, req.AllQuery) ||
|
||
strings.Contains(approvalItem.ApprovalOA.Leave.Reason, req.AllQuery) ||
|
||
strings.Contains(approvalItem.ApprovalOA.Leave.StaffNum, req.AllQuery) ||
|
||
strings.Contains(approvalItem.ApprovalOA.Leave.DateOfBrith, req.AllQuery) ||
|
||
strings.Contains(approvalItem.ApprovalOA.Leave.ActionTime, req.AllQuery) {
|
||
flag = flag + 1
|
||
}
|
||
for _, applyTime := range approvalItem.ApprovalOA.Leave.ApplyTimes {
|
||
if strings.Contains(applyTime.Date, req.AllQuery) {
|
||
flag = flag + 1
|
||
break
|
||
}
|
||
}
|
||
}
|
||
if approvalItem.ApprovalOA.GoOut != nil {
|
||
if strings.Contains(approvalItem.ApprovalOA.GoOut.StaffName, req.AllQuery) ||
|
||
strings.Contains(approvalItem.ApprovalOA.GoOut.Reason, req.AllQuery) ||
|
||
strings.Contains(approvalItem.ApprovalOA.GoOut.StaffNum, req.AllQuery) ||
|
||
strings.Contains(approvalItem.ApprovalOA.GoOut.DateOfBrith, req.AllQuery) ||
|
||
strings.Contains(approvalItem.ApprovalOA.GoOut.ActionTime, req.AllQuery) {
|
||
flag = flag + 1
|
||
}
|
||
for _, applyTime := range approvalItem.ApprovalOA.GoOut.ApplyTimes {
|
||
if strings.Contains(applyTime.Date, req.AllQuery) {
|
||
flag = flag + 1
|
||
break
|
||
}
|
||
}
|
||
}
|
||
if approvalItem.ApprovalOA.BusinessTrip != nil {
|
||
if strings.Contains(approvalItem.ApprovalOA.BusinessTrip.StaffName, req.AllQuery) ||
|
||
strings.Contains(approvalItem.ApprovalOA.BusinessTrip.Reason, req.AllQuery) ||
|
||
strings.Contains(approvalItem.ApprovalOA.BusinessTrip.StaffNum, req.AllQuery) ||
|
||
strings.Contains(approvalItem.ApprovalOA.BusinessTrip.ActionTime, req.AllQuery) {
|
||
flag = flag + 1
|
||
}
|
||
for _, itinerary := range approvalItem.ApprovalOA.BusinessTrip.ItineraryList {
|
||
if strings.Contains(itinerary.Vehicle, req.AllQuery) ||
|
||
strings.Contains(itinerary.EndAddress, req.AllQuery) ||
|
||
strings.Contains(itinerary.StartAddress, req.AllQuery) {
|
||
flag = flag + 1
|
||
break
|
||
}
|
||
}
|
||
}
|
||
}
|
||
if approvalItem.FinancialForm != nil {
|
||
if strings.Contains(approvalItem.FinancialForm.PaymentCompany, req.AllQuery) ||
|
||
strings.Contains(approvalItem.FinancialForm.TransactionDepartment, req.AllQuery) ||
|
||
strings.Contains(approvalItem.FinancialForm.Payee, req.AllQuery) ||
|
||
strings.Contains(approvalItem.FinancialForm.BeneficiaryBank, req.AllQuery) ||
|
||
strings.Contains(approvalItem.FinancialForm.BankNo, req.AllQuery) ||
|
||
strings.Contains(approvalItem.FinancialForm.PaymentMethod, req.AllQuery) {
|
||
flag = flag + 1
|
||
}
|
||
for _, costInfo := range approvalItem.FinancialForm.CostInfo {
|
||
if strings.Contains(costInfo.Description, req.AllQuery) ||
|
||
strings.Contains(costInfo.UnitPrice, req.AllQuery) ||
|
||
strings.Contains(costInfo.CostUnit, req.AllQuery) ||
|
||
strings.Contains(costInfo.UsedDepartment, req.AllQuery) ||
|
||
strings.Contains(costInfo.TotalPrice, req.AllQuery) {
|
||
flag = flag + 1
|
||
break
|
||
}
|
||
}
|
||
for _, invoiceInfo := range approvalItem.FinancialForm.InvoiceInfo {
|
||
if strings.Contains(invoiceInfo.InvoiceDate, req.AllQuery) ||
|
||
strings.Contains(invoiceInfo.InvoiceNo, req.AllQuery) ||
|
||
strings.Contains(invoiceInfo.InvoiceProvider, req.AllQuery) ||
|
||
strings.Contains(invoiceInfo.Amount, req.AllQuery) ||
|
||
strings.Contains(invoiceInfo.Applicant, req.AllQuery) ||
|
||
strings.Contains(invoiceInfo.PaymentMethod, req.AllQuery) ||
|
||
strings.Contains(invoiceInfo.PaymentObj, req.AllQuery) ||
|
||
strings.Contains(invoiceInfo.InvoiceType, req.AllQuery) ||
|
||
strings.Contains(invoiceInfo.Notes, req.AllQuery) ||
|
||
strings.Contains(invoiceInfo.UseTo, req.AllQuery) {
|
||
flag = flag + 1
|
||
break
|
||
}
|
||
}
|
||
}
|
||
if approvalItem.ExhibitionHis != nil {
|
||
if strings.Contains(approvalItem.ExhibitionHis.Address, req.AllQuery) {
|
||
flag = flag + 1
|
||
}
|
||
if len(approvalItem.ExhibitionHis.ApprovalExhibitionHiss) > 0 {
|
||
for _, exhibition := range approvalItem.ExhibitionHis.ApprovalExhibitionHiss {
|
||
if len(exhibition.Artworks) > 0 {
|
||
for _, artwork := range exhibition.Artworks {
|
||
if strings.Contains(artwork.ArtworkName, req.AllQuery) ||
|
||
strings.Contains(artwork.ArtistShowCount, req.AllQuery) ||
|
||
strings.Contains(artwork.SaleAddress, req.AllQuery) ||
|
||
strings.Contains(artwork.Reward, req.AllQuery) ||
|
||
strings.Contains(artwork.Tfnum, req.AllQuery) {
|
||
flag = flag + 1
|
||
break
|
||
}
|
||
}
|
||
}
|
||
if exhibition.ArtExhibitionDetail != nil {
|
||
if strings.Contains(exhibition.ArtExhibitionDetail.ArtistShowCount, req.AllQuery) ||
|
||
strings.Contains(exhibition.ArtExhibitionDetail.ShowTime, req.AllQuery) ||
|
||
strings.Contains(exhibition.ArtExhibitionDetail.ShowName, req.AllQuery) ||
|
||
strings.Contains(exhibition.ArtExhibitionDetail.Address, req.AllQuery) {
|
||
flag = flag + 1
|
||
break
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
if approvalItem.Promotion != nil {
|
||
if strings.Contains(approvalItem.Promotion.StaffName, req.AllQuery) ||
|
||
strings.Contains(approvalItem.Promotion.StaffNum, req.AllQuery) ||
|
||
strings.Contains(approvalItem.Promotion.FileName, req.AllQuery) ||
|
||
strings.Contains(approvalItem.Promotion.NewJob, req.AllQuery) ||
|
||
strings.Contains(approvalItem.Promotion.EffectiveTime, req.AllQuery) ||
|
||
strings.Contains(approvalItem.Promotion.OldJob, req.AllQuery) {
|
||
flag = flag + 1
|
||
}
|
||
|
||
}
|
||
if approvalItem.StaffSupply != nil {
|
||
if strings.Contains(approvalItem.StaffSupply.PositionName, req.AllQuery) ||
|
||
strings.Contains(approvalItem.StaffSupply.JobAsk, req.AllQuery) ||
|
||
strings.Contains(approvalItem.StaffSupply.JoinInTime, req.AllQuery) ||
|
||
strings.Contains(approvalItem.StaffSupply.DepartmentName, req.AllQuery) {
|
||
flag = flag + 1
|
||
}
|
||
|
||
}
|
||
if approvalItem.Employ != nil {
|
||
if strings.Contains(approvalItem.Employ.Post, req.AllQuery) ||
|
||
strings.Contains(approvalItem.Employ.BelongDepartment, req.AllQuery) ||
|
||
strings.Contains(approvalItem.Employ.Name, req.AllQuery) ||
|
||
strings.Contains(approvalItem.Employ.EmployeeType, req.AllQuery) ||
|
||
strings.Contains(approvalItem.Employ.EmployeeNo, req.AllQuery) ||
|
||
strings.Contains(approvalItem.Employ.EntryTime, req.AllQuery) ||
|
||
strings.Contains(approvalItem.Employ.CloseReason, req.AllQuery) ||
|
||
strings.Contains(approvalItem.Employ.ConfirmDate, req.AllQuery) ||
|
||
strings.Contains(approvalItem.Employ.Remark, req.AllQuery) ||
|
||
strings.Contains(approvalItem.Employ.Mobile, req.AllQuery) {
|
||
flag = flag + 1
|
||
}
|
||
|
||
}
|
||
if approvalItem.CheckIn != nil {
|
||
if strings.Contains(approvalItem.CheckIn.SaleAddress, req.AllQuery) ||
|
||
strings.Contains(approvalItem.CheckIn.DetailAddress, req.AllQuery) {
|
||
flag = flag + 1
|
||
}
|
||
|
||
}
|
||
if flag > 0 {
|
||
filterData = append(filterData, approvalItem)
|
||
}
|
||
}
|
||
fmt.Println("========================匹配所有字段结束,匹配结果==============================")
|
||
fmt.Println(filterData)
|
||
res.Data = filterData
|
||
|
||
}
|
||
|
||
//字段国际化
|
||
if len(res.Data) > 0 {
|
||
lang := c.Request.Header.Get("Accept-Language")
|
||
for _, one := range res.Data {
|
||
one.TypeName = m.GetLanguageType(lang, one.TypeName)
|
||
|
||
if one.ApprovalOA != nil {
|
||
if one.ApprovalOA.Leave != nil {
|
||
for _, applyTime := range one.ApprovalOA.Leave.ApplyTimes {
|
||
applyTime.M = m.GetLanguageType(lang, applyTime.M)
|
||
}
|
||
}
|
||
if one.ApprovalOA.Turnover != nil {
|
||
for _, applyTime := range one.ApprovalOA.Turnover.ApplyTimes {
|
||
applyTime.M = m.GetLanguageType(lang, applyTime.M)
|
||
}
|
||
}
|
||
if one.ApprovalOA.BusinessTrip != nil {
|
||
for _, itinerary := range one.ApprovalOA.BusinessTrip.ItineraryList {
|
||
for _, applyTime := range itinerary.ApplyTimes {
|
||
applyTime.M = m.GetLanguageType(lang, applyTime.M)
|
||
}
|
||
}
|
||
}
|
||
if one.ApprovalOA.GoOut != nil {
|
||
for _, applyTime := range one.ApprovalOA.GoOut.ApplyTimes {
|
||
applyTime.M = m.GetLanguageType(lang, applyTime.M)
|
||
}
|
||
}
|
||
if one.ApprovalOA.OutWork != nil {
|
||
for _, applyTime := range one.ApprovalOA.OutWork.ApplyTimes {
|
||
applyTime.M = m.GetLanguageType(lang, applyTime.M)
|
||
}
|
||
}
|
||
if one.ApprovalOA.OverTime != nil {
|
||
for _, applyTime := range one.ApprovalOA.OverTime.ApplyTimes {
|
||
applyTime.M = m.GetLanguageType(lang, applyTime.M)
|
||
}
|
||
}
|
||
if one.ApprovalOA.MakeUp != nil {
|
||
for _, applyTime := range one.ApprovalOA.MakeUp.ApplyTimes {
|
||
applyTime.M = m.GetLanguageType(lang, applyTime.M)
|
||
}
|
||
}
|
||
|
||
}
|
||
|
||
}
|
||
}
|
||
|
||
if authRes.Hava && req.IsSpecial {
|
||
retApproval := new(m.RetApproval)
|
||
categoryApproval := new(m.CategoryApproval)
|
||
categoryApproval.ClaimsApply = make([]*api.CreateRequest, 0)
|
||
categoryApproval.PaymentsApply = make([]*api.CreateRequest, 0)
|
||
categoryApproval.DeploymentApply = make([]*api.CreateRequest, 0)
|
||
categoryApproval.ContractApply = make([]*api.CreateRequest, 0)
|
||
categoryApproval.SealApply = make([]*api.CreateRequest, 0)
|
||
categoryApproval.OaApply = make([]*api.CreateRequest, 0)
|
||
categoryApproval.OtherApply = make([]*api.CreateRequest, 0)
|
||
|
||
var (
|
||
claimsEnv map[string]string
|
||
PaymentsEnv map[string]string
|
||
DeploymentEnv map[string]string
|
||
ContractEnv map[string]string
|
||
SealEnv map[string]string
|
||
OAEnv map[string]string
|
||
)
|
||
|
||
if config.Env == "prod" {
|
||
claimsEnv = m.ProdClaims
|
||
PaymentsEnv = m.ProdPayments
|
||
DeploymentEnv = m.ProdDeployment
|
||
ContractEnv = m.ProdContract
|
||
SealEnv = m.ProdSeal
|
||
OAEnv = m.ProdOA
|
||
} else {
|
||
claimsEnv = m.DevClaims
|
||
PaymentsEnv = m.DevPayments
|
||
DeploymentEnv = m.DevDeployment
|
||
ContractEnv = m.DevContract
|
||
SealEnv = m.DevSeal
|
||
OAEnv = m.DevOA
|
||
}
|
||
|
||
// 做分类
|
||
for i := 0; i < len(res.Data); i++ {
|
||
if res.Data[i].Type == claimsEnv[res.Data[i].Type] {
|
||
categoryApproval.ClaimsApply = append(categoryApproval.ClaimsApply, res.Data[i])
|
||
categoryApproval.Claims++
|
||
continue
|
||
} else if res.Data[i].Type == PaymentsEnv[res.Data[i].Type] {
|
||
categoryApproval.PaymentsApply = append(categoryApproval.PaymentsApply, res.Data[i])
|
||
categoryApproval.Payments++
|
||
continue
|
||
} else if res.Data[i].Type == DeploymentEnv[res.Data[i].Type] {
|
||
categoryApproval.DeploymentApply = append(categoryApproval.DeploymentApply, res.Data[i])
|
||
categoryApproval.Deployment++
|
||
continue
|
||
} else if res.Data[i].Type == ContractEnv[res.Data[i].Type] {
|
||
categoryApproval.ContractApply = append(categoryApproval.ContractApply, res.Data[i])
|
||
categoryApproval.Contract++
|
||
continue
|
||
} else if res.Data[i].Type == SealEnv[res.Data[i].Type] {
|
||
categoryApproval.SealApply = append(categoryApproval.SealApply, res.Data[i])
|
||
categoryApproval.Seal++
|
||
continue
|
||
} else if res.Data[i].Type == OAEnv[res.Data[i].Type] {
|
||
categoryApproval.OaApply = append(categoryApproval.OaApply, res.Data[i])
|
||
categoryApproval.Oa++
|
||
continue
|
||
} else {
|
||
categoryApproval.OtherApply = append(categoryApproval.OtherApply, res.Data[i])
|
||
categoryApproval.Other++
|
||
continue
|
||
}
|
||
}
|
||
|
||
retApproval.Data = categoryApproval
|
||
retApproval.Count = res.Count
|
||
|
||
service.Success(c, retApproval)
|
||
} else {
|
||
service.Success(c, res)
|
||
}
|
||
|
||
}
|
||
|
||
// SetStatusBatchV2 批量审批
|
||
func SetStatusBatchV2(c *gin.Context) {
|
||
//var setStatusBatchReq vo.SetStatusBatchReq
|
||
setStatusBatchReq := make([]vo.SetStatus, 0)
|
||
if err := c.ShouldBindBodyWith(&setStatusBatchReq, binding.JSON); err != nil {
|
||
service.Error(c, e.Error, err)
|
||
return
|
||
}
|
||
|
||
fmt.Println("============ 获取 审批 批量 审批 ==============")
|
||
fmt.Printf("batch %+v\n", setStatusBatchReq)
|
||
logger.Errorf("batch %+v\n", setStatusBatchReq)
|
||
fmt.Println("============ 获取 审批 批量 审批 ==============")
|
||
|
||
if len(setStatusBatchReq) < 1 {
|
||
service.Error(c, e.Error, errors.New("当前无审批"))
|
||
return
|
||
}
|
||
|
||
userInfo := login.GetUserInfoFromC(c)
|
||
for i := 0; i < len(setStatusBatchReq); i++ {
|
||
req := api.StatusRequest{}
|
||
req.Domain = setStatusBatchReq[i].Domain
|
||
req.ID = setStatusBatchReq[i].ID
|
||
req.Reply = setStatusBatchReq[i].Reply
|
||
req.WorkFlowId = setStatusBatchReq[i].WorkFlowId
|
||
req.Status = setStatusBatchReq[i].Status
|
||
req.Level = setStatusBatchReq[i].Level
|
||
req.Title = setStatusBatchReq[i].Title
|
||
req.UserId = userInfo.ID
|
||
req.LeaveBalance = setStatusBatchReq[i].LeaveBalance
|
||
req.Tips = setStatusBatchReq[i].Tips
|
||
|
||
levelReq := api.NowLevelByInfoRequestV2{
|
||
ApprovalID: req.ID,
|
||
NowUserId: userInfo.ID,
|
||
}
|
||
fmt.Println("============== 开始查询审批流程 ==============")
|
||
levelRes, err := service.ApprovalProvider.NowLevelByInfoV2(context.Background(), &levelReq)
|
||
if err != nil {
|
||
service.Error(c, e.Error, err)
|
||
return
|
||
}
|
||
fmt.Printf("levelRes %+v\n", levelRes)
|
||
fmt.Println("============== 开始查询审批流程 ==============")
|
||
|
||
if req.UserId != levelRes.UserID {
|
||
service.Error(c, e.Error, errors.New("本次审批人出现错误"))
|
||
return
|
||
}
|
||
|
||
req.WorkFlowId = levelRes.ID
|
||
|
||
// 查询 未审批前的审批
|
||
beforeApproval := QueryApprovalSetStatusBefore(req.ID)
|
||
if beforeApproval == nil {
|
||
service.Error(c, e.Error, errors.New(e.ErrorQueryApprovalContent))
|
||
return
|
||
}
|
||
|
||
if strings.Contains(beforeApproval.Type, "handover") {
|
||
reqList := &api.ListRequest{}
|
||
reqList.Domain = beforeApproval.Domain
|
||
reqList.Type = "turnover"
|
||
reqList.UserID = beforeApproval.SubmitterID
|
||
reqList.Status = 2
|
||
submitRes2, err := service.ApprovalProvider.MySubmit(context.Background(), reqList)
|
||
if err != nil {
|
||
service.Error(c, e.Error, errors.New("查询已提交的离职审批失败"))
|
||
return
|
||
}
|
||
|
||
if len(submitRes2.Data) < 1 {
|
||
service.Error(c, e.Error, errors.New("离职申请未完成"))
|
||
return
|
||
}
|
||
}
|
||
|
||
fmt.Println("++++++++++++++++++++ QueryApprovalSetStatusBefore =============================")
|
||
fmt.Printf("beforeApproval : %+v\n", beforeApproval)
|
||
fmt.Println("++++++++++++++++++++ QueryApprovalSetStatusBefore =============================")
|
||
|
||
_, err = service.ApprovalProvider.SetStatusV2(context.Background(), &req)
|
||
if err != nil {
|
||
service.Error(c, e.Error, err)
|
||
return
|
||
}
|
||
|
||
detailReq := api.DetailRequest{ID: req.ID}
|
||
detail, err := service.ApprovalProvider.Detail(context.Background(), &detailReq)
|
||
if err != nil {
|
||
service.Error(c, e.Error, err)
|
||
return
|
||
}
|
||
|
||
fmt.Println("++++++++++++++++++++ QueryApprovalSetStatusAfter =============================")
|
||
fmt.Printf("Detail : %+v\n", detail)
|
||
fmt.Println("++++++++++++++++++++ QueryApprovalSetStatusAfter =============================")
|
||
|
||
// 同步至 es
|
||
go func() {
|
||
updateErr := logic.UpdateIndexApprovalDoc(config.ApprovalIndex, detail)
|
||
if updateErr != nil {
|
||
zap.L().Error("同步至 es 失败 更新", zap.Error(updateErr))
|
||
//return
|
||
}
|
||
}()
|
||
|
||
_, err = verifyWorkflowIsActive(detail.WorkFlows)
|
||
if err != nil {
|
||
service.Error(c, e.Error, err)
|
||
return
|
||
}
|
||
|
||
//如果审批通过,推送给全部抄送人
|
||
if beforeApproval.Status == 1 && detail.Status == 2 && len(detail.CopyUsers) > 0 {
|
||
for _, user := range detail.CopyUsers {
|
||
//审批过后推送给下一个审批人
|
||
err = service.SendAppMessage("审批通知", "有一条<"+detail.TypeName+">已抄送给您,点击查看详情 >", user.ID, detail.ID, "copy")
|
||
if err != nil {
|
||
fmt.Println("==============APP推送失败=====================")
|
||
fmt.Println(err)
|
||
}
|
||
}
|
||
|
||
} else {
|
||
//审批过后推送给下一个审批人
|
||
err = service.SendAppMessage("审批通知", "您有一条<"+detail.TypeName+">审批待处理,点击查看详情 >", detail.NowUserId, detail.ID, "approval")
|
||
if err != nil {
|
||
fmt.Println("==============APP推送失败=====================")
|
||
fmt.Println(err)
|
||
}
|
||
}
|
||
|
||
if detail.TypeName == "任命审批" {
|
||
StoreBaiduChainApprovalFile(req.ID)
|
||
}
|
||
|
||
// 审批成功查询用户部门的信息,提交画作服修改画作仓库状态
|
||
|
||
if detail.TypeName == "画作申请审批" {
|
||
var ids []int32
|
||
for _, tt := range detail.Work.ApprovalWorks {
|
||
ids = append(ids, int32(tt.ArtworkID))
|
||
}
|
||
|
||
fmt.Println("请求画作申请审批", ids)
|
||
if len(ids) > 0 {
|
||
err = submitArtwork(req.UserId, ids)
|
||
if err != nil {
|
||
service.Error(c, e.Error, err)
|
||
return
|
||
}
|
||
}
|
||
}
|
||
|
||
if strings.Contains(beforeApproval.Type, "turnover") && beforeApproval.Status == e.ApprovalWorkStatusDoing && detail.Status == e.ApprovalWorkStatusOk {
|
||
err = turnoverUpdateAccountEmployee(c, detail.ApprovalOA.Turnover)
|
||
if err != nil {
|
||
service.Error(c, e.Error, err)
|
||
return
|
||
}
|
||
}
|
||
if strings.Contains(beforeApproval.Type, "turnover") && (detail.Status == e.ApprovalWorkStatusRevokeOk || detail.Status == e.ApprovalWorkStatusFail) {
|
||
updateDeductAnnualLeaveZeroClearing(detail.ApprovalOA.Turnover)
|
||
}
|
||
// approval 审批状态 同步到 oa 审批
|
||
if e.TypeMap[detail.Type] == "oa" {
|
||
// 查询 审批状态已经 更新的 审批信息
|
||
updatedReq := api.DetailRequest{ID: req.ID}
|
||
updatedDetail, detailErr := service.ApprovalProvider.Detail(context.Background(), &updatedReq)
|
||
if detailErr != nil {
|
||
service.Error(c, e.Error, detailErr)
|
||
return
|
||
}
|
||
|
||
if req.LeaveBalance != 0 && updatedDetail.ApprovalOA.LeaveApply != nil {
|
||
//leaveBalance, _ := strconv.ParseFloat(req.LeaveBalance, 10)
|
||
updatedDetail.ApprovalOA.LeaveApply.LeaveBalance = req.LeaveBalance
|
||
}
|
||
// 育儿假申请 独生子女护理假申请 撤销成功
|
||
if updatedDetail.Status == 7 && (detail.Type == "parentalLeaveApply" || detail.Type == "nursingLeaveApply") {
|
||
updatedDetail.ApprovalOA.LeaveApply.LeaveBalance = 0
|
||
}
|
||
|
||
_, updateErr := UpdateApprovalStatusToOAStatus(updatedDetail)
|
||
if updateErr != nil {
|
||
service.Error(c, e.Error, updateErr)
|
||
return
|
||
}
|
||
}
|
||
|
||
// 画展包审批
|
||
logger.Errorf("================================================= %s 1 ======================================", "进入 画展包审批")
|
||
logger.Errorf("batch %+v\n", setStatusBatchReq)
|
||
if detail.Type == TypeExhibition {
|
||
logger.Errorf("================================================= %s 2======================================", "进入 画展包审批")
|
||
logger.Errorf("beforeApproval %+v\n", beforeApproval)
|
||
logger.Errorf("detail %+v\n", detail)
|
||
err = ExhibitionApproveEnter(beforeApproval, detail)
|
||
if err != nil {
|
||
service.Error(c, e.Error, err)
|
||
return
|
||
}
|
||
}
|
||
|
||
// 画展包润格审批
|
||
if detail.Type == TypeArtExhibitionReward {
|
||
err = ExhibitionRewordApproveEnter(beforeApproval, detail)
|
||
if err != nil {
|
||
service.Error(c, e.Error, err)
|
||
return
|
||
}
|
||
}
|
||
|
||
// 画展包修改审批
|
||
if detail.Type == TypeShowUpdate {
|
||
err = ShowUpdateApproveEnter(beforeApproval, detail)
|
||
if err != nil {
|
||
service.Error(c, e.Error, err)
|
||
return
|
||
}
|
||
}
|
||
|
||
if strings.Contains(detail.TypeName, "人员增补申请") {
|
||
err = postApproveSetStatusEnter(userInfo, detail)
|
||
if err != nil {
|
||
service.Error(c, e.Error, err)
|
||
return
|
||
}
|
||
}
|
||
|
||
if strings.Contains(detail.Type, "employ") {
|
||
err := offerApproveSetStatusEnter(c, userInfo, &req, detail)
|
||
if err != nil {
|
||
service.Error(c, e.Error, err)
|
||
return
|
||
}
|
||
}
|
||
|
||
if detail.Type == "checkIn" && detail.Status == e.ApprovalWorkStatusOk {
|
||
err = passSendInfoToSiteSignIn(detail.CheckIn)
|
||
if err != nil {
|
||
service.Error(c, e.Error, err)
|
||
return
|
||
}
|
||
}
|
||
if detail.Status == e.ApprovalWorkStatusOk && strings.Contains(detail.Type, "position") {
|
||
err = processPositionApprovals(detail)
|
||
if err != nil {
|
||
service.Error(c, e.Error, err)
|
||
return
|
||
}
|
||
}
|
||
|
||
//黑名单画展包生成审批,只有审批通过才生成画展包,其他情况不予处理
|
||
if detail.Type == "banShow" && beforeApproval.Status == e.ApprovalWorkStatusDoing && detail.Status == e.ApprovalWorkStatusOk {
|
||
for _, artShow := range detail.Exhibition.ApprovalExhibitions {
|
||
var saveShowReq artShowApi.SaveShowReq
|
||
artworks := make([]*artShowApi.ArtworkDetail, 0)
|
||
saveShowReq.ShowName = artShow.PackageName
|
||
saveShowReq.ArtistUID = artShow.ArtExhibitionDetail.ArtistUID
|
||
saveShowReq.ArtistName = artShow.ArtExhibitionDetail.ArtistName
|
||
saveShowReq.ArtworkNum = int32(artShow.ArtExhibitionDetail.ArtworkNum)
|
||
saveShowReq.CreateTime = artShow.ArtExhibitionDetail.CreateTime
|
||
saveShowReq.ExhibitionType = artShow.ArtExhibitionDetail.ExhibitionType
|
||
saveShowReq.IsInvite = artShow.ArtExhibitionDetail.IsInvite
|
||
saveShowReq.Operator = artShow.ArtExhibitionDetail.Operator
|
||
saveShowReq.PreTime = artShow.ArtExhibitionDetail.ShowTime
|
||
saveShowReq.Ruler = int32(artShow.ArtExhibitionDetail.Ruler)
|
||
saveShowReq.ShowSeq = artShow.ArtExhibitionDetail.ShowSeq
|
||
|
||
for _, artworkOne := range artShow.Artworks {
|
||
item := &artShowApi.ArtworkDetail{
|
||
ArtworkUID: artworkOne.ArtworkUID,
|
||
ArtworkName: artworkOne.ArtworkName,
|
||
ArtistName: artworkOne.ArtistName,
|
||
Length: int32(artworkOne.Length),
|
||
Width: int32(artworkOne.Width),
|
||
Ruler: int32(artworkOne.Ruler),
|
||
SmallPic: artworkOne.SmallPic,
|
||
Tfnum: artworkOne.Tfnum,
|
||
}
|
||
|
||
artworks = append(artworks, item)
|
||
}
|
||
saveShowReq.Artwork = artworks
|
||
|
||
saveShowRes, err := service.GrpcArtShowImpl.CreateShow(context.Background(), &saveShowReq)
|
||
if err != nil {
|
||
service.Error(c, e.Error, err)
|
||
return
|
||
}
|
||
|
||
out := serializer.BuildSyncArtShowUID(&saveShowReq, saveShowRes.ShowUID, nil)
|
||
if len(out.Data) > 0 {
|
||
syncArtShowIDRes, err := service.GrpcArtworkQueryImpl.SyncArtShowId(context.Background(), &out)
|
||
if err != nil {
|
||
logger.Errorf("SyncArtShowId Response err", err)
|
||
service.Error(c, e.Error, errors.New(syncArtShowIDRes.Msg))
|
||
return
|
||
}
|
||
}
|
||
|
||
// 更新 推荐人信息
|
||
if saveShowRes.ShowUID != "" {
|
||
bindAndGetArtPackageRequest := new(artistinfoArtshow.BindAndGetArtPackageRequest)
|
||
bindAndGetArtPackageRequest.ArtPackageUid = saveShowRes.ShowUID
|
||
bindAndGetArtPackageRequest.ArtistUid = saveShowReq.ArtistUID
|
||
bindAndGetArtPackageResponse, err := service.GrpcArtistInfoArtshowImpl.BindAndGetArtPackageAndBrokerSupplement(context.Background(), bindAndGetArtPackageRequest)
|
||
if err != nil {
|
||
service.Success(c, nil)
|
||
}
|
||
if bindAndGetArtPackageResponse.Data.Name != "" {
|
||
artShowAgent := new(artShowApi.ArtShowAgent)
|
||
artShowAgent.Agent = bindAndGetArtPackageResponse.Data.Name
|
||
artShowAgent.ShowUID = saveShowRes.ShowUID
|
||
updateArtShowAgentReq := new(artShowApi.UpdateArtShowAgentReq)
|
||
updateArtShowAgentReq.Data = make([]*artShowApi.ArtShowAgent, 0)
|
||
updateArtShowAgentReq.Data = append(updateArtShowAgentReq.Data, artShowAgent)
|
||
_, err := service.GrpcArtShowImpl.UpdateArtShowAgent(context.Background(), updateArtShowAgentReq)
|
||
if err != nil {
|
||
service.Success(c, nil)
|
||
}
|
||
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
}
|
||
|
||
service.Success(c, nil)
|
||
}
|
||
|
||
// SetStatusBatchExV2 催办后的批量审批
|
||
func SetStatusBatchExV2(c *gin.Context) {
|
||
var setStatusBatchReq vo.SetStatusBatchReq
|
||
if err := c.ShouldBindBodyWith(&setStatusBatchReq, binding.JSON); err != nil {
|
||
service.Error(c, e.Error, err)
|
||
return
|
||
}
|
||
|
||
if len(setStatusBatchReq.Batch) < 1 {
|
||
service.Error(c, e.Error, errors.New("当前无审批"))
|
||
return
|
||
}
|
||
|
||
for i := 0; i < len(setStatusBatchReq.Batch); i++ {
|
||
req := api.StatusRequest{}
|
||
_ = copier.CopyWithOption(&req, setStatusBatchReq.Batch[i], copier.Option{DeepCopy: false})
|
||
|
||
infoReq := account.InfoRequest{ID: req.UserId}
|
||
|
||
infoRes, err := service.AccountProvider.Info(context.Background(), &infoReq)
|
||
if err != nil {
|
||
service.Error(c, e.Error, errors.New(e.GetMsg(e.ErrorGetUserInfo)))
|
||
return
|
||
}
|
||
|
||
if infoRes.Info.ID == 0 || infoRes.Info.NickName == "" || infoRes.Info.Domain == "" {
|
||
service.Error(c, e.Error, errors.New(e.GetMsg(e.ErrorGetUserInfo)))
|
||
return
|
||
}
|
||
|
||
userInfo := login.Info{
|
||
ID: req.UserId,
|
||
NickName: infoRes.Info.NickName,
|
||
}
|
||
|
||
levelReq := api.NowLevelByInfoRequestV2{
|
||
ApprovalID: req.ID,
|
||
NowUserId: userInfo.ID,
|
||
}
|
||
fmt.Println("============== 开始查询审批流程 ==============")
|
||
levelRes, err := service.ApprovalProvider.NowLevelByInfoV2(context.Background(), &levelReq)
|
||
if err != nil {
|
||
service.Error(c, e.Error, err)
|
||
return
|
||
}
|
||
fmt.Printf("levelRes %+v\n", levelRes)
|
||
fmt.Println("============== 开始查询审批流程 ==============")
|
||
|
||
if req.UserId != levelRes.UserID {
|
||
service.Error(c, e.Error, errors.New("本次审批人出现错误"))
|
||
return
|
||
}
|
||
|
||
req.WorkFlowId = levelRes.ID
|
||
|
||
// 查询 未审批前的审批
|
||
beforeApproval := QueryApprovalSetStatusBefore(req.ID)
|
||
if beforeApproval == nil {
|
||
service.Error(c, e.Error, errors.New(e.ErrorQueryApprovalContent))
|
||
return
|
||
}
|
||
|
||
_, err = service.ApprovalProvider.SetStatusV2(context.Background(), &req)
|
||
if err != nil {
|
||
service.Error(c, e.Error, err)
|
||
return
|
||
}
|
||
|
||
detailReq := api.DetailRequest{ID: req.ID}
|
||
detail, err := service.ApprovalProvider.Detail(context.Background(), &detailReq)
|
||
if err != nil {
|
||
service.Error(c, e.Error, err)
|
||
return
|
||
}
|
||
|
||
// 同步至 es
|
||
go func() {
|
||
updateErr := logic.UpdateIndexApprovalDoc(config.ApprovalIndex, detail)
|
||
if updateErr != nil {
|
||
zap.L().Error("同步至 es 失败 更新", zap.Error(updateErr))
|
||
//return
|
||
}
|
||
}()
|
||
|
||
if detail.TypeName == "任命审批" {
|
||
StoreBaiduChainApprovalFile(req.ID)
|
||
}
|
||
|
||
// 审批成功查询用户部门的信息,提交画作服修改画作仓库状态
|
||
|
||
if detail.TypeName == "画作申请审批" {
|
||
var ids []int32
|
||
for _, tt := range detail.Work.ApprovalWorks {
|
||
ids = append(ids, int32(tt.ArtworkID))
|
||
}
|
||
|
||
fmt.Println("请求画作申请审批", ids)
|
||
if len(ids) > 0 {
|
||
err = submitArtwork(req.UserId, ids)
|
||
if err != nil {
|
||
service.Error(c, e.Error, err)
|
||
return
|
||
}
|
||
}
|
||
}
|
||
|
||
if strings.Contains(beforeApproval.Type, "turnover") && beforeApproval.Status == e.ApprovalWorkStatusDoing && detail.Status == e.ApprovalWorkStatusOk {
|
||
loginInfo := login.Info{
|
||
ID: userInfo.ID,
|
||
NickName: "离职审批:" + userInfo.NickName,
|
||
}
|
||
|
||
if infoRes.Info.Extend != nil {
|
||
loginInfo.JumpTo = infoRes.Info.Extend.JumpTo
|
||
}
|
||
|
||
c.Set("jwtInfo", loginInfo)
|
||
|
||
err = turnoverUpdateAccountEmployee(c, detail.ApprovalOA.Turnover)
|
||
if err != nil {
|
||
service.Error(c, e.Error, err)
|
||
return
|
||
}
|
||
}
|
||
if strings.Contains(beforeApproval.Type, "turnover") && (detail.Status == e.ApprovalWorkStatusRevokeOk || detail.Status == e.ApprovalWorkStatusFail) {
|
||
updateDeductAnnualLeaveZeroClearing(detail.ApprovalOA.Turnover)
|
||
}
|
||
|
||
// approval 审批状态 同步到 oa 审批
|
||
if e.TypeMap[detail.Type] == "oa" {
|
||
// 查询 审批状态已经 更新的 审批信息
|
||
updatedReq := api.DetailRequest{ID: req.ID}
|
||
updatedDetail, detailErr := service.ApprovalProvider.Detail(context.Background(), &updatedReq)
|
||
if detailErr != nil {
|
||
service.Error(c, e.Error, detailErr)
|
||
return
|
||
}
|
||
|
||
if req.LeaveBalance != 0 && updatedDetail.ApprovalOA.LeaveApply != nil {
|
||
//leaveBalance, _ := strconv.ParseFloat(req.LeaveBalance, 10)
|
||
updatedDetail.ApprovalOA.LeaveApply.LeaveBalance = req.LeaveBalance
|
||
}
|
||
|
||
_, updateErr := UpdateApprovalStatusToOAStatus(updatedDetail)
|
||
if updateErr != nil {
|
||
service.Error(c, e.Error, updateErr)
|
||
return
|
||
}
|
||
}
|
||
|
||
// 画展包审批
|
||
if detail.Type == TypeExhibition {
|
||
err = ExhibitionApproveEnter(beforeApproval, detail)
|
||
if err != nil {
|
||
service.Error(c, e.Error, err)
|
||
return
|
||
}
|
||
}
|
||
|
||
// 画展包润格审批
|
||
if detail.Type == TypeArtExhibitionReward {
|
||
err = ExhibitionRewordApproveEnter(beforeApproval, detail)
|
||
if err != nil {
|
||
service.Error(c, e.Error, err)
|
||
return
|
||
}
|
||
}
|
||
|
||
// 画展包修改审批
|
||
if detail.Type == TypeShowUpdate {
|
||
err = ShowUpdateApproveEnter(beforeApproval, detail)
|
||
if err != nil {
|
||
service.Error(c, e.Error, err)
|
||
return
|
||
}
|
||
}
|
||
|
||
if strings.Contains(detail.TypeName, "人员增补申请") {
|
||
err = postApproveSetStatusEnter(userInfo, detail)
|
||
if err != nil {
|
||
service.Error(c, e.Error, err)
|
||
return
|
||
}
|
||
}
|
||
|
||
if strings.Contains(detail.Type, "employ") {
|
||
err := offerApproveSetStatusEnter(c, userInfo, &req, detail)
|
||
if err != nil {
|
||
service.Error(c, e.Error, err)
|
||
return
|
||
}
|
||
}
|
||
|
||
if detail.Type == "checkIn" && detail.Status == e.ApprovalWorkStatusOk {
|
||
err = passSendInfoToSiteSignIn(detail.CheckIn)
|
||
if err != nil {
|
||
service.Error(c, e.Error, err)
|
||
return
|
||
}
|
||
}
|
||
if detail.Status == e.ApprovalWorkStatusOk && strings.Contains(detail.Type, "position") {
|
||
err = processPositionApprovals(detail)
|
||
if err != nil {
|
||
service.Error(c, e.Error, err)
|
||
return
|
||
}
|
||
}
|
||
|
||
}
|
||
|
||
service.Success(c, nil)
|
||
}
|
||
|
||
func MakeApprovalAndCopy(in *api.CreateRequest, setting *api.SettingRequest) (*api.ApprovalAndCopy, error) {
|
||
response := &api.ApprovalAndCopy{}
|
||
|
||
approvalUsers, copyUsers, err := MakeApprovalAndCopyUsers(in, setting)
|
||
if err != nil {
|
||
return response, errors.New("组装审批人失败")
|
||
}
|
||
fmt.Println("------------t5---------- start ")
|
||
fmt.Println("1-----", approvalUsers)
|
||
fmt.Println("2-----", copyUsers)
|
||
fmt.Println("------------t5---------- end ")
|
||
index := 0
|
||
for i := 0; i < len(approvalUsers); i++ {
|
||
index++
|
||
approvalUsers[i].Level = uint64(index)
|
||
}
|
||
response.ApprovalUsers = approvalUsers
|
||
response.CopyUsers = copyUsers
|
||
return response, nil
|
||
}
|
||
|
||
func MakeApprovalAndCopyUsers(in *api.CreateRequest, setting *api.SettingRequest) ([]*api.ApprovalUser, []*api.CopyUser, error) {
|
||
approvalUsers := make([]*api.ApprovalUser, 0)
|
||
copyUsers := make([]*api.CopyUser, 0)
|
||
|
||
approvalUsers = in.ApprovalUsers
|
||
copyUsers = in.CopyUsers
|
||
|
||
// 病假 事假
|
||
if in.Type == "leave" || in.Type == "sick" {
|
||
if in.ApprovalOA.Leave.Days >= 2 {
|
||
approvalUsers = GetCombineOaApproveUsers(setting, approvalUsers)
|
||
copyUsers = GetCombineOaCopyUsers(setting, copyUsers)
|
||
} else {
|
||
//if in.IsLeader {
|
||
approvalUsers = GetCombineOaApproveUsers(setting, approvalUsers)
|
||
if len(approvalUsers) > 1 {
|
||
approvalUsers = approvalUsers[:1]
|
||
}
|
||
//}
|
||
|
||
}
|
||
|
||
//新逻辑:产假 流产 独生子女护理假申请 育儿假申请====》直属2级+指定岗位
|
||
//TODO离职暂时放着(in.Type == "turnover")
|
||
} else if in.Type == "maternityLeave" || in.Type == "abortLeave" || in.Type == "nursingLeaveApply" || in.Type == "parentalLeaveApply" {
|
||
approvalUsers = GetCombineOaApproveUsers(setting, approvalUsers)
|
||
copyUsers = GetCombineOaCopyUsers(setting, copyUsers)
|
||
|
||
//新逻辑:加班/外勤 丧假 陪产假 婚假 育儿假 独生子女护理假 哺乳假 孕检假 年假 调休=====》直属1级
|
||
} else if in.Type == "outWork" ||
|
||
in.Type == "overTime" ||
|
||
in.Type == "funeralLeave" ||
|
||
in.Type == "makeUp" ||
|
||
in.Type == "paternityLeave" ||
|
||
in.Type == "maritalLeave" ||
|
||
in.Type == "parentalLeaveApply" ||
|
||
in.Type == "parentalLeave" ||
|
||
in.Type == "nursingLeave" ||
|
||
in.Type == "breastFeedingLeave" ||
|
||
in.Type == "matingCheckLeave" ||
|
||
in.Type == "annualLeave" ||
|
||
in.Type == "dayOff" {
|
||
//if in.IsLeader {
|
||
approvalUsers = GetCombineOaApproveUsers(setting, approvalUsers)
|
||
if len(approvalUsers) > 1 {
|
||
approvalUsers = approvalUsers[:1]
|
||
}
|
||
|
||
}
|
||
|
||
fmt.Println("------------t4---------- start ")
|
||
fmt.Println("1-----", approvalUsers)
|
||
fmt.Println("2-----", copyUsers)
|
||
fmt.Println("------------t4---------- end ")
|
||
|
||
if len(approvalUsers) < 1 {
|
||
return nil, nil, errors.New("组装审批人失败")
|
||
}
|
||
|
||
//// 去重 审批人 剔除 提交人 抄送人 剔除 审批人
|
||
//approvalUsers, copyUsers = UniqueUsersV2(in.SubmitterID, approvalUsers, copyUsers)
|
||
fmt.Println("------------t5---------- start ")
|
||
fmt.Println("1-----", approvalUsers)
|
||
fmt.Println("2-----", copyUsers)
|
||
fmt.Println("------------t5---------- end ")
|
||
return approvalUsers, copyUsers, nil
|
||
}
|
||
|
||
// GetCombineOaApproveUsers oa审批 混合获取
|
||
func GetCombineOaApproveUsers(setting *api.SettingRequest, approvalUser []*api.ApprovalUser) []*api.ApprovalUser {
|
||
approvalUserMap := make(map[uint64]*api.ApprovalUser)
|
||
fmt.Println("------------oa approvalUser t1----------")
|
||
// copyer
|
||
if len(approvalUser) > 0 {
|
||
for _, tt := range approvalUser {
|
||
if _, ok := approvalUserMap[tt.ID]; ok == false {
|
||
approvalUserMap[tt.ID] = tt
|
||
}
|
||
}
|
||
}
|
||
fmt.Printf("oa approvalUser t1 %+v\n----------", approvalUser)
|
||
fmt.Println("------------oa approvalUser t2----------")
|
||
for _, tt := range setting.OaApprovalUsers {
|
||
if _, ok := approvalUserMap[tt.ID]; ok == false {
|
||
approvalUserMap[tt.ID] = tt
|
||
approvalUser = append(approvalUser, tt)
|
||
}
|
||
}
|
||
fmt.Printf("oa approvalUser t2 %+v\n----------", approvalUser)
|
||
|
||
return approvalUser
|
||
}
|
||
|
||
// GetCombineOaCopyUsers oa审批 抄送人 混合获取
|
||
func GetCombineOaCopyUsers(setting *api.SettingRequest, copyUser []*api.CopyUser) []*api.CopyUser {
|
||
copyUserMap := make(map[uint64]*api.CopyUser)
|
||
fmt.Println("------------oa copyUser t1----------")
|
||
// copyer
|
||
if len(copyUser) > 0 {
|
||
for _, tt := range copyUser {
|
||
if _, ok := copyUserMap[tt.ID]; ok == false {
|
||
copyUserMap[tt.ID] = tt
|
||
}
|
||
}
|
||
}
|
||
fmt.Printf("oa copyUser t1 %+v\n----------", copyUser)
|
||
fmt.Println("------------oa copyUser t2----------")
|
||
for _, tt := range setting.OaCopyUsers {
|
||
if _, ok := copyUserMap[tt.ID]; ok == false {
|
||
copyUserMap[tt.ID] = tt
|
||
copyUser = append(copyUser, tt)
|
||
}
|
||
}
|
||
fmt.Printf("oa copyUser t2 %+v\n----------", copyUser)
|
||
|
||
return copyUser
|
||
}
|
||
|
||
func UniqueUsersV2(submitterID uint64, inApprovalUsers []*api.ApprovalUser, inCopyUsers []*api.CopyUser) (approvalUsers []*api.ApprovalUser, copyUsers []*api.CopyUser) {
|
||
approvalUsers = make([]*api.ApprovalUser, 0)
|
||
approvalUserMap := make(map[uint64]*api.ApprovalUser, 0)
|
||
copyUsers = make([]*api.CopyUser, 0)
|
||
//transitionCopyUsers := make([]CopyUser, 0)
|
||
|
||
for i := 0; i < len(inApprovalUsers); i++ {
|
||
approvalUserMap[inApprovalUsers[i].ID] = inApprovalUsers[i]
|
||
if inApprovalUsers[i].ID == submitterID {
|
||
continue
|
||
} else {
|
||
approvalUsers = append(approvalUsers, inApprovalUsers[i])
|
||
}
|
||
}
|
||
|
||
var currentLevel uint64 = 0
|
||
var preLevel uint64 = 0
|
||
for i := 0; i < len(approvalUsers); i++ {
|
||
if i == 0 {
|
||
preLevel = approvalUsers[i].Level
|
||
currentLevel = approvalUsers[i].Level
|
||
} else {
|
||
currentLevel = approvalUsers[i].Level
|
||
if approvalUsers[i].Level == preLevel {
|
||
approvalUsers[i].Level = currentLevel
|
||
} else {
|
||
approvalUsers[i].Level = currentLevel
|
||
preLevel = currentLevel
|
||
currentLevel++
|
||
}
|
||
}
|
||
}
|
||
|
||
approvalUsersMap := make(map[uint64][]*api.ApprovalUser)
|
||
levels := make([]int, 0)
|
||
|
||
for i := 0; i < len(approvalUsers); i++ {
|
||
if approvalUsersMap[approvalUsers[i].Level] == nil {
|
||
levels = append(levels, int(approvalUsers[i].Level))
|
||
}
|
||
approvalUsersMap[approvalUsers[i].Level] = append(approvalUsersMap[approvalUsers[i].Level], approvalUsers[i])
|
||
}
|
||
|
||
newApprovalUsers := make([]*api.ApprovalUser, 0)
|
||
sort.Ints(levels)
|
||
|
||
if len(levels) > 0 {
|
||
for i := 0; i < len(levels); i++ {
|
||
for j := 0; j < len(approvalUsersMap[uint64(levels[i])]); j++ {
|
||
if approvalUsersMap[uint64(levels[i])][j].Level == 0 {
|
||
//approvalUsersMap[uint64(levels[i])][j].Level = uint64(j + 1)
|
||
approvalUsersMap[uint64(levels[i])][j].Level = 1
|
||
approvalUsersMap[uint64(levels[i])][j].Signature = m.AndSignType
|
||
} else {
|
||
approvalUsersMap[uint64(levels[i])][j].Level = approvalUsersMap[uint64(levels[i-1])][len(approvalUsersMap[uint64(levels[i])])-1].Level + 1
|
||
}
|
||
}
|
||
newApprovalUsers = append(newApprovalUsers, approvalUsersMap[uint64(levels[i])]...)
|
||
}
|
||
}
|
||
|
||
approvalUsers = newApprovalUsers
|
||
|
||
if len(inCopyUsers) > 0 {
|
||
for i := 0; i < len(inCopyUsers); i++ {
|
||
if inCopyUsers[i].ID == submitterID {
|
||
continue
|
||
} else if _, ok := approvalUsersMap[inCopyUsers[i].ID]; ok {
|
||
continue
|
||
} else {
|
||
copyUsers = append(copyUsers, inCopyUsers[i])
|
||
}
|
||
}
|
||
}
|
||
|
||
return
|
||
}
|
||
|
||
func FindEmploy(c *gin.Context) {
|
||
var req api.Employ
|
||
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
|
||
service.Error(c, e.Error, errors.New("参数获取错误"))
|
||
return
|
||
}
|
||
|
||
res, err := service.ApprovalProvider.FindEmployJobNum(c, &req)
|
||
if err != nil {
|
||
sentry.CaptureException(err)
|
||
service.Error(c, e.Error, err)
|
||
return
|
||
}
|
||
|
||
service.Success(c, res)
|
||
}
|
||
|
||
func UpdatesOldData(c *gin.Context) {
|
||
var req api.CommonResponse
|
||
//if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
|
||
// service.Error(c, e.Error, errors.New("参数获取错误"))
|
||
// return
|
||
//}
|
||
|
||
res, err := service.ApprovalProvider.UpdatesOldData(c, &req)
|
||
if err != nil {
|
||
sentry.CaptureException(err)
|
||
service.Error(c, e.Error, err)
|
||
return
|
||
}
|
||
|
||
service.Success(c, res)
|
||
}
|
||
|
||
func ExportDetailSetting(c *gin.Context) {
|
||
var req api.CreateRequest
|
||
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
|
||
service.Error(c, e.Error, err)
|
||
return
|
||
}
|
||
userInfo := login.GetUserInfoFromC(c)
|
||
//resGroup, err1 := service.ApprovalProvider.OnlyGroupList(c, &api.ApprovalGroupListRequest{Page: 1, PageSize: 99, Domain: "0"})
|
||
//if err1 != nil {
|
||
// sentry.CaptureException(err1)
|
||
// service.Error(c, e.Error, err1)
|
||
// return
|
||
//}
|
||
settingList := make([]*api.CreateApprovalTypeRequest, 0)
|
||
|
||
//for _, request := range resGroup.GroupList {
|
||
resSetting, err1 := service.ApprovalProvider.ApprovalTypeList(c, &api.ApprovalTypeListRequest{PageSize: 9999, Page: 1, Domain: req.Domain, GroupId: req.ID})
|
||
if err1 != nil {
|
||
service.Error(c, e.Error, err1)
|
||
return
|
||
}
|
||
|
||
if len(resSetting.TypeList) > 0 {
|
||
settingList = append(settingList, resSetting.TypeList...)
|
||
}
|
||
//}
|
||
var err error
|
||
var xlsx *excelize.File
|
||
var exportUrl string
|
||
|
||
xlsx, err = excelize.OpenFile(model.TplPath + "审批流程导出.xlsx")
|
||
if err != nil {
|
||
service.Error(c, e.Error, err)
|
||
return
|
||
}
|
||
|
||
for index, setting := range settingList {
|
||
xlsx.SetCellValue("Sheet1", fmt.Sprintf("A%v", index+2), setting.GroupName)
|
||
xlsx.SetCellValue("Sheet1", fmt.Sprintf("B%v", index+2), setting.Title)
|
||
|
||
//authMap := make(map[string]*api.ApprovalAuth)
|
||
//departmentName := ""
|
||
//for _, auth := range setting.Auths {
|
||
// departmentName = departmentName + "/" + auth.DepartmentName + "-" + auth.PositionName
|
||
//}
|
||
//xlsx.SetCellValue("Sheet1", fmt.Sprintf("C%v", index+2), departmentName)
|
||
approvalUser := ""
|
||
for _, user1 := range setting.ApprovalUsers {
|
||
if user1.ID == 0 {
|
||
//指定部门岗位
|
||
if user1.DepartmentUID != "" && user1.PositionUID != "" {
|
||
listReq := new(account.ListV2Request)
|
||
departmentId, _ := strconv.ParseUint(user1.DepartmentUID, 0, 64)
|
||
positionId, _ := strconv.ParseUint(user1.PositionUID, 0, 64)
|
||
listReq.DepartmentId = uint32(departmentId)
|
||
listReq.PositionId = uint32(positionId)
|
||
// 查询部门下的审批人
|
||
listRes, err3 := service.AccountProvider.ListV2(context.Background(), listReq)
|
||
if err3 != nil {
|
||
sentry.CaptureException(err3)
|
||
service.Error(c, e.Error, err3)
|
||
return
|
||
}
|
||
for _, datum := range listRes.Data {
|
||
if approvalUser == "" {
|
||
approvalUser = datum.NickName
|
||
} else {
|
||
approvalUser = approvalUser + "/" + datum.NickName
|
||
}
|
||
}
|
||
} else if user1.IsDirect == 1 {
|
||
myBossReq := new(department.MyBossesReq)
|
||
if strings.Contains(setting.KeyWord, "employ") {
|
||
myBossReq.DepartmentId = uint32(req.DepartmentID)
|
||
} else {
|
||
myBossReq.UserId = uint32(userInfo.ID)
|
||
myBossReq.DepartmentId = uint32(req.DepartmentID)
|
||
}
|
||
|
||
myBossReq.Level = uint32(user1.Level)
|
||
if user1.IsDesignate == 1 {
|
||
myBossReq.IsDesignate = true
|
||
} else {
|
||
myBossReq.IsDesignate = false
|
||
}
|
||
|
||
fmt.Println("============ 获取 审批 直属领导 审批人 请求参数 ==============")
|
||
fmt.Printf("myBossReq %+v\n", myBossReq)
|
||
fmt.Println("============ 获取 审批 直属领导 审批人 请求参数 ==============")
|
||
|
||
myBossRes, err := service.DepartmentProvider.MyBosses(context.Background(), myBossReq)
|
||
if err != nil {
|
||
sentry.CaptureException(err)
|
||
service.Error(c, e.Error, err)
|
||
return
|
||
}
|
||
for _, datum := range myBossRes.List {
|
||
for _, boss := range datum.Bosses {
|
||
if approvalUser == "" {
|
||
approvalUser = boss.Name
|
||
} else {
|
||
approvalUser = approvalUser + "/" + boss.Name
|
||
}
|
||
}
|
||
}
|
||
}
|
||
//指定人员
|
||
} else {
|
||
if approvalUser == "" {
|
||
approvalUser = user1.Name
|
||
} else {
|
||
approvalUser = approvalUser + "/" + user1.Name
|
||
}
|
||
|
||
}
|
||
|
||
//if user.ID == 0 {
|
||
// isDesignate := ""
|
||
// if user.IsDesignate == 1 {
|
||
// isDesignate = "第"
|
||
// }
|
||
// if user.DepartmentUID == "" || user.PositionUID == "" {
|
||
// approvalUser = approvalUser + "/" + "直属" + isDesignate + strconv.FormatUint(user.Level, 10) + "级"
|
||
// } else {
|
||
// approvalUser = approvalUser + "/" + user.DepartmentName + "-" + user.PositionName
|
||
// }
|
||
//
|
||
//} else {
|
||
//
|
||
// approvalUser = approvalUser + "/" + user.Name
|
||
//}
|
||
}
|
||
xlsx.SetCellValue("Sheet1", fmt.Sprintf("D%v", index+2), approvalUser)
|
||
|
||
copyUserName := ""
|
||
for _, copyUser := range setting.CopyUsers {
|
||
if copyUser.ID == 0 {
|
||
listReq := new(account.ListV2Request)
|
||
departmentId, _ := strconv.ParseUint(copyUser.DepartmentUID, 0, 64)
|
||
positionId, _ := strconv.ParseUint(copyUser.PositionUID, 0, 64)
|
||
listReq.DepartmentId = uint32(departmentId)
|
||
listReq.PositionId = uint32(positionId)
|
||
// 查询部门下的审批人
|
||
listRes, err3 := service.AccountProvider.ListV2(context.Background(), listReq)
|
||
if err3 != nil {
|
||
sentry.CaptureException(err3)
|
||
service.Error(c, e.Error, err3)
|
||
return
|
||
}
|
||
for _, datum := range listRes.Data {
|
||
if copyUserName == "" {
|
||
copyUserName = datum.NickName
|
||
} else {
|
||
copyUserName = copyUserName + "/" + datum.NickName
|
||
}
|
||
}
|
||
|
||
} else {
|
||
if copyUserName == "" {
|
||
copyUserName = copyUser.Name
|
||
} else {
|
||
copyUserName = copyUserName + "/" + copyUser.Name
|
||
}
|
||
|
||
}
|
||
}
|
||
xlsx.SetCellValue("Sheet1", fmt.Sprintf("E%v", index+2), copyUserName)
|
||
|
||
status := "启用"
|
||
if setting.Status != 1 {
|
||
status = "禁用"
|
||
}
|
||
xlsx.SetCellValue("Sheet1", fmt.Sprintf("F%v", index+2), status)
|
||
}
|
||
fileName := "审批流程导出" + ".xlsx"
|
||
var httpType string
|
||
if config.IsHttps {
|
||
httpType = model.HttpsType
|
||
} else {
|
||
httpType = model.HttpType
|
||
}
|
||
if err = xlsx.SaveAs(model.MediaPath + fileName); err != nil {
|
||
return
|
||
}
|
||
exportUrl = fmt.Sprintf("%s%s/static/%s", httpType, c.Request.Host, fileName)
|
||
service.Success(c, map[string]string{
|
||
"ExportUrl": exportUrl,
|
||
})
|
||
|
||
}
|
||
|
||
func CreateAuthQuick(c *gin.Context) {
|
||
var req api.QkCreAuthReq
|
||
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
|
||
service.Error(c, e.Error, errors.New("参数获取错误"))
|
||
return
|
||
}
|
||
|
||
res, err := service.ApprovalProvider.CreateAuthQuick(c, &req)
|
||
if err != nil {
|
||
sentry.CaptureException(err)
|
||
service.Error(c, e.Error, err)
|
||
return
|
||
}
|
||
|
||
service.Success(c, res)
|
||
}
|
||
|
||
func FindTurnoverAndHandover(c *gin.Context) {
|
||
var req api.ApprovalGroupListRequest
|
||
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
|
||
service.Error(c, e.Error, errors.New("参数获取错误"))
|
||
return
|
||
}
|
||
|
||
res, err := service.ApprovalProvider.FindTurnoverAndHandover(c, &req)
|
||
if err != nil {
|
||
sentry.CaptureException(err)
|
||
service.Error(c, e.Error, err)
|
||
return
|
||
}
|
||
|
||
service.Success(c, res)
|
||
}
|
||
|
||
/*
|
||
// 查询部门
|
||
puRequest := &rule.PositionUserListRequest{}
|
||
puRes, err := service.RuleProvider.PositionUserList(context.Background(), puRequest)
|
||
if err != nil {
|
||
service.Error(c, e.Error, err)
|
||
return
|
||
}
|
||
|
||
// 关联职位和部门信息
|
||
for j := range puRes.Data {
|
||
if userInfo.ID == puRes.Data[j].UserId {
|
||
userInfo.PositionUsers = append(userInfo.PositionUsers, &rule.PositionUser{
|
||
PositionID: puRes.Data[j].PositionID,
|
||
PositionName: puRes.Data[j].PositionName,
|
||
DepartmentId: puRes.Data[j].DepartmentId,
|
||
DepartmentCode: puRes.Data[j].DepartmentCode,
|
||
DepartmentName: puRes.Data[j].DepartmentName,
|
||
UserId: puRes.Data[j].UserId,
|
||
UserName: puRes.Data[j].UserName,
|
||
})
|
||
}
|
||
}
|
||
*/
|
||
|
||
func ExportDetailSettingV2(c *gin.Context) {
|
||
var req api.CreateRequest
|
||
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
|
||
service.Error(c, e.Error, err)
|
||
return
|
||
}
|
||
userInfo := login.GetUserInfoFromC(c)
|
||
//resGroup, err1 := service.ApprovalProvider.OnlyGroupList(c, &api.ApprovalGroupListRequest{Page: 1, PageSize: 99, Domain: "0"})
|
||
//if err1 != nil {
|
||
// sentry.CaptureException(err1)
|
||
// service.Error(c, e.Error, err1)
|
||
// return
|
||
//}
|
||
fileName := "审批流程导出" + ".xlsx"
|
||
//var exportUrl string
|
||
|
||
go func(userInfo login.Info, req *api.CreateRequest) {
|
||
var err error
|
||
var xlsx *excelize.File
|
||
|
||
xlsx, err = excelize.OpenFile(model.TplPath + "审批流程导出.xlsx")
|
||
if err != nil {
|
||
service.Error(c, e.Error, err)
|
||
return
|
||
}
|
||
|
||
// 查询部门
|
||
//puRequest := &rule.PositionUserListRequest{}
|
||
//puRes, positionUserListErr := service.RuleProvider.PositionUserList(context.Background(), puRequest)
|
||
//if positionUserListErr != nil {
|
||
// service.Error(c, e.Error, positionUserListErr)
|
||
// return
|
||
//}
|
||
|
||
// 关联职位和部门信息
|
||
//for j := range puRes.Data {
|
||
// if userInfo.ID == puRes.Data[j].UserId {
|
||
// userInfo.PositionUsers = append(userInfo.PositionUsers, &rule.PositionUser{
|
||
// PositionID: puRes.Data[j].PositionID,
|
||
// PositionName: puRes.Data[j].PositionName,
|
||
// DepartmentId: puRes.Data[j].DepartmentId,
|
||
// DepartmentCode: puRes.Data[j].DepartmentCode,
|
||
// DepartmentName: puRes.Data[j].DepartmentName,
|
||
// UserId: puRes.Data[j].UserId,
|
||
// UserName: puRes.Data[j].UserName,
|
||
// })
|
||
// }
|
||
//}
|
||
|
||
typeList := &api.ApprovalTypeListRequest{PageSize: 9999, Page: 1, Domain: req.Domain, GroupId: req.ID}
|
||
|
||
if userInfo.PositionUsers == nil || len(userInfo.PositionUsers) < 1 {
|
||
typeList.Positions = make([]*api.ApprovalTypeListRequest_Position, 0)
|
||
for i := 0; i < len(userInfo.PositionUsers); i++ {
|
||
typeList.Positions = append(typeList.Positions, &api.ApprovalTypeListRequest_Position{
|
||
PositionUID: strconv.FormatUint(userInfo.PositionUsers[i].PositionID, 10),
|
||
DepartmentUID: strconv.FormatUint(userInfo.PositionUsers[i].DepartmentId, 10),
|
||
})
|
||
}
|
||
}
|
||
|
||
//for _, request := range resGroup.GroupList {
|
||
resSetting, err1 := service.ApprovalProvider.ApprovalTypeList(c, typeList)
|
||
if err1 != nil {
|
||
service.Error(c, e.Error, err1)
|
||
return
|
||
}
|
||
|
||
//创建 插入表格的 内容
|
||
rowIndex := 2
|
||
|
||
for i := 0; i < len(userInfo.PositionUsers); i++ {
|
||
|
||
position := userInfo.PositionUsers[i]
|
||
// 组装 审批人 和 抄送人
|
||
for j := 0; j < len(resSetting.TypeList); j++ {
|
||
if m.GetOaType(resSetting.TypeList[j].KeyWord) != "" {
|
||
continue
|
||
}
|
||
makeApprovalUserReq := new(api.CreateRequest)
|
||
makeApprovalUserReq.Domain = resSetting.TypeList[j].Domain
|
||
makeApprovalUserReq.Type = resSetting.TypeList[j].KeyWord
|
||
makeApprovalUserReq.DepartmentID = int64(position.DepartmentId)
|
||
if strings.Contains(makeApprovalUserReq.Type, "employ") {
|
||
makeApprovalUserReq.Employ = new(api.Employ)
|
||
makeApprovalUserReq.Employ.DepartmentId = strconv.FormatInt(makeApprovalUserReq.DepartmentID, 10)
|
||
}
|
||
|
||
fmt.Println("====================获取审批人=========================")
|
||
approvalAndCopy, makeApprovalAndUserErr := makeApprovalAndUser(userInfo, makeApprovalUserReq)
|
||
if err != nil {
|
||
//service.Error(c, e.Error, err)
|
||
//return
|
||
fmt.Println("makeApprovalAndUserErr", makeApprovalAndUserErr)
|
||
continue
|
||
}
|
||
|
||
if approvalAndCopy == nil {
|
||
continue
|
||
}
|
||
|
||
if approvalAndCopy.ApprovalUsers == nil {
|
||
continue
|
||
}
|
||
|
||
if approvalAndCopy.CopyUsers == nil {
|
||
continue
|
||
}
|
||
|
||
approvalUsers := make([]string, 0)
|
||
for k := 0; k < len(approvalAndCopy.ApprovalUsers); k++ {
|
||
approvalUsers = append(approvalUsers, approvalAndCopy.ApprovalUsers[k].Name)
|
||
}
|
||
|
||
copyUsers := make([]string, 0)
|
||
|
||
for k := 0; k < len(approvalAndCopy.CopyUsers); k++ {
|
||
copyUsers = append(copyUsers, approvalAndCopy.CopyUsers[k].Name)
|
||
}
|
||
|
||
value := make([]interface{}, 0)
|
||
value = append(value, userInfo.PositionUsers[i].DepartmentName)
|
||
value = append(value, resSetting.TypeList[j].Title)
|
||
value = append(value, "")
|
||
if approvalUsers != nil && len(approvalUsers) > 0 {
|
||
value = append(value, strings.Join(approvalUsers, "/"))
|
||
} else {
|
||
value = append(value, "")
|
||
}
|
||
|
||
if copyUsers != nil && len(copyUsers) > 0 {
|
||
value = append(value, strings.Join(copyUsers, "/"))
|
||
} else {
|
||
value = append(value, "")
|
||
}
|
||
|
||
status := "启用"
|
||
if resSetting.TypeList[j].Status != 1 {
|
||
status = "禁用"
|
||
}
|
||
//value = append(value, "")
|
||
value = append(value, status)
|
||
|
||
xlsx.SetSheetRow("Sheet1", fmt.Sprintf("A%v", rowIndex), &value)
|
||
|
||
rowIndex++
|
||
}
|
||
}
|
||
|
||
rowIndex = rowIndex + 2
|
||
now := time.Now().Format("2006-01-02 15:04:05")
|
||
xlsx.SetSheetRow("Sheet1", fmt.Sprintf("A%v", rowIndex), &now)
|
||
|
||
if err = xlsx.SaveAs(model.MediaPath + fileName); err != nil {
|
||
return
|
||
}
|
||
//exportUrl = fmt.Sprintf("%s%s/static/%s", httpType, c.Request.Host, fileName)
|
||
}(userInfo, &req)
|
||
|
||
service.ResponseMsg(c, e.SUCCESS, serializer.Response{
|
||
Data: "执行完成",
|
||
Status: e.Ok,
|
||
})
|
||
|
||
}
|
||
|
||
func FindSuperType(c *gin.Context) {
|
||
var req api.ListRequest
|
||
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
|
||
service.Error(c, e.Error, errors.New("参数获取错误"))
|
||
return
|
||
}
|
||
|
||
res, err := service.ApprovalProvider.FindSuperType(c, &req)
|
||
if err != nil {
|
||
sentry.CaptureException(err)
|
||
service.Error(c, e.Error, err)
|
||
return
|
||
}
|
||
|
||
service.Success(c, res)
|
||
}
|
||
|
||
func CreateAuthBatch(c *gin.Context) {
|
||
var req api.CreAuthBatchReq
|
||
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
|
||
service.Error(c, e.Error, errors.New("参数获取错误"))
|
||
return
|
||
}
|
||
|
||
res, err := service.ApprovalProvider.CreateAuthBatch(c, &req)
|
||
if err != nil {
|
||
sentry.CaptureException(err)
|
||
service.Error(c, e.Error, err)
|
||
return
|
||
}
|
||
|
||
service.Success(c, res)
|
||
}
|