Kaynağa Gözat

页面+接口对接

gorden 11 ay önce
ebeveyn
işleme
19078bb144

+ 101 - 0
app/admin/controller/ServiceTeamController.php

@@ -0,0 +1,101 @@
+<?php
+
+namespace app\admin\controller;
+
+use app\admin\service\ServiceTeamService;
+use app\admin\validate\sys_manage\DeptValidate;
+use support\Request;
+
+class ServiceTeamController
+{
+    /**
+     * @Desc 部门列表
+     * @Author Gorden
+     * @Date 2024/2/21 10:29
+     *
+     * @param Request $request
+     * @return \support\Response
+     */
+    public function deptList(Request $request)
+    {
+        $page = $request->get('page', 1);
+        $limit = $request->get('pageSize', 10);
+        $keywords = format_string($request->get('keywords', ''));
+
+        return ServiceTeamService::deptList($page, $limit, $keywords);
+    }
+
+    /**
+     * @Desc 部门详情
+     * @Author Gorden
+     * @Date 2024/2/21 10:35
+     *
+     * @param $id
+     * @return \support\Response
+     */
+    public function deptInfo($id)
+    {
+        return ServiceTeamService::deptInfo($id);
+    }
+
+    /**
+     * @Desc 创建部门
+     * @Author Gorden
+     * @Date 2024/2/21 9:22
+     *
+     * @param Request $request
+     * @return \support\Response
+     */
+    public function addDept(Request $request)
+    {
+        $validate = new DeptValidate();
+        if (!$validate->scene('service_team_add')->check($request->post())) {
+            return json_fail($validate->getError());
+        }
+
+        return ServiceTeamService::insertDept($request->post());
+    }
+
+    /**
+     * @Desc 修改部门
+     * @Author Gorden
+     * @Date 2024/2/21 10:15
+     *
+     * @param $id
+     * @param Request $request
+     * @return \support\Response
+     */
+    public function updateDept($id, Request $request)
+    {
+        $validate = new DeptValidate();
+        if (!$validate->scene('service_team_update')->check($request->post())) {
+            return json_fail($validate->getError());
+        }
+
+        return ServiceTeamService::updateDept($id, $request->post());
+    }
+
+    /**
+     * @Desc 修改部门状态
+     * @Author Gorden
+     * @Date 2024/2/21 10:41
+     *
+     * @param $id
+     * @param $status
+     * @return \support\Response
+     */
+    public function updateStatus($id, Request $request)
+    {
+        $validate = new DeptValidate();
+        if (!$validate->scene('update_status')->check($request->post())) {
+            return json_fail($validate->getError());
+        }
+
+        return ServiceTeamService::updateStatus($id, $request->post('dept_status'));
+    }
+
+    public function delDept(Request $request)
+    {
+        return ServiceTeamService::delDept($request);
+    }
+}

+ 51 - 0
app/admin/controller/device/DeviceController.php

@@ -0,0 +1,51 @@
+<?php
+
+namespace app\admin\controller\device;
+
+use app\admin\validate\device\DeviceValidate;
+use app\controller\Curd;
+use app\model\Device;
+use app\model\SysSerial;
+use support\Request;
+use support\Response;
+
+class DeviceController extends Curd
+{
+    public function __construct()
+    {
+        $this->model = new Device();
+        $this->validate = true;
+        $this->validateClass = new DeviceValidate();
+    }
+
+    public function select(Request $request): Response
+    {
+        [$where, $format, $limit, $field, $order] = $this->selectInput($request);
+        $order = $request->get('order', 'desc');
+        $field = $field ?? 'device_addtimes';
+        $query = $this->doSelect($where, $field, $order);
+        return $this->doFormat($query, $format, $limit);
+    }
+
+    protected function insertInput(Request $request): array
+    {
+        $data = $this->inputFilter($request->post());
+        $data['device_id'] = $this->generateDeviceId();
+        return $data;
+    }
+
+    /**
+     * @Desc 生成设备ID
+     * @Author Gorden
+     * @Date 2024/3/26 13:32
+     *
+     * @return string
+     * @throws \support\exception\BusinessException
+     */
+    private function generateDeviceId()
+    {
+        $id = SysSerial::getSerial();
+
+        return "DE".str_pad($id,16,'0',STR_PAD_LEFT).random_string(8);
+    }
+}

+ 48 - 0
app/admin/controller/device/LedgerController.php

@@ -0,0 +1,48 @@
+<?php
+
+namespace app\admin\controller\device;
+
+use app\admin\validate\device\LedgerValidate;
+use app\controller\Curd;
+use app\model\DeviceLedger;
+use support\Request;
+use support\Response;
+
+class LedgerController extends Curd
+{
+    public function __construct()
+    {
+        $this->model = new DeviceLedger();
+        $this->validate = true;
+        $this->validateClass = new LedgerValidate();
+    }
+
+    /**
+     * @Desc 列表
+     * @Author Gorden
+     * @Date 2024/3/26 11:17
+     *
+     * @param Request $request
+     * @return Response
+     * @throws \support\exception\BusinessException
+     */
+    public function select(Request $request): Response
+    {
+        [$where, $format, $limit, $field, $order] = $this->selectInput($request);
+        $order = $request->get('order', 'desc');
+        $field = $field ?? 'device_ledger_addtimes';
+        $query = $this->doSelect($where, $field, $order);
+        return $this->doFormat($query, $format, $limit);
+    }
+
+    public function selectList()
+    {
+        $class = get_class($this->model);
+        $data = $class::where('device_ledger_status', 'ACTIVED')
+            ->select('device_ledger_id', 'device_ledger_name')
+            ->get()
+            ->toArray();
+
+        return json_success('', $data);
+    }
+}

+ 8 - 0
app/admin/controller/life/FarmLandController.php

@@ -34,6 +34,14 @@ class FarmLandController extends Curd
         return $this->doFormat($query, $format, $limit);
     }
 
+    /**
+     * @Desc 查询后数据处理
+     * @Author Gorden
+     * @Date 2024/3/22 10:56
+     *
+     * @param $items
+     * @return mixed
+     */
     public function afterQuery($items)
     {
         foreach ($items as &$item){

+ 4 - 0
app/admin/controller/marketing/DeptPremisesController.php

@@ -53,6 +53,10 @@ class DeptPremisesController extends Curd
         if ($this->validate && !$this->validateClass->scene('add_premises')->check($request->post())) {
             return json_fail($this->validateClass->getError());
         }
+        // 验证编号是否存在
+        if (SysDept::checkExist('营业场所','dept_code',$request->post('dept_code'))){
+            return json_fail('编号重复,请重新输入');
+        }
 
         Db::beginTransaction();
         try {

+ 101 - 0
app/admin/controller/marketing/TeamController.php

@@ -0,0 +1,101 @@
+<?php
+
+namespace app\admin\controller\marketing;
+
+use app\admin\service\marketing\TeamService;
+use app\admin\validate\sys_manage\DeptValidate;
+use support\Request;
+
+class TeamController
+{
+    /**
+     * @Desc 部门列表
+     * @Author Gorden
+     * @Date 2024/2/21 10:29
+     *
+     * @param Request $request
+     * @return \support\Response
+     */
+    public function deptList(Request $request)
+    {
+        $page = $request->get('page', 1);
+        $limit = $request->get('pageSize', 10);
+        $keywords = format_string($request->get('keywords', ''));
+
+        return TeamService::deptList($page, $limit, $keywords);
+    }
+
+    /**
+     * @Desc 部门详情
+     * @Author Gorden
+     * @Date 2024/2/21 10:35
+     *
+     * @param $id
+     * @return \support\Response
+     */
+    public function deptInfo($id)
+    {
+        return TeamService::deptInfo($id);
+    }
+
+    /**
+     * @Desc 创建部门
+     * @Author Gorden
+     * @Date 2024/2/21 9:22
+     *
+     * @param Request $request
+     * @return \support\Response
+     */
+    public function addDept(Request $request)
+    {
+        $validate = new DeptValidate();
+        if (!$validate->scene('marketing_team_add')->check($request->post())) {
+            return json_fail($validate->getError());
+        }
+
+        return TeamService::insertDept($request->post());
+    }
+
+    /**
+     * @Desc 修改部门
+     * @Author Gorden
+     * @Date 2024/2/21 10:15
+     *
+     * @param $id
+     * @param Request $request
+     * @return \support\Response
+     */
+    public function updateDept($id, Request $request)
+    {
+        $validate = new DeptValidate();
+        if (!$validate->scene('marketing_team_update')->check($request->post())) {
+            return json_fail($validate->getError());
+        }
+
+        return TeamService::updateDept($id, $request->post());
+    }
+
+    /**
+     * @Desc 修改部门状态
+     * @Author Gorden
+     * @Date 2024/2/21 10:41
+     *
+     * @param $id
+     * @param $status
+     * @return \support\Response
+     */
+    public function updateStatus($id, Request $request)
+    {
+        $validate = new DeptValidate();
+        if (!$validate->scene('update_status')->check($request->post())) {
+            return json_fail($validate->getError());
+        }
+
+        return TeamService::updateStatus($id, $request->post('dept_status'));
+    }
+
+    public function delDept(Request $request)
+    {
+        return TeamService::delDept($request);
+    }
+}

+ 101 - 0
app/admin/controller/medical/TeamController.php

@@ -0,0 +1,101 @@
+<?php
+
+namespace app\admin\controller\medical;
+
+use app\admin\service\medical\TeamService;
+use app\admin\validate\sys_manage\DeptValidate;
+use support\Request;
+
+class TeamController
+{
+    /**
+     * @Desc 部门列表
+     * @Author Gorden
+     * @Date 2024/2/21 10:29
+     *
+     * @param Request $request
+     * @return \support\Response
+     */
+    public function deptList(Request $request)
+    {
+        $page = $request->get('page', 1);
+        $limit = $request->get('pageSize', 10);
+        $keywords = format_string($request->get('keywords', ''));
+
+        return TeamService::deptList($page, $limit, $keywords);
+    }
+
+    /**
+     * @Desc 部门详情
+     * @Author Gorden
+     * @Date 2024/2/21 10:35
+     *
+     * @param $id
+     * @return \support\Response
+     */
+    public function deptInfo($id)
+    {
+        return TeamService::deptInfo($id);
+    }
+
+    /**
+     * @Desc 创建部门
+     * @Author Gorden
+     * @Date 2024/2/21 9:22
+     *
+     * @param Request $request
+     * @return \support\Response
+     */
+    public function addDept(Request $request)
+    {
+        $validate = new DeptValidate();
+        if (!$validate->scene('medical_team_add')->check($request->post())) {
+            return json_fail($validate->getError());
+        }
+
+        return TeamService::insertDept($request->post());
+    }
+
+    /**
+     * @Desc 修改部门
+     * @Author Gorden
+     * @Date 2024/2/21 10:15
+     *
+     * @param $id
+     * @param Request $request
+     * @return \support\Response
+     */
+    public function updateDept($id, Request $request)
+    {
+        $validate = new DeptValidate();
+        if (!$validate->scene('medical_team_update')->check($request->post())) {
+            return json_fail($validate->getError());
+        }
+
+        return TeamService::updateDept($id, $request->post());
+    }
+
+    /**
+     * @Desc 修改部门状态
+     * @Author Gorden
+     * @Date 2024/2/21 10:41
+     *
+     * @param $id
+     * @param $status
+     * @return \support\Response
+     */
+    public function updateStatus($id, Request $request)
+    {
+        $validate = new DeptValidate();
+        if (!$validate->scene('update_status')->check($request->post())) {
+            return json_fail($validate->getError());
+        }
+
+        return TeamService::updateStatus($id, $request->post('dept_status'));
+    }
+
+    public function delDept(Request $request)
+    {
+        return TeamService::delDept($request);
+    }
+}

+ 10 - 0
app/admin/controller/member/FamilyController.php

@@ -5,9 +5,19 @@ namespace app\admin\controller\member;
 use app\admin\service\member\FamilyService;
 use app\controller\Curd;
 use app\model\Family;
+use support\Request;
 
 class FamilyController
 {
+    public function list(Request $request)
+    {
+        $page = $request->get('page', 1);
+        $pageSize = $request->get('pageSize', 20);
+        $keywords = $request->get('keywords', '');
+
+        return FamilyService::list($page, $pageSize, $keywords);
+    }
+
     /**
      * @Desc 家庭列表
      * @Author Gorden

+ 37 - 0
app/admin/controller/member/MemberController.php

@@ -0,0 +1,37 @@
+<?php
+
+namespace app\admin\controller\member;
+
+use app\admin\service\member\MemberService;
+use app\admin\validate\member\MemberValidate;
+use support\Request;
+
+class MemberController
+{
+    public function list(Request $request)
+    {
+        $page = $request->get('page',1);
+        $pageSize = $request->get('pageSize',10);
+        $keywords = $request->get('keywords','');
+
+        return MemberService::list($page,$pageSize,$keywords);
+    }
+
+    /**
+     * @Desc 添加会员
+     * @Author Gorden
+     * @Date 2024/3/25 13:40
+     *
+     * @param Request $request
+     * @return \support\Response
+     */
+    public function add(Request $request)
+    {
+        $validate = new MemberValidate();
+        if (!$validate->scene('add')->check($request->post())) {
+            return json_fail($validate->getError());
+        }
+
+        return MemberService::add($request->post());
+    }
+}

+ 187 - 0
app/admin/service/ServiceTeamService.php

@@ -0,0 +1,187 @@
+<?php
+
+namespace app\admin\service;
+
+use app\model\SysDept;
+use support\Db;
+use support\exception\BusinessException;
+use support\Request;
+
+class ServiceTeamService
+{
+    const MEDICAL_DEPT_CATEGORY = '服务团队';
+
+    /**
+     * @Desc 服务团队列表
+     * @Author Gorden
+     * @Date 2024/2/21 10:28
+     *
+     * @param $page
+     * @param $limit
+     * @param $keywords
+     * @return \support\Response
+     */
+    public static function deptList($page, $pageSize, $keywords)
+    {
+        $rows = SysDept::select('dept_id', 'dept_name')
+            ->where('dept_category', self::MEDICAL_DEPT_CATEGORY)
+            ->when($keywords != '', function ($query) use ($keywords) {
+                $query->where('dept_name', 'like', '%' . $keywords . '%');
+            })
+            ->orderBy('dept_addtimes', 'DESC')
+            ->forPage($page, $pageSize)
+            ->get()
+            ->toArray();
+        $total = SysDept::where('dept_category', self::MEDICAL_DEPT_CATEGORY)
+            ->when($keywords != '', function ($query) use ($keywords) {
+                $query->where('dept_name', 'like', '%' . $keywords . '%');
+            })->count();
+
+        return json_success('', compact('rows', 'page', 'pageSize', 'total'));
+    }
+
+    /**
+     * @Desc 服务团队详情
+     * @Author Gorden
+     * @Date 2024/2/21 10:35
+     *
+     * @param $id
+     * @return \support\Response
+     */
+    public static function deptInfo($id)
+    {
+        $dept = SysDept::find($id);
+        if (!$dept) {
+            return json_fail('服务团队不存在');
+        }
+
+        $dept = $dept->toArray();
+        return json_success('', $dept);
+    }
+
+    /**
+     * @Desc 创建服务团队
+     * @Author Gorden
+     * @Date 2024/2/21 9:22
+     *
+     * @param $params
+     * @return \support\Response
+     */
+    public static function insertDept($params)
+    {
+        try {
+            $data = [
+                'dept_category' => self::MEDICAL_DEPT_CATEGORY,
+                'dept_name' => $params['dept_name'],
+                'dept_addtimes' => time()
+            ];
+
+            $deptId = SysDept::insertGetId($data);
+            if (!$deptId) {
+                throw new BusinessException('创建服务团队失败');
+            }
+        } catch (BusinessException $e) {
+            return json_fail($e->getMessage());
+        } catch (\Exception $e) {
+            dump($e->getMessage());
+            return json_fail('创建服务团队失败');
+        }
+
+        return json_success('服务团队创建成功');
+    }
+
+    /**
+     * @Desc 修改服务团队
+     * @Author Gorden
+     * @Date 2024/2/21 10:15
+     *
+     * @param $id
+     * @param $params
+     * @return \support\Response
+     */
+    public static function updateDept($id, $params)
+    {
+        $dept = SysDept::where('dept_id', $id)->first();
+        if (!$dept) {
+            return json_fail('服务团队不存在');
+        }
+
+        try {
+            $data = [
+                'dept_name' => $params['dept_name'],
+            ];
+            // 修改失败,异常
+            if (!SysDept::where('dept_id', $id)->update($data)) {
+                throw new BusinessException('修改服务团队失败');
+            }
+        } catch (BusinessException $e) {
+            return json_fail($e->getMessage());
+        } catch (\Exception $e) {
+            return json_fail('修改服务团队失败');
+        }
+
+        return json_success('修改服务团队成功');
+    }
+
+    /**
+     * @Desc 修改服务团队状态
+     * @Author Gorden
+     * @Date 2024/2/21 10:41
+     *
+     * @param $id
+     * @param $status
+     * @return \support\Response
+     */
+    public static function updateStatus($id, $status)
+    {
+        try {
+            if (!SysDept::where('dept_id', $id)->update(['dept_status' => $status])) {
+                throw new \Exception('服务团队状态修改失败');
+            }
+        } catch (\Exception $e) {
+            return json_fail('服务团队状态修改失败');
+        }
+
+        return json_success('服务团队状态修改成功');
+    }
+
+    /**
+     * @Desc 删除服务团队
+     * @Author Gorden
+     * @Date 2024/2/21 10:48
+     *
+     * @param $id
+     * @return \support\Response
+     */
+    public static function delDept(Request $request)
+    {
+        $ids = $request->post('dept_id');
+        if (!$ids) {
+            return json_fail("数据错误");
+        }
+        try {
+            if (is_array($ids)) {
+                SysDept::whereIn('dept_id', $ids)->delete();
+            } else {
+                SysDept::where('dept_id', $ids)->delete();
+            }
+        } catch (\Exception $e) {
+            return json_fail('删除服务团队失败');
+        }
+
+        return json_success('删除服务团队成功');
+    }
+
+    /**
+     * @Desc 检查服务团队是否存在
+     * @Author Gorden
+     * @Date 2024/2/21 13:37
+     *
+     * @param $deptId
+     * @return bool
+     */
+    public static function checkDeptExist($deptId)
+    {
+        return SysDept::where('dept_id', $deptId)->exists();
+    }
+}

+ 193 - 0
app/admin/service/marketing/TeamService.php

@@ -0,0 +1,193 @@
+<?php
+
+namespace app\admin\service\marketing;
+
+use app\model\SysDept;
+use support\Db;
+use support\exception\BusinessException;
+use support\Request;
+
+class TeamService
+{
+    const DEPT_CATEGORY = '营销团队';
+
+    /**
+     * @Desc 营销团队列表
+     * @Author Gorden
+     * @Date 2024/2/21 10:28
+     *
+     * @param $page
+     * @param $limit
+     * @param $keywords
+     * @return \support\Response
+     */
+    public static function deptList($page, $pageSize, $keywords)
+    {
+        $rows = SysDept::with([
+            'premises' => function ($query) {
+                $query->select('dept_id', 'dept_name');
+            }
+        ])->select('dept_id', 'dept_name', 'dept_super_id')
+            ->where('dept_category', self::DEPT_CATEGORY)
+            ->when($keywords != '', function ($query) use ($keywords) {
+                $query->where('dept_name', 'like', '%' . $keywords . '%');
+            })
+            ->orderBy('dept_addtimes', 'DESC')
+            ->forPage($page, $pageSize)
+            ->get()
+            ->toArray();
+        $total = SysDept::where('dept_category', self::DEPT_CATEGORY)
+            ->when($keywords != '', function ($query) use ($keywords) {
+                $query->where('dept_name', 'like', '%' . $keywords . '%');
+            })->count();
+
+        return json_success('', compact('rows', 'page', 'pageSize', 'total'));
+    }
+
+    /**
+     * @Desc 营销团队详情
+     * @Author Gorden
+     * @Date 2024/2/21 10:35
+     *
+     * @param $id
+     * @return \support\Response
+     */
+    public static function deptInfo($id)
+    {
+        $dept = SysDept::find($id);
+        if (!$dept) {
+            return json_fail('营销团队不存在');
+        }
+
+        $dept = $dept->toArray();
+        return json_success('', $dept);
+    }
+
+    /**
+     * @Desc 创建营销团队
+     * @Author Gorden
+     * @Date 2024/2/21 9:22
+     *
+     * @param $params
+     * @return \support\Response
+     */
+    public static function insertDept($params)
+    {
+        try {
+            $data = [
+                'dept_category' => self::DEPT_CATEGORY,
+                'dept_name' => $params['dept_name'],
+                'dept_super_id' => $params['dept_super_id'],    // 这里指营销场所ID
+                'dept_addtimes' => time()
+            ];
+
+            $deptId = SysDept::insertGetId($data);
+            if (!$deptId) {
+                throw new BusinessException('创建营销团队失败');
+            }
+        } catch (BusinessException $e) {
+            return json_fail($e->getMessage());
+        } catch (\Exception $e) {
+            dump($e->getMessage());
+            return json_fail('创建营销团队失败');
+        }
+
+        return json_success('营销团队创建成功');
+    }
+
+    /**
+     * @Desc 修改营销团队
+     * @Author Gorden
+     * @Date 2024/2/21 10:15
+     *
+     * @param $id
+     * @param $params
+     * @return \support\Response
+     */
+    public static function updateDept($id, $params)
+    {
+        $dept = SysDept::where('dept_id', $id)->first();
+        if (!$dept) {
+            return json_fail('营销团队不存在');
+        }
+
+        try {
+            $data = [
+                'dept_name' => $params['dept_name'],
+                'dept_super_id' => $params['dept_super_id'],    // 这里指营销场所ID
+            ];
+            // 修改失败,异常
+            if (!SysDept::where('dept_id', $id)->update($data)) {
+                throw new BusinessException('修改营销团队失败');
+            }
+        } catch (BusinessException $e) {
+            return json_fail($e->getMessage());
+        } catch (\Exception $e) {
+            return json_fail('修改营销团队失败');
+        }
+
+        return json_success('修改营销团队成功');
+    }
+
+    /**
+     * @Desc 修改营销团队状态
+     * @Author Gorden
+     * @Date 2024/2/21 10:41
+     *
+     * @param $id
+     * @param $status
+     * @return \support\Response
+     */
+    public static function updateStatus($id, $status)
+    {
+        try {
+            if (!SysDept::where('dept_id', $id)->update(['dept_status' => $status])) {
+                throw new \Exception('营销团队状态修改失败');
+            }
+        } catch (\Exception $e) {
+            return json_fail('营销团队状态修改失败');
+        }
+
+        return json_success('营销团队状态修改成功');
+    }
+
+    /**
+     * @Desc 删除营销团队
+     * @Author Gorden
+     * @Date 2024/2/21 10:48
+     *
+     * @param $id
+     * @return \support\Response
+     */
+    public static function delDept(Request $request)
+    {
+        $ids = $request->post('dept_id');
+        if (!$ids) {
+            return json_fail("数据错误");
+        }
+        try {
+            if (is_array($ids)) {
+                SysDept::whereIn('dept_id', $ids)->delete();
+            } else {
+                SysDept::where('dept_id', $ids)->delete();
+            }
+        } catch (\Exception $e) {
+            return json_fail('删除营销团队失败');
+        }
+
+        return json_success('删除营销团队成功');
+    }
+
+    /**
+     * @Desc 检查营销团队是否存在
+     * @Author Gorden
+     * @Date 2024/2/21 13:37
+     *
+     * @param $deptId
+     * @return bool
+     */
+    public static function checkDeptExist($deptId)
+    {
+        return SysDept::where('dept_id', $deptId)->exists();
+    }
+}

+ 187 - 0
app/admin/service/medical/TeamService.php

@@ -0,0 +1,187 @@
+<?php
+
+namespace app\admin\service\medical;
+
+use app\model\SysDept;
+use support\Db;
+use support\exception\BusinessException;
+use support\Request;
+
+class TeamService
+{
+    const MEDICAL_DEPT_CATEGORY = '医疗团队';
+
+    /**
+     * @Desc 医疗团队列表
+     * @Author Gorden
+     * @Date 2024/2/21 10:28
+     *
+     * @param $page
+     * @param $limit
+     * @param $keywords
+     * @return \support\Response
+     */
+    public static function deptList($page, $pageSize, $keywords)
+    {
+        $rows = SysDept::select('dept_id', 'dept_name')
+            ->where('dept_category', self::MEDICAL_DEPT_CATEGORY)
+            ->when($keywords != '', function ($query) use ($keywords) {
+                $query->where('dept_name', 'like', '%' . $keywords . '%');
+            })
+            ->orderBy('dept_addtimes', 'DESC')
+            ->forPage($page, $pageSize)
+            ->get()
+            ->toArray();
+        $total = SysDept::where('dept_category', self::MEDICAL_DEPT_CATEGORY)
+            ->when($keywords != '', function ($query) use ($keywords) {
+                $query->where('dept_name', 'like', '%' . $keywords . '%');
+            })->count();
+
+        return json_success('', compact('rows', 'page', 'pageSize', 'total'));
+    }
+
+    /**
+     * @Desc 医疗团队详情
+     * @Author Gorden
+     * @Date 2024/2/21 10:35
+     *
+     * @param $id
+     * @return \support\Response
+     */
+    public static function deptInfo($id)
+    {
+        $dept = SysDept::find($id);
+        if (!$dept) {
+            return json_fail('医疗团队不存在');
+        }
+
+        $dept = $dept->toArray();
+        return json_success('', $dept);
+    }
+
+    /**
+     * @Desc 创建医疗团队
+     * @Author Gorden
+     * @Date 2024/2/21 9:22
+     *
+     * @param $params
+     * @return \support\Response
+     */
+    public static function insertDept($params)
+    {
+        try {
+            $data = [
+                'dept_category' => self::MEDICAL_DEPT_CATEGORY,
+                'dept_name' => $params['dept_name'],
+                'dept_addtimes' => time()
+            ];
+
+            $deptId = SysDept::insertGetId($data);
+            if (!$deptId) {
+                throw new BusinessException('创建医疗团队失败');
+            }
+        } catch (BusinessException $e) {
+            return json_fail($e->getMessage());
+        } catch (\Exception $e) {
+            dump($e->getMessage());
+            return json_fail('创建医疗团队失败');
+        }
+
+        return json_success('医疗团队创建成功');
+    }
+
+    /**
+     * @Desc 修改医疗团队
+     * @Author Gorden
+     * @Date 2024/2/21 10:15
+     *
+     * @param $id
+     * @param $params
+     * @return \support\Response
+     */
+    public static function updateDept($id, $params)
+    {
+        $dept = SysDept::where('dept_id', $id)->first();
+        if (!$dept) {
+            return json_fail('医疗团队不存在');
+        }
+
+        try {
+            $data = [
+                'dept_name' => $params['dept_name'],
+            ];
+            // 修改失败,异常
+            if (!SysDept::where('dept_id', $id)->update($data)) {
+                throw new BusinessException('修改医疗团队失败');
+            }
+        } catch (BusinessException $e) {
+            return json_fail($e->getMessage());
+        } catch (\Exception $e) {
+            return json_fail('修改医疗团队失败');
+        }
+
+        return json_success('修改医疗团队成功');
+    }
+
+    /**
+     * @Desc 修改医疗团队状态
+     * @Author Gorden
+     * @Date 2024/2/21 10:41
+     *
+     * @param $id
+     * @param $status
+     * @return \support\Response
+     */
+    public static function updateStatus($id, $status)
+    {
+        try {
+            if (!SysDept::where('dept_id', $id)->update(['dept_status' => $status])) {
+                throw new \Exception('医疗团队状态修改失败');
+            }
+        } catch (\Exception $e) {
+            return json_fail('医疗团队状态修改失败');
+        }
+
+        return json_success('医疗团队状态修改成功');
+    }
+
+    /**
+     * @Desc 删除医疗团队
+     * @Author Gorden
+     * @Date 2024/2/21 10:48
+     *
+     * @param $id
+     * @return \support\Response
+     */
+    public static function delDept(Request $request)
+    {
+        $ids = $request->post('dept_id');
+        if (!$ids) {
+            return json_fail("数据错误");
+        }
+        try {
+            if (is_array($ids)) {
+                SysDept::whereIn('dept_id', $ids)->delete();
+            } else {
+                SysDept::where('dept_id', $ids)->delete();
+            }
+        } catch (\Exception $e) {
+            return json_fail('删除医疗团队失败');
+        }
+
+        return json_success('删除医疗团队成功');
+    }
+
+    /**
+     * @Desc 检查医疗团队是否存在
+     * @Author Gorden
+     * @Date 2024/2/21 13:37
+     *
+     * @param $deptId
+     * @return bool
+     */
+    public static function checkDeptExist($deptId)
+    {
+        return SysDept::where('dept_id', $deptId)->exists();
+    }
+}

+ 23 - 0
app/admin/service/member/FamilyService.php

@@ -7,6 +7,29 @@ use app\model\FamilyMember;
 
 class FamilyService
 {
+    public static function list($page, $pageSize, $keywords)
+    {
+        $rows = Family::when($keywords != '', function ($query) use ($keywords) {
+            $query->where('family_name', 'like', '%' . $keywords . '%');
+        });
+        // 总条数
+        $total = $rows->count('family_id');
+        $rows = $rows->with([
+            'familyMember' => function ($query) {
+                $query->select('family_member_id', 'join_family_id', 'family_member_name','family_member_remark','family_member_addtimes');
+            }
+        ])->select('family_id', 'join_family_creator_member_id','family_city', 'family_name', 'family_remark', 'family_addtimes')
+            ->orderBy('family_addtimes', 'DESC')
+            ->forPage($page, $pageSize)
+            ->get()
+            ->toArray();
+        foreach ($rows as &$row){
+            $row['family_addtimes'] = date('Y-m-d H:i:s',strtotime($row['family_addtimes']));
+        }
+
+        return json_success('', compact('rows', 'page', 'pageSize', 'total'));
+    }
+
     /**
      * @Desc 家庭列表
      * @Author Gorden

+ 97 - 0
app/admin/service/member/MemberService.php

@@ -0,0 +1,97 @@
+<?php
+
+namespace app\admin\service\member;
+
+use app\model\Member;
+use app\model\MemberCert;
+use app\model\MemberInfo;
+use app\model\SysSerial;
+use support\Db;
+
+class MemberService
+{
+    public static function list($page, $pageSize, $keywords)
+    {
+        $rows = Member::when($keywords != '', function ($query) use ($keywords) {
+            $query->where('member_mobile', 'like', '%' . $keywords . '%');
+        });
+        // 总条数
+        $total = $rows->count('member_id');
+        $rows = $rows->with([
+            'info' => function ($query) {
+                $query->select('join_info_member_id', 'member_info_nickname', 'member_info_headimg');
+            }
+        ])->select('member_id', 'member_is_owner', 'member_classify', 'member_status', 'member_mobile', 'member_from')
+            ->orderBy('member_addtimes', 'DESC')
+            ->forPage($page, $pageSize)
+            ->get()
+            ->toArray();
+
+        foreach ($rows as &$row){
+            $row['info']['member_info_headimg'] = getenv('STORAGE_DOMAIN').$row['info']['member_info_headimg'];
+        }
+
+        return json_success('', compact('rows', 'page', 'pageSize', 'total'));
+    }
+
+    /**
+     * @Desc 添加会员
+     * @Author Gorden
+     * @Date 2024/3/25 13:40
+     *
+     * @param $params
+     * @return \support\Response
+     */
+    public static function add($params)
+    {
+        Db::beginTransaction();
+        try {
+            $memberId = self::generateMemberId();
+            // 先写主表,要ID
+            $memberData = [
+                'member_id' => $memberId,
+                'member_is_owner' => $params['is_owner'],
+                'member_classify' => $params['classify'],
+                'member_status' => $params['status'],
+                'member_mobile' => $params['mobile'],
+                'member_from' => $params['source'],
+                'member_addtimes' => time(),
+            ];
+            Member::insert($memberData);
+            // member cert
+            $certData = [
+                'join_cert_member_id' => $memberId,
+                'member_cert_name' => $params['cert_name'],
+                'member_cert_nbr' => $params['cert_nbr'],
+                'member_cert_birth' => $params['birth'],
+                'member_cert_gender' => $params['gender'],
+                'member_cert_addr' => $params['addr'],
+                'member_cert_face' => str_replace(getenv('STORAGE_DOMAIN'), '', $params['member_cert_face']),
+                'member_cert_photo' => str_replace(getenv('STORAGE_DOMAIN'), '', $params['member_cert_photo']),
+            ];
+            MemberCert::insert($certData);
+            // member info
+            $infoData = [
+                'join_info_member_id' => $memberId,
+                'member_info_nickname' => $params['account_name'],
+                'member_info_headimg' => str_replace(getenv('STORAGE_DOMAIN'), '', $params['avatar'])
+            ];
+            MemberInfo::insert($infoData);
+
+            Db::commit();
+        } catch (\Exception $e) {
+            Db::rollBack();
+            dump($e->getMessage() . ';line:' . $e->getLine());
+            return json_fail("数据添加失败");
+        }
+
+        return json_success('数据添加成功');
+    }
+
+    private static function generateMemberId()
+    {
+        $id = SysSerial::getSerial();
+
+        return "ME" . str_pad($id, 16, "0", STR_PAD_LEFT) . random_string(8);
+    }
+}

+ 49 - 0
app/admin/validate/device/DeviceValidate.php

@@ -0,0 +1,49 @@
+<?php
+
+namespace app\admin\validate\device;
+
+use think\Validate;
+
+class DeviceValidate extends Validate
+{
+    /**
+     * 规则
+     * @var string[]
+     */
+    protected $rule = [
+        'device_id' => 'require|alphaDash',
+        'join_device_ledger_id' => 'require|integer',
+        'device_status' => 'require|in:WAITING,PROCESSING,PENDING,ACTIVED,DISABLED',
+        'device_category' => 'max:32',
+        'device_type' => 'max:32',
+        'device_identify' => 'max:32',
+        'device_name' => 'max:32',
+        'device_config_json' => 'isJson',
+        'device_extend_json' => 'isJson',
+    ];
+
+    /**
+     * 场景
+     * @var array[]
+     */
+    protected $scene = [
+        'add' => ['join_device_ledger_id', 'device_status', 'device_category', 'device_type', 'device_identify', 'device_name', 'device_config_json', 'device_extend_json'],
+        'update' => ['device_id','join_device_ledger_id', 'device_status', 'device_category', 'device_type', 'device_identify', 'device_name', 'device_config_json', 'device_extend_json'],
+    ];
+
+    /**
+     * @Desc 验证Json
+     * @Author Gorden
+     * @Date 2024/3/26 13:36
+     *
+     * @param $value
+     * @return string|true
+     */
+    public function isJson($value){
+        if (is_json($value)){
+            return true;
+        }
+
+        return '数据格式错误';
+    }
+}

+ 40 - 0
app/admin/validate/device/LedgerValidate.php

@@ -0,0 +1,40 @@
+<?php
+
+namespace app\admin\validate\device;
+
+use think\Validate;
+
+class LedgerValidate extends Validate
+{
+    protected $rule = [
+        'device_ledger_id' => 'require|integer',
+        'join_device_ledger_category_id' => 'integer',
+        'device_ledger_status' => 'require|in:ACTIVED,DISABLED',
+        'device_ledger_category' => 'max:32',
+        'device_ledger_type' => 'max:32',
+        'device_ledger_key' => 'max:32',
+        'device_ledger_name' => 'max:32',
+        'device_ledger_protocol_json' => 'isJson',
+        'device_ledger_identify_json' => 'isJson',
+        'device_ledger_metadata_json' => 'isJson',
+        'device_ledger_command_json' => 'isJson',
+        'device_ledger_extend_json' => 'isJson'
+    ];
+
+    protected $scene = [
+        'add' => ['join_device_ledger_category_id', 'device_ledger_status', 'device_ledger_category', 'device_ledger_type', 'device_ledger_key',
+            'device_ledger_name', 'device_ledger_protocol_json', 'device_ledger_identify_json', 'device_ledger_metadata_json',
+            'device_ledger_command_json', 'device_ledger_extend_json'],
+        'update' => ['device_ledger_id', 'join_device_ledger_category_id', 'device_ledger_status', 'device_ledger_category', 'device_ledger_type', 'device_ledger_key',
+            'device_ledger_name', 'device_ledger_protocol_json', 'device_ledger_identify_json', 'device_ledger_metadata_json',
+            'device_ledger_command_json', 'device_ledger_extend_json'],
+    ];
+
+    public function isJson($value)
+    {
+        if (is_json($value)) {
+            return true;
+        }
+        return '数据格式错误~';
+    }
+}

+ 35 - 0
app/admin/validate/member/MemberValidate.php

@@ -0,0 +1,35 @@
+<?php
+
+namespace app\admin\validate\member;
+
+use think\Validate;
+
+class MemberValidate extends Validate
+{
+    protected $rule = [
+        'id' => 'require',
+        'account_name' => 'require',
+        'avatar' => 'require',
+        'source' => 'require', // 来源
+        'is_owner' => 'require|in:Y,N',
+        'classify' => 'require', // 归类 会员/游客
+        'birth' => 'require',
+        'gender' => 'require|in:male,female,unknown',
+        'status' => 'require|in:ACTIVED,DISABLED',
+        'mobile' => 'require|mobile',
+        'addr' => 'require',
+        'cert_name' => 'require',
+        'cert_nbr' => 'require|idCard',
+        'member_cert_face' => 'url', // 身份证人像面照片 base64
+        'member_cert_photo' => 'url' // 身份证国徽面照片 base64
+    ];
+
+    protected $message = [];
+
+    protected $scene = [
+        'add' => ['account_name', 'avatar', 'source', 'is_owner', 'classify', 'birth', 'gender', 'status', 'mobile', 'addr', 'cert_name',
+            'cert_nbr', 'member_cert_face', 'member_cert_photo'],
+        'update' => ['id', 'account_name', 'avatar', 'source', 'is_owner', 'classify', 'birth', 'gender', 'status', 'mobile', 'addr', 'cert_name',
+            'cert_nbr', 'member_cert_face', 'member_cert_photo']
+    ];
+}

+ 8 - 1
app/admin/validate/sys_manage/DeptValidate.php

@@ -27,6 +27,13 @@ class DeptValidate extends Validate
         'update' => ['dept_super_id', 'dept_status', 'dept_category', 'dept_code', 'dept_city', 'dept_name', 'dept_telephone', 'dept_position', 'dept_address', 'dept_remark'],
         'update_status' => ['dept_status'],
         'add_premises' => ['dept_status', 'dept_category', 'dept_code', 'dept_city', 'dept_name', 'dept_telephone', 'dept_position', 'dept_address', 'dept_remark'],
-        'update_premises' => ['dept_id', 'dept_status', 'dept_category', 'dept_code', 'dept_city', 'dept_name', 'dept_telephone', 'dept_position', 'dept_address', 'dept_remark']
+        'update_premises' => ['dept_id', 'dept_status', 'dept_category', 'dept_code', 'dept_city', 'dept_name', 'dept_telephone', 'dept_position', 'dept_address', 'dept_remark'],
+        'info' => ['dept_id'],
+        'marketing_team_add' => ['dept_super_id', 'dept_name'],
+        'marketing_team_update' => ['dept_super_id', 'dept_name'],
+        'medical_team_add' => ['dept_name'],
+        'medical_team_update' => ['dept_name'],
+        'service_team_add' => ['dept_name'],
+        'service_team_update' => ['dept_name'],
     ];
 }

+ 26 - 0
app/model/Device.php

@@ -0,0 +1,26 @@
+<?php
+
+namespace app\model;
+
+use DateTimeInterface;
+use support\Model;
+
+class Device extends Model
+{
+    protected $table = 'device';
+
+    protected $primaryKey = 'device_id';
+
+    protected $keyType = 'string';
+
+    protected $dateFormat = 'U';
+
+    const CREATED_AT = 'device_addtimes';
+
+    const UPDATED_AT = null;
+
+    public function serializeDate(DateTimeInterface $date)
+    {
+        return $date->format('Y-m-d H:i:s');
+    }
+}

+ 18 - 0
app/model/DeviceLedger.php

@@ -0,0 +1,18 @@
+<?php
+
+namespace app\model;
+
+use support\Model;
+
+class DeviceLedger extends Model
+{
+    protected $table = 'device_ledger';
+
+    protected $primaryKey = 'device_ledger_id';
+
+    protected $dateFormat = 'U';
+
+    const CREATED_AT = 'device_ledger_addtimes';
+
+    const UPDATED_AT = null;
+}

+ 44 - 0
app/model/Member.php

@@ -0,0 +1,44 @@
+<?php
+
+namespace app\model;
+
+use support\Model;
+
+class Member extends Model
+{
+    protected $table = 'member';
+
+    protected $primaryKey = 'member_id';
+
+    protected $keyType = 'string';
+
+    protected $dateFormat = 'U';
+
+    const CREATED_AT = 'member_addtimes';
+
+    const UPDATED_AT = null;
+
+    /**
+     * @Desc 关联member cert
+     * @Author Gorden
+     * @Date 2024/3/25 13:57
+     *
+     * @return \Illuminate\Database\Eloquent\Relations\HasOne
+     */
+    public function cert()
+    {
+        return $this->hasOne(MemberCert::class, 'join_cert_member_id', 'member_id');
+    }
+
+    /**
+     * @Desc 关联member info
+     * @Author Gorden
+     * @Date 2024/3/25 13:56
+     *
+     * @return \Illuminate\Database\Eloquent\Relations\HasOne
+     */
+    public function info()
+    {
+        return $this->hasOne(MemberInfo::class, 'join_info_member_id', 'member_id');
+    }
+}

+ 21 - 0
app/model/MemberAccount.php

@@ -0,0 +1,21 @@
+<?php
+
+namespace app\model;
+
+use support\Model;
+
+class MemberAccount extends Model
+{
+    protected $table = 'member_account';
+
+    protected $primaryKey = 'member_account_id';
+
+    public $keyType = 'string';
+
+
+    protected $dateFormat = 'U';
+
+    const CREATED_AT = 'member_account_addtimes';
+
+    const UPDATED_AT = null;
+}

+ 19 - 0
app/model/MemberAttr.php

@@ -0,0 +1,19 @@
+<?php
+
+namespace app\model;
+
+use support\Model;
+
+class MemberAttr extends Model
+{
+    protected $table = 'member_attr';
+
+    protected $primaryKey = 'member_attr_id';
+
+    public $keyType = 'string';
+
+
+    const CREATED_AT = null;
+
+    const UPDATED_AT = null;
+}

+ 21 - 0
app/model/MemberBenefit.php

@@ -0,0 +1,21 @@
+<?php
+
+namespace app\model;
+
+use support\Model;
+
+class MemberBenefit extends Model
+{
+    protected $table = 'member_benefit';
+
+    protected $primaryKey = 'member_benefit_id';
+
+    public $keyType = 'string';
+
+
+    protected $dateFormat = 'U';
+
+    const CREATED_AT = 'member_benefit_addtimes';
+
+    const UPDATED_AT = null;
+}

+ 19 - 0
app/model/MemberCert.php

@@ -0,0 +1,19 @@
+<?php
+
+namespace app\model;
+
+use support\Model;
+
+class MemberCert extends Model
+{
+    protected $table = 'member_cert';
+
+    protected $primaryKey = 'join_cert_member_id';
+
+    public $keyType = 'string';
+
+
+    const CREATED_AT = null;
+
+    const UPDATED_AT = null;
+}

+ 20 - 0
app/model/MemberDevice.php

@@ -0,0 +1,20 @@
+<?php
+
+namespace app\model;
+
+use support\Model;
+
+class MemberDevice extends Model
+{
+    protected $table = 'member_device';
+
+    protected $primaryKey = 'member_device_id';
+
+    public $keyType = 'string';
+
+    protected $dateFormat = 'U';
+
+    const CREATED_AT = 'member_device_addtimes';
+
+    const UPDATED_AT = null;
+}

+ 5 - 1
app/model/MemberInfo.php

@@ -10,5 +10,9 @@ class MemberInfo extends Model
 
     public $primaryKey = 'join_info_member_id';
 
-    public const UPDATED_AT = null;
+    public $keyType = 'string';
+
+    const CREATED_AT = null;
+
+    const UPDATED_AT = null;
 }

+ 21 - 0
app/model/SysDept.php

@@ -29,4 +29,25 @@ class SysDept extends Model
     {
         return self::where('dept_super_path', 'like', $path . '%')->get()->toArray();
     }
+
+    /**
+     * @Desc 验证指定字段指定值是否存在
+     * @Author Gorden
+     * @Date 2024/3/22 14:52
+     *
+     * @param $category
+     * @param $field
+     * @param $value
+     * @return bool
+     */
+    public static function checkExist($category, $field, $value)
+    {
+        return self::where('dept_category', $category)
+            ->where($field, $value)
+            ->exists();
+    }
+
+    public function premises(){
+        return $this->hasOne(self::class,'dept_id','dept_super_id');
+    }
 }

+ 61 - 0
route/admin.php

@@ -282,7 +282,29 @@ Route::group('/admin', function () {
         })->middleware([
             \app\middleware\AdminAuthCheck::class
         ]);
+        /* 医疗团队管理 */
+        Route::group('/team', function () {
+            Route::get('/list', [\app\admin\controller\medical\TeamController::class, 'deptList']);
+            Route::get('/info/{id:\d+}', [\app\admin\controller\medical\TeamController::class, 'deptInfo']);
+            Route::post('/add', [\app\admin\controller\medical\TeamController::class, 'addDept']);
+            Route::post('/update/{id:\d+}', [\app\admin\controller\medical\TeamController::class, 'updateDept']);
+            Route::post('/updateStatus/{id:\d+}', [\app\admin\controller\medical\TeamController::class, 'updateStatus']);
+            Route::delete('/delete', [\app\admin\controller\medical\TeamController::class, 'delDept']);
+        })->middleware([
+            \app\middleware\AdminAuthCheck::class
+        ]);
     });
+    /* 服务团队管理 */
+    Route::group('/serviceTeam', function () {
+        Route::get('/list', [\app\admin\controller\ServiceTeamController::class, 'deptList']);
+        Route::get('/info/{id:\d+}', [\app\admin\controller\ServiceTeamController::class, 'deptInfo']);
+        Route::post('/add', [\app\admin\controller\ServiceTeamController::class, 'addDept']);
+        Route::post('/update/{id:\d+}', [\app\admin\controller\ServiceTeamController::class, 'updateDept']);
+        Route::post('/updateStatus/{id:\d+}', [\app\admin\controller\ServiceTeamController::class, 'updateStatus']);
+        Route::delete('/delete', [\app\admin\controller\ServiceTeamController::class, 'delDept']);
+    })->middleware([
+        \app\middleware\AdminAuthCheck::class
+    ]);
     /* 健康 */
     Route::group('/healthy', function () {
         /* 健康产品管理管理 */
@@ -324,11 +346,17 @@ Route::group('/admin', function () {
     Route::group('/member', function () {
         /* 家庭管理 */
         Route::group('/family', function () {
+            Route::get('/list', [\app\admin\controller\member\FamilyController::class, 'list']);
             Route::get('/list/{id:\w+}', [\app\admin\controller\member\FamilyController::class, 'selectList']);
             Route::get('/info/{id:\w+}', [\app\admin\controller\member\FamilyController::class, 'selectInfo']);
         })->middleware([
             \app\middleware\AdminAuthCheck::class
         ]);
+        // 用户管理
+        Route::group('', function () {
+            Route::get('/list', [\app\admin\controller\member\MemberController::class, 'list']);
+            Route::post('/add', [\app\admin\controller\member\MemberController::class, 'add']);
+        });
     });
     /* 营销管理 */
     Route::group('/marketing', function () {
@@ -344,12 +372,24 @@ Route::group('/admin', function () {
         /* 营业场所管理(部门表) */
         Route::group('/deptPremises', function () {
             Route::get('/list', [\app\admin\controller\marketing\DeptPremisesController::class, 'select']);
+            Route::get('/info', [\app\admin\controller\marketing\DeptPremisesController::class, 'info']);
             Route::post('/add', [\app\admin\controller\marketing\DeptPremisesController::class, 'insert']);
             Route::post('/update', [\app\admin\controller\marketing\DeptPremisesController::class, 'update']);
             Route::delete('/delete', [\app\admin\controller\marketing\DeptPremisesController::class, 'delete']);
         })->middleware([
             \app\middleware\AdminAuthCheck::class
         ]);
+        /* 营销团队管理 */
+        Route::group('/team', function () {
+            Route::get('/list', [\app\admin\controller\marketing\TeamController::class, 'deptList']);
+            Route::get('/info/{id:\d+}', [\app\admin\controller\marketing\TeamController::class, 'deptInfo']);
+            Route::post('/add', [\app\admin\controller\marketing\TeamController::class, 'addDept']);
+            Route::post('/update/{id:\d+}', [\app\admin\controller\marketing\TeamController::class, 'updateDept']);
+            Route::post('/updateStatus/{id:\d+}', [\app\admin\controller\marketing\TeamController::class, 'updateStatus']);
+            Route::delete('/delete', [\app\admin\controller\marketing\TeamController::class, 'delDept']);
+        })->middleware([
+            \app\middleware\AdminAuthCheck::class
+        ]);
     });
     /* 智能设备管理 */
     Route::group('/smartDevices', function () {
@@ -372,4 +412,25 @@ Route::group('/admin', function () {
             \app\middleware\AdminAuthCheck::class
         ]);
     });
+
+    /* 康养设备管理 */
+    Route::group('/device', function () {
+        Route::group('/ledger', function () {
+            Route::get('/list', [\app\admin\controller\device\LedgerController::class, 'select']);
+            Route::get('/select', [\app\admin\controller\device\LedgerController::class, 'selectList']);
+            Route::post('/add', [\app\admin\controller\device\LedgerController::class, 'insert']);
+            Route::post('/update', [\app\admin\controller\device\LedgerController::class, 'update']);
+            Route::delete('/delete', [\app\admin\controller\device\LedgerController::class, 'delete']);
+        })->middleware([
+            \app\middleware\AdminAuthCheck::class
+        ]);
+        Route::group('',function (){
+            Route::get('/list', [\app\admin\controller\device\DeviceController::class, 'select']);
+            Route::post('/add', [\app\admin\controller\device\DeviceController::class, 'insert']);
+            Route::post('/update', [\app\admin\controller\device\DeviceController::class, 'update']);
+            Route::delete('/delete', [\app\admin\controller\device\DeviceController::class, 'delete']);
+        })->middleware([
+            \app\middleware\AdminAuthCheck::class
+        ]);
+    });
 });