Merge remote-tracking branch 'origin/mark' into su

This commit is contained in:
苏尹岚
2019-11-26 17:26:51 +08:00
8 changed files with 312 additions and 33 deletions

View File

@@ -42,6 +42,11 @@ type SheetParam struct {
SkuRow int
}
type DataStoreSkusSuccessLock struct {
dataStoreSkusSuccessList []DataStoreSkusSuccess
locker sync.RWMutex
}
type DataSuccessLock struct {
dataSuccessList []DataSuccess
locker sync.RWMutex
@@ -52,8 +57,18 @@ type DataFailedLock struct {
locker sync.RWMutex
}
type DataStoreSkusSuccess struct {
StoreID int `json:"门店ID"`
NameID int `json:"商品编码"`
Name string `json:"商品名称"`
Unit string `json:"单位"`
OrgPrice float64 `json:"原价"`
NowPrice float64 `json:"现价"`
MixPrice float64 `json:"涨跌"`
}
type DataSuccess struct {
NameID string `json:"商品nameID"`
NameID string `json:"商品编码"`
Name string `json:"商品名称"`
Unit string `json:"单位"`
OrgPrice float64 `json:"原价"`
@@ -150,8 +165,17 @@ var (
SkuRow: 1,
},
}
titleListStoreSkusSuccess = []string{
"门店ID",
"商品编码",
"商品名称",
"单位",
"原价",
"现价",
"涨跌",
}
titleListSuccess = []string{
"商品nameID",
"商品编码",
"商品名称",
"单位",
"原价",
@@ -168,8 +192,9 @@ var (
"商品名称",
"订货数量",
}
dataSuccess DataSuccessLock
dataFailed DataFailedLock
dataSuccess DataSuccessLock
dataFailed DataFailedLock
dataStoreSkusSuccess DataStoreSkusSuccessLock
)
const (
@@ -190,6 +215,12 @@ func (d *DataFailedLock) AppendData2(dataFailed DataFailed) {
d.dataFailedList = append(d.dataFailedList, dataFailed)
}
func (d *DataStoreSkusSuccessLock) AppendData3(dataStoreSkusSuccess DataStoreSkusSuccess) {
d.locker.Lock()
defer d.locker.Unlock()
d.dataStoreSkusSuccessList = append(d.dataStoreSkusSuccessList, dataStoreSkusSuccess)
}
func LoadExcelByYongHui(ctx *jxcontext.Context, files []*multipart.FileHeader, isAsync, isContinueWhenError bool) (hint string, err error) {
if len(files) == 0 {
return "", errors.New("没有文件上传!")
@@ -509,7 +540,7 @@ func updateWeiMobGoods(costPrice, salePrice float64, unit string, isCompare bool
}
} else {
outPutData := DataSuccess{
NameID: goodsDetail.SkuMap.SingleSku.OuterSkuCode,
NameID: goodsDetail.OuterGoodsCode,
Name: goodsDetail.Title,
Unit: unit,
OrgPrice: goodsDetail.SkuMap.SingleSku.SalePrice,
@@ -710,7 +741,7 @@ func WriteToExcel(task *tasksch.SeqTask, dataSuccess []DataSuccess, dataFailed [
}
sheetList2 = append(sheetList2, excelConf2)
if excelConf1 != nil {
downloadURL1, fileName1, err = UploadExeclAndPushMsg(sheetList1, "已更新商品")
downloadURL1, fileName1, err = UploadExeclAndPushMsg(sheetList1, "微盟已更新商品")
} else {
baseapi.SugarLogger.Debug("WriteToExcel: dataSuccess is nil!")
}
@@ -743,14 +774,13 @@ func UpdateJxPriceByWeimob(ctx *jxcontext.Context, storeIDs []int, isAsync, isCo
storeSkuBindInfoList []interface{}
skuBindInfos []*cms.StoreSkuBindInfo
)
//获取微盟所有上架商品
queryParameter := &weimobapi.QueryGoodsListRequestVo{
GoodsStatus: weimobapi.GoodsTypeNormal,
}
db := dao.GetDB()
dataFailed.dataFailedList = dataFailed.dataFailedList[0:0]
dataStoreSkusSuccess.dataStoreSkusSuccessList = dataStoreSkusSuccess.dataStoreSkusSuccessList[0:0]
//获取微盟所有商品
param := &weimobapi.QueryGoodsListParam{
PageNum: 1,
PageSize: jdapi.MaxSkuIDsCount4QueryListBySkuIds,
QueryParameter: queryParameter,
PageNum: 1,
PageSize: jdapi.MaxSkuIDsCount4QueryListBySkuIds,
}
goodsList, err := GetWeiMobGoodsList(param)
if err != nil {
@@ -765,14 +795,53 @@ func UpdateJxPriceByWeimob(ctx *jxcontext.Context, storeIDs []int, isAsync, isCo
if err != nil {
baseapi.SugarLogger.Errorf("QueryGoodsDetail error:%v", err)
}
if goodsDetail.OuterGoodsCode != "" && goodsDetail.IsPutAway == weimobapi.GoodsTypeNormal {
nameID := int(utils.Str2Int64(goodsDetail.SkuMap.SingleSku.OuterSkuCode))
unitPrice := int(utils.Float64TwoInt64(goodsDetail.SkuMap.SingleSku.CostPrice * 100))
storeSkuBindInfo := &cms.StoreSkuBindInfo{
NameID: nameID,
UnitPrice: unitPrice,
nameID := int(utils.Str2Int64(goodsDetail.SkuMap.SingleSku.OuterSkuCode))
unitPrice := int(utils.Float64TwoInt64(goodsDetail.SkuMap.SingleSku.CostPrice * 100))
goodsID := goodsDetail.OuterGoodsCode
skuList, err := dao.GetStoreSkusByNameIDs(db, storeIDs, nameID)
if len(skuList) > 0 {
if goodsDetail.OuterGoodsCode != "" {
if goodsDetail.IsPutAway == weimobapi.GoodsTypeNormal {
storeSkuBindInfo := &cms.StoreSkuBindInfo{
NameID: nameID,
UnitPrice: unitPrice,
}
retVal = []*cms.StoreSkuBindInfo{storeSkuBindInfo}
for _, v := range skuList {
outPutData := DataStoreSkusSuccess{
StoreID: v.StoreID,
NameID: nameID,
Name: v.Name,
Unit: v.Unit,
OrgPrice: utils.Str2Float64(utils.Int64ToStr(v.UnitPrice)) / 100,
NowPrice: goodsDetail.SkuMap.SingleSku.CostPrice,
MixPrice: Float64Round((utils.Str2Float64(utils.Int64ToStr(v.UnitPrice)) / 100) - goodsDetail.SkuMap.SingleSku.CostPrice),
}
dataStoreSkusSuccess.AppendData3(outPutData)
}
} else { //如果微盟为下架
outPutData := DataFailed{
GoodsID: goodsID,
GoodsName: goodsDetail.Title,
Comment: "微盟已下架",
}
dataFailed.AppendData2(outPutData)
}
} else {
outPutData := DataFailed{
GoodsID: goodsID,
GoodsName: goodsDetail.Title,
Comment: "微盟上没有该商品的spu编码",
}
dataFailed.AppendData2(outPutData)
}
retVal = []*cms.StoreSkuBindInfo{storeSkuBindInfo}
} else {
outPutData := DataFailed{
GoodsID: goodsID,
GoodsName: goodsDetail.Title,
Comment: "京西未关注该商品",
}
dataFailed.AppendData2(outPutData)
}
return retVal, err
}
@@ -784,10 +853,12 @@ func UpdateJxPriceByWeimob(ctx *jxcontext.Context, storeIDs []int, isAsync, isCo
skuBindInfos = append(skuBindInfos, v.(*cms.StoreSkuBindInfo))
}
cms.UpdateStoresSkus(ctx, storeIDs, skuBindInfos, isAsync, isContinueWhenError)
case 2:
WriteToExcel3(task, dataStoreSkusSuccess.dataStoreSkusSuccessList, dataFailed.dataFailedList)
}
return result, err
}
taskSeq := tasksch.NewSeqTask2("根据微盟商品更新京西价", ctx, isContinueWhenError, taskSeqFunc, 2)
taskSeq := tasksch.NewSeqTask2("根据微盟商品更新京西价", ctx, isContinueWhenError, taskSeqFunc, 3)
tasksch.HandleTask(taskSeq, nil, true).Run()
if !isAsync {
_, err = taskSeq.GetResult(0)
@@ -798,6 +869,42 @@ func UpdateJxPriceByWeimob(ctx *jxcontext.Context, storeIDs []int, isAsync, isCo
return hint, err
}
func WriteToExcel3(task *tasksch.SeqTask, dataSuccess []DataStoreSkusSuccess, dataFailed []DataFailed) (err error) {
var sheetList1 []*excel.Obj2ExcelSheetConfig
var sheetList2 []*excel.Obj2ExcelSheetConfig
var downloadURL1, downloadURL2, fileName1, fileName2 string
excelConf1 := &excel.Obj2ExcelSheetConfig{
Title: "sheet1",
Data: dataSuccess,
CaptionList: titleListStoreSkusSuccess,
}
sheetList1 = append(sheetList1, excelConf1)
excelConf2 := &excel.Obj2ExcelSheetConfig{
Title: "sheet1",
Data: dataFailed,
CaptionList: titleListFailed,
}
sheetList2 = append(sheetList2, excelConf2)
if excelConf1 != nil {
downloadURL1, fileName1, err = UploadExeclAndPushMsg(sheetList1, "京西已更新商品")
} else {
baseapi.SugarLogger.Debug("WriteToExcel: dataSuccess is nil!")
}
if excelConf2 != nil {
downloadURL2, fileName2, err = UploadExeclAndPushMsg(sheetList2, "缺少商品_京西")
} else {
baseapi.SugarLogger.Debug("WriteToExcel: dataFailed is nil!")
}
if err != nil {
baseapi.SugarLogger.Errorf("WriteToExcel:upload %s , %s failed error:%v", fileName1, fileName2, err)
} else {
noticeMsg := fmt.Sprintf("[详情点我]path1=%s, path2=%s \n", globals.BackstageHost, downloadURL1, downloadURL2)
task.SetNoticeMsg(noticeMsg)
baseapi.SugarLogger.Debugf("WriteToExcel:upload %s ,%s success, downloadURL1:%s ,downloadURL2:%s", fileName1, fileName2, downloadURL1, downloadURL2)
}
return err
}
func GetWeimobOrders(ctx *jxcontext.Context, fromTime, toTime string, params map[string]interface{}) (result []*OrderList, err error) {
if fromTime != "" && toTime != "" {
fromTimeParam := utils.Str2Time(fromTime).UnixNano() / 1e6
@@ -942,7 +1049,7 @@ func GetWeimobOrdersExcel(ctx *jxcontext.Context, OrderNo string) (result *Weimo
}
downloadURL1, downloadURL2, err := WriteToExcel2(ctx, DataFineList, DataHairyList)
result = &WeimobOrderSkusExcelResult{
DownloadUrlFine: downloadURL1,
DownloadUrlFine: downloadURL1,
DownloadUrlHairy: downloadURL2,
}
return result, err

View File

@@ -119,6 +119,10 @@ func JxOperationTime2StrTime(value int16) string {
return fmt.Sprintf("%02d:%02d", value/100, value%100)
}
func JxOperationTime2TimeByDate(value int16, tm time.Time) (outTm time.Time) {
return utils.Str2TimeWithDefault(fmt.Sprintf("%s %02d:%02d:00", utils.Time2DateStr(tm), value/100, value%100), utils.DefaultTimeValue)
}
func GetPolygonFromCircle(lng, lat, distance float64, pointCount int) (points [][2]float64) {
points = make([][2]float64, pointCount)
for k := range points {

View File

@@ -640,3 +640,24 @@ func UpdateStoreSkuBindSyncStatus(db *DaoDB, vendorIDs []int, storeID int) (num
}
return ExecuteSQL(db, sql, sqlParams...)
}
func GetStoreSkusByNameIDs(db *DaoDB, storeIDs []int, nameID int) (skuList []*StoreSkuSyncInfo, err error) {
sql := `
SELECT a.*,c.unit,c.name
FROM store_sku_bind a
JOIN sku b ON a.sku_id = b.id
JOIN sku_name c ON b.name_id = c.id
WHERE b.name_id = ?
`
sqlParams := []interface{}{
nameID,
}
if len(storeIDs) > 0 {
sql += " AND a.store_id in (" + GenQuestionMarks(len(storeIDs)) + ")"
sqlParams = append(sqlParams, storeIDs)
}
sql += " AND a.status != ?"
sqlParams = append(sqlParams, model.SkuStatusDeleted)
err = GetRows(db, &skuList, sql, sqlParams...)
return skuList, err
}

View File

@@ -4,6 +4,7 @@ import (
"crypto/md5"
"fmt"
"math"
"sort"
"time"
"git.rosy.net.cn/baseapi/utils"
@@ -12,6 +13,7 @@ import (
"git.rosy.net.cn/jx-callback/business/model"
"git.rosy.net.cn/jx-callback/business/model/dao"
"git.rosy.net.cn/jx-callback/business/partner"
"git.rosy.net.cn/jx-callback/business/partner/delivery"
"git.rosy.net.cn/jx-callback/globals"
)
@@ -19,7 +21,8 @@ const (
OrderCreateTypePre = 0 // 预创建
OrderCreateTypeNormal = 1 // 正常创建
PayWaitingTime = 10 * time.Minute // 等待支付的最长时间
PayWaitingTime = 10 * time.Minute // 等待支付的最长时间
DingShiDaMinTime = 1 * time.Hour
)
type JxSkuInfo struct {
@@ -29,15 +32,33 @@ type JxSkuInfo struct {
Price int64 `json:"price,omitempty"` // 原价
SalePrice int64 `json:"salePrice,omitempty"` // 售卖价
Name string `json:"name"`
Name string `json:"name"`
Weight int `json:"weight"`
}
type JxSkuInfoList []*JxSkuInfo
func (l JxSkuInfoList) Len() int {
return len(l)
}
func (l JxSkuInfoList) Less(i, j int) bool {
if l[i].SkuID == l[j].SkuID {
return l[i].SalePrice < l[j].SalePrice
}
return l[i].SkuID < l[j].SkuID
}
func (l JxSkuInfoList) Swap(i, j int) {
l[i], l[j] = l[j], l[i]
}
type JxOrderInfo struct {
BuyerComment string
BuyerComment string `json:"buyerComment"`
StoreID int `json:"storeID"`
Skus []*JxSkuInfo `json:"skus"`
ExpectedDeliveredTime *time.Time `orm:"type(datetime)" json:"expectedDeliveredTime"` // 预期送达时间
ExpectedDeliveredTimestamp int64 `json:"expectedDeliveredTimestamp"` // 预期送达时间
TotalPrice int64 `json:"totalPrice"` // 单位为分 订单总价
FreightPrice int64 `json:"freightPrice"` // 单位为分 订单配送费
@@ -46,10 +67,33 @@ type JxOrderInfo struct {
OrderID int64 `json:"orderID"`
StoreName string `json:"storeName"`
Weight int `json:"weight"`
}
type DeliveryTimeItem struct {
ViewTime string `json:"viewTime"`
UnixTime int64 `json:"unixTime"`
ViewShippingFee string `json:"viewShippingFee"`
}
type DeliveryDayTimeInfo struct {
Date string `json:"date"`
TimeList []*DeliveryTimeItem `json:"timeList"`
}
var (
orderNoBeginTimestamp int64
weekdayMap = map[int]string{
1: "一",
2: "二",
3: "三",
4: "四",
5: "五",
6: "六",
7: "七",
}
dayList = []string{"今天", "明天"}
)
func init() {
@@ -89,6 +133,57 @@ func Pay4Order(ctx *jxcontext.Context, orderID int64, payType int, vendorPayType
return orderPay, err
}
func time2ShortTimeStr(t time.Time) string {
return t.Format("15:04")
}
func GetAvailableDeliverTime(ctx *jxcontext.Context, storeID int) (deliverTimerList []*DeliveryDayTimeInfo, err error) {
db := dao.GetDB()
storeDetail, err := dao.GetStoreDetail(db, storeID, model.VendorIDJX)
if err != nil {
return nil, err
}
if storeDetail.Status != model.StoreStatusOpened {
return nil, fmt.Errorf("门店:%s不是营业状态,状态是:%s", storeDetail.Name, model.StoreStatusName[storeDetail.Status])
}
now := time.Now()
beginDate := utils.Time2Date(now)
minDingShiDaTime := now.Add(DingShiDaMinTime)
for i := 0; i < 2; i++ {
openTime1 := jxutils.JxOperationTime2TimeByDate(storeDetail.OpenTime1, beginDate)
closeTime1 := jxutils.JxOperationTime2TimeByDate(storeDetail.CloseTime1, beginDate)
openTime2 := jxutils.JxOperationTime2TimeByDate(storeDetail.OpenTime2, beginDate)
closeTime2 := jxutils.JxOperationTime2TimeByDate(storeDetail.CloseTime2, beginDate)
timeInfo := &DeliveryDayTimeInfo{
Date: fmt.Sprintf("%s(周%s)", dayList[i], weekdayMap[int(beginDate.Weekday())]),
}
if i == 0 {
timeInfo.TimeList = append(timeInfo.TimeList, &DeliveryTimeItem{
ViewTime: "立即送出",
UnixTime: 0,
ViewShippingFee: "约6.6元配送费",
})
}
deliverTimerList = append(deliverTimerList, timeInfo)
for j := 0; j < 24*3; j++ {
deliveryTime := beginDate.Add(time.Duration(j) * 20 * time.Minute)
if deliveryTime.Sub(minDingShiDaTime) >= 0 {
if (deliveryTime.Sub(openTime1) >= 0 && deliveryTime.Sub(closeTime1) <= 0) ||
(storeDetail.OpenTime2 > 0 && deliveryTime.Sub(openTime2) >= 0 && deliveryTime.Sub(closeTime2) <= 0) {
timeInfo.TimeList = append(timeInfo.TimeList, &DeliveryTimeItem{
ViewTime: time2ShortTimeStr(deliveryTime),
UnixTime: deliveryTime.Unix(),
ViewShippingFee: "约6.6元配送费",
})
}
}
}
beginDate = beginDate.Add(24 * time.Hour)
}
return deliverTimerList, err
}
func OnPayFinished(orderPay *model.OrderPay) (err error) {
order, err := partner.CurOrderManager.LoadOrder(orderPay.VendorOrderID, orderPay.VendorID)
if err == nil {
@@ -181,16 +276,19 @@ func generateOrder(ctx *jxcontext.Context, jxOrder *JxOrderInfo, addressID int64
}
// 营业状态及时间检查
if storeDetail.Status == model.StoreStatusDisabled {
if storeDetail.Status != model.StoreStatusOpened { // model.StoreStatusDisabled {
return nil, nil, fmt.Errorf("门店:%s状态是:%s", storeDetail.Name, model.StoreStatusName[storeDetail.Status])
}
checkTime := time.Now()
if jxOrder.ExpectedDeliveredTime == nil {
if jxOrder.ExpectedDeliveredTimestamp == 0 {
if storeDetail.Status != model.StoreStatusOpened {
return nil, nil, fmt.Errorf("门店:%s不是营业状态,状态是:%s", storeDetail.Name, model.StoreStatusName[storeDetail.Status])
}
} else {
checkTime = *jxOrder.ExpectedDeliveredTime
checkTime = utils.Timestamp2Time(jxOrder.ExpectedDeliveredTimestamp)
if checkTime.Sub(time.Now()) < DingShiDaMinTime {
return nil, nil, fmt.Errorf("预订单只能在1小时后")
}
if utils.Time2Date(time.Now()).Sub(utils.Time2Date(checkTime)) > 24*time.Hour {
return nil, nil, fmt.Errorf("预订单只能预定当天或第二天")
}
@@ -238,15 +336,23 @@ func generateOrder(ctx *jxcontext.Context, jxOrder *JxOrderInfo, addressID int64
Count: v.Count,
Price: int64(storeSkuBind.JxPrice),
SalePrice: int64(storeSkuBind.JxPrice), // todo 考虑活动价
Weight: sku.Weight,
Name: jxutils.ComposeSkuName(sku.Prefix, sku.Name, sku.Comment, sku.Unit, sku.SpecQuality, sku.SpecUnit, 0),
}
outJxOrder.Skus = append(outJxOrder.Skus, jxSku)
outJxOrder.OrderPrice += int64(v.Count) * jxSku.SalePrice
outJxOrder.Weight = v.Count * jxSku.Weight
}
}
}
outJxOrder.TotalPrice = outJxOrder.OrderPrice + outJxOrder.FreightPrice
outJxOrder.ActualPayPrice = outJxOrder.TotalPrice
sort.Sort(JxSkuInfoList(outJxOrder.Skus))
if outJxOrder.FreightPrice, _, err = delivery.CalculateDeliveryFee(dao.GetDB(), jxOrder.StoreID, "",
jxutils.StandardCoordinate2Int(deliveryAddress.Lng), jxutils.StandardCoordinate2Int(deliveryAddress.Lat),
model.CoordinateTypeMars, outJxOrder.Weight, checkTime); err == nil {
outJxOrder.TotalPrice = outJxOrder.OrderPrice + outJxOrder.FreightPrice
outJxOrder.ActualPayPrice = outJxOrder.TotalPrice
}
return outJxOrder, deliveryAddress, err
}
@@ -277,8 +383,8 @@ func jxOrder2GoodsOrder(ctx *jxcontext.Context, jxOrder *JxOrderInfo, deliveryAd
}
order.OrderCreatedAt = order.StatusTime
order.VendorUserID = order.UserID
if jxOrder.ExpectedDeliveredTime != nil {
order.ExpectedDeliveredTime = *jxOrder.ExpectedDeliveredTime
if jxOrder.ExpectedDeliveredTimestamp == 0 {
order.ExpectedDeliveredTime = utils.Timestamp2Time(jxOrder.ExpectedDeliveredTimestamp)
order.BusinessType = model.BusinessTypeDingshida
} else {
order.ExpectedDeliveredTime = utils.DefaultTimeValue

View File

@@ -3,10 +3,24 @@ package localjx
import (
"testing"
"git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/jx-callback/business/jxutils/jxcontext"
"git.rosy.net.cn/jx-callback/globals/testinit"
)
func init() {
testinit.Init()
}
func TestGenOrderNo(t *testing.T) {
orderNo := GenOrderNo(jxcontext.AdminCtx)
t.Log(orderNo)
}
func TestGetAvailableDeliverTime(t *testing.T) {
timeInfo, err := GetAvailableDeliverTime(jxcontext.AdminCtx, 100118)
if err != nil {
t.Fatal(err)
}
t.Log(utils.Format4Output(timeInfo, false))
}

View File

@@ -5,6 +5,7 @@ import (
"git.rosy.net.cn/baseapi/platformapi/wxpay"
"git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/jx-callback/business/auth2/authprovider/weixin"
"git.rosy.net.cn/jx-callback/business/jxutils"
"git.rosy.net.cn/jx-callback/business/jxutils/jxcontext"
"git.rosy.net.cn/jx-callback/business/model"
@@ -30,6 +31,9 @@ func pay4OrderByWX(ctx *jxcontext.Context, order *model.GoodsOrder, vendorPayTyp
TimeStart: wxpay.Time2PayTime(payCreatedAt),
// TimeExpire: wxpay.Time2PayTime(payCreatedAt.Add(PayWaitingTime)),
}
if authInfo, err := ctx.GetV2AuthInfo(); err == nil && authInfo.GetAuthType() == weixin.AuthTypeMini {
param.OpenID = authInfo.GetAuthID()
}
result, err := api.WxpayAPI.CreateUnifiedOrder(param)
if err == nil {
orderPay = &model.OrderPay{

View File

@@ -44,3 +44,17 @@ func (c *JxOrderController) Pay4Order() {
return retVal, "", err
})
}
// @Title 查询网络打印机状态
// @Description 查询网络打印机状态
// @Param token header string true "认证token"
// @Param storeID query int true "门店ID"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /GetAvailableDeliverTime [get]
func (c *JxOrderController) GetAvailableDeliverTime() {
c.callGetAvailableDeliverTime(func(params *tJxorderGetAvailableDeliverTimeParams) (retVal interface{}, errCode string, err error) {
retVal, err = localjx.GetAvailableDeliverTime(params.Ctx, params.StoreID)
return retVal, "", err
})
}

View File

@@ -592,6 +592,15 @@ func init() {
Filters: nil,
Params: nil})
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:JxOrderController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:JxOrderController"],
beego.ControllerComments{
Method: "GetAvailableDeliverTime",
Router: `/GetAvailableDeliverTime`,
AllowHTTPMethods: []string{"get"},
MethodParams: param.Make(),
Filters: nil,
Params: nil})
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:JxOrderController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:JxOrderController"],
beego.ControllerComments{
Method: "Pay4Order",