From 6145142f584f8ed7d5d6886b2263298c07246c57 Mon Sep 17 00:00:00 2001 From: gazebo Date: Tue, 26 Nov 2019 17:39:13 +0800 Subject: [PATCH 01/13] +model.OrderStatusPayed --- business/model/const.go | 4 ++-- business/partner/purchase/jx/localjx/order.go | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/business/model/const.go b/business/model/const.go index 7dc9d85f8..a20cce891 100644 --- a/business/model/const.go +++ b/business/model/const.go @@ -171,8 +171,8 @@ const ( OrderStatusUndoApplyCancel = -10 OrderStatusApplyCancel = -5 - OrderStatusUnknown = 0 - + OrderStatusUnknown = 0 + OrderStatusPayed = 2 // 已支付 OrderStatusNew = 5 // 新订单,实际是已经支付 OrderStatusAccepted = 10 // 已经接单,也即待出库,待拣货 OrderStatusFinishedPickup = 15 // 拣货完成 diff --git a/business/partner/purchase/jx/localjx/order.go b/business/partner/purchase/jx/localjx/order.go index b8bcc7435..40bd4b286 100644 --- a/business/partner/purchase/jx/localjx/order.go +++ b/business/partner/purchase/jx/localjx/order.go @@ -112,6 +112,7 @@ func CreateOrder(ctx *jxcontext.Context, jxOrder *JxOrderInfo, addressID int64, outJxOrder.OrderID = GenOrderNo(ctx) order, err2 := jxOrder2GoodsOrder(ctx, outJxOrder, deliveryAddress) if err = err2; err == nil { + order.Status = model.OrderStatusPayed partner.CurOrderManager.OnOrderNew(order, model.Order2Status(order)) } } From 881cf8b51569307f96872a706dd5b45f4f2039d3 Mon Sep 17 00:00:00 2001 From: gazebo Date: Tue, 26 Nov 2019 17:59:18 +0800 Subject: [PATCH 02/13] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=BA=AC=E4=B8=9C?= =?UTF-8?q?=E6=B4=BB=E5=8A=A8=E5=95=86=E5=93=81=E6=97=B6=EF=BC=8C=E5=90=8C?= =?UTF-8?q?=E6=97=B6=E4=BC=A0=E5=85=A5infoId=E4=B8=8EoutInfoId=E5=8F=82?= =?UTF-8?q?=E6=95=B0=EF=BC=88=E4=BA=AC=E4=B8=9C=E7=9A=84bug=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/partner/purchase/jd/act.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/business/partner/purchase/jd/act.go b/business/partner/purchase/jd/act.go index 668e21d05..c5d3a496e 100644 --- a/business/partner/purchase/jd/act.go +++ b/business/partner/purchase/jd/act.go @@ -198,7 +198,7 @@ func createSkuAct(ctx *jxcontext.Context, act *model.Act2, actStoreSku []*model. if err = err2; err == nil { vendorActID = utils.Int64ToStr(infoID) if err = CreatePromotionRules(act.Type, infoID, "", act.LimitUser, act.LimitUser, act.LimitCount, 1, traceInfo); err == nil { - if _, err = CreatePromotionSku(act.Type, infoID, "", storeSku2Jd(actStoreSku, model.IsSyncStatusNeedCreate), traceInfo); err == nil { + if _, err = CreatePromotionSku(act.Type, infoID, utils.Int2Str(act.ID), storeSku2Jd(actStoreSku, model.IsSyncStatusNeedCreate), traceInfo); err == nil { if err = ConfirmPromotion(act.Type, infoID, "", traceInfo); err == nil { for _, v := range actStoreSku { v.VendorActID = vendorActID From 4b1b0114594574c506363577354eefe9c922c27c Mon Sep 17 00:00:00 2001 From: gazebo Date: Wed, 27 Nov 2019 08:44:49 +0800 Subject: [PATCH 03/13] =?UTF-8?q?=E5=BE=AE=E4=BF=A1=E6=94=AF=E4=BB=98?= =?UTF-8?q?=E6=97=B6=EF=BC=8Cbody=E5=BF=85=E9=A1=BB=E5=A1=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/partner/purchase/jx/localjx/order.go | 7 ++++--- business/partner/purchase/jx/localjx/wxpay.go | 7 ++++++- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/business/partner/purchase/jx/localjx/order.go b/business/partner/purchase/jx/localjx/order.go index 40bd4b286..c5deedb71 100644 --- a/business/partner/purchase/jx/localjx/order.go +++ b/business/partner/purchase/jx/localjx/order.go @@ -124,9 +124,10 @@ func Pay4Order(ctx *jxcontext.Context, orderID int64, payType int, vendorPayType if err == nil { switch payType { case model.PayTypeWX: - orderPay, err = pay4OrderByWX(ctx, order, vendorPayType) - dao.WrapAddIDCULDEntity(orderPay, ctx.GetUserName()) - err = dao.CreateEntity(dao.GetDB(), orderPay) + if orderPay, err = pay4OrderByWX(ctx, order, vendorPayType); err == nil { + dao.WrapAddIDCULDEntity(orderPay, ctx.GetUserName()) + err = dao.CreateEntity(dao.GetDB(), orderPay) + } default: err = fmt.Errorf("支付方式:%d当前不支持", payType) } diff --git a/business/partner/purchase/jx/localjx/wxpay.go b/business/partner/purchase/jx/localjx/wxpay.go index 6519d3edb..f1450aa8c 100644 --- a/business/partner/purchase/jx/localjx/wxpay.go +++ b/business/partner/purchase/jx/localjx/wxpay.go @@ -1,6 +1,7 @@ package localjx import ( + "fmt" "time" "git.rosy.net.cn/baseapi/platformapi/wxpay" @@ -18,10 +19,14 @@ func vendorPayType2WxpayType(vendorPayType string) string { return vendorPayType } +func getOrderBrief(order *model.GoodsOrder) string { + return fmt.Sprintf("%s等共%d件商品", order.Skus[0].SkuName, order.GoodsCount) +} + func pay4OrderByWX(ctx *jxcontext.Context, order *model.GoodsOrder, vendorPayType string) (orderPay *model.OrderPay, err error) { payCreatedAt := time.Now() param := &wxpay.CreateOrderParam{ - Body: "", + Body: getOrderBrief(order), NotifyURL: globals.WxpayNotifyURL, OutTradeNo: order.VendorOrderID, SpbillCreateIP: ctx.GetRealRemoteIP(), From 7410da75fd69bc164ffc02b0976364ba1f720933 Mon Sep 17 00:00:00 2001 From: gazebo Date: Wed, 27 Nov 2019 10:05:26 +0800 Subject: [PATCH 04/13] =?UTF-8?q?+GetOrderPay=20GetOrders=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E5=8F=82=E6=95=B0isPurchase?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxcallback/orderman/orderman_ext.go | 15 +++++- business/jxstore/cms/cms.go | 2 + business/model/const.go | 3 +- business/model/dao/dao_order.go | 14 ++++++ business/model/order.go | 28 +++++++++-- business/partner/purchase/jx/localjx/order.go | 47 ++++++++++--------- business/partner/purchase/jx/localjx/wxpay.go | 18 +++++-- controllers/jx_order.go | 1 + controllers/jx_order2.go | 14 ++++++ routers/commentsRouter_controllers.go | 9 ++++ 10 files changed, 121 insertions(+), 30 deletions(-) diff --git a/business/jxcallback/orderman/orderman_ext.go b/business/jxcallback/orderman/orderman_ext.go index b41cef313..aa004da4d 100644 --- a/business/jxcallback/orderman/orderman_ext.go +++ b/business/jxcallback/orderman/orderman_ext.go @@ -229,7 +229,16 @@ func (c *OrderManager) ExportMTWaybills(ctx *jxcontext.Context, fromDateStr, toD func (c *OrderManager) getOrders(ctx *jxcontext.Context, isIncludeSku, isIncludeFake bool, fromDateStr, toDateStr string, isDateFinish bool, skuIDs []int, isJxFirst bool, params map[string]interface{}, offset, pageSize int) (orders []*model.GoodsOrderExt, totalCount int, err error) { globals.SugarLogger.Debugf("getOrders from:%s to:%s", fromDateStr, toDateStr) - + isPurchase, _ := params["isPurchase"].(bool) + userID := "" + if !isPurchase { + if user := ctx.GetFullUser(); user != nil { + userID = user.GetID() + if user.Type&model.UserTypeNonConsumer == 0 { + isPurchase = true + } + } + } pageSize = jxutils.FormalizePageSize(pageSize) if offset < 0 { offset = 0 @@ -393,6 +402,10 @@ func (c *OrderManager) getOrders(ctx *jxcontext.Context, isIncludeSku, isInclude sqlParams = append(sqlParams, vendorIDs) } } + if isPurchase { + sqlWhere += " AND t1.user_id = ?" + sqlParams = append(sqlParams, userID) + } db := dao.GetDB() sql += sqlWhere if isIncludeSku { diff --git a/business/jxstore/cms/cms.go b/business/jxstore/cms/cms.go index d5acfc8aa..a2f8b3889 100644 --- a/business/jxstore/cms/cms.go +++ b/business/jxstore/cms/cms.go @@ -98,6 +98,8 @@ func InitServiceInfo(version string, buildTime time.Time, gitCommit string) { "autoSaleAt": AutoSaleAtStr, "userTypeName": model.UserTypeName, "storePriceTypeName": model.StorePriceTypeName, + "payStatusName": model.PayStatusName, + "refundStatusName": model.RefundStatusName, }, } } diff --git a/business/model/const.go b/business/model/const.go index a20cce891..f9bad6472 100644 --- a/business/model/const.go +++ b/business/model/const.go @@ -46,6 +46,7 @@ var ( OrderStatusUnknown: "一般事件", + OrderStatusCreated: "待支付", OrderStatusNew: "新订单", OrderStatusAccepted: "待拣货", OrderStatusFinishedPickup: "待配送", @@ -172,7 +173,7 @@ const ( OrderStatusApplyCancel = -5 OrderStatusUnknown = 0 - OrderStatusPayed = 2 // 已支付 + OrderStatusCreated = 2 // 已支付 OrderStatusNew = 5 // 新订单,实际是已经支付 OrderStatusAccepted = 10 // 已经接单,也即待出库,待拣货 OrderStatusFinishedPickup = 15 // 拣货完成 diff --git a/business/model/dao/dao_order.go b/business/model/dao/dao_order.go index fd7e3e7ad..673e06405 100644 --- a/business/model/dao/dao_order.go +++ b/business/model/dao/dao_order.go @@ -698,3 +698,17 @@ func GetRiskOrderCount(db *DaoDB, dayNum int, includeToday bool) (storeOrderList return storeOrderList, GetRows(db, &storeOrderList, sql, sqlParams) } + +func GetOrderPayList(db *DaoDB, vendorOrderID string, vendorID int) (payList []*model.OrderPay, err error) { + sql := ` + SELECT t1.* + FROM order_pay t1 + WHERE t1.deleted_at = ? AND t1.vendor_order_id = ? AND t1.vendor_id = ? + ` + sqlParams := []interface{}{ + utils.DefaultTimeValue, + vendorOrderID, + vendorID, + } + return payList, GetRows(db, &payList, sql, sqlParams) +} diff --git a/business/model/order.go b/business/model/order.go index 1960b900f..7970201a2 100644 --- a/business/model/order.go +++ b/business/model/order.go @@ -11,9 +11,31 @@ const ( const ( PayTypeWX = 1 // 微信支付 - PayStatusNo = 0 - PayStatusYes = 1 - PayStatusFailed = 2 + PayStatusNo = 0 + PayStatusYes = 1 + PayStatusFailed = 2 + PayStatusCanceled = 3 + PayStatusRefund = 4 + + RefundStatusNo = 0 + RefundStatusYes = 1 + RefundStatusFailed = 2 +) + +var ( + PayStatusName = map[int]string{ + PayStatusNo: "待支付", + PayStatusYes: "已支付", + PayStatusFailed: "支付失败", + PayStatusCanceled: "支付取消", + PayStatusRefund: "已退款", + } + + RefundStatusName = map[int]string{ + RefundStatusNo: "待退款", + RefundStatusYes: "已退款", + RefundStatusFailed: "退款失败", + } ) type ModelTimeInfo struct { diff --git a/business/partner/purchase/jx/localjx/order.go b/business/partner/purchase/jx/localjx/order.go index c5deedb71..7fa1b67ac 100644 --- a/business/partner/purchase/jx/localjx/order.go +++ b/business/partner/purchase/jx/localjx/order.go @@ -8,13 +8,13 @@ import ( "time" "git.rosy.net.cn/baseapi/utils" + "git.rosy.net.cn/baseapi/utils/errlist" "git.rosy.net.cn/jx-callback/business/jxutils" "git.rosy.net.cn/jx-callback/business/jxutils/jxcontext" "git.rosy.net.cn/jx-callback/business/model" "git.rosy.net.cn/jx-callback/business/model/dao" "git.rosy.net.cn/jx-callback/business/partner" "git.rosy.net.cn/jx-callback/business/partner/delivery" - "git.rosy.net.cn/jx-callback/globals" ) const ( @@ -112,7 +112,7 @@ func CreateOrder(ctx *jxcontext.Context, jxOrder *JxOrderInfo, addressID int64, outJxOrder.OrderID = GenOrderNo(ctx) order, err2 := jxOrder2GoodsOrder(ctx, outJxOrder, deliveryAddress) if err = err2; err == nil { - order.Status = model.OrderStatusPayed + order.Status = model.OrderStatusCreated partner.CurOrderManager.OnOrderNew(order, model.Order2Status(order)) } } @@ -433,29 +433,26 @@ func SelfDeliverDelivered(order *model.GoodsOrder, userName string) (err error) func CancelOrder(ctx *jxcontext.Context, order *model.GoodsOrder, reason string) (err error) { if order.Status < model.OrderStatusDelivering { - orderPay := &model.OrderPay{ - VendorOrderID: order.VendorOrderID, - VendorID: jxutils.GetPossibleVendorIDFromVendorOrderID(order.VendorOrderID), - Status: model.PayStatusYes, - } - orderPay.DeletedAt = utils.DefaultTimeValue db := dao.GetDB() - if err = dao.GetEntity(db, orderPay, "VendorOrderID", "VendorID", "Status", "DeletedAt"); err == nil || dao.IsNoRowsError(err) { - if err == nil { - refundID := utils.Int64ToStr(GenRefundID(order)) - orderPayRefund, err2 := refundOrderByWX(ctx, orderPay, refundID) - if err = err2; err == nil { - dao.WrapAddIDCULDEntity(orderPayRefund, ctx.GetUserName()) - err = dao.CreateEntity(dao.GetDB(), orderPay) - } - } else { - if order.Status >= model.OrderStatusNew { - globals.SugarLogger.Warnf("订单:%s找不到有效的支付方式", order.VendorOrderID) + payList, err2 := dao.GetOrderPayList(db, order.VendorOrderID, jxutils.GetPossibleVendorIDFromVendorOrderID(order.VendorOrderID)) + if err = err2; err == nil { + errList := errlist.New() + for _, orderPay := range payList { + if orderPay.Status == model.PayStatusYes { + refundID := utils.Int64ToStr(GenRefundID(order)) + orderPayRefund, err2 := refundOrderByWX(ctx, orderPay, refundID) + if err = err2; err == nil { + dao.WrapAddIDCULDEntity(orderPayRefund, ctx.GetUserName()) + errList.AddErr(dao.CreateEntity(dao.GetDB(), orderPay)) + } + } else { + orderPay.Status = model.PayStatusCanceled + _, err2 := dao.UpdateEntity(db, orderPay) + errList.AddErr(err2) } } - if err == nil { - err = changeOrderStatus(order.VendorOrderID, model.OrderStatusCanceled, reason) - } + errList.AddErr(changeOrderStatus(order.VendorOrderID, model.OrderStatusCanceled, reason)) + err = errList.GetErrListAsOne() } } else { err = fmt.Errorf("当前订单状态:%s不允许取消", model.OrderStatusName[order.Status]) @@ -477,3 +474,9 @@ func changeOrderStatus(vendorOrderID string, status int, remark string) (err err } return partner.CurOrderManager.OnOrderStatusChanged(orderStatus) } + +func GetOrderPay(ctx *jxcontext.Context, vendorOrderID string) (payList []*model.OrderPay, err error) { + db := dao.GetDB() + payList, err = dao.GetOrderPayList(db, vendorOrderID, jxutils.GetPossibleVendorIDFromVendorOrderID(vendorOrderID)) + return payList, err +} diff --git a/business/partner/purchase/jx/localjx/wxpay.go b/business/partner/purchase/jx/localjx/wxpay.go index f1450aa8c..3fa7d4c79 100644 --- a/business/partner/purchase/jx/localjx/wxpay.go +++ b/business/partner/purchase/jx/localjx/wxpay.go @@ -99,15 +99,27 @@ func onWxpayRefund(msg *wxpay.RefundResultMsg) (err error) { db := dao.GetDB() if err = dao.GetEntity(db, orderPayRefund, "RefundID"); err == nil { if msg.ResultCode == wxpay.ResponseCodeSuccess { - orderPayRefund.Status = model.PayStatusYes + orderPayRefund.Status = model.RefundStatusYes } else { - orderPayRefund.Status = model.PayStatusFailed + orderPayRefund.Status = model.RefundStatusFailed } orderPayRefund.OriginalData = utils.Format4Output(msg, true) dao.UpdateEntity(db, orderPayRefund) } else if dao.IsNoRowsError(err) { globals.SugarLogger.Warnf("收到异常的退款事件, msg:%s", utils.Format4Output(msg, true)) } + + orderPay := &model.OrderPay{ + VendorOrderID: orderPayRefund.VendorOrderID, + VendorID: jxutils.GetPossibleVendorIDFromVendorOrderID(orderPayRefund.VendorOrderID), + PayType: model.PayTypeWX, + Status: model.PayStatusYes, + } + orderPay.DeletedAt = utils.DefaultTimeValue + if err = dao.GetEntity(db, orderPay, "VendorOrderID", "VendorID", "PayType", "Status", "DeletedAt"); err == nil { + orderPay.Status = model.PayStatusRefund + dao.UpdateEntity(db, orderPay) + } return err } @@ -125,7 +137,7 @@ func refundOrderByWX(ctx *jxcontext.Context, orderPay *model.OrderPay, refundID VendorRefundID: result.RefundID, VendorOrderID: orderPay.VendorOrderID, VendorID: orderPay.VendorID, - Status: model.PayStatusNo, + Status: model.RefundStatusNo, TransactionID: orderPay.TransactionID, RefundFee: orderPay.TotalFee, RefundCreatedAt: time.Now(), diff --git a/controllers/jx_order.go b/controllers/jx_order.go index 4fe21002f..80a424c8c 100644 --- a/controllers/jx_order.go +++ b/controllers/jx_order.go @@ -279,6 +279,7 @@ func (c *OrderController) ExportMTWaybills() { // @Param isJxFirst query bool false "排序是否京西订单优先(缺省为否)" // @Param adjustCount query int false "最小调整次数" // @Param mustInvoice query bool false "是否必须要求开发票" +// @Param isPurchase query bool false "是否是用户自已的订单,如果角色只有consumer,会被强制设为true" // @Param offset query int false "结果起始序号(以0开始,缺省为0)" // @Param pageSize query int false "结果页大小(缺省为50,-1表示全部)" // @Success 200 {object} controllers.CallResult diff --git a/controllers/jx_order2.go b/controllers/jx_order2.go index 102837b7e..f59c01de5 100644 --- a/controllers/jx_order2.go +++ b/controllers/jx_order2.go @@ -58,3 +58,17 @@ func (c *JxOrderController) GetAvailableDeliverTime() { return retVal, "", err }) } + +// @Title 得到一个订单的支付信息 +// @Description 得到一个订单的支付信息 +// @Param token header string true "认证token" +// @Param vendorOrderID query string true "订单号,如果此项不为空,忽略其它所有查询条件" +// @Success 200 {object} controllers.CallResult +// @Failure 200 {object} controllers.CallResult +// @router /GetOrderPay [get] +func (c *JxOrderController) GetOrderPay() { + c.callGetOrderPay(func(params *tJxorderGetOrderPayParams) (retVal interface{}, errCode string, err error) { + retVal, err = localjx.GetOrderPay(params.Ctx, params.VendorOrderID) + return retVal, "", err + }) +} diff --git a/routers/commentsRouter_controllers.go b/routers/commentsRouter_controllers.go index 20f0c80d2..74b861540 100644 --- a/routers/commentsRouter_controllers.go +++ b/routers/commentsRouter_controllers.go @@ -601,6 +601,15 @@ func init() { Filters: nil, Params: nil}) + beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:JxOrderController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:JxOrderController"], + beego.ControllerComments{ + Method: "GetOrderPay", + Router: `/GetOrderPay`, + AllowHTTPMethods: []string{"get"}, + MethodParams: param.Make(), + Filters: nil, + Params: nil}) + beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:JxOrderController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:JxOrderController"], beego.ControllerComments{ Method: "Pay4Order", From 53efea0eb4dabb3da4ef88cd4c3786047d984b57 Mon Sep 17 00:00:00 2001 From: gazebo Date: Wed, 27 Nov 2019 10:06:58 +0800 Subject: [PATCH 05/13] =?UTF-8?q?=E9=85=8D=E9=80=81=E8=B4=B9=E8=AE=BE?= =?UTF-8?q?=E7=BD=AE=E4=B8=BA0=E8=B0=83=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/partner/purchase/jx/localjx/order.go | 1 + 1 file changed, 1 insertion(+) diff --git a/business/partner/purchase/jx/localjx/order.go b/business/partner/purchase/jx/localjx/order.go index 7fa1b67ac..dd31afc09 100644 --- a/business/partner/purchase/jx/localjx/order.go +++ b/business/partner/purchase/jx/localjx/order.go @@ -352,6 +352,7 @@ func generateOrder(ctx *jxcontext.Context, jxOrder *JxOrderInfo, addressID int64 if outJxOrder.FreightPrice, _, err = delivery.CalculateDeliveryFee(dao.GetDB(), jxOrder.StoreID, "", jxutils.StandardCoordinate2Int(deliveryAddress.Lng), jxutils.StandardCoordinate2Int(deliveryAddress.Lat), model.CoordinateTypeMars, outJxOrder.Weight, checkTime); err == nil { + outJxOrder.FreightPrice = 0 outJxOrder.TotalPrice = outJxOrder.OrderPrice + outJxOrder.FreightPrice outJxOrder.ActualPayPrice = outJxOrder.TotalPrice } From 1eff6bfd43922969af43adfd82fdb71e5470b959 Mon Sep 17 00:00:00 2001 From: gazebo Date: Wed, 27 Nov 2019 14:34:30 +0800 Subject: [PATCH 06/13] =?UTF-8?q?QueryPageStores=E6=B7=BB=E5=8A=A0radius,l?= =?UTF-8?q?ng,lat=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/model/dao/page_store.go | 13 +++++-- controllers/net_spider.go | 67 +++++++++++++++++++++++++++++++- 2 files changed, 75 insertions(+), 5 deletions(-) diff --git a/business/model/dao/page_store.go b/business/model/dao/page_store.go index e63108c8c..676f6d68b 100644 --- a/business/model/dao/page_store.go +++ b/business/model/dao/page_store.go @@ -9,9 +9,12 @@ type PageShopWithPlaceName struct { CityName string `json:"cityName"` DistrictName string `json:"districtName"` + Distance int `json:"distance"` } -func QueryPageStores(db *DaoDB, pageSize, offset int, keyword string, vendorStoreID string, vendorID int, orgCode string, cityCode, districtCode int, tel string, minShopScore float32, minRecentOrderNum, minSkuCount int) (pagedInfo *model.PagedInfo, err error) { +func QueryPageStores(db *DaoDB, pageSize, offset int, keyword string, vendorStoreID string, vendorID int, orgCode string, + cityCode, districtCode int, tel string, minShopScore float32, minRecentOrderNum, minSkuCount int, + lng1, lat1, lng2, lat2 float64) (pagedInfo *model.PagedInfo, err error) { sql := ` SELECT SQL_CALC_FOUND_ROWS t1.*, @@ -59,6 +62,10 @@ func QueryPageStores(db *DaoDB, pageSize, offset int, keyword string, vendorStor sql += " AND t1.sku_count >= ?" sqlParams = append(sqlParams, minSkuCount) } + if lng1 > 0 { + sql += " AND t1.lng >= ? AND t1.lat >= ? AND t1.lng <= ? AND t1.lat <= ?" + sqlParams = append(sqlParams, lng1, lat1, lng2, lat2) + } if keyword != "" { keywordLike := "%" + keyword + "%" sql += " AND (t1.name LIKE ? OR t1.tel1 LIKE ? OR t1.tel2 LIKE ? OR t1.org_code LIKE ? OR t1.address LIKE ? OR t2.name LIKE ? OR t3.name LIKE ? OR t1.licence_code LIKE ?" @@ -70,9 +77,7 @@ func QueryPageStores(db *DaoDB, pageSize, offset int, keyword string, vendorStor LIMIT ? OFFSET ? ` pageSize = FormalizePageSize(pageSize) - if offset < 0 { - offset = 0 - } + offset = FormalizePageOffset(offset) sqlParams = append(sqlParams, pageSize, offset) var shopList []*PageShopWithPlaceName Begin(db) diff --git a/controllers/net_spider.go b/controllers/net_spider.go index 34b85c128..79973144e 100644 --- a/controllers/net_spider.go +++ b/controllers/net_spider.go @@ -1,7 +1,12 @@ package controllers import ( + "fmt" + "sort" + + "git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/jx-callback/business/jxutils" + "git.rosy.net.cn/jx-callback/business/model" "git.rosy.net.cn/jx-callback/business/model/dao" "git.rosy.net.cn/jx-callback/business/netspider" "github.com/astaxie/beego" @@ -49,6 +54,9 @@ func (c *NetSpiderController) GetAndStoreCitiesShops() { // @Param minShopScore query float64 false "门店分值最小值" // @Param minRecentOrderNum query int false "最近单量最小值" // @Param minSkuCount query int false "SKU数量最小值" +// @Param radius query int false "关注点半径(米)" +// @Param lng query string false "关注点经度" +// @Param lat query string false "关注点纬度" // @Success 200 {object} controllers.CallResult // @Failure 200 {object} controllers.CallResult // @router /QueryPageStores [get] @@ -57,7 +65,64 @@ func (c *NetSpiderController) QueryPageStores() { if params.MapData["vendorID"] == nil { params.VendorID = -1 } - retVal, err = dao.QueryPageStores(dao.GetDB(), params.PageSize, params.Offset, params.Keyword, params.VendorStoreID, params.VendorID, params.OrgCode, params.CityCode, params.DistrictCode, params.Tel, float32(params.MinShopScore), params.MinRecentOrderNum, params.MinSkuCount) + var lng, lat, lng1, lat1, lng2, lat2 float64 + params.Offset = dao.FormalizePageOffset(params.Offset) + params.PageSize = dao.FormalizePageSize(params.PageSize) + offset := params.Offset + pageSize := params.PageSize + if params.Radius > 0 { + lng = utils.Str2Float64WithDefault(params.Lng, 0) + lat = utils.Str2Float64WithDefault(params.Lat, 0) + if lng == 0 || lat == 0 { + return nil, "", fmt.Errorf("坐标信息%s,%s不合法", params.Lng, params.Lat) + } + lng2, _ = jxutils.ConvertDistanceToLogLat(lng, lat, float64(params.Radius), 90) + _, lat2 = jxutils.ConvertDistanceToLogLat(lng, lat, float64(params.Radius), 0) + lng1 = lng - (lng2 - lng) + lat1 = lat - (lat2 - lat) + offset = 0 + pageSize = model.UnlimitedPageSize + } + pagedInfo, err := dao.QueryPageStores(dao.GetDB(), pageSize, offset, params.Keyword, params.VendorStoreID, params.VendorID, params.OrgCode, + params.CityCode, params.DistrictCode, params.Tel, float32(params.MinShopScore), params.MinRecentOrderNum, params.MinSkuCount, + lng1, lat1, lng2, lat2) + if err == nil { + if params.Radius > 0 && (params.Offset != 0 || params.PageSize != model.UnlimitedPageSize) { + shopList, _ := pagedInfo.Data.([]*dao.PageShopWithPlaceName) + pagedInfo.TotalCount = len(shopList) + if len(shopList) > 0 { + for _, v := range shopList { + v.Distance = int(jxutils.EarthDistance(v.Lng, v.Lat, lng, lat) * 1000) + } + sort.Sort(PageShopList(shopList)) + if params.Offset < len(shopList) { + index := params.Offset + params.PageSize + if index > len(shopList) { + index = len(shopList) + } + shopList = shopList[params.Offset:index] + } else { + shopList = nil + } + } + pagedInfo.Data = shopList + } + retVal = pagedInfo + } return retVal, "", err }) } + +type PageShopList []*dao.PageShopWithPlaceName + +func (l PageShopList) Len() int { + return len(l) +} + +func (l PageShopList) Less(i, j int) bool { + return l[i].Distance < l[j].Distance +} + +func (l PageShopList) Swap(i, j int) { + l[i], l[j] = l[j], l[i] +} From cea72b06de534bb0827e328b90cb2a1e6683a39f Mon Sep 17 00:00:00 2001 From: gazebo Date: Wed, 27 Nov 2019 14:56:47 +0800 Subject: [PATCH 07/13] SetJdCookie --- globals/api/api.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/globals/api/api.go b/globals/api/api.go index d94e5bd5d..10a651d4f 100644 --- a/globals/api/api.go +++ b/globals/api/api.go @@ -74,8 +74,7 @@ func Init() { if !beego.AppConfig.DefaultBool("disableJd", false) { JdAPI = jdapi.New(beego.AppConfig.String("jdToken"), beego.AppConfig.String("jdAppKey"), beego.AppConfig.String("jdSecret")) cookieValue := beego.AppConfig.DefaultString("jdStorePageCookie", "") - JdAPI.SetCookie("shop.o2o.jd.com1", cookieValue) - JdAPI.SetCookie("lsp-store1.jddj.com", cookieValue) + JdAPI.SetJdCookie(cookieValue) conf := platformapi.NewDefAPIConfig() conf.MaxSleepSecondWhenExceedLimit = 60 * 30 // 最大重试间隙30分钟 From 47803c64e48b716ea21c9cfff6b593a0056cb348 Mon Sep 17 00:00:00 2001 From: gazebo Date: Wed, 27 Nov 2019 17:24:21 +0800 Subject: [PATCH 08/13] up --- controllers/net_spider.go | 31 +++++++++++++++++++------------ 1 file changed, 19 insertions(+), 12 deletions(-) diff --git a/controllers/net_spider.go b/controllers/net_spider.go index 79973144e..b600686b6 100644 --- a/controllers/net_spider.go +++ b/controllers/net_spider.go @@ -88,21 +88,28 @@ func (c *NetSpiderController) QueryPageStores() { lng1, lat1, lng2, lat2) if err == nil { if params.Radius > 0 && (params.Offset != 0 || params.PageSize != model.UnlimitedPageSize) { - shopList, _ := pagedInfo.Data.([]*dao.PageShopWithPlaceName) - pagedInfo.TotalCount = len(shopList) - if len(shopList) > 0 { + shopList2, _ := pagedInfo.Data.([]*dao.PageShopWithPlaceName) + var shopList []*dao.PageShopWithPlaceName + pagedInfo.TotalCount = 0 + if len(shopList2) > 0 { for _, v := range shopList { v.Distance = int(jxutils.EarthDistance(v.Lng, v.Lat, lng, lat) * 1000) - } - sort.Sort(PageShopList(shopList)) - if params.Offset < len(shopList) { - index := params.Offset + params.PageSize - if index > len(shopList) { - index = len(shopList) + if v.Distance <= params.Radius { + shopList = append(shopList, v) + } + } + pagedInfo.TotalCount = len(shopList) + if pagedInfo.TotalCount > 0 { + sort.Sort(PageShopList(shopList)) + if params.Offset < len(shopList) { + index := params.Offset + params.PageSize + if index > len(shopList) { + index = len(shopList) + } + shopList = shopList[params.Offset:index] + } else { + shopList = nil } - shopList = shopList[params.Offset:index] - } else { - shopList = nil } } pagedInfo.Data = shopList From d6e172f6f9fab24710186dfd6611af0f2df5e915 Mon Sep 17 00:00:00 2001 From: gazebo Date: Wed, 27 Nov 2019 17:32:38 +0800 Subject: [PATCH 09/13] fk --- controllers/net_spider.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/controllers/net_spider.go b/controllers/net_spider.go index b600686b6..f7ad801ce 100644 --- a/controllers/net_spider.go +++ b/controllers/net_spider.go @@ -92,7 +92,7 @@ func (c *NetSpiderController) QueryPageStores() { var shopList []*dao.PageShopWithPlaceName pagedInfo.TotalCount = 0 if len(shopList2) > 0 { - for _, v := range shopList { + for _, v := range shopList2 { v.Distance = int(jxutils.EarthDistance(v.Lng, v.Lat, lng, lat) * 1000) if v.Distance <= params.Radius { shopList = append(shopList, v) From d6205e955d27ddfd7bf5c6cbb8748f8c7bdd07d5 Mon Sep 17 00:00:00 2001 From: gazebo Date: Wed, 27 Nov 2019 17:59:28 +0800 Subject: [PATCH 10/13] fk --- business/jxutils/jxutils.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/business/jxutils/jxutils.go b/business/jxutils/jxutils.go index a24657e59..0de80c472 100644 --- a/business/jxutils/jxutils.go +++ b/business/jxutils/jxutils.go @@ -210,6 +210,9 @@ func EarthDistance(lng1, lat1, lng2, lat2 float64) float64 { lng2 = lng2 * rad theta := lng2 - lng1 dist := math.Acos(math.Sin(lat1)*math.Sin(lat2) + math.Cos(lat1)*math.Cos(lat2)*math.Cos(theta)) + if dist < 0 { + dist = 0 + } return dist * radius } From d836376ac37242a5795506e4ed3db545e1d9f769 Mon Sep 17 00:00:00 2001 From: gazebo Date: Wed, 27 Nov 2019 18:02:47 +0800 Subject: [PATCH 11/13] fk --- controllers/net_spider.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/controllers/net_spider.go b/controllers/net_spider.go index f7ad801ce..d94268a10 100644 --- a/controllers/net_spider.go +++ b/controllers/net_spider.go @@ -94,6 +94,9 @@ func (c *NetSpiderController) QueryPageStores() { if len(shopList2) > 0 { for _, v := range shopList2 { v.Distance = int(jxutils.EarthDistance(v.Lng, v.Lat, lng, lat) * 1000) + if v.Distance < 0 { + v.Distance = 0 + } if v.Distance <= params.Radius { shopList = append(shopList, v) } From b91163cb18ecfd1fba3891e5a9f78b89cbc3b028 Mon Sep 17 00:00:00 2001 From: gazebo Date: Wed, 27 Nov 2019 21:15:09 +0800 Subject: [PATCH 12/13] =?UTF-8?q?addOrderStatus=E4=B8=AD=EF=BC=8C=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E8=AE=A2=E5=8D=95=E7=8A=B6=E6=80=81=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E9=80=BB=E8=BE=91=EF=BC=9A=201=EF=BC=8C=E5=8F=AA=E6=9C=89?= =?UTF-8?q?=E7=BB=88=E6=AD=A2=E7=8A=B6=E6=80=81=EF=BC=8C=E6=88=96=E8=A7=A3?= =?UTF-8?q?=E9=94=81=E4=BA=8B=E4=BB=B6=E6=89=8D=E4=BC=9A=E8=A7=A3=E9=94=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxcallback/orderman/order.go | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/business/jxcallback/orderman/order.go b/business/jxcallback/orderman/order.go index 19a947619..cf2e74274 100644 --- a/business/jxcallback/orderman/order.go +++ b/business/jxcallback/orderman/order.go @@ -474,20 +474,25 @@ func (c *OrderManager) addOrderStatus(orderStatus *model.OrderStatus, db *dao.Da order.VendorStatus = orderStatus.VendorStatus updateFields := []string{ "VendorStatus", + "UpdatedAt", } if model.IsOrderMainStatus(orderStatus.Status) { order.Status = orderStatus.Status order.StatusTime = orderStatus.StatusTime updateFields = append(updateFields, "Status", "StatusTime") - if order.LockStatus != model.OrderStatusUnknown { - order.LockStatus = model.OrderStatusUnknown - updateFields = append(updateFields, "LockStatus") + if model.IsOrderFinalStatus(orderStatus.Status) { + order.OrderFinishedAt = orderStatus.StatusTime + updateFields = append(updateFields, "OrderFinishedAt") + if order.LockStatus != model.OrderStatusUnknown { + order.LockStatus = model.OrderStatusUnknown + updateFields = append(updateFields, "LockStatus") + } } } else { if model.IsOrderUnlockStatus(orderStatus.Status) { order.LockStatus = model.OrderStatusUnknown updateFields = append(updateFields, "LockStatus") - } else if !model.IsOrderFinalStatus(orderStatus.Status) { + } else if model.IsOrderLockStatus(orderStatus.Status) { if order.LockStatus != model.OrderStatusUnknown { globals.SugarLogger.Warnf("addOrderStatus refOrderID:%s, orderID:%s, order.LockStatus:%d, status.LockStatus:%d", orderStatus.RefVendorOrderID, orderStatus.VendorOrderID, order.LockStatus, orderStatus.Status) } @@ -497,10 +502,6 @@ func (c *OrderManager) addOrderStatus(orderStatus *model.OrderStatus, db *dao.Da updateFields = append(updateFields, "LockStatus", "LockStatusTime", "Flag") } } - if model.IsOrderFinalStatus(orderStatus.Status) { - order.OrderFinishedAt = orderStatus.StatusTime - updateFields = append(updateFields, "OrderFinishedAt") - } utils.CallFuncLogError(func() error { _, err = db.Db.Update(order, updateFields...) return err From 412fe44d32ec0fcddd0fa4cfd6de5c097ecde751 Mon Sep 17 00:00:00 2001 From: gazebo Date: Thu, 28 Nov 2019 08:59:56 +0800 Subject: [PATCH 13/13] =?UTF-8?q?=E6=8C=89=E6=B4=BB=E5=8A=A8=E8=A6=81?= =?UTF-8?q?=E6=B1=82=E5=BC=BA=E5=88=B6=E5=88=B7=E6=96=B0=E5=95=86=E5=93=81?= =?UTF-8?q?=E5=B9=B3=E5=8F=B0=E4=BB=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/act/act.go | 99 ++++++++++++++++++++++++++ business/jxstore/act/act_test.go | 17 ++++- business/jxstore/cms/sync_store_sku.go | 13 +++- business/model/dao/store_sku.go | 57 ++++++++++++++- controllers/act.go | 20 ++++++ routers/commentsRouter_controllers.go | 9 +++ 6 files changed, 208 insertions(+), 7 deletions(-) diff --git a/business/jxstore/act/act.go b/business/jxstore/act/act.go index 119d3a727..a370b7c00 100644 --- a/business/jxstore/act/act.go +++ b/business/jxstore/act/act.go @@ -7,6 +7,7 @@ import ( "git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/baseapi/utils/errlist" + "git.rosy.net.cn/jx-callback/business/jxstore/cms" "git.rosy.net.cn/jx-callback/business/jxutils" "git.rosy.net.cn/jx-callback/business/partner" "git.rosy.net.cn/jx-callback/globals" @@ -937,3 +938,101 @@ func DeleteSkusFromAct(ctx *jxcontext.Context, vendorID int, skuIDs []int, isAsy } return hint, err } + +func ForceUpdateVendorPrice(ctx *jxcontext.Context, vendorID int, actType int, storeSkuList []*ActStoreSkuParam, isAsync bool) (hint string, err error) { + var wrongSkuList []*ActStoreSkuParam + var storeSkuBindList []*model.StoreSkuBind + + db := dao.GetDB() + errList := errlist.New() + for _, v := range storeSkuList { + storeSkuBind := &model.StoreSkuBind{ + StoreID: v.StoreID, + SkuID: v.SkuID, + } + storeSkuBind.DeletedAt = utils.DefaultTimeValue + if err = dao.GetEntity(db, storeSkuBind, model.FieldStoreID, model.FieldSkuID, model.FieldDeletedAt); err == nil { + if v.VendorPrice != 0 { + if err2 := checkDiscountValidation(actType, float64(v.ActualActPrice)*100/float64(v.VendorPrice)); err2 != nil { + v.ErrMsg = err2.Error() + wrongSkuList = append(wrongSkuList, v) + storeSkuBind = nil + } + } else { + vendorPrice := dao.GetStoreSkuBindVendorPrice(storeSkuBind, vendorID) + if checkDiscountValidation(actType, float64(v.ActualActPrice)*100/float64(vendorPrice)) != nil { + if actType == model.ActSkuSecKill { + vendorPrice = int(v.ActualActPrice)*100/maxDiscount4SkuSecKill + 10 + } else if actType == model.ActSkuDirectDown { + vendorPrice = int(v.ActualActPrice) + 10 + } + dao.SetStoreSkuBindVendorPrice(storeSkuBind, vendorID, vendorPrice) + if vendorID != model.VendorIDJX { + dao.SetStoreSkuBindSyncStatus(storeSkuBind, vendorID, dao.GetStoreSkuBindSyncStatus(storeSkuBind, vendorID)|model.SyncFlagPriceMask) + } + storeSkuBind.LastOperator = ctx.GetUserName() + } + } + if storeSkuBind != nil { + storeSkuBindList = append(storeSkuBindList, storeSkuBind) + } + } else { + errList.AddErr(err) + } + } + if err = errList.GetErrListAsOne(); err != nil { + return "", err + } + if len(wrongSkuList) > 0 { + return "", jsonerr.New(wrongSkuList, model.ErrCodeJsonActPriceTooLarger) + } + + storeVendorIDMap := make(map[int]string) + storeSkuIDMap := make(map[int][]int) + + task := tasksch.NewSeqTask2(fmt.Sprintf("强制刷新门店商品%s平台价", model.VendorChineseNames[vendorID]), ctx, false, + func(task *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) { + switch step { + case 0: + errList := errlist.New() + for _, storeSkuBind := range storeSkuBindList { + if _, err2 := dao.UpdateEntity(db, storeSkuBind); err2 == nil { + if storeVendorIDMap[storeSkuBind.StoreID] == "" { + if storeDetail, err2 := dao.GetStoreDetail(db, storeSkuBind.StoreID, vendorID); err2 == nil { + storeVendorIDMap[storeSkuBind.StoreID] = storeDetail.VendorStoreID + } + } + storeSkuIDMap[storeSkuBind.StoreID] = append(storeSkuIDMap[storeSkuBind.StoreID], storeSkuBind.SkuID) + errList.AddErr(err2) + } + } + err = errList.GetErrListAsOne() + case 1: + if vendorID != model.VendorIDJX && len(storeVendorIDMap) > 0 { + var storeIDs []int + for storeID := range storeVendorIDMap { + storeIDs = append(storeIDs, storeID) + } + subTask := tasksch.NewParallelTask("同步平台价格", tasksch.NewParallelConfig().SetIsContinueWhenError(true), ctx, + func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { + storeID := batchItemList[0].(int) + _, err = cms.SyncStoreSkuNew2(ctx, task, vendorID, storeID, storeVendorIDMap[storeID], nil, storeSkuIDMap[storeID], nil, true, false, true) + return retVal, err + }, storeIDs) + tasksch.HandleTask(subTask, task, true).Run() + _, err = subTask.GetResult(0) + } + } + return result, err + }, 2) + tasksch.HandleTask(task, nil, true).Run() + if isAsync { + hint = task.GetID() + } else { + _, err2 := task.GetResult(0) + if err = err2; err == nil { + hint = utils.Int2Str(1) + } + } + return hint, err +} diff --git a/business/jxstore/act/act_test.go b/business/jxstore/act/act_test.go index 670c21a76..47c393cf9 100644 --- a/business/jxstore/act/act_test.go +++ b/business/jxstore/act/act_test.go @@ -185,7 +185,22 @@ func TestAddActStoreBind(t *testing.T) { } func TestSyncAct(t *testing.T) { - _, err := SyncAct(jxcontext.AdminCtx, nil, 1, nil, nil, nil, false) + _, err := SyncAct(jxcontext.AdminCtx, nil, 1, nil, false) + if err != nil { + t.Fatal(err) + } +} + +func TestForceUpdateVendorPrice(t *testing.T) { + _, err := ForceUpdateVendorPrice(jxcontext.AdminCtx, model.VendorIDJD, model.ActSkuDirectDown, []*ActStoreSkuParam{ + &ActStoreSkuParam{ + ActStoreSku: model.ActStoreSku{ + StoreID: 100118, + SkuID: 22509, + }, + ActualActPrice: 9900, + }, + }, false) if err != nil { t.Fatal(err) } diff --git a/business/jxstore/cms/sync_store_sku.go b/business/jxstore/cms/sync_store_sku.go index ee9d426a8..cc8d4d3ea 100644 --- a/business/jxstore/cms/sync_store_sku.go +++ b/business/jxstore/cms/sync_store_sku.go @@ -132,6 +132,10 @@ func SyncStoreCategories(ctx *jxcontext.Context, parentTask tasksch.ITask, vendo } func SyncStoreSkuNew(ctx *jxcontext.Context, parentTask tasksch.ITask, vendorID, storeID int, vendorStoreID string, nameIDs, skuIDs, excludeSkuIDs []int, isAsync, isContinueWhenError bool) (hint string, err error) { + return SyncStoreSkuNew2(ctx, parentTask, vendorID, storeID, vendorStoreID, nameIDs, skuIDs, excludeSkuIDs, false, isAsync, isContinueWhenError) +} + +func SyncStoreSkuNew2(ctx *jxcontext.Context, parentTask tasksch.ITask, vendorID, storeID int, vendorStoreID string, nameIDs, skuIDs, excludeSkuIDs []int, useVendorPriceDirectly, isAsync, isContinueWhenError bool) (hint string, err error) { singleStoreHandler, _ := partner.GetPurchasePlatformFromVendorID(vendorID).(partner.ISingleStoreStoreSkuHandler) if singleStoreHandler != nil { if err = CreateStoreCategoryByStoreSku(ctx, vendorID, storeID, vendorStoreID, nameIDs, skuIDs); err != nil { @@ -146,7 +150,7 @@ func SyncStoreSkuNew(ctx *jxcontext.Context, parentTask tasksch.ITask, vendorID, _, err = SyncStoreCategories(ctx, task, vendorID, storeID, vendorStoreID, nameIDs, skuIDs, false, isContinueWhenError) } case 1: - err = syncStoreSkuNew(ctx, task, false, vendorID, storeID, nameIDs, skuIDs, excludeSkuIDs, isContinueWhenError) + err = syncStoreSkuNew(ctx, task, false, vendorID, storeID, nameIDs, skuIDs, excludeSkuIDs, useVendorPriceDirectly, isContinueWhenError) } return result, err }, 2) @@ -176,7 +180,7 @@ func FullSyncStoreSkuNew(ctx *jxcontext.Context, parentTask tasksch.ITask, vendo if singleStoreHandler != nil { _, err = SyncStoreSkuNew(ctx, task, vendorID, storeID, vendorStoreID, nil, nil, nil, false, isContinueWhenError) } else { - err = syncStoreSkuNew(ctx, task, true, vendorID, storeID, nil, nil, nil, isContinueWhenError) + err = syncStoreSkuNew(ctx, task, true, vendorID, storeID, nil, nil, nil, false, isContinueWhenError) } } return retVal, err @@ -285,7 +289,7 @@ func updateStoreSku(db *dao.DaoDB, vendorID int, storeSkuList []*dao.StoreSkuSyn return num, err } -func syncStoreSkuNew(ctx *jxcontext.Context, parentTask tasksch.ITask, isFull bool, vendorID, storeID int, nameIDs, skuIDs, excludeSkuIDs []int, isContinueWhenError bool) (err error) { +func syncStoreSkuNew(ctx *jxcontext.Context, parentTask tasksch.ITask, isFull bool, vendorID, storeID int, nameIDs, skuIDs, excludeSkuIDs []int, useVendorPriceDirectly, isContinueWhenError bool) (err error) { db := dao.GetDB() storeDetail, err := dao.GetStoreDetail(db, storeID, vendorID) if err != nil { @@ -331,6 +335,9 @@ func syncStoreSkuNew(ctx *jxcontext.Context, parentTask tasksch.ITask, isFull bo } now := jxutils.OperationTime2HourMinuteFormat(time.Now()) for _, sku := range skus { + if !useVendorPriceDirectly { + sku.VendorPrice = 0 + } sku.MergedStatus = MergeSkuSaleStatusWithStoreOpTime(sku, storeDetail, now) var bareSku *partner.StoreSkuInfo isNeedReorder := false diff --git a/business/model/dao/store_sku.go b/business/model/dao/store_sku.go index f7d454e2a..c15fb5504 100644 --- a/business/model/dao/store_sku.go +++ b/business/model/dao/store_sku.go @@ -219,8 +219,9 @@ func GetStoreSkus2(db *DaoDB, vendorID, storeID int, skuIDs []int, mustDirty boo } fieldPrefix := ConvertDBFieldPrefix(model.VendorNames[vendorID]) sql := ` - SELECT t1.id bind_id, t1.sku_id, t1.price, t1.unit_price, t1.status store_sku_status, %s.%s_id vendor_sku_id, - t1.%s_sync_status store_sku_sync_status, t1.store_id, t1.deleted_at bind_deleted_at,t1.status_sale_begin,t1.status_sale_end, + SELECT t1.id bind_id, t1.sku_id, t1.price, t1.unit_price, t1.status store_sku_status, + %s.%s_id vendor_sku_id, t1.%s_sync_status store_sku_sync_status, t1.%s_price vendor_price, + t1.store_id, t1.deleted_at bind_deleted_at,t1.status_sale_begin,t1.status_sale_end, t2.*, t3.id name_id, t3.prefix, t3.name, t3.unit, t3.upc, IF(t11.%s <> '', t11.%s, t3.img) img, @@ -228,7 +229,7 @@ func GetStoreSkus2(db *DaoDB, vendorID, storeID int, skuIDs []int, mustDirty boo t13.%s desc_img, t4.%s_category_id vendor_vendor_cat_id` fmtParams := []interface{}{ - tableName, fieldPrefix, fieldPrefix, + tableName, fieldPrefix, fieldPrefix, fieldPrefix, GetDataResFieldName(vendorID), GetDataResFieldName(vendorID), GetDataResFieldName(vendorID), GetDataResFieldName(vendorID), GetDataResFieldName(vendorID), @@ -661,3 +662,53 @@ func GetStoreSkusByNameIDs(db *DaoDB, storeIDs []int, nameID int) (skuList []*St err = GetRows(db, &skuList, sql, sqlParams...) return skuList, err } + +func SetStoreSkuBindVendorPrice(storeSkuBind *model.StoreSkuBind, vendorID int, vendorPrice int) { + switch vendorID { + case model.VendorIDJD: + storeSkuBind.JdPrice = vendorPrice + case model.VendorIDMTWM: + storeSkuBind.MtwmPrice = vendorPrice + case model.VendorIDEBAI: + storeSkuBind.EbaiPrice = vendorPrice + case model.VendorIDJX: + storeSkuBind.JxPrice = vendorPrice + } +} + +func GetStoreSkuBindVendorPrice(storeSkuBind *model.StoreSkuBind, vendorID int) (vendorPrice int) { + switch vendorID { + case model.VendorIDJD: + vendorPrice = storeSkuBind.JdPrice + case model.VendorIDMTWM: + vendorPrice = storeSkuBind.MtwmPrice + case model.VendorIDEBAI: + vendorPrice = storeSkuBind.EbaiPrice + case model.VendorIDJX: + vendorPrice = storeSkuBind.JxPrice + } + return vendorPrice +} + +func SetStoreSkuBindSyncStatus(storeSkuBind *model.StoreSkuBind, vendorID int, syncStatus int8) { + switch vendorID { + case model.VendorIDJD: + storeSkuBind.JdSyncStatus = syncStatus + case model.VendorIDMTWM: + storeSkuBind.MtwmSyncStatus = syncStatus + case model.VendorIDEBAI: + storeSkuBind.EbaiSyncStatus = syncStatus + } +} + +func GetStoreSkuBindSyncStatus(storeSkuBind *model.StoreSkuBind, vendorID int) (syncStatus int8) { + switch vendorID { + case model.VendorIDJD: + syncStatus = storeSkuBind.JdSyncStatus + case model.VendorIDMTWM: + syncStatus = storeSkuBind.MtwmSyncStatus + case model.VendorIDEBAI: + syncStatus = storeSkuBind.EbaiSyncStatus + } + return syncStatus +} diff --git a/controllers/act.go b/controllers/act.go index 77c892d54..8f94495af 100644 --- a/controllers/act.go +++ b/controllers/act.go @@ -300,3 +300,23 @@ func (c *ActController) DeleteSkusFromAct() { return retVal, "", err }) } + +// @Title 强制更新商品平台价 +// @Description 强制更新商品平台价 +// @Param token header string true "认证token" +// @Param type formData int true "活动类型,3:直降,4:秒杀(美团当前不支持秒杀)" +// @Param vendorID formData int true "厂商ID,当前只支持,京东:0,京西(用于记录活动信息):9" +// @Param actStoreSkuList formData string true "活动门店商品信息" +// @Param isAsync formData bool false "是否异步,缺省否(暂时只支持同步)" +// @Success 200 {object} controllers.CallResult +// @Failure 200 {object} controllers.CallResult +// @router /ForceUpdateVendorPrice [post] +func (c *ActController) ForceUpdateVendorPrice() { + c.callForceUpdateVendorPrice(func(params *tActForceUpdateVendorPriceParams) (retVal interface{}, errCode string, err error) { + var actStoreSkuList []*act.ActStoreSkuParam + if err = jxutils.Strings2Objs(params.ActStoreSkuList, &actStoreSkuList); err == nil { + act.ForceUpdateVendorPrice(params.Ctx, params.VendorID, params.Type, actStoreSkuList, params.IsAsync) + } + return retVal, "", err + }) +} diff --git a/routers/commentsRouter_controllers.go b/routers/commentsRouter_controllers.go index 74b861540..e1ae4ee88 100644 --- a/routers/commentsRouter_controllers.go +++ b/routers/commentsRouter_controllers.go @@ -34,6 +34,15 @@ func init() { Filters: nil, Params: nil}) + beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:ActController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:ActController"], + beego.ControllerComments{ + Method: "ForceUpdateVendorPrice", + Router: `/ForceUpdateVendorPrice`, + AllowHTTPMethods: []string{"post"}, + MethodParams: param.Make(), + Filters: nil, + Params: nil}) + beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:ActController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:ActController"], beego.ControllerComments{ Method: "GetActStoreSkuInfo",