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

This commit is contained in:
Rosy-zhudan
2019-09-06 11:29:17 +08:00
22 changed files with 347 additions and 119 deletions

View File

@@ -177,6 +177,8 @@ func (c *OrderManager) SaveOrder(order *model.GoodsOrder, isAdjust bool, db *dao
order.WaybillVendorID = model.VendorIDUnknown order.WaybillVendorID = model.VendorIDUnknown
order.OrderFinishedAt = utils.DefaultTimeValue order.OrderFinishedAt = utils.DefaultTimeValue
// cms.HandleOrder4Consignee(order)
dao.Begin(db) dao.Begin(db)
defer func() { defer func() {
if r := recover(); r != nil || err != nil { if r := recover(); r != nil || err != nil {

View File

@@ -626,7 +626,7 @@ func (c *OrderManager) GetOrderStatusList(ctx *jxcontext.Context, vendorOrderID
sql += " AND t1.order_type = ?" sql += " AND t1.order_type = ?"
sqlParams = append(sqlParams, orderType) sqlParams = append(sqlParams, orderType)
} }
sql += " ORDER BY t1.status_time, t1.order_type DESC" sql += " ORDER BY t1.status_time, t1.order_type DESC, t1.status"
db := dao.GetDB() db := dao.GetDB()
if err = dao.GetRows(db, &statusList, sql, sqlParams...); err != nil { if err = dao.GetRows(db, &statusList, sql, sqlParams...); err != nil {

View File

@@ -3,7 +3,7 @@ package basesch
import ( import (
"fmt" "fmt"
"git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/baseapi/utils/errlist"
"git.rosy.net.cn/jx-callback/business/jxcallback/scheduler" "git.rosy.net.cn/jx-callback/business/jxcallback/scheduler"
"git.rosy.net.cn/jx-callback/business/jxutils" "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/jxcontext"
@@ -23,7 +23,7 @@ func (c *BaseScheduler) CreateWaybillOnProviders(ctx *jxcontext.Context, order *
} }
courierVendorIDMap := jxutils.IntList2Map(courierVendorIDs) courierVendorIDMap := jxutils.IntList2Map(courierVendorIDs)
excludeCourierVendorIDMap := jxutils.IntList2Map(excludeCourierVendorIDs) excludeCourierVendorIDMap := jxutils.IntList2Map(excludeCourierVendorIDs)
var errList []string errList := errlist.New()
for _, storeCourier := range storeCourierList { for _, storeCourier := range storeCourierList {
if (courierVendorIDs == nil || courierVendorIDMap[storeCourier.VendorID] == 1) && if (courierVendorIDs == nil || courierVendorIDMap[storeCourier.VendorID] == 1) &&
(excludeCourierVendorIDs == nil || excludeCourierVendorIDMap[storeCourier.VendorID] == 0) { (excludeCourierVendorIDs == nil || excludeCourierVendorIDMap[storeCourier.VendorID] == 0) {
@@ -39,18 +39,22 @@ func (c *BaseScheduler) CreateWaybillOnProviders(ctx *jxcontext.Context, order *
} }
} else { } else {
globals.SugarLogger.Debugf("CreateWaybillOnProviders orderID:%s userName:%s vendorID:%d failed with error:%v", order.VendorOrderID, userName, courierVendorID, err) globals.SugarLogger.Debugf("CreateWaybillOnProviders orderID:%s userName:%s vendorID:%d failed with error:%v", order.VendorOrderID, userName, courierVendorID, err)
errList = append(errList, fmt.Sprintf("平台:%s,%s", jxutils.GetVendorName(courierVendorID), err.Error())) errList.AddErr(fmt.Errorf("平台:%s,%s", jxutils.GetVendorName(courierVendorID), err.Error()))
} }
} }
} }
} }
} }
if len(bills) > 0 { if len(bills) > 0 {
err = errList.GetErrListAsOne()
if err != nil {
partner.CurOrderManager.OnOrderMsg(order, "创建三方运单部分失败", err.Error())
}
err = nil err = nil
} else if len(errList) == 0 { } else if errList.GetErrListAsOne() == nil {
err = fmt.Errorf("orderID:%s没有绑定有效的三方配送门店或没有剩下可用的三方配送", order.VendorOrderID) err = fmt.Errorf("orderID:%s没有绑定有效的三方配送门店或没有剩下可用的三方配送", order.VendorOrderID)
} else { } else {
err = fmt.Errorf("orderID:%s所有运单失败\n%s", order.VendorOrderID, utils.Format4Output(errList, false)) err = fmt.Errorf("orderID:%s所有运单失败\n%s", order.VendorOrderID, errList.GetErrListAsOne().Error())
} }
globals.SugarLogger.Infof("CreateWaybillOnProviders orderID:%s userName:%s error:%v", order.VendorOrderID, userName, err) globals.SugarLogger.Infof("CreateWaybillOnProviders orderID:%s userName:%s error:%v", order.VendorOrderID, userName, err)
return bills, err return bills, err

View File

@@ -8,6 +8,7 @@ import (
"git.rosy.net.cn/jx-callback/business/jxutils/jxcontext" "git.rosy.net.cn/jx-callback/business/jxutils/jxcontext"
"git.rosy.net.cn/jx-callback/business/jxutils/netprinter" "git.rosy.net.cn/jx-callback/business/jxutils/netprinter"
"git.rosy.net.cn/jx-callback/business/jxutils/smsmsg"
"git.rosy.net.cn/jx-callback/business/msghub" "git.rosy.net.cn/jx-callback/business/msghub"
"git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/baseapi/utils"
@@ -184,10 +185,7 @@ func init() {
} }
} }
if isAcceptIt { if isAcceptIt {
utils.CallFuncAsync(func() { sch.notifyNewOrder(order)
netprinter.PrintOrderByOrder(jxcontext.AdminCtx, order)
weixinmsg.NotifyNewOrder(order)
})
msghub.OnNewOrder(order) msghub.OnNewOrder(order)
} else { } else {
partner.CurOrderManager.OnOrderMsg(order, "黑名单拒单", "") partner.CurOrderManager.OnOrderMsg(order, "黑名单拒单", "")
@@ -307,10 +305,7 @@ func (s *DefScheduler) OnOrderNew(order *model.GoodsOrder, isPending bool) (err
if order.Status >= model.OrderStatusNew { if order.Status >= model.OrderStatusNew {
s.resetTimer(savedOrderInfo, nil, isPending) s.resetTimer(savedOrderInfo, nil, isPending)
if !isPending && order.Status >= model.OrderStatusAccepted { // 有订单消息错序先收到接单消息再收到新订单消息导致接单TIMER不动作这里补一下 if !isPending && order.Status >= model.OrderStatusAccepted { // 有订单消息错序先收到接单消息再收到新订单消息导致接单TIMER不动作这里补一下
utils.CallFuncAsync(func() { s.notifyNewOrder(order)
netprinter.PrintOrderByOrder(jxcontext.AdminCtx, order)
weixinmsg.NotifyNewOrder(order)
})
msghub.OnNewOrder(order) msghub.OnNewOrder(order)
} }
} }
@@ -329,13 +324,6 @@ func (s *DefScheduler) OnOrderStatusChanged(order *model.GoodsOrder, status *mod
savedOrderInfo := s.loadSavedOrderFromMap(status, false) savedOrderInfo := s.loadSavedOrderFromMap(status, false)
savedOrderInfo.SetOrder(order) savedOrderInfo.SetOrder(order)
// if status.Status == model.OrderStatusNew {
// if !isPending {
// utils.CallFuncAsync(func() {
// weixinmsg.NotifyNewOrder(savedOrderInfo.order)
// })
// }
// }
if (model.IsOrderUnlockStatus(status.Status)) || if (model.IsOrderUnlockStatus(status.Status)) ||
(order.LockStatus == model.OrderStatusUnknown && (status.Status > model.OrderStatusUnknown || status.Status == model.OrderStatusRefuseFailedGetGoods)) { // 只处理状态转换,一般消息不处理 (order.LockStatus == model.OrderStatusUnknown && (status.Status > model.OrderStatusUnknown || status.Status == model.OrderStatusRefuseFailedGetGoods)) { // 只处理状态转换,一般消息不处理
if status.Status == model.OrderStatusRefuseFailedGetGoods && order.Status != model.OrderStatusFinishedPickup && !model.IsOrderFinalStatus(order.Status) { if status.Status == model.OrderStatusRefuseFailedGetGoods && order.Status != model.OrderStatusFinishedPickup && !model.IsOrderFinalStatus(order.Status) {
@@ -374,9 +362,7 @@ func (s *DefScheduler) OnOrderStatusChanged(order *model.GoodsOrder, status *mod
status.Status == model.OrderStatusAgreeFailedGetGoods || status.Status == model.OrderStatusAgreeFailedGetGoods ||
status.Status == model.OrderStatusDeliverFailed { status.Status == model.OrderStatusDeliverFailed {
if status.Status == model.OrderStatusApplyCancel { if status.Status == model.OrderStatusApplyCancel {
utils.CallFuncAsync(func() { s.notifyUserApplyCancel(savedOrderInfo.order, status.Remark)
weixinmsg.NotifyUserApplyCancel(savedOrderInfo.order, status.Remark)
})
} }
msghub.OnKeyOrderStatusChanged(savedOrderInfo.order) msghub.OnKeyOrderStatusChanged(savedOrderInfo.order)
} }
@@ -483,9 +469,7 @@ func (s *DefScheduler) OnWaybillStatusChanged(bill *model.Waybill, isPending boo
if err := s.SelfDeliverDelivering(savedOrderInfo.order, bill.CourierMobile); err != nil { if err := s.SelfDeliverDelivering(savedOrderInfo.order, bill.CourierMobile); err != nil {
partner.CurOrderManager.OnOrderMsg(order, "自送出设置失败", err.Error()) partner.CurOrderManager.OnOrderMsg(order, "自送出设置失败", err.Error())
} }
utils.CallFuncAsync(func() { s.notify3rdPartyWaybill(order, bill, isBillAlreadyCandidate)
weixinmsg.NotifyWaybillStatus(bill, order, isBillAlreadyCandidate)
})
} else { } else {
s.swtich2SelfDeliverWithRetry(savedOrderInfo, bill, 2, 10*time.Second) s.swtich2SelfDeliverWithRetry(savedOrderInfo, bill, 2, 10*time.Second)
} }
@@ -496,9 +480,7 @@ func (s *DefScheduler) OnWaybillStatusChanged(bill *model.Waybill, isPending boo
globals.SugarLogger.Infof("OnWaybillStatusChanged Accepted orderID:%s got multiple bill:%v", order.VendorOrderID, bill) globals.SugarLogger.Infof("OnWaybillStatusChanged Accepted orderID:%s got multiple bill:%v", order.VendorOrderID, bill)
} }
if isBillAlreadyCandidate && !s.isWaybillCourierSame(savedOrderInfo, bill) && !model.IsWaybillPlatformOwn(bill) { if isBillAlreadyCandidate && !s.isWaybillCourierSame(savedOrderInfo, bill) && !model.IsWaybillPlatformOwn(bill) {
utils.CallFuncAsync(func() { s.notify3rdPartyWaybill(order, bill, isBillAlreadyCandidate)
weixinmsg.NotifyWaybillStatus(bill, order, isBillAlreadyCandidate)
})
} }
flag2Clear := model.WaybillVendorID2Mask(bill.WaybillVendorID) flag2Clear := model.WaybillVendorID2Mask(bill.WaybillVendorID)
order.Flag &= ^model.OrderFlagMaskFailedGetGoods order.Flag &= ^model.OrderFlagMaskFailedGetGoods
@@ -579,9 +561,7 @@ func (s *DefScheduler) OnWaybillStatusChanged(bill *model.Waybill, isPending boo
} }
} }
if !isPending { if !isPending {
utils.CallFuncAsync(func() { s.notify3rdPartyWaybill(order, bill, false)
weixinmsg.NotifyWaybillStatus(bill, order, false)
})
} }
// case model.WaybillStatusNeverSend: // 平台不配送,直接创建三方运单 // case model.WaybillStatusNeverSend: // 平台不配送,直接创建三方运单
// s.resetTimer(savedOrderInfo, bill, isPending) // s.resetTimer(savedOrderInfo, bill, isPending)
@@ -710,9 +690,7 @@ func (s *DefScheduler) swtich2SelfDeliverWithRetry(savedOrderInfo *WatchOrderInf
partner.CurOrderManager.OnOrderMsg(order, "转商家自配送失败", errStr) partner.CurOrderManager.OnOrderMsg(order, "转商家自配送失败", errStr)
} }
} else { } else {
utils.CallFuncAsync(func() { s.notify3rdPartyWaybill(order, bill, false)
weixinmsg.NotifyWaybillStatus(bill, order, false)
})
s.removeWaybillFromMap(savedOrderInfo, order.VendorID) s.removeWaybillFromMap(savedOrderInfo, order.VendorID)
partner.CurOrderManager.OnOrderMsg(order, "转自送成功", "") partner.CurOrderManager.OnOrderMsg(order, "转自送成功", "")
} }
@@ -1112,3 +1090,23 @@ func OnDefSchConfChanged(key, value string) {
} }
} }
} }
func (s *DefScheduler) notifyNewOrder(order *model.GoodsOrder) {
utils.CallFuncAsync(func() {
netprinter.PrintOrderByOrder(jxcontext.AdminCtx, order)
weixinmsg.NotifyNewOrder(order)
smsmsg.NotifyNewOrder(order)
})
}
func (s *DefScheduler) notifyUserApplyCancel(order *model.GoodsOrder, cancelReason string) {
utils.CallFuncAsync(func() {
weixinmsg.NotifyUserApplyCancel(order, cancelReason)
})
}
func (s *DefScheduler) notify3rdPartyWaybill(order *model.GoodsOrder, bill *model.Waybill, isBillAlreadyCandidate bool) {
utils.CallFuncAsync(func() {
weixinmsg.NotifyWaybillStatus(bill, order, isBillAlreadyCandidate)
})
}

View File

@@ -152,6 +152,9 @@ func (s *DefScheduler) CreateWaybillOnProvidersEx(ctx *jxcontext.Context, vendor
savedOrderInfo := s.loadSavedOrderByID(vendorOrderID, vendorID, true) savedOrderInfo := s.loadSavedOrderByID(vendorOrderID, vendorID, true)
if savedOrderInfo != nil { if savedOrderInfo != nil {
order := savedOrderInfo.order order := savedOrderInfo.order
if order.DeliveryType == model.OrderDeliveryTypeSelfTake {
return nil, fmt.Errorf("订单:%s是自提单", vendorOrderID)
}
if !forceCreate { if !forceCreate {
err = s.isPossibleSwitch2SelfDelivery(order) err = s.isPossibleSwitch2SelfDelivery(order)
} }
@@ -207,6 +210,9 @@ func (s *DefScheduler) QueryOrderWaybillFeeInfoEx(ctx *jxcontext.Context, vendor
if err != nil { if err != nil {
return nil, err return nil, err
} }
if order.DeliveryType == model.OrderDeliveryTypeSelfTake {
return nil, fmt.Errorf("订单:%s是自提单", vendorOrderID)
}
storeCourierList, err := dao.GetStoreCourierList(db, jxutils.GetSaleStoreIDFromOrder(order), model.StoreStatusAll) storeCourierList, err := dao.GetStoreCourierList(db, jxutils.GetSaleStoreIDFromOrder(order), model.StoreStatusAll)
if err != nil { if err != nil {
return nil, err return nil, err

View File

@@ -534,8 +534,8 @@ func (a *ActManager) IsVendorActExist(ctx *jxcontext.Context, vendorActID string
return isExist return isExist
} }
func QueryActs(ctx *jxcontext.Context, actID int, offset, pageSize int, keyword string, vendorID int, statusList, actTypeList, createTypeList []int, storeID, skuID, cityCode int, beginAt, endAt, createdAtFrom, createdAtTo time.Time) (pagedInfo *dao.PagedActListInfo, err error) { func QueryActs(ctx *jxcontext.Context, actID int, offset, pageSize int, syncStatus int, keyword string, vendorID int, statusList, actTypeList, createTypeList []int, storeID, skuID, cityCode int, beginAt, endAt, createdAtFrom, createdAtTo time.Time) (pagedInfo *dao.PagedActListInfo, err error) {
return dao.QueryActs(dao.GetDB(), actID, offset, pageSize, keyword, vendorID, statusList, actTypeList, createTypeList, storeID, skuID, cityCode, beginAt, endAt, createdAtFrom, createdAtTo) return dao.QueryActs(dao.GetDB(), actID, offset, pageSize, syncStatus, keyword, vendorID, statusList, actTypeList, createTypeList, storeID, skuID, cityCode, beginAt, endAt, createdAtFrom, createdAtTo)
} }
func GetActStoreSkuInfo(ctx *jxcontext.Context, actID int, vendorIDs []int, keyword string, offset, pageSize int) (retVal interface{}, err error) { func GetActStoreSkuInfo(ctx *jxcontext.Context, actID int, vendorIDs []int, keyword string, offset, pageSize int) (retVal interface{}, err error) {
@@ -733,7 +733,7 @@ func RefreshPageActs(ctx *jxcontext.Context, vendorIDs []int, createdFrom time.T
if err = err2; err != nil { if err = err2; err != nil {
return nil, err return nil, err
} }
// actInfo, err2 := dao.QueryActs(db, 0, 0, -1, "", vendorID, nil, []int{model.ActCreateTypeSpider}, // actInfo, err2 := dao.QueryActs(db, 0, 0, -1, -1, "", vendorID, nil, []int{model.ActCreateTypeSpider},
// nil, 0, 0, 0, utils.DefaultTimeValue, utils.DefaultTimeValue, createdFrom, utils.DefaultTimeValue) // nil, 0, 0, 0, utils.DefaultTimeValue, utils.DefaultTimeValue, createdFrom, utils.DefaultTimeValue)
vendorActIDs, err2 := dao.GetExistVendorActIDs(db, vendorID) vendorActIDs, err2 := dao.GetExistVendorActIDs(db, vendorID)
if err = err2; err != nil { if err = err2; err != nil {
@@ -821,7 +821,7 @@ func DeleteSkusFromAct(ctx *jxcontext.Context, vendorID int, skuIDs []int, isAsy
db := dao.GetDB() db := dao.GetDB()
actMap := make(map[int]*model.Act) actMap := make(map[int]*model.Act)
for _, skuID := range skuIDs { for _, skuID := range skuIDs {
pagedInfo, err2 := dao.QueryActs(db, 0, 0, -1, "", vendorID, []int{model.ActStatusCreated}, []int{model.ActSkuDirectDown, model.ActSkuSecKill}, nil, 0, skuID, 0, pagedInfo, err2 := dao.QueryActs(db, 0, 0, -1, -1, "", vendorID, []int{model.ActStatusCreated}, []int{model.ActSkuDirectDown, model.ActSkuSecKill}, nil, 0, skuID, 0,
utils.DefaultTimeValue, utils.DefaultTimeValue, time.Now().Add(-24*30*3*time.Hour), utils.DefaultTimeValue) utils.DefaultTimeValue, utils.DefaultTimeValue, time.Now().Add(-24*30*3*time.Hour), utils.DefaultTimeValue)
if err = err2; err != nil { if err = err2; err != nil {
return "", err return "", err

View File

@@ -273,7 +273,7 @@ func DeleteConfig(ctx *jxcontext.Context, key, configType string) (err error) {
} }
} }
errList.AddErr(err) errList.AddErr(err)
storeList, err2 := dao.GetStoreList4Role(db, key) storeList, err2 := dao.GetStoreList(db, nil, nil, key)
if err = err2; err == nil && len(storeList) > 0 { if err = err2; err == nil && len(storeList) > 0 {
storeIDs := make([]int, len(storeList)) storeIDs := make([]int, len(storeList))
for k, v := range storeList { for k, v := range storeList {

View File

@@ -8,10 +8,7 @@ import (
"strings" "strings"
"time" "time"
"git.rosy.net.cn/jx-callback/business/authz/autils"
"git.rosy.net.cn/jx-callback/business/auth2" "git.rosy.net.cn/jx-callback/business/auth2"
"git.rosy.net.cn/jx-callback/business/authz"
"git.rosy.net.cn/baseapi/platformapi/autonavi" "git.rosy.net.cn/baseapi/platformapi/autonavi"
"git.rosy.net.cn/baseapi/platformapi/baidunavi" "git.rosy.net.cn/baseapi/platformapi/baidunavi"
@@ -137,6 +134,8 @@ func GetStores(ctx *jxcontext.Context, keyword string, params map[string]interfa
t1.delivery_range, t1.delivery_range,
t1.status, t1.status,
t1.change_price_type, t1.change_price_type,
t1.sms_notify,
t1.id_card_front, t1.id_card_front,
t1.id_card_back, t1.id_card_back,
t1.id_card_hand, t1.id_card_hand,
@@ -333,7 +332,8 @@ func GetStores(ctx *jxcontext.Context, keyword string, params map[string]interfa
} }
sql += sqlWhere + ` sql += sqlWhere + `
GROUP BY 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31, 32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64 GROUP BY 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,
41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65
ORDER BY t1.id DESC ORDER BY t1.id DESC
/*LIMIT ? OFFSET ?*/` /*LIMIT ? OFFSET ?*/`
pageSize = jxutils.FormalizePageSize(pageSize) pageSize = jxutils.FormalizePageSize(pageSize)
@@ -700,8 +700,8 @@ func UpdateStore(ctx *jxcontext.Context, storeID int, payload map[string]interfa
dao.Commit(db) dao.Commit(db)
globals.SugarLogger.Debugf("UpdateStore track:%s, before call SyncStore", ctx.GetTrackInfo()) globals.SugarLogger.Debugf("UpdateStore track:%s, before call SyncStore", ctx.GetTrackInfo())
_, err = CurVendorSync.SyncStore(ctx, db, -1, store.ID, false, userName) _, err = CurVendorSync.SyncStore(ctx, db, -1, store.ID, false, userName)
if valid["tel1"] != nil { if valid["tel1"] != nil || valid["tel2"] != nil {
AddStoreBossByMoble(ctx, utils.Interface2String(valid["tel1"]), storeID) TryAddStoreBossRole4StoreByMobile(ctx, store.ID, []string{utils.Interface2String(valid["tel1"]), utils.Interface2String(valid["tel2"])})
} }
if syncStatus&model.SyncFlagStoreAddress != 0 || valid["tel1"] != nil || valid["payeeName"] != nil { if syncStatus&model.SyncFlagStoreAddress != 0 || valid["tel1"] != nil || valid["payeeName"] != nil {
updateCourierStores(ctx, storeID) updateCourierStores(ctx, storeID)
@@ -797,7 +797,7 @@ func CreateStore(ctx *jxcontext.Context, storeExt *StoreExt, userName string) (i
store.ID = existingID store.ID = existingID
if err = dao.CreateEntity(db, store); err == nil { if err = dao.CreateEntity(db, store); err == nil {
UpdateOrCreateCourierStores(ctx, store.ID, false, false, false) UpdateOrCreateCourierStores(ctx, store.ID, false, false, false)
AddStoreBossByMoble(ctx, storeExt.Tel1, storeExt.ID) TryAddStoreBossRole4StoreByMobile(ctx, storeExt.ID, []string{storeExt.Tel1, storeExt.Tel2})
return store.ID, err return store.ID, err
} }
return 0, err return 0, err
@@ -1791,24 +1791,3 @@ func SyncStoresQualify(ctx *jxcontext.Context, storeIDs []int, isAsync, isContin
} }
return hint, err return hint, err
} }
func AddStoreBossByMoble(ctx *jxcontext.Context, mobile string, storeID int) (num int64, err error) {
if mobile != "" {
if globals.EnableWXAuth2 {
db := dao.GetDB()
userList, _, err2 := dao.GetUsers(db, 0, "", nil, "", mobile, 0, 0)
globals.SugarLogger.Debugf("AddStoreBossByMoble mobile:%s, userList:%s", mobile, utils.Format4Output(userList, true))
if err = err2; err == nil && len(userList) > 0 {
if err = AddRoles4User(ctx, userList[0].GetID(), []*authz.RoleInfo{
autils.NewRole(authz.StoreRoleBoss, storeID),
}); err == nil {
num = 1
}
}
}
if !globals.DisableWXAuth1 {
num, err = BindMobile2Store(ctx, mobile, storeID)
}
}
return num, err
}

View File

@@ -23,7 +23,7 @@ import (
) )
var ( var (
ErrUserIDAndNameMustGiven = errors.New("用户ID2用户名及手机号必须不为空") ErrUserIDAndNameMustGiven = errors.New("用户ID2用户名必须不为空")
) )
var ( var (
@@ -114,6 +114,7 @@ func RegisterUserWithMobile(ctx *jxcontext.Context, user *model.User, mobileVeri
user.Type |= model.UserTypeStoreBoss user.Type |= model.UserTypeStoreBoss
} }
if err = CreateUser(user, utils.LimitUTF8StringLen(ctx.GetRealRemoteIP()+","+inAuthInfo.GetAuthID(), 32)); err == nil { if err = CreateUser(user, utils.LimitUTF8StringLen(ctx.GetRealRemoteIP()+","+inAuthInfo.GetAuthID(), 32)); err == nil {
TryAddStoreBossRole4User(ctx, user)
if outAuthInfo, err = auth2.BindUser(mobileAuth, user); err == nil && inAuthInfo != nil { if outAuthInfo, err = auth2.BindUser(mobileAuth, user); err == nil && inAuthInfo != nil {
err = auth2.AddAuthBind(&outAuthInfo.UserBasic, inAuthInfo) err = auth2.AddAuthBind(&outAuthInfo.UserBasic, inAuthInfo)
} }
@@ -124,11 +125,45 @@ func RegisterUserWithMobile(ctx *jxcontext.Context, user *model.User, mobileVeri
return outAuthInfo, err return outAuthInfo, err
} }
func TryAddStoreBossRole4User(ctx *jxcontext.Context, user *model.User) (err error) {
if user.Type&model.UserTypeStoreBoss != 0 {
userMobile := user.GetMobile()
if userMobile != "" {
if storeList, err := dao.GetStoreList(dao.GetDB(), nil, []string{userMobile}, ""); err == nil && len(storeList) > 0 {
roleList := make([]*authz.RoleInfo, len(storeList))
for k, v := range storeList {
roleList[k] = autils.NewRole(authz.StoreRoleBoss, v.ID)
}
err = AddRoles4User(ctx, user.GetID(), roleList)
}
}
}
return err
}
func TryAddStoreBossRole4StoreByMobile(ctx *jxcontext.Context, storeID int, mobileList []string) (err error) {
if storeID > 0 {
var userIDs []string
for _, v := range mobileList {
if v != "" {
if userList, _, err := dao.GetUsers(dao.GetDB(), model.UserTypeStoreBoss, "", nil, "", v, 0, -1); err == nil && len(userList) > 0 {
userIDs = append(userIDs, userList[0].GetID())
}
}
}
if len(userIDs) > 0 {
role := autils.NewRole(authz.StoreRoleBoss, storeID)
err = AddUsers4Role(ctx, role, userIDs)
}
}
return err
}
func HandleOrder4Consignee(order *model.GoodsOrder) (err error) { func HandleOrder4Consignee(order *model.GoodsOrder) (err error) {
var user *model.User var user *model.User
authType := jxutils.GetAuthType4Vendor(order.VendorID) authType := jxutils.GetAuthType4Vendor(order.VendorID)
if authType == "" { if authType == "" {
msg := fmt.Sprintf("平台ID:%d当前不支持", order.VendorID) msg := fmt.Sprintf("平台ID:%d当前不支持,请联系开发", order.VendorID)
globals.SugarLogger.Warn(msg) globals.SugarLogger.Warn(msg)
return fmt.Errorf(msg) return fmt.Errorf(msg)
} }
@@ -147,42 +182,85 @@ func HandleOrder4Consignee(order *model.GoodsOrder) (err error) {
} }
vendorUserID := order.VendorUserID vendorUserID := order.VendorUserID
if err == nil { if err == nil && vendorUserID != "" {
authList, err2 := dao.GetUserBindAuthInfo(db, "", model.AuthBindTypeID, "", []string{authType}) authInfo, err2 := dao.GetAuthBind(db, "", model.AuthBindTypeID, authType, vendorUserID)
if err = err2; err != nil { if err = err2; err != nil && !dao.IsNoRowsError(err) {
return err return err
} }
if len(authList) > 0 { if err == nil {
if user, err = dao.GetUserByID(db, "UserID", authList[0].UserID); err != nil { vendorUserID = ""
return err if user == nil {
if user, err = dao.GetUserByID(db, "UserID", authInfo.UserID); err != nil {
return err
}
} }
} else {
err = nil
} }
} }
if user == nil { if user == nil {
user = &model.User{ user = &model.User{
UserID2: mobileNumber, UserID2: mobileNumber,
Name: order.ConsigneeName, Name: order.ConsigneeName,
Mobile: &mobileNumber, Mobile: &mobileNumber,
Type: model.UserTypeConsumer, Type: model.UserTypeConsumer,
Address: order.ConsigneeAddress,
Remark: order.VendorOrderID, Remark: order.VendorOrderID,
} }
setUserAddress(db, user, order)
if user.GetID2() == "" {
user.UserID2 = vendorUserID
}
if user.GetID2() == "" {
user.UserID2 = order.VendorUserID
}
user.Type = model.UserTypeConsumer user.Type = model.UserTypeConsumer
err = CreateUser(user, oeratorName) err = CreateUser(user, oeratorName)
} globals.SugarLogger.Debug(err)
if err == nil && vendorUserID != "" { } else {
authBind := &model.AuthBind{ if user.GetMobile() == "" && mobileNumber != "" {
UserID: user.GetID(), user.Mobile = &mobileNumber
BindType: model.AuthBindTypeID, dao.UpdateEntity(db, user, "Mobile")
AuthID: vendorUserID, }
Type: authType, }
if err == nil {
order.UserID = user.GetID()
if vendorUserID != "" {
authBind := &model.AuthBind{
UserID: user.GetID(),
BindType: model.AuthBindTypeID,
AuthID: vendorUserID,
Type: authType,
}
dao.WrapAddIDCULDEntity(authBind, oeratorName)
authBind.Status = model.AuthBindStatusNormal
err = dao.CreateEntity(nil, authBind)
} }
dao.WrapAddIDCULDEntity(authBind, oeratorName)
authBind.Status = model.AuthBindStatusNormal
err = dao.CreateEntity(nil, authBind)
} }
return err return err
} }
func setUserAddress(db *dao.DaoDB, user *model.User, order *model.GoodsOrder) {
user.Address = order.ConsigneeAddress
store := &model.Store{}
store.ID = jxutils.GetSaleStoreIDFromOrder(order)
if err := dao.GetEntity(db, store); err == nil {
user.CityCode = store.CityCode
user.DistrictCode = store.DistrictCode
} else if dao.IsNoRowsError(err) {
if order.ConsigneeLng != 0 && order.ConsigneeLat != 0 {
if user.DistrictCode = api.AutonaviAPI.GetCoordinateDistrictCode(jxutils.IntCoordinate2Standard(order.ConsigneeLng), jxutils.IntCoordinate2Standard(order.ConsigneeLat)); user.DistrictCode > 0 {
if placeInfo, err := dao.GetPlaceByCode(db, user.DistrictCode); err == nil {
user.CityCode = placeInfo.ParentCode
}
}
}
}
}
func GetUserBindAuthInfo(ctx *jxcontext.Context) (authList []*model.AuthBind, err error) { func GetUserBindAuthInfo(ctx *jxcontext.Context) (authList []*model.AuthBind, err error) {
authInfo, err := ctx.GetV2AuthInfo() authInfo, err := ctx.GetV2AuthInfo()
if err == nil { if err == nil {
@@ -192,9 +270,17 @@ func GetUserBindAuthInfo(ctx *jxcontext.Context) (authList []*model.AuthBind, er
} }
func CreateUser(user *model.User, creatorName string) (err error) { func CreateUser(user *model.User, creatorName string) (err error) {
if user == nil || user.UserID2 == "" || user.Name == "" || user.GetMobile() == "" { globals.SugarLogger.Debugf("CreateUser user:%s, creatorName:%s", utils.Format4Output(user, true), creatorName)
if user == nil || user.UserID2 == "" || user.Name == "" {
return ErrUserIDAndNameMustGiven return ErrUserIDAndNameMustGiven
} }
if user.GetMobile() == "" {
user.Mobile = nil
}
if user.GetEmail() == "" {
user.Email = nil
}
dao.WrapAddIDCULDEntity(user, creatorName) dao.WrapAddIDCULDEntity(user, creatorName)
user.UserID = utils.GetUUID() user.UserID = utils.GetUUID()
user.Status = model.UserStatusNormal user.Status = model.UserStatusNormal

View File

@@ -0,0 +1,23 @@
package cms
import (
"testing"
"git.rosy.net.cn/baseapi/utils"
_ "git.rosy.net.cn/jx-callback/globals/api/apimanager"
"git.rosy.net.cn/jx-callback/business/jxutils/jxcontext"
"git.rosy.net.cn/jx-callback/business/model"
)
func TestTryAddStoreBossRole4User(t *testing.T) {
err := TryAddStoreBossRole4User(jxcontext.AdminCtx, &model.User{
Type: model.UserTypeStoreBoss,
UserID: "24058800CD3711E991B2525400E86DC0",
Mobile: utils.String2Pointer("91112345678"),
})
if err != nil {
t.Fatal(err)
}
}

View File

@@ -474,7 +474,9 @@ func HandleUserWXRemark(db *dao.DaoDB, mobile string, mobileIsUerID bool) (err e
} }
} }
if err == nil { if err == nil {
err = api.WeixinAPI.CBUpdateRemark(openID, remark) if globals.EnableStoreWrite {
err = api.WeixinAPI.CBUpdateRemark(openID, remark)
}
} }
} }
return err return err

View File

@@ -0,0 +1,63 @@
package smsmsg
import (
"fmt"
aliyunsmsclient "github.com/KenmyZhang/aliyun-communicate"
"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/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"
)
var (
warningMap = map[string]int{
"isv.AMOUNT_NOT_ENOUGH": 1,
"isv.ACCOUNT_ABNORMAL": 1,
"isv.OUT_OF_SERVICE": 1,
"isv.DAY_LIMIT_CONTROL": 1,
}
)
func SendSMSMsg(mobileList []string, signName, templateCode string, templateParam map[string]interface{}) (err error) {
errList := errlist.New()
for _, mobileNum := range mobileList {
if mobileNum != "" {
globals.SugarLogger.Debugf("SendSMSMsg mobileNum:%s, templateCode:%s", mobileNum, templateCode)
if globals.EnableStoreWrite {
if response, err := api.SMSClient.Execute(globals.AliKey, globals.AliSecret, mobileNum, signName, templateCode, string(utils.MustMarshal(templateParam))); err != nil {
globals.SugarLogger.Warnf("SendSMSMsg mobileNum:%s failed with error:%v", mobileNum, err)
errList.AddErr(err)
} else if response.Code != aliyunsmsclient.ResponseCodeOk {
errMsg := fmt.Sprintf("SendSMSMsg mobileNum:%s failed with response:%s", mobileNum, utils.Format4Output(response, false))
errList.AddErr(fmt.Errorf(errMsg))
if warningMap[response.Code] == 1 {
globals.SugarLogger.Warnf(errMsg)
} else {
globals.SugarLogger.Infof(errMsg)
}
}
}
}
}
return errList.GetErrListAsOne()
}
func NotifyNewOrder(order *model.GoodsOrder) (err error) {
store := &model.Store{}
store.ID = jxutils.GetSaleStoreIDFromOrder(order)
if err = dao.GetEntity(dao.GetDB(), store); err == nil {
if store.SMSNotify != 0 {
err = SendSMSMsg([]string{store.Tel1, store.Tel2}, "京西菜市", "SMS_173477895", map[string]interface{}{
"daySeq": order.OrderSeq,
"consigneeName": order.ConsigneeName,
"payMoney": jxutils.IntPrice2StandardString(order.ActualPayPrice),
})
}
}
return err
}

View File

@@ -0,0 +1,25 @@
package smsmsg
import (
"testing"
"git.rosy.net.cn/jx-callback/business/jxutils"
"git.rosy.net.cn/jx-callback/globals/testinit"
)
func init() {
testinit.Init()
// api2.Init()
}
func TestSendSMSMsg(t *testing.T) {
err := SendSMSMsg([]string{"18180948107"}, "京西菜市", "SMS_173477895", map[string]interface{}{
"daySeq": 9,
"consigneeName": "购买者",
"payMoney": jxutils.IntPrice2StandardString(1230),
})
if err != nil {
t.Fatal(err)
}
}

View File

@@ -173,7 +173,7 @@ func GetActStoreSkuVendorInfo(db *DaoDB, actID int, vendorIDs, storeIDs, skuIDs
return actStoreSkuMap, err return actStoreSkuMap, err
} }
func QueryActs(db *DaoDB, actID int, offset, pageSize int, keyword string, vendorID int, statusList, actTypeList, createTypeList []int, func QueryActs(db *DaoDB, actID int, offset, pageSize int, syncStatus int, keyword string, vendorID int, statusList, actTypeList, createTypeList []int,
storeID, skuID, cityCode int, beginAt, endAt, createdAtFrom, createdAtTo time.Time) (pagedInfo *PagedActListInfo, err error) { storeID, skuID, cityCode int, beginAt, endAt, createdAtFrom, createdAtTo time.Time) (pagedInfo *PagedActListInfo, err error) {
if actID == 0 && utils.IsTimeZero(createdAtFrom) && utils.IsTimeZero(beginAt) { if actID == 0 && utils.IsTimeZero(createdAtFrom) && utils.IsTimeZero(beginAt) {
return nil, fmt.Errorf("actID,createdAtFrom和beginAt中至少要指定一个条件") return nil, fmt.Errorf("actID,createdAtFrom和beginAt中至少要指定一个条件")
@@ -184,7 +184,7 @@ func QueryActs(db *DaoDB, actID int, offset, pageSize int, keyword string, vendo
sql := ` sql := `
SELECT SQL_CALC_FOUND_ROWS SELECT SQL_CALC_FOUND_ROWS
t1.id DISTINCT t1.id
FROM act t1` FROM act t1`
sqlParams := []interface{}{} sqlParams := []interface{}{}
if isGetAll { if isGetAll {
@@ -195,8 +195,14 @@ func QueryActs(db *DaoDB, actID int, offset, pageSize int, keyword string, vendo
FROM act t1 FROM act t1
LEFT JOIN act_map t2 ON t2.act_id = t1.id AND t2.deleted_at = ?` LEFT JOIN act_map t2 ON t2.act_id = t1.id AND t2.deleted_at = ?`
sqlParams = []interface{}{utils.DefaultTimeValue} sqlParams = []interface{}{utils.DefaultTimeValue}
if syncStatus >= 0 {
sql += " AND (t2.sync_status = ? OR t2.sync_status & ? <> 0)"
sqlParams = append(sqlParams, syncStatus, syncStatus)
}
} else if syncStatus >= 0 {
sql += " JOIN act_map t2 ON t2.act_id = t1.id AND t2.deleted_at = ? AND (t2.sync_status = ? OR t2.sync_status & ? <> 0)"
sqlParams = append(sqlParams, utils.DefaultTimeValue, syncStatus, syncStatus)
} }
sql += ` sql += `
WHERE t1.deleted_at = ?` WHERE t1.deleted_at = ?`
sqlParams = append(sqlParams, utils.DefaultTimeValue) sqlParams = append(sqlParams, utils.DefaultTimeValue)
@@ -289,6 +295,7 @@ func QueryActs(db *DaoDB, actID int, offset, pageSize int, keyword string, vendo
panic(r) panic(r)
} }
}() }()
// globals.SugarLogger.Debug(sql)
if err = GetRows(db, &idList, sql, sqlParams...); err != nil || len(idList) == 0 { if err = GetRows(db, &idList, sql, sqlParams...); err != nil || len(idList) == 0 {
Rollback(db) Rollback(db)
return pagedInfo, err return pagedInfo, err
@@ -311,6 +318,7 @@ func QueryActs(db *DaoDB, actID int, offset, pageSize int, keyword string, vendo
} }
} }
var actList []*tActAndMap var actList []*tActAndMap
// globals.SugarLogger.Debug(sql)
if err = GetRows(db, &actList, sql, sqlParams...); err != nil { if err = GetRows(db, &actList, sql, sqlParams...); err != nil {
return nil, err return nil, err
} }

View File

@@ -445,16 +445,25 @@ func GetOpenedStoreCouriersByStoreID(db *DaoDB, storeID, vendorID int) (storeMap
return storeMaps, nil return storeMaps, nil
} }
func GetStoreList4Role(db *DaoDB, shortRoleName string) (storeList []*model.Store, err error) { func GetStoreList(db *DaoDB, idList []int, mobileList []string, shortRoleName string) (storeList []*model.Store, err error) {
sql := ` sql := `
SELECT t1.* SELECT t1.*
FROM store t1 FROM store t1
WHERE t1.deleted_at = ? AND (t1.market_man_role = ? OR t1.operator_role = ? OR t1.operator_role2 = ?)` WHERE t1.deleted_at = ?`
sqlParams := []interface{}{ sqlParams := []interface{}{
utils.DefaultTimeValue, utils.DefaultTimeValue,
shortRoleName, }
shortRoleName, if len(idList) > 0 {
shortRoleName, sql += " AND t1.id IN (" + GenQuestionMarks(len(idList)) + ")"
sqlParams = append(sqlParams, idList)
}
if len(mobileList) > 0 {
sql += " AND (t1.tel1 IN (" + GenQuestionMarks(len(mobileList)) + ") OR t1.tel2 IN (" + GenQuestionMarks(len(mobileList)) + "))"
sqlParams = append(sqlParams, mobileList, mobileList)
}
if shortRoleName != "" {
sql += " AND (t1.market_man_role = ? OR t1.operator_role = ? OR t1.operator_role2 = ?)"
sqlParams = append(sqlParams, shortRoleName, shortRoleName, shortRoleName)
} }
err = GetRows(db, &storeList, sql, sqlParams...) err = GetRows(db, &storeList, sql, sqlParams...)
return storeList, err return storeList, err

View File

@@ -32,7 +32,7 @@ func TestFormalizeStoreStatus(t *testing.T) {
} }
func TestGetStoreList4Role(t *testing.T) { func TestGetStoreList4Role(t *testing.T) {
storeList, err := GetStoreList4Role(GetDB(), "NiuBi") storeList, err := GetStoreList(GetDB(), "NiuBi")
t.Log(utils.Format4Output(storeList, false)) t.Log(utils.Format4Output(storeList, false))
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)

View File

@@ -32,6 +32,8 @@ type GoodsOrder struct {
WaybillTipMoney int64 `json:"waybillTipMoney"` // 京西加的平台配送小费 WaybillTipMoney int64 `json:"waybillTipMoney"` // 京西加的平台配送小费
EarningPrice int64 `json:"earningPrice"` // 结算给门店老板的钱(未扣除可能的三方配送费) EarningPrice int64 `json:"earningPrice"` // 结算给门店老板的钱(未扣除可能的三方配送费)
Weight int `json:"weight"` // 单位为克 Weight int `json:"weight"` // 单位为克
VendorUserID string `orm:"column(vendor_user_id);size(48)" json:"vendorUserID"`
UserID string `orm:"column(user_id);size(48)" json:"userID"`
ConsigneeName string `orm:"size(32)" json:"consigneeName"` ConsigneeName string `orm:"size(32)" json:"consigneeName"`
ConsigneeMobile string `orm:"size(32)" json:"consigneeMobile"` ConsigneeMobile string `orm:"size(32)" json:"consigneeMobile"`
ConsigneeMobile2 string `orm:"size(32)" json:"consigneeMobile2"` ConsigneeMobile2 string `orm:"size(32)" json:"consigneeMobile2"`
@@ -65,7 +67,6 @@ type GoodsOrder struct {
// 以下只是用于传递数据 // 以下只是用于传递数据
OriginalData string `orm:"-" json:"-"` OriginalData string `orm:"-" json:"-"`
Skus []*OrderSku `orm:"-" json:"-"` Skus []*OrderSku `orm:"-" json:"-"`
VendorUserID string `orm:"-" json:"-"`
} }
func (o *GoodsOrder) TableUnique() [][]string { func (o *GoodsOrder) TableUnique() [][]string {

View File

@@ -253,14 +253,14 @@ type Store struct {
DeliveryRangeType int8 `json:"deliveryRangeType"` // 参见相关常量定义 DeliveryRangeType int8 `json:"deliveryRangeType"` // 参见相关常量定义
DeliveryRange string `orm:"type(text)" json:"deliveryRange"` // 如果DeliveryRangeType为DeliveryRangeTypePolygon则为逗号分隔坐标分号分隔的坐标点坐标与Lng和Lat一样都是整数比如 121361504,31189308;121420555,31150238。否则为半径单位为米 DeliveryRange string `orm:"type(text)" json:"deliveryRange"` // 如果DeliveryRangeType为DeliveryRangeTypePolygon则为逗号分隔坐标分号分隔的坐标点坐标与Lng和Lat一样都是整数比如 121361504,31189308;121420555,31150238。否则为半径单位为米
Status int `json:"status"` Status int `json:"status"`
ChangePriceType int8 `json:"changePriceType"` // 修改价格类型,即是否需要审核 ChangePriceType int8 `json:"changePriceType"` // 修改价格类型,即是否需要审核
SMSNotify int8 `orm:"column(sms_notify);" json:"smsNotify"` // 是否通过短信接收订单消息
PrinterDisabled int8 `orm:"default(0)" json:"printerDisabled"` // 是否禁用网络打印机 PrinterDisabled int8 `orm:"default(0)" json:"printerDisabled"` // 是否禁用网络打印机
PrinterFontSize int8 `orm:"default(0)" json:"printerFontSize"` // 打印字体-10正常1 PrinterFontSize int8 `orm:"default(0)" json:"printerFontSize"` // 打印字体-10正常1
PrinterVendorID int `orm:"column(printer_vendor_id);" json:"printerVendorID"` PrinterVendorID int `orm:"column(printer_vendor_id);" json:"printerVendorID"`
PrinterSN string `orm:"size(32);column(printer_sn);index" json:"printerSN"` PrinterSN string `orm:"size(32);column(printer_sn);index" json:"printerSN"`
PrinterKey string `orm:"size(64)" json:"printerKey"` PrinterKey string `orm:"size(64)" json:"printerKey"`
PrinterBindInfo string `orm:"size(1024)" json:"-"` PrinterBindInfo string `orm:"size(1024)" json:"-"`
IDCardFront string `orm:"size(255);column(id_card_front)" json:"idCardFront"` IDCardFront string `orm:"size(255);column(id_card_front)" json:"idCardFront"`
IDCardBack string `orm:"size(255);column(id_card_back)" json:"idCardBack"` IDCardBack string `orm:"size(255);column(id_card_back)" json:"idCardBack"`

View File

@@ -26,15 +26,20 @@ var (
type User struct { type User struct {
ModelIDCULD ModelIDCULD
UserID string `orm:"size(48);column(user_id)" json:"userID" compact:"userID"` // 内部唯一标识 UserID string `orm:"size(48);column(user_id)" json:"userID" compact:"userID"` // 内部唯一标识
UserID2 string `orm:"size(48);column(user_id2)" json:"userID2" compact:"userID2"` // 外部唯一标识(一般用于登录) UserID2 string `orm:"size(48);column(user_id2)" json:"userID2" compact:"userID2"` // 外部唯一标识(一般用于登录)
Name string `orm:"size(48);index" json:"name" compact:"name"` // 外部显示标识(当前可以重复) Name string `orm:"size(48);index" json:"name" compact:"name"` // 外部显示标识(当前可以重复)
Mobile *string `orm:"size(32);null" json:"mobile" compact:"mobile"` Mobile *string `orm:"size(32);null" json:"mobile" compact:"mobile"`
Email *string `orm:"size(32);null" json:"email" compact:"email"` Email *string `orm:"size(32);null" json:"email" compact:"email"`
Status int8 `json:"status" compact:"status"` Status int8 `json:"status" compact:"status"`
Type int8 `json:"type" compact:"type"` // 用户类型 Type int8 `json:"type" compact:"type"` // 用户类型
IDCardNo string `orm:"size(18);column(id_card_no)" json:"idCardNo" compact:"idCardNo"` // 身份证号
Remark string `orm:"size(255)" json:"remark"` CityCode int `orm:"default(0)" json:"cityCode"`
DistrictCode int `orm:"default(0);index" json:"districtCode"`
Address string `orm:"size(255)" json:"address"`
IDCardNo string `orm:"size(18);column(id_card_no)" json:"idCardNo" compact:"idCardNo"` // 身份证号
Remark string `orm:"size(255)" json:"remark"`
} }
func (*User) TableUnique() [][]string { func (*User) TableUnique() [][]string {

View File

@@ -316,7 +316,15 @@ func (p *PurchaseHandler) ConfirmReceiveGoods(ctx *jxcontext.Context, order *mod
func (p *PurchaseHandler) Swtich2SelfDeliver(order *model.GoodsOrder, userName string) (err error) { func (p *PurchaseHandler) Swtich2SelfDeliver(order *model.GoodsOrder, userName string) (err error) {
globals.SugarLogger.Debugf("ebai Swtich2SelfDeliver orderID:%s", order.VendorOrderID) globals.SugarLogger.Debugf("ebai Swtich2SelfDeliver orderID:%s", order.VendorOrderID)
if globals.EnableEbaiStoreWrite { if globals.EnableEbaiStoreWrite {
err = api.EbaiAPI.OrderSwitchselfdelivery(order.VendorOrderID) if err = api.EbaiAPI.OrderSwitchselfdelivery(order.VendorOrderID); err != nil {
if utils.IsErrMatch(err, "301251", nil) {
if deliveryStatus, err2 := api.EbaiAPI.OrderDeliveryGet(order.VendorOrderID); err2 == nil {
if utils.Interface2String(deliveryStatus["status"]) == ebaiapi.WaybillStatusSelfDelivery {
err = nil
}
}
}
}
} }
if err == nil { if err == nil {
// 饿百不会发送配送中,模拟发送 // 饿百不会发送配送中,模拟发送

View File

@@ -128,6 +128,7 @@ func (c *ActController) CreateAct() {
// @Param createTypeList query string false "创建方式列表" // @Param createTypeList query string false "创建方式列表"
// @Param storeID query int false "包含门店" // @Param storeID query int false "包含门店"
// @Param skuID query int false "包含sku" // @Param skuID query int false "包含sku"
// @Param syncStatus query int false "活动同步标识,缺省不限制"
// @Param offset query int false "活动列表起始序号以0开始缺省为0" // @Param offset query int false "活动列表起始序号以0开始缺省为0"
// @Param pageSize query int false "活动列表页大小缺省为50-1表示全部" // @Param pageSize query int false "活动列表页大小缺省为50-1表示全部"
// @Success 200 {object} controllers.CallResult // @Success 200 {object} controllers.CallResult
@@ -142,7 +143,10 @@ func (c *ActController) QueryActs() {
if params.MapData["vendorID"] == nil { if params.MapData["vendorID"] == nil {
params.VendorID = -1 params.VendorID = -1
} }
retVal, err = act.QueryActs(params.Ctx, params.ActID, params.Offset, params.PageSize, params.Keyword, params.VendorID, if params.MapData["syncStatus"] == nil {
params.SyncStatus = -1
}
retVal, err = act.QueryActs(params.Ctx, params.ActID, params.Offset, params.PageSize, params.SyncStatus, params.Keyword, params.VendorID,
statusList, typeList, createTypeList, params.StoreID, params.SkuID, params.CityCode, timeList[2], timeList[3], timeList[0], timeList[1]) statusList, typeList, createTypeList, params.StoreID, params.SkuID, params.CityCode, timeList[2], timeList[3], timeList[0], timeList[1])
} }
} }

View File

@@ -3,6 +3,8 @@ package api
import ( import (
"time" "time"
aliyunsmsclient "github.com/KenmyZhang/aliyun-communicate"
"git.rosy.net.cn/baseapi/platformapi" "git.rosy.net.cn/baseapi/platformapi"
"git.rosy.net.cn/baseapi/platformapi/autonavi" "git.rosy.net.cn/baseapi/platformapi/autonavi"
"git.rosy.net.cn/baseapi/platformapi/baidunavi" "git.rosy.net.cn/baseapi/platformapi/baidunavi"
@@ -56,7 +58,8 @@ var (
YilianyunAPI2 *yilianyunapi.API YilianyunAPI2 *yilianyunapi.API
ZhongwuAPI *zhongwuapi.API ZhongwuAPI *zhongwuapi.API
Cacher cache.ICacher Cacher cache.ICacher
SMSClient *aliyunsmsclient.SmsClient
) )
func init() { func init() {
@@ -153,4 +156,6 @@ func Init() {
YilianyunAPI = yilianyunapi.New(beego.AppConfig.DefaultString("yilianyunClientID", ""), beego.AppConfig.DefaultString("yilianyunClientSecret", "")) YilianyunAPI = yilianyunapi.New(beego.AppConfig.DefaultString("yilianyunClientID", ""), beego.AppConfig.DefaultString("yilianyunClientSecret", ""))
YilianyunAPI2 = yilianyunapi.New(beego.AppConfig.DefaultString("yilianyunClientID2", ""), beego.AppConfig.DefaultString("yilianyunClientSecret2", "")) YilianyunAPI2 = yilianyunapi.New(beego.AppConfig.DefaultString("yilianyunClientID2", ""), beego.AppConfig.DefaultString("yilianyunClientSecret2", ""))
ZhongwuAPI = zhongwuapi.New(beego.AppConfig.DefaultInt("zhongwuAppID", 0), beego.AppConfig.DefaultString("zhongwuAppSecret", "")) ZhongwuAPI = zhongwuapi.New(beego.AppConfig.DefaultInt("zhongwuAppID", 0), beego.AppConfig.DefaultString("zhongwuAppSecret", ""))
SMSClient = aliyunsmsclient.New("http://dysmsapi.aliyuncs.com/")
} }