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.

311 lines
12 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 "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");
}