饿百平台运单取消后给运营发报警消息
This commit is contained in:
@@ -57,8 +57,10 @@ const (
|
|||||||
addWaybillTipGap = 15 // 加一元小费间隔的分钟数
|
addWaybillTipGap = 15 // 加一元小费间隔的分钟数
|
||||||
maxWaybillTipMoney = 400 // 最大小费
|
maxWaybillTipMoney = 400 // 最大小费
|
||||||
baseWaybillFee = 600 // 基本运费
|
baseWaybillFee = 600 // 基本运费
|
||||||
ebaiCancelWaybillMaxFee = 1000 // 饿百取消运单最高运费
|
ebaiCancelWaybillMaxFee = 1000 // 饿百取消运单最高运费,门店自送最高运费
|
||||||
maxJxStoreDeliveryFee = 2000
|
maxJxStoreDeliveryFee = 2000
|
||||||
|
|
||||||
|
ebaiCancelWaybillWarningMinute = 8
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@@ -323,7 +325,8 @@ func init() {
|
|||||||
Timeout: 1 * time.Second,
|
Timeout: 1 * time.Second,
|
||||||
},
|
},
|
||||||
TimeoutAction: func(savedOrderInfo *WatchOrderInfo, bill *model.Waybill) (err error) {
|
TimeoutAction: func(savedOrderInfo *WatchOrderInfo, bill *model.Waybill) (err error) {
|
||||||
return sch.createWaybillOn3rdProviders(savedOrderInfo, ebaiCancelWaybillMaxFee, nil)
|
return sch.onEbaiWaybillCanceled(savedOrderInfo, nil)
|
||||||
|
// return sch.createWaybillOn3rdProviders(savedOrderInfo, 0, nil)
|
||||||
},
|
},
|
||||||
ShouldSetTimer: func(savedOrderInfo *WatchOrderInfo, bill *model.Waybill) bool {
|
ShouldSetTimer: func(savedOrderInfo *WatchOrderInfo, bill *model.Waybill) bool {
|
||||||
order := savedOrderInfo.order
|
order := savedOrderInfo.order
|
||||||
@@ -665,6 +668,24 @@ func (s *DefScheduler) removeWaybillFromMap(savedOrderInfo *WatchOrderInfo, wayb
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *DefScheduler) onEbaiWaybillCanceled(savedOrderInfo *WatchOrderInfo, excludeBill *model.Waybill) (err error) {
|
||||||
|
order := savedOrderInfo.order
|
||||||
|
timeout := time.Duration(ebaiCancelWaybillWarningMinute) * time.Minute
|
||||||
|
utils.AfterFuncWithRecover(timeout, func() {
|
||||||
|
jxutils.CallMsgHandlerAsync(func() {
|
||||||
|
ts := s.loadSavedOrderFromMap(model.Order2Status(order), true)
|
||||||
|
order := ts.order
|
||||||
|
globals.SugarLogger.Debugf("fire timer ebai waybill cancled, orderID:%s, status:%d", order.VendorOrderID, order.Status)
|
||||||
|
if order.Status < model.OrderStatusDelivering && order.LockStatus == model.OrderStatusLocked {
|
||||||
|
msgContent := fmt.Sprintf("门店:%d,订单:%s的平台运单被取消了,可能导致订单被取消,请重点关注,必要的话可以先手动转自送", jxutils.GetSaleStoreIDFromOrder(order), order.VendorOrderID)
|
||||||
|
s.notifyOrderStakeHolder(order, "", msgContent)
|
||||||
|
}
|
||||||
|
}, jxutils.ComposeUniversalOrderID(order.VendorOrderID, order.VendorID))
|
||||||
|
})
|
||||||
|
err = s.createWaybillOn3rdProviders(savedOrderInfo, 0, excludeBill)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
func (s *DefScheduler) createWaybillOn3rdProviders(savedOrderInfo *WatchOrderInfo, maxDeliveryFee int64, excludeBill *model.Waybill) (err error) {
|
func (s *DefScheduler) createWaybillOn3rdProviders(savedOrderInfo *WatchOrderInfo, maxDeliveryFee int64, excludeBill *model.Waybill) (err error) {
|
||||||
order := savedOrderInfo.order
|
order := savedOrderInfo.order
|
||||||
if order.VendorID == model.VendorIDELM {
|
if order.VendorID == model.VendorIDELM {
|
||||||
@@ -682,7 +703,9 @@ func (s *DefScheduler) createWaybillOn3rdProviders(savedOrderInfo *WatchOrderInf
|
|||||||
savedOrderInfo.retryCount++
|
savedOrderInfo.retryCount++
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
err = fmt.Errorf("订单:%s已经自动创建过了%d次运单,请人工处理", order.VendorOrderID, savedOrderInfo.retryCount)
|
errMsg := fmt.Sprintf("订单:%s已经自动创建过了%d次运单,仍然无法配送,请关注!", order.VendorOrderID, savedOrderInfo.retryCount)
|
||||||
|
err = fmt.Errorf(errMsg)
|
||||||
|
s.notifyOrderStakeHolder(order, "", errMsg)
|
||||||
globals.SugarLogger.Infof("createWaybillOn3rdProviders [运营2]同一订单orderID:%s尝试了%d次创建运单失败, 停止调度,如果还需要发单,请人工处理", order.VendorOrderID, savedOrderInfo.retryCount)
|
globals.SugarLogger.Infof("createWaybillOn3rdProviders [运营2]同一订单orderID:%s尝试了%d次创建运单失败, 停止调度,如果还需要发单,请人工处理", order.VendorOrderID, savedOrderInfo.retryCount)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@@ -1160,12 +1183,12 @@ func getMaxDeliveryFee(order *model.GoodsOrder) (maxDeliveryFee int64) {
|
|||||||
orderBaseFreightMoney = baseWaybillFee
|
orderBaseFreightMoney = baseWaybillFee
|
||||||
}
|
}
|
||||||
maxDeliveryFee = orderBaseFreightMoney + order.DistanceFreightMoney + getWaybillTip(order)
|
maxDeliveryFee = orderBaseFreightMoney + order.DistanceFreightMoney + getWaybillTip(order)
|
||||||
}
|
|
||||||
if maxDeliveryFee < ebaiCancelWaybillMaxFee &&
|
if maxDeliveryFee < ebaiCancelWaybillMaxFee &&
|
||||||
order.VendorID == model.VendorIDEBAI &&
|
(order.VendorID == model.VendorIDEBAI ||
|
||||||
order.DeliveryType == model.OrderDeliveryTypeStoreSelf {
|
order.DeliveryType == model.OrderDeliveryTypeStoreSelf) {
|
||||||
maxDeliveryFee = ebaiCancelWaybillMaxFee
|
maxDeliveryFee = ebaiCancelWaybillMaxFee
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return maxDeliveryFee
|
return maxDeliveryFee
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1396,3 +1419,28 @@ func OrderProfitWarning(order *model.GoodsOrder) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *DefScheduler) notifyOrderStakeHolder(order *model.GoodsOrder, msgTitle, msgContent string) (err error) {
|
||||||
|
userMobiles := []string{
|
||||||
|
"18180948107",
|
||||||
|
}
|
||||||
|
db := dao.GetDB()
|
||||||
|
storeDetail, err := dao.GetStoreDetail(db, jxutils.GetSaleStoreIDFromOrder(order), order.VendorID)
|
||||||
|
if err == nil && storeDetail.OperatorPhone != "" {
|
||||||
|
userMobiles = append(userMobiles, storeDetail.OperatorPhone)
|
||||||
|
}
|
||||||
|
if len(userMobiles) > 0 {
|
||||||
|
if msgTitle == "" {
|
||||||
|
msgTitle = fmt.Sprintf("%s平台订单%s异常", model.VendorChineseNames[order.VendorID], order.VendorOrderID)
|
||||||
|
}
|
||||||
|
users, _, err := dao.GetUsers(db, 0, "", nil, nil, userMobiles, 0, 0)
|
||||||
|
if err == nil && len(users) > 0 {
|
||||||
|
var userIDs []string
|
||||||
|
for _, v := range users {
|
||||||
|
userIDs = append(userIDs, v.UserID)
|
||||||
|
}
|
||||||
|
ddmsg.SendUsersMessage(dingdingapi.MsgTyeText, userIDs, msgTitle, msgContent)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|||||||
@@ -71,7 +71,7 @@ func TransferLegacyWeixins(mobile string) (err error) {
|
|||||||
if user.Name == "" {
|
if user.Name == "" {
|
||||||
user.Name = user.GetMobile()
|
user.Name = user.GetMobile()
|
||||||
}
|
}
|
||||||
userList, _, err2 := dao.GetUsers(db, 0, "", nil, "", v.Tel, 0, -1)
|
userList, _, err2 := dao.GetUsers(db, 0, "", nil, nil, []string{v.Tel}, 0, -1)
|
||||||
if err = err2; err != nil {
|
if err = err2; err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -358,7 +358,7 @@ func DeleteConfig(ctx *jxcontext.Context, key, configType string) (err error) {
|
|||||||
errList := errlist.New()
|
errList := errlist.New()
|
||||||
userIDs, err2 := api2.RoleMan.GetRoleUserList(autils.NewRole(key, 0))
|
userIDs, err2 := api2.RoleMan.GetRoleUserList(autils.NewRole(key, 0))
|
||||||
if err = err2; err == nil && len(userIDs) > 0 {
|
if err = err2; err == nil && len(userIDs) > 0 {
|
||||||
userList, totalCount, err2 := dao.GetUsers(dao.GetDB(), 0, "", userIDs, "", "", 0, -1)
|
userList, totalCount, err2 := dao.GetUsers(dao.GetDB(), 0, "", userIDs, nil, nil, 0, -1)
|
||||||
if err = err2; err == nil && totalCount > 0 {
|
if err = err2; err == nil && totalCount > 0 {
|
||||||
// todo
|
// todo
|
||||||
// err = fmt.Errorf("还有人员在使用角色:%s,人员信息:%s", key, utils.MustMarshal(utils.Struct2Map(userList, "compact")))
|
// err = fmt.Errorf("还有人员在使用角色:%s,人员信息:%s", key, utils.MustMarshal(utils.Struct2Map(userList, "compact")))
|
||||||
|
|||||||
@@ -1866,7 +1866,7 @@ func getAllUsers4Store(ctx *jxcontext.Context, db *dao.DaoDB, store *model.Store
|
|||||||
}
|
}
|
||||||
|
|
||||||
if len(userIDs) > 0 {
|
if len(userIDs) > 0 {
|
||||||
userList, _, _ = dao.GetUsers(db, 0, "", userIDs, "", "", 0, -1)
|
userList, _, _ = dao.GetUsers(db, 0, "", userIDs, nil, nil, 0, -1)
|
||||||
for _, v := range userList {
|
for _, v := range userList {
|
||||||
userMap[v.GetID()] = 1
|
userMap[v.GetID()] = 1
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -236,7 +236,7 @@ func TryAddStoreBossRole4StoreByMobile(ctx *jxcontext.Context, storeID int, mobi
|
|||||||
var userIDs []string
|
var userIDs []string
|
||||||
for _, v := range mobileList {
|
for _, v := range mobileList {
|
||||||
if v != "" {
|
if v != "" {
|
||||||
if userList, _, err := dao.GetUsers(dao.GetDB(), model.UserTypeStoreBoss, "", nil, "", v, 0, -1); err == nil && len(userList) > 0 {
|
if userList, _, err := dao.GetUsers(dao.GetDB(), model.UserTypeStoreBoss, "", nil, nil, []string{v}, 0, -1); err == nil && len(userList) > 0 {
|
||||||
userIDs = append(userIDs, userList[0].GetID())
|
userIDs = append(userIDs, userList[0].GetID())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -265,7 +265,7 @@ func HandleOrder4Consignee(order *model.GoodsOrder) (err error) {
|
|||||||
oeratorName := order.VendorOrderID
|
oeratorName := order.VendorOrderID
|
||||||
db := dao.GetDB()
|
db := dao.GetDB()
|
||||||
if mobileNumber != "" {
|
if mobileNumber != "" {
|
||||||
userList, _, err2 := dao.GetUsers(db, 0, "", nil, "", mobileNumber, 0, 0)
|
userList, _, err2 := dao.GetUsers(db, 0, "", nil, nil, []string{mobileNumber}, 0, 0)
|
||||||
if err = err2; err != nil {
|
if err = err2; err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -416,7 +416,7 @@ func OnDingDingMsg(msg map[string]interface{}) (callbackResponse *dingdingapi.Ca
|
|||||||
}
|
}
|
||||||
|
|
||||||
func GetUsers(ctx *jxcontext.Context, userType int, keyword string, userIDs []string, userID2, mobile string, offset, pageSize int) (pagedInfo *model.PagedInfo, err error) {
|
func GetUsers(ctx *jxcontext.Context, userType int, keyword string, userIDs []string, userID2, mobile string, offset, pageSize int) (pagedInfo *model.PagedInfo, err error) {
|
||||||
userList, totalCount, err := dao.GetUsers(dao.GetDB(), userType, keyword, userIDs, userID2, mobile, offset, pageSize)
|
userList, totalCount, err := dao.GetUsers(dao.GetDB(), userType, keyword, userIDs, jxutils.BatchString2Slice(userID2), jxutils.BatchString2Slice(mobile), offset, pageSize)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
pagedInfo = &model.PagedInfo{
|
pagedInfo = &model.PagedInfo{
|
||||||
TotalCount: totalCount,
|
TotalCount: totalCount,
|
||||||
@@ -501,7 +501,7 @@ func GetRolesUserList(ctx *jxcontext.Context, rList []*authz.RoleInfo) (userIDMa
|
|||||||
}
|
}
|
||||||
|
|
||||||
func checkUserType(userID string, userType int8) (err error) {
|
func checkUserType(userID string, userType int8) (err error) {
|
||||||
userList, _, err := dao.GetUsers(dao.GetDB(), 0, "", []string{userID}, "", "", 0, 0)
|
userList, _, err := dao.GetUsers(dao.GetDB(), 0, "", []string{userID}, nil, nil, 0, 0)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -790,7 +790,7 @@ func HandleUserWXRemark(db *dao.DaoDB, mobile string, mobileIsUerID bool) (err e
|
|||||||
if mobileIsUerID {
|
if mobileIsUerID {
|
||||||
userID = mobile
|
userID = mobile
|
||||||
} else {
|
} else {
|
||||||
userList, _, err2 := dao.GetUsers(db, model.UserTypeStoreBoss, "", nil, "", mobile, 0, -1)
|
userList, _, err2 := dao.GetUsers(db, model.UserTypeStoreBoss, "", nil, nil, []string{mobile}, 0, -1)
|
||||||
if err = err2; len(userList) > 0 {
|
if err = err2; len(userList) > 0 {
|
||||||
userID = userList[0].GetID()
|
userID = userList[0].GetID()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,9 +4,9 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"git.rosy.net.cn/baseapi/platformapi/dingdingapi"
|
"git.rosy.net.cn/baseapi/platformapi/dingdingapi"
|
||||||
|
"git.rosy.net.cn/baseapi/utils/errlist"
|
||||||
"git.rosy.net.cn/jx-callback/business/auth2"
|
"git.rosy.net.cn/jx-callback/business/auth2"
|
||||||
"git.rosy.net.cn/jx-callback/business/auth2/authprovider/dingding"
|
"git.rosy.net.cn/jx-callback/business/auth2/authprovider/dingding"
|
||||||
"git.rosy.net.cn/jx-callback/business/auth2/authprovider/weixin"
|
|
||||||
"git.rosy.net.cn/jx-callback/globals"
|
"git.rosy.net.cn/jx-callback/globals"
|
||||||
"git.rosy.net.cn/jx-callback/globals/api"
|
"git.rosy.net.cn/jx-callback/globals/api"
|
||||||
)
|
)
|
||||||
@@ -29,7 +29,7 @@ func SendUserMessage(msgType, userID, title, content string) (err error) {
|
|||||||
findOneMethod := false
|
findOneMethod := false
|
||||||
if err == nil {
|
if err == nil {
|
||||||
for _, auth := range authList {
|
for _, auth := range authList {
|
||||||
if auth.Type == dingding.AuthTypeStaff || auth.Type == weixin.AuthTypeMP {
|
if auth.Type == dingding.AuthTypeStaff /*|| auth.Type == weixin.AuthTypeMP*/ {
|
||||||
findOneMethod = true
|
findOneMethod = true
|
||||||
if len(content) > dingdingapi.MaxWorkContentLen {
|
if len(content) > dingdingapi.MaxWorkContentLen {
|
||||||
content = content[:dingdingapi.MaxWorkContentLen-4] + "..."
|
content = content[:dingdingapi.MaxWorkContentLen-4] + "..."
|
||||||
@@ -47,3 +47,12 @@ func SendUserMessage(msgType, userID, title, content string) (err error) {
|
|||||||
}
|
}
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func SendUsersMessage(msgType string, userIDs []string, title, content string) (err error) {
|
||||||
|
errList := errlist.New()
|
||||||
|
for _, userID := range userIDs {
|
||||||
|
errList.AddErr(SendUserMessage(msgType, userID, title, content))
|
||||||
|
}
|
||||||
|
err = errList.GetErrListAsOne()
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,111 +1,217 @@
|
|||||||
package dao
|
package dao
|
||||||
|
|
||||||
// type StoreUserInfo struct {
|
import (
|
||||||
// legacymodel.WeiXins
|
"fmt"
|
||||||
// ParentMobile string `json:"parentMobile"`
|
"time"
|
||||||
// Members []*legacymodel.WeiXins `orm:"-" json:"members"`
|
|
||||||
// MembersStr string `json:"-"`
|
|
||||||
// }
|
|
||||||
|
|
||||||
// func CreateWeiXins(db *DaoDB, user *legacymodel.WeiXins) (err error) {
|
"git.rosy.net.cn/baseapi/utils"
|
||||||
// Begin(db)
|
"git.rosy.net.cn/jx-callback/business/jxutils"
|
||||||
// if err = CreateEntity(db, user); err != nil {
|
"git.rosy.net.cn/jx-callback/business/model"
|
||||||
// Rollback(db)
|
)
|
||||||
// return err
|
|
||||||
// }
|
|
||||||
// if err = SetWeiXinsEmpty2Null(db, user); err != nil {
|
|
||||||
// Rollback(db)
|
|
||||||
// return err
|
|
||||||
// }
|
|
||||||
// Commit(db)
|
|
||||||
// return err
|
|
||||||
// }
|
|
||||||
|
|
||||||
// func SetWeiXinsEmpty2Null(db *DaoDB, user *legacymodel.WeiXins) (err error) {
|
type StoreWithCityName struct {
|
||||||
// _, err = ExecuteSQL(db, `
|
model.Store
|
||||||
// UPDATE weixins
|
CityName string `json:"cityName"`
|
||||||
// SET
|
}
|
||||||
// openid = IF(openid = '', NULL, openid),
|
|
||||||
// openid_mini = IF(openid_mini = '', NULL, openid_mini),
|
|
||||||
// openid_union = IF(openid_union = '', NULL, openid_union),
|
|
||||||
// tel = IF(tel = '', NULL, tel),
|
|
||||||
// parentid = IF(parentid = 0, -1, parentid)
|
|
||||||
// WHERE id = ?
|
|
||||||
// `, user.ID)
|
|
||||||
// return err
|
|
||||||
// }
|
|
||||||
|
|
||||||
// func GetWeiXinUserByIDs(db *DaoDB, tel, unionID, openID, miniOpenID string) (user *legacymodel.WeiXins, err error) {
|
type UserDeliveryAddressEx struct {
|
||||||
// fieldList := []string{
|
model.UserDeliveryAddress
|
||||||
// "Tel",
|
|
||||||
// "OpenIDUnion",
|
|
||||||
// "OpenID",
|
|
||||||
// "OpenIDMini",
|
|
||||||
// }
|
|
||||||
// valueList := []string{
|
|
||||||
// tel,
|
|
||||||
// unionID,
|
|
||||||
// openID,
|
|
||||||
// miniOpenID,
|
|
||||||
// }
|
|
||||||
// user = &legacymodel.WeiXins{
|
|
||||||
// Tel: tel,
|
|
||||||
// OpenIDUnion: unionID,
|
|
||||||
// OpenID: openID,
|
|
||||||
// OpenIDMini: miniOpenID,
|
|
||||||
// }
|
|
||||||
// for index := range valueList {
|
|
||||||
// if valueList[index] != "" {
|
|
||||||
// if err = GetEntity(db, user, fieldList[index]); err == nil {
|
|
||||||
// return user, nil
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// return nil, err
|
|
||||||
// }
|
|
||||||
|
|
||||||
// func UpdateWeiXinUser(db *DaoDB, tel, nickname, unionID, openID, miniOpenID string) (err error) {
|
UserName string `json:"userName"`
|
||||||
// user := &legacymodel.WeiXins{
|
CityName string `json:"cityName"`
|
||||||
// Tel: tel,
|
DistrictName string `json:"districtName"`
|
||||||
// }
|
}
|
||||||
// if err = GetEntity(db, user, "Tel"); err == nil {
|
|
||||||
// updateFields := []string{}
|
|
||||||
// if openID != "" {
|
|
||||||
// user.OpenID = openID
|
|
||||||
// updateFields = append(updateFields, "OpenID")
|
|
||||||
// }
|
|
||||||
// if unionID != "" {
|
|
||||||
// user.OpenIDUnion = unionID
|
|
||||||
// updateFields = append(updateFields, "OpenIDUnion")
|
|
||||||
// }
|
|
||||||
// if miniOpenID != "" {
|
|
||||||
// user.OpenIDMini = miniOpenID
|
|
||||||
// updateFields = append(updateFields, "OpenIDMini")
|
|
||||||
// }
|
|
||||||
// if nickname != "" {
|
|
||||||
// user.NickName = nickname
|
|
||||||
// updateFields = append(updateFields, "NickName")
|
|
||||||
// }
|
|
||||||
// _, err = UpdateEntity(db, user, updateFields...)
|
|
||||||
// }
|
|
||||||
// return err
|
|
||||||
// }
|
|
||||||
|
|
||||||
// func GetUserStoreInfo(db *DaoDB, fieldName, fieldValue string) (storeUserInfo *StoreUserInfo, err error) {
|
func GetUserByID(db *DaoDB, fieldName, fieldValue string) (user *model.User, err error) {
|
||||||
// sql := fmt.Sprintf(`
|
sql := fmt.Sprintf(`
|
||||||
// SELECT t1.id, IF(t3.id IS NULL, t1.jxstoreid, t3.jxstoreid) jxstoreid, t1.openid, t1.tel, t1.nickname, t1.parentid, t3.tel parent_mobile,
|
SELECT *
|
||||||
// CONCAT("[", GROUP_CONCAT(CONCAT('{"id":', t2.id, ',"tel":"', t2.tel, '","nickname":"', IF(t2.nickname IS NULL, "", t2.nickname), '"}')), "]") members_str
|
FROM user t1
|
||||||
// FROM weixins t1
|
WHERE t1.deleted_at = ? AND t1.status = ? AND t1.%s = ?
|
||||||
// LEFT JOIN weixins t2 ON t2.parentid = t1.id
|
`, fieldName)
|
||||||
// LEFT JOIN weixins t3 ON t1.parentid = t3.id
|
sqlParams := []interface{}{
|
||||||
// WHERE t1.%s = ?
|
utils.DefaultTimeValue,
|
||||||
// GROUP BY 1,2,3,4,5,6,7;
|
model.UserStatusNormal,
|
||||||
// `, fieldName)
|
fieldValue,
|
||||||
// if err = GetRow(db, &storeUserInfo, sql, fieldValue); err == nil { // todo
|
}
|
||||||
// err = nil
|
// globals.SugarLogger.Debugf("GetUserByID sql:%s, sqlParams:%s", sql, utils.Format4Output(sqlParams, false))
|
||||||
// if storeUserInfo.MembersStr != "" {
|
err = GetRow(db, &user, sql, sqlParams...)
|
||||||
// err = utils.UnmarshalUseNumber([]byte(storeUserInfo.MembersStr), &storeUserInfo.Members)
|
return user, err
|
||||||
// }
|
}
|
||||||
// }
|
|
||||||
// return storeUserInfo, err
|
func GetUsers(db *DaoDB, userType int, keyword string, userIDs, userID2s, mobiles []string, offset, pageSize int) (userList []*model.User, totalCount int, err error) {
|
||||||
// }
|
offset = jxutils.FormalizePageOffset(offset)
|
||||||
|
pageSize = jxutils.FormalizePageSize(pageSize)
|
||||||
|
if userType == 0 {
|
||||||
|
userType = 255
|
||||||
|
}
|
||||||
|
sql := `
|
||||||
|
SELECT SQL_CALC_FOUND_ROWS
|
||||||
|
t1.*
|
||||||
|
FROM user t1
|
||||||
|
WHERE t1.status = 1 AND t1.deleted_at = ? AND t1.type & ? <> 0`
|
||||||
|
sqlParams := []interface{}{
|
||||||
|
utils.DefaultTimeValue,
|
||||||
|
userType,
|
||||||
|
}
|
||||||
|
if len(userIDs) > 0 {
|
||||||
|
sql += " AND t1.user_id IN (" + GenQuestionMarks(len(userIDs)) + ")"
|
||||||
|
sqlParams = append(sqlParams, userIDs)
|
||||||
|
}
|
||||||
|
if len(userID2s) > 0 {
|
||||||
|
sql += " AND t1.user_id2 IN (" + GenQuestionMarks(len(userID2s)) + ")"
|
||||||
|
sqlParams = append(sqlParams, userID2s)
|
||||||
|
}
|
||||||
|
if len(mobiles) > 0 {
|
||||||
|
sql += " AND t1.mobile IN (" + GenQuestionMarks(len(mobiles)) + ")"
|
||||||
|
sqlParams = append(sqlParams, mobiles)
|
||||||
|
}
|
||||||
|
if keyword != "" {
|
||||||
|
keywordLike := "%" + keyword + "%"
|
||||||
|
sql += " AND (t1.user_id LIKE ? OR t1.user_id2 LIKE ? OR t1.mobile LIKE ? OR t1.email LIKE ? OR t1.name LIKE ?)"
|
||||||
|
sqlParams = append(sqlParams, keywordLike, keywordLike, keywordLike, keywordLike, keywordLike)
|
||||||
|
}
|
||||||
|
sql += " LIMIT ? OFFSET ?"
|
||||||
|
sqlParams = append(sqlParams, pageSize, offset)
|
||||||
|
Begin(db)
|
||||||
|
defer Commit(db)
|
||||||
|
if err = GetRows(db, &userList, sql, sqlParams...); err == nil {
|
||||||
|
totalCount = GetLastTotalRowCount(db)
|
||||||
|
}
|
||||||
|
return userList, totalCount, err
|
||||||
|
}
|
||||||
|
|
||||||
|
func DeleteUsers(db *DaoDB, userIDs []string) (num int64, err error) {
|
||||||
|
if len(userIDs) > 0 {
|
||||||
|
sql := `
|
||||||
|
UPDATE user t1
|
||||||
|
JOIN auth_bind t2 ON t2.user_id = t1.user_id
|
||||||
|
SET
|
||||||
|
t1.deleted_at = ?,
|
||||||
|
t2.deleted_at = ?
|
||||||
|
WHERE t1.user_id IN (` + GenQuestionMarks(len(userIDs)) + ");"
|
||||||
|
now := time.Now()
|
||||||
|
sqlParams := []interface{}{
|
||||||
|
now,
|
||||||
|
now,
|
||||||
|
userIDs,
|
||||||
|
}
|
||||||
|
num, err = ExecuteSQL(db, sql, sqlParams...)
|
||||||
|
}
|
||||||
|
return num, err
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetStoreListByMobile(db *DaoDB, mobile string) (storeList []*StoreWithCityName, err error) {
|
||||||
|
if mobile != "" {
|
||||||
|
sql := `
|
||||||
|
SELECT
|
||||||
|
DISTINCT t1.*, t2.name city_name
|
||||||
|
FROM (
|
||||||
|
SELECT *
|
||||||
|
FROM store t1
|
||||||
|
WHERE (t1.market_man_phone = ? OR t1.operator_phone = ? OR t1.operator_phone2 = ?)
|
||||||
|
UNION DISTINCT
|
||||||
|
SELECT t1.*
|
||||||
|
FROM store t1
|
||||||
|
JOIN weixins t2 ON t2.jxstoreid = t1.id AND t2.parentid = -1
|
||||||
|
LEFT JOIN weixins t3 ON t3.parentid = t2.id
|
||||||
|
WHERE (t2.tel = ? OR t3.tel = ?)
|
||||||
|
) t1
|
||||||
|
LEFT JOIN place t2 ON t2.code = t1.city_code
|
||||||
|
WHERE t1.deleted_at = ?
|
||||||
|
ORDER BY t1.name`
|
||||||
|
sqlParams := []interface{}{
|
||||||
|
mobile,
|
||||||
|
mobile,
|
||||||
|
mobile,
|
||||||
|
mobile,
|
||||||
|
mobile,
|
||||||
|
utils.DefaultTimeValue,
|
||||||
|
}
|
||||||
|
err = GetRows(db, &storeList, sql, sqlParams...)
|
||||||
|
}
|
||||||
|
return storeList, err
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetStoreListByMobileOrStoreIDs(db *DaoDB, mobile string, shortRoleNameList []string, storeIDs []int) (storeList []*StoreWithCityName, err error) {
|
||||||
|
sql := `
|
||||||
|
SELECT t1.*, t2.name city_name
|
||||||
|
FROM store t1
|
||||||
|
LEFT JOIN place t2 ON t2.code = t1.city_code
|
||||||
|
WHERE t1.deleted_at = ? AND ( 1 = 0`
|
||||||
|
sqlParams := []interface{}{
|
||||||
|
utils.DefaultTimeValue,
|
||||||
|
}
|
||||||
|
if mobile != "" {
|
||||||
|
sql += " OR t1.market_man_phone = ? OR t1.operator_phone = ? OR t1.operator_phone2 = ?"
|
||||||
|
sqlParams = append(sqlParams, mobile, mobile, mobile)
|
||||||
|
}
|
||||||
|
if len(shortRoleNameList) > 0 {
|
||||||
|
questionMarks := GenQuestionMarks(len(shortRoleNameList))
|
||||||
|
sql += " OR t1.market_man_role IN (" + questionMarks + ") OR t1.operator_role IN (" + questionMarks + ") OR t1.operator_role2 IN (" + questionMarks + ")"
|
||||||
|
sqlParams = append(sqlParams, shortRoleNameList, shortRoleNameList, shortRoleNameList)
|
||||||
|
}
|
||||||
|
if len(storeIDs) > 0 {
|
||||||
|
sql += " OR t1.id IN (" + GenQuestionMarks(len(storeIDs)) + ")"
|
||||||
|
sqlParams = append(sqlParams, storeIDs)
|
||||||
|
}
|
||||||
|
sql += ")"
|
||||||
|
err = GetRows(db, &storeList, sql, sqlParams...)
|
||||||
|
return storeList, err
|
||||||
|
}
|
||||||
|
|
||||||
|
func QueryUserDeliveryAddress(db *DaoDB, addressID int64, userIDs []string, offset, pageSize int) (addressList []*UserDeliveryAddressEx, totalCount int, err error) {
|
||||||
|
sql := `
|
||||||
|
SELECT SQL_CALC_FOUND_ROWS
|
||||||
|
t1.*,
|
||||||
|
t2.name user_name,
|
||||||
|
district.name district_name,
|
||||||
|
city.name city_name
|
||||||
|
FROM user_delivery_address t1
|
||||||
|
LEFT JOIN user t2 ON t2.user_id = t1.user_id
|
||||||
|
LEFT JOIN place district ON district.code = t1.district_code
|
||||||
|
LEFT JOIN place city ON city.code = t1.city_code
|
||||||
|
WHERE t1.deleted_at = ?
|
||||||
|
`
|
||||||
|
sqlParams := []interface{}{
|
||||||
|
utils.DefaultTimeValue,
|
||||||
|
}
|
||||||
|
if addressID > 0 {
|
||||||
|
sql += " AND t1.id = ? "
|
||||||
|
sqlParams = append(sqlParams, addressID)
|
||||||
|
}
|
||||||
|
if len(userIDs) > 0 {
|
||||||
|
sql += " AND t1.user_id IN (" + GenQuestionMarks(len(userIDs)) + ")"
|
||||||
|
sqlParams = append(sqlParams, userIDs)
|
||||||
|
}
|
||||||
|
offset = jxutils.FormalizePageOffset(offset)
|
||||||
|
pageSize = jxutils.FormalizePageSize(pageSize)
|
||||||
|
sql += `
|
||||||
|
ORDER BY t1.is_default DESC, t1.consignee_name
|
||||||
|
LIMIT ? OFFSET ?`
|
||||||
|
sqlParams = append(sqlParams, pageSize, offset)
|
||||||
|
|
||||||
|
Begin(db)
|
||||||
|
defer Commit(db)
|
||||||
|
if err = GetRows(db, &addressList, sql, sqlParams...); err == nil {
|
||||||
|
totalCount = GetLastTotalRowCount(db)
|
||||||
|
}
|
||||||
|
return addressList, totalCount, err
|
||||||
|
}
|
||||||
|
|
||||||
|
func ClearUserDeliveryAddressDefault(db *DaoDB, userID string, defAddressID int) (err error) {
|
||||||
|
sql := `
|
||||||
|
UPDATE user_delivery_address t1
|
||||||
|
SET t1.is_default = 0
|
||||||
|
WHERE t1.deleted_at = ? AND t1.user_id = ?
|
||||||
|
`
|
||||||
|
sqlParams := []interface{}{
|
||||||
|
utils.DefaultTimeValue,
|
||||||
|
userID,
|
||||||
|
}
|
||||||
|
if defAddressID > 0 {
|
||||||
|
sql += " AND t1.id <> ?"
|
||||||
|
sqlParams = append(sqlParams, defAddressID)
|
||||||
|
}
|
||||||
|
_, err = ExecuteSQL(db, sql, sqlParams...)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,217 +0,0 @@
|
|||||||
package dao
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
"time"
|
|
||||||
|
|
||||||
"git.rosy.net.cn/baseapi/utils"
|
|
||||||
"git.rosy.net.cn/jx-callback/business/jxutils"
|
|
||||||
"git.rosy.net.cn/jx-callback/business/model"
|
|
||||||
)
|
|
||||||
|
|
||||||
type StoreWithCityName struct {
|
|
||||||
model.Store
|
|
||||||
CityName string `json:"cityName"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type UserDeliveryAddressEx struct {
|
|
||||||
model.UserDeliveryAddress
|
|
||||||
|
|
||||||
UserName string `json:"userName"`
|
|
||||||
CityName string `json:"cityName"`
|
|
||||||
DistrictName string `json:"districtName"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func GetUserByID(db *DaoDB, fieldName, fieldValue string) (user *model.User, err error) {
|
|
||||||
sql := fmt.Sprintf(`
|
|
||||||
SELECT *
|
|
||||||
FROM user t1
|
|
||||||
WHERE t1.deleted_at = ? AND t1.status = ? AND t1.%s = ?
|
|
||||||
`, fieldName)
|
|
||||||
sqlParams := []interface{}{
|
|
||||||
utils.DefaultTimeValue,
|
|
||||||
model.UserStatusNormal,
|
|
||||||
fieldValue,
|
|
||||||
}
|
|
||||||
// globals.SugarLogger.Debugf("GetUserByID sql:%s, sqlParams:%s", sql, utils.Format4Output(sqlParams, false))
|
|
||||||
err = GetRow(db, &user, sql, sqlParams...)
|
|
||||||
return user, err
|
|
||||||
}
|
|
||||||
|
|
||||||
func GetUsers(db *DaoDB, userType int, keyword string, userIDs []string, userID2, mobile string, offset, pageSize int) (userList []*model.User, totalCount int, err error) {
|
|
||||||
offset = jxutils.FormalizePageOffset(offset)
|
|
||||||
pageSize = jxutils.FormalizePageSize(pageSize)
|
|
||||||
if userType == 0 {
|
|
||||||
userType = 255
|
|
||||||
}
|
|
||||||
sql := `
|
|
||||||
SELECT SQL_CALC_FOUND_ROWS
|
|
||||||
t1.*
|
|
||||||
FROM user t1
|
|
||||||
WHERE t1.status = 1 AND t1.deleted_at = ? AND t1.type & ? <> 0`
|
|
||||||
sqlParams := []interface{}{
|
|
||||||
utils.DefaultTimeValue,
|
|
||||||
userType,
|
|
||||||
}
|
|
||||||
if len(userIDs) > 0 {
|
|
||||||
sql += " AND t1.user_id IN (" + GenQuestionMarks(len(userIDs)) + ")"
|
|
||||||
sqlParams = append(sqlParams, userIDs)
|
|
||||||
}
|
|
||||||
if userID2 != "" {
|
|
||||||
sql += " AND t1.user_id2 = ?"
|
|
||||||
sqlParams = append(sqlParams, userID2)
|
|
||||||
}
|
|
||||||
if mobile != "" {
|
|
||||||
sql += " AND t1.mobile = ?"
|
|
||||||
sqlParams = append(sqlParams, mobile)
|
|
||||||
}
|
|
||||||
if keyword != "" {
|
|
||||||
keywordLike := "%" + keyword + "%"
|
|
||||||
sql += " AND (t1.user_id LIKE ? OR t1.user_id2 LIKE ? OR t1.mobile LIKE ? OR t1.email LIKE ? OR t1.name LIKE ?)"
|
|
||||||
sqlParams = append(sqlParams, keywordLike, keywordLike, keywordLike, keywordLike, keywordLike)
|
|
||||||
}
|
|
||||||
sql += " LIMIT ? OFFSET ?"
|
|
||||||
sqlParams = append(sqlParams, pageSize, offset)
|
|
||||||
Begin(db)
|
|
||||||
defer Commit(db)
|
|
||||||
if err = GetRows(db, &userList, sql, sqlParams...); err == nil {
|
|
||||||
totalCount = GetLastTotalRowCount(db)
|
|
||||||
}
|
|
||||||
return userList, totalCount, err
|
|
||||||
}
|
|
||||||
|
|
||||||
func DeleteUsers(db *DaoDB, userIDs []string) (num int64, err error) {
|
|
||||||
if len(userIDs) > 0 {
|
|
||||||
sql := `
|
|
||||||
UPDATE user t1
|
|
||||||
JOIN auth_bind t2 ON t2.user_id = t1.user_id
|
|
||||||
SET
|
|
||||||
t1.deleted_at = ?,
|
|
||||||
t2.deleted_at = ?
|
|
||||||
WHERE t1.user_id IN (` + GenQuestionMarks(len(userIDs)) + ");"
|
|
||||||
now := time.Now()
|
|
||||||
sqlParams := []interface{}{
|
|
||||||
now,
|
|
||||||
now,
|
|
||||||
userIDs,
|
|
||||||
}
|
|
||||||
num, err = ExecuteSQL(db, sql, sqlParams...)
|
|
||||||
}
|
|
||||||
return num, err
|
|
||||||
}
|
|
||||||
|
|
||||||
func GetStoreListByMobile(db *DaoDB, mobile string) (storeList []*StoreWithCityName, err error) {
|
|
||||||
if mobile != "" {
|
|
||||||
sql := `
|
|
||||||
SELECT
|
|
||||||
DISTINCT t1.*, t2.name city_name
|
|
||||||
FROM (
|
|
||||||
SELECT *
|
|
||||||
FROM store t1
|
|
||||||
WHERE (t1.market_man_phone = ? OR t1.operator_phone = ? OR t1.operator_phone2 = ?)
|
|
||||||
UNION DISTINCT
|
|
||||||
SELECT t1.*
|
|
||||||
FROM store t1
|
|
||||||
JOIN weixins t2 ON t2.jxstoreid = t1.id AND t2.parentid = -1
|
|
||||||
LEFT JOIN weixins t3 ON t3.parentid = t2.id
|
|
||||||
WHERE (t2.tel = ? OR t3.tel = ?)
|
|
||||||
) t1
|
|
||||||
LEFT JOIN place t2 ON t2.code = t1.city_code
|
|
||||||
WHERE t1.deleted_at = ?
|
|
||||||
ORDER BY t1.name`
|
|
||||||
sqlParams := []interface{}{
|
|
||||||
mobile,
|
|
||||||
mobile,
|
|
||||||
mobile,
|
|
||||||
mobile,
|
|
||||||
mobile,
|
|
||||||
utils.DefaultTimeValue,
|
|
||||||
}
|
|
||||||
err = GetRows(db, &storeList, sql, sqlParams...)
|
|
||||||
}
|
|
||||||
return storeList, err
|
|
||||||
}
|
|
||||||
|
|
||||||
func GetStoreListByMobileOrStoreIDs(db *DaoDB, mobile string, shortRoleNameList []string, storeIDs []int) (storeList []*StoreWithCityName, err error) {
|
|
||||||
sql := `
|
|
||||||
SELECT t1.*, t2.name city_name
|
|
||||||
FROM store t1
|
|
||||||
LEFT JOIN place t2 ON t2.code = t1.city_code
|
|
||||||
WHERE t1.deleted_at = ? AND ( 1 = 0`
|
|
||||||
sqlParams := []interface{}{
|
|
||||||
utils.DefaultTimeValue,
|
|
||||||
}
|
|
||||||
if mobile != "" {
|
|
||||||
sql += " OR t1.market_man_phone = ? OR t1.operator_phone = ? OR t1.operator_phone2 = ?"
|
|
||||||
sqlParams = append(sqlParams, mobile, mobile, mobile)
|
|
||||||
}
|
|
||||||
if len(shortRoleNameList) > 0 {
|
|
||||||
questionMarks := GenQuestionMarks(len(shortRoleNameList))
|
|
||||||
sql += " OR t1.market_man_role IN (" + questionMarks + ") OR t1.operator_role IN (" + questionMarks + ") OR t1.operator_role2 IN (" + questionMarks + ")"
|
|
||||||
sqlParams = append(sqlParams, shortRoleNameList, shortRoleNameList, shortRoleNameList)
|
|
||||||
}
|
|
||||||
if len(storeIDs) > 0 {
|
|
||||||
sql += " OR t1.id IN (" + GenQuestionMarks(len(storeIDs)) + ")"
|
|
||||||
sqlParams = append(sqlParams, storeIDs)
|
|
||||||
}
|
|
||||||
sql += ")"
|
|
||||||
err = GetRows(db, &storeList, sql, sqlParams...)
|
|
||||||
return storeList, err
|
|
||||||
}
|
|
||||||
|
|
||||||
func QueryUserDeliveryAddress(db *DaoDB, addressID int64, userIDs []string, offset, pageSize int) (addressList []*UserDeliveryAddressEx, totalCount int, err error) {
|
|
||||||
sql := `
|
|
||||||
SELECT SQL_CALC_FOUND_ROWS
|
|
||||||
t1.*,
|
|
||||||
t2.name user_name,
|
|
||||||
district.name district_name,
|
|
||||||
city.name city_name
|
|
||||||
FROM user_delivery_address t1
|
|
||||||
LEFT JOIN user t2 ON t2.user_id = t1.user_id
|
|
||||||
LEFT JOIN place district ON district.code = t1.district_code
|
|
||||||
LEFT JOIN place city ON city.code = t1.city_code
|
|
||||||
WHERE t1.deleted_at = ?
|
|
||||||
`
|
|
||||||
sqlParams := []interface{}{
|
|
||||||
utils.DefaultTimeValue,
|
|
||||||
}
|
|
||||||
if addressID > 0 {
|
|
||||||
sql += " AND t1.id = ? "
|
|
||||||
sqlParams = append(sqlParams, addressID)
|
|
||||||
}
|
|
||||||
if len(userIDs) > 0 {
|
|
||||||
sql += " AND t1.user_id IN (" + GenQuestionMarks(len(userIDs)) + ")"
|
|
||||||
sqlParams = append(sqlParams, userIDs)
|
|
||||||
}
|
|
||||||
offset = jxutils.FormalizePageOffset(offset)
|
|
||||||
pageSize = jxutils.FormalizePageSize(pageSize)
|
|
||||||
sql += `
|
|
||||||
ORDER BY t1.is_default DESC, t1.consignee_name
|
|
||||||
LIMIT ? OFFSET ?`
|
|
||||||
sqlParams = append(sqlParams, pageSize, offset)
|
|
||||||
|
|
||||||
Begin(db)
|
|
||||||
defer Commit(db)
|
|
||||||
if err = GetRows(db, &addressList, sql, sqlParams...); err == nil {
|
|
||||||
totalCount = GetLastTotalRowCount(db)
|
|
||||||
}
|
|
||||||
return addressList, totalCount, err
|
|
||||||
}
|
|
||||||
|
|
||||||
func ClearUserDeliveryAddressDefault(db *DaoDB, userID string, defAddressID int) (err error) {
|
|
||||||
sql := `
|
|
||||||
UPDATE user_delivery_address t1
|
|
||||||
SET t1.is_default = 0
|
|
||||||
WHERE t1.deleted_at = ? AND t1.user_id = ?
|
|
||||||
`
|
|
||||||
sqlParams := []interface{}{
|
|
||||||
utils.DefaultTimeValue,
|
|
||||||
userID,
|
|
||||||
}
|
|
||||||
if defAddressID > 0 {
|
|
||||||
sql += " AND t1.id <> ?"
|
|
||||||
sqlParams = append(sqlParams, defAddressID)
|
|
||||||
}
|
|
||||||
_, err = ExecuteSQL(db, sql, sqlParams...)
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
@@ -1,33 +1,15 @@
|
|||||||
package dao
|
package dao
|
||||||
|
|
||||||
// func TestCreateWeiXins(t *testing.T) {
|
import (
|
||||||
// err := CreateWeiXins(GetDB(), &legacymodel.WeiXins{
|
"testing"
|
||||||
// Tel: "12345",
|
|
||||||
// })
|
|
||||||
// if err != nil {
|
|
||||||
// t.Fatal(err)
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
// func TestGetWeiXinUserByIDs(t *testing.T) {
|
"git.rosy.net.cn/baseapi/utils"
|
||||||
// user, err := GetWeiXinUserByIDs(GetDB(), "", "unionid", "", "")
|
)
|
||||||
// if err != nil {
|
|
||||||
// t.Fatal(err)
|
|
||||||
// }
|
|
||||||
// globals.SugarLogger.Debug(utils.Format4Output(user, false))
|
|
||||||
// }
|
|
||||||
|
|
||||||
// func TestUpdateWeiXinUser(t *testing.T) {
|
func TestGetUsers(t *testing.T) {
|
||||||
// err := UpdateWeiXinUser(GetDB(), "12345", "nickname", "unionid", "openid", "miniid")
|
userList, _, err := GetUsers(GetDB(), 0, "", nil, nil, []string{"18180948107"}, 0, 0)
|
||||||
// if err != nil {
|
if err != nil {
|
||||||
// t.Fatal(err)
|
t.Fatal(err)
|
||||||
// }
|
}
|
||||||
// }
|
t.Log(utils.Format4Output(userList, false))
|
||||||
|
}
|
||||||
// func TestGetUserStoreInfo(t *testing.T) {
|
|
||||||
// user, err := GetUserStoreInfo(GetDB(), "tel", "18180948107")
|
|
||||||
// if err != nil {
|
|
||||||
// t.Fatal(err)
|
|
||||||
// }
|
|
||||||
// globals.SugarLogger.Debug(utils.Format4Output(user, false))
|
|
||||||
// }
|
|
||||||
|
|||||||
Reference in New Issue
Block a user