aa
This commit is contained in:
@@ -704,5 +704,79 @@ func RefreshJDMembers(ctx *jxcontext.Context) (err error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func UserMemberReport(ctx *jxcontext.Context, vendorID int, keyword string, offset, pageSize int) (page *model.PagedInfo, err error) {
|
func UserMemberReport(ctx *jxcontext.Context, vendorID int, keyword string, offset, pageSize int) (page *model.PagedInfo, err error) {
|
||||||
return dao.UserMemberReport(dao.GetDB(), vendorID, keyword, offset, pageSize)
|
var (
|
||||||
|
db = dao.GetDB()
|
||||||
|
)
|
||||||
|
var list []*dao.UserMemberReportResult
|
||||||
|
sql := `
|
||||||
|
SELECT SQL_CALC_FOUND_ROWS a.mobile, IF(a.vendor_id = ?, c.name, b.consignee_name) name, IF(a.deleted_at = '1970-01-01 00:00:00',0,1) status, a.vendor_id,
|
||||||
|
COUNT(b.*) buy_count, COUNT(bb.*) finished_count, SUM(b.actual_pay_price) buy_price, SUM(b.actual_pay_price) finished_price, COUNT(d.score > 3) good_comment_count,
|
||||||
|
COUNT(d.score < 3) bad_comment_count
|
||||||
|
FROM user_member a
|
||||||
|
LEFT JOIN goods_order b ON a.mobile = b.consignee_mobile2 AND a.vendor_id = b.vendor_id
|
||||||
|
LEFT JOIN goods_order bb ON a.mobile = bb.consignee_mobile2 AND bb.status = ? AND a.vendor_id = bb.vendor_id
|
||||||
|
LEFT JOIN user c ON c.mobile = a.mobile
|
||||||
|
LEFT JOIN jx_bad_comments d ON d.order_id = b.vendor_order_id
|
||||||
|
`
|
||||||
|
sqlParams := []interface{}{
|
||||||
|
model.VendorIDJX, model.OrderStatusFinished,
|
||||||
|
}
|
||||||
|
if vendorID != -1 {
|
||||||
|
sql += " AND a.vendor_id = ?"
|
||||||
|
sqlParams = append(sqlParams, vendorID)
|
||||||
|
}
|
||||||
|
if keyword != "" {
|
||||||
|
keywordLike := "%" + keyword + "%"
|
||||||
|
sql += " AND (a.mobile LIKE ? OR name LIKE ?)"
|
||||||
|
sqlParams = append(sqlParams, keywordLike, keywordLike)
|
||||||
|
}
|
||||||
|
sql += `
|
||||||
|
GROUP BY 1, 2, 3
|
||||||
|
LIMIT ? OFFSET ?
|
||||||
|
`
|
||||||
|
pageSize = jxutils.FormalizePageSize(pageSize)
|
||||||
|
sqlParams = append(sqlParams, pageSize, offset)
|
||||||
|
txDB, _ := dao.Begin(db)
|
||||||
|
defer dao.Commit(db, txDB)
|
||||||
|
if err = dao.GetRowsTx(txDB, &list, sql, sqlParams...); err == nil {
|
||||||
|
page = &model.PagedInfo{
|
||||||
|
TotalCount: dao.GetLastTotalRowCount2(db, txDB),
|
||||||
|
//Data: page,
|
||||||
|
}
|
||||||
|
task := tasksch.NewParallelTask("", tasksch.NewParallelConfig().SetIsContinueWhenError(true), jxcontext.AdminCtx,
|
||||||
|
func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
|
||||||
|
v := batchItemList[0].(*dao.UserMemberReportResult)
|
||||||
|
var good *model.GoodsOrder
|
||||||
|
sql := `
|
||||||
|
SELECT * FROM goods_order WHERE consignee_mobile2 = ? AND vendor_id = ? LIMIT 1 OFFSET 0
|
||||||
|
`
|
||||||
|
sqlParams := []interface{}{v.Mobile, v.VendorID}
|
||||||
|
dao.GetRow(db, &good, sql, sqlParams)
|
||||||
|
if good != nil {
|
||||||
|
v.NewPrice = good.ActualPayPrice
|
||||||
|
}
|
||||||
|
var place *model.Place
|
||||||
|
sql2 := `
|
||||||
|
SELECT a.* FROM place a,(
|
||||||
|
SELECT b.city_code, COUNT(*) count
|
||||||
|
FROM goods_order a
|
||||||
|
LEFT JOIN store b ON b.id = IF(a.jx_store_id = 0, store_id, jx_store_id)
|
||||||
|
WHERE consignee_mobile2 = ? AND vendor_id = ?
|
||||||
|
GROUP BY 1
|
||||||
|
ORDER BY COUNT(*)
|
||||||
|
LIMIT 1 OFFSET 0)b
|
||||||
|
WHERE a.code = b.city_code
|
||||||
|
`
|
||||||
|
dao.GetRow(db, &place, sql2, sqlParams)
|
||||||
|
if place != nil {
|
||||||
|
v.CityName = place.Name
|
||||||
|
v.CityCode = place.Code
|
||||||
|
}
|
||||||
|
return retVal, err
|
||||||
|
}, list)
|
||||||
|
tasksch.HandleTask(task, nil, true).Run()
|
||||||
|
task.GetResult(0)
|
||||||
|
page.Data = list
|
||||||
|
}
|
||||||
|
return page, err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,6 @@
|
|||||||
package dao
|
package dao
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"git.rosy.net.cn/jx-callback/business/jxutils/jxcontext"
|
|
||||||
"git.rosy.net.cn/jx-callback/business/jxutils/tasksch"
|
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"git.rosy.net.cn/baseapi/utils"
|
"git.rosy.net.cn/baseapi/utils"
|
||||||
@@ -392,78 +390,3 @@ type UserMemberReportResult struct {
|
|||||||
CityCode int `json:"cityCode"` // 常住城市
|
CityCode int `json:"cityCode"` // 常住城市
|
||||||
CityName string `json:"cityName"`
|
CityName string `json:"cityName"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func UserMemberReport(db *DaoDB, vendorID int, keyword string, offset, pageSize int) (page *model.PagedInfo, err error) {
|
|
||||||
var list []*UserMemberReportResult
|
|
||||||
sql := `
|
|
||||||
SELECT SQL_CALC_FOUND_ROWS a.mobile, IF(a.vendor_id = ?, c.name, b.consignee_name) name, IF(a.deleted_at = '1970-01-01 00:00:00',0,1) status, a.vendor_id,
|
|
||||||
COUNT(b.*) buy_count, COUNT(bb.*) finished_count, SUM(b.actual_pay_price) buy_price, SUM(b.actual_pay_price) finished_price, COUNT(d.score > 3) good_comment_count,
|
|
||||||
COUNT(d.score < 3) bad_comment_count
|
|
||||||
FROM user_member a
|
|
||||||
LEFT JOIN goods_order b ON a.mobile = b.consignee_mobile2 AND a.vendor_id = b.vendor_id
|
|
||||||
LEFT JOIN goods_order bb ON a.mobile = bb.consignee_mobile2 AND bb.status = ? AND a.vendor_id = bb.vendor_id
|
|
||||||
LEFT JOIN user c ON c.mobile = a.mobile
|
|
||||||
LEFT JOIN jx_bad_comments d ON d.order_id = b.vendor_order_id
|
|
||||||
`
|
|
||||||
sqlParams := []interface{}{
|
|
||||||
model.VendorIDJX, model.OrderStatusFinished,
|
|
||||||
}
|
|
||||||
if vendorID != -1 {
|
|
||||||
sql += " AND a.vendor_id = ?"
|
|
||||||
sqlParams = append(sqlParams, vendorID)
|
|
||||||
}
|
|
||||||
if keyword != "" {
|
|
||||||
keywordLike := "%" + keyword + "%"
|
|
||||||
sql += " AND (a.mobile LIKE ? OR name LIKE ?)"
|
|
||||||
sqlParams = append(sqlParams, keywordLike, keywordLike)
|
|
||||||
}
|
|
||||||
sql += `
|
|
||||||
GROUP BY 1, 2, 3
|
|
||||||
LIMIT ? OFFSET ?
|
|
||||||
`
|
|
||||||
pageSize = jxutils.FormalizePageSize(pageSize)
|
|
||||||
sqlParams = append(sqlParams, pageSize, offset)
|
|
||||||
txDB, _ := Begin(db)
|
|
||||||
defer Commit(db, txDB)
|
|
||||||
if err = GetRowsTx(txDB, &list, sql, sqlParams...); err == nil {
|
|
||||||
page = &model.PagedInfo{
|
|
||||||
TotalCount: GetLastTotalRowCount2(db, txDB),
|
|
||||||
//Data: page,
|
|
||||||
}
|
|
||||||
task := tasksch.NewParallelTask("", tasksch.NewParallelConfig().SetIsContinueWhenError(true), jxcontext.AdminCtx,
|
|
||||||
func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
|
|
||||||
v := batchItemList[0].(*UserMemberReportResult)
|
|
||||||
var good *model.GoodsOrder
|
|
||||||
sql := `
|
|
||||||
SELECT * FROM goods_order WHERE consignee_mobile2 = ? AND vendor_id = ? LIMIT 1 OFFSET 0
|
|
||||||
`
|
|
||||||
sqlParams := []interface{}{v.Mobile, v.VendorID}
|
|
||||||
GetRow(db, &good, sql, sqlParams)
|
|
||||||
if good != nil {
|
|
||||||
v.NewPrice = good.ActualPayPrice
|
|
||||||
}
|
|
||||||
var place *model.Place
|
|
||||||
sql2 := `
|
|
||||||
SELECT a.* FROM place a,(
|
|
||||||
SELECT b.city_code, COUNT(*) count
|
|
||||||
FROM goods_order a
|
|
||||||
LEFT JOIN store b ON b.id = IF(a.jx_store_id = 0, store_id, jx_store_id)
|
|
||||||
WHERE consignee_mobile2 = ? AND vendor_id = ?
|
|
||||||
GROUP BY 1
|
|
||||||
ORDER BY COUNT(*)
|
|
||||||
LIMIT 1 OFFSET 0)b
|
|
||||||
WHERE a.code = b.city_code
|
|
||||||
`
|
|
||||||
GetRow(db, &place, sql2, sqlParams)
|
|
||||||
if place != nil {
|
|
||||||
v.CityName = place.Name
|
|
||||||
v.CityCode = place.Code
|
|
||||||
}
|
|
||||||
return retVal, err
|
|
||||||
}, list)
|
|
||||||
tasksch.HandleTask(task, nil, true).Run()
|
|
||||||
task.GetResult(0)
|
|
||||||
page.Data = list
|
|
||||||
}
|
|
||||||
return page, err
|
|
||||||
}
|
|
||||||
|
|||||||
Reference in New Issue
Block a user