<?php
require_once ('config.php');
$flagFile = APPLICATION_PATH . '/../data/log/checkFormStatus.lock';
if (@file_exists($flagFile)) {
    echo 'Anather process is running.'."\r\n";
    echo $flagFile."\r\n";
    exit();
}
$link = fopen($flagFile, 'wb');
fclose($link);
define('RUNTIME', '[' . date('Y-m-d H:i:s') . '] ');
echo RUNTIME . "Starting.\r\n";

//测试账号
$aTestAccount = array('E0110', 'E0207');

//发送入区报文
try {
	$ftProcess = new Service_FtpReceiveProcess();
	$sendList = Service_FtpMessageSendlist::getByCondition(array('fmt_code'=>'MRK', 'fml_status'=>1));
	foreach($sendList as $sendRow) {
		//检查
		$aReceiving = Service_Receiving::getByField($sendRow['refercence_no'], 'receiving_code');
		if(empty($aReceiving) || in_array($aReceiving['customer_code'],$aTestAccount)) {
			echo "测试账号的单[".$sendRow['refercence_no']."]，不能发送\r\n";
			continue;
		}
		//生成
		$affect = $ftProcess->updateSendMessage($sendRow);
		if(!$affect) {
			echo "创建入库报文失败[".$sendRow['refercence_no']."]\r\n";
			continue;
		}
		//发送
		$result = $ftProcess->ftpSendMessage($sendRow['fml_id']);
		if(!$result) {
			echo "发送入库报文失败[".$sendRow['refercence_no']."]\r\n";
			continue;
		}
		//修改状态
		$aUpdate['fml_status'] = 2;
		$aUpdate['fml_update_time'] = date('Y-m-d H:i:s');
		Service_FtpMessageSendlist::update($aUpdate, $sendRow['fml_id']);
		echo "发送入库报文成功[".$sendRow['refercence_no']."]\r\n";
	}
	echo "[发送入区报文]全部处理完成\r\n";
} catch (Exception $e) {
	@unlink($flagFile);
	echo '[' . date('Y-m-d H:i:s') . '] Fail Exception:' . $e->getTraceAsString() ."\r\n";
}

//发送出区报文
try {
	$ftProcess = new Service_FtpMessageProcess();
	$sendList = Service_FtpMessageSendlist::getByCondition(array('fmt_code'=>'MCK', 'fml_status'=>1));
	foreach($sendList as $sendRow) {
		//生成
		$affect = $ftProcess->updateSendMessage($sendRow);
		if(!$affect) {
			echo "创建出库报文失败[".$sendRow['refercence_no']."]\r\n";
			continue;
		}
		//发送
		$result = $ftProcess->ftpSendMessage($sendRow['fml_id']);
		if(!$result) {
			echo "发送出库报文失败[".$sendRow['refercence_no']."]\r\n";
			continue;
		}
		//修改状态
		$aUpdate['fml_status'] = 2;
		$aUpdate['fml_update_time'] = date('Y-m-d H:i:s');
		Service_FtpMessageSendlist::update($aUpdate, $sendRow['fml_id']);
		echo "发送出库报文成功[".$sendRow['refercence_no']."]\r\n";
	}
	echo "[发送出区报文]全部处理完成\r\n";
} catch (Exception $e) {
	@unlink($flagFile);
	echo '[' . date('Y-m-d H:i:s') . '] Fail Exception:' . $e->getMessage() ."\r\n";
}

//检查出入区报文
function passReceiving($fml_id, $FORM_ID_XML, $refercence_no) {
	$uUpdate['fml_status'] = 3;
	$uUpdate['fml_update_time'] = date('Y-m-d H:i:s');
	Service_FtpMessageSendlist::update($uUpdate, $fml_id);
	$uReceiving['receiving_status'] = 4;
	$uReceiving['refercence_form_id'] = $FORM_ID_XML;
	$uReceiving['receiving_update_time'] = date('Y-m-d H:i:s');
	Service_Receiving::update($uReceiving, $refercence_no, 'receiving_code');
}
function passShipBatch($fml_id, $FORM_ID_XML, $refercence_no) {
	$uUpdate['fml_status'] = 3;
	$uUpdate['fml_update_time'] = date('Y-m-d H:i:s');
	Service_FtpMessageSendlist::update($uUpdate, $fml_id);
	//总单状态
	$uShipBatch['sb_status'] = 2;
	$uShipBatch['sb_update_time'] = date('Y-m-d H:i:s');
	Service_ShipBatch::update($uShipBatch, $refercence_no, 'sb_code');
	$uAttribute['refercence_form_id'] = $FORM_ID_XML;
	Service_ShipBatchAttribute::update($uAttribute, $refercence_no, 'sb_code');
}
try {
	$afsList = Service_ApiFormStatus::getByCondition(array('afs_status'=>1));
	foreach($afsList as $afsRow) {
		$sendRow =  Service_FtpMessageSendlist::getByField($afsRow['FORM_ID'],'refercence_no');
		if(empty($sendRow)) {
			echo "[".$afsRow['FORM_ID']."]不存在\r\n";
			continue;
		}
		if($sendRow['fmt_code'] == 'MRK') {	//入库单
			$receivingInfo=Service_Receiving::getByField($afsRow['FORM_ID'],'receiving_code');
			if(empty($receivingInfo)){
				echo "ASN[".$afsRow['FORM_ID']."]不存在\r\n";
				continue;
			}
			if($receivingInfo['receiving_status']!='3'){
				echo "ASN[".$afsRow['FORM_ID']."]不在未审核状态\r\n";
				continue;
			}
			if($afsRow['STATUS']=='11') {	//已审核通过
				if($sendRow['fml_status']!=2) {
					echo "入库报文[".$sendRow['refercence_no']."]不在审核中[2]的状态\r\n";
					Service_ApiFormStatus::update(array('afs_status'=>3), $afsRow['afs_id']);
					continue;
				}
				passReceiving($sendRow['fml_id'], $afsRow['FORM_ID_XML'], $sendRow['refercence_no']);
				echo "入库报文[".$sendRow['refercence_no']."]审核通过\r\n";
			} else if($afsRow['STATUS']=='7') {	//已入/出库
				if($sendRow['fml_status']==2) {
					passReceiving($sendRow['fml_id'], $afsRow['FORM_ID_XML'], $sendRow['refercence_no']);
				}
				echo "入库报文[".$sendRow['refercence_no']."]已入库\r\n";
			} else {	//其他状态
				echo "入库报文[".$sendRow['refercence_no']."]审核不通过\r\n";
				continue;
				$uUpdate['fml_status'] = 4;
				$uUpdate['fml_update_time'] = date('Y-m-d H:i:s');
				Service_FtpMessageSendlist::update($uUpdate, $sendRow['fml_id']);
				echo "入库报文[".$sendRow['refercence_no']."]审核不通过\r\n";
			}
		} else if($sendRow['fmt_code'] == 'MCK') {	//出库单
			if($afsRow['STATUS']=='11') {	//已审核通过
				if($sendRow['fml_status']!=2) {
					echo "出库报文[".$sendRow['refercence_no']."]不在审核中[2]的状态\r\n";
					Service_ApiFormStatus::update(array('afs_status'=>3), $afsRow['afs_id']);
					continue;
				}
				passShipBatch($sendRow['fml_id'], $afsRow['FORM_ID_XML'], $sendRow['refercence_no']);
				echo "出库报文[".$sendRow['refercence_no']."]审核通过\r\n";
			} else if($afsRow['STATUS']=='7') {	//已入/出库
				if($sendRow['fml_status']==2) {
					passShipBatch($sendRow['fml_id'], $afsRow['FORM_ID_XML'], $sendRow['refercence_no']);
				}
				echo "出库报文[".$sendRow['refercence_no']."]已出库\r\n";
			} else {	//其他状态
				$uUpdate['fml_status'] = 4;
				$uUpdate['fml_update_time'] = date('Y-m-d H:i:s');
				Service_FtpMessageSendlist::update($uUpdate, $sendRow['fml_id']);
				echo "出库报文[".$sendRow['refercence_no']."]审核不通过\r\n";
			}
		}		
		Service_ApiFormStatus::update(array('afs_status'=>2), $afsRow['afs_id']);
	}
	echo "[检查出入区报文]全部处理完成\r\n";
} catch (Exception $e) {
    @unlink($flagFile);
    echo '[' . date('Y-m-d H:i:s') . '] Fail Exception:' . $e->getMessage() ."\r\n";
}

echo "[" . date('Y-m-d H:i:s') . "] End run\r\n\r\n";
@unlink($flagFile);