根据日期分组查询数组列表

根据日期分组查询数组列表

service

Map<String,List<UmsBrowse>> getMemberBrowse();

Impl

 @Override
    public Map<String, List<UmsBrowse>> getMemberBrowse() {
        //获取登录用户信息
        MemberInfo memberInfo = MemberHolder.getMember();
        //创建一个Map集合存放不同时间的浏览记录
        Map<String,List<UmsBrowse>> memberResult = new LinkedHashMap<>();
        //获取当前用户浏览记录
        List<UmsBrowse> umsBrowses = baseMapper.getUmsBrowses(memberInfo.getUserId());
        //循环遍历用户浏览记录,根据不同的日期放到一起
        for (UmsBrowse umsBrows : umsBrowses) {
            String createTime = umsBrows.getCreateTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
            if(memberResult.containsKey(createTime)) {
                //如果存在这个Key则取出里面的List集合
                List<UmsBrowse> umsBrowseList = memberResult.get(umsBrows.getCreateTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
                //把当前商品浏览记录放入到当前集合中
                umsBrowseList.add(umsBrows);
            } else {
                //如果不存在这个key则直接创建一个集合
                List<UmsBrowse> umsBrowseList = new ArrayList<>();
                //把当前浏览商品信息放入集合中
                umsBrowseList.add(umsBrows);
                //将当前商品的创建时间作为key,商品浏览信息为value,放入到集合中
                memberResult.put(createTime, umsBrowseList);
            }
        }
        return memberResult;
    }

mapper.java

 /**
     * app - 获取当前用户的浏览足迹
     * @param membersId
     * @return
     */
    List<UmsBrowse> getUmsBrowses(@Param("memberId") Long membersId);

xml

 <select id="getUmsBrowses" resultType="com.lino.entity.UmsBrowse">
        select
        DATE_FORMAT(ubs.create_time,'%Y-%m-%d') as create_time,
        ubs.id,
        ubs.product_id as productId,
        ppt.product_name as productName,
        ppt.cover as productCover,
        ppt.lowest_price as productLowestPrice,
        ppt.subtitle as productSubtitle,
        ppt.label as productLabel,
        ppt.brand as productBrand,
        ppt.sale as productSale
        from ums_browse ubs
        LEFT JOIN pms_product ppt on ubs.product_id = ppt.id
        where ppt.deleted = 0
        and ppt.`status` = 0
        and ubs.member_id = #{memberId}
        and DATE_SUB(CURDATE(),INTERVAL 7 DAY) &lt;= date(ubs.create_time)
        GROUP BY ubs.product_id,date(ubs.create_time) ORDER BY ubs.create_time desc
    </select>```



```java

controller

@ApiOperation(value = "获取当前会员足迹列表", notes = "获取用户足迹列表")

    @GetMapping("/app/ums/browse/getMemberBrowse")
    public Result<Map<String,List<UmsBrowse>>> getMemberBrowse() {
        return ResultUtil.success(service.getMemberBrowse());
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一份 C 代码,实现了你的需求,可以参考一下: ```c #include <stdio.h> #include <string.h> #include <stdlib.h> #define MAX_NUM_DATES 100 struct date { int year; int month; int day; }; void print_date(struct date d) { printf("%04d-%02d-%02d\n", d.year, d.month, d.day); } int compare_date(struct date d1, struct date d2) { if (d1.year < d2.year) { return -1; } else if (d1.year > d2.year) { return 1; } else { if (d1.month < d2.month) { return -1; } else if (d1.month > d2.month) { return 1; } else { if (d1.day < d2.day) { return -1; } else if (d1.day > d2.day) { return 1; } else { return 0; } } } } void sort_dates(struct date dates[], int num_dates) { int i, j; struct date temp; for (i = 0; i < num_dates - 1; i++) { for (j = i + 1; j < num_dates; j++) { if (compare_date(dates[i], dates[j]) > 0) { temp = dates[i]; dates[i] = dates[j]; dates[j] = temp; } } } } int main() { struct date dates[MAX_NUM_DATES]; int num_dates = 0; char line[100]; while (fgets(line, sizeof(line), stdin) != NULL) { if (strlen(line) >= 10) { sscanf(line, "%d-%d-%d", &dates[num_dates].year, &dates[num_dates].month, &dates[num_dates].day); num_dates++; } } sort_dates(dates, num_dates); struct date current_date; scanf("%d-%d-%d", &current_date.year, &current_date.month, &current_date.day); printf("Before:\n"); int i; for (i = 0; i < num_dates; i++) { if (compare_date(dates[i], current_date) < 0) { print_date(dates[i]); } } printf("After:\n"); for (i = 0; i < num_dates; i++) { if (compare_date(dates[i], current_date) >= 0) { print_date(dates[i]); } } return 0; } ``` 这份代码首先定义了一个 `struct date` 结构体,用来表示日历中的某一天。然后实现了三个函数: - `print_date()`:用来打印一个日期; - `compare_date()`:用来比较两个日期的大小,如果第一个日期比第二个日期早,则返回 -1;如果两个日期相等,则返回 0;否则返回 1; - `sort_dates()`:用来对一个日期数组进行排序,采用冒泡排序算法,按照从早到晚的顺序排序。 接下来的 `main()` 函数读入输入数据,将它们存储到日期数组中,然后调用 `sort_dates()` 函数进行排序。最后读入一个 `current_date`,并且将日期数组分成两个部分,一个是 `current_date` 之前的日期,一个是 `current_date` 之后的日期,并分别打印输出。 注意,这份代码假设输入数据格式正确,没有做太多的错误检查。如果需要更加健壮的代码,还需要进行更多的错误检查和异常处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值