Files
lone-services/services/wecom/internal/logic/message/action/review_action.go
T
2026-09-17 10:18:43 +08:00

116 lines
2.4 KiB
Go

package action
import (
"base-service/app/dao"
"base-service/app/models"
"base-service/app/services/wecom/client"
"base-service/pkg/wecom/message"
"base-service/utils"
"context"
"errors"
"fmt"
"strconv"
"time"
)
type ReviewActionService struct {
}
func (s ReviewActionService) UpdateCard(reqData *dao.ReviewActionRequest) error {
lockKey := fmt.Sprintf(
"wecom:review:lock:%s",
reqData.TaskId,
)
ok, err := utils.Redis.SetNX(lockKey, 1, 5*time.Second).Result()
if err != nil {
utils.Logger.Error("redis read filed")
return err
}
if !ok {
utils.Logger.Info("You clicked too fast")
return errors.New("You clicked too fast")
}
w := models.Params{
Eq: map[string]string{
"task_id": reqData.TaskId,
},
}
task := dao.WecomReviewTask{}
err = models.WecomReviewTask{}.Init().GetOne(
w,
&task,
)
if task.ReviewStatus != dao.WecomReviewPending {
utils.Logger.Info("task already reviewed")
return errors.New("task already reviewed")
}
if err != nil {
return err
}
replaceName := dao.WecomReviewExpiredFormat
reviewStatus := dao.WecomReviewExpired
switch reqData.Action {
case dao.WecomReviewActionAgree:
replaceName = dao.WecomReviewAgreeFormat
reviewStatus = dao.WecomReviewAgree
case dao.WecomReviewActionReject:
replaceName = dao.WecomReviewRejectFormat
reviewStatus = dao.WecomReviewReject
case dao.WecomReviewActionExpired:
replaceName = dao.WecomReviewExpiredFormat
reviewStatus = dao.WecomReviewExpired
default:
replaceName = dao.WecomReviewExpiredFormat
reviewStatus = dao.WecomReviewExpired
}
updateReq := &message.UpdateCardRequest{
AgentId: reqData.AgentId,
Atall: dao.NumberOne,
ResponseCode: reqData.ResponseCode,
Button: &message.UpdateButton{
ReplaceName: replaceName,
},
}
messageClient := client.NewMessageClient(dao.WecomTypeReview)
err = messageClient.Update(context.Background(), updateReq)
if err != nil {
utils.Logger.Info("messageclient update filed", err)
return err
}
_, err = models.WecomReviewTask{}.Init().Edit(
w,
map[string]string{
"review_status": strconv.Itoa(reviewStatus),
"response_code": reqData.ResponseCode,
},
)
return err
// 只做更新卡片,去掉发送通知
// notifyJob := dao.WeComJob{
// ObjId: task.ObjId,
// ObjType: task.ObjType,
// Type: dao.WecomTypeNotify,
// NotifyObjId: task.NotifyObjId,
// Message: task.Message,
// }
// return sender.WecomSenderService{}.Send(notifyJob)
}