fonchain-fiee/pkg/service/auth/position/position_v2.go

476 lines
11 KiB
Go
Raw Normal View History

2025-02-19 06:24:15 +00:00
package position
import (
"dubbo.apache.org/dubbo-go/v3/common/logger"
"encoding/json"
"errors"
"fmt"
"github.com/fonchain_enterprise/fonchain-main/api/approval"
"github.com/fonchain_enterprise/fonchain-main/api/department"
api "github.com/fonchain_enterprise/fonchain-main/api/position"
"github.com/fonchain_enterprise/fonchain-main/api/recruit"
"github.com/fonchain_enterprise/fonchain-main/pkg/cache"
"github.com/fonchain_enterprise/fonchain-main/pkg/e"
"github.com/fonchain_enterprise/fonchain-main/pkg/model/login"
"github.com/fonchain_enterprise/fonchain-main/pkg/model/query"
v2 "github.com/fonchain_enterprise/fonchain-main/pkg/model/vo/v2"
"github.com/fonchain_enterprise/fonchain-main/pkg/serializer"
"github.com/fonchain_enterprise/fonchain-main/pkg/service"
"github.com/gin-gonic/gin"
"github.com/gin-gonic/gin/binding"
"github.com/go-redis/redis"
"github.com/google/uuid"
"github.com/jinzhu/copier"
)
func CreateV2(c *gin.Context) {
var req api.CreateRequest
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.Error, err)
return
}
userInfo, err := login.GetUserInfoFromCV2(c)
if err != nil {
service.Error(c, e.Error, err)
return
}
if req.DepartmentID != 0 {
departmentRes, err := service.DepartmentProvider.Detail(c, &department.DetailRequest{ID: int64(req.DepartmentID)})
if err != nil {
service.Error(c, e.Error, err)
return
}
req.DepartmentName = departmentRes.Name
}
req.Rules = serializer.GetPositionRulesFormTreeV2(req.PositionTreeRule)
req.OperatorName = userInfo.NickName
res, err := service.PositionProvider.Create(c, &req)
if err != nil {
service.Error(c, e.Error, err)
return
}
req.ID = res.ID
req.PositionTreeRule = nil
req.Rules = nil
newRecord := &api.LogRequest{
OperateType: "add",
Info: "新增“" + req.Name + "”岗位",
OperatorName: userInfo.NickName,
OperatorTel: userInfo.TelNum,
OperatorId: uint32(userInfo.ID),
PositionId: uint32(req.ID),
}
_, _ = service.PositionProvider.CreatePositionLog(c, newRecord)
service.Success(c, &req)
return
}
func UpdateV2(c *gin.Context) {
var req api.CreateRequest
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.Error, err)
return
}
oldRes, oldErr := service.PositionProvider.DetailV2(c, &api.DetailRequest{ID: req.ID})
logger.Error("---------1请求更新 postion detail_v2 :", oldRes, oldRes)
if oldErr != nil {
service.Error(c, e.Error, oldErr)
return
}
req.Rules = serializer.GetPositionRulesFormTreeV2(req.PositionTreeRule)
logger.Error("---------2请求更新 postion detail_v2 :", req.Rules)
userInfo, err := login.GetUserInfoFromCV2(c)
logger.Error("---------3请求更新 postion detail_v2 :", userInfo, err)
if err != nil {
service.Error(c, e.Error, err)
return
}
req.OperatorName = userInfo.NickName
res, err := service.PositionProvider.Update(c, &req)
logger.Error("---------4请求更新 postion detail_v2 :", res, err)
if err != nil {
service.Error(c, e.Error, err)
return
}
newRecord := &api.LogRequest{
OperateType: "edit",
Info: "修改“" + req.Name + "“岗位",
OperatorName: userInfo.NickName,
OperatorTel: userInfo.TelNum,
OperatorId: uint32(userInfo.ID),
PositionId: uint32(req.ID),
}
if oldRes.Name != req.Name {
newRecord.Info = "原“" + oldRes.Name + "“改为“" + req.Name + "“"
}
s1, err := service.PositionProvider.CreatePositionLog(c, newRecord)
logger.Error("---------5请求更新 postion detail_v2 :", s1, err)
service.Success(c, res)
return
}
//CreateModel 新增模版
func CreateModel(c *gin.Context) {
uuidString := uuid.NewString()
var req query.CreateModelQuery
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.Error, err)
return
}
res, err := service.PositionProvider.DetailV2(c, &api.DetailRequest{ID: uint64(req.Id)})
if err != nil {
service.Error(c, e.Error, err)
return
}
newObj := new(v2.CreateRequest)
err = copier.Copy(&newObj, res)
if err != nil {
service.Error(c, e.Error, err)
return
}
if req.Name != "" {
newObj.Name = req.Name
}
newObj.Uuid = uuidString
b, err := json.Marshal(newObj)
if err != nil {
service.Error(c, e.Error, err)
return
}
keyString := cache.GetPositionModelStringKey(uuidString)
cache.RedisClient.Set(keyString, string(b), 0)
cache.RedisClient.ZAdd(cache.GetPositionModelZsetKey(), redis.Z{
Score: cache.GetZSetMaxScore(cache.GetPositionModelZsetKey()),
Member: keyString,
})
service.Success(c, "")
return
}
//DetailModel 删除模版
func DetailModel(c *gin.Context) {
var req query.CommonUUid
var temp *v2.CreateRequest
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.Error, err)
return
}
listString, err := cache.RedisClient.Get(cache.GetPositionModelStringKey(req.Uuid)).Result()
if err != nil {
service.Error(c, e.Error, err)
return
}
err = json.Unmarshal([]byte(listString), &temp)
if err != nil {
service.Error(c, e.Error, err)
return
}
service.Success(c, temp)
return
}
// LogList 删除模版
func LogList(c *gin.Context) {
var req api.LogListRequest
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.Error, err)
return
}
res, err := service.PositionProvider.PositionLogList(c, &req)
if err != nil {
service.Error(c, e.Error, err)
return
}
service.Success(c, res)
return
}
func BatchBindAuth(c *gin.Context) {
var req api.BatchAddRulesRequest
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.Error, err)
return
}
userInfo, err := login.GetUserInfoFromCV2(c)
if err != nil {
service.Error(c, e.Error, err)
return
}
req.OperatorName = userInfo.NickName
res, err := service.PositionProvider.BatchAddPositionRules(c, &req)
if err != nil {
service.Error(c, e.Error, err)
return
}
service.Success(c, res)
return
}
//ListModel 删除模版
func ListModel(c *gin.Context) {
var req query.CommonUUid
var res []v2.ModelInfo
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.Error, err)
return
}
// 获取有序集合中的元素,按分数降序排列
keyList, err := cache.RedisClient.ZRevRange(cache.GetPositionModelZsetKey(), 0, -1).Result()
if err != nil {
service.Error(c, e.Error, err)
return
}
if len(keyList) <= 0 {
service.Success(c, nil)
return
}
listString, err := cache.RedisClient.MGet(keyList...).Result()
// 将[]interface{}转换为[]string
for _, v := range listString {
// 类型断言将interface{}断言为string
strVal, ok := v.(string)
if !ok {
continue
}
var temp v2.CreateRequest
if err := json.Unmarshal([]byte(strVal), &temp); err == nil {
res = append(res, v2.ModelInfo{Uuid: temp.Uuid, Name: temp.Name})
}
}
service.Success(c, res)
return
}
//DeleteModel 删除模版
func DeleteModel(c *gin.Context) {
var req query.CommonUUid
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.Error, err)
return
}
keyString := cache.GetPositionModelStringKey(req.Uuid)
cache.RedisClient.ZRem(cache.GetPositionModelZsetKey(), keyString)
cache.RedisClient.Del(keyString)
service.Success(c, nil)
return
}
func DetailV2(c *gin.Context) {
var req api.DetailRequest
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.Error, err)
return
}
userInfo, err := login.GetUserInfoFromCV2(c)
if err != nil {
service.Error(c, e.Error, err)
return
}
res, err := service.PositionProvider.DetailV2(c, &req)
if err != nil {
service.Error(c, e.Error, err)
return
}
newObj := new(v2.CreateRequest)
err = copier.Copy(&newObj, res)
if err != nil {
service.Error(c, e.Error, err)
return
}
newRecord := &api.LogRequest{
OperateType: "detail",
Info: "查看“" + res.Name + "“岗位",
OperatorName: userInfo.NickName,
OperatorTel: userInfo.TelNum,
OperatorId: uint32(userInfo.ID),
PositionId: uint32(req.ID),
}
_, _ = service.PositionProvider.CreatePositionLog(c, newRecord)
service.Success(c, newObj)
}
func BatchRemove(c *gin.Context) {
var req api.BatchRemoveRequest
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.Error, err)
return
}
userInfo, err := login.GetUserInfoFromCV2(c)
if err != nil {
service.Error(c, e.Error, err)
return
}
res1, err1 := service.PositionProvider.DetailV2(c, &api.DetailRequest{ID: uint64(req.IDs[0])})
if err1 != nil {
service.Error(c, e.Error, err)
return
}
//删除校验
for _, v := range req.IDs {
//查申请
findRes, err := service.ApprovalProvider.FindByPosition(c, &approval.DepartmentAndPosition{PositionUID: fmt.Sprintf("%d", v)})
if err1 != nil {
service.Error(c, e.Error, err)
return
}
if findRes.IsExist == true {
service.Error(c, e.Error, errors.New("正在审批流程中,岗位不可删除;"))
return
}
//查申请
positionRes, err := service.GrpcRecruitClientImpl.PositionQuery(c, &recruit.PositionReq{PageSize: 10, CurPage: 1, Status: 4, PositionId: int64(v)})
if err1 != nil {
service.Error(c, e.Error, err)
return
}
if positionRes.Count >= 1 {
service.Error(c, e.Error, errors.New("人未招满且未终止,岗位不可删除!"))
return
}
//查申请
positionRes, err = service.GrpcRecruitClientImpl.PositionQuery(c, &recruit.PositionReq{PageSize: 10, CurPage: 1, Status: 2, PositionId: int64(v)})
if err1 != nil {
service.Error(c, e.Error, err)
return
}
if positionRes.Count >= 1 {
service.Error(c, e.Error, errors.New("人未招满且未终止(审批通过),岗位不可删除!"))
return
}
}
res, err := service.PositionProvider.BatchRemove(c, &req)
if err != nil {
service.Error(c, e.Error, err)
return
}
for _, v := range req.IDs {
_, err = service.ApprovalProvider.DeleteByPosition(c, &approval.DepartmentAndPosition{PositionUID: fmt.Sprintf("%d", v)})
if err1 != nil {
service.Error(c, e.Error, err)
return
}
}
newRecord := &api.LogRequest{
OperateType: "del",
Info: "删除“" + res1.Name + "“岗位",
OperatorName: userInfo.NickName,
OperatorTel: userInfo.TelNum,
OperatorId: uint32(userInfo.ID),
PositionId: req.IDs[0],
}
_, _ = service.PositionProvider.CreatePositionLog(c, newRecord)
service.Success(c, res)
return
}
func ListV2(c *gin.Context) {
var req api.ListRequest
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.Error, err)
return
}
if req.UpdateEndAt != "" {
req.UpdateEndAt += " 23:59:59"
}
res, err := service.PositionProvider.List(c, &req)
if err != nil {
service.Error(c, e.Error, err)
return
}
newObj := new(v2.ListResponse)
err = copier.Copy(&newObj, res)
if err != nil {
service.Error(c, e.Error, err)
return
}
service.Success(c, newObj)
}
func RecordLog() {
}