|
|
|
|
|
#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<string> 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<tag_t> 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<string, tag_t> map_revs;
|
|
|
vector<char*> 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<string> 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<string, tag_t>& gy_meops, vector<tag_t>& needTCM_meops, char* now,
|
|
|
vector <_ns1__DT_USCOREPROCESSROUTE_USCORES4_USCOREREQ_LIST>& proclist, vector<string>& bomISExist, vector<string> matr,
|
|
|
char* codeRemark, map<string, tag_t>& by_materials, int icsId, string& errMsg, vector<string> kjBomIds,
|
|
|
char* projWbsNo, vector<_ns1__DT_USCOREBOM_USCORES4_USCOREREQ_LIST>& list, map<string, tag_t>& material_revs,
|
|
|
map<string, vector<char**>> 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<string> 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<string, string> 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<string> 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<string> 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<tag_t> fls;
|
|
|
vector<string> 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<string> matr;
|
|
|
ITKCALL(PREF_ask_char_values("CHINT_ORG_TechnologyClassification", &pref_cnt, &pref));
|
|
|
for (int i = 0; i < pref_cnt; i++) {
|
|
|
vector<string> 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<tag_t, vector<_ns1__DT_USCOREBOM_USCORES4_USCOREREQ_LIST>> mapList;
|
|
|
vector <_ns1__DT_USCOREPROCESSROUTE_USCORES4_USCOREREQ_LIST> proclist;
|
|
|
map<string, tag_t> gy_meops; //避免重复工艺路线
|
|
|
vector<tag_t> 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<string> kjBomIds;
|
|
|
ITKCALL(PREF_ask_char_values("M005_WBSBOM", &pref_cnt, &pref2));
|
|
|
for (int i = 0; i < pref_cnt; i++) {
|
|
|
vector<string> 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<string> 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<string> bomISExist;
|
|
|
map<string, tag_t> by_materials;
|
|
|
vector<_ns1__DT_USCOREBOM_USCORES4_USCOREREQ_LIST> list;
|
|
|
map<string, tag_t> material_revs;
|
|
|
|
|
|
//lidy20241126 BOM传递SAP时拼接辅料BOM
|
|
|
map<string, vector<char**>> 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<string> 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<string, vector<string>> 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");
|
|
|
}
|
|
|
} |