| | |
| | | |
| | | // 插入测试搬运记录 |
| | | 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 放片"; |
| | | if (nullptr != m_pDB) { |
| | | int nCount = 10000; |
| | | for (int i = 0; i < nCount; ++i) { |
| | | TransferData data; |
| | | data.strClassID = "T-" + std::to_string(1000 + i); |
| | | data.strStatus = statusToString(static_cast<TransferStatus>(i % 5)); |
| | | |
| | | int nRecordId = -1; |
| | | if (TransferManager::getInstance().addTransferRecord(data, nRecordId)) { |
| | | std::cout << "插入成功,记录 ID = " << nRecordId << std::endl; |
| | | } |
| | | else { |
| | | std::cerr << "插入失败!" << std::endl; |
| | | std::time_t now = std::time(nullptr) + i * 60; // 每条记录间隔1分钟 |
| | | |
| | | std::tm tmCreate = {}, tmPick = {}, tmPlace = {}, tmEnd = {}; |
| | | localtime_s(&tmCreate, &now); |
| | | localtime_s(&tmPick, &(now += 60)); |
| | | localtime_s(&tmPlace, &(now += 60)); |
| | | localtime_s(&tmEnd, &(now += 60)); |
| | | |
| | | char szTime[64]; |
| | | strftime(szTime, sizeof(szTime), "%Y-%m-%d %H:%M:%S", &tmCreate); |
| | | data.strCreateTime = szTime; |
| | | strftime(szTime, sizeof(szTime), "%Y-%m-%d %H:%M:%S", &tmPick); |
| | | data.strPickTime = szTime; |
| | | strftime(szTime, sizeof(szTime), "%Y-%m-%d %H:%M:%S", &tmPlace); |
| | | data.strPlaceTime = szTime; |
| | | strftime(szTime, sizeof(szTime), "%Y-%m-%d %H:%M:%S", &tmEnd); |
| | | data.strEndTime = szTime; |
| | | |
| | | data.strDescription = "Mock transfer task " + std::to_string(i); |
| | | int nRecordId = 0; |
| | | addTransferRecord(data, nRecordId); |
| | | } |
| | | |
| | | 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); |
| | | } |