From 0a8a2ef523584d970a7d90a67c53dcdbb92cb1a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=82=B9=E5=AE=97=E6=A5=A0?= Date: Fri, 9 Jan 2026 17:12:23 +0800 Subject: [PATCH] 1 --- business/model/dao/store.go | 136 +++++++++++++++++++++++++++++++++++- 1 file changed, 134 insertions(+), 2 deletions(-) diff --git a/business/model/dao/store.go b/business/model/dao/store.go index 72849345d..c89be9455 100644 --- a/business/model/dao/store.go +++ b/business/model/dao/store.go @@ -1753,6 +1753,9 @@ func StatisticsFineFee(db *DaoDB, startTime, endTime time.Time, storeId []int) ( // StatisticsSettlement 统计京西门店结算信息 func StatisticsSettlement(db *DaoDB, storeId []int, start, end time.Time, vendorId []int, size, offset int, rank string) (pagedInfo *model.PagedInfo, err error) { + var ( + fields []string + ) sql := ` SELECT SQL_CALC_FOUND_ROWS @@ -1821,7 +1824,7 @@ func StatisticsSettlement(db *DaoDB, storeId []int, start, end time.Time, vendor u_operator1.name, u_operator2.name, u_operator3.name, s.jx_brand_fee_factor, s.market_add_fee_factor, s.pay_percentage, s.package_setting ` if rank != "" { - fields := strings.Split(rank, ",") + fields = strings.Split(rank, ",") sql += fmt.Sprintf(` ORDER BY %s %s `, fields[0], fields[1]) } else { sql += fmt.Sprintf(`ORDER BY order_count desc`) @@ -1856,6 +1859,21 @@ func StatisticsSettlement(db *DaoDB, storeId []int, start, end time.Time, vendor v.Profit = v.JxIncome + v.MarketIncome + float64(v.PackageSetting) } } + + sortWay := SortOption{} + if len(fields) != 0 { + sortWay.Field = fields[0] + switch fields[1] { + case "ASC", "asc": + sortWay.Ascending = true + case "DESC", "desc": + sortWay.Ascending = false + default: + sortWay.Ascending = false + } + } + SortSettlement(msgList, nil, sortWay) + pagedInfo = &model.PagedInfo{ TotalCount: GetLastTotalRowCount2(db, txDB), Data: msgList, @@ -1865,6 +1883,9 @@ func StatisticsSettlement(db *DaoDB, storeId []int, start, end time.Time, vendor // StatisticsSettlementByCity 根据城市统计结算 func StatisticsSettlementByCity(db *DaoDB, cityCode []string, start, end time.Time, vendorId []int, size, offset int, rank string) (pagedInfo *model.PagedInfo, err error) { + var ( + fields []string + ) sql := ` SELECT SQL_CALC_FOUND_ROWS @@ -1909,7 +1930,7 @@ func StatisticsSettlementByCity(db *DaoDB, cityCode []string, start, end time.Ti sql += ` GROUP BY p.name,u.name, u.mobile,s.id ` if rank != "" { - fields := strings.Split(rank, ",") + fields = strings.Split(rank, ",") sql += fmt.Sprintf(` ORDER BY %s %s `, fields[0], fields[1]) } else { sql += fmt.Sprintf(`ORDER BY order_count desc`) @@ -1941,9 +1962,120 @@ func StatisticsSettlementByCity(db *DaoDB, cityCode []string, start, end time.Ti } } + sortWay := SortOption{} + if len(fields) != 0 { + sortWay.Field = fields[0] + switch fields[1] { + case "ASC", "asc": + sortWay.Ascending = true + case "DESC", "desc": + sortWay.Ascending = false + default: + sortWay.Ascending = false + } + } + SortSettlement(nil, msgList, sortWay) pagedInfo = &model.PagedInfo{ TotalCount: GetLastTotalRowCount2(db, txDB), Data: msgList, } return pagedInfo, nil } + +// SortOption 排序选项 +type SortOption struct { + Field string + Ascending bool // true 升序 + //ThenBy *SortOption // 用于多级排序 +} + +func SortSettlement(store []*model.JxSettlementInfo, code []*model.SettlementByCityCode, option SortOption) { + if store != nil { + sort.Slice(store, func(i, j int) bool { + return compareByStore(store[i], store[j], option) + }) + } else if code != nil { + sort.Slice(code, func(i, j int) bool { + return compareByCode(code[i], code[j], option) + }) + } + +} + +func compareByStore(a, b *model.JxSettlementInfo, option SortOption) bool { + var result bool + + switch option.Field { + case "order_count": + result = a.OrderCount < b.OrderCount + case "package_setting": + result = a.PackageSetting < b.PackageSetting + case "total_desired_fee": + result = a.TotalDesiredFee < b.TotalDesiredFee + case "refund_money": + result = a.RefundMoney < b.RefundMoney + case "total_shop_money": + result = a.TotalShopMoney < b.TotalShopMoney + case "platform_income": + result = a.PlatformIncome < b.PlatformIncome + case "store_income": + result = a.StoreIncome < b.StoreIncome + case "jx_income": + result = a.JxIncome < b.JxIncome + case "market_income": + result = a.MarketIncome < b.MarketIncome + default: + result = a.OrderCount < b.OrderCount + } + + // 处理降序 + if !option.Ascending { + result = !result + } + + // 如果相等且有下一级排序,则继续比较 + //if result == false && a.FirstName == b.FirstName && option.ThenBy != nil { + // return comparePeople(a, b, *option.ThenBy) + //} + + return result +} + +func compareByCode(a, b *model.SettlementByCityCode, option SortOption) bool { + var result bool + + switch option.Field { + case "order_count": + result = a.OrderCount < b.OrderCount + case "package_setting": + result = a.PackageSetting < b.PackageSetting + case "total_desired_fee": + result = a.TotalDesiredFee < b.TotalDesiredFee + case "refund_money": + result = a.RefundMoney < b.RefundMoney + case "total_shop_money": + result = a.TotalShopMoney < b.TotalShopMoney + case "platform_income": + result = a.PlatformIncome < b.PlatformIncome + case "store_income": + result = a.StoreInCome < b.StoreInCome + case "jx_income": + result = a.JxIncome < b.JxIncome + case "market_income": + result = a.MarketIncome < b.MarketIncome + default: + result = a.OrderCount < b.OrderCount + } + + // 处理降序 + if !option.Ascending { + result = !result + } + + // 如果相等且有下一级排序,则继续比较 + //if result == false && a.FirstName == b.FirstName && option.ThenBy != nil { + // return comparePeople(a, b, *option.ThenBy) + //} + + return result +}