#include "SendSap.h" vector getCPPPRevision(tag_t rev) { vector itemList; vector 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 v1; Split(object_desc, " ", v1); if (v1.size() > 1) { vector 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 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& 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); } // 获取产成品的文件 PDF/Excel/Word 和图纸下文件 WLFILELIST FILECONTENTS vector> getDocument(tag_t partRev, tag_t* tzs) { vector> ls; vector dsList; vector dsList2; ls.push_back(dsList); ls.push_back(dsList2); return ls; } void expandAllBomPartBj(tag_t line, tag_t pRev, char* groupName, TiXmlElement *INTERGRATIONLIST, vector cppRevision, vector wbsList, char* now, char* batchNum, string& errMessage, map& material_revs, map 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> document = getDocument(pRev, tzs); //vector list1 = document[0]; // 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为空;"); } else { maxSeq = stoi(bl_sequence_no); } } ITKCALL(AOM_UIF_ask_value(rev2, "zt2_SapState", &zt2_SapState)); if (tc_strcmp(zt2_SapState, "已传") == 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("物料[%s]工艺信息:%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 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"; //是否需要修改状态 ITKCALL(PREF_ask_char_values("CHINT_BOMTOSAP_STATUS_RULE", &url_num, &rule_vals)); for (int i = 0; i < url_num; i++) { vector 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(""); TiXmlElement* XmlRoot = XmlDocument.RootElement(); TiXmlElement *MT_MATERIAL_BOP_REQ = XmlRoot->FirstChildElement("soapenv:Body")->FirstChildElement(); TiXmlElement *INTERGRATIONLIST = addElement(MT_MATERIAL_BOP_REQ, "INTERGRATIONLIST", ""); vector wbsList; map gy_meops; string errMsg = ""; map 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异常:\\n").append(errMsg); // string updateSum = "update CHINT_BOM_TO_SAP_SUM set \"DATASTATUS\" = '数据检查有问题' ,SAPRESULT = 'PLM检查未通过',PLMRESULT = '已发送飞书通知' where code = '%s' "; char selectRxfs[800]; string timel; sprintf(selectRxfs, updateSum.c_str(), code); log("selectRecord2 ===> %s\n", selectRxfs); ExecuteSQLNoInputParam(selectRxfs); ExecuteSQLNoInputParam((char*)"commit"); //错误数据已发送飞书提醒 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("传递异常:\\n").append(errMsg); // string updateSum = "update CHINT_BOM_TO_SAP_SUM set \"DATASTATUS\" = '传递异常' ,SAPRESULT = '传递异常',PLMRESULT = '已发送飞书通知' where code = '%s' "; char selectRxfs[800]; string timel; sprintf(selectRxfs, updateSum.c_str(), code); log("selectRecord3 ===> %s\n", selectRxfs); ExecuteSQLNoInputParam(selectRxfs); ExecuteSQLNoInputParam((char*)"commit"); //错误数据已发送飞书提醒 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 = '数据正常推送SAP',organizationaltime = '%s',taskstauts = '组织完成',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"); }