|
|
|
|
|
#include "stocksdecoder.h"
|
|
|
|
|
|
#include <QDebug>
|
|
|
|
|
|
|
|
|
|
|
|
StocksDecoder::StocksDecoder()
|
|
|
|
|
|
{
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void StocksDecoder::decode(QList<QList<QVariant> > edatas,QString date)
|
|
|
|
|
|
{
|
|
|
|
|
|
if(edatas.count() <= 1)
|
|
|
|
|
|
return;
|
|
|
|
|
|
QList<QVariant> headDatas = edatas.at(0);
|
|
|
|
|
|
data.clear();
|
|
|
|
|
|
QString tradeDay = parseStockHead(headDatas);
|
|
|
|
|
|
if(tradeDay.isEmpty())
|
|
|
|
|
|
tradeDay = date;
|
|
|
|
|
|
if(!tradeDay.isEmpty())
|
|
|
|
|
|
{
|
|
|
|
|
|
qDebug() << " datas count :" << edatas.count();
|
|
|
|
|
|
for (int row = 1; row < edatas.count();row++)
|
|
|
|
|
|
{
|
|
|
|
|
|
QList<QVariant> rowData = edatas.at(row);
|
|
|
|
|
|
_stocksInfo param;
|
|
|
|
|
|
for(int column = 0; column < rowData.count() ; column++)
|
|
|
|
|
|
{
|
|
|
|
|
|
if(rowData.at(column).toString().isEmpty())
|
|
|
|
|
|
{
|
|
|
|
|
|
qDebug() << "break";
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
param.tradeDay = tradeDay;
|
|
|
|
|
|
toValueStockInfo(param,column,rowData.at(column).toString());
|
|
|
|
|
|
}
|
|
|
|
|
|
if(param.code.isEmpty() || param.name.isEmpty())
|
|
|
|
|
|
continue;
|
|
|
|
|
|
data.append(param);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
QString StocksDecoder::parseStockHead(QList<QVariant> headDatas)
|
|
|
|
|
|
{
|
|
|
|
|
|
QString tradeDay = "";//<2F><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
for(int i = 0; i < headDatas.count(); i++)
|
|
|
|
|
|
{
|
|
|
|
|
|
QVariant value = headDatas[i];
|
|
|
|
|
|
QString headValue = value.toString();
|
|
|
|
|
|
if(headValue.contains(QStringLiteral("֤ȯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>")))
|
|
|
|
|
|
{
|
|
|
|
|
|
m_wholeStocksKeyIndexs.insert(i,"code");
|
|
|
|
|
|
}
|
|
|
|
|
|
else if(headValue.contains(QStringLiteral("֤ȯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>")))
|
|
|
|
|
|
{
|
|
|
|
|
|
m_wholeStocksKeyIndexs.insert(i,"name");
|
|
|
|
|
|
}
|
|
|
|
|
|
else if(headValue.contains(QStringLiteral("<EFBFBD><EFBFBD><EFBFBD>̼<EFBFBD>")))
|
|
|
|
|
|
{
|
|
|
|
|
|
m_wholeStocksKeyIndexs.insert(i,"open");
|
|
|
|
|
|
// if(headValue.contains(QStringLiteral("<22><><EFBFBD><EFBFBD>")))
|
|
|
|
|
|
// {
|
|
|
|
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
// else
|
|
|
|
|
|
// {
|
|
|
|
|
|
// //<2F><><EFBFBD>̼<EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>]<5D><><EFBFBD><EFBFBD>(2021-05-20)[<5B><>Ȩ<EFBFBD><C8A8>ʽ]ǰ<><C7B0>Ȩ
|
|
|
|
|
|
// int dayStart = headValue.indexOf("(");
|
|
|
|
|
|
// int dayEnd = headValue.indexOf(")");
|
|
|
|
|
|
// tradeDay = headValue.mid(dayStart+1,dayEnd - dayStart-1);
|
|
|
|
|
|
// }
|
|
|
|
|
|
}
|
|
|
|
|
|
else if(headValue.contains(QStringLiteral("<EFBFBD><EFBFBD><EFBFBD>̼<EFBFBD>")))
|
|
|
|
|
|
{
|
|
|
|
|
|
m_wholeStocksKeyIndexs.insert(i,"close");
|
|
|
|
|
|
}
|
|
|
|
|
|
else if(headValue.contains(QStringLiteral("<EFBFBD>ǵ<EFBFBD><EFBFBD><EFBFBD>")) &&
|
|
|
|
|
|
!headValue.contains(QStringLiteral("ǰ10<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>")) &&
|
|
|
|
|
|
!headValue.contains(QStringLiteral("ǰ20<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>")) &&
|
|
|
|
|
|
!headValue.contains(QStringLiteral("ǰ60<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>")))
|
|
|
|
|
|
{
|
|
|
|
|
|
m_wholeStocksKeyIndexs.insert(i,"differRange");
|
|
|
|
|
|
}
|
|
|
|
|
|
else if(headValue.contains(QStringLiteral("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵָ<EFBFBD><EFBFBD>")) &&
|
|
|
|
|
|
headValue.contains(QStringLiteral("2<EFBFBD><EFBFBD>")) &&
|
|
|
|
|
|
!headValue.contains(QStringLiteral("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>")))
|
|
|
|
|
|
{
|
|
|
|
|
|
m_wholeStocksKeyIndexs.insert(i,"blemind2");
|
|
|
|
|
|
}
|
|
|
|
|
|
else if(headValue.contains(QStringLiteral("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ")) &&
|
|
|
|
|
|
headValue.contains(QStringLiteral("3<EFBFBD><EFBFBD>")))
|
|
|
|
|
|
{
|
|
|
|
|
|
m_wholeStocksKeyIndexs.insert(i,"blemind3");
|
|
|
|
|
|
}
|
|
|
|
|
|
else if(headValue.contains(QStringLiteral("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǵ<EFBFBD><EFBFBD><EFBFBD>")) &&
|
|
|
|
|
|
headValue.contains(QStringLiteral("ǰ10")))
|
|
|
|
|
|
{
|
|
|
|
|
|
m_wholeStocksKeyIndexs.insert(i,"differRange10");
|
|
|
|
|
|
}
|
|
|
|
|
|
else if(headValue.contains(QStringLiteral("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǵ<EFBFBD><EFBFBD><EFBFBD>")) &&
|
|
|
|
|
|
headValue.contains(QStringLiteral("ǰ20")))
|
|
|
|
|
|
{
|
|
|
|
|
|
m_wholeStocksKeyIndexs.insert(i,"differRange20");
|
|
|
|
|
|
}
|
|
|
|
|
|
else if(headValue.contains(QStringLiteral("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǵ<EFBFBD><EFBFBD><EFBFBD>")) &&
|
|
|
|
|
|
headValue.contains(QStringLiteral("ǰ60")))
|
|
|
|
|
|
{
|
|
|
|
|
|
m_wholeStocksKeyIndexs.insert(i,"differRange60");
|
|
|
|
|
|
}
|
|
|
|
|
|
else if(headValue.contains(QStringLiteral("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>")))
|
|
|
|
|
|
{
|
|
|
|
|
|
m_wholeStocksKeyIndexs.insert(i,"listDate");
|
|
|
|
|
|
}
|
|
|
|
|
|
else if(headValue.contains(QStringLiteral("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>")))
|
|
|
|
|
|
{
|
|
|
|
|
|
m_wholeStocksKeyIndexs.insert(i,"tradeDays");
|
|
|
|
|
|
}
|
|
|
|
|
|
else if(headValue.contains(QStringLiteral("<EFBFBD>ɽ<EFBFBD><EFBFBD><EFBFBD>")) &&
|
|
|
|
|
|
!headValue.contains(QStringLiteral("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>վ<EFBFBD><EFBFBD>ɽ<EFBFBD><EFBFBD><EFBFBD>")))
|
|
|
|
|
|
{
|
|
|
|
|
|
m_wholeStocksKeyIndexs.insert(i,"volumn");
|
|
|
|
|
|
}
|
|
|
|
|
|
else if(headValue.contains(QStringLiteral("<EFBFBD>ɽ<EFBFBD><EFBFBD><EFBFBD>")))
|
|
|
|
|
|
{
|
|
|
|
|
|
m_wholeStocksKeyIndexs.insert(i,"amount");
|
|
|
|
|
|
}
|
|
|
|
|
|
else if(headValue.contains(QStringLiteral("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD>ֵ")))
|
|
|
|
|
|
{
|
|
|
|
|
|
m_wholeStocksKeyIndexs.insert(i,"freeFloatMarketValue");
|
|
|
|
|
|
}
|
|
|
|
|
|
else if(headValue.contains(QStringLiteral("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ")))
|
|
|
|
|
|
{
|
|
|
|
|
|
m_wholeStocksKeyIndexs.insert(i,"totalMarketValue");
|
|
|
|
|
|
}
|
|
|
|
|
|
else if(headValue.contains(QStringLiteral("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>վ<EFBFBD><EFBFBD>ɽ<EFBFBD><EFBFBD><EFBFBD>")))
|
|
|
|
|
|
{
|
|
|
|
|
|
m_wholeStocksKeyIndexs.insert(i,"avgVolume20");
|
|
|
|
|
|
}
|
|
|
|
|
|
else if(headValue.contains(QStringLiteral("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹɱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϼ<EFBFBD>")))
|
|
|
|
|
|
{
|
|
|
|
|
|
m_wholeStocksKeyIndexs.insert(i,"agenciesHold");
|
|
|
|
|
|
}
|
|
|
|
|
|
qDebug() << "parseWholeStockHead : " <<m_wholeStocksKeyIndexs[i];
|
|
|
|
|
|
}
|
|
|
|
|
|
return tradeDay;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void StocksDecoder::toValueStockInfo(_stocksInfo ¶m ,int index,QString value)
|
|
|
|
|
|
{
|
|
|
|
|
|
if(m_wholeStocksKeyIndexs[index] == "code")
|
|
|
|
|
|
{
|
|
|
|
|
|
param.code = value;
|
|
|
|
|
|
}
|
|
|
|
|
|
else if(m_wholeStocksKeyIndexs[index] == "name")
|
|
|
|
|
|
{
|
|
|
|
|
|
param.name = value;
|
|
|
|
|
|
}
|
|
|
|
|
|
else if(m_wholeStocksKeyIndexs[index] == "open")
|
|
|
|
|
|
{
|
|
|
|
|
|
// param.open = value.toDouble();
|
|
|
|
|
|
param.open = value;
|
|
|
|
|
|
}
|
|
|
|
|
|
else if(m_wholeStocksKeyIndexs[index] == "close")
|
|
|
|
|
|
{
|
|
|
|
|
|
// param.close = value.toDouble();
|
|
|
|
|
|
param.close = value;
|
|
|
|
|
|
}
|
|
|
|
|
|
else if(m_wholeStocksKeyIndexs[index] == "differRange")
|
|
|
|
|
|
{
|
|
|
|
|
|
// param.differRange = value.toDouble();
|
|
|
|
|
|
param.differRange = value;
|
|
|
|
|
|
}
|
|
|
|
|
|
else if(m_wholeStocksKeyIndexs[index] == "blemind2")
|
|
|
|
|
|
{
|
|
|
|
|
|
param.blemind2 = value;
|
|
|
|
|
|
}
|
|
|
|
|
|
else if(m_wholeStocksKeyIndexs[index] == "blemind3")
|
|
|
|
|
|
{
|
|
|
|
|
|
param.blemind3 = value;
|
|
|
|
|
|
}
|
|
|
|
|
|
else if(m_wholeStocksKeyIndexs[index] == "differRange10")
|
|
|
|
|
|
{
|
|
|
|
|
|
// param.differRangeP20 = value.toDouble();
|
|
|
|
|
|
param.differRangeP10 = value;
|
|
|
|
|
|
}
|
|
|
|
|
|
else if(m_wholeStocksKeyIndexs[index] == "differRange20")
|
|
|
|
|
|
{
|
|
|
|
|
|
// param.differRangeP20 = value.toDouble();
|
|
|
|
|
|
param.differRangeP20 = value;
|
|
|
|
|
|
}
|
|
|
|
|
|
else if(m_wholeStocksKeyIndexs[index] == "differRange60")
|
|
|
|
|
|
{
|
|
|
|
|
|
// param.differRangeP60 = value.toDouble();
|
|
|
|
|
|
param.differRangeP60 = value;
|
|
|
|
|
|
}
|
|
|
|
|
|
else if(m_wholeStocksKeyIndexs[index] == "listDate")
|
|
|
|
|
|
{
|
|
|
|
|
|
param.listDate = value;
|
|
|
|
|
|
}
|
|
|
|
|
|
else if(m_wholeStocksKeyIndexs[index] == "tradeDays")
|
|
|
|
|
|
{
|
|
|
|
|
|
// param.tradeDaysP = value.toInt();
|
|
|
|
|
|
param.tradeDays = value;
|
|
|
|
|
|
}
|
|
|
|
|
|
else if(m_wholeStocksKeyIndexs[index] == "volumn")
|
|
|
|
|
|
{
|
|
|
|
|
|
// param.volumn = value.toDouble();
|
|
|
|
|
|
param.volumn = value;
|
|
|
|
|
|
}
|
|
|
|
|
|
else if(m_wholeStocksKeyIndexs[index] == "amount")
|
|
|
|
|
|
{
|
|
|
|
|
|
// param.amount = value.toDouble();
|
|
|
|
|
|
param.amount = value;
|
|
|
|
|
|
}
|
|
|
|
|
|
else if(m_wholeStocksKeyIndexs[index] == "freeFloatMarketValue")
|
|
|
|
|
|
{
|
|
|
|
|
|
// param.freeFloatMv = value.toDouble();
|
|
|
|
|
|
param.freeFloatMarketValue = value;
|
|
|
|
|
|
}
|
|
|
|
|
|
else if(m_wholeStocksKeyIndexs[index] == "totalMarketValue")
|
|
|
|
|
|
{
|
|
|
|
|
|
// param.mvByCSRC = value.toDouble();
|
|
|
|
|
|
param.totalMarketValue = value;
|
|
|
|
|
|
}
|
|
|
|
|
|
else if(m_wholeStocksKeyIndexs[index] == "avgVolume20")
|
|
|
|
|
|
{
|
|
|
|
|
|
// param.avgVolumeP20 = value.toDouble();
|
|
|
|
|
|
param.avgVolume20 = value;
|
|
|
|
|
|
}
|
|
|
|
|
|
else if(m_wholeStocksKeyIndexs[index] == "agenciesHold")
|
|
|
|
|
|
{
|
|
|
|
|
|
// param.avgVolumeP20 = value.toDouble();
|
|
|
|
|
|
param.agenciesHold = value;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|