diff --git a/internal/application/cpdaily/task/sign.go b/internal/application/cpdaily/task/sign.go index 210aa98..f4b24d1 100644 --- a/internal/application/cpdaily/task/sign.go +++ b/internal/application/cpdaily/task/sign.go @@ -226,20 +226,26 @@ func (c *CpdailyAutoSignTask) QueryFormByTitle(ctx context.Context, titleGlob st // 尝试从已签到的历史任务中获取历史数据用于预填充 signedMatch := findMatchTitle(signedTasks) - if signedMatch != nil && (signedMatch["signInstanceWid"] == nil || matchTask["signInstanceWid"] == nil || signedMatch["signInstanceWid"].String() != matchTask["signInstanceWid"].String()) { - histResp, histErr := c.client.R(). - SetBody(map[string]*gvar.Var{ - "taskName": gvar.New(signedMatch["taskName"].String()), - "signWid": signedMatch["signWid"], - "signInstanceWid": signedMatch["signInstanceWid"], - }). - WithContext(ctx). - Post(c.getReqUrl("detailSignInstance")) - if histErr == nil { - histJSON := utils.ReadJson[map[string]*gvar.Var](histResp.Body) - histDatas := histJSON["datas"].MapStrVar() - if len(histDatas) > 0 { - result["historyRows"] = gvar.New(histDatas) + if signedMatch != nil { + // 如果已签到任务与当前匹配任务是同一个,直接用已有数据作为历史(避免重复API调用) + if matchTask != nil && signedMatch["signInstanceWid"] != nil && matchTask["signInstanceWid"] != nil && + signedMatch["signInstanceWid"].String() == matchTask["signInstanceWid"].String() { + result["historyRows"] = result["rows"] + } else { + histResp, histErr := c.client.R(). + SetBody(map[string]*gvar.Var{ + "taskName": gvar.New(signedMatch["taskName"].String()), + "signWid": signedMatch["signWid"], + "signInstanceWid": signedMatch["signInstanceWid"], + }). + WithContext(ctx). + Post(c.getReqUrl("detailSignInstance")) + if histErr == nil { + histJSON := utils.ReadJson[map[string]*gvar.Var](histResp.Body) + histDatas := histJSON["datas"].MapStrVar() + if len(histDatas) > 0 { + result["historyRows"] = gvar.New(histDatas) + } } } } diff --git a/internal/application/cpdaily/task/sleepcheck.go b/internal/application/cpdaily/task/sleepcheck.go index fe43fab..e78d977 100644 --- a/internal/application/cpdaily/task/sleepcheck.go +++ b/internal/application/cpdaily/task/sleepcheck.go @@ -221,7 +221,6 @@ func (c *CpdailySleepCheckTask) QueryFormByTitle(ctx context.Context, titleGlob signedTasks := datas["signedTasks"].Array() var matchTask map[string]*gvar.Var - isFromSigned := false matchTask = findMatchTitle(unSignedTasks) if matchTask == nil { @@ -229,9 +228,6 @@ func (c *CpdailySleepCheckTask) QueryFormByTitle(ctx context.Context, titleGlob if matchTask == nil { matchTask = findMatchTitle(signedTasks) - if matchTask != nil { - isFromSigned = true - } if matchTask == nil { utils.OkOrPanic(errors.NewBusinessError(503, fmt.Sprintf("没有查询到查寝任务: %s", titleGlob)), func(err error) error { @@ -281,11 +277,15 @@ func (c *CpdailySleepCheckTask) QueryFormByTitle(ctx context.Context, titleGlob result["taskInfo"] = gvar.New(matchTask) result["rows"] = gvar.New(datas) - // 如果当前任务不是已签到的,尝试从已签到的历史任务中获取历史数据用于预填充 - if !isFromSigned { - // 先看今天有没有已签到的同名任务 - signedMatch := findMatchTitle(signedTasks) - if signedMatch != nil { + // 尝试从已签到的历史任务中获取历史数据用于预填充 + // 无论当前任务是否已签到,都尝试获取历史数据 + signedMatch := findMatchTitle(signedTasks) + if signedMatch != nil { + // 如果已签到任务与当前匹配任务是同一个,直接用已有数据作为历史(避免重复API调用) + if matchTask != nil && signedMatch["signInstanceWid"] != nil && matchTask["signInstanceWid"] != nil && + signedMatch["signInstanceWid"].String() == matchTask["signInstanceWid"].String() { + result["historyRows"] = result["rows"] + } else { histResp, histErr := c.client.R(). SetBody(map[string]*gvar.Var{ "taskName": gvar.New(signedMatch["taskName"].String()), @@ -302,63 +302,63 @@ func (c *CpdailySleepCheckTask) QueryFormByTitle(ctx context.Context, titleGlob } } } - // 今天没有已签到的同名任务,从历史月份中只查 signedTasks - if result["historyRows"] == nil { - func() { - defer func() { recover() }() - now := time.Now().In(cst.TimeZoneShangHai) - year := strconv.Itoa(now.Year()) - month := strconv.Itoa(int(now.Month())) - if len(month) == 1 { - month = "0" + month - } - resp, e := c.client.R(). - SetBody(map[string]any{ - "statisticYearMonth": fmt.Sprintf("%s-%s", year, month), - }). - WithContext(ctx). - Post(c.getReqUrl("getStuSignInfosByWeekMonth")) - if e != nil { - return - } - respJSON := utils.ReadJson[map[string]*gvar.Var](resp.Body) - monthDatas := respJSON["datas"].MapStrVar() - monthRows := monthDatas["rows"].Vars() + } + // 今天没有已签到的同名任务,从历史月份中只查 signedTasks + if result["historyRows"] == nil { + func() { + defer func() { recover() }() + now := time.Now().In(cst.TimeZoneShangHai) + year := strconv.Itoa(now.Year()) + month := strconv.Itoa(int(now.Month())) + if len(month) == 1 { + month = "0" + month + } + resp, e := c.client.R(). + SetBody(map[string]any{ + "statisticYearMonth": fmt.Sprintf("%s-%s", year, month), + }). + WithContext(ctx). + Post(c.getReqUrl("getStuSignInfosByWeekMonth")) + if e != nil { + return + } + respJSON := utils.ReadJson[map[string]*gvar.Var](resp.Body) + monthDatas := respJSON["datas"].MapStrVar() + monthRows := monthDatas["rows"].Vars() - // 只从 signedTasks 中查找匹配的已签到任务 - for _, row := range monthRows { - rowMap := row.MapStrVar() - signed := rowMap["signedTasks"].Vars() - for _, st := range signed { - item := st.MapStrVar() - tn, exist := item["taskName"] - if !exist || tn.String() == "" { + // 只从 signedTasks 中查找匹配的已签到任务 + for _, row := range monthRows { + rowMap := row.MapStrVar() + signed := rowMap["signedTasks"].Vars() + for _, st := range signed { + item := st.MapStrVar() + tn, exist := item["taskName"] + if !exist || tn.String() == "" { + continue + } + if match.Match(tn.String(), titleGlob) { + // 找到已签到的历史任务,获取详情 + dr, de := c.client.R(). + SetBody(map[string]*gvar.Var{ + "signInstanceWid": item["signInstanceWid"], + "signWid": item["signWid"], + "taskName": gvar.New(tn.String()), + }). + WithContext(ctx). + Post(c.getReqUrl("detailSignInstance")) + if de != nil { continue } - if match.Match(tn.String(), titleGlob) { - // 找到已签到的历史任务,获取详情 - dr, de := c.client.R(). - SetBody(map[string]*gvar.Var{ - "signInstanceWid": item["signInstanceWid"], - "signWid": item["signWid"], - "taskName": gvar.New(tn.String()), - }). - WithContext(ctx). - Post(c.getReqUrl("detailSignInstance")) - if de != nil { - continue - } - dj := utils.ReadJson[map[string]*gvar.Var](dr.Body) - dd := dj["datas"].MapStrVar() - if len(dd) > 0 { - result["historyRows"] = gvar.New(dd) - return - } + dj := utils.ReadJson[map[string]*gvar.Var](dr.Body) + dd := dj["datas"].MapStrVar() + if len(dd) > 0 { + result["historyRows"] = gvar.New(dd) + return } } } - }() - } + } + }() } return result