Merge remote-tracking branch 'origin/jdshop' into jxact

This commit is contained in:
苏尹岚
2020-09-04 14:20:21 +08:00
22 changed files with 579 additions and 95 deletions

View File

@@ -131,6 +131,11 @@ func (c *OrderManager) OnOrderAdjust(order *model.GoodsOrder, orderStatus *model
// return err
// }, "OnAdjustOrder delete order_sku, orderID:%s", order.VendorOrderID)
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)
}
if err == nil {
@@ -1321,6 +1326,154 @@ func setJdsOrderSeq(order *model.GoodsOrder) (err error) {
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) {
globals.SugarLogger.Debugf("jds TransferJdsOrder vendorOrderID: %v, storeID : %v", vendorOrderID, storeID)
var (
@@ -1354,10 +1507,8 @@ func TransferJdsOrder(ctx *jxcontext.Context, vendorOrderID string, storeID int)
}
if waybill != nil {
if waybill.WaybillVendorID != model.VendorIDJDWL {
handler := partner.DeliveryPlatformHandlers[waybill.WaybillVendorID]
err = handler.Handler.CancelWaybill(waybill, 0, "订单转移被取消")
if err != nil {
return "", err
if handler := partner.GetDeliveryPlatformFromVendorID(waybill.WaybillVendorID); handler != nil {
err = handler.Handler.CancelWaybill(waybill, 0, "订单转移被取消")
}
}
}
@@ -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++
if len(order.VendorOrderID2) > 18 {
order.VendorOrderID2 = order.VendorOrderID2[0:12]
}
order.VendorOrderID = utils.Int64ToStr(utils.Str2Int64(order.VendorOrderID2)*100000) + utils.Int2Str(suffix)
}
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})
order, err := dao.GetSimpleOrder(db, vendorOrderID)
//如果不是商城模板店
if jxutils.GetSaleStoreIDFromOrder(order) != model.JdShopMainStoreID {
return fmt.Errorf("目前只支持商城模板店的简单售前删除!")
}
orderSkus2, err := dao.GetSimpleOrderSkus(db, vendorOrderID, nil)
if len(orderSkus2) == 1 {
return fmt.Errorf("这一单只剩这最后一个商品了,不允许删除!")
@@ -1571,6 +1728,7 @@ func AdjustJdsOrderSimple(ctx *jxcontext.Context, vendorOrderID string, skuID in
} else {
_, err = dao.DeleteEntity(db, orderSku)
}
return err
}

View File

@@ -100,6 +100,7 @@ func (c *OrderManager) onAfsOrderNew(afsOrder *model.AfsOrder, orderStatus *mode
return err
}
}
dao.Commit(db)
scheduler.CurrentScheduler.OnAfsOrderNew(afsOrder, false)
return err
@@ -261,7 +262,13 @@ func (c *OrderManager) updateAfsOrderSkuOtherInfo(db *dao.DaoDB, order *model.Af
}
}
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("updateAfsOrderSkuOtherInfo orderID:%s failed with err:%v", order.VendorOrderID, err)
return err

View File

@@ -64,11 +64,11 @@ type OrderCount struct {
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)
if lastHours > maxLastHours {
lastHours = maxLastHours
} else if lastHours == 0 {
} else if lastHours == 0 && lastMinutes == 0 {
lastHours = defLastHours
}
@@ -80,7 +80,12 @@ func (c *OrderManager) GetStoreOrderCountInfo(ctx *jxcontext.Context, storeID, l
AND t1.order_created_at >= ?`
sqlParams := []interface{}{
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 {
sql += " AND (t1.flag & ?) = 0"

View File

@@ -5,6 +5,8 @@ import (
"strings"
"time"
"git.rosy.net.cn/baseapi/platformapi/jdshopapi"
"git.rosy.net.cn/baseapi/platformapi/dingdingapi"
"git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/baseapi/utils/errlist"
@@ -213,6 +215,37 @@ func (c *BaseScheduler) AgreeOrRefuseRefund(ctx *jxcontext.Context, afsOrderID s
flag = model.AfsOrderFlagRefuseUserRefund
afsOrder.RefuseReason = reason
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)
}

View File

@@ -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 {
s.orderMap.Delete(jxutils.GetUniversalOrderIDFromOrderStatus(status))
}

View File

@@ -3455,3 +3455,82 @@ func UpdateStorePricePack(ctx *jxcontext.Context, storeID, vendorID int, pricePa
}
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
}

View File

@@ -4721,6 +4721,7 @@ func StoreSkuPriceAudit(ctx *jxcontext.Context, storeSkuAudits []*model.StoreSku
}
return storeSkuAudits2, "", err
}
deletedDuplicateWaitAuditData(ctx, db)
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)
@@ -4801,6 +4802,45 @@ func StoreSkuPriceAudit(ctx *jxcontext.Context, storeSkuAudits []*model.StoreSku
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) {
type SpecialtyStoreSkus struct {
StoreID int `json:"门店ID"`

View File

@@ -1098,7 +1098,7 @@ func (v *VendorSync) SyncJdsStoresSkus(ctx *jxcontext.Context, storeIDs []int, i
var (
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,
func(t *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (interface{}, error) {
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 {
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)
@@ -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) {
// 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,
func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
storeSku := batchItemList[0].(*model.StoreSkuBind)
@@ -1146,7 +1137,53 @@ func syncJdsStoreStock(ctx *jxcontext.Context, db *dao.DaoDB, parentTask tasksch
}, storeSkus)
tasksch.HandleTask(task, parentTask, true).Run()
_, 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
}

View File

@@ -414,7 +414,7 @@ func doDailyWork2() {
//同步京东商城门店的商品
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() {
@@ -449,7 +449,7 @@ func doDailyWork() {
//同步银豹到京西
// 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)
//同步美团配送与否状态及美团门店是否存在

View File

@@ -1583,14 +1583,9 @@ func UploadJdsImage(ctx *jxcontext.Context) (err error) {
// fmt.Println("addList2", addList)
// fmt.Println("updateList2", utils.Format4Output(updateList, false))
// fmt.Println("deleteList2", deleteList)
var skuNames []model.SkuName
sql := `
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())
}
// cms.DeletedDuplicateWaitAuditData(ctx, dao.GetDB())
// orderman.RefreshJdShopOrdersEarningPrice(jxcontext.AdminCtx, time.Now().AddDate(0, 0, -2).Format("20060102"), time.Now().Format("20060102"))
return err
}

View File

@@ -974,3 +974,33 @@ func GetDefendPriceIssue() (issue int) {
func GetLastDefendPriceIssue() (issue int) {
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))
}

View File

@@ -58,7 +58,7 @@ type ModelTimeInfo struct {
type GoodsOrder struct {
ID int64 `orm:"column(id)" json:"id"`
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"`
VendorStoreID string `orm:"column(vendor_store_id);size(48)" json:"vendorStoreID"`
StoreID int `orm:"column(store_id)" json:"storeID"` // 外部系统里记录的 jxstoreid

View File

@@ -5,6 +5,7 @@ import (
"git.rosy.net.cn/baseapi/platformapi/ebaiapi"
"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/partner"
"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.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 {
utils.AfterFuncWithRecover(timeout4WaybillCancel, func() {
if localOrder, err2 := partner.CurOrderManager.LoadOrder(order.VendorOrderID, model.VendorIDEBAI); err2 == nil {

View File

@@ -117,8 +117,6 @@ func result2Orders(msg *jdshopapi.CallBackResult) (order *model.GoodsOrder, err
order.BusinessType = model.BusinessTypeDingshida
// order.ExpectedDeliveredTime = utils.Str2Time(orderDetail.ExpectedDeliveredTime)
order.PickDeadline = order.ExpectedDeliveredTime.Add(-time.Hour)
globals.SugarLogger.Warnf("来暂停的订单了!%v", msg.OrderID)
return nil, err
} else if msg.OrderState == jdshopapi.OrderStatusWait {
order.ExpectedDeliveredTime = order.OrderCreatedAt.Add(time.Hour)
order.BusinessType = model.BusinessTypeImmediate

View File

@@ -6,6 +6,8 @@ import (
"math"
"time"
"git.rosy.net.cn/jx-callback/business/model/dao"
"git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/jx-callback/business/jxutils/jxcontext"
"git.rosy.net.cn/jx-callback/business/model"
@@ -13,19 +15,20 @@ import (
"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
if approveType == partner.AfsApproveTypeRefused {
status = model.AfsOrderStatusFailed
} else {
status = model.AfsOrderStatusFinished
}
orderStatus := &model.OrderStatus{
VendorOrderID: order.AfsOrderID, // 是售后单ID不是订单ID订单ID在RefVendorOrderID中
VendorID: order.VendorID,
VendorOrderID: afsOrder.AfsOrderID, // 是售后单ID不是订单ID订单ID在RefVendorOrderID中
VendorID: afsOrder.VendorID,
OrderType: model.OrderTypeAfsOrder,
RefVendorOrderID: order.VendorOrderID,
RefVendorID: order.VendorID,
RefVendorOrderID: afsOrder.VendorOrderID,
RefVendorID: afsOrder.VendorID,
VendorStatus: utils.Int2Str(status),
Status: status,
StatusTime: time.Now(),
@@ -53,17 +56,18 @@ func (c *PurchaseHandler) PartRefundOrder(ctx *jxcontext.Context, order *model.G
var (
skuMap = make(map[int]*model.OrderSku)
salePrice int64
db = dao.GetDB()
)
for _, sku := range order.Skus {
skuMap[sku.SkuID] = sku
}
orderStatus := buildOrderStatus(ctx, order, reason)
afsOrder := &model.AfsOrder{
VendorID: order.VendorID,
AfsOrderID: orderStatus.VendorOrderID,
VendorOrderID: orderStatus.RefVendorOrderID,
VendorStoreID: order.VendorStoreID,
StoreID: order.StoreID,
VendorID: order.VendorID,
AfsOrderID: orderStatus.VendorOrderID,
VendorOrderID: orderStatus.RefVendorOrderID,
// VendorStoreID: order.VendorStoreID,
// StoreID: jxutils.GetSaleStoreIDFromOrder(order),
AfsCreatedAt: time.Now(),
VendorAppealType: "",
AppealType: model.AfsAppealTypeRefund,
@@ -81,6 +85,10 @@ func (c *PurchaseHandler) PartRefundOrder(ctx *jxcontext.Context, order *model.G
VendorSkuID: utils.Int2Str(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 {
orderSku.Name = skuMap[sku.SkuID].SkuName
orderSku.UserMoney = skuMap[sku.SkuID].SalePrice * int64(sku.Count)

View File

@@ -118,6 +118,7 @@ type JxOrderInfo struct {
IsBuyNowPrice int `json:"isBuyNowPrice"`
IsPriceDefend int `json:"isPriceDefend"`
OrderID2 string `json:"-"`
UserID string `json:"userID"`
}
type DeliveryTimeItem struct {
@@ -815,18 +816,20 @@ func generateOrder(ctx *jxcontext.Context, jxOrder *JxOrderInfo, addressID int64
outJxOrder.FreightPrice = 500
// }
//如果是守价的订单,需要查询本期中该用户是否已经守价过,如果守价过就只算一次运费
priceDefendOrders, _ := dao.GetPriceDefendOrder(db, "", nil, nil, []int{jxutils.GetDefendPriceIssue()}, 0, -1, -1, 1, deliveryAddress.UserID, utils.ZeroTimeValue, utils.ZeroTimeValue, false)
if len(priceDefendOrders) > 0 {
flag2 := false
for _, v := range priceDefendOrders {
if v.StoreID != jxOrder.StoreID {
flag2 = true
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)
if len(priceDefendOrders) > 0 {
flag2 := false
for _, v := range priceDefendOrders {
if v.StoreID != jxOrder.StoreID {
flag2 = true
}
}
if flag2 {
return nil, nil, fmt.Errorf("同一期不允许相同用户在不同门店进行守价!")
}
outJxOrder.FreightPrice = 0
}
if flag2 {
return nil, nil, fmt.Errorf("同一期不允许相同用户在不同门店进行守价!")
}
outJxOrder.FreightPrice = 0
}
} else {
outJxOrder.FreightPrice = 0
@@ -876,6 +879,9 @@ func generateOrder(ctx *jxcontext.Context, jxOrder *JxOrderInfo, addressID int64
if jxOrder.OrderType == model.OrderTypeDefendPrice {
outJxOrder.Skus[0].DefendPrice = jxOrder.Skus[0].DefendPrice
}
if jxOrder.UserID != "" {
outJxOrder.UserID = jxOrder.UserID
}
} else {
outJxOrder = nil
deliveryAddress = nil
@@ -952,6 +958,12 @@ func jxOrder2GoodsOrder(ctx *jxcontext.Context, jxOrder *JxOrderInfo, deliveryAd
}
order.OrderCreatedAt = order.StatusTime
order.VendorUserID = order.UserID
if order.UserID == "" && order.VendorUserID == "" {
if jxOrder.UserID != "" {
order.UserID = jxOrder.UserID
order.VendorUserID = jxOrder.UserID
}
}
if jxOrder.ExpectedDeliveredTimestamp != 0 {
order.ExpectedDeliveredTime = utils.Timestamp2Time(jxOrder.ExpectedDeliveredTimestamp)
order.BusinessType = model.BusinessTypeDingshida
@@ -1961,6 +1973,8 @@ func CreateOrderByPriceDefend(ctx *jxcontext.Context) (err error) {
userOrderMap[v.AddressID] = append(userOrderMap[v.AddressID], v)
}
for kk, vv := range userOrderMap {
addressList, _, _ := dao.QueryUserDeliveryAddress(db, kk, nil, 0, 0)
address := addressList[0]
if len(vv) == 1 {
jxOrder := &JxOrderInfo{
BuyerComment: "守价订单",
@@ -1973,6 +1987,7 @@ func CreateOrderByPriceDefend(ctx *jxcontext.Context) (err error) {
},
IsPriceDefend: model.YES,
OrderID: utils.Str2Int64(vv[0].VendorOrderID),
UserID: address.UserID,
}
if _, err := CreateOrder(ctx, jxOrder, kk, OrderCreateTypeNormal, 0, false); err == nil {
err = SettleDiscountActByPriceDefend(ctx, vv[0], false)
@@ -1987,6 +2002,7 @@ func CreateOrderByPriceDefend(ctx *jxcontext.Context) (err error) {
StoreID: vv[0].StoreID,
IsPriceDefend: model.YES,
OrderID: GenOrderNo(ctx),
UserID: address.UserID,
}
for _, priceDefend := range vv {
sku := &JxSkuInfo{

View File

@@ -73,6 +73,7 @@ func (c *PurchaseHandler) PartRefundOrder(ctx *jxcontext.Context, order *model.G
skuMap = make(map[int]*model.OrderSku)
appID = ""
salePrice int64
db = dao.GetDB()
)
if time.Now().Sub(order.OrderCreatedAt) > 24*time.Hour {
return fmt.Errorf("已超过售后申请时间,如有疑问请联系门店!")
@@ -122,7 +123,7 @@ func (c *PurchaseHandler) PartRefundOrder(ctx *jxcontext.Context, order *model.G
}
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 {
_, err = localjx.RefundOrderByTL(ctx, orderPays[0], order.VendorOrderID, int(salePrice), reason)
if err != nil {

View File

@@ -401,7 +401,7 @@ enableJdShopWrite = false
jdOrgCode = "320406"
jdLoginName = "jd_jxcs1223"
jdToken = "77e703b7-7997-441b-a12a-2e522efb117a"
jdToken = "29afd5a8-f93f-4d4c-9fce-a7297340af59"
jdAppKey = "1dba76d40cac446ca500c0391a0b6c9d"
jdSecret = "a88d031a1e7b462cb1579f12e97fe7f4"

View File

@@ -808,3 +808,20 @@ func (c *StoreController) GetNearSupplyGoodsStoreByStoreID() {
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
})
}

View File

@@ -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)
var upgrader = websocket.Upgrader{}
@@ -129,47 +129,51 @@ func (c *EventController) TestWebsocket() {
log.Fatal(err)
}
defer ws.Close()
var (
vendorOrderID = c.GetString("vendorOrderID")
msgMap = make(map[string]*model.ImMessageRecord)
)
//将当前客户端放入map中
clients[ws] = true
//聊天记录
clients[vendorOrderID] = append(clients[vendorOrderID], ws)
db := dao.GetDB()
_, _, err = jxcontext.New(nil, c.GetString("token"), c.Ctx.ResponseWriter, c.Ctx.Request)
if err != nil {
msg := &CallResult{
Code: model.ErrCodeGeneralFailed,
Desc: err.Error(),
}
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: "第一条",
},
if globals.IsProductEnv() {
_, _, err = jxcontext.New(nil, c.GetString("token"), c.Ctx.ResponseWriter, c.Ctx.Request)
if err != nil {
msg := &CallResult{
Code: model.ErrCodeGeneralFailed,
Desc: err.Error(),
}
ws.WriteJSON(&msg)
}
}
c.EnableRender = false //Beego不启用渲染
var s []*model.ImMessageRecord
var s *model.ImMessageRecord
for {
//接收客户端的消息
err := ws.ReadJSON(&s)
if err != nil {
globals.SugarLogger.Debugf("页面可能断开啦 ws.ReadJSON error: %v", err.Error())
delete(clients, ws) //删除map中的客户端
break //结束循环
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 //结束循环
} else {
//接受消息 业务逻辑
broadcast <- s
for _, v := range s {
dao.WrapAddIDCULDEntity(v, "")
dao.CreateEntity(db, v)
}
msgMap[vendorOrderID] = s
broadcast <- msgMap
dao.WrapAddIDCULDEntity(s, "")
dao.CreateEntity(db, s)
// fmt.Println("接受到从页面上反馈回来的信息 ", utils.Format4Output(s, false))
}
}
@@ -186,14 +190,26 @@ func handleMessages() {
msg := <-broadcast
globals.SugarLogger.Debugf("clients len %v", len(clients))
//循环map客户端
for client := range clients {
//把通道中的消息发送给客户端
globals.SugarLogger.Debugf("msg %v", utils.Format4Output(msg, false))
err := client.WriteJSON(msg)
if err != nil {
globals.SugarLogger.Debugf("client.WriteJSON error: %v", err)
client.Close() //关闭
delete(clients, client) //删除map中的客户端
for vendorOrderID, mmsg := range msg {
for _, client := range clients[vendorOrderID] {
//把通道中的消息发送给客户端
globals.SugarLogger.Debugf("msg %v", utils.Format4Output(mmsg, false))
err := client.WriteJSON(mmsg)
if err != nil {
globals.SugarLogger.Debugf("client.WriteJSON error: %v", err)
client.Close() //关闭
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中的客户端
}
}
}
}

View File

@@ -172,13 +172,14 @@ func (c *OrderController) CancelWaybill() {
// @Param token header string true "认证token"
// @Param storeID query int true "京西门店ID"
// @Param lastHours query int false "最近多少小时的信息(缺省为两天)"
// @Param lastMinutes query int false "最近多少分钟的信息(缺省为不传)"
// @Param isIncludeFake query bool false "是否包括假订单"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /GetStoreOrderCountInfo [get]
func (c *OrderController) GetStoreOrderCountInfo() {
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
})
}
@@ -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 京东商城订单发送京东物流
// @Description 京东商城订单发送京东物流
// @Param token header string true "认证token"

View File

@@ -1224,6 +1224,15 @@ func init() {
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.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.ControllerComments{
Method: "PartRefundOrder",
@@ -1827,6 +1836,15 @@ func init() {
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.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.ControllerComments{
Method: "GetNearSupplyGoodsStoreByStoreID",