|
|
#include "SendSap.h"
|
|
|
|
|
|
vector<tag_t> getCPPPRevision(tag_t rev) {
|
|
|
vector<tag_t> itemList;
|
|
|
vector<tag_t> itemPList;
|
|
|
string id = "1ZDB300000P-";
|
|
|
char *type = NULL;
|
|
|
ITKCALL(WSOM_ask_object_type2(rev, &type));
|
|
|
if (tc_strcmp(type, "Part Revision") == 0) {
|
|
|
char *object_desc = NULL;
|
|
|
ITKCALL(AOM_ask_value_string(rev, "object_desc", &object_desc));
|
|
|
vector<string> v1;
|
|
|
Split(object_desc, " ", v1);
|
|
|
if (v1.size() > 1) {
|
|
|
vector<string> v2;
|
|
|
Split(v1[1], "-", v2);
|
|
|
if (v2.size() == 2) {
|
|
|
id.append(v2[1]);
|
|
|
}
|
|
|
else if (v2.size() == 3) {
|
|
|
id.append(v2[2]);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
else if (tc_strcmp(type, "ZT2_Design3DRevision") == 0) {
|
|
|
char *object_desc = NULL;
|
|
|
ITKCALL(AOM_ask_value_string(rev, "item_id", &object_desc));
|
|
|
vector<string> v2;
|
|
|
Split(object_desc, "-", v2);
|
|
|
if (v2.size() == 2) {
|
|
|
id.append(v2[1]);
|
|
|
}
|
|
|
else if (v2.size() == 3) {
|
|
|
id.append(v2[2]);
|
|
|
}
|
|
|
}
|
|
|
log("id===>%s", id.c_str());
|
|
|
//char *key[1] = { "" }, *value[1] = { (char*)id.c_str() };
|
|
|
int cnt = 0;
|
|
|
tag_t zztItem = NULLTAG, zztRev = NULLTAG, *matnrs = NULLTAG;
|
|
|
ITKCALL(ITEM_find_item(id.c_str(), &zztItem));
|
|
|
ITKCALL(ITEM_ask_latest_rev(zztItem, &zztRev));
|
|
|
ITKCALL(AOM_ask_value_tags(zztRev, "representation_for", &cnt, &matnrs));
|
|
|
for (int i = 0; i < cnt; i++) {
|
|
|
char *zt2_ifpbom = NULL;
|
|
|
tag_t item = NULLTAG;
|
|
|
ITKCALL(AOM_UIF_ask_value(matnrs[i], "zt2_ifpbom", &zt2_ifpbom));
|
|
|
ITKCALL(ITEM_ask_item_of_rev(matnrs[i], &item));
|
|
|
if (tc_strcmp(zt2_ifpbom, "P") == 0 && find(itemPList.begin(), itemPList.end(), item) == itemPList.end()) {
|
|
|
itemPList.push_back(item);
|
|
|
}
|
|
|
else if (find(itemList.begin(), itemList.end(), item) == itemList.end()) {
|
|
|
itemList.push_back(item);
|
|
|
}
|
|
|
}
|
|
|
if (itemPList.size() > 0) {
|
|
|
return itemPList;
|
|
|
}
|
|
|
return itemList;
|
|
|
}
|
|
|
|
|
|
void getWbsMsg2(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);
|
|
|
}
|
|
|
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>Ʒ<EFBFBD><C6B7><EFBFBD>ļ<EFBFBD> PDF/Excel/Word <20><>ͼֽ<CDBC><D6BD><EFBFBD>ļ<EFBFBD> WLFILELIST FILECONTENTS
|
|
|
vector<vector<tag_t>> getDocument(tag_t partRev, tag_t* tzs) {
|
|
|
vector<vector<tag_t>> ls;
|
|
|
vector<tag_t> dsList;
|
|
|
vector<tag_t> dsList2;
|
|
|
|
|
|
ls.push_back(dsList);
|
|
|
ls.push_back(dsList2);
|
|
|
return ls;
|
|
|
}
|
|
|
|
|
|
void expandAllBomPartBj(tag_t line, tag_t pRev, char* groupName, TiXmlElement *INTERGRATIONLIST,
|
|
|
vector<tag_t> cppRevision, vector<string> wbsList, char* now, char* batchNum, string& errMessage,
|
|
|
map<string, tag_t>& material_revs, map<string, tag_t> gy_meops) {
|
|
|
|
|
|
TiXmlElement *WBSLIST = addElement(INTERGRATIONLIST, "WBSLIST", "");
|
|
|
int cnt = cppRevision.size();
|
|
|
if (cnt > 0) {
|
|
|
for (int i = 0; i < cnt; i++) {
|
|
|
tag_t rev = NULLTAG;
|
|
|
ITKCALL(ITEM_ask_latest_rev(cppRevision[i], &rev));
|
|
|
getWbsMsg2(rev, groupName, wbsList, WBSLIST);
|
|
|
}
|
|
|
}
|
|
|
else {
|
|
|
getWbsMsg(pRev, groupName, wbsList, WBSLIST);
|
|
|
}
|
|
|
cnt = 0;
|
|
|
tag_t *tzs = NULLTAG;
|
|
|
ITKCALL(AOM_ask_value_tags(pRev, "TC_Is_Represented_By", &cnt, &tzs));
|
|
|
//vector<vector<tag_t>> document = getDocument(pRev, tzs);
|
|
|
//vector<tag_t> list1 = document[0];
|
|
|
//<tag_t> list2 = document[1];
|
|
|
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) {//&& list1.size() == 0 && list1.size() == 0) {
|
|
|
return;
|
|
|
}
|
|
|
TiXmlElement *WLLIST = addElement(INTERGRATIONLIST, "WLLIST", "");
|
|
|
TiXmlElement *WLCONTENTS = addElement(WLLIST, "WLCONTENTS", "");
|
|
|
char *item_id = NULL, *item_revision_id = NULL, *zt2_MaterialNo = NULL, *zt2_unit = NULL;
|
|
|
ITKCALL(AOM_ask_value_string(pRev, "item_id", &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", "");
|
|
|
TiXmlElement *BOPLIST = 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);
|
|
|
char* revUid;
|
|
|
ITK__convert_tag_to_uid(pRev, &revUid);
|
|
|
addElement(BOMCONTENTS, "UID", revUid);
|
|
|
addElement(BOMCONTENTS, "BATCHNUMBER", batchNum);
|
|
|
|
|
|
int maxSeq = 0;
|
|
|
TiXmlElement *SONLIST = addElement(BOMCONTENTS, "SONLIST", "");
|
|
|
for (int i = 0; i < c_line_count; i++) {
|
|
|
TiXmlElement *SONCONTENTS = addElement(SONLIST, "SONCONTENTS", "");
|
|
|
tag_t c_line_tag = c_line_tags[i], rev2 = NULLTAG;
|
|
|
char *type2 = NULL;
|
|
|
ITKCALL(AOM_ask_value_tag(c_line_tag, "bl_line_object", &rev2));
|
|
|
tag_t item2 = NULLTAG;
|
|
|
char *item_id2 = NULL, *item_revision_id2 = NULL, *zt2_MaterialNo2 = NULL, *zt2_SapState = 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(errMessage, 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;
|
|
|
menge = (char*)MEM_alloc((16 + 1) * sizeof(char));
|
|
|
tc_strcpy(menge, getZYSAPMENGE(rev2, NULLTAG, c_line_tag, false, "1", errMessage));
|
|
|
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) {
|
|
|
if (!bl_sequence_no || tc_strlen(bl_sequence_no) == 0) {
|
|
|
char *os2 = NULL;
|
|
|
ITKCALL(AOM_UIF_ask_value(c_line_tag, "object_string", &os2));
|
|
|
errMessage.append(os2).append(" bl_sequence_noΪ<6F><CEAA>;");
|
|
|
}
|
|
|
else {
|
|
|
maxSeq = stoi(bl_sequence_no);
|
|
|
}
|
|
|
}
|
|
|
ITKCALL(AOM_UIF_ask_value(rev2, "zt2_SapState", &zt2_SapState));
|
|
|
if (tc_strcmp(zt2_SapState, "<EFBFBD>Ѵ<EFBFBD>") == 0 || tc_strcmp(zt2_SapState, "3") == 0) {
|
|
|
continue;
|
|
|
}
|
|
|
if (zt2_MaterialNo2 && tc_strlen(zt2_MaterialNo2) > 0) {
|
|
|
material_revs[zt2_MaterialNo2] = rev2;
|
|
|
}
|
|
|
expandAllBomPart(rev2, c_line_tag, INTERGRATIONLIST, groupName, now, wbsList, errMessage, gy_meops, batchNum);
|
|
|
}
|
|
|
tag_t meops = getProcessTag(pRev, groupName);
|
|
|
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);
|
|
|
getProcess(meops, pRev, now, groupName, gy_meops, BOPLIST, SONLIST, maxSeq);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
void BomSapWhBjOp(tag_t target, char* groupName, char* now, char* code, char* wbs, char* userName, char* projectName) {
|
|
|
log("************** BomSapWhBjOp **************");
|
|
|
|
|
|
tag_t pRevision = getPRevision(target);
|
|
|
vector<tag_t> cppRevision = getCPPPRevision(target);
|
|
|
tag_t ebom_window = NULLTAG, line = NULLTAG;
|
|
|
ITKCALL(BOM_create_window(&ebom_window));
|
|
|
ITKCALL(BOM_set_window_top_line(ebom_window, NULL, pRevision, NULLTAG, &line));
|
|
|
string batchNum = code, errMsgBuf = "";
|
|
|
batchNum.append("-00001");
|
|
|
|
|
|
int url_num = 0;
|
|
|
char** rule_vals = NULL;
|
|
|
char alterstatus[2] = "N";
|
|
|
//<2F>Ƿ<EFBFBD><C7B7><EFBFBD>Ҫ<EFBFBD><EFBFBD>״̬
|
|
|
ITKCALL(PREF_ask_char_values("CHINT_BOMTOSAP_STATUS_RULE", &url_num, &rule_vals));
|
|
|
for (int i = 0; i < url_num; i++) {
|
|
|
vector<string> vec;
|
|
|
Split(rule_vals[i], ":", vec);
|
|
|
if (tc_strcmp(vec[0].c_str(), "M060") == 0) {
|
|
|
tc_strcpy(alterstatus, vec[1].c_str());
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
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 *MT_MATERIAL_BOP_REQ = XmlRoot->FirstChildElement("soapenv:Body")->FirstChildElement();
|
|
|
TiXmlElement *INTERGRATIONLIST = addElement(MT_MATERIAL_BOP_REQ, "INTERGRATIONLIST", "");
|
|
|
vector<string> wbsList;
|
|
|
map<string, tag_t> gy_meops;
|
|
|
string errMsg = "";
|
|
|
map<string, tag_t> material_revs;
|
|
|
|
|
|
expandAllBomPartBj(line, pRevision, groupName, INTERGRATIONLIST, cppRevision, wbsList, now, (char*)batchNum.c_str(), errMsg,
|
|
|
material_revs, gy_meops);
|
|
|
|
|
|
TiXmlPrinter printer;
|
|
|
XmlDocument.Accept(&printer);
|
|
|
string bomlog = "BOMȫdocument===>";
|
|
|
bomlog.append(printer.CStr());
|
|
|
log2(bomlog);
|
|
|
string logmsg = "errMsg =>";
|
|
|
//log2(logmsg.append(errMsg));
|
|
|
logmsg.append(errMsg);
|
|
|
printf("%s\n", logmsg.c_str());
|
|
|
info(logmsg.c_str());
|
|
|
if (errMsg.length() > 0) {
|
|
|
errMsgBuf.append("BOM<EFBFBD>쳣:\\n").append(errMsg);
|
|
|
//
|
|
|
string updateSum = "update CHINT_BOM_TO_SAP_SUM set \"DATASTATUS\" = '<27><><EFBFBD>ݼ<EFBFBD><DDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>' ,SAPRESULT = 'PLM<4C><4D><EFBFBD><EFBFBD>δͨ<CEB4><CDA8>',PLMRESULT = '<27>ѷ<EFBFBD><D1B7>ͷ<EFBFBD><CDB7><EFBFBD>֪ͨ' where code = '%s' ";
|
|
|
char selectRxfs[800];
|
|
|
string timel;
|
|
|
sprintf(selectRxfs, updateSum.c_str(), code);
|
|
|
log("selectRecord2 ===> %s\n", selectRxfs);
|
|
|
ExecuteSQLNoInputParam(selectRxfs);
|
|
|
ExecuteSQLNoInputParam((char*)"commit");
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѷ<EFBFBD><D1B7>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
sendNotice(code, errMsgBuf, wbs, groupName, userName, projectName);
|
|
|
return;
|
|
|
}
|
|
|
char *zt2_MaterialNo = NULL;
|
|
|
ITKCALL(AOM_ask_value_string(pRevision, "zt2_MaterialNo", &zt2_MaterialNo));
|
|
|
//materialNoTmp.append(zt2_MaterialNo).append(";");
|
|
|
logXmlMsg(INTERGRATIONLIST, code, zt2_MaterialNo, batchNum.c_str(), wbs, alterstatus);
|
|
|
errMsg = SendToSap(printer.CStr());
|
|
|
log("SendToSap end");
|
|
|
if (errMsg.length() > 0) {
|
|
|
log("errMsg.length() > 0");
|
|
|
errMsgBuf.append("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>쳣:\\n").append(errMsg);
|
|
|
//
|
|
|
string updateSum = "update CHINT_BOM_TO_SAP_SUM set \"DATASTATUS\" = '<27><><EFBFBD><EFBFBD><EFBFBD>쳣' ,SAPRESULT = '<27><><EFBFBD><EFBFBD><EFBFBD>쳣',PLMRESULT = '<27>ѷ<EFBFBD><D1B7>ͷ<EFBFBD><CDB7><EFBFBD>֪ͨ' where code = '%s' ";
|
|
|
char selectRxfs[800];
|
|
|
string timel;
|
|
|
sprintf(selectRxfs, updateSum.c_str(), code);
|
|
|
log("selectRecord3 ===> %s\n", selectRxfs);
|
|
|
ExecuteSQLNoInputParam(selectRxfs);
|
|
|
ExecuteSQLNoInputParam((char*)"commit");
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѷ<EFBFBD><D1B7>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
sendNotice(code, errMsgBuf, wbs, groupName, userName, projectName);
|
|
|
return;
|
|
|
}
|
|
|
//interLogElem = INTERGRATIONLIST;
|
|
|
//interLogList.push_back(XmlDocument);
|
|
|
ITKCALL(BOM_close_window(ebom_window));
|
|
|
|
|
|
string time1 = getPlmTime(code);
|
|
|
string updateSum = "update CHINT_BOM_TO_SAP_SUM set \"NUMBER\" = %d ,datastatus = '<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SAP',organizationaltime = '%s',taskstauts = '<27><>֯<EFBFBD><D6AF><EFBFBD><EFBFBD>',PLMFINISHTIME = SYSDATE where code = '%s' ";
|
|
|
char selectRxfs[800];
|
|
|
string timel;
|
|
|
sprintf(selectRxfs, updateSum.c_str(), 1, time1.c_str(), code);
|
|
|
log("selectRecord2 ===> %s\n", selectRxfs);
|
|
|
ExecuteSQLNoInputParam(selectRxfs);
|
|
|
ExecuteSQLNoInputParam((char*)"commit");
|
|
|
} |