status = 1; $e->message = 'ok'; $e->update_flag = 0; // 0 1 2 $getPostData = file_get_contents('php://input', 'r'); self::myLog('actionCheckVersion:'.$getPostData); if (!$getPostData) { $e->message = '数据为空'; return $e; } $getPostData = json_decode($getPostData, true); $barcode = isset($getPostData['barcode'])? $getPostData['barcode']:''; $deviceId = isset($getPostData['device_id'])? $getPostData['device_id']:''; $softwareVersion = isset($getPostData['software_version'])? $getPostData['software_version']:''; $hardwareVersion = isset($getPostData['hardware_version'])? $getPostData['hardware_version']:''; if (empty($barcode) || empty($packageName) || empty($currentVersion) || empty($softwareVersion)|| empty($hardwareVersion)) { $e->status = 2; $e->message = '部分数据为空'; return $e; } $deviceBatchInfo = Device::explodeBarcode($barcode); if (empty($deviceBatchInfo)) { $e->status = 3; $e->message = 'barcode格式有误'; return $e; } $deviceModel = DeviceRepository::findOne(['device_id' => $deviceId]); if (empty($deviceModel)) { $e->status = 4; $e->message = '无该设备记录'; return $e; } $ma = ManufacturerRepository::findOne(['manufacture_no' => $deviceBatchInfo[0]]); $manufactureId = 0; if ($ma) { $manufactureId = $ma->id; } $upgradeModel = UpgradeModel::find(); $upgradeModel->where([ 'manufacture_id' => $manufactureId, 'status' => UpgradeStatus::STATUS_ON, 'is_delete' => 0, 'type' => UpgradeStatus::TYPE_OTA ]); $upgradeModel->andWhere(['>', 'version', $hardwareVersion]); $upgradeModel->orderBy('created_at desc'); $upgradeRecord = $upgradeModel->one(); if (!$upgradeRecord) { $e->status = 1; $e->message = '暂无升级包'; $e->update_flag = 0; $e->version = ''; $e->file_path = ''; $e->file_md5 = ''; $e->size = 0; $e->version_message = ''; $e->package_type = 0; return $e; } $devices = []; if ($upgradeRecord->device_ids) { $devices = explode(',', $upgradeRecord->device_ids); } // 不在预发布指定的设备里面 if ($devices && !in_array($deviceId, $devices)) { $e->status = 1; $e->message = '暂无升级包'; $e->update_flag = 0; $e->version = ''; $e->file_path = ''; $e->file_md5 = ''; $e->size = 0; $e->version_message = ''; $e->package_type = 0; return $e; } $domainURL = Yii::$app->params['file_upload_domain']; $e->status = 0; $e->message = '有升级包'; $e->update_flag = $upgradeRecord->focuse; $e->version = $upgradeRecord->version; $e->file_path = $domainURL.$upgradeRecord->path; $e->file_md5 = $upgradeRecord->file_md5; $e->size = $upgradeRecord->size; $e->package_type = $upgradeRecord->package_type; $e->version_message = $upgradeRecord->desc; return $e; } /** * 上报 OTA 升级事件 * @return stdClass */ public function actionReportUpgradeEvent() { $e = new stdClass(); $e->status = 1; $getPostData = file_get_contents('php://input', 'r'); self::myLog('actionReportUpgradeEvent:'. $getPostData); if (!$getPostData) { $e->message = '数据为空'; return $e; } $getPostData = json_decode($getPostData, true); $barcode = isset($getPostData['barcode'])? $getPostData['barcode']:''; $deviceId = isset($getPostData['device_id'])? $getPostData['device_id']:''; $currentVersion = isset($getPostData['current_version'])? $getPostData['current_version']:''; $targetVersion = isset($getPostData['target_version'])? $getPostData['target_version']:''; $status = isset($getPostData['status'])? $getPostData['status']:''; $errorCode = isset($getPostData['error_code'])? $getPostData['error_code']:''; $timestamp = isset($getPostData['timestamp'])? $getPostData['timestamp']:''; if (empty($barcode) || empty($currentVersion) || empty($targetVersion) || empty($status) || empty($errorCode) || empty($timestamp)) { $e->status = 2; $e->message = '部分数据为空'; return $e; } if (empty($deviceId)) { $e->status = 3; $e->message = '设备ID为空'; return $e; } $deviceBatchInfo = Device::explodeBarcode($barcode); if (empty($deviceBatchInfo)) { $e->status = 4; $e->message = 'barcode格式有误'; return $e; } $upgradeLogModel = UpgradeLogRepository::findOne(['device_id' => $deviceId, 'current_version' => $currentVersion, 'target_version' => $targetVersion, 'status' => $status, 'type' => UpgradeStatus::TYPE_OTA]); if ($upgradeLogModel) { $upgradeLogModel->timestamp = $timestamp; $upgradeLogModel->save(); $e->status = 0; $e->message = '已更新'; return $e; } $ma = ManufacturerRepository::findOne(['manufacture_no' => $deviceBatchInfo[0]]); $pro = ProjectRepository::findOne(['project_no' => $deviceBatchInfo[1]]); $model = ModelRepository::findOne(['model_no' => $deviceBatchInfo[2]]); $manufactureId = $projectId = $modelId = 0; if ($ma) { $manufactureId = $ma->id; } if ($pro) { $projectId = $pro->id; } if ($model) { $modelId = $model->id; } $item = [ "barcode" => $barcode, "device_id" => $deviceId, "manufacture_id" => $manufactureId, "project_id" => $projectId, "model_id" => $modelId, "current_version" => $currentVersion, "target_version" => $targetVersion, "status" => $status, "error_code" => $errorCode, "timestamp" => $timestamp, "type" => UpgradeStatus::TYPE_OTA ]; $saveR = UpgradeLog::create($item); if ($saveR) { $e->status = 0; $e->message = 'ok'; } else { $e->status = 5; $e->message = '报告记录失败'; } return $e; } /** * APP 升级检测 * @return stdClass */ public function actionCheckAppVersion() { $e = new stdClass(); $e->status = 1; $getPostData = file_get_contents('php://input', 'r'); self::myLog('actionReportUpgradeEvent:'. $getPostData); if (!$getPostData) { $e->message = '数据为空'; return $e; } $getPostData = json_decode($getPostData, true); $barcode = isset($getPostData['barcode'])? $getPostData['barcode']: ''; $deviceId = isset($getPostData['device_id'])? $getPostData['device_id']: ''; $packageName = isset($getPostData['package_name'])? $getPostData['package_name']: ''; $currentVersion = isset($getPostData['current_version'])? $getPostData['current_version']: ''; if (empty($barcode) || empty($packageName) || empty($currentVersion)) { $e->status = 2; $e->message = '部分数据为空'; return $e; } $deviceBatchInfo = Device::explodeBarcode($barcode); if (empty($deviceBatchInfo)) { $e->status = 3; $e->message = 'barcode格式有误'; return $e; } $deviceModel = DeviceRepository::findOne(['device_id' => $deviceId]); if (empty($deviceModel)) { $e->status = 4; $e->message = '无该设备记录'; return $e; } $ma = ManufacturerRepository::findOne(['manufacture_no' => $deviceBatchInfo[0]]); $manufactureId = 0; if ($ma) { $manufactureId = $ma->id; } $upgradeModel = UpgradeModel::find(); $upgradeModel->where([ 'manufacture_id' => $manufactureId, 'status' => UpgradeStatus::STATUS_ON, 'package_name' => $packageName, 'is_delete' => 0, 'type' => UpgradeStatus::TYPE_APP ]); $upgradeModel->andWhere(['>', 'version', $currentVersion]); $upgradeModel->orderBy('created_at desc'); $upgradeRecord = $upgradeModel->one(); if (!$upgradeRecord) { $e->status = 1; $e->message = '暂无升级包'; $e->update_flag = 0; $e->version = ''; $e->file_path = ''; $e->file_md5 = ''; $e->size = 0; $e->version_message = ''; } else { $domainURL = Yii::$app->params['file_upload_domain']; $e->status = 0; $e->message = '有升级包'; $e->update_flag = $upgradeRecord->focuse; $e->version = $upgradeRecord->version; $e->file_path = $domainURL.$upgradeRecord->path; $e->file_md5 = $upgradeRecord->file_md5; $e->size = $upgradeRecord->size; $e->version_message = $upgradeRecord->desc; } return $e; } /** * APP 升级报告 * @return stdClass */ public function actionReportAppUpgradeEvent() { $e = new stdClass(); $e->status = 1; $getPostData = file_get_contents('php://input', 'r'); self::myLog('actionReportUpgradeEvent:'. $getPostData); if (!$getPostData) { $e->message = '数据为空'; return $e; } $getPostData = json_decode($getPostData, true); $barcode = isset($getPostData['barcode'])? $getPostData['barcode']: ''; $deviceId = isset($getPostData['device_id'])? $getPostData['device_id']: ''; $currentVersion = isset($getPostData['current_version'])? $getPostData['current_version']: ''; $targetVersion = isset($getPostData['target_version'])? $getPostData['target_version']: ''; $status = isset($getPostData['status'])? $getPostData['status']: ''; $errorCode = isset($getPostData['error_code'])? $getPostData['error_code']: ''; $timestamp = isset($getPostData['timestamp'])? $getPostData['timestamp']: ''; if (empty($barcode) || empty($currentVersion) || empty($targetVersion) || empty($status) || empty($errorCode) || empty($timestamp)) { $e->status = 2; $e->message = '部分数据为空'; return $e; } if (empty($deviceId)) { $e->status = 3; $e->message = '设备ID为空'; return $e; } $deviceBatchInfo = Device::explodeBarcode($barcode); if (empty($deviceBatchInfo)) { $e->status = 4; $e->message = 'barcode格式有误'; return $e; } $upgradeLogModel = UpgradeLogRepository::findOne(['device_id' => $deviceId, 'current_version' => $currentVersion, 'target_version' => $targetVersion, 'status' => $status, 'type' => UpgradeStatus::TYPE_APP]); if ($upgradeLogModel) { $upgradeLogModel->timestamp = $timestamp; $upgradeLogModel->save(); $e->status = 0; $e->message = '已更新'; return $e; } $ma = ManufacturerRepository::findOne(['manufacture_no' => $deviceBatchInfo[0]]); $pro = ProjectRepository::findOne(['project_no' => $deviceBatchInfo[1]]); $model = ModelRepository::findOne(['model_no' => $deviceBatchInfo[2]]); $manufactureId = $projectId = $modelId = 0; if ($ma) { $manufactureId = $ma->id; } if ($pro) { $projectId = $pro->id; } if ($model) { $modelId = $model->id; } $item = [ "barcode" => $barcode, "device_id" => $deviceId, "manufacture_id" => $manufactureId, "project_id" => $projectId, "model_id" => $modelId, "current_version" => $currentVersion, "target_version" => $targetVersion, "status" => $status, "error_code" => $errorCode, "timestamp" => $timestamp, "type" => UpgradeStatus::TYPE_APP ]; $saveR = UpgradeLog::create($item); if ($saveR) { $e->status = 0; $e->message = 'ok'; } else { $e->status = 5; $e->message = '记录失败'; } return $e; } /** * 机器状态统计 * @return stdClass */ public function actionReportDeviceVersion() { $e = new stdClass(); $e->status = 1; $getPostData = file_get_contents('php://input', 'r'); self::myLog('actionReportDeviceVersion:'. $getPostData); if (!$getPostData) { $e->message = '数据为空'; return $e; } $getPostData = json_decode($getPostData, true); $barcode = isset($getPostData['barcode'])? $getPostData['barcode']: ''; $deviceId = isset($getPostData['device_id'])? $getPostData['device_id']: ''; $softwareVersion = isset($getPostData['software_version'])? $getPostData['software_version']: ''; $hardwareVersion = isset($getPostData['hardware_version'])? $getPostData['hardware_version']: ''; $timestamp = isset($getPostData['timestamp'])? $getPostData['timestamp']: ''; if (empty($barcode) || empty($softwareVersion) || empty($hardwareVersion) || empty($timestamp)) { $e->status = 2; $e->message = '部分数据为空'; return $e; } if (empty($deviceId)) { $e->status = 3; $e->message = '设备ID为空'; return $e; } $ipAddress = Utils::clientIp(); $deviceStatsModel = DeviceStatsRepository::findOne(['device_id' => $deviceId]); if ($deviceStatsModel) { $deviceStatsModel->timestamp = $timestamp; $deviceStatsModel->ip = $ipAddress; $deviceStatsModel->save(); $e->status = 0; $e->message = 'ok'; return $e; } $deviceBatchInfo = Device::explodeBarcode($barcode); if (empty($deviceBatchInfo)) { $e->status = 4; $e->message = 'barcode格式有误'; return $e; } $ma = ManufacturerRepository::findOne(['manufacture_no' => $deviceBatchInfo[0]]); $pro = ProjectRepository::findOne(['project_no' => $deviceBatchInfo[1]]); $model = ModelRepository::findOne(['model_no' => $deviceBatchInfo[2]]); $prod = ProductionRepository::findOne(['production_no' => $deviceBatchInfo[3]]); $manufactureId = $projectId = $modelId = $productionId = 0; if ($ma) { $manufactureId = $ma->id; } if ($pro) { $projectId = $pro->id; } if ($model) { $modelId = $model->id; } if ($prod) { $productionId = $prod->id; } $cityResult = Utils::getAddressByIPAddress($ipAddress); $city = ''; if ($cityResult && isset($cityResult['city']) && !empty($cityResult['city'])) { $city = $cityResult['city']; } $item = [ 'device_id' => $deviceId, 'barcode' => $barcode, 'software_version' => $softwareVersion, 'hardware_version' => $hardwareVersion, 'timestamp' => $timestamp, 'manufacture_id' => $manufactureId, 'project_id' => $projectId, 'model_id' => $modelId, 'production_id' => $productionId, 'ip' => $ipAddress, 'city' => $city ]; DeviceStats::create($item); $e->status = 0; $e->message = 'ok'; return $e; } }