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

This commit is contained in:
苏尹岚
2019-11-06 14:32:40 +08:00
22 changed files with 127 additions and 246 deletions

View File

@@ -46,6 +46,7 @@ func onOrderMsg(msg *weimobapi.CallbackMsg) (response *weimobapi.CallbackRespons
func changeStoreSkusByOrder(order *weimobapi.OrderDetail) {
globals.SugarLogger.Debugf("changeStoreSkusByOrder order:%s", utils.Format4Output(order, true))
receiverMobile := order.DeliveryDetail.LogisticsDeliveryDetail.ReceiverMobile
ctx := jxcontext.NewWithUserName(nil, utils.LimitStringLen(utils.Int64ToStr(order.OrderNo), 32), nil, nil)
if storeList, err := GetStoreList4Mobile(dao.GetDB(), []string{receiverMobile}); err == nil {
if len(storeList) >= 1 {
var skuBindInfos []*cms.StoreSkuBindInfo
@@ -63,19 +64,41 @@ func changeStoreSkusByOrder(order *weimobapi.OrderDetail) {
IsSale: 1,
})
} else {
globals.SugarLogger.Infof("[运营],微商城订单:%s,商品:%s没有设置正确的SkuName编码或单价当前商家编码:%s市场价:%s", order.OrderNo, v.SkuNum, v.SkuCode, jxutils.IntPrice2StandardString(jxutils.StandardPrice2Int(unitPrice)))
globals.SugarLogger.Infof("[运营],微商城订单:%d,商品:%s没有设置正确的SkuName编码或单价当前商家编码:%s市场价:%s", order.OrderNo, v.SkuNum, v.SkuCode, jxutils.IntPrice2StandardString(jxutils.StandardPrice2Int(unitPrice)))
}
}
if len(skuBindInfos) > 0 {
cms.UpdateStoreSkus(jxcontext.NewWithUserName(nil, utils.LimitStringLen(utils.Int64ToStr(order.OrderNo), 32), nil, nil), storeID, skuBindInfos, true, true)
var nameIDs []int
for _, v := range skuBindInfos {
nameIDs = append(nameIDs, v.NameID)
}
if skuNamesInfo, err := cms.GetSkuNames(ctx, "", false, map[string]interface{}{
"nameIDs": nameIDs,
}, 0, 0); err == nil {
for _, skuName := range skuNamesInfo.SkuNames {
if skuName.Status != model.SkuStatusNormal {
cms.UpdateSkuName(ctx, skuName.ID, map[string]interface{}{
"status": model.SkuStatusNormal,
})
}
for _, sku := range skuName.Skus {
if sku.Status != model.SkuStatusNormal {
cms.UpdateSku(ctx, sku.ID, map[string]interface{}{
"status": model.SkuStatusNormal,
})
}
}
}
}
cms.UpdateStoreSkus(ctx, storeID, skuBindInfos, true, true)
} else {
globals.SugarLogger.Debugf("changeStoreSkusByOrder storeID:%d is empty", storeID)
globals.SugarLogger.Debugf("changeStoreSkusByOrder orderID:%d, storeID:%d is empty", order.OrderNo, storeID)
}
} else {
globals.SugarLogger.Infof("[运营],微商城订单:%s,手机:%s找不到唯一一个京西门店%d", order.OrderNo, receiverMobile, len(storeList))
globals.SugarLogger.Infof("[运营],微商城订单:%d,手机:%s找不到唯一一个京西门店%d", order.OrderNo, receiverMobile, len(storeList))
}
} else {
globals.SugarLogger.Warnf("changeStoreSkusByOrder receiverMobile:%s failed with err:%v", receiverMobile, err)
globals.SugarLogger.Warnf("changeStoreSkusByOrder orderNo:%d, receiverMobile:%s failed with err:%v", order.OrderNo, receiverMobile, err)
}
}

View File

@@ -366,9 +366,9 @@ func (c *OrderManager) updateOrderSkuOtherInfo(order *model.GoodsOrder, db *dao.
if skuBindInfo.Price == 0 {
globals.SugarLogger.Infof("updateOrderSkuOtherInfo [运营%s]%s订单sku门店价格为零一般原因为没有门店价格信息orderID:%s, StoreID:%d, SkuID:%d, sku:%v", opNumStr, model.VendorChineseNames[order.VendorID], order.VendorOrderID, jxStoreID, v.JxSkuID, v)
}
v.EarningPrice = jxutils.CaculateSkuEarningPrice(v.ShopPrice, v.SalePrice, storePayPercentage)
}
}
v.EarningPrice = jxutils.CaculateSkuEarningPrice(v.ShopPrice, v.SalePrice, storePayPercentage)
if skuID := jxutils.GetSkuIDFromOrderSku(v); skuID > 0 {
skuIDMap[skuID] = 1

View File

@@ -30,18 +30,16 @@ func (c *BaseScheduler) CreateWaybillOnProviders(ctx *jxcontext.Context, order *
(excludeCourierVendorIDs == nil || excludeCourierVendorIDMap[storeCourier.VendorID] == 0) {
if handler := partner.GetDeliveryPlatformFromVendorID(storeCourier.VendorID); handler != nil && handler.Use4CreateWaybill {
courierVendorID := storeCourier.VendorID
if order.VendorID != model.VendorIDWSC || courierVendorID != model.VendorIDDada { // 达达作为微商城的自有配送,不参与配送竞争
bill, err2 := c.CreateWaybill(courierVendorID, order, maxDeliveryFee)
if err = err2; err == nil {
globals.SugarLogger.Debugf("CreateWaybillOnProviders orderID:%s userName:%s vendorID:%d bill:%v", order.VendorOrderID, userName, courierVendorID, bill)
bills = append(bills, bill)
if createOnlyOne {
break
}
} else {
globals.SugarLogger.Debugf("CreateWaybillOnProviders orderID:%s userName:%s vendorID:%d failed with error:%v", order.VendorOrderID, userName, courierVendorID, err)
errList.AddErr(fmt.Errorf("平台:%s,%s", jxutils.GetVendorName(courierVendorID), err.Error()))
bill, err2 := c.CreateWaybill(courierVendorID, order, maxDeliveryFee)
if err = err2; err == nil {
globals.SugarLogger.Debugf("CreateWaybillOnProviders orderID:%s userName:%s vendorID:%d bill:%v", order.VendorOrderID, userName, courierVendorID, bill)
bills = append(bills, bill)
if createOnlyOne {
break
}
} else {
globals.SugarLogger.Debugf("CreateWaybillOnProviders orderID:%s userName:%s vendorID:%d failed with error:%v", order.VendorOrderID, userName, courierVendorID, err)
errList.AddErr(fmt.Errorf("平台:%s,%s", jxutils.GetVendorName(courierVendorID), err.Error()))
}
}
}
@@ -119,12 +117,6 @@ func (c *BaseScheduler) GetStoreDeliveryType(order *model.GoodsOrder, storeMap *
deliveryType = scheduler.StoreDeliveryTypeByPlatform // 缺省值
if storeMap != nil {
deliveryType = int(storeMap.DeliveryType)
// 微盟订单,要确认有绑达达,才能是非自送的
if order.VendorID == model.VendorIDWSC && deliveryType != scheduler.StoreDeliveryTypeByStore {
if courierMapList, _ := dao.GetOpenedStoreCouriersByStoreID(nil, jxStoreID, model.VendorIDDada); len(courierMapList) == 0 {
deliveryType = scheduler.StoreDeliveryTypeByStore
}
}
}
globals.SugarLogger.Debugf("GetStoreDeliveryType orderID:%s, deliveryType:%d", order.VendorOrderID, deliveryType)
return deliveryType

View File

@@ -477,8 +477,7 @@ func (s *DefScheduler) OnWaybillStatusChanged(bill *model.Waybill, isPending boo
partner.CurOrderManager.UpdateOrderStatusAndDeliveryFlag(order)
}
} else {
if savedOrderInfo.storeDeliveryType == scheduler.StoreDeliveryTypeByStore ||
model.IsSpecialOrderPlatformWaybill(bill) {
if savedOrderInfo.storeDeliveryType == scheduler.StoreDeliveryTypeByStore {
if err := s.SelfDeliverDelivering(savedOrderInfo.order, bill.CourierMobile); err != nil {
partner.CurOrderManager.OnOrderMsg(order, "自送出设置失败", err.Error())
}
@@ -558,8 +557,6 @@ func (s *DefScheduler) OnWaybillStatusChanged(bill *model.Waybill, isPending boo
} else {
err2 = s.Swtich2SelfDelivered(order, "")
}
} else if model.IsSpecialOrderPlatformWaybill(bill) {
err2 = s.SelfDeliverDelivered(savedOrderInfo.order, "")
}
if err2 != nil {
partner.CurOrderManager.OnOrderMsg(order, "送达设置失败", err2.Error())

View File

@@ -15,10 +15,10 @@ import (
"git.rosy.net.cn/jx-callback/business/auth2/authprovider/mobile"
"git.rosy.net.cn/jx-callback/business/authz/autils"
"git.rosy.net.cn/jx-callback/business/jxutils"
"git.rosy.net.cn/jx-callback/business/jxutils/msg"
"git.rosy.net.cn/jx-callback/business/partner"
"git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/jx-callback/business/jxutils/ddmsg"
"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"
@@ -180,7 +180,7 @@ func SendMsg2Somebody(ctx *jxcontext.Context, mobileNum, verifyCode, msgType, ms
for _, v := range receiveMsgUsersMap[msgType] {
user, err2 := dao.GetUserByID(db, "name", v)
if err2 == nil {
msg.SendUserMessage(dingdingapi.MsgTyeText, user, msgType, msgContent)
ddmsg.SendUserMessage(dingdingapi.MsgTyeText, user.GetID(), msgType, msgContent)
} else if err == nil {
err = err2
}

View File

@@ -268,7 +268,6 @@ func DeleteCategoryMap(ctx *jxcontext.Context, db *dao.DaoDB, categoryID int) (n
return dao.DeleteEntityLogically(db, catMap, map[string]interface{}{
model.FieldEbaiSyncStatus: model.SyncFlagDeletedMask,
model.FieldMtwmSyncStatus: model.SyncFlagDeletedMask,
model.FieldWscSyncStatus: model.SyncFlagDeletedMask,
}, ctx.GetUserName(), map[string]interface{}{
model.FieldCategoryID: categoryID,
model.FieldDeletedAt: utils.DefaultTimeValue,
@@ -651,7 +650,8 @@ func AddSkuName(ctx *jxcontext.Context, skuNameExt *model.SkuNameExt, userName s
return outSkuNameExt, err
}
func UpdateSkuName(ctx *jxcontext.Context, nameID int, payload map[string]interface{}, userName string) (num int64, err error) {
func UpdateSkuName(ctx *jxcontext.Context, nameID int, payload map[string]interface{}) (num int64, err error) {
userName := ctx.GetUserName()
skuName := &model.SkuName{}
skuName.ID = nameID
db := dao.GetDB()
@@ -693,22 +693,10 @@ func UpdateSkuName(ctx *jxcontext.Context, nameID int, payload map[string]interf
}
if globals.EnableStoreWrite {
if valid["img"] != nil {
// imgContent, imgMD5, err2 := jxutils.DownloadFileByURL(valid["img"].(string))
// if err = err2; err != nil {
// return 0, err
// }
// valid["ImgHashCode"] = imgMD5
// imgHintMap, err := UploadImg2Platforms(ctx, nil, valid["img"].(string), imgContent, "")
// if err != nil {
// return 0, err
// }
// // valid["ImgWeimob"] = imgHintMap[model.VendorIDWSC]
// valid["ImgEbai"] = imgHintMap[model.VendorIDEBAI]
dataRes, err2 := datares.TryRegisterDataResource(ctx, skuName.Name, valid["img"].(string), model.ImgTypeMain, false)
if err = err2; err != nil {
return 0, err
}
// valid["ImgHashCode"] = dataRes.HashCode
valid["ImgEbai"] = dataRes.EbaiURL
}
if valid["img2"] != nil {
@@ -865,7 +853,8 @@ func AddSku(ctx *jxcontext.Context, nameID int, sku *model.Sku, userName string)
return outSkuNameExt, err
}
func UpdateSku(ctx *jxcontext.Context, skuID int, payload map[string]interface{}, userName string) (num int64, err error) {
func UpdateSku(ctx *jxcontext.Context, skuID int, payload map[string]interface{}) (num int64, err error) {
userName := ctx.GetUserName()
sku := &model.Sku{}
sku.ID = skuID
db := dao.GetDB()
@@ -996,7 +985,6 @@ func DeleteStoreSku(ctx *jxcontext.Context, db *dao.DaoDB, nameID, skuID int) (n
storeSkuBind := &model.StoreSkuBind{}
_, err = dao.DeleteEntityLogically(db, storeSkuBind, map[string]interface{}{
model.FieldJdSyncStatus: model.SyncFlagDeletedMask,
model.FieldWscSyncStatus: model.SyncFlagDeletedMask,
model.FieldEbaiSyncStatus: model.SyncFlagDeletedMask,
}, ctx.GetUserName(), map[string]interface{}{
model.FieldSkuID: v.ID,

View File

@@ -19,6 +19,7 @@ import (
"git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/baseapi/utils/errlist"
"git.rosy.net.cn/jx-callback/business/jxutils"
"git.rosy.net.cn/jx-callback/business/jxutils/ddmsg"
"git.rosy.net.cn/jx-callback/business/jxutils/excel"
"git.rosy.net.cn/jx-callback/business/jxutils/jxcontext"
"git.rosy.net.cn/jx-callback/business/jxutils/msg"
@@ -758,6 +759,7 @@ func UpdateStore(ctx *jxcontext.Context, storeID int, payload map[string]interfa
}
} else {
dao.Commit(db)
notifyStoreOperatorChanged(store, valid["operatorPhone"])
}
}
} else {
@@ -766,6 +768,21 @@ func UpdateStore(ctx *jxcontext.Context, storeID int, payload map[string]interfa
return num, err
}
func notifyStoreOperatorChanged(store *model.Store, newOperator2 interface{}) {
if store.OperatorPhone != "" && newOperator2 != nil {
db := dao.GetDB()
if user, err := dao.GetUserByID(db, "mobile", store.OperatorPhone); err == nil {
curUserName := ""
if newOperator := utils.Interface2String(newOperator2); newOperator != "" {
if curUser, err := dao.GetUserByID(db, "mobile", newOperator); err == nil {
curUserName = curUser.GetName()
}
}
ddmsg.SendUserMessage(dingdingapi.MsgTyeText, user.GetID(), "门店运营变更", fmt.Sprintf("门店:%d-%s,原运营:%s,变更为:%s", store.ID, store.Name, user.GetName(), curUserName))
}
}
}
func SetStoreStatus(ctx *jxcontext.Context, storeID, status int) (err error) {
payload := map[string]interface{}{
"status": status,

View File

@@ -54,19 +54,19 @@ type StoreSkuExt struct {
StoreSkuStatus int `json:"storeSkuStatus"`
EbaiID string `orm:"column(ebai_id);index" json:"ebaiID"`
MtwmID string `orm:"column(mtwm_id)" json:"mtwmID"` // 这个也不是必须的只是为了DAO取数据语句一致
WscID string `orm:"column(wsc_id);index" json:"wscID"` // 表示微盟skuId
WscID2 string `orm:"column(wsc_id2);index" json:"wscID2"` // 表示微盟goodsId
MtwmID string `orm:"column(mtwm_id)" json:"mtwmID"` // 这个也不是必须的只是为了DAO取数据语句一致
// WscID string `orm:"column(wsc_id);index" json:"wscID"` // 表示微盟skuId
// WscID2 string `orm:"column(wsc_id2);index" json:"wscID2"` // 表示微盟goodsId
JdSyncStatus int8 `orm:"default(2)" json:"jdSyncStatus"`
EbaiSyncStatus int8 `orm:"default(2)" json:"ebaiSyncStatus"`
MtwmSyncStatus int8 `orm:"default(2)" json:"mtwmSyncStatus"`
WscSyncStatus int8 `orm:"default(2)" json:"wscSyncStatus"`
// WscSyncStatus int8 `orm:"default(2)" json:"wscSyncStatus"`
JdPrice int `json:"jdPrice"`
EbaiPrice int `json:"ebaiPrice"`
MtwmPrice int `json:"mtwmPrice"`
WscPrice int `json:"wscPrice"`
// WscPrice int `json:"wscPrice"`
AutoSaleAt time.Time `orm:"type(datetime);null" json:"autoSaleAt"`
@@ -441,9 +441,9 @@ func GetStoresSkusNew(ctx *jxcontext.Context, storeIDs, skuIDs []int, isFocus bo
t2.comment, t2.category_id sku_category_id, t2.status sku_status,
t4.created_at bind_created_at, t4.updated_at bind_updated_at, t4.last_operator bind_last_operator, t4.deleted_at bind_deleted_at,
t4.sub_store_id, t4.price bind_price, IF(t4.unit_price IS NOT NULL, t4.unit_price, t1.price) unit_price, t4.status store_sku_status, t4.auto_sale_at,
t4.ebai_id, t4.mtwm_id, t4.wsc_id, t4.wsc_id2,
t4.jd_sync_status, t4.ebai_sync_status, t4.mtwm_sync_status, t4.wsc_sync_status,
t4.jd_price, t4.ebai_price, t4.mtwm_price, t4.wsc_price
t4.ebai_id, t4.mtwm_id,
t4.jd_sync_status, t4.ebai_sync_status, t4.mtwm_sync_status,
t4.jd_price, t4.ebai_price, t4.mtwm_price
` + sql
var tmpList []*tGetStoresSkusInfo
beginTime := time.Now()
@@ -1022,7 +1022,6 @@ func updateStoresSkusWithoutSync(ctx *jxcontext.Context, db *dao.DaoDB, storeIDs
model.FieldJdSyncStatus: model.SyncFlagDeletedMask,
model.FieldEbaiSyncStatus: model.SyncFlagDeletedMask,
model.FieldMtwmSyncStatus: model.SyncFlagDeletedMask,
model.FieldWscSyncStatus: model.SyncFlagDeletedMask,
}, userName, nil); err != nil {
dao.Rollback(db)
return nil, err
@@ -1066,7 +1065,6 @@ func updateStoresSkusWithoutSync(ctx *jxcontext.Context, db *dao.DaoDB, storeIDs
updateFieldMap[model.FieldJdSyncStatus] = 1
updateFieldMap[model.FieldEbaiSyncStatus] = 1
updateFieldMap[model.FieldMtwmSyncStatus] = 1
updateFieldMap[model.FieldWscSyncStatus] = 1
updateFieldMap[model.FieldUpdatedAt] = 1
updateFieldMap[model.FieldLastOperator] = 1
@@ -1160,7 +1158,6 @@ func updateStoreSkusSaleWithoutSync(ctx *jxcontext.Context, storeID int, skuBind
model.FieldJdSyncStatus: skuBind.JdSyncStatus | model.SyncFlagSaleMask,
model.FieldEbaiSyncStatus: skuBind.EbaiSyncStatus | model.SyncFlagSaleMask,
model.FieldMtwmSyncStatus: skuBind.MtwmSyncStatus | model.SyncFlagSaleMask,
model.FieldWscSyncStatus: skuBind.WscSyncStatus | model.SyncFlagSaleMask,
}
if utils.IsTimeZero(autoSaleTime) || skuBind.Status == model.SkuStatusNormal {
kvs["AutoSaleAt"] = utils.DefaultTimeValue
@@ -1272,7 +1269,6 @@ func CopyStoreSkus(ctx *jxcontext.Context, fromStoreID, toStoreID int, copyMode
t1.price = t1.price * ? / 100,
t1.unit_price = t1.unit_price * ? / 100,
t1.jd_sync_status = t1.jd_sync_status | ?,
t1.wsc_sync_status = t1.wsc_sync_status | ?,
t1.mtwm_sync_status = t1.mtwm_sync_status | ?,
t1.ebai_sync_status = t1.ebai_sync_status | ?
WHERE t1.store_id = ? AND t1.deleted_at = ?
@@ -1288,7 +1284,6 @@ func CopyStoreSkus(ctx *jxcontext.Context, fromStoreID, toStoreID int, copyMode
model.SyncFlagPriceMask,
model.SyncFlagPriceMask,
model.SyncFlagPriceMask,
model.SyncFlagPriceMask,
toStoreID,
utils.DefaultTimeValue,
}
@@ -1317,7 +1312,6 @@ func CopyStoreSkus(ctx *jxcontext.Context, fromStoreID, toStoreID int, copyMode
t1.last_operator = ?,
t1.status = ?,
t1.jd_sync_status = IF((t1.jd_sync_status & ?) <> 0, 0, ?),
t1.wsc_sync_status = IF((t1.wsc_sync_status & ?) <> 0, 0, ?),
t1.mtwm_sync_status = IF((t1.mtwm_sync_status & ?) <> 0, 0, ?),
t1.ebai_sync_status = IF((t1.ebai_sync_status & ?) <> 0, 0, ?)
WHERE t1.store_id = ? AND t1.deleted_at = ? AND t0.id IS NULL
@@ -1338,8 +1332,6 @@ func CopyStoreSkus(ctx *jxcontext.Context, fromStoreID, toStoreID int, copyMode
model.SyncFlagDeletedMask,
model.SyncFlagNewMask,
model.SyncFlagDeletedMask,
model.SyncFlagNewMask,
model.SyncFlagDeletedMask,
toStoreID,
utils.DefaultTimeValue,
}
@@ -1371,7 +1363,6 @@ func CopyStoreSkus(ctx *jxcontext.Context, fromStoreID, toStoreID int, copyMode
t1.unit_price = IF(t0.unit_price * ? / 100 > 0, t0.unit_price * ? / 100, 1),
t1.status = IF(? = 0, t1.status, t0.status),
t1.jd_sync_status = t1.jd_sync_status | ?,
t1.wsc_sync_status = t1.wsc_sync_status | ?,
t1.mtwm_sync_status = t1.mtwm_sync_status | ?,
t1.ebai_sync_status = t1.ebai_sync_status | ?
WHERE t1.store_id = ? AND t1.deleted_at = ? AND t0.id IS NOT NULL
@@ -1392,7 +1383,6 @@ func CopyStoreSkus(ctx *jxcontext.Context, fromStoreID, toStoreID int, copyMode
syncStatus,
syncStatus,
syncStatus,
syncStatus,
toStoreID,
utils.DefaultTimeValue,
}
@@ -1408,10 +1398,10 @@ func CopyStoreSkus(ctx *jxcontext.Context, fromStoreID, toStoreID int, copyMode
// 添加toStore中不存在但fromStore存在的
sql = `
INSERT INTO store_sku_bind(created_at, updated_at, last_operator, deleted_at, store_id, sku_id, sub_store_id, price, unit_price, status,
jd_sync_status, wsc_sync_status, ebai_sync_status, mtwm_sync_status)
jd_sync_status, ebai_sync_status, mtwm_sync_status)
SELECT ?, ?, ?, ?, ?,
t1.sku_id, 0, IF(t1.price * ? / 100 > 0, t1.price * ? / 100, 1), IF(t1.unit_price * ? / 100 > 0, t1.unit_price * ? / 100, 1),
IF(? = 0, ?, t1.status), ?, ?, ?, ?
IF(? = 0, ?, t1.status), ?, ?, ?
FROM store_sku_bind t1
JOIN sku t2 ON t1.sku_id = t2.id AND t2.deleted_at = ?
JOIN sku_name t3 ON t2.name_id = t3.id AND t3.deleted_at = ?
@@ -1430,7 +1420,6 @@ func CopyStoreSkus(ctx *jxcontext.Context, fromStoreID, toStoreID int, copyMode
model.SyncFlagNewMask,
model.SyncFlagNewMask,
model.SyncFlagNewMask,
model.SyncFlagNewMask,
utils.DefaultTimeValue,
utils.DefaultTimeValue,
utils.DefaultTimeValue,
@@ -1798,7 +1787,6 @@ func setStoreSkuBindStatus(skuBind *model.StoreSkuBind, status int8) {
skuBind.JdSyncStatus |= status
skuBind.EbaiSyncStatus |= status
skuBind.MtwmSyncStatus |= status
skuBind.WscSyncStatus |= status
}
func checkStoreExisting(db *dao.DaoDB, storeID int) (err error) {

View File

@@ -702,3 +702,11 @@ func LoadUserCart(ctx *jxcontext.Context, userID string, storeIDs []int) (cartIt
err = dao.GetRows(dao.GetDB(), &cartItems, sql, userID, storeIDs)
return cartItems, err
}
func GetSelfInfo(ctx *jxcontext.Context) (user *model.User, err error) {
tokenInfo, err := auth2.GetTokenInfo(ctx.GetToken())
if err == nil {
user, err = dao.GetUserByID(dao.GetDB(), "user_id", tokenInfo.GetID())
}
return user, err
}

View File

@@ -577,7 +577,7 @@ func DeleteWrongSpu(ctx *jxcontext.Context, isAsync, isContinueWhenError bool) (
mapData := map[string]interface{}{
"name": skuNameList[step].Name,
}
_, err = cms.UpdateSkuName(ctx, skuNameList[step].ID, mapData, ctx.GetUserName())
_, err = cms.UpdateSkuName(ctx, skuNameList[step].ID, mapData)
if err != nil {
globals.SugarLogger.Debugf("DeleteWrongSpu failed nameid:%d, name:%s, with error:%v", skuNameList[step].ID, skuNameList[step].Name, err)
}

View File

@@ -80,18 +80,12 @@ func getJxStoreIDFromOrder(order *model.GoodsOrder) (retVal int) {
// 此函数得到的是order的销售门店京西ID与GetJxStoreIDFromOrder的区别是order.StoreID的解释不同参考其它相关资料
func GetSaleStoreIDFromOrder(order *model.GoodsOrder) (retVal int) {
if order.VendorID != model.VendorIDWSC {
return getJxStoreIDFromOrder(order)
}
return order.StoreID
return getJxStoreIDFromOrder(order)
}
// 此函数得到的是order的商品的展示门店京西ID与GetJxStoreIDFromOrder的区别是order.StoreID的解释不同参考其它相关资料
func GetShowStoreIDFromOrder(order *model.GoodsOrder) (retVal int) {
if order.VendorID != model.VendorIDWSC {
return getJxStoreIDFromOrder(order)
}
return order.JxStoreID
return getJxStoreIDFromOrder(order)
}
func GetSkuIDFromOrderSku(sku *model.OrderSku) (skuID int) {

View File

@@ -14,8 +14,6 @@ import (
"git.rosy.net.cn/jx-callback/globals"
)
const weixinTemplateID4StoreStatusChanged = "Fl0vOnBKTQqRFx3-shGKxdCnxMdQXNeODzgkuwd7oxw"
// todo msgType不依赖于钉钉
func SendUserMessage(msgType string, user *model.User, title, content string) (err error) {
userID := user.GetID()

View File

@@ -124,67 +124,6 @@ func GetStoreDetailByVendorStoreID(db *DaoDB, vendorStoreID string, vendorID int
return storeDetail, err
}
func GetPossibleStoresByPlaceName(db *DaoDB, cityName, provinceName string) (storeList []*StoreDetail, err error) {
sqlList := []string{
`
SELECT t1.*, t5.vendor_store_id
FROM store t1
JOIN place t2 ON t2.code = t1.city_code AND t2.name = ?
LEFT JOIN store_map t5 ON t1.id = t5.store_id AND t5.vendor_id = ? AND t5.deleted_at = ?
WHERE t1.status = ? AND (SELECT COUNT(*) FROM store_map t10 WHERE t10.store_id = t1.id AND t10.deleted_at = ? AND t10.status <> ?) > 0
`,
`
SELECT t1.*, t5.vendor_store_id
FROM store t1
JOIN place t2 ON t2.code = t1.city_code
JOIN place t3 ON t3.code = t2.parent_code AND t3.name = ?
LEFT JOIN store_map t5 ON t1.id = t5.store_id AND t5.vendor_id = ? AND t5.deleted_at = ?
WHERE t1.status = ? AND (SELECT COUNT(*) FROM store_map t10 WHERE t10.store_id = t1.id AND t10.deleted_at = ? AND t10.status <> ?) > 0
`,
`
SELECT t1.*, t5.vendor_store_id
FROM store t1
LEFT JOIN store_map t5 ON t1.id = t5.store_id AND t5.vendor_id = ? AND t5.deleted_at = ?
WHERE t1.status = ? AND (SELECT COUNT(*) FROM store_map t10 WHERE t10.store_id = t1.id AND t10.deleted_at = ? AND t10.status <> ?) > 0
`,
}
sqlParamsList := [][]interface{}{
[]interface{}{
cityName,
model.VendorIDWSC,
utils.DefaultTimeValue,
model.StoreStatusOpened,
utils.DefaultTimeValue,
model.StoreStatusDisabled,
},
[]interface{}{
provinceName,
model.VendorIDWSC,
utils.DefaultTimeValue,
model.StoreStatusOpened,
utils.DefaultTimeValue,
model.StoreStatusDisabled,
},
[]interface{}{
model.VendorIDWSC,
utils.DefaultTimeValue,
model.StoreStatusOpened,
utils.DefaultTimeValue,
model.StoreStatusDisabled,
},
}
for k := range sqlList {
if err = GetRows(db, &storeList, sqlList[k], sqlParamsList[k]); err != nil {
return nil, err
}
if len(storeList) > 0 {
return storeList, nil
}
}
// 正常是不应该达到这里的
return storeList, err
}
// 这个返回的地点信息是城市
func GetStoreDetail2(db *DaoDB, storeID int, vendorStoreID string, vendorID int) (storeDetail *StoreDetail2, err error) {
sql := `
@@ -374,7 +313,6 @@ func AddStoreCategoryMap(db *DaoDB, storeID, categoryID int, vendorID int, vendo
CategoryID: categoryID,
MtwmSyncStatus: model.SyncFlagNewMask,
EbaiSyncStatus: model.SyncFlagNewMask,
WscSyncStatus: model.SyncFlagNewMask,
}
storeCat.DeletedAt = utils.DefaultTimeValue
if err = GetEntity(db, storeCat, model.FieldStoreID, model.FieldCategoryID, model.FieldDeletedAt); err != nil && !IsNoRowsError(err) {
@@ -383,15 +321,9 @@ func AddStoreCategoryMap(db *DaoDB, storeID, categoryID int, vendorID int, vendo
if vendorID == model.VendorIDMTWM {
storeCat.MtwmID = vendorCategoryID
storeCat.MtwmSyncStatus = status
} else if vendorID == model.VendorIDEBAI || vendorID == model.VendorIDWSC {
intVendorCategoryID := utils.Str2Int64WithDefault(vendorCategoryID, 0)
if vendorID == model.VendorIDEBAI {
storeCat.EbaiID = intVendorCategoryID
storeCat.EbaiSyncStatus = status
} else {
storeCat.WscID = intVendorCategoryID
storeCat.WscSyncStatus = status
}
} else if vendorID == model.VendorIDEBAI {
storeCat.EbaiID = utils.Str2Int64WithDefault(vendorCategoryID, 0)
storeCat.EbaiSyncStatus = status
} else {
panic("unsupported vendor")
}

View File

@@ -213,14 +213,10 @@ func GetStoreSkus2(db *DaoDB, vendorID, storeID int, skuIDs []int, mustDirty boo
if !isSingleStorePF {
tableName = "t2"
}
vendorSkuNameField := "0"
if vendorID == model.VendorIDWSC {
vendorSkuNameField = "t1.wsc_id2"
}
fieldPrefix := ConvertDBFieldPrefix(model.VendorNames[vendorID])
sql := `
SELECT t1.id bind_id, t1.sku_id, t1.price, t1.unit_price, t1.status store_sku_status, %s.%s_id vendor_sku_id,
t1.%s_sync_status store_sku_sync_status, %s vendor_name_id, t1.store_id, t1.deleted_at bind_deleted_at,
t1.%s_sync_status store_sku_sync_status, t1.store_id, t1.deleted_at bind_deleted_at,
t2.*,
t3.id name_id, t3.prefix, t3.name, t3.unit, t3.upc,
IF(t11.%s <> '', t11.%s, t3.img) img,
@@ -228,7 +224,7 @@ func GetStoreSkus2(db *DaoDB, vendorID, storeID int, skuIDs []int, mustDirty boo
t13.%s desc_img,
t4.%s_category_id vendor_vendor_cat_id`
fmtParams := []interface{}{
tableName, fieldPrefix, fieldPrefix, vendorSkuNameField,
tableName, fieldPrefix, fieldPrefix,
GetDataResFieldName(vendorID), GetDataResFieldName(vendorID),
GetDataResFieldName(vendorID), GetDataResFieldName(vendorID),
GetDataResFieldName(vendorID),

View File

@@ -17,7 +17,7 @@ const (
// FieldElmSyncStatus = "ElmSyncStatus"
FieldEbaiSyncStatus = "EbaiSyncStatus"
FieldMtwmSyncStatus = "MtwmSyncStatus"
FieldWscSyncStatus = "WscSyncStatus"
// FieldWscSyncStatus = "WscSyncStatus"
FieldVendorID = "VendorID"
FieldStoreID = "StoreID"
@@ -31,8 +31,8 @@ const (
// FieldElmID = "ElmID"
FieldEbaiID = "EbaiID"
FieldMtwmID = "MtwmID"
FieldWscID = "WscID"
FieldWscID2 = "WscID2"
// FieldWscID = "WscID"
// FieldWscID2 = "WscID2"
FieldSkuID = "SkuID"
FieldLevel = "Level"

View File

@@ -263,12 +263,7 @@ type OrderComment struct {
// 判断是否是购买平台自有物流
// 对于京东,饿百来说,就是其自有的物流,对于微商城来说,是达达
func IsWaybillPlatformOwn(bill *Waybill) bool {
return bill.OrderVendorID == bill.WaybillVendorID || IsSpecialOrderPlatformWaybill(bill)
}
// 是否是特殊物流
func IsSpecialOrderPlatformWaybill(bill *Waybill) bool {
return (bill.OrderVendorID == VendorIDWSC && bill.WaybillVendorID == VendorIDDada)
return bill.OrderVendorID == bill.WaybillVendorID
}
// 订单是否已经有了有效运单

View File

@@ -46,12 +46,12 @@ type StoreSkuCategoryMap struct {
// ElmID int64 `orm:"column(elm_id);index"`
EbaiID int64 `orm:"column(ebai_id);index"`
MtwmID string `orm:"column(mtwm_id);index;size(16)"` // 美团外卖没有ID保存名字
WscID int64 `orm:"column(wsc_id);index"`
// WscID int64 `orm:"column(wsc_id);index"`
// ElmSyncStatus int8 `orm:"default(2)"`
EbaiSyncStatus int8 `orm:"default(2)"`
MtwmSyncStatus int8 `orm:"default(2)"`
WscSyncStatus int8 `orm:"default(2)"`
// WscSyncStatus int8 `orm:"default(2)"`
}
func (*StoreSkuCategoryMap) TableUnique() [][]string {
@@ -95,20 +95,20 @@ type StoreSkuBind struct {
// ElmID int64 `orm:"column(elm_id);index"`
EbaiID int64 `orm:"column(ebai_id);index"`
MtwmID int64 `orm:"column(mtwm_id)"` // 这个也不是必须的只是为了DAO取数据语句一致
WscID int64 `orm:"column(wsc_id);index"` // 表示微盟skuId
WscID2 int64 `orm:"column(wsc_id2);index"` // 表示微盟goodsId
MtwmID int64 `orm:"column(mtwm_id)"` // 这个也不是必须的只是为了DAO取数据语句一致
// WscID int64 `orm:"column(wsc_id);index"` // 表示微盟skuId
// WscID2 int64 `orm:"column(wsc_id2);index"` // 表示微盟goodsId
// ElmSyncStatus int8 `orm:"default(2)"`
JdSyncStatus int8 `orm:"default(2)"`
EbaiSyncStatus int8 `orm:"default(2)"`
MtwmSyncStatus int8 `orm:"default(2)"`
WscSyncStatus int8 `orm:"default(2)"`
// WscSyncStatus int8 `orm:"default(2)"`
JdPrice int `json:"jdPrice"`
EbaiPrice int `json:"ebaiPrice"`
MtwmPrice int `json:"mtwmPrice"`
WscPrice int `json:"wscPrice"`
// WscPrice int `json:"wscPrice"`
AutoSaleAt time.Time `orm:"type(datetime);null" json:"autoSaleAt"`
}

View File

@@ -33,7 +33,7 @@ func TestBuildNewJxOrder(t *testing.T) {
msg := &CallbackMsg{
AppKey: appKey,
MsgType: MsgTypeOrder,
SubMsgType: SubMsgTypeOrderNew,
SubMsgType: utils.Int2Str(model.OrderStatusNew),
ThingID: order.VendorOrderID,
Data: utils.Format4Output(order2, true),
}

View File

@@ -2,7 +2,6 @@ package wsc
import (
"errors"
"sort"
"time"
"git.rosy.net.cn/baseapi/platformapi/weimobapi"
@@ -263,75 +262,7 @@ func (p *PurchaseHandler) postFakeMsg(orderNo int64, fakeStatus string) {
}
func (p *PurchaseHandler) arrangeSaleStore(order *model.GoodsOrder, cityName, provinceName string) {
globals.SugarLogger.Debugf("arrangeSaleStore orderID:%s cityName:%s, provinceName:%s", order.VendorOrderID, cityName, provinceName)
const (
maxTryStoreWhenArrange = 5
)
db := dao.GetDB()
var selectedStore *model.Store
if true {
if storeDetail, err := dao.GetStoreDetailByVendorStoreID(db, order.VendorStoreID, model.VendorIDWSC); err == nil {
selectedStore = &storeDetail.Store
}
} else {
storeList, err := dao.GetPossibleStoresByPlaceName(db, cityName, provinceName)
if err != nil {
globals.SugarLogger.Errorf("arrangeSaleStore failed with error:%v", err)
}
globals.SugarLogger.Debugf("arrangeSaleStore possible stores orderID:%s", order.VendorOrderID)
for _, store := range storeList {
globals.SugarLogger.Debugf("orderID:%s %s:%d", order.VendorOrderID, store.Name, store.ID)
}
if len(storeList) > 0 {
distanceList := make(utils.SortList, 0)
userLng := jxutils.IntCoordinate2Standard(order.ConsigneeLng)
userLat := jxutils.IntCoordinate2Standard(order.ConsigneeLat)
for k, store := range storeList {
// 展示门店自身不参与派单
if store.VendorStoreID != order.VendorStoreID {
sortItem := &utils.SortItem{
CompareValue: int64(jxutils.EarthDistance(userLng, userLat, jxutils.IntCoordinate2Standard(store.Lng), jxutils.IntCoordinate2Standard(store.Lat)) * 1000),
Index: k,
}
distanceList = append(distanceList, sortItem)
}
}
sort.Sort(distanceList)
globals.SugarLogger.Debugf("arrangeSaleStore distance list orderID:%s", order.VendorOrderID)
for _, dist := range distanceList {
globals.SugarLogger.Debugf("orderID:%s %s:%d, distance:%d", order.VendorOrderID, storeList[dist.Index].Name, storeList[dist.Index].ID, dist.CompareValue)
}
if len(distanceList) > maxTryStoreWhenArrange {
distanceList = distanceList[:maxTryStoreWhenArrange]
}
for _, v := range distanceList {
selectedStore = &storeList[v.Index].Store
if selectedStore.DeliveryRangeType == model.DeliveryRangeTypeRadius {
distance := v.CompareValue
if distance < utils.Str2Int64(selectedStore.DeliveryRange) {
break
} else {
globals.SugarLogger.Debugf("arrangeSaleStore orderID:%s distance:%d, deliveryRange:%d", order.VendorOrderID, distance, utils.Str2Int64(selectedStore.DeliveryRange))
}
} else {
points := jxutils.CoordinateStr2Points(selectedStore.DeliveryRange)
if utils.IsPointInPolygon(userLng, userLat, points) {
break
} else {
globals.SugarLogger.Debugf("arrangeSaleStore orderID:%s userLng:%f, userLat:%f, deliveryRange:%s", order.VendorOrderID, userLng, userLat, selectedStore.DeliveryRange)
}
}
selectedStore = nil
}
}
}
if selectedStore != nil {
order.StoreID = selectedStore.ID
order.StoreName = selectedStore.Name
globals.SugarLogger.Debugf("arrangeSaleStore orderID:%s arranged to store:%d", order.VendorOrderID, selectedStore.ID)
} else {
globals.SugarLogger.Errorf("arrangeSaleStore orderID:%s 找不到门店", order.VendorOrderID)
}
}
func (p *PurchaseHandler) setStoreOrderSeq(order *model.GoodsOrder) {

View File

@@ -152,7 +152,7 @@ func (c *SkuController) SyncCategory() {
// @Param isBySku query bool false "是否将sku拆开缺省为false"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /GetSkuNames [get]
// @router /GetSkuNames [get,post]
func (c *SkuController) GetSkuNames() {
c.callGetSkuNames(func(params *tSkuGetSkuNamesParams) (retVal interface{}, errCode string, err error) {
retVal, err = cms.GetSkuNames(params.Ctx, params.Keyword, params.IsBySku, params.MapData, params.Offset, params.PageSize)
@@ -191,7 +191,7 @@ func (c *SkuController) UpdateSkuName() {
// dummySkuName := &model.SkuName{}
payload := make(map[string]interface{})
if err = utils.UnmarshalUseNumber([]byte(params.Payload), &payload); err == nil {
retVal, err = cms.UpdateSkuName(params.Ctx, params.NameID, payload, params.Ctx.GetUserName())
retVal, err = cms.UpdateSkuName(params.Ctx, params.NameID, payload)
}
return retVal, "", err
})
@@ -241,7 +241,7 @@ func (c *SkuController) UpdateSku() {
c.callUpdateSku(func(params *tSkuUpdateSkuParams) (retVal interface{}, errCode string, err error) {
payload := make(map[string]interface{})
if err = utils.UnmarshalUseNumber([]byte(params.Payload), &payload); err == nil {
retVal, err = cms.UpdateSku(params.Ctx, params.SkuID, payload, params.Ctx.GetUserName())
retVal, err = cms.UpdateSku(params.Ctx, params.SkuID, payload)
}
return retVal, "", err
})

View File

@@ -361,3 +361,16 @@ func (c *User2Controller) SaveMyCart() {
return retVal, "", err
})
}
// @Title 得到用户自己的信息
// @Description 得到用户自己的信息
// @Param token header string true "认证token"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /GetSelfInfo [get]
func (c *User2Controller) GetSelfInfo() {
c.callGetSelfInfo(func(params *tUser2GetSelfInfoParams) (retVal interface{}, errCode string, err error) {
retVal, err = cms.GetSelfInfo(params.Ctx)
return retVal, "", err
})
}

View File

@@ -1093,7 +1093,7 @@ func init() {
beego.ControllerComments{
Method: "GetSkuNames",
Router: `/GetSkuNames`,
AllowHTTPMethods: []string{"get"},
AllowHTTPMethods: []string{"get","post"},
MethodParams: param.Make(),
Filters: nil,
Params: nil})
@@ -1899,6 +1899,15 @@ func init() {
Filters: nil,
Params: nil})
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:User2Controller"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:User2Controller"],
beego.ControllerComments{
Method: "GetSelfInfo",
Router: `/GetSelfInfo`,
AllowHTTPMethods: []string{"get"},
MethodParams: param.Make(),
Filters: nil,
Params: nil})
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:User2Controller"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:User2Controller"],
beego.ControllerComments{
Method: "GetStoreRoleList",