diff --git a/business/model/store.go b/business/model/store.go index 58bb4da7a..e80df9660 100644 --- a/business/model/store.go +++ b/business/model/store.go @@ -305,30 +305,33 @@ var ( type Store struct { ModelIDCULD - OriginalName string `orm:"-" json:"originalName"` - Name string `orm:"size(255)" json:"name"` - CityCode int `orm:"default(0);null" json:"cityCode"` // todo ? - DistrictCode int `orm:"default(0);null" json:"districtCode"` // todo ? - Address string `orm:"size(255)" json:"address"` - Tel1 string `orm:"size(32);index" json:"tel1"` - Tel2 string `orm:"size(32);index" json:"tel2"` - OpenTime1 int16 `json:"openTime1" validate:"max=2359,min=1,ltfield=CloseTime1"` // 930就表示9点半,用两个的原因是为了支持中午休息,1与2的时间段不能交叉,为0表示没有 - CloseTime1 int16 `json:"closeTime1" validate:"max=2359,min=1` // 格式同上 - OpenTime2 int16 `json:"openTime2" validate:"max=2359,min=1,ltfield=CloseTime2"` // 格式同上 - CloseTime2 int16 `json:"closeTime2" validate:"max=2359,min=1` // 格式同上 - Lng int `json:"-"` // 乘了10的6次方 - Lat int `json:"-"` // 乘了10的6次方 - DeliveryRangeType int8 `json:"deliveryRangeType"` // 参见相关常量定义 - DeliveryRange string `orm:"type(text)" json:"deliveryRange"` // 如果DeliveryRangeType为DeliveryRangeTypePolygon,则为逗号分隔坐标,分号分隔的坐标点(坐标与Lng和Lat一样,都是整数),比如 121361504,31189308;121420555,31150238。否则为半径,单位为米 - Status int `json:"status"` - AutoEnableAt *time.Time `orm:"type(datetime);null" json:"autoEnableAt"` // 自动营业时间(临时休息用) - ChangePriceType int8 `json:"changePriceType"` // 修改价格类型,即是否需要审核 - SMSNotify int8 `orm:"column(sms_notify);" json:"smsNotify"` // 是否通过短信接收订单消息(每天只推一条) - SMSNotifyMark int8 `orm:"column(sms_notify_mark);" json:"smsNotifyMark"` //今天是否已经推送过订单消息 - AutoReplyType int8 `json:"autoReplyType"` // 订单评价自动回复类型 - LinkStoreID int `orm:"column(link_store_id);default(0);index" json:"linkStoreID"` // 关联门店ID - StoreLevel string `orm:"default(C);size(32)" json:"storeLevel"` // 门店等级(筛选用,京西的) - Comment string `orm:"size(255)" json:"comment"` //门店备注 + RowID int64 `json:"rowID"` //标识这条数据(抖店用) + StoreCode string `json:"storeCode"` //门店编码(抖店用) + OpenTime map[int64]string `json:"openTime"` //营业时间(抖店用) + OriginalName string `orm:"-" json:"originalName"` + Name string `orm:"size(255)" json:"name"` + CityCode int `orm:"default(0);null" json:"cityCode"` // todo ? + DistrictCode int `orm:"default(0);null" json:"districtCode"` // todo ? + Address string `orm:"size(255)" json:"address"` + Tel1 string `orm:"size(32);index" json:"tel1"` + Tel2 string `orm:"size(32);index" json:"tel2"` + OpenTime1 int16 `json:"openTime1" validate:"max=2359,min=1,ltfield=CloseTime1"` // 930就表示9点半,用两个的原因是为了支持中午休息,1与2的时间段不能交叉,为0表示没有 + CloseTime1 int16 `json:"closeTime1" validate:"max=2359,min=1` // 格式同上 + OpenTime2 int16 `json:"openTime2" validate:"max=2359,min=1,ltfield=CloseTime2"` // 格式同上 + CloseTime2 int16 `json:"closeTime2" validate:"max=2359,min=1` // 格式同上 + Lng int `json:"-"` // 乘了10的6次方 + Lat int `json:"-"` // 乘了10的6次方 + DeliveryRangeType int8 `json:"deliveryRangeType"` // 参见相关常量定义 + DeliveryRange string `orm:"type(text)" json:"deliveryRange"` // 如果DeliveryRangeType为DeliveryRangeTypePolygon,则为逗号分隔坐标,分号分隔的坐标点(坐标与Lng和Lat一样,都是整数),比如 121361504,31189308;121420555,31150238。否则为半径,单位为米 + Status int `json:"status"` + AutoEnableAt *time.Time `orm:"type(datetime);null" json:"autoEnableAt"` // 自动营业时间(临时休息用) + ChangePriceType int8 `json:"changePriceType"` // 修改价格类型,即是否需要审核 + SMSNotify int8 `orm:"column(sms_notify);" json:"smsNotify"` // 是否通过短信接收订单消息(每天只推一条) + SMSNotifyMark int8 `orm:"column(sms_notify_mark);" json:"smsNotifyMark"` //今天是否已经推送过订单消息 + AutoReplyType int8 `json:"autoReplyType"` // 订单评价自动回复类型 + LinkStoreID int `orm:"column(link_store_id);default(0);index" json:"linkStoreID"` // 关联门店ID + StoreLevel string `orm:"default(C);size(32)" json:"storeLevel"` // 门店等级(筛选用,京西的) + Comment string `orm:"size(255)" json:"comment"` //门店备注 PrinterDisabled int8 `orm:"default(0)" json:"printerDisabled"` // 是否禁用网络打印机 PrinterFontSize int8 `orm:"default(0)" json:"printerFontSize"` // 打印字体0:(正常大小1份),1:(大字体一份),2(正常字体两份),3(打字体两份) diff --git a/business/partner/purchase/doudian/doudian.go b/business/partner/purchase/doudian/doudian.go new file mode 100644 index 000000000..32d96aa8f --- /dev/null +++ b/business/partner/purchase/doudian/doudian.go @@ -0,0 +1,232 @@ +package doudian + +import ( + "git.rosy.net.cn/jx-callback/business/jxutils/jxcontext" + "git.rosy.net.cn/jx-callback/business/jxutils/tasksch" + "git.rosy.net.cn/jx-callback/business/model" + "git.rosy.net.cn/jx-callback/business/model/dao" + "git.rosy.net.cn/jx-callback/business/partner" + "git.rosy.net.cn/jx-callback/business/partner/putils" + "git.rosy.net.cn/jx-callback/globals/api" +) + +var ( + CurPurchaseHandler *PurchaseHandler +) + +type PurchaseHandler struct { + partner.BasePurchasePlatform + putils.DefSingleStorePlatform +} + +func (P *PurchaseHandler) SyncAct(ctx *jxcontext.Context, parentTask tasksch.ITask, act *model.Act2, actOrderRules []*model.ActOrderRule, actStoreSkuList []*model.ActStoreSku2) (err error) { + //TODO implement me + panic("implement me") +} + +func (P *PurchaseHandler) GetActAmple(ctx *jxcontext.Context, vendorStoreID, vendorOrgCode string) (ample int, err error) { + //TODO implement me + panic("implement me") +} + +func (P *PurchaseHandler) Map2Order(orderData map[string]interface{}) (order *model.GoodsOrder) { + //TODO implement me + panic("implement me") +} + +func (P *PurchaseHandler) GetOrder(vendorOrgCode, vendorOrderID, vendorStoreID string) (order *model.GoodsOrder, err error) { + //TODO implement me + panic("implement me") +} + +func (P *PurchaseHandler) GetOrderStatus(vendorOrgCode, vendorOrderID string) (status int, err error) { + //TODO implement me + panic("implement me") +} + +func (P *PurchaseHandler) AcceptOrRefuseOrder(order *model.GoodsOrder, isAcceptIt bool, userName string) (err error) { + //TODO implement me + panic("implement me") +} + +func (P *PurchaseHandler) PickupGoods(order *model.GoodsOrder, isSelfDelivery bool, userName string) (err error) { + //TODO implement me + panic("implement me") +} + +func (P *PurchaseHandler) AcceptOrRefuseFailedGetOrder(ctx *jxcontext.Context, order *model.GoodsOrder, isAcceptIt bool) (err error) { + //TODO implement me + panic("implement me") +} + +func (P *PurchaseHandler) CallCourier(ctx *jxcontext.Context, order *model.GoodsOrder) (err error) { + //TODO implement me + panic("implement me") +} + +func (P *PurchaseHandler) ConfirmReceiveGoods(ctx *jxcontext.Context, order *model.GoodsOrder) (err error) { + //TODO implement me + panic("implement me") +} + +func (P *PurchaseHandler) Swtich2SelfDeliver(order *model.GoodsOrder, userName string) (err error) { + //TODO implement me + panic("implement me") +} + +func (P *PurchaseHandler) Swtich2SelfDelivered(order *model.GoodsOrder, userName string) (err error) { + //TODO implement me + panic("implement me") +} + +func (P *PurchaseHandler) SelfDeliverDelivering(order *model.GoodsOrder, userName string) (err error) { + //TODO implement me + panic("implement me") +} + +func (P *PurchaseHandler) GetCancelDeliveryReason(order *model.GoodsOrder) (string, error) { + //TODO implement me + panic("implement me") +} + +func (P *PurchaseHandler) CancelLogisticsByWmOrderId(order *model.GoodsOrder, reasonCode, detailContent, appPoiCode, orderId string) error { + //TODO implement me + panic("implement me") +} + +func (P *PurchaseHandler) OrderLogisticsStatus(orderId int64) (int64, error) { + //TODO implement me + panic("implement me") +} + +func (P *PurchaseHandler) SelfDeliverDelivered(order *model.GoodsOrder, userName string) (err error) { + //TODO implement me + panic("implement me") +} + +func (P *PurchaseHandler) GetOrderRealMobile(ctx *jxcontext.Context, order *model.GoodsOrder) (mobile string, err error) { + //TODO implement me + panic("implement me") +} + +func (P *PurchaseHandler) ReplyOrderComment(ctx *jxcontext.Context, vendorOrgCode string, orderComment *model.OrderComment, replyComment string) (err error) { + //TODO implement me + panic("implement me") +} + +func (P *PurchaseHandler) AgreeOrRefuseCancel(ctx *jxcontext.Context, order *model.GoodsOrder, isAgree bool, reason string) (err error) { + //TODO implement me + panic("implement me") +} + +func (P *PurchaseHandler) CancelOrder(ctx *jxcontext.Context, order *model.GoodsOrder, reason string) (err error) { + //TODO implement me + panic("implement me") +} + +func (P *PurchaseHandler) AdjustOrder(ctx *jxcontext.Context, order *model.GoodsOrder, removedSkuList []*model.OrderSku, reason string) (err error) { + //TODO implement me + panic("implement me") +} + +func (P *PurchaseHandler) RefundOrder(ctx *jxcontext.Context, order *model.GoodsOrder, reason string) (err error) { + //TODO implement me + panic("implement me") +} + +func (P *PurchaseHandler) PartRefundOrder(ctx *jxcontext.Context, order *model.GoodsOrder, refundSkuList []*model.OrderSku, reason string) (err error) { + //TODO implement me + panic("implement me") +} + +func (P *PurchaseHandler) AgreeOrRefuseRefund(ctx *jxcontext.Context, order *model.AfsOrder, approveType int, reason string) (err error) { + //TODO implement me + panic("implement me") +} + +func (P *PurchaseHandler) ConfirmReceivedReturnGoods(ctx *jxcontext.Context, order *model.AfsOrder) (err error) { + //TODO implement me + panic("implement me") +} + +func (P *PurchaseHandler) GetSelfTakeCode(ctx *jxcontext.Context, order *model.GoodsOrder) (code string, err error) { + //TODO implement me + panic("implement me") +} + +func (P *PurchaseHandler) ConfirmSelfTake(ctx *jxcontext.Context, order *model.GoodsOrder, selfTakeCode string) (err error) { + //TODO implement me + panic("implement me") +} + +func (P *PurchaseHandler) GetOrderAfsInfo(ctx *jxcontext.Context, vendorOrderID, afsOrderID string) (orderAfsInfo *partner.OrderAfsInfo, err error) { + //TODO implement me + panic("implement me") +} + +func (P *PurchaseHandler) ComplaintRider(vendorOrderId string, resonID int, resonContent string) (err error) { + //TODO implement me + panic("implement me") +} + +func (P *PurchaseHandler) GetOrderRider(vendorOrgCode, vendorStoreID string, param map[string]interface{}) (err error) { + //TODO implement me + panic("implement me") +} + +func (P *PurchaseHandler) GetVendorID() int { + //TODO implement me + panic("implement me") +} + +func (P *PurchaseHandler) GetVendorCategories(ctx *jxcontext.Context) (vendorCats []*model.SkuVendorCategory, err error) { + //TODO implement me + panic("implement me") +} + +func (P *PurchaseHandler) ReadStore(ctx *jxcontext.Context, vendorOrgCode, vendorStoreID, vendorStoreName string) (store *dao.StoreDetail, err error) { + //TODO implement me + panic("implement me") +} + +func (P *PurchaseHandler) DeleteStore(db *dao.DaoDB, storeID int, userName string) (err error) { + //TODO implement me + panic("implement me") +} + +func (P *PurchaseHandler) GetStoreStatus(ctx *jxcontext.Context, vendorOrgCode string, storeID int, vendorStoreID string) (storeStatus int, err error) { + //TODO implement me + panic("implement me") +} + +func (P *PurchaseHandler) UpdateStoreCustomID(ctx *jxcontext.Context, vendorOrgCode, vendorStoreID string, storeID int64) (err error) { + //TODO implement me + panic("implement me") +} + +func (P *PurchaseHandler) RefreshAllStoresID(ctx *jxcontext.Context, parentTask tasksch.ITask, isAsync bool) (hint string, err error) { + //TODO implement me + panic("implement me") +} + +func (P *PurchaseHandler) UploadImg(ctx *jxcontext.Context, vendorOrgCode, imgURL string, imgData []byte, imgName string, imgType int) (imgHint string, err error) { + //TODO implement me + panic("implement me") +} + +func (P *PurchaseHandler) UpdateStoreLineStatus(ctx *jxcontext.Context, vendorOrgCode string, storeID int, vendorStoreID string, lineStatus int) (err error) { + //TODO implement me + panic("implement me") +} + +func init() { + if api.DouDianApi != nil { + CurPurchaseHandler = New() + partner.RegisterPurchasePlatform(CurPurchaseHandler) + } +} +func New() (obj *PurchaseHandler) { + obj = new(PurchaseHandler) + obj.ISingleStoreStoreSkuHandler = obj + return obj +} diff --git a/business/partner/purchase/doudian/store.go b/business/partner/purchase/doudian/store.go new file mode 100644 index 000000000..fe0c88c31 --- /dev/null +++ b/business/partner/purchase/doudian/store.go @@ -0,0 +1,62 @@ +package doudian + +import ( + shop_batchCreateStore_request "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/shop_batchCreateStore/request" + "git.rosy.net.cn/baseapi/utils" + "git.rosy.net.cn/jx-callback/business/jxutils" + "git.rosy.net.cn/jx-callback/business/model/dao" + "git.rosy.net.cn/jx-callback/globals/api" +) + +// shop/batchCreateStore 批量创建门店 +func (P *PurchaseHandler) CreateStore2(db *dao.DaoDB, storeID int, userName string, params map[string]interface{}, storeDetail *dao.StoreDetail) (vendorStoreID string, err error) { + //ShopBatchCreateStoreParam:=[]*shop_batchCreateStore_request.ShopBatchCreateStoreParam{} + var ( + storeIDs string + ) + //tempOpenTime := strings.Split(storeDetail.OpenTime, ",") + //m := make(map[int64]string) + //for _, i := range tempOpenTime { + // parts := strings.Split(i, ":") + // m[utils.Str2Int64(parts[0])] = parts[1] + //} + lists := []shop_batchCreateStore_request.StoreListItem{} + list := shop_batchCreateStore_request.StoreListItem{ + RowId: storeDetail.RowID, + Name: storeDetail.Name, + StoreCode: storeDetail.StoreCode, + Longitude: utils.Float64ToStr(jxutils.IntCoordinate2Standard(storeDetail.Lng)), + Latitude: utils.Float64ToStr(jxutils.IntCoordinate2Standard(storeDetail.Lat)), + Province: storeDetail.ProvinceName, + City: storeDetail.CityName, + District: storeDetail.DistrictName, + Address: storeDetail.Address, + Contact: storeDetail.Tel1, + OpenTime: &shop_batchCreateStore_request.OpenTime{ + DayMap: storeDetail.OpenTime, + }, + } + lists = append(lists, list) + ShopBatchCreateStoreParam := &shop_batchCreateStore_request.ShopBatchCreateStoreParam{ + StoreList: lists, + } + if resp, err := api.DouDianApi.BatchCreateStore(ShopBatchCreateStoreParam); err != nil { + return "", err + } else { + for _, v := range resp.ResultList { + storeIDs += utils.Int64ToStr(v.Store.StoreId) + } + return storeIDs, nil + } +} + +// shop/editStore 编辑门店信息 正向推送平台 +func (P *PurchaseHandler) UpdateStore(db *dao.DaoDB, storeID int, userName string) (err error) { + if db == nil { + db = dao.GetDB() + } + //doudianApi:=getapi + + //storeDetail:=dao.GetStoreDetail(db,storeID,) + return err +} diff --git a/business/partner/purchase/doudian/store_test.go b/business/partner/purchase/doudian/store_test.go new file mode 100644 index 000000000..f07b2a409 --- /dev/null +++ b/business/partner/purchase/doudian/store_test.go @@ -0,0 +1,36 @@ +package doudian + +import ( + shop_batchCreateStore_request "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/shop_batchCreateStore/request" + "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/tiktok_api" + "git.rosy.net.cn/baseapi/utils" + "git.rosy.net.cn/jx-callback/business/model" + "git.rosy.net.cn/jx-callback/business/model/dao" + "testing" +) + +func TestCreateStore(t *testing.T) { + accesstoken := `{"access_token":"90868a42-1287-4453-ba71-34c72f22e886","expires_in":555553,"scope":"SCOPE","shop_id":"","shop_name":"小时达开放平台对接专用店","refresh_token":"4e8cf946-8df1-4489-be88-f96f2d4603a8","authority_id ":""}` + tiktok_api.New("7136048270014416392", "c397aa9f-3927-47c4-8cfe-4d84e02602e0", accesstoken) + request := shop_batchCreateStore_request.New() + //storeList := make([]*shop_batchCreateStore_request.StoreListItem, 0) + storeInfo := model.Store{ + RowID: int64(2), + Name: "京西菜市小时达测试店铺0921", + StoreCode: "666667", + Lng: utils.Str2Int("119.441741"), + Lat: utils.Str2Int("32.133087"), + Address: "金牛区二环路北一段10号", + Tel1: "17358644830", + OpenTime: map[int64]string{1: "07:00-19:00", 2: "8:00-19:00"}, + } + list := &dao.StoreDetail{} + list.Store = storeInfo + list.ProvinceName = "四川省" + list.CityName = "成都市" + list.DistrictName = "金牛区" + _, err := CurPurchaseHandler.CreateStore2(nil, 0, "", nil, list) + resp, err := request.Execute(tiktok_api.AccessToken) + t.Fatal("err===========", err) + t.Fatalf("resp===========:%v", resp) +} diff --git a/business/partner/purchase/ebai/store_test.go b/business/partner/purchase/ebai/store_test.go index c24f5ba3b..c9972dc8b 100644 --- a/business/partner/purchase/ebai/store_test.go +++ b/business/partner/purchase/ebai/store_test.go @@ -3,19 +3,16 @@ package ebai import ( "testing" - "git.rosy.net.cn/jx-callback/business/jxutils/jxcontext" - - "git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/jx-callback/business/model/dao" ) -func TestReadStore(t *testing.T) { - result, err := CurPurchaseHandler.ReadStore(jxcontext.AdminCtx, "", testShopBaiduID) - if err != nil { - t.Fatal(err.Error()) - } - t.Log(utils.Format4Output(result, false)) -} +//func TestReadStore(t *testing.T) { +// result, err := CurPurchaseHandler.ReadStore(jxcontext.AdminCtx, "", testShopBaiduID) +// if err != nil { +// t.Fatal(err.Error()) +// } +// t.Log(utils.Format4Output(result, false)) +//} func TestUpdateStore(t *testing.T) { db := dao.GetDB() diff --git a/globals/api/api.go b/globals/api/api.go index 337e15f11..76d94a110 100644 --- a/globals/api/api.go +++ b/globals/api/api.go @@ -6,6 +6,7 @@ import ( "git.rosy.net.cn/baseapi/platformapi/jxprintapi" "git.rosy.net.cn/baseapi/platformapi/qywxapi" "git.rosy.net.cn/baseapi/platformapi/tiktok" + "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/tiktok_api" "time" "git.rosy.net.cn/baseapi/platformapi/fnpsapi" @@ -112,11 +113,12 @@ var ( Cacher cache.ICacher SMSClient *aliyunsmsclient.SmsClient - TiktokApi *tiktok.API // 抖音api - TiktokJXDJApi *tiktok.API //抖音京西到家api - TiktokApiID string //抖音商城ID - TiktokJXDJApiID string //抖音京西到家ID - GuoMeiApi *gomei.API // 国美api + TiktokApi *tiktok.API // 抖音api + TiktokJXDJApi *tiktok.API //抖音京西到家api + TiktokApiID string //抖音商城ID + TiktokJXDJApiID string //抖音京西到家ID + GuoMeiApi *gomei.API // 国美api + DouDianApi *tiktok_api.API //抖店api EnterpriseChatHeadApi *enterprise.API // 企业微信api EnterpriseChatMin *enterprise.API // 企业微信小程序api