FamilyGroupImporter.php 5.2 KB
<?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);
        }
    }
}