k.zhang 4 jaren geleden
bovenliggende
commit
7538bd3b38

+ 80 - 21
apis/pdd/pdd.ddk.order.list.increment.get.go

@@ -2,6 +2,7 @@ package pdd
 
 import (
 	"duoduo/conf"
+	"duoduo/models/mysql"
 	"duoduo/models/pdd"
 	"duoduo/tools"
 	"duoduo/tools/app"
@@ -14,6 +15,8 @@ func PddDdkOrderListIncrementGet(c *gin.Context) {
 	var inData pdd.PddDdkOrderListIncrementGetRequest
 	var outData pdd.PddDdkOrderListIncrementGetResponse
 	var pddErr pdd.ErrorPddResponse
+	var sqlData mysql.Order
+	var pag int
 
 	confIni, err := conf.ConnIni()
 	if err != nil {
@@ -21,37 +24,93 @@ func PddDdkOrderListIncrementGet(c *gin.Context) {
 		return
 	}
 
-	inData.ClientId = confIni.MustValue("pdd", "client_id")
-	inData.Type = "pdd.ddk.order.list.increment.get"
-	inData.Timestamp = fmt.Sprintf("%d", time.Now().Unix())
-	inData.DataType = "JSON"
-	inData.EndUpdateTime = fmt.Sprintf("%d", tools.GetNowTimeStamp())
-	tm, _ := tools.GetTimeStamp("2021-05-20 10:00:00")
-	inData.StartUpdateTime = fmt.Sprintf("%d", tm)
-	inData.Sign = "sign"
-
-	sign, err := DDKSign(inData)
+	err = c.ShouldBindJSON(&inData)
 	if err != nil {
 		app.Error(c, 400, err, err.Error())
 		return
 	}
+	pag = 0
+	for {
+		pag++
+		inData.ClientId = confIni.MustValue("pdd", "client_id")
+		inData.Type = "pdd.ddk.order.list.increment.get"
+		inData.Timestamp = fmt.Sprintf("%d", time.Now().Unix())
+		inData.DataType = "JSON"
+		inData.Page = fmt.Sprintf("%d", pag)
+		inData.PageSize = "50"
 
-	inData.Sign = sign
-	val, err := PostDDk(inData, nil)
+		startTm, _ := tools.GetTimeStamp(inData.StartUpdateTime)
+		inData.StartUpdateTime = fmt.Sprintf("%d", startTm)
+
+		endTm, _ := tools.GetTimeStamp(inData.EndUpdateTime)
+		inData.EndUpdateTime = fmt.Sprintf("%d", endTm)
+
+		inData.Sign = "sign"
+		sign, err := DDKSign(inData)
+		if err != nil {
+			app.Error(c, 400, err, err.Error())
+			return
+		}
+		inData.Sign = sign
+		val, err := PostDDk(inData, nil)
+
+		if err != nil {
+			app.Error(c, 400, err, err.Error())
+			return
+		}
 
-	if err != nil {
-		app.Error(c, 400, err, err.Error())
-		return
-	}
-	err = tools.JsonUnmarshal(val, &outData)
-	if err != nil {
 		err = tools.JsonUnmarshal(val, &pddErr)
 		if err != nil {
 			app.Error(c, 500, err, err.Error())
 			return
 		}
-		app.Error(c, 500, nil, pddErr.ErrorResponse.ErrorMsg)
-		return
+
+		err = tools.JsonUnmarshal(val, &outData)
+		if err != nil {
+			app.Error(c, 500, nil, err.Error())
+			return
+		}
+
+		if pddErr.ErrorResponse.ErrorCode != 0 {
+			app.Error(c, 500, nil, pddErr.ErrorResponse.SubMsg)
+			return
+		}
+
+		//同步订单信息
+		for i := 0; i < len(outData.OrderListGetResponse.OrderList); i++ {
+
+			sqlData.OrderID = outData.OrderListGetResponse.OrderList[i].OrderID
+			sqlData.PID = outData.OrderListGetResponse.OrderList[i].PID
+			sqlData.UpdateTime = tools.GetCurrntTimeStr()
+			sqlData.OrderStatus = outData.OrderListGetResponse.OrderList[i].OrderStatus
+			sqlData.GoodsName = outData.OrderListGetResponse.OrderList[i].GoodsName
+			sqlData.GoodsThumbnailURL = outData.OrderListGetResponse.OrderList[i].GoodsThumbnailURL
+			sqlData.OrderGroupSuccessTime = tools.TimeToStr(outData.OrderListGetResponse.OrderList[i].OrderGroupSuccessTime)
+			sqlData.OrderStatusDesc = outData.OrderListGetResponse.OrderList[i].OrderStatusDesc
+			sqlData.PromotionAmount = outData.OrderListGetResponse.OrderList[i].PromotionAmount
+			sqlData.JSONData, _ = tools.JsonMarshal(&outData.OrderListGetResponse.OrderList[i])
+
+			count := sqlData.GetNum()
+			if count <= 0 {
+				sqlData.CreateTime = tools.GetCurrntTimeStr()
+				_, err = sqlData.Create()
+				if err != nil {
+					app.Error(c, 500, nil, err.Error())
+					return
+				}
+			} else {
+				_, err = sqlData.Update(sqlData.OrderID)
+				if err != nil {
+					app.Error(c, 500, nil, err.Error())
+					return
+				}
+			}
+		}
+
+		if outData.OrderListGetResponse.TotalCount < 50 {
+			break
+		}
 	}
-	app.OK(c, outData, app.Success)
+
+	app.OK(c, nil, app.Success)
 }

+ 1 - 0
go.mod

@@ -16,6 +16,7 @@ require (
 	github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
 	github.com/modern-go/reflect2 v1.0.1 // indirect
 	github.com/olivere/elastic/v7 v7.0.4 // indirect
+	github.com/robfig/cron v1.2.0 // indirect
 	github.com/sirupsen/logrus v1.4.2 // indirect
 	github.com/ugorji/go v1.2.5 // indirect
 	github.com/unrolled/secure v1.0.9 // indirect

+ 2 - 0
go.sum

@@ -116,6 +116,8 @@ github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y8
 github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
 github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
 github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
+github.com/robfig/cron v1.2.0 h1:ZjScXvvxeQ63Dbyxy76Fj3AT3Ut0aKsyd2/tl3DTMuQ=
+github.com/robfig/cron v1.2.0/go.mod h1:JGuDeoQd7Z6yL4zQhZ3OPEVHB7fL6Ka6skscFHfmt2k=
 github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
 github.com/sirupsen/logrus v1.4.2 h1:SPIRibHv4MatM3XXNO2BJeFLZwZ2LvZgfQ5+UNI2im4=
 github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=

+ 2 - 0
main.go

@@ -2,6 +2,7 @@ package main
 
 import (
 	"duoduo/database"
+	"duoduo/report"
 	"duoduo/routers"
 	"fmt"
 )
@@ -9,5 +10,6 @@ import (
 func main() {
 	fmt.Println("hello duo!")
 	database.Setup()
+	report.SysCronStart()
 	routers.InitRouter()
 }

+ 54 - 0
models/mysql/order.go

@@ -0,0 +1,54 @@
+package mysql
+
+import orm "duoduo/database"
+
+type Order struct {
+	CreateTime            string `gorm:"column:create_time" json:"createTime"`
+	GoodsName             string `gorm:"column:goods_name" json:"goodsName"`
+	GoodsThumbnailURL     string `gorm:"column:goods_thumbnail_url" json:"goodsThumbnailUrl"`
+	JSONData              string `gorm:"column:json_data" json:"jsonData"`
+	OrderGroupSuccessTime string `gorm:"column:order_group_success_time" json:"orderGroupSuccessTime"`
+	OrderID               string `gorm:"column:order_id" json:"orderId"`
+	OrderStatus           int    `gorm:"column:order_status" json:"orderStatus"`
+	OrderStatusDesc       string `gorm:"column:order_status_desc" json:"orderStatusDesc"`
+	PID                   string `gorm:"column:p_id" json:"pId"`
+	PromotionAmount       int    `gorm:"column:promotion_amount" json:"promotionAmount"`
+	UpdateTime            string `gorm:"column:update_time" json:"updateTime"`
+}
+
+// TableName sets the insert table name for this struct type
+func (o *Order) TableName() string {
+	return "order"
+}
+
+func (o *Order) Create() (Order, error) {
+	var doc Order
+	result := orm.Eloquent.Table(o.TableName()).Create(&o)
+	if result.Error != nil {
+		err := result.Error
+		return doc, err
+	}
+	doc = *o
+	return doc, nil
+}
+
+func (o *Order) GetNum() int {
+	var count int
+	tableCount := orm.Eloquent.Table(o.TableName()).Where("order_id = ? ", o.OrderID)
+	tableCount.Count(&count)
+	return count
+}
+
+// 更新
+func (o *Order) Update(orderId string) (update Order, err error) {
+	if err = orm.Eloquent.Table(o.TableName()).Where("order_id = ?", orderId).First(&update).Error; err != nil {
+		return
+	}
+
+	//参数1:是要修改的数据
+	//参数2:是修改的数据
+	if err = orm.Eloquent.Table(o.TableName()).Model(&update).Updates(&o).Error; err != nil {
+		return
+	}
+	return
+}

+ 60 - 3
models/pdd/pdd.ddk.order.list.increment.get.go

@@ -4,13 +4,70 @@ type PddDdkOrderListIncrementGetRequest struct {
 	PddDdkBase
 	EndUpdateTime   string `json:"end_update_time"` //
 	StartUpdateTime string `json:"start_update_time"`
+	Page            string `json:"page"` //页码
+	PageSize        string `json:"page_size"`
+}
+
+type DdkOrderListRequest struct {
 }
 
 type PddDdkOrderListIncrementGetResponse struct {
 	OrderListGetResponse OrderListGetResponse `json:"order_list_get_response"`
 }
+
 type OrderListGetResponse struct {
-	TotalCount int           `json:"total_count"`
-	OrderList  []interface{} `json:"order_list"`
-	RequestID  string        `json:"request_id"`
+	TotalCount int         `json:"total_count"`
+	OrderList  []OrderList `json:"order_list"`
+	RequestID  string      `json:"request_id"`
+}
+type OrderList struct {
+	ActivityTags               []int  `json:"activity_tags"`
+	AuthDuoID                  int    `json:"auth_duo_id"`
+	BatchNo                    string `json:"batch_no"`
+	CatIds                     []int  `json:"cat_ids"`
+	CpaNew                     int    `json:"cpa_new"`
+	CpsSign                    string `json:"cps_sign"`
+	CustomParameters           string `json:"custom_parameters"`
+	FailReason                 string `json:"fail_reason"`
+	GoodsID                    int64  `json:"goods_id"`
+	GoodsName                  string `json:"goods_name"`
+	GoodsPrice                 int    `json:"goods_price"`
+	GoodsQuantity              int    `json:"goods_quantity"`
+	GoodsSign                  string `json:"goods_sign"`
+	GoodsThumbnailURL          string `json:"goods_thumbnail_url"`
+	GroupID                    int64  `json:"group_id"`
+	IsDirect                   int    `json:"is_direct"`
+	MallID                     int    `json:"mall_id"`
+	OrderAmount                int    `json:"order_amount"`
+	OrderCreateTime            int    `json:"order_create_time"`
+	OrderGroupSuccessTime      int64  `json:"order_group_success_time"`
+	OrderID                    string `json:"order_id"`
+	OrderModifyAt              int    `json:"order_modify_at"`
+	OrderPayTime               int    `json:"order_pay_time"`
+	OrderReceiveTime           int    `json:"order_receive_time"`
+	OrderSettleTime            int    `json:"order_settle_time"`
+	OrderSn                    string `json:"order_sn"`
+	OrderStatus                int    `json:"order_status"`
+	OrderStatusDesc            string `json:"order_status_desc"`
+	OrderVerifyTime            int    `json:"order_verify_time"`
+	PID                        string `json:"p_id"`
+	PointTime                  int    `json:"point_time"`
+	PriceCompareStatus         int    `json:"price_compare_status"`
+	PromotionAmount            int    `json:"promotion_amount"`
+	PromotionRate              int    `json:"promotion_rate"`
+	ReturnStatus               int    `json:"return_status"`
+	SepDuoID                   int    `json:"sep_duo_id"`
+	SepMarketFee               int    `json:"sep_market_fee"`
+	SepParameters              string `json:"sep_parameters"`
+	SepPid                     string `json:"sep_pid"`
+	SepRate                    int    `json:"sep_rate"`
+	ShareAmount                int    `json:"share_amount"`
+	ShareRate                  int    `json:"share_rate"`
+	SubsidyAmount              int    `json:"subsidy_amount"`
+	SubsidyDuoAmountLevel      int    `json:"subsidy_duo_amount_level"`
+	SubsidyDuoAmountTenMillion int    `json:"subsidy_duo_amount_ten_million"`
+	SubsidyType                int    `json:"subsidy_type"`
+	Type                       int    `json:"type"`
+	URLLastGenerateTime        int    `json:"url_last_generate_time"`
+	ZsDuoID                    int    `json:"zs_duo_id"`
 }

+ 101 - 0
report/pdd.ddk.order.list.increment.get.go

@@ -0,0 +1,101 @@
+package report
+
+import (
+	pdd2 "duoduo/apis/pdd"
+	"duoduo/conf"
+	"duoduo/models/mysql"
+	"duoduo/models/pdd"
+	"duoduo/tools"
+	"fmt"
+	"time"
+)
+
+func OrderList() {
+
+	go DdkOrder()
+}
+
+func DdkOrder() {
+	var inData pdd.PddDdkOrderListIncrementGetRequest
+	var outData pdd.PddDdkOrderListIncrementGetResponse
+	var pddErr pdd.ErrorPddResponse
+	var sqlData mysql.Order
+	var pag int
+	confIni, err := conf.ConnIni()
+	if err != nil {
+		return
+	}
+	pag = 0
+	for {
+		pag++
+		inData.ClientId = confIni.MustValue("pdd", "client_id")
+		inData.Type = "pdd.ddk.order.list.increment.get"
+		inData.Timestamp = fmt.Sprintf("%d", time.Now().Unix())
+		inData.DataType = "JSON"
+		inData.Page = fmt.Sprintf("%d", pag)
+		inData.PageSize = "50"
+
+		timeInt := time.Now().Unix()
+		inData.EndUpdateTime = fmt.Sprintf("%d", timeInt)
+		inData.StartUpdateTime = fmt.Sprintf("%d", timeInt-60)
+		inData.Sign = "sign"
+
+		sign, err := pdd2.DDKSign(inData)
+		if err != nil {
+			return
+		}
+
+		inData.Sign = sign
+		val, err := pdd2.PostDDk(inData, nil)
+
+		if err != nil {
+			return
+		}
+		err = tools.JsonUnmarshal(val, &pddErr)
+		if err != nil {
+			return
+		}
+
+		err = tools.JsonUnmarshal(val, &outData)
+		if err != nil {
+			return
+		}
+
+		if pddErr.ErrorResponse.ErrorCode != 0 {
+			return
+		}
+
+		//同步订单信息
+		for i := 0; i < len(outData.OrderListGetResponse.OrderList); i++ {
+			sqlData.OrderID = outData.OrderListGetResponse.OrderList[i].OrderID
+			sqlData.PID = outData.OrderListGetResponse.OrderList[i].PID
+			sqlData.UpdateTime = tools.GetCurrntTimeStr()
+			sqlData.OrderStatus = outData.OrderListGetResponse.OrderList[i].OrderStatus
+			sqlData.GoodsName = outData.OrderListGetResponse.OrderList[i].GoodsName
+			sqlData.GoodsThumbnailURL = outData.OrderListGetResponse.OrderList[i].GoodsThumbnailURL
+			sqlData.OrderGroupSuccessTime = tools.TimeToStr(outData.OrderListGetResponse.OrderList[i].OrderGroupSuccessTime)
+			sqlData.OrderStatusDesc = outData.OrderListGetResponse.OrderList[i].OrderStatusDesc
+			sqlData.PromotionAmount = outData.OrderListGetResponse.OrderList[i].PromotionAmount
+			sqlData.JSONData, _ = tools.JsonMarshal(&outData.OrderListGetResponse.OrderList[i])
+
+			count := sqlData.GetNum()
+			if count <= 0 {
+				sqlData.CreateTime = tools.GetCurrntTimeStr()
+				_, err = sqlData.Create()
+				if err != nil {
+					return
+				}
+			} else {
+				_, err = sqlData.Update(sqlData.OrderID)
+				if err != nil {
+					return
+				}
+			}
+		}
+
+		if outData.OrderListGetResponse.TotalCount < 50 {
+			break
+		}
+	}
+
+}

+ 15 - 0
report/report.go

@@ -0,0 +1,15 @@
+package report
+
+import "github.com/robfig/cron"
+
+const (
+	cronSettDateCutoff = "0 0 1 * * *"   //每天凌晨1:00:00
+	cronRunStart       = "0 0 17 * * *"  //凌晨一点
+	cronMinuteStart    = "0 */1 * * * *" //每分钟
+)
+
+func SysCronStart() {
+	c := cron.New()
+	c.AddFunc(cronMinuteStart, OrderList) //每分钟同步一下订单
+	c.Start()
+}

+ 12 - 1
tools/string.go

@@ -88,6 +88,16 @@ func DateSubDate(startDate string, endDate string) (float64, error) {
 
 }
 
+func TimeToStr(tm int64) string {
+
+	timeLayout := "2006-01-02 15:04:05"
+	// time.Unix的第二个参数传递0或10结果一样,因为都不大于1e9
+	timeStr := time.Unix(tm, 0).Format(timeLayout)
+
+	return timeStr
+
+}
+
 //加天数
 func DateAdd(startDate string, num time.Duration) (string, error) {
 	timeLayout := "2006-01-02" //转化所需模板
@@ -113,7 +123,8 @@ func GetTimeStamp(timeIn string) (int64, error) {
 	if err != nil {
 		return 0, err
 	}
-	return tm2.Unix(), nil
+
+	return tm2.Unix() - 8*3600, nil
 
 }