You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

469 lines
16 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#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<map<string,string>> &configs,map<string,map<string,map<string,string>>> &zl_map, System::String ^key,string creation_date)
{
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", "δʹ<EFBFBD><EFBFBD>", 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", "<EFBFBD><EFBFBD>", al);
}else
{
skip_val.AddMember("FNumber", "Y", al);
skip_val.AddMember("FName", "<EFBFBD><EFBFBD>", 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", "<EFBFBD><EFBFBD>", 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<line_cnt; j++)
{
Value page2(kObjectType);
page2.AddMember("FEntryID", j + 1, al);
AOM_ask_value_tag(lines[j], "bl_line_object", &rev);
GRM_list_secondary_objects_only(rev, relation_type, &rel_cnt, &rels);
form = rels[0];
string item_id2 = get_val(lines[j], "bl_item_item_id");
Value item_id_val(kObjectType);
item_id_val.AddMember("FNumber", Value().SetString(item_id2.c_str(), al), al);
item_id_val.AddMember("FName", Value().SetString(get_val(lines[j], "bl_item_object_name"), al), al);
page2.AddMember("FItemID", item_id_val, al);
page2.AddMember("FItemName", Value().SetString(get_val(lines[j], "bl_item_object_name"), al), al);
Value material_val(kObjectType);
material_val.AddMember("FNumber", "COM", al);
material_val.AddMember("FName", "<EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD>", al);
page2.AddMember("FMaterielType", material_val, al);
string gx = get_val(lines[j], "KL3_gx");
Value oper_val(kObjectType);
// oper_val.AddMember("FNumber", "ZJ", al);
// oper_val.AddMember("FName", "ע<><D7A2><EFBFBD><EFBFBD><EFBFBD>첿<EFBFBD>ռ<D5BC><ECB9A4>", al);
oper_val.AddMember("FNumber", Value().SetString(configs[3][gx].c_str(), al), al);
// oper_val.AddMember("FNumber", (*configs[7])[gx.c_str()], al);
oper_val.AddMember("FName", Value().SetString(gx.c_str(), al), al);
page2.AddMember("FOperID", oper_val, al);
page2.AddMember("FOperSN", 10, al);
page2.AddMember("FAuxQtyScrap", Value().SetString(get_val(lines[j], "KL3_yl"), al), al);
Value stock_val(kObjectType);
string stock = get_val(lines[j], "KL3_flck");
printf("stock:%s\n", stock.c_str());
if(stock=="ע<EFBFBD>ܳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֳ<EFBFBD><EFBFBD><EFBFBD>"||stock=="zscjxcc")
{
stock_val.AddMember("FNumber", "38", al);
stock_val.AddMember("FName", "ע<EFBFBD>ܳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֳ<EFBFBD><EFBFBD><EFBFBD>", al);
}else if (stock == "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֳ<EFBFBD><EFBFBD><EFBFBD>" || stock == "jtcjxcc")
{
stock_val.AddMember("FNumber", "39", al);
stock_val.AddMember("FName", "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֳ<EFBFBD><EFBFBD><EFBFBD>", al);
}else
{
stock_val.AddMember("FNumber", "", al);
stock_val.AddMember("FName", "", al);
}
// stock_val.AddMember("FNumber", (*configs[1])[stock.c_str()], al);
// stock_val.AddMember("FName", Value().SetString(stock.c_str(), al), al);
page2.AddMember("FStockID", stock_val, al);
page2.AddMember("FUseStatus", "ʹ<EFBFBD><EFBFBD>", al);
page2.AddMember("FBeginDay", "1900-1-1", al);
page2.AddMember("FEndDay", "2100-1-1", al);
page2.AddMember("FItemModel", Value().SetString(get_val(lines[j], "kl3_item_ggxh"), al), al);
page2.AddMember("FErpClsID", Value().SetString(get_val(form, "kl3_item_wlsx"), al), al);
//page2.AddMember("FErpClsID", get_wlsx(get_val(rev, "kl3_item_wlsx"), al,* configs[5]), al);
jldwz = get_val(form, "kl3_jldwz");
jldw_index = jldwz.find('/');
jldwz = jldw_index != -1 ? jldwz.substr(0, jldw_index) : jldwz;
printf("jldw:%s\n", jldwz.c_str());
if (zl_map.find(jldwz)!=zl_map.end())
{
printf("find\n");
string sc_val = get_val(form, "kl3_item_scjldw");
string jb_val= get_val(form, "kl3_jbjldw");
page2.AddMember("FBaseUnit", Value().SetString(jb_val.c_str(),al), al);
Value jldw_val(kObjectType);
jldw_val.AddMember("FName", Value().SetString(sc_val.c_str(), al), al);
jldw_val.AddMember("FNumber", Value().SetString(zl_map[jldwz][sc_val]["id"].c_str(), al), al);
printf("end 111\n");
page2.AddMember("FUnitID", jldw_val, al);
double co = 1;
double yl = atof(get_val(lines[j], "KL3_yl"));
if(sc_val!=jb_val)
{
double jb_co = atof(zl_map[jldwz][jb_val]["coefficient"].c_str());
double sc_co = atof(zl_map[jldwz][sc_val]["coefficient"].c_str());
printf("yl:%f jb_co:%f sc_co:%f\n", yl,jb_co,sc_co);
co = sc_co / jb_co;
}
yl *= co;
page2.AddMember("FQty", yl, al);
}
printf("end jldw\n");
page2.AddMember("FIsPrimary", "<EFBFBD><EFBFBD>", al);
page2.AddMember("FForbitUse", "<EFBFBD><EFBFBD>", al);
page2.AddMember("FSubItemType", 1, al);
page2.AddMember("FOffSetDay", 0, al);
page2.AddMember("FPercent", 100, al);
page2.AddMember("FHasChar", 0, al);
page2.AddMember("FCostPercentage", 0, al);
page2.AddMember("FScrap", 0, al);
page2.AddMember("FEntryKey", 69777, al);
page2.AddMember("FMachinePos", "", al);
page2.AddMember("FPositionNo", "", al);
page2.AddMember("FNote0", "", al);
page2.AddMember("FNote1", "", al);
page2.AddMember("FNote2", "", al);
page2.AddMember("FNote3", "", al);
page2.AddMember("FItemSize", "", al);
page2.AddMember("FItemSuite", "", al);
page2.AddMember("FAuxClassID", "", al);
page2.AddMember("FPDMImportDate", Value().SetNull(), al);
page2.AddMember("FDetailID", Value().SetString(newGUID(),al), al);
Value empty2(kObjectType);
empty2.AddMember("FNumber", "", al);
empty2.AddMember("FName", "", al);
page2.AddMember("FAuxPropID", empty2, al);
Value empty3(kObjectType);
empty3.AddMember("FNumber", "", al);
empty3.AddMember("FName", "", al);
page2.AddMember("FSPID", empty3, al);
string back = get_val(lines[j], "KL3_sfdc");
Value back_val(kObjectType);
if(back=="<EFBFBD><EFBFBD>")
{
back_val.AddMember("FNumber", "N", al);
back_val.AddMember("FName", "<EFBFBD><EFBFBD>", al);
}else
{
back_val.AddMember("FNumber", "Y", al);
back_val.AddMember("FName", "<EFBFBD><EFBFBD>", al);
}
page2.AddMember("FBackFlush", back_val, al);
Value ty_val(kObjectType);
ty_val.AddMember("FNumber", "COM", al);
ty_val.AddMember("FName", "ͨ<EFBFBD><EFBFBD>", al);
page2.AddMember("FMarshalType", ty_val, al);
data_page2.PushBack(page2, al);
printf("end page2");
// if (type)
// continue;
// if (item_id2[0] == 'B'|| item_id2[0] == 'X')
// {
// send_erp(lines[j], 1, now, pref_vals, class1, save_url,check_url,configs,zl_map,key,creation_date);
// }
}
data.AddMember("Page1", data_page1, al);
data.AddMember("Page2", data_page2, al);
doc.AddMember("Data", data, al);
StringBuffer sb;
Writer<StringBuffer> 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<StringBuffer> 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)
{
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;
char **pref_vals, **pref_vals2;
PREF_ask_char_values(pref1.c_str(), &pref_cnt, &pref_vals);
PREF_ask_char_values(pref2.c_str(), &pref_cnt2, &pref_vals2);
vector<map<string,string>> configs;
Document doc;
doc.SetObject();
Document::AllocatorType &al = doc.GetAllocator();
map<string, map<string, map<string,string>>> zl_map;
string creation_date = getTime2();
for (auto i = 0; i<pref_cnt2; i++)
{
if(i==4)
{
Document temp_doc;
temp_doc.Parse(pref_vals2[i]);
for(auto j=temp_doc.MemberBegin();j!=temp_doc.MemberEnd();j++)
{
map<string, map<string,string>> temp_map;
for(auto k=j->value.MemberBegin();k!=j->value.MemberEnd();k++)
{
string name = k->name.GetString();
map<string, string> 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<string, string> 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<att_cnt; i++)
{
if (isTypeOf(atts[i], "PSBOMViewRevision"))
{
int rel_cnt, line_cnt;
tag_t *rels, top_line, *lines, rev;
char *id;
AOM_ask_value_tags(atts[i], "release_status_list", &rel_cnt, &rels);
if (rel_cnt)
continue;
BOM_set_window_top_line_bvr(win, atts[i], &top_line);
AOM_ask_value_string(top_line, "bl_item_item_id", &id);
// if (id[0] != 'C')
// continue;
int result=send_erp(top_line, 0, now, pref_vals, class1, save_url, check_url,configs,zl_map,key,creation_date);
if (result)
return result;
}
}
BOM_close_window(win);
return 0;
}
int kl_erp_bom(EPM_action_message_t msg)
{
int arg_cnt = TC_number_of_arguments(msg.arguments);
string key, pref1, pref2;
for (auto i = 0; i<arg_cnt; i++)
{
char *temp_key, *temp_val;
ITK_ask_argument_named_value(TC_next_argument(msg.arguments), &temp_key, &temp_val);
if (tc_strcmp(temp_key, "key")==0)
{
key = temp_val;
}
else if (tc_strcmp(temp_key, "pref1")==0)
{
pref1 = temp_val;
}
else if (tc_strcmp(temp_key, "pref2")==0)
{
pref2 = temp_val;
}
}
printf("key:%s\n", key.c_str());
printf("pref1:%s\n", pref1.c_str());
printf("pref2:%s\n", pref2.c_str());
return erp_bom(msg.task, key, pref1, pref2);
}