|
|
|
|
|
#include "SendSap.h"
|
|
|
|
|
|
tag_t getZZDesign(tag_t part, char* groupName) {
|
|
|
int num = 0;
|
|
|
tag_t *comps = NULL;
|
|
|
ITKCALL(AOM_ask_value_tags(part, "ZT2_FactoryNumber", &num, &comps));
|
|
|
for (int i = 0; i < num; i++) {
|
|
|
char *type = NULL;
|
|
|
ITKCALL(WSOM_ask_object_type2(comps[i], &type));
|
|
|
if (tc_strcmp(type, "ZT2_FactoryNo") == 0 && tc_strcmp(groupName, "M040") != 0) {
|
|
|
int n_references = 0;
|
|
|
int* levels = 0;
|
|
|
tag_t* references_tag, processTag = NULLTAG;
|
|
|
char** relation_type_name = NULL;
|
|
|
ITKCALL(WSOM_where_referenced(comps[i], 1, &n_references, &levels, &references_tag, &relation_type_name));
|
|
|
for (int j = 0; j < n_references; j++) {
|
|
|
if (tc_strcmp(relation_type_name[j], "ZT2_FactoryNumber") != 0) {
|
|
|
continue;
|
|
|
}
|
|
|
char *type2 = NULL;
|
|
|
ITKCALL(WSOM_ask_object_type2(references_tag[j], &type2));
|
|
|
if (tc_strcmp(type2, "ZT2_Design3DRevision") != 0) {
|
|
|
continue;
|
|
|
}
|
|
|
tag_t item = NULLTAG, rev = NULLTAG;
|
|
|
ITKCALL(ITEM_ask_item_of_rev(references_tag[j], &item));
|
|
|
ITKCALL(ITEM_ask_latest_rev(item, &rev));
|
|
|
return rev;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
void recurBYZZSAP(tag_t line, tag_t zzRev, tag_t partRev, char* groupName, map<string, tag_t>& gy_meops,
|
|
|
vector<tag_t>& needTCM_meops, vector<string> bomIsExist, vector<tag_t> set_meops, char* transfer, char* fa,
|
|
|
vector<_ns1__DT_USCOREBOM_USCORES4_USCOREREQ_LIST>& list,
|
|
|
char* now, vector <_ns1__DT_USCOREPROCESSROUTE_USCORES4_USCOREREQ_LIST>& proclist, int level, string& errMsg) {
|
|
|
int line_count = 0;
|
|
|
tag_t *line_tags = NULL;
|
|
|
ITKCALL(BOM_line_ask_all_child_lines(line, &line_count, &line_tags));
|
|
|
tag_t meop = getProcessTag(zzRev, groupName);
|
|
|
if (meop != NULLTAG && !isTcm2(meop) && find(set_meops.begin(), set_meops.end(), meop) == set_meops.end()) {
|
|
|
set_meops.push_back(meop);
|
|
|
}
|
|
|
// 如果图纸下没有物料,则,判断此图纸版本上的属性zt2_Diagram属性
|
|
|
//如果此属性为是(LOV值,真实值为Y),则不传递此图纸,物料检查也不要报错,跳过此图纸以及子件
|
|
|
char *type = NULL;
|
|
|
ITKCALL(WSOM_ask_object_type2(zzRev, &type));
|
|
|
if (tc_strcmp(type, "ZT2_Design3DRevision") == 0 && partRev == NULLTAG) {
|
|
|
char *zt2_Diagram = NULL;
|
|
|
ITKCALL(AOM_ask_value_string(zzRev, "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(zzRev, "zt2_Source", &zt2_Source));
|
|
|
boolean equals = tc_strcmp(zt2_Source, "外购") == 0;
|
|
|
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 (partRev != NULLTAG) {
|
|
|
if (meop == NULLTAG) {
|
|
|
if (!equals && (tc_strcmp(transfer, "C") == 0 || tc_strcmp(transfer, "E") == 0 && c_line_count > 0)) {
|
|
|
//java中getMrProcess方法已注释只返回null,因此该逻辑已无实际意义
|
|
|
|
|
|
}
|
|
|
}
|
|
|
else {
|
|
|
if (level == 1) {
|
|
|
readBopInfo1YH(meop, zzRev, false, gy_meops, needTCM_meops, groupName, now, proclist);
|
|
|
}
|
|
|
else {
|
|
|
readBopInfo1YH(meop, zzRev, true, gy_meops, needTCM_meops, groupName, now, proclist);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
if (equals) {
|
|
|
if (partRev == NULLTAG)
|
|
|
return;
|
|
|
int bvr_count = 0;
|
|
|
tag_t *part_bvr = NULL;
|
|
|
ITKCALL(ITEM_rev_list_bom_view_revs(partRev, &bvr_count, &part_bvr));
|
|
|
if (bvr_count > 0) {
|
|
|
tag_t part_window = NULLTAG, part_line = NULLTAG;
|
|
|
ITKCALL(BOM_create_window(&part_window));
|
|
|
ITKCALL(BOM_set_window_top_line(part_window, NULL, partRev, NULLTAG, &part_line));
|
|
|
int part_line_count = 0;
|
|
|
tag_t *part_line_tags = NULL;
|
|
|
ITKCALL(BOM_line_ask_all_child_lines(part_line, &part_line_count, &part_line_tags));
|
|
|
recurBYZZSAP(part_line, zzRev, partRev, groupName, gy_meops, needTCM_meops, bomIsExist, set_meops, transfer, fa,
|
|
|
list, now, proclist, level, errMsg);
|
|
|
ITKCALL(BOM_close_window(part_window));
|
|
|
}
|
|
|
return;
|
|
|
}
|
|
|
if (partRev != NULLTAG) {
|
|
|
char *zt2_MaterialNo = NULL;
|
|
|
ITKCALL(AOM_ask_value_string(partRev, "zt2_MaterialNo", &zt2_MaterialNo));
|
|
|
if (vecContains(bomIsExist, zt2_MaterialNo)) {
|
|
|
log("%s已存在,过滤\n", zt2_MaterialNo);
|
|
|
return;
|
|
|
}
|
|
|
bomIsExist.push_back(zt2_MaterialNo);
|
|
|
}
|
|
|
if (c_line_count == 0) {
|
|
|
return;
|
|
|
}
|
|
|
char *os = NULL;
|
|
|
ITKCALL(AOM_ask_value_string(partRev, "object_string", &os));
|
|
|
_ns1__DT_USCOREBOM_USCORES4_USCOREREQ_LIST_HEAD head;
|
|
|
if (partRev != NULLTAG) {
|
|
|
char *zt2_MaterialNo = NULL, *zt2_WBSNo = NULL, *zt2_unit = NULL;
|
|
|
ITKCALL(AOM_ask_value_string(partRev, "zt2_MaterialNo", &zt2_MaterialNo));
|
|
|
ITKCALL(AOM_ask_value_string(partRev, "zt2_WBSNo", &zt2_WBSNo));
|
|
|
tag_t item;
|
|
|
ITKCALL(ITEM_ask_item_of_rev(partRev, &item));
|
|
|
ITKCALL(AOM_ask_value_string(item, "zt2_unit", &zt2_unit));
|
|
|
char* unit = getUnti(zt2_unit);
|
|
|
log("str = [%s] \n", unit);
|
|
|
head.PSPNR = zt2_WBSNo;
|
|
|
head.MATNR = zt2_MaterialNo;
|
|
|
head.BMEIN = unit;
|
|
|
char* parnetUid;
|
|
|
ITK__convert_tag_to_uid(partRev, &parnetUid);
|
|
|
head.STKTX = parnetUid;
|
|
|
}
|
|
|
head.STLAN = (char*)"1";
|
|
|
head.STLAL = (char*)"1";
|
|
|
head.BMENG = (char*)"1";
|
|
|
head.WERKS = groupName;
|
|
|
head.DATUV = now;
|
|
|
_ns1__DT_USCOREBOM_USCORES4_USCOREREQ_LIST_ITEMS_ITEM* items_items =
|
|
|
new _ns1__DT_USCOREBOM_USCORES4_USCOREREQ_LIST_ITEMS_ITEM[c_line_count];
|
|
|
_ns1__DT_USCOREBOM_USCORES4_USCOREREQ_LIST_ITEMS items;
|
|
|
for (int i = 0; i < c_line_count; i++) {
|
|
|
string buff;
|
|
|
_ns1__DT_USCOREBOM_USCORES4_USCOREREQ_LIST_ITEMS_ITEM items_item;
|
|
|
tag_t c_line_tag = c_line_tags[i], rev2;
|
|
|
ITKCALL(AOM_ask_value_tag(c_line_tag, "bl_line_object", &rev2));
|
|
|
tag_t partRev2 = getBOMPart(rev2, groupName);
|
|
|
int c_line_count2 = 0;
|
|
|
tag_t *c_line_tags2 = NULL;
|
|
|
ITKCALL(BOM_line_ask_all_child_lines(c_line_tag, &c_line_count2, &c_line_tags2));
|
|
|
|
|
|
boolean isContinue = true;
|
|
|
char *type2 = 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) {
|
|
|
continue;
|
|
|
}
|
|
|
}
|
|
|
int pcnt = 0;
|
|
|
tag_t *ps = NULL;
|
|
|
ITKCALL(AOM_ask_value_tags(rev2, "representation_for", &pcnt, &ps));
|
|
|
if (tc_strcmp(fa, "B") == 0) {
|
|
|
if (c_line_count2 == 0 && pcnt > 1) {
|
|
|
isContinue = false;
|
|
|
}
|
|
|
}
|
|
|
else if (c_line_count2 == 0 && pcnt >= 1) {
|
|
|
isContinue = false;
|
|
|
}
|
|
|
}
|
|
|
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, *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", &sortno));
|
|
|
ITKCALL(AOM_UIF_ask_value(c_line_tag, "ZT2_Remark", &ZT2_Remark));
|
|
|
ITKCALL(AOM_UIF_ask_value(rev2, "zt2_SapState", &zt2_SapState));
|
|
|
|
|
|
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 = bl_sequence_no;
|
|
|
items_item.MENGE = menge;
|
|
|
items_item.SORTF = sortno;
|
|
|
if (!sortno || tc_strlen(sortno) == 0) {
|
|
|
buff.append("BOM行缺少投料信息;");
|
|
|
}
|
|
|
items_item.POTX1 = ZT2_Remark;
|
|
|
|
|
|
items_items[i] = items_item;
|
|
|
char* os2 = NULL;
|
|
|
ITKCALL(AOM_ask_value_string(rev2, "object_string", &os2));
|
|
|
string msg;
|
|
|
msg.append(os2).append("(父项:").append(os).append("):").append(buff);
|
|
|
log("buff ===== %s\n", buff.c_str());
|
|
|
if (buff.length() > 0 && strstr(errMsg.c_str(), msg.c_str()) == NULL) {
|
|
|
errMsg.append("\n").append(msg);
|
|
|
}
|
|
|
if (tc_strcmp(zt2_SapState, "已传") == 0 && isContinue) {
|
|
|
continue;
|
|
|
}
|
|
|
recurBYZZSAP(c_line_tag, rev2, partRev2, groupName, gy_meops, needTCM_meops, bomIsExist, set_meops, transfer, fa,
|
|
|
list, now, proclist, level, errMsg);
|
|
|
}
|
|
|
items.ITEM = items_items;
|
|
|
items.__sizeITEM = c_line_count;
|
|
|
_ns1__DT_USCOREBOM_USCORES4_USCOREREQ_LIST list1;
|
|
|
list1.HEAD = head;
|
|
|
log("list1.HEAD %s\n ", list1.HEAD.BMEIN);
|
|
|
list1.ITEMS = items;
|
|
|
list.push_back(list1);
|
|
|
}
|
|
|
|
|
|
char* getZYCCPSortNo(tag_t comp) {
|
|
|
int ref_cnt = 0;
|
|
|
tag_t *refs = NULLTAG;
|
|
|
ITKCALL(AOM_ask_value_tags(comp, "IMAN_reference", &ref_cnt, &refs));
|
|
|
for (int i = 0; i < ref_cnt; i++) {
|
|
|
char *type = NULL;
|
|
|
ITKCALL(WSOM_ask_object_type2(refs[i], &type));
|
|
|
if (tc_strcmp(type, "MEOPRevision") == 0) {
|
|
|
char *zt2_ClassificationCode = NULL;
|
|
|
ITKCALL(AOM_UIF_ask_value(refs[i], "zt2_ClassificationCode", &zt2_ClassificationCode));
|
|
|
return zt2_ClassificationCode;
|
|
|
}
|
|
|
}
|
|
|
/*
|
|
|
* 没有时根据ZT2_Design3Drevision的zt2_DrawingNo属性(去掉后面的“-XXX”)查找对象,
|
|
|
* 获取对象的引用中MEOPRevision类型对象,获取属性zt2_ClassificationCode
|
|
|
*/
|
|
|
char *type = NULL;
|
|
|
ITKCALL(WSOM_ask_object_type2(comp, &type));
|
|
|
if (tc_strcmp(type, "ZT2_Design3Drevision") == 0) {
|
|
|
char *drawingNo = NULL;
|
|
|
ITKCALL(AOM_ask_value_string(comp, "zt2_DrawingNo", &drawingNo));
|
|
|
if (!drawingNo || tc_strlen(drawingNo) == 0) {
|
|
|
return "";
|
|
|
}
|
|
|
tag_t query_tag = NULLTAG;
|
|
|
ITKCALL(QRY_find2("chint_query_TYDH", &query_tag));
|
|
|
if (query_tag == NULL) {
|
|
|
return NULLTAG;
|
|
|
}
|
|
|
char **qkey = NULL, **qvalue = NULL;// (char*)qs.c_str();
|
|
|
int num_found = 0;
|
|
|
tag_t *qresult = NULL;
|
|
|
qkey = (char **)MEM_alloc(1 * sizeof(char*));
|
|
|
qvalue = (char **)MEM_alloc(1 * sizeof(char*));
|
|
|
qkey[0] = (char *)MEM_alloc((tc_strlen("DrawingNo") + 1)*sizeof(char));
|
|
|
tc_strcpy(qkey[0], "DrawingNo");
|
|
|
vector<string> v1;
|
|
|
Split(drawingNo, "-", v1);
|
|
|
if (v1.size() > 1) {
|
|
|
//int size = tc_strlen(drawingNo) - tc_strlen(v1[v1.size() - 1].c_str() - 1);
|
|
|
//fields["DrawingNo"] = v1[0];
|
|
|
qvalue[0] = (char *)MEM_alloc((tc_strlen(v1[0].c_str()) + 1)*sizeof(char));
|
|
|
tc_strcpy(qvalue[0], v1[0].c_str());
|
|
|
}
|
|
|
else {
|
|
|
//fields["DrawingNo"] = drawingNo;
|
|
|
qvalue[0] = (char *)MEM_alloc((tc_strlen(drawingNo) + 1)*sizeof(char));
|
|
|
tc_strcpy(qvalue[0], drawingNo);
|
|
|
}
|
|
|
ITKCALL(QRY_execute(query_tag, 1, qkey, qvalue, &num_found, &qresult));
|
|
|
if (num_found == 1) {
|
|
|
int ref_cnt = 0;
|
|
|
tag_t *refs = NULL;
|
|
|
ITKCALL(AOM_ask_value_tags(qresult[0], "IMAN_reference", &ref_cnt, &refs));
|
|
|
for (int i = 0; i < ref_cnt; i++) {
|
|
|
char *type = NULL;
|
|
|
ITKCALL(WSOM_ask_object_type2(refs[i], &type));
|
|
|
if (tc_strcmp(type, "MEOPRevision") == 0) {
|
|
|
char *zt2_ClassificationCode = NULL;
|
|
|
ITKCALL(AOM_UIF_ask_value(refs[i], "zt2_ClassificationCode", &zt2_ClassificationCode));
|
|
|
return zt2_ClassificationCode;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
return "";
|
|
|
}
|
|
|
|
|
|
void SAPZZNewOp(vector<tag_t> ccpVector, char* projectNo, char* groupName, char* wbs,
|
|
|
char* now, string& errMsgBuf, char*code, char* transfer, char* userName, char* type) {
|
|
|
|
|
|
log("************** SAPZZNewOp **************");
|
|
|
map<tag_t, vector<_ns1__DT_USCOREBOM_USCORES4_USCOREREQ_LIST>> mapList;
|
|
|
string sendMsg;
|
|
|
map<string, vector<string>> inCcpMap;//记录单元对应的产成品物料编码
|
|
|
for (int len = 0; len < ccpVector.size(); len++) {
|
|
|
char* revUid;
|
|
|
tag_t rev = ccpVector[len];
|
|
|
ITK__convert_tag_to_uid(rev, &revUid);
|
|
|
log("产成品UID:%s\n", revUid);
|
|
|
tag_t partRev = getSAPPart(ccpVector[len], groupName);
|
|
|
char *ccpMaterialNo = NULL;
|
|
|
ITKCALL(AOM_ask_value_string(partRev, "zt2_MaterialNo", &ccpMaterialNo));
|
|
|
char *os = NULL;
|
|
|
ITKCALL(AOM_UIF_ask_value(partRev, "object_string", &os));
|
|
|
tag_t zzRev = getZZDesign(partRev, groupName);
|
|
|
if (zzRev == NULLTAG && tc_strcmp(type, "E") != 0) {
|
|
|
errMsgBuf.append("总装图 ").append(os).append(" 未关联出厂编号!!变压器跳过、互感电容走中压;");
|
|
|
return;
|
|
|
}
|
|
|
if (tc_strcmp(type, "E") == 0) {
|
|
|
zzRev = getZYDesign(partRev);
|
|
|
}
|
|
|
if (zzRev == NULLTAG) {
|
|
|
return;
|
|
|
}
|
|
|
tag_t window = NULLTAG, line = NULLTAG;
|
|
|
ITKCALL(BOM_create_window(&window));
|
|
|
ITKCALL(BOM_set_window_top_line(window, NULL, zzRev, NULLTAG, &line));
|
|
|
vector <_ns1__DT_USCOREBOM_USCORES4_USCOREREQ_LIST> list;
|
|
|
vector <_ns1__DT_USCOREPROCESSROUTE_USCORES4_USCOREREQ_LIST> proclist;
|
|
|
map<string, tag_t> gy_meops; //避免重复工艺路线
|
|
|
vector<tag_t> needTCM_meops;//没用上
|
|
|
vector<string> bomIsExist;
|
|
|
map<string, tag_t> by_materials;
|
|
|
vector<tag_t> set_meops;
|
|
|
string errMsg = "";
|
|
|
if (inCcpMap.count(revUid) > 0) {
|
|
|
//log("folderName = {} \n", zt2_MaterialNo);
|
|
|
inCcpMap[revUid].push_back(ccpMaterialNo);
|
|
|
continue;
|
|
|
}
|
|
|
vector<string> ccpMaterialMap;
|
|
|
ccpMaterialMap.push_back(ccpMaterialNo);
|
|
|
inCcpMap[revUid] = ccpMaterialMap;
|
|
|
|
|
|
recurBYZZSAP(line, zzRev, partRev, groupName, gy_meops, needTCM_meops, bomIsExist, set_meops, transfer, type,
|
|
|
list, now, proclist, 1, errMsg);
|
|
|
//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 (list.size() > 0) {
|
|
|
//logBomMsg(list);
|
|
|
mapList[partRev] = list;
|
|
|
}
|
|
|
if (proclist.size() > 0) {
|
|
|
logProcessMsg(proclist);// vector <_ns1__DT_USCOREPROCESSROUTE_USCORES4_USCOREREQ_LIST> proclist;
|
|
|
sendProcess(proclist, sendMsg);//proclists.push_back(proclist);//sendProcess(proclist);
|
|
|
}
|
|
|
ITKCALL(BOM_close_window(window));
|
|
|
}
|
|
|
if (mapList.size() > 0) {
|
|
|
//传递BOM
|
|
|
//logBomMsg(list);
|
|
|
//sendBom(list, sendMsg);
|
|
|
startSplitSend(groupName, mapList, code, wbs, inCcpMap);
|
|
|
//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");
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 壳体方案传递SAP
|
|
|
* @param ccpVector 产成品的集合
|
|
|
* @param projectNo 项目编号
|
|
|
* @param groupName 用户所在的组
|
|
|
* @param wbs 项目的WBS号
|
|
|
* @param now 当前时间
|
|
|
* @param errMsgBuf 错误信息
|
|
|
* @param code 传递的编号code
|
|
|
* @param transfer 传递类型 电气设计
|
|
|
* @param userName 用户名称
|
|
|
* @param projectName 项目名称
|
|
|
*/
|
|
|
void getKTBom(vector<tag_t> ccpVector, char* projectNo, char* groupName, char* wbs,
|
|
|
char* now, string& errMsgBuf, char*code, char* transfer, char* userName, char* projectName) {
|
|
|
log("************** getKTBom **************");
|
|
|
//记录是否有重复的出厂编号
|
|
|
vector<tag_t> isCheck_FactoryNos;
|
|
|
//记录产成品 对应的 电气BOM集合
|
|
|
map<tag_t, vector<tag_t>> cPart_schemes;
|
|
|
vector<_ns1__DT_USCOREFACTORY_USCORENUMBER_USCOREREQ_ITEMS_ITEM> list_Factorys;
|
|
|
map<tag_t, vector<_ns1__DT_USCOREBOM_USCORES4_USCOREREQ_LIST>> mapList;
|
|
|
map<string, vector<string>> inCcpMap;//记录单元对应的产成品物料编码
|
|
|
boolean isCheckProduct = tc_strcmp(groupName, "M035") == 0;
|
|
|
string sendMsg = "";
|
|
|
for (int len = 0; len < ccpVector.size(); len++) {
|
|
|
tag_t cPart = ccpVector[len], *factoryNos;
|
|
|
char* ccpUid;
|
|
|
ITK__convert_tag_to_uid(cPart, &ccpUid);
|
|
|
log("产成品UID:%s\n", ccpUid);
|
|
|
ITKCALL(AOM_refresh(cPart, FALSE));
|
|
|
int num = 0;
|
|
|
ITKCALL(AOM_ask_value_tags(cPart, "ZT2_FactoryNumber", &num, &factoryNos));
|
|
|
if (num > 0 && cPart_schemes.count(cPart) == 0) {
|
|
|
getFactoryNoList(projectNo, groupName, wbs, factoryNos, num, cPart, list_Factorys);
|
|
|
map<tag_t, vector<tag_t>> items2;
|
|
|
for (int i = 0; i < num; i++) {
|
|
|
tag_t factoryNo = factoryNos[i];
|
|
|
if (std::find(isCheck_FactoryNos.begin(), isCheck_FactoryNos.end(), factoryNo) != isCheck_FactoryNos.end())
|
|
|
continue;
|
|
|
isCheck_FactoryNos.push_back(factoryNos[i]);
|
|
|
|
|
|
int n_references = 0;
|
|
|
int* levels = 0;
|
|
|
tag_t* references_tag;
|
|
|
char** relation_type_name = NULL;
|
|
|
//通过引用关系查找到变更单
|
|
|
ITKCALL(WSOM_where_referenced(factoryNo, 1, &n_references, &levels, &references_tag, &relation_type_name));
|
|
|
tag_t ccpItem;
|
|
|
char* ccpItemUid;
|
|
|
ITEM_ask_item_of_rev(cPart, &ccpItem);
|
|
|
ITK__convert_tag_to_uid(ccpItem, &ccpItemUid);
|
|
|
for (int j = 0; j < n_references; j++) {
|
|
|
char* refType, *grpName, *useUid, *object_name, *zt2_SapState;
|
|
|
tag_t refTag = references_tag[i], group, item;
|
|
|
ITKCALL(AOM_ask_value_string(refTag, "object_type", &refType));
|
|
|
if (strcmp(refType, "Part Revision") != 0) {
|
|
|
continue;
|
|
|
}
|
|
|
ITK__convert_tag_to_uid(refTag, &useUid);
|
|
|
//判断不是产成品 并且同一组
|
|
|
ITKCALL(AOM_ask_value_tag(refTag, "owning_group", &group));
|
|
|
ITKCALL(AOM_ask_value_string(group, "name", &grpName));
|
|
|
if (strcmp(grpName, groupName) != 0 || strcmp(ccpUid, useUid) == 0)
|
|
|
continue;
|
|
|
ITKCALL(AOM_UIF_ask_value(refTag, "object_name", &object_name));
|
|
|
ITKCALL(AOM_UIF_ask_value(refTag, "zt2_SapState", &zt2_SapState));
|
|
|
if (strcmp(zt2_SapState, "1") == 0 || strcmp(zt2_SapState, "未传") == 0) {
|
|
|
continue;
|
|
|
}
|
|
|
ITKCALL(ITEM_ask_item_of_rev(refTag, &item));
|
|
|
char* unitUid;
|
|
|
ITK__convert_tag_to_uid(item, &unitUid);
|
|
|
if (strcmp(unitUid, ccpItemUid) == 0) {
|
|
|
continue;
|
|
|
}
|
|
|
log("useUid %s object_name %s \n", useUid, object_name);
|
|
|
if (items2.count(item) > 0) {
|
|
|
items2[item].push_back(refTag);
|
|
|
}
|
|
|
else {
|
|
|
vector<tag_t> revs2;
|
|
|
revs2.push_back(refTag);
|
|
|
items2[item] = revs2;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
vector<tag_t> rev2 = addLastRev(items2);
|
|
|
cPart_schemes[cPart] = rev2;
|
|
|
}
|
|
|
if (isCheckProduct) {
|
|
|
|
|
|
}
|
|
|
//}
|
|
|
//传递出厂编号的记录日志信息
|
|
|
log("出厂编号数量 num :%zd\n", list_Factorys.size());
|
|
|
logCcbh(list_Factorys);
|
|
|
sendFactoryNo(list_Factorys);
|
|
|
|
|
|
vector <_ns1__DT_USCOREBOM_USCORES4_USCOREREQ_LIST> list;
|
|
|
vector <_ns1__DT_USCOREPROCESSROUTE_USCORES4_USCOREREQ_LIST> proclist;
|
|
|
map<string, tag_t> gy_meops; //避免重复工艺路线
|
|
|
vector<tag_t> needTCM_meops;//没用上
|
|
|
//for (int len = 0; len < ccpVector.size(); len++) {
|
|
|
//list.clear();
|
|
|
//proclist.clear();
|
|
|
//tag_t cPart = ccpVector[len];
|
|
|
vector<tag_t> revs = cPart_schemes[cPart];
|
|
|
// 有关联
|
|
|
if (cPart_schemes.count(cPart) != 0 && revs.size() > 0) {
|
|
|
char *zt2_MaterialNo = NULL, *zt2_WBSNo = NULL, *zt2_unit2 = NULL;
|
|
|
ITKCALL(AOM_UIF_ask_value(cPart, "zt2_MaterialNo", &zt2_MaterialNo));
|
|
|
ITKCALL(AOM_UIF_ask_value(cPart, "zt2_WBSNo", &zt2_WBSNo));
|
|
|
tag_t item2 = NULLTAG;
|
|
|
ITKCALL(ITEM_ask_item_of_rev(cPart, &item2));
|
|
|
ITKCALL(AOM_ask_value_string(item2, "zt2_unit", &zt2_unit2));
|
|
|
char* unit = getUnti(zt2_unit2);
|
|
|
tag_t meops = getProcessTag(cPart, groupName);
|
|
|
if (meops == NULLTAG) {
|
|
|
vector<string> v1;
|
|
|
Split(zt2_MaterialNo, "-", v1);
|
|
|
tag_t query_tag = NULLTAG;
|
|
|
ITKCALL(QRY_find2("chint_query_item", &query_tag));
|
|
|
char **qkey = NULL, **qvalue = NULL, *qprop = (char*)v1[0].c_str();
|
|
|
int num_found = 0;
|
|
|
tag_t *qresult = NULL;
|
|
|
qkey = (char **)MEM_alloc(1 * sizeof(char*));
|
|
|
qvalue = (char **)MEM_alloc(1 * sizeof(char*));
|
|
|
qkey[0] = (char *)MEM_alloc((tc_strlen("ID") + 1)*sizeof(char));
|
|
|
qvalue[0] = (char *)MEM_alloc((tc_strlen(qprop) + 1)*sizeof(char));
|
|
|
tc_strcpy(qkey[0], "ID");
|
|
|
tc_strcpy(qvalue[0], qprop);
|
|
|
ITKCALL(QRY_execute(query_tag, 1, qkey, qvalue, &num_found, &qresult));
|
|
|
log("chint_query_item ID:%s==>%d", qprop, num_found);
|
|
|
if (num_found > 0) {
|
|
|
tag_t found_rev = NULLTAG;
|
|
|
ITKCALL(ITEM_ask_latest_rev(qresult[0], &found_rev));
|
|
|
meops = getProcessTag(found_rev, groupName);
|
|
|
}
|
|
|
}
|
|
|
if (meops != NULLTAG) {
|
|
|
readBopInfo1YH(meops, cPart, true, gy_meops, needTCM_meops, groupName, now, proclist);
|
|
|
}
|
|
|
int c_line_count = 0;
|
|
|
tag_t *c_line_tags = NULL, ebom_window = NULLTAG, line = NULLTAG;
|
|
|
ITKCALL(BOM_create_window(&ebom_window));
|
|
|
ITKCALL(BOM_set_window_top_line(ebom_window, NULL, meops, NULLTAG, &line));
|
|
|
ITKCALL(BOM_line_ask_all_child_lines(line, &c_line_count, &c_line_tags));
|
|
|
char *ktSortno = NULL;
|
|
|
if (c_line_count > 0) {
|
|
|
tag_t rev = NULLTAG;
|
|
|
ITKCALL(AOM_ask_value_tag(c_line_tags[0], "bl_revision", &rev));
|
|
|
ITKCALL(AOM_UIF_ask_value(rev, "zt2_ClassificationCode", &ktSortno));
|
|
|
}
|
|
|
ITKCALL(BOM_close_window(ebom_window));
|
|
|
_ns1__DT_USCOREBOM_USCORES4_USCOREREQ_LIST_HEAD head;
|
|
|
log("str = [%s] \n", unit);
|
|
|
head.PSPNR = zt2_WBSNo;
|
|
|
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(cPart, &parnetUid);
|
|
|
head.STKTX = parnetUid;
|
|
|
char *type = NULL, *zt2_BOMScheme = NULL;
|
|
|
ITKCALL(WSOM_ask_object_type2(cPart, &type));
|
|
|
ITKCALL(AOM_UIF_ask_value(cPart, "zt2_BOMScheme", &zt2_BOMScheme));
|
|
|
if (strcmp(type, "Part Revision") == 0 && strcmp(zt2_BOMScheme, "汇总") == 0) {
|
|
|
char *zt2_Quantity = NULL;
|
|
|
ITKCALL(AOM_UIF_ask_value(cPart, "zt2_Quantity", &zt2_Quantity));
|
|
|
string bmeng = zt2_Quantity;
|
|
|
if (tc_strcmp(groupName, "M041") != 0) {
|
|
|
if (!zt2_Quantity || tc_strlen(zt2_Quantity) == 0 || strcmp(zt2_Quantity, "0") == 0) {
|
|
|
bmeng = "1";
|
|
|
}
|
|
|
}
|
|
|
head.BMENG = (char*)bmeng.c_str();
|
|
|
}
|
|
|
_ns1__DT_USCOREBOM_USCORES4_USCOREREQ_LIST_ITEMS_ITEM* items_items =
|
|
|
new _ns1__DT_USCOREBOM_USCORES4_USCOREREQ_LIST_ITEMS_ITEM[revs.size()];
|
|
|
_ns1__DT_USCOREBOM_USCORES4_USCOREREQ_LIST_ITEMS items;
|
|
|
for (int i = 0; i < revs.size(); i++) {
|
|
|
tag_t schem = revs[i];
|
|
|
_ns1__DT_USCOREBOM_USCORES4_USCOREREQ_LIST_ITEMS_ITEM items_item;
|
|
|
tag_t item22 = NULLTAG;
|
|
|
char *zt2_unit22 = NULL, *zt2_MaterialNo2 = NULL, *object_name = NULL;
|
|
|
ITKCALL(ITEM_ask_item_of_rev(schem, &item22));
|
|
|
ITKCALL(AOM_ask_value_string(item22, "zt2_unit", &zt2_unit22));
|
|
|
ITKCALL(AOM_UIF_ask_value(schem, "zt2_MaterialNo", &zt2_MaterialNo2));
|
|
|
ITKCALL(AOM_UIF_ask_value(schem, "object_name", &object_name));
|
|
|
char* unit22 = getUnti(zt2_unit22);
|
|
|
items_item.MEINS = unit22;
|
|
|
items_item.DATUV = now;
|
|
|
items_item.POSTP = (char*)"L";
|
|
|
char posnr[5] = "";
|
|
|
sprintf(posnr, "%04d", (i + 1) * 10);
|
|
|
items_item.POSNR = posnr;
|
|
|
items_item.IDNRK = zt2_MaterialNo2;
|
|
|
items_item.MENGE = "1";
|
|
|
if (tc_strstr(object_name, "壳体") != NULL) {
|
|
|
items_item.SORTF = ktSortno;
|
|
|
}
|
|
|
else if (tc_strstr(object_name, "二次规范书") != NULL) {
|
|
|
tag_t meops2 = getProcessTag(schem, groupName);
|
|
|
if (meops2 != NULLTAG) {
|
|
|
int c_line_count2 = 0;
|
|
|
tag_t *c_line_tags2 = NULL, ebom_window2 = NULLTAG, line2 = NULLTAG;
|
|
|
ITKCALL(BOM_create_window(&ebom_window2));
|
|
|
ITKCALL(BOM_set_window_top_line(ebom_window2, NULL, meops2, NULLTAG, &line2));
|
|
|
ITKCALL(BOM_line_ask_all_child_lines(line2, &c_line_count2, &c_line_tags2));
|
|
|
char *ktSortno2 = NULL;
|
|
|
if (c_line_count2 > 0) {
|
|
|
tag_t rev = NULLTAG;
|
|
|
ITKCALL(AOM_ask_value_tag(c_line_tags2[0], "bl_revision", &rev));
|
|
|
ITKCALL(AOM_UIF_ask_value(rev, "zt2_ClassificationCode", &ktSortno2));
|
|
|
items_item.SORTF = ktSortno2;
|
|
|
}
|
|
|
else {
|
|
|
items_item.SORTF = "";
|
|
|
}
|
|
|
ITKCALL(BOM_close_window(ebom_window2));
|
|
|
}
|
|
|
else {
|
|
|
items_item.SORTF = "";
|
|
|
}
|
|
|
}
|
|
|
else {
|
|
|
items_item.SORTF = getZYCCPSortNo(schem);
|
|
|
}
|
|
|
items_item.POTX1 = "";
|
|
|
items_items[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\n ", list1.HEAD.BMEIN);
|
|
|
list1.ITEMS = items;
|
|
|
list.push_back(list1);
|
|
|
|
|
|
if (list.size() > 0) {
|
|
|
//logBomMsg(list);
|
|
|
mapList[cPart] = list;
|
|
|
}
|
|
|
if (proclist.size() > 0) {
|
|
|
logProcessMsg(proclist);// vector <_ns1__DT_USCOREPROCESSROUTE_USCORES4_USCOREREQ_LIST> proclist;
|
|
|
sendProcess(proclist, sendMsg);//proclists.push_back(proclist);//sendProcess(proclist);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
if (mapList.size() > 0) {
|
|
|
//传递BOM
|
|
|
//logBomMsg(list);
|
|
|
//sendBom(list, sendMsg);
|
|
|
startSplitSend(groupName, mapList, code, wbs, inCcpMap);
|
|
|
//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");
|
|
|
}
|
|
|
} |