添加获取新的块

This commit is contained in:
wanglong 2024-12-12 16:22:26 +08:00
parent 263ad7c526
commit f20695daee
9 changed files with 482 additions and 24 deletions

View File

@ -23,6 +23,8 @@ AbstractSpectrumDataMessage::AbstractSpectrumDataMessage()
data_types.append( "ALERT_SYSTEM" ); // [11]
data_types.append( "ALERT_TEMP" ); // [12]
data_types.append( "ALERT_UPS" ); // [13]
data_types.append( "RMSDOS" ); // [14]
data_types.append( "ALERT_PRESSURE" ); // [15]
msg.verify_srid = false;
}
@ -86,6 +88,7 @@ bool AbstractSpectrumDataMessage::AnalyseFile(QString file_name)
}
QTextStream content(&file);
content.setCodec("UTF-8");
if (content.atEnd())
{
file.close();

View File

@ -40,7 +40,8 @@ bool AlertMessage::AnalyseMessgeBody(QTextStream &content)
if ( QLatin1String("ALERT_FLOW") != msg.data_type &&
QLatin1String("ALERT_SYSTEM") != msg.data_type &&
QLatin1String("ALERT_TEMP") != msg.data_type &&
QLatin1String("ALERT_UPS") != msg.data_type )
QLatin1String("ALERT_UPS") != msg.data_type &&
QLatin1String("ALERT_PRESSURE") != msg.data_type)
{
return bIsValid = false;
}

View File

@ -94,7 +94,7 @@ typedef struct _Read_Result_
jint b_r_record_count;
/* g_Efficiency Block */
jobjectArray g_e_nuclide; // device name
jobjectArray g_e_nuclide_name; // device name
jobjectArray g_e_energy; // ¦Ã -energy (keV)
jobjectArray g_e_efficiency; // efficiency (counts in peak/photon emitted)
jobjectArray g_e_uncertainty; // uncertainty (counts in peak/photon emitted)
@ -168,6 +168,22 @@ typedef struct _Read_Result_
/*gps block*/
jdouble lon;
jdouble lat;
/* b_Efficiency Block */
jobjectArray b_e_nuclide_name; // nuclide name
jobjectArray b_e_efficiency; // ROI number
jobjectArray b_e_uncertainty; // ¦Â-¦Ã coincidence efficiency (counts in ROI/¦Â-¦Ã pair emitted)
jint b_efficiency_record_count;
/*b_self_Attenuation block*/
jobjectArray b_s_a_nuclide_name;
jobjectArray b_s_a_coeff1;
jobjectArray b_s_a_coeff2;
jobjectArray b_s_a_coeff3;
jobjectArray b_s_a_coeff4;
jobjectArray b_s_a_coeff5;
jobjectArray b_s_a_coeff6;
}ReadResult;
typedef struct _Generate_Result_
@ -354,6 +370,22 @@ typedef struct _SOHFile_Result_
jobjectArray detector_response; // detector response
}SOHFileResult;
typedef struct _DOS_Result_{
/* Header Black */
jstring site_code; // site code
jstring detector_code; // detector code
jstring sample_start_date;
jstring sample_start_time;
jobjectArray dose_rate;
jobjectArray uncertainty;
jobjectArray dr_start_date;
jobjectArray dr_start_time;
jobjectArray dr_interval_duration;
jint record_count;
}DOSResult;
class CplusToJava
{
public:

View File

@ -37,6 +37,7 @@
#define ORDER_GPS QLatin1String("#GPS")
#define ORDER_BSELF QLatin1String("#b_self_Attenuation")
#define ORDER_NB_GEFFICIENCY QLatin1String("#b_Efficiency")
#define DOSERATE QLatin1String("#DoseRate")
#define ORDER_STOP QLatin1String("STOP")
#define ORDER_BEGIN QLatin1String("BEGIN")
#define DATATYPE_QCPHD QLatin1String("QCPHD")
@ -286,6 +287,23 @@ namespace RadionuclideData
}
HeaderBlock, *PtHeaderBlock;
typedef struct _Dos_Header_Block_
{
/* Header Black */
QString site_code; // site code
QString detector_code; // detector code
QString sample_start_date;
QString sample_start_time;
QString sample_end_date;
QString sample_end_time;
QString send_date;
QString send_time;
}
DosHeaderBlock, *PtDosHeaderBlock;
typedef struct _Acquisition_Block_
{
/* Acquisition Block */
@ -519,6 +537,18 @@ namespace RadionuclideData
}
NBG_EfficiencyBlock, *PtNBG_EfficiencyBlock;
typedef struct _DoseRate_Block_
{
/* b-gEfficiency Block */
QVector<double> rate; // 剂量率
QVector<double> uncertainty; // 计量不确定性
QVector<QString> date; // 日期
QVector<QString> time; //时间
QVector<long> interval_duration; //与上次间隔时间
int record_count;
}
DoseRateBlock, *PtDoseRateBlock;
typedef struct _b_self_Attenuation_block_
{
/* b_self_Attenuation Block */
@ -540,6 +570,7 @@ namespace RadionuclideData
}
Q_DECLARE_METATYPE(RadionuclideData::HeaderBlock)
Q_DECLARE_METATYPE(RadionuclideData::DosHeaderBlock)
Q_DECLARE_METATYPE(RadionuclideData::AcquisitionBlock)
Q_DECLARE_METATYPE(RadionuclideData::CollectionBlock)
Q_DECLARE_METATYPE(RadionuclideData::ProcessingBlock)
@ -562,6 +593,7 @@ Q_DECLARE_METATYPE(RadionuclideData::NBG_EfficiencyBlock)
Q_DECLARE_METATYPE(RadionuclideData::BSelfAttenuationBlock)
Q_DECLARE_METATYPE(RadionuclideData::n_G_EfficiencyBlock)
Q_DECLARE_METATYPE(RadionuclideData::GpsBlock)
Q_DECLARE_METATYPE(RadionuclideData::DoseRateBlock)
namespace MetData
{

View File

@ -116,9 +116,10 @@ void RadionuclideMessage::InitBlockFlagInfo()
block_flag.append(QLatin1String("STOP")); // [ STOP ]
block_flag.append(QLatin1String("BEGIN")); // [ BEGIN ]
block_flag.append(QLatin1String("#Spectrum")); // [ 22 ]
block_flag.append(QLatin1String("#GPS")); // [ 23 ]
block_flag.append(QLatin1String("#GPS")); // [ 23 ]
block_flag.append(QLatin1String("#b_self_Attenuation")); // [ 24 ]
block_flag.append(QLatin1String("#b_Efficiency")); // [ 25 ]
block_flag.append(QLatin1String("#b_Efficiency")); // [ 25 ]
block_flag.append(QLatin1String("#DoseRate")); // [ 26 ]
}
bool RadionuclideMessage::AnalyseMessgeBody(QTextStream &content)
@ -131,7 +132,8 @@ bool RadionuclideMessage::AnalyseMessgeBody(QTextStream &content)
QLatin1String("BLANKPHD") != msg.data_type &&
QLatin1String("DETBKPHD") != msg.data_type &&
QLatin1String("QCPHD") != msg.data_type &&
QLatin1String("CALIBPHD") != msg.data_type )
QLatin1String("CALIBPHD") != msg.data_type &&
QLatin1String("RMSDOS") != msg.data_type)
{
return bIsValid = false;
}
@ -235,6 +237,10 @@ bool RadionuclideMessage::AnalyseMessgeBody(QTextStream &content)
{
bRet &= Analyse_b_Efficiency_Block(content, line);
}
else if ( 0==line.compare(block_flag.at(26)) && bRet)
{
bRet &= Analyse_DoseRate_Block(content, line);
}
else
{ // 数据错误,数据有效
bIsValid = false;
@ -264,6 +270,21 @@ bool RadionuclideMessage::AnalyseMessgeBody(QTextStream &content)
bool RadionuclideMessage::Analyse_Header_Block(QTextStream& content, QString& nextBlock)
{
const MessageInfo& msg = AbstractSpectrumDataMessage::GetMessageInfo();
if(msg.data_type == QStringLiteral("RMSDOS"))
{
DosHeaderBlock dheader;
content >> dheader.site_code >> dheader.detector_code >> dheader.sample_start_date >> dheader.sample_start_time
>> dheader.sample_end_date >> dheader.sample_end_time >> dheader.send_date >> dheader.send_time;
radionuclide_msg_data.insert(block_flag.at(0), QVariant::fromValue(dheader));
content >> nextBlock;
content.readLine(); //该处的读取行内容操作仅将文件光标移至下一行开头
return (content.status()==QTextStream::Ok)?true:false;
}
HeaderBlock Header;
QString &line = nextBlock;
Header.designator = line.mid(8);
@ -272,7 +293,6 @@ bool RadionuclideMessage::Analyse_Header_Block(QTextStream& content, QString& ne
content.readLine();
m_system_type = Header.system_type;
const MessageInfo& msg = AbstractSpectrumDataMessage::GetMessageInfo();
if ( msg.verify_srid )
{
bool bRet = Verity_SampleReferenceId( Header.sample_ref_id );
@ -882,7 +902,6 @@ bool RadionuclideMessage::Analyse_Histogram_Block(QTextStream& content, QString&
{
Histogram.b_channels = Histogram.counts.count()/row;
}
#if 0
long& row_size = Histogram.b_channels;
long& column_size = Histogram.g_channels;
@ -1065,6 +1084,40 @@ bool RadionuclideMessage::Analyse_b_Efficiency_Block(QTextStream &content, QStri
return (content.status()==QTextStream::Ok)?true:false;
}
bool RadionuclideMessage::Analyse_DoseRate_Block(QTextStream &content, QString &nextBlock)
{
DoseRateBlock dosr;
int row_count = 0;
nextBlock = content.readLine();
QString temp_line = nextBlock.simplified();
while (!block_flag.contains(temp_line) && !content.atEnd())
{
double rate, uncertainty;
QString date, time;
long interval_duration;
QTextStream line_content(&nextBlock);
line_content >> rate >> uncertainty >> date >> time >> interval_duration;
dosr.rate.push_back(rate);
dosr.uncertainty.push_back(uncertainty);
dosr.date.push_back(date);
dosr.time.push_back(time);
dosr.interval_duration.push_back(interval_duration);
++ row_count;
nextBlock = content.readLine();
temp_line = nextBlock.simplified();
if (line_content.status()==QTextStream::ReadCorruptData)
{
return false;
}
}
dosr.record_count = row_count;
radionuclide_msg_data.insert(block_flag.at(26), QVariant::fromValue(dosr));
return (content.status()==QTextStream::Ok)?true:false;
}
bool RadionuclideMessage::Verity_SampleReferenceId(QString srid)
{
bool bRet = true;

View File

@ -48,6 +48,7 @@ private:
bool Analyse_Gps_Block(QTextStream& content, QString& nextBlock);
bool Analyse_b_self_Attenuation_Block(QTextStream& content, QString& nextBlock);
bool Analyse_b_Efficiency_Block(QTextStream& content, QString& nextBlock);
bool Analyse_DoseRate_Block(QTextStream& content, QString& nextBlock);
bool Verity_SampleReferenceId(QString srid);
private:

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 4.9.1, 2024-09-29T15:10:42. -->
<!-- Written by QtCreator 4.9.1, 2024-12-12T16:21:19. -->
<qtcreator>
<data>
<variable>EnvironmentId</variable>

View File

@ -12,6 +12,7 @@
#include <QJsonDocument>
#include <QJsonArray>
#include <QJsonObject>
#include <QTextCodec>
JNIEXPORT jobject JNICALL Java_org_jeecg_modules_native_1jni_EnergySpectrumHandler_getSourceData(JNIEnv* env, jclass obj, jstring PHDfile)
{
@ -63,6 +64,7 @@ JNIEXPORT jobject JNICALL Java_org_jeecg_modules_native_1jni_EnergySpectrumHandl
bool Histogramflag = true;
bool totalflag = true;
bool gpsflag = true;
bool b_efficiencyflag = true;
QString order;
QVariant variant;
@ -308,8 +310,8 @@ JNIEXPORT jobject JNICALL Java_org_jeecg_modules_native_1jni_EnergySpectrumHandl
cresult.g_e_efficiency = CplusToJava::QVectorD2jobjectArray(ngeff.efficiency, env);
allSize["g_e_uncertainty"] = ngeff.uncertainty.size();
cresult.g_e_uncertainty = CplusToJava::QVectorD2jobjectArray(ngeff.uncertainty, env);
allSize["g_e_nuclide"] = ngeff.dev_name.size();
cresult.g_e_nuclide = CplusToJava::QVectorQS2jobjectArray(ngeff.dev_name, env);
allSize["g_e_nuclide_name"] = ngeff.dev_name.size();
cresult.g_e_nuclide_name = CplusToJava::QVectorQS2jobjectArray(ngeff.dev_name, env);
cresult.g_e_record_count = ngeff.record_count;
}
else {
@ -539,6 +541,30 @@ JNIEXPORT jobject JNICALL Java_org_jeecg_modules_native_1jni_EnergySpectrumHandl
cresult.lon = gps.lon;
}
//b_efficiency block内容获取
order = ORDER_NB_GEFFICIENCY;
variant = message.GetBlockData(order);
if (!variant.isValid())
{
// printf((order.toStdString() + " get failed\n").c_str());
b_efficiencyflag = false;
}
else
{
RadionuclideData::NBG_EfficiencyBlock beff = variant.value<RadionuclideData::NBG_EfficiencyBlock>();
cresult.b_e_nuclide_name = CplusToJava::QVectorQS2jobjectArray(beff.nuclide_name, env);
allSize["b_e_nuclide_name"] = beff.nuclide_name.size();
cresult.b_e_efficiency = CplusToJava::QVectorD2jobjectArray(beff.bg_efficiency, env);
allSize["b_e_efficiency"] = beff.bg_efficiency.size();
// printf("b eff ciency size : %d\n", beff.bg_efficiency.size());
cresult.b_e_uncertainty = CplusToJava::QVectorD2jobjectArray(beff.uncertainty, env);
allSize["b_e_uncertainty"] = beff.uncertainty.size();
// printf("b eff uncertainty size : %d\n", beff.uncertainty.size());
cresult.b_efficiency_record_count = beff.record_count;
}
if ((!headerflag) || (!commentflag) || (!sampleflag) || (!certificateflag) || (!acquisitionflag) || (!collectionflag) || (!processflag)
|| (!calibrationflag) || (!g_energyflag) || (!b_energyflag) || (!g_Resolutionflag) || (!b_Resolutionflag) || (!g_Efficiencyflag)
|| (!roi_limitsflag) || (!b_gEfficiencyflag) || (!ratiosflag) || (!g_Spectrumflag) || (!b_Spectrumflag) || (!Histogramflag)
@ -811,8 +837,8 @@ JNIEXPORT jobject JNICALL Java_org_jeecg_modules_native_1jni_EnergySpectrumHandl
if (g_Efficiencyflag)
{
//设置成员变量g_e_name的值
fieldID = env->GetFieldID(energySpectrumStructClass, "g_e_nuclide", SIG_LIST);
fieldJobject = CplusToJava::Createjobject(env, allSize["g_e_nuclide"], cresult.g_e_nuclide);
fieldID = env->GetFieldID(energySpectrumStructClass, "g_e_nuclide_name", SIG_LIST);
fieldJobject = CplusToJava::Createjobject(env, allSize["g_e_nuclide_name"], cresult.g_e_nuclide_name);
env->SetObjectField(result, fieldID, fieldJobject);
//设置成员变量g_e_energy的值
@ -985,14 +1011,14 @@ JNIEXPORT jobject JNICALL Java_org_jeecg_modules_native_1jni_EnergySpectrumHandl
env->SetLongField(result, fieldID, cresult.g_h_energy_span);
//设置成员变量h_counts的值
// fieldID = env->GetFieldID(energySpectrumStructClass, "h_counts", SIG_LIST);
// fieldJobject = CplusToJava::Createjobject(env, allSize["h_counts"], cresult.h_counts);
// env->SetObjectField(result, fieldID, fieldJobject);
//设置成员变量h_counts_arr的值
fieldID = env->GetFieldID(energySpectrumStructClass, "h_count_arr", SIG_LONG_ARRAY);
fieldJobject = CplusToJava::Create2Djobject(env, allSize["g_counts"], cresult.h_counts,cresult.g_channels, cresult.b_channels);
fieldID = env->GetFieldID(energySpectrumStructClass, "h_counts", SIG_LIST);
fieldJobject = CplusToJava::Createjobject(env, allSize["h_counts"], cresult.h_counts);
env->SetObjectField(result, fieldID, fieldJobject);
// //设置成员变量h_counts_arr的值
// fieldID = env->GetFieldID(energySpectrumStructClass, "h_count_arr", SIG_LONG_ARRAY);
// fieldJobject = CplusToJava::Create2Djobject(env, allSize["g_counts"], cresult.h_counts,cresult.g_channels, cresult.b_channels);
// env->SetObjectField(result, fieldID, fieldJobject);
}
if (certificateflag)
@ -1100,6 +1126,24 @@ JNIEXPORT jobject JNICALL Java_org_jeecg_modules_native_1jni_EnergySpectrumHandl
env->SetDoubleField(result, fieldID, cresult.lat);
}
if(b_efficiencyflag)
{
//设置成员变量bg_nuclide_name的值
fieldID = env->GetFieldID(energySpectrumStructClass, "b_e_nuclide_name", SIG_LIST);
fieldJobject = CplusToJava::Createjobject(env, allSize["b_e_nuclide_name"], cresult.b_e_nuclide_name);
env->SetObjectField(result, fieldID, fieldJobject);
//设置成员变量bg_nuclide_name的值
fieldID = env->GetFieldID(energySpectrumStructClass, "b_e_efficiency", SIG_LIST);
fieldJobject = CplusToJava::Createjobject(env, allSize["b_e_efficiency"], cresult.b_e_efficiency);
env->SetObjectField(result, fieldID, fieldJobject);
//设置成员变量bg_nuclide_name的值
fieldID = env->GetFieldID(energySpectrumStructClass, "b_e_uncertainty", SIG_LIST);
fieldJobject = CplusToJava::Createjobject(env, allSize["b_e_uncertainty"], cresult.b_e_uncertainty);
env->SetObjectField(result, fieldID, fieldJobject);
}
return result;
}
@ -1154,6 +1198,8 @@ JNIEXPORT jobject JNICALL Java_org_jeecg_modules_native_1jni_EnergySpectrumHandl
bool Histogramflag = true;
bool totalflag = true;
bool gpsflag = true;
bool b_efficiencyflag = true;
bool b_self_Attenuation = true;
QString order;
QVariant variant;
@ -1398,8 +1444,8 @@ JNIEXPORT jobject JNICALL Java_org_jeecg_modules_native_1jni_EnergySpectrumHandl
cresult.g_e_efficiency = CplusToJava::QVectorD2jobjectArray(ngeff.efficiency, env);
allSize["g_e_uncertainty"] = ngeff.uncertainty.size();
cresult.g_e_uncertainty = CplusToJava::QVectorD2jobjectArray(ngeff.uncertainty, env);
allSize["g_e_nuclide"] = ngeff.dev_name.size();
cresult.g_e_nuclide = CplusToJava::QVectorQS2jobjectArray(ngeff.dev_name, env);
allSize["g_e_nuclide_name"] = ngeff.dev_name.size();
cresult.g_e_nuclide_name = CplusToJava::QVectorQS2jobjectArray(ngeff.dev_name, env);
cresult.g_e_record_count = ngeff.record_count;
}
else {
@ -1629,6 +1675,108 @@ JNIEXPORT jobject JNICALL Java_org_jeecg_modules_native_1jni_EnergySpectrumHandl
cresult.lon = gps.lon;
}
//b_efficiency block内容获取
order = ORDER_NB_GEFFICIENCY;
variant = message.GetBlockData(order);
if (!variant.isValid())
{
// printf((order.toStdString() + " get failed\n").c_str());
b_efficiencyflag = false;
}
else
{
RadionuclideData::NBG_EfficiencyBlock beff = variant.value<RadionuclideData::NBG_EfficiencyBlock>();
cresult.b_e_nuclide_name = CplusToJava::QVectorQS2jobjectArray(beff.nuclide_name, env);
allSize["b_e_nuclide_name"] = beff.nuclide_name.size();
cresult.b_e_efficiency = CplusToJava::QVectorD2jobjectArray(beff.bg_efficiency, env);
allSize["b_e_efficiency"] = beff.bg_efficiency.size();
cresult.b_e_uncertainty = CplusToJava::QVectorD2jobjectArray(beff.uncertainty, env);
allSize["b_e_uncertainty"] = beff.uncertainty.size();
cresult.b_efficiency_record_count = beff.record_count;
}
//b_efficiency block内容获取
order = ORDER_NB_GEFFICIENCY;
variant = message.GetBlockData(order);
if (!variant.isValid())
{
// printf((order.toStdString() + " get failed\n").c_str());
b_efficiencyflag = false;
}
else
{
RadionuclideData::NBG_EfficiencyBlock beff = variant.value<RadionuclideData::NBG_EfficiencyBlock>();
cresult.b_e_nuclide_name = CplusToJava::QVectorQS2jobjectArray(beff.nuclide_name, env);
allSize["b_e_nuclide_name"] = beff.nuclide_name.size();
cresult.b_e_efficiency = CplusToJava::QVectorD2jobjectArray(beff.bg_efficiency, env);
allSize["b_e_efficiency"] = beff.bg_efficiency.size();
cresult.b_e_uncertainty = CplusToJava::QVectorD2jobjectArray(beff.uncertainty, env);
allSize["b_e_uncertainty"] = beff.uncertainty.size();
cresult.b_efficiency_record_count = beff.record_count;
}
RadionuclideData::BSelfAttenuationBlock bsel;
order = ORDER_BSELF;
variant = message.GetBlockData(order);
if (!variant.isValid())
{
b_self_Attenuation = false;
}
else {
bsel = variant.value<RadionuclideData::BSelfAttenuationBlock>();
cresult.b_s_a_nuclide_name = CplusToJava::QVectorQS2jobjectArray(bsel.devNames, env);
allSize["b_s_a_nuclide_name"] = bsel.devNames.size();
int offset = 0;
auto stdarrar2qvector = [&offset](QVector<std::array<double, 3>> data1, QVector<std::array<double, 3>> data2)->QVector<double>{
QVector<double> buf1;
for(int i = 0; i < 4; i++)
{
if(offset > 2)
{
buf1.append(data2[i][offset - 3]);
}
else {
buf1.append(data1[i][offset]);
}
}
offset++;
return buf1;
};
QVector<double> buf;
buf = stdarrar2qvector(bsel.xenon,bsel.nitrogen);
cresult.b_s_a_coeff1 = CplusToJava::QVectorD2jobjectArray(buf, env);
allSize["b_s_a_coeff1"] = buf.size();
buf = stdarrar2qvector(bsel.xenon,bsel.nitrogen);
cresult.b_s_a_coeff2 = CplusToJava::QVectorD2jobjectArray(buf, env);
allSize["b_s_a_coeff2"] = buf.size();
buf = stdarrar2qvector(bsel.xenon,bsel.nitrogen);
cresult.b_s_a_coeff3 = CplusToJava::QVectorD2jobjectArray(buf, env);
allSize["b_s_a_coeff3"] = buf.size();
buf = stdarrar2qvector(bsel.xenon,bsel.nitrogen);
cresult.b_s_a_coeff4 = CplusToJava::QVectorD2jobjectArray(buf, env);
allSize["b_s_a_coeff4"] = buf.size();
buf = stdarrar2qvector(bsel.xenon,bsel.nitrogen);
cresult.b_s_a_coeff5 = CplusToJava::QVectorD2jobjectArray(buf, env);
allSize["b_s_a_coeff5"] = buf.size();
buf = stdarrar2qvector(bsel.xenon,bsel.nitrogen);
cresult.b_s_a_coeff6 = CplusToJava::QVectorD2jobjectArray(buf, env);
allSize["b_s_a_coeff6"] = buf.size();
}
if ((!headerflag) || (!commentflag) || (!sampleflag) || (!certificateflag) || (!acquisitionflag) || (!collectionflag) || (!processflag)
|| (!calibrationflag) || (!g_energyflag) || (!b_energyflag) || (!g_Resolutionflag) || (!b_Resolutionflag) || (!g_Efficiencyflag)
|| (!roi_limitsflag) || (!b_gEfficiencyflag) || (!ratiosflag) || (!g_Spectrumflag) || (!b_Spectrumflag) || (!Histogramflag)
@ -1903,8 +2051,8 @@ JNIEXPORT jobject JNICALL Java_org_jeecg_modules_native_1jni_EnergySpectrumHandl
if (g_Efficiencyflag)
{
//设置成员变量g_e_name的值
fieldID = env->GetFieldID(energySpectrumStructClass, "g_e_nuclide", SIG_LIST);
fieldJobject = CplusToJava::Createjobject(env, allSize["g_e_nuclide"], cresult.g_e_nuclide);
fieldID = env->GetFieldID(energySpectrumStructClass, "g_e_nuclide_name", SIG_LIST);
fieldJobject = CplusToJava::Createjobject(env, allSize["g_e_nuclide_name"], cresult.g_e_nuclide_name);
env->SetObjectField(result, fieldID, fieldJobject);
//设置成员变量g_e_energy的值
@ -2189,6 +2337,63 @@ JNIEXPORT jobject JNICALL Java_org_jeecg_modules_native_1jni_EnergySpectrumHandl
fieldID = env->GetFieldID(energySpectrumStructClass, "lat", SIG_DOUBLE);
env->SetDoubleField(result, fieldID, cresult.lat);
}
if(b_efficiencyflag)
{
//设置成员变量bg_nuclide_name的值
fieldID = env->GetFieldID(energySpectrumStructClass, "b_e_nuclide_name", SIG_LIST);
fieldJobject = CplusToJava::Createjobject(env, allSize["b_e_nuclide_name"], cresult.b_e_nuclide_name);
env->SetObjectField(result, fieldID, fieldJobject);
//设置成员变量bg_nuclide_name的值
fieldID = env->GetFieldID(energySpectrumStructClass, "b_e_efficiency", SIG_LIST);
fieldJobject = CplusToJava::Createjobject(env, allSize["b_e_efficiency"], cresult.b_e_efficiency);
env->SetObjectField(result, fieldID, fieldJobject);
//设置成员变量bg_nuclide_name的值
fieldID = env->GetFieldID(energySpectrumStructClass, "b_e_uncertainty", SIG_LIST);
fieldJobject = CplusToJava::Createjobject(env, allSize["b_e_uncertainty"], cresult.b_e_uncertainty);
env->SetObjectField(result, fieldID, fieldJobject);
}
if(b_self_Attenuation)
{
//设置成员变量b_s_a_nuclide_name的值
fieldID = env->GetFieldID(energySpectrumStructClass, "b_s_a_nuclide_name", SIG_LIST);
fieldJobject = CplusToJava::Createjobject(env, allSize["b_s_a_nuclide_name"], cresult.b_s_a_nuclide_name);
env->SetObjectField(result, fieldID, fieldJobject);
//设置成员变量b_s_a_coeff1的值
fieldID = env->GetFieldID(energySpectrumStructClass, "b_s_a_coeff1", SIG_LIST);
fieldJobject = CplusToJava::Createjobject(env, allSize["b_s_a_coeff1"], cresult.b_s_a_coeff1);
env->SetObjectField(result, fieldID, fieldJobject);
//设置成员变量b_s_a_coeff2的值
fieldID = env->GetFieldID(energySpectrumStructClass, "b_s_a_coeff2", SIG_LIST);
fieldJobject = CplusToJava::Createjobject(env, allSize["b_s_a_coeff2"], cresult.b_s_a_coeff2);
env->SetObjectField(result, fieldID, fieldJobject);
//设置成员变量b_s_a_coeff3的值
fieldID = env->GetFieldID(energySpectrumStructClass, "b_s_a_coeff3", SIG_LIST);
fieldJobject = CplusToJava::Createjobject(env, allSize["b_s_a_coeff3"], cresult.b_s_a_coeff3);
env->SetObjectField(result, fieldID, fieldJobject);
//设置成员变量b_s_a_coeff4的值
fieldID = env->GetFieldID(energySpectrumStructClass, "b_s_a_coeff4", SIG_LIST);
fieldJobject = CplusToJava::Createjobject(env, allSize["b_s_a_coeff4"], cresult.b_s_a_coeff4);
env->SetObjectField(result, fieldID, fieldJobject);
//设置成员变量b_s_a_coeff5的值
fieldID = env->GetFieldID(energySpectrumStructClass, "b_s_a_coeff5", SIG_LIST);
fieldJobject = CplusToJava::Createjobject(env, allSize["b_s_a_coeff5"], cresult.b_s_a_coeff5);
env->SetObjectField(result, fieldID, fieldJobject);
//设置成员变量b_s_a_coeff1的值
fieldID = env->GetFieldID(energySpectrumStructClass, "b_s_a_coeff6", SIG_LIST);
fieldJobject = CplusToJava::Createjobject(env, allSize["b_s_a_coeff6"], cresult.b_s_a_coeff6);
env->SetObjectField(result, fieldID, fieldJobject);
}
return result;
}
@ -5057,3 +5262,126 @@ jstring Java_org_jeecg_modules_native_1jni_EnergySpectrumHandler_selfBgAnalyse(J
jstring jresult = env->NewStringUTF(simpjson_str.toStdString().c_str());
return jresult;
}
jobject Java_org_jeecg_modules_native_1jni_EnergySpectrumHandler_getDOSSourceData(JNIEnv *env, jclass obj, jstring PHDfile)
{
//创建结构体对象并填充内容
DOSResult cresult;
memset(&cresult,0 ,sizeof(cresult));
//文件名转换
QString qfilename = CplusToJava::jstring2QString(env, PHDfile);
printf("phd file %s\n", qfilename.toStdString().c_str());
//文件解析
RadionuclideMessage message;
bool readflag = message.AnalysePHD_File(qfilename);
if (!readflag)
{
// **************** printf("THE PHDfile get failed:");
// printf(qfilename.toStdString().c_str());
// **************** printf("\n");
}
bool headerflag = true;
bool doseRateflag = true;
QString order;
QVariant variant;
//header内容获取
RadionuclideData::DosHeaderBlock headerBlock;
order = ORDER_HEADER;
variant = message.GetBlockData(order);
if (!variant.isValid())
{
// printf((order.toStdString() + " get failed\n").c_str());
headerflag = false;
}
else
{
headerBlock = variant.value<RadionuclideData::DosHeaderBlock>();
cresult.site_code = env->NewStringUTF(headerBlock.site_code.toStdString().c_str());
cresult.detector_code = env->NewStringUTF(headerBlock.detector_code.toStdString().c_str());
cresult.sample_start_date = env->NewStringUTF(headerBlock.sample_start_date.toStdString().c_str());
cresult.sample_start_time = env->NewStringUTF(headerBlock.sample_start_time.toStdString().c_str());
}
//DoseRate内容获取
RadionuclideData::DoseRateBlock doseRateBlock;
order = DOSERATE;
variant = message.GetBlockData(order);
if (!variant.isValid())
{
// printf((order.toStdString() + " get failed\n").c_str());
doseRateflag = false;
}
else
{
doseRateBlock = variant.value<RadionuclideData::DoseRateBlock>();
cresult.dose_rate = CplusToJava::QVectorD2jobjectArray(doseRateBlock.rate, env);
cresult.uncertainty = CplusToJava::QVectorD2jobjectArray(doseRateBlock.uncertainty, env);
cresult.dr_start_date = CplusToJava::QVectorQS2jobjectArray(doseRateBlock.date, env);
cresult.dr_start_time = CplusToJava::QVectorQS2jobjectArray(doseRateBlock.time, env);
cresult.dr_interval_duration = CplusToJava::QVectorL2jobjectArray(doseRateBlock.interval_duration, env);
cresult.record_count = doseRateBlock.record_count;
}
// if(headerflag && doseRareflag)
// {
// }
//获取Java中的EnergySpectrumStruct类
jclass energySpectrumStructClass = env->FindClass("Lorg/jeecg/modules/native_jni/struct/DOSSpectrumStruct;");
// 创建Java中的EnergySpectrumStruct对象
jmethodID constructorID = env->GetMethodID(energySpectrumStructClass, "<init>", "()V");
jobject result = env->NewObject(energySpectrumStructClass, constructorID);
jobject fieldJobject;
jfieldID fieldID;
if (headerflag)
{
fieldID = env->GetFieldID(energySpectrumStructClass, "station_code", SIG_STRING);
env->SetObjectField(result, fieldID, cresult.site_code);
fieldID = env->GetFieldID(energySpectrumStructClass, "detector_code", SIG_STRING);
env->SetObjectField(result, fieldID, cresult.detector_code);
fieldID = env->GetFieldID(energySpectrumStructClass, "start_date", SIG_STRING);
env->SetObjectField(result, fieldID, cresult.sample_start_date);
fieldID = env->GetFieldID(energySpectrumStructClass, "start_time", SIG_STRING);
env->SetObjectField(result, fieldID, cresult.sample_start_time);
}
if(doseRateflag)
{
fieldID = env->GetFieldID(energySpectrumStructClass, "dose_rate", SIG_LIST);
fieldJobject = CplusToJava::Createjobject(env, cresult.record_count, cresult.dose_rate);
env->SetObjectField(result, fieldID, fieldJobject);
fieldID = env->GetFieldID(energySpectrumStructClass, "uncertainty", SIG_LIST);
fieldJobject = CplusToJava::Createjobject(env, cresult.record_count, cresult.uncertainty);
env->SetObjectField(result, fieldID, fieldJobject);
fieldID = env->GetFieldID(energySpectrumStructClass, "dr_start_date", SIG_LIST);
fieldJobject = CplusToJava::Createjobject(env, cresult.record_count, cresult.dr_start_date);
env->SetObjectField(result, fieldID, fieldJobject);
fieldID = env->GetFieldID(energySpectrumStructClass, "dr_start_time", SIG_LIST);
fieldJobject = CplusToJava::Createjobject(env, cresult.record_count, cresult.dr_start_time);
env->SetObjectField(result, fieldID, fieldJobject);
fieldID = env->GetFieldID(energySpectrumStructClass, "dr_interval_duration", SIG_LIST);
fieldJobject = CplusToJava::Createjobject(env, cresult.record_count, cresult.dr_interval_duration);
env->SetObjectField(result, fieldID, fieldJobject);
fieldID = env->GetFieldID(energySpectrumStructClass, "dr_record_count", SIG_INT);
env->SetIntField(result, fieldID, cresult.record_count);
}
return result;
}

View File

@ -21,10 +21,18 @@ extern "C" {
/*
* Class: org_jeecg_modules_native_jni_EnergySpectrumHandler
* Method: getSourceData_test
* Method: getSourceDataNotHis
* Signature: (Ljava/lang/String;)Ljava/lang/String;
*/
JNIEXPORT jobject JNICALL Java_org_jeecg_modules_native_1jni_EnergySpectrumHandler_getSourceDataNotHis
(JNIEnv* env, jclass obj, jstring PHDfile);
/*
* Class: org_jeecg_modules_native_jni_EnergySpectrumHandler
* Method: getDOSSourceData
* Signature: (Ljava/lang/String;)Ljava/lang/String;
*/
JNIEXPORT jobject JNICALL Java_org_jeecg_modules_native_1jni_EnergySpectrumHandler_getDOSSourceData
(JNIEnv* env, jclass obj, jstring PHDfile);
/*
* Class: org_jeecg_modules_native_jni_EnergySpectrumHandler