删除一些model和dao文件
This commit is contained in:
@@ -2,7 +2,6 @@ package model
|
||||
|
||||
import (
|
||||
"math"
|
||||
"time"
|
||||
)
|
||||
|
||||
const (
|
||||
@@ -35,23 +34,6 @@ type PagedInfo struct {
|
||||
Data interface{} `json:"data"`
|
||||
}
|
||||
|
||||
type OrderFinancialExt struct {
|
||||
OrderFinancial
|
||||
VendorStoreID string `orm:"column(vendor_store_id);size(48)" json:"vendorStoreID"` //
|
||||
OrderFinishedAt time.Time `orm:"type(datetime)" json:"orderFinishedAt"` // 订单妥投/完成时间
|
||||
StoreID int `orm:"column(store_id)" json:"storeID"` // 外部系统里记录的 jxstoreid
|
||||
JxStoreID int `orm:"column(jx_store_id)" json:"jxStoreID"` // 根据VendorStoreID在本地系统里查询出来的 jxstoreid
|
||||
StoreName string `orm:"size(64)" json:"storeName"` //
|
||||
Status int `json:"status"` // 参见OrderStatus*相关的常量定义
|
||||
Skus []*OrderSkuFinancial `orm:"-" json:"skus"` // 正向订单购买商品列表
|
||||
Discounts []*OrderDiscountFinancial `orm:"-" json:"discounts"` // 正向订单享受优惠列表
|
||||
}
|
||||
|
||||
type OrderFinancialSkuExt struct {
|
||||
OrderSkuFinancial
|
||||
Image string `json:"image"`
|
||||
}
|
||||
|
||||
type ProductInfo struct {
|
||||
OriginalName string `json:"originalName"`
|
||||
OriginalSpec string `json:"originalSpec"`
|
||||
|
||||
@@ -1,499 +0,0 @@
|
||||
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 ActMapPureInfo struct {
|
||||
VendorID int `orm:"column(vendor_id)" json:"vendorID"`
|
||||
VendorOrgCode string `orm:"size(32)" json:"vendorOrgCode"` // 同一平台下不同的商户代码,如果只有一个,可以为空
|
||||
VendorActID string `orm:"column(vendor_act_id);size(48)" json:"vendorActID"`
|
||||
SyncStatus int `orm:"default(2)" json:"syncStatus"`
|
||||
Remark string `orm:"column(map_remark)" json:"remark"`
|
||||
}
|
||||
|
||||
type ActVendorInfo struct {
|
||||
model.Act
|
||||
VendorList []*ActMapPureInfo `json:"vendorList"`
|
||||
}
|
||||
|
||||
type tActAndMap struct {
|
||||
model.Act
|
||||
MapID int `orm:"column(map_id)" json:"-"` // 内部使用,不暴露
|
||||
ActMapPureInfo
|
||||
}
|
||||
|
||||
type PagedActListInfo struct {
|
||||
TotalCount int `json:"totalCount"`
|
||||
Data []*ActVendorInfo `json:"data"`
|
||||
}
|
||||
|
||||
func GetActVendorInfo(db *DaoDB, actID int, vendorIDs []int) (actMap map[int]*model.Act2, err error) {
|
||||
leftOrEmpty := ""
|
||||
if len(vendorIDs) == 1 && vendorIDs[0] == -1 {
|
||||
leftOrEmpty = "LEFT"
|
||||
}
|
||||
sql := fmt.Sprintf(`
|
||||
SELECT t1.*,
|
||||
t2.id map_id, t2.vendor_id, t2.vendor_org_code, t2.vendor_act_id, t2.sync_status
|
||||
FROM act t1
|
||||
%s JOIN act_map t2 ON t2.act_id = t1.id AND t2.deleted_at = ?`, leftOrEmpty)
|
||||
sqlParams := []interface{}{
|
||||
utils.DefaultTimeValue,
|
||||
}
|
||||
|
||||
if len(vendorIDs) > 0 {
|
||||
sql += " AND t2.vendor_id IN (" + GenQuestionMarks(len(vendorIDs)) + ")"
|
||||
sqlParams = append(sqlParams, vendorIDs)
|
||||
}
|
||||
|
||||
sql += `
|
||||
WHERE t1.deleted_at = ? AND t1.id = ?`
|
||||
sqlParams = append(sqlParams, utils.DefaultTimeValue, actID)
|
||||
|
||||
var actList []*model.Act2
|
||||
if err = GetRows(db, &actList, sql, sqlParams...); err == nil {
|
||||
actMap = make(map[int]*model.Act2)
|
||||
for _, v := range actList {
|
||||
if leftOrEmpty != "" {
|
||||
v.VendorID = -1
|
||||
}
|
||||
actMap[v.VendorID] = v
|
||||
}
|
||||
}
|
||||
return actMap, err
|
||||
}
|
||||
|
||||
func GetActStoreSkuVendorList(db *DaoDB, actID int, vendorIDs, storeIDs, skuIDs []int, keyword string, offset, pageSize int) (totalCount int, actStoreSkuList []*model.ActStoreSku2, err error) {
|
||||
// globals.SugarLogger.Debugf("GetActStoreSkuVendorList actID:%d", actID)
|
||||
// offset = jxutils.FormalizePageOffset(offset)
|
||||
// pageSize = jxutils.FormalizePageSize(pageSize)
|
||||
|
||||
// leftOrEmpty := ""
|
||||
// if len(vendorIDs) == 1 && (vendorIDs[0] == -1 || vendorIDs[0] == model.VendorIDJX) {
|
||||
// leftOrEmpty = "LEFT"
|
||||
// }
|
||||
// sql := fmt.Sprintf(`
|
||||
// SELECT SQL_CALC_FOUND_ROWS
|
||||
// t1.*,
|
||||
// t2.id map_id, t2.vendor_id, t2.vendor_act_id, t2.sync_status, t2.actual_act_price, t2.vendor_price, t2.trend_type, t2.trend_price,
|
||||
// t3.vendor_store_id,
|
||||
// CASE t2.vendor_id
|
||||
// WHEN 0 THEN
|
||||
// t4m.vendor_thing_id
|
||||
// WHEN 1 THEN
|
||||
// t5.mtwm_id
|
||||
// WHEN 3 THEN
|
||||
// t5.ebai_id
|
||||
// ELSE
|
||||
// ''
|
||||
// END vendor_sku_id,
|
||||
// t4.comment, t4.spec_quality, t4.spec_unit,
|
||||
// t6.name store_name,
|
||||
// t7.name sku_name_name, t7.unit, t7.prefix, t7.ex_prefix, t7.ex_prefix_begin, t7.ex_prefix_end
|
||||
// FROM act_store_sku t1
|
||||
// %s JOIN act_store_sku_map t2 ON t2.act_id = ? AND t2.bind_id = t1.id AND t2.deleted_at = ?`, leftOrEmpty)
|
||||
// sqlParams := []interface{}{
|
||||
// actID,
|
||||
// utils.DefaultTimeValue,
|
||||
// }
|
||||
|
||||
// if len(vendorIDs) > 0 {
|
||||
// sql += " AND t2.vendor_id IN (" + GenQuestionMarks(len(vendorIDs)) + ")"
|
||||
// sqlParams = append(sqlParams, vendorIDs)
|
||||
// }
|
||||
// sql += `
|
||||
// LEFT JOIN store_map t3 ON t3.store_id = t1.store_id AND t3.vendor_id = t2.vendor_id AND t3.deleted_at = ?
|
||||
// JOIN sku t4 ON t4.id = t1.sku_id
|
||||
// LEFT JOIN thing_map t4m ON t4m.vendor_id = ? AND t4m.thing_id = t4.id AND t4m.thing_type = ? AND t4m.vendor_id = t2.vendor_id AND t4m.vendor_org_code = t3.vendor_org_code AND t4m.deleted_at = ?
|
||||
// LEFT JOIN store_sku_bind t5 ON t5.sku_id = t1.sku_id AND t5.store_id = t1.store_id AND t5.deleted_at = ?
|
||||
// LEFT JOIN store t6 ON t6.id = t1.store_id
|
||||
// JOIN sku_name t7 ON t7.id = t4.name_id
|
||||
// WHERE t1.act_id = ?
|
||||
// `
|
||||
// sqlParams = append(sqlParams,
|
||||
// utils.DefaultTimeValue,
|
||||
// model.VendorIDJD, model.ThingTypeSku, utils.DefaultTimeValue,
|
||||
// utils.DefaultTimeValue,
|
||||
// actID,
|
||||
// )
|
||||
// if keyword != "" {
|
||||
// keywordLike := "%" + keyword + "%"
|
||||
// sql += " AND (t7.name LIKE ? OR t6.name LIKE ?"
|
||||
// sqlParams = append(sqlParams, keywordLike, keywordLike)
|
||||
// if intKeyword := int(utils.Str2Int64WithDefault(keyword, 0)); intKeyword > 0 {
|
||||
// sql += " OR t1.sku_id = ? OR t1.store_id = ?"
|
||||
// sqlParams = append(sqlParams, intKeyword, intKeyword)
|
||||
// }
|
||||
// sql += ")"
|
||||
// }
|
||||
// if leftOrEmpty != "" {
|
||||
// sql += " AND t1.deleted_at = ?"
|
||||
// sqlParams = append(sqlParams, utils.DefaultTimeValue)
|
||||
// }
|
||||
// if len(storeIDs) > 0 {
|
||||
// sql += " AND t1.store_id IN (" + GenQuestionMarks(len(storeIDs)) + ")"
|
||||
// sqlParams = append(sqlParams, storeIDs)
|
||||
// }
|
||||
// if len(skuIDs) > 0 {
|
||||
// sql += " AND t1.sku_id IN (" + GenQuestionMarks(len(skuIDs)) + ")"
|
||||
// sqlParams = append(sqlParams, skuIDs)
|
||||
// }
|
||||
// sql += " LIMIT ? OFFSET ?;"
|
||||
// sqlParams = append(sqlParams, pageSize, offset)
|
||||
// // globals.SugarLogger.Debug(sql)
|
||||
// // globals.SugarLogger.Debug(utils.Format4Output(sqlParams, false))
|
||||
// // globals.SugarLogger.Debug(utils.Format4Output(actStoreSkuList, false))
|
||||
// Begin(db)
|
||||
// defer Commit(db)
|
||||
// if err = GetRows(db, &actStoreSkuList, sql, sqlParams...); err == nil {
|
||||
// totalCount = GetLastTotalRowCount(db)
|
||||
// }
|
||||
return totalCount, actStoreSkuList, err
|
||||
}
|
||||
|
||||
func GetActStoreSkuVendorInfo(db *DaoDB, actID int, vendorIDs, storeIDs, skuIDs []int) (actStoreSkuMap map[int][]*model.ActStoreSku2, err error) {
|
||||
leftOrEmpty := ""
|
||||
if len(vendorIDs) == 1 && vendorIDs[0] == -1 {
|
||||
leftOrEmpty = "LEFT"
|
||||
}
|
||||
_, actStoreSkuList, err := GetActStoreSkuVendorList(db, actID, vendorIDs, storeIDs, skuIDs, "", 0, -1)
|
||||
if err == nil {
|
||||
actStoreSkuMap = make(map[int][]*model.ActStoreSku2)
|
||||
for _, v := range actStoreSkuList {
|
||||
if leftOrEmpty != "" {
|
||||
v.VendorID = -1
|
||||
}
|
||||
actStoreSkuMap[v.VendorID] = append(actStoreSkuMap[v.VendorID], v)
|
||||
}
|
||||
}
|
||||
return actStoreSkuMap, err
|
||||
}
|
||||
|
||||
func QueryActs(db *DaoDB, actID int, offset, pageSize int, syncStatus int, keyword string, vendorID int, statusList, actTypeList, createTypeList []int,
|
||||
storeID int, skuIDs []int, cityCode int, beginAt, endAt, createdAtFrom, createdAtTo time.Time) (pagedInfo *PagedActListInfo, err error) {
|
||||
if actID == 0 && utils.IsTimeZero(createdAtFrom) && utils.IsTimeZero(beginAt) {
|
||||
return nil, fmt.Errorf("actID,createdAtFrom和beginAt中,至少要指定一个条件")
|
||||
}
|
||||
offset = jxutils.FormalizePageOffset(offset)
|
||||
pageSize = jxutils.FormalizePageSize(pageSize)
|
||||
isGetAll := offset == 0 && pageSize == model.UnlimitedPageSize
|
||||
|
||||
sql := `
|
||||
SELECT SQL_CALC_FOUND_ROWS
|
||||
DISTINCT t1.id
|
||||
FROM act t1`
|
||||
sqlParams := []interface{}{}
|
||||
if isGetAll {
|
||||
sql = `
|
||||
SELECT
|
||||
t1.*,
|
||||
t2.id map_id, t2.vendor_id, t2.vendor_act_id, t2.sync_status, t2.remark map_remark
|
||||
FROM act t1`
|
||||
}
|
||||
sql += " LEFT JOIN act_map t2 ON t2.act_id = t1.id AND t2.deleted_at = ?"
|
||||
sqlParams = append(sqlParams, utils.DefaultTimeValue)
|
||||
if syncStatus >= 0 {
|
||||
sql += " AND (t2.sync_status = ? OR t2.sync_status & ? <> 0)"
|
||||
sqlParams = append(sqlParams, syncStatus, syncStatus)
|
||||
}
|
||||
sql += `
|
||||
WHERE t1.deleted_at = ?`
|
||||
if syncStatus >= 0 {
|
||||
sql += " AND t2.id IS NOT NULL"
|
||||
}
|
||||
sqlParams = append(sqlParams, utils.DefaultTimeValue)
|
||||
keywordInt := int64(0)
|
||||
if keyword != "" {
|
||||
keywordLike := "%" + keyword + "%"
|
||||
sql += " AND ( t1.name LIKE ? OR t1.advertising LIKE ? OR t1.remark LIKE ? OR t2.vendor_act_id LIKE ?"
|
||||
sqlParams = append(sqlParams, keywordLike, keywordLike, keywordLike, keywordLike)
|
||||
keywordInt = utils.Str2Int64WithDefault(keyword, 0)
|
||||
if keywordInt > 0 {
|
||||
sql += `
|
||||
OR t1.id = ?`
|
||||
sqlParams = append(sqlParams, keywordInt)
|
||||
}
|
||||
sql += ")"
|
||||
}
|
||||
if storeID > 0 || len(skuIDs) > 0 || cityCode > 0 {
|
||||
sql += ` AND (SELECT COUNT(*)
|
||||
FROM act_store_sku t2`
|
||||
if cityCode > 0 {
|
||||
sql += " JOIN store t3 ON t3.id = t2.store_id AND t3.city_code = ?"
|
||||
sqlParams = append(sqlParams, cityCode)
|
||||
}
|
||||
sql += `
|
||||
WHERE t2.act_id = t1.id AND t2.deleted_at = ?`
|
||||
sqlParams = append(sqlParams, utils.DefaultTimeValue)
|
||||
if storeID > 0 {
|
||||
sql += " AND t2.store_id = ?"
|
||||
sqlParams = append(sqlParams, storeID)
|
||||
}
|
||||
if len(skuIDs) > 0 {
|
||||
sql += " AND t2.sku_id IN (" + GenQuestionMarks(len(skuIDs)) + ")"
|
||||
sqlParams = append(sqlParams, skuIDs)
|
||||
}
|
||||
sql += ") > 0"
|
||||
}
|
||||
if actID > 0 {
|
||||
sql += " AND t1.id = ?"
|
||||
sqlParams = append(sqlParams, actID)
|
||||
}
|
||||
if vendorID >= 0 {
|
||||
sql += " AND t1.vendor_mask & ? <> 0"
|
||||
sqlParams = append(sqlParams, model.GetVendorMask(vendorID))
|
||||
}
|
||||
if len(statusList) > 0 {
|
||||
sql += " AND t1.status IN (" + GenQuestionMarks(len(statusList)) + ")"
|
||||
sqlParams = append(sqlParams, statusList)
|
||||
}
|
||||
if len(actTypeList) > 0 {
|
||||
sql += " AND t1.type IN (" + GenQuestionMarks(len(actTypeList)) + ")"
|
||||
sqlParams = append(sqlParams, actTypeList)
|
||||
}
|
||||
if len(createTypeList) > 0 {
|
||||
sql += " AND t1.create_type IN (" + GenQuestionMarks(len(createTypeList)) + ")"
|
||||
sqlParams = append(sqlParams, createTypeList)
|
||||
}
|
||||
if !utils.IsTimeZero(beginAt) {
|
||||
sql += " AND t1.begin_at <= ?"
|
||||
sqlParams = append(sqlParams, beginAt)
|
||||
}
|
||||
if !utils.IsTimeZero(endAt) {
|
||||
sql += " AND t1.end_at >= ?"
|
||||
sqlParams = append(sqlParams, endAt)
|
||||
}
|
||||
if !utils.IsTimeZero(createdAtFrom) {
|
||||
sql += " AND t1.created_at >= ?"
|
||||
sqlParams = append(sqlParams, createdAtFrom)
|
||||
}
|
||||
if !utils.IsTimeZero(createdAtTo) {
|
||||
sql += " AND t1.created_at <= ?"
|
||||
sqlParams = append(sqlParams, createdAtTo)
|
||||
}
|
||||
|
||||
pagedInfo = &PagedActListInfo{}
|
||||
if isGetAll {
|
||||
sql += `
|
||||
ORDER BY t1.id DESC, t2.vendor_id`
|
||||
} else {
|
||||
sql += `
|
||||
ORDER BY 1 DESC
|
||||
LIMIT ? OFFSET ?
|
||||
`
|
||||
sqlParams = append(sqlParams, pageSize, offset)
|
||||
var idList []int
|
||||
|
||||
txDB, _ := Begin(db)
|
||||
defer func() {
|
||||
if r := recover(); r != nil {
|
||||
Rollback(db, txDB)
|
||||
panic(r)
|
||||
}
|
||||
}()
|
||||
// globals.SugarLogger.Debug(sql)
|
||||
if err = GetRowsTx(txDB, &idList, sql, sqlParams...); err != nil || len(idList) == 0 {
|
||||
Rollback(db, txDB)
|
||||
return pagedInfo, err
|
||||
}
|
||||
pagedInfo.TotalCount = GetLastTotalRowCountTx(txDB)
|
||||
Commit(db, txDB)
|
||||
|
||||
sql = `
|
||||
SELECT
|
||||
t1.*,
|
||||
t2.id map_id, t2.vendor_id, t2.vendor_org_code, t2.vendor_act_id, t2.sync_status, t2.remark map_remark
|
||||
FROM act t1
|
||||
LEFT JOIN act_map t2 ON t2.act_id = t1.id AND t2.deleted_at = ?
|
||||
WHERE t1.id IN (` + GenQuestionMarks(len(idList)) + `)`
|
||||
if syncStatus >= 0 {
|
||||
sql += " AND t2.id IS NOT NULL"
|
||||
}
|
||||
sql += `
|
||||
ORDER BY t1.id DESC, t2.vendor_id`
|
||||
sqlParams = []interface{}{
|
||||
utils.DefaultTimeValue,
|
||||
idList,
|
||||
}
|
||||
}
|
||||
var actList []*tActAndMap
|
||||
// globals.SugarLogger.Debug(sql)
|
||||
if err = GetRows(db, &actList, sql, sqlParams...); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
actMap := make(map[int]*ActVendorInfo)
|
||||
for _, v := range actList {
|
||||
tmpAct := actMap[v.ID]
|
||||
if tmpAct == nil {
|
||||
tmpAct = &ActVendorInfo{
|
||||
Act: v.Act,
|
||||
}
|
||||
actMap[v.ID] = tmpAct
|
||||
pagedInfo.Data = append(pagedInfo.Data, tmpAct)
|
||||
}
|
||||
if v.MapID > 0 {
|
||||
tmpAct.VendorList = append(tmpAct.VendorList, &v.ActMapPureInfo)
|
||||
}
|
||||
}
|
||||
if isGetAll {
|
||||
pagedInfo.TotalCount = len(pagedInfo.Data)
|
||||
}
|
||||
return pagedInfo, err
|
||||
}
|
||||
|
||||
func GetExistVendorActIDs(db *DaoDB, vendorID int) (vendorActIDs []string, err error) {
|
||||
// todo 不应该是全表扫描
|
||||
sql := `
|
||||
SELECT
|
||||
DISTINCT t1.vendor_act_id
|
||||
FROM act_store_sku_map t1
|
||||
WHERE t1.deleted_at = ? AND t1.vendor_id = ?`
|
||||
sqlParams := []interface{}{
|
||||
utils.DefaultTimeValue,
|
||||
vendorID,
|
||||
}
|
||||
err = GetRows(db, &vendorActIDs, sql, sqlParams...)
|
||||
return vendorActIDs, err
|
||||
}
|
||||
|
||||
func UpdateActStatusByTime(db *DaoDB, refTime time.Time) (num int64, err error) {
|
||||
sql := `
|
||||
UPDATE act t1
|
||||
SET t1.status = ?
|
||||
WHERE t1.deleted_at = ? AND t1.status < ? AND t1.end_at < ?;`
|
||||
sqlParams := []interface{}{
|
||||
model.ActStatusEnded,
|
||||
utils.DefaultTimeValue,
|
||||
model.ActStatusCanceled,
|
||||
utils.Time2Date(refTime),
|
||||
}
|
||||
num, err = ExecuteSQL(db, sql, sqlParams...)
|
||||
return num, err
|
||||
}
|
||||
|
||||
// func ActStoreSkuMap2StoreSkuAct(actStoreSkuMap *model.ActStoreSkuMap, isCanceled bool) (storeSkuAct *model.StoreSkuAct) {
|
||||
// storeSkuAct = &model.StoreSkuAct{
|
||||
// StoreID: actStoreSkuMap.StoreID,
|
||||
// SkuID: actStoreSkuMap.SkuID,
|
||||
// VendorID: actStoreSkuMap.VendorID,
|
||||
// }
|
||||
// storeSkuAct.CreatedAt = actStoreSkuMap.CreatedAt
|
||||
// storeSkuAct.UpdatedAt = actStoreSkuMap.UpdatedAt
|
||||
// storeSkuAct.LastOperator = actStoreSkuMap.LastOperator
|
||||
|
||||
// if actStoreSkuMap.ActualActPrice > 0 {
|
||||
// if isCanceled || !utils.IsTimeZero(actStoreSkuMap.DeletedAt) {
|
||||
// storeSkuAct.ActID = 0
|
||||
// } else {
|
||||
// storeSkuAct.ActID = actStoreSkuMap.ActID
|
||||
// storeSkuAct.VendorActID = actStoreSkuMap.VendorActID
|
||||
// storeSkuAct.SyncStatus = actStoreSkuMap.SyncStatus
|
||||
// storeSkuAct.VendorPrice = actStoreSkuMap.VendorPrice
|
||||
// storeSkuAct.ActualActPrice = actStoreSkuMap.ActualActPrice
|
||||
// }
|
||||
// }
|
||||
// if actStoreSkuMap.EarningPrice > 0 {
|
||||
// if isCanceled || !utils.IsTimeZero(actStoreSkuMap.DeletedAt) {
|
||||
// storeSkuAct.EarningActID = 0
|
||||
// } else {
|
||||
// storeSkuAct.EarningActID = actStoreSkuMap.ActID
|
||||
// storeSkuAct.EarningPrice = actStoreSkuMap.EarningPrice
|
||||
// }
|
||||
// }
|
||||
// return storeSkuAct
|
||||
// }
|
||||
|
||||
func BatchUpdateActEntity(db *DaoDB, isCanceled bool, items []*KVUpdateItem) (num int64, err error) {
|
||||
return BatchUpdateEntityByKV(db, items)
|
||||
// if globals.IsStoreSkuAct {
|
||||
// Begin(db)
|
||||
// defer func() {
|
||||
// if r := recover(); r != nil || err != nil {
|
||||
// Rollback(db)
|
||||
// if r != nil {
|
||||
// panic(r)
|
||||
// }
|
||||
// }
|
||||
// }()
|
||||
|
||||
// for _, v := range items {
|
||||
// if actStoreSku, ok := v.Item.(*model.ActStoreSkuMap); ok {
|
||||
// for k1, v1 := range v.KVs {
|
||||
// refutil.SetObjFieldByName(actStoreSku, k1, v1)
|
||||
// }
|
||||
// if err = CreateOrUpdateActStoreSku(db, ActStoreSkuMap2StoreSkuAct(actStoreSku, isCanceled)); err != nil {
|
||||
// return 0, err
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
// if _, err = BatchUpdateEntityByKV(db, items); err != nil {
|
||||
// return 0, err
|
||||
// }
|
||||
|
||||
// if globals.IsStoreSkuAct {
|
||||
// Commit(db)
|
||||
// }
|
||||
// return num, err
|
||||
}
|
||||
|
||||
func CreateOrUpdateActStoreSku(db *DaoDB, storeSkuAct *model.StoreSkuAct) (err error) {
|
||||
storeSkuActCopy := *storeSkuAct
|
||||
if err2 := GetEntity(db, &storeSkuActCopy, model.FieldStoreID, model.FieldSkuID, model.FieldVendorID); err2 == nil {
|
||||
storeSkuAct.ID = storeSkuActCopy.ID
|
||||
_, err = UpdateEntity(db, storeSkuAct)
|
||||
} else if IsNoRowsError(err2) {
|
||||
err = CreateEntity(db, storeSkuAct)
|
||||
} else {
|
||||
err = err2
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
func GetStoresSkusAct(db *DaoDB, hintActID int, mustDirty bool, storeIDs, skuIDs, vendorIDs []int, mustHaveVendorActID bool, minActPercentage, maxActPercentage int) (storeSkuActList []*model.StoreSkuAct, err error) {
|
||||
sql := `
|
||||
SELECT *
|
||||
FROM store_sku_act t1
|
||||
WHERE 1 = 1
|
||||
`
|
||||
sqlParams := []interface{}{}
|
||||
if hintActID > 0 {
|
||||
sql += " AND t1.hint_act_id = ?"
|
||||
sqlParams = append(sqlParams, hintActID)
|
||||
}
|
||||
if mustDirty {
|
||||
sql += " AND (t1.sync_status <> 0 OR (t1.act_percentage = 0 AND t1.vendor_act_id <> '') OR (t1.act_percentage <> 0 AND t1.vendor_act_id = ''))"
|
||||
}
|
||||
if len(storeIDs) > 0 {
|
||||
sql += " AND t1.store_id IN (" + GenQuestionMarks(len(storeIDs)) + ")"
|
||||
sqlParams = append(sqlParams, storeIDs)
|
||||
}
|
||||
if len(skuIDs) > 0 {
|
||||
sql += " AND t1.sku_id IN (" + GenQuestionMarks(len(skuIDs)) + ")"
|
||||
sqlParams = append(sqlParams, skuIDs)
|
||||
}
|
||||
if len(vendorIDs) > 0 {
|
||||
sql += " AND t1.vendor_id IN (" + GenQuestionMarks(len(vendorIDs)) + ")"
|
||||
sqlParams = append(sqlParams, vendorIDs)
|
||||
}
|
||||
if mustHaveVendorActID {
|
||||
sql += " AND t1.vendor_act_id <> ''"
|
||||
}
|
||||
if minActPercentage > 0 {
|
||||
sql += " AND t1.act_percentage >= ?"
|
||||
sqlParams = append(sqlParams, minActPercentage)
|
||||
}
|
||||
if maxActPercentage > 0 {
|
||||
sql += " AND t1.act_percentage <= ?"
|
||||
sqlParams = append(sqlParams, maxActPercentage)
|
||||
}
|
||||
err = GetRows(db, &storeSkuActList, sql, sqlParams...)
|
||||
return storeSkuActList, err
|
||||
}
|
||||
@@ -1,54 +0,0 @@
|
||||
package dao
|
||||
|
||||
import (
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"git.rosy.net.cn/baseapi/utils"
|
||||
"git.rosy.net.cn/jx-callback/business/model"
|
||||
)
|
||||
|
||||
func TestGetEffectiveActStoreSkuInfo(t *testing.T) {
|
||||
type testData struct {
|
||||
ResultCount int
|
||||
|
||||
ActID int
|
||||
VendorIDs []int
|
||||
StoreIDs []int
|
||||
SkuIDs []int
|
||||
FromTime time.Time
|
||||
ToTime time.Time
|
||||
}
|
||||
for _, v := range []*testData{
|
||||
&testData{
|
||||
StoreIDs: []int{100190},
|
||||
SkuIDs: []int{23847},
|
||||
ResultCount: 1,
|
||||
FromTime: utils.Str2Time("2019-08-06 12:34:56"),
|
||||
ToTime: utils.Str2Time("2019-08-06 12:34:56"),
|
||||
},
|
||||
} {
|
||||
result, err := GetEffectiveActStoreSkuInfo(GetDB(), v.ActID, v.VendorIDs, model.ActTypeAll, v.StoreIDs, v.SkuIDs, v.FromTime, v.ToTime)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if len(result) != v.ResultCount {
|
||||
t.Log(utils.Format4Output(result, false))
|
||||
t.Errorf("cond:%s, len(result):%d, v.ResultCount:%d", utils.Format4Output(v, false), len(result), v.ResultCount)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestUpdateActStatusByTime(t *testing.T) {
|
||||
_, err := UpdateActStatusByTime(GetDB(), time.Now().Add(-48*time.Hour))
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestGetActStoreSkuVendorList(t *testing.T) {
|
||||
_, _, err := GetActStoreSkuVendorList(GetDB(), 18440, nil, nil, nil, "", 0, 0)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
@@ -1,654 +0,0 @@
|
||||
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
|
||||
}
|
||||
@@ -381,19 +381,6 @@ func GetUserAllWaitCashPrice(db *DaoDB, userID string) (price int, err error) {
|
||||
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 = ?
|
||||
|
||||
Reference in New Issue
Block a user