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.

769 lines
28 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"
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");
}
}