Merge remote-tracking branch 'origin/mark' into don
This commit is contained in:
@@ -7,14 +7,19 @@ const (
|
||||
|
||||
const (
|
||||
AdminName = "jxadmin"
|
||||
|
||||
AuthBindTypeAll = -1
|
||||
AuthBindTypeAuth = 0 // 绑定类型为认证
|
||||
AuthBindTypeID = 1 // 绑定类型为用户标识,不做为认证
|
||||
)
|
||||
|
||||
type AuthBind struct {
|
||||
ModelIDCULD
|
||||
|
||||
UserID string `orm:"size(48);column(user_id)" json:"userID"`
|
||||
Type string `orm:"size(16)" json:"type"`
|
||||
Status int8 `json:"status"`
|
||||
UserID string `orm:"size(48);column(user_id)" json:"userID"`
|
||||
BindType int8 `json:"bindType"`
|
||||
Type string `orm:"size(16)" json:"type"`
|
||||
Status int8 `json:"status"`
|
||||
|
||||
AuthID string `orm:"size(48);column(auth_id)" json:"authID"`
|
||||
AuthID2 string `orm:"size(48);column(auth_id2);index" json:"authID2"`
|
||||
|
||||
@@ -7,7 +7,7 @@ import (
|
||||
"git.rosy.net.cn/jx-callback/business/model"
|
||||
)
|
||||
|
||||
func GetAuthBind(db *DaoDB, userID, authType, authID string) (authBind *model.AuthBind, err error) {
|
||||
func GetAuthBind(db *DaoDB, userID string, bindType int, authType, authID string) (authBind *model.AuthBind, err error) {
|
||||
if userID == "" && authID == "" {
|
||||
return nil, errors.New("userID, authID, authID2不能全为空")
|
||||
}
|
||||
@@ -24,6 +24,10 @@ func GetAuthBind(db *DaoDB, userID, authType, authID string) (authBind *model.Au
|
||||
sql += " AND t1.user_id = ?"
|
||||
sqlParams = append(sqlParams, userID)
|
||||
}
|
||||
if bindType != model.AuthBindTypeAll {
|
||||
sql += " AND t1.bind_type = ?"
|
||||
sqlParams = append(sqlParams, bindType)
|
||||
}
|
||||
if authType != "" {
|
||||
sql += " AND t1.type = ?"
|
||||
sqlParams = append(sqlParams, authType)
|
||||
@@ -37,32 +41,32 @@ func GetAuthBind(db *DaoDB, userID, authType, authID string) (authBind *model.Au
|
||||
return authBind, err
|
||||
}
|
||||
|
||||
func GetAuthBindsByAuthID2(db *DaoDB, authID2 string, typeList []string) (authBinds []*model.AuthBind, err error) {
|
||||
func GetUserBindAuthInfo(db *DaoDB, userID string, bindType int, authID2 string, typeList []string) (authList []*model.AuthBind, err error) {
|
||||
sql := `
|
||||
SELECT *
|
||||
FROM auth_bind t1
|
||||
WHERE t1.deleted_at = ? AND t1.status = ? AND t1.auth_id2 = ? AND t1.type IN (` + GenQuestionMarks(len(typeList)) + ")"
|
||||
sqlParams := []interface{}{
|
||||
utils.DefaultTimeValue,
|
||||
model.AuthBindStatusNormal,
|
||||
authID2,
|
||||
typeList,
|
||||
}
|
||||
err = GetRows(db, &authBinds, sql, sqlParams...)
|
||||
return authBinds, err
|
||||
}
|
||||
|
||||
func GetUserBindAuthInfo(db *DaoDB, userID string) (authList []*model.AuthBind, err error) {
|
||||
sql := `
|
||||
SELECT *
|
||||
FROM auth_bind t1
|
||||
WHERE t1.deleted_at = ? AND t1.status = ? AND t1.user_id = ?
|
||||
`
|
||||
WHERE t1.deleted_at = ? AND t1.status = ?`
|
||||
sqlParams := []interface{}{
|
||||
utils.DefaultTimeValue,
|
||||
model.UserStatusNormal,
|
||||
userID,
|
||||
}
|
||||
if userID != "" {
|
||||
sql += " AND t1.user_id = ?"
|
||||
sqlParams = append(sqlParams, userID)
|
||||
}
|
||||
if bindType != model.AuthBindTypeAll {
|
||||
sql += " AND t1.bind_type = ?"
|
||||
sqlParams = append(sqlParams, bindType)
|
||||
}
|
||||
if authID2 != "" {
|
||||
sql += " AND t1.auth_id2 = ?"
|
||||
sqlParams = append(sqlParams, authID2)
|
||||
}
|
||||
if len(typeList) > 0 {
|
||||
sql += " AND t1.type IN (" + GenQuestionMarks(len(typeList)) + ")"
|
||||
sqlParams = append(sqlParams, typeList)
|
||||
}
|
||||
|
||||
err = GetRows(db, &authList, sql, sqlParams...)
|
||||
return authList, err
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@ package dao
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"git.rosy.net.cn/baseapi/utils"
|
||||
"git.rosy.net.cn/jx-callback/business/model"
|
||||
@@ -64,3 +65,23 @@ func GetUsers(db *DaoDB, userType int, keyword string, userIDs []string, userID2
|
||||
}
|
||||
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
|
||||
}
|
||||
|
||||
@@ -176,6 +176,7 @@ func GetStoreCategories(db *DaoDB, vendorID, storeID int, level int) (cats []*Sk
|
||||
}
|
||||
|
||||
// 以store_sku_bind为基础来做同步,正常情况下使用
|
||||
// !!! 此函数不要将store_sku_bind中的vendor_price取出来放到StoreSkuSyncInfo.VendorPrice中,因为之后会依赖这个VendorPrice进行重算
|
||||
// 单多门店模式厂商通用
|
||||
func GetStoreSkus2(db *DaoDB, vendorID, storeID int, skuIDs []int, isDirty bool) (skus []*StoreSkuSyncInfo, err error) {
|
||||
if vendorID < 0 {
|
||||
@@ -211,6 +212,11 @@ func GetStoreSkus2(db *DaoDB, vendorID, storeID int, skuIDs []int, isDirty bool)
|
||||
t5.%s_sync_status store_cat_sync_status, t5.%s_id vendor_cat_id,
|
||||
t5sku.%s_sync_status sku_store_cat_sync_status, t5sku.%s_id sku_vendor_cat_id`
|
||||
fmtParams = append(fmtParams, fieldPrefix, fieldPrefix, fieldPrefix, fieldPrefix)
|
||||
} else {
|
||||
sql += `,
|
||||
t4.%s_id vendor_cat_id,
|
||||
t5sku.%s_id sku_vendor_cat_id`
|
||||
fmtParams = append(fmtParams, fieldPrefix, fieldPrefix)
|
||||
}
|
||||
sql += `
|
||||
FROM store_sku_bind t1
|
||||
@@ -236,6 +242,9 @@ func GetStoreSkus2(db *DaoDB, vendorID, storeID int, skuIDs []int, isDirty bool)
|
||||
LEFT JOIN store_sku_category_map t5 ON t4.id = t5.category_id AND t5.store_id = t1.store_id AND t5.deleted_at = ?
|
||||
LEFT JOIN store_sku_category_map t5sku ON t2.category_id = t5sku.category_id AND t5sku.store_id = t1.store_id AND t5sku.deleted_at = ?`
|
||||
sqlParams = append(sqlParams, utils.DefaultTimeValue, utils.DefaultTimeValue)
|
||||
} else {
|
||||
sql += `
|
||||
LEFT JOIN sku_category t5sku ON t5sku.id = t2.category_id`
|
||||
}
|
||||
sql += " WHERE 1 = 1"
|
||||
if storeID > 0 {
|
||||
@@ -532,4 +541,4 @@ func (s *StoreSkuSyncInfo) GetSeq() int {
|
||||
return s.Seq
|
||||
}
|
||||
return int(s.VendorPrice)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -67,24 +67,31 @@ type ModelIDCULD struct {
|
||||
DeletedAt time.Time `orm:"type(datetime);default('1970-01-01 00:00:00')" json:"deletedAt"`
|
||||
}
|
||||
|
||||
// flag按位表示,第一位表示修改,第二位表示新增,第三位表示删除
|
||||
// 同步标识掩码
|
||||
const (
|
||||
// general
|
||||
SyncFlagModifiedMask = 1
|
||||
SyncFlagNewMask = 2
|
||||
SyncFlagDeletedMask = 4
|
||||
|
||||
SyncFlagSaleMask = 8 // 改了门店商品可售状态必须设置此标志
|
||||
SyncFlagPriceMask = 16 // 改了门店商品价格必须设置此标志
|
||||
SyncFlagStockMask = 32 // 修改库存同步标识,当前只有多门店平台才会用到
|
||||
SyncFlagSpecMask = 64 // 原值32
|
||||
|
||||
SyncFlagStoreSkuOnlyMask = SyncFlagSaleMask | SyncFlagPriceMask
|
||||
SyncFlagStoreSkuModifiedMask = SyncFlagStoreSkuOnlyMask | SyncFlagModifiedMask
|
||||
SyncFlagChangedMask = SyncFlagSpecMask | SyncFlagNewMask | SyncFlagDeletedMask | SyncFlagStoreSkuModifiedMask
|
||||
|
||||
// store only
|
||||
SyncFlagStoreName = 8
|
||||
SyncFlagStoreAddress = 16
|
||||
SyncFlagStoreStatus = 32
|
||||
|
||||
// sku only
|
||||
SyncFlagSpecMask = 64 // 规格修改,原值32
|
||||
|
||||
// store sku only
|
||||
SyncFlagSaleMask = 8 // 改了门店商品可售状态必须设置此标志
|
||||
SyncFlagPriceMask = 16 // 改了门店商品价格必须设置此标志
|
||||
SyncFlagStockMask = 32 // 修改库存同步标识,当前只有多门店平台才会用到
|
||||
SyncFlagSeqMask = 64 // 门店商家分类下的排序顺序
|
||||
|
||||
// combine
|
||||
SyncFlagStoreSkuOnlyMask = SyncFlagSaleMask | SyncFlagPriceMask
|
||||
SyncFlagStoreSkuModifiedMask = SyncFlagStoreSkuOnlyMask | SyncFlagModifiedMask
|
||||
SyncFlagChangedMask = SyncFlagSpecMask | SyncFlagNewMask | SyncFlagDeletedMask | SyncFlagStoreSkuModifiedMask
|
||||
)
|
||||
|
||||
func IsSyncStatusNew(syncStatus int8) bool {
|
||||
@@ -107,6 +114,10 @@ func IsSyncStatusPrice(syncStatus int8) bool {
|
||||
return (syncStatus & SyncFlagPriceMask) != 0
|
||||
}
|
||||
|
||||
func IsSyncStatusSec(syncStatus int8) bool {
|
||||
return (syncStatus & SyncFlagSeqMask) != 0
|
||||
}
|
||||
|
||||
func IsSyncStatusNeedCreate(syncStatus int8) bool {
|
||||
return IsSyncStatusNew(syncStatus) && !IsSyncStatusDelete(syncStatus)
|
||||
}
|
||||
|
||||
@@ -2,6 +2,12 @@ package model
|
||||
|
||||
import "time"
|
||||
|
||||
const (
|
||||
OrderDeliveryTypePlatform = "platform" // 平台负责配送
|
||||
OrderDeliveryTypeStoreSelf = "store" // 门店自送
|
||||
OrderDeliveryTypeSelfTake = "self" // 用户自提
|
||||
)
|
||||
|
||||
type ModelTimeInfo struct {
|
||||
CreatedAt time.Time `orm:"auto_now_add;type(datetime)"`
|
||||
UpdatedAt time.Time `orm:"auto_now;type(datetime)"`
|
||||
@@ -44,6 +50,7 @@ type GoodsOrder struct {
|
||||
BusinessType int `json:"businessType"`
|
||||
ExpectedDeliveredTime time.Time `orm:"type(datetime)" json:"expectedDeliveredTime"` // 预期送达时间
|
||||
CancelApplyReason string `orm:"size(255)" json:"-"` // ""表示没有申请,不为null表示用户正在取消申请
|
||||
DeliveryType string `orm:"size(32)" json:"deliveryType"` // 订单配送方式,缺省是平台配送
|
||||
VendorWaybillID string `orm:"column(vendor_waybill_id);size(48)" json:"vendorWaybillID"`
|
||||
WaybillVendorID int `orm:"column(waybill_vendor_id)" json:"waybillVendorID"` // 表示当前承运商,-1表示还没有安排
|
||||
DeliveryFlag int8 `json:"deliveryFlag"` // 第1位为1表示禁止调度器调度三方配送
|
||||
@@ -53,9 +60,12 @@ type GoodsOrder struct {
|
||||
StatusTime time.Time `orm:"type(datetime)" json:"statusTime"` // last status time
|
||||
PickDeadline time.Time `orm:"type(datetime)" json:"pickDeadline"`
|
||||
ModelTimeInfo `json:"-"`
|
||||
OriginalData string `orm:"-" json:"-"` // 只是用于传递数据
|
||||
Skus []*OrderSku `orm:"-" json:"-"`
|
||||
Flag int `json:"flag"` //非运单调整相关的其它状态
|
||||
Flag int `json:"flag"` //非运单调整相关的其它状态
|
||||
|
||||
// 以下只是用于传递数据
|
||||
OriginalData string `orm:"-" json:"-"`
|
||||
Skus []*OrderSku `orm:"-" json:"-"`
|
||||
VendorUserID string `orm:"-" json:"-"`
|
||||
}
|
||||
|
||||
func (o *GoodsOrder) TableUnique() [][]string {
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package model
|
||||
|
||||
import "git.rosy.net.cn/baseapi/utils"
|
||||
|
||||
const (
|
||||
UserStatusNormal = 1
|
||||
UserStatusDisabled = 2
|
||||
@@ -24,24 +26,23 @@ var (
|
||||
|
||||
type User struct {
|
||||
ModelIDCULD
|
||||
UserID string `orm:"size(48);column(user_id)" json:"userID" compact:"userID"` // 内部唯一标识
|
||||
UserID2 string `orm:"size(48);column(user_id2)" json:"userID2" compact:"userID2"` // 外部唯一标识(一般用于登录)
|
||||
Name string `orm:"size(48);index" json:"name" compact:"name"` // 外部唯一显示 标识(一般用于显示)
|
||||
Mobile string `orm:"size(32)" json:"mobile" compact:"mobile"`
|
||||
Email string `orm:"size(32);index" json:"email" compact:"email"`
|
||||
Status int8 `json:"status" compact:"status"`
|
||||
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"`
|
||||
UserID string `orm:"size(48);column(user_id)" json:"userID" compact:"userID"` // 内部唯一标识
|
||||
UserID2 string `orm:"size(48);column(user_id2)" json:"userID2" compact:"userID2"` // 外部唯一标识(一般用于登录)
|
||||
Name string `orm:"size(48);index" json:"name" compact:"name"` // 外部显示标识(当前可以重复)
|
||||
Mobile *string `orm:"size(32);null" json:"mobile" compact:"mobile"`
|
||||
Email *string `orm:"size(32);null" json:"email" compact:"email"`
|
||||
Status int8 `json:"status" compact:"status"`
|
||||
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"`
|
||||
}
|
||||
|
||||
func (*User) TableUnique() [][]string {
|
||||
return [][]string{
|
||||
[]string{"UserID"},
|
||||
[]string{"UserID2", "DeletedAt"},
|
||||
// []string{"Name", "DeletedAt"},
|
||||
[]string{"Mobile"},
|
||||
// []string{"Email", "DeletedAt"},
|
||||
[]string{"Mobile", "DeletedAt"},
|
||||
[]string{"Email", "DeletedAt"},
|
||||
// []string{"IDCardNo", "DeletedAt"},
|
||||
}
|
||||
}
|
||||
@@ -55,11 +56,11 @@ func (user *User) GetID2() string {
|
||||
}
|
||||
|
||||
func (user *User) GetMobile() string {
|
||||
return user.Mobile
|
||||
return utils.Pointer2String(user.Mobile)
|
||||
}
|
||||
|
||||
func (user *User) GetEmail() string {
|
||||
return user.Email
|
||||
return utils.Pointer2String(user.Email)
|
||||
}
|
||||
|
||||
func (user *User) GetName() string {
|
||||
|
||||
Reference in New Issue
Block a user