智慧教务系统
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

170 lines
5.3 KiB

<?php
// +----------------------------------------------------------------------
// | Niucloud-admin 企业快速开发的多应用管理平台
// +----------------------------------------------------------------------
// | 官方网址:https://www.niucloud.com
// +----------------------------------------------------------------------
// | niucloud团队 版权所有 开源版本可自由商用
// +----------------------------------------------------------------------
// | Author: Niucloud Team
// +----------------------------------------------------------------------
namespace app\service\admin\venue;
use app\model\venue\Venue;
use app\model\campus\Campus;
use core\base\BaseAdminService;
/**
* 场地服务层
* Class VenueService
* @package app\service\admin\venue
*/
class VenueService extends BaseAdminService
{
public function __construct()
{
parent::__construct();
$this->model = new Venue();
}
/**
* 获取场地列表
* @param array $where
* @return array
*/
public function getPage(array $where = [])
{
$field = 'id,campus_id,venue_name,capacity,availability_status,time_range_type,time_range_start,time_range_end,fixed_time_ranges,created_at,updated_at,deleted_at';
$order = 'updated_at desc';
$search_model = $this->model->withSearch(["campus_id", "venue_name", "capacity", "availability_status", "time_range_type", "created_at", "updated_at"], $where)->with(['campus'])->field($field)->order($order);
$list = $this->pageQuery($search_model);
return $list;
}
/**
* 获取场地信息
* @param int $id
* @return array
*/
public function getInfo(int $id)
{
$field = 'id,campus_id,venue_name,capacity,availability_status,time_range_type,time_range_start,time_range_end,fixed_time_ranges,created_at,updated_at,deleted_at';
$info = $this->model->field($field)->where([['id', "=", $id]])->with(['campus'])->findOrEmpty()->toArray();
$info['availability_status'] = strval($info['availability_status']);
$info['time_range_type'] = strval($info['time_range_type']);
$info['fixed_time_ranges'] = json_decode($info['fixed_time_ranges'], true);
return $info;
}
/**
* 添加场地
* @param array $data
* @return mixed
*/
public function add(array $data)
{
if ($data['time_range_type'] === 'fixed') {
$data['fixed_time_ranges'] = json_encode($data['fixed_time_ranges']);
}
$res = $this->model->create($data);
return $res->id;
}
/**
* 场地编辑
* @param int $id
* @param array $data
* @return bool
*/
public function edit(int $id, array $data)
{
if ($data['time_range_type'] === 'fixed') {
$data['fixed_time_ranges'] = json_encode($data['fixed_time_ranges']);
}
$this->model->where([['id', '=', $id]])->update($data);
return true;
}
/**
* 删除场地
* @param int $id
* @return bool
*/
public function del(int $id)
{
$model = $this->model->where([['id', '=', $id]])->find();
$res = $model->delete();
return $res;
}
/**
* 获取校区列表
* @return array
*/
public function getCampusAll()
{
$campusModel = new Campus();
return $campusModel->select()
->where('campus_status', '=', 1)
->toArray();
}
/**
* 获取校区下的场地列表
* @param $campus_id
* @return array
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
*/
public function getVenueAll($campus_id)
{
return $this->model->where('availability_status', '=', 1)
->where('campus_id', $campus_id)
->select()
->toArray();
}
/**
* 获取场地那天的可预约时间
*/
public function getVenueTime($venue_id, $date)
{
$venue_info = $this->model->where('id', '=', $venue_id)->find();
$venue_info['time_range'] = [];
//可用时间范围
if ($venue_info['time_range_type'] === 'range') {
$time_range_start = $venue_info['time_range_start'];
$time_range_end = $venue_info['time_range_end'];
for ($i = $time_range_start; $i <= $time_range_end; $i++) {
$venue_info['time_range'][] = $i;
}
}
// 固定使用时间
if ($venue_info['time_range_type'] === 'fixed') {
$venue_info['time_range'] = json_decode($venue_info['fixed_time_ranges'], true);
for ($i = 0; $i < count($venue_info['time_range']); $i++) {
$venue_info['time_range'][$i]['start'] = strtotime($date . ' ' . $venue_info['time_range'][$i]['start_time']);
$venue_info['time_range'][$i]['end'] = strtotime($date . ' ' . $venue_info['time_range'][$i]['end_time']);
}
}
// 全天可用从早上8点开始到晚上22点结束
if ($venue_info['time_range_type'] === 'all') {
for ($i = 8; $i <= 22; $i++) {
$venue_info['time_range'][] = $i;
}
}
return $venue_info;
}
}