#include "util.h" string getTime2() { stringstream ss; time_t t = time(0); tm* local = localtime(&t); ss << local->tm_year + 1900 << '/'; ss << local->tm_mon + 1 << '/'; ss << local->tm_mday << ' '; return ss.str(); } const char* newGUID() { static char buf[64] = { 0 }; GUID guid; if (S_OK == ::CoCreateGuid(&guid)) { _snprintf(buf, sizeof(buf) , "%08X-%04X-%04x-%02X%02X-%02X%02X%02X%02X%02X%02X" , guid.Data1 , guid.Data2 , guid.Data3 , guid.Data4[0], guid.Data4[1] , guid.Data4[2], guid.Data4[3], guid.Data4[4], guid.Data4[5] , guid.Data4[6], guid.Data4[7] ); } return (const char*)buf; } int send_erp(tag_t top_line,int type,string &now,char **pref_vals, Testclass ^class1, System::String ^save_url, System::String ^check_url, vector> &configs,map>> &zl_map, System::String ^key,string creation_date,map &stock_map) { printf("send_erp\n"); int line_cnt,rel_cnt; tag_t rev, *lines,form,relation_type,*rels; AOM_ask_value_tag(top_line, "bl_line_object", &rev); GRM_find_relation_type(IMAN_master_form_rtype, &relation_type); GRM_list_secondary_objects_only(rev, relation_type, &rel_cnt, &rels); form = rels[0]; BOM_line_ask_child_lines(top_line, &line_cnt, &lines); string item_id = get_val(top_line, "bl_item_item_id"); string rev_id = get_val(top_line, "bl_rev_item_revision_id"); string tc = get_val(top_line, "KL3_tc"); Document doc; Document doc2; doc2.SetObject(); doc.SetObject(); Document::AllocatorType &al = doc.GetAllocator(); Document::AllocatorType &al2 = doc2.GetAllocator(); Value data(kObjectType); Value data2(kObjectType); Value data_page1(kArrayType); Value page1(kObjectType); Value data_page2(kArrayType); Value parent_val(kObjectType); Value empty(kObjectType); empty.AddMember("FNumber", "", al); empty.AddMember("FName", "", al); parent_val.AddMember("FNumber", "KL", al); parent_val.AddMember("FName", "BOM", al); string bill_no=item_id + rev_id; page1.AddMember("FParentID", parent_val, al); data2.AddMember("FBillNo", Value().SetString(bill_no.c_str(), al2), al2); page1.AddMember("FBOMNumber", Value().SetString(bill_no.c_str(), al), al); page1.AddMember("FVersion", Value().SetString(rev_id.c_str(), al), al); page1.AddMember("FPercentErpClsID", Value().SetString(get_val(form, "kl3_item_wlsx"), al), al); page1.AddMember("FAudDate", Value().SetString(now.c_str(), al), al); page1.AddMember("FCheckDate", Value().SetString(creation_date.c_str(), al), al); page1.AddMember("FEntertime", Value().SetString(now.c_str(), al), al); Value manager(kObjectType); manager.AddMember("FName", Value().SetString(pref_vals[4], al), al); manager.AddMember("FNumber", Value().SetString(pref_vals[5], al), al); page1.AddMember("FCheckerID", manager, al); Value manager2(kObjectType); manager2.AddMember("FName", Value().SetString(pref_vals[6], al), al); manager2.AddMember("FNumber", Value().SetString(pref_vals[7], al), al); page1.AddMember("FCheckID", manager2, al); page1.AddMember("FStatus", 1, al); Value status_val(kObjectType); status_val.AddMember("FNumber", "ZT02", al); status_val.AddMember("FName", "未使用", al); page1.AddMember("FBOMUseStatus", status_val, al); Value percent_id_val(kObjectType); percent_id_val.AddMember("FNumber", Value().SetString(item_id.c_str(), al), al); percent_id_val.AddMember("FName", Value().SetString(get_val(top_line, "bl_item_object_name"), al), al); page1.AddMember("FPercentItemID", percent_id_val, al); page1.AddMember("FNote",Value().SetString(get_val(form,"kl3_item_ylxx"),al),al); page1.AddMember("FPercentItemName", Value().SetString(get_val(top_line, "bl_item_object_name"), al), al); string jldwz = get_val(form, "kl3_jldwz"); int jldw_index = jldwz.find('/'); jldwz = jldw_index != -1 ? jldwz.substr(0, jldw_index) : jldwz; if (zl_map.find(jldwz)!=zl_map.end()) { Value jldw_val(kObjectType); string temp_val = get_val(form, "kl3_item_scjldw"); jldw_val.AddMember("FName", Value().SetString(temp_val.c_str(), al), al); jldw_val.AddMember("FNumber", Value().SetString(zl_map[jldwz][temp_val]["id"].c_str(), al), al); page1.AddMember("FPercentUnitID", jldw_val, al); //page1.AddMember("FPercentUnitID", get_jldw(get_val(form, "kl3_item_scjldw"), al, jldw_val), al); } page1.AddMember("FPercentItemModel", Value().SetString(get_val(form, "kl3_item_ggxh"), al), al); string gylx = get_val(top_line, "bl_ItemRevision Master_kl3_item_gylxmc"); page1.AddMember("FRoutingName", Value().SetString(gylx.c_str(), al), al); Value routing_val(kObjectType); routing_val.AddMember("FName", Value().SetString(gylx.c_str(), al), al); routing_val.AddMember("FNumber", Value().SetString(configs[2][gylx].c_str(), al), al); //routing_val.AddMember("FNumber", (*configs[6])[gylx.c_str()].IsNull()?Value().SetString("",al): (*configs[6])[gylx.c_str()], al); page1.AddMember("FRoutingID", routing_val, al); Value skip_val(kObjectType); if(item_id[0] == 'B' || item_id[0] == 'C') { skip_val.AddMember("FNumber", "N", al); skip_val.AddMember("FName", "否", al); }else { skip_val.AddMember("FNumber", "Y", al); skip_val.AddMember("FName", "是", al); } page1.AddMember("FBOMSkip", skip_val, al); page1.AddMember("FPercentQty", "1", al); page1.AddMember("FAuxQty", "1", al); page1.AddMember("FPercentAuxPropID", empty, al); page1.AddMember("FNote", "", al); page1.AddMember("FYield", 100, al); page1.AddMember("FIsCharSourceItem", "否", al); page1.AddMember("FTranType", 50, al); page1.AddMember("FInterID", 6297, al); page1.AddMember("FMultiCheckStatus", 2, al); data_page1.PushBack(page1,al); printf("end page1\n"); for (auto j = 0; j writer(sb); doc.Accept(writer); printf("data:%s\n", sb.GetString()); string result = ConvertToString(class1->Send(save_url, convert_to_cstring(sb.GetString()),key)); printf("result:%s\n", result.c_str()); if(result[0]=='s') { LOG(INFO) << result; data2.AddMember("FUserName", "administrator", al2); data2.AddMember("FUseDirection", "1", al2); doc2.AddMember("Data", data2, al2); StringBuffer sb2; Writer writer2(sb2); doc2.Accept(writer2); printf("data2:%s\n", sb2.GetString()); result = ConvertToString(class1->Send(check_url, convert_to_cstring(sb2.GetString()),key)); printf("result2:%s\n", result.c_str()); if(result[0]=='s') { LOG(INFO) << result; }else { LOG(ERROR) << result; EMH_store_error_s1(EMH_severity_error, EMH_ATTR_error_base, result.c_str()); return 1; } }else { LOG(ERROR) << result; EMH_store_error_s1(EMH_severity_error, EMH_ATTR_error_base, result.c_str()); return 1; } return 0; } int erp_bom(tag_t task, string key_str, string pref1, string pref2,string pref3) { printf("erp_bom start\n"); tag_t root_task, *atts, win; int att_cnt; EPM_ask_root_task(task, &root_task); EPM_ask_attachments(root_task, EPM_target_attachment, &att_cnt, &atts); int pref_cnt, pref_cnt2,pref_cnt3; char **pref_vals, **pref_vals2,**pref_vals3; PREF_ask_char_values(pref1.c_str(), &pref_cnt, &pref_vals); PREF_ask_char_values(pref2.c_str(), &pref_cnt2, &pref_vals2); PREF_ask_char_values(pref3.c_str(), &pref_cnt3, &pref_vals3); vector> configs; Document doc; doc.SetObject(); Document::AllocatorType &al = doc.GetAllocator(); map>> zl_map; string creation_date = getTime2(); map stock_map; for(auto i=0;i> temp_map; for(auto k=j->value.MemberBegin();k!=j->value.MemberEnd();k++) { string name = k->name.GetString(); map temp_map2; if(name=="id") { temp_map2["id"] = k->value.GetString(); }else { for(auto l=k->value.MemberBegin();l!=k->value.MemberEnd();l++) { temp_map2[l->name.GetString()] = l->value.GetString(); } } temp_map[name] = temp_map2; } zl_map[j->name.GetString()] = temp_map; } } if(i==1||i>4) { Document temp_doc; temp_doc.Parse(pref_vals2[i]); map temp_map; for(auto j=temp_doc.MemberBegin();j!=temp_doc.MemberEnd();j++) { temp_map[j->name.GetString()] = j->value.GetString(); } configs.push_back(temp_map); } } printf("pref_cnt:%d\n", pref_cnt); string ip = pref_vals[0]; string token_url = ip + "/K3API/Token/Create?authorityCode=" + pref_vals[1]; Testclass ^class1 = gcnew Testclass(); System::String ^key = convert_to_cstring(key_str.c_str()); string token = ConvertToString(class1->GetToken(convert_to_cstring(token_url.c_str()),key)); printf("token:%s\n", token.c_str()); string s_url = ip + "/K3API/BOM/Save?token=" + token; string c_url = ip + "/K3API/BOM/CheckUse?token=" + token; System::String ^save_url = convert_to_cstring(s_url.c_str()); System::String ^check_url = convert_to_cstring(c_url.c_str()); BOM_create_window(&win); string now = getTime(); for (auto i = 0; i