From 3a54806b5f2c496870980dafbd9a69cbdfd0387a Mon Sep 17 00:00:00 2001 From: RCi <15089880081@163.com> Date: Sat, 18 Jan 2025 16:23:01 +0800 Subject: [PATCH] =?UTF-8?q?csv=E5=86=99=E5=85=A5=E9=98=B6=E6=AE=B5?= =?UTF-8?q?=E5=A4=87=E4=BB=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HanddleAI/Qt_epWindow.cpp | 4 +- HanddleAI/rlib_writeCsv.cpp | 2 + HanddleAI/rlib_writeCsv.h | 155 ++++++++++++++++++++++++++++++++++++ HanddleAI/rlib_writeCsv.hpp | 19 ----- 4 files changed, 159 insertions(+), 21 deletions(-) create mode 100644 HanddleAI/rlib_writeCsv.cpp create mode 100644 HanddleAI/rlib_writeCsv.h delete mode 100644 HanddleAI/rlib_writeCsv.hpp diff --git a/HanddleAI/Qt_epWindow.cpp b/HanddleAI/Qt_epWindow.cpp index 31a3921..bc64eea 100644 --- a/HanddleAI/Qt_epWindow.cpp +++ b/HanddleAI/Qt_epWindow.cpp @@ -1,6 +1,6 @@ #include "Qt_epWindow.h" #include "qapplication.h" -#include +#include #include #pragma execution_character_set("utf-8") @@ -2118,7 +2118,7 @@ void Qt_epWindow::getTransferData(QString key, QString cameraName, QString snInf strList.push_back(cameraName.toStdString());//相机名 for (int cnt = 1; cnt < outDataList.size(); cnt++) strList.push_back(outDataList[cnt].toStdString()); - WriteToCsv("./csv/" + ymd.toStdString()+".csv", strList); + //WriteToCsv("./csv/" + ymd.toStdString()+".csv", strList); } ui.plainTextEdit_run->appendPlainText(runLogList.last()); //qApp->processEvents(); diff --git a/HanddleAI/rlib_writeCsv.cpp b/HanddleAI/rlib_writeCsv.cpp new file mode 100644 index 0000000..dacebba --- /dev/null +++ b/HanddleAI/rlib_writeCsv.cpp @@ -0,0 +1,2 @@ +#include + diff --git a/HanddleAI/rlib_writeCsv.h b/HanddleAI/rlib_writeCsv.h new file mode 100644 index 0000000..8f39b68 --- /dev/null +++ b/HanddleAI/rlib_writeCsv.h @@ -0,0 +1,155 @@ +#include +#include +#include +#include +#include +#include +#include +class CsvWriter +{ +public: + CsvWriter() + { + init(); + } + + //输入 键 和 数值的键值对,键默认为条码 + void WriteToCsv(QString key,std::vector> strList) + { + //查询条码是否存在 + std::lock_guard locker(_mutex); + QTextStream currentCsvStream(currentCsvFile.get()); + auto it = currentKeys->find(key); + if (it != currentKeys->end()) { + QList lines; + while (!currentCsvStream.atEnd()) { + lines.append(currentCsvStream.readLine()); + } + //lines[it->second] + } + /*QByteArray qstr; + for (int cnt = 0; cnt < strList.size() - 1; cnt++) + qstr.append(QByteArray::fromStdString(strList[cnt]) + ","); + qstr.append(QByteArray::fromStdString(strList[strList.size() - 1]) + CRLF);*/ + } + void switchCsvFile(std::string path) + { + //创建文件并检查是否存在 + + } + void timeCheck() + { + + } + + +private: + std::mutex _mutex; + std::shared_ptr lastCsvFile; + std::shared_ptr currentCsvFile; + const char* CRLF = "\r\n"; + QByteArray csvHeaderStr = ""; + + std::unordered_map headers; + const char* keyName = "条码"; + std::unordered_map* lastKeys; + std::unordered_map* currentKeys; + void init() + { + std::lock_guard locker(_mutex); + addHeader("条码"); + addHeader("创建时间"); + addHeader("修改时间"); + { + lastCsvFile = openCsvFile(getLastProcessCsv()); + QTextStream lastCsvStream(lastCsvFile.get()); + while (!lastCsvStream.atEnd()) { + auto line = lastCsvStream.readLine(); + auto lineSplit = line.split(","); + if (lineSplit.size() > 0){ + lastKeys->insert({ lineSplit[0],lastKeys->size() + 1 }); + } + } + } + { + currentCsvFile = openCsvFile(getCurrentProcessCsv()); + QTextStream currentCsvStream(currentCsvFile.get()); + while (!currentCsvStream.atEnd()) { + auto line = currentCsvStream.readLine(); + auto lineSplit = line.split(","); + if (lineSplit.size() > 0) { + currentKeys->insert({ lineSplit[0],currentKeys->size() + 1 }); + } + } + } + } + void addHeader(QString header) { + headers.insert(std::make_pair(header, headers.size())); + if (csvHeaderStr == "") + csvHeaderStr.append(header); + else + csvHeaderStr.append(header + ","); + } + std::string getCurrentProcessCsv(){ + // 获取当前时间 + QDateTime currentDateTime = QDateTime::currentDateTime(); + + // 获取当前小时和分钟 + int hour = currentDateTime.time().hour(); + int minute = currentDateTime.time().minute(); + + // 判断是否在白班时间范围(8:30到20:30) + bool isDayShift = (hour > 8 || (hour == 8 && minute >= 30)) && (hour < 20 || (hour == 20 && minute <= 30)); + + // 获取当前日期(yyyy-MM-dd格式) + QString dateStr = currentDateTime.toString("yyyy-MM-dd"); + + // 根据时间段返回班次信息 + if (isDayShift) { + return (dateStr + "白班").toStdString(); + } + else { + return (dateStr + "夜班").toStdString(); + } + } + std::string getLastProcessCsv(){ + // 获取当前时间 + QDateTime currentDateTime = QDateTime::currentDateTime(); + + // 获取当前小时和分钟 + int hour = currentDateTime.time().hour(); + int minute = currentDateTime.time().minute(); + + // 判断是否在白班时间范围(8:30到20:30) + bool isDayShift = (hour > 8 || (hour == 8 && minute >= 30)) && (hour < 20 || (hour == 20 && minute <= 30)); + + // 获取上一班的日期 + QDateTime lastShiftDateTime; + if (isDayShift) { + // 当前是白班,上一班是前一天的夜班 + lastShiftDateTime = currentDateTime.addDays(-1); + } + else { + // 当前是夜班,上一班是前一天的白班 + lastShiftDateTime = currentDateTime.addDays(-1); + } + + // 获取上一班的日期(yyyy-MM-dd格式) + QString dateStr = lastShiftDateTime.toString("yyyy-MM-dd"); + + // 根据时间段返回班次信息 + if (isDayShift) { + return (dateStr + "夜班").toStdString(); // 上一班是夜班 + } + else { + return (dateStr + "白班").toStdString(); // 上一班是白班 + } + } + std::shared_ptropenCsvFile(std::string path){ + std::shared_ptr CsvFile = std::make_shared(QString::fromStdString(path)); + bool FileExist = CsvFile->exists(); + CsvFile->open(QIODevice::ReadWrite); + if (FileExist == false) + CsvFile->write(csvHeaderStr); + } +}; diff --git a/HanddleAI/rlib_writeCsv.hpp b/HanddleAI/rlib_writeCsv.hpp deleted file mode 100644 index 84f8232..0000000 --- a/HanddleAI/rlib_writeCsv.hpp +++ /dev/null @@ -1,19 +0,0 @@ -#include -#include -#define CsvHeadStr "时间,条码,相机名,总结果,撕裂,翻折,极耳宽,极耳高,焊印1,焊印2\r\n" -#define CRLF "\r\n" -void WriteToCsv(std::string filePath,std::vector strList) -{ - QFile CsvFile(QString::fromStdString(filePath)); - bool FileExist = CsvFile.exists(); - CsvFile.open(QIODevice::ReadWrite); - if (FileExist == false) - CsvFile.write(CsvHeadStr); - - QByteArray qstr; - for (int cnt = 0; cnt