[EOSIO/eos] mongoexception: (#5327)

my abi files as below:
{
«____comment»: «This file was generated by eosio-abigen. DO NOT EDIT — 2018-08-17T05:29:24»,
«version»: «eosio::abi/1.0»,
«types»: [],
«structs»: [{
«name»: «chaninfo»,
«base»: «»,
«fields»: [{
«name»: «channelId»,
«type»: «uint64»
},{
«name»: «name»,
«type»: «string»
},{
«name»: «phone»,
«type»: «string»
},{
«name»: «applyMoney»,
«type»: «string»
},{
«name»: «approveMoney»,
«type»: «string»
},{
«name»: «businessName»,
«type»: «string»
},{
«name»: «businessNum»,
«type»: «string»
},{
«name»: «status»,
«type»: «string»
},{
«name»: «details»,
«type»: «string»
}
]
},{
«name»: «userlimit»,
«base»: «»,
«fields»: [{
«name»: «limitApplyId»,
«type»: «uint64»
},{
«name»: «signUserId»,
«type»: «uint64»
},{
«name»: «channelId»,
«type»: «uint64»
},{
«name»: «userName»,
«type»: «string»
},{
«name»: «userPhone»,
«type»: «string»
},{
«name»: «applyLimitMoney»,
«type»: «string»
},{
«name»: «approveLimitMoney»,
«type»: «string»
},{
«name»: «limitStatus»,
«type»: «string»
},{
«name»: «flag»,
«type»: «uint64»
},{
«name»: «details»,
«type»: «string»
}
]
},{
«name»: «loaninfo»,
«base»: «»,
«fields»: [{
«name»: «processId»,
«type»: «uint64»
},{
«name»: «userId»,
«type»: «uint64»
},{
«name»: «channelId»,
«type»: «uint64»
},{
«name»: «approveMoney»,
«type»: «string»
},{
«name»: «approveRepayTerms»,
«type»: «string»
},{
«name»: «approveRepayType»,
«type»: «string»
},{
«name»: «details»,
«type»: «string»
}
]
},{
«name»: «mkloaninfo»,
«base»: «»,
«fields»: [{
«name»: «projectId»,
«type»: «uint64»
},{
«name»: «processId»,
«type»: «uint64»
},{
«name»: «userId»,
«type»: «uint64»
},{
«name»: «userName»,
«type»: «string»
},{
«name»: «userPhone»,
«type»: «string»
},{
«name»: «borrowMoney»,
«type»: «string»
},{
«name»: «accountName»,
«type»: «string»
},{
«name»: «details»,
«type»: «string»
}
]
},{
«name»: «loanvstinfo»,
«base»: «»,
«fields»: [{
«name»: «projectDhVisitId»,
«type»: «uint64»
},{
«name»: «projectId»,
«type»: «uint64»
},{
«name»: «userRealName»,
«type»: «string»
},{
«name»: «receiveStatus»,
«type»: «string»
},{
«name»: «channelId»,
«type»: «uint64»
},{
«name»: «status»,
«type»: «string»
},{
«name»: «details»,
«type»: «string»
}
]
},{
«name»: «filemapinfo»,
«base»: «»,
«fields»: [{
«name»: «id»,
«type»: «uint64»
},{
«name»: «name»,
«type»: «string»
},{
«name»: «hash»,
«type»: «string»
},{
«name»: «flag»,
«type»: «uint64»
},{
«name»: «belong»,
«type»: «string»
}
]
},{
«name»: «channel»,
«base»: «»,
«fields»: [{
«name»: «channelId»,
«type»: «uint64»
},{
«name»: «name»,
«type»: «string»
},{
«name»: «phone»,
«type»: «string»
},{
«name»: «applyMoney»,
«type»: «string»
},{
«name»: «approveMoney»,
«type»: «string»
},{
«name»: «businessName»,
«type»: «string»
},{
«name»: «businessNum»,
«type»: «string»
},{
«name»: «status»,
«type»: «string»
},{
«name»: «details»,
«type»: «string»
}
]
},{
«name»: «limitapply»,
«base»: «»,
«fields»: [{
«name»: «limitApplyId»,
«type»: «uint64»
},{
«name»: «signUserId»,
«type»: «uint64»
},{
«name»: «channelId»,
«type»: «uint64»
},{
«name»: «userName»,
«type»: «string»
},{
«name»: «userPhone»,
«type»: «string»
},{
«name»: «applyLimitMoney»,
«type»: «string»
},{
«name»: «approveLimitMoney»,
«type»: «string»
},{
«name»: «limitStatus»,
«type»: «string»
},{
«name»: «flag»,
«type»: «uint64»
},{
«name»: «details»,
«type»: «string»
}
]
},{
«name»: «loan»,
«base»: «»,
«fields»: [{
«name»: «processId»,
«type»: «uint64»
},{
«name»: «userId»,
«type»: «uint64»
},{
«name»: «channelId»,
«type»: «uint64»
},{
«name»: «approveMoney»,
«type»: «string»
},{
«name»: «approveRepayTerms»,
«type»: «string»
},{
«name»: «approveRepayType»,
«type»: «string»
},{
«name»: «details»,
«type»: «string»
}
]
},{
«name»: «makeloan»,
«base»: «»,
«fields»: [{
«name»: «projectId»,
«type»: «uint64»
},{
«name»: «processId»,
«type»: «uint64»
},{
«name»: «userId»,
«type»: «uint64»
},{
«name»: «userName»,
«type»: «string»
},{
«name»: «userPhone»,
«type»: «string»
},{
«name»: «borrowMoney»,
«type»: «string»
},{
«name»: «accountName»,
«type»: «string»
},{
«name»: «details»,
«type»: «string»
}
]
},{
«name»: «afterloan»,
«base»: «»,
«fields»: [{
«name»: «projectDhVisitId»,
«type»: «uint64»
},{
«name»: «projectId»,
«type»: «uint64»
},{
«name»: «userRealName»,
«type»: «string»
},{
«name»: «receiveStatus»,
«type»: «string»
},{
«name»: «channelId»,
«type»: «uint64»
},{
«name»: «status»,
«type»: «string»
},{
«name»: «details»,
«type»: «string»
}
]
},{
«name»: «filemap»,
«base»: «»,
«fields»: [{
«name»: «hashCode»,
«type»: «string»
},{
«name»: «fileName»,
«type»: «string»
},{
«name»: «flag»,
«type»: «uint64»
},{
«name»: «belong»,
«type»: «string»
}
]
}
],
«actions»: [{
«name»: «channel»,
«type»: «channel»,
«ricardian_contract»: «»
},{
«name»: «limitapply»,
«type»: «limitapply»,
«ricardian_contract»: «»
},{
«name»: «loan»,
«type»: «loan»,
«ricardian_contract»: «»
},{
«name»: «makeloan»,
«type»: «makeloan»,
«ricardian_contract»: «»
},{
«name»: «afterloan»,
«type»: «afterloan»,
«ricardian_contract»: «»
},{
«name»: «filemap»,
«type»: «filemap»,
«ricardian_contract»: «»
}
],
«tables»: [{
«name»: «chantable»,
«index_type»: «i64»,
«key_names»: [
«channelId»
],
«key_types»: [
«uint64»
],
«type»: «chaninfo»
},{
«name»: «usertable»,
«index_type»: «i64»,
«key_names»: [
«limitApplyId»
],
«key_types»: [
«uint64»
],
«type»: «userlimit»
},{
«name»: «loantable»,
«index_type»: «i64»,
«key_names»: [
«processId»
],
«key_types»: [
«uint64»
],
«type»: «loaninfo»
},{
«name»: «mkloantable»,
«index_type»: «i64»,
«key_names»: [
«projectId»
],
«key_types»: [
«uint64»
],
«type»: «mkloaninfo»
},{
«name»: «loanvsttable»,
«index_type»: «i64»,
«key_names»: [
«projectDhVisitId»
],
«key_types»: [
«uint64»
],
«type»: «loanvstinfo»
},{
«name»: «filemaptable»,
«index_type»: «i64»,
«key_names»: [
«id»
],
«key_types»: [
«uint64»
],
«type»: «filemapinfo»
}
],
«ricardian_clauses»: [],
«error_messages»: [],
«abi_extensions»: []
}
and my cpp file as below:
#include
#include

using eosio::indexed_by;
using eosio::const_mem_fun;
using std::string;

class TraceSource : public eosio::contract {
public:
//构造函数
explicit TraceSource(action_name self) : contract(self) {};
//添加联系人
//@abi action
void channel(const uint64_t channelId, const string &name, const string &phone, const string &applyMoney, const string &approveMoney, const string &businessName, const string &businessNum, const string &status, const string &details) {
chantables table(_self, _self);

auto itr = table.find(channelId);
//如果判断条件不成立,则终止执行并打印错误信息
//eosio_assert(itr == table.end(), «chantable for channelId already exists»);
if(itr == table.end())
{
table.emplace(_self, [&](auto& chaninfo){
//ctable.id = table.available_primary_key();
chaninfo.channelId = channelId;
chaninfo.name = name;
chaninfo.phone = phone;
chaninfo.applyMoney = applyMoney;
chaninfo.approveMoney = approveMoney;
chaninfo.businessName = businessName;
chaninfo.businessNum = businessNum;
chaninfo.status = status;
chaninfo.details = details;
});
}
else
{
table.modify(itr, _self, [&](auto& chaninfo){
//chantables.channelId = channelId;
if(0 != name.compare(«»)) chaninfo.name = name;
if(0 != phone.compare(«»)) chaninfo.phone = phone;
if(0 != applyMoney.compare(«»)) chaninfo.applyMoney = applyMoney;
if(0 != approveMoney.compare(«»)) chaninfo.approveMoney = approveMoney;
if(0 != businessName.compare(«»)) chaninfo.businessName = businessName;
if(0 != businessNum.compare(«»)) chaninfo.businessNum = businessNum;
if(0 != status.compare(«»)) chaninfo.status = status;
if(0 != details.compare(«»)) chaninfo.details = details;
});

}

}

//@abi action
void limitapply(const uint64_t &limitApplyId, const uint64_t &signUserId, const uint64_t &channelId, const string &userName, const string &userPhone, const string &applyLimitMoney, const string &approveLimitMoney, const string &limitStatus, const uint64_t &flag, const string &details) {

usertables table(_self, _self);
auto itr = table.find(limitApplyId);
if(itr == table.end())
{
// eosio_assert(itr == table.end(), «usertable for limitApplyId already exists»);

table.emplace(_self, [&](auto& usertables){
//ctable.id = table.available_primary_key();
usertables.limitApplyId = limitApplyId;
usertables.signUserId = signUserId;
usertables.channelId = channelId;
usertables.userName = userName;
usertables.userPhone = userPhone;
usertables.applyLimitMoney = applyLimitMoney;
usertables.approveLimitMoney = approveLimitMoney;
usertables.limitStatus = limitStatus;
usertables.flag = flag;
usertables.details = details;
});
}
else
{
// auto itr = table.find(limitApplyId);
// eosio_assert(itr != table.end(), «usertable for limitapplyid not find»);

table.modify(itr, _self, [&](auto& userinfo){
//chantables.channelId = channelId;
if(signUserId != -1) userinfo.signUserId = signUserId;
if(channelId != -1) userinfo.channelId = channelId;
if(0 != userName.compare(«»)) userinfo.userName = userName;
if(0 != userPhone.compare(«»)) userinfo.userPhone = userPhone;
if(0 != applyLimitMoney.compare(«»)) userinfo.applyLimitMoney = applyLimitMoney;
if(0 != approveLimitMoney.compare(«»)) userinfo.approveLimitMoney = approveLimitMoney;
if(0 != limitStatus.compare(«»)) userinfo.limitStatus = limitStatus;
if(flag != -1) userinfo.flag = flag;
if(0 != details.compare(«»)) userinfo.details = details;
});

}
}

void loan( const uint64_t processId, const uint64_t &userId, const uint64_t &channelId, const string &approveMoney, const string &approveRepayTerms, const string &approveRepayType, const string &details) {
loantables table(_self, _self);

auto itr = table.find(processId);

if(itr == table.end())
{
//如果判断条件不成立,则终止执行并打印错误信息
//eosio_assert(itr == table.end(), «loantable for processId already exists»);

table.emplace(_self, [&](auto& loaninfo){
//ctable.id = table.available_primary_key();
loaninfo.processId = processId;
loaninfo.userId = userId ;
loaninfo.channelId = channelId;
loaninfo.approveMoney = approveMoney;
loaninfo.approveRepayTerms = approveRepayTerms;
loaninfo.approveRepayType = approveRepayType;
loaninfo.details = details;
});
}
else
{
// auto itr = table.find(processId);
// eosio_assert(itr != table.end(), «loantable for processid not find»);

table.modify(itr, _self, [&](auto& loaninfo){
//chantables.channelId = channelId;
if(processId != -1) loaninfo.processId = processId;
if(userId != -1) loaninfo.userId = userId;
if(channelId != -1) loaninfo.channelId = channelId;
if(0 != approveMoney.compare(«»)) loaninfo.approveMoney = approveMoney;
if(0 != approveRepayTerms.compare(«»)) loaninfo.approveRepayTerms = approveRepayTerms;
if(0 != approveRepayType.compare(«»)) loaninfo.approveRepayType = approveRepayType;
if(0 != details.compare(«»)) loaninfo.details = details;
});

}

}

void makeloan(const uint64_t projectId, const uint64_t &processId, const uint64_t &userId, const string &userName, const string &userPhone, const string &borrowMoney, const string &accountName, const string &details) {
mkloantables table(_self, _self);
auto itr = table.find(projectId);
if(itr == table.end())
{
//如果判断条件不成立,则终止执行并打印错误信息
// eosio_assert(itr == table.end(), «makeloantable for processId already exists»);

table.emplace(_self, [&](auto& mkloaninfo){
//ctable.id = table.available_primary_key();
mkloaninfo.projectId = projectId;
mkloaninfo.processId= processId;
mkloaninfo.userId = userId;
mkloaninfo.userName = userName;
mkloaninfo.userPhone = userPhone;
mkloaninfo.borrowMoney = borrowMoney;
mkloaninfo.accountName = accountName;
mkloaninfo.details = details;
});
}
else
{
// auto itr = table.find(projectId);
// eosio_assert(itr != table.end(), «mkloantable for projectid not find»);

table.modify(itr, _self, [&](auto& mkloaninfo){
//chantables.channelId = channelId;
if(projectId != -1) mkloaninfo.projectId = projectId;
if(processId != -1) mkloaninfo.processId = processId;
if(userId != -1) mkloaninfo.userId = userId;
if(0 != userName.compare(«»)) mkloaninfo.userName = userName;
if(0 != userPhone.compare(«»)) mkloaninfo.userPhone = userPhone;
if(0 != borrowMoney.compare(«»)) mkloaninfo.borrowMoney = borrowMoney;
if(0 != accountName.compare(«»)) mkloaninfo.accountName = accountName;
if(0 != details.compare(«»)) mkloaninfo.details = details;
});

}

}

void afterloan(const uint64_t projectDhVisitId, const uint64_t &projectId, const string &userRealName, const string &receiveStatus, const uint64_t &channelId, const string &status, const string &details) {
loanvsttables table(_self, _self);
auto itr = table.find(projectDhVisitId);
if(itr == table.end())
{
//如果判断条件不成立,则终止执行并打印错误信息
// eosio_assert(itr == table.end(), «loanvsttable for projectDhVisitId already exists»);

table.emplace(_self, [&](auto& loanvstinfo){
//ctable.id = table.available_primary_key();
loanvstinfo.projectDhVisitId = projectDhVisitId;
loanvstinfo.projectId= projectId;
loanvstinfo.channelId = channelId;
loanvstinfo.userRealName = userRealName;
loanvstinfo.receiveStatus = receiveStatus;
loanvstinfo.status = status;
loanvstinfo.details = details;
});
}
else
{
// auto itr = table.find(projectDhVisitId);
// eosio_assert(itr != table.end(), «loanvsttable for projectDhVisitId not find»);

table.modify(itr, _self, [&](auto& loanvstinfo){
//chantables.channelId = channelId;
if(projectDhVisitId != -1) loanvstinfo.projectDhVisitId = projectDhVisitId;
if(projectId != -1) loanvstinfo.projectId = projectId;
if(channelId != -1) loanvstinfo.channelId = channelId;
if(0 != userRealName.compare(«»)) loanvstinfo.userRealName = userRealName;
if(0 != receiveStatus.compare(«»)) loanvstinfo.receiveStatus = receiveStatus;
if(0 != status.compare(«»)) loanvstinfo.status = status;
if(0 != details.compare(«»)) loanvstinfo.details = details;
});

}

}

void filemap(const string &hashCode, const string &fileName, const uint64_t &flag, string belong) {
filemaptables table(_self, _self);

/*auto itr = table.begin();
bool bFlag = false;
for(itr; itr != table.end(); itr++)
{
if(0 == itr->name.compare(fileName))
{
bFlag = true;
eosio::print(«find name…..», fileName.c_str(),»\n»);
break;
}
} */

/* uint64_t sum = 0;
uint64_t hash = 0;
char *str = (char*)fileName.c_str();
while(*str)
{
hash = (*str++)+(hash<<6)+(hash<<16)-hash; } sum = (hash&0x7FFFFFFF); */ // auto itr = table.find(fileid); //printf("not find name %d\n", fileName.c_str()); // if(itr == table.end()) { //如果判断条件不成立,则终止执行并打印错误信息 // eosio_assert((!bFlag), "filemaptable for name already exists"); table.emplace(_self, [&](auto& filemapinfo){ filemapinfo.id = table.available_primary_key(); // filemapinfo.id = fileid; filemapinfo.name = fileName; filemapinfo.hash = hashCode; filemapinfo.flag = flag; filemapinfo.belong = belong; }); } /* else { // eosio_assert(bFlag, "filemaptable for name not find"); table.modify(itr, _self, [&](auto& filemapinfo){ //chantables.channelId = channelId; if(flag != -1) filemapinfo.flag = flag; // if(0 != name.compare("")) filemapinfo.name = name; if(0 != hashCode.compare("")) filemapinfo.hash = hashCode; if(0 != belong.compare("")) filemapinfo.belong = belong; }); }*/ } private: //定义fztable表,i64表示索引使用默认的uint64_t类型 //@abi table chantable i64 struct chaninfo { uint64_t channelId; string name; string phone; string applyMoney; string approveMoney; string businessName; string businessNum; string status; string details; uint64_t primary_key() const { return channelId; } EOSLIB_SERIALIZE(chaninfo, (channelId)(name)(phone)(applyMoney)(approveMoney)(businessName)(businessNum)(status)(details)); // EOSLIB_SERIALIZE(chaninfo, (channelId)(name)(phone)(businessName)(businessNum)(status)(details)); // EOSLIB_SERIALIZE(chaninfo, (channelId)(name)); }; //定义fztable表,i64表示索引使用默认的uint64_t类型 //@abi table usertable i64 struct userlimit { // uint64_t account; uint64_t limitApplyId; uint64_t signUserId; uint64_t channelId; string userName; string userPhone; string applyLimitMoney; string approveLimitMoney; string limitStatus; uint64_t flag; string details; //定义address表的主键,address表是一个multi-index表 uint64_t primary_key() const { return limitApplyId; } EOSLIB_SERIALIZE(userlimit, (limitApplyId)(signUserId)(channelId)(userName)(userPhone)(applyLimitMoney)(approveLimitMoney)(limitStatus)(flag)(details)); }; //@abi table loantable i64 struct loaninfo { // uint64_t account; uint64_t processId; uint64_t userId; uint64_t channelId; string approveMoney; string approveRepayTerms; string approveRepayType; string details; //定义address表的主键,address表是一个multi-index表 uint64_t primary_key() const { return processId; } EOSLIB_SERIALIZE(loaninfo, (processId)(userId)(channelId)(approveMoney)(approveRepayTerms)(approveRepayType)(details)); }; //@abi table mkloantable i64 struct mkloaninfo { // uint64_t account; uint64_t projectId; uint64_t processId; uint64_t userId; string userName; string userPhone; string borrowMoney; string accountName; string details; //定义address表的主键,address表是一个multi-index表 uint64_t primary_key() const { return projectId; } EOSLIB_SERIALIZE(mkloaninfo, (projectId)(processId)(userId)(userName)(userPhone)(borrowMoney)(accountName)(details)); }; //@abi table loanvsttable i64 struct loanvstinfo { // uint64_t account; uint64_t projectDhVisitId; uint64_t projectId; string userRealName; string receiveStatus; uint64_t channelId; string status; string details; //定义address表的主键,address表是一个multi-index表 uint64_t primary_key() const { return projectDhVisitId;} EOSLIB_SERIALIZE(loanvstinfo, (projectDhVisitId)(projectId)(userRealName)(receiveStatus)(channelId)(status)(details)); }; //@abi table filemaptable i64 struct filemapinfo { // uint64_t account; uint64_t id; string name; string hash; uint64_t flag; string belong; //定义address表的主键,address表是一个multi-index表 uint64_t primary_key() const {return id;} /* uint64_t primary_key() const { uint64_t hash = 0; char *str = (char*)name.c_str(); while(*str) { hash = (*str++)+(hash<<6)+(hash<<16)-hash; } return (hash&0x7FFFFFFF); } */ /*bool operator == ( const filemapinfo &b ) const { if(0 == this->name.compare(b.name)) return true;
else
return false;
}*/

EOSLIB_SERIALIZE(filemapinfo, (id)(name)(hash)(flag)(belong));
};

typedef eosio::multi_index chantables;
typedef eosio::multi_index usertables;
typedef eosio::multi_index loantables;
typedef eosio::multi_index mkloantables;
typedef eosio::multi_index loanvsttables;
typedef eosio::multi_index filemaptables;
};

EOSIO_ABI(TraceSource, (channel)(limitapply)(loan)(makeloan)(afterloan)(filemap))
so,is something wrong?