diff --git a/app/admin/apis/erpordermanage/erp_market.go b/app/admin/apis/erpordermanage/erp_market.go index a4fa0b2..f7faa2e 100644 --- a/app/admin/apis/erpordermanage/erp_market.go +++ b/app/admin/apis/erpordermanage/erp_market.go @@ -43,7 +43,7 @@ func CreateOrUpdateBusinessSummary(c *gin.Context) { var existing models.DailyBusinessSummary err = orm.Eloquent. - Where("date = ? AND store_id = ?", summaryDate, req.StoreID). + Where("date = ? AND store_id = ?", req.Date, req.StoreID). First(&existing).Error if err != nil { diff --git a/app/admin/models/erp_market.go b/app/admin/models/erp_market.go index b379f62..d3844f3 100644 --- a/app/admin/models/erp_market.go +++ b/app/admin/models/erp_market.go @@ -10,7 +10,9 @@ import ( "go-admin/tools" "go-admin/tools/config" "math" + "sort" "strconv" + "strings" "time" ) @@ -43,6 +45,7 @@ type BusinessSummaryListRequest struct { EndTime string `json:"end_time"` // 结束时间 PageIndex int `json:"page_index"` // 当前页码 PageSize int `json:"page_size"` // 每页条数 + SortType string `json:"sort_type"` // 排序类型:desc 降序、asc 升序 } type BusinessSummaryItem struct { @@ -102,8 +105,8 @@ type MarketStoreSalesData struct { Count int64 `json:"count"` // 销售数量 } -// parseToDate 解析多种格式的时间字符串,仅保留日期部分(年月日) -func parseToDate(s string) (time.Time, error) { +// ParseToDate 解析多种格式的时间字符串,仅保留日期部分(年月日) +func ParseToDate(s string) (time.Time, error) { formats := []string{ "2006-01-02", // 标准日期格式 time.RFC3339, // 带时区时间戳 2025-05-20T00:00:00+08:00 @@ -134,8 +137,8 @@ func QueryListBusinessSummary(req *BusinessSummaryListRequest, c *gin.Context) ( PageSize: req.PageSize, } - startDate, err1 := parseToDate(req.StartTime) - endDate, err2 := parseToDate(req.EndTime) + startDate, err1 := ParseToDate(req.StartTime) + endDate, err2 := ParseToDate(req.EndTime) if err1 != nil || err2 != nil { return nil, errors.New("日期格式错误") } @@ -148,6 +151,14 @@ func QueryListBusinessSummary(req *BusinessSummaryListRequest, c *gin.Context) ( for d := startDate; !d.After(endDate); d = d.AddDate(0, 0, 1) { allDates = append(allDates, d.Format("2006-01-02")) } + + // 根据排序方式进行调整 + if strings.ToLower(req.SortType) == "desc" { + // 倒序排列 + for i, j := 0, len(allDates)-1; i < j; i, j = i+1, j-1 { + allDates[i], allDates[j] = allDates[j], allDates[i] + } + } totalDays := len(allDates) // 日期分页 @@ -217,15 +228,28 @@ func QueryListBusinessSummary(req *BusinessSummaryListRequest, c *gin.Context) ( es = es.Where("store_id IN ?", req.StoreId) } - err := qs.Select("DATE_FORMAT(date, '%Y-%m-%d') AS date, " + - "SUM(promotion_fee) AS promotion_fee, " + - "SUM(sales_amount) AS sales_amount, " + - "SUM(sales_profit) AS sales_profit, " + - "SUM(staff_profit) AS staff_profit, " + - "SUM(count) AS count"). - Group("date"). - Order("date ASC"). - Find(&dataList).Error + var err error + if req.SortType == "asc" { + err = qs.Select("DATE_FORMAT(date, '%Y-%m-%d') AS date, " + + "SUM(promotion_fee) AS promotion_fee, " + + "SUM(sales_amount) AS sales_amount, " + + "SUM(sales_profit) AS sales_profit, " + + "SUM(staff_profit) AS staff_profit, " + + "SUM(count) AS count"). + Group("date"). + Order("date ASC"). + Find(&dataList).Error + } else { + err = qs.Select("DATE_FORMAT(date, '%Y-%m-%d') AS date, " + + "SUM(promotion_fee) AS promotion_fee, " + + "SUM(sales_amount) AS sales_amount, " + + "SUM(sales_profit) AS sales_profit, " + + "SUM(staff_profit) AS staff_profit, " + + "SUM(count) AS count"). + Group("date"). + Order("date DESC"). + Find(&dataList).Error + } if err != nil { return nil, err @@ -280,6 +304,17 @@ func QueryListBusinessSummary(req *BusinessSummaryListRequest, c *gin.Context) ( } } + switch req.SortType { + case "asc": + sort.Slice(result, func(i, j int) bool { + return result[i].Date < result[j].Date + }) + case "desc": + sort.Slice(result, func(i, j int) bool { + return result[i].Date > result[j].Date + }) + } + resp.List = result resp.Total = totalDays resp.PageIndex = req.PageIndex @@ -392,7 +427,7 @@ func QueryDailyBusinessSummaryData(req *MarketStoreSalesDataReq, c *gin.Context) } err = qs.Select("store_id, " + "SUM(promotion_fee) AS promotion_fee, " + - "SUM(sales_amount) AS total_sales_amount, " + + "SUM(sales_amount) AS sales_amount, " + "SUM(sales_profit) AS sales_profit, " + "SUM(staff_profit) AS staff_profit, " + "SUM(count) AS count").