package dao import ( "fmt" "time" "git.rosy.net.cn/jx-callback/globals" "git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/jx-callback/business/model" ) type PagedActListInfo struct { TotalCount int Data []*model.Act } 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_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 GetActStoreSkuVendorInfo(db *DaoDB, actID int, vendorIDs, storeIDs, skuIDs []int) (actStoreSkuMap map[int][]*model.ActStoreSku2, err error) { globals.SugarLogger.Debugf("GetActStoreSkuVendorInfo actID:%d", actID) leftOrEmpty := "" if len(vendorIDs) == 1 && vendorIDs[0] == -1 { leftOrEmpty = "LEFT" } sql := fmt.Sprintf(` SELECT t1.*, t2.id map_id, t2.vendor_id, t2.vendor_act_id, t2.sync_status, t2.actual_act_price, t3.vendor_store_id, CASE t2.vendor_id WHEN 0 THEN t4.jd_id WHEN 1 THEN t5.mtwm_id WHEN 3 THEN t5.ebai_id ELSE '' END vendor_sku_id FROM act_store_sku t1 %s JOIN act_store_sku_map t2 ON t2.bind_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 += fmt.Sprintf(` %s 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 AND t4.deleted_at = ? JOIN store_sku_bind t5 ON t5.sku_id = t1.sku_id AND t5.store_id = t1.store_id AND t5.deleted_at = ? WHERE t1.act_id = ? `, leftOrEmpty) sqlParams = append(sqlParams, utils.DefaultTimeValue, utils.DefaultTimeValue, utils.DefaultTimeValue, actID, ) 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) } var actStoreSkuList []*model.ActStoreSku2 // globals.SugarLogger.Debug(sql) // globals.SugarLogger.Debug(utils.Format4Output(sqlParams, false)) // globals.SugarLogger.Debug(utils.Format4Output(actStoreSkuList, false)) if err = GetRows(db, &actStoreSkuList, sql, sqlParams...); 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, keyword string, statusList []int, actTypeList []int, storeID, skuID, cityCode int, beginAt, endAt, createdAtFrom, createdAtTo time.Time) (pagedInfo *PagedActListInfo, err error) { sql := ` SELECT SQL_CALC_FOUND_ROWS t1.* FROM act t1 WHERE 1 = 1 ` sqlParams := []interface{}{} keywordInt := int64(0) if keyword != "" { keywordLike := "%" + keyword + "%" sql += " AND ( t1.name LIKE ? OR t1.advertising LIKE ? OR t1.remark LIKE ?" sqlParams = append(sqlParams, keywordLike, keywordLike, keywordLike) keywordInt = utils.Str2Int64WithDefault(keyword, 0) if keywordInt > 0 { sql += ` OR t1.id = ?` sqlParams = append(sqlParams, keywordInt) } sql += ")" } if storeID > 0 || skuID > 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` if storeID > 0 { sql += " AND t2.store_id = ?" sqlParams = append(sqlParams, storeID) } if skuID > 0 { sql += " AND t2.sku_id = ?" sqlParams = append(sqlParams, skuID) } sql += ") > 0" } if actID > 0 { sql += " AND t1.id = ?" sqlParams = append(sqlParams, actID) } 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 !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) } sql += ` ORDER by t1.id LIMIT ? OFFSET ?` sqlParams = append(sqlParams, FormalizePageSize(pageSize), FormalizePageOffset(offset)) pagedInfo = &PagedActListInfo{} Begin(db) defer func() { if r := recover(); r != nil { Rollback(db) panic(r) } }() err = GetRows(db, &pagedInfo.Data, sql, sqlParams...) if err == nil { pagedInfo.TotalCount = GetLastTotalRowCount(db) Commit(db) } else { Rollback(db) pagedInfo = nil } return pagedInfo, err }