diff --git a/business/jxcallback/orderman/order.go b/business/jxcallback/orderman/order.go
index b8254c1d3..b99e0d1c4 100644
--- a/business/jxcallback/orderman/order.go
+++ b/business/jxcallback/orderman/order.go
@@ -7,6 +7,8 @@ import (
"strings"
"time"
+ "git.rosy.net.cn/baseapi/platformapi/jdeclpapi"
+
"git.rosy.net.cn/jx-callback/business/jxstore/common"
"git.rosy.net.cn/jx-callback/business/jxutils/ddmsg"
"git.rosy.net.cn/jx-callback/business/jxutils/tasksch"
@@ -341,7 +343,13 @@ func (c *OrderManager) updateOrderSkuOtherInfo(order *model.GoodsOrder, db *dao.
}
}
if len(vendorSkuIDs) > 0 {
- l, err := dao.GetStoreSkuPriceAndWeight(db, order.VendorStoreID, order.VendorID, vendorSkuIDs)
+ var vendorStoreID string
+ if order.VendorID == model.VendorIDJDShop {
+ vendorStoreID = model.JdShopMainVendorStoreID
+ } else {
+ vendorStoreID = order.VendorStoreID
+ }
+ l, err := dao.GetStoreSkuPriceAndWeight(db, vendorStoreID, order.VendorID, vendorSkuIDs)
if err != nil {
globals.SugarLogger.Warnf("updateOrderSkuOtherInfo orderID:%s failed with err:%v", order.VendorOrderID, err)
return err
@@ -357,13 +365,30 @@ func (c *OrderManager) updateOrderSkuOtherInfo(order *model.GoodsOrder, db *dao.
if skuBindInfo == nil {
globals.SugarLogger.Infof("updateOrderSkuOtherInfo [运营%s]%s订单sku找不到门店价格(或商品映射),orderID:%s, StoreID:%d, VendorSkuID:%s, sku:%v", opNumStr, model.VendorChineseNames[order.VendorID], order.VendorOrderID, jxStoreID, v.VendorSkuID, v)
} else {
- v.JxSkuID = skuBindInfo.SkuID
// TODO 客户端当前逻辑认为SkuID为0为赠品
if v.SkuID == 0 {
v.SkuID = v.JxSkuID
}
- v.ShopPrice = int64(skuBindInfo.Price)
+ v.JxSkuID = skuBindInfo.SkuID
+ //京东商城的话,门店里可能取不到对应商品
+ if order.VendorID == model.VendorIDJDShop {
+ v.JxSkuID = v.SkuID
+ storeSkus, _ := dao.GetStoresSkusInfo(db, []int{order.StoreID}, []int{v.SkuID})
+ if len(storeSkus) > 0 {
+ v.ShopPrice = int64(storeSkus[0].Price)
+ } else {
+ v.ShopPrice = v.SalePrice * 70 / 100
+ }
+ } else {
+ v.ShopPrice = int64(skuBindInfo.Price)
+ }
v.Weight = skuBindInfo.Weight // 以本地信息中的WEIGHT为准
+ //饿鲜达的订单做一下处理
+ if strings.Contains(order.StoreName, model.ExdStoreName) {
+ if v.SkuID == 0 && !strings.Contains(v.SkuName, "免费") {
+ v.SkuID = v.JxSkuID
+ }
+ }
if skuBindInfo.Price == 0 {
globals.SugarLogger.Infof("updateOrderSkuOtherInfo [运营%s]%s订单sku门店价格为零(一般原因为没有门店价格信息),orderID:%s, StoreID:%d, SkuID:%d, sku:%v", opNumStr, model.VendorChineseNames[order.VendorID], order.VendorOrderID, jxStoreID, v.JxSkuID, v)
}
@@ -434,9 +459,6 @@ func updateSingleOrderEarningPrice(order *model.GoodsOrder, db *dao.DaoDB) {
}
}
if len(skuIDMap) > 0 {
- if order.VendorOrderID == "5000356075877900459" {
- fmt.Println("testupdateSingleOrderEarningPrice", order.VendorOrderID)
- }
actStoreSkuList, err := dao.GetEffectiveActStoreSkuInfo(db, 0, []int{order.VendorID}, model.ActTypeAll, []int{jxStoreID}, jxutils.IntMap2List(skuIDMap), order.OrderCreatedAt, order.OrderCreatedAt)
if err != nil {
globals.SugarLogger.Errorf("updateOrderSkuOtherInfo can not get sku promotion info for error:%v", err)
@@ -1004,19 +1026,29 @@ func GetOrderSimpleInfo(ctx *jxcontext.Context, vendorOrderID string) (getOrderS
func SaveJdsOrders(ctx *jxcontext.Context, orderCreatedStart, orderCreatedEnd time.Time) (err error) {
var (
- pageNo = 1
- pageSize = 10
+ pageSize = 20
)
- orderResult, err := jdshop.CurPurchaseHandler.GetJdsOrders(ctx, utils.Time2Str(orderCreatedStart), utils.Time2Str(orderCreatedEnd), pageNo, pageSize)
+ orderResult, err := jdshop.CurPurchaseHandler.GetJdsOrders(ctx, utils.Time2Str(orderCreatedStart), utils.Time2Str(orderCreatedEnd), 1, pageSize)
if err != nil {
noticeMsg := fmt.Sprintf("京东商城保存订单出错!(多半是cookie过期了),err :[%v]", err)
ddmsg.SendUserMessage(dingdingapi.MsgTyeText, "DDC5657B43EE11E9A9FF525400E86DC0", "cookie", noticeMsg)
ddmsg.SendUserMessage(dingdingapi.MsgTyeText, "1439B3E07D3911EA881A525400E86DC0", "cookie", noticeMsg)
- globals.SugarLogger.Errorf("SaveJdsOrders : %v", err)
+ return err
}
orders, err := result2Orders(ctx, orderResult)
+ if orderResult.TotalCount > pageSize {
+ for pageNO := 2; pageNO < orderResult.TotalCount/pageSize+1; pageNO++ {
+ orderResult, _ := jdshop.CurPurchaseHandler.GetJdsOrders(ctx, utils.Time2Str(orderCreatedStart), utils.Time2Str(orderCreatedEnd), pageNO, pageSize)
+ orders2, _ := result2Orders(ctx, orderResult)
+ orders = append(orders, orders2...)
+ }
+ }
for _, order := range orders {
- // partner.CurOrderManager.OnOrderNew(order, model.Order2Status(order))
+ order.StoreID = 102919
+ order.JxStoreID = 102919
+ order.StoreName = "商城模板(成都发货)"
+ order.VendorStoreID = model.JdShopMainVendorStoreID
+ partner.CurOrderManager.OnOrderNew(order, model.Order2Status(order))
globals.SugarLogger.Debugf("SaveJdsOrders, order: [%v]", utils.Format4Output(order, false))
noticeMsg := fmt.Sprintf("京东商城新订单,订单号:[%v] ,将要发到的门店id:[%v] , 门店名:[%v]", order.VendorOrderID, order.StoreID, order.StoreName)
ddmsg.SendUserMessage(dingdingapi.MsgTyeText, "DDC5657B43EE11E9A9FF525400E86DC0", "京东商城来新订单了!", noticeMsg)
@@ -1043,7 +1075,7 @@ func result2Orders(ctx *jxcontext.Context, result *jdshopapi.AllOrdersResult) (o
}
order := &model.GoodsOrder{
VendorOrderID2: utils.Int64ToStr(jdsOrder.OrderID),
- VendorOrderID: utils.Int64ToStr(jdsOrder.OrderID) + "01",
+ VendorOrderID: utils.Int64ToStr(jdsOrder.OrderID) + "001",
VendorID: model.VendorIDJDShop,
BaseFreightMoney: jxutils.StandardPrice2Int(jdsOrder.Freight),
VendorStatus: utils.Int2Str(jdsOrder.OrderStatus),
@@ -1058,6 +1090,10 @@ func result2Orders(ctx *jxcontext.Context, result *jdshopapi.AllOrdersResult) (o
ActualPayPrice: orderDetail.ActualPayPrice,
Status: model.OrderStatusNew,
TotalShopMoney: utils.Float64TwoInt64(math.Round(utils.Int64ToFloat64(orderDetail.ActualPayPrice) * jdshopapi.JdsPayPercentage)),
+ DeliveryFlag: model.OrderDeliveryFlagMaskScheduleDisabled,
+ DeliveryType: model.OrderDeliveryTypeStoreSelf,
+ StatusTime: utils.Str2Time(jdsOrder.OrderCreateTime + ":00"),
+ OrderSeq: 0,
}
//获取真实手机号
fakeMobile, err := api.JdShopAPI.PhoneSensltiveInfo(order.VendorOrderID2, orderDetail.MobileKey)
@@ -1075,31 +1111,28 @@ func result2Orders(ctx *jxcontext.Context, result *jdshopapi.AllOrdersResult) (o
order.ConsigneeLng = jxutils.StandardCoordinate2Int(lng)
order.ConsigneeLat = jxutils.StandardCoordinate2Int(lat)
}
- if order.StoreName != "" {
- storeMaps, _ := dao.GetStoresMapList(dao.GetDB(), []int{model.VendorIDJDShop}, nil, nil, model.StoreStatusAll, model.StoreIsSyncAll, "", order.StoreName)
- if len(storeMaps) > 0 {
- order.StoreID = storeMaps[0].StoreID
- order.VendorStoreID = storeMaps[0].VendorStoreID
- }
- } else {
- storeList, err := common.GetStoreListByLocation(ctx, jxutils.IntCoordinate2Standard(order.ConsigneeLng), jxutils.IntCoordinate2Standard(order.ConsigneeLat), 5000, false, true)
- if err != nil {
- globals.SugarLogger.Debugf("jds GetStoreListByLocation error: %v", err.Error())
- continue
- }
- order.StoreID = storeList[0].ID
- order.StoreName = storeList[0].Name
+ storeList, err := common.GetStoreListByLocation(ctx, jxutils.IntCoordinate2Standard(order.ConsigneeLng), jxutils.IntCoordinate2Standard(order.ConsigneeLat), 5000, false, true)
+ if err != nil {
+ globals.SugarLogger.Debugf("jds GetStoreListByLocation error: %v", err.Error())
+ continue
+ }
+ order.StoreID = storeList[0].ID
+ order.StoreName = storeList[0].Name
+ storeMaps, _ := dao.GetStoresMapList(dao.GetDB(), []int{model.VendorIDJDShop}, []int{order.StoreID}, nil, model.StoreStatusAll, model.StoreIsSyncAll, "", "")
+ if len(storeMaps) > 0 {
+ order.VendorStoreID = storeMaps[0].VendorStoreID
}
//如果是暂停,表示是预订单
if jdsOrder.OrderStatus == jdshopapi.JdsOrderStatusPause {
order.BusinessType = model.BusinessTypeDingshida
order.ExpectedDeliveredTime = utils.Str2Time(orderDetail.ExpectedDeliveredTime)
} else if jdsOrder.OrderStatus == jdshopapi.JdsOrderStatusWaittingExport {
- order.ExpectedDeliveredTime = order.CreatedAt.Add(time.Hour)
+ order.ExpectedDeliveredTime = order.OrderCreatedAt.Add(time.Hour)
order.BusinessType = model.BusinessTypeImmediate
} else {
globals.SugarLogger.Errorf("未知的京东商城订单状态!status : %v", jdsOrder.OrderStatus)
}
+ setJdsOrderSeq(order)
for _, v := range jdsOrder.OrderItems {
sku := &model.OrderSku{
VendorID: model.VendorIDJDShop,
@@ -1128,6 +1161,19 @@ func result2Orders(ctx *jxcontext.Context, result *jdshopapi.AllOrdersResult) (o
return orders, err
}
+func setJdsOrderSeq(order *model.GoodsOrder) (err error) {
+ var count int
+ sql := `
+ SELECT count(*) FROM goods_order WHERE store_id = ? AND order_create_at >= ? AND order_create_at <= ? AND vendor_id = ?
+ `
+ sqlParams := []interface{}{
+ order.StoreID, utils.Time2Date(time.Now()), utils.Time2Date(time.Now().AddDate(0, 0, 1)), order.VendorID,
+ }
+ err = dao.GetRow(dao.GetDB(), &count, sql, sqlParams)
+ order.OrderSeq = count + 1
+ return err
+}
+
func TransferJdsOrder(ctx *jxcontext.Context, vendorOrderID string, storeID int) (vendorOrderIDJds string, err error) {
globals.SugarLogger.Debugf("jds TransferJdsOrder vendorOrderID: %v, storeID : %v", vendorOrderID, storeID)
var (
@@ -1138,7 +1184,7 @@ func TransferJdsOrder(ctx *jxcontext.Context, vendorOrderID string, storeID int)
if err != nil || order == nil {
return "", fmt.Errorf("未查询到该订单!订单号:[%v]", vendorOrderID)
}
- if order.Status >= model.OrderStatusDelivering {
+ if order.Status >= model.OrderStatusDelivering && order.Status != model.OrderStatusCanceled {
return "", fmt.Errorf("暂不支持此状态的订单进行转移!")
}
if order.VendorID != model.VendorIDJDShop {
@@ -1159,10 +1205,12 @@ func TransferJdsOrder(ctx *jxcontext.Context, vendorOrderID string, storeID int)
waybill = v
}
}
- handler := partner.DeliveryPlatformHandlers[waybill.WaybillVendorID]
- err = handler.Handler.CancelWaybill(waybill, 0, "订单转移被取消")
- if err != nil {
- return "", err
+ if waybill.WaybillVendorID != model.VendorIDJDWL {
+ handler := partner.DeliveryPlatformHandlers[waybill.WaybillVendorID]
+ err = handler.Handler.CancelWaybill(waybill, 0, "订单转移被取消")
+ if err != nil {
+ return "", err
+ }
}
}
err = jdshop.ChangeOrderStatus(vendorOrderID, model.OrderStatusCanceled, "订单转移被取消")
@@ -1170,23 +1218,30 @@ func TransferJdsOrder(ctx *jxcontext.Context, vendorOrderID string, storeID int)
return "", err
}
//重新构建order的数据
- storeMaps, err := dao.GetStoresMapList(db, []int{order.VendorID}, []int{order.StoreID}, nil, model.StoreStatusAll, model.StoreIsSyncAll, "", "")
- if len(storeMaps) > 0 {
+ storeMaps, err := dao.GetStoresMapList(db, []int{order.VendorID}, []int{storeID}, nil, model.StoreStatusAll, model.StoreIsSyncAll, "", "")
+ stores, err := dao.GetStoreList(db, []int{storeID}, nil, nil, nil, "")
+ if len(storeMaps) > 0 && len(stores) > 0 {
order.StoreID = storeID
- order.StoreName = storeMaps[0].StoreName
+ order.StoreName = stores[0].Name
+ order.VendorStoreID = storeMaps[0].VendorStoreID
} else {
return "", fmt.Errorf("未查询到该门店对应的平台信息!门店:[%v]", order.StoreID)
}
if len(order.VendorOrderID) > 12 {
suffix := utils.Str2Int(order.VendorOrderID[12:len(order.VendorOrderID)])
suffix++
- order.VendorOrderID = order.VendorOrderID2 + utils.Int2Str(suffix)
+ order.VendorOrderID = utils.Int64ToStr(utils.Str2Int64(order.VendorOrderID2)*100) + utils.Int2Str(suffix)
}
for _, sku := range skus {
sku.VendorOrderID = order.VendorOrderID
+ sku.ID = 0
order.Skus = append(order.Skus, sku)
}
+ if storeID != model.JdShopMainStoreID {
+ order.DeliveryFlag = model.NO
+ }
order.Status = model.OrderStatusNew
+ setJdsOrderSeq(order)
err = partner.CurOrderManager.OnOrderNew(order, model.Order2Status(order))
vendorOrderIDJds = order.VendorOrderID
return vendorOrderIDJds, err
@@ -1218,8 +1273,64 @@ func SendJdwlForJdsOrder(ctx *jxcontext.Context, vendorOrderID string) (err erro
return err
}
}
- handler := partner.DeliveryPlatformHandlers[model.VendorIDJDWL]
- waybill2, err := handler.Handler.CreateWaybill(order, 0)
- jdshop.CurPurchaseHandler.OrderExport(ctx, vendorOrderID, waybill2.VendorWaybillID, false)
+ var vendorWaybillID string
+ if order.StoreID == model.JdShopMainStoreID {
+ var (
+ goodsNos []string
+ prices []string
+ quantities []string
+ )
+ for _, v := range order.Skus {
+ skus, err := dao.GetSkus(db, []int{v.SkuID}, nil, nil, nil, nil)
+ if err != nil || len(skus) == 0 {
+ continue
+ }
+ goodsNos = append(goodsNos, skus[0].EclpID)
+ prices = append(prices, "0")
+ quantities = append(quantities, utils.Int2Str(v.Count))
+ }
+ eclpSoNo, err := api.JdEclpAPI.AddOrder(&jdeclpapi.AddOrderParam{
+ IsvUUID: order.VendorOrderID,
+ IsvSource: jdeclpapi.IsvSource,
+ ShopNo: jdeclpapi.ShopNo,
+ DepartmentNo: jdeclpapi.DepartmentNo,
+ WarehouseNo: jdeclpapi.WarehouseNo,
+ SalesPlatformOrderNo: order.VendorOrderID,
+ SalePlatformSource: jdeclpapi.SalePlatformSource,
+ ConsigneeName: order.ConsigneeName,
+ ConsigneeMobile: order.ConsigneeMobile,
+ ConsigneeAddress: order.ConsigneeAddress,
+ OrderMark: jdeclpapi.OrderMark,
+ GoodsNo: strings.Join(goodsNos, ","),
+ Price: strings.Join(prices, ","),
+ Quantity: strings.Join(quantities, ","),
+ })
+ waybill := &model.Waybill{
+ VendorOrderID: order.VendorOrderID,
+ OrderVendorID: model.VendorIDJX,
+ VendorWaybillID: eclpSoNo,
+ WaybillVendorID: model.VendorIDJDWL,
+ Status: model.WaybillStatusDelivering,
+ WaybillCreatedAt: time.Now(),
+ StatusTime: time.Now(),
+ WaybillFinishedAt: utils.DefaultTimeValue,
+ DeliveryFlag: model.OrderDeliveryFlagMaskScheduleDisabled,
+ }
+ dao.CreateEntity(db, waybill)
+ if err != nil {
+ return err
+ }
+ order.EclpOutID = eclpSoNo
+ dao.UpdateEntity(db, order, "EclpOutID")
+ vendorWaybillID = eclpSoNo
+ } else {
+ handler := partner.DeliveryPlatformHandlers[model.VendorIDJDWL]
+ waybill2, err := handler.Handler.CreateWaybill(order, 0)
+ if err != nil {
+ return err
+ }
+ vendorWaybillID = waybill2.VendorWaybillID
+ }
+ jdshop.CurPurchaseHandler.OrderExport(ctx, vendorOrderID, vendorWaybillID, false)
return err
}
diff --git a/business/jxcallback/orderman/order_afs.go b/business/jxcallback/orderman/order_afs.go
index dbb58cae3..6cc91da54 100644
--- a/business/jxcallback/orderman/order_afs.go
+++ b/business/jxcallback/orderman/order_afs.go
@@ -295,6 +295,7 @@ func (c *OrderManager) updateAfsOrderSkuOtherInfo(db *dao.DaoDB, order *model.Af
globals.SugarLogger.Infof("updateAfsOrderSkuOtherInfo [运营%s]%s订单sku找不到门店价格(或商品映射),orderID:%s, StoreID:%d, VendorSkuID:%s, sku:%v", opNumStr, model.VendorChineseNames[order.VendorID], order.VendorOrderID, jxStoreID, v.VendorSkuID, v)
} else {
v.JxSkuID = skuBindInfo.SkuID
+ v.ShopPrice = int64(skuBindInfo.Price)
}
}
if actStoreSkuMap != nil {
diff --git a/business/jxcallback/scheduler/defsch/defsch.go b/business/jxcallback/scheduler/defsch/defsch.go
index 94c9ad097..643de03df 100644
--- a/business/jxcallback/scheduler/defsch/defsch.go
+++ b/business/jxcallback/scheduler/defsch/defsch.go
@@ -6,6 +6,12 @@ import (
"sync"
"time"
+ "github.com/astaxie/beego"
+
+ "git.rosy.net.cn/jx-callback/business/jxstore/cms"
+
+ "git.rosy.net.cn/jx-callback/business/authz"
+ "git.rosy.net.cn/jx-callback/business/authz/autils"
"git.rosy.net.cn/jx-callback/business/jxutils/ddmsg"
"git.rosy.net.cn/jx-callback/business/partner/purchase/jdshop"
@@ -1384,9 +1390,11 @@ func (s *DefScheduler) notifyNewOrder(order *model.GoodsOrder) {
} else {
weixinmsg.NotifyNewOrder(order)
}
- smsmsg.NotifyNewOrder(order)
OrderProfitWarning(order)
- smsmsg.NotifyNewUserOrder(order)
+ if order.VendorID != model.VendorIDJDShop {
+ smsmsg.NotifyNewOrder(order)
+ smsmsg.NotifyNewUserOrder(order)
+ }
})
}
}
@@ -1440,18 +1448,49 @@ func OrderProfitWarning(order *model.GoodsOrder) {
storeDetail, err := dao.GetStoreDetail(db, storeID, order.VendorID)
if storeDetail != nil && err == nil {
payPercentage := storeDetail.PayPercentage
- if payPercentage >= 50 {
- profit = utils.Str2Float64(utils.Int64ToStr(order.TotalShopMoney-order.EarningPrice)) / 100
+ if beego.BConfig.RunMode == "jxgy" {
+ if payPercentage >= 50 {
+ profit = utils.Str2Float64(utils.Int64ToStr(order.TotalShopMoney-order.EarningPrice)) / 100
+ } else {
+ profit = utils.Str2Float64(utils.Int64ToStr(order.TotalShopMoney*int64(payPercentage)/200)) / 100
+ }
} else {
- profit = utils.Str2Float64(utils.Int64ToStr(order.TotalShopMoney*int64(payPercentage)/200)) / 100
+ if payPercentage >= 50 {
+ profit = utils.Str2Float64(utils.Int64ToStr(order.TotalShopMoney-order.ShopPrice)) / 100
+ } else {
+ profit = utils.Str2Float64(utils.Int64ToStr(order.TotalShopMoney*int64(payPercentage)/200)) / 100
+ }
}
if profit < 0 {
operatorPhone, operatorName := getOrderOperatorInfo(order, storeDetail)
+ operatorRole := getOrderOperatorRoleInfo(order, storeDetail)
if operatorPhone != "" {
+ var (
+ roleList []*authz.RoleInfo
+ userIDs []string
+ flag = false
+ )
+ roleList = append(roleList, autils.NewRole(operatorRole, 0))
+ userIDMap, err := cms.GetRolesUserList(jxcontext.AdminCtx, roleList)
noticeMsg := fmt.Sprintf("利润 :[%v],运营负责人:[%v],门店ID:[%v],平台门店ID[%v],门店名:[%v],订单序号:[%v],订单号(点击进入详情):%v", profit, operatorName, order.StoreID, order.VendorStoreID, order.StoreName, order.OrderSeq, globals.BackstageHost+"/#/ordermanager/"+order.VendorOrderID)
user, err := dao.GetUserByID(db, "mobile", operatorPhone)
if user != nil && err == nil {
- ddmsg.SendUserMessage(dingdingapi.MsgTyeText, user.UserID, "警告!此订单利润低于0", noticeMsg)
+ for _, v := range userIDMap {
+ for _, vv := range v {
+ userIDs = append(userIDs, vv)
+ }
+ }
+ for _, v := range userIDs {
+ if v == user.UserID {
+ flag = true
+ }
+ }
+ if !flag {
+ userIDs = append(userIDs, user.UserID)
+ }
+ for _, v := range userIDs {
+ ddmsg.SendUserMessage(dingdingapi.MsgTyeText, v, "警告!此订单利润低于0", noticeMsg)
+ }
}
}
}
@@ -1500,3 +1539,15 @@ func getOrderOperatorInfo(order *model.GoodsOrder, storeDetail *dao.StoreDetail)
}
return operatorPhone, operatorName
}
+
+func getOrderOperatorRoleInfo(order *model.GoodsOrder, storeDetail *dao.StoreDetail) (roleName string) {
+ switch order.VendorID {
+ case model.VendorIDJD:
+ roleName = storeDetail.OperatorRole
+ case model.VendorIDMTWM:
+ roleName = storeDetail.OperatorRole2
+ case model.VendorIDEBAI:
+ roleName = storeDetail.OperatorRole3
+ }
+ return roleName
+}
diff --git a/business/jxstore/cms/sku.go b/business/jxstore/cms/sku.go
index deac305ac..9d9d6d5f2 100644
--- a/business/jxstore/cms/sku.go
+++ b/business/jxstore/cms/sku.go
@@ -588,6 +588,9 @@ func GetSkuNames(ctx *jxcontext.Context, keyword string, isBySku, isQueryMidPric
t1.price,
t1.img,
t1.img2,
+ t1.img3,
+ t1.img_watermark,
+ t1.img_mix,
t1.status,
t1.is_spu,
t1.desc_img,
@@ -596,7 +599,8 @@ func GetSkuNames(ctx *jxcontext.Context, keyword string, isBySku, isQueryMidPric
t1.ex_prefix_begin,
t1.ex_prefix_end,
t1.yb_name_suffix,
- t1.jds_stock_switch
+ t1.jds_stock_switch,
+ t1.preparation_time
`
if isQueryMidPrice {
sql += `,
@@ -624,6 +628,9 @@ func GetSkuNames(ctx *jxcontext.Context, keyword string, isBySku, isQueryMidPric
t1.price,
t1.img,
t1.img2,
+ t1.img3,
+ t1.img_watermark,
+ t1.img_mix,
t1.status,
t1.is_spu,
t1.desc_img,
@@ -637,6 +644,7 @@ func GetSkuNames(ctx *jxcontext.Context, keyword string, isBySku, isQueryMidPric
t1.ex_prefix_end,
t1.yb_name_suffix,
t1.jds_stock_switch,
+ t1.preparation_time,
`
if isQueryMidPrice {
sqlData += " t4.mid_unit_price,"
@@ -903,7 +911,7 @@ func UpdateSkuName(ctx *jxcontext.Context, nameID int, payload map[string]interf
}
}
globals.SugarLogger.Debugf("UpdateSkuName valid:%s", utils.Format4Output(valid, false))
- for _, imgName := range []string{"img", "img2"} {
+ for _, imgName := range []string{"img", "img2", "img3"} {
if valid[imgName] != nil {
if imgStr := utils.Interface2String(valid[imgName]); imgStr != "" {
_, err2 := datares.TryRegisterDataResource(ctx, skuName.Name, valid[imgName].(string), model.ImgTypeMain, true)
@@ -1517,7 +1525,7 @@ func GetJdUpcCodeByName(ctx *jxcontext.Context, name, upcCode string) (productIn
return productInfos, err
}
-func UpdateSkuNamesExPrefix(ctx *jxcontext.Context, nameIDs []int, exPrefix, fromTime, toTime string, isAsync, isContinueWhenError bool) (hint string, err error) {
+func UpdateSkuNamesExPrefix(ctx *jxcontext.Context, nameIDs []int, imgWaterMark string, vendorID int, exPrefix, fromTime, toTime string, isAsync, isContinueWhenError bool) (hint string, err error) {
var (
fromTimeP time.Time
toTimeP time.Time
@@ -1545,24 +1553,30 @@ func UpdateSkuNamesExPrefix(ctx *jxcontext.Context, nameIDs []int, exPrefix, fro
"exPrefix": exPrefix,
"exPrefixBegin": fromTimeP,
"exPrefixEnd": toTimeP,
+ "imgWaterMark": imgWaterMark,
+ "exVendorID": vendorID,
}
- if now.Sub(toTimeP) <= 0 && now.Sub(fromTimeP) >= 0 {
+ if now.Sub(toTimeP) <= 0 && now.Sub(fromTimeP) <= 0 {
_, err = UpdateSkuName(ctx, nameID, payload, false)
} else if now.Sub(fromTimeP) > 0 && now.Sub(toTimeP) > 0 {
payload["exPrefixBegin"] = nil
payload["exPrefixEnd"] = nil
+ payload["imgWaterMark"] = nil
+ payload["exVendorID"] = nil
_, err = UpdateSkuName(ctx, nameID, payload, false)
} else {
skuList, err := dao.GetSkus(db, nil, []int{nameID}, nil, nil, nil)
if err == nil && len(skuList) > 0 {
if skuList[0].ExPrefixBegin != nil {
_, err = UpdateSkuName(ctx, nameID, payload, false)
- CurVendorSync.SyncStoresSkus2(ctx, nil, 0, db, partner.GetSingleStoreVendorIDs(), nil, false, []int{skuList[0].ID}, nil, model.SyncFlagModifiedMask, true, true)
+ CurVendorSync.SyncStoresSkus2(ctx, nil, 0, db, []int{vendorID}, nil, false, []int{skuList[0].ID}, nil, model.SyncFlagModifiedMask, true, true)
} else {
skuName := &model.SkuName{
ExPrefix: exPrefix,
ExPrefixBegin: &fromTimeP,
ExPrefixEnd: &toTimeP,
+ ImgWatermark: imgWaterMark,
+ ExVendorID: vendorID,
}
skuName.ID = nameID
skuName.LastOperator = ctx.GetLoginID()
@@ -1574,7 +1588,7 @@ func UpdateSkuNamesExPrefix(ctx *jxcontext.Context, nameIDs []int, exPrefix, fro
panic(r)
}
}()
- _, err = dao.UpdateEntity(db, skuName, "ExPrefix", "ExPrefixBegin", "ExPrefixEnd", "LastOperator", "UpdatedAt")
+ _, err = dao.UpdateEntity(db, skuName, "ImgWatermark", "ExVendorID", "ExPrefix", "ExPrefixBegin", "ExPrefixEnd", "LastOperator", "UpdatedAt")
dao.Commit(db)
}
}
@@ -1592,7 +1606,7 @@ func UpdateSkuNamesExPrefix(ctx *jxcontext.Context, nameIDs []int, exPrefix, fro
for _, v := range skuList {
skuIDs = append(skuIDs, v.ID)
}
- CurVendorSync.SyncStoresSkus2(ctx, nil, 0, db, partner.GetSingleStoreVendorIDs(), nil, false, skuIDs, nil, model.SyncFlagModifiedMask, true, true)
+ CurVendorSync.SyncStoresSkus2(ctx, nil, 0, db, []int{vendorID}, nil, false, skuIDs, nil, model.SyncFlagModifiedMask, true, true)
}
}
}
@@ -2520,3 +2534,72 @@ func deleteJdsSku(db *dao.DaoDB, skuID int) (err error) {
}
return err
}
+
+func UpdateSkuExinfoMap(ctx *jxcontext.Context, nameIDs []int, imgWaterMark string, vendorID int, exPrefix, fromTime, toTime string, isAsync, isContinueWhenError bool) (hint string, err error) {
+ var (
+ fromTimeP time.Time
+ toTimeP time.Time
+ db = dao.GetDB()
+ )
+ if fromTime != "" {
+ fromTimeP = utils.Time2Date(utils.Str2Time(fromTime))
+ }
+ if toTime != "" {
+ toTimeP = utils.Time2Date(utils.Str2Time(toTime))
+ }
+ if toTimeP.Before(fromTimeP) {
+ return "", fmt.Errorf("结束时间不可以小于开始时间!开始时间:[%v],结束时间:[%v]", fromTimeP, toTimeP)
+ }
+ task := tasksch.NewParallelTask("UpdateSkuExinfoMap", tasksch.NewParallelConfig().SetIsContinueWhenError(isContinueWhenError), ctx,
+ func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
+ nameID := batchItemList[0].(int)
+ skuEx := &model.SkuExinfoMap{
+ NameID: nameID,
+ ImgWatermark: imgWaterMark,
+ ExPrefix: exPrefix,
+ VendorID: vendorID,
+ BeginAt: fromTimeP,
+ EndAt: toTimeP,
+ }
+ dao.WrapAddIDCULDEntity(skuEx, ctx.GetUserName())
+ skuExs, _ := dao.GetSkuExinfos(db, []int{nameID}, []int{vendorID}, "", utils.ZeroTimeValue, utils.ZeroTimeValue)
+ if len(skuExs) > 0 {
+ skuEx2 := skuExs[0]
+ skuEx2.DeletedAt = time.Now()
+ skuEx2.LastOperator = ctx.GetUserName()
+ dao.UpdateEntity(db, skuEx2, "DeletedAt", "LastOperator")
+ dao.CreateEntity(db, skuEx)
+ } else {
+ dao.CreateEntity(db, skuEx)
+ }
+ now := utils.Time2Date(time.Now())
+ if now.Sub(fromTimeP) >= 0 && now.Sub(toTimeP) <= 0 {
+ var skuIDs []int
+ skuList, err2 := dao.GetSkus(db, nil, []int{nameID}, nil, nil, nil)
+ if err = err2; err == nil {
+ if len(skuList) > 0 {
+ for _, v := range skuList {
+ skuIDs = append(skuIDs, v.ID)
+ }
+ if partner.IsMultiStore(vendorID) {
+ for _, v := range skuIDs {
+ OnUpdateThing(ctx, db, nil, int64(v), model.ThingTypeSku)
+ }
+ CurVendorSync.SyncSkus(ctx, db, nil, skuIDs, isAsync, isContinueWhenError, ctx.GetUserName())
+ } else {
+ CurVendorSync.SyncStoresSkus2(ctx, nil, 0, db, []int{vendorID}, nil, false, skuIDs, nil, model.SyncFlagModifiedMask, isAsync, isContinueWhenError)
+ }
+ }
+ }
+ }
+ return retVal, err
+ }, nameIDs)
+ tasksch.HandleTask(task, nil, true).Run()
+ if isAsync {
+ hint = task.GetID()
+ } else {
+ _, err = task.GetResult(0)
+ hint = "1"
+ }
+ return hint, err
+}
diff --git a/business/jxstore/cms/store.go b/business/jxstore/cms/store.go
index 714fe5943..4f8f76c24 100644
--- a/business/jxstore/cms/store.go
+++ b/business/jxstore/cms/store.go
@@ -370,6 +370,17 @@ func getStoresSql(ctx *jxcontext.Context, keyword string, params map[string]inte
}
}
+ if params["storeLevels"] != nil {
+ var storeLevels []string
+ if err = jxutils.Strings2Objs(utils.Interface2String(params["storeLevels"]), &storeLevels); err != nil {
+ return "", nil, "", nil, err
+ }
+ if len(storeLevels) > 0 {
+ sqlWhere += " AND t1.store_level IN (" + dao.GenQuestionMarks(len(storeLevels)) + ")"
+ sqlWhereParams = append(sqlWhereParams, storeLevels)
+ }
+ }
+
sql = sqlFrom + sqlWhere
sqlParams = append(sqlParams, sqlFromParams...)
sqlParams = append(sqlParams, sqlWhereParams...)
diff --git a/business/jxstore/cms/store_sku.go b/business/jxstore/cms/store_sku.go
index 80c7637ed..c2d2c3ffe 100644
--- a/business/jxstore/cms/store_sku.go
+++ b/business/jxstore/cms/store_sku.go
@@ -13,6 +13,8 @@ import (
"time"
"unicode"
+ "github.com/astaxie/beego"
+
"git.rosy.net.cn/baseapi/platformapi/jdshopapi"
"git.rosy.net.cn/jx-callback/globals/api"
@@ -843,8 +845,7 @@ func UpdateStoreSkus(ctx *jxcontext.Context, causeFlag, storeID int, skuBindInfo
func UpdateStoresSkus(ctx *jxcontext.Context, causeFlag int, storeIDs []int, skuBindInfos []*StoreSkuBindInfo, isScale, isRefreshHigh, isAsync, isContinueWhenError bool) (hint string, err error) {
globals.SugarLogger.Debugf("UpdateStoresSkus:%s, storeIDs:%v, skuBindInfos:%s", ctx.GetTrackInfo(), storeIDs, utils.Format4Output(skuBindInfos, true))
- flag, err := doStoreSkuAudit(ctx, storeIDs, skuBindInfos)
- if !flag {
+ if beego.BConfig.RunMode == "jxgy" {
var num int64
db := dao.GetDB()
skuIDs, err := updateStoresSkusWithoutSync(ctx, db, storeIDs, skuBindInfos, isScale, isRefreshHigh)
@@ -859,6 +860,24 @@ func UpdateStoresSkus(ctx *jxcontext.Context, causeFlag int, storeIDs []int, sku
if num == 0 || !isAsync || hint == "" {
hint = utils.Int64ToStr(num)
}
+ } else {
+ flag, _ := doStoreSkuAudit(ctx, storeIDs, skuBindInfos)
+ if !flag {
+ var num int64
+ db := dao.GetDB()
+ skuIDs, err := updateStoresSkusWithoutSync(ctx, db, storeIDs, skuBindInfos, isScale, isRefreshHigh)
+ if err != nil {
+ return "", err
+ }
+ isAsync = asyncStoreSkuOpFilter(ctx, isAsync)
+ num = int64(len(skuIDs))
+ if num > 0 {
+ hint, err = CurVendorSync.SyncStoresSkus(ctx, nil, causeFlag, db, nil, storeIDs, skuIDs, false, isAsync, isContinueWhenError)
+ }
+ if num == 0 || !isAsync || hint == "" {
+ hint = utils.Int64ToStr(num)
+ }
+ }
}
return hint, err
}
@@ -1107,7 +1126,7 @@ func updateStoresSkusWithoutSync(ctx *jxcontext.Context, db *dao.DaoDB, storeIDs
skuBind.Status = tmpStatus
}
if globals.IsAddEvent {
- err = AddEventDetail(db, ctx, model.OperateAdd, v.RealSkuID, model.ThingTypeSku, storeID, "", "")
+ err = AddEventDetail(db, ctx, model.OperateAdd, v.RealSkuID, model.ThingTypeSku, storeID, "", utils.Int2Str(skuBind.UnitPrice))
}
setStoreSkuBindStatus(skuBind, model.SyncFlagNewMask)
dao.WrapAddIDCULDEntity(skuBind, userName)
@@ -2351,7 +2370,7 @@ func ReCalculateJxPrice(db *dao.DaoDB, ctx *jxcontext.Context, storeIDs []int) (
if storeSkuList, err := dao.GetStoresSkusInfo(db, []int{storeID}, nil); err == nil {
for _, skuBind := range storeSkuList {
skuBind.JxPrice = jxutils.CaculatePriceByPricePack(storeDetail.PricePercentagePackObj, int(storeDetail.PricePercentage), skuBind.Price)
- dao.UpdateEntity(db, skuBind)
+ dao.UpdateEntity(db, skuBind, "JxPrice")
}
} else {
return nil, err
@@ -4504,6 +4523,14 @@ func doStoreSkuAudit(ctx *jxcontext.Context, storeIDs []int, skuBindInfos []*Sto
time.Sleep(time.Second / 5)
db := dao.GetDB()
for _, storeID := range storeIDs {
+ stores, _ := dao.GetStoreList(db, []int{storeID}, nil, nil, nil, "")
+ //扣点的门店改价不进审核
+ if len(stores) > 0 {
+ if stores[0].PayPercentage <= 50 || stores[0].StoreLevel == "E" {
+ globals.SugarLogger.Debugf("doStoreSkuAudit return0 storeID : %v", storeID)
+ return false, err
+ }
+ }
for _, skuBindInfo := range skuBindInfos {
globals.SugarLogger.Debugf("doStoreSkuAudit storeID: %v , nameID: %v", storeID, skuBindInfo.NameID)
storeAudits, err := dao.GetStoreSkuAuditLight(db, []int{storeID}, []int{skuBindInfo.NameID}, model.StoreAuditStatusOnline)
@@ -4584,7 +4611,7 @@ func StoreSkuPriceAudit(ctx *jxcontext.Context, storeSkuAudits []*model.StoreSku
if status == model.StoreAuditStatusOnline {
return "", fmt.Errorf("审核标志不正确!")
}
- task := tasksch.NewParallelTask("StoreSkuPriceAudit", tasksch.NewParallelConfig().SetParallelCount(1).SetIsContinueWhenError(isContinueWhenError), ctx,
+ task := tasksch.NewParallelTask("StoreSkuPriceAudit", tasksch.NewParallelConfig().SetParallelCount(5).SetIsContinueWhenError(isContinueWhenError), ctx,
func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
storeAudit := batchItemList[0].(*model.StoreSkuAudit)
storeAudits, err := dao.GetStoreSkuAuditLight(db, []int{storeAudit.StoreID}, []int{storeAudit.NameID}, model.StoreAuditStatusOnline)
@@ -4594,10 +4621,10 @@ func StoreSkuPriceAudit(ctx *jxcontext.Context, storeSkuAudits []*model.StoreSku
if len(storeAudits) > 1 {
return retVal, fmt.Errorf("查询到该门店该商品的待审核信息大于1条!storeID: %v, nameID: %v", storeAudit.StoreID, storeAudit.NameID)
}
- flag := false
+ // flag := false
//审核通过
if status == model.StoreAuditStatusCreated {
- flag = true
+ // flag = true
storeAudits[0].UserID = ctx.GetUserID()
storeAudits[0].Status = model.StoreAuditStatusCreated
storeAudits[0].Remark = storeAudit.Remark
@@ -4640,19 +4667,20 @@ func StoreSkuPriceAudit(ctx *jxcontext.Context, storeSkuAudits []*model.StoreSku
} else {
return retVal, fmt.Errorf("审核标志不正确!")
}
+ //TODO 暂时先不推消息了
if err == nil {
- if globals.IsProductEnv() {
- skuAndNames, err := dao.GetSkus(db, nil, []int{storeAudit.NameID}, nil, nil, nil)
- if len(skuAndNames) > 0 && err == nil {
- price := 0
- if storeAudit.AuditPrice != 0 {
- price = storeAudit.AuditPrice
- } else {
- price = storeAudits[0].UnitPrice
- }
- weixinmsg.NotifyStoreOpRequestStatus(flag, storeAudit.StoreID, storeAudit.NameID, jxutils.ComposeSpuName(skuAndNames[0].Prefix, skuAndNames[0].Name, 0), storeAudits[0].OriginUnitPrice, price, storeAudit.Remark)
- }
- }
+ // if globals.IsProductEnv() {
+ // skuAndNames, err := dao.GetSkus(db, nil, []int{storeAudit.NameID}, nil, nil, nil)
+ // if len(skuAndNames) > 0 && err == nil {
+ // price := 0
+ // if storeAudit.AuditPrice != 0 {
+ // price = storeAudit.AuditPrice
+ // } else {
+ // price = storeAudits[0].UnitPrice
+ // }
+ // weixinmsg.NotifyStoreOpRequestStatus(flag, storeAudit.StoreID, storeAudit.NameID, jxutils.ComposeSpuName(skuAndNames[0].Prefix, skuAndNames[0].Name, 0), storeAudits[0].OriginUnitPrice, price, storeAudit.Remark)
+ // }
+ // }
}
return retVal, err
}, storeSkuAudits)
diff --git a/business/jxstore/cms/sync.go b/business/jxstore/cms/sync.go
index e85044885..54fa95b53 100644
--- a/business/jxstore/cms/sync.go
+++ b/business/jxstore/cms/sync.go
@@ -7,6 +7,7 @@ import (
"time"
"git.rosy.net.cn/jx-callback/business/partner/putils"
+ "git.rosy.net.cn/jx-callback/globals/api"
"git.rosy.net.cn/baseapi"
"git.rosy.net.cn/baseapi/platformapi/dingdingapi"
@@ -677,6 +678,7 @@ func (v *VendorSync) LoopStoresMap2(ctx *jxcontext.Context, parentTask tasksch.I
resultList, err2 := task.GetResult(0)
if len(task.GetFailedList()) > 0 {
err2 = buildErrMsg(task)
+ err = err2
}
if err = err2; err == nil {
if len(resultList) == 0 {
@@ -1088,58 +1090,96 @@ func (v *VendorSync) SyncJdsStoresSkus(ctx *jxcontext.Context, storeIDs []int, i
var (
db = dao.GetDB()
)
+ storeSkus, _ := dao.GetStoresSkusInfo(db, []int{model.JdShopMainStoreID}, nil)
_, hint, err = v.LoopStoresMap2(ctx, nil, db, fmt.Sprintf("同步京东商城库存商品信息:%v", storeIDs), isAsync, true, []int{model.VendorIDJDShop}, storeIDs, false,
func(t *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (interface{}, error) {
loopMapInfo := batchItemList[0].(*LoopStoreMapInfo)
if handler := v.GetStoreHandler(loopMapInfo.VendorID); handler != nil {
- parallelCount := 5
- if model.MultiStoresVendorMap[loopMapInfo.VendorID] == 1 {
- parallelCount = 2
+ for _, storeMap := range loopMapInfo.StoreMapList {
+ if storeMap.Status > model.StoreStatusDisabled && storeMap.StoreID != model.JdShopMainStoreID && storeMap.SyncRule != 0 {
+ err = syncJdsStoresSkus(ctx, db, nil, storeMap, isAsync, isContinueWhenError)
+ }
+ err = syncJdsStoreStock(ctx, db, storeSkus, storeMap)
}
- loopStoreTask := tasksch.NewParallelTask(fmt.Sprintf("处理平台%s", model.VendorChineseNames[loopMapInfo.VendorID]),
- tasksch.NewParallelConfig().SetParallelCount(parallelCount).SetIsContinueWhenError(isContinueWhenError), ctx,
- func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
- storeMap := batchItemList[0].(*model.StoreMap)
- if storeMap.Status > model.StoreStatusDisabled && storeMap.StoreID != model.JdShopMainStoreID && storeMap.SyncRule != 0 {
- err = syncJdsStoresSkus(ctx, db, task, storeMap, isAsync, isContinueWhenError)
- }
- return nil, err
- }, loopMapInfo.StoreMapList)
- t.AddChild(loopStoreTask).Run()
- _, err = loopStoreTask.GetResult(0)
}
return nil, partner.AddVendorInfo2Err(err, loopMapInfo.VendorID)
}, isContinueWhenError)
return hint, err
}
+func syncJdsStoreStock(ctx *jxcontext.Context, db *dao.DaoDB, storeSkus []*model.StoreSkuBind, storeMap *model.StoreMap) (err error) {
+ for _, storeSku := range storeSkus {
+ stock := 0
+ if storeSku.Status == model.StoreSkuBindStatusNormal {
+ stock = 9999
+ }
+ storeSku2, _ := dao.GetStoresSkusInfo(db, []int{storeMap.StoreID}, []int{storeSku.SkuID})
+ if storeSku.JdsID != 0 && len(storeSku2) > 0 {
+ if storeSku.Status != storeSku2[0].Status {
+ err = api.JdShopAPI.UpdateSkuSiteStock(storeSku.JdsID, stock, utils.Str2Int(storeMap.VendorStoreID))
+ }
+ }
+ }
+ // task := tasksch.NewParallelTask("syncJdsStoreStock", tasksch.NewParallelConfig().SetIsContinueWhenError(true), ctx,
+ // func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
+ // storeSku := batchItemList[0].(*model.StoreSkuBind)
+
+ // return retVal, err
+ // }, storeSkus)
+ // tasksch.HandleTask(task, nil, true).Run()
+ // _, err = task.GetResult(0)
+ return err
+}
+
func syncJdsStoresSkus(ctx *jxcontext.Context, db *dao.DaoDB, parentTask tasksch.ITask, storeMap *model.StoreMap, isAsync, isContinueWhenError bool) (err error) {
var (
- mainSkusMap = make(map[int]*model.StoreSkuBind)
- skusMap = make(map[int]*model.StoreSkuBind)
- updateList []*model.StoreSkuBind
- addList []*model.StoreSkuBind
+ mainSkusMap = make(map[int][]*dao.StoreSkuSyncInfo)
+ skusMap = make(map[int][]*dao.StoreSkuSyncInfo)
+ updateList []*dao.StoreSkuSyncInfo
+ addList []*dao.StoreSkuSyncInfo
skuBindInfos1 []*StoreSkuBindInfo
skuBindInfos2 []*StoreSkuBindInfo
)
- storeSkusMain, err := dao.GetStoresSkusInfo(db, []int{model.JdShopMainStoreID}, nil)
+ storeSkusMain, err := dao.GetStoreSkusByNameIDs(db, []int{model.JdShopMainStoreID}, 0)
for _, v := range storeSkusMain {
- mainSkusMap[v.SkuID] = v
+ mainSkusMap[v.NameID] = append(mainSkusMap[v.NameID], v)
}
- storeSkus, err := dao.GetStoresSkusInfo(db, []int{storeMap.StoreID}, nil)
+ storeSkus, err := dao.GetStoreSkusByNameIDs(db, []int{storeMap.StoreID}, 0)
for _, v := range storeSkus {
- skusMap[v.SkuID] = v
- if mainSkusMap[v.SkuID] != nil && mainSkusMap[v.SkuID].Status != v.Status {
- updateList = append(updateList, mainSkusMap[v.SkuID])
+ skusMap[v.NameID] = append(skusMap[v.NameID], v)
+ }
+ for k, v := range skusMap {
+ if mainSkusMap[k] != nil {
+ flag := false
+ for _, storeSku := range v {
+ if storeSku.StoreSkuStatus == model.StoreSkuBindStatusNormal {
+ flag = true
+ }
+ }
+ if !flag {
+ continue
+ }
+ for _, storeSku := range v {
+ for _, storeSkuMain := range mainSkusMap[k] {
+ if storeSkuMain.StoreSkuStatus == model.StoreSkuBindStatusNormal && storeSku.StoreSkuStatus == model.StoreSkuBindStatusDontSale &&
+ storeSkuMain.SkuID == storeSku.SkuID {
+ updateList = append(updateList, storeSkuMain)
+ }
+ }
+ }
}
}
for k, v := range mainSkusMap {
if skusMap[k] == nil {
if storeMap.SyncRule == 2 {
- addList = append(addList, v)
+ for _, storeSkuMain := range v {
+ addList = append(addList, storeSkuMain)
+ }
}
}
}
+ // fmt.Println("updateList", utils.Format4Output(updateList, false))
+ // fmt.Println("addList", utils.Format4Output(addList, false))
if len(updateList) > 0 {
for _, v := range updateList {
skuBindInfos1 = append(skuBindInfos1, buildStoreSkuBindInfo(db, storeMap.StoreID, v, false))
@@ -1149,18 +1189,14 @@ func syncJdsStoresSkus(ctx *jxcontext.Context, db *dao.DaoDB, parentTask tasksch
if len(addList) > 0 {
for _, v := range addList {
- skuBindInfos2 = append(skuBindInfos2, buildStoreSkuBindInfo(db, storeMap.StoreID, v, false))
+ skuBindInfos2 = append(skuBindInfos2, buildStoreSkuBindInfo(db, storeMap.StoreID, v, true))
}
_, err = UpdateStoresSkusByBind(ctx, parentTask, skuBindInfos2, isAsync, isContinueWhenError, false)
}
return err
}
-func buildStoreSkuBindInfo(db *dao.DaoDB, storeID int, storeBind *model.StoreSkuBind, isFocus bool) (skuBindInfo *StoreSkuBindInfo) {
- result, err := dao.GetSkus(db, []int{storeBind.SkuID}, nil, nil, nil, nil)
- if err != nil || len(result) == 0 {
- return nil
- }
+func buildStoreSkuBindInfo(db *dao.DaoDB, storeID int, storeBind *dao.StoreSkuSyncInfo, isFocus bool) (skuBindInfo *StoreSkuBindInfo) {
skus := []*StoreSkuBindSkuInfo{
&StoreSkuBindSkuInfo{
SkuID: storeBind.SkuID,
@@ -1168,12 +1204,12 @@ func buildStoreSkuBindInfo(db *dao.DaoDB, storeID int, storeBind *model.StoreSku
}
skuBindInfo = &StoreSkuBindInfo{
StoreID: storeID,
- NameID: result[0].NameID,
+ NameID: storeBind.NameID,
}
if isFocus {
skuBindInfo.IsFocus = 1
}
- if storeBind.Status == model.SkuStatusNormal {
+ if storeBind.StoreSkuStatus == model.SkuStatusNormal {
skus[0].IsSale = 1
} else {
skus[0].IsSale = -1
@@ -1181,3 +1217,31 @@ func buildStoreSkuBindInfo(db *dao.DaoDB, storeID int, storeBind *model.StoreSku
skuBindInfo.Skus = skus
return skuBindInfo
}
+
+func SyncSkuExperfixAndWatermark(ctx *jxcontext.Context) (err error) {
+ var (
+ db = dao.GetDB()
+ )
+ skuExinfos, err := dao.GetSkuExinfos(db, nil, []int{model.VendorIDMTWM, model.VendorIDEBAI, model.VendorIDJD}, "", utils.ZeroTimeValue, utils.ZeroTimeValue)
+ task := tasksch.NewParallelTask("SyncSkuExperfixAndWatermark", tasksch.NewParallelConfig().SetIsContinueWhenError(true), ctx,
+ func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
+ skuExinfo := batchItemList[0].(*model.SkuExinfoMap)
+ skus, err := dao.GetSkus(db, nil, []int{skuExinfo.NameID}, nil, nil, nil)
+ var skuIDs []int
+ for _, v := range skus {
+ skuIDs = append(skuIDs, v.ID)
+ }
+ if partner.IsMultiStore(skuExinfo.VendorID) {
+ for _, v := range skuIDs {
+ OnUpdateThing(ctx, db, nil, int64(v), model.ThingTypeSku)
+ }
+ CurVendorSync.SyncSkus(ctx, db, nil, skuIDs, true, true, ctx.GetUserName())
+ } else {
+ CurVendorSync.SyncStoresSkus2(ctx, nil, 0, db, []int{skuExinfo.VendorID}, nil, false, skuIDs, nil, model.SyncFlagModifiedMask, true, true)
+ }
+ return retVal, err
+ }, skuExinfos)
+ tasksch.HandleTask(task, nil, true).Run()
+ _, err = task.GetResult(0)
+ return err
+}
diff --git a/business/jxstore/cms/sync2.go b/business/jxstore/cms/sync2.go
index 6316c4ce0..54546dcf3 100644
--- a/business/jxstore/cms/sync2.go
+++ b/business/jxstore/cms/sync2.go
@@ -147,7 +147,12 @@ func SyncSkus(ctx *jxcontext.Context, parentTask tasksch.ITask, vendorIDs []int,
if skuVendorInfo.ExdSkuID != "" {
return nil, err
}
- skuVendorInfo.SkuName = jxutils.ComposeSkuName(skuVendorInfo.Prefix, skuVendorInfo.Name, skuVendorInfo.Comment, skuVendorInfo.Unit, skuVendorInfo.SpecQuality, skuVendorInfo.SpecUnit, 0, skuVendorInfo.ExPrefix, skuVendorInfo.ExPrefixBegin, skuVendorInfo.ExPrefixEnd)
+ skuVendorInfo.SkuName = jxutils.ComposeSkuNameSync(skuVendorInfo.Prefix, skuVendorInfo.Name, skuVendorInfo.Comment, skuVendorInfo.Unit, skuVendorInfo.SpecQuality, skuVendorInfo.SpecUnit, 0, skuVendorInfo.ExPrefix, skuVendorInfo.ExPrefixBegin, skuVendorInfo.ExPrefixEnd)
+ skuVendorInfo.SkuNameOrigin = jxutils.ComposeSkuNameOriginal(skuVendorInfo.Prefix, skuVendorInfo.Name, skuVendorInfo.Comment, skuVendorInfo.Unit, skuVendorInfo.SpecQuality, skuVendorInfo.SpecUnit, 0)
+ if skuVendorInfo.ImgWatermark != "" {
+ downLoad, _ := uploadImgStandard(skuVendorInfo.ImgWatermark)
+ skuVendorInfo.ImgMix = jxutils.MixWatermarkImg(downLoad, skuVendorInfo.Img, skuVendorInfo.ExPrefixBegin, skuVendorInfo.ExPrefixEnd)
+ }
skuVendorInfo.MergedStatus = jxutils.MergeSkuStatus(skuVendorInfo.Status, skuVendorInfo.NameStatus)
if multiStoresHandler, ok := partner.GetPurchasePlatformFromVendorID(skuVendorInfo.VendorID).(partner.IMultipleStoresHandler); ok {
if model.IsSyncStatusDelete(skuVendorInfo.SkuSyncStatus) { //删除
diff --git a/business/jxstore/cms/sync_store_sku.go b/business/jxstore/cms/sync_store_sku.go
index d5f5786a9..e54cb3d2c 100644
--- a/business/jxstore/cms/sync_store_sku.go
+++ b/business/jxstore/cms/sync_store_sku.go
@@ -280,6 +280,12 @@ func formalizeStoreSkuList(inSkuList []*dao.StoreSkuSyncInfo) []*dao.StoreSkuSyn
}
skuItem.MergedStatus = jxutils.MergeSkuStatus(jxutils.MergeSkuStatus(skuItem.NameStatus, skuItem.Status), skuItem.StoreSkuStatus)
skuItem.SkuName = jxutils.ComposeSkuNameSync(skuItem.Prefix, skuItem.Name, skuItem.Comment, skuItem.Unit, skuItem.SpecQuality, skuItem.SpecUnit, 0, skuItem.ExPrefix, skuItem.ExPrefixBegin, skuItem.ExPrefixEnd)
+ skuItem.SkuNameOrigin = jxutils.ComposeSkuNameOriginal(skuItem.Prefix, skuItem.Name, skuItem.Comment, skuItem.Unit, skuItem.SpecQuality, skuItem.SpecUnit, 0)
+ if skuItem.ImgWatermark != "" {
+ downLoad, _ := uploadImgStandard(skuItem.ImgWatermark)
+ fmt.Println("testdo", downLoad)
+ skuItem.ImgMix = jxutils.MixWatermarkImg(downLoad, skuItem.ImgOrigin, skuItem.ExPrefixBegin, skuItem.ExPrefixEnd)
+ }
}
}
return inSkuList
diff --git a/business/jxstore/event/event.go b/business/jxstore/event/event.go
index 7dc392dde..fa2557df5 100644
--- a/business/jxstore/event/event.go
+++ b/business/jxstore/event/event.go
@@ -11,10 +11,8 @@ import (
"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/purchase/jd"
"git.rosy.net.cn/jx-callback/globals"
"git.rosy.net.cn/jx-callback/globals/api"
- "git.rosy.net.cn/jx-callback/globals/api/apimanager"
)
var (
@@ -149,78 +147,52 @@ func GetCheckVendorCookie(ctx *jxcontext.Context, vendorIDs []int, isAuto bool)
errMsg = ""
)
for _, v := range vendorIDs {
- appOrgCodeList := apimanager.CurAPIManager.GetAppOrgCodeList(v)
- if len(appOrgCodeList) > 0 {
- for _, vv := range appOrgCodeList {
- cc := &CheckCookie{}
- var flag = false
- switch v {
- case model.VendorIDEBAI:
- resultMap, err := api.EbaiAPI.GetStoreOrderInfo(ebaiOrderID)
- if len(resultMap) < 1 && err != nil {
- if strings.Contains(err.Error(), ebaiErr) || strings.Contains(err.Error(), ebaiErr2) {
- errMsg += fmt.Sprintf(" 饿百账号:[%v]的Cookie无效了!", vv)
- flag = true
- }
- }
- // result, err := api.Ebai2API.GetEbaiDepotSku(ebaiapi.EbaiWholeCountryStore, "190700570")
- // if err != nil || len(result) < 1 {
- // cc := &CheckCookie{}
- // cc.VendorID = v
- // cc.VendorOrgCode = "饿百后台饿鲜达全国账号"
- // cc.Status = "无效"
- // ccList = append(ccList, cc)
- // errMsg += fmt.Sprintf(" 饿百账号:[饿百后台饿鲜达全国账号]的Cookie无效了!", vv)
- // flag = true
- // }
- // result2, err2 := api.EbaiAPI.GetExianDaSkuDepot("190600741")
- // if err2 != nil || result2 == nil {
- // cc := &CheckCookie{}
- // cc.VendorID = v
- // cc.VendorOrgCode = "饿鲜达供应链系统"
- // cc.Status = "无效"
- // ccList = append(ccList, cc)
- // errMsg += fmt.Sprintf(" 饿百账号:[饿鲜达供应链系统]的Cookie无效了!", vv)
- // flag = true
- // }
- case model.VendorIDMTWM:
- _, err := api.MtwmAPI.PackagePriceGet(mtStoreID)
- if err != nil {
- if strings.Contains(err.Error(), mtErr) {
- errMsg += fmt.Sprintf(" 美团账号:[%v]的Cookie无效了!", vv)
- flag = true
- }
- globals.SugarLogger.Debugf("cookieCheck", err)
- }
- case model.VendorIDJD:
- result, err := jd.GetAPI(vv).GetJdUpcCodeByName("", jdUpcCode, 1, 5)
- if len(result) < 1 && err != nil {
- if strings.Contains(err.Error(), jdErr) {
- errMsg += fmt.Sprintf(" 京东账号:[%v]的Cookie无效了!", vv)
- flag = true
- }
- }
- result2, err2 := api.JdPageAPI.GetCorporationInfo("11926674", "92510108MA68KK3M8P")
- if err2 != nil || result2 == nil {
- cc := &CheckCookie{}
- cc.VendorID = v
- cc.VendorOrgCode = "京东page账号"
- cc.Status = "无效"
- ccList = append(ccList, cc)
- errMsg += fmt.Sprintf(" 京东page账号:的Cookie无效了!", vv)
- flag = true
- }
+ cc := &CheckCookie{}
+ var flag = false
+ switch v {
+ case model.VendorIDEBAI:
+ resultMap, err := api.EbaiAPI.GetStoreOrderInfo(ebaiOrderID)
+ if len(resultMap) < 1 && err != nil {
+ if strings.Contains(err.Error(), ebaiErr) || strings.Contains(err.Error(), ebaiErr2) {
+ errMsg += fmt.Sprintf(" 饿百账号:[%v]的Cookie无效了!")
+ flag = true
}
- cc.VendorID = v
- cc.VendorOrgCode = vv
- if flag {
- cc.Status = "无效"
- } else {
- cc.Status = "有效"
+ }
+ case model.VendorIDMTWM:
+ _, err := api.MtwmAPI.PackagePriceGet(mtStoreID)
+ if err != nil {
+ if strings.Contains(err.Error(), mtErr) {
+ errMsg += fmt.Sprintf(" 美团账号:[%v]的Cookie无效了!")
+ flag = true
}
- ccList = append(ccList, cc)
+ globals.SugarLogger.Debugf("cookieCheck", err)
+ }
+ case model.VendorIDJD:
+ result, err := api.JdAPI.GetJdUpcCodeByName("", jdUpcCode, 1, 5)
+ if len(result) < 1 && err != nil {
+ if strings.Contains(err.Error(), jdErr) {
+ errMsg += fmt.Sprintf(" 京东账号:[%v]的Cookie无效了!")
+ flag = true
+ }
+ }
+ case model.VendorIDJDShop:
+ _, err := api.JdShopAPI.OrderDetail("124350112427")
+ if err != nil {
+ if strings.Contains(err.Error(), "登录") {
+ errMsg += fmt.Sprintf("京东商城:[%v]的Cookie无效了!")
+ flag = true
+ }
+ globals.SugarLogger.Debugf("cookieCheck", err)
}
}
+ cc.VendorID = v
+ cc.VendorOrgCode = ""
+ if flag {
+ cc.Status = "无效"
+ } else {
+ cc.Status = "有效"
+ }
+ ccList = append(ccList, cc)
}
if isAuto && errMsg != "" {
globals.SugarLogger.Warnf("GetCheckVendorCookie:[%v]", errMsg)
diff --git a/business/jxstore/misc/misc.go b/business/jxstore/misc/misc.go
index 88538c5e4..dd402e730 100644
--- a/business/jxstore/misc/misc.go
+++ b/business/jxstore/misc/misc.go
@@ -164,7 +164,7 @@ func Init() {
ScheduleTimerFunc("doDailyWork2", doDailyWork2, dailyWorkTimeList2)
ScheduleTimerFuncByInterval(func() {
- orderman.SaveJdsOrders(jxcontext.AdminCtx, time.Now().Add(-15*time.Minute), time.Now())
+ orderman.SaveJdsOrders(jxcontext.AdminCtx, time.Now().Add(-20*time.Minute), time.Now())
}, 10*time.Second, 10*time.Minute)
ScheduleTimerFuncByInterval(func() {
@@ -205,7 +205,7 @@ func Init() {
cms.AutoFocusStoreSkusForTopSkus(jxcontext.AdminCtx, true, true)
}, createStorePriceTimeList)
ScheduleTimerFunc("GetCheckVendorCookie", func() {
- event.GetCheckVendorCookie(jxcontext.AdminCtx, []int{model.VendorIDEBAI, model.VendorIDJD, model.VendorIDMTWM, model.VendorIDMTPS}, true)
+ event.GetCheckVendorCookie(jxcontext.AdminCtx, []int{model.VendorIDEBAI, model.VendorIDJD, model.VendorIDMTWM, model.VendorIDMTPS, model.VendorIDJDShop}, true)
}, checkCookieList)
ScheduleTimerFunc("SendSeckillSkusCountMsg", func() {
cms.SendSeckillSkusCountMsg(jxcontext.AdminCtx, []int{model.VendorIDEBAI, model.VendorIDJD, model.VendorIDMTWM}, false, true)
@@ -419,6 +419,8 @@ func doDailyWork() {
orderman.RefreshJdShopOrdersEarningPrice(jxcontext.AdminCtx, time.Now().AddDate(0, 0, -3).Format("20060102"), time.Now().Format("20060102"))
//同步上架京东商城待售商品
cms.RefreshJdsSkusStatus(jxcontext.AdminCtx)
+ //同步商品额外前缀和水印图
+ cms.SyncSkuExperfixAndWatermark(jxcontext.AdminCtx)
}
func RefreshRealMobile(ctx *jxcontext.Context, vendorID int, fromTime, toTime time.Time, isAsync, isContinueWhenError bool) (hint string, err error) {
diff --git a/business/jxstore/tempop/tempop.go b/business/jxstore/tempop/tempop.go
index 59bd8017c..3f33d72d7 100644
--- a/business/jxstore/tempop/tempop.go
+++ b/business/jxstore/tempop/tempop.go
@@ -1611,10 +1611,295 @@ func UploadJdsImage(ctx *jxcontext.Context) (err error) {
// continue
// }
// }
- _, err = api.JdShopAPI.AllOrders(&jdshopapi.AllOrdersParam{
- Current: 1,
- PageSize: 10,
- })
+ var jdsIds = []int64{69355523686,
+ 69353698875,
+ 69353633443,
+ 69353579080,
+ 69353592976,
+ 69353575450,
+ 69353669915,
+ 69353617240,
+ 69353711276,
+ 69355552630,
+ 69353579078,
+ 69633169613,
+ 69353608855,
+ 69634881612,
+ 69353634806,
+ 69353675911,
+ 69353698186,
+ 69353698877,
+ 69607962771,
+ 69608002604,
+ 69666543870,
+ 69353541693,
+ 69411607058,
+ 69353594629,
+ 69353602818,
+ 69353698187,
+ 69355538267,
+ 69353633269,
+ 69355549016,
+ 69411607059,
+ 69593365617,
+ 69353589341,
+ 69353618034,
+ 69353633445,
+ 69353644658,
+ 69353644659,
+ 69353664332,
+ 69355505481,
+ 69355531215,
+ 69355552632,
+ 69353618035,
+ 69353619589,
+ 69353684423,
+ 69353687174,
+ 69353722053,
+ 69355493882,
+ 69627859883,
+ 69680935348,
+ 69353555847,
+ 69353570677,
+ 69353589397,
+ 69353592975,
+ 69353594611,
+ 69353602819,
+ 69353616402,
+ 69353624528,
+ 69353654004,
+ 69353668114,
+ 69353687173,
+ 69353701089,
+ 69353722052,
+ 69353723922,
+ 69355527850,
+ 69355552631,
+ 69628257042,
+ 69636525703,
+ 69680935349,
+ 69353579081,
+ 69353589342,
+ 69353632136,
+ 69353654006,
+ 69353726354,
+ 69355496067,
+ 69355515747,
+ 69355516049,
+ 69355527036,
+ 69355532703,
+ 69355558164,
+ 69355560640,
+ 69608002434,
+ 69608089252,
+ 69626869676,
+ 69628142211,
+ 69651275202,
+ 69665458721,
+ 69980157422,
+ 69353511255,
+ 69353550931,
+ 69353555846,
+ 69353579079,
+ 69353593375,
+ 69353595563,
+ 69353603501,
+ 69353608856,
+ 69353618036,
+ 69353628469,
+ 69353628470,
+ 69353632137,
+ 69353633267,
+ 69353633444,
+ 69353651935,
+ 69353668115,
+ 69353683331,
+ 69353684157,
+ 69353701088,
+ 69353723844,
+ 69353723845,
+ 69353726353,
+ 69355490631,
+ 69355493881,
+ 69355493884,
+ 69355520278,
+ 69355523687,
+ 69355532705,
+ 69355533814,
+ 69355536851,
+ 69355538268,
+ 69355538269,
+ 69593321185,
+ 69593321186,
+ 69607997022,
+ 69626638026,
+ 69626638027,
+ 69626872037,
+ 69627693305,
+ 69627954144,
+ 69628180933,
+ 69633580083,
+ 69633580085,
+ 69634881613,
+ 69635037810,
+ 69635204944,
+ 69636212985,
+ 69636446354,
+ 69659137913,
+ 69659219611,
+ 69665406179,
+ 69666460731,
+ 69673523007,
+ 69680905913,
+ 69681869918,
+ 69821176674,
+ 69913341309,
+ 69916445013,
+ 69353511254,
+ 69353570678,
+ 69353581400,
+ 69353589343,
+ 69353589398,
+ 69353593376,
+ 69353594630,
+ 69353609816,
+ 69353616406,
+ 69353617241,
+ 69353619591,
+ 69353633268,
+ 69353634833,
+ 69353642793,
+ 69353647695,
+ 69353651934,
+ 69353654005,
+ 69353664333,
+ 69353669914,
+ 69353673334,
+ 69353684159,
+ 69353684603,
+ 69353684604,
+ 69353684605,
+ 69353684607,
+ 69353698876,
+ 69353701090,
+ 69353711277,
+ 69353711278,
+ 69353726357,
+ 69355496066,
+ 69355520277,
+ 69355523688,
+ 69355527851,
+ 69355533813,
+ 69355533815,
+ 69355538270,
+ 69355559874,
+ 69355559875,
+ 69355559876,
+ 69355560641,
+ 69607988687,
+ 69608089253,
+ 69625036409,
+ 69625436705,
+ 69626674146,
+ 69626756838,
+ 69626849783,
+ 69626872040,
+ 69627211928,
+ 69627823696,
+ 69627823697,
+ 69627824429,
+ 69627859882,
+ 69627954146,
+ 69628055157,
+ 69628209840,
+ 69628220046,
+ 69628244518,
+ 69628620179,
+ 69628645373,
+ 69633038980,
+ 69633169614,
+ 69633311068,
+ 69633433209,
+ 69634285577,
+ 69634285578,
+ 69634566319,
+ 69634566320,
+ 69634620948,
+ 69635037811,
+ 69635075404,
+ 69635108188,
+ 69636525704,
+ 69636563250,
+ 69636658901,
+ 69636658902,
+ 69651265114,
+ 69659219612,
+ 69659883978,
+ 69662122661,
+ 69666543871,
+ 69666543872,
+ 69666660395,
+ 69666907986,
+ 69666931214,
+ 69673508504,
+ 69680887348,
+ 69818078270,
+ 69881553035,
+ 69901783885,
+ 69913362221,
+ 69916396643,
+ 69925717199,
+ 69933144351,
+ 69933974117,
+ 69935756246,
+ 69935768981,
+ 69935855227,
+ 69935915640,
+ 69937601360,
+ 69937642148,
+ 69939562884,
+ 69939571687,
+ 69948026907,
+ }
+ db := dao.GetDB()
+ for _, v := range jdsIds {
+ vendorSku, _ := api.JdShopAPI.FindSkuById(v)
+ var sku *model.Sku
+ sql := `
+ SELECT b.* FROM store_sku_bind a,sku b WHERE a.sku_id = b.id AND a.store_id = 102919 AND a.jds_id = ?
+ `
+ sqlParams := []interface{}{v}
+ err = dao.GetRow(db, &sku, sql, sqlParams)
+ skus, _ := dao.GetStoreSkus(db, model.VendorIDJDShop, model.JdShopMainStoreID, []int{sku.ID})
+ storeSku := skus[0]
+ if sku.Comment != "" {
+ var specQuality = utils.Float64ToStr(float64(storeSku.SpecQuality)) + storeSku.SpecUnit
+ vendorSkuAttr := vendorSku.SaleAttrs[0].AttrValueAlias[0]
+ if vendorSkuAttr == specQuality {
+ err = api.JdShopAPI.UpdateWareSaleAttrvalueAlias(&jdshopapi.UpdateWareSaleAttrvalueAliasParam{
+ WareID: vendorSku.WareID,
+ Props: []*jdshopapi.CreateSkuParamAttrs2{
+ &jdshopapi.CreateSkuParamAttrs2{
+ AttrID: vendorSku.SaleAttrs[0].AttrID,
+ AttrValues: []string{vendorSku.SaleAttrs[0].AttrValues[0]},
+ AttrValueAlias: []string{sku.Comment},
+ Type: "com.jd.pop.ware.ic.api.domain.prop",
+ Type2: "com.jd.pop.ware.ic.api.domain.Prop",
+ },
+ },
+ })
+ } else {
+ if vendorSkuAttr != sku.Comment {
+ _, maxNo, _ := api.JdShopAPI.FindValuesByAttrId(utils.Str2Int(vendorSku.SaleAttrs[0].AttrID))
+ api.JdShopAPI.SaveVenderAttrValue(sku.Comment, utils.Str2Int(vendorSku.SaleAttrs[0].AttrID), int(storeSku.VendorVendorCatID), maxNo+1)
+ }
+ }
+ }
+ // attrValue := vendorSku.SaleAttrs[0].AttrValueAlias[0]
+ // if storeSkus != nil {
+ // cms.CurVendorSync.SyncStoresSkus(ctx, nil, 0, db, []int{model.VendorIDJDShop}, []int{model.JdShopMainStoreID}, []int{storeSkus.SkuID}, false, true, true)
+ // }
+ }
return err
}
diff --git a/business/jxutils/jxutils.go b/business/jxutils/jxutils.go
index 945b0f832..6a878ed2c 100644
--- a/business/jxutils/jxutils.go
+++ b/business/jxutils/jxutils.go
@@ -161,6 +161,8 @@ func GetPossibleVendorIDFromVendorOrderID(vendorOrderID string) (vendorID int) {
vendorID = model.VendorIDWSC
} else if orderIDLen == len("1000004390") {
vendorID = model.VendorIDJX
+ } else if orderIDLen == len("124557362562002") {
+ vendorID = model.VendorIDJDShop
}
}
return vendorID
@@ -916,3 +918,24 @@ func PKCS5UnPadding(origData []byte) []byte {
unpadding := int(origData[length-1])
return origData[:(length - unpadding)]
}
+
+//合成水印图
+func MixWatermarkImg(imgWatermark, img string, exPrefixBegin, exPrefixEnd *time.Time) (imgMix string) {
+ if exPrefixBegin != nil && exPrefixEnd != nil {
+ if utils.Time2Date(time.Now().Add(6*time.Hour)).Sub(*exPrefixBegin) >= 0 && utils.Time2Date(time.Now()).Sub(*exPrefixEnd) <= 0 {
+ baseURL := base64.URLEncoding.EncodeToString([]byte(imgWatermark))
+ imgUrl := img + "?imageView2/0/q/75|watermark/1/image/" + baseURL + "/dissolve/100/gravity/Center/dx/0/dy/0"
+ if resBinary, _, err := DownloadFileByURL(imgUrl); err == nil {
+ if downloadURL, err := UploadExportContent(resBinary, utils.Int64ToStr(time.Now().Unix())+img[strings.LastIndex(img, "/")+1:len(img)]); err == nil {
+ if err == nil {
+ return downloadURL
+ }
+ }
+ }
+ }
+ if utils.Time2Date(time.Now().Add(6*time.Hour)).Sub(*exPrefixEnd) > 0 {
+ return imgMix
+ }
+ }
+ return imgMix
+}
diff --git a/business/model/api.go b/business/model/api.go
index b70527b5f..ebf5aeead 100644
--- a/business/model/api.go
+++ b/business/model/api.go
@@ -35,9 +35,10 @@ type GoodsOrderExt struct {
WaybillCreatedAt time.Time `orm:"type(datetime);index" json:"waybillCreatedAt"`
WaybillFinishedAt time.Time `orm:"type(datetime)" json:"waybillFinishedAt"`
- DistrictName string `json:"districtName"`
- CityName string `json:"cityName"`
- PayPercentage int `json:"payPercentage"`
+ DistrictName string `json:"districtName"`
+ CityName string `json:"cityName"`
+ PayPercentage int `json:"payPercentage"`
+ OldPayPercentage int `json:"oldPayPercentage"`
SkuInfo string `json:"skuInfo,omitempty"`
SkuInfo2 string `json:"skuInfo2,omitempty"`
diff --git a/business/model/api_config.go b/business/model/api_config.go
index fb5b25ad0..ab6d1ffb4 100644
--- a/business/model/api_config.go
+++ b/business/model/api_config.go
@@ -26,7 +26,8 @@ const (
VendorIDDada = 101
VendorIDMTPS = 102
VendorIDFengNiao = 103
- VendorIDDeliveryEnd = 200
+ VendorIDJDWL = 401 //京东物流
+ VendorIDDeliveryEnd = 500
VendorIDPrinterBegin = 201
VendorIDFeiE = 201 // 飞鹅打印机
@@ -48,7 +49,6 @@ const (
VendorIDQiNiuCloud = 323 // 七牛云
VendorIDShowAPI = 325 // 万维易源
- VendorIDJDWL = 401 //京东物流
)
type VendorInfo struct {
@@ -82,6 +82,7 @@ var (
VendorIDZhongWu: "ZhongWu",
VendorIDQiNiuCloud: "Qiniu",
+ VendorIDJDWL: "Jdwl",
}
VendorTypeName = map[int]string{
diff --git a/business/model/dao/dao_order.go b/business/model/dao/dao_order.go
index 6f090329b..eeceaa567 100644
--- a/business/model/dao/dao_order.go
+++ b/business/model/dao/dao_order.go
@@ -767,7 +767,7 @@ func GetOrders(db *DaoDB, ids []int64, isIncludeSku, isIncludeFake bool, fromDat
CAST(IF(t1.earning_price <> 0, t1.earning_price, IF(t1.shop_price <> 0 && t1.shop_price < t1.sale_price, t1.shop_price, t1.sale_price) * IF(t5.pay_percentage > 0, t5.pay_percentage, %d) / 100) AS SIGNED) earning_price,
t2.status waybill_status, t2.courier_name, t2.courier_mobile,
t2.actual_fee, t2.desired_fee, t2.waybill_created_at, t2.waybill_finished_at,
- t5.pay_percentage,
+ t5.pay_percentage, t5.old_pay_percentage,
city.name city_name, district.name district_name`, model.DefaultEarningPricePercentage)
if isIncludeSku {
sql += `,
diff --git a/business/model/dao/sku.go b/business/model/dao/sku.go
index be89fa4a9..6bbab2c14 100644
--- a/business/model/dao/sku.go
+++ b/business/model/dao/sku.go
@@ -1,6 +1,8 @@
package dao
import (
+ "time"
+
"git.rosy.net.cn/baseapi/platformapi/aliupcapi"
"git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/jx-callback/business/model"
@@ -255,11 +257,8 @@ func GetSkusWithVendor(db *DaoDB, vendorIDs []int, appOrgCodes []string, nameIDs
IF(t11.resource_type IS NULL OR t11.resource_type <> ?, t2.img, '') img,
IF(t12.resource_type IS NULL OR t12.resource_type <> ?, t2.img2, '') img2,
t2.desc_img,
- t2.ex_prefix,
- t2.ex_prefix_begin,
- t2.ex_prefix_end,
t3.jd_category_id vendor_vendor_cat_id,
-
+ tsu.ex_prefix, tsu.begin_at ex_prefix_begin, tsu.end_at ex_prefix_end, tsu.img_watermark,
t3m.sync_status cat_sync_status,
t3m.vendor_thing_id vendor_cat_id
@@ -286,9 +285,10 @@ func GetSkusWithVendor(db *DaoDB, vendorIDs []int, appOrgCodes []string, nameIDs
AND t3m.vendor_id = t1m.vendor_id AND t3m.vendor_org_code = t1m.vendor_org_code
LEFT JOIN data_resource t11 ON t11.main_url = t2.img
LEFT JOIN data_resource t12 ON t12.main_url = t2.img2
+ LEFT JOIN sku_exinfo_map tsu ON tsu.name_id = t2.id AND tsu.deleted_at = ? AND tsu.vendor_id = t1m.vendor_id
WHERE 1 = 1
`
- sqlParams = append(sqlParams, model.ThingTypeCategory, utils.DefaultTimeValue)
+ sqlParams = append(sqlParams, model.ThingTypeCategory, utils.DefaultTimeValue, utils.DefaultTimeValue)
if mustDirty {
sql += " AND t1m.sync_status IS NOT NULL AND t1m.sync_status <> 0"
} else {
@@ -379,3 +379,34 @@ func InsertUpcDepot(db *DaoDB, result *aliupcapi.GetAliUpcInfoResult) (err error
_, err = ExecuteSQL(db, sql, sqlParams)
return err
}
+
+func GetSkuExinfos(db *DaoDB, nameIDs []int, vendorIDs []int, exPrefix string, fromTime, toTime time.Time) (skuExinfoMaps []*model.SkuExinfoMap, err error) {
+ sql := `
+ SELECT *
+ FROM sku_exinfo_map
+ WHERE deleted_at = ?
+ `
+ sqlParams := []interface{}{
+ utils.DefaultTimeValue,
+ }
+ if len(nameIDs) > 0 {
+ sql += " AND name_id IN (" + GenQuestionMarks(len(nameIDs)) + ")"
+ sqlParams = append(sqlParams, nameIDs)
+ }
+ if len(vendorIDs) > 0 {
+ sql += " AND vendor_id IN (" + GenQuestionMarks(len(vendorIDs)) + ")"
+ sqlParams = append(sqlParams, vendorIDs)
+ }
+ if exPrefix != "" {
+ sql += " AND ex_prefix LIKE ?"
+ sqlParams = append(sqlParams, "%"+exPrefix+"%")
+ }
+ if fromTime != utils.ZeroTimeValue && toTime != utils.ZeroTimeValue {
+ sql += " AND NOT (begin_at > ? OR end_at < ?)"
+ sqlParams = append(sqlParams, toTime, fromTime)
+ }
+ if err = GetRows(db, &skuExinfoMaps, sql, sqlParams...); err == nil {
+ return skuExinfoMaps, nil
+ }
+ return nil, err
+}
diff --git a/business/model/dao/store_sku.go b/business/model/dao/store_sku.go
index 404a477e4..f9250a351 100644
--- a/business/model/dao/store_sku.go
+++ b/business/model/dao/store_sku.go
@@ -75,23 +75,29 @@ type StoreSkuSyncInfo struct {
ExPrefix string
ExPrefixBegin *time.Time
ExPrefixEnd *time.Time
+
// NameID int `orm:"column(name_id)"`
- VendorNameID string `orm:"column(vendor_name_id)"` // 暂时无用
- Name string
- Unit string
- Upc string
- IsGlobal int8 `orm:"default(1)" json:"isGlobal"` // 是否是全部(全国)可见,如果否的话,可见性由SkuPlace决定
- NameStatus int
- SellCities []string
- NameCategoryID int `orm:"column(name_category_id)"`
- YbNameSuffix string //银豹的商品条码后缀
- YbBarCode string //银豹的商品条码
- JdsStockSwitch int
+ VendorNameID string `orm:"column(vendor_name_id)"` // 暂时无用
+ Name string
+ Unit string
+ Upc string
+ IsGlobal int8 `orm:"default(1)" json:"isGlobal"` // 是否是全部(全国)可见,如果否的话,可见性由SkuPlace决定
+ NameStatus int
+ SellCities []string
+ NameCategoryID int `orm:"column(name_category_id)"`
+ YbNameSuffix string //银豹的商品条码后缀
+ YbBarCode string //银豹的商品条码
+ JdsStockSwitch int
+ PreparationTime int
// 平台相关的图片信息
- Img string
- Img2 string
- DescImg string
+ Img string
+ Img2 string
+ Img3 string
+ DescImg string
+ ImgWatermark string `json:"imgWatermark"` //图片水印
+ ImgMix string //合成水印后的图片
+ ImgOrigin string //skuname里的img
VendorVendorCatID int64 `orm:"column(vendor_vendor_cat_id)"` // 平台商品分类(叶子结点)
CategoryName string `json:"categoryName"` //分类名
@@ -108,6 +114,7 @@ type StoreSkuSyncInfo struct {
MergedStatus int
SkuName string
+ SkuNameOrigin string
StatusSaleBegin int16 `json:"statusSaleBegin"` //商品可售时间范围
StatusSaleEnd int16 `json:"statusSaleEnd"`
@@ -403,19 +410,22 @@ func GetStoreSkus2(db *DaoDB, vendorID, storeID int, skuIDs []int, mustDirty boo
%s vendor_sku_id, t1.%s_sync_status sku_sync_status, t1.%s_price vendor_price, t1.%s_lock_time lock_time,
t1.store_id, t1.deleted_at bind_deleted_at,t1.status_sale_begin,t1.status_sale_end, t1.jds_ware_id,
t2.*,
- t3.id name_id, t3.prefix, t3.name, t3.unit, t3.upc, t3.status name_status, t3.ex_prefix, t3.ex_prefix_begin, t3.ex_prefix_end, t3.category_id name_category_id, t3.yb_name_suffix,
- t3.jds_stock_switch,
+ t3.id name_id, t3.prefix, t3.name, t3.unit, t3.upc, t3.status name_status, t3.category_id name_category_id, t3.yb_name_suffix,
+ t3.jds_stock_switch, t3.preparation_time, t3.img_watermark, t3.ex_vendor_id, t3.img img_origin,
IF(t11.%s <> '', t11.%s, t3.img) img,
IF(t12.%s <> '', t12.%s, t3.img2) img2,
+ IF(t15.%s <> '', t15.%s, t3.img3) img3,
IF(t13.%s <> '', t13.%s, t3.desc_img) desc_img,
t4.%s_category_id vendor_vendor_cat_id,
t4.name category_name,
- ts.name store_name`
+ ts.name store_name,
+ tsu.ex_prefix, tsu.begin_at ex_prefix_begin, tsu.end_at ex_prefix_end, tsu.img_watermark`
fmtParams := []interface{}{
skuVendorIDField, fieldPrefix, fieldPrefix, fieldPrefix,
GetDataResFieldName(vendorID), GetDataResFieldName(vendorID),
GetDataResFieldName(vendorID), GetDataResFieldName(vendorID),
GetDataResFieldName(vendorID), GetDataResFieldName(vendorID),
+ GetDataResFieldName(vendorID), GetDataResFieldName(vendorID),
fieldPrefix,
}
if isSingleStorePF {
@@ -441,7 +451,9 @@ func GetStoreSkus2(db *DaoDB, vendorID, storeID int, skuIDs []int, mustDirty boo
LEFT JOIN sku_category t4 ON t3.category_id = t4.id AND t4.deleted_at = ?
LEFT JOIN data_resource t11 ON t11.main_url = t3.img
LEFT JOIN data_resource t12 ON t12.main_url = t3.img2
+ LEFT JOIN data_resource t15 ON t15.main_url = t3.img3
LEFT JOIN data_resource t13 ON t13.main_url = t3.desc_img
+ LEFT JOIN sku_exinfo_map tsu ON tsu.name_id = t3.id AND tsu.deleted_at = ? AND tsu.vendor_id = t14.vendor_id
`
sqlParams := []interface{}{
vendorID, utils.DefaultTimeValue,
@@ -449,6 +461,7 @@ func GetStoreSkus2(db *DaoDB, vendorID, storeID int, skuIDs []int, mustDirty boo
utils.DefaultTimeValue, // model.SkuStatusNormal,
utils.DefaultTimeValue,
utils.DefaultTimeValue,
+ utils.DefaultTimeValue,
}
if globals.IsStoreSkuAct {
sql += `
@@ -606,7 +619,6 @@ func GetStoreSkuPriceAndWeight(db *DaoDB, vendorStoreID string, vendorID int, ve
} else {
sqlParams = append(sqlParams, vendorSkuIDs)
}
- // globals.SugarLogger.Debugf(sql)
err = GetRows(db, &l, sql, sqlParams...)
return l, err
}
@@ -965,17 +977,20 @@ func DeleteSkuNameExPrefixOverdue(db *DaoDB) (num int64, err error) {
func GetStoreSkusByNameIDs(db *DaoDB, storeIDs []int, nameID int) (skuList []*StoreSkuSyncInfo, err error) {
sql := `
- SELECT a.*,c.unit,c.name
+ SELECT a.*, c.unit, c.name, b.name_id, a.status store_sku_status
FROM store_sku_bind a
JOIN sku b ON a.sku_id = b.id
JOIN sku_name c ON b.name_id = c.id
- WHERE b.name_id = ?
+ WHERE 1=1
AND a.deleted_at = ?
`
sqlParams := []interface{}{
- nameID,
utils.DefaultTimeValue,
}
+ if nameID != 0 {
+ sql += " AND b.name_id = ?"
+ sqlParams = append(sqlParams, nameID)
+ }
if len(storeIDs) > 0 {
sql += " AND a.store_id in (" + GenQuestionMarks(len(storeIDs)) + ")"
sqlParams = append(sqlParams, storeIDs)
@@ -1522,13 +1537,14 @@ func UpdateYbOtherSku(db *DaoDB, storeSkuSyncInfo *StoreSkuSyncInfo) (err error)
func UpdateJdsWareID(db *DaoDB, storeSkuSyncInfo *StoreSkuSyncInfo) (err error) {
sql := `
UPDATE store_sku_bind
- SET jds_ware_id = ?
+ SET jds_ware_id = ?, jds_id = ?
WHERE store_id = ?
AND sku_id = ?
AND deleted_at = ?
`
sqlParams := []interface{}{
storeSkuSyncInfo.JdsWareID,
+ storeSkuSyncInfo.VendorSkuID,
storeSkuSyncInfo.StoreID,
storeSkuSyncInfo.SkuID,
utils.DefaultTimeValue,
@@ -1550,6 +1566,7 @@ type tStoreSkuAudit struct {
MidUnitPrice int `json:"midUnitPrice"`
CityName string `json:"cityName"`
PayPercentage int `json:"payPercentage"`
+ StoreLevel string `json:"storeLevel"`
}
func GetStoreSkuAudit(db *DaoDB, storeIDs, nameIDs, skuIDs, statuss, types []int, name, remark, keyword, marketManPhone, cityName string, applyTimeStart, applyTimeEnd, auditTimeStart, auditTimeEnd time.Time, pageSize, offset int) (pagedInfo *model.PagedInfo, err error) {
@@ -1557,7 +1574,7 @@ func GetStoreSkuAudit(db *DaoDB, storeIDs, nameIDs, skuIDs, statuss, types []int
sql := `
SELECT SQL_CALC_FOUND_ROWS DISTINCT a.*,
c.name sku_name, c.prefix, c.unit, c.spec_quality, c.spec_unit, c.img,
- d.name store_name, b.name, e.mid_unit_price, f.name city_name, d.pay_percentage
+ d.name store_name, b.name, e.mid_unit_price, f.name city_name, d.pay_percentage, d.store_level
FROM store_sku_audit a
LEFT JOIN user b ON a.user_id = b.user_id
LEFT JOIN sku_name c ON c.id = a.name_id AND c.deleted_at = ?
@@ -1596,7 +1613,7 @@ func GetStoreSkuAudit(db *DaoDB, storeIDs, nameIDs, skuIDs, statuss, types []int
}
if auditTimeStart != utils.ZeroTimeValue && auditTimeEnd != utils.ZeroTimeValue {
sql += " AND a.updated_at BETWEEN ? AND ?"
- sqlParams = append(sqlParams, applyTimeStart, applyTimeEnd)
+ sqlParams = append(sqlParams, auditTimeStart, auditTimeEnd)
}
if len(types) > 0 {
sql += " AND a.type IN (" + GenQuestionMarks(len(types)) + ")"
@@ -1614,7 +1631,7 @@ func GetStoreSkuAudit(db *DaoDB, storeIDs, nameIDs, skuIDs, statuss, types []int
sql += " AND f.name LIKE ? "
sqlParams = append(sqlParams, "%"+cityName+"%")
}
- sql += " ORDER BY a.updated_at DESC LIMIT ? OFFSET ?"
+ sql += " ORDER BY a.updated_at LIMIT ? OFFSET ?"
pageSize = jxutils.FormalizePageSize(pageSize)
sqlParams = append(sqlParams, pageSize, offset)
Begin(db)
diff --git a/business/model/sku.go b/business/model/sku.go
index 04c154089..85f560d70 100644
--- a/business/model/sku.go
+++ b/business/model/sku.go
@@ -154,12 +154,13 @@ func (*SkuCategory) TableUnique() [][]string {
type SkuName struct {
ModelIDCULD
- Prefix string `orm:"size(255)" json:"prefix"`
- Name string `orm:"size(255)" json:"name"`
- ExPrefix string `orm:"size(255)" json:"exPrefix"`
+ Prefix string `orm:"size(255)" json:"prefix"`
+ Name string `orm:"size(255)" json:"name"`
+ ExPrefix string `orm:"size(255)" json:"exPrefix"`
ExPrefixBegin *time.Time `orm:"null" json:"exPrefixBegin"`
ExPrefixEnd *time.Time `orm:"null" json:"exPrefixEnd"`
+ ExVendorID int `orm:"column(ex_vendor_id)" json:"exVendorID"`
BrandID int `orm:"column(brand_id);default(0)" json:"brandID"` // todo,此属性暂时没有使用,且有问题,应该是不同平台都有一个brandid
CategoryID int `orm:"column(category_id);index" json:"categoryID"` // 标准类别
@@ -171,8 +172,11 @@ type SkuName struct {
SpecUnit string `orm:"size(8)" json:"-"` // 为份必然为克,这个主要作用只是用于确保SkuName的唯一性
Price int `json:"price"` // 单位为分,标准价,不为份的就为实际标准价,为份的为每市斤价,实际还要乘质量。todo 为份的确定必须有质量
- Img string `orm:"size(512)" json:"img"`
- Img2 string `orm:"size(512)" json:"img2"` // 第二张图片
+ Img string `orm:"size(512)" json:"img"`
+ Img2 string `orm:"size(512)" json:"img2"` // 第二张图片
+ Img3 string `orm:"size(512)" json:"img3"` //第三张图片
+ ImgWatermark string `orm:"size(512)" json:"imgWatermark"` //图片水印
+ ImgMix string `orm:"size(512)" json:"imgMix"` //图片混合水印的图片
// ImgEbai string `orm:"size(255)" json:"imgEbai"` // 饿百图片地址
// ImgHashCode string `orm:"size(255);index" json:"img_hash_code"`
@@ -187,8 +191,9 @@ type SkuName struct {
// JdSyncStatus int8 `orm:"default(2)" json:"jdSyncStatus"`
// LinkID int `orm:"column(link_id);null;index" json:"linkID"`
- YbNameSuffix string `json:"ybNameSuffix"` //银豹商品后缀
- JdsStockSwitch int8 `orm:"default(1)" json:"jdsStockSwitch"`
+ YbNameSuffix string `json:"ybNameSuffix"` //银豹商品后缀
+ JdsStockSwitch int8 `orm:"default(1)" json:"jdsStockSwitch"` //京东商城总库存
+ PreparationTime int `orm:"default(1)" json:"preparationTime"` //商品准备时长
}
func (*SkuName) TableUnique() [][]string {
@@ -279,3 +284,20 @@ type SkuNameExt struct {
PlacesStr string `json:"-"`
MidUnitPrice int `json:"midUnitPrice"`
}
+
+type SkuExinfoMap struct {
+ ModelIDCULD
+
+ NameID int `orm:"column(name_id)" json:"nameID"`
+ VendorID int `orm:"column(vendor_id)" json:"vendorID"`
+ BeginAt time.Time `orm:"type(datetime);index" json:"beginAt"` //设置起始时间
+ EndAt time.Time `orm:"type(datetime);index" json:"endAt"` //设置结束时间
+ ExPrefix string `orm:"size(255)" json:"exPrefix"` //额外前缀
+ ImgWatermark string `orm:"size(512)" json:"imgWatermark"` //图片水印
+}
+
+func (*SkuExinfoMap) TableIndex() [][]string {
+ return [][]string{
+ []string{"NameID", "VendorID", "BeginAt", "EndAt"},
+ }
+}
diff --git a/business/model/store.go b/business/model/store.go
index 918c4e38d..4acfb3ba0 100644
--- a/business/model/store.go
+++ b/business/model/store.go
@@ -292,6 +292,7 @@ type Store struct {
SMSNotifyMark int8 `orm:"column(sms_notify_mark);" json:"smsNotifyMark"` //今天是否已经推送过订单消息
AutoReplyType int8 `json:"autoReplyType"` // 订单评价自动回复类型
LinkStoreID int `orm:"column(link_store_id);default(0);index" json:"linkStoreID"` // 关联门店ID
+ StoreLevel string `orm:"default(C);size(32)" json:"storeLevel"` // 门店等级(筛选用,京西的)
PrinterDisabled int8 `orm:"default(0)" json:"printerDisabled"` // 是否禁用网络打印机
PrinterFontSize int8 `orm:"default(0)" json:"printerFontSize"` // 打印字体-1:小,0:正常,1:大
@@ -335,6 +336,7 @@ type Store struct {
PayeeBankBranchName string `orm:"size(255)" json:"payeeBankBranchName"` // 开户支行
PayeeBankCode string `orm:"size(8)" json:"payeeBankCode"` // 开户行代码
PayPercentage int `json:"payPercentage"`
+ OldPayPercentage int `json:"oldPayPercentage"`
// OperatorName string `orm:"size(8)" json:"operatorName"` // 运营人姓名
OperatorPhone string `orm:"size(16)" json:"operatorPhone"` // 京东运营人电话
diff --git a/business/partner/delivery/jdeclp/waybill.go b/business/partner/delivery/jdeclp/waybill.go
index 0a86dae61..c781d6104 100644
--- a/business/partner/delivery/jdeclp/waybill.go
+++ b/business/partner/delivery/jdeclp/waybill.go
@@ -94,3 +94,7 @@ func (c *DeliveryHandler) GetWaybillFee(order *model.GoodsOrder) (deliveryFeeInf
func (c *DeliveryHandler) ComplaintRider(bill *model.Waybill, resonID int, resonContent string) (err error) {
return err
}
+
+func (c *DeliveryHandler) OnWaybillMsg() {
+
+}
diff --git a/business/partner/delivery/jdeclp/waybill_test.go b/business/partner/delivery/jdeclp/waybill_test.go
index a8b1b4a51..b954e8be9 100644
--- a/business/partner/delivery/jdeclp/waybill_test.go
+++ b/business/partner/delivery/jdeclp/waybill_test.go
@@ -1 +1,7 @@
package jdeclp
+
+import "git.rosy.net.cn/jx-callback/globals/testinit"
+
+func init() {
+ testinit.Init()
+}
diff --git a/business/partner/delivery/mtps/waybill.go b/business/partner/delivery/mtps/waybill.go
index 20c18c817..09fc6e264 100644
--- a/business/partner/delivery/mtps/waybill.go
+++ b/business/partner/delivery/mtps/waybill.go
@@ -1,8 +1,13 @@
package mtps
import (
+ "crypto/sha1"
"errors"
"fmt"
+ "net/http"
+ "net/url"
+ "sort"
+ "strings"
"time"
"git.rosy.net.cn/baseapi/platformapi/mtpsapi"
@@ -99,9 +104,72 @@ func (c *DeliveryHandler) onWaybillMsg(msg *mtpsapi.CallbackOrderMsg) (retVal *m
globals.SugarLogger.Warnf("onWaybillMsg unknown msg:%v", msg)
return mtpsapi.SuccessResponse
}
+ c.pushToGy(order, msg)
+ globals.SugarLogger.Debugf("onWaybillMsg test, %v", msg)
return mtpsapi.Err2CallbackResponse(partner.CurOrderManager.OnWaybillStatusChanged(order), order.VendorStatus)
}
+func (c *DeliveryHandler) pushToGy(waybill *model.Waybill, msg *mtpsapi.CallbackOrderMsg) {
+ order, _ := dao.GetSimpleOrder(dao.GetDB(), waybill.VendorOrderID)
+ //查不到订单可能就是果园的订单
+ if order == nil {
+ cl := http.Client{}
+ params := make(map[string]interface{})
+ params["mt_peisong_id"] = msg.MtPeisongID
+ params["courier_name"] = msg.CourierName
+ params["delivery_id"] = msg.DeliveryID
+ params["appkey"] = msg.AppKey
+ params["order_id"] = msg.OrderID
+ params["courier_phone"] = msg.CourierPhone
+ params["status"] = msg.Status
+ params["timestamp"] = msg.Timestamp
+ params["cancel_reason_id"] = msg.CancelReasonId
+ params["cancel_reason"] = msg.CancelReason
+ urls := utils.Map2URLValues(params)
+ sign := signParams(urls)
+ params["sign"] = sign
+ request, err := http.NewRequest(http.MethodPost, "http://callback-jxgy.jxc4.com/mtps/status", strings.NewReader(utils.Map2URLValues(params).Encode()))
+ if err != nil {
+ return
+ }
+ request.PostForm.Set("mt_peisong_id", msg.MtPeisongID)
+ request.PostForm.Set("courier_name", msg.CourierName)
+ request.PostForm.Set("delivery_id", utils.Int64ToStr(msg.DeliveryID))
+ request.PostForm.Set("appkey", msg.AppKey)
+ request.PostForm.Set("order_id", msg.OrderID)
+ request.PostForm.Set("courier_phone", msg.CourierPhone)
+ request.PostForm.Set("status", utils.Int2Str(msg.Status))
+ request.PostForm.Set("timestamp", utils.Int64ToStr(msg.Timestamp))
+ request.PostForm.Set("cancel_reason_id", utils.Int2Str(msg.CancelReasonId))
+ request.PostForm.Set("cancel_reason", msg.CancelReason)
+ request.PostForm.Set("sign", sign)
+ fmt.Println("testgy request : %v", request.FormValue("sign"))
+ request.Header.Set("content_type", "application/x-www-form-urlencoded; charset=UTF-8")
+ cl.Do(request)
+ }
+}
+
+func signParams(params url.Values) string {
+ keys := make([]string, 0)
+ for k := range params {
+ if k != "sign" {
+ keys = append(keys, k)
+ }
+ }
+
+ sort.Strings(keys)
+ finalStr := "b1M}9?:sTbsB[OF2gNORnN(|(iy9rB8(`7]|[wGLnbmt`evfM>E:A90DjHAW:UPE"
+ for _, key := range keys {
+ valStr := strings.Join(params[key], "")
+ if valStr != "" {
+ finalStr += key + valStr
+ }
+ }
+
+ // baseapi.SugarLogger.Debug(finalStr)
+ return fmt.Sprintf("%x", sha1.Sum([]byte(finalStr)))
+}
+
func (c *DeliveryHandler) callbackMsg2Waybill(msg *mtpsapi.CallbackOrderMsg) (retVal *model.Waybill) {
retVal = &model.Waybill{
VendorWaybillID: msg.MtPeisongID,
diff --git a/business/partner/printer/feie/feie.go b/business/partner/printer/feie/feie.go
index 95df6cd28..d9819d284 100644
--- a/business/partner/printer/feie/feie.go
+++ b/business/partner/printer/feie/feie.go
@@ -59,7 +59,7 @@ func (c *PrinterHandler) getOrderContent(order *model.GoodsOrder, storeTel strin
商品明细:
-品名 数量 单价 小计
+品名 数量
--------------------------------
`
// 实际支付:%s
orderParams := []interface{}{
@@ -79,8 +79,9 @@ func (c *PrinterHandler) getOrderContent(order *model.GoodsOrder, storeTel strin
for _, sku := range order.Skus {
orderFmt += `%s
`
- orderFmt += `%8s%10s%10s
`
- orderParams = append(orderParams, sku.SkuName, "x"+utils.Int2Str(sku.Count), jxutils.IntPrice2StandardCurrencyString(sku.SalePrice), jxutils.IntPrice2StandardCurrencyString(sku.SalePrice*int64(sku.Count)))
+ orderFmt += `%8s
`
+ orderParams = append(orderParams, sku.SkuName, "x"+utils.Int2Str(sku.Count))
+ //jxutils.IntPrice2StandardCurrencyString(sku.SalePrice), jxutils.IntPrice2StandardCurrencyString(sku.SalePrice*int64(sku.Count))
}
orderFmt += `
共%d种%d件商品
@@ -133,7 +134,7 @@ func (c *PrinterHandler) getOrderContentBig(order *model.GoodsOrder, storeTel st
商品明细:
-品名数量单价小计
+品名 数量
--------------------------------
`
// 实际支付:%s
orderParams := []interface{}{
@@ -153,8 +154,9 @@ func (c *PrinterHandler) getOrderContentBig(order *model.GoodsOrder, storeTel st
for _, sku := range order.Skus {
orderFmt += `%s
`
- orderFmt += `%s %s %s
`
- orderParams = append(orderParams, sku.SkuName, "x"+utils.Int2Str(sku.Count), jxutils.IntPrice2StandardCurrencyString(sku.SalePrice), jxutils.IntPrice2StandardCurrencyString(sku.SalePrice*int64(sku.Count)))
+ orderFmt += `%s
`
+ orderParams = append(orderParams, sku.SkuName, "x"+utils.Int2Str(sku.Count))
+ //jxutils.IntPrice2StandardCurrencyString(sku.SalePrice), jxutils.IntPrice2StandardCurrencyString(sku.SalePrice*int64(sku.Count))
}
orderFmt += `
共%d种%d件商品
diff --git a/business/partner/printer/xiaowm/xiaowm.go b/business/partner/printer/xiaowm/xiaowm.go
index 036ae90ed..9ea887829 100644
--- a/business/partner/printer/xiaowm/xiaowm.go
+++ b/business/partner/printer/xiaowm/xiaowm.go
@@ -60,7 +60,7 @@ func (c *PrinterHandler) getOrderContent(order *model.GoodsOrder, storeTel strin
客户备注: *
%s*
商品明细: *
-品名 数量 单价 小计
+品名 数量
--------------------------------*
`
// 实际支付: %s*
@@ -81,7 +81,8 @@ func (c *PrinterHandler) getOrderContent(order *model.GoodsOrder, storeTel strin
for _, sku := range order.Skus {
orderFmt += `%s*`
orderFmt += `%8s%10s%10s*`
- orderParams = append(orderParams, sku.SkuName, "x"+utils.Int2Str(sku.Count), jxutils.IntPrice2StandardCurrencyString(sku.SalePrice), jxutils.IntPrice2StandardCurrencyString(sku.SalePrice*int64(sku.Count)))
+ orderParams = append(orderParams, sku.SkuName, "x"+utils.Int2Str(sku.Count))
+ // jxutils.IntPrice2StandardCurrencyString(sku.SalePrice), jxutils.IntPrice2StandardCurrencyString(sku.SalePrice*int64(sku.Count))
}
orderFmt += `
*
@@ -135,7 +136,7 @@ func (c *PrinterHandler) getOrderContentBig(order *model.GoodsOrder, storeTel st
客户备注: *
%s*
商品明细: *
-品名数量单价小计*
+品名 数量*
--------------------------------*
`
// 实际支付: %s*
@@ -155,8 +156,9 @@ func (c *PrinterHandler) getOrderContentBig(order *model.GoodsOrder, storeTel st
}
for _, sku := range order.Skus {
orderFmt += `%s*`
- orderFmt += `%s %s %s*`
- orderParams = append(orderParams, sku.SkuName, "x"+utils.Int2Str(sku.Count), jxutils.IntPrice2StandardCurrencyString(sku.SalePrice), jxutils.IntPrice2StandardCurrencyString(sku.SalePrice*int64(sku.Count)))
+ orderFmt += `%s*`
+ orderParams = append(orderParams, sku.SkuName, "x"+utils.Int2Str(sku.Count))
+ // jxutils.IntPrice2StandardCurrencyString(sku.SalePrice), jxutils.IntPrice2StandardCurrencyString(sku.SalePrice*int64(sku.Count))
}
orderFmt += `
共%d种%d件商品*
@@ -231,7 +233,7 @@ func (c *PrinterHandler) getOrderContent2(order *model.GoodsOrder, storeTel stri
}
for _, sku := range order.Skus {
orderFmt += `|5%s`
- orderFmt += `|5%8s%10s%10s`
+ orderFmt += `|5%8s`
orderParams = append(orderParams, sku.SkuName, "x"+utils.Int2Str(sku.Count), jxutils.IntPrice2StandardCurrencyString(sku.SalePrice), jxutils.IntPrice2StandardCurrencyString(sku.SalePrice*int64(sku.Count)))
}
orderFmt += `
diff --git a/business/partner/printer/yilianyun/yilianyun.go b/business/partner/printer/yilianyun/yilianyun.go
index f9036496f..45fd1e948 100644
--- a/business/partner/printer/yilianyun/yilianyun.go
+++ b/business/partner/printer/yilianyun/yilianyun.go
@@ -36,6 +36,7 @@ func (c *PrinterHandler) getOrderContent(order *model.GoodsOrder, storeTel strin
if order.VendorID == model.VendorIDEBAI {
getCode = fmt.Sprintf("饿百取货码:%s\\n\n", jxutils.GetEbaiOrderGetCode(order))
}
+ //TODO 去掉单价和小计,2020-06-18
orderFmt := `
%s\n\n
手机买菜上京西
@@ -57,7 +58,7 @@ func (c *PrinterHandler) getOrderContent(order *model.GoodsOrder, storeTel strin
\n
\n
商品明细: \n
-品名 数量 单价 小计\n
+品名 数量 \n
--------------------------------\n`
// 实际支付:%s\n
orderParams := []interface{}{
@@ -77,8 +78,9 @@ func (c *PrinterHandler) getOrderContent(order *model.GoodsOrder, storeTel strin
for _, sku := range order.Skus {
orderFmt += `%s\n`
- orderFmt += `%8s%10s%10s\n`
- orderParams = append(orderParams, sku.SkuName, "x"+utils.Int2Str(sku.Count), jxutils.IntPrice2StandardCurrencyString(sku.SalePrice), jxutils.IntPrice2StandardCurrencyString(sku.SalePrice*int64(sku.Count)))
+ orderFmt += `%8s\n`
+ orderParams = append(orderParams, sku.SkuName, "x"+utils.Int2Str(sku.Count))
+ //jxutils.IntPrice2StandardCurrencyString(sku.SalePrice), jxutils.IntPrice2StandardCurrencyString(sku.SalePrice*int64(sku.Count))
}
orderFmt += `\n
共%d种%d件商品
@@ -125,7 +127,7 @@ func (c *PrinterHandler) getOrderContentBig(order *model.GoodsOrder, storeTel st
\n
\n
商品明细: \n
-品名数量单价小计\n
+品名 数量\n
--------------------------------\n`
// 实际支付:%s\n
orderParams := []interface{}{
@@ -145,8 +147,9 @@ func (c *PrinterHandler) getOrderContentBig(order *model.GoodsOrder, storeTel st
for _, sku := range order.Skus {
orderFmt += `%s\n`
- orderFmt += `%s %s %s\n\n`
- orderParams = append(orderParams, sku.SkuName, "x"+utils.Int2Str(sku.Count), jxutils.IntPrice2StandardCurrencyString(sku.SalePrice), jxutils.IntPrice2StandardCurrencyString(sku.SalePrice*int64(sku.Count)))
+ orderFmt += `%s\n\n`
+ orderParams = append(orderParams, sku.SkuName, "x"+utils.Int2Str(sku.Count))
+ //jxutils.IntPrice2StandardCurrencyString(sku.SalePrice), jxutils.IntPrice2StandardCurrencyString(sku.SalePrice*int64(sku.Count))
}
orderFmt += `\n
共%d种%d件商品
diff --git a/business/partner/printer/zhongwu/zhongwu.go b/business/partner/printer/zhongwu/zhongwu.go
index 312c8979f..9eff3d4e1 100644
--- a/business/partner/printer/zhongwu/zhongwu.go
+++ b/business/partner/printer/zhongwu/zhongwu.go
@@ -58,7 +58,7 @@ func (c *PrinterHandler) getOrderContent(order *model.GoodsOrder, storeTel strin
商品明细:
-品名 数量 单价 小计
+品名 数量
********************************`
// 实际支付:%s
orderParams := []interface{}{
@@ -78,8 +78,9 @@ func (c *PrinterHandler) getOrderContent(order *model.GoodsOrder, storeTel strin
for _, sku := range order.Skus {
orderFmt += `%s`
- orderFmt += `%8s%10s%10s`
- orderParams = append(orderParams, sku.SkuName, "x"+utils.Int2Str(sku.Count), jxutils.IntPrice2StandardCurrencyString(sku.SalePrice), jxutils.IntPrice2StandardCurrencyString(sku.SalePrice*int64(sku.Count)))
+ orderFmt += `%8s`
+ orderParams = append(orderParams, sku.SkuName, "x"+utils.Int2Str(sku.Count))
+ //jxutils.IntPrice2StandardCurrencyString(sku.SalePrice), jxutils.IntPrice2StandardCurrencyString(sku.SalePrice*int64(sku.Count))
}
orderFmt += `
共%d种%d件商品
@@ -126,7 +127,7 @@ func (c *PrinterHandler) getOrderContentBig(order *model.GoodsOrder, storeTel st
商品明细:
-品名数量单价小计
+品名 数量
********************************`
// 实际支付:%s
orderParams := []interface{}{
@@ -146,8 +147,9 @@ func (c *PrinterHandler) getOrderContentBig(order *model.GoodsOrder, storeTel st
for _, sku := range order.Skus {
orderFmt += `%s`
- orderFmt += `%s %s %s`
- orderParams = append(orderParams, sku.SkuName, "x"+utils.Int2Str(sku.Count), jxutils.IntPrice2StandardCurrencyString(sku.SalePrice), jxutils.IntPrice2StandardCurrencyString(sku.SalePrice*int64(sku.Count)))
+ orderFmt += `%s`
+ orderParams = append(orderParams, sku.SkuName, "x"+utils.Int2Str(sku.Count))
+ //jxutils.IntPrice2StandardCurrencyString(sku.SalePrice), jxutils.IntPrice2StandardCurrencyString(sku.SalePrice*int64(sku.Count))
}
orderFmt += `
共%d种%d件商品
diff --git a/business/partner/purchase/ebai/order.go b/business/partner/purchase/ebai/order.go
index 067fbeb2d..ce6549398 100644
--- a/business/partner/purchase/ebai/order.go
+++ b/business/partner/purchase/ebai/order.go
@@ -134,6 +134,7 @@ func (p *PurchaseHandler) GetOrder4PartRefund(vendorOrderID string) (order *mode
order.DiscountMoney = discountMoney
order.Skus = append(order.Skus, giftSkus...)
order.ActualPayPrice = utils.MustInterface2Int64(result2["user_fee"])
+ order.TotalShopMoney = utils.MustInterface2Int64(result2["shop_fee"])
jxutils.RefreshOrderSkuRelated(order)
} else if err2Ext, ok := err2.(*utils.ErrorWithCode); !ok || err2Ext.IntCode() != ebaiapi.ErrOrderIsNotPartRefund {
err = err2
diff --git a/business/partner/purchase/ebai/order_afs.go b/business/partner/purchase/ebai/order_afs.go
index d06c917a0..f9f67f0c7 100644
--- a/business/partner/purchase/ebai/order_afs.go
+++ b/business/partner/purchase/ebai/order_afs.go
@@ -204,10 +204,24 @@ func (c *PurchaseHandler) ConfirmReceivedReturnGoods(ctx *jxcontext.Context, ord
// 发起全款退款
func (c *PurchaseHandler) RefundOrder(ctx *jxcontext.Context, order *model.GoodsOrder, reason string) (err error) {
- return fmt.Errorf("%s不支持售后全额退款,请让买家发起退款", model.VendorChineseNames[model.VendorIDEBAI])
+ return c.PartRefundOrder(ctx, order, order.Skus, reason)
}
// 发起部分退款
func (c *PurchaseHandler) PartRefundOrder(ctx *jxcontext.Context, order *model.GoodsOrder, refundSkuList []*model.OrderSku, reason string) (err error) {
- return fmt.Errorf("%s不支持售后部分退款,请让买家发起退款", model.VendorChineseNames[model.VendorIDEBAI])
+ if globals.EnableEbaiStoreWrite {
+ err = api.EbaiAPI.OrderPartRefund(order.VendorOrderID, orderSkus2AfsSkus(refundSkuList))
+ }
+ return err
+}
+
+func orderSkus2AfsSkus(refundSkuList []*model.OrderSku) (removeSkuList []*ebaiapi.RefundSku) {
+ for _, v := range refundSkuList {
+ refundSku := &ebaiapi.RefundSku{
+ CustomeSkuID: utils.Int2Str(v.SkuID),
+ Number: utils.Int2Str(v.Count),
+ }
+ removeSkuList = append(removeSkuList, refundSku)
+ }
+ return removeSkuList
}
diff --git a/business/partner/purchase/ebai/store_sku2.go b/business/partner/purchase/ebai/store_sku2.go
index be00e1a67..22b40fc7a 100644
--- a/business/partner/purchase/ebai/store_sku2.go
+++ b/business/partner/purchase/ebai/store_sku2.go
@@ -28,6 +28,14 @@ var (
175: "赠品专区",
18: "烧烤吧台",
}
+
+ //果园果切的饿百分类ID
+ gygqVendorCatID = map[int]int{
+ 201227732: 1,
+ 201220933: 1,
+ 201223525: 1,
+ 201220334: 1,
+ }
)
func (p *PurchaseHandler) GetStoreSkusBatchSize(funcID int) (batchSize int) {
@@ -316,10 +324,16 @@ func (p *PurchaseHandler) UpdateStoreSkusStock(ctx *jxcontext.Context, vendorOrg
}
func genSkuParamsFromStoreSkuInfo2(storeSku *dao.StoreSkuSyncInfo, isCreate, isExd bool) (params map[string]interface{}) {
+ var img string
+ if storeSku.ImgMix != "" {
+ img = storeSku.ImgMix
+ } else {
+ img = storeSku.Img
+ }
photos := []map[string]interface{}{
map[string]interface{}{
"is_master": true,
- "url": storeSku.Img,
+ "url": img,
},
}
if storeSku.Img2 != "" {
@@ -328,14 +342,21 @@ func genSkuParamsFromStoreSkuInfo2(storeSku *dao.StoreSkuSyncInfo, isCreate, isE
"url": storeSku.Img2,
})
}
+ if storeSku.Img3 != "" {
+ photos = append(photos, map[string]interface{}{
+ "is_master": false,
+ "url": storeSku.Img3,
+ })
+ }
params = map[string]interface{}{
// "name": utils.LimitMixedStringLen(storeSku.SkuName, ebaiapi.MaxSkuNameByteCount),
"left_num": model.MaxStoreSkuStockQty,
// "category_id": utils.Str2Int64(storeSku.VendorCatID),
"predict_cat": 0, // 不使用推荐类目
// "cat3_id": getEbaiCat(storeSku.VendorVendorCatID),
- "weight": storeSku.Weight,
- "photos": photos,
+ "weight": storeSku.Weight,
+ "photos": photos,
+ "preparation_time": storeSku.PreparationTime,
}
if !isExd {
params["category_id"] = utils.Str2Int64(storeSku.VendorCatID)
@@ -347,6 +368,21 @@ func genSkuParamsFromStoreSkuInfo2(storeSku *dao.StoreSkuSyncInfo, isCreate, isE
params["cat3_id"] = storeSku.ExdCategoryThirdID
params["category_id"] = utils.Str2Int64WithDefault(storeSku.VendorCatID, 0)
}
+ //证明是果园的几个果切分类,需要填加工服务
+ if gygqVendorCatID[int(storeSku.VendorVendorCatID)] == 1 {
+ params["process_type"] = model.YES
+ processDetail := []map[string]interface{}{
+ map[string]interface{}{
+ "type": "去皮",
+ "time": 2,
+ },
+ map[string]interface{}{
+ "type": "不加工",
+ "time": 0,
+ },
+ }
+ params["process_detail"] = processDetail
+ }
if storeSku.DescImg != "" {
params["rtf"] = storeSku.DescImg
}
diff --git a/business/partner/purchase/jd/sku2.go b/business/partner/purchase/jd/sku2.go
index 5d2717984..f9da68b38 100644
--- a/business/partner/purchase/jd/sku2.go
+++ b/business/partner/purchase/jd/sku2.go
@@ -164,9 +164,15 @@ func skuInfo2Param(ctx *jxcontext.Context, sku *dao.StoreSkuSyncInfo) (param *jd
FixedStatus: jxStatus2jdStatus(sku.MergedStatus),
IsSale: jdapi.IsSaleNo, // todo ?
- Upc: sku.Upc,
- Images: jxutils.BatchString2Slice(sku.Img, sku.Img2),
+ Upc: sku.Upc,
+ // Images: jxutils.BatchString2Slice(sku.Img, sku.Img2),
}
+ if sku.ImgMix != "" {
+ param.Images = jxutils.BatchString2Slice(sku.ImgMix, sku.Img2)
+ } else {
+ param.Images = jxutils.BatchString2Slice(sku.Img, sku.Img2)
+ }
+
if param.CategoryID == 0 {
param.CategoryID = int64(getDefJdCategoryID())
}
diff --git a/business/partner/purchase/jd/store.go b/business/partner/purchase/jd/store.go
index aca822b80..14e966040 100644
--- a/business/partner/purchase/jd/store.go
+++ b/business/partner/purchase/jd/store.go
@@ -148,7 +148,7 @@ func (p *PurchaseHandler) UpdateStore(db *dao.DaoDB, storeID int, userName strin
StationNo: store.VendorStoreID,
Operator: userName,
Phone: phone,
- Mobile: store.Tel2,
+ Mobile: store.Tel1,
}
if store.SyncStatus&model.SyncFlagDeletedMask == 0 {
storeParams.OutSystemID = utils.Int2Str(int(store.ID))
diff --git a/business/partner/purchase/jdshop/order.go b/business/partner/purchase/jdshop/order.go
index 7b37f7363..219514524 100644
--- a/business/partner/purchase/jdshop/order.go
+++ b/business/partner/purchase/jdshop/order.go
@@ -62,9 +62,9 @@ func (p *PurchaseHandler) PickupGoods(order *model.GoodsOrder, isSelfDelivery bo
status, err := p.GetOrderStatus("", order.VendorOrderID2)
//说明此时该订单在平台上已经取消了
if status == model.OrderStatusApplyCancel {
- err = ChangeOrderStatus(order.VendorOrderID, model.OrderStatusFinishedPickup, "自动拣货完成")
- } else {
err = ChangeOrderStatus(order.VendorOrderID, model.OrderStatusCanceled, "订单状态发生了改变")
+ } else {
+ err = ChangeOrderStatus(order.VendorOrderID, model.OrderStatusFinishedPickup, "自动拣货完成")
}
return err
}
@@ -100,6 +100,7 @@ func (p *PurchaseHandler) AgreeOrRefuseCancel(ctx *jxcontext.Context, order *mod
return err
}
func (p *PurchaseHandler) CancelOrder(ctx *jxcontext.Context, order *model.GoodsOrder, reason string) (err error) {
+ ChangeOrderStatus(order.VendorOrderID, model.OrderStatusCanceled, reason)
return err
}
func (p *PurchaseHandler) AdjustOrder(ctx *jxcontext.Context, order *model.GoodsOrder, removedSkuList []*model.OrderSku, reason string) (err error) {
diff --git a/business/partner/purchase/jdshop/store_sku.go b/business/partner/purchase/jdshop/store_sku.go
index c824cb56d..fbfa20e7c 100644
--- a/business/partner/purchase/jdshop/store_sku.go
+++ b/business/partner/purchase/jdshop/store_sku.go
@@ -122,6 +122,7 @@ func (p *PurchaseHandler) UpdateStoreSkus(ctx *jxcontext.Context, storeID int, v
VenderID: jdshopapi.VenderID,
PromiseID: jdshopapi.JdsPromiseID,
ShopCategorys: []int{utils.Str2Int(v.VendorCatID)},
+ JdPrice: jxutils.IntPrice2Standard(v.UnitPrice),
}
var desc string
if v.DescImg != "" {
@@ -178,11 +179,7 @@ func (p *PurchaseHandler) UpdateStoreSkus(ctx *jxcontext.Context, storeID int, v
imageURL, err = uploadImg(img, name, "tou")
}
}
- err2 := api.JdShopAPI.TransparentImageAdd(v.JdsWareID, imageURL)
- if err2 != nil {
- failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorChineseNames[model.VendorIDJDShop], "更新商品基础信息")
- return failedList, err
- }
+ api.JdShopAPI.TransparentImageAdd(v.JdsWareID, imageURL)
}
for _, vv := range v.StoreSkuSyncInfoJds {
updateSkusParam, err := buildUpdateSkusParam(v, vv, false)
@@ -190,8 +187,7 @@ func (p *PurchaseHandler) UpdateStoreSkus(ctx *jxcontext.Context, storeID int, v
failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorChineseNames[model.VendorIDJDShop], "更新商品基础信息")
return failedList, err
}
- vendorSkuID, err := api.JdShopAPI.UpdateSkus(updateSkusParam)
- vv.VendorSkuID = vendorSkuID
+ _, err = api.JdShopAPI.UpdateSkus(updateSkusParam)
}
}
if err != nil {
@@ -209,9 +205,10 @@ func (p *PurchaseHandler) DeleteStoreSkus(ctx *jxcontext.Context, storeID int, v
if err == nil {
err = api.JdShopAPI.DeleteWare(utils.Str2Int(v.VendorSkuID2))
}
- }
- if err != nil {
- failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorChineseNames[model.VendorIDJDShop], "删除商品")
+ if err != nil {
+ failedList = append(failedList, putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorChineseNames[model.VendorIDJDShop], "删除商品")...)
+
+ }
}
}
return failedList, err
@@ -240,10 +237,10 @@ func (p *PurchaseHandler) UpdateStoreSkusStatus(ctx *jxcontext.Context, vendorOr
if globals.EnableJdShopWrite {
var stock = 0
for _, v := range storeSkuList {
- if status == model.SkuStatusNormal {
- stock = 9999
- }
if storeID == model.JdShopMainStoreID {
+ if status == model.SkuStatusNormal {
+ stock = 9999
+ }
if v.JdsStockSwitch == model.NO {
stock = 0
}
@@ -253,6 +250,9 @@ func (p *PurchaseHandler) UpdateStoreSkusStatus(ctx *jxcontext.Context, vendorOr
err = err2
if len(storeSkus) > 0 {
if storeSkus[0].JdsID != 0 && vendorStoreID != "" {
+ if storeSkus[0].Status == model.SkuStatusNormal {
+ stock = 9999
+ }
err = api.JdShopAPI.UpdateSkuSiteStock(storeSkus[0].JdsID, stock, utils.Str2Int(vendorStoreID))
}
}
@@ -269,9 +269,9 @@ func (p *PurchaseHandler) UpdateStoreSkusPrice(ctx *jxcontext.Context, vendorOrg
if globals.EnableJdShopWrite && vendorStoreID == model.JdShopMainVendorStoreID {
for _, v := range storeSkuList {
err = api.JdShopAPI.UpdateSkuJdPrice(utils.Str2Int(v.VendorSkuID), jxutils.IntPrice2Standard(v.VendorPrice))
- }
- if err != nil {
- failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorChineseNames[model.VendorIDJDShop], "修改商品价格")
+ if err != nil {
+ failedList = append(failedList, putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorChineseNames[model.VendorIDJDShop], "修改商品价格")...)
+ }
}
}
return failedList, err
@@ -660,9 +660,17 @@ func buildCreateWareParam(storeSku *dao.StoreSkuSyncInfo) (createSkuParamWare *j
ggValueID int64 //规格的属性id
attrsPropSku []*jdshopapi.CreateSkuParamAttrs
multiPropSku []*jdshopapi.CreateSkuParamAttrs
+ specQuality string
)
valuesSku, maxNo, _ := api.JdShopAPI.FindValuesByAttrId(attrIDs["规格"])
- specQuality := utils.Float64ToStr(float64(v.SpecQuality)) + v.SpecUnit
+ if v.SpecUnit == model.SpecUnitNames[1] || v.SpecUnit == model.SpecUnitNames[2] {
+ specQuality = strings.TrimRight(fmt.Sprintf("%.2f", float64(v.SpecQuality)), "0.") + v.SpecUnit
+ } else {
+ specQuality = utils.Float64ToStr(float64(v.SpecQuality)) + v.SpecUnit
+ }
+ if v.Comment != "" {
+ specQuality = v.Comment
+ }
for _, v := range valuesSku {
if v.Name == specQuality {
ggValueID = v.ID
@@ -754,40 +762,16 @@ func filterSensitiveWord(name string) (result string) {
}
func buildUpdateSkusParam(storeSku *dao.StoreSkuSyncInfo, v *dao.StoreSkuSyncInfo, isCreate bool) (updateSkusParam *jdshopapi.UpdateSkusParam, err error) {
- updateSkusParam = &jdshopapi.UpdateSkusParam{
- WareID: storeSku.JdsWareID,
- }
- attrIDs := make(map[string]int)
- attrs, err := api.JdShopAPI.FindAttrs(int(storeSku.VendorVendorCatID))
- for _, v := range attrs {
- if v.Name == "规格" {
- attrIDs[v.Name] = v.ID
- } else if v.Name == "类别" {
- attrIDs[v.Name] = v.ID
- }
- }
var (
ggValueID int64 //规格的属性id
attrsPropSku []*jdshopapi.CreateSkuParamAttrs
skus []*jdshopapi.UpdateSkusParamSkus
multiPropSku []*jdshopapi.CreateSkuParamAttrs
+ specQuality string
)
- valuesSku, maxNo, _ := api.JdShopAPI.FindValuesByAttrId(attrIDs["规格"])
- specQuality := utils.Float64ToStr(float64(v.SpecQuality)) + v.SpecUnit
- for _, v := range valuesSku {
- if v.Name == specQuality {
- ggValueID = v.ID
- }
+ updateSkusParam = &jdshopapi.UpdateSkusParam{
+ WareID: storeSku.JdsWareID,
}
- if ggValueID == 0 { //说明没有建这个规格,要建上
- catID, _ := api.JdShopAPI.SaveVenderAttrValue(specQuality, attrIDs["规格"], int(storeSku.VendorVendorCatID), maxNo+1)
- ggValueID = catID
- }
- attrSku := &jdshopapi.CreateSkuParamAttrs{
- AttrID: utils.Int2Str(attrIDs["规格"]),
- AttrValues: []string{utils.Int64ToStr(ggValueID)},
- }
- attrsPropSku = append(attrsPropSku, attrSku)
sku := &jdshopapi.UpdateSkusParamSkus{
WareID: storeSku.JdsWareID,
JdPrice: jxutils.IntPrice2Standard(v.VendorPrice),
@@ -795,17 +779,20 @@ func buildUpdateSkusParam(storeSku *dao.StoreSkuSyncInfo, v *dao.StoreSkuSyncInf
Type2: "com.jd.pop.ware.ic.api.domain.Sku",
OuterID: utils.Int2Str(v.SkuID),
}
- sku.SaleAttrs = attrsPropSku
- if v.Status == model.SkuStatusNormal {
+ //库存设置
+ if v.StoreSkuStatus == model.SkuStatusNormal {
sku.StockNum = "9999"
} else {
sku.StockNum = "0"
}
- if !isCreate {
- result, err2 := api.JdShopAPI.FindSkuById(utils.Str2Int64(v.VendorSkuID))
- err = err2
- if specQuality != result.SaleAttrs[0].AttrValueAlias[0] {
- api.JdShopAPI.DeleteSku(utils.Str2Int64(v.VendorSkuID))
+ //规格类别设置
+ attrIDs := make(map[string]int)
+ attrs, err := api.JdShopAPI.FindAttrs(int(storeSku.VendorVendorCatID))
+ for _, v := range attrs {
+ if v.Name == "规格" {
+ attrIDs[v.Name] = v.ID
+ } else if v.Name == "类别" {
+ attrIDs[v.Name] = v.ID
}
}
if attrIDs["类别"] != 0 {
@@ -819,6 +806,58 @@ func buildUpdateSkusParam(storeSku *dao.StoreSkuSyncInfo, v *dao.StoreSkuSyncInf
multiPropSku = append(multiPropSku, attrlb)
}
sku.MultiCateProps = multiPropSku
+ if v.SpecUnit == model.SpecUnitNames[1] || v.SpecUnit == model.SpecUnitNames[2] {
+ specQuality = strings.TrimRight(fmt.Sprintf("%.2f", float64(v.SpecQuality)), "0.") + v.SpecUnit
+ } else {
+ specQuality = utils.Float64ToStr(float64(v.SpecQuality)) + v.SpecUnit
+ }
+ valuesSku, maxNo, _ := api.JdShopAPI.FindValuesByAttrId(attrIDs["规格"])
+ if isCreate {
+ for _, vv := range valuesSku {
+ if vv.Name == specQuality {
+ ggValueID = vv.ID
+ break
+ }
+ }
+ if ggValueID == 0 { //说明没有建这个规格,要建上
+ catID, _ := api.JdShopAPI.SaveVenderAttrValue(specQuality, attrIDs["规格"], int(storeSku.VendorVendorCatID), maxNo+1)
+ ggValueID = catID
+ }
+ attrSku := &jdshopapi.CreateSkuParamAttrs{
+ AttrID: utils.Int2Str(attrIDs["规格"]),
+ AttrValues: []string{utils.Int64ToStr(ggValueID)},
+ }
+ attrsPropSku = append(attrsPropSku, attrSku)
+ sku.SaleAttrs = attrsPropSku
+ } else {
+ vendorSku, err2 := api.JdShopAPI.FindSkuById(utils.Str2Int64(v.VendorSkuID))
+ err = err2
+ vendorAttrValue := vendorSku.SaleAttrs[0].AttrValueAlias[0]
+ if v.Comment != "" {
+ specQuality = v.Comment
+ }
+ if v.Comment != vendorAttrValue {
+ err = api.JdShopAPI.UpdateWareSaleAttrvalueAlias(&jdshopapi.UpdateWareSaleAttrvalueAliasParam{
+ WareID: v.JdsWareID,
+ Props: []*jdshopapi.CreateSkuParamAttrs2{
+ &jdshopapi.CreateSkuParamAttrs2{
+ AttrID: vendorSku.SaleAttrs[0].AttrID,
+ AttrValues: []string{vendorSku.SaleAttrs[0].AttrValues[0]},
+ AttrValueAlias: []string{specQuality},
+ Type: "com.jd.pop.ware.ic.api.domain.prop",
+ Type2: "com.jd.pop.ware.ic.api.domain.Prop",
+ },
+ },
+ })
+ sku.SkuID = utils.Str2Int64(v.VendorSkuID)
+ }
+ attrSku := &jdshopapi.CreateSkuParamAttrs{
+ AttrID: vendorSku.SaleAttrs[0].AttrID,
+ AttrValues: []string{vendorSku.SaleAttrs[0].AttrValues[0]},
+ }
+ attrsPropSku = append(attrsPropSku, attrSku)
+ sku.SaleAttrs = attrsPropSku
+ }
skus = append(skus, sku)
updateSkusParam.Skus = skus
return updateSkusParam, err
diff --git a/business/partner/purchase/jx/localjx/order.go b/business/partner/purchase/jx/localjx/order.go
index 7614f9449..ee675ec6c 100644
--- a/business/partner/purchase/jx/localjx/order.go
+++ b/business/partner/purchase/jx/localjx/order.go
@@ -1423,7 +1423,7 @@ func GetMatterOrderStatus(ctx *jxcontext.Context, vendorOrderID string) (result
var (
db = dao.GetDB()
)
- order, err := partner.CurOrderManager.LoadOrder(vendorOrderID, model.VendorIDJX)
+ order, err := dao.GetSimpleOrder(db, vendorOrderID)
if err != nil {
return nil, err
}
diff --git a/business/partner/purchase/mtwm/store_sku2.go b/business/partner/purchase/mtwm/store_sku2.go
index d33a2e9dc..432f3611f 100644
--- a/business/partner/purchase/mtwm/store_sku2.go
+++ b/business/partner/purchase/mtwm/store_sku2.go
@@ -5,6 +5,8 @@ import (
"regexp"
"strings"
+ "github.com/astaxie/beego"
+
"git.rosy.net.cn/baseapi/platformapi/mtwmapi"
"git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/jx-callback/business/jxutils"
@@ -246,7 +248,7 @@ func (p *PurchaseHandler) createOrUpdateStoreSkus(ctx *jxcontext.Context, storeI
syncType = "更新商品"
}
for i, storeSku := range storeSkuList {
- isNeedUpdatePrice := isCreate //storeSku.SkuSyncStatus&( model.SyncFlagPriceMask| model.SyncFlagNewMask) != 0
+ isNeedUpdatePrice := storeSku.SkuSyncStatus&(model.SyncFlagPriceMask|model.SyncFlagNewMask) != 0
foodData := make(map[string]interface{})
foodDataList[i] = foodData
foodData[mtwmapi.KeyAppFoodCode] = utils.Int2Str(storeSku.SkuID)
@@ -265,6 +267,9 @@ func (p *PurchaseHandler) createOrUpdateStoreSkus(ctx *jxcontext.Context, storeI
foodData["unit"] = storeSku.Unit
foodData["box_num"] = 1
foodData["box_price"] = jxutils.IntPrice2Standard(storeSku.BoxFee)
+ if beego.BConfig.RunMode == "jxgy" {
+ foodData["common_attr_value"] = switchAttr(storeSku.VendorVendorCatID)
+ }
catCode := tryCatName2Code(storeSku.VendorCatID)
if catCode != "" {
foodData["category_code"] = catCode
@@ -277,7 +282,11 @@ func (p *PurchaseHandler) createOrUpdateStoreSkus(ctx *jxcontext.Context, storeI
if img2 == "" {
img2 = storeSku.Img
}
- foodData["picture"] = strings.Join(jxutils.BatchString2Slice(storeSku.Img, img2, storeSku.Img, storeSku.Img, storeSku.Img), ",")
+ if storeSku.ImgMix != "" {
+ foodData["picture"] = strings.Join(jxutils.BatchString2Slice(storeSku.ImgMix, img2, storeSku.ImgMix, storeSku.ImgMix, storeSku.ImgMix), ",")
+ } else {
+ foodData["picture"] = strings.Join(jxutils.BatchString2Slice(storeSku.Img, img2, storeSku.Img, storeSku.Img, storeSku.Img), ",")
+ }
} else {
foodData["picture"] = strings.Join(jxutils.BatchString2Slice(storeSku.Img, storeSku.Img2), ",")
}
@@ -360,6 +369,28 @@ func (p *PurchaseHandler) DeleteStoreSkus(ctx *jxcontext.Context, storeID int, v
return failedList, err
}
+func switchAttr(vendorCatID int64) (attrs string) {
+ switch vendorCatID {
+ case 200002727:
+ return mtwmapi.MtwmSkuAttr200002727
+ case 200001555:
+ return mtwmapi.MtwmSkuAttr200001555
+ case 200002728:
+ return mtwmapi.MtwmSkuAttr200002728
+ case 200001519, 200000592:
+ return mtwmapi.MtwmSkuAttr200000592
+ case 200002704, 200002731:
+ return mtwmapi.MtwmSkuAttr200002731
+ case 200002716:
+ return mtwmapi.MtwmSkuAttr200002716
+ case 200002667, 200002713, 200002670:
+ return mtwmapi.MtwmSkuAttr200002670
+ case 200002680:
+ return mtwmapi.MtwmSkuAttr200002680
+ }
+ return attrs
+}
+
func stockCount2Mtwm(stock int) (mtwmStock string) {
return utils.Int2Str(stock)
}
diff --git a/conf/app.conf b/conf/app.conf
index f9ab2bab5..ef6f86ce8 100644
--- a/conf/app.conf
+++ b/conf/app.conf
@@ -395,7 +395,7 @@ enableElmStoreWrite = false
enableMtwmStoreWrite = false
enableWscStoreWrite = false
enableYbStoreWrite = false
-enableJdShopWrite = false
+enableJdShopWrite = true
jdOrgCode = "320406"
jdLoginName = "jd_jxcs1223"
diff --git a/controllers/cms_sku.go b/controllers/cms_sku.go
index 1f5c9fe13..bd04f8fb0 100644
--- a/controllers/cms_sku.go
+++ b/controllers/cms_sku.go
@@ -199,6 +199,8 @@ func (c *SkuController) UpdateSkuName() {
delete(payload, "exPrefix")
delete(payload, "exPrefixBegin")
delete(payload, "exPrefixEnd")
+ delete(payload, "imgWaterMark")
+ delete(payload, "exVendorID")
retVal, err = cms.UpdateSkuName(params.Ctx, params.NameID, payload, params.IsExd)
}
return retVal, "", err
@@ -403,9 +405,11 @@ func (c *SkuController) GetJdUpcCodeByName() {
// @Description 批量设置商品额外前缀
// @Param token header string true "认证token"
// @Param nameIDs formData string true "商品nameIDs"
-// @Param exPrefix formData string true "商品额外前缀"
+// @Param exPrefix formData string false "商品额外前缀"
// @Param fromDate formData string true "生效开始时间,格式 2006-01-01 "
// @Param toDate formData string true "生效结束时间,格式 2006-01-01 "
+// @Param imgWaterMark formData string false "商品水印图"
+// @Param vendorID formData int true "平台ID"
// @Param isAsync formData bool false "是否异步"
// @Param isContinueWhenError formData bool false "单个同步失败是否继续,缺省false"
// @Success 200 {object} controllers.CallResult
@@ -415,7 +419,7 @@ func (c *SkuController) UpdateSkuNamesExPrefix() {
c.callUpdateSkuNamesExPrefix(func(params *tSkuUpdateSkuNamesExPrefixParams) (retVal interface{}, errCode string, err error) {
var skuIDList []int
if err = jxutils.Strings2Objs(params.NameIDs, &skuIDList); err == nil {
- retVal, err = cms.UpdateSkuNamesExPrefix(params.Ctx, skuIDList, params.ExPrefix, params.FromDate, params.ToDate, params.IsAsync, params.IsContinueWhenError)
+ retVal, err = cms.UpdateSkuNamesExPrefix(params.Ctx, skuIDList, params.ImgWaterMark, params.VendorID, params.ExPrefix, params.FromDate, params.ToDate, params.IsAsync, params.IsContinueWhenError)
}
return retVal, "", err
})
@@ -479,3 +483,27 @@ func (c *SkuController) RefreshJdDepot() {
return retVal, "", err
})
}
+
+// @Title 批量设置商品额外信息
+// @Description 批量设置商品额外信息
+// @Param token header string true "认证token"
+// @Param nameIDs formData string true "商品nameIDs"
+// @Param exPrefix formData string false "商品额外前缀"
+// @Param fromDate formData string true "生效开始时间,格式 2006-01-01 "
+// @Param toDate formData string true "生效结束时间,格式 2006-01-01 "
+// @Param imgWaterMark formData string false "商品水印图"
+// @Param vendorID formData int true "平台ID"
+// @Param isAsync formData bool false "是否异步"
+// @Param isContinueWhenError formData bool false "单个同步失败是否继续,缺省false"
+// @Success 200 {object} controllers.CallResult
+// @Failure 200 {object} controllers.CallResult
+// @router /UpdateSkuExinfoMap [put]
+func (c *SkuController) UpdateSkuExinfoMap() {
+ c.callUpdateSkuExinfoMap(func(params *tSkuUpdateSkuExinfoMapParams) (retVal interface{}, errCode string, err error) {
+ var skuIDList []int
+ if err = jxutils.Strings2Objs(params.NameIDs, &skuIDList); err == nil {
+ retVal, err = cms.UpdateSkuExinfoMap(params.Ctx, skuIDList, params.ImgWaterMark, params.VendorID, params.ExPrefix, params.FromDate, params.ToDate, params.IsAsync, params.IsContinueWhenError)
+ }
+ return retVal, "", err
+ })
+}
diff --git a/controllers/cms_store.go b/controllers/cms_store.go
index d24330b3c..01c32e164 100644
--- a/controllers/cms_store.go
+++ b/controllers/cms_store.go
@@ -42,6 +42,7 @@ type StoreController struct {
// @Param orderCountTo query int false "订单量结束"
// @Param marketManPhone query string false "市场负责人电话"
// @Param briefLevel query int false "返回信息精简模式"
+// @Param storeLevels query string false "门店等级"
// @Param offset query int false "门店列表起始序号(以0开始,缺省为0)"
// @Param pageSize query int false "门店列表页大小(缺省为50,-1表示全部)"
// @Success 200 {object} controllers.CallResult
diff --git a/controllers/jx_order.go b/controllers/jx_order.go
index 640f07f68..a4d044b51 100644
--- a/controllers/jx_order.go
+++ b/controllers/jx_order.go
@@ -1088,3 +1088,18 @@ func (c *OrderController) SendJdwlForJdsOrder() {
return retVal, "", err
})
}
+
+// @Title 手动拉取京东商城订单
+// @Description 手动拉取京东商城订单
+// @Param token header string true "认证token"
+// @Param fromTime formData string true "订单起始时间"
+// @Param toTime formData string true "订单结束时间"
+// @Success 200 {object} controllers.CallResult
+// @Failure 200 {object} controllers.CallResult
+// @router /SaveJdsOrders [post]
+func (c *OrderController) SaveJdsOrders() {
+ c.callSaveJdsOrders(func(params *tOrderSaveJdsOrdersParams) (retVal interface{}, errCode string, err error) {
+ err = orderman.SaveJdsOrders(params.Ctx, utils.Str2Time(params.FromTime), utils.Str2Time(params.ToTime))
+ return retVal, "", err
+ })
+}
diff --git a/globals/beegodb/beegodb.go b/globals/beegodb/beegodb.go
index fe01980d6..17217e5d3 100644
--- a/globals/beegodb/beegodb.go
+++ b/globals/beegodb/beegodb.go
@@ -35,6 +35,7 @@ func Init() {
orm.RegisterModel(&model.StoreSkuAudit{})
orm.RegisterModel(&model.SkuCategory{})
orm.RegisterModel(&model.ThingMap{})
+ orm.RegisterModel(&model.SkuExinfoMap{})
orm.RegisterModel(&model.AuthBind{}, &model.User{})
diff --git a/main.go b/main.go
index 59532647a..6d77b0f82 100644
--- a/main.go
+++ b/main.go
@@ -143,8 +143,11 @@ func main() {
if err := tasks.RefreshYilianyunToken(); err != nil {
globals.SugarLogger.Errorf("RefreshYilianyunToken failed with error:%s", err)
return
- }
+ }
+ // if globals.IsProductEnv() {
+ // orderman.SaveJdsOrders(nil, time.Now().Add(-2*time.Hour), time.Now())
+ // }
orderman.LoadPendingOrders()
// 延时的原因是等回调准备好
diff --git a/routers/commentsRouter_controllers.go b/routers/commentsRouter_controllers.go
index 14ea8c384..79bf8f9aa 100644
--- a/routers/commentsRouter_controllers.go
+++ b/routers/commentsRouter_controllers.go
@@ -2816,5 +2816,4 @@ func init() {
MethodParams: param.Make(),
Filters: nil,
Params: nil})
-
}