Merge remote-tracking branch 'origin/jdshop' into jxact
This commit is contained in:
@@ -131,6 +131,11 @@ func (c *OrderManager) OnOrderAdjust(order *model.GoodsOrder, orderStatus *model
|
|||||||
// return err
|
// return err
|
||||||
// }, "OnAdjustOrder delete order_sku, orderID:%s", order.VendorOrderID)
|
// }, "OnAdjustOrder delete order_sku, orderID:%s", order.VendorOrderID)
|
||||||
order.AdjustCount = adjustCount + 1
|
order.AdjustCount = adjustCount + 1
|
||||||
|
//扣点的订单需要修改订单的totalshopmoney
|
||||||
|
if err == nil && order.EarningType == model.EarningTypePoints {
|
||||||
|
order2, _ := partner.GetPurchaseOrderHandlerFromVendorID(order.VendorID).GetOrder(order.VendorOrgCode, order.VendorOrderID)
|
||||||
|
order.TotalShopMoney = order2.TotalShopMoney
|
||||||
|
}
|
||||||
isDuplicated, err = c.SaveOrder(order, true, db)
|
isDuplicated, err = c.SaveOrder(order, true, db)
|
||||||
}
|
}
|
||||||
if err == nil {
|
if err == nil {
|
||||||
@@ -1321,6 +1326,154 @@ func setJdsOrderSeq(order *model.GoodsOrder) (err error) {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func MergeJdsOrders(ctx *jxcontext.Context, vendorOrderIDs []string) (vendorOrderIDJds string, err error) {
|
||||||
|
globals.SugarLogger.Debugf("jds MergeJdsOrders vendorOrderIDs: %v", vendorOrderIDs)
|
||||||
|
var (
|
||||||
|
db = dao.GetDB()
|
||||||
|
orders []*model.GoodsOrder
|
||||||
|
orderSkus []*model.OrderSku
|
||||||
|
orderIDs []string
|
||||||
|
storeDuplicate = make(map[int]int)
|
||||||
|
storeID int
|
||||||
|
)
|
||||||
|
for _, vendorOrderID := range vendorOrderIDs {
|
||||||
|
order, _ := dao.GetSimpleOrder(db, vendorOrderID)
|
||||||
|
if err != nil || order == nil {
|
||||||
|
return "", fmt.Errorf("未查询到该订单!订单号:[%v]", vendorOrderID)
|
||||||
|
}
|
||||||
|
if order.Status >= model.OrderStatusDelivering && order.Status != model.OrderStatusCanceled {
|
||||||
|
return "", fmt.Errorf("暂不支持此状态的订单进行转移!订单号:[%v]", vendorOrderID)
|
||||||
|
}
|
||||||
|
if order.VendorID != model.VendorIDJDShop {
|
||||||
|
return "", fmt.Errorf("暂不支持非京狗的订单进行转移!订单号:[%v]", vendorOrderID)
|
||||||
|
}
|
||||||
|
storeDuplicate[jxutils.GetSaleStoreIDFromOrder(order)] = jxutils.GetSaleStoreIDFromOrder(order)
|
||||||
|
orders = append(orders, order)
|
||||||
|
|
||||||
|
//订单商品
|
||||||
|
skus, _ := dao.GetSimpleOrderSkus(db, order.VendorOrderID, nil)
|
||||||
|
orderSkus = append(orderSkus, skus...)
|
||||||
|
|
||||||
|
orderIDs = append(orderIDs, vendorOrderID)
|
||||||
|
}
|
||||||
|
if len(storeDuplicate) > 1 {
|
||||||
|
return "", fmt.Errorf("只能选择相同门店的订单进行合并!")
|
||||||
|
} else {
|
||||||
|
storeID = jxutils.GetSaleStoreIDFromOrder(orders[0])
|
||||||
|
}
|
||||||
|
for _, order := range orders {
|
||||||
|
var waybill *model.Waybill
|
||||||
|
//将订单和运单取消
|
||||||
|
waybills, err := dao.GetWaybills(db, order.VendorOrderID)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
if len(waybills) > 0 {
|
||||||
|
for _, v := range waybills {
|
||||||
|
if v.Status != model.WaybillStatusCanceled {
|
||||||
|
waybill = v
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if waybill != nil {
|
||||||
|
if waybill.WaybillVendorID != model.VendorIDJDWL {
|
||||||
|
if handler := partner.GetDeliveryPlatformFromVendorID(waybill.WaybillVendorID); handler != nil {
|
||||||
|
err = handler.Handler.CancelWaybill(waybill, 0, "订单合并被取消")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if err = jdshop.ChangeOrderStatus(order.VendorOrderID, model.OrderStatusCanceled, "订单合并被取消"); err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//重新构建order的数据
|
||||||
|
storeMaps, err := dao.GetStoresMapList(db, []int{model.VendorIDJDShop}, []int{storeID}, nil, model.StoreStatusAll, model.StoreIsSyncAll, "", "")
|
||||||
|
if err != nil || len(storeMaps) == 0 {
|
||||||
|
return "", fmt.Errorf("该门店未绑定京狗平台,请先绑定后再转移!门店:[%v]", storeID)
|
||||||
|
}
|
||||||
|
stores, _ := dao.GetStoreList(db, []int{storeID}, nil, nil, nil, "")
|
||||||
|
var (
|
||||||
|
newEarningPrice int64
|
||||||
|
actualPrice int64
|
||||||
|
shopPrice int64
|
||||||
|
salePrice int64
|
||||||
|
totalShop int64
|
||||||
|
)
|
||||||
|
for _, v := range orders {
|
||||||
|
newEarningPrice += v.NewEarningPrice
|
||||||
|
actualPrice += v.ActualPayPrice
|
||||||
|
shopPrice += v.ShopPrice
|
||||||
|
salePrice += v.SalePrice
|
||||||
|
totalShop += v.TotalShopMoney
|
||||||
|
}
|
||||||
|
store := stores[0]
|
||||||
|
order := orders[0]
|
||||||
|
order.ID = 0
|
||||||
|
order.NewEarningPrice = newEarningPrice
|
||||||
|
order.ActualPayPrice = actualPrice
|
||||||
|
order.SalePrice = salePrice
|
||||||
|
order.ShopPrice = shopPrice
|
||||||
|
order.TotalShopMoney = totalShop
|
||||||
|
order.VendorOrderID = utils.Int64ToStr(utils.Str2Int64(orders[0].VendorOrderID2)*10000) + utils.Int2Str(99)
|
||||||
|
order.VendorOrderID2 = strings.Join(orderIDs, ",")
|
||||||
|
order.Status = model.OrderStatusNew
|
||||||
|
setJdsOrderSeq(order)
|
||||||
|
if order.BusinessType == model.BusinessTypeImmediate {
|
||||||
|
var (
|
||||||
|
opentime1 = jxutils.JxOperationTime2TimeByDate(store.OpenTime1, order.CreatedAt)
|
||||||
|
opentime2 = jxutils.JxOperationTime2TimeByDate(store.OpenTime2, order.CreatedAt)
|
||||||
|
closetime1 = jxutils.JxOperationTime2TimeByDate(store.CloseTime1, order.CreatedAt)
|
||||||
|
closetime2 = jxutils.JxOperationTime2TimeByDate(store.CloseTime2, order.CreatedAt)
|
||||||
|
orderCreatedAt = order.CreatedAt
|
||||||
|
)
|
||||||
|
if store.OpenTime1 == 0 || store.CloseTime1 == 0 {
|
||||||
|
return "", fmt.Errorf("该门店没有营业时间,不能接单!门店:[%v]", storeID)
|
||||||
|
}
|
||||||
|
if !(orderCreatedAt.Sub(opentime1) >= 0 && orderCreatedAt.Sub(closetime1) <= 0) {
|
||||||
|
if store.OpenTime2 != 0 && store.CloseTime2 != 0 {
|
||||||
|
if !(orderCreatedAt.Sub(opentime2) >= 0 && orderCreatedAt.Sub(closetime2) <= 0) {
|
||||||
|
if orderCreatedAt.Sub(opentime1) < 0 {
|
||||||
|
order.ExpectedDeliveredTime = opentime1
|
||||||
|
order.BusinessType = model.BusinessTypeDingshida
|
||||||
|
} else {
|
||||||
|
if orderCreatedAt.Sub(opentime2) < 0 {
|
||||||
|
order.ExpectedDeliveredTime = opentime2
|
||||||
|
} else {
|
||||||
|
order.ExpectedDeliveredTime = opentime1.AddDate(0, 0, 1)
|
||||||
|
}
|
||||||
|
order.BusinessType = model.BusinessTypeDingshida
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if orderCreatedAt.Sub(opentime1) < 0 {
|
||||||
|
order.ExpectedDeliveredTime = opentime1
|
||||||
|
} else {
|
||||||
|
order.ExpectedDeliveredTime = opentime1.AddDate(0, 0, 1)
|
||||||
|
}
|
||||||
|
order.BusinessType = model.BusinessTypeDingshida
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//结算类型
|
||||||
|
if store.PayPercentage < 50 {
|
||||||
|
order.EarningType = model.EarningTypePoints
|
||||||
|
} else {
|
||||||
|
order.EarningType = model.EarningTypeQuote
|
||||||
|
}
|
||||||
|
if storeID != model.JdShopMainStoreID {
|
||||||
|
order.DeliveryFlag = model.NO
|
||||||
|
}
|
||||||
|
//skus
|
||||||
|
for _, sku := range orderSkus {
|
||||||
|
sku.VendorOrderID = order.VendorOrderID
|
||||||
|
sku.ID = 0
|
||||||
|
}
|
||||||
|
order.Skus = orderSkus
|
||||||
|
err = partner.CurOrderManager.OnOrderNew(order, model.Order2Status(order))
|
||||||
|
vendorOrderIDJds = order.VendorOrderID
|
||||||
|
return vendorOrderIDJds, err
|
||||||
|
}
|
||||||
|
|
||||||
func TransferJdsOrder(ctx *jxcontext.Context, vendorOrderID string, storeID int) (vendorOrderIDJds string, err error) {
|
func TransferJdsOrder(ctx *jxcontext.Context, vendorOrderID string, storeID int) (vendorOrderIDJds string, err error) {
|
||||||
globals.SugarLogger.Debugf("jds TransferJdsOrder vendorOrderID: %v, storeID : %v", vendorOrderID, storeID)
|
globals.SugarLogger.Debugf("jds TransferJdsOrder vendorOrderID: %v, storeID : %v", vendorOrderID, storeID)
|
||||||
var (
|
var (
|
||||||
@@ -1354,10 +1507,8 @@ func TransferJdsOrder(ctx *jxcontext.Context, vendorOrderID string, storeID int)
|
|||||||
}
|
}
|
||||||
if waybill != nil {
|
if waybill != nil {
|
||||||
if waybill.WaybillVendorID != model.VendorIDJDWL {
|
if waybill.WaybillVendorID != model.VendorIDJDWL {
|
||||||
handler := partner.DeliveryPlatformHandlers[waybill.WaybillVendorID]
|
if handler := partner.GetDeliveryPlatformFromVendorID(waybill.WaybillVendorID); handler != nil {
|
||||||
err = handler.Handler.CancelWaybill(waybill, 0, "订单转移被取消")
|
err = handler.Handler.CancelWaybill(waybill, 0, "订单转移被取消")
|
||||||
if err != nil {
|
|
||||||
return "", err
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1440,6 +1591,9 @@ func TransferJdsOrder(ctx *jxcontext.Context, vendorOrderID string, storeID int)
|
|||||||
}
|
}
|
||||||
suffix := utils.Str2Int(goodsOrders[0].VendorOrderID[12:len(goodsOrders[0].VendorOrderID)])
|
suffix := utils.Str2Int(goodsOrders[0].VendorOrderID[12:len(goodsOrders[0].VendorOrderID)])
|
||||||
suffix++
|
suffix++
|
||||||
|
if len(order.VendorOrderID2) > 18 {
|
||||||
|
order.VendorOrderID2 = order.VendorOrderID2[0:12]
|
||||||
|
}
|
||||||
order.VendorOrderID = utils.Int64ToStr(utils.Str2Int64(order.VendorOrderID2)*100000) + utils.Int2Str(suffix)
|
order.VendorOrderID = utils.Int64ToStr(utils.Str2Int64(order.VendorOrderID2)*100000) + utils.Int2Str(suffix)
|
||||||
}
|
}
|
||||||
for _, sku := range skus {
|
for _, sku := range skus {
|
||||||
@@ -1553,7 +1707,10 @@ func AdjustJdsOrderSimple(ctx *jxcontext.Context, vendorOrderID string, skuID in
|
|||||||
)
|
)
|
||||||
orderSkus, err := dao.GetSimpleOrderSkus(db, vendorOrderID, []int{skuID})
|
orderSkus, err := dao.GetSimpleOrderSkus(db, vendorOrderID, []int{skuID})
|
||||||
order, err := dao.GetSimpleOrder(db, vendorOrderID)
|
order, err := dao.GetSimpleOrder(db, vendorOrderID)
|
||||||
|
//如果不是商城模板店
|
||||||
|
if jxutils.GetSaleStoreIDFromOrder(order) != model.JdShopMainStoreID {
|
||||||
|
return fmt.Errorf("目前只支持商城模板店的简单售前删除!")
|
||||||
|
}
|
||||||
orderSkus2, err := dao.GetSimpleOrderSkus(db, vendorOrderID, nil)
|
orderSkus2, err := dao.GetSimpleOrderSkus(db, vendorOrderID, nil)
|
||||||
if len(orderSkus2) == 1 {
|
if len(orderSkus2) == 1 {
|
||||||
return fmt.Errorf("这一单只剩这最后一个商品了,不允许删除!")
|
return fmt.Errorf("这一单只剩这最后一个商品了,不允许删除!")
|
||||||
@@ -1571,6 +1728,7 @@ func AdjustJdsOrderSimple(ctx *jxcontext.Context, vendorOrderID string, skuID in
|
|||||||
} else {
|
} else {
|
||||||
_, err = dao.DeleteEntity(db, orderSku)
|
_, err = dao.DeleteEntity(db, orderSku)
|
||||||
}
|
}
|
||||||
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -100,6 +100,7 @@ func (c *OrderManager) onAfsOrderNew(afsOrder *model.AfsOrder, orderStatus *mode
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
dao.Commit(db)
|
dao.Commit(db)
|
||||||
scheduler.CurrentScheduler.OnAfsOrderNew(afsOrder, false)
|
scheduler.CurrentScheduler.OnAfsOrderNew(afsOrder, false)
|
||||||
return err
|
return err
|
||||||
@@ -261,7 +262,13 @@ func (c *OrderManager) updateAfsOrderSkuOtherInfo(db *dao.DaoDB, order *model.Af
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if len(vendorSkuIDs) > 0 {
|
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 {
|
if err != nil {
|
||||||
globals.SugarLogger.Warnf("updateAfsOrderSkuOtherInfo orderID:%s failed with err:%v", order.VendorOrderID, err)
|
globals.SugarLogger.Warnf("updateAfsOrderSkuOtherInfo orderID:%s failed with err:%v", order.VendorOrderID, err)
|
||||||
return err
|
return err
|
||||||
|
|||||||
@@ -64,11 +64,11 @@ type OrderCount struct {
|
|||||||
Flag bool `json:"flag"` //true表示可以买
|
Flag bool `json:"flag"` //true表示可以买
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *OrderManager) GetStoreOrderCountInfo(ctx *jxcontext.Context, storeID, lastHours int, isIncludeFake bool) (countInfo []*model.GoodsOrderCountInfo, err error) {
|
func (c *OrderManager) GetStoreOrderCountInfo(ctx *jxcontext.Context, storeID, lastHours, lastMinutes int, isIncludeFake bool) (countInfo []*model.GoodsOrderCountInfo, err error) {
|
||||||
globals.SugarLogger.Debugf("GetStoreOrderCountInfo storeID:%d", storeID)
|
globals.SugarLogger.Debugf("GetStoreOrderCountInfo storeID:%d", storeID)
|
||||||
if lastHours > maxLastHours {
|
if lastHours > maxLastHours {
|
||||||
lastHours = maxLastHours
|
lastHours = maxLastHours
|
||||||
} else if lastHours == 0 {
|
} else if lastHours == 0 && lastMinutes == 0 {
|
||||||
lastHours = defLastHours
|
lastHours = defLastHours
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -80,7 +80,12 @@ func (c *OrderManager) GetStoreOrderCountInfo(ctx *jxcontext.Context, storeID, l
|
|||||||
AND t1.order_created_at >= ?`
|
AND t1.order_created_at >= ?`
|
||||||
sqlParams := []interface{}{
|
sqlParams := []interface{}{
|
||||||
storeID,
|
storeID,
|
||||||
time.Now().Add(-time.Duration(lastHours) * time.Hour),
|
// time.Now().Add(-time.Duration(lastHours) * time.Hour),
|
||||||
|
}
|
||||||
|
if lastMinutes != 0 {
|
||||||
|
sqlParams = append(sqlParams, time.Now().Add(-time.Duration(lastMinutes)*time.Minute))
|
||||||
|
} else {
|
||||||
|
sqlParams = append(sqlParams, time.Now().Add(-time.Duration(lastHours)*time.Hour))
|
||||||
}
|
}
|
||||||
if !isIncludeFake {
|
if !isIncludeFake {
|
||||||
sql += " AND (t1.flag & ?) = 0"
|
sql += " AND (t1.flag & ?) = 0"
|
||||||
|
|||||||
@@ -5,6 +5,8 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"git.rosy.net.cn/baseapi/platformapi/jdshopapi"
|
||||||
|
|
||||||
"git.rosy.net.cn/baseapi/platformapi/dingdingapi"
|
"git.rosy.net.cn/baseapi/platformapi/dingdingapi"
|
||||||
"git.rosy.net.cn/baseapi/utils"
|
"git.rosy.net.cn/baseapi/utils"
|
||||||
"git.rosy.net.cn/baseapi/utils/errlist"
|
"git.rosy.net.cn/baseapi/utils/errlist"
|
||||||
@@ -213,6 +215,37 @@ func (c *BaseScheduler) AgreeOrRefuseRefund(ctx *jxcontext.Context, afsOrderID s
|
|||||||
flag = model.AfsOrderFlagRefuseUserRefund
|
flag = model.AfsOrderFlagRefuseUserRefund
|
||||||
afsOrder.RefuseReason = reason
|
afsOrder.RefuseReason = reason
|
||||||
partner.CurOrderManager.UpdateAfsOrderFields(afsOrder, []string{"RefuseReason"})
|
partner.CurOrderManager.UpdateAfsOrderFields(afsOrder, []string{"RefuseReason"})
|
||||||
|
} else {
|
||||||
|
if order, _ := partner.CurOrderManager.LoadOrder(afsOrder.VendorOrderID, afsOrder.VendorID); order != nil {
|
||||||
|
if order.EarningType == model.EarningTypePoints {
|
||||||
|
var (
|
||||||
|
skuMap = make(map[int]*model.OrderSku)
|
||||||
|
diff int64
|
||||||
|
db = dao.GetDB()
|
||||||
|
)
|
||||||
|
for _, sku := range order.Skus {
|
||||||
|
skuMap[sku.SkuID] = sku
|
||||||
|
}
|
||||||
|
storeDetail, _ := dao.GetStoreDetail(db, jxutils.GetSaleStoreIDFromOrder(order), order.VendorID)
|
||||||
|
waybills, _ := dao.GetWaybills(db, order.VendorOrderID)
|
||||||
|
//京东商城和京西要重新算totalshopmoney等
|
||||||
|
if order.VendorID == model.VendorIDJDShop || order.VendorID == model.VendorIDJX {
|
||||||
|
skus, _ := dao.GetAfsOrderSkuInfo(db, order.VendorOrderID, afsOrderID, order.VendorID, false)
|
||||||
|
for _, v := range skus {
|
||||||
|
if skuMap[v.SkuID] != nil {
|
||||||
|
diff += skuMap[v.SkuID].SalePrice * int64(v.Count)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
order.TotalShopMoney = utils.Float64TwoInt64(float64(float64(order.TotalShopMoney)/jdshopapi.JdsPayPercentage-float64(diff)) * jdshopapi.JdsPayPercentage)
|
||||||
|
if len(waybills) > 0 {
|
||||||
|
jxutils.RefreshOrderEarningPrice3(order, storeDetail.PayPercentage, waybills[0])
|
||||||
|
} else {
|
||||||
|
jxutils.RefreshOrderEarningPrice2(order, storeDetail.PayPercentage)
|
||||||
|
}
|
||||||
|
dao.UpdateEntity(db, order, "TotalShopMoney", "NewEarningPrice")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
dao.SetAfsOrderFlag(dao.GetDB(), ctx.GetUserName(), afsOrderID, vendorID, flag)
|
dao.SetAfsOrderFlag(dao.GetDB(), ctx.GetUserName(), afsOrderID, vendorID, flag)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -422,7 +422,7 @@ func (s *DefScheduler) OnOrderStatusChanged(order *model.GoodsOrder, status *mod
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
s.cancelOtherWaybillsCheckOrderDeliveryFlag(savedOrderInfo, curWaybill, partner.CancelWaybillReasonOther, partner.CancelWaybillReasonStrOrderAlreadyFinished)
|
s.cancelOtherWaybills(savedOrderInfo, curWaybill, partner.CancelWaybillReasonOther, partner.CancelWaybillReasonStrOrderAlreadyFinished)
|
||||||
if status.Status >= model.OrderStatusEndBegin {
|
if status.Status >= model.OrderStatusEndBegin {
|
||||||
s.orderMap.Delete(jxutils.GetUniversalOrderIDFromOrderStatus(status))
|
s.orderMap.Delete(jxutils.GetUniversalOrderIDFromOrderStatus(status))
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3455,3 +3455,82 @@ func UpdateStorePricePack(ctx *jxcontext.Context, storeID, vendorID int, pricePa
|
|||||||
}
|
}
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func GetJdDeliveryArea(ctx *jxcontext.Context, storeIDs []int) (err error) {
|
||||||
|
type tmp struct {
|
||||||
|
JdID string `json:"jdID"`
|
||||||
|
S int `json:"s"`
|
||||||
|
}
|
||||||
|
type SpecialtyStoreSkus struct {
|
||||||
|
StoreID int `json:"门店ID"`
|
||||||
|
StoreName string `json:"门店名"`
|
||||||
|
City string `json:"城市"`
|
||||||
|
Area int `json:"面积"`
|
||||||
|
}
|
||||||
|
var (
|
||||||
|
ss []*tmp
|
||||||
|
excelTitle = []string{
|
||||||
|
"门店ID",
|
||||||
|
"门店名",
|
||||||
|
"城市",
|
||||||
|
"面积",
|
||||||
|
}
|
||||||
|
sheetList []*excel.Obj2ExcelSheetConfig
|
||||||
|
specialtyStoreSkus []*SpecialtyStoreSkus
|
||||||
|
downloadURL, fileName string
|
||||||
|
)
|
||||||
|
storeMaps, _ := dao.GetStoresMapList(dao.GetDB(), []int{model.VendorIDJD}, storeIDs, nil, model.StoreStatusAll, model.StoreIsSyncAll, "", "")
|
||||||
|
for _, v := range storeMaps {
|
||||||
|
time.Sleep(time.Second / 3)
|
||||||
|
station, err := jd.GetAPI("320406").GetDeliveryRangeByStationNo2(v.VendorStoreID)
|
||||||
|
if err != nil {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
if station.DeliveryRangeType == 2 {
|
||||||
|
strs := strings.Split(station.DeliveryRange, ";")
|
||||||
|
ss = append(ss, &tmp{
|
||||||
|
JdID: v.VendorStoreID,
|
||||||
|
S: utils.Float64TwoInt(math.Ceil((jxutils.ComputeSignedArea(strs[:len(strs)-1])))),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for i := 0; i < len(ss)-1; i++ {
|
||||||
|
for j := 0; j < len(ss)-1-i; j++ {
|
||||||
|
if ss[j].S > ss[j+1].S {
|
||||||
|
temp := ss[j]
|
||||||
|
ss[j] = ss[j+1]
|
||||||
|
ss[j+1] = temp
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for _, v := range ss {
|
||||||
|
storeDetail, _ := dao.GetStoreDetailByVendorStoreID(dao.GetDB(), v.JdID, model.VendorIDJD)
|
||||||
|
place, _ := dao.GetPlaceByCode(dao.GetDB(), storeDetail.CityCode)
|
||||||
|
specialtyStoreSku := &SpecialtyStoreSkus{
|
||||||
|
StoreID: storeDetail.ID,
|
||||||
|
StoreName: storeDetail.Name,
|
||||||
|
City: place.Name,
|
||||||
|
Area: v.S,
|
||||||
|
}
|
||||||
|
specialtyStoreSkus = append(specialtyStoreSkus, specialtyStoreSku)
|
||||||
|
}
|
||||||
|
excelConf := &excel.Obj2ExcelSheetConfig{
|
||||||
|
Title: "sheet1",
|
||||||
|
Data: specialtyStoreSkus,
|
||||||
|
CaptionList: excelTitle,
|
||||||
|
}
|
||||||
|
sheetList = append(sheetList, excelConf)
|
||||||
|
if excelConf != nil {
|
||||||
|
downloadURL, fileName, err = jxutils.UploadExeclAndPushMsg(sheetList, "面积")
|
||||||
|
} else {
|
||||||
|
baseapi.SugarLogger.Debug("WriteToExcel: dataSuccess is nil!")
|
||||||
|
}
|
||||||
|
if err != nil {
|
||||||
|
baseapi.SugarLogger.Errorf("WriteToExcel:upload %s , %s failed error:%v", fileName, err)
|
||||||
|
} else {
|
||||||
|
noticeMsg := fmt.Sprintf("[详情点我]%s/billshow/?normal=true&path=%s \n", globals.BackstageHost, downloadURL)
|
||||||
|
ddmsg.SendUserMessage(dingdingapi.MsgTyeText, ctx.GetUserID(), "异步任务完成", noticeMsg)
|
||||||
|
baseapi.SugarLogger.Debug("WriteToExcel: dataSuccess downloadURL: [%v]", downloadURL)
|
||||||
|
}
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|||||||
@@ -4721,6 +4721,7 @@ func StoreSkuPriceAudit(ctx *jxcontext.Context, storeSkuAudits []*model.StoreSku
|
|||||||
}
|
}
|
||||||
return storeSkuAudits2, "", err
|
return storeSkuAudits2, "", err
|
||||||
}
|
}
|
||||||
|
deletedDuplicateWaitAuditData(ctx, db)
|
||||||
task := tasksch.NewParallelTask("StoreSkuPriceAudit", tasksch.NewParallelConfig().SetParallelCount(5).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) {
|
func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
|
||||||
storeAudit := batchItemList[0].(*model.StoreSkuAudit)
|
storeAudit := batchItemList[0].(*model.StoreSkuAudit)
|
||||||
@@ -4801,6 +4802,45 @@ func StoreSkuPriceAudit(ctx *jxcontext.Context, storeSkuAudits []*model.StoreSku
|
|||||||
return nil, hint, err
|
return nil, hint, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func deletedDuplicateWaitAuditData(ctx *jxcontext.Context, db *dao.DaoDB) {
|
||||||
|
var (
|
||||||
|
duplicateDatas []*model.StoreSkuAudit
|
||||||
|
duplicateStore = make(map[int][]*model.StoreSkuAudit)
|
||||||
|
)
|
||||||
|
sql := `
|
||||||
|
SELECT a.*
|
||||||
|
FROM store_sku_audit a ,
|
||||||
|
(
|
||||||
|
SELECT count(*), store_id ,name_id ,status, deleted_at
|
||||||
|
FROM store_sku_audit
|
||||||
|
WHERE status = 0
|
||||||
|
AND deleted_at = ?
|
||||||
|
GROUP BY 2,3,4,5
|
||||||
|
HAVING count(*) > 1
|
||||||
|
) b
|
||||||
|
WHERE a.store_id = b.store_id
|
||||||
|
AND a.name_id = b.name_id
|
||||||
|
AND a.status= b.status
|
||||||
|
AND a.deleted_at = b.deleted_at
|
||||||
|
`
|
||||||
|
sqlParams := []interface{}{utils.DefaultTimeValue}
|
||||||
|
dao.GetRows(db, &duplicateDatas, sql, sqlParams)
|
||||||
|
for _, v := range duplicateDatas {
|
||||||
|
duplicateStore[v.StoreID] = append(duplicateStore[v.StoreID], v)
|
||||||
|
}
|
||||||
|
for _, v := range duplicateStore {
|
||||||
|
duplicateSkuName := make(map[int][]*model.StoreSkuAudit)
|
||||||
|
for _, vv := range v {
|
||||||
|
duplicateSkuName[vv.NameID] = append(duplicateSkuName[vv.NameID], vv)
|
||||||
|
}
|
||||||
|
for _, vv := range duplicateSkuName {
|
||||||
|
for i := 0; i < len(vv)-1; i++ {
|
||||||
|
dao.DeleteEntity(db, vv[i])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func GetSpecialtyStoreSkus(ctx *jxcontext.Context, storeIDs, vendorIDs []int) (err error) {
|
func GetSpecialtyStoreSkus(ctx *jxcontext.Context, storeIDs, vendorIDs []int) (err error) {
|
||||||
type SpecialtyStoreSkus struct {
|
type SpecialtyStoreSkus struct {
|
||||||
StoreID int `json:"门店ID"`
|
StoreID int `json:"门店ID"`
|
||||||
|
|||||||
@@ -1098,7 +1098,7 @@ func (v *VendorSync) SyncJdsStoresSkus(ctx *jxcontext.Context, storeIDs []int, i
|
|||||||
var (
|
var (
|
||||||
db = dao.GetDB()
|
db = dao.GetDB()
|
||||||
)
|
)
|
||||||
storeSkus, _ := dao.GetStoresSkusInfo(db, []int{model.JdShopMainStoreID}, nil)
|
// 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,
|
_, 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) {
|
func(t *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (interface{}, error) {
|
||||||
loopMapInfo := batchItemList[0].(*LoopStoreMapInfo)
|
loopMapInfo := batchItemList[0].(*LoopStoreMapInfo)
|
||||||
@@ -1107,7 +1107,7 @@ func (v *VendorSync) SyncJdsStoresSkus(ctx *jxcontext.Context, storeIDs []int, i
|
|||||||
if storeMap.Status > model.StoreStatusDisabled && storeMap.StoreID != model.JdShopMainStoreID && storeMap.SyncRule != 0 {
|
if storeMap.Status > model.StoreStatusDisabled && storeMap.StoreID != model.JdShopMainStoreID && storeMap.SyncRule != 0 {
|
||||||
err = syncJdsStoresSkus(ctx, db, t, storeMap, isAsync, isContinueWhenError)
|
err = syncJdsStoresSkus(ctx, db, t, storeMap, isAsync, isContinueWhenError)
|
||||||
}
|
}
|
||||||
err = syncJdsStoreStock(ctx, db, t, storeSkus, storeMap, isAsync, isContinueWhenError)
|
// err = syncJdsStoreStock(ctx, db, t, storeSkus, storeMap, isAsync, isContinueWhenError)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return nil, partner.AddVendorInfo2Err(err, loopMapInfo.VendorID)
|
return nil, partner.AddVendorInfo2Err(err, loopMapInfo.VendorID)
|
||||||
@@ -1116,15 +1116,6 @@ func (v *VendorSync) SyncJdsStoresSkus(ctx *jxcontext.Context, storeIDs []int, i
|
|||||||
}
|
}
|
||||||
|
|
||||||
func syncJdsStoreStock(ctx *jxcontext.Context, db *dao.DaoDB, parentTask tasksch.ITask, storeSkus []*model.StoreSkuBind, storeMap *model.StoreMap, isAsync, isContinueWhenError bool) (err error) {
|
func syncJdsStoreStock(ctx *jxcontext.Context, db *dao.DaoDB, parentTask tasksch.ITask, storeSkus []*model.StoreSkuBind, storeMap *model.StoreMap, isAsync, isContinueWhenError bool) (err error) {
|
||||||
// storeMaps, err := dao.GetStoresMapList(db, []int{model.VendorIDJDShop}, nil, nil, model.StoreStatusAll, model.StoreIsSyncAll, "", "")
|
|
||||||
// if err != nil {
|
|
||||||
// return err
|
|
||||||
// }
|
|
||||||
// storeSkus, err := dao.GetStoresSkusInfo(db, []int{model.JdShopMainStoreID}, nil)
|
|
||||||
// if err != nil {
|
|
||||||
// return err
|
|
||||||
// }
|
|
||||||
// for _, storeMap := range storeMaps {
|
|
||||||
task := tasksch.NewParallelTask("syncJdsStoreStock", tasksch.NewParallelConfig().SetIsContinueWhenError(isContinueWhenError), ctx,
|
task := tasksch.NewParallelTask("syncJdsStoreStock", tasksch.NewParallelConfig().SetIsContinueWhenError(isContinueWhenError), ctx,
|
||||||
func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
|
func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
|
||||||
storeSku := batchItemList[0].(*model.StoreSkuBind)
|
storeSku := batchItemList[0].(*model.StoreSkuBind)
|
||||||
@@ -1146,7 +1137,53 @@ func syncJdsStoreStock(ctx *jxcontext.Context, db *dao.DaoDB, parentTask tasksch
|
|||||||
}, storeSkus)
|
}, storeSkus)
|
||||||
tasksch.HandleTask(task, parentTask, true).Run()
|
tasksch.HandleTask(task, parentTask, true).Run()
|
||||||
_, err = task.GetResult(0)
|
_, err = task.GetResult(0)
|
||||||
// }
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
func SyncJdsStoreStock(ctx *jxcontext.Context, isAsync, isContinueWhenError bool) (err error) {
|
||||||
|
var (
|
||||||
|
db = dao.GetDB()
|
||||||
|
storeMaps []*model.StoreMap
|
||||||
|
)
|
||||||
|
sql := `
|
||||||
|
SELECT * FROM store_map WHERE vendor_id = ? AND vendor_store_id <> '' AND store_id <> ?
|
||||||
|
`
|
||||||
|
sqlParams := []interface{}{
|
||||||
|
model.VendorIDJDShop, model.JdShopMainStoreID,
|
||||||
|
}
|
||||||
|
err = dao.GetRows(db, &storeMaps, sql, sqlParams)
|
||||||
|
storeSkus, err := dao.GetStoresSkusInfo(db, []int{model.JdShopMainStoreID}, nil)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
task1 := tasksch.NewParallelTask("syncJdsStoreStock1", tasksch.NewParallelConfig().SetIsContinueWhenError(isContinueWhenError), ctx,
|
||||||
|
func(task1 *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
|
||||||
|
storeMap := batchItemList[0].(*model.StoreMap)
|
||||||
|
task2 := tasksch.NewParallelTask("syncJdsStoreStock2", tasksch.NewParallelConfig().SetIsContinueWhenError(isContinueWhenError), ctx,
|
||||||
|
func(task2 *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
|
||||||
|
storeSku := batchItemList[0].(*model.StoreSkuBind)
|
||||||
|
stock := 0
|
||||||
|
storeSku2, _ := dao.GetStoresSkusInfo(db, []int{storeMap.StoreID}, []int{storeSku.SkuID})
|
||||||
|
if storeSku.JdsID != 0 {
|
||||||
|
if len(storeSku2) > 0 {
|
||||||
|
if storeSku2[0].Status == model.StoreSkuBindStatusNormal && storeSku.Status == model.StoreSkuBindStatusNormal {
|
||||||
|
stock = 9999
|
||||||
|
}
|
||||||
|
if storeMap.VendorStoreID != "" {
|
||||||
|
err = api.JdShopAPI.UpdateSkuSiteStock(storeSku.JdsID, stock, utils.Str2Int(storeMap.VendorStoreID))
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
err = api.JdShopAPI.UpdateSkuSiteStock(storeSku.JdsID, 0, utils.Str2Int(storeMap.VendorStoreID))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return retVal, err
|
||||||
|
}, storeSkus)
|
||||||
|
tasksch.HandleTask(task2, task1, true).Run()
|
||||||
|
_, err = task2.GetResult(0)
|
||||||
|
return retVal, err
|
||||||
|
}, storeMaps)
|
||||||
|
tasksch.HandleTask(task1, nil, true).Run()
|
||||||
|
_, err = task1.GetResult(0)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -414,7 +414,7 @@ func doDailyWork2() {
|
|||||||
//同步京东商城门店的商品
|
//同步京东商城门店的商品
|
||||||
cms.CurVendorSync.SyncJdsStoresSkus(jxcontext.AdminCtx, nil, true, true)
|
cms.CurVendorSync.SyncJdsStoresSkus(jxcontext.AdminCtx, nil, true, true)
|
||||||
//刷新京东商城的门店库存
|
//刷新京东商城的门店库存
|
||||||
// cms.SyncJdsStoreStock(jxcontext.AdminCtx, dao.GetDB(), nil, true, true)
|
cms.SyncJdsStoreStock(jxcontext.AdminCtx, true, true)
|
||||||
}
|
}
|
||||||
|
|
||||||
func doDailyWork() {
|
func doDailyWork() {
|
||||||
@@ -449,7 +449,7 @@ func doDailyWork() {
|
|||||||
//同步银豹到京西
|
//同步银豹到京西
|
||||||
// cms.CurVendorSync.SyncStoreSkusFromYb(jxcontext.AdminCtx, nil, true, true)
|
// cms.CurVendorSync.SyncStoreSkusFromYb(jxcontext.AdminCtx, nil, true, true)
|
||||||
//刷新京东商城订单结算价
|
//刷新京东商城订单结算价
|
||||||
orderman.RefreshJdShopOrdersEarningPrice(jxcontext.AdminCtx, time.Now().AddDate(0, 0, -3).Format("20060102"), time.Now().Format("20060102"))
|
orderman.RefreshJdShopOrdersEarningPrice(jxcontext.AdminCtx, time.Now().AddDate(0, 0, -2).Format("20060102"), time.Now().Format("20060102"))
|
||||||
//同步上架京东商城待售商品
|
//同步上架京东商城待售商品
|
||||||
cms.RefreshJdsSkusStatus(jxcontext.AdminCtx)
|
cms.RefreshJdsSkusStatus(jxcontext.AdminCtx)
|
||||||
//同步美团配送与否状态及美团门店是否存在
|
//同步美团配送与否状态及美团门店是否存在
|
||||||
|
|||||||
@@ -1583,14 +1583,9 @@ func UploadJdsImage(ctx *jxcontext.Context) (err error) {
|
|||||||
// fmt.Println("addList2", addList)
|
// fmt.Println("addList2", addList)
|
||||||
// fmt.Println("updateList2", utils.Format4Output(updateList, false))
|
// fmt.Println("updateList2", utils.Format4Output(updateList, false))
|
||||||
// fmt.Println("deleteList2", deleteList)
|
// fmt.Println("deleteList2", deleteList)
|
||||||
var skuNames []model.SkuName
|
// cms.DeletedDuplicateWaitAuditData(ctx, dao.GetDB())
|
||||||
sql := `
|
// orderman.RefreshJdShopOrdersEarningPrice(jxcontext.AdminCtx, time.Now().AddDate(0, 0, -2).Format("20060102"), time.Now().Format("20060102"))
|
||||||
SELECT * FROM sku_name WHERE img = 'https://image.jxc4.com/noGoodsImg.jpg' AND deleted_at = '1970-01-01 00:00:00'
|
|
||||||
`
|
|
||||||
dao.GetRows(dao.GetDB(), &skuNames, sql, nil)
|
|
||||||
for _, v := range skuNames {
|
|
||||||
cms.DeleteSkuName(ctx, v.ID, ctx.GetUserName())
|
|
||||||
}
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -974,3 +974,33 @@ func GetDefendPriceIssue() (issue int) {
|
|||||||
func GetLastDefendPriceIssue() (issue int) {
|
func GetLastDefendPriceIssue() (issue int) {
|
||||||
return utils.Str2Int(time.Now().AddDate(0, 0, 1).Format("20060102"))
|
return utils.Str2Int(time.Now().AddDate(0, 0, 1).Format("20060102"))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//根据一堆坐标求面积
|
||||||
|
//有待考证,不过暂时拿来用
|
||||||
|
func ComputeSignedArea(path []string) (s float64) {
|
||||||
|
var (
|
||||||
|
radius = 6371009
|
||||||
|
len = len(path)
|
||||||
|
total float64
|
||||||
|
prev = path[len-1]
|
||||||
|
)
|
||||||
|
if len < 3 {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
prevTanLat := math.Tan(((math.Pi/2 - utils.Str2Float64(strings.Split(prev, ",")[1])/180*math.Pi) / 2))
|
||||||
|
prevLng := utils.Str2Float64(strings.Split(prev, ",")[0]) / 180 * math.Pi
|
||||||
|
for i := 0; i < len; i++ {
|
||||||
|
tanLat := math.Tan(((math.Pi/2 - utils.Str2Float64(strings.Split(path[i], ",")[1])/180*math.Pi) / 2))
|
||||||
|
lng := utils.Str2Float64(strings.Split(path[i], ",")[0]) / 180 * math.Pi
|
||||||
|
total += polarTriangleArea(tanLat, lng, prevTanLat, prevLng)
|
||||||
|
prevTanLat = tanLat
|
||||||
|
prevLng = lng
|
||||||
|
}
|
||||||
|
return math.Abs(total * (float64(radius) * float64(radius)))
|
||||||
|
}
|
||||||
|
|
||||||
|
func polarTriangleArea(tan1, lng1, tan2, lng2 float64) (s float64) {
|
||||||
|
deltaLng := lng1 - lng2
|
||||||
|
t := tan1 * tan2
|
||||||
|
return 2 * math.Atan2(t*math.Sin(deltaLng), 1+t*math.Cos(deltaLng))
|
||||||
|
}
|
||||||
|
|||||||
@@ -58,7 +58,7 @@ type ModelTimeInfo struct {
|
|||||||
type GoodsOrder struct {
|
type GoodsOrder struct {
|
||||||
ID int64 `orm:"column(id)" json:"id"`
|
ID int64 `orm:"column(id)" json:"id"`
|
||||||
VendorOrderID string `orm:"column(vendor_order_id);size(48)" json:"vendorOrderID"`
|
VendorOrderID string `orm:"column(vendor_order_id);size(48)" json:"vendorOrderID"`
|
||||||
VendorOrderID2 string `orm:"column(vendor_order_id2);size(48);index" json:"vendorOrderID2"`
|
VendorOrderID2 string `orm:"column(vendor_order_id2);size(200);index" json:"vendorOrderID2"`
|
||||||
VendorID int `orm:"column(vendor_id)" json:"vendorID"`
|
VendorID int `orm:"column(vendor_id)" json:"vendorID"`
|
||||||
VendorStoreID string `orm:"column(vendor_store_id);size(48)" json:"vendorStoreID"`
|
VendorStoreID string `orm:"column(vendor_store_id);size(48)" json:"vendorStoreID"`
|
||||||
StoreID int `orm:"column(store_id)" json:"storeID"` // 外部系统里记录的 jxstoreid
|
StoreID int `orm:"column(store_id)" json:"storeID"` // 外部系统里记录的 jxstoreid
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import (
|
|||||||
|
|
||||||
"git.rosy.net.cn/baseapi/platformapi/ebaiapi"
|
"git.rosy.net.cn/baseapi/platformapi/ebaiapi"
|
||||||
"git.rosy.net.cn/baseapi/utils"
|
"git.rosy.net.cn/baseapi/utils"
|
||||||
|
"git.rosy.net.cn/jx-callback/business/jxcallback/scheduler"
|
||||||
"git.rosy.net.cn/jx-callback/business/model"
|
"git.rosy.net.cn/jx-callback/business/model"
|
||||||
"git.rosy.net.cn/jx-callback/business/partner"
|
"git.rosy.net.cn/jx-callback/business/partner"
|
||||||
"git.rosy.net.cn/jx-callback/globals"
|
"git.rosy.net.cn/jx-callback/globals"
|
||||||
@@ -50,6 +51,13 @@ func (c *PurchaseHandler) onWaybillMsg(msg *ebaiapi.CallbackMsg) (retVal *ebaiap
|
|||||||
order.CourierName = utils.Interface2String(result["name"])
|
order.CourierName = utils.Interface2String(result["name"])
|
||||||
order.CourierMobile = utils.Interface2String(result["phone"])
|
order.CourierMobile = utils.Interface2String(result["phone"])
|
||||||
}
|
}
|
||||||
|
if order.Status == model.WaybillStatusNew {
|
||||||
|
order2, _ := partner.CurOrderManager.LoadOrder(order.VendorOrderID, order.WaybillVendorID)
|
||||||
|
if order2.Status == model.OrderStatusWaitAccepted {
|
||||||
|
order2.Status = model.OrderStatusNew
|
||||||
|
scheduler.CurrentScheduler.OnOrderNew(order2, false)
|
||||||
|
}
|
||||||
|
}
|
||||||
} else if order.Status == model.WaybillStatusCanceled {
|
} else if order.Status == model.WaybillStatusCanceled {
|
||||||
utils.AfterFuncWithRecover(timeout4WaybillCancel, func() {
|
utils.AfterFuncWithRecover(timeout4WaybillCancel, func() {
|
||||||
if localOrder, err2 := partner.CurOrderManager.LoadOrder(order.VendorOrderID, model.VendorIDEBAI); err2 == nil {
|
if localOrder, err2 := partner.CurOrderManager.LoadOrder(order.VendorOrderID, model.VendorIDEBAI); err2 == nil {
|
||||||
|
|||||||
@@ -117,8 +117,6 @@ func result2Orders(msg *jdshopapi.CallBackResult) (order *model.GoodsOrder, err
|
|||||||
order.BusinessType = model.BusinessTypeDingshida
|
order.BusinessType = model.BusinessTypeDingshida
|
||||||
// order.ExpectedDeliveredTime = utils.Str2Time(orderDetail.ExpectedDeliveredTime)
|
// order.ExpectedDeliveredTime = utils.Str2Time(orderDetail.ExpectedDeliveredTime)
|
||||||
order.PickDeadline = order.ExpectedDeliveredTime.Add(-time.Hour)
|
order.PickDeadline = order.ExpectedDeliveredTime.Add(-time.Hour)
|
||||||
globals.SugarLogger.Warnf("来暂停的订单了!%v", msg.OrderID)
|
|
||||||
return nil, err
|
|
||||||
} else if msg.OrderState == jdshopapi.OrderStatusWait {
|
} else if msg.OrderState == jdshopapi.OrderStatusWait {
|
||||||
order.ExpectedDeliveredTime = order.OrderCreatedAt.Add(time.Hour)
|
order.ExpectedDeliveredTime = order.OrderCreatedAt.Add(time.Hour)
|
||||||
order.BusinessType = model.BusinessTypeImmediate
|
order.BusinessType = model.BusinessTypeImmediate
|
||||||
|
|||||||
@@ -6,6 +6,8 @@ import (
|
|||||||
"math"
|
"math"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"git.rosy.net.cn/jx-callback/business/model/dao"
|
||||||
|
|
||||||
"git.rosy.net.cn/baseapi/utils"
|
"git.rosy.net.cn/baseapi/utils"
|
||||||
"git.rosy.net.cn/jx-callback/business/jxutils/jxcontext"
|
"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"
|
||||||
@@ -13,19 +15,20 @@ import (
|
|||||||
"git.rosy.net.cn/jx-callback/globals"
|
"git.rosy.net.cn/jx-callback/globals"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (c *PurchaseHandler) AgreeOrRefuseRefund(ctx *jxcontext.Context, order *model.AfsOrder, approveType int, reason string) (err error) {
|
func (c *PurchaseHandler) AgreeOrRefuseRefund(ctx *jxcontext.Context, afsOrder *model.AfsOrder, approveType int, reason string) (err error) {
|
||||||
var status int
|
var status int
|
||||||
if approveType == partner.AfsApproveTypeRefused {
|
if approveType == partner.AfsApproveTypeRefused {
|
||||||
status = model.AfsOrderStatusFailed
|
status = model.AfsOrderStatusFailed
|
||||||
} else {
|
} else {
|
||||||
status = model.AfsOrderStatusFinished
|
status = model.AfsOrderStatusFinished
|
||||||
|
|
||||||
}
|
}
|
||||||
orderStatus := &model.OrderStatus{
|
orderStatus := &model.OrderStatus{
|
||||||
VendorOrderID: order.AfsOrderID, // 是售后单ID,不是订单ID,订单ID在RefVendorOrderID中
|
VendorOrderID: afsOrder.AfsOrderID, // 是售后单ID,不是订单ID,订单ID在RefVendorOrderID中
|
||||||
VendorID: order.VendorID,
|
VendorID: afsOrder.VendorID,
|
||||||
OrderType: model.OrderTypeAfsOrder,
|
OrderType: model.OrderTypeAfsOrder,
|
||||||
RefVendorOrderID: order.VendorOrderID,
|
RefVendorOrderID: afsOrder.VendorOrderID,
|
||||||
RefVendorID: order.VendorID,
|
RefVendorID: afsOrder.VendorID,
|
||||||
VendorStatus: utils.Int2Str(status),
|
VendorStatus: utils.Int2Str(status),
|
||||||
Status: status,
|
Status: status,
|
||||||
StatusTime: time.Now(),
|
StatusTime: time.Now(),
|
||||||
@@ -53,6 +56,7 @@ func (c *PurchaseHandler) PartRefundOrder(ctx *jxcontext.Context, order *model.G
|
|||||||
var (
|
var (
|
||||||
skuMap = make(map[int]*model.OrderSku)
|
skuMap = make(map[int]*model.OrderSku)
|
||||||
salePrice int64
|
salePrice int64
|
||||||
|
db = dao.GetDB()
|
||||||
)
|
)
|
||||||
for _, sku := range order.Skus {
|
for _, sku := range order.Skus {
|
||||||
skuMap[sku.SkuID] = sku
|
skuMap[sku.SkuID] = sku
|
||||||
@@ -62,8 +66,8 @@ func (c *PurchaseHandler) PartRefundOrder(ctx *jxcontext.Context, order *model.G
|
|||||||
VendorID: order.VendorID,
|
VendorID: order.VendorID,
|
||||||
AfsOrderID: orderStatus.VendorOrderID,
|
AfsOrderID: orderStatus.VendorOrderID,
|
||||||
VendorOrderID: orderStatus.RefVendorOrderID,
|
VendorOrderID: orderStatus.RefVendorOrderID,
|
||||||
VendorStoreID: order.VendorStoreID,
|
// VendorStoreID: order.VendorStoreID,
|
||||||
StoreID: order.StoreID,
|
// StoreID: jxutils.GetSaleStoreIDFromOrder(order),
|
||||||
AfsCreatedAt: time.Now(),
|
AfsCreatedAt: time.Now(),
|
||||||
VendorAppealType: "",
|
VendorAppealType: "",
|
||||||
AppealType: model.AfsAppealTypeRefund,
|
AppealType: model.AfsAppealTypeRefund,
|
||||||
@@ -81,6 +85,10 @@ func (c *PurchaseHandler) PartRefundOrder(ctx *jxcontext.Context, order *model.G
|
|||||||
VendorSkuID: utils.Int2Str(sku.SkuID),
|
VendorSkuID: utils.Int2Str(sku.SkuID),
|
||||||
SkuID: sku.SkuID,
|
SkuID: sku.SkuID,
|
||||||
}
|
}
|
||||||
|
storeSkus, _ := dao.GetStoresSkusInfo(db, []int{model.JdShopMainStoreID}, []int{sku.SkuID})
|
||||||
|
if len(storeSkus) > 0 {
|
||||||
|
orderSku.VendorSkuID = utils.Int64ToStr(storeSkus[0].JdsID)
|
||||||
|
}
|
||||||
if skuMap[sku.SkuID] != nil {
|
if skuMap[sku.SkuID] != nil {
|
||||||
orderSku.Name = skuMap[sku.SkuID].SkuName
|
orderSku.Name = skuMap[sku.SkuID].SkuName
|
||||||
orderSku.UserMoney = skuMap[sku.SkuID].SalePrice * int64(sku.Count)
|
orderSku.UserMoney = skuMap[sku.SkuID].SalePrice * int64(sku.Count)
|
||||||
|
|||||||
@@ -118,6 +118,7 @@ type JxOrderInfo struct {
|
|||||||
IsBuyNowPrice int `json:"isBuyNowPrice"`
|
IsBuyNowPrice int `json:"isBuyNowPrice"`
|
||||||
IsPriceDefend int `json:"isPriceDefend"`
|
IsPriceDefend int `json:"isPriceDefend"`
|
||||||
OrderID2 string `json:"-"`
|
OrderID2 string `json:"-"`
|
||||||
|
UserID string `json:"userID"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type DeliveryTimeItem struct {
|
type DeliveryTimeItem struct {
|
||||||
@@ -815,6 +816,7 @@ func generateOrder(ctx *jxcontext.Context, jxOrder *JxOrderInfo, addressID int64
|
|||||||
outJxOrder.FreightPrice = 500
|
outJxOrder.FreightPrice = 500
|
||||||
// }
|
// }
|
||||||
//如果是守价的订单,需要查询本期中该用户是否已经守价过,如果守价过就只算一次运费
|
//如果是守价的订单,需要查询本期中该用户是否已经守价过,如果守价过就只算一次运费
|
||||||
|
if jxOrder.OrderType == model.OrderTypeDefendPrice {
|
||||||
priceDefendOrders, _ := dao.GetPriceDefendOrder(db, "", nil, nil, []int{jxutils.GetDefendPriceIssue()}, 0, -1, -1, 1, deliveryAddress.UserID, utils.ZeroTimeValue, utils.ZeroTimeValue, false)
|
priceDefendOrders, _ := dao.GetPriceDefendOrder(db, "", nil, nil, []int{jxutils.GetDefendPriceIssue()}, 0, -1, -1, 1, deliveryAddress.UserID, utils.ZeroTimeValue, utils.ZeroTimeValue, false)
|
||||||
if len(priceDefendOrders) > 0 {
|
if len(priceDefendOrders) > 0 {
|
||||||
flag2 := false
|
flag2 := false
|
||||||
@@ -828,6 +830,7 @@ func generateOrder(ctx *jxcontext.Context, jxOrder *JxOrderInfo, addressID int64
|
|||||||
}
|
}
|
||||||
outJxOrder.FreightPrice = 0
|
outJxOrder.FreightPrice = 0
|
||||||
}
|
}
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
outJxOrder.FreightPrice = 0
|
outJxOrder.FreightPrice = 0
|
||||||
}
|
}
|
||||||
@@ -876,6 +879,9 @@ func generateOrder(ctx *jxcontext.Context, jxOrder *JxOrderInfo, addressID int64
|
|||||||
if jxOrder.OrderType == model.OrderTypeDefendPrice {
|
if jxOrder.OrderType == model.OrderTypeDefendPrice {
|
||||||
outJxOrder.Skus[0].DefendPrice = jxOrder.Skus[0].DefendPrice
|
outJxOrder.Skus[0].DefendPrice = jxOrder.Skus[0].DefendPrice
|
||||||
}
|
}
|
||||||
|
if jxOrder.UserID != "" {
|
||||||
|
outJxOrder.UserID = jxOrder.UserID
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
outJxOrder = nil
|
outJxOrder = nil
|
||||||
deliveryAddress = nil
|
deliveryAddress = nil
|
||||||
@@ -952,6 +958,12 @@ func jxOrder2GoodsOrder(ctx *jxcontext.Context, jxOrder *JxOrderInfo, deliveryAd
|
|||||||
}
|
}
|
||||||
order.OrderCreatedAt = order.StatusTime
|
order.OrderCreatedAt = order.StatusTime
|
||||||
order.VendorUserID = order.UserID
|
order.VendorUserID = order.UserID
|
||||||
|
if order.UserID == "" && order.VendorUserID == "" {
|
||||||
|
if jxOrder.UserID != "" {
|
||||||
|
order.UserID = jxOrder.UserID
|
||||||
|
order.VendorUserID = jxOrder.UserID
|
||||||
|
}
|
||||||
|
}
|
||||||
if jxOrder.ExpectedDeliveredTimestamp != 0 {
|
if jxOrder.ExpectedDeliveredTimestamp != 0 {
|
||||||
order.ExpectedDeliveredTime = utils.Timestamp2Time(jxOrder.ExpectedDeliveredTimestamp)
|
order.ExpectedDeliveredTime = utils.Timestamp2Time(jxOrder.ExpectedDeliveredTimestamp)
|
||||||
order.BusinessType = model.BusinessTypeDingshida
|
order.BusinessType = model.BusinessTypeDingshida
|
||||||
@@ -1961,6 +1973,8 @@ func CreateOrderByPriceDefend(ctx *jxcontext.Context) (err error) {
|
|||||||
userOrderMap[v.AddressID] = append(userOrderMap[v.AddressID], v)
|
userOrderMap[v.AddressID] = append(userOrderMap[v.AddressID], v)
|
||||||
}
|
}
|
||||||
for kk, vv := range userOrderMap {
|
for kk, vv := range userOrderMap {
|
||||||
|
addressList, _, _ := dao.QueryUserDeliveryAddress(db, kk, nil, 0, 0)
|
||||||
|
address := addressList[0]
|
||||||
if len(vv) == 1 {
|
if len(vv) == 1 {
|
||||||
jxOrder := &JxOrderInfo{
|
jxOrder := &JxOrderInfo{
|
||||||
BuyerComment: "守价订单",
|
BuyerComment: "守价订单",
|
||||||
@@ -1973,6 +1987,7 @@ func CreateOrderByPriceDefend(ctx *jxcontext.Context) (err error) {
|
|||||||
},
|
},
|
||||||
IsPriceDefend: model.YES,
|
IsPriceDefend: model.YES,
|
||||||
OrderID: utils.Str2Int64(vv[0].VendorOrderID),
|
OrderID: utils.Str2Int64(vv[0].VendorOrderID),
|
||||||
|
UserID: address.UserID,
|
||||||
}
|
}
|
||||||
if _, err := CreateOrder(ctx, jxOrder, kk, OrderCreateTypeNormal, 0, false); err == nil {
|
if _, err := CreateOrder(ctx, jxOrder, kk, OrderCreateTypeNormal, 0, false); err == nil {
|
||||||
err = SettleDiscountActByPriceDefend(ctx, vv[0], false)
|
err = SettleDiscountActByPriceDefend(ctx, vv[0], false)
|
||||||
@@ -1987,6 +2002,7 @@ func CreateOrderByPriceDefend(ctx *jxcontext.Context) (err error) {
|
|||||||
StoreID: vv[0].StoreID,
|
StoreID: vv[0].StoreID,
|
||||||
IsPriceDefend: model.YES,
|
IsPriceDefend: model.YES,
|
||||||
OrderID: GenOrderNo(ctx),
|
OrderID: GenOrderNo(ctx),
|
||||||
|
UserID: address.UserID,
|
||||||
}
|
}
|
||||||
for _, priceDefend := range vv {
|
for _, priceDefend := range vv {
|
||||||
sku := &JxSkuInfo{
|
sku := &JxSkuInfo{
|
||||||
|
|||||||
@@ -73,6 +73,7 @@ func (c *PurchaseHandler) PartRefundOrder(ctx *jxcontext.Context, order *model.G
|
|||||||
skuMap = make(map[int]*model.OrderSku)
|
skuMap = make(map[int]*model.OrderSku)
|
||||||
appID = ""
|
appID = ""
|
||||||
salePrice int64
|
salePrice int64
|
||||||
|
db = dao.GetDB()
|
||||||
)
|
)
|
||||||
if time.Now().Sub(order.OrderCreatedAt) > 24*time.Hour {
|
if time.Now().Sub(order.OrderCreatedAt) > 24*time.Hour {
|
||||||
return fmt.Errorf("已超过售后申请时间,如有疑问请联系门店!")
|
return fmt.Errorf("已超过售后申请时间,如有疑问请联系门店!")
|
||||||
@@ -122,7 +123,7 @@ func (c *PurchaseHandler) PartRefundOrder(ctx *jxcontext.Context, order *model.G
|
|||||||
}
|
}
|
||||||
|
|
||||||
if !isJxShop(appID) {
|
if !isJxShop(appID) {
|
||||||
orderPays, err := dao.GetOrderPayList(dao.GetDB(), order.VendorOrderID, order.VendorID)
|
orderPays, err := dao.GetOrderPayList(db, order.VendorOrderID, order.VendorID)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
_, err = localjx.RefundOrderByTL(ctx, orderPays[0], order.VendorOrderID, int(salePrice), reason)
|
_, err = localjx.RefundOrderByTL(ctx, orderPays[0], order.VendorOrderID, int(salePrice), reason)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -401,7 +401,7 @@ enableJdShopWrite = false
|
|||||||
|
|
||||||
jdOrgCode = "320406"
|
jdOrgCode = "320406"
|
||||||
jdLoginName = "jd_jxcs1223"
|
jdLoginName = "jd_jxcs1223"
|
||||||
jdToken = "77e703b7-7997-441b-a12a-2e522efb117a"
|
jdToken = "29afd5a8-f93f-4d4c-9fce-a7297340af59"
|
||||||
jdAppKey = "1dba76d40cac446ca500c0391a0b6c9d"
|
jdAppKey = "1dba76d40cac446ca500c0391a0b6c9d"
|
||||||
jdSecret = "a88d031a1e7b462cb1579f12e97fe7f4"
|
jdSecret = "a88d031a1e7b462cb1579f12e97fe7f4"
|
||||||
|
|
||||||
|
|||||||
@@ -808,3 +808,20 @@ func (c *StoreController) GetNearSupplyGoodsStoreByStoreID() {
|
|||||||
return retVal, "", err
|
return retVal, "", err
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// @Title 获取京东门店手动划的配送范围面积
|
||||||
|
// @Description 获取京东门店手动划的配送范围面积
|
||||||
|
// @Param token header string true "认证token"
|
||||||
|
// @Param storeIDs query string true "门店IDs"
|
||||||
|
// @Success 200 {object} controllers.CallResult
|
||||||
|
// @Failure 200 {object} controllers.CallResult
|
||||||
|
// @router /GetJdDeliveryArea [get]
|
||||||
|
func (c *StoreController) GetJdDeliveryArea() {
|
||||||
|
var storeIDs []int
|
||||||
|
c.callGetJdDeliveryArea(func(params *tStoreGetJdDeliveryAreaParams) (retVal interface{}, errCode string, err error) {
|
||||||
|
if jxutils.Strings2Objs(params.StoreIDs, &storeIDs); err == nil {
|
||||||
|
err = cms.GetJdDeliveryArea(params.Ctx, storeIDs)
|
||||||
|
}
|
||||||
|
return retVal, "", err
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|||||||
@@ -29,10 +29,10 @@ type EventController struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//连接的客户端,吧每个客户端都放进来
|
//连接的客户端,吧每个客户端都放进来
|
||||||
var clients = make(map[*websocket.Conn]bool)
|
var clients = make(map[string][]*websocket.Conn)
|
||||||
|
|
||||||
//广播频道(通道)
|
//广播频道(通道)
|
||||||
var broadcast = make(chan []*model.ImMessageRecord)
|
var broadcast = make(chan map[string]*model.ImMessageRecord)
|
||||||
|
|
||||||
// 配置升级程序(升级为websocket)
|
// 配置升级程序(升级为websocket)
|
||||||
var upgrader = websocket.Upgrader{}
|
var upgrader = websocket.Upgrader{}
|
||||||
@@ -129,10 +129,15 @@ func (c *EventController) TestWebsocket() {
|
|||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
defer ws.Close()
|
defer ws.Close()
|
||||||
|
var (
|
||||||
|
vendorOrderID = c.GetString("vendorOrderID")
|
||||||
|
msgMap = make(map[string]*model.ImMessageRecord)
|
||||||
|
)
|
||||||
//将当前客户端放入map中
|
//将当前客户端放入map中
|
||||||
clients[ws] = true
|
clients[vendorOrderID] = append(clients[vendorOrderID], ws)
|
||||||
//聊天记录
|
|
||||||
db := dao.GetDB()
|
db := dao.GetDB()
|
||||||
|
if globals.IsProductEnv() {
|
||||||
_, _, err = jxcontext.New(nil, c.GetString("token"), c.Ctx.ResponseWriter, c.Ctx.Request)
|
_, _, err = jxcontext.New(nil, c.GetString("token"), c.Ctx.ResponseWriter, c.Ctx.Request)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
msg := &CallResult{
|
msg := &CallResult{
|
||||||
@@ -141,35 +146,34 @@ func (c *EventController) TestWebsocket() {
|
|||||||
}
|
}
|
||||||
ws.WriteJSON(&msg)
|
ws.WriteJSON(&msg)
|
||||||
}
|
}
|
||||||
records, _ := dao.GetImMessageRecord(db, c.GetString("vendorOrderID"), "", 0, -1)
|
|
||||||
if len(records) > 0 {
|
|
||||||
// 把消息 写入通道
|
|
||||||
broadcast <- records
|
|
||||||
} else {
|
|
||||||
broadcast <- []*model.ImMessageRecord{
|
|
||||||
&model.ImMessageRecord{
|
|
||||||
Content: "第一条",
|
|
||||||
},
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
c.EnableRender = false //Beego不启用渲染
|
c.EnableRender = false //Beego不启用渲染
|
||||||
|
|
||||||
var s []*model.ImMessageRecord
|
var s *model.ImMessageRecord
|
||||||
for {
|
for {
|
||||||
//接收客户端的消息
|
//接收客户端的消息
|
||||||
err := ws.ReadJSON(&s)
|
err := ws.ReadJSON(&s)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
globals.SugarLogger.Debugf("页面可能断开啦 ws.ReadJSON error: %v", err.Error())
|
globals.SugarLogger.Debugf("页面可能断开啦 ws.ReadJSON error: %v", err.Error())
|
||||||
delete(clients, ws) //删除map中的客户端
|
index := 0
|
||||||
|
for k, v := range clients[vendorOrderID] {
|
||||||
|
if v == ws {
|
||||||
|
index = k
|
||||||
|
}
|
||||||
|
}
|
||||||
|
wsList := clients[vendorOrderID]
|
||||||
|
clients[vendorOrderID] = clients[vendorOrderID][0:0]
|
||||||
|
clients[vendorOrderID] = append(clients[vendorOrderID], wsList[0:index]...)
|
||||||
|
clients[vendorOrderID] = append(clients[vendorOrderID], wsList[index+1:len(wsList)]...)
|
||||||
|
// delete(clients, ws) //删除map中的客户端
|
||||||
break //结束循环
|
break //结束循环
|
||||||
} else {
|
} else {
|
||||||
//接受消息 业务逻辑
|
//接受消息 业务逻辑
|
||||||
broadcast <- s
|
msgMap[vendorOrderID] = s
|
||||||
for _, v := range s {
|
broadcast <- msgMap
|
||||||
dao.WrapAddIDCULDEntity(v, "")
|
dao.WrapAddIDCULDEntity(s, "")
|
||||||
dao.CreateEntity(db, v)
|
dao.CreateEntity(db, s)
|
||||||
}
|
|
||||||
// fmt.Println("接受到从页面上反馈回来的信息 ", utils.Format4Output(s, false))
|
// fmt.Println("接受到从页面上反馈回来的信息 ", utils.Format4Output(s, false))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -186,14 +190,26 @@ func handleMessages() {
|
|||||||
msg := <-broadcast
|
msg := <-broadcast
|
||||||
globals.SugarLogger.Debugf("clients len %v", len(clients))
|
globals.SugarLogger.Debugf("clients len %v", len(clients))
|
||||||
//循环map客户端
|
//循环map客户端
|
||||||
for client := range clients {
|
for vendorOrderID, mmsg := range msg {
|
||||||
|
for _, client := range clients[vendorOrderID] {
|
||||||
//把通道中的消息发送给客户端
|
//把通道中的消息发送给客户端
|
||||||
globals.SugarLogger.Debugf("msg %v", utils.Format4Output(msg, false))
|
globals.SugarLogger.Debugf("msg %v", utils.Format4Output(mmsg, false))
|
||||||
err := client.WriteJSON(msg)
|
err := client.WriteJSON(mmsg)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
globals.SugarLogger.Debugf("client.WriteJSON error: %v", err)
|
globals.SugarLogger.Debugf("client.WriteJSON error: %v", err)
|
||||||
client.Close() //关闭
|
client.Close() //关闭
|
||||||
delete(clients, client) //删除map中的客户端
|
index := 0
|
||||||
|
for k, v := range clients[vendorOrderID] {
|
||||||
|
if v == client {
|
||||||
|
index = k
|
||||||
|
}
|
||||||
|
}
|
||||||
|
wsList := clients[vendorOrderID]
|
||||||
|
clients[vendorOrderID] = clients[vendorOrderID][0:0]
|
||||||
|
clients[vendorOrderID] = append(clients[vendorOrderID], wsList[0:index]...)
|
||||||
|
clients[vendorOrderID] = append(clients[vendorOrderID], wsList[index+1:len(wsList)]...)
|
||||||
|
// delete(clients, client) //删除map中的客户端
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -172,13 +172,14 @@ func (c *OrderController) CancelWaybill() {
|
|||||||
// @Param token header string true "认证token"
|
// @Param token header string true "认证token"
|
||||||
// @Param storeID query int true "京西门店ID"
|
// @Param storeID query int true "京西门店ID"
|
||||||
// @Param lastHours query int false "最近多少小时的信息(缺省为两天)"
|
// @Param lastHours query int false "最近多少小时的信息(缺省为两天)"
|
||||||
|
// @Param lastMinutes query int false "最近多少分钟的信息(缺省为不传)"
|
||||||
// @Param isIncludeFake query bool false "是否包括假订单"
|
// @Param isIncludeFake query bool false "是否包括假订单"
|
||||||
// @Success 200 {object} controllers.CallResult
|
// @Success 200 {object} controllers.CallResult
|
||||||
// @Failure 200 {object} controllers.CallResult
|
// @Failure 200 {object} controllers.CallResult
|
||||||
// @router /GetStoreOrderCountInfo [get]
|
// @router /GetStoreOrderCountInfo [get]
|
||||||
func (c *OrderController) GetStoreOrderCountInfo() {
|
func (c *OrderController) GetStoreOrderCountInfo() {
|
||||||
c.callGetStoreOrderCountInfo(func(params *tOrderGetStoreOrderCountInfoParams) (retVal interface{}, errCode string, err error) {
|
c.callGetStoreOrderCountInfo(func(params *tOrderGetStoreOrderCountInfoParams) (retVal interface{}, errCode string, err error) {
|
||||||
retVal, err = orderman.FixedOrderManager.GetStoreOrderCountInfo(params.Ctx, params.StoreID, params.LastHours, params.IsIncludeFake)
|
retVal, err = orderman.FixedOrderManager.GetStoreOrderCountInfo(params.Ctx, params.StoreID, params.LastHours, params.LastMinutes, params.IsIncludeFake)
|
||||||
return retVal, "", err
|
return retVal, "", err
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@@ -1076,6 +1077,23 @@ func (c *OrderController) TransferJdsOrder() {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// @Title 合并订单(京东商城用)
|
||||||
|
// @Description 合并订单(京东商城用)
|
||||||
|
// @Param token header string true "认证token"
|
||||||
|
// @Param vendorOrderIDs formData string true "订单号s"
|
||||||
|
// @Success 200 {object} controllers.CallResult
|
||||||
|
// @Failure 200 {object} controllers.CallResult
|
||||||
|
// @router /MergeJdsOrders [post]
|
||||||
|
func (c *OrderController) MergeJdsOrders() {
|
||||||
|
c.callMergeJdsOrders(func(params *tOrderMergeJdsOrdersParams) (retVal interface{}, errCode string, err error) {
|
||||||
|
var vendorOrderIDs []string
|
||||||
|
if err = jxutils.Strings2Objs(params.VendorOrderIDs, &vendorOrderIDs); err == nil {
|
||||||
|
retVal, err = orderman.MergeJdsOrders(params.Ctx, vendorOrderIDs)
|
||||||
|
}
|
||||||
|
return retVal, "", err
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
// @Title 京东商城订单发送京东物流
|
// @Title 京东商城订单发送京东物流
|
||||||
// @Description 京东商城订单发送京东物流
|
// @Description 京东商城订单发送京东物流
|
||||||
// @Param token header string true "认证token"
|
// @Param token header string true "认证token"
|
||||||
|
|||||||
@@ -1224,6 +1224,15 @@ func init() {
|
|||||||
Filters: nil,
|
Filters: nil,
|
||||||
Params: nil})
|
Params: nil})
|
||||||
|
|
||||||
|
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:OrderController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:OrderController"],
|
||||||
|
beego.ControllerComments{
|
||||||
|
Method: "MergeJdsOrders",
|
||||||
|
Router: `/MergeJdsOrders`,
|
||||||
|
AllowHTTPMethods: []string{"post"},
|
||||||
|
MethodParams: param.Make(),
|
||||||
|
Filters: nil,
|
||||||
|
Params: nil})
|
||||||
|
|
||||||
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:OrderController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:OrderController"],
|
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:OrderController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:OrderController"],
|
||||||
beego.ControllerComments{
|
beego.ControllerComments{
|
||||||
Method: "PartRefundOrder",
|
Method: "PartRefundOrder",
|
||||||
@@ -1827,6 +1836,15 @@ func init() {
|
|||||||
Filters: nil,
|
Filters: nil,
|
||||||
Params: nil})
|
Params: nil})
|
||||||
|
|
||||||
|
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreController"],
|
||||||
|
beego.ControllerComments{
|
||||||
|
Method: "GetJdDeliveryArea",
|
||||||
|
Router: `/GetJdDeliveryArea`,
|
||||||
|
AllowHTTPMethods: []string{"get"},
|
||||||
|
MethodParams: param.Make(),
|
||||||
|
Filters: nil,
|
||||||
|
Params: nil})
|
||||||
|
|
||||||
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreController"],
|
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreController"],
|
||||||
beego.ControllerComments{
|
beego.ControllerComments{
|
||||||
Method: "GetNearSupplyGoodsStoreByStoreID",
|
Method: "GetNearSupplyGoodsStoreByStoreID",
|
||||||
|
|||||||
Reference in New Issue
Block a user