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

问题描述

我有 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 (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...