| | |
| | | } |
| | | } |
| | | |
| | | // 任务状态转换成 int 类型 |
| | | int TransferManager::statusToInt(TransferStatus status) { |
| | | return static_cast<int>(status); |
| | | } |
| | | |
| | | // int 类型转换成任务状态 |
| | | TransferStatus TransferManager::intToStatus(int value) { |
| | | switch (value) { |
| | | case 0: return TransferStatus::Ready; |
| | | case 1: return TransferStatus::Running; |
| | | case 2: return TransferStatus::Error; |
| | | case 3: return TransferStatus::Abort; |
| | | case 4: return TransferStatus::Completed; |
| | | default: return TransferStatus::Error; |
| | | } |
| | | } |
| | | |
| | | // 任务状态转换成字符串 |
| | | std::string TransferManager::statusToString(TransferStatus status) { |
| | | switch (status) { |
| | | case TransferStatus::Ready: return "Ready"; |
| | | case TransferStatus::Running: return "Running"; |
| | | case TransferStatus::Error: return "Error"; |
| | | case TransferStatus::Abort: return "Abort"; |
| | | case TransferStatus::Completed: return "Completed"; |
| | | default: return "Unknown"; |
| | | } |
| | | } |
| | | |
| | | // 字符串转换成任务状态 |
| | | TransferStatus TransferManager::stringToStatus(const std::string& str) { |
| | | if (str == "Ready") return TransferStatus::Ready; |
| | | if (str == "Running") return TransferStatus::Running; |
| | | if (str == "Error") return TransferStatus::Error; |
| | | if (str == "Abort") return TransferStatus::Abort; |
| | | if (str == "Completed") return TransferStatus::Completed; |
| | | return TransferStatus::Error; |
| | | } |
| | | |
| | | // 本地编码转为 UTF-8 |
| | | std::string TransferManager::ansiToUtf8(const std::string& ansiStr) { |
| | | // 1. ANSI → UTF-16 |
| | |
| | | } |
| | | |
| | | // 插入测试搬运记录 |
| | | void TransferManager::insertTestTransferRecord() { |
| | | TransferData data; |
| | | data.strClassID = "Task-20240529-001"; |
| | | data.strStatus = "Running"; |
| | | data.strCreateTime = "2024-05-29 10:30:00"; |
| | | data.strPickTime = "2024-05-29 10:31:00"; |
| | | data.strPlaceTime = "2024-05-29 10:32:00"; |
| | | data.strEndTime = "2024-05-29 10:33:00"; |
| | | data.strDescription = "搬运动作:从 Port1 取片 → Port2 放片"; |
| | | void TransferManager::insertTestTransferRecord(int nCount /*=10000*/) { |
| | | if (nullptr != m_pDB) { |
| | | static const char* STATUS_STR[] = { |
| | | "Unknown", "Ready", "Running", "Picking", "Placing", |
| | | "Restoring", "Error", "Abort", "Completed" |
| | | }; |
| | | |
| | | int nRecordId = -1; |
| | | if (TransferManager::getInstance().addTransferRecord(data, nRecordId)) { |
| | | std::cout << "插入成功,记录 ID = " << nRecordId << std::endl; |
| | | } |
| | | else { |
| | | std::cerr << "插入失败!" << std::endl; |
| | | auto formatTime = [](const std::tm& time) { |
| | | char szTime[64]; |
| | | strftime(szTime, sizeof(szTime), "%Y-%m-%d %H:%M:%S", &time); |
| | | return std::string(szTime); |
| | | }; |
| | | |
| | | std::time_t startTime = std::time(nullptr); |
| | | for (int i = 0; i < nCount; ++i) { |
| | | TransferData data; |
| | | data.strClassID = "T-" + std::to_string(1000 + i); |
| | | data.strStatus = STATUS_STR[i % 9]; |
| | | |
| | | std::time_t baseTime = startTime + i * 60; |
| | | std::time_t pickTime = baseTime + 60; |
| | | std::time_t placeTime = pickTime + 60; |
| | | std::time_t endTime = placeTime + 60; |
| | | |
| | | std::tm tmCreate = {}, tmPick = {}, tmPlace = {}, tmEnd = {}; |
| | | localtime_s(&tmCreate, &baseTime); |
| | | localtime_s(&tmPick, &pickTime); |
| | | localtime_s(&tmPlace, &placeTime); |
| | | localtime_s(&tmEnd, &endTime); |
| | | |
| | | data.strCreateTime = formatTime(tmCreate); |
| | | data.strPickTime = formatTime(tmPick); |
| | | data.strPlaceTime = formatTime(tmPlace); |
| | | data.strEndTime = formatTime(tmEnd); |
| | | data.strDescription = "Mock transfer task " + std::to_string(i); |
| | | |
| | | int nRecordId = 0; |
| | | if (!addTransferRecord(data, nRecordId)) { |
| | | std::cerr << "[Error] 插入第 " << i << " 条记录失败" << std::endl; |
| | | } |
| | | } |
| | | |
| | | std::cout << "[Mock] 成功插入 " << nCount << " 条测试搬运记录。" << std::endl; |
| | | } |
| | | } |
| | | |
| | |
| | | |
| | | TransferData data; |
| | | data.nRecordId = std::stoi(row[0]); |
| | | data.strClassID = row[1]; |
| | | data.strStatus = row[2]; |
| | | data.strClassID = utf8ToAnsi(row[1]); |
| | | data.strStatus = utf8ToAnsi(row[2]); |
| | | data.strCreateTime = row[3]; |
| | | data.strPickTime = row[4]; |
| | | data.strPlaceTime = row[5]; |
| | | data.strEndTime = row[6]; |
| | | data.strDescription = row[7]; |
| | | data.strDescription = utf8ToAnsi(row[7]); |
| | | |
| | | records.push_back(data); |
| | | } |
| | |
| | | auto results = m_pDB->fetchResults(oss.str()); |
| | | if (!results.empty() && results[0].size() == 8) { |
| | | data.nRecordId = std::stoi(results[0][0]); |
| | | data.strClassID = results[0][1]; |
| | | data.strStatus = results[0][2]; |
| | | data.strClassID = utf8ToAnsi(results[0][1]); |
| | | data.strStatus = utf8ToAnsi(results[0][2]); |
| | | data.strCreateTime = results[0][3]; |
| | | data.strPickTime = results[0][4]; |
| | | data.strPlaceTime = results[0][5]; |
| | | data.strEndTime = results[0][6]; |
| | | data.strDescription = results[0][7]; |
| | | data.strDescription = utf8ToAnsi(results[0][7]); |
| | | } |
| | | return data; |
| | | } |
| | |
| | | if (row.size() != 8) continue; |
| | | TransferData data; |
| | | data.nRecordId = std::stoi(row[0]); |
| | | data.strClassID = row[1]; |
| | | data.strStatus = row[2]; |
| | | data.strClassID = utf8ToAnsi(row[1]); |
| | | data.strStatus = utf8ToAnsi(row[2]); |
| | | data.strCreateTime = row[3]; |
| | | data.strPickTime = row[4]; |
| | | data.strPlaceTime = row[5]; |
| | | data.strEndTime = row[6]; |
| | | data.strDescription = row[7]; |
| | | data.strDescription = utf8ToAnsi(row[7]); |
| | | records.push_back(data); |
| | | } |
| | | return records; |
| | |
| | | |
| | | std::ostringstream oss; |
| | | oss << "SELECT record_id, class_id, status, create_time, pick_time, place_time, end_time, description " |
| | | << "FROM transfers WHERE status = '" << status << "' " |
| | | << "FROM transfers WHERE status = '" << ansiToUtf8(status) << "' " |
| | | << "ORDER BY create_time DESC"; |
| | | |
| | | auto results = m_pDB->fetchResults(oss.str()); |
| | |
| | | |
| | | TransferData data; |
| | | data.nRecordId = std::stoi(row[0]); |
| | | data.strClassID = row[1]; |
| | | data.strStatus = row[2]; |
| | | data.strClassID = utf8ToAnsi(row[1]); |
| | | data.strStatus = utf8ToAnsi(row[2]); |
| | | data.strCreateTime = row[3]; |
| | | data.strPickTime = row[4]; |
| | | data.strPlaceTime = row[5]; |
| | | data.strEndTime = row[6]; |
| | | data.strDescription = row[7]; |
| | | data.strDescription = utf8ToAnsi(row[7]); |
| | | |
| | | records.push_back(data); |
| | | } |
| | |
| | | // return records; |
| | | //} |
| | | |
| | | // 获取符合条件的记录总数 |
| | | int TransferManager::getTotalTransferCount() { |
| | | // 获取记录总数 |
| | | int TransferManager::getTotalTransferCountAll() { |
| | | if (!m_pDB) { |
| | | return 0; |
| | | } |
| | |
| | | } |
| | | |
| | | // 获取符合条件的记录总数 |
| | | int TransferManager::getTotalTransferCount(const TransferData& filter) { |
| | | int TransferManager::getFilteredTransferCount(const TransferData& filter) { |
| | | if (!m_pDB) { |
| | | return 0; |
| | | } |
| | |
| | | |
| | | // 状态筛选(完全匹配) |
| | | if (!filter.strStatus.empty()) { |
| | | oss << " AND status = '" << filter.strStatus << "'"; |
| | | oss << " AND status = '" << ansiToUtf8(filter.strStatus) << "'"; |
| | | } |
| | | |
| | | // 描述关键字模糊匹配 |
| | | if (!filter.strDescription.empty()) { |
| | | oss << " AND description LIKE '%" << filter.strDescription << "%'"; |
| | | oss << " AND description LIKE '%" << ansiToUtf8(filter.strDescription) << "%'"; |
| | | } |
| | | |
| | | // 时间范围筛选 |
| | |
| | | |
| | | // 条件拼接(与 getTotalTransferCount 保持一致) |
| | | if (!filter.strStatus.empty()) { |
| | | oss << " AND status = '" << filter.strStatus << "'"; |
| | | oss << " AND status = '" << ansiToUtf8(filter.strStatus) << "'"; |
| | | } |
| | | if (!filter.strDescription.empty()) { |
| | | oss << " AND description LIKE '%" << filter.strDescription << "%'"; |
| | | oss << " AND description LIKE '%" << ansiToUtf8(filter.strDescription) << "%'"; |
| | | } |
| | | if (!filter.strCreateTime.empty()) { |
| | | oss << " AND create_time >= '" << filter.strCreateTime << "'"; |
| | |
| | | |
| | | TransferData data; |
| | | data.nRecordId = std::stoi(row[0]); |
| | | data.strClassID = row[1]; |
| | | data.strStatus = row[2]; |
| | | data.strClassID = utf8ToAnsi(row[1]); |
| | | data.strStatus = utf8ToAnsi(row[2]); |
| | | data.strCreateTime = row[3]; |
| | | data.strPickTime = row[4]; |
| | | data.strPlaceTime = row[5]; |
| | | data.strEndTime = row[6]; |
| | | data.strDescription = row[7]; |
| | | data.strDescription = utf8ToAnsi(row[7]); |
| | | |
| | | records.push_back(data); |
| | | } |