<?php
/**
 * 获取综保系统的回执
 */
require_once('config.php');
set_time_limit(0);
$flag = APPLICATION_PATH . '/../data/log/InvtResponseFetch.lock';
if (@file_exists($flag)) {
    echo date('Y-m-d H:i:s'), "Another process is running\r\n";
    echo "{$flag}\r\n";
    exit();
}
$handler = fopen($flag, 'wb');
fclose($handler);
function getInvResponse(){
    $invReceivPath = Service_BgCompany::getByField('ZH-WXT','company_code');
    $defaultConfig = $invReceivPath['config_value'];
    $defualtConfigArray = json_decode($defaultConfig,true);
    $defaultPath = $defualtConfigArray['inv']['receive']['path'];
//    $defaultPath='E:/ftp/zh_inv/receive/';
    $fileList = scandir($defaultPath);
    foreach ($fileList as $file){
        if ($file != '.' && $file != '..' && is_file($defaultPath . '/' . $file)) {
            parseData($defaultPath . '/' . $file);
        }
    }
}

echo '[', date('Y-m-d H:i:s'), '] Start', "\r\n";
function parseData($file) {
    $db = Common_Common::getAdapter();
    $invtSend = new Api_Inv_Send();
    $processInvSb = new Process_InvtSb();
    $path = APPLICATION_PATH . '/../data/zb-xml/' . date("Y-m") . '/';
    if (!file_exists($path)) {
        mkdir($path, 0777, true);
    }
//    $file ='E:/资料信息/报文回执/报文回执/核注单/Sas/InBox/Receipt_CUS0000E0100002022071515583400531920045_20220715155856808554549.INV';
    $db->beginTransaction();
    try {
        $baseName = basename($file);
        $content = file_get_contents($file);
        $xml = new DOMDocument();
        $xml->load($file);
        $rootNodeName =$xml->documentElement->nodeName;
        $data = simplexml_load_string(trim($content));
        $dataArray = Common_Common::objectToArray($data);
//        var_dump($data);
//        die();
        if (isset($dataArray['EnvelopInfo']['message_type'])) {
            if ($dataArray['EnvelopInfo']['message_type'] == 'INV201') {
                echo '201' . PHP_EOL;
                $invtSend->parseInv201($dataArray, $path.$baseName);
            }elseif ($dataArray['EnvelopInfo']['message_type'] == 'INV211') {
                echo '211' . PHP_EOL;
                $invtSend->parseInv211($dataArray, $path.$baseName);
            }elseif($dataArray['EnvelopInfo']['message_type'] =='SAS221'){
                $processInvSb->parseInvSas211($dataArray,$path.$baseName);
            }elseif($dataArray['EnvelopInfo']['message_type'] =='SAS223'){
                $processInvSb->parseInvSas223($dataArray,$path.$baseName);
            }
        } elseif ($rootNodeName == 'CommonResponeMessage') {
            echo 'CommonResponeMessage' . PHP_EOL;
            if(strstr($baseName,'SAS121')!==false){
                $processInvSb->parseCommonResponse($dataArray,$path.$baseName);
            }elseif(strstr($baseName,'INV101')!==false){
                $invtSend->parseCommonResponse($dataArray, $path.$baseName);
            }else{
                throw new Exception('无法识别的报文');
            }
        } elseif (isset($dataArray['responseResult'])) {
            $comment = $dataArray['responseResult']['results']['information'];
            echo 'responseResult' . PHP_EOL;
            $invtSend->invtResponseLog($comment, $path.$baseName, $dataArray['responseResult']['invtSeqNo']);
        }else{
            throw new Exception("无法识别的报文");
        }
        $db->commit();
        rename($file,$path.$baseName);
    } catch (Exception $e) {
        $db->rollBack();
        $failPath = dirname(dirname($file)).'/receivefailse/';
        if(!file_exists($failPath)){
            mkdir($failPath,0777,true);
        }
        $failName = pathinfo($baseName,PATHINFO_FILENAME).'.error';
        rename($file,$failPath.$baseName);
        file_put_contents($failPath.$failName,$e->__toString());
    }
}
getInvResponse();
echo "获取回执完成\r\n";
echo '[', date('Y-m-d H:i:s'), '] End', "\r\n";
@unlink($flag);
