#include "SendSap.h" tag_t getTopZzItem(tag_t rev, const char* endFix){ int n_parents = 0; int* levels; tag_t* parents; ITKCALL(PS_where_used_all(rev, 1, &n_parents, &levels, &parents)); if (n_parents == 0) { char* item_id = NULL; ITKCALL(AOM_ask_value_string(rev, "item_id", &item_id)); if (tc_strstr(item_id, "-") != NULL) { vector v1; Split(item_id, "-", v1); if (tc_strcmp(v1[1].c_str(), endFix) == 0) { return rev; } } } else { for (int i = 0; i < n_parents; i++) { tag_t parent = getTopZzItem(parents[i], endFix); if (parent != NULLTAG) return parent; } } return NULLTAG; } bool isHaveBOMView(tag_t rev) { if (rev == NULLTAG) return false; int revNum = 0; tag_t *structure_revisions; ITKCALL(AOM_ask_value_tags(rev, "structure_revisions", &revNum, &structure_revisions)); if (revNum == 0) return false; return true; } // 获得SAP物料 tag_t getSAPPart(tag_t line, char* groupName, string& buff) { tag_t rev = NULLTAG; ITKCALL(AOM_ask_value_tag(line, "bl_line_object", &rev)); char *type = NULL; ITKCALL(WSOM_ask_object_type2(rev, &type)); if (tc_strcmp(type, "Part Revision") == 0) { return rev; } char* zt2_Diagram = NULL; ITKCALL(AOM_ask_value_string(rev, "zt2_Diagram", &zt2_Diagram)); int num = 0; tag_t *comps = NULL; vector parts; ITKCALL(AOM_ask_value_tags(rev, "representation_for", &num, &comps)); for (int i = 0; i < num; i++) { char *type2 = NULL; ITKCALL(WSOM_ask_object_type2(comps[i], &type2)); if (tc_strcmp(type2, "Part Revision") == 0 && isTcm2(comps[i])) { parts.push_back(comps[i]); } } if (parts.size() == 1) { return parts[0]; } else if (parts.size() > 1 && tc_strcmp(groupName, "M034") == 0) { if (tc_strcmp(zt2_Diagram, "Y") != 0 && tc_strcmp(zt2_Diagram, "是") != 0) { buff.append("缺少物料编码[一图多料];"); } return NULLTAG; } char* zt2_TYJNo = NULL, *item_id = NULL; ITKCALL(AOM_UIF_ask_value(line, "ZT2_TYSpecifications", &zt2_TYJNo)); if (zt2_TYJNo && tc_strlen(zt2_TYJNo) > 0) { tag_t query_tag = NULLTAG; char *query_name = "chint_query_material_en"; ITKCALL(QRY_find2(query_name, &query_tag)); if (query_tag == NULL) { log("%s not found", query_name); return NULLTAG; } ITKCALL(AOM_UIF_ask_value(rev, "item_id", &item_id)); char *zt2_DrawingNo = NULL; string qs = "*"; ITKCALL(AOM_UIF_ask_value(rev, "zt2_DrawingNo", &zt2_DrawingNo)); if (zt2_DrawingNo && tc_strlen(zt2_DrawingNo) > 0 && tc_strcmp(item_id, zt2_DrawingNo) != 0) { qs.append(zt2_DrawingNo); } else { qs.append(item_id); } qs.append("*").append(zt2_TYJNo).append("*"); char *val = (char*)MEM_alloc((qs.size() + 1) * sizeof(char)); tc_strcpy(val, qs.c_str()); char* qkey[1] = { "des" }, *qvalue[1] = { val }; int num_found = 0; tag_t *qresult = NULLTAG; ITKCALL(QRY_execute(query_tag, 1, qkey, qvalue, &num_found, &qresult)); log("%s %s:%s==>%d", query_name, qkey[0], qvalue[0], num_found); map map_revs; vector materials; for (int i = 0; i < num_found; i++) { if (isTcm2(qresult[i])) { char *zt2_MaterialNo = NULL; ITKCALL(AOM_UIF_ask_value(qresult[i], "zt2_MaterialNo", &zt2_MaterialNo)); map_revs[zt2_MaterialNo] = qresult[i]; materials.push_back(zt2_MaterialNo); log("materials:%s", zt2_MaterialNo); } } if (materials.size() > 0) { getSort(materials); for (int i = 0; i < materials.size(); i++) { string sql = "select FeatureList from CcemVW_GoodsFeature where GoodsCode = '"; sql.append(materials[i]).append("'"); log("mdmsql:%s", sql.c_str()); int outputColumn1 = 0, outputValueCount1 = 0; char*** outputValue1 = NULL; ado_QuerySQLNoInputParam((char*)sql.c_str(), &outputColumn1, &outputValueCount1, &outputValue1); if (outputValueCount1 > 0) { log("mdm:%s", outputValue1[0][0]); vector vec; Split(outputValue1[0][0], ",", vec); for (int j = 0; j < vec.size(); j++) { string s = vec[j].substr(0, 5); if (tc_strcmp(s.c_str(), "F064:") == 0) { string temp = vec[j].substr(5, vec[j].size() - 5); if (tc_strstr(zt2_TYJNo, temp.c_str()) != NULL) { log("find"); return map_revs[materials[i]]; } log("temp:%s", temp.c_str()); break; } } } } } } char* spec = NULL; ITKCALL(AOM_UIF_ask_value(rev, "zt2_Specifications", &spec)); for (int i = 0; i < parts.size(); i++) { char* zt2_Specifications = NULL; ITKCALL(AOM_UIF_ask_value(parts[i], "zt2_Specifications", &zt2_Specifications)); if (tc_strcmp(zt2_Specifications, spec) == 0) { return parts[i]; } } if (tc_strcmp(zt2_Diagram, "Y") != 0 && tc_strcmp(zt2_Diagram, "是") != 0) { buff.append("缺少物料编码[一图多料];"); } return NULLTAG; } void recurBYBJSAP(tag_t line, tag_t rev, tag_t partRev, char* groupName, map& gy_meops, vector& needTCM_meops, char* now, vector <_ns1__DT_USCOREPROCESSROUTE_USCORES4_USCOREREQ_LIST>& proclist, vector& bomISExist, vector matr, char* codeRemark, map& by_materials, int icsId, string& errMsg, vector kjBomIds, char* projWbsNo, vector<_ns1__DT_USCOREBOM_USCORES4_USCOREREQ_LIST>& list, map& material_revs, map> flMap) { char* os = NULL, *item_id = NULL, *object_name = NULL; string buff = ""; ITKCALL(AOM_ask_value_string(rev, "object_string", &os)); ITKCALL(AOM_ask_value_string(rev, "item_id", &item_id)); ITKCALL(AOM_ask_value_string(rev, "object_name", &object_name)); log("***** recurBYBJSAP:%s-%s", item_id, object_name); 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)); tag_t meops = getProcessTag(rev, groupName); if (partRev == NULLTAG) { partRev = getSAPPart(line, groupName, errMsg); } char *type = NULL; ITKCALL(WSOM_ask_object_type2(rev, &type)); if (tc_strcmp(type, "ZT2_Design3DRevision") == 0 && partRev == NULLTAG) { char *zt2_Diagram = NULL; ITKCALL(AOM_ask_value_string(rev, "zt2_Diagram", &zt2_Diagram)); if (tc_strcmp(zt2_Diagram, "Y") == 0 || tc_strcmp(zt2_Diagram, "是") == 0) { return; } } char *zt2_Source = NULL; ITKCALL(AOM_UIF_ask_value(rev, "zt2_Source", &zt2_Source)); boolean equals = (zt2_Source && (tc_strcmp(zt2_Source, "外购") == 0 || tc_strcmp(zt2_Source, "S2") == 0)); if (partRev != NULLTAG) { if (meops == NULLTAG) { if (!equals && tc_strcmp(type, "ZT2_Design3DRevision") == 0) { tag_t mrProcess = getMrProcess(groupName); if (mrProcess != NULLTAG) { readBopInfo1YH(mrProcess, partRev, false, gy_meops, needTCM_meops, groupName, now, proclist); } } } else { readBopInfo1YH(meops, partRev, true, gy_meops, needTCM_meops, groupName, now, proclist); } } if (equals) { if (partRev == NULLTAG) return; if (isHaveBOMView(partRev)) { tag_t window = NULLTAG, bomline = NULLTAG; ITKCALL(BOM_create_window(&window)); ITKCALL(BOM_set_window_top_line(window, NULL, partRev, NULLTAG, &bomline)); recurBYBJSAP(bomline, partRev, partRev, groupName, gy_meops, needTCM_meops, now, proclist, bomISExist, matr, codeRemark, by_materials, icsId, errMsg, kjBomIds, projWbsNo, list, material_revs, flMap); ITKCALL(BOM_close_window(window)); } return; } if (partRev != NULLTAG) { char *zt2_MaterialNo = NULL; ITKCALL(AOM_ask_value_string(partRev, "zt2_MaterialNo", &zt2_MaterialNo)); if (find(bomISExist.begin(), bomISExist.end(), zt2_MaterialNo) != bomISExist.end()) { log("%s 已存在,过滤", zt2_MaterialNo); return; } else { bomISExist.push_back(zt2_MaterialNo); } } vector v1; Split(item_id, "-", v1); if (c_line_count == 0 && !flMap.count(v1[0])) { if (tc_strcmp(type, "ZT2_Design3DRevision") == 0 && (tc_strcmp(zt2_Source, "自制") == 0 || tc_strcmp(zt2_Source, "S1") == 0)) { tag_t comp = NULLTAG; map materials; if (matr.size() > 1 && tc_strcmp(matr[1].c_str(), "DB") == 0) { comp = getClassPartDB(rev, groupName, by_materials, materials, buff); } else { comp = getClassPart(rev, codeRemark, icsId, by_materials, buff); } char* sortno = NULL; ITKCALL(AOM_ask_value_string(line, "ZT2_ClassificationNo", &sortno)); log("工序编码 =>%s", sortno); _ns1__DT_USCOREBOM_USCORES4_USCOREREQ_LIST_HEAD head; if (partRev != NULLTAG) { char *zt2_MaterialNo = NULL, *zt2_WBSNo = NULL, *zt2_unit = NULL; ITKCALL(AOM_UIF_ask_value(partRev, "zt2_WBSNo", &zt2_WBSNo)); string property = zt2_WBSNo; if (!zt2_WBSNo || tc_strlen(zt2_WBSNo) == 0) { vector v1; Split(item_id, "-", v1); if (find(kjBomIds.begin(), kjBomIds.end(), v1[0]) != kjBomIds.end()) { property = projWbsNo; } } tag_t item = NULLTAG; ITKCALL(ITEM_ask_item_of_rev(partRev, &item)); ITKCALL(AOM_ask_value_string(item, "zt2_unit", &zt2_unit)); char* unit = getUnti(zt2_unit); log("unit = %s > %s", zt2_unit, unit); ITKCALL(AOM_UIF_ask_value(partRev, "zt2_MaterialNo", &zt2_MaterialNo)); char *pspnr = NULL; pspnr = (char*)MEM_alloc((property.size() + 1) * sizeof(char)); tc_strcpy(pspnr, property.c_str()); log("pspnr = %s", pspnr); head.PSPNR = pspnr; head.MATNR = zt2_MaterialNo; head.BMEIN = unit; } head.STLAN = (char*)"1"; head.STLAL = (char*)"1"; head.BMENG = (char*)"1"; head.WERKS = groupName; head.DATUV = now; char* parnetUid; ITK__convert_tag_to_uid(rev, &parnetUid); head.STKTX = parnetUid; _ns1__DT_USCOREBOM_USCORES4_USCOREREQ_LIST_ITEMS_ITEM* items_items = new _ns1__DT_USCOREBOM_USCORES4_USCOREREQ_LIST_ITEMS_ITEM[1]; _ns1__DT_USCOREBOM_USCORES4_USCOREREQ_LIST_ITEMS items; _ns1__DT_USCOREBOM_USCORES4_USCOREREQ_LIST_ITEMS_ITEM items_item; items_item.DATUV = now; items_item.POSTP = (char*)"L"; items_item.POSNR = "0010"; if (!sortno || tc_strlen(sortno) == 0) { buff.append("自制件").append(os).append("未投料;"); } if (comp != NULLTAG) { char *zt2_MaterialNo = NULL, *zt2_unit = NULL, *zt2_MaterialMark = NULL; tag_t item = NULLTAG; ITKCALL(ITEM_ask_item_of_rev(comp, &item)); ITKCALL(AOM_UIF_ask_value(comp, "zt2_MaterialNo", &zt2_MaterialNo)); ITKCALL(AOM_ask_value_string(item, "zt2_unit", &zt2_unit)); //char* unit = getUnti(zt2_unit); items_item.IDNRK = zt2_MaterialNo; items_item.MEINS = zt2_unit; ITKCALL(AOM_UIF_ask_value(rev, "zt2_MaterialMark", &zt2_MaterialMark)); char* zysapmenge2 = NULL; zysapmenge2 = (char*)MEM_alloc((16 + 1) * sizeof(char)); if (materials.count(zt2_MaterialMark) > 0) { tc_strcpy(zysapmenge2, getZYSAPMENGE2(materials[zt2_MaterialMark], rev, line, true, errMsg)); } else { tc_strcpy(zysapmenge2, getZYSAPMENGE(rev, comp, line, true, codeRemark, errMsg)); } items_item.MENGE = zysapmenge2; } items_item.SORTF = sortno; items_item.POTX1 = ""; items_items[0] = items_item; items.ITEM = items_items; items.__sizeITEM = 1;/**/ _ns1__DT_USCOREBOM_USCORES4_USCOREREQ_LIST list1; list1.HEAD = head; //log("list1.HEAD %s ", list1.HEAD.BMEIN); list1.ITEMS = items; log("list %zd ", list.size()); list.push_back(list1); } return; } _ns1__DT_USCOREBOM_USCORES4_USCOREREQ_LIST_HEAD head; if (partRev != NULLTAG) { char *zt2_MaterialNo = NULL, *zt2_WBSNo = NULL, *zt2_unit = NULL; ITKCALL(AOM_UIF_ask_value(partRev, "zt2_WBSNo", &zt2_WBSNo)); string property = zt2_WBSNo; if (!zt2_WBSNo || tc_strlen(zt2_WBSNo) == 0) { vector v1; Split(item_id, "-", v1); if (find(kjBomIds.begin(), kjBomIds.end(), v1[0]) != kjBomIds.end()) { property = projWbsNo; } } tag_t item = NULLTAG; ITKCALL(ITEM_ask_item_of_rev(partRev, &item)); ITKCALL(AOM_ask_value_string(item, "zt2_unit", &zt2_unit)); char* unit = getUnti(zt2_unit); log("unit = %s > %s", zt2_unit, unit); ITKCALL(AOM_UIF_ask_value(partRev, "zt2_MaterialNo", &zt2_MaterialNo)); char *pspnr = NULL; pspnr = (char*)MEM_alloc((property.size() + 1) * sizeof(char)); tc_strcpy(pspnr, property.c_str()); log("pspnr = %s", pspnr); head.PSPNR = pspnr; head.MATNR = zt2_MaterialNo; head.BMEIN = unit; } head.STLAN = (char*)"1"; head.STLAL = (char*)"1"; head.BMENG = (char*)"1"; head.WERKS = groupName; head.DATUV = now; char* parnetUid; ITK__convert_tag_to_uid(rev, &parnetUid); head.STKTX = parnetUid; //inCcpMap[parnetUid] = ccpMaterialMap; string msg; msg.append(os).append(":").append(buff); log("buff ===>%s", msg.c_str()); if (buff.length() > 0 && tc_strstr(errMsg.c_str(), msg.c_str()) == NULL) { errMsg.append("\\n").append(msg); } _ns1__DT_USCOREBOM_USCORES4_USCOREREQ_LIST_ITEMS_ITEM* items_items = new _ns1__DT_USCOREBOM_USCORES4_USCOREREQ_LIST_ITEMS_ITEM[c_line_count]; vector fls; vector gxs; if (flMap.count(v1[0])) { tag_t query_tag = NULLTAG; ITKCALL(QRY_find2("零组件 ID", &query_tag)); for (int i = 0; i < flMap[v1[0]].size(); i++) { char **fl = flMap[v1[0]][i]; char* qry_entries[1] = { "零组件 ID" }, *qry_values[1] = { fl[0] }; int n_found = 0; tag_t *tags = NULLTAG; ITKCALL(QRY_execute(query_tag, 1, qry_entries, qry_values, &n_found, &tags)); if (n_found > 0) { tag_t fl_rev = NULLTAG; ITKCALL(ITEM_ask_latest_rev(tags[0], &fl_rev)); tag_t window = NULLTAG, fl_line = NULLTAG; ITKCALL(BOM_create_window(&window)); ITKCALL(BOM_set_window_top_line(window, NULL, fl_rev, NULLTAG, &fl_line)); int fl_line_count = 0; tag_t *fl_line_tags = NULL; ITKCALL(BOM_line_ask_all_child_lines(fl_line, &fl_line_count, &fl_line_tags)); for (int j = 0; j < fl_line_count; j++) { fls.push_back(fl_line_tags[j]); gxs.push_back(fl[2]); } ITKCALL(BOM_close_window(window));//BOM_close_window } } items_items = new _ns1__DT_USCOREBOM_USCORES4_USCOREREQ_LIST_ITEMS_ITEM[c_line_count + fls.size()]; } int seq = 0; _ns1__DT_USCOREBOM_USCORES4_USCOREREQ_LIST_ITEMS items; for (int i = 0; i < c_line_count; i++) { buff = ""; _ns1__DT_USCOREBOM_USCORES4_USCOREREQ_LIST_ITEMS_ITEM items_item; tag_t line2 = c_line_tags[i], rev2; ITKCALL(AOM_ask_value_tag(line2, "bl_line_object", &rev2)); tag_t item2, partRev2 = getSAPPart(line2, groupName, errMsg); ITKCALL(ITEM_ask_item_of_rev(rev2, &item2)); // 如果图纸下没有物料,则,判断此图纸版本上的属性zt2_Diagram属性,如果此属性为是(LOV值,真实值为Y), //则不传递此图纸,物料检查也不要报错,跳过此图纸以及子件 bool isContinue = true; char *type2 = NULL, *zt2_MaterialNo = NULL, *zt2_unit = NULL, *zt2_State = NULL, *bl_sequence_no = NULL, *ZT2_ClassificationNo = NULL, *ZT2_Remark = NULL, *os2 = NULL, *zt2_SapState = NULL; ITKCALL(WSOM_ask_object_type2(rev2, &type2)); if (tc_strcmp(type2, "ZT2_Design3DRevision") == 0) { if (partRev2 == NULLTAG) { char *zt2_Diagram = NULL; ITKCALL(AOM_ask_value_string(rev2, "zt2_Diagram", &zt2_Diagram)); if (tc_strcmp(zt2_Diagram, "Y") == 0 || tc_strcmp(zt2_Diagram, "是") == 0) { return; } } int c_line_count2 = 0, cnt = 0; tag_t *c_line_tags2 = NULL, *representation_for = NULL; ITKCALL(BOM_line_ask_all_child_lines(line2, &c_line_count2, &c_line_tags2)); ITKCALL(AOM_ask_value_tags(rev2, "representation_for", &cnt, &representation_for)); if (c_line_count2 == 0 && cnt > 1) { isContinue = false; } } if (partRev2 != NULLTAG) { ITKCALL(AOM_UIF_ask_value(partRev2, "zt2_MaterialNo", &zt2_MaterialNo)); ITKCALL(AOM_ask_value_string(item2, "zt2_unit", &zt2_unit)); char* unit22 = getUnti(zt2_unit); items_item.IDNRK = zt2_MaterialNo; //char* unit = unit22; items_item.MEINS = unit22; ITKCALL(AOM_UIF_ask_value(partRev2, "zt2_State", &zt2_State)); if (tc_strcmp(zt2_State, "封存") == 0 || tc_strcmp(zt2_State, "D1") == 0) { buff.append("物料:").append(zt2_MaterialNo).append("已封存,无法传递SAP"); } } ITKCALL(AOM_UIF_ask_value(line2, "bl_sequence_no", &bl_sequence_no)); ITKCALL(AOM_UIF_ask_value(line2, "ZT2_ClassificationNo", &ZT2_ClassificationNo)); ITKCALL(AOM_UIF_ask_value(line2, "ZT2_Remark", &ZT2_Remark)); ITKCALL(AOM_ask_value_string(rev2, "object_string", &os2)); ITKCALL(AOM_UIF_ask_value(rev2, "zt2_SapState", &zt2_SapState)); int seq2 = 0; if (bl_sequence_no && tc_strlen(bl_sequence_no) > 0) { seq2 = stoi(bl_sequence_no); } if (seq2 > seq) { seq = seq2; } items_item.DATUV = now; items_item.POSTP = (char*)"L"; items_item.POSNR = bl_sequence_no; char* zysapmenge2 = NULL; zysapmenge2 = (char*)MEM_alloc((16 + 1) * sizeof(char)); tc_strcpy(zysapmenge2, getZYSAPMENGE(rev2, NULLTAG, line2, false, codeRemark, buff)); items_item.MENGE = zysapmenge2; items_item.SORTF = ZT2_ClassificationNo; if (!ZT2_ClassificationNo || tc_strlen(ZT2_ClassificationNo) == 0) { buff.append("BOM行缺少投料信息;"); } items_item.POTX1 = ZT2_Remark; items_items[i] = items_item; msg.append(os2).append("(父项:").append(os).append("):").append(buff); log("buff ===>%s", buff.c_str()); if (buff.length() > 0 && tc_strstr(errMsg.c_str(), msg.c_str()) == NULL) { errMsg.append("\\n").append(msg); } if (tc_strcmp(zt2_SapState, "已传") == 0 && isContinue) { continue; } if (zt2_MaterialNo && tc_strlen(zt2_MaterialNo) > 0) { material_revs[zt2_MaterialNo] = partRev2; } recurBYBJSAP(line2, rev2, partRev2, groupName, gy_meops, needTCM_meops, now, proclist, bomISExist, matr, codeRemark, by_materials, icsId, errMsg, kjBomIds, projWbsNo, list, material_revs, flMap); } if (flMap.count(v1[0])) { for (int i = 0; i < fls.size(); i++) { string buff; _ns1__DT_USCOREBOM_USCORES4_USCOREREQ_LIST_ITEMS_ITEM items_item; tag_t c_line_tag = fls[i], rev2; ITKCALL(AOM_ask_value_tag(c_line_tag, "bl_line_object", &rev2)); tag_t partRev2 = getSAPPart(c_line_tag, groupName, errMsg); char *zt2_MaterialNo2 = NULL, *zt2_unit2 = NULL; if (partRev2 != NULLTAG) { ITKCALL(AOM_UIF_ask_value(partRev2, "zt2_MaterialNo", &zt2_MaterialNo2)); tag_t item2 = NULLTAG; ITKCALL(ITEM_ask_item_of_rev(partRev2, &item2)); ITKCALL(AOM_ask_value_string(item2, "zt2_unit", &zt2_unit2)); char* unit22 = getUnti(zt2_unit2); //char* unit = unit22; items_item.IDNRK = zt2_MaterialNo2; items_item.MEINS = unit22; char *zt2_State = NULL; ITKCALL(AOM_UIF_ask_value(partRev2, "zt2_State", &zt2_State)); if (tc_strcmp(zt2_State, "封存") == 0 || tc_strcmp(zt2_State, "D1") == 0) { buff.append("物料:").append(zt2_MaterialNo2).append("已封存,无法传递SAP;"); } } char *bl_sequence_no = NULL, *c_sortno = NULL, *ZT2_Remark = NULL, *zt2_SapState = NULL; //ITKCALL(AOM_UIF_ask_value(c_line_tag, "bl_sequence_no", &bl_sequence_no)); //ITKCALL(AOM_UIF_ask_value(c_line_tag, "ZT2_ClassificationNo", &c_sortno)); ITKCALL(AOM_UIF_ask_value(c_line_tag, "ZT2_Remark", &ZT2_Remark)); ITKCALL(AOM_UIF_ask_value(rev2, "zt2_SapState", &zt2_SapState)); seq += 10; char seqs[16]; sprintf(seqs, "%d", seq); 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, "ICM0801", errMsg)); items_item.DATUV = now; items_item.POSTP = (char*)"L"; items_item.POSNR = seqs; items_item.MENGE = menge; items_item.SORTF = (char*)gxs[i].c_str(); if (!c_sortno || tc_strlen(c_sortno) == 0) { buff.append("BOM行缺少投料信息;"); } items_item.POTX1 = ZT2_Remark; items_items[c_line_count + i] = items_item; } } items.ITEM = items_items; items.__sizeITEM = c_line_count; _ns1__DT_USCOREBOM_USCORES4_USCOREREQ_LIST list1; list1.HEAD = head; log("list1.HEAD %s ", list1.HEAD.BMEIN); list1.ITEMS = items; list.push_back(list1); } //变压器部件传递SAP void SAPBYOperation(tag_t target, char* groupName, char* now, char* code, char* wbs, char* userName, char* projectName) { log("************** SAPBYOperation **************"); tag_t window = NULLTAG, bomline = NULLTAG; ITKCALL(BOM_create_window(&window)); ITKCALL(BOM_set_window_top_line(window, NULL, target, NULLTAG, &bomline)); string errMsgBuf = ""; int pref_cnt = 0; char **urls = NULL; ITKCALL(PREF_ask_char_values("CHINT_BomUrl_YB", &pref_cnt, &urls)); if (pref_cnt < 3) { errMsgBuf.append("CHINT_BomUrl_YB首选项配置不正确\\n"); // string updateSum = "update CHINT_BOM_TO_SAP_SUM set \"DATASTATUS\" = 'CHINT_BomUrl_YB首选项配置不正确' ,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; } pref_cnt = 0; char **pref = NULL; string codeRemark; vector matr; ITKCALL(PREF_ask_char_values("CHINT_ORG_TechnologyClassification", &pref_cnt, &pref)); for (int i = 0; i < pref_cnt; i++) { vector v1, v2; Split(pref[i], ":", v1); if (tc_strcmp(v1[0].c_str(), groupName) != 0) { continue; } Split(v1[1], ";", v2); if (v2.size() == 4) { codeRemark = v2[2]; Split(v2[2], "\\", matr); } else if (v2.size() > 2) { codeRemark = v2[2]; } } int icsId = getIcsId((char*)codeRemark.c_str(), "材料标记"); string errMsg = ""; tag_t partRev = getSAPPart(bomline, groupName, errMsg); map> mapList; vector <_ns1__DT_USCOREPROCESSROUTE_USCORES4_USCOREREQ_LIST> proclist; map gy_meops; //避免重复工艺路线 vector needTCM_meops;//没用上 //tag_t meops = getProcessTag(target, groupName); //if (meops != NULLTAG) { // readBopInfo1YH(meops, target, true, gy_meops, needTCM_meops, groupName, now, proclist); //} char **pref2 = NULL; vector kjBomIds; ITKCALL(PREF_ask_char_values("M005_WBSBOM", &pref_cnt, &pref2)); for (int i = 0; i < pref_cnt; i++) { vector v1; Split(pref2[i], "|", v1); kjBomIds.push_back(v1[0]); } string endFix = ""; char* item_id = NULL; ITKCALL(AOM_ask_value_string(target, "item_id", &item_id)); if (tc_strstr(item_id, "-") != NULL) { vector v1; Split(item_id, "-", v1); endFix.append(v1[1]); } tag_t topRev = getTopZzItem(target, endFix.c_str()), topItem = NULLTAG; ITKCALL(ITEM_ask_item_of_rev(topRev, &topItem)); char *projWbsNo = NULL; int n_referencers = 0; int* levels = NULL; tag_t* referencers = NULL, *project = NULL; char** relations = NULL; ITKCALL(WSOM_where_referenced2(topItem, 1, &n_referencers, &levels, &referencers, &relations)); for (int i = 0; i < n_referencers; i++) { char *type = NULL; ITKCALL(WSOM_ask_object_type2(referencers[i], &type)); if (tc_strcmp(type, "ZT2_ProjectFolder") == 0) { int n_referencers2 = 0; int* levels2 = NULL; tag_t* referencers2 = NULL; char** relations2 = NULL; ITKCALL(WSOM_where_referenced2(referencers[i], 1, &n_referencers2, &levels2, &referencers2, &relations2)); if (n_referencers2 > 0) { char *type2 = NULL; ITKCALL(WSOM_ask_object_type2(referencers2[0], &type2)); if (tc_strcmp(type2, "ZT2_ProjectFolder") == 0) { int n_referencers3 = 0; int* levels3 = NULL; char** relations3 = NULL; ITKCALL(WSOM_where_referenced2(referencers2[0], 1, &n_referencers3, &levels3, &project, &relations3)); if (n_referencers3 > 0) { char *type3 = NULL; ITKCALL(WSOM_ask_object_type2(project[0], &type3)); if (tc_strcmp(type3, "ZT2_ProjectItem") == 0) { ITKCALL(AOM_ask_value_string(project[0], "zt2_WBSNo", &projWbsNo)); } } } } break; } } log("projWbsNo:%s", projWbsNo); vector bomISExist; map by_materials; vector<_ns1__DT_USCOREBOM_USCORES4_USCOREREQ_LIST> list; map material_revs; //lidy20241126 BOM传递SAP时拼接辅料BOM map> flMap = getFlMap(topItem); recurBYBJSAP(bomline, target, partRev, groupName, gy_meops, needTCM_meops, now, proclist, bomISExist, matr, "ICM0802", by_materials, icsId, errMsg, kjBomIds, projWbsNo, list, material_revs, flMap); //log("errMsg =>%s", errMsg.c_str()); 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_BOMScheme = NULL; ITKCALL(AOM_UIF_ask_value(target, "zt2_BOMScheme", &zt2_BOMScheme)); if (list.size() > 0 && strcmp(zt2_BOMScheme, "汇总") == 0) { char* zt2_Quantity; ITKCALL(AOM_ask_value_string(target, "zt2_Quantity", &zt2_Quantity)); if (strstr(zt2_Quantity, "") != 0) { int quantity = atoi(zt2_Quantity); if (quantity == 0) { quantity = 1; } int size = list.size(); char* s = new char[10]; _itoa(quantity, s, 10); list[size - 1].HEAD.BMENG = s; //head.BMENG = (char*)to_string(quantity).c_str(); } } if (list.size() > 0) { //logBomMsg(list); mapList[target] = list; } if (proclist.size() > 0) { string sendMsg; logProcessMsg(proclist);// vector <_ns1__DT_USCOREPROCESSROUTE_USCORES4_USCOREREQ_LIST> proclist; sendProcess(proclist, sendMsg, urls[1]);//proclists.push_back(proclist);//sendProcess(proclist); } ITKCALL(BOM_close_window(window)); if (mapList.size() > 0) { //传递BOM //logBomMsg(list); //sendBom(list, sendMsg); vector ccpMaterialMap; char* revUid = NULL;// , *zt2_MaterialNo = NULL; //ITKCALL(AOM_ask_value_string(target, "zt2_MaterialNo", &zt2_MaterialNo)); //lidy20250304 int cnt = 0; tag_t *folder = NULL; ITKCALL(AOM_ask_value_tags(project[0], "IMAN_reference", &cnt, &folder)); for (int i = 0; i < cnt; i++) { char *name = NULL; ITKCALL(WSOM_ask_name2(folder[i], &name)); if (tc_strcmp(name, "项目启动") == 0) { int cnt2 = 0; tag_t *folder2 = NULL; ITKCALL(AOM_ask_value_tags(folder[i], "contents", &cnt2, &folder2)); for (int j = 0; j < cnt2; j++) { char *name2 = NULL; ITKCALL(WSOM_ask_name2(folder2[j], &name2)); if (tc_strcmp(name2, "产成品") == 0) { int count = 0; tag_t *ccp = NULL; ITKCALL(AOM_ask_value_tags(folder2[j], "contents", &count, &ccp)); for (int c = 0; c < count; c++) { tag_t ccpRev = NULL; ITKCALL(ITEM_ask_latest_rev(ccp[c], &ccpRev)); char *zt2_MaterialNo = NULL; ITKCALL(AOM_ask_value_string(ccpRev, "zt2_MaterialNo", &zt2_MaterialNo)); ccpMaterialMap.push_back(zt2_MaterialNo); } break; } } break; } } char* object_name = NULL; ITKCALL(AOM_ask_value_string(target, "object_name", &object_name)); string updateSum = "update CHINT_BOM_TO_SAP_SUM set wbsno = '"; updateSum.append(item_id).append("',projectno = '").append(object_name).append("' where code = '").append(code).append("'"); log("updateSum ===> %s", updateSum.c_str()); ExecuteSQLNoInputParam((char*)updateSum.c_str()); ExecuteSQLNoInputParam((char*)"commit"); ITK__convert_tag_to_uid(target, &revUid); map> inCcpMap;//记录单元对应的产成品物料编码 inCcpMap[revUid] = ccpMaterialMap; startSplitSend(groupName, mapList, code, wbs, inCcpMap, urls[2]); //sendBom(list); } else { string time1 = getPlmTime(code); string updateSum = "update CHINT_BOM_TO_SAP_SUM set datastatus = '没有合法BOM',organizationaltime = '%s',taskstauts = '组织完成',PLMFINISHTIME = SYSDATE where code = '%s' "; char selectRxfs[800]; string timel; sprintf(selectRxfs, updateSum.c_str(), time1.c_str(), code); log("selectRecord2 ===> %s\n", selectRxfs); ExecuteSQLNoInputParam(selectRxfs); ExecuteSQLNoInputParam((char*)"commit"); } }