403Webshell
Server IP : 80.87.202.40  /  Your IP : 216.73.216.169
Web Server : Apache
System : Linux rospirotorg.ru 5.14.0-539.el9.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Dec 5 22:26:13 UTC 2024 x86_64
User : bitrix ( 600)
PHP Version : 8.2.27
Disable Function : NONE
MySQL : OFF |  cURL : ON |  WGET : ON |  Perl : ON |  Python : OFF |  Sudo : ON |  Pkexec : ON
Directory :  /home/bitrix/ext_www/rospirotorg.ru/bitrix/modules/lpost.delivery/lib/agents/

Upload File :
current_dir [ Writeable] document_root [ Writeable]

 

Command :


[ Back ]     

Current File : /home/bitrix/ext_www/rospirotorg.ru/bitrix/modules/lpost.delivery/lib/agents/savers.php
<?
namespace Lpost\Delivery\Agents;

use Bitrix\Main\Localization\Loc;
use Lpost\Delivery\Handlers\Pvz;
use Lpost\Delivery\Handlers\Zone;

Loc::loadMessages(__FILE__);

class Savers
{
    use \Lpost\Delivery\Base;
    
    public static function sync()
    {
        $pickups = \Lpost\Delivery\Entity\PickupStorageTable::getList([
            "select" => ["*"],
            "order" => [
                "id_pickup" => "asc"
            ]
        ])->fetchAll();

        if(empty($pickups)) return false;

        $pickupsItems = [];
        $zoneItems = [];

        foreach ($pickups as $key => $pickup) {
            if ($pickup['data']['IsCourier'] == 0) {
                $pickupsItems[$pickup['id_pickup']] = $pickup['data'];
            }
            else {
                $zoneItems[$pickup['id_pickup']] = $pickup['data'];
            }
        }

        self::setInTable(Pvz::TYPE, $pickupsItems);
        self::setInTable(Zone::TYPE, $zoneItems);
        self::setFastDelivery("PvzTable", "address");
        self::setFastDelivery("ZoneTable", "city_name");
        
        self::changeActive();

        return true;
    }

    public static function setInTable($table, array $data = [])
    {
        $dateUpdate = \Bitrix\Main\Type\DateTime::createFromTimestamp(time());
        
        if ($table == Pvz::TYPE) {
            
            $dataBaseItems = \Lpost\Delivery\Entity\PvzTable::getList([
                    'select' => ["id", "id_pickup"/*, "id_zone"*/]
                ]
            )->fetchAll();
            
            foreach ($dataBaseItems as $dataBaseItem) {
                if (isset($data[$dataBaseItem['id_pickup']])) {
                    $pickup = $data[$dataBaseItem['id_pickup']];
                    
                    $arDataUpd = [
                        "coord_lat" => $pickup['Latitude'],
                        "coord_long" => $pickup['Longitude'],
                        "address" => $pickup['Address'],
                        "pickup_dop" => $pickup['PickupDop'],
                        "photo" => \Bitrix\Main\Web\Json::encode($pickup['Photo']),
                        "metro" => $pickup['Metro'],
                        "time_work" => \Bitrix\Main\Web\Json::encode($pickup['PickupPointWorkHours']),
                        "city_name" => $pickup['CityName'],
                        "id_region" => $pickup['ID_Region'],
                        "is_cash" => $pickup['IsCash'],
                        "is_card" => $pickup['IsCard'],
                        "data_update" => $dateUpdate,
                        "day_logistic" => $pickup['DayLogistic'],
                        "active" => "Y",
                        "has_fitting_room" => isset($pickup['NumberOfFittingRooms']) ? 'Y' : 'N',
                    ];
                    
                    if(isset($pickup['Zone'][0]["ZoneNumber"]))
                       $arDataUpd["id_zone"] = $pickup['Zone'][0]["ZoneNumber"];
                    //elseif(isset($dataBaseItem['id_zone']))
                       //$arDataUpd["id_zone"] = $dataBaseItem['id_zone'];
                    else
                        $arDataUpd["id_zone"] = 0;
                    
                    //unset($dataBaseItem['id_zone']);
                    $resUpd = \Lpost\Delivery\Entity\PvzTable::update(
                        $dataBaseItem,
                        $arDataUpd
                    );
                    
                    unset($data[$dataBaseItem['id_pickup']]);
                }
                else {
                    
                    //unset($dataBaseItem['id_zone']);
                    \Lpost\Delivery\Entity\PvzTable::update(
                        $dataBaseItem,
                        [
                            "active" => "N"
                        ]
                    );
                    unset($data[$dataBaseItem['id_pickup']]);
                }
            }
            
            foreach ($data as $key => $pickup) {
                
                $arAddData = [
                    "id_pickup" => $pickup['ID_PickupPoint'],
                    "coord_lat" => $pickup['Latitude'] ?: 0,
                    "coord_long" => $pickup['Longitude'] ?: 0,
                    "address" => $pickup['Address'],
                    "pickup_dop" => $pickup['PickupDop'],
                    "photo" => \Bitrix\Main\Web\Json::encode($pickup['Photo']),
                    "metro" => $pickup['Metro'],
                    "time_work" => \Bitrix\Main\Web\Json::encode($pickup['PickupPointWorkHours']),
                    "city_name" => $pickup['CityName'],
                    "id_region" => $pickup['ID_Region'],
                    "is_cash" => $pickup['IsCash'],
                    "is_card" => $pickup['IsCard'],
                    "id_zone" => isset($pickup['Zone'][0]["ZoneNumber"]) ? $pickup['Zone'][0]["ZoneNumber"] : 0,
                    "day_logistic" => $pickup["DayLogistic"],
                    "active" => "Y",
                    "has_fitting_room" => isset($pickup['NumberOfFittingRooms']) ? 'Y' : 'N',
                ];
                
                $resAdd = \Lpost\Delivery\Entity\PvzTable::add($arAddData);
                if (!$resAdd->isSuccess()){
                    $errors = $resAdd->getErrorMessages();
                    (new static())->setError('error setInTable pvzTableUpdate', true, $errors);
                }
                unset($data[$key]);
            }
        }
        else {
            $dataBaseItems = \Lpost\Delivery\Entity\ZoneTable::getList([
                    'select' => ["id", "id_pickup", "coord_lat"]
                ]
            )->fetchAll();
            foreach ($dataBaseItems as $dataBaseItem) {
                if (isset($data[$dataBaseItem['id_pickup']])) {
                    $zone = $data[$dataBaseItem['id_pickup']];

                    $res=\Lpost\Delivery\Entity\ZoneTable::update(
                        ["id"=>$dataBaseItem['id'], "id_pickup"=>$dataBaseItem['id_pickup']],
                        [
                            "time_work" => \Bitrix\Main\Web\Json::encode($zone['PickupPointWorkHours']),
                            "id_region" => $zone['ID_Region'],
                            "zone" => \Bitrix\Main\Web\Json::encode($zone['Zone']),
                            "active" => "Y",
                            "is_cash" => $zone['IsCash'],
                            "is_card" => $zone['IsCard'],
                            "city_name" => $zone['CityName'],
                            "data_update" => $dateUpdate,
                            "day_logistic" => $zone['DayLogistic'],
                        ]
                    );

                    if($res->isSuccess() && empty((int) $dataBaseItem['coord_lat'])){
                        self::addAgentCoordsZoneCity($dataBaseItem['id'],$dataBaseItem['id_pickup'], $zone['CityName']);
                    }
                    unset($data[$dataBaseItem['id_pickup']]);
                }
                else {
                    \Lpost\Delivery\Entity\ZoneTable::update(
                        ["id"=>$dataBaseItem['id'], "id_pickup"=>$dataBaseItem['id_pickup']],
                        [
                            "active" => "N"
                        ]
                    );
                    unset($data[$dataBaseItem['id_pickup']]);
                }
            }
            foreach ($data as $key => $zone) {
                $res=\Lpost\Delivery\Entity\ZoneTable::add([
                    "id_pickup" => $zone['ID_PickupPoint'],
                    "time_work" => \Bitrix\Main\Web\Json::encode($zone['PickupPointWorkHours']),
                    "id_region" => $zone['ID_Region'],
                    "zone" => \Bitrix\Main\Web\Json::encode($zone['Zone']),
                    "active" => "Y",
                    "is_cash" => $zone['IsCash'],
                    "is_card" => $zone['IsCard'],
                    "city_name" => $zone['CityName'],
                    "day_logistic" => $zone['DayLogistic']
                ]);
                //$res->getId();
                if ($res->isSuccess()){
                    self::addAgentCoordsZoneCity($res->getId(), $zone['ID_PickupPoint'], $zone['CityName']);
                }
                unset($data[$key]);
            }
        }
    }

    public static function addAgentCoordsZoneCity($id, $id_pickup, $cityName){
        $yandexApiToken = \Lpost\Delivery\Settings::getInstance()->getOption("yandex_map_api_key");
        if(!$yandexApiToken) {
            return false;
        }
        \CAgent::AddAgent(
            "\\Lpost\\Delivery\\Agents\\Savers::agentCoordsZoneCity($id, $id_pickup, '".$cityName."');",
            \Lpost\Delivery\Settings::getInstance()->getModuleId(),
            "N",
            200,
            "",
            "Y"
        );
    }

    public static function agentCoordsZoneCity($id, $id_pickup, $cityName){
        $coords=\Lpost\Delivery\Main\City::requestGeocodeCoords($cityName);
        if(!empty($coords['coord_lat'])){
            \Lpost\Delivery\Entity\ZoneTable::update(['id'=>$id, 'id_pickup'=>$id_pickup], [
                "coord_lat" => $coords['coord_lat'],
                "coord_long" => $coords['coord_long']
            ]);
        }
    }

    public static function setFastDelivery($tableName = "PvzTable", $group = "address")
    {
        $pickups = [];
        $className = '\Lpost\Delivery\Entity\\' . $tableName;
        $res = $className::getList([
            "select" => [
                new \Bitrix\Main\Entity\ExpressionField('CNT', 'COUNT(%s)', ["id"]),
                new \Bitrix\Main\Entity\ExpressionField('ids', 'GROUP_CONCAT(%s)', ["id"]),
                new \Bitrix\Main\Entity\ExpressionField('id_pickups', 'GROUP_CONCAT(%s)', ["id_pickup"]),
                new \Bitrix\Main\Entity\ExpressionField('day_logistics', 'GROUP_CONCAT(%s)', ["day_logistic"]),
                $group,
            ],
            'filter' => [
                ">CNT" => 1,
                "active" => true,
            ],
            "group" => $group,
        ]);


        while ($row = $res->fetch()) {

            if (!empty($row['id_pickups'])) {

                $ids = explode(",", $row['ids']);
                $id_pickups = explode(",", $row['id_pickups']);
                $day_logistiics = explode(",", $row['day_logistics']);

                $minIndex = array_search(min($day_logistiics), $day_logistiics);

                foreach ($id_pickups as $key => $id_pickup) {

                    if ($id_pickups[$key] === $id_pickups[$minIndex]) {
                        continue;
                    }

                    $pickups[] = [
                        "id_pickup" => $id_pickups[$key],
                        "id" => $ids[$key],
                        "fast_pickup_id" => $id_pickups[$minIndex],
                        "day_delivery" => $day_logistiics[$minIndex]
                    ];
                }
            }
        }
        foreach ($pickups as $pickup) {
            $className::update(
                [
                    "id" => $pickup['id'],
                    "id_pickup" => $pickup['id_pickup'],
                ],
                [
                    "params" => [
                        "deliverySpeed" => [
                            "fast" => $pickup['fast_pickup_id'],
                            "slow" => $pickup['id_pickup']
                        ]
                    ],
                    /*"params" => [
                        "fastDelivery" => [
                            "fast_pickup_id" => $pickup['fast_pickup_id'],
                            "fast_day_delivery" => $pickup['day_delivery']
                        ]
                    ]*/
                ]);
        }
    }

    public static function changeActive()
    {
        \Lpost\Delivery\Entity\PvzTable::deActive();
        \Lpost\Delivery\Entity\ZoneTable::deActive();
    }
}


?>



Youez - 2016 - github.com/yon3zu
LinuXploit