timeSliceQueryPush
This commit is contained in:
parent
540d873eac
commit
48d03c16ce
|
|
@ -42,7 +42,6 @@ type OrderCreateReqBo struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
type FindInBatchesUseBo struct {
|
type FindInBatchesUseBo struct {
|
||||||
Type vo.OrderType
|
|
||||||
StartTime *time.Time
|
StartTime *time.Time
|
||||||
EndTime *time.Time
|
EndTime *time.Time
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,7 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/go-kratos/kratos/v2/log"
|
"github.com/go-kratos/kratos/v2/log"
|
||||||
"github.com/redis/go-redis/v9"
|
"github.com/redis/go-redis/v9"
|
||||||
|
"golang.org/x/sync/errgroup"
|
||||||
"time"
|
"time"
|
||||||
"voucher/internal/biz/bo"
|
"voucher/internal/biz/bo"
|
||||||
"voucher/internal/biz/vo"
|
"voucher/internal/biz/vo"
|
||||||
|
|
@ -30,7 +31,6 @@ func (v *VoucherBiz) Notice(ctx context.Context) error {
|
||||||
endTime := time.Date(noticeEndDay.Year(), noticeEndDay.Month(), noticeEndDay.Day(), 23, 59, 59, 0, noticeEndDay.Location())
|
endTime := time.Date(noticeEndDay.Year(), noticeEndDay.Month(), noticeEndDay.Day(), 23, 59, 59, 0, noticeEndDay.Location())
|
||||||
|
|
||||||
req := &bo.FindInBatchesUseBo{
|
req := &bo.FindInBatchesUseBo{
|
||||||
Type: vo.OrderTypeCmb,
|
|
||||||
StartTime: &startTime,
|
StartTime: &startTime,
|
||||||
EndTime: &endTime,
|
EndTime: &endTime,
|
||||||
}
|
}
|
||||||
|
|
@ -38,6 +38,33 @@ func (v *VoucherBiz) Notice(ctx context.Context) error {
|
||||||
return v.ExecuteNotice(ctx, req)
|
return v.ExecuteNotice(ctx, req)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (v *VoucherBiz) timeSliceQueryPush(ctx context.Context, startTime, endTime time.Time) error {
|
||||||
|
|
||||||
|
duration := 1 * time.Hour
|
||||||
|
|
||||||
|
eg := new(errgroup.Group)
|
||||||
|
eg.SetLimit(5)
|
||||||
|
|
||||||
|
for start := startTime; start.Before(endTime); start = start.Add(duration) {
|
||||||
|
|
||||||
|
end := start.Add(duration) // 计算每次请求的结束时间
|
||||||
|
if end.After(endTime) {
|
||||||
|
end = endTime
|
||||||
|
}
|
||||||
|
|
||||||
|
req := &bo.FindInBatchesUseBo{
|
||||||
|
StartTime: &start,
|
||||||
|
EndTime: &end,
|
||||||
|
}
|
||||||
|
|
||||||
|
eg.Go(func() error {
|
||||||
|
return v.ExecuteNotice(ctx, req)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
return eg.Wait() // 仅返回第一个错误
|
||||||
|
}
|
||||||
|
|
||||||
func (v *VoucherBiz) ExecuteNotice(ctx context.Context, req *bo.FindInBatchesUseBo) error {
|
func (v *VoucherBiz) ExecuteNotice(ctx context.Context, req *bo.FindInBatchesUseBo) error {
|
||||||
|
|
||||||
return v.OrderRepo.FindInBatches(ctx, req, func(ctx context.Context, rows []*bo.OrderBo) error {
|
return v.OrderRepo.FindInBatches(ctx, req, func(ctx context.Context, rows []*bo.OrderBo) error {
|
||||||
|
|
|
||||||
|
|
@ -69,7 +69,6 @@ func (p *OrderRepoImpl) FinFailByStockIdInBatches(ctx context.Context, batchNo s
|
||||||
result := p.DB(ctx).
|
result := p.DB(ctx).
|
||||||
Where("batch_no = ?", batchNo).
|
Where("batch_no = ?", batchNo).
|
||||||
Where("status = ?", vo.OrderStatusFail.GetValue()).
|
Where("status = ?", vo.OrderStatusFail.GetValue()).
|
||||||
//Where("remark <> ?", "error: code = 500 reason = WechatFAIL message = 微信返回错误:该用户账号异常,无法领券。商家可联系微信支付或让用户联系微信支付客服处理。 metadat").
|
|
||||||
FindInBatches(&results, 100, func(tx *gorm.DB, batch int) error {
|
FindInBatches(&results, 100, func(tx *gorm.DB, batch int) error {
|
||||||
return fun(ctx, p.ToBos(results))
|
return fun(ctx, p.ToBos(results))
|
||||||
})
|
})
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,12 @@
|
||||||
package script
|
package script
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"golang.org/x/sync/errgroup"
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
"voucher/internal/biz/bo"
|
||||||
)
|
)
|
||||||
|
|
||||||
func Test_script(t *testing.T) {
|
func Test_script(t *testing.T) {
|
||||||
|
|
@ -51,3 +55,103 @@ func Test_script2(t *testing.T) {
|
||||||
t.Error(err)
|
t.Error(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func Test_moreTime(t *testing.T) {
|
||||||
|
|
||||||
|
startTime, err := time.Parse(time.DateTime, "2025-05-31 00:00:00")
|
||||||
|
if err != nil {
|
||||||
|
t.Error(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
endTime, err := time.Parse(time.DateTime, "2025-05-31 10:00:00")
|
||||||
|
if err != nil {
|
||||||
|
t.Error(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
//duration := 240 * time.Hour
|
||||||
|
duration := 1 * time.Hour
|
||||||
|
|
||||||
|
for start := startTime; start.Before(endTime); start = start.Add(duration) {
|
||||||
|
|
||||||
|
end := start.Add(duration) // 计算每次请求的结束时间
|
||||||
|
if end.After(endTime) {
|
||||||
|
end = endTime
|
||||||
|
}
|
||||||
|
|
||||||
|
// 创建请求体
|
||||||
|
requestBody := map[string]any{
|
||||||
|
"start_time": start.Format(time.DateTime),
|
||||||
|
"end_time": end.Format(time.DateTime),
|
||||||
|
"go_num": 2, // 并发数量
|
||||||
|
"time_slice_hours": 1, // 时间间隔
|
||||||
|
"product_no": "",
|
||||||
|
}
|
||||||
|
|
||||||
|
// 将请求体转换为 JSON 格式
|
||||||
|
bodyBytes, err2 := json.Marshal(requestBody)
|
||||||
|
if err2 != nil {
|
||||||
|
t.Error(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Printf("body:%s\n", string(bodyBytes))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func Test_goMoreTime(t *testing.T) {
|
||||||
|
|
||||||
|
startTime, err := time.Parse(time.DateTime, "2025-05-01 00:00:00")
|
||||||
|
if err != nil {
|
||||||
|
t.Error(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
//endTime, err := time.Parse(time.DateTime, "2025-05-31 23:59:59")
|
||||||
|
endTime, err := time.Parse(time.DateTime, "2025-05-01 23:59:59")
|
||||||
|
if err != nil {
|
||||||
|
t.Error(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
duration := 1 * time.Hour
|
||||||
|
|
||||||
|
eg := new(errgroup.Group)
|
||||||
|
eg.SetLimit(5)
|
||||||
|
|
||||||
|
for start := startTime; start.Before(endTime); start = start.Add(duration) {
|
||||||
|
|
||||||
|
end := start.Add(duration) // 计算每次请求的结束时间
|
||||||
|
if end.After(endTime) {
|
||||||
|
end = endTime
|
||||||
|
}
|
||||||
|
|
||||||
|
req := &bo.FindInBatchesUseBo{
|
||||||
|
StartTime: &start,
|
||||||
|
EndTime: &end,
|
||||||
|
}
|
||||||
|
|
||||||
|
// 将请求体转换为 JSON 格式
|
||||||
|
reqStr, err2 := json.Marshal(req)
|
||||||
|
if err2 != nil {
|
||||||
|
t.Error(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
eg.Go(func() error {
|
||||||
|
// 任务逻辑...
|
||||||
|
time.Sleep(2 * time.Second)
|
||||||
|
return fmt.Errorf("任务失败")
|
||||||
|
})
|
||||||
|
|
||||||
|
fmt.Printf("%s\n", string(reqStr))
|
||||||
|
}
|
||||||
|
|
||||||
|
err = eg.Wait() // 仅返回第一个错误
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
} else {
|
||||||
|
fmt.Println("所有任务完成")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -90,6 +90,10 @@ func (this *CmbService) TimeSliceQueryPush(ctx http.Context) error {
|
||||||
return fmt.Errorf("start_time or end_time is empty")
|
return fmt.Errorf("start_time or end_time is empty")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if req.GoNum > 10 {
|
||||||
|
return fmt.Errorf("协程数量不能大于10")
|
||||||
|
}
|
||||||
|
|
||||||
_, err = this.timeSliceQuery.Push(ctx, req)
|
_, err = this.timeSliceQuery.Push(ctx, req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue