微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

结合默认价格和特价以及构建时间表

如何解决结合默认价格和特价以及构建时间表

我有 2 个需要组合/相交的数据集。 我正在为此使用 Laravel 集合。

认价目表

  • 结束日期是可选的。缺少结束日期意味着价格有效直至另行通知
项目 每件商品的价格 开始日期 结束日期
牛奶 10 1-1 月 1 月 15 日
牛奶 11 1 月 16 日

特殊价目表(每位客户)

  • 特价总是有截止日期
客户 项目 价格 开始日期 结束日期
亚当 牛奶 8 1 月 2 日 1 月 8 日
迈克 牛奶 8 1 月 9 日 1 月 20 日

这是我的预期输出(对于亚当)

项目 价格 开始日期 结束日期
牛奶 10 1-1 月 1-1 月
牛奶 8 1 月 2 日 1 月 8 日
牛奶 10 1 月 9 日 1 月 15 日
牛奶 11 1 月 16 日

这是我的预期输出(对于 Mike)

项目 价格 开始日期 结束日期
牛奶 10 1-1 月 1 月 8 日
牛奶 8 1 月 9 日 1 月 20 日
牛奶 11 1 月 21 日至 1 月

我的思考过程(每个客户)如下:-

  1. 合并两个列表
  2. 根据 end_date 插入/创建另一条记录并将其设置为第二天(但我不知道价格)
  3. start_date排序

这是我到目前为止所做的(我现在只为 Adam

$default = collect([
    ['item' => 'Milk','price' => 10,'start_date' => Carbon::parse('2021-01-01'),'end_date' => Carbon::parse('2021-01-15')],['item' => 'Milk','price' => 9,'start_date' => Carbon::parse('2021-01-16'),'end_date' => null],]);

$special = collect([
    ['item' => 'Milk','price' => 8,'start_date' => Carbon::parse('2021-01-02'),'end_date' => Carbon::parse('2021-01-05')],]);

$combined = $default->merge($special);

$endDates = $combined->whereNotNull('end_date')->map(function($item,$key){
    return collect([
        'item' => 'Milk','price' => $item['price'],'start_date' => $item['end_date']->addDay()->startOfDay(),'end_date' => null,]);
});

$unsorted = $combined->merge($endDates);

$sorted = $unsorted->sortBy(function ($item,$key){
    return $item['start_date']->valueOf();
});

return $sorted->values()->all();

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。