- continue refactoring...
This commit is contained in:
@@ -87,7 +87,7 @@ func (s *WatchOrderInfo) SetOrder(order *model.GoodsOrder) (retVal *model.GoodsO
|
||||
}
|
||||
|
||||
func (s *WatchOrderInfo) updateOrderStoreFeature(order *model.GoodsOrder) (err error) {
|
||||
storefeature := &model.Jxstorefeature{
|
||||
storefeature := &legacymodel.Jxstorefeature{
|
||||
Id: jxutils.GetJxStoreIDFromOrder(order),
|
||||
}
|
||||
if storefeature.Id > 0 {
|
||||
|
||||
72
business/jxstore/cms/cms.go
Normal file
72
business/jxstore/cms/cms.go
Normal file
@@ -0,0 +1,72 @@
|
||||
package cms
|
||||
|
||||
import (
|
||||
"reflect"
|
||||
|
||||
"git.rosy.net.cn/baseapi/utils"
|
||||
"git.rosy.net.cn/jx-callback/business/model"
|
||||
"git.rosy.net.cn/jx-callback/globals"
|
||||
"git.rosy.net.cn/jx-callback/globals/gormdb"
|
||||
"github.com/qor/admin"
|
||||
"github.com/qor/qor"
|
||||
"github.com/qor/qor/resource"
|
||||
)
|
||||
|
||||
var (
|
||||
curAdmin *admin.Admin
|
||||
)
|
||||
|
||||
func Init() {
|
||||
gormdb.Init()
|
||||
curAdmin = admin.New(&admin.AdminConfig{
|
||||
DB: gormdb.GetDB(),
|
||||
SiteName: "京西管理系统v0.0.1",
|
||||
})
|
||||
storeRes := curAdmin.AddResource(&model.Store{})
|
||||
lngMeta := storeRes.GetMeta("Lng")
|
||||
lngMeta.Type = "float"
|
||||
lngMeta.SetSetter(func(record interface{}, metaValue *resource.MetaValue, context *qor.Context) {
|
||||
store := record.(*model.Store)
|
||||
store.Lng = int(utils.Str2Float64((metaValue.Value.([]string))[0]) * 1000000)
|
||||
globals.SugarLogger.Debugf("metaValue:%v", reflect.TypeOf(metaValue.Value))
|
||||
})
|
||||
lngMeta.SetValuer(func(record interface{}, context *qor.Context) (result interface{}) {
|
||||
store := record.(*model.Store)
|
||||
result = float64(store.Lng) / 1000000
|
||||
return result
|
||||
})
|
||||
curAdmin.AddResource(&model.StoreSub{})
|
||||
|
||||
curAdmin.AddResource(&model.Sku{})
|
||||
curAdmin.AddResource(&model.SkuName{})
|
||||
}
|
||||
|
||||
func GetAdmin() *admin.Admin {
|
||||
return curAdmin
|
||||
}
|
||||
|
||||
// func SaveMapSlice2DB(db *gorm.DB, data []map[string]interface{}, tableName string, keyMaps map[string]string) {
|
||||
// if len(data) == 0 {
|
||||
// return
|
||||
// }
|
||||
|
||||
// sql := "INSERT INTO " + tableName + "("
|
||||
// for k := range data[0] {
|
||||
// realK, ok := keyMaps[k]
|
||||
// if !ok {
|
||||
// realK = k
|
||||
// }
|
||||
// sql += realK + ","
|
||||
// }
|
||||
// sql = sql[:len(sql)-1] + ") "
|
||||
|
||||
// for _, dataRow := range data {
|
||||
// for k, v := range dataRow {
|
||||
// realK, ok := keyMaps[k]
|
||||
// if !ok {
|
||||
// realK = k
|
||||
// }
|
||||
// sql += "("
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
@@ -1,4 +1,4 @@
|
||||
package model
|
||||
package legacymodel
|
||||
|
||||
type Jxstorefeature struct {
|
||||
Id int `orm:"column(storeid);pk"`
|
||||
@@ -2,49 +2,23 @@ package model
|
||||
|
||||
import "time"
|
||||
|
||||
func Order2Status(order *GoodsOrder) (retVal *OrderStatus) {
|
||||
retVal = &OrderStatus{
|
||||
VendorOrderID: order.VendorOrderID,
|
||||
VendorID: order.VendorID,
|
||||
OrderType: OrderTypeOrder,
|
||||
RefVendorOrderID: order.VendorOrderID,
|
||||
RefVendorID: order.VendorID,
|
||||
Status: order.Status,
|
||||
VendorStatus: order.VendorStatus,
|
||||
StatusTime: order.StatusTime,
|
||||
LockStatus: order.LockStatus,
|
||||
}
|
||||
return retVal
|
||||
type ModelO struct {
|
||||
ID uint `gorm:"primary_key"`
|
||||
CreatedAt time.Time
|
||||
UpdatedAt time.Time
|
||||
DeletedAt *time.Time `sql:"index"`
|
||||
LastOperator string `gorm:"type:varchar(32)"` // 最后操作员
|
||||
}
|
||||
|
||||
func Waybill2Status(bill *Waybill) (retVal *OrderStatus) {
|
||||
retVal = &OrderStatus{
|
||||
VendorOrderID: bill.VendorWaybillID,
|
||||
VendorID: bill.WaybillVendorID,
|
||||
OrderType: OrderTypeWaybill,
|
||||
RefVendorOrderID: bill.VendorOrderID,
|
||||
RefVendorID: bill.OrderVendorID,
|
||||
Status: bill.Status,
|
||||
VendorStatus: bill.VendorStatus,
|
||||
StatusTime: bill.StatusTime,
|
||||
Remark: bill.Remark,
|
||||
}
|
||||
return retVal
|
||||
type ModelIDCU struct {
|
||||
ID uint `gorm:"primary_key"`
|
||||
CreatedAt time.Time
|
||||
UpdatedAt time.Time
|
||||
}
|
||||
|
||||
// 判断订单是否是临时的,不是真实收到了new order消息后的订单
|
||||
func IsOrderSolid(order *GoodsOrder) bool {
|
||||
return !(order.ConsigneeName == "" && order.ID == 0)
|
||||
}
|
||||
|
||||
func (o *GoodsOrder) GetStatusTime() time.Time {
|
||||
return o.StatusTime
|
||||
}
|
||||
|
||||
func (o *Waybill) GetStatusTime() time.Time {
|
||||
return o.StatusTime
|
||||
}
|
||||
|
||||
func (o *OrderStatus) GetStatusTime() time.Time {
|
||||
return o.StatusTime
|
||||
type ModelIDCUO struct {
|
||||
ID uint `gorm:"primary_key"`
|
||||
CreatedAt time.Time
|
||||
UpdatedAt time.Time
|
||||
LastOperator string `gorm:"type:varchar(32)"` // 最后操作员
|
||||
}
|
||||
|
||||
@@ -144,3 +144,50 @@ func (v *OrderStatus) TableIndex() [][]string {
|
||||
[]string{"VendorOrderID", "Status", "VendorStatus"},
|
||||
}
|
||||
}
|
||||
|
||||
func Order2Status(order *GoodsOrder) (retVal *OrderStatus) {
|
||||
retVal = &OrderStatus{
|
||||
VendorOrderID: order.VendorOrderID,
|
||||
VendorID: order.VendorID,
|
||||
OrderType: OrderTypeOrder,
|
||||
RefVendorOrderID: order.VendorOrderID,
|
||||
RefVendorID: order.VendorID,
|
||||
Status: order.Status,
|
||||
VendorStatus: order.VendorStatus,
|
||||
StatusTime: order.StatusTime,
|
||||
LockStatus: order.LockStatus,
|
||||
}
|
||||
return retVal
|
||||
}
|
||||
|
||||
func Waybill2Status(bill *Waybill) (retVal *OrderStatus) {
|
||||
retVal = &OrderStatus{
|
||||
VendorOrderID: bill.VendorWaybillID,
|
||||
VendorID: bill.WaybillVendorID,
|
||||
OrderType: OrderTypeWaybill,
|
||||
RefVendorOrderID: bill.VendorOrderID,
|
||||
RefVendorID: bill.OrderVendorID,
|
||||
Status: bill.Status,
|
||||
VendorStatus: bill.VendorStatus,
|
||||
StatusTime: bill.StatusTime,
|
||||
Remark: bill.Remark,
|
||||
}
|
||||
return retVal
|
||||
}
|
||||
|
||||
// 判断订单是否是临时的,不是真实收到了new order消息后的订单
|
||||
func IsOrderSolid(order *GoodsOrder) bool {
|
||||
return !(order.ConsigneeName == "" && order.ID == 0)
|
||||
}
|
||||
|
||||
func (o *GoodsOrder) GetStatusTime() time.Time {
|
||||
return o.StatusTime
|
||||
}
|
||||
|
||||
func (o *Waybill) GetStatusTime() time.Time {
|
||||
return o.StatusTime
|
||||
}
|
||||
|
||||
func (o *OrderStatus) GetStatusTime() time.Time {
|
||||
return o.StatusTime
|
||||
}
|
||||
|
||||
24
business/model/place.go
Normal file
24
business/model/place.go
Normal file
@@ -0,0 +1,24 @@
|
||||
package model
|
||||
|
||||
import "time"
|
||||
|
||||
// https://github.com/videni/pcr
|
||||
const (
|
||||
CityLevelProvince = 1
|
||||
CityLevelCity = 2
|
||||
CityLevelDistrict = 3
|
||||
)
|
||||
|
||||
type Place struct {
|
||||
ID uint
|
||||
Code int `gorm:"unique_index"` // 国家标准代码
|
||||
Name string `gorm:"type:varchar(16);index"` // 如果是直辖市,省的概念不加“市”来区别
|
||||
ParentCode int // 上级代码
|
||||
PostCode string `gorm:"type:varchar(8);index"`
|
||||
Level int8 // 城市级别,参见相关常量定义
|
||||
TelCode string `gorm:"type:varchar(8);index"`
|
||||
JdCode int `gorm:"index"` // 对应的京东代码
|
||||
Enabled int8 // 是否启用
|
||||
MtpsPrice int // 分为单位
|
||||
UpdatedAt time.Time
|
||||
}
|
||||
114
business/model/product.go
Normal file
114
business/model/product.go
Normal file
@@ -0,0 +1,114 @@
|
||||
package model
|
||||
|
||||
const (
|
||||
SkuCategoryNormal = 0
|
||||
SkuCategorySpecial = 1
|
||||
)
|
||||
|
||||
const (
|
||||
SpecUnitG = 0
|
||||
SpecUnitKG = 1
|
||||
SpecUnitL = 2
|
||||
SpecUnitML = 3
|
||||
)
|
||||
|
||||
var (
|
||||
SpecUnitNames = []string{
|
||||
"g",
|
||||
"kg",
|
||||
"L",
|
||||
"ml",
|
||||
}
|
||||
)
|
||||
|
||||
var (
|
||||
UnitNames = []string{
|
||||
"份",
|
||||
"袋",
|
||||
"瓶",
|
||||
"只",
|
||||
"组",
|
||||
"个",
|
||||
"盒",
|
||||
"把",
|
||||
"半只",
|
||||
"包",
|
||||
"条",
|
||||
"根",
|
||||
"箱",
|
||||
"听",
|
||||
"套",
|
||||
"罐",
|
||||
"件",
|
||||
"块",
|
||||
"片",
|
||||
"支",
|
||||
"杯",
|
||||
}
|
||||
)
|
||||
|
||||
type SkuCategory struct {
|
||||
ModelIDCUO
|
||||
Name string `gorm:"type:varchar(255);unique_index"`
|
||||
ParentID int
|
||||
Level int8
|
||||
Type int8 // 类别类型
|
||||
Seq int
|
||||
|
||||
JdID string `gorm:"type:varchar(48)"`
|
||||
ElmID string `gorm:"type:varchar(48)"`
|
||||
MtID string `gorm:"type:varchar(48)"`
|
||||
DidiID string `gorm:"type:varchar(48)"`
|
||||
}
|
||||
|
||||
type StoreSkuCategoryMap struct {
|
||||
ModelIDCUO
|
||||
StoreID int
|
||||
SkuCategoryID int
|
||||
|
||||
ElmID string `gorm:"type:varchar(48)"`
|
||||
}
|
||||
|
||||
type SkuName struct {
|
||||
ModelIDCUO
|
||||
Prefix string `gorm:"type:varchar(255)"`
|
||||
Name string `gorm:"type:varchar(255)"`
|
||||
Comment string `gorm:"type:varchar(255)"`
|
||||
|
||||
CategoryID int // 标准类别
|
||||
Status int
|
||||
|
||||
IsGlobal int8 `gorm:"default:1"` // 是否是全部(全国)可见,如果否的话,可见性由SkuPlace决定
|
||||
Unit string `gorm:"type:varchar(8)"`
|
||||
Price int // 单位为分,标准价,不为份的就为实际标准价,为份的为每市斤价,实际还要乘质量。todo 为份的确定必须有质量
|
||||
Img string `gorm:"type:varchar(255)"`
|
||||
ElmImgHashCode string `gorm:"type:varchar(64)"`
|
||||
}
|
||||
|
||||
type Sku struct {
|
||||
ModelIDCUO
|
||||
CategoryID int // 特殊类别,一般用于秒杀,特价之类的特殊类别
|
||||
NameID int `gorm:"index:unique_index_name_Id_quality"` // todo 这个索引应该要求唯一
|
||||
SpecQuality float32 `gorm:"index:unique_index_name_Id_quality"`
|
||||
SpecUnit string `gorm:"type:varchar(8)"`
|
||||
|
||||
Weight int // 单位为克,当相应的SkuName的SpecUnit为g或kg时,必须等于SpecQuality
|
||||
|
||||
JdID string `gorm:"type:varchar(48)"`
|
||||
}
|
||||
|
||||
type SkuNamePlaceBind struct {
|
||||
ModelIDCUO
|
||||
SkuNameID int `gorm:"unique_index:unique_sku_name_id_sku_place_id"`
|
||||
PlaceID int `gorm:"unique_index:unique_sku_name_id_sku_place_id"`
|
||||
}
|
||||
|
||||
type StoreSkuBind struct {
|
||||
ModelIDCUO
|
||||
StoreID int `gorm:"unique_index:unique_store_id_sku_id"`
|
||||
SkuID int `gorm:"unique_index:unique_store_id_sku_id"`
|
||||
SubStoreID int
|
||||
Price int // 单位为分,不用int64的原因是这里不需要累加
|
||||
Status int
|
||||
ElmID string `gorm:"type:varchar(48)"`
|
||||
}
|
||||
59
business/model/store.go
Normal file
59
business/model/store.go
Normal file
@@ -0,0 +1,59 @@
|
||||
package model
|
||||
|
||||
const (
|
||||
StoreStatusDisabled = -1
|
||||
StoreStatusClosed = 0
|
||||
StoreStatusOpened = 1
|
||||
)
|
||||
|
||||
const (
|
||||
MainSubStoreName = "本店"
|
||||
MainSubStoreAddress = "本店"
|
||||
)
|
||||
|
||||
type Store struct {
|
||||
ModelIDCUO
|
||||
Name string `gorm:"type:varchar(255);unique_index"`
|
||||
CityCode int
|
||||
DistrictCode int
|
||||
Address string `gorm:"type:varchar(255)"`
|
||||
OpenTime1 int // 930就表示9点半,用两个的原因是为了支持中午休息,1与2的时间段不能交叉,为0表示没有
|
||||
CloseTime1 int // 格式同上
|
||||
OpenTime2 int // 格式同上
|
||||
CloseTime2 int // 格式同上
|
||||
Lng int // 乘了10的6次方
|
||||
Lat int // 乘了10的6次方
|
||||
Status int
|
||||
}
|
||||
|
||||
type StoreSub struct {
|
||||
ModelIDCUO
|
||||
StoreID int `gorm:"unique_index:unique_index1"`
|
||||
Index int `gorm:"unique_index:unique_index1"` // 子店序号,为0表示主店
|
||||
Name string `gorm:"type:varchar(255)"`
|
||||
Address string `gorm:"type:varchar(255)"`
|
||||
Status int
|
||||
Mobile1 string `gorm:"type:varchar(32)"`
|
||||
Mobile2 string `gorm:"type:varchar(32)"`
|
||||
Mobile3 string `gorm:"type:varchar(32)"`
|
||||
}
|
||||
|
||||
type StoreMap struct {
|
||||
ModelIDCUO
|
||||
StoreID int `gorm:"unique_index:storemap1"`
|
||||
VendorID int `gorm:"unique_index:storemap1"`
|
||||
VendorStoreID string `gorm:"type:varchar(48);unique_index"`
|
||||
Status int
|
||||
|
||||
AutoPickup int8 // 是否自动拣货
|
||||
DeliveryType int8 // 配送类型
|
||||
DeliveryCompetition int8 // 是否支持配送竞争
|
||||
}
|
||||
|
||||
type StoreCourierMap struct {
|
||||
ModelIDCUO
|
||||
StoreID int `gorm:"unique_index:storemap1"`
|
||||
VendorID int `gorm:"unique_index:storemap1"`
|
||||
VendorStoreID string `gorm:"type:varchar(48);unique_index"`
|
||||
Status int
|
||||
}
|
||||
@@ -23,21 +23,30 @@ var (
|
||||
ErrCanNotFindDadaCityCode = errors.New("不能找到美团配送站点配置")
|
||||
)
|
||||
|
||||
type WaybillController struct {
|
||||
var (
|
||||
curDeliveryHandler *DeliveryHandler
|
||||
)
|
||||
|
||||
type DeliveryHandler struct {
|
||||
}
|
||||
|
||||
func init() {
|
||||
scheduler.CurrentScheduler.RegisterDeliveryPlatform(model.VendorIDDada, new(WaybillController), true)
|
||||
curDeliveryHandler = new(DeliveryHandler)
|
||||
scheduler.CurrentScheduler.RegisterDeliveryPlatform(model.VendorIDDada, curDeliveryHandler, true)
|
||||
}
|
||||
|
||||
func (c *WaybillController) OnWaybillMsg(msg *dadaapi.CallbackMsg) (retVal *dadaapi.CallbackResponse) {
|
||||
func OnWaybillMsg(msg *dadaapi.CallbackMsg) (retVal *dadaapi.CallbackResponse) {
|
||||
return curDeliveryHandler.OnWaybillMsg(msg)
|
||||
}
|
||||
|
||||
func (c *DeliveryHandler) OnWaybillMsg(msg *dadaapi.CallbackMsg) (retVal *dadaapi.CallbackResponse) {
|
||||
jxutils.CallMsgHandler(func() {
|
||||
retVal = c.onWaybillMsg(msg)
|
||||
}, msg.OrderID)
|
||||
return retVal
|
||||
}
|
||||
|
||||
func (c *WaybillController) onWaybillMsg(msg *dadaapi.CallbackMsg) (retVal *dadaapi.CallbackResponse) {
|
||||
func (c *DeliveryHandler) onWaybillMsg(msg *dadaapi.CallbackMsg) (retVal *dadaapi.CallbackResponse) {
|
||||
order := c.callbackMsg2Waybill(msg)
|
||||
switch msg.OrderStatus {
|
||||
case dadaapi.OrderStatusWaitingForAccept:
|
||||
@@ -61,7 +70,7 @@ func (c *WaybillController) onWaybillMsg(msg *dadaapi.CallbackMsg) (retVal *dada
|
||||
return dadaapi.Err2CallbackResponse(partner.CurOrderManager.OnWaybillStatusChanged(order), utils.Int2Str(order.Status))
|
||||
}
|
||||
|
||||
func (c *WaybillController) callbackMsg2Waybill(msg *dadaapi.CallbackMsg) (retVal *model.Waybill) {
|
||||
func (c *DeliveryHandler) callbackMsg2Waybill(msg *dadaapi.CallbackMsg) (retVal *model.Waybill) {
|
||||
retVal = &model.Waybill{
|
||||
VendorWaybillID: msg.ClientID,
|
||||
WaybillVendorID: model.VendorIDDada,
|
||||
@@ -82,7 +91,7 @@ func (c *WaybillController) callbackMsg2Waybill(msg *dadaapi.CallbackMsg) (retVa
|
||||
}
|
||||
|
||||
// IDeliveryPlatformHandler
|
||||
func (c *WaybillController) CreateWaybill(order *model.GoodsOrder) (err error) {
|
||||
func (c *DeliveryHandler) CreateWaybill(order *model.GoodsOrder) (err error) {
|
||||
billParams := &dadaapi.OperateOrderRequiredParams{
|
||||
ShopNo: utils.Int2Str(order.StoreID), // 当前达达的门店号与京西是一样的
|
||||
OriginID: jxutils.ComposeUniversalOrderID(order.VendorOrderID, order.VendorID),
|
||||
@@ -126,7 +135,7 @@ func (c *WaybillController) CreateWaybill(order *model.GoodsOrder) (err error) {
|
||||
return err
|
||||
}
|
||||
|
||||
func (c *WaybillController) CancelWaybill(bill *model.Waybill) (err error) {
|
||||
func (c *DeliveryHandler) CancelWaybill(bill *model.Waybill) (err error) {
|
||||
reasonID := dadaapi.ReasonIDOther
|
||||
reasonMsg := "send not in time"
|
||||
if bill.Status < model.WaybillStatusAccepted {
|
||||
@@ -140,7 +149,7 @@ func (c *WaybillController) CancelWaybill(bill *model.Waybill) (err error) {
|
||||
return err
|
||||
}
|
||||
|
||||
func (c *WaybillController) getDataCityCodeFromOrder(order *model.GoodsOrder, db orm.Ormer) (retVal string, err error) {
|
||||
func (c *DeliveryHandler) getDataCityCodeFromOrder(order *model.GoodsOrder, db orm.Ormer) (retVal string, err error) {
|
||||
var sql string
|
||||
if order.VendorID == model.VendorIDJD {
|
||||
sql = `
|
||||
|
||||
@@ -8,7 +8,7 @@ import (
|
||||
"git.rosy.net.cn/jx-callback/business/model"
|
||||
"git.rosy.net.cn/jx-callback/globals"
|
||||
"git.rosy.net.cn/jx-callback/globals/api"
|
||||
"git.rosy.net.cn/jx-callback/globals/db"
|
||||
"git.rosy.net.cn/jx-callback/globals/beegodb"
|
||||
"github.com/astaxie/beego"
|
||||
)
|
||||
|
||||
@@ -17,7 +17,7 @@ func init() {
|
||||
beego.BConfig.RunMode = "dev" // InitBeegoBeforeTest会将runmode设置为test
|
||||
|
||||
globals.Init()
|
||||
db.Init()
|
||||
beegodb.Init()
|
||||
api.Init()
|
||||
}
|
||||
|
||||
@@ -25,7 +25,7 @@ func TestCreateWaybill(t *testing.T) {
|
||||
orderID := "817540316000041"
|
||||
if order, err := orderman.CurOrderManager.LoadOrder(orderID, model.VendorIDJD); err == nil {
|
||||
// globals.SugarLogger.Debug(order)
|
||||
c := new(WaybillController)
|
||||
c := new(DeliveryHandler)
|
||||
if err = c.CreateWaybill(order); err == nil {
|
||||
time.Sleep(1 * time.Second)
|
||||
bill := &model.Waybill{
|
||||
|
||||
@@ -30,21 +30,34 @@ var (
|
||||
ErrStoreNoCoordinate = errors.New("找不到门店的坐标信息")
|
||||
)
|
||||
|
||||
type WaybillController struct {
|
||||
var (
|
||||
curDeliveryHandler *DeliveryHandler
|
||||
)
|
||||
|
||||
type DeliveryHandler struct {
|
||||
}
|
||||
|
||||
func init() {
|
||||
scheduler.CurrentScheduler.RegisterDeliveryPlatform(model.VendorIDMTPS, new(WaybillController), true)
|
||||
curDeliveryHandler = new(DeliveryHandler)
|
||||
scheduler.CurrentScheduler.RegisterDeliveryPlatform(model.VendorIDMTPS, curDeliveryHandler, true)
|
||||
}
|
||||
|
||||
func (c *WaybillController) OnWaybillMsg(msg *mtpsapi.CallbackOrderMsg) (retVal *mtpsapi.CallbackResponse) {
|
||||
func OnWaybillMsg(msg *mtpsapi.CallbackOrderMsg) (retVal *mtpsapi.CallbackResponse) {
|
||||
return curDeliveryHandler.OnWaybillMsg(msg)
|
||||
}
|
||||
|
||||
func OnWaybillExcept(msg *mtpsapi.CallbackOrderExceptionMsg) (retVal *mtpsapi.CallbackResponse) {
|
||||
return curDeliveryHandler.OnWaybillExcept(msg)
|
||||
}
|
||||
|
||||
func (c *DeliveryHandler) OnWaybillMsg(msg *mtpsapi.CallbackOrderMsg) (retVal *mtpsapi.CallbackResponse) {
|
||||
jxutils.CallMsgHandler(func() {
|
||||
retVal = c.onWaybillMsg(msg)
|
||||
}, msg.OrderID)
|
||||
return retVal
|
||||
}
|
||||
|
||||
func (c *WaybillController) OnWaybillExcept(msg *mtpsapi.CallbackOrderExceptionMsg) (retVal *mtpsapi.CallbackResponse) {
|
||||
func (c *DeliveryHandler) OnWaybillExcept(msg *mtpsapi.CallbackOrderExceptionMsg) (retVal *mtpsapi.CallbackResponse) {
|
||||
jxutils.CallMsgHandler(func() {
|
||||
order := &model.Waybill{
|
||||
VendorWaybillID: msg.MtPeisongID,
|
||||
@@ -62,7 +75,7 @@ func (c *WaybillController) OnWaybillExcept(msg *mtpsapi.CallbackOrderExceptionM
|
||||
return retVal
|
||||
}
|
||||
|
||||
func (c *WaybillController) onWaybillMsg(msg *mtpsapi.CallbackOrderMsg) (retVal *mtpsapi.CallbackResponse) {
|
||||
func (c *DeliveryHandler) onWaybillMsg(msg *mtpsapi.CallbackOrderMsg) (retVal *mtpsapi.CallbackResponse) {
|
||||
order := c.callbackMsg2Waybill(msg)
|
||||
switch msg.Status {
|
||||
case mtpsapi.OrderStatusWaitingForSchedule:
|
||||
@@ -83,7 +96,7 @@ func (c *WaybillController) onWaybillMsg(msg *mtpsapi.CallbackOrderMsg) (retVal
|
||||
return mtpsapi.Err2CallbackResponse(partner.CurOrderManager.OnWaybillStatusChanged(order), order.VendorStatus)
|
||||
}
|
||||
|
||||
func (c *WaybillController) callbackMsg2Waybill(msg *mtpsapi.CallbackOrderMsg) (retVal *model.Waybill) {
|
||||
func (c *DeliveryHandler) callbackMsg2Waybill(msg *mtpsapi.CallbackOrderMsg) (retVal *model.Waybill) {
|
||||
retVal = &model.Waybill{
|
||||
VendorWaybillID: msg.MtPeisongID,
|
||||
VendorWaybillID2: utils.Int64ToStr(msg.DeliveryID),
|
||||
@@ -98,7 +111,7 @@ func (c *WaybillController) callbackMsg2Waybill(msg *mtpsapi.CallbackOrderMsg) (
|
||||
return retVal
|
||||
}
|
||||
|
||||
func (c *WaybillController) calculateOrderDeliveryFee(order *model.GoodsOrder, billTime time.Time, db orm.Ormer) (deliveryFee, addFee int64, err error) {
|
||||
func (c *DeliveryHandler) calculateOrderDeliveryFee(order *model.GoodsOrder, billTime time.Time, db orm.Ormer) (deliveryFee, addFee int64, err error) {
|
||||
var lists []orm.ParamsList
|
||||
if db == nil {
|
||||
db = orm.NewOrm()
|
||||
@@ -153,7 +166,7 @@ func (c *WaybillController) calculateOrderDeliveryFee(order *model.GoodsOrder, b
|
||||
return deliveryFee + addFee, addFee, nil
|
||||
}
|
||||
|
||||
func (c *WaybillController) calculateBillDeliveryFee(bill *model.Waybill) (deliveryFee, addFee int64) {
|
||||
func (c *DeliveryHandler) calculateBillDeliveryFee(bill *model.Waybill) (deliveryFee, addFee int64) {
|
||||
order, err := partner.CurOrderManager.LoadOrder(bill.VendorOrderID, bill.OrderVendorID)
|
||||
if err != nil {
|
||||
return 0, 0
|
||||
@@ -163,7 +176,7 @@ func (c *WaybillController) calculateBillDeliveryFee(bill *model.Waybill) (deliv
|
||||
}
|
||||
|
||||
// IDeliveryPlatformHandler
|
||||
func (c *WaybillController) CreateWaybill(order *model.GoodsOrder) (err error) {
|
||||
func (c *DeliveryHandler) CreateWaybill(order *model.GoodsOrder) (err error) {
|
||||
db := orm.NewOrm()
|
||||
_, addFee, err := c.calculateOrderDeliveryFee(order, time.Now(), db)
|
||||
if err == nil {
|
||||
@@ -236,7 +249,7 @@ func (c *WaybillController) CreateWaybill(order *model.GoodsOrder) (err error) {
|
||||
return err
|
||||
}
|
||||
|
||||
func (c *WaybillController) CancelWaybill(bill *model.Waybill) (err error) {
|
||||
func (c *DeliveryHandler) CancelWaybill(bill *model.Waybill) (err error) {
|
||||
reasonID := mtpsapi.CancelReasonRidderSendNotIntime
|
||||
reasonMsg := "CancelReasonRidderSendNotIntime"
|
||||
if bill.Status < model.WaybillStatusAccepted {
|
||||
@@ -250,13 +263,13 @@ func (c *WaybillController) CancelWaybill(bill *model.Waybill) (err error) {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (c *WaybillController) getDeliveryID(order *model.GoodsOrder, db orm.Ormer) (retVal int64, err error) {
|
||||
func (c *DeliveryHandler) getDeliveryID(order *model.GoodsOrder, db orm.Ormer) (retVal int64, err error) {
|
||||
// jxorder表当前已经有50多万条记录了,加100万避免冲突
|
||||
// 508505
|
||||
return order.ID + 1000000, nil
|
||||
}
|
||||
|
||||
func (c *WaybillController) getMTPSShopID(order *model.GoodsOrder, db orm.Ormer) (retVal string, err error) {
|
||||
func (c *DeliveryHandler) getMTPSShopID(order *model.GoodsOrder, db orm.Ormer) (retVal string, err error) {
|
||||
sql := "SELECT zs_store_id FROM jx_to_zs_store_map WHERE jx_store_id = ?"
|
||||
var lists []orm.ParamsList
|
||||
JxStoreID := jxutils.GetJxStoreIDFromOrder(order)
|
||||
|
||||
@@ -7,7 +7,7 @@ import (
|
||||
"git.rosy.net.cn/jx-callback/business/model"
|
||||
"git.rosy.net.cn/jx-callback/globals"
|
||||
"git.rosy.net.cn/jx-callback/globals/api"
|
||||
"git.rosy.net.cn/jx-callback/globals/db"
|
||||
"git.rosy.net.cn/jx-callback/globals/beegodb"
|
||||
"github.com/astaxie/beego"
|
||||
)
|
||||
|
||||
@@ -16,7 +16,7 @@ func init() {
|
||||
beego.BConfig.RunMode = "dev" // InitBeegoBeforeTest会将runmode设置为test
|
||||
|
||||
globals.Init()
|
||||
db.Init()
|
||||
beegodb.Init()
|
||||
api.Init()
|
||||
}
|
||||
|
||||
@@ -24,7 +24,7 @@ func TestCreateWaybill(t *testing.T) {
|
||||
orerID := "817109342000022"
|
||||
order, _ := orderman.CurOrderManager.LoadOrder(orerID, model.VendorIDJD)
|
||||
// globals.SugarLogger.Debug(order)
|
||||
c := new(WaybillController)
|
||||
c := new(DeliveryHandler)
|
||||
if err := c.CreateWaybill(order); err != nil {
|
||||
t.Fatal(err.Error())
|
||||
}
|
||||
@@ -35,7 +35,7 @@ func TestCancelWaybill(t *testing.T) {
|
||||
VendorWaybillID: "1532332342088966",
|
||||
VendorWaybillID2: "55",
|
||||
}
|
||||
c := new(WaybillController)
|
||||
c := new(DeliveryHandler)
|
||||
if err := c.CancelWaybill(bill); err != nil {
|
||||
t.Fatal(err.Error())
|
||||
}
|
||||
|
||||
@@ -3,14 +3,29 @@ package elm
|
||||
import (
|
||||
"git.rosy.net.cn/baseapi/platformapi/elmapi"
|
||||
"git.rosy.net.cn/baseapi/utils"
|
||||
"git.rosy.net.cn/jx-callback/business/jxcallback/scheduler"
|
||||
"git.rosy.net.cn/jx-callback/business/jxutils"
|
||||
"git.rosy.net.cn/jx-callback/business/model"
|
||||
)
|
||||
|
||||
type Controller struct {
|
||||
var (
|
||||
curPurchaseHandler *PurchaseHandler
|
||||
)
|
||||
|
||||
type PurchaseHandler struct {
|
||||
scheduler.BasePurchasePlatform
|
||||
}
|
||||
|
||||
func (c *Controller) OnCallbackMsg(msg *elmapi.CallbackMsg) (retVal *elmapi.CallbackResponse) {
|
||||
func init() {
|
||||
curPurchaseHandler = new(PurchaseHandler)
|
||||
scheduler.CurrentScheduler.RegisterPurchasePlatform(model.VendorIDELM, curPurchaseHandler)
|
||||
}
|
||||
|
||||
func OnCallbackMsg(msg *elmapi.CallbackMsg) (retVal *elmapi.CallbackResponse) {
|
||||
return curPurchaseHandler.OnCallbackMsg(msg)
|
||||
}
|
||||
|
||||
func (c *PurchaseHandler) OnCallbackMsg(msg *elmapi.CallbackMsg) (retVal *elmapi.CallbackResponse) {
|
||||
if msg.Type == elmapi.MsgTypeOrderValid {
|
||||
innerMsg := make(map[string]interface{})
|
||||
err := utils.UnmarshalUseNumber([]byte(msg.Message), &innerMsg)
|
||||
@@ -18,7 +33,7 @@ func (c *Controller) OnCallbackMsg(msg *elmapi.CallbackMsg) (retVal *elmapi.Call
|
||||
retVal = elmapi.Err2CallbackResponse(err, "")
|
||||
} else {
|
||||
innerMsg["msgType"] = msg.Type
|
||||
retVal = new(OrderController).OnOrderNewMsg(innerMsg)
|
||||
retVal = c.OnOrderNewMsg(innerMsg)
|
||||
}
|
||||
} else if msg.Type > elmapi.MsgTypeOrderValid && msg.Type < elmapi.MsgTypeUserApplyCancel {
|
||||
var innerMsg elmapi.CallbackOrderStatusMsg
|
||||
@@ -27,7 +42,7 @@ func (c *Controller) OnCallbackMsg(msg *elmapi.CallbackMsg) (retVal *elmapi.Call
|
||||
retVal = elmapi.Err2CallbackResponse(err, "")
|
||||
} else {
|
||||
innerMsg.MsgType = msg.Type
|
||||
retVal = new(OrderController).OnOrderStatusMsg(&innerMsg)
|
||||
retVal = c.OnOrderStatusMsg(&innerMsg)
|
||||
}
|
||||
} else if msg.Type >= elmapi.MsgTypeUserApplyCancel && msg.Type < elmapi.MsgTypeUserUrgeOrder {
|
||||
var innerMsg elmapi.CallbackOrderCancelRefundMsg
|
||||
@@ -36,7 +51,7 @@ func (c *Controller) OnCallbackMsg(msg *elmapi.CallbackMsg) (retVal *elmapi.Call
|
||||
retVal = elmapi.Err2CallbackResponse(err, "")
|
||||
} else {
|
||||
innerMsg.MsgType = msg.Type
|
||||
retVal = new(OrderController).OnOrderCancelRefundMsg(&innerMsg)
|
||||
retVal = c.OnOrderCancelRefundMsg(&innerMsg)
|
||||
}
|
||||
} else if msg.Type == elmapi.MsgTypeUserUrgeOrder {
|
||||
var innerMsg elmapi.CallbackOrderUrgeMsg
|
||||
@@ -46,7 +61,7 @@ func (c *Controller) OnCallbackMsg(msg *elmapi.CallbackMsg) (retVal *elmapi.Call
|
||||
} else {
|
||||
innerMsg.MsgType = msg.Type
|
||||
jxutils.CallMsgHandler(func() {
|
||||
retVal = new(OrderController).onOrderUserUrgeOrder(&innerMsg)
|
||||
retVal = c.onOrderUserUrgeOrder(&innerMsg)
|
||||
}, jxutils.ComposeUniversalOrderID(innerMsg.OrderID, model.VendorIDELM))
|
||||
}
|
||||
} else if msg.Type >= elmapi.MsgTypeWaybillWait4DeliveryVendor && msg.Type <= elmapi.MsgTypeRejectedSystemError {
|
||||
@@ -56,7 +71,7 @@ func (c *Controller) OnCallbackMsg(msg *elmapi.CallbackMsg) (retVal *elmapi.Call
|
||||
retVal = elmapi.Err2CallbackResponse(err, "")
|
||||
} else {
|
||||
innerMsg.MsgType = msg.Type
|
||||
retVal = new(WaybillController).OnWaybillStatusMsg(&innerMsg)
|
||||
retVal = c.OnWaybillStatusMsg(&innerMsg)
|
||||
}
|
||||
} else {
|
||||
retVal = elmapi.SuccessResponse
|
||||
|
||||
@@ -34,36 +34,28 @@ var (
|
||||
}
|
||||
)
|
||||
|
||||
type OrderController struct {
|
||||
scheduler.BasePurchasePlatform
|
||||
}
|
||||
|
||||
func init() {
|
||||
scheduler.CurrentScheduler.RegisterPurchasePlatform(model.VendorIDELM, new(OrderController))
|
||||
}
|
||||
|
||||
func (c *OrderController) OnOrderStatusMsg(msg *elmapi.CallbackOrderStatusMsg) (retVal *elmapi.CallbackResponse) {
|
||||
func (c *PurchaseHandler) OnOrderStatusMsg(msg *elmapi.CallbackOrderStatusMsg) (retVal *elmapi.CallbackResponse) {
|
||||
jxutils.CallMsgHandler(func() {
|
||||
retVal = c.onOrderStatusMsg(msg)
|
||||
}, jxutils.ComposeUniversalOrderID(msg.OrderID, model.VendorIDELM))
|
||||
return retVal
|
||||
}
|
||||
|
||||
func (c *OrderController) OnOrderNewMsg(msg map[string]interface{}) (retVal *elmapi.CallbackResponse) {
|
||||
func (c *PurchaseHandler) OnOrderNewMsg(msg map[string]interface{}) (retVal *elmapi.CallbackResponse) {
|
||||
jxutils.CallMsgHandler(func() {
|
||||
retVal = c.onOrderNew(msg)
|
||||
}, jxutils.ComposeUniversalOrderID(msg["orderId"].(string), model.VendorIDELM))
|
||||
return retVal
|
||||
}
|
||||
|
||||
func (c *OrderController) OnOrderCancelRefundMsg(msg *elmapi.CallbackOrderCancelRefundMsg) (retVal *elmapi.CallbackResponse) {
|
||||
func (c *PurchaseHandler) OnOrderCancelRefundMsg(msg *elmapi.CallbackOrderCancelRefundMsg) (retVal *elmapi.CallbackResponse) {
|
||||
jxutils.CallMsgHandler(func() {
|
||||
retVal = c.onOrderCancelRefundMsg(msg)
|
||||
}, jxutils.ComposeUniversalOrderID(msg.OrderID, model.VendorIDELM))
|
||||
return retVal
|
||||
}
|
||||
|
||||
func (c *OrderController) orderStatusMsg2Status(msg *elmapi.CallbackOrderStatusMsg) *model.OrderStatus {
|
||||
func (c *PurchaseHandler) orderStatusMsg2Status(msg *elmapi.CallbackOrderStatusMsg) *model.OrderStatus {
|
||||
orderStatus := &model.OrderStatus{
|
||||
VendorOrderID: msg.OrderID,
|
||||
VendorID: model.VendorIDELM,
|
||||
@@ -76,7 +68,7 @@ func (c *OrderController) orderStatusMsg2Status(msg *elmapi.CallbackOrderStatusM
|
||||
return orderStatus
|
||||
}
|
||||
|
||||
func (c *OrderController) cancelRefundMsg2Status(msg *elmapi.CallbackOrderCancelRefundMsg) *model.OrderStatus {
|
||||
func (c *PurchaseHandler) cancelRefundMsg2Status(msg *elmapi.CallbackOrderCancelRefundMsg) *model.OrderStatus {
|
||||
orderStatus := &model.OrderStatus{
|
||||
VendorOrderID: msg.OrderID,
|
||||
VendorID: model.VendorIDELM,
|
||||
@@ -89,7 +81,7 @@ func (c *OrderController) cancelRefundMsg2Status(msg *elmapi.CallbackOrderCancel
|
||||
return orderStatus
|
||||
}
|
||||
|
||||
func (c *OrderController) onOrderStatusMsg(msg *elmapi.CallbackOrderStatusMsg) (retVal *elmapi.CallbackResponse) {
|
||||
func (c *PurchaseHandler) onOrderStatusMsg(msg *elmapi.CallbackOrderStatusMsg) (retVal *elmapi.CallbackResponse) {
|
||||
status := c.orderStatusMsg2Status(msg)
|
||||
switch msg.MsgType {
|
||||
case elmapi.MsgTypeOrderAccepted:
|
||||
@@ -116,7 +108,7 @@ func (c *OrderController) onOrderStatusMsg(msg *elmapi.CallbackOrderStatusMsg) (
|
||||
return elmapi.Err2CallbackResponse(err, status.VendorStatus)
|
||||
}
|
||||
|
||||
func (c *OrderController) onOrderCancelRefundMsg(msg *elmapi.CallbackOrderCancelRefundMsg) (retVal *elmapi.CallbackResponse) {
|
||||
func (c *PurchaseHandler) onOrderCancelRefundMsg(msg *elmapi.CallbackOrderCancelRefundMsg) (retVal *elmapi.CallbackResponse) {
|
||||
status := c.cancelRefundMsg2Status(msg)
|
||||
switch msg.MsgType {
|
||||
case elmapi.MsgTypeUserApplyCancel:
|
||||
@@ -129,7 +121,7 @@ func (c *OrderController) onOrderCancelRefundMsg(msg *elmapi.CallbackOrderCancel
|
||||
return elmapi.Err2CallbackResponse(partner.CurOrderManager.OnOrderStatusChanged(status), status.VendorStatus)
|
||||
}
|
||||
|
||||
func (c *OrderController) GetOrder(orderID string) (order *model.GoodsOrder, err error) {
|
||||
func (c *PurchaseHandler) GetOrder(orderID string) (order *model.GoodsOrder, err error) {
|
||||
result, err := api.ElmAPI.GetOrder(orderID)
|
||||
if err == nil {
|
||||
phoneList := result["phoneList"].([]interface{})
|
||||
@@ -217,7 +209,7 @@ func setOrederDetailFee(result map[string]interface{}, order *model.GoodsOrder)
|
||||
}
|
||||
|
||||
//
|
||||
func (c *OrderController) onOrderNew(msg map[string]interface{}) (response *elmapi.CallbackResponse) {
|
||||
func (c *PurchaseHandler) onOrderNew(msg map[string]interface{}) (response *elmapi.CallbackResponse) {
|
||||
// todo 这里应该可以直接用msg里的内容,而不用再次去查
|
||||
order, err := c.GetOrder(msg["orderId"].(string))
|
||||
if err == nil {
|
||||
@@ -230,7 +222,7 @@ func (c *OrderController) onOrderNew(msg map[string]interface{}) (response *elma
|
||||
return elmapi.Err2CallbackResponse(err, "elm onOrderNew")
|
||||
}
|
||||
|
||||
func (c *OrderController) onOrderUserUrgeOrder(msg *elmapi.CallbackOrderUrgeMsg) *elmapi.CallbackResponse {
|
||||
func (c *PurchaseHandler) onOrderUserUrgeOrder(msg *elmapi.CallbackOrderUrgeMsg) *elmapi.CallbackResponse {
|
||||
status := &model.OrderStatus{
|
||||
VendorOrderID: msg.OrderID,
|
||||
VendorID: model.VendorIDELM,
|
||||
@@ -247,11 +239,11 @@ func (c *OrderController) onOrderUserUrgeOrder(msg *elmapi.CallbackOrderUrgeMsg)
|
||||
return elmapi.Err2CallbackResponse(partner.CurOrderManager.OnOrderStatusChanged(status), status.VendorStatus)
|
||||
}
|
||||
|
||||
func (c *OrderController) stateAndType2Str(state string, msgType int) string {
|
||||
func (c *PurchaseHandler) stateAndType2Str(state string, msgType int) string {
|
||||
return fmt.Sprintf("%s-%d", state, msgType)
|
||||
}
|
||||
|
||||
func (c *OrderController) spliltCompositeState(compositeState string) (state string, msgType int) {
|
||||
func (c *PurchaseHandler) spliltCompositeState(compositeState string) (state string, msgType int) {
|
||||
index := strings.Index(compositeState, "-")
|
||||
if index >= 0 {
|
||||
msgType = int(utils.Str2Int64(compositeState[index+1:]))
|
||||
@@ -264,7 +256,7 @@ func (c *OrderController) spliltCompositeState(compositeState string) (state str
|
||||
}
|
||||
|
||||
// IPurchasePlatformHandler
|
||||
func (c *OrderController) GetStatusFromVendorStatus(vendorStatus string) int {
|
||||
func (c *PurchaseHandler) GetStatusFromVendorStatus(vendorStatus string) int {
|
||||
state, _ := c.spliltCompositeState(vendorStatus)
|
||||
if status, ok := VendorStatus2StatusMap[state]; ok {
|
||||
return status
|
||||
@@ -272,7 +264,7 @@ func (c *OrderController) GetStatusFromVendorStatus(vendorStatus string) int {
|
||||
return model.OrderStatusUnknown
|
||||
}
|
||||
|
||||
func (c *OrderController) AcceptOrRefuseOrder(order *model.GoodsOrder, isAcceptIt bool) (err error) {
|
||||
func (c *PurchaseHandler) AcceptOrRefuseOrder(order *model.GoodsOrder, isAcceptIt bool) (err error) {
|
||||
if isAcceptIt {
|
||||
err = api.ElmAPI.ConfirmOrder(order.VendorOrderID)
|
||||
} else {
|
||||
@@ -283,29 +275,29 @@ func (c *OrderController) AcceptOrRefuseOrder(order *model.GoodsOrder, isAcceptI
|
||||
|
||||
// 饿了么没有拣货这个状态,直接返回成功
|
||||
// 真实流程中也不会调用这个方法,因为接收订单后状态会直接转移到已拣货
|
||||
func (c *OrderController) PickupGoods(order *model.GoodsOrder) (err error) {
|
||||
func (c *PurchaseHandler) PickupGoods(order *model.GoodsOrder) (err error) {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (c *OrderController) Swtich2SelfDeliver(order *model.GoodsOrder) (err error) {
|
||||
func (c *PurchaseHandler) Swtich2SelfDeliver(order *model.GoodsOrder) (err error) {
|
||||
err = api.ElmAPI.DeliveryBySelfLite(order.VendorOrderID)
|
||||
return err
|
||||
}
|
||||
|
||||
// 饿了么转商家自送后,没有确认送达的概念,空操作
|
||||
func (c *OrderController) Swtich2SelfDelivered(order *model.GoodsOrder) (err error) {
|
||||
func (c *PurchaseHandler) Swtich2SelfDelivered(order *model.GoodsOrder) (err error) {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (c *OrderController) SelfDeliverDelievering(order *model.GoodsOrder) (err error) {
|
||||
func (c *PurchaseHandler) SelfDeliverDelievering(order *model.GoodsOrder) (err error) {
|
||||
return api.ElmAPI.StartDeliveryBySelf(order.VendorOrderID, order.ConsigneeMobile)
|
||||
}
|
||||
|
||||
func (c *OrderController) SelfDeliverDelievered(order *model.GoodsOrder) (err error) {
|
||||
func (c *PurchaseHandler) SelfDeliverDelievered(order *model.GoodsOrder) (err error) {
|
||||
return api.ElmAPI.CompleteDeliveryBySelf(order.VendorOrderID, order.ConsigneeMobile)
|
||||
}
|
||||
|
||||
func (c *OrderController) GetStatusActionTimeout(statusType, status int) time.Duration {
|
||||
func (c *PurchaseHandler) GetStatusActionTimeout(statusType, status int) time.Duration {
|
||||
if statusType == scheduler.TimerStatusTypeOrder && status == model.OrderStatusNew {
|
||||
return acceptOrderDelay // 饿了么开了专送店的订单没有拣货状态,接单后就为拣货完成,所以要延迟接单,否则门店来不及备货
|
||||
}
|
||||
|
||||
@@ -9,7 +9,7 @@ import (
|
||||
)
|
||||
|
||||
// 为了兼容之前的表,造出原来需要的数据
|
||||
func (c *OrderController) legacyWriteElmOrder(order *model.GoodsOrder) (err error) {
|
||||
func (c *PurchaseHandler) legacyWriteElmOrder(order *model.GoodsOrder) (err error) {
|
||||
db := orm.NewOrm()
|
||||
_, msgType := c.spliltCompositeState(order.VendorStatus)
|
||||
legacyOrder := &legacymodel.Elemeorder2{
|
||||
@@ -26,7 +26,7 @@ func (c *OrderController) legacyWriteElmOrder(order *model.GoodsOrder) (err erro
|
||||
return err
|
||||
}
|
||||
|
||||
func (c *OrderController) legacyElmOrderStatusChanged(status *model.OrderStatus) (err error) {
|
||||
func (c *PurchaseHandler) legacyElmOrderStatusChanged(status *model.OrderStatus) (err error) {
|
||||
db := orm.NewOrm()
|
||||
legacyOrder := &legacymodel.Elemeorder2{
|
||||
Orderid: status.VendorOrderID,
|
||||
|
||||
@@ -6,7 +6,7 @@ import (
|
||||
_ "git.rosy.net.cn/jx-callback/business/jxcallback/orderman"
|
||||
"git.rosy.net.cn/jx-callback/globals"
|
||||
"git.rosy.net.cn/jx-callback/globals/api"
|
||||
"git.rosy.net.cn/jx-callback/globals/db"
|
||||
"git.rosy.net.cn/jx-callback/globals/beegodb"
|
||||
"github.com/astaxie/beego"
|
||||
)
|
||||
|
||||
@@ -17,13 +17,13 @@ func init() {
|
||||
beego.BConfig.RunMode = "dev" // InitBeegoBeforeTest会将runmode设置为test
|
||||
|
||||
globals.Init()
|
||||
db.Init()
|
||||
beegodb.Init()
|
||||
api.Init()
|
||||
}
|
||||
|
||||
func TestGetOrder(t *testing.T) {
|
||||
orderID := "3025427524410871880"
|
||||
order, err := new(OrderController).GetOrder(orderID)
|
||||
order, err := new(PurchaseHandler).GetOrder(orderID)
|
||||
if err != nil {
|
||||
panic(err.Error())
|
||||
}
|
||||
|
||||
@@ -11,17 +11,14 @@ import (
|
||||
"git.rosy.net.cn/jx-callback/globals/api"
|
||||
)
|
||||
|
||||
type WaybillController struct {
|
||||
}
|
||||
|
||||
func (c *WaybillController) OnWaybillStatusMsg(msg *elmapi.CallbackWaybillStatusMsg) (retVal *elmapi.CallbackResponse) {
|
||||
func (c *PurchaseHandler) OnWaybillStatusMsg(msg *elmapi.CallbackWaybillStatusMsg) (retVal *elmapi.CallbackResponse) {
|
||||
jxutils.CallMsgHandler(func() {
|
||||
retVal = c.onWaybillStatusMsg(msg)
|
||||
}, jxutils.ComposeUniversalOrderID(msg.OrderID, model.VendorIDELM))
|
||||
return retVal
|
||||
}
|
||||
|
||||
func (c *WaybillController) onWaybillStatusMsg(msg *elmapi.CallbackWaybillStatusMsg) (retVal *elmapi.CallbackResponse) {
|
||||
func (c *PurchaseHandler) onWaybillStatusMsg(msg *elmapi.CallbackWaybillStatusMsg) (retVal *elmapi.CallbackResponse) {
|
||||
order := c.callbackMsg2Waybill(msg)
|
||||
if msg.MsgType == elmapi.MsgTypeWaybillWait4Courier { //MsgTypeWaybillWait4Courier事件与JD的新运单事件的时间机制更相似
|
||||
order.Status = model.WaybillStatusNew
|
||||
@@ -51,7 +48,7 @@ func (c *WaybillController) onWaybillStatusMsg(msg *elmapi.CallbackWaybillStatus
|
||||
return elmapi.Err2CallbackResponse(partner.CurOrderManager.OnWaybillStatusChanged(order), order.VendorStatus)
|
||||
}
|
||||
|
||||
func (c *WaybillController) callbackMsg2Waybill(msg *elmapi.CallbackWaybillStatusMsg) (retVal *model.Waybill) {
|
||||
func (c *PurchaseHandler) callbackMsg2Waybill(msg *elmapi.CallbackWaybillStatusMsg) (retVal *model.Waybill) {
|
||||
retVal = &model.Waybill{
|
||||
VendorOrderID: msg.OrderID,
|
||||
OrderVendorID: model.VendorIDELM,
|
||||
@@ -65,6 +62,6 @@ func (c *WaybillController) callbackMsg2Waybill(msg *elmapi.CallbackWaybillStatu
|
||||
return retVal
|
||||
}
|
||||
|
||||
func (c *WaybillController) composeState(state, subState string, msgType int) string {
|
||||
func (c *PurchaseHandler) composeState(state, subState string, msgType int) string {
|
||||
return fmt.Sprintf("%s-%d", state, msgType)
|
||||
}
|
||||
|
||||
60
business/partner/purchase/jd/jd.go
Normal file
60
business/partner/purchase/jd/jd.go
Normal file
@@ -0,0 +1,60 @@
|
||||
package jd
|
||||
|
||||
import (
|
||||
"git.rosy.net.cn/baseapi/platformapi/jdapi"
|
||||
"git.rosy.net.cn/baseapi/utils"
|
||||
"git.rosy.net.cn/jx-callback/business/jxcallback/scheduler"
|
||||
"git.rosy.net.cn/jx-callback/business/model"
|
||||
)
|
||||
|
||||
var (
|
||||
curPurchaseHandler *PurchaseHandler
|
||||
)
|
||||
|
||||
type PurchaseHandler struct {
|
||||
scheduler.BasePurchasePlatform
|
||||
}
|
||||
|
||||
func init() {
|
||||
curPurchaseHandler = new(PurchaseHandler)
|
||||
scheduler.CurrentScheduler.RegisterPurchasePlatform(model.VendorIDJD, curPurchaseHandler)
|
||||
}
|
||||
|
||||
func OnOrderMsg(msg *jdapi.CallbackOrderMsg) (retVal *jdapi.CallbackResponse) {
|
||||
return curPurchaseHandler.OnOrderMsg(msg)
|
||||
}
|
||||
|
||||
func OnWaybillMsg(msg *jdapi.CallbackDeliveryStatusMsg) (retVal *jdapi.CallbackResponse) {
|
||||
return curPurchaseHandler.OnWaybillMsg(msg)
|
||||
}
|
||||
|
||||
func JdOperationTime2JxOperationTime(value1 interface{}) int {
|
||||
value := int(utils.Interface2Int64WithDefault(value1, 0))
|
||||
return (value/2)*100 + (value%2)*30
|
||||
}
|
||||
|
||||
func JxOperationTime2JdOperationTime(value int) int {
|
||||
return (value/100)*2 + (value % 30)
|
||||
}
|
||||
|
||||
func JdStoreStatus2JxStatus(yn, closeStatus interface{}) int {
|
||||
yn2 := utils.Interface2Int64WithDefault(yn, 0)
|
||||
closeStatus2 := utils.Interface2Int64WithDefault(closeStatus, 0)
|
||||
if yn2 == 1 {
|
||||
return model.StoreStatusDisabled
|
||||
} else if closeStatus2 == 1 {
|
||||
return model.StoreStatusClosed
|
||||
}
|
||||
return model.StoreStatusOpened
|
||||
}
|
||||
|
||||
func JxStoreStatus2JdStatus(status int) (yn, closeStatus int) {
|
||||
switch status {
|
||||
case model.StoreStatusDisabled:
|
||||
return 1, 0
|
||||
case model.StoreStatusClosed:
|
||||
return 0, 1
|
||||
default:
|
||||
return 0, 0
|
||||
}
|
||||
}
|
||||
@@ -6,7 +6,6 @@ import (
|
||||
"git.rosy.net.cn/baseapi/platformapi/autonavi"
|
||||
"git.rosy.net.cn/baseapi/platformapi/jdapi"
|
||||
"git.rosy.net.cn/baseapi/utils"
|
||||
"git.rosy.net.cn/jx-callback/business/jxcallback/scheduler"
|
||||
"git.rosy.net.cn/jx-callback/business/jxutils"
|
||||
"git.rosy.net.cn/jx-callback/business/model"
|
||||
"git.rosy.net.cn/jx-callback/business/partner"
|
||||
@@ -32,22 +31,14 @@ var (
|
||||
}
|
||||
)
|
||||
|
||||
type OrderController struct {
|
||||
scheduler.BasePurchasePlatform
|
||||
}
|
||||
|
||||
func init() {
|
||||
scheduler.CurrentScheduler.RegisterPurchasePlatform(model.VendorIDJD, new(OrderController))
|
||||
}
|
||||
|
||||
func (c *OrderController) OnOrderMsg(msg *jdapi.CallbackOrderMsg) (retVal *jdapi.CallbackResponse) {
|
||||
func (c *PurchaseHandler) OnOrderMsg(msg *jdapi.CallbackOrderMsg) (retVal *jdapi.CallbackResponse) {
|
||||
jxutils.CallMsgHandler(func() {
|
||||
retVal = c.onOrderMsg(msg)
|
||||
}, jxutils.ComposeUniversalOrderID(msg.BillID, model.VendorIDJD))
|
||||
return retVal
|
||||
}
|
||||
|
||||
func (c *OrderController) onOrderMsg(msg *jdapi.CallbackOrderMsg) (retVal *jdapi.CallbackResponse) {
|
||||
func (c *PurchaseHandler) onOrderMsg(msg *jdapi.CallbackOrderMsg) (retVal *jdapi.CallbackResponse) {
|
||||
if jdapi.OrderStatusNew == msg.StatusID {
|
||||
retVal = c.onOrderNew(msg)
|
||||
} else if jdapi.OrderStatusAdjust == msg.StatusID {
|
||||
@@ -68,7 +59,7 @@ func (c *OrderController) onOrderMsg(msg *jdapi.CallbackOrderMsg) (retVal *jdapi
|
||||
return retVal
|
||||
}
|
||||
|
||||
func (c *OrderController) GetOrder(orderID string) (order *model.GoodsOrder, err error) {
|
||||
func (c *PurchaseHandler) GetOrder(orderID string) (order *model.GoodsOrder, err error) {
|
||||
result, err := api.JdAPI.QuerySingleOrder(orderID)
|
||||
// globals.SugarLogger.Info(result)
|
||||
if err == nil {
|
||||
@@ -148,7 +139,7 @@ func setOrederDetailFee(result map[string]interface{}, order *model.GoodsOrder)
|
||||
}
|
||||
|
||||
//
|
||||
func (c *OrderController) onOrderNew(msg *jdapi.CallbackOrderMsg) (response *jdapi.CallbackResponse) {
|
||||
func (c *PurchaseHandler) onOrderNew(msg *jdapi.CallbackOrderMsg) (response *jdapi.CallbackResponse) {
|
||||
order, err := c.GetOrder(msg.BillID)
|
||||
if err == nil {
|
||||
err = partner.CurOrderManager.OnOrderNew(order, msg.StatusID)
|
||||
@@ -159,7 +150,7 @@ func (c *OrderController) onOrderNew(msg *jdapi.CallbackOrderMsg) (response *jda
|
||||
return jdapi.Err2CallbackResponse(err, "jd onOrderNew")
|
||||
}
|
||||
|
||||
func (c *OrderController) onOrderAdjust(msg *jdapi.CallbackOrderMsg) *jdapi.CallbackResponse {
|
||||
func (c *PurchaseHandler) onOrderAdjust(msg *jdapi.CallbackOrderMsg) *jdapi.CallbackResponse {
|
||||
order, err := c.GetOrder(msg.BillID)
|
||||
if err == nil {
|
||||
err = partner.CurOrderManager.OnOrderAdjust(order, msg.StatusID)
|
||||
@@ -170,7 +161,7 @@ func (c *OrderController) onOrderAdjust(msg *jdapi.CallbackOrderMsg) *jdapi.Call
|
||||
return jdapi.Err2CallbackResponse(err, "jd onOrderAdjust")
|
||||
}
|
||||
|
||||
func (c *OrderController) callbackMsg2Status(msg *jdapi.CallbackOrderMsg) *model.OrderStatus {
|
||||
func (c *PurchaseHandler) callbackMsg2Status(msg *jdapi.CallbackOrderMsg) *model.OrderStatus {
|
||||
orderStatus := &model.OrderStatus{
|
||||
VendorOrderID: msg.BillID,
|
||||
VendorID: model.VendorIDJD,
|
||||
@@ -186,24 +177,24 @@ func (c *OrderController) callbackMsg2Status(msg *jdapi.CallbackOrderMsg) *model
|
||||
}
|
||||
|
||||
// IPurchasePlatformHandler
|
||||
func (c *OrderController) GetStatusFromVendorStatus(vendorStatus string) int {
|
||||
func (c *PurchaseHandler) GetStatusFromVendorStatus(vendorStatus string) int {
|
||||
if status, ok := VendorStatus2StatusMap[vendorStatus]; ok {
|
||||
return status
|
||||
}
|
||||
return model.OrderStatusUnknown
|
||||
}
|
||||
|
||||
func (c *OrderController) AcceptOrRefuseOrder(order *model.GoodsOrder, isAcceptIt bool) (err error) {
|
||||
func (c *PurchaseHandler) AcceptOrRefuseOrder(order *model.GoodsOrder, isAcceptIt bool) (err error) {
|
||||
_, err = api.JdAPI.OrderAcceptOperate(order.VendorOrderID, isAcceptIt)
|
||||
return err
|
||||
}
|
||||
|
||||
func (c *OrderController) PickupGoods(order *model.GoodsOrder) (err error) {
|
||||
func (c *PurchaseHandler) PickupGoods(order *model.GoodsOrder) (err error) {
|
||||
_, err = api.JdAPI.OrderJDZBDelivery(order.VendorOrderID)
|
||||
return err
|
||||
}
|
||||
|
||||
func (c *OrderController) Swtich2SelfDeliver(order *model.GoodsOrder) (err error) {
|
||||
func (c *PurchaseHandler) Swtich2SelfDeliver(order *model.GoodsOrder) (err error) {
|
||||
_, err = api.JdAPI.ModifySellerDelivery(order.VendorOrderID)
|
||||
if err != nil {
|
||||
if errWithCode, ok := err.(*utils.ErrorWithCode); ok && errWithCode.Level() == 1 {
|
||||
@@ -221,17 +212,17 @@ func (c *OrderController) Swtich2SelfDeliver(order *model.GoodsOrder) (err error
|
||||
return err
|
||||
}
|
||||
|
||||
func (c *OrderController) Swtich2SelfDelivered(order *model.GoodsOrder) (err error) {
|
||||
func (c *PurchaseHandler) Swtich2SelfDelivered(order *model.GoodsOrder) (err error) {
|
||||
_, err = api.JdAPI.DeliveryEndOrder(order.VendorOrderID)
|
||||
return err
|
||||
}
|
||||
|
||||
func (c *OrderController) SelfDeliverDelievering(order *model.GoodsOrder) (err error) {
|
||||
func (c *PurchaseHandler) SelfDeliverDelievering(order *model.GoodsOrder) (err error) {
|
||||
_, err = api.JdAPI.OrderSerllerDelivery(order.VendorOrderID)
|
||||
return err
|
||||
}
|
||||
|
||||
// 京东送达接口都是一样的
|
||||
func (c *OrderController) SelfDeliverDelievered(order *model.GoodsOrder) (err error) {
|
||||
func (c *PurchaseHandler) SelfDeliverDelievered(order *model.GoodsOrder) (err error) {
|
||||
return c.Swtich2SelfDelivered(order)
|
||||
}
|
||||
|
||||
@@ -9,7 +9,7 @@ import (
|
||||
)
|
||||
|
||||
// 为了兼容之前的表,造出原来需要的数据
|
||||
func (c *OrderController) legacyWriteJdOrder(order *model.GoodsOrder, delOldFirst bool) (err error) {
|
||||
func (c *PurchaseHandler) legacyWriteJdOrder(order *model.GoodsOrder, delOldFirst bool) (err error) {
|
||||
db := orm.NewOrm()
|
||||
if delOldFirst {
|
||||
db.Raw("DELETE FROM jdorder2 WHERE jdorderid = ?", utils.Str2Int64(order.VendorOrderID)).Exec()
|
||||
@@ -29,7 +29,7 @@ func (c *OrderController) legacyWriteJdOrder(order *model.GoodsOrder, delOldFirs
|
||||
return err
|
||||
}
|
||||
|
||||
func (c *OrderController) legacyJdOrderStatusChanged(status *model.OrderStatus) (err error) {
|
||||
func (c *PurchaseHandler) legacyJdOrderStatusChanged(status *model.OrderStatus) (err error) {
|
||||
db := orm.NewOrm()
|
||||
legacyOrder := &legacymodel.Jdorder2{
|
||||
Jdorderid: utils.Str2Int64(status.VendorOrderID),
|
||||
|
||||
@@ -7,7 +7,7 @@ import (
|
||||
"git.rosy.net.cn/jx-callback/business/model"
|
||||
"git.rosy.net.cn/jx-callback/globals"
|
||||
"git.rosy.net.cn/jx-callback/globals/api"
|
||||
"git.rosy.net.cn/jx-callback/globals/db"
|
||||
"git.rosy.net.cn/jx-callback/globals/beegodb"
|
||||
"github.com/astaxie/beego"
|
||||
)
|
||||
|
||||
@@ -16,7 +16,7 @@ func init() {
|
||||
beego.BConfig.RunMode = "dev" // InitBeegoBeforeTest会将runmode设置为test
|
||||
|
||||
globals.Init()
|
||||
db.Init()
|
||||
beegodb.Init()
|
||||
api.Init()
|
||||
}
|
||||
|
||||
@@ -24,7 +24,7 @@ func TestSwitch2SelfDeliver(t *testing.T) {
|
||||
orderID := "817540316000041"
|
||||
if order, err := orderman.CurOrderManager.LoadOrder(orderID, model.VendorIDJD); err == nil {
|
||||
// globals.SugarLogger.Debug(order)
|
||||
c := new(OrderController)
|
||||
c := new(PurchaseHandler)
|
||||
if err = c.Swtich2SelfDeliver(order); err == nil {
|
||||
} else {
|
||||
t.Fatal(err.Error())
|
||||
@@ -35,7 +35,7 @@ func TestSwitch2SelfDeliver(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestGetOrder(t *testing.T) {
|
||||
_, err := new(OrderController).GetOrder("815536199000222")
|
||||
_, err := new(PurchaseHandler).GetOrder("815536199000222")
|
||||
if err != nil {
|
||||
t.Fatal(err.Error())
|
||||
}
|
||||
|
||||
67
business/partner/purchase/jd/store.go
Normal file
67
business/partner/purchase/jd/store.go
Normal file
@@ -0,0 +1,67 @@
|
||||
package jd
|
||||
|
||||
import (
|
||||
"git.rosy.net.cn/baseapi/utils"
|
||||
"git.rosy.net.cn/jx-callback/business/model"
|
||||
"git.rosy.net.cn/jx-callback/globals/api"
|
||||
)
|
||||
|
||||
func (p *PurchaseHandler) GetAllStoreIDsFromRemote() ([]string, error) {
|
||||
result, err := api.JdAPI.GetStationsByVenderId()
|
||||
return result, err
|
||||
}
|
||||
|
||||
func (p *PurchaseHandler) GetAllStoresFromRemote() ([]*model.Store, error) {
|
||||
ids, err := p.GetAllStoreIDsFromRemote()
|
||||
if err == nil {
|
||||
retVal := make([]*model.Store, len(ids))
|
||||
for index, id := range ids {
|
||||
store, err2 := p.GetStoreFromRemote(id)
|
||||
if err2 == nil {
|
||||
retVal[index] = store
|
||||
} else {
|
||||
return nil, err2
|
||||
}
|
||||
}
|
||||
return retVal, nil
|
||||
}
|
||||
return nil, err
|
||||
}
|
||||
|
||||
func (p *PurchaseHandler) GetStoreFromRemote(vendorStoreID string) (*model.Store, error) {
|
||||
result, err := api.JdAPI.GetStoreInfoByStationNo(vendorStoreID)
|
||||
if err == nil {
|
||||
retVal := &model.Store{
|
||||
Name: utils.Interface2String(result["stationName"]),
|
||||
Address: utils.Interface2String(result["stationAddress"]),
|
||||
OpenTime1: JdOperationTime2JxOperationTime(result["serviceTimeStart1"]),
|
||||
CloseTime1: JdOperationTime2JxOperationTime(result["serviceTimeEnd1"]),
|
||||
OpenTime2: JdOperationTime2JxOperationTime(result["serviceTimeStart2"]),
|
||||
CloseTime2: JdOperationTime2JxOperationTime(result["serviceTimeEnd2"]),
|
||||
Status: JdStoreStatus2JxStatus(result["yn"], result["closeStatus"]),
|
||||
}
|
||||
retVal.ID = uint(utils.Str2Int64WithDefault(utils.Interface2String(result["outSystemId"]), 0))
|
||||
return retVal, nil
|
||||
}
|
||||
return nil, err
|
||||
}
|
||||
|
||||
func (p *PurchaseHandler) SaveStore2Remote(vendorStoreID string, store *model.Store) error {
|
||||
params := map[string]interface{}{
|
||||
"outSystemId": utils.Int2Str(int(store.ID)),
|
||||
"stationName": store.Name,
|
||||
"stationAddress": store.Address,
|
||||
"serviceTimeStart1": JxOperationTime2JdOperationTime(store.OpenTime1),
|
||||
"serviceTimeEnd1": JxOperationTime2JdOperationTime(store.CloseTime1),
|
||||
"serviceTimeStart2": JxOperationTime2JdOperationTime(store.OpenTime2),
|
||||
"serviceTimeEnd2": JxOperationTime2JdOperationTime(store.CloseTime2),
|
||||
}
|
||||
params["yn"], params["closeStatus"] = JxStoreStatus2JdStatus(store.Status)
|
||||
_, err := api.JdAPI.UpdateStoreInfo4Open(vendorStoreID, "", params)
|
||||
return err
|
||||
}
|
||||
|
||||
func (p *PurchaseHandler) EnableAutoAcceptOrder(vendorStoreID string, isEnabled bool) error {
|
||||
_, err := api.JdAPI.UpdateStoreConfig4Open(vendorStoreID, isEnabled)
|
||||
return err
|
||||
}
|
||||
@@ -9,17 +9,14 @@ import (
|
||||
"git.rosy.net.cn/jx-callback/globals/api"
|
||||
)
|
||||
|
||||
type WaybillController struct {
|
||||
}
|
||||
|
||||
func (c *WaybillController) OnWaybillMsg(msg *jdapi.CallbackDeliveryStatusMsg) (retVal *jdapi.CallbackResponse) {
|
||||
func (c *PurchaseHandler) OnWaybillMsg(msg *jdapi.CallbackDeliveryStatusMsg) (retVal *jdapi.CallbackResponse) {
|
||||
jxutils.CallMsgHandler(func() {
|
||||
retVal = c.onWaybillMsg(msg)
|
||||
}, jxutils.ComposeUniversalOrderID(msg.OrderID, model.VendorIDJD))
|
||||
return retVal
|
||||
}
|
||||
|
||||
func (c *WaybillController) onWaybillMsg(msg *jdapi.CallbackDeliveryStatusMsg) (retVal *jdapi.CallbackResponse) {
|
||||
func (c *PurchaseHandler) onWaybillMsg(msg *jdapi.CallbackDeliveryStatusMsg) (retVal *jdapi.CallbackResponse) {
|
||||
order := c.callbackMsg2Waybill(msg)
|
||||
switch msg.DeliveryStatus {
|
||||
case jdapi.DeliveryStatusWait4Grap:
|
||||
@@ -49,7 +46,7 @@ func (c *WaybillController) onWaybillMsg(msg *jdapi.CallbackDeliveryStatusMsg) (
|
||||
return jdapi.Err2CallbackResponse(partner.CurOrderManager.OnWaybillStatusChanged(order), order.VendorStatus)
|
||||
}
|
||||
|
||||
func (c *WaybillController) callbackMsg2Waybill(msg *jdapi.CallbackDeliveryStatusMsg) (retVal *model.Waybill) {
|
||||
func (c *PurchaseHandler) callbackMsg2Waybill(msg *jdapi.CallbackDeliveryStatusMsg) (retVal *model.Waybill) {
|
||||
retVal = &model.Waybill{
|
||||
VendorOrderID: msg.OrderID,
|
||||
OrderVendorID: model.VendorIDJD,
|
||||
|
||||
@@ -17,6 +17,7 @@ autonaviKey = "4427170f870af2110becb8852d36ab08"
|
||||
callLegacyMsgHandler = false
|
||||
callNewMsgHandler = true
|
||||
generateLegacyJxOrder = false
|
||||
enableStore = true
|
||||
|
||||
[dev]
|
||||
freshFoodServerURL = "http://portal.beta.jxc4.com"
|
||||
@@ -40,7 +41,7 @@ dadaSourceID = "73753"
|
||||
weixinAppID = "wxbf235770edaabc5c"
|
||||
weixinSecret = "ba32b269a068a5b72486a0beafd171e8"
|
||||
|
||||
dbConnectStr = "root:WebServer@1@tcp(127.0.0.1:3306)/jxd_dev_0?charset=utf8&loc=Local"
|
||||
dbConnectStr = "root:WebServer@1@tcp(127.0.0.1:3306)/jxd_dev_0?charset=utf8&loc=Local&parseTime=true"
|
||||
|
||||
[prod]
|
||||
freshFoodServerURL = "http://portal.int.jxc4.com"
|
||||
@@ -64,7 +65,9 @@ dadaSourceID = "6660"
|
||||
weixinAppID = "wx2bb99eb5d2c9b82c"
|
||||
weixinSecret = "6bbbed1443cc062c20a015a64c07a531"
|
||||
|
||||
dbConnectStr = "root:WebServer@1@tcp(db1.int.jxc4.com:3306)/jxd_dev_0?charset=utf8&loc=Local"
|
||||
dbConnectStr = "root:WebServer@1@tcp(db1.int.jxc4.com:3306)/jxd_dev_0?charset=utf8&loc=Local&parseTime=true"
|
||||
|
||||
enableStore = false
|
||||
|
||||
[test]
|
||||
freshFoodServerURL = "http://portal.alpha.int.jxc4.com"
|
||||
@@ -88,4 +91,4 @@ dadaSourceID = "6660"
|
||||
weixinAppID = "wx2bb99eb5d2c9b82c"
|
||||
weixinSecret = "6bbbed1443cc062c20a015a64c07a531"
|
||||
|
||||
dbConnectStr = "root:WebServer@1@tcp(127.0.0.1:3306)/jxd_dev_0?charset=utf8&loc=Local"
|
||||
dbConnectStr = "root:WebServer@1@tcp(127.0.0.1:3306)/jxd_dev_0?charset=utf8&loc=Local&parseTime=true"
|
||||
|
||||
@@ -31,13 +31,12 @@ func (c *DadaOrderController) OrderStatusChanged() {
|
||||
callbackResponse = cc.OrderStatusChanged(obj)
|
||||
}
|
||||
if globals.CallNewMsgHandler {
|
||||
cc2 := &dada.WaybillController{}
|
||||
if globals.CallLegacyMsgHandler {
|
||||
utils.CallFuncAsync(func() {
|
||||
cc2.OnWaybillMsg(obj)
|
||||
dada.OnWaybillMsg(obj)
|
||||
})
|
||||
} else {
|
||||
callbackResponse = cc2.OnWaybillMsg(obj)
|
||||
callbackResponse = dada.OnWaybillMsg(obj)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -33,13 +33,12 @@ func (c *ELMOrderController) MsgPost() {
|
||||
callbackResponse = cc.OrderMessage(obj)
|
||||
}
|
||||
if globals.CallNewMsgHandler {
|
||||
cc2 := &elm.Controller{}
|
||||
if globals.CallLegacyMsgHandler {
|
||||
utils.CallFuncAsync(func() {
|
||||
cc2.OnCallbackMsg(obj)
|
||||
elm.OnCallbackMsg(obj)
|
||||
})
|
||||
} else {
|
||||
callbackResponse = cc2.OnCallbackMsg(obj)
|
||||
callbackResponse = elm.OnCallbackMsg(obj)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -42,13 +42,12 @@ func (c *JDOrderController) orderStatus(isCancelOrder bool) {
|
||||
callbackResponse = cc.OrderStatus(obj)
|
||||
}
|
||||
if globals.CallNewMsgHandler {
|
||||
cc2 := &jd.OrderController{}
|
||||
if globals.CallLegacyMsgHandler {
|
||||
utils.CallFuncAsync(func() {
|
||||
cc2.OnOrderMsg(obj)
|
||||
jd.OnOrderMsg(obj)
|
||||
})
|
||||
} else {
|
||||
callbackResponse = cc2.OnOrderMsg(obj)
|
||||
callbackResponse = jd.OnOrderMsg(obj)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -160,13 +159,12 @@ func (c *JDOrderController) PushDeliveryStatus() {
|
||||
callbackResponse = cc.OrderDeliveryStatus(obj)
|
||||
}
|
||||
if globals.CallNewMsgHandler {
|
||||
cc2 := &jd.WaybillController{}
|
||||
if globals.CallLegacyMsgHandler {
|
||||
utils.CallFuncAsync(func() {
|
||||
cc2.OnWaybillMsg(obj)
|
||||
jd.OnWaybillMsg(obj)
|
||||
})
|
||||
} else {
|
||||
callbackResponse = cc2.OnWaybillMsg(obj)
|
||||
callbackResponse = jd.OnWaybillMsg(obj)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -32,13 +32,12 @@ func (c *MTPSOrderController) Status() {
|
||||
callbackResponse = cc.OrderStatusChanged(obj)
|
||||
}
|
||||
if globals.CallNewMsgHandler {
|
||||
cc2 := &mtps.WaybillController{}
|
||||
if globals.CallLegacyMsgHandler {
|
||||
utils.CallFuncAsync(func() {
|
||||
cc2.OnWaybillMsg(obj)
|
||||
mtps.OnWaybillMsg(obj)
|
||||
})
|
||||
} else {
|
||||
callbackResponse = cc2.OnWaybillMsg(obj)
|
||||
callbackResponse = mtps.OnWaybillMsg(obj)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -59,13 +58,12 @@ func (c *MTPSOrderController) Except() {
|
||||
callbackResponse = cc.OrderException(obj)
|
||||
}
|
||||
if globals.CallNewMsgHandler {
|
||||
cc2 := &mtps.WaybillController{}
|
||||
if globals.CallLegacyMsgHandler {
|
||||
utils.CallFuncAsync(func() {
|
||||
cc2.OnWaybillExcept(obj)
|
||||
mtps.OnWaybillExcept(obj)
|
||||
})
|
||||
} else {
|
||||
callbackResponse = cc2.OnWaybillExcept(obj)
|
||||
callbackResponse = mtps.OnWaybillExcept(obj)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,7 +8,6 @@ import (
|
||||
"git.rosy.net.cn/baseapi/platformapi/mtpsapi"
|
||||
"git.rosy.net.cn/baseapi/platformapi/weixinapi"
|
||||
"git.rosy.net.cn/baseapi/utils"
|
||||
_ "git.rosy.net.cn/jx-callback/globals/db"
|
||||
"github.com/astaxie/beego"
|
||||
|
||||
"github.com/astaxie/beego/orm"
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package db
|
||||
package beegodb
|
||||
|
||||
import (
|
||||
"git.rosy.net.cn/jx-callback/business/legacymodel"
|
||||
@@ -7,7 +7,6 @@ import (
|
||||
"git.rosy.net.cn/jx-callback/legacy/models"
|
||||
"github.com/astaxie/beego"
|
||||
"github.com/astaxie/beego/orm"
|
||||
_ "github.com/go-sql-driver/mysql" // import your used driver
|
||||
)
|
||||
|
||||
func Init() {
|
||||
@@ -24,7 +23,7 @@ func Init() {
|
||||
orm.RegisterModel(new(model.Waybill))
|
||||
orm.RegisterModel(new(model.OrderStatus))
|
||||
|
||||
orm.RegisterModel(new(model.Jxstorefeature))
|
||||
orm.RegisterModel(new(legacymodel.Jxstorefeature))
|
||||
|
||||
orm.RegisterModel(new(legacymodel.TempLog))
|
||||
orm.RegisterModel(new(legacymodel.Jxorder2))
|
||||
@@ -4,6 +4,7 @@ import (
|
||||
"git.rosy.net.cn/baseapi"
|
||||
"github.com/astaxie/beego"
|
||||
"github.com/astaxie/beego/logs"
|
||||
_ "github.com/go-sql-driver/mysql" // import your used driver
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
|
||||
41
globals/gormdb/gormdb.go
Normal file
41
globals/gormdb/gormdb.go
Normal file
@@ -0,0 +1,41 @@
|
||||
package gormdb
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"git.rosy.net.cn/jx-callback/business/model"
|
||||
"github.com/astaxie/beego"
|
||||
"github.com/jinzhu/gorm"
|
||||
)
|
||||
|
||||
var (
|
||||
dbStr string
|
||||
)
|
||||
|
||||
func Init() {
|
||||
dbStr = beego.AppConfig.String("dbConnectStr")
|
||||
AutoMigrate()
|
||||
// globals.SugarLogger.Debug("fuck")
|
||||
}
|
||||
|
||||
func GetDB() *gorm.DB {
|
||||
db, err := gorm.Open("mysql", dbStr)
|
||||
if err == nil {
|
||||
return db
|
||||
}
|
||||
panic(fmt.Sprintf("AutoMigrate failed with error:%v", err))
|
||||
}
|
||||
|
||||
func AutoMigrate() {
|
||||
db := GetDB()
|
||||
db.SingularTable(true)
|
||||
|
||||
// db.DropTableIfExists(&model.Place{})
|
||||
// db.DropTableIfExists(&model.Store{}, &model.StoreSub{}, &model.StoreMap{})
|
||||
// db.DropTableIfExists(&model.SkuCategory{}, &model.StoreSkuCategoryMap{}, &model.SkuName{}, &model.Sku{}, &model.SkuNamePlaceBind{}, &model.StoreSkuBind{})
|
||||
|
||||
db.AutoMigrate(&model.Place{})
|
||||
db.AutoMigrate(&model.Store{}, &model.StoreSub{}, &model.StoreMap{})
|
||||
db.AutoMigrate(&model.StoreSkuCategoryMap{}, &model.SkuName{}, &model.Sku{}, &model.SkuNamePlaceBind{}, &model.StoreSkuBind{})
|
||||
db.Set("gorm:table_options", "CHARSET=utf8mb4").AutoMigrate(&model.SkuCategory{})
|
||||
}
|
||||
14
main.go
14
main.go
@@ -3,12 +3,14 @@ package main
|
||||
import (
|
||||
"flag"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"os"
|
||||
|
||||
"git.rosy.net.cn/jx-callback/business/jxcallback/orderman"
|
||||
"git.rosy.net.cn/jx-callback/business/jxstore/cms"
|
||||
"git.rosy.net.cn/jx-callback/globals"
|
||||
"git.rosy.net.cn/jx-callback/globals/api"
|
||||
"git.rosy.net.cn/jx-callback/globals/db"
|
||||
"git.rosy.net.cn/jx-callback/globals/beegodb"
|
||||
"git.rosy.net.cn/jx-callback/legacy/jd/controller"
|
||||
"git.rosy.net.cn/jx-callback/legacy/tasks"
|
||||
_ "git.rosy.net.cn/jx-callback/routers"
|
||||
@@ -26,7 +28,7 @@ var (
|
||||
|
||||
func Init() {
|
||||
// globals.Init()
|
||||
db.Init()
|
||||
beegodb.Init()
|
||||
api.Init()
|
||||
}
|
||||
|
||||
@@ -88,6 +90,14 @@ func main() {
|
||||
}
|
||||
orderman.LoadPendingOrders()
|
||||
}
|
||||
if beego.AppConfig.DefaultBool("enableStore", false) {
|
||||
cms.Init()
|
||||
mux := http.NewServeMux()
|
||||
curAdmin := cms.GetAdmin()
|
||||
curAdmin.MountTo("/admin", mux)
|
||||
beego.Handler("/admin/*", mux)
|
||||
}
|
||||
|
||||
if beego.BConfig.RunMode == "dev" {
|
||||
beego.BConfig.WebConfig.DirectoryIndex = true
|
||||
beego.BConfig.WebConfig.StaticDir["/swagger"] = "swagger"
|
||||
|
||||
Reference in New Issue
Block a user