Files
2026-09-15 10:26:34 +08:00

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()]);
}
}