|
|
@@ -55,25 +55,29 @@ func (s *Server) TaskApply(c *gin.Context) {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- // 检查用户今日领取数量
|
|
|
- today := time.Now().Format("2006-01-02")
|
|
|
- var todayCount int64
|
|
|
- db.Model(&entity.DtUserTask{}).
|
|
|
- Where("user_id = ? AND task_id = ? AND DATE(FROM_UNIXTIME(created_at)) = ?", userId, req.TaskId, today).
|
|
|
- Count(&todayCount)
|
|
|
- if int(todayCount) >= task.DailyLimit {
|
|
|
- ctx.Fail("daily_limit_reached")
|
|
|
- return
|
|
|
+ // 检查用户今日领取数量(0表示不限制)
|
|
|
+ if task.DailyLimit > 0 {
|
|
|
+ today := time.Now().Format("2006-01-02")
|
|
|
+ var todayCount int64
|
|
|
+ db.Model(&entity.DtUserTask{}).
|
|
|
+ Where("user_id = ? AND task_id = ? AND DATE(FROM_UNIXTIME(created_at)) = ?", userId, req.TaskId, today).
|
|
|
+ Count(&todayCount)
|
|
|
+ if int(todayCount) >= task.DailyLimit {
|
|
|
+ ctx.Fail("daily_limit_reached")
|
|
|
+ return
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
- // 检查用户总领取数量
|
|
|
- var totalCount int64
|
|
|
- db.Model(&entity.DtUserTask{}).
|
|
|
- Where("user_id = ? AND task_id = ? AND status != ?", userId, req.TaskId, entity.UserTaskStatusAbandoned).
|
|
|
- Count(&totalCount)
|
|
|
- if int(totalCount) >= task.TotalLimit {
|
|
|
- ctx.Fail("total_limit_reached")
|
|
|
- return
|
|
|
+ // 检查用户总领取数量(0表示不限制)
|
|
|
+ if task.TotalLimit > 0 {
|
|
|
+ var totalCount int64
|
|
|
+ db.Model(&entity.DtUserTask{}).
|
|
|
+ Where("user_id = ? AND task_id = ? AND status != ?", userId, req.TaskId, entity.UserTaskStatusAbandoned).
|
|
|
+ Count(&totalCount)
|
|
|
+ if int(totalCount) >= task.TotalLimit {
|
|
|
+ ctx.Fail("total_limit_reached")
|
|
|
+ return
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
// 检查是否有进行中或待审核的任务
|
|
|
@@ -144,8 +148,11 @@ func (s *Server) TaskSubmit(c *gin.Context) {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
- // 检查状态
|
|
|
- if userTask.Status != entity.UserTaskStatusPending {
|
|
|
+ // 检查状态:进行中(0)、审核失败(-1)、已拒绝(3)或已打回(5)的任务可以提交
|
|
|
+ if userTask.Status != entity.UserTaskStatusPending &&
|
|
|
+ userTask.Status != entity.UserTaskStatusFailed &&
|
|
|
+ userTask.Status != entity.UserTaskStatusRejected &&
|
|
|
+ userTask.Status != entity.UserTaskStatusReturnBack {
|
|
|
ctx.Fail("task_cannot_submit")
|
|
|
return
|
|
|
}
|
|
|
@@ -164,15 +171,66 @@ func (s *Server) TaskSubmit(c *gin.Context) {
|
|
|
db.Model(&entity.DtUserTask{}).
|
|
|
Where("id = ?", req.UserTaskId).
|
|
|
Updates(map[string]interface{}{
|
|
|
- "screenshots": string(screenshotsJson),
|
|
|
- "remark": req.Remark,
|
|
|
- "submit_time": time.Now().Unix(),
|
|
|
- "status": entity.UserTaskStatusSubmitted,
|
|
|
+ "screenshots": string(screenshotsJson),
|
|
|
+ "remark": req.Remark,
|
|
|
+ "submit_time": time.Now().Unix(),
|
|
|
+ "status": entity.UserTaskStatusSubmitted,
|
|
|
+ "reject_reason": "", // 重新提交时清空打回原因
|
|
|
})
|
|
|
|
|
|
ctx.OK(nil)
|
|
|
}
|
|
|
|
|
|
+// TaskSupplementScreenshots 补充截图(待审核状态可以补充)
|
|
|
+func (s *Server) TaskSupplementScreenshots(c *gin.Context) {
|
|
|
+ ctx := s.FromContext(c)
|
|
|
+ db := s.DB()
|
|
|
+ userId := ctx.UserId()
|
|
|
+
|
|
|
+ type SupplementRequest struct {
|
|
|
+ UserTaskId int64 `json:"userTaskId" binding:"required"`
|
|
|
+ Screenshots []string `json:"screenshots" binding:"required"` // 新增的截图
|
|
|
+ }
|
|
|
+
|
|
|
+ var req SupplementRequest
|
|
|
+ if err := c.ShouldBindJSON(&req); err != nil {
|
|
|
+ ctx.Fail("invalid_params")
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ // 获取用户任务
|
|
|
+ userTask := &entity.DtUserTask{}
|
|
|
+ if err := db.Where("id = ? AND user_id = ?", req.UserTaskId, userId).First(userTask).Error; err != nil {
|
|
|
+ ctx.Fail("user_task_not_found")
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ // 检查状态:只有待审核(1)的任务可以补充截图
|
|
|
+ if userTask.Status != entity.UserTaskStatusSubmitted {
|
|
|
+ ctx.Fail("task_cannot_supplement")
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ // 解析现有截图
|
|
|
+ existingScreenshots := make([]string, 0)
|
|
|
+ if userTask.Screenshots != "" {
|
|
|
+ json.Unmarshal([]byte(userTask.Screenshots), &existingScreenshots)
|
|
|
+ }
|
|
|
+
|
|
|
+ // 合并截图
|
|
|
+ allScreenshots := append(existingScreenshots, req.Screenshots...)
|
|
|
+ screenshotsJson, _ := json.Marshal(allScreenshots)
|
|
|
+
|
|
|
+ // 更新任务
|
|
|
+ db.Model(&entity.DtUserTask{}).
|
|
|
+ Where("id = ?", req.UserTaskId).
|
|
|
+ Update("screenshots", string(screenshotsJson))
|
|
|
+
|
|
|
+ ctx.OK(gin.H{
|
|
|
+ "screenshots": allScreenshots,
|
|
|
+ })
|
|
|
+}
|
|
|
+
|
|
|
// TaskAbandon 放弃任务
|
|
|
func (s *Server) TaskAbandon(c *gin.Context) {
|
|
|
ctx := s.FromContext(c)
|