building-sign/app/controller/api/v1/Common.php

249 lines
7.2 KiB
PHP

<?php
namespace app\controller\api\v1;
use app\controller\api\Base;
use app\model\Account;
use app\model\CheckLog;
use app\model\OvertimeLog;
use app\model\Position;
use app\model\Worksite;
use app\repository\CommonRepository;
use app\repository\OperationRepository;
use app\validate\CommonValidate;
use think\Collection;
use think\db\exception\DataNotFoundException;
use think\db\exception\DbException;
use think\db\exception\ModelNotFoundException;
use think\facade\Config;
use think\response\Json;
class Common extends Base
{
protected $noNeedLogin = [
'slidePositions',
'slides',
'getCurrentWorksite',
'worksiteList',
'positionList',
'notice',
];
/**
* 发送短信验证码
*
* @OA\Post(
* path="/common/send-code",
* tags={"common"},
* operationId="sendCode",
* )
*/
public function sendCode(): Json
{
$input = input('post.');
$validate = new CommonValidate();
if (!$validate->scene('send_sms')->check($input)) {
return $this->json(4001, '参数错误');
}
if (!in_array($input['type'], ['register', 'login', 'binding'])) {
return $this->json(4002, '参数错误');
}
// CommonRepository::getInstance()->sendSms($input['phone'], $input['type']);
return $this->json();
}
/**
* 查看轮播图可视位置配置信息
*/
public function slidePositions(): Json
{
$repo = OperationRepository::getInstance();
$list = $repo->slidePositions();
return $this->json(0, 'success', $list);
}
/**
* 轮播图
*/
public function slides(): Json
{
$size = $this->request->param('size/d', 0);
$position = trim($this->request->param('position/s', ''));
if (empty($position)) {
return $this->json();
}
try {
$repo = OperationRepository::getInstance();
$list = $repo->slideListByPosition($position, $size);
$domain = $this->request->domain();
$list->each(function ($item) use ($domain) {
$item->src = resourceJoin($item->src, $domain);
unset($item->created_at);
unset($item->sort);
});
} catch (\Exception $e) {
$list = new Collection();
}
return $this->json(0, 'success', $list);
}
// 根据经纬度获取所在工地 500米
public function getCurrentWorksite(): Json
{
$lng = input('lng/s');
$lat = input('lat/s');
if (empty($lng) || empty($lat)) {
return $this->json(4002, "参数错误");
}
Config::load('extra/base', 'base');
$baseConfig = config('base');
$signArea = $baseConfig['sign_area'] ?? 200;
return $this->json(0, 'success', Worksite::getNearest($lng, $lat, $signArea));
}
// 工地列表 todo 如果有相关用户 则获取该用户相关的工地列表 如工人 则只获取其参与过的工地列表 需要添加一个字段来确认是否根据用户过滤
public function worksiteList(): Json
{
$page = input('page/d', 1);
$size = input('size/d', 500);
$keyword = input('keyword/s');
// $accountId = $this->request->user['user_id'] ?? 0;
$where = [];
if (!empty($keyword)) {
$where[] = ['name|address', 'like', '%'.$keyword.'%'];
}
$where[] = ['status', '=', Worksite::COMMON_ON];
$query = Worksite::where($where);
$total = $query->count();
$res = [
'total' => $total,
'current' => $page ?: 1,
'size' => $size ?: 500,
'list' => new Collection(),
];
if ($total > 0) {
$res['list'] = $query->page($page, $size)
->field('id,name')
->order('sort', 'desc')
->order('id', 'desc')
->select();
}
return $this->json(0, 'success', $res);
}
// 技术岗位列表
public function positionList(): Json
{
$page = input('page/d', 1);
$size = input('size/d', 500);
$keyword = input('keyword/s');
$where = [];
if (!empty($keyword)) {
$where[] = ['name', 'like', '%'.$keyword.'%'];
}
$query = Position::where($where);
$total = $query->count();
$res = [
'total' => $total,
'current' => $page ?: 1,
'size' => $size ?: 500,
'list' => new Collection(),
];
if ($total > 0) {
$res['list'] = $query->page($page, $size)
->field('id,name')
->order('sort', 'desc')
->order('id', 'desc')
->select();
}
return $this->json(0, 'success', $res);
}
/**
* 加班申请详情
*
* @return \think\response\Json
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
*/
public function overtimeInfo(): Json
{
$accountId = $this->request->user['user_id'] ?? 0;
$id = input('id/d');
if (!$account = Account::where('id', $accountId)->field('id,role')->find()) {
return $this->json(6001, '请先登录'.$accountId, $account);
}
if (!$item = OvertimeLog::find($id)) {
return $this->json(4004, '加班记录不存在');
}
if ($item['account_id'] != $accountId && $account['role'] != Account::ROLE_MANAGER) {
return $this->json(4003, '无权查看');
}
return $this->json(0,'success', $item);
}
/**
* 获取通知消息 在打卡页面每次加载都需要请求此接口,查看是否需要展示信息
* 如果有登录token就查询用户相关小题
* 如果没有登录token则返回空
*
* @return \think\response\Json
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
*/
public function notice(): Json
{
$accountId = $this->request->user['user_id'] ?? 0;
if ($accountId == 0) {
return $this->json(0, 'success', ['notice' => 0, 'msg' => '', 'id' => 0]);
}
if (!$account = Account::find($accountId)) {
return $this->json(0, 'success', ['notice' => 0, 'msg' => '', 'id' => 0]);
}
if ($account['role'] != Account::ROLE_NORMAL) {
return $this->json(0, 'success', ['notice' => 0, 'msg' => '', 'id' => 0]);
}
$checkLog = CheckLog::where('account_id', $accountId)->where('is_register', Account::COMMON_ON)->order('id', 'desc')->find();
if (empty($checkLog)) {
return $this->json(0, 'success', ['notice' => 0, 'msg' => '', 'id' => 0]);
}
if ($checkLog['status'] != -1) {
return $this->json(0, 'success', ['notice' => 0, 'msg' => '', 'id' => 0]);
}
return $this->json(0, 'success', ['notice' => 1, 'msg' => $checkLog['refund_reason'], 'id' => $checkLog['id']]);
}
}