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