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.

319 lines
13 KiB

#include "tinyxml/tinyxml.h"
#include "CRUL_server_call_httpserver.h"
#include "SendSap.h"
void sendSAP(char* url, char* data) {
CURL *curl;
CURLcode res;
curl = curl_easy_init();
if (curl) {
curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
curl_easy_setopt(curl, CURLOPT_URL, url);
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
curl_easy_setopt(curl, CURLOPT_DEFAULT_PROTOCOL, "https");
struct curl_slist *headers = NULL;
headers = curl_slist_append(headers, "Content-Type: application/xml");
if (tc_strstr(url, "192.168.0.184") != NULL || tc_strstr(url, "gfpot01") != NULL) {
headers = curl_slist_append(headers, "Authorization: Basic cG9fcmZjOjFxYXohUUFa");//"po_rfc", "1qaz!QAZ"
}
else {
headers = curl_slist_append(headers, "Authorization: Basic c2hwbG06c2FwQDIwMTk=");//"shplm", "sap@2019"
}
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data);
res = curl_easy_perform(curl);
}
curl_easy_cleanup(curl);
}
void getProcess(tag_t rev, tag_t partRev, char* now, char* groupName, map<string, tag_t> gy_meops, TiXmlElement * BOPLIST, TiXmlElement * SONLIST, int valueOf) {
if (isTcm2(rev)) {
return;
}
char *zt2_MaterialNo = NULL;
ITKCALL(AOM_ask_value_string(partRev, "zt2_MaterialNo", &zt2_MaterialNo));
if (gy_meops.count(zt2_MaterialNo)) {
return;
}
gy_meops[zt2_MaterialNo] = rev;
tag_t ebom_window = NULLTAG, line = NULLTAG;
ITKCALL(BOM_create_window(&ebom_window));
ITKCALL(BOM_set_window_top_line(ebom_window, NULL, rev, NULLTAG, &line));
int c_line_count = 0;
tag_t *c_line_tags = NULL;
ITKCALL(BOM_line_ask_all_child_lines(line, &c_line_count, &c_line_tags));
char *item_id = NULL, *item_revision_id = NULL, *object_name = NULL, *zt2_unit = NULL;
ITKCALL(ITEM_ask_rev_id2(rev, &item_id));
ITKCALL(AOM_ask_value_string(rev, "item_revision_id", &item_revision_id));
ITKCALL(AOM_ask_value_string(rev, "object_name", &object_name));
string tcid = "";
tcid.append(item_id).append("/").append(item_revision_id);
TiXmlElement *BOPCONTENTS = addElement(BOPLIST, "BOPCONTENTS", "");
addElement(BOPCONTENTS, "BOPTCID", tcid.c_str());
addElement(BOPCONTENTS, "BOPNAME", object_name);
addElement(BOPCONTENTS, "BOPTYPE", "S1");
addElement(BOPCONTENTS, "WLBM", zt2_MaterialNo);
addElement(BOPCONTENTS, "PLANT", groupName);
addElement(BOPCONTENTS, "VERWE", "1");
addElement(BOPCONTENTS, "STATU", "4");
addElement(BOPCONTENTS, "DATUV", now);
addElement(BOPCONTENTS, "PLNAL", "1");
addElement(BOPCONTENTS, "VERWE", tcid.c_str());
addElement(BOPCONTENTS, "OTHER1", "");
addElement(BOPCONTENTS, "OTHER2", "");
TiXmlElement *BOPFILELIST = addElement(BOPCONTENTS, "BOPFILELIST", "");
int dataset_count = 0;
tag_t *datasets = NULL;
ITKCALL(AOM_ask_value_tags(rev, "IMAN_specification", &dataset_count, &datasets));
vector<string> lists2;
lists2.push_back("PDF");
lists2.push_back("MS Word");
lists2.push_back("MS WordX");
lists2.push_back("MS Excel");
lists2.push_back("MS ExcelX");
for (int i = 0; i < dataset_count; i++) {
char *type = NULL;
ITKCALL(WSOM_ask_object_type2(datasets[i], &type));
if (find(lists2.begin(), lists2.end(), type) == lists2.end()) {
char *name = NULL, *uid = NULL;
ITKCALL(AOM_ask_value_string(datasets[i], "object_name", &name));
ITKCALL(POM_tag_to_uid(datasets[i], &uid));
TiXmlElement *FILECONTENTS = addElement(BOPFILELIST, "FILECONTENTS", "");
addElement(FILECONTENTS, "FILEID", item_id);
addElement(FILECONTENTS, "FILENAME", name);
addElement(FILECONTENTS, "FILETYPE", "<EFBFBD>ļ<EFBFBD>");
addElement(FILECONTENTS, "FIILUID", uid);
addElement(FILECONTENTS, "OTHER1", "OTHER1");
addElement(FILECONTENTS, "OTHER2", "OTHER2");
}
}
}
tag_t getPRevision(tag_t rev) {
char *type = NULL;
ITKCALL(WSOM_ask_object_type2(rev, &type));
if (tc_strcmp(type, "Part Revision") == 0) {
char *zt2_ifpbom = NULL;
ITKCALL(AOM_UIF_ask_value(rev, "zt2_ifpbom", &zt2_ifpbom));
if (tc_strcmp(zt2_ifpbom, "P") == 0) {
return rev;
}
tag_t* designs = NULL;
int num = 0;
ITKCALL(AOM_ask_value_tags(rev, "TC_Is_Represented_By", &num, &designs));
if (num > 0) {
char *zt2_MaterialNo = NULL;
ITKCALL(AOM_ask_value_string(rev, "zt2_MaterialNo", &zt2_MaterialNo));
tag_t* matnrs = NULL;
num = 0;
ITKCALL(AOM_ask_value_tags(designs[0], "representation_for", &num, &matnrs));
for (int i = 0; i < num; i++) {
char *zt2_MaterialNo2 = NULL, *zt2_ifpbom2 = NULL;
ITKCALL(AOM_ask_value_string(matnrs[i], "zt2_MaterialNo", &zt2_MaterialNo2));
ITKCALL(AOM_UIF_ask_value(matnrs[i], "zt2_ifpbom", &zt2_ifpbom2));
if (tc_strcmp(zt2_ifpbom2, "P") == 0 && tc_strcmp(zt2_MaterialNo2, zt2_MaterialNo) == 0) {
tag_t item = NULLTAG, *revisions = NULL;
int count = 0;
ITKCALL(ITEM_ask_item_of_rev(matnrs[i], &item));
ITKCALL(AOM_ask_value_tags(item, "revision_list", &count, &revisions));
for (int j = count - 1; j >= 0; j--) {
if (isTcm2(revisions[j])) {
return revisions[j];
}
}
}
}
}
}
return rev;
}
TiXmlElement* addElement(TiXmlElement *PARENT, const char* name, const char* val) {
TiXmlElement *CHILD = new TiXmlElement(name);
PARENT->LinkEndChild(CHILD);
if (tc_strlen(val) > 0) {
TiXmlText *materialText = new TiXmlText(val);
CHILD->LinkEndChild(materialText);
}
return CHILD;
}
void getWbsMsg(tag_t pRev, char* groupName, vector<string>& wbsList, TiXmlElement *WBSLIST) {
char *zt2_MaterialNo = NULL, *zt2_WBSNo = NULL;
ITKCALL(AOM_ask_value_string(pRev, "zt2_WBSNo", &zt2_WBSNo));
if (!zt2_WBSNo || tc_strlen(zt2_WBSNo) == 0 || find(wbsList.begin(), wbsList.end(), zt2_WBSNo) == wbsList.end()) {
return;
}
ITKCALL(AOM_ask_value_string(pRev, "zt2_MaterialNo", &zt2_MaterialNo));
TiXmlElement *WBSCONTENTS = addElement(WBSLIST, "WBSCONTENTS", "");
addElement(WBSCONTENTS, "WBS", zt2_WBSNo);
addElement(WBSCONTENTS, "PLANT", groupName);
addElement(WBSCONTENTS, "MATERIALNO", zt2_MaterialNo);
wbsList.push_back(zt2_WBSNo);
}
void checkMatnr(string& errMessage, tag_t matnrRev) {
char *os = NULL, *zt2_State = NULL;
ITKCALL(AOM_ask_value_string(matnrRev, "object_string", &os));
ITKCALL(AOM_ask_value_string(matnrRev, "zt2_State", &zt2_State));
if (tc_strcmp(zt2_State, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>") == 0 || tc_strcmp(zt2_State, "D1") == 0) {
errMessage.append("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>:").append(os).append("<EFBFBD>ѷ<EFBFBD><EFBFBD><EFBFBD>,<2C>޷<EFBFBD><DEB7><EFBFBD><EFBFBD><EFBFBD>SAP\n");
}
char **zt2_SZFactory = NULL, **zt2_SZProcuretype = NULL, **zt2_SZSealedornot = NULL;
int num1 = 0, num2 = 0, num3 = 0;
ITKCALL(AOM_ask_value_strings(matnrRev, "zt2_SZFactory", &num1, &zt2_SZFactory));
ITKCALL(AOM_ask_value_strings(matnrRev, "zt2_SZProcuretype", &num2, &zt2_SZProcuretype));
ITKCALL(AOM_ask_value_strings(matnrRev, "zt2_SZSealedornot", &num3, &zt2_SZSealedornot));
boolean flag = false;
for (int i = 0; i < num1; i++) {
if (tc_strcmp(zt2_SZFactory[i], "M060") == 0) {
flag = true;
if (num2 > i && tc_strcmp(zt2_SZProcuretype[i], "/") == 0) {
errMessage.append("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>:").append(os).append(" <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C>޷<EFBFBD><DEB7><EFBFBD><EFBFBD><EFBFBD>SAP\n");
}
if (num3 > i && tc_strcmp(zt2_SZSealedornot[i], "Y") == 0) {
errMessage.append("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>:").append(os).append(" <20>ѷ<EFBFBD><D1B7><EFBFBD>,<2C>޷<EFBFBD><DEB7><EFBFBD><EFBFBD><EFBFBD>SAP\n");
}
}
}
if (!flag) {
errMessage.append("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>:").append(os).append(" û<><C3BB>ά<EFBFBD><CEAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ,<2C>޷<EFBFBD><DEB7><EFBFBD><EFBFBD><EFBFBD>SAP\n");
}
}
void expandAllBomPart(tag_t pRev, tag_t line, TiXmlElement *XmlINTERGRATIONLIST, char* groupName, char* now, vector<string> wbsList, string& errMsg, map<string, tag_t> gy_meops) {
TiXmlElement *WBSLIST = XmlINTERGRATIONLIST->FirstChildElement("WBSLIST");
if (WBSLIST == NULL) {
WBSLIST = addElement(XmlINTERGRATIONLIST, "WBSLIST", "");
}
getWbsMsg(pRev, groupName, wbsList, WBSLIST);
tag_t* tzs = NULL;
int num = 0;
ITKCALL(AOM_ask_value_tags(pRev, "TC_Is_Represented_By", &num, &tzs));
int c_line_count = 0;
tag_t *c_line_tags = NULL;
ITKCALL(BOM_line_ask_all_child_lines(line, &c_line_count, &c_line_tags));
if (c_line_count == 0) {
return;
}
TiXmlElement *WLLIST = XmlINTERGRATIONLIST->FirstChildElement("WLLIST");
if (WLLIST == NULL) {
WLLIST = addElement(XmlINTERGRATIONLIST, "WLLIST", "");
}
TiXmlElement *WLCONTENTS = addElement(WLLIST, "WLCONTENTS", "");
//
char *item_id = NULL, *item_revision_id = NULL, *zt2_MaterialNo = NULL, *zt2_unit = NULL;
ITKCALL(ITEM_ask_rev_id2(pRev, &item_id));
ITKCALL(AOM_ask_value_string(pRev, "item_revision_id", &item_revision_id));
string tcid = "";
tcid.append(item_id).append("/").append(item_revision_id);
addElement(WLCONTENTS, "TCID", tcid.c_str());
//
ITKCALL(AOM_ask_value_string(pRev, "zt2_MaterialNo", &zt2_MaterialNo));
addElement(WLCONTENTS, "WLBM", zt2_MaterialNo);
//
TiXmlElement *BOMCONTENTS = addElement(WLCONTENTS, "BOMCONTENTS", "");
addElement(WLCONTENTS, "WLFILELIST", "");
addElement(WLCONTENTS, "BOPLIST", "");
//if (c_line_count > 0)
addElement(BOMCONTENTS, "PARENTTCID", tcid.c_str());
addElement(BOMCONTENTS, "PARENTWLBM", zt2_MaterialNo);
addElement(BOMCONTENTS, "PLANT", groupName);
addElement(BOMCONTENTS, "DATUV", now);
addElement(BOMCONTENTS, "STLAN", "1");
addElement(BOMCONTENTS, "STLAL", "1");
char *zt2_Quantity = NULL;
ITKCALL(AOM_ask_value_string(pRev, "zt2_Quantity", &zt2_Quantity));
addElement(BOMCONTENTS, "QUANTITY", zt2_Quantity);
tag_t item;
ITKCALL(ITEM_ask_item_of_rev(pRev, &item));
ITKCALL(AOM_ask_value_string(item, "zt2_unit", &zt2_unit));
char* unit = getUnti(zt2_unit);
log("str = [%s] \n", unit);
addElement(BOMCONTENTS, "QUIT", zt2_unit);
string maxSeq = "10";
TiXmlElement *SONLIST = addElement(BOMCONTENTS, "SONLIST", "");
for (int i = 0; i < c_line_count; i++) {
tag_t c_line_tag = c_line_tags[i], designRev = NULLTAG;
char *type2 = NULL;
ITKCALL(AOM_ask_value_tag(c_line_tag, "bl_line_object", &designRev));
ITKCALL(WSOM_ask_object_type2(designRev, &type2));
if (tc_strcmp(type2, "ZT2_XNZJBRevision") == 0) {
}
TiXmlElement *SONCONTENTS = addElement(SONLIST, "SONCONTENTS", "");
tag_t rev2 = getBOMPart(c_line_tag, groupName), item2;
char *item_id2 = NULL, *item_revision_id2 = NULL, *zt2_MaterialNo2 = NULL, *zt2_unit2 = NULL, *bl_sequence_no = NULL, *ZT2_Remark = NULL;
ITKCALL(AOM_ask_value_string(rev2, "item_id", &item_id2));
ITKCALL(AOM_ask_value_string(rev2, "item_revision_id", &item_revision_id2));
ITKCALL(AOM_ask_value_string(rev2, "zt2_MaterialNo", &zt2_MaterialNo2));
ITKCALL(ITEM_ask_item_of_rev(rev2, &item2));
ITKCALL(AOM_ask_value_string(item2, "zt2_unit", &zt2_unit2));
ITKCALL(AOM_UIF_ask_value(c_line_tag, "bl_sequence_no", &bl_sequence_no));
ITKCALL(AOM_UIF_ask_value(c_line_tag, "ZT2_Remark", &ZT2_Remark));
checkMatnr(errMsg, rev2);
string tcid2 = "";
tcid2.append(item_id2).append("/").append(item_revision_id2);
addElement(SONCONTENTS, "TCID", tcid2.c_str());
addElement(SONCONTENTS, "WLBM", zt2_MaterialNo2);
addElement(SONCONTENTS, "DATUV", now);
char *menge = NULL;// = getZYSAPMENGE(rev2, NULLTAG, c_line_tag, false, codeRemark, errMsg);
menge = (char*)MEM_alloc((16 + 1) * sizeof(char));
tc_strcpy(menge, getZYSAPMENGE(rev2, NULLTAG, c_line_tag, false, "1", errMsg));
char* unit22 = getUnti(zt2_unit2);
addElement(SONCONTENTS, "QUE", menge);
addElement(SONCONTENTS, "QUIT", unit22);
addElement(SONCONTENTS, "SORTF", "");
addElement(SONCONTENTS, "SEQID", bl_sequence_no);
addElement(SONCONTENTS, "POSTP", "L");
addElement(SONCONTENTS, "REMARK", ZT2_Remark);
addElement(SONCONTENTS, "OTHER1", "");
addElement(SONCONTENTS, "OTHER2", "");
if (i == c_line_count - 1) {
maxSeq = bl_sequence_no;
}
expandAllBomPart(rev2, c_line_tag, XmlINTERGRATIONLIST, groupName, now, wbsList, errMsg, gy_meops);
}
tag_t meops = getProcessTag(pRev, groupName);
int valueOf = stoi(maxSeq);
if (pRev != NULLTAG && meops != NULLTAG) {
char *os = NULL, *pos = NULL;
ITKCALL(AOM_ask_value_string(pRev, "object_string", &os));
ITKCALL(AOM_ask_value_string(meops, "object_string", &pos));
log("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>[%s]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ:%s", os, pos);
TiXmlElement *BOPLIST = addElement(WLCONTENTS, "BOPLIST", "");
getProcess(meops, pRev, now, groupName, gy_meops, BOPLIST, SONLIST, valueOf);
}
}
void BomSapWh(vector<tag_t> ccpVector, char* projectNo, char* groupName, char* wbs,
char* now, string& errMsgBuf, char*code, char* transfer, char* userName, char* projectName) {
log("************** BomSapWh **************");
for (int len = 0; len < ccpVector.size(); len++) {
tag_t rev = ccpVector[len];
tag_t prev = getPRevision(rev);
tag_t ebom_window = NULLTAG, line = NULLTAG;
ITKCALL(BOM_create_window(&ebom_window));
ITKCALL(BOM_set_window_top_line(ebom_window, NULL, prev, NULLTAG, &line));
TiXmlDocument XmlDocument;
XmlDocument.Parse("<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:urn=\"urn:chintelectric.com:xi:plm\"><soapenv:Header/><soapenv:Body><urn:MT_MATERIAL_BOP_REQ></urn:MT_MATERIAL_BOP_REQ></soapenv:Body></soapenv:Envelope>");
TiXmlElement* XmlRoot = XmlDocument.RootElement();
TiXmlElement *XmlREQ = XmlRoot->FirstChildElement("Body")->FirstChildElement();
TiXmlElement *XmlINTERGRATIONLIST = new TiXmlElement("XmlINTERGRATIONLIST");
XmlREQ->LinkEndChild(XmlINTERGRATIONLIST);
vector<string> wbsList;
map<string, tag_t> gy_meops;
string errMsg = "";
expandAllBomPart(prev, line, XmlINTERGRATIONLIST, groupName, now, wbsList, errMsg, gy_meops);
}
}