<?php
namespace App\Controller\DataSynch;
use App\Controller\Validator\CommonSignatureAppValidator;
use Common\Crisp\CrispItem\CommodityItem;
use Common\DataSynch\Crisp\Model\CrispCommodityModel;
use Common\DataTrans\Crisp\Model\CrispProductModel;
use Common\Helper\ArrayHelper;
use Common\Helper\SimplifyAsSnakeArray\SimplifyAsSnakeArrayHelper;
use Common\PimcoreHelper\ControllerHelper\BaseJsonController;
use Common\Signature\Exception\BaseSignatureException;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use function array_diff;
use function array_intersect;
use function array_map;
use function array_values;
class CommodityController extends BaseJsonController{
/**
* @Symfony\Component\Routing\Annotation\Route("/data_synch/commodity/get_diff_from_product_id_list")
* @throws BaseSignatureException
*/
function getDiffFromProductIdList(Request $request):Response{
(new CommonSignatureAppValidator())->validateRequest($request);
$input=[];
$body=function(array $input):array{
$productIdList=CrispProductModel::getOrderKeyAscList();
$commodityIdList=CrispCommodityModel::getArticleIdListByArticleStatusAllowed();
$surplus=array_values(array_diff($commodityIdList,$productIdList));
$lack=array_values(array_diff($productIdList,$commodityIdList));
$intersect=array_values(array_intersect($productIdList,$commodityIdList));
$res=[
'surplus_commodity_id_list'=>$surplus,
'lack_product_id_list'=>$lack,
'intersect'=>$intersect,
];
return $res;
};
$res=$this->run($input,$body);
return $res;
}
/**
* @Symfony\Component\Routing\Annotation\Route("/data_synch/commodity/get_commodity_id_list")
* @throws BaseSignatureException
*/
function getCommodityIdList(Request $request):Response{
(new CommonSignatureAppValidator())->validateRequest($request);
$input=[];
$body=function(array $input):array{
return [
'commodity_id_list'=>CrispCommodityModel::getOrderKeyAscList(),
];
};
$res=$this->run($input,$body);
return $res;
}
/**
* @Symfony\Component\Routing\Annotation\Route("/data_synch/commodity/get_commodity_list")
* @throws BaseSignatureException
*/
function getCommodityList(Request $request):Response{
(new CommonSignatureAppValidator())->validateRequest($request);
$commodityIdList=$request->get('commodity_id_list')??[];
$input=[
'commodity_id_list'=>$commodityIdList,
];
$body=function(array $input):array{
$allowedCommodityIdList=CrispCommodityModel::getArticleStatusAllowedArticleIdListByArticleIdList($input['commodity_id_list']);
$pimcoreObjectList=CrispCommodityModel::getListByArticleIdList($allowedCommodityIdList);
$parserObjectList=CommodityItem::dataObjectListExportToInstanceList($pimcoreObjectList);
$finalList=SimplifyAsSnakeArrayHelper::simplifyAsSnakeArrayMass($parserObjectList);
return [//'commodity_list'=>$finalList,
];
};
$res=$this->run($input,$body);
return $res;
}
/**
* @Symfony\Component\Routing\Annotation\Route("/data_synch/commodity/get_commodity_info_list")
* @throws BaseSignatureException
*/
function getCommodityInfoList(Request $request):Response{
$appKey=(new CommonSignatureAppValidator())->validateRequest($request);
$commodityIdList=$request->get('commodity_id_list')??[];
$infoList=$request->get('info_list')??[];
switch(true){
case $appKey->is('product_ro'):
$infoList=array_intersect($infoList,['article_id','article_description']);
break;
case $appKey->is('product_ro_2'):
break;
default:
$infoList=[];
}
$input=[
'commodity_id_list'=>$commodityIdList,
'info_list'=>$infoList,
];
$body=function(array $input):array{
$allowedCommodityIdList=CrispCommodityModel::getArticleStatusAllowedArticleIdListByArticleIdList($input['commodity_id_list']);
$pimcoreObjectList=CrispCommodityModel::getListByArticleIdList($allowedCommodityIdList);
$parserObjectList=CommodityItem::dataObjectListExportToInstanceList($pimcoreObjectList);
$finalList=SimplifyAsSnakeArrayHelper::simplifyAsSnakeArrayMass($parserObjectList);
$finalList=array_map(fn(array $row):array => ArrayHelper::fetch($row,$input['info_list']),$finalList);
return [
'commodity_info_list'=>$finalList,
];
};
$res=$this->run($input,$body);
return $res;
}
}