fonchain-fiee/pkg/service/approval/approval_new.go
2025-02-19 14:24:15 +08:00

3371 lines
111 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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)
}