FamilyGroupImporter.php
5.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
<?php
/**
+-----------------------------------------------------------------------------------------------------------------------
* 导入类 : 农民 导入 数据 操作类
+-----------------------------------------------------------------------------------------------------------------------
*
* PHP version 7
*
* @category App\Admin\Extensions\Importer
* @package App\Admin\Extensions\Importer
* @author Richer <yangzi1028@163.com>
* @date 2023年2月23日16:42:30
* @copyright 2021-2022 Richer (http://www.Richer.com/)
* @license http://www.Richer.com/ License
* @link http://www.Richer.com/
*/
namespace App\Admin\Extensions\Importer;
use App\Models\User\Group;
use App\Models\User\Family;
use App\Models\User\GroupItem;
use App\Models\User\User;
use Illuminate\Support\Arr;
use Illuminate\Support\Facades\DB;
use Maatwebsite\Excel\Concerns\ToCollection;
use Illuminate\Support\Collection;
/**
* Class FamilyGroupImporter
*
* @category App\Admin\Extensions\Importer
* @package App\Admin\Extensions\Importer
* @author Richer <yangzi1028@163.com>
* @date 2021年11月08日14:45:16
* @copyright 2021-2022 Richer (http://www.Richer.com/)
* @license http://www.Richer.com/ License
* @link http://www.Richer.com/
*/
class FamilyGroupImporter implements ToCollection
{
/**
* 使用 ToCollection
* @param Collection $rows
* @return User|null
*/
public function collection(Collection $rows)
{
//如果需要去除表头
unset($rows[0]);
//$rows 是数组格式
$this->createData($rows);
}
/**
* 创建数据
*
* @param $rows
*/
public function createData($rows)
{
$group_names = [];
$family_names = [];
$array = $rows->map(function ($row) use (&$group_names, &$family_names) {
$group_name = Arr::get($row, 1);
$family_name = Arr::get($row, 2);
$group_names[] = $group_name;
$family_names[] = $family_name;
return [
'group_name' => $group_name,
'family_name' => $family_name,
];
})->toArray();
$array = array_values(array_filter($array));
// 去重
$group_names = array_unique($group_names);
$family_names = array_unique($family_names);
// 判断
if ($group_names && $family_names) {
$groups = Group::whereIn('name', $group_names)->get()->map(function ($group) {
return [
'group_id' => $group->id,
'group_name' => $group->name,
];
});
$family_ids = [];
$families = Family::whereIn('name', $family_names)->get()->map(function ($family) use ($groups, $array, &$family_ids) {
$family_name = $family->name;
$group_name = '';
$group_id = 0;
// 获取该家庭对应的小组
foreach ($array as $vo) {
if ($vo['family_name'] == $family_name) {
$group_name = $vo['group_name'];
break;
}
}
if ($group_name) {
$group = $groups->where('group_name', $group_name)->first();
$group_id = Arr::get($group, 'group_id');
}
$family_ids[] = $family->id;
return [
'id' => $family->id,
'group_id' => $group_id,
];
})->toArray();
$families = array_filter($families);
if ($families) {
app(Family::class)->updateBatch($families);
// 更新成功后需要更新家庭的全部用户
$users = User::whereIn('family_id', $family_ids)->get()->map(function ($user) use ($families) {
$group_id = 0;
foreach ($families as $family) {
if ($user->family_id == Arr::get($family, 'id')) {
$group_id = Arr::get($family, 'group_id');
break;
}
}
return [
'id' => $user->id,
'group_id' => $group_id,
];
})->toArray();
$users = array_filter($users);
if ($users) {
app(User::class)->updateBatch($users);
}
}
// if ($family_ids) {
//// DB::beginTransaction();
//// try {
// // 先将原先的记录删除,然后在批量增加
// $result = GroupItem::whereIn('family_id', $family_ids)->delete();
// dump($result);
//
// if ($result) {
// // 删除成功后加批量增加
// DB::table(GroupItem::TABLE)->insert($families);
// DB::commit();
// }
//// } catch (\Exception $e) {
//// DB::rollBack();
//// }
// }
// dd(1);
}
}
}