655 lines
22 KiB
Go
655 lines
22 KiB
Go
package dao
|
|
|
|
import (
|
|
"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)
|
|
txDB, _ := Begin(db)
|
|
defer Commit(db, txDB)
|
|
if err = GetRowsTx(txDB, &dOrders, sql, sqlParams...); err == nil {
|
|
pagedInfo = &model.PagedInfo{
|
|
TotalCount: GetLastTotalRowCountTx(txDB),
|
|
// 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)
|
|
txDB, _ := Begin(db)
|
|
defer Commit(db, txDB)
|
|
if err = GetRowsTx(txDB, &orders, sql, sqlParams); err == nil {
|
|
pagedInfo = &model.PagedInfo{
|
|
TotalCount: GetLastTotalRowCountTx(txDB),
|
|
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 getFromSql(orderType, status int, alies string, userID string, pop int, cityCodes []int, mobile string, fromTime, toTime time.Time, orderTypes []int) (sql string, sqlParams []interface{}) {
|
|
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 = ?
|
|
`
|
|
sqlParams = append(sqlParams, orderType, status)
|
|
if len(orderTypes) > 0 {
|
|
sql += ` AND b.order_type IN (` + GenQuestionMarks(len(orderTypes)) + `)`
|
|
sqlParams = append(sqlParams, orderTypes)
|
|
}
|
|
if fromTime != utils.ZeroTimeValue {
|
|
sql += ` AND b.created_at > ?`
|
|
sqlParams = append(sqlParams, fromTime)
|
|
}
|
|
if toTime != utils.ZeroTimeValue {
|
|
sql += ` AND b.created_at < ?`
|
|
sqlParams = append(sqlParams, toTime)
|
|
}
|
|
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 a.status = ? AND a.deleted_at = ?
|
|
`
|
|
sqlParams = append(sqlParams, model.UserStatusNormal, 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 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 += `) ` + alies
|
|
return sql, sqlParams
|
|
}
|
|
|
|
func GetPayStatistics(db *DaoDB, userID string, pop int, cityCodes []int, mobile string, fromTime, toTime time.Time, orderTypes []int) (getPayStatisticsResult *GetPayStatisticsResult, err error) {
|
|
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
|
|
FROM `
|
|
rSQL1, rSQLParams1 := getFromSql(model.OrderTypePay, model.OrderStatusFinished, "t1", userID, pop, cityCodes, mobile, fromTime, toTime, orderTypes)
|
|
sql += rSQL1 + ","
|
|
sqlParams = append(sqlParams, rSQLParams1...)
|
|
rSQL2, rSQLParams2 := getFromSql(model.OrderTypeCash, model.OrderStatusWait4Pay, "t2", userID, pop, cityCodes, mobile, fromTime, toTime, orderTypes)
|
|
sql += rSQL2 + ","
|
|
sqlParams = append(sqlParams, rSQLParams2...)
|
|
rSQL3, rSQLParams3 := getFromSql(model.OrderTypeCash, model.OrderStatusFinished, "t3", userID, pop, cityCodes, mobile, fromTime, toTime, orderTypes)
|
|
sql += rSQL3 + ","
|
|
sqlParams = append(sqlParams, rSQLParams3...)
|
|
sql += `(SELECT SUM(IFNULL(b.account_balance,0)) account_balance
|
|
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`
|
|
err = GetRow(db, &getPayStatisticsResult, sql, sqlParams)
|
|
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)
|
|
}
|
|
}
|
|
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 = ?
|
|
`
|
|
sqlParams2 = append(sqlParams2, model.BillTypeMember)
|
|
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.UserStatusNormal, utils.DefaultTimeValue)
|
|
if len(cityCodes) > 0 {
|
|
sql2 += ` AND a.city_code IN (` + GenQuestionMarks(len(cityCodes)) + `)`
|
|
sqlParams2 = append(sqlParams2, cityCodes)
|
|
}
|
|
if mobile != "" {
|
|
if pop == 0 {
|
|
sql2 += " AND a.mobile = ?"
|
|
sqlParams2 = append(sqlParams2, mobile)
|
|
}
|
|
}
|
|
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.CashIncome = getPayStatisticsResult.Cashed / 10
|
|
getPayStatisticsResult.TotalIncome = getPayStatisticsResult.MemberIncome + getPayStatisticsResult.CashIncome
|
|
return getPayStatisticsResult, err
|
|
}
|
|
|
|
type GetManageStatisticsResult struct {
|
|
Date time.Time `json:"date"` //日期
|
|
BrowseCount int `json:"browseCount"` //点击次数
|
|
AcceptCount int `json:"acceptCount"` //接受任务数
|
|
FinishCount int `json:"finishCount"` //完成任务数
|
|
CancelCount int `json:"cancelCount"` //取消任务数
|
|
TotalCash int `json:"totalCash"` //返现总额
|
|
InversionRate float64 `json:"inversionRate"` //转化率
|
|
}
|
|
|
|
func getFromSqlManage(status int, alies string, cityCodes []int, jobTime, endTime time.Time, jobIDs []int) (sql string, sqlParams []interface{}) {
|
|
sql += `
|
|
(SELECT COUNT(b.id) count
|
|
FROM job a
|
|
JOIN job_order b ON a.id = b.job_id
|
|
WHERE a.deleted_at = ?
|
|
`
|
|
sqlParams = append(sqlParams, utils.DefaultTimeValue)
|
|
if status != 0 {
|
|
sql += " AND b.status = ?"
|
|
sqlParams = append(sqlParams, status)
|
|
}
|
|
if jobTime != utils.ZeroTimeValue {
|
|
sql += " AND a.created_at > ?"
|
|
sqlParams = append(sqlParams, jobTime)
|
|
}
|
|
if endTime != utils.ZeroTimeValue {
|
|
sql += " AND a.created_at < ?"
|
|
sqlParams = append(sqlParams, endTime)
|
|
}
|
|
if len(cityCodes) > 0 {
|
|
sql += ` AND a.job_city_code IN (` + GenQuestionMarks(len(cityCodes)) + `)`
|
|
sqlParams = append(sqlParams, cityCodes)
|
|
}
|
|
if len(jobIDs) > 0 {
|
|
sql += ` AND a.id IN (` + GenQuestionMarks(len(jobIDs)) + `)`
|
|
sqlParams = append(sqlParams, jobIDs)
|
|
}
|
|
sql += ") " + alies
|
|
return sql, sqlParams
|
|
}
|
|
|
|
func getWhereSqlManage(cityCodes []int, jobTime, endTime time.Time, jobIDs []int) (sql string, sqlParams []interface{}) {
|
|
if jobTime != utils.ZeroTimeValue {
|
|
sql += " AND a.created_at > ?"
|
|
sqlParams = append(sqlParams, jobTime)
|
|
}
|
|
if endTime != utils.ZeroTimeValue {
|
|
sql += " AND a.created_at < ?"
|
|
sqlParams = append(sqlParams, endTime)
|
|
}
|
|
if len(cityCodes) > 0 {
|
|
sql += ` AND a.job_city_code IN (` + GenQuestionMarks(len(cityCodes)) + `)`
|
|
sqlParams = append(sqlParams, cityCodes)
|
|
}
|
|
if len(jobIDs) > 0 {
|
|
sql += ` AND a.id IN (` + GenQuestionMarks(len(jobIDs)) + `)`
|
|
sqlParams = append(sqlParams, jobIDs)
|
|
}
|
|
return sql, sqlParams
|
|
}
|
|
|
|
func GetManageStatistics(db *DaoDB, cityCodes []int, jobTime time.Time, jobIDs []int) (getManageStatisticsResult *GetManageStatisticsResult, err error) {
|
|
endTime := jobTime.AddDate(0, 0, 1)
|
|
sqlParams := []interface{}{}
|
|
sql := `
|
|
SELECT t1.count accept_count, t2.count finish_count, t3.count cancel_count, t4.browse_count, t6.total_cash
|
|
FROM
|
|
`
|
|
rSQL1, rSQLparams1 := getFromSqlManage(model.JobOrderStatusAccept, "t1", cityCodes, jobTime, endTime, jobIDs)
|
|
sql += rSQL1 + ","
|
|
sqlParams = append(sqlParams, rSQLparams1...)
|
|
rSQL2, rSQLparams2 := getFromSqlManage(model.JobOrderStatusFinish, "t2", cityCodes, jobTime, endTime, jobIDs)
|
|
sql += rSQL2 + ","
|
|
sqlParams = append(sqlParams, rSQLparams2...)
|
|
rSQL3, rSQLparams3 := getFromSqlManage(model.JobOrderStatusCancel, "t3", cityCodes, jobTime, endTime, jobIDs)
|
|
sql += rSQL3 + ","
|
|
sqlParams = append(sqlParams, rSQLparams3...)
|
|
sql += `
|
|
(SELECT SUM(a.browse_count) browse_count
|
|
FROM job a
|
|
JOIN job_order b ON a.id = b.job_id
|
|
WHERE a.deleted_at = ?
|
|
`
|
|
sqlParams = append(sqlParams, utils.DefaultTimeValue)
|
|
rSQL4, rSQLparams4 := getWhereSqlManage(cityCodes, jobTime, endTime, jobIDs)
|
|
sql += rSQL4
|
|
sqlParams = append(sqlParams, rSQLparams4...)
|
|
sql += `
|
|
) t4,
|
|
`
|
|
sql += `
|
|
(SELECT t5.count * a.avg_price total_cash FROM job a,
|
|
(SELECT COUNT(b.id) count, a.id
|
|
FROM job a
|
|
JOIN job_order b ON a.id = b.job_id
|
|
WHERE a.deleted_at = ? AND b.status = ?
|
|
`
|
|
sqlParams = append(sqlParams, utils.DefaultTimeValue, model.JobOrderStatusFinish)
|
|
rSQL5, rSQLparams5 := getWhereSqlManage(cityCodes, jobTime, endTime, jobIDs)
|
|
sql += rSQL5
|
|
sqlParams = append(sqlParams, rSQLparams5...)
|
|
sql += `
|
|
GROUP BY 2) t5
|
|
WHERE a.id = t5.id
|
|
)t6
|
|
`
|
|
GetRow(db, &getManageStatisticsResult, sql, sqlParams)
|
|
if getManageStatisticsResult == nil {
|
|
return &GetManageStatisticsResult{
|
|
Date: jobTime,
|
|
}, err
|
|
} else {
|
|
getManageStatisticsResult.Date = jobTime
|
|
if getManageStatisticsResult.BrowseCount == 0 {
|
|
getManageStatisticsResult.InversionRate = 0
|
|
} else {
|
|
getManageStatisticsResult.InversionRate = float64(getManageStatisticsResult.FinishCount) / float64(getManageStatisticsResult.BrowseCount)
|
|
}
|
|
return getManageStatisticsResult, err
|
|
}
|
|
}
|
|
|
|
type GetManageStatisticsJobResult struct {
|
|
BrowseCount int `json:"browseCount"` //点击次数
|
|
AcceptCount int `json:"acceptCount"` //接受任务数
|
|
FinishCount int `json:"finishCount"` //完成任务数
|
|
CancelCount int `json:"cancelCount"` //取消任务数
|
|
TotalCash int `json:"totalCash"` //返现总额
|
|
InversionRate float64 `json:"inversionRate"` //转化率
|
|
Title string `json:"title"` //任务标题
|
|
}
|
|
|
|
func GetManageStatisticsJob(db *DaoDB, cityCodes []int, fromTime, toTime time.Time, jobIDs []int, offset, pageSize int) (pageInfo *model.PagedInfo, err error) {
|
|
var (
|
|
sqlParams = []interface{}{}
|
|
getManageStatisticsJobResult []*GetManageStatisticsJobResult
|
|
)
|
|
sql := `
|
|
SELECT t1.count acceptCount, t2.count finish_count, t3.count cancel_count, a.browse_count, a.title, a.browse_count / t2.count inversion_rate, t4.total_cash
|
|
FROM job a
|
|
LEFT JOIN (SELECT job_id, COUNT(*) count FROM job_order WHERE status = ? GROUP BY 1) t1 ON t1.job_id = a.id
|
|
LEFT JOIN (SELECT job_id, COUNT(*) count FROM job_order WHERE status = ? GROUP BY 1) t2 ON t2.job_id = a.id
|
|
LEFT JOIN (SELECT job_id, COUNT(*) count FROM job_order WHERE status = ? GROUP BY 1) t3 ON t3.job_id = a.id
|
|
`
|
|
sql += `
|
|
LEFT JOIN (SELECT COUNT(b.id) * a.avg_price total_cash, a.id
|
|
FROM job a
|
|
JOIN job_order b ON a.id = b.job_id AND b.status = ?
|
|
GROUP BY 2) t4 ON t4.id = a.id
|
|
`
|
|
sqlParams = append(sqlParams, model.JobOrderStatusAccept, model.JobOrderStatusFinish, model.JobOrderStatusCancel, model.JobOrderStatusFinish)
|
|
sql += " WHERE a.deleted_at = ?"
|
|
sqlParams = append(sqlParams, utils.DefaultTimeValue)
|
|
rSQL, rSQLparams := getWhereSqlManage(cityCodes, fromTime, toTime, jobIDs)
|
|
sql += rSQL
|
|
sqlParams = append(sqlParams, rSQLparams...)
|
|
sql += " LIMIT ? OFFSET ?"
|
|
pageSize = jxutils.FormalizePageSize(pageSize)
|
|
sqlParams = append(sqlParams, pageSize, offset)
|
|
txDB, _ := Begin(db)
|
|
defer Commit(db, txDB)
|
|
err = GetRowsTx(txDB, &getManageStatisticsJobResult, sql, sqlParams)
|
|
if err == nil {
|
|
pageInfo = &model.PagedInfo{
|
|
Data: getManageStatisticsJobResult,
|
|
TotalCount: GetLastTotalRowCountTx(txDB),
|
|
}
|
|
}
|
|
return pageInfo, err
|
|
}
|
|
|
|
func GetUnionOrders(db *DaoDB, vendorIDs, statuss []int, beginTime, endTime time.Time, isEarning int) (orders []*model.UnionOrder, err error) {
|
|
sql := `
|
|
SELECT *
|
|
FROM union_order
|
|
WHERE 1 = 1
|
|
`
|
|
sqlParams := []interface{}{}
|
|
if len(vendorIDs) > 0 {
|
|
sql += ` AND vendor_id IN (` + GenQuestionMarks(len(vendorIDs)) + `)`
|
|
sqlParams = append(sqlParams, vendorIDs)
|
|
}
|
|
if len(statuss) > 0 {
|
|
sql += ` AND status IN (` + GenQuestionMarks(len(statuss)) + `)`
|
|
sqlParams = append(sqlParams, statuss)
|
|
}
|
|
if !utils.IsTimeZero(beginTime) {
|
|
sql += ` AND order_settle_at > ?`
|
|
sqlParams = append(sqlParams, beginTime)
|
|
}
|
|
if !utils.IsTimeZero(endTime) {
|
|
sql += ` AND order_settle_at < ?`
|
|
sqlParams = append(sqlParams, endTime)
|
|
}
|
|
if isEarning != -1 {
|
|
sql += ` AND is_earning = ?`
|
|
sqlParams = append(sqlParams, isEarning)
|
|
}
|
|
err = GetRows(db, &orders, sql, sqlParams)
|
|
return orders, err
|
|
}
|
|
|
|
func GetUnionOrdersByIDs(db *DaoDB, vendorOrderIDs []string, vendorID int) (orders []*model.UnionOrder, err error) {
|
|
if len(vendorOrderIDs) == 0 {
|
|
return nil, err
|
|
}
|
|
sql := `
|
|
SELECT *
|
|
FROM union_order
|
|
WHERE 1 = 1
|
|
`
|
|
sqlParams := []interface{}{}
|
|
if len(vendorOrderIDs) > 0 {
|
|
sql += ` AND vendor_order_id IN (` + GenQuestionMarks(len(vendorOrderIDs)) + `)`
|
|
sqlParams = append(sqlParams, vendorOrderIDs)
|
|
}
|
|
if vendorID != 0 {
|
|
sql += ` AND vendor_id = ?`
|
|
sqlParams = append(sqlParams, vendorID)
|
|
}
|
|
err = GetRows(db, &orders, sql, sqlParams)
|
|
return orders, err
|
|
}
|
|
|
|
func GetMyUnionOrders(db *DaoDB, userID string, statuss []int, vendorID, offset, pageSize int) (page *model.PagedInfo, err error) {
|
|
var orders []*model.UnionOrder
|
|
sql := `
|
|
SELECT SQL_CALC_FOUND_ROWS a.*
|
|
FROM union_order a
|
|
WHERE 1 = 1
|
|
`
|
|
sqlParams := []interface{}{}
|
|
if vendorID != -1 {
|
|
sql += ` AND a.vendor_id = ?`
|
|
sqlParams = append(sqlParams, vendorID)
|
|
}
|
|
if len(statuss) > 0 {
|
|
sql += ` AND a.status IN (` + GenQuestionMarks(len(statuss)) + `)`
|
|
sqlParams = append(sqlParams, statuss)
|
|
}
|
|
if userID != "" {
|
|
sql += ` AND a.user_id = ?`
|
|
sqlParams = append(sqlParams, userID)
|
|
}
|
|
sql += " ORDER BY a.created_at DESC"
|
|
sql += " LIMIT ? OFFSET ?"
|
|
pageSize = jxutils.FormalizePageSize(pageSize)
|
|
sqlParams = append(sqlParams, pageSize, offset)
|
|
txDB, _ := Begin(db)
|
|
defer Commit(db, txDB)
|
|
if err = GetRowsTx(txDB, &orders, sql, sqlParams...); err == nil {
|
|
page = &model.PagedInfo{
|
|
TotalCount: GetLastTotalRowCountTx(txDB),
|
|
Data: orders,
|
|
}
|
|
}
|
|
return page, err
|
|
}
|
|
|
|
type GetUnionOrdersPageResult struct {
|
|
model.UnionOrder
|
|
Name string `json:"name"`
|
|
Moble string `json:"moble"`
|
|
}
|
|
|
|
func GetUnionOrdersPage(db *DaoDB, vendorIDs, statuss []int, beginTime, endTime time.Time, keyword string, offset, pageSize int) (page *model.PagedInfo, err error) {
|
|
var orders []*GetUnionOrdersPageResult
|
|
sql := `
|
|
SELECT SQL_CALC_FOUND_ROWS a.*, b.name, b.mobile
|
|
FROM union_order a
|
|
LEFT JOIN user b ON a.user_id = b.user_id
|
|
WHERE 1 = 1
|
|
`
|
|
sqlParams := []interface{}{}
|
|
if len(vendorIDs) > 0 {
|
|
sql += ` AND a.vendor_id IN (` + GenQuestionMarks(len(vendorIDs)) + `)`
|
|
sqlParams = append(sqlParams, vendorIDs)
|
|
}
|
|
if len(statuss) > 0 {
|
|
sql += ` AND a.status IN (` + GenQuestionMarks(len(statuss)) + `)`
|
|
sqlParams = append(sqlParams, statuss)
|
|
}
|
|
if !utils.IsTimeZero(beginTime) {
|
|
sql += ` AND a.order_settle_at > ?`
|
|
sqlParams = append(sqlParams, beginTime)
|
|
}
|
|
if !utils.IsTimeZero(endTime) {
|
|
sql += ` AND a.order_settle_at < ?`
|
|
sqlParams = append(sqlParams, endTime)
|
|
}
|
|
if keyword != "" {
|
|
keywordLike := "%" + keyword + "%"
|
|
sql += ` AND (b.name LIKE ? OR b.mobile LIKE ? OR a.vendor_order_id LIKE ? OR a.goods_name LIKE ? OR a.comment LIKE ?)`
|
|
sqlParams = append(sqlParams, keywordLike, keywordLike, keywordLike, keywordLike, keywordLike)
|
|
}
|
|
sql += " LIMIT ? OFFSET ?"
|
|
pageSize = jxutils.FormalizePageSize(pageSize)
|
|
sqlParams = append(sqlParams, pageSize, offset)
|
|
txDB, _ := Begin(db)
|
|
defer Commit(db, txDB)
|
|
if err = GetRowsTx(txDB, &orders, sql, sqlParams...); err == nil {
|
|
page = &model.PagedInfo{
|
|
TotalCount: GetLastTotalRowCountTx(txDB),
|
|
Data: orders,
|
|
}
|
|
}
|
|
return page, err
|
|
}
|