hyperf-view/builder/Traits/ServiceTrait.php

390 lines
10 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
/**
* MineAdmin is committed to providing solutions for quickly building web applications
* Please view the LICENSE file that was distributed with this source code,
* For the full copyright and license information.
* Thank you very much for using MineAdmin.
*
* @Author X.Mo<root@imoi.cn>
* @Link https://gitee.com/xmo/MineAdmin
*/
namespace Builder\Traits;
use Hyperf\Database\Model\Collection;
use Psr\Http\Message\ResponseInterface;
use Builder\Abstracts\AbstractMapper;
use Builder\Annotation\Transaction;
use Builder\MineCollection;
use Builder\MineModel;
use Builder\MineResponse;
trait ServiceTrait
{
/**
* @var AbstractMapper
*/
public $mapper;
/**
* 获取列表数据
* @param array|null $params
* @param bool $isScope
* @return array
*/
public function getList(?array $params = null, bool $isScope = true): array
{
if ($params['select'] ?? null) {
$params['select'] = explode(',', $params['select']);
}
$params['recycle'] = false;
return $this->mapper->getList($params, $isScope);
}
/**
* 从回收站过去列表数据
* @param array|null $params
* @param bool $isScope
* @return array
*/
public function getListByRecycle(?array $params = null, bool $isScope = true): array
{
if ($params['select'] ?? null) {
$params['select'] = explode(',', $params['select']);
}
$params['recycle'] = true;
return $this->mapper->getList($params, $isScope);
}
/**
* 获取列表数据(带分页)
* @param array|null $params
* @param bool $isScope
* @return array
*/
public function getPageList(?array $params = null, bool $isScope = true): array
{
if ($params['select'] ?? null) {
$params['select'] = explode(',', $params['select']);
}
return $this->mapper->getPageList($params, $isScope);
}
/**
* 从回收站获取列表数据(带分页)
* @param array|null $params
* @param bool $isScope
* @return array
*/
public function getPageListByRecycle(?array $params = null, bool $isScope = true): array
{
if ($params['select'] ?? null) {
$params['select'] = explode(',', $params['select']);
}
$params['recycle'] = true;
return $this->mapper->getPageList($params, $isScope);
}
/**
* 获取树列表
* @param array|null $params
* @param bool $isScope
* @return array
*/
public function getTreeList(?array $params = null, bool $isScope = true): array
{
if ($params['select'] ?? null) {
$params['select'] = explode(',', $params['select']);
}
$params['recycle'] = false;
return $this->mapper->getTreeList($params, $isScope);
}
/**
* 从回收站获取树列表
* @param array|null $params
* @param bool $isScope
* @return array
*/
public function getTreeListByRecycle(?array $params = null, bool $isScope = true): array
{
if ($params['select'] ?? null) {
$params['select'] = explode(',', $params['select']);
}
$params['recycle'] = true;
return $this->mapper->getTreeList($params, $isScope);
}
/**
* 新增数据
* @param array $data
* @return int
*/
public function save(array $data): int
{
return $this->mapper->save($data);
}
/**
* 批量新增
* @param array $collects
* @return bool
*/
#[Transaction]
public function batchSave(array $collects): bool
{
foreach ($collects as $collect) {
$this->mapper->save($collect);
}
return true;
}
/**
* 读取一条数据
* @param int $id
* @return MineModel|null
*/
public function read(int $id): ?MineModel
{
return $this->mapper->read($id);
}
/**
* Description:获取单个值
* User:mike
* @param array $condition
* @param string $columns
* @return \Hyperf\Utils\HigherOrderTapProxy|mixed|void|null
*/
public function value(array $condition, string $columns = 'id')
{
return $this->mapper->value($condition, $columns);
}
/**
* Description:获取单列值
* User:mike
* @param array $condition
* @param string $columns
* @return array|null
*/
public function pluck(array $condition, string $columns = 'id'): array
{
return $this->mapper->pluck($condition, $columns);
}
/**
* 从回收站读取一条数据
* @param int $id
* @return MineModel
* @noinspection PhpUnused
*/
public function readByRecycle(int $id): MineModel
{
return $this->mapper->readByRecycle($id);
}
/**
* 单个或批量软删除数据
* @param array $ids
* @return bool
*/
public function delete(array $ids): bool
{
return !empty($ids) && $this->mapper->delete($ids);
}
/**
* 更新一条数据
* @param int $id
* @param array $data
* @return bool
*/
public function update(int $id, array $data): bool
{
return $this->mapper->update($id, $data);
}
/**
* 按条件更新数据
* @param array $condition
* @param array $data
* @return bool
*/
public function updateByCondition(array $condition, array $data): bool
{
return $this->mapper->updateByCondition($condition, $data);
}
/**
* 单个或批量真实删除数据
* @param array $ids
* @return bool
*/
public function realDelete(array $ids): bool
{
return !empty($ids) && $this->mapper->realDelete($ids);
}
/**
* 单个或批量从回收站恢复数据
* @param array $ids
* @return bool
*/
public function recovery(array $ids): bool
{
return !empty($ids) && $this->mapper->recovery($ids);
}
/**
* 单个或批量禁用数据
* @param array $ids
* @param string $field
* @return bool
*/
public function disable(array $ids, string $field = 'status'): bool
{
return !empty($ids) && $this->mapper->disable($ids, $field);
}
/**
* 单个或批量启用数据
* @param array $ids
* @param string $field
* @return bool
*/
public function enable(array $ids, string $field = 'status'): bool
{
return !empty($ids) && $this->mapper->enable($ids, $field);
}
/**
* 修改数据状态
* @param int $id
* @param string $value
* @param string $filed
* @return bool
*/
public function changeStatus(int $id, string $value, string $filed = 'status'): bool
{
return $value == MineModel::ENABLE ? $this->mapper->enable([ $id ], $filed) : $this->mapper->disable([ $id ], $filed);
}
/**
* 数字更新操作
* @param int $id
* @param string $field
* @param int $value
* @return bool
*/
public function numberOperation(int $id, string $field, int $value): bool
{
return $this->mapper->numberOperation($id, $field, $value);
}
/**
* 导出数据
* @param array $params
* @param string|null $dto
* @param string|null $filename
* @return ResponseInterface
* @throws \PhpOffice\PhpSpreadsheet\Writer\Exception
* @throws \Psr\Container\ContainerExceptionInterface
* @throws \Psr\Container\NotFoundExceptionInterface
*/
public function export(array $params, ?string $dto, string $filename = null): ResponseInterface
{
if (empty($dto)) {
return container()->get(MineResponse::class)->error('导出未指定DTO');
}
if (empty($filename)) {
$filename = $this->mapper->getModel()->getTable();
}
return (new MineCollection())->export($dto, $filename, $this->mapper->getList($params));
}
/**
* 数据导入
* @param string $dto
* @param \Closure|null $closure
* @return bool
* @throws \PhpOffice\PhpSpreadsheet\Reader\Exception
* @throws \Psr\Container\ContainerExceptionInterface
* @throws \Psr\Container\NotFoundExceptionInterface
*/
#[Transaction]
public function import(string $dto, ?\Closure $closure = null): bool
{
return $this->mapper->import($dto, $closure);
}
/**
* 数组数据转分页数据显示
* @param array|null $params
* @param string $pageName
* @return array
*/
public function getArrayToPageList(?array $params = [], string $pageName = 'page'): array
{
$collect = $this->handleArraySearch(collect($this->getArrayData($params)), $params);
$pageSize = MineModel::PAGE_SIZE;
$page = 1;
if ($params[$pageName] ?? false) {
$page = (int) $params[$pageName];
}
if ($params['pageSize'] ?? false) {
$pageSize = (int) $params['pageSize'];
}
$data = $collect->forPage($page, $pageSize)->toArray();
return [
'items' => $this->getCurrentArrayPageBefore($data, $params),
'pageInfo' => [
'total' => $collect->count(),
'currentPage' => $page,
'totalPage' => ceil($collect->count() / $pageSize)
]
];
}
/**
* 数组数据搜索器
* @param \Hyperf\Utils\Collection $collect
* @param array $params
* @return Collection
*/
protected function handleArraySearch(\Hyperf\Utils\Collection $collect, array $params): \Hyperf\Utils\Collection
{
return $collect;
}
/**
* 数组当前页数据返回之前处理器默认对key重置
* @param array $data
* @param array $params
* @return array
*/
protected function getCurrentArrayPageBefore(array &$data, array $params = []): array
{
sort($data);
return $data;
}
/**
* 设置需要分页的数组数据
* @param array $params
* @return array
*/
protected function getArrayData(array $params = []): array
{
return [];
}
}