Bladeren bron

wip:重复开票优化

wangkaiyue 1 jaar geleden
bovenliggende
commit
a5dbca5a3b
3 gewijzigde bestanden met toevoegingen van 62 en 1 verwijderingen
  1. 2 1
      internal/service/invoiceCallback_red.go
  2. 13 0
      internal/service/invoiceManager.go
  3. 47 0
      internal/service/runOnce.go

+ 2 - 1
internal/service/invoiceCallback_red.go

@@ -72,7 +72,8 @@ func InvoicingMakeRedCallBackLogic(r *ghttp.Request) error {
 			if num == "" {
 				return gerror.Wrap(err, "InvoicingMakeRedCallBackLogic 蓝票号异常")
 			}
-
+			//g.Dump("RunRedBatchOnce-批量红冲", redByte)
+			//return nil
 			//旧蓝票状态修改已红冲
 			res1, sqlErr1 := tx.Update("invoice", g.Map{
 				"invoice_status": -2,

+ 13 - 0
internal/service/invoiceManager.go

@@ -41,6 +41,10 @@ func init() {
 	//初始化三方接口
 	JyInvoiceManager.Auth.CallBackInit()
 
+	//go func() {
+	//	time.Sleep(time.Second * 5)
+	//	JyInvoiceManager.RunRedBatchOnce(context.Background())
+	//}()
 	//go JyInvoiceManager.RunOneJob(context.Background())//流程
 	//go JyInvoiceManager.Demo(context.Background()) //开票
 	//go JyInvoiceManager.Auth.Login() //登录
@@ -153,6 +157,15 @@ func (im *InvoiceManager) RunJob(ctx context.Context) {
 			return
 		}
 	}
+	//保证所有回调已执行完成
+	select {
+	case im.RunPool <- true:
+	case <-time.After(time.Minute * 5):
+		g.Log().Infof(ctx, "RunJob-等待回调完成超时")
+		return
+	}
+	<-im.RunPool
+
 	g.Log().Infof(ctx, "RunJob-multipleOrdersMakeRedInvoice任务完成 共%d个 完成%d个", total, okNum)
 }
 

+ 47 - 0
internal/service/runOnce.go

@@ -0,0 +1,47 @@
+package service
+
+import (
+	"ElectronicInvoice/internal/consts"
+	"context"
+	"github.com/gogf/gf/v2/errors/gerror"
+	"github.com/gogf/gf/v2/frame/g"
+	"time"
+)
+
+type redBatch struct {
+	Date string `json:"date"`
+	Code string `json:"code"`
+}
+
+func (im *InvoiceManager) RunRedBatchOnce(ctx context.Context) {
+	var (
+		arr   []*redBatch
+		okNum int
+	)
+	err := g.Cfg("redBatchTmp").MustGet(ctx, "list").Struct(&arr)
+	if err != nil {
+		g.Log().Errorf(ctx, "RunJob-RunRedBatchOnce 读取红冲列表异常")
+	}
+	for _, data := range arr {
+		select {
+		case im.RunPool <- true:
+		case <-time.After(time.Minute * 5):
+			err = gerror.Wrap(consts.WaitTimeOut, "simpleMakeInvoice-开票等待超时")
+			return
+		}
+		err := im.Auth.MakeSingleRedInvoice(MakeRedInvoiceData{
+			Num:  data.Code,
+			Date: data.Date,
+		})
+		if err != nil {
+			<-im.RunPool
+			if gerror.Is(err, consts.LoginOutErr) {
+				g.Log().Errorf(ctx, "RunJob-RunRedBatchOnce-身份过期,需要重新登录")
+				return
+			}
+		} else {
+			okNum++
+		}
+	}
+	g.Log().Infof(ctx, "RunJob-RunRedBatchOnce 共%d个 完成%d个", len(arr), okNum)
+}