100 lines
3.2 KiB
PHP
100 lines
3.2 KiB
PHP
<?php
|
|
|
|
namespace Stemcell\Catalog\Model\Api;
|
|
|
|
use Magento\Framework\Webapi\Rest\Request as RestRequest;
|
|
use Stemcell\Catalog\Model\ResourceModel\Cryopreserve\CollectionFactory as CryopreserveCollectionFactory;
|
|
|
|
/**
|
|
* 样本冻存参考小工具接口
|
|
*/
|
|
class SampleCryopreserve
|
|
{
|
|
public function __construct(
|
|
private CryopreserveCollectionFactory $cryopreserveCollectionFactory,
|
|
private RestRequest $restRequest
|
|
) {
|
|
}
|
|
|
|
protected function getSamples() {
|
|
$samples = [];
|
|
$data = $this->cryopreserveCollectionFactory->create()->addFieldToSelect('sample')->load()->getData();
|
|
foreach ($data as $item) {
|
|
if (!isset($samples[$item['sample']])) {
|
|
$samples[$item['sample']] = ['sample' => $item['sample']];
|
|
}
|
|
}
|
|
return array_values($samples);
|
|
}
|
|
|
|
protected function getTypes()
|
|
{
|
|
$sample = trim((string)$this->restRequest->getParam("sample"));
|
|
$collection = $this->cryopreserveCollectionFactory->create();
|
|
if (!empty($sample)) {
|
|
$collection->addFieldToFilter('sample', $sample);
|
|
}
|
|
|
|
$data = [];
|
|
foreach ($collection->getItems() as $item) {
|
|
/* @var $item \Stemcell\Catalog\Model\Cryopreserve */
|
|
if (!isset($data[$item->getType()])) {
|
|
$data[$item->getType()] = ['type' => $item->getType()];
|
|
}
|
|
}
|
|
|
|
return array_values($data);
|
|
}
|
|
|
|
protected function getCellTypes()
|
|
{
|
|
$sample = trim((string)$this->restRequest->getParam("sample"));
|
|
$type = trim((string)$this->restRequest->getParam("type"));
|
|
$collection = $this->cryopreserveCollectionFactory->create();
|
|
if (!empty($type)) {
|
|
$collection->addFieldToFilter('sample', $sample)
|
|
->addFieldToFilter('type', $type);
|
|
}
|
|
|
|
$data = [];
|
|
foreach ($collection->getItems() as $item) {
|
|
/* @var $item \Stemcell\Catalog\Model\Cryopreserve */
|
|
if (!isset($data[$item->getCellType()])) {
|
|
$data[$item->getCellType()] = ['cellType' => $item->getCellType()];
|
|
}
|
|
}
|
|
|
|
return array_values($data);
|
|
}
|
|
|
|
/**
|
|
* @return array
|
|
*/
|
|
public function getFilters()
|
|
{
|
|
return ['samples'=>$this->getSamples(), 'types'=>$this->getTypes(), 'cellTypes'=>$this->getCellTypes()];
|
|
}
|
|
|
|
/**
|
|
* @return string
|
|
*/
|
|
public function execute() : string {
|
|
$sample = trim((string)$this->restRequest->getParam("sample"));
|
|
$type = trim((string)$this->restRequest->getParam("type"));
|
|
$cellType = trim((string)$this->restRequest->getParam("cellType"));
|
|
$collection = $this->cryopreserveCollectionFactory->create()
|
|
->addFieldToSelect(['reference_density', 'desc', 'reference']);
|
|
if (!empty($sample)) {
|
|
$collection->addFieldToFilter('sample', $sample);
|
|
}
|
|
if (!empty($type)) {
|
|
$collection->addFieldToFilter('type', $type);
|
|
}
|
|
if (!empty($cellType)) {
|
|
$collection->addFieldToFilter('cell_type', $cellType);
|
|
}
|
|
|
|
return json_encode(['filters' => $this->getFilters(), 'items' => $collection->getData()]);
|
|
}
|
|
}
|