From 6526a4733ca4135bb2ec8fa50f8edbde813af239 Mon Sep 17 00:00:00 2001 From: liulei <1024028220@qq.com> Date: Sat, 10 Sep 2022 17:33:06 +0800 Subject: [PATCH 01/12] 1 --- business/jxcallback/scheduler/basesch/basesch.go | 2 ++ business/model/dao/dao_user.go | 2 +- controllers/cms_user2.go | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/business/jxcallback/scheduler/basesch/basesch.go b/business/jxcallback/scheduler/basesch/basesch.go index 79165dbf8..b5dcba127 100644 --- a/business/jxcallback/scheduler/basesch/basesch.go +++ b/business/jxcallback/scheduler/basesch/basesch.go @@ -135,8 +135,10 @@ func (c *BaseScheduler) SelfDeliverDelivering(order *model.GoodsOrder, userName orderStatus, _ := partner.GetPurchasePlatformFromVendorID(order.VendorID).OrderLogisticsStatus(utils.Str2Int64(order.VendorOrderID)) if orderStatus == 100 { // 美团取消配送单 partner.CurOrderManager.OnOrderMsg(order, "美团外卖转自送成功.", "") + err = nil } else if strings.Contains(err.Error(), "包裹不存在") || strings.Contains(err.Error(), "运单不存在") || strings.Contains(err.Error(), "1071") || strings.Contains(err.Error(), "1014") || strings.Contains(err.Error(), "invalid character 'o' looking for beginning of value") { partner.CurOrderManager.OnOrderMsg(order, "美团外卖转自送可能成功,异常:", err.Error()) + err = nil } else { bill, _ := partner.CurOrderManager.LoadWaybill(order.VendorWaybillID, order.WaybillVendorID) c.CancelWaybill(bill, partner.CancelWaybillReasonOther, partner.CancelWaybillReasonStrActive) diff --git a/business/model/dao/dao_user.go b/business/model/dao/dao_user.go index 3fe4f28ba..086676d90 100644 --- a/business/model/dao/dao_user.go +++ b/business/model/dao/dao_user.go @@ -32,7 +32,7 @@ func GetUserByID(db *DaoDB, fieldName, fieldValue string) (user *model.User, err sql := fmt.Sprintf(` SELECT * FROM user t1 - WHERE t1.deleted_at = ? AND t1.status = ? AND t1.%s = ? + WHERE t1.deleted_at = ? AND t1.status = ? AND t1.%s = ? `, fieldName) sqlParams := []interface{}{ utils.DefaultTimeValue, diff --git a/controllers/cms_user2.go b/controllers/cms_user2.go index 8a098626b..08ae26342 100644 --- a/controllers/cms_user2.go +++ b/controllers/cms_user2.go @@ -127,7 +127,7 @@ func (c *User2Controller) SolveNullMobileUser() { // @Param token header string true "认证token" // @Success 200 {object} controllers.CallResult // @Failure 200 {object} controllers.CallResult -// @router /GetStoreRoleList [get] +// @router RoleList [get] func (c *User2Controller) GetStoreRoleList() { c.callGetStoreRoleList(func(params *tUser2GetStoreRoleListParams) (retVal interface{}, errCode string, err error) { retVal, err = cms.GetStoreRoleList(params.Ctx) From 68e811316d21e142edc9b0ed37776d0e1cf6a63e Mon Sep 17 00:00:00 2001 From: liulei <1024028220@qq.com> Date: Sun, 11 Sep 2022 10:28:26 +0800 Subject: [PATCH 02/12] 1 --- controllers/cms_user2.go | 2 +- main.go | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/controllers/cms_user2.go b/controllers/cms_user2.go index 08ae26342..805b838b5 100644 --- a/controllers/cms_user2.go +++ b/controllers/cms_user2.go @@ -127,7 +127,7 @@ func (c *User2Controller) SolveNullMobileUser() { // @Param token header string true "认证token" // @Success 200 {object} controllers.CallResult // @Failure 200 {object} controllers.CallResult -// @router RoleList [get] +// @router GetStoreRoleList [get] func (c *User2Controller) GetStoreRoleList() { c.callGetStoreRoleList(func(params *tUser2GetStoreRoleListParams) (retVal interface{}, errCode string, err error) { retVal, err = cms.GetStoreRoleList(params.Ctx) diff --git a/main.go b/main.go index d7c9d3988..d8b390b92 100644 --- a/main.go +++ b/main.go @@ -158,10 +158,10 @@ func main() { globals.SugarLogger.Errorf("RefreshPushToken failed with error:%s", err) return } - if err := tasks.RefreshFnToken(); err != nil { - globals.SugarLogger.Errorf("RefreshFnToken failed with error:%s", err) - return - } + //if err := tasks.RefreshFnToken(); err != nil { + // globals.SugarLogger.Errorf("RefreshFnToken failed with error:%s", err) + // return + //} if err := tasks.RefreshQywxToken(); err != nil { globals.SugarLogger.Errorf("RefreshQywxToken failed with error:%s", err) return From 3c233ffde3ed35191b44940e8728b09e1cade1ee Mon Sep 17 00:00:00 2001 From: liulei <1024028220@qq.com> Date: Sun, 11 Sep 2022 10:30:18 +0800 Subject: [PATCH 03/12] 1 --- controllers/cms_user2.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/controllers/cms_user2.go b/controllers/cms_user2.go index 805b838b5..8a098626b 100644 --- a/controllers/cms_user2.go +++ b/controllers/cms_user2.go @@ -127,7 +127,7 @@ func (c *User2Controller) SolveNullMobileUser() { // @Param token header string true "认证token" // @Success 200 {object} controllers.CallResult // @Failure 200 {object} controllers.CallResult -// @router GetStoreRoleList [get] +// @router /GetStoreRoleList [get] func (c *User2Controller) GetStoreRoleList() { c.callGetStoreRoleList(func(params *tUser2GetStoreRoleListParams) (retVal interface{}, errCode string, err error) { retVal, err = cms.GetStoreRoleList(params.Ctx) From b51341e993b7fad10c0e40e468b90d986a01dcdc Mon Sep 17 00:00:00 2001 From: liulei <1024028220@qq.com> Date: Sun, 11 Sep 2022 10:52:56 +0800 Subject: [PATCH 04/12] 1 --- main.go | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/main.go b/main.go index d8b390b92..43e0d5944 100644 --- a/main.go +++ b/main.go @@ -158,10 +158,12 @@ func main() { globals.SugarLogger.Errorf("RefreshPushToken failed with error:%s", err) return } - //if err := tasks.RefreshFnToken(); err != nil { - // globals.SugarLogger.Errorf("RefreshFnToken failed with error:%s", err) - // return - //} + if web.BConfig.RunMode != "jxgy" { + if err := tasks.RefreshFnToken(); err != nil { + globals.SugarLogger.Errorf("RefreshFnToken failed with error:%s", err) + return + } + } if err := tasks.RefreshQywxToken(); err != nil { globals.SugarLogger.Errorf("RefreshQywxToken failed with error:%s", err) return From 9e2ff99f203acd7523c88846768d88c30547cb2d Mon Sep 17 00:00:00 2001 From: liulei <1024028220@qq.com> Date: Wed, 14 Sep 2022 19:08:16 +0800 Subject: [PATCH 05/12] 1 --- business/jxcallback/scheduler/basesch/basesch.go | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/business/jxcallback/scheduler/basesch/basesch.go b/business/jxcallback/scheduler/basesch/basesch.go index b5dcba127..29cbc487e 100644 --- a/business/jxcallback/scheduler/basesch/basesch.go +++ b/business/jxcallback/scheduler/basesch/basesch.go @@ -135,14 +135,15 @@ func (c *BaseScheduler) SelfDeliverDelivering(order *model.GoodsOrder, userName orderStatus, _ := partner.GetPurchasePlatformFromVendorID(order.VendorID).OrderLogisticsStatus(utils.Str2Int64(order.VendorOrderID)) if orderStatus == 100 { // 美团取消配送单 partner.CurOrderManager.OnOrderMsg(order, "美团外卖转自送成功.", "") - err = nil + return nil } else if strings.Contains(err.Error(), "包裹不存在") || strings.Contains(err.Error(), "运单不存在") || strings.Contains(err.Error(), "1071") || strings.Contains(err.Error(), "1014") || strings.Contains(err.Error(), "invalid character 'o' looking for beginning of value") { partner.CurOrderManager.OnOrderMsg(order, "美团外卖转自送可能成功,异常:", err.Error()) - err = nil + return nil } else { bill, _ := partner.CurOrderManager.LoadWaybill(order.VendorWaybillID, order.WaybillVendorID) - c.CancelWaybill(bill, partner.CancelWaybillReasonOther, partner.CancelWaybillReasonStrActive) + err = c.CancelWaybill(bill, partner.CancelWaybillReasonOther, partner.CancelWaybillReasonStrActive) partner.CurOrderManager.OnOrderMsg(order, "美团外卖运单无法取消,", err.Error()) + return err } } From e5565b050fb58ea7b886c30a7fbaaf21b120d24a Mon Sep 17 00:00:00 2001 From: richboo111 Date: Thu, 22 Sep 2022 18:03:35 +0800 Subject: [PATCH 06/12] tmp --- business/model/store.go | 51 ++-- business/partner/purchase/doudian/doudian.go | 232 ++++++++++++++++++ business/partner/purchase/doudian/store.go | 62 +++++ .../partner/purchase/doudian/store_test.go | 36 +++ business/partner/purchase/ebai/store_test.go | 17 +- globals/api/api.go | 12 +- 6 files changed, 371 insertions(+), 39 deletions(-) create mode 100644 business/partner/purchase/doudian/doudian.go create mode 100644 business/partner/purchase/doudian/store.go create mode 100644 business/partner/purchase/doudian/store_test.go 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 From 17284dbe9e84c03f2a47b468a258527580f937ee Mon Sep 17 00:00:00 2001 From: richboo111 Date: Thu, 22 Sep 2022 18:55:04 +0800 Subject: [PATCH 07/12] 1 --- business/partner/delivery/dada/waybill.go | 6 ++++++ business/partner/delivery/fn/waybill.go | 7 +++++++ business/partner/delivery/mtps/waybill.go | 5 +++++ 3 files changed, 18 insertions(+) diff --git a/business/partner/delivery/dada/waybill.go b/business/partner/delivery/dada/waybill.go index 9e178fa54..bd571ad1a 100644 --- a/business/partner/delivery/dada/waybill.go +++ b/business/partner/delivery/dada/waybill.go @@ -116,6 +116,12 @@ func (c *DeliveryHandler) callbackMsg2Waybill(msg *dadaapi.CallbackMsg) (retVal } retVal.StatusTime = utils.Timestamp2Time(updateTime) retVal.VendorOrderID, retVal.OrderVendorID = jxutils.SplitUniversalOrderID(msg.OrderID) + + var good *model.GoodsOrder + sql := `SELECT * FROM goods_order WHERE vendor_order_id = ? ORDER BY order_created_at DESC LIMIT 1 OFFSET 0` + sqlParams := []interface{}{msg.OrderID} + dao.GetRow(dao.GetDB(), &good, sql, sqlParams) + retVal.OrderVendorID = good.VendorID return retVal } diff --git a/business/partner/delivery/fn/waybill.go b/business/partner/delivery/fn/waybill.go index dc89467f2..fe4f86bf3 100644 --- a/business/partner/delivery/fn/waybill.go +++ b/business/partner/delivery/fn/waybill.go @@ -221,6 +221,13 @@ func OnWaybillMsg(msg *fnpsapi.OrderStatusNottify) (resp *fnpsapi.CallbackRespon order.StatusTime = time.Now() } order.VendorOrderID, order.OrderVendorID = jxutils.SplitUniversalOrderID(cc.PartnerOrderCode) + + var good *model.GoodsOrder + sql := `SELECT * FROM goods_order WHERE vendor_order_id = ? ORDER BY order_created_at DESC LIMIT 1 OFFSET 0` + sqlParams := []interface{}{cc.PartnerOrderCode} + dao.GetRow(dao.GetDB(), &good, sql, sqlParams) + order.OrderVendorID = good.VendorID + orderStatus, err := strconv.Atoi(order.VendorStatus) if err != nil { globals.SugarLogger.Debugf("FNPS strconv.Atoi fail :[%s]", err) diff --git a/business/partner/delivery/mtps/waybill.go b/business/partner/delivery/mtps/waybill.go index b69b6407f..7f522848b 100644 --- a/business/partner/delivery/mtps/waybill.go +++ b/business/partner/delivery/mtps/waybill.go @@ -182,6 +182,11 @@ func (c *DeliveryHandler) callbackMsg2Waybill(msg *mtpsapi.CallbackOrderMsg) (re Remark: msg.CancelReason, } retVal.VendorOrderID, retVal.OrderVendorID = jxutils.SplitUniversalOrderID(msg.OrderID) + var good *model.GoodsOrder + sql := `SELECT * FROM goods_order WHERE vendor_order_id = ? ORDER BY order_created_at DESC LIMIT 1 OFFSET 0` + sqlParams := []interface{}{msg.OrderID} + dao.GetRow(dao.GetDB(), &good, sql, sqlParams) + retVal.OrderVendorID = good.VendorID return retVal } From 2380e9da032bd58eb223f062f4a6711ef64ed6b5 Mon Sep 17 00:00:00 2001 From: richboo111 Date: Thu, 22 Sep 2022 19:18:30 +0800 Subject: [PATCH 08/12] 1 --- business/partner/purchase/doudian/store.go | 79 +++++++++++----------- 1 file changed, 38 insertions(+), 41 deletions(-) diff --git a/business/partner/purchase/doudian/store.go b/business/partner/purchase/doudian/store.go index fe0c88c31..d98f46018 100644 --- a/business/partner/purchase/doudian/store.go +++ b/business/partner/purchase/doudian/store.go @@ -1,53 +1,50 @@ 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] + ////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 := []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 - } + //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 + //} + return "", nil } // shop/editStore 编辑门店信息 正向推送平台 From 58d3488d1029e685cf87ca4915d8637e26c16145 Mon Sep 17 00:00:00 2001 From: richboo111 Date: Thu, 22 Sep 2022 19:24:06 +0800 Subject: [PATCH 09/12] 1 --- business/model/store.go | 54 ++++++++--------- .../partner/purchase/doudian/store_test.go | 60 ++++++++----------- 2 files changed, 53 insertions(+), 61 deletions(-) diff --git a/business/model/store.go b/business/model/store.go index e80df9660..f31c1dfb8 100644 --- a/business/model/store.go +++ b/business/model/store.go @@ -305,33 +305,33 @@ var ( type Store struct { ModelIDCULD - 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"` //门店备注 + 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/store_test.go b/business/partner/purchase/doudian/store_test.go index f07b2a409..6dc4ae313 100644 --- a/business/partner/purchase/doudian/store_test.go +++ b/business/partner/purchase/doudian/store_test.go @@ -1,36 +1,28 @@ 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) -} +// +//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) +//} From e7f1101b9c73ba39ac56b00ee79f7653c147cd92 Mon Sep 17 00:00:00 2001 From: liulei <1024028220@qq.com> Date: Thu, 22 Sep 2022 20:44:28 +0800 Subject: [PATCH 10/12] 1 --- business/model/store.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/business/model/store.go b/business/model/store.go index f31c1dfb8..01982af89 100644 --- a/business/model/store.go +++ b/business/model/store.go @@ -306,7 +306,7 @@ type Store struct { ModelIDCULD RowID int64 `json:"rowID"` //标识这条数据(抖店用) - StoreCode string `json:"storeCode"` //门店编码(抖店用) + //StoreCode string `json:"storeCode"` //门店编码(抖店用) //OpenTime map[int64]string `json:"openTime"` //营业时间(抖店用) OriginalName string `orm:"-" json:"originalName"` Name string `orm:"size(255)" json:"name"` From c2173838f038895bdabdb2eec0155748d7fc6592 Mon Sep 17 00:00:00 2001 From: liulei <1024028220@qq.com> Date: Sun, 25 Sep 2022 17:57:22 +0800 Subject: [PATCH 11/12] 1 --- business/model/store.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/business/model/store.go b/business/model/store.go index 01982af89..1253e8b3f 100644 --- a/business/model/store.go +++ b/business/model/store.go @@ -305,7 +305,7 @@ var ( type Store struct { ModelIDCULD - RowID int64 `json:"rowID"` //标识这条数据(抖店用) + //RowID int64 `json:"rowID"` //标识这条数据(抖店用) //StoreCode string `json:"storeCode"` //门店编码(抖店用) //OpenTime map[int64]string `json:"openTime"` //营业时间(抖店用) OriginalName string `orm:"-" json:"originalName"` From 13b7bd1c6276220fdb6d71461e80cccc0d84b2fd Mon Sep 17 00:00:00 2001 From: richboo111 Date: Fri, 30 Sep 2022 17:09:56 +0800 Subject: [PATCH 12/12] 1 --- business/model/api_config.go | 7 +- business/model/store.go | 19 +- business/partner/purchase/doudian/doudian.go | 52 +- business/partner/purchase/doudian/store.go | 452 ++++++++++++++++-- .../partner/purchase/doudian/store_test.go | 97 +++- .../partner/purchase/doudian/warehouse.go | 143 ++++++ business/partner/purchase/ebai/store.go | 5 +- business/partner/purchase/mtwm/store.go | 5 +- conf/app.conf | 1 + globals/globals.go | 20 +- 10 files changed, 698 insertions(+), 103 deletions(-) create mode 100644 business/partner/purchase/doudian/warehouse.go diff --git a/business/model/api_config.go b/business/model/api_config.go index 1cb737a01..b8e575c70 100644 --- a/business/model/api_config.go +++ b/business/model/api_config.go @@ -14,12 +14,13 @@ const ( VendorIDMTWM = 1 VendorIDELM = 2 VendorIDEBAI = 3 + VendorIDYB = 4 //银豹 + VendorIDJDShop = 5 //京东商城 + VendorIDDouDian = 6 //抖店 + VendorIDJX = 9 // 这是一个假的京西VendorID VendorIDGD = 10 - VendorIDYB = 4 //银豹 - VendorIDJDShop = 5 //京东商城 VendorIDWSC = 11 // 微盟微商城 VendorIDPurchaseEnd = 11 - VendorIDJX = 9 // 这是一个假的京西VendorID VendorGoMei = 12 // 国美 VendorIDTT = 13 // 抖音平台小程序 diff --git a/business/model/store.go b/business/model/store.go index 01982af89..0a9c2e28f 100644 --- a/business/model/store.go +++ b/business/model/store.go @@ -304,10 +304,6 @@ var ( type Store struct { ModelIDCULD - - 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 ? @@ -1001,3 +997,18 @@ func (*BrandCategoryMap) TableUnique() [][]string { []string{"BrandID", "CategoryID", "DeletedAt"}, } } + +// 抖店 创建运费模板映射关系 +type FreightTemplate struct { + ModelIDCULD + StoreID int64 `orm:"column(store_id)" json:"storeID"` //京西本地门店ID + VendorStoreID int64 `orm:"column(vendor_store_id)" json:"vendorStoreID"` //抖店平台门店ID + TemplateID int64 `orm:"column(template_id)" json:"templateID"` //运费模板ID + TemplateDetail string `orm:"column(template_detail)" json:"templateDetail"` //json转化的模板信息 +} + +func (*FreightTemplate) TableUnique() [][]string { + return [][]string{ + []string{"StoreID", "TemplateID", "VendorStoreID"}, + } +} diff --git a/business/partner/purchase/doudian/doudian.go b/business/partner/purchase/doudian/doudian.go index 32d96aa8f..689c98ee8 100644 --- a/business/partner/purchase/doudian/doudian.go +++ b/business/partner/purchase/doudian/doudian.go @@ -1,6 +1,7 @@ package doudian import ( + "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/tiktok_api" "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" @@ -19,6 +20,25 @@ type PurchaseHandler struct { putils.DefSingleStorePlatform } +func init() { + if api.DouDianApi != nil { + CurPurchaseHandler = New() + partner.RegisterPurchasePlatform(CurPurchaseHandler) + } +} +func New() (obj *PurchaseHandler) { + obj = new(PurchaseHandler) + obj.ISingleStoreStoreSkuHandler = obj + return obj +} + +func bizStatusJX2DouDian(status int) (onLine int) { + if status == model.StoreStatusDisabled || status == model.StoreStatusClosed { + return tiktok_api.StoreStatusOffline + } + return tiktok_api.StoreStatusOnline +} + 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") @@ -184,49 +204,17 @@ func (P *PurchaseHandler) GetVendorCategories(ctx *jxcontext.Context) (vendorCat 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 index d98f46018..80e7909c4 100644 --- a/business/partner/purchase/doudian/store.go +++ b/business/partner/purchase/doudian/store.go @@ -1,59 +1,427 @@ package doudian import ( + "errors" + "fmt" + address_create_request "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/address_create/request" + address_list_request "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/address_list/request" + address_list_response "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/address_list/response" + freightTemplate_create_request "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/freightTemplate_create/request" + shop_batchCreateStore_request "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/shop_batchCreateStore/request" + shop_bindStoreFreight_request "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/shop_bindStoreFreight/request" + shop_bindStoreSaleLimit_request "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/shop_bindStoreSaleLimit/request" + shop_editStore_request "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/shop_editStore/request" + shop_getStoreDetail_request "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/shop_getStoreDetail/request" + shop_getStoreList_request "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/shop_getStoreList/request" + shop_storeSuspend_request "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/shop_storeSuspend/request" + shop_unsuspendStore_request "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/shop_unsuspendStore/request" + trade_createTradeLimitTemplate_request "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/trade_createTradeLimitTemplate/request" + "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/tiktok_api" + "git.rosy.net.cn/baseapi/utils" + "git.rosy.net.cn/baseapi/utils/errlist" + "git.rosy.net.cn/jx-callback/business/jxstore/event" + "git.rosy.net.cn/jx-callback/business/jxutils" + "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/globals" + "git.rosy.net.cn/jx-callback/globals/api" ) +func splicingTimeToDoudian(openTime1, closeTime1, openTime2, closeTime2 int16) (timeList string) { + //700 1200 -> 7:00-12:00 + timeStr := "" + if openTime1 != 0 && closeTime1 != 0 { + tOpenTime1 := utils.Int64ToStr(int64(openTime1)) + len1 := len(tOpenTime1) - 2 + s1 := tOpenTime1[:len1] + ":" + tOpenTime1[len1+1:] + tCloseTime1 := utils.Int64ToStr(int64(closeTime1)) + len2 := len(tCloseTime1) - 2 + s2 := tCloseTime1[:len2] + ":" + tCloseTime1[len2+1:] + timeStr += s1 + "-" + s2 + if openTime2 != 0 && closeTime2 != 0 { + tOpenTime2 := utils.Int64ToStr(int64(openTime2)) + len3 := len(tOpenTime2) - 2 + s3 := tOpenTime2[:len3] + ":" + tOpenTime2[len3+1:] + tCloseTime2 := utils.Int64ToStr(int64(closeTime2)) + len4 := len(tCloseTime2) - 2 + s4 := tCloseTime2[:len4] + ":" + tCloseTime2[len4+1:] + timeStr += " " + s3 + "-" + s4 + } + } + return timeStr +} + // 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 - //} - return "", nil + var ( + storeIDs string + lists []shop_batchCreateStore_request.StoreListItem + ShopBatchCreateStoreParam *shop_batchCreateStore_request.ShopBatchCreateStoreParam + ) + timeStr := "" + if storeDetail.OpenTime1 == 0 || storeDetail.CloseTime1 == 0 { + return "", fmt.Errorf("营业时间必填") + } else { + timeStr = splicingTimeToDoudian(storeDetail.OpenTime1, storeDetail.CloseTime1, storeDetail.OpenTime2, storeDetail.CloseTime2) + } + m := make(map[int64]string) + for j := 1; j <= 7; j++ { + m[int64(j)] = timeStr + } + list := shop_batchCreateStore_request.StoreListItem{ + RowId: 1, + Name: storeDetail.Name, + StoreCode: storeDetail.VendorStoreID, + 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: m, + }, + } + lists = append(lists, list) + ShopBatchCreateStoreParam = &shop_batchCreateStore_request.ShopBatchCreateStoreParam{ + StoreList: lists, + } + if resp, err := api.DouDianApi.BatchCreateStore(ShopBatchCreateStoreParam); err != nil { + return "", err + } else { + for k, v := range resp.ResultList { + if k != len(resp.ResultList) { + storeIDs += utils.Int64ToStr(v.Store.StoreId) + "," + } + storeIDs += utils.Int64ToStr(v.Store.StoreId) + } + return storeIDs, nil + } } // shop/editStore 编辑门店信息 正向推送平台 func (P *PurchaseHandler) UpdateStore(db *dao.DaoDB, storeID int, userName string) (err error) { + globals.SugarLogger.Debugf("doudian Update storeID:%d, userName:%s", storeID, userName) + var ( + storeInfo *dao.StoreDetail + name string + ) if db == nil { db = dao.GetDB() } - //doudianApi:=getapi - - //storeDetail:=dao.GetStoreDetail(db,storeID,) + sqlStr := ` SELECT + t1.*, + t2.status, t2.vendor_store_id, t2.vendor_org_code, + IF(t1.updated_at > t2.updated_at, t1.last_operator, t2.last_operator) real_last_operator, t2.sync_status, t2.vendor_store_name + FROM store t1 + LEFT JOIN store_map t2 ON t1.id = t2.store_id AND t2.vendor_id = ? AND (t2.deleted_at = ?) + WHERE t1.id = ? + ORDER BY t2.updated_at` + err = dao.GetRow(db, &storeInfo, sqlStr, model.VendorIDDouDian, utils.DefaultTimeValue, utils.Int2Str(storeID)) + if err != nil { + return err + } + errList := errlist.New() + timeStr := "" + m := make(map[int64]string) + if storeInfo.OpenTime1 != 0 && storeInfo.CloseTime1 != 0 { + timeStr = splicingTimeToDoudian(storeInfo.OpenTime1, storeInfo.CloseTime1, storeInfo.OpenTime2, storeInfo.CloseTime2) + for j := 1; j <= 7; j++ { + m[int64(j)] = timeStr + } + } + vendorStoreID := &shop_getStoreDetail_request.ShopGetStoreDetailParam{ + StoreId: utils.Str2Int64(storeInfo.VendorStoreID), + } + if globals.EnableDouDianStoreWrite { + remoteStoreInfo, err2 := api.DouDianApi.GetStoreDetail(vendorStoreID) + if err2 != nil { + return err2 + } + if remoteStoreInfo.StoreDetail.Store.StoreId == 0 { + return fmt.Errorf("ID:%d 的门店不存在,请先创建", utils.Str2Int64(storeInfo.VendorStoreID)) + } + mergedStoreStatus := jxutils.MergeStoreStatus(storeInfo.Status, storeInfo.VendorStatus) + name = remoteStoreInfo.StoreDetail.Store.Name + if storeInfo.SyncStatus&(model.SyncFlagNewMask|model.SyncFlagStoreName) != 0 { + if storeInfo.VendorStoreName != "" { + name = storeInfo.VendorStoreName + } + } + store := fmt.Sprintf("门店id:%d,门店名称:%s,第三方门店状态:%d,本地修改前门店状态%d,本地门店修改后状态:%d,第三方平台Id(抖店):%s", storeID, remoteStoreInfo.StoreDetail.Store.Name, remoteStoreInfo.StoreDetail.Store.State, storeInfo.Status, mergedStoreStatus, storeInfo.VendorOrgCode) + event.AddOperateEvent(jxcontext.AdminCtx, jxcontext.AdminCtx.GetTrackInfo(), store, "", "", 10, "UpdateStore") + params := &shop_editStore_request.ShopEditStoreParam{ + StoreId: remoteStoreInfo.StoreDetail.Store.StoreId, //平台id不可修改 + Name: name, + StoreCode: utils.Int2Str(storeInfo.ID), //自用编码即很本地storeID + Latitude: utils.Int2Str(storeInfo.Lat), + Longitude: utils.Int2Str(storeInfo.Lng), + Province: storeInfo.ProvinceName, + City: storeInfo.CityName, + District: storeInfo.DistrictName, + Address: storeInfo.Address, + Contact: storeInfo.Tel1, + OpenTime: &shop_editStore_request.OpenTime{ + DayMap: m, + }, + } + //修改店铺状态 + if storeInfo.SyncStatus&(model.SyncFlagNewMask|model.SyncFlagStoreStatus) != 0 { + errList.AddErr(P.UpdateStoreStatus(jxcontext.AdminCtx, storeInfo.VendorOrgCode, storeID, storeInfo.VendorStoreID, mergedStoreStatus)) + } + _, err3 := api.DouDianApi.EditStore(params) + if err3 != nil { + errList.AddErr(err3) + } + } return err } + +// shop/storeSuspend 门店暂停营业 +// shop/unsuspendStore 门店恢复营业 +func (p *PurchaseHandler) UpdateStoreStatus(ctx *jxcontext.Context, vendorOrgCode string, storeID int, vendorStoreID string, status int) (err error) { + isOnline := bizStatusJX2DouDian(status) + if globals.EnableDouDianStoreWrite { + if isOnline != tiktok_api.StoreStatusOnline { //暂停营业状态 + unsuspendStoreID := &shop_unsuspendStore_request.ShopUnsuspendStoreParam{ + StoreId: utils.Str2Int64(vendorStoreID), + } + _, err = api.DouDianApi.UnsuspendStore(unsuspendStoreID) + } else { //恢复营业 + suspendStoreID := &shop_storeSuspend_request.ShopStoreSuspendParam{ + StoreId: utils.Str2Int64(vendorStoreID), + } + getStoreID := &shop_getStoreDetail_request.ShopGetStoreDetailParam{ + StoreId: utils.Str2Int64(vendorStoreID), + } + //平台上店铺状态 + remoteStoreInfo, err2 := api.DouDianApi.GetStoreDetail(getStoreID) + if err2 != nil { + return err2 + } + if remoteStoreInfo.StoreDetail.Store.SuspendType == tiktok_api.SuspendTypePlatformPenalty { + err = errors.New("门店因平台处罚暂停营业,不可主动修改营业状态") + } else { + _, err = api.DouDianApi.StoreSuspend(suspendStoreID) + } + } + } + return err +} + +// /freightTemplate/create 创建运费模板 +func (P *PurchaseHandler) CreateFreightTemplate(templateInfo freightTemplate_create_request.FreightTemplateCreateParam, storeID, vendorStoreID int64) error { + var ( + db *dao.DaoDB + ) + if templateInfo.Template.RuleType > 0 { + templateInfo.Template.CalculateType = tiktok_api.CalculateTypeNum + } + info := &freightTemplate_create_request.FreightTemplateCreateParam{ + Template: templateInfo.Template, + Columns: templateInfo.Columns, + } + resp, err := api.DouDianApi.FreightTemplateCreate(info) + if err != nil { + return err + } + //创建成功后进行绑定 + bindInfo := &shop_bindStoreFreight_request.ShopBindStoreFreightParam{ + StoreId: vendorStoreID, + FreightId: resp.TemplateId, + } + _, err1 := api.DouDianApi.BindFreightTemplate(bindInfo) + if err != nil { + return err1 + } + //并写入数据库 + freightInfo := model.FreightTemplate{ + StoreID: storeID, + VendorStoreID: vendorStoreID, + TemplateID: resp.TemplateId, + } + if err = dao.CreateEntity(db, freightInfo); err != nil { + return err + } + return nil +} + +// /shop/bindStoreFreight 门店绑定运费模版 +//门店绑定运费模版,运费模版必须属于门店关联的抖店,且门店与运费模版是一对一关系 +func (P *PurchaseHandler) ShopBindStoreFreight(storeID, freightID int64) error { + param := &shop_bindStoreFreight_request.ShopBindStoreFreightParam{ + StoreId: storeID, + FreightId: freightID, + } + _, err := api.DouDianApi.BindFreightTemplate(param) + if err != nil { + return err + } + return nil +} + +// /address/create 创建店铺地址库(新建即绑定) +func (P *PurchaseHandler) CreateAddress(addressInfo address_create_request.AddressCreateParam) (addressID int64, err error) { + info := &address_create_request.AddressCreateParam{ + Address: addressInfo.Address, + StoreId: addressInfo.StoreId, + } + resp, err := api.DouDianApi.AddressCreate(info) + if err != nil { + return 0, err + } + //添加进数据库page_shop + //获取门店信息 + //storeID := &shop_getStoreDetail_request.ShopGetStoreDetailParam{ + // StoreId: addressInfo.StoreId, + //} + //storeInfo, err1 := api.DouDianApi.GetStoreDetail(storeID) + //if err1 != nil { + // return 0, err1 + //} + //createAddress := &model.PageShop{ //此表暂存门店售后地址库 + // Name: storeInfo.StoreDetail.Store.Name, + // VendorID: model.VendorIDDouDian, + // VendorStoreID: utils.Int64ToStr(storeInfo.StoreDetail.Store.StoreId), //抖店平台ID + // OrgCode: storeInfo.StoreDetail.Store.StoreCode, //暂时用来存放京西平台门店ID + // VendorStatus: utils.Int64ToStr(storeInfo.StoreDetail.Store.State), + // Status: 0, + // CityCode: utils.Str2Int(storeInfo.StoreDetail.Store.CityCode), + // DistrictCode: utils.Str2Int(storeInfo.StoreDetail.Store.DistrictCode), + // Address: storeInfo.StoreDetail.Store.Address, + // Lng: utils.Str2Float64(storeInfo.StoreDetail.Store.Longitude), + // Lat: utils.Str2Float64(storeInfo.StoreDetail.Store.Latitude), + // Tel1: storeInfo.StoreDetail.Store.Contact, + //} + //if err = dao.CreateEntity(dao.GetDB(), createAddress); err != nil { + // return 0, err + //} + return resp.AddressId, nil +} + +// /address/list 获取售后地址列表接口 +//分页获取商家地址列表 +func (P *PurchaseHandler) GetAddressList(param *address_list_request.AddressListParam) (*address_list_response.AddressListData, error) { + //不传入ID则是获取所有门店售后地址列表 + info := &address_list_request.AddressListParam{ + PageSize: 10, + PageNo: 1, + OrderBy: param.OrderBy, + OrderField: param.OrderField, + } + if param.StoreId != 0 { + info.StoreId = param.StoreId + } + listInfo, err := api.DouDianApi.GetAddressList(info) + if err != nil { + return nil, err + } + return listInfo, nil +} + +// /trade/createTradeLimitTemplate 创建限售模板 +func (P *PurchaseHandler) CreateTradeLimitTemplate(template trade_createTradeLimitTemplate_request.TradeCreateTradeLimitTemplateParam) (tradeLimitID int64, err error) { + info := &trade_createTradeLimitTemplate_request.TradeCreateTradeLimitTemplateParam{ + StoreId: template.StoreId, + TradeLimitRuleRequestList: template.TradeLimitRuleRequestList, + } + resp, err := api.DouDianApi.CreateTradeLimitTemplate(info) + if err != nil { + return 0, err + } + return resp.TradeLimitId, nil +} + +// /shop/bindStoreSaleLimit 门店绑定限售模板 +func (P *PurchaseHandler) BindStoreSaleLimit(storeID, saleLimitTemplateID int64) error { + info := &shop_bindStoreSaleLimit_request.ShopBindStoreSaleLimitParam{ + StoreId: storeID, + SaleLimitId: saleLimitTemplateID, + } + if _, err := api.DouDianApi.BindStoreSaleLimit(info); err != nil { + return err + } + return nil +} + +func (P *PurchaseHandler) UpdateStoreOpTime(ctx *jxcontext.Context, vendorOrgCode string, storeID int, vendorStoreID string, opTimeList []int16) (err error) { + t1 := opTimeList[0] + t2 := opTimeList[1] + t3 := opTimeList[2] + t4 := opTimeList[4] + timeStr := splicingTimeToDoudian(t1, t2, t3, t4) + m := make(map[int64]string) + for j := 1; j <= 7; j++ { + m[int64(j)] = timeStr + } + params := &shop_editStore_request.ShopEditStoreParam{ + StoreId: utils.Str2Int64(vendorStoreID), + OpenTime: &shop_editStore_request.OpenTime{ + DayMap: m, + }, + } + if globals.EnableDouDianStoreWrite { + api.DouDianApi.EditStore(params) + } + return err +} + +func (P *PurchaseHandler) GetStoreStatus(ctx *jxcontext.Context, vendorOrgCode string, storeID int, vendorStoreID string) (storeStatus int, err error) { + params := &shop_getStoreDetail_request.ShopGetStoreDetailParam{ + StoreId: utils.Str2Int64(vendorStoreID), + } + result, err := api.DouDianApi.GetStoreDetail(params) + if err != nil { + return 0, err + } + status := bizStatusJX2DouDian(int(result.StoreDetail.Store.State)) + return status, nil +} + +func (P *PurchaseHandler) EnableAutoAcceptOrder(ctx *jxcontext.Context, vendorOrgCode string, storeID int, vendorStoreID string, isSetEnable bool) (err error) { + return err +} + +// 获取店铺所有平台ID +func (P *PurchaseHandler) GetAllStoresVendorID(ctx *jxcontext.Context, vendorOrgCode string) (vendorStoreIDs []string, err error) { + param := &shop_getStoreList_request.ShopGetStoreListParam{ + Page: 0, + PageSize: 10, + } + storeList, err := api.DouDianApi.GetStoreList(param) + if err != nil { + return nil, err + } + if len(storeList.StoreDetailList) > 0 { + vendorStoreIDs = make([]string, len(storeList.StoreDetailList)) + for k, v := range storeList.StoreDetailList { + vendorStoreIDs[k] = utils.Int64ToStr(v.Store.StoreId) + } + } + return vendorStoreIDs, err +} + +func (P *PurchaseHandler) UpdateStoreLineStatus(ctx *jxcontext.Context, vendorOrgCode string, storeID int, vendorStoreID string, lineStatus int) (err error) { + if lineStatus == model.StoreStatusOpened { + param := &shop_storeSuspend_request.ShopStoreSuspendParam{ + StoreId: utils.Str2Int64(vendorStoreID), + } + _, err = api.DouDianApi.StoreSuspend(param) + } else { + param := &shop_unsuspendStore_request.ShopUnsuspendStoreParam{ + StoreId: utils.Str2Int64(vendorStoreID), + } + _, err = api.DouDianApi.UnsuspendStore(param) + } + return err +} +func (P *PurchaseHandler) ReadStore(ctx *jxcontext.Context, vendorOrgCode, vendorStoreID, vendorStoreName string) (store *dao.StoreDetail, err error) { + return nil, err +} + +func (P *PurchaseHandler) RefreshAllStoresID(ctx *jxcontext.Context, parentTask tasksch.ITask, isAsync bool) (hint string, err error) { + return "", errors.New("抖店暂不支持此操作") +} diff --git a/business/partner/purchase/doudian/store_test.go b/business/partner/purchase/doudian/store_test.go index 6dc4ae313..3830917cb 100644 --- a/business/partner/purchase/doudian/store_test.go +++ b/business/partner/purchase/doudian/store_test.go @@ -1,5 +1,15 @@ package doudian +// +//import ( +// freightTemplate_create_request "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/freightTemplate_create/request" +// 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 ":""}` @@ -7,22 +17,93 @@ package doudian // 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"}, +// Name: "京西菜市小时达测试店铺0926", +// Lng: utils.Str2Int("128.443241"), +// Lat: utils.Str2Int("31.133237"), +// Address: "金牛区一环路北二段10号", +// Tel1: "17358644830", +// OpenTime1: 700, +// CloseTime1: 1230, +// OpenTime2: 1300, +// CloseTime2: 1800, +// //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 = "金牛区" +// list.VendorStoreID = "666667" // _, err := CurPurchaseHandler.CreateStore2(nil, 0, "", nil, list) // resp, err := request.Execute(tiktok_api.AccessToken) // t.Fatal("err===========", err) // t.Fatalf("resp===========:%v", resp) //} +// +//func TestUpdateStore(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() +// err := CurPurchaseHandler.UpdateStore(nil, 666667, "") +// resp, err := request.Execute(tiktok_api.AccessToken) +// t.Fatal("err===========", err) +// t.Fatalf("resp===========:%v", resp) +//} +//// +////func TestCreateFreightTemplate(t *testing.T) { +//// accesstoken := `{"access_token":"6c4d71b3-831c-4a96-8d2e-977e37afba5a","expires_in":462248,"scope":"SCOPE","shop_id":"","shop_name":"小时达开放平台对接 专用店","refresh_token":"65aae144-4cc0-44d2-89ba-5d3062caca41","authority_ id":""}` +//// tiktok_api.New("7136048270014416392", "c397aa9f-3927-47c4-8cfe-4d84e02602e0", accesstoken) +//// t1 := freightTemplate_create_request.FreightTemplateCreateParam{ +//// Columns: []freightTemplate_create_request.ColumnsItem{ +//// { +//// AddWeight: 20, +//// MinSkuAmount: -1, +//// FirstWeight: 20, +//// ProvinceInfos: []freightTemplate_create_request.ProvinceInfosItem{ +//// { +//// Id: 51, +//// Children: []freightTemplate_create_request.ChildrenItem_4{ +//// { +//// Id: 510101, +//// Children: []freightTemplate_create_request.ChildrenItem_5{ +//// { +//// Id: 510107, +//// Children: []freightTemplate_create_request.ChildrenItem{ +//// { +//// Id: 610041, +//// }, +//// }, +//// }, +//// }, +//// }, +//// }, +//// }, +//// }, +//// }, +//// }, +//// Template: &freightTemplate_create_request.Template{ +//// TemplateName: "运费模板创建测试0929", +//// ProductProvince: 51, +//// ProductCity: 510104, +//// CalculateType: 1, +//// TransferType: 1, +//// RuleType: 0, +//// }, +//// } +//// //t2 := []freightTemplate_create_request.FreightTemplateCreateParam{} +//// //t2 = append(t2, t1) +//// freightID, err := CurPurchaseHandler.CreateFreightTemplate(t1) +//// //fmt.Println("freightID==", fmt.Sprintf("%v", freightID)) +//// t.Fatal("err===========", err) +//// t.Fatalf("resp===========:%v", freightID) +////} +// +////func TestBindFreightTemplate(t *testing.T) { +//// accesstoken := `{"access_token":"6c4d71b3-831c-4a96-8d2e-977e37afba5a","expires_in":462248,"scope":"SCOPE","shop_id":"","shop_name":"小时达开放平台对接 专用店","refresh_token":"65aae144-4cc0-44d2-89ba-5d3062caca41","authority_ id":""}` +//// tiktok_api.New("7136048270014416392", "c397aa9f-3927-47c4-8cfe-4d84e02602e0", accesstoken) +//// request := shop_bindStoreFreight_request.New() +//// param := shop_bindStoreFreight_request.ShopBindStoreFreightParam{ +//// //StoreId: , +//// //FreightId: , +//// } +////} diff --git a/business/partner/purchase/doudian/warehouse.go b/business/partner/purchase/doudian/warehouse.go new file mode 100644 index 000000000..907d023b0 --- /dev/null +++ b/business/partner/purchase/doudian/warehouse.go @@ -0,0 +1,143 @@ +package doudian + +import ( + "fmt" + warehouse_bindFencesByStore_request "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/warehouse_bindFencesByStore/request" + warehouse_bindStore_request "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/warehouse_bindStore/request" + warehouse_createBatch_request "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/warehouse_createBatch/request" + warehouse_createFence_request "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/warehouse_createFence/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" + "git.rosy.net.cn/jx-callback/globals/api" + "strings" +) + +// /warehouse/createBatch 批量创建区域仓 +func (P *PurchaseHandler) BatchCreateWarehouse(param warehouse_createBatch_request.WarehouseCreateBatchParam) error { + infos := []warehouse_createBatch_request.OutWarehouseListItem{} + for _, v := range param.OutWarehouseList { + info := warehouse_createBatch_request.OutWarehouseListItem{ + OutWarehouseId: v.OutWarehouseId, + Name: v.Name, + Intro: v.Intro, + AddressDetail: v.AddressDetail, + WarehouseLocation: v.WarehouseLocation, + } + infos = append(infos, info) + } + req := &warehouse_createBatch_request.WarehouseCreateBatchParam{ + OutWarehouseList: infos, + } + resp, err := api.DouDianApi.BatchCreateWarehouse(req) + if err != nil { + return err + } + if resp.Data["outWarehouseId"] == false { + return fmt.Errorf("outWarehouseId:%v 出错", resp.Data["outWarehouseId"]) + } + return nil +} + +// /warehouse/bindStore 仓库绑定门店 +func (P *PurchaseHandler) BindStoreWarehouse(storeIDs []int64, outWarehouseID string) error { + param := &warehouse_bindStore_request.WarehouseBindStoreParam{ + StoreIds: storeIDs, + OutWarehouseId: outWarehouseID, + } + if _, err := api.DouDianApi.StoreBindWarehouse(param); err != nil { + return err + } + return nil +} + +type LocalStore struct { + Lng int `json:"-"` // 乘了10的6次方 + Lat int `json:"-"` // 乘了10的6次方 + DeliveryRangeType int8 `json:"deliveryRangeType"` // 参见相关常量定义 + DeliveryRange string `json:"deliveryRange"` // 如果DeliveryRangeType为DeliveryRangeTypePolygon,则为逗号分隔坐标,分号分隔的坐标点(坐标与Lng和Lat一样,都是整数),比如 121361504,31189308;121420555,31150238。否则为半径,单位为米 + VendorStoreID string `json:"vendorStoreID"` // 平台上门店id +} + +// /warehouse/createFence 以门店方式创建电子围栏 +func (P *PurchaseHandler) CreateFenceByStore(storeID int) (fenceID string, err error) { + var ( + db *dao.DaoDB + localStore *LocalStore + verticeses []warehouse_createFence_request.VerticesItem + ) + sqlParam := []interface{}{ + model.VendorIDDouDian, + } + sqlStr := ` SELECT t.lng,t.lat,t.delivery_range_type,t.delivery_range,s.vendor_store_id FROM store t + LEFT JOIN store_map s ON t.id = s.store_id + WHERE s.vendor_id= ? ` + if storeID != 0 { + sqlStr += " AND t.id = ? " + sqlParam = append(sqlParam, storeID) + } else { + return "", fmt.Errorf("storeID必填") + } + if err = dao.GetRow(db, &localStore, sqlStr, sqlParam...); err == nil { + param := &warehouse_createFence_request.WarehouseCreateFenceParam{ + FenceInfo: &warehouse_createFence_request.FenceInfo{ + OutFenceId: "京西门店:" + utils.Int2Str(storeID) + " 的电子围栏", + Shape: int32(localStore.DeliveryRangeType), + }, + } + if localStore.DeliveryRangeType == tiktok_api.ShapeCircular { + circular := &warehouse_createFence_request.Circular{ + Center: &warehouse_createFence_request.Center{ + Longitude: utils.Int2Float64(localStore.Lng), + Latitude: utils.Int2Float64(localStore.Lat), + }, + Radius: utils.Str2Float64(localStore.DeliveryRange), + } + param.FenceInfo.Circular = circular + } else if localStore.DeliveryRangeType == tiktok_api.ShapePolygon { + tempStr := strings.Split(localStore.DeliveryRange, ";") + for v := len(tempStr) - 1; v >= 0; v-- { + s2 := strings.Split(tempStr[v], ",") + vertices := warehouse_createFence_request.VerticesItem{ + Longitude: utils.Str2Float64(s2[0]), + Latitude: utils.Str2Float64(s2[1]), + } + verticeses = append(verticeses, vertices) + } + param.FenceInfo.Polygon.Vertices = verticeses + } + resp, err := api.DouDianApi.CreateFence(param) + if err != nil { + return "", err + } else { + return resp.FenceId, err + } + } else { + return "", err + } +} + +//直接创建电子围栏方式 +func (P *PurchaseHandler) CreateFenceDirectly(param warehouse_createFence_request.WarehouseCreateFenceParam) (fenceID string, err error) { + info := &warehouse_createFence_request.WarehouseCreateFenceParam{ + FenceInfo: param.FenceInfo, + } + resp, err := api.DouDianApi.CreateFence(info) + if err != nil { + return "", err + } + return resp.FenceId, err +} + +//门店直接绑定围栏 +func (P *PurchaseHandler) BindFenceByStore(storeID int64, addOutFenceIDs []string) error { + param := &warehouse_bindFencesByStore_request.WarehouseBindFencesByStoreParam{ + StoreId: storeID, + AddOutFenceIds: addOutFenceIDs, + } + if _, err := api.DouDianApi.BindFenceByStore(param); err != nil { + return err + } + return nil +} diff --git a/business/partner/purchase/ebai/store.go b/business/partner/purchase/ebai/store.go index b926a954e..276fd9f0a 100644 --- a/business/partner/purchase/ebai/store.go +++ b/business/partner/purchase/ebai/store.go @@ -255,8 +255,7 @@ func (p *PurchaseHandler) UpdateStore(db *dao.DaoDB, storeID int, userName strin JOIN store_map t2 ON t1.id = t2.store_id AND t2.vendor_id = ? AND (t2.deleted_at = ?) LEFT JOIN brand t3 ON t3.id = t1.brand_id WHERE t1.id = ? - ORDER BY t2.updated_at - ` + ORDER BY t2.updated_at` if err = dao.GetRows(db, &stores, sql, model.VendorIDEBAI, utils.DefaultTimeValue, storeID); err == nil { for _, store := range stores { if globals.EnableEbaiStoreWrite { @@ -264,7 +263,7 @@ func (p *PurchaseHandler) UpdateStore(db *dao.DaoDB, storeID int, userName strin if store.SyncStatus&model.SyncFlagDeletedMask == 0 { shopID = store.ID } - store2, err2 := p.ReadStore(jxcontext.AdminCtx, store.VendorOrgCode, store.VendorStoreID,"") + store2, err2 := p.ReadStore(jxcontext.AdminCtx, store.VendorOrgCode, store.VendorStoreID, "") // globals.SugarLogger.Debugf("ebai UpdateStore2 store2:%s, err2:%v", utils.Format4Output(store2, true), err2) if err = err2; err == nil { if store2.ID == store.ID { diff --git a/business/partner/purchase/mtwm/store.go b/business/partner/purchase/mtwm/store.go index 79f000d59..b6767b62f 100644 --- a/business/partner/purchase/mtwm/store.go +++ b/business/partner/purchase/mtwm/store.go @@ -61,7 +61,7 @@ type tEbaiStoreInfo struct { DistrictID int `orm:"column(district_id)"` } -func (p *PurchaseHandler) ReadStore(ctx *jxcontext.Context, vendorOrgCode, vendorStoreID,vendorStoreName string) (retVal *dao.StoreDetail, err error) { +func (p *PurchaseHandler) ReadStore(ctx *jxcontext.Context, vendorOrgCode, vendorStoreID, vendorStoreName string) (retVal *dao.StoreDetail, err error) { result, err := getAPIWithoutToken(vendorOrgCode).PoiGet(vendorStoreID) if err == nil { // globals.SugarLogger.Debug(utils.Format4Output(result, false)) @@ -232,12 +232,13 @@ func (p *PurchaseHandler) UpdateStore(db *dao.DaoDB, storeID int, userName strin db = dao.GetDB() } mtapi := getAPI(getStoreVendorOrgCode(storeID), storeID, "") + //获取本地store信息 storeDetail, err := dao.GetStoreDetail(db, storeID, model.VendorIDMTWM, "") if err != nil { return err } errList := errlist.New() - + //获取平台store信息 remoteStoreInfo, err := mtapi.PoiGet(storeDetail.VendorStoreID) if err != nil { return err diff --git a/conf/app.conf b/conf/app.conf index a5c49e6a3..d27895155 100644 --- a/conf/app.conf +++ b/conf/app.conf @@ -38,6 +38,7 @@ enableMtwmStoreWrite = false enableWscStoreWrite = false enableYbStoreWrite = false enableJdShopWrite = false +enableDouDianStoreWrite=false jdsCookie = "shshshfpa=13b38d4a-8ba0-df12-0012-82d9a37fb835-1573795914; shshshfpb=abYp8Dq5JobRtp2pkZa7MbA%3D%3D; __jdu=1142616513; pinId=WMIzMhF5BfL6nJp9AcA2-A; pin=shop_jxcs; unick=shop_jxcs; _tp=7FBEvLyPe%2FKcgxsfY5lRgA%3D%3D; _pst=shop_jxcs; areaId=22; ipLoc-djd=22-1930-50948-57092; user-key=3ec204b4-f204-4320-98e3-b2569c757800; cn=0; shshshfp=5d23828ee6ea3a33e1a58588db1713f8; 3AB9D23F7A4B3C9B=AK36FFYF5J6WMPRH7YTXMEX4CATHR6NAA3IQEESU2I33FEJRQ3DRLU4SZJYD2XGFLCFW43DHYP5HQKOMR4EFQSLKLA; navigation=[%22shop_jxcs%22]; __jdv=122270672|baidu|-|organic|not set|1589514011252; language=zh_CN; ceshi3.com=000; csrf_token=b84d0a5c-6288-4db4-84e1-cadf66be3bf7; mba_muid=1142616513; TrackID=1qvZk-6QSAOp1NmaouJGEx58_cFglCFv57HEfoHOezMrOnV3_FSK-5ExeYhHx97IltBADG3dvJqLIt3P57wyUW4Z2Q3Y8ITo8Cfdmlz3kykM; RT="z=1&dm=jd.com&si=mcot45862q&ss=kaf1rcqz&sl=2&tt=38t&ld=22qx&nu=b99e5a7f32b36f184614d34a1d926a39&cl=3clu&ul=3crs&hd=3cz3"; b-sec=S2JWP6CAFP7K4I6PXVBUVCO6YVXUX2JAPDHLX5RZUDE4YKCGOEXJIINB3Q4THCFCMVWZPFAYGLWLG; thor=80FAF09E9A09B6E618A68057BDFCFCB8C86E8252DC9F7D3B34572625904FBA0AB6BF053A5325612EC0407791BB05F5301356E71E8B282C40C06D0B5DF3439DEECB102A78FAFF7AC0FC4E2D1FA8DD8BBAE1A011E50B5C74F1870AD982D7BF453F470F31F2241B73AC4C25485025C2ABEBC8A538AF7257824D2FAEE300A1435175B0B451FB5C19B78D729FC83152CA3BAF; _vender_=TNK3O6PALVQGGA33SGBIUTOKL4OOE6DP6OMNVIPMAMULGTRFWUMTVWGFRUTYP4L4EPN3KP73P33BOBN5SNJFBNQB5OMQYSJ5MORGQLJS7QAPOMIN7AZD6B3ZLP2DV4JCXDI5P3KOXJ3PHLIIRZ2YVS4JSSA3JRSBACNLJSC24ELO46GIMRW53XGW36EBPLZMZP2MQCAMJNO44FKT46B7VDVT7KQTELESOOF6E377AYC3NWKQF6ICIYBW4BA4JL5QG2NHGNOHOUJDNUW3N22UF32DLFLEIQGVO2W55J6AKPPBT227XA5NO4S3NFVIUUUADGOYH56T72MTNXCILWVMN4RMUNVFMGL4ISGXJS7YILE7A2ESPAU43MISAOZM2BR53MGRB5OZSQZPV5DBDCN2OVVT3XT5N2VMFELARQNTMAJCDBGXFURSN2Q7SYULLKZEZHTYWWOI65LS5OIHLUZQKWFGMNSQF2UBSYV7FG46CWJGMVHOGV3FY4RUEVJK6BQ223QK3H3VMTHXCZOZV4GKR5EWGIZZDVUAK4B36BPA5HPBO7PXKBOEXEBX77IYBNQLCGMK72J4VKNOUPYKNB5JE5D5UN3R2MMFGLJARTL2QTC5ZRZ4PJCJZWWOV37VWLWFVAN5IGHPAYME73KTNFABM5W73XLOXJFQWTFRZEK3FCL3BLRV4UOXLBQGA34R4WUBYSZURMKTXXB7U; __jda=65775340.1142616513.1573036516.1589946171.1589952725.54; __jdb=65775340.147.1142616513|54.1589952725; __jdc=65775340; _base_=YKH2KDFHMOZBLCUV7NSRBWQUJPBI7JIMU5R3EFJ5UDHJ5LCU7R2NILKK5UJ6GLA2RGYT464UKXAI4Z6HPCTN4UQM3WHVQ4ENFP57OC2DC7JQLRXRUO5PW6B77O6UXAZ4TCNE6YVKRXISVLBYGYO44RCDDPWDA4AEL7ZLXI2SG4SOQWCP5WPWO6EFS7HEHMRWVKBRVHB33TFD4SMNBHRJCTDFHU6SZXCZD6RFXX2OORYGL5H2GYF2IIH2KKD4T72IR4F577G2E5II2OMMXYF2GDYNTS7WGAUXFEWRJ3CTKDBDWMHUKJQF4ZFOTNBBYBIZRXZYERXXIG6ATJFKID7XOR3NQ2CL6K7A2IEZV5HCBNYDPXFCM2ZMCS474KZ44S5F; _vender_new_=GI63BGTJFDBQ46CD7JXUX3HEPM4P5LEA3TJTFGW4ZGGIVOLTPK5T25EXTBLCENPUTR7E2I23YDFQ4ARO6JW3NHSWBDE73RTUKJTADIPFPLYFE3ARGJUBPHWUIONS72KRQOZC5P7PB4VPPLRHGEP7L3Z5K62L2E2MGTWHFJRQ3CAVBDYVW2Z4J6U73HW4BKKOCDAH5T6OJJKWKLBZFOTI7342QSL7YQ2E3I4T777RNZF23XGOTCP3D4INHNO5MNKT3XJZQBVHWUVZYQUXCK5QQTKWADKQUCYV3JRY6YAYOD7Z5IIKGNLREQTCPO7SYGSIS655JUGOUILFLXVZE6KCFG7ZTPRUD6VPE4KCIE4OUZSED6FTSEZHTM363E7XXCHB4NA7VLZHCQSBHDVGMRA7RM4RGJC3MOI4TJNGCLW6QKUCCZAY7XTGOTMC53TFUYERGNIH2RBULZ7UTZH5GU3TC6RWFI2QL4QTAIARA6GNVXENEOYIPZEHN222YDAJX5OBBEECAMAPNKZ3XNF5CNGDJ3DSU2ZLOCAKLFPCYTIIWPPJMCQ636F5464HS4OVFPFNIDW4OCE23JRPYP5FAL6TKHPAC3H3ZRU7WA5GKJJKBZUGIX7NEO4LZB7FJ3RZZZH3UHPQMNILD5DT2V7HVCUOVNOFBEOW5ID2ZMQ3XV264IU4MYHN64RA; _BELONG_CLIENT_=WPSC4XJXWK5USS4JNZY2X7VRLR5MCBKRSVHEXABGTHDGISIQK5YOLZUXYE7IOIM7MOKO74H6CRN6WHAAR4TMDV3XZWMXZRCRT5XRNE3V356BTOB2Y7LPK66VWQK6HPTGWVXIDXDCPVE3W5WMHAIO6AT2LX2XXVNUCXR34ZWFK6HY45CORGIKOSYDYZBF27WOKTUX6BS4FZMIJWNUX6CB4JAA25ZLF7ZEKYOO4QV5HTSBXGNRM3E242MBI6V5D4C5VJDQ3EOYCOW5BMTUJZACIBHXQFAVLRF76VQY5PNJGGJNBEZHSFYYJA3YORRT7FB5AHCOIFQKF3W5RWNUX6CB4JAA26JNMO7AYWNUPZF5HTSBXGNRM3E242MBI6V5D4C5VJDQ3EOYCOW5BWZDKMOJ5BS6II53ERY6ALV3ZWPF42L4CPUHEGPYIII35KDC4FCNVCORCXFD6IVNLBEDPB2GGP4UHWNRUDOQBDIW7RZJXBA2WV5ANZOTEGUCDWYRVQS2YUTIZNZ276PRYG4N56V6YTII7MBKBC7LYHO7C555HTSBXGNRM3E466AYN67DHWVM5HQFJ4NFDO5BTOKMOS5L2CXFVYDR2FCOILVYPEI; _lvtc_=5ZH3OJ7CWYNVGEKDRC32XTFXGY" diff --git a/globals/globals.go b/globals/globals.go index c8da93ebf..c2c0a873c 100644 --- a/globals/globals.go +++ b/globals/globals.go @@ -17,15 +17,16 @@ var ( AliKey string AliSecret string - EnableStoreWrite bool - EnableJdStoreWrite bool - EnableEbaiStoreWrite bool - EnableElmStoreWrite bool - EnableMtwmStoreWrite bool - EnableWscStoreWrite bool - EnablePendingChange bool - EnableYbStoreWrite bool - EnableJdShopWrite bool //京东商城 + EnableStoreWrite bool + EnableJdStoreWrite bool + EnableEbaiStoreWrite bool + EnableElmStoreWrite bool + EnableMtwmStoreWrite bool + EnableWscStoreWrite bool + EnablePendingChange bool + EnableYbStoreWrite bool + EnableJdShopWrite bool //京东商城 + EnableDouDianStoreWrite bool //抖音-抖店 QiniuBucket string WeimobCallbackURL string @@ -113,6 +114,7 @@ func Init() { // EnablePendingChange = web.AppConfig.DefaultBool("enablePendingChange", false) EnableYbStoreWrite = EnableStoreWrite && web.AppConfig.DefaultBool("enableYbStoreWrite", false) EnableJdShopWrite = EnableStoreWrite && web.AppConfig.DefaultBool("enableJdShopWrite", false) + EnableDouDianStoreWrite = EnableStoreWrite && web.AppConfig.DefaultBool("enableDouDianStoreWrite", false) QiniuBucket = web.AppConfig.DefaultString("qiniuBucket", "")