FamiliesController.php 11.4 KB
<?php
/**
+-----------------------------------------------------------------------------------------------------------------------
 * 管理端控制层: 用户端用户 控制类
+-----------------------------------------------------------------------------------------------------------------------
 *
 * PHP version 7
 *
 * @category  App\Admin\Controllers\User
 * @package   App\Admin\Controllers\User
 * @author    Richer <yangzi1028@163.com>
 * @date      2022年5月25日11:16:12
 * @copyright 2020-2022 Richer (http://www.Richer.com/)
 * @license   http://www.Richer.com/ License
 * @link      http://www.Richer.com/
 */
namespace App\Admin\Controllers\User;

use App\Admin\Controllers\BaseController;
use App\Admin\Forms\User\FamilyForm;
use App\Admin\Grids\User\FamilyGrid;
use App\Admin\Rewrite\Facades\Admin;
use App\Models\Activity\ActivityUser;
use App\Models\User\Family;
use App\Models\User\User;
use App\Transformers\Activity\ActivityUserTransformer;
use Exception;
use Illuminate\Database\Eloquent\ModelNotFoundException;
use Illuminate\Http\JsonResponse;
use Illuminate\Support\Arr;
use Illuminate\Support\Facades\DB;

/**
 * Class FamiliesController.
 *
 * @category  App\Admin\Controllers\User
 * @package   App\Admin\Controllers\User
 * @author    Richer <yangzi1028@163.com>
 * @date      2022年5月25日11:16:12
 * @copyright 2020-2022 Richer (http://www.Richer.com/)
 * @license   http://www.Richer.com/ License
 * @link      http://www.Richer.com/
 */
class FamiliesController extends BaseController
{
    // 使用Grid和Form的trait
    use FamilyGrid, FamilyForm;

    protected $message = '';

    /**
     * FamiliesController constructor.
     *
     * @param Family $model 注入model
     */
    public function __construct(Family $model)
    {
        // 资源显示的中名称
        $this->title            = $model::OBJ_NAME_ZH;
        // 是否可查看
        $this->can_view         = false;
        // 是否可新增
        $this->can_create       = true;
        // 是否可编辑
        $this->can_edit         = true;
        // 是否可删除
        $this->can_delete       = false;
        // 执行父类构造方法
        parent::__construct($model);
    }

    /**
     * 添加组长页面
     *
     * @param  $id
     */
    public function header($id)
    {
        // 获取数据,如果没有获取到抛出异常
        $role = User::HEADER;
        $temple = "admin::family.user-template";
        return view('admin::system.search-template', compact('id', 'role', 'temple')) ;
        return view('admin::family.user', compact('id', 'role')) ;
    }

    /**
     * 添加组员页面
     *
     * @param  $id
     */
    public function farmer($id)
    {
        // 获取数据,如果没有获取到抛出异常
        $role = User::FARMER;
        $temple = "admin::family.user-template";
        return view('admin::system.search-template', compact('id', 'role', 'temple')) ;
        return view('admin::family.user', compact('id', 'role')) ;
    }

    /**
     * 添加用户
     *
     * @param integer $id 主键id
     *
     * @return JsonResponse
     */
    public function addSite($id)
    {
        DB::beginTransaction();
        try {
            // 获取数据,如果没有获取到抛出异常
            $model = $this->model->findOrFail($id);

            $role = request('role');

            // 获取IDS
            $ids = request('ids');
            $ids = explode(',', $ids);
            if (!$ids || !is_array($ids)) {
                return response()->json(
                    [
                        'code'      => 1,
                        'message'   => __('请选择需要添加的农户。'),
                    ]
                );
            }

            User::whereIn('id', $ids)->update(['family_id' => $id, 'group_id' => $model->group_id]);
            if ($role === User::HEADER) {
                $user_id = Arr::first($ids);
                //  如果是户主需要将家庭的user_id设置为 户主ID
                $model->user_id = $user_id;
                $model->save();
            }
            DB::commit();
            return response()->json(
                [
                    'code'    => 0,
                    'status'  => 1,
                    'message' =>__('operate_succeeded'),
                ]
            );
        } catch (Exception $e) {
            DB::rollBack();
            return response()->json(
                [
                    'code'    => 1,
                    'status'  => 0,
                    'message' => $e->getMessage(),
                ]
            );
        }
    }

    /**
     * 添加用户
     *
     * @param integer $id 主键id
     *
     * @return JsonResponse
     */
//    public function addUser($id)
//    {
//        $family_id   =  request('family_id');
//        if (!$family_id) {
//            return response()->json(
//                [
//                    'code'  => 1,
//                    'message' => __('请选择家庭!'),
//                ]
//            );
//        }
//        $role =  request('role', User::FARMER);
//        $name =  request('name');
//        if (($result = $this->valid($name, 'name')) !== true) {
//            return $result;
//        }
//
//        $mobile =  request('mobile');
//        if (($result = $this->valid($mobile, 'mobile')) !== true) {
//            return $result;
//        }
//
////        $house_number =  request('house_number');
////        if (($result = $this->valid($house_number, 'house_number')) !== true) {
////            return $result;
////        }
//
//        // 查询手机号是否存在
//        $user = User::where('mobile', $mobile)->first();
//        if ($user) {
//            return response()->json(
//                [
//                    'code'  => 1,
//                    'message' => '你输入的手机号已存在!',
//                ]
//            );
//        }
//
//        try {
//            // 获取数据,如果没有获取到抛出异常
//            $model = $this->model->findOrFail($id);
//
//            $user = $model->users()->create([
//                'name'      => $name,
//                'group_id'  => $model->group_id,
//                'mobile'    => $mobile,
//                'role'      => $role,
//                'registered_at' => now()->toDateTimeString(),
//                'registered_ip' => request()->ip(),
//            ]);
//
//            if ($role === User::HEADER) {
//                $model->user_id = $user->id;
//                $model->save();
//            }
//
//            return response()->json(
//                [
//                    'code'    => 0,
//                    'status'  => 1,
//                    'message' =>__('operate_succeeded'),
//                ]
//            );
//        } catch (ModelNotFoundException $e) {
//            return response()->json(
//                [
//                    'code'    => 1,
//                    'status'  => 0,
//                    'message' => __('no_data'),
//                ]
//            );
//        }
//    }

    /**
     * 参数验证
     *
     * @param $value
     * @param $field
     * @return bool|JsonResponse
     */
    public function valid($value, $field)
    {
        if (!$value) {
            return response()->json(
                [
                    'code'    => 1,
                    'status'  => 0,
                    'message' =>__('please') .__('input') . __($field),
                ]
            );
//            $this->message = __('please') .__('input') . __($field);
//            return false;
        }

        return true;
    }

    /**
     * 搜索 家庭
     *
     * @return JsonResponse
     */
    public function searchFamiles()
    {
        $list = $this->model->with(['user'])
        ->when($q = request('user_name'), function ($query) use ($q) {
            $query->whereHas('user', function ($query) use ($q) {
                $query->where('name', 'like', "%$q%");
            });
        })
        ->when($q = request('user_mobile'), function ($query) use ($q) {
            $query->whereHas('user', function ($query) use ($q) {
                $query->where('mobile', 'like', "%$q%");
            });
        })
        ->when($q = request('name'), function ($query) use ($q) {
            $query->where('name', 'LIKE', "%$q%");
        })

        ->when($q = request('number'), function ($query) use ($q) {
            $query->where('number', 'LIKE', "%$q%");
        })

        ->when($q = request('address'), function ($query) use ($q) {
            $query->where('address', 'LIKE', "%$q%");
        })
        ->where('group_id', 0)
        ->get()->map(function ($item) {
            return [
                'id'    => $item->id,
                'name'  => (string)$item->name,
                'number' => (string)$item->number,
                'user_name' =>  (string)optional($item->user)->name,
                'user_mobile' =>  (string)optional($item->user)->mobile,
                'address' => (string)$item->address,
                'description' => (string)$item->description,
                'created_at' => format_date($item->created_at),
            ];
        });
        return response()->json(
            [
                'code'    => 0,
                'message' =>__('operate_succeeded'),
                'list' => $list,
                'total' => $list->count(),
            ]
        );
    }

    /**
     * 从小组中移除
     *
     * @return JsonResponse
     */
    public function removeGroup($id)
    {
        try {
            // 获取数据,如果没有获取到抛出异常
            $model = $this->model->findOrFail($id);
            $model->group_id = 0;
            $model->save();

            // 同时所有的用户也删除
            User::where('family_id', $id)->update(['group_id' => 0]);

            return response()->json(
                [
                    'code'    => 0,
                    'message' =>__('operate_succeeded'),
                ]
            );
        } catch (ModelNotFoundException $e) {
            return response()->json(
                [
                    'code'    => 1,
                    'message' => __('no_data'),
                ]
            );
        }
    }

    /**
     * 添加组长页面
     *
     * @param  $id
     */
    public function activityRecords($id)
    {
        try {
            // 获取数据,如果没有获取到抛出异常
            $model = $this->model->findOrFail($id);

            switch (request('type')) {
                case 'year':
                    $query = $model->yearActivityRecords();
                    break;
                case 'month':
                    $query = $model->monthActivityRecords();
                    break;
                default:
                    $query = $model->activityRecords();
                    break;
            }

            $list = $query->with(['user','activity'])
//            ->where('status', ActivityUser::ATTENDED)
                ->latest()
                ->paginate(request('per_page', 10));
            $list = $this->renderPaginator($list, app(ActivityUserTransformer::class));
//        dd($list);
            // 获取数据,如果没有获取到抛出异常
            return view('admin::family.activity-records', compact('id', 'list')) ;
        } catch (ModelNotFoundException $e) {
            $list = [];
            return view('admin::family.activity-records', compact('id', 'list')) ;
        }
    }
}