Files
jx-callback/business/model/dao/dao_order.go
苏尹岚 18b17e846b aa
2021-01-04 15:06:50 +08:00

341 lines
11 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"
)
func GetDeliveryOrdersNoPage(db *DaoDB, userIDs []string, statuss []int, fromTime, toTime time.Time, isWeights []int) (dOrders []*model.DeliveryOrder, err error) {
sql := `
SELECT a.*
FROM delivery_order a
WHERE 1 = 1
`
sqlParams := []interface{}{}
if len(userIDs) > 0 {
sql += ` AND a.user_id IN (` + GenQuestionMarks(len(userIDs)) + `)`
sqlParams = append(sqlParams, userIDs)
}
if len(statuss) > 0 {
sql += ` AND a.status IN (` + GenQuestionMarks(len(statuss)) + `)`
sqlParams = append(sqlParams, statuss)
}
if len(isWeights) > 0 {
sql += ` AND a.is_weight IN (` + GenQuestionMarks(len(isWeights)) + `)`
sqlParams = append(sqlParams, isWeights)
}
if fromTime != utils.ZeroTimeValue {
sql += ` AND a.created_at >= ?`
sqlParams = append(sqlParams, fromTime)
}
if toTime != utils.ZeroTimeValue {
sql += ` AND a.created_at <= ?`
sqlParams = append(sqlParams, toTime)
}
err = GetRows(db, &dOrders, sql, sqlParams)
return dOrders, err
}
type GetDeliveryOrdersResult struct {
model.DeliveryOrder
DeliverySendInfo *UserDeliveryAddressEx `json:"deliverySendInfo"`
DeliveryReceiveInfo *UserDeliveryAddressEx `json:"deliveryReceiveInfo"`
}
func GetDeliveryOrders(db *DaoDB, userIDs []string, statuss []int, fromTime, toTime time.Time, pageSize, offset int) (pagedInfo *model.PagedInfo, err error) {
var dOrders []*GetDeliveryOrdersResult
sql := `
SELECT SQL_CALC_FOUND_ROWS a.*
FROM delivery_order a
WHERE 1 = 1
`
sqlParams := []interface{}{}
if len(userIDs) > 0 {
sql += ` AND a.user_id IN (` + GenQuestionMarks(len(userIDs)) + `)`
sqlParams = append(sqlParams, userIDs)
}
if len(statuss) > 0 {
sql += ` AND a.status IN (` + GenQuestionMarks(len(statuss)) + `)`
sqlParams = append(sqlParams, statuss)
}
if fromTime != utils.ZeroTimeValue {
sql += ` AND a.created_at >= ?`
sqlParams = append(sqlParams, fromTime)
}
if toTime != utils.ZeroTimeValue {
sql += ` AND a.created_at <= ?`
sqlParams = append(sqlParams, toTime)
}
sql += " ORDER BY a.created_at DESC"
sql += " LIMIT ? OFFSET ?"
pageSize = jxutils.FormalizePageSize(pageSize)
sqlParams = append(sqlParams, pageSize, offset)
Begin(db)
defer Commit(db)
if err = GetRows(db, &dOrders, sql, sqlParams...); err == nil {
pagedInfo = &model.PagedInfo{
TotalCount: GetLastTotalRowCount(db),
// Data: dOrders,
}
for _, v := range dOrders {
if addressList1, _, err := QueryUserDeliveryAddress(db, int64(v.DeliverySendID), nil, 0, 0, 0); err == nil && len(addressList1) > 0 {
v.DeliverySendInfo = addressList1[0]
} else {
sendInfo := &UserDeliveryAddressEx{}
sendInfo.ConsigneeName = v.SendName
sendInfo.ConsigneeMobile = v.SendMobile
sendInfo.Address = v.SendAddress
sendInfo.AutoAddress = v.SendAutoAddress
sendInfo.CityCode = v.SendCityCode
sendInfo.DistrictCode = v.SendDistrictCode
sendInfo.DetailAddress = v.SendDetailAddress
sendInfo.Lng = v.SendLng
sendInfo.Lat = v.SendLat
v.DeliverySendInfo = sendInfo
}
if addressList2, _, err := QueryUserDeliveryAddress(db, int64(v.DeliveryReceiveID), nil, 0, 0, 0); err == nil && len(addressList2) > 0 {
v.DeliveryReceiveInfo = addressList2[0]
} else {
receiveInfo := &UserDeliveryAddressEx{}
receiveInfo.ConsigneeName = v.ReceiveName
receiveInfo.ConsigneeMobile = v.ReceiveMobile
receiveInfo.Address = v.ReceiveAddress
receiveInfo.AutoAddress = v.ReceiveAutoAddress
receiveInfo.CityCode = v.ReceiveCityCode
receiveInfo.DistrictCode = v.ReceiveDistrictCode
receiveInfo.DetailAddress = v.ReceiveDetailAddress
receiveInfo.Lng = v.ReceiveLng
receiveInfo.Lat = v.ReceiveLat
v.DeliveryReceiveInfo = receiveInfo
}
}
pagedInfo.Data = dOrders
}
return pagedInfo, err
}
type GetOrdersResult struct {
model.Order
UserName string `json:"userName"`
Mobile string `json:"mobile"`
}
func GetOrders(db *DaoDB, orderID, userID string, orderType int, cityCodes []int, fromTime, toTime time.Time, keyword string, offset, pageSize int) (pagedInfo *model.PagedInfo, err error) {
var orders []*GetOrdersResult
sql := `
SELECT SQL_CALC_FOUND_ROWS a.*, b.name user_name, b.mobile
FROM ` + "`order`" + ` a
JOIN user b ON b.user_id = a.user_id AND b.deleted_at = ?
WHERE 1 = 1
`
sqlParams := []interface{}{
utils.DefaultTimeValue,
}
if orderID != "" {
sql += ` AND a.order_id = ?`
sqlParams = append(sqlParams, orderID)
}
if userID != "" {
sql += ` AND a.user_id = ?`
sqlParams = append(sqlParams, userID)
}
if orderType != 0 {
sql += ` AND a.type = ?`
sqlParams = append(sqlParams, orderType)
}
if len(cityCodes) > 0 {
sql += ` AND a.city_code IN ` + GenQuestionMarks(len(cityCodes)) + `)`
sqlParams = append(sqlParams, cityCodes)
}
if fromTime != utils.ZeroTimeValue {
sql += ` AND a.created_at >= ?`
sqlParams = append(sqlParams, fromTime)
}
if toTime != utils.ZeroTimeValue {
sql += ` AND a.created_at <= ?`
sqlParams = append(sqlParams, toTime)
}
if keyword != "" {
sql += ` AND (b.mobile LIKE ? OR b.name LIKE ?)`
sqlParams = append(sqlParams, "%"+keyword+"%", "%"+keyword+"%")
}
sql += " LIMIT ? OFFSET ?"
pageSize = jxutils.FormalizePageSize(pageSize)
sqlParams = append(sqlParams, pageSize, offset)
Begin(db)
defer Commit(db)
if err = GetRows(db, &orders, sql, sqlParams); err == nil {
pagedInfo = &model.PagedInfo{
TotalCount: GetLastTotalRowCount(db),
Data: orders,
}
}
return pagedInfo, err
}
type GetPayStatisticsResult struct {
TotalPay int `json:"totalPay"` //支付总额
CanCash int `json:"canCash"` //可提现(未提现+申请提现)
AccountBalance int `json:"accountBalance"` //未提现(含保证金)
SubmitCash int `json:"submitCash"` //申请提现
Cashed int `json:"cashed"` //已经体现
CashIncome int `json:"cashIncome"` //提现收益
TotalIncome int `json:"totalIncome"` //收益总额
MemberIncome int `json:"memberIncome"` //会员收益
}
func getWhereSql(sqlP []interface{}, fromTime, toTime time.Time, orderTypes []int) (sql string) {
if len(orderTypes) > 0 {
sql += ` AND b.order_type IN ` + GenQuestionMarks(len(orderTypes)) + `)`
sqlP = append(sqlP, orderTypes)
}
if fromTime != utils.ZeroTimeValue {
sql += ` AND b.created_at > ?`
sqlP = append(sqlP, fromTime)
}
if toTime != utils.ZeroTimeValue {
sql += ` AND b.created_at < ?`
sqlP = append(sqlP, toTime)
}
return sql
}
func getFromSql(sqlP []interface{}, orderType, status int, alies string, userID string, pop int, cityCodes []int, mobile string, fromTime, toTime time.Time, orderTypes []int) (sql string) {
sql += `
(SELECT SUM(IFNULL(b.pay_price,0)) total_pay
FROM user a
JOIN ` + "`order` b " + `ON b.user_id = a.user_id AND b.type = ? AND b.status = ? ` + getWhereSql(sqlP, fromTime, toTime, orderTypes) + `
`
sqlP = append(sqlP, orderType, status)
if mobile != "" {
if pop == 1 {
sql += " JOIN user e ON e.moblie = ? AND a.pop_user = e.user_id"
sqlP = append(sqlP, mobile)
}
}
sql += `
WHERE 1 = 1
`
if userID != "" {
if pop == 1 {
sql += " AND a.pop_user = ?"
sqlP = append(sqlP, userID)
} else {
sql += " AND a.user_id = ?"
sqlP = append(sqlP, userID)
}
}
if mobile != "" {
if pop == 0 {
sql += " AND a.mobile = ?"
sqlP = append(sqlP, mobile)
}
}
if len(cityCodes) > 0 {
sql += ` AND a.city_code IN ` + GenQuestionMarks(len(cityCodes)) + `)`
sqlP = append(sqlP, cityCodes)
}
sql += `) ` + alies
return sql
}
func GetPayStatistics(db *DaoDB, userID string, pop int, cityCodes []int, mobile string, fromTime, toTime time.Time, orderTypes []int) (getPayStatisticsResult *GetPayStatisticsResult, err error) {
var sqlParams []interface{}
sql := `SELECT t1.total_pay, t2.total_pay submit_cash, t3.total_pay cashed, t4.account_balance, t4.account_balance + t2.total_pay can_cash, t3.total_pay / 10 cash_income
FROM `
sql += getFromSql(sqlParams, model.OrderTypePay, model.OrderStatusFinished, "t1", userID, pop, cityCodes, mobile, fromTime, toTime, orderTypes) + ","
sql += getFromSql(sqlParams, model.OrderTypeCash, model.OrderStatusWait4Pay, "t2", userID, pop, cityCodes, mobile, fromTime, toTime, orderTypes) + ","
sql += getFromSql(sqlParams, model.OrderTypeCash, model.OrderStatusFinished, "t3", userID, pop, cityCodes, mobile, fromTime, toTime, orderTypes) + ","
sql += `(SELECT SUM(IFNULL(b.account_balance,0)) account_balacne
FROM user a
JOIN user_bill b ON a.user_id = b.user_id
`
if mobile != "" {
if pop == 1 {
sql += " JOIN user e ON e.moblie = ? AND a.pop_user = e.user_id"
sqlParams = append(sqlParams, mobile)
}
}
sql += `
WHERE 1 = 1
`
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 mobile != "" {
if pop == 0 {
sql += " AND a.mobile = ?"
sqlParams = append(sqlParams, mobile)
}
}
if len(cityCodes) > 0 {
sql += ` AND a.city_code IN ` + GenQuestionMarks(len(cityCodes)) + `)`
sqlParams = append(sqlParams, cityCodes)
}
sql += `
) t4`
fmt.Println(sql)
fmt.Println(sqlParams)
err = GetRow(db, &getPayStatisticsResult, sql, sqlParams)
fmt.Println(utils.Format4Output(getPayStatisticsResult, false))
sqlParams2 := []interface{}{}
getPayStatisticsResult1 := &GetPayStatisticsResult{}
sql2 := `
SELECT SUM(IFNULL(d.expend_price,0)) member_income
FROM user a`
if mobile != "" {
if pop == 1 {
sql2 += " JOIN user e ON e.moblie = ? AND a.pop_user = e.user_id"
sqlParams2 = append(sqlParams2, mobile)
} else {
sql2 += " AND a.mobile = ?"
sqlParams2 = append(sqlParams2, mobile)
}
}
sql2 += `
LEFT JOIN user_bill c ON c.user_id = a.user_id
LEFT JOIN bill_expend d ON d.bill_id = c.bill_id AND d.type = ?
`
if fromTime != utils.ZeroTimeValue {
sql2 += ` AND d.created_at > ?`
sqlParams2 = append(sqlParams2, fromTime)
}
if toTime != utils.ZeroTimeValue {
sql2 += ` AND d.created_at < ?`
sqlParams2 = append(sqlParams2, toTime)
}
sql2 += `
WHERE a.status = ? AND a.deleted_at = ?
`
sqlParams2 = append(sqlParams2, model.BillTypeMember, model.UserStatusNormal, utils.DefaultTimeValue)
if len(cityCodes) > 0 {
sql2 += ` AND a.city_code IN ` + GenQuestionMarks(len(cityCodes)) + `)`
sqlParams2 = append(sqlParams2, cityCodes)
}
if userID != "" {
if pop == 1 {
sql2 += " AND a.pop_user = ?"
sqlParams2 = append(sqlParams2, userID)
} else {
sql2 += " AND a.user_id = ?"
sqlParams2 = append(sqlParams2, userID)
}
}
err = GetRow(db, &getPayStatisticsResult1, sql2, sqlParams2)
getPayStatisticsResult.MemberIncome = getPayStatisticsResult1.MemberIncome
getPayStatisticsResult.TotalIncome = getPayStatisticsResult.MemberIncome + getPayStatisticsResult.CashIncome
return getPayStatisticsResult, err
}