如何解决结合默认价格和特价以及构建时间表
我有 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 月 |
我的思考过程(每个客户)如下:-
- 合并两个列表
- 根据
end_date
插入/创建另一条记录并将其设置为第二天(但我不知道价格) - 按
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 举报,一经查实,本站将立刻删除。