Files
jx-callback/business/model/dao/dao_user2.go
2019-09-24 16:39:50 +08:00

151 lines
4.1 KiB
Go

package dao
import (
"fmt"
"time"
"git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/jx-callback/business/model"
)
type StoreWithCityName struct {
model.Store
CityName string `json:"cityName"`
}
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 = FormalizePageOffset(offset)
pageSize = 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_id2 LIKE ? OR t1.mobile LIKE ? OR t1.email LIKE ? OR t1.name LIKE ?)"
sqlParams = append(sqlParams, keywordLike, keywordLike, keywordLike, keywordLike)
}
sql += " LIMIT ? OFFSET ?"
sqlParams = append(sqlParams, pageSize, offset)
Begin(db)
defer Rollback(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 = ?)
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,
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 = ?"
sqlParams = append(sqlParams, 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
}