211 lines
5.7 KiB
Go
211 lines
5.7 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"`
|
|
}
|
|
|
|
type UserDeliveryAddressEx struct {
|
|
model.UserDeliveryAddress
|
|
|
|
UserName string
|
|
CityName string
|
|
DistrictName string
|
|
}
|
|
|
|
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 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, 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 len(userIDs) > 0 {
|
|
sql += " AND t1.user_id IN (" + GenQuestionMarks(len(userIDs)) + ")"
|
|
sqlParams = append(sqlParams, userIDs)
|
|
}
|
|
offset = FormalizePageOffset(offset)
|
|
pageSize = FormalizePageSize(pageSize)
|
|
sql += " 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
|
|
}
|