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 }