438 lines
13 KiB
Go
438 lines
13 KiB
Go
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"`
|
|
ParentCode int `json:"parentCode"`
|
|
}
|
|
|
|
type GetSelfInfoResult struct {
|
|
model.User
|
|
model.UserBill
|
|
WaitCashPrice int `json:"waitCashPrice"`
|
|
WaitRealCashPrice int `json:"waitRealCashPrice"`
|
|
UserMembers []*model.UserMember `json:"userMembers"`
|
|
PopedUserName string `json:"popedUserName"`
|
|
UnReadMessageCount int `json:"unReadMessageCount"`
|
|
}
|
|
|
|
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, t3.name pop_user_name
|
|
FROM user t1
|
|
JOIN user_bill t2 ON t2.user_id = t1.user_id AND t2.deleted_at = ?
|
|
LEFT JOIN user t3 ON t3.user_id = t1.pop_user
|
|
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...)
|
|
if messageGroupReads, err := GetMessageGroupRead(db, getSelfInfoResult.User.UserID, 0); err == nil {
|
|
var unReadCount int
|
|
for _, v := range messageGroupReads {
|
|
unReadCount += v.UnReadCount
|
|
}
|
|
getSelfInfoResult.UnReadMessageCount = unReadCount
|
|
}
|
|
return getSelfInfoResult, err
|
|
}
|
|
|
|
func GetUsers(db *DaoDB, userType int, keyword, popUser 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
|
|
}
|
|
sqlParams := []interface{}{}
|
|
sql := `
|
|
SELECT SQL_CALC_FOUND_ROWS
|
|
t1.*
|
|
FROM user t1
|
|
WHERE t1.status = 1 AND t1.deleted_at = ?`
|
|
sqlParams = append(sqlParams, utils.DefaultTimeValue)
|
|
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 popUser != "" {
|
|
sql += " AND t1.pop_user = ?"
|
|
sqlParams = append(sqlParams, popUser)
|
|
}
|
|
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)
|
|
txDB, _ := Begin(db)
|
|
defer Commit(db, txDB)
|
|
if err = GetRowsTx(txDB, &userList, sql, sqlParams...); err == nil {
|
|
totalCount = GetLastTotalRowCountTx(txDB)
|
|
}
|
|
return userList, totalCount, err
|
|
}
|
|
|
|
func GetUsers2(db *DaoDB, keyword string, userID string, pop int, mobile string, fromTime, toTime time.Time, timeType int, cityCodes, consumeTypes []int, offset, pageSize int) (pageInfo *model.PagedInfo, err error) {
|
|
var (
|
|
userList []*model.User
|
|
)
|
|
offset = jxutils.FormalizePageOffset(offset)
|
|
pageSize = jxutils.FormalizePageSize(pageSize)
|
|
sqlParams := []interface{}{}
|
|
sql := `
|
|
SELECT SQL_CALC_FOUND_ROWS DISTINCT
|
|
a.*
|
|
FROM user a`
|
|
for _, v := range consumeTypes {
|
|
switch v {
|
|
case model.ConsumeTypePublishJob:
|
|
sql += " JOIN job b ON b.user_id = a.user_id"
|
|
if fromTime != utils.ZeroTimeValue {
|
|
if timeType == 2 {
|
|
sql += " AND b.created_at > ?"
|
|
sqlParams = append(sqlParams, fromTime)
|
|
}
|
|
}
|
|
if toTime != utils.ZeroTimeValue {
|
|
if timeType == 2 {
|
|
sql += " AND b.created_at < ?"
|
|
sqlParams = append(sqlParams, toTime)
|
|
}
|
|
}
|
|
case model.ConsumeTypeMember:
|
|
sql += " JOIN user_member c ON c.user_id = a.user_id"
|
|
if fromTime != utils.ZeroTimeValue {
|
|
if timeType == 2 {
|
|
sql += " AND c.created_at > ?"
|
|
sqlParams = append(sqlParams, fromTime)
|
|
}
|
|
}
|
|
if toTime != utils.ZeroTimeValue {
|
|
if timeType == 2 {
|
|
sql += " AND c.created_at < ?"
|
|
sqlParams = append(sqlParams, toTime)
|
|
}
|
|
}
|
|
case model.ConsumeTypeDelivery:
|
|
sql += " JOIN delivery_order d ON d.user_id = a.user_id"
|
|
if fromTime != utils.ZeroTimeValue {
|
|
if timeType == 2 {
|
|
sql += " AND d.created_at > ?"
|
|
sqlParams = append(sqlParams, fromTime)
|
|
}
|
|
}
|
|
if toTime != utils.ZeroTimeValue {
|
|
if timeType == 2 {
|
|
sql += " AND d.created_at < ?"
|
|
sqlParams = append(sqlParams, toTime)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
sql += `
|
|
WHERE a.status = 1 AND a.deleted_at = ?`
|
|
sqlParams = append(sqlParams, utils.DefaultTimeValue)
|
|
if userID != "" {
|
|
if pop == 1 {
|
|
sql += " AND a.pop_user = ?"
|
|
sqlParams = append(sqlParams, userID)
|
|
} else {
|
|
sql += " AND a.user_id = ?"
|
|
sqlParams = append(sqlParams, userID)
|
|
}
|
|
}
|
|
if len(cityCodes) > 0 {
|
|
sql += " AND a.city_code IN (" + GenQuestionMarks(len(cityCodes)) + ")"
|
|
sqlParams = append(sqlParams, cityCodes)
|
|
}
|
|
if mobile != "" {
|
|
sql += " AND a.mobile = ?"
|
|
sqlParams = append(sqlParams, mobile)
|
|
}
|
|
if keyword != "" {
|
|
keywordLike := "%" + keyword + "%"
|
|
sql += " AND (a.user_id LIKE ? OR a.mobile LIKE ? OR a.email LIKE ? OR a.name LIKE ?)"
|
|
sqlParams = append(sqlParams, keywordLike, keywordLike, keywordLike, keywordLike)
|
|
}
|
|
if fromTime != utils.ZeroTimeValue {
|
|
if timeType == 1 {
|
|
sql += " AND a.created_at > ?"
|
|
sqlParams = append(sqlParams, fromTime)
|
|
}
|
|
}
|
|
if toTime != utils.ZeroTimeValue {
|
|
if timeType == 1 {
|
|
sql += " AND a.created_at < ?"
|
|
sqlParams = append(sqlParams, toTime)
|
|
}
|
|
}
|
|
sql += " LIMIT ? OFFSET ?"
|
|
sqlParams = append(sqlParams, pageSize, offset)
|
|
txDB, _ := Begin(db)
|
|
defer Commit(db, txDB)
|
|
if err = GetRowsTx(txDB, &userList, sql, sqlParams...); err == nil {
|
|
pageInfo = &model.PagedInfo{
|
|
TotalCount: GetLastTotalRowCountTx(txDB),
|
|
Data: userList,
|
|
}
|
|
}
|
|
return pageInfo, err
|
|
}
|
|
|
|
func GetUser(db *DaoDB, userID string) (user *model.GetUserResult, err error) {
|
|
sqlParams := []interface{}{}
|
|
sql := `
|
|
SELECT
|
|
t1.*, IF(t2.accept_order_count is NULL, 0, t2.accept_order_count) accept_order_count, IF(t3.finished_order_count is NULL, 0, t3.finished_order_count) finished_order_count
|
|
FROM user t1
|
|
LEFT JOIN (SELECT user_id, COUNT(user_id) accept_order_count FROM job_order WHERE user_id = ? GROUP BY 1)t2 ON t2.user_id = t1.user_id
|
|
LEFT JOIN (SELECT user_id, COUNT(user_id) finished_order_count FROM job_order WHERE user_id = ? AND status = ? GROUP BY 1)t3 ON t3.user_id = t1.user_id
|
|
WHERE t1.status = ? AND t1.deleted_at = ? AND t1.user_id = ? `
|
|
sqlParams = append(sqlParams, userID, userID, model.JobOrderStatusFinish, model.YES, utils.DefaultTimeValue, userID)
|
|
err = GetRow(db, &user, sql, sqlParams...)
|
|
return user, 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, addType int, 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,
|
|
cp.code parent_code
|
|
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
|
|
LEFT JOIN place cp ON cp.code = city.parent_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)
|
|
}
|
|
if addType != 0 {
|
|
sql += " AND t1.type = ? "
|
|
sqlParams = append(sqlParams, addType)
|
|
}
|
|
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)
|
|
|
|
txDB, _ := Begin(db)
|
|
defer Commit(db, txDB)
|
|
if err = GetRowsTx(txDB, &addressList, sql, sqlParams...); err == nil {
|
|
totalCount = GetLastTotalRowCountTx(txDB)
|
|
}
|
|
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
|
|
}
|
|
|
|
type GetUserAllWaitCashPriceResult struct {
|
|
UserID string `orm:"column(user_id)" json:"userID"`
|
|
Price int `json:"price"`
|
|
}
|
|
|
|
func GetUserAllWaitCashPrice(db *DaoDB, userID string) (price int, err error) {
|
|
var result = &GetUserAllWaitCashPriceResult{}
|
|
sql := `
|
|
SELECT SUM(IF(d.id IS NOT NULL, IF(d.divide_percentage = 0, b.avg_price, b.avg_price*(100-d.divide_percentage)/100),b.avg_price)) price, a.user_id
|
|
FROM job_order a
|
|
JOIN job b ON a.job_id = b.id
|
|
LEFT JOIN message_group_member c ON a.user_id = c.member_user_id
|
|
LEFT JOIN message_group d ON d.group_id = c.group_id AND d.type = ?
|
|
WHERE a.user_id = ?
|
|
AND a.status = ?
|
|
`
|
|
sqlParams := []interface{}{
|
|
model.GroupTypeMulit,
|
|
userID,
|
|
model.JobOrderStatusWaitAudit,
|
|
}
|
|
err = GetRow(db, &result, sql, sqlParams)
|
|
return result.Price, err
|
|
}
|
|
|
|
func GetUserAllWaitRealCashPrice(db *DaoDB, userID string) (price int, err error) {
|
|
var result = &GetUserAllWaitCashPriceResult{}
|
|
sql := `
|
|
SELECT SUM(pay_price) price FROM ` + "`order`" + ` WHERE user_id = ? AND status = ? AND type = ?
|
|
`
|
|
sqlParams := []interface{}{
|
|
userID,
|
|
model.OrderStatusWait4Pay,
|
|
model.OrderTypeCash,
|
|
}
|
|
err = GetRow(db, &result, sql, sqlParams)
|
|
return result.Price, err
|
|
}
|
|
func GetUserUnionBind(db *DaoDB, userID string, vendorID int, unionID string) (userBinds []*model.UserUnionBind, err error) {
|
|
sql := `
|
|
SELECT * FROM user_union_bind WHERE deleted_at = ?
|
|
`
|
|
sqlParams := []interface{}{
|
|
utils.DefaultTimeValue,
|
|
}
|
|
if userID != "" {
|
|
sql += " AND user_id = ?"
|
|
sqlParams = append(sqlParams, userID)
|
|
}
|
|
if vendorID != -1 {
|
|
sql += " AND vendor_id = ?"
|
|
sqlParams = append(sqlParams, vendorID)
|
|
}
|
|
if unionID != "" {
|
|
sql += " AND union_id = ?"
|
|
sqlParams = append(sqlParams, unionID)
|
|
}
|
|
err = GetRows(db, &userBinds, sql, sqlParams)
|
|
return userBinds, err
|
|
}
|
|
|
|
func GetUserUnionBindImg(db *DaoDB, unionID, actID string) (userBinds *model.UserUnionBindImg, err error) {
|
|
sql := `
|
|
SELECT * FROM user_union_bind_img WHERE deleted_at = ?
|
|
`
|
|
sqlParams := []interface{}{
|
|
utils.DefaultTimeValue,
|
|
}
|
|
if unionID != "" {
|
|
sql += " AND union_id = ?"
|
|
sqlParams = append(sqlParams, unionID)
|
|
}
|
|
if actID != "" {
|
|
sql += " AND act_id = ?"
|
|
sqlParams = append(sqlParams, actID)
|
|
}
|
|
err = GetRow(db, &userBinds, sql, sqlParams)
|
|
return userBinds, err
|
|
}
|