From c5db19045d119452bee425d3afcda490f0aa91f8 Mon Sep 17 00:00:00 2001 From: gazebo Date: Fri, 17 Aug 2018 16:42:16 +0800 Subject: [PATCH] - continue refactoring... --- .../jxcallback/scheduler/defsch/defsch.go | 2 +- business/jxstore/cms/cms.go | 72 +++++++++++ .../{model => legacymodel}/jxstorefeature.go | 2 +- business/model/model.go | 56 +++------ business/model/order.go | 47 ++++++++ business/model/place.go | 24 ++++ business/model/product.go | 114 ++++++++++++++++++ business/model/store.go | 59 +++++++++ business/partner/delivery/dada/waybill.go | 25 ++-- .../partner/delivery/dada/waybill_test.go | 6 +- business/partner/delivery/mtps/waybill.go | 37 ++++-- .../partner/delivery/mtps/waybill_test.go | 8 +- business/partner/purchase/elm/elm.go | 29 +++-- business/partner/purchase/elm/order.go | 48 +++----- business/partner/purchase/elm/order_legacy.go | 4 +- business/partner/purchase/elm/order_test.go | 6 +- business/partner/purchase/elm/waybill.go | 11 +- business/partner/purchase/jd/jd.go | 60 +++++++++ business/partner/purchase/jd/order.go | 35 ++---- business/partner/purchase/jd/order_legacy.go | 4 +- business/partner/purchase/jd/order_test.go | 8 +- business/partner/purchase/jd/store.go | 67 ++++++++++ business/partner/purchase/jd/waybill.go | 9 +- conf/app.conf | 9 +- controllers/dada_order.go | 5 +- controllers/elm_order.go | 5 +- controllers/jd_order.go | 10 +- controllers/mtps_order.go | 10 +- globals/api/api.go | 1 - globals/{db/db.go => beegodb/beegodb.go} | 5 +- globals/globals.go | 1 + globals/gormdb/gormdb.go | 41 +++++++ main.go | 14 ++- 33 files changed, 656 insertions(+), 178 deletions(-) create mode 100644 business/jxstore/cms/cms.go rename business/{model => legacymodel}/jxstorefeature.go (98%) create mode 100644 business/model/place.go create mode 100644 business/model/product.go create mode 100644 business/model/store.go create mode 100644 business/partner/purchase/jd/jd.go create mode 100644 business/partner/purchase/jd/store.go rename globals/{db/db.go => beegodb/beegodb.go} (89%) create mode 100644 globals/gormdb/gormdb.go diff --git a/business/jxcallback/scheduler/defsch/defsch.go b/business/jxcallback/scheduler/defsch/defsch.go index 3127f8978..cd7da0f2d 100644 --- a/business/jxcallback/scheduler/defsch/defsch.go +++ b/business/jxcallback/scheduler/defsch/defsch.go @@ -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 { diff --git a/business/jxstore/cms/cms.go b/business/jxstore/cms/cms.go new file mode 100644 index 000000000..ebaef5b20 --- /dev/null +++ b/business/jxstore/cms/cms.go @@ -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 += "(" +// } +// } +// } diff --git a/business/model/jxstorefeature.go b/business/legacymodel/jxstorefeature.go similarity index 98% rename from business/model/jxstorefeature.go rename to business/legacymodel/jxstorefeature.go index d1b0cb1bd..219fbc806 100644 --- a/business/model/jxstorefeature.go +++ b/business/legacymodel/jxstorefeature.go @@ -1,4 +1,4 @@ -package model +package legacymodel type Jxstorefeature struct { Id int `orm:"column(storeid);pk"` diff --git a/business/model/model.go b/business/model/model.go index c79569df4..f88b88a21 100644 --- a/business/model/model.go +++ b/business/model/model.go @@ -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)"` // 最后操作员 } diff --git a/business/model/order.go b/business/model/order.go index af90dce21..3f38164a7 100644 --- a/business/model/order.go +++ b/business/model/order.go @@ -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 +} diff --git a/business/model/place.go b/business/model/place.go new file mode 100644 index 000000000..84fdffeae --- /dev/null +++ b/business/model/place.go @@ -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 +} diff --git a/business/model/product.go b/business/model/product.go new file mode 100644 index 000000000..02db27f5d --- /dev/null +++ b/business/model/product.go @@ -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)"` +} diff --git a/business/model/store.go b/business/model/store.go new file mode 100644 index 000000000..e5f9c7352 --- /dev/null +++ b/business/model/store.go @@ -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 +} diff --git a/business/partner/delivery/dada/waybill.go b/business/partner/delivery/dada/waybill.go index 83b3a443e..6a9346c8c 100644 --- a/business/partner/delivery/dada/waybill.go +++ b/business/partner/delivery/dada/waybill.go @@ -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 = ` diff --git a/business/partner/delivery/dada/waybill_test.go b/business/partner/delivery/dada/waybill_test.go index 5e1825226..cc91e8d80 100644 --- a/business/partner/delivery/dada/waybill_test.go +++ b/business/partner/delivery/dada/waybill_test.go @@ -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{ diff --git a/business/partner/delivery/mtps/waybill.go b/business/partner/delivery/mtps/waybill.go index e645bf64f..24d18b20d 100644 --- a/business/partner/delivery/mtps/waybill.go +++ b/business/partner/delivery/mtps/waybill.go @@ -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) diff --git a/business/partner/delivery/mtps/waybill_test.go b/business/partner/delivery/mtps/waybill_test.go index 2d7363d1e..ac78c2f73 100644 --- a/business/partner/delivery/mtps/waybill_test.go +++ b/business/partner/delivery/mtps/waybill_test.go @@ -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()) } diff --git a/business/partner/purchase/elm/elm.go b/business/partner/purchase/elm/elm.go index 79b1f20ab..a28638554 100644 --- a/business/partner/purchase/elm/elm.go +++ b/business/partner/purchase/elm/elm.go @@ -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 diff --git a/business/partner/purchase/elm/order.go b/business/partner/purchase/elm/order.go index 739eb292e..9817b8255 100644 --- a/business/partner/purchase/elm/order.go +++ b/business/partner/purchase/elm/order.go @@ -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 // 饿了么开了专送店的订单没有拣货状态,接单后就为拣货完成,所以要延迟接单,否则门店来不及备货 } diff --git a/business/partner/purchase/elm/order_legacy.go b/business/partner/purchase/elm/order_legacy.go index 99bf60096..91976d239 100644 --- a/business/partner/purchase/elm/order_legacy.go +++ b/business/partner/purchase/elm/order_legacy.go @@ -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, diff --git a/business/partner/purchase/elm/order_test.go b/business/partner/purchase/elm/order_test.go index 189c85aaa..cb9f43625 100644 --- a/business/partner/purchase/elm/order_test.go +++ b/business/partner/purchase/elm/order_test.go @@ -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()) } diff --git a/business/partner/purchase/elm/waybill.go b/business/partner/purchase/elm/waybill.go index 9ee85e9a2..7d4dd4213 100644 --- a/business/partner/purchase/elm/waybill.go +++ b/business/partner/purchase/elm/waybill.go @@ -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) } diff --git a/business/partner/purchase/jd/jd.go b/business/partner/purchase/jd/jd.go new file mode 100644 index 000000000..011d6cf22 --- /dev/null +++ b/business/partner/purchase/jd/jd.go @@ -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 + } +} diff --git a/business/partner/purchase/jd/order.go b/business/partner/purchase/jd/order.go index bedd36d27..b1e239ae8 100644 --- a/business/partner/purchase/jd/order.go +++ b/business/partner/purchase/jd/order.go @@ -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) } diff --git a/business/partner/purchase/jd/order_legacy.go b/business/partner/purchase/jd/order_legacy.go index 587b2f1fe..d3a20cf28 100644 --- a/business/partner/purchase/jd/order_legacy.go +++ b/business/partner/purchase/jd/order_legacy.go @@ -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), diff --git a/business/partner/purchase/jd/order_test.go b/business/partner/purchase/jd/order_test.go index fbff2ed90..1e1f7188a 100644 --- a/business/partner/purchase/jd/order_test.go +++ b/business/partner/purchase/jd/order_test.go @@ -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()) } diff --git a/business/partner/purchase/jd/store.go b/business/partner/purchase/jd/store.go new file mode 100644 index 000000000..e570d5e38 --- /dev/null +++ b/business/partner/purchase/jd/store.go @@ -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 +} diff --git a/business/partner/purchase/jd/waybill.go b/business/partner/purchase/jd/waybill.go index 5f7483206..b2237bd6f 100644 --- a/business/partner/purchase/jd/waybill.go +++ b/business/partner/purchase/jd/waybill.go @@ -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, diff --git a/conf/app.conf b/conf/app.conf index b13505cdc..8c7164d32 100644 --- a/conf/app.conf +++ b/conf/app.conf @@ -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" diff --git a/controllers/dada_order.go b/controllers/dada_order.go index efce331f1..5979c7034 100644 --- a/controllers/dada_order.go +++ b/controllers/dada_order.go @@ -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) } } } diff --git a/controllers/elm_order.go b/controllers/elm_order.go index aec3e3bf5..f69e21d02 100644 --- a/controllers/elm_order.go +++ b/controllers/elm_order.go @@ -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) } } } diff --git a/controllers/jd_order.go b/controllers/jd_order.go index 6089f3aa3..d89df81fc 100644 --- a/controllers/jd_order.go +++ b/controllers/jd_order.go @@ -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) } } } diff --git a/controllers/mtps_order.go b/controllers/mtps_order.go index 9862fe8b4..3c7228cb9 100644 --- a/controllers/mtps_order.go +++ b/controllers/mtps_order.go @@ -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) } } } diff --git a/globals/api/api.go b/globals/api/api.go index 4ae374e7e..d858f8bd0 100644 --- a/globals/api/api.go +++ b/globals/api/api.go @@ -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" diff --git a/globals/db/db.go b/globals/beegodb/beegodb.go similarity index 89% rename from globals/db/db.go rename to globals/beegodb/beegodb.go index 4033ddac2..8ce86442f 100644 --- a/globals/db/db.go +++ b/globals/beegodb/beegodb.go @@ -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)) diff --git a/globals/globals.go b/globals/globals.go index 4f9789676..ac95802a5 100644 --- a/globals/globals.go +++ b/globals/globals.go @@ -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" ) diff --git a/globals/gormdb/gormdb.go b/globals/gormdb/gormdb.go new file mode 100644 index 000000000..eb5075b86 --- /dev/null +++ b/globals/gormdb/gormdb.go @@ -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{}) +} diff --git a/main.go b/main.go index 0ac6af621..e5082342b 100644 --- a/main.go +++ b/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"