diff --git a/business/jxcallback/orderman/order.go b/business/jxcallback/orderman/order.go index 76875d07a..2b23fe5ad 100644 --- a/business/jxcallback/orderman/order.go +++ b/business/jxcallback/orderman/order.go @@ -145,35 +145,44 @@ func (c *OrderManager) saveOrder(order *model.GoodsOrder, isAdjust bool, db orm. order.StatusTime = orderStatus.StatusTime } - globals.SugarLogger.Debugf("saveOrder isAdjust:%t, order:%v", isAdjust, order) + // globals.SugarLogger.Debugf("saveOrder isAdjust:%t, order:%v", isAdjust, order) db.Begin() + defer func() { + db.Rollback() + }() created, _, err2 := db.ReadOrCreate(order, "VendorOrderID", "VendorID") if err = err2; err == nil { - if created { - sql := `INSERT INTO order_sku(vendor_order_id, vendor_id, count, vendor_sku_id, sku_id, jx_sku_id, sku_name, + originalOrder := &model.GoodsOrderOriginal{ + VendorOrderID: order.VendorOrderID, + VendorID: order.VendorID, + OrderCreatedAt: order.OrderCreatedAt, + OriginalData: order.OriginalData, + } + if _, _, err = db.ReadOrCreate(originalOrder, "VendorOrderID", "VendorID"); err == nil { + if created { + sql := `INSERT INTO order_sku(vendor_order_id, vendor_id, count, vendor_sku_id, sku_id, jx_sku_id, sku_name, shop_price, sale_price, weight, sku_type, promotion_type, order_created_at) VALUES` - params := []interface{}{} - for _, sku := range order.Skus { - sql += "(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)," - params = append(params, sku.VendorOrderID, sku.VendorID, sku.Count, sku.VendorSkuID, sku.SkuID, sku.JxSkuID, sku.SkuName, - sku.ShopPrice, sku.SalePrice, sku.Weight, sku.SkuType, sku.PromotionType, order.StatusTime) - } - sql = sql[:len(sql)-1] + ";" - if _, err = db.Raw(sql, params...).Exec(); err != nil { - db.Rollback() - baseapi.SugarLogger.Infof("saveOrder insert order:%v, order_sku error:%v", order, err) + params := []interface{}{} + for _, sku := range order.Skus { + sql += "(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)," + params = append(params, sku.VendorOrderID, sku.VendorID, sku.Count, sku.VendorSkuID, sku.SkuID, sku.JxSkuID, sku.SkuName, + sku.ShopPrice, sku.SalePrice, sku.Weight, sku.SkuType, sku.PromotionType, order.StatusTime) + } + sql = sql[:len(sql)-1] + ";" + if _, err = db.Raw(sql, params...).Exec(); err != nil { + baseapi.SugarLogger.Infof("saveOrder insert order:%v, order_sku error:%v", order, err) + } else { + db.Commit() + } } else { + isDuplicated = true + order.DuplicatedCount++ + db.Update(order, "DuplicatedCount") db.Commit() + baseapi.SugarLogger.Infof("saveOrder duplicated orderid:%s msg received", order.VendorOrderID) } - } else { - isDuplicated = true - order.DuplicatedCount++ - db.Update(order, "DuplicatedCount") - db.Commit() - baseapi.SugarLogger.Infof("saveOrder duplicated orderid:%s msg received", order.VendorOrderID) } } else { - db.Rollback() globals.SugarLogger.Warnf("saveOrder create order:%v, error:%v", order, err) } return isDuplicated, err diff --git a/business/model/order.go b/business/model/order.go index 7b3c2b8be..3302ab03c 100644 --- a/business/model/order.go +++ b/business/model/order.go @@ -61,6 +61,21 @@ func (o *GoodsOrder) TableUnique() [][]string { } } +type GoodsOrderOriginal struct { + ID int64 `orm:"column(id)" json:"-"` + VendorOrderID string `orm:"column(vendor_order_id);size(48)" json:"vendorOrderID"` + VendorID int `orm:"column(vendor_id)" json:"vendorID"` + OrderCreatedAt time.Time `orm:"type(datetime);index" json:"orderCreatedAt"` // 这里记录的是订单生效时间,即用户支付完成(货到付款即为下单时间) + CreatedAt time.Time `orm:"auto_now_add;type(datetime)" json:"createdAt"` + OriginalData string `orm:"type(text)" json:"-"` +} + +func (o *GoodsOrderOriginal) TableUnique() [][]string { + return [][]string{ + []string{"VendorOrderID", "VendorID"}, + } +} + type OrderSku struct { ID int64 `orm:"column(id)" json:"-"` VendorOrderID string `orm:"column(vendor_order_id);size(48)" json:"vendorOrderID"` diff --git a/globals/beegodb/beegodb.go b/globals/beegodb/beegodb.go index 78d24cc17..1e7cafa99 100644 --- a/globals/beegodb/beegodb.go +++ b/globals/beegodb/beegodb.go @@ -23,6 +23,7 @@ func Init() { orm.RegisterModel(new(legacymodel.WeiXins), new(legacymodel.JxBackendUser)) orm.RegisterModel(new(model.GoodsOrder)) + orm.RegisterModel(new(model.GoodsOrderOriginal)) orm.RegisterModel(new(model.OrderSku)) orm.RegisterModel(new(model.Waybill)) orm.RegisterModel(new(model.OrderStatus))