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 UserDeliveryAddressEx struct { model.UserDeliveryAddress UserName string `json:"userName"` CityName string `json:"cityName"` DistrictName string `json:"districtName"` } type GetSelfInfoResult struct { model.User model.UserBill UserMembers []*model.UserMember `json:"userMembers"` } 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 GetUserByIDWithMembers(db *DaoDB, fieldName, fieldValue string) (getSelfInfoResult *GetSelfInfoResult, err error) { sql := fmt.Sprintf(` SELECT t1.*, t2.bill_id, t2.account_balance, t2.deposit_balance FROM user t1 JOIN user_bill t2 ON t2.user_id = t1.user_id AND t2.deleted_at = ? WHERE t1.deleted_at = ? AND t1.status = ? AND t1.%s = ? `, fieldName) sqlParams := []interface{}{ utils.DefaultTimeValue, utils.DefaultTimeValue, model.UserStatusNormal, fieldValue, } // globals.SugarLogger.Debugf("GetUserByID sql:%s, sqlParams:%s", sql, utils.Format4Output(sqlParams, false)) err = GetRow(db, &getSelfInfoResult, sql, sqlParams...) return getSelfInfoResult, 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 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 } func GetUserOrderSMS(db *DaoDB, mobile, name string) (userOrderSms *model.UserOrderSms, err error) { sql := ` SELECT * FROM user_order_sms WHERE 1=1 ` sqlParams := []interface{}{} if mobile != "" { sql += " AND mobile = ?" sqlParams = append(sqlParams, mobile) } if name != "" { sql += " AND name like ?" sqlParams = append(sqlParams, "%"+name+"%") } err = GetRow(db, &userOrderSms, sql, sqlParams) return userOrderSms, err } func GetUserMember(db *DaoDB, userID string, memberType int) (userMembers []*model.UserMember, err error) { sql := ` SELECT a.* FROM user_member a WHERE a.deleted_at = ? ` sqlParams := []interface{}{utils.DefaultTimeValue} if userID != "" { sql += " AND a.user_id = ?" sqlParams = append(sqlParams, userID) } if memberType != 0 { sql += " AND a.member_type = ?" sqlParams = append(sqlParams, memberType) } err = GetRows(db, &userMembers, sql, sqlParams) return userMembers, err }