|
|
|
|
|
#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;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
return NULLTAG;
|
|
|
}
|
|
|
// 根据材料利用率获取组件用量
|
|
|
char* getMENGE(double dw, tag_t material, char* codeMark) {
|
|
|
//double dw = stod(zt2_zt2_DesignWeight);
|
|
|
double lyl = -1, res = 0;
|
|
|
string lylStr = getICSProperty(material, codeMark, "材料利用率");
|
|
|
if (lylStr.size() > 0) {
|
|
|
lyl = stod(lylStr);
|
|
|
}
|
|
|
if (lyl > 0) {
|
|
|
res = dw / lyl;
|
|
|
}
|
|
|
char buffer[16];
|
|
|
sprintf(buffer, "%.3f", res);
|
|
|
log("MENGE1:%f==%s", res, buffer);
|
|
|
return buffer;
|
|
|
}
|
|
|
|
|
|
char* getSAPMENGE(tag_t design, tag_t part, tag_t line, boolean isBottom, char* codeMark, string& errMsg) {
|
|
|
//log("getZYSAPMENGE");
|
|
|
char *os = NULL;
|
|
|
ITKCALL(AOM_UIF_ask_value(line, "object_string", &os));
|
|
|
if (isBottom) {
|
|
|
char* ZT2_TYSpecifications = NULL, *ZT2_TYWeight = NULL;
|
|
|
ITKCALL(AOM_UIF_ask_value(line, "ZT2_TYSpecifications", &ZT2_TYSpecifications));
|
|
|
if (ZT2_TYSpecifications && tc_strlen(ZT2_TYSpecifications) > 0) {
|
|
|
ITKCALL(AOM_UIF_ask_value(line, "ZT2_TYWeight", &ZT2_TYWeight));
|
|
|
if (!ZT2_TYWeight || tc_strlen(ZT2_TYWeight) == 0) {
|
|
|
//log("getZYSAPMENGE1");
|
|
|
errMsg.append(os).append("未填写通用件重量;");
|
|
|
return "0";
|
|
|
}
|
|
|
else {
|
|
|
//log("getZYSAPMENGE2");
|
|
|
return getMENGE(stod(ZT2_TYWeight), part, codeMark);
|
|
|
}
|
|
|
}
|
|
|
else {// 非通用件
|
|
|
double zt2_DesignWeight = 0;
|
|
|
ITKCALL(AOM_ask_value_double(design, "zt2_DesignWeight", &zt2_DesignWeight));
|
|
|
char* ss = getMENGE(zt2_DesignWeight, part, codeMark);
|
|
|
if (tc_strlen(ss) == 0) {
|
|
|
//log("getZYSAPMENGE3");
|
|
|
errMsg.append(os).append("未填写重量(zt2_DesignWeight);");
|
|
|
return "0";
|
|
|
}
|
|
|
//log("getZYSAPMENGE4");
|
|
|
return ss;
|
|
|
}
|
|
|
}
|
|
|
else {
|
|
|
char* bl_quantity = NULL;
|
|
|
ITKCALL(AOM_UIF_ask_value(line, "bl_quantity", &bl_quantity));
|
|
|
if (!bl_quantity || tc_strlen(bl_quantity) == 0) {
|
|
|
//log("getZYSAPMENGE5");
|
|
|
errMsg.append(os).append("数量未填写(bl_quantity)");
|
|
|
return "0";
|
|
|
}
|
|
|
//log("getZYSAPMENGE6");
|
|
|
double dw = stod(bl_quantity);
|
|
|
char buffer[16];
|
|
|
sprintf(buffer, "%.3f", dw);
|
|
|
log("MENGE2:%f==%s", dw, buffer);
|
|
|
return buffer;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
//通过数据库查找工艺以优化速度
|
|
|
tag_t getProcessTagSql(tag_t mantr, char* groupName) {
|
|
|
tag_t process = NULLTAG;
|
|
|
char *puid = NULL;
|
|
|
ITK__convert_tag_to_uid(mantr, &puid);
|
|
|
|
|
|
string sql = "select V.puid as bzgy ";//cV.puid,V.puid as bzgy,ITRO.Pobject_Name as supItemName,g0.pname
|
|
|
sql.append("from PWORKSPACEOBJECT ITRO,PIMANRELATION R,PIMANTYPE RT,PITEMREVISION V,PITEM P,PITEMREVISION cV,")
|
|
|
.append("PITEM cP,PWORKSPACEOBJECT cITRO,PPOM_APPLICATION_OBJECT g,ppom_group g0 ")
|
|
|
.append("where g.puid=V.puid and V.Puid=R.Rprimary_Objectu and r.rrelation_typeu=RT.puid and P.Puid=V.Ritems_Tagu ")
|
|
|
.append("and ITRO.Puid=V.Puid and R.Rsecondary_Objectu=cV.Puid and cP.Puid=cV.Ritems_Tagu and cV.Puid=cITRO.Puid ")
|
|
|
.append("and g.ROWNING_GROUPU=g0.puid and ITRO.Pactive_Seq<>0 and cITRO.Pactive_Seq<>0 ")
|
|
|
.append("and RT.partifactname='IMAN_METarget' and cV.puid='").append(puid)
|
|
|
.append("' and g0.pname='").append(groupName).append("'");
|
|
|
log2(sql);
|
|
|
int outputColumn1 = 0, outputValueCount1 = 0;
|
|
|
char*** outputValue1 = NULL;
|
|
|
QuerySQLNoInputParam((char*)sql.c_str(), &outputColumn1, &outputValueCount1, &outputValue1);
|
|
|
if (outputValueCount1 > 0) {
|
|
|
ITK__convert_uid_to_tag(outputValue1[0][0], &process);
|
|
|
}
|
|
|
return process;
|
|
|
}
|
|
|
|
|
|
void recurBYZZSAP(tag_t line, tag_t rev, 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* codeRemark, int unct, vector<string> kjBomIds,
|
|
|
char* projWbsNo, map<string, tag_t>& by_materials, char* now,
|
|
|
vector <_ns1__DT_USCOREPROCESSROUTE_USCORES4_USCOREREQ_LIST>& proclist, int level, string& errMsg, string type1,
|
|
|
vector<string> dists, map<string, vector<char**>> flMap) {
|
|
|
char *line_os = NULL;
|
|
|
ITKCALL(AOM_ask_value_string(line, "object_string", &line_os));
|
|
|
log("recurBYZZSAP line:%s\n", line_os);
|
|
|
//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(rev, groupName);
|
|
|
tag_t meop = getProcessTagSql(rev, 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(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, *zz_os = NULL;
|
|
|
ITKCALL(AOM_ask_value_string(rev, "object_string", &zz_os));
|
|
|
ITKCALL(AOM_UIF_ask_value(rev, "zt2_Source", &zt2_Source));
|
|
|
log("zzRev:%s==%s", zz_os, zt2_Source);
|
|
|
boolean equals = (tc_strcmp(zt2_Source, "外购") == 0 || tc_strcmp(zt2_Source, "S2") == 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(fa, "C") == 0 && tc_strcmp(type, "ZT2_Design3DRevision") == 0
|
|
|
|| tc_strcmp(fa, "E") == 0 && c_line_count > 0)) {
|
|
|
//java中getMrProcess方法已注释只返回null,因此该逻辑已无实际意义
|
|
|
log("getMrProcess");
|
|
|
meop = getMrProcess(groupName);
|
|
|
}
|
|
|
}
|
|
|
if (meop != NULLTAG) {
|
|
|
log("meop != NULLTAG");
|
|
|
if (level == 1) {
|
|
|
readBopInfo1YH(meop, partRev, false, gy_meops, needTCM_meops, groupName, now, proclist);
|
|
|
}
|
|
|
else {
|
|
|
readBopInfo1YH(meop, partRev, 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, partRev, partRev, groupName, gy_meops, needTCM_meops, bomIsExist, set_meops, transfer, fa,
|
|
|
list, codeRemark, unct, kjBomIds, projWbsNo, by_materials, now, proclist, level, errMsg, type1, dists, flMap);
|
|
|
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);
|
|
|
}
|
|
|
char *item_id = NULL;
|
|
|
ITKCALL(AOM_ask_value_string(rev, "item_id", &item_id));
|
|
|
vector<string> idSplit;
|
|
|
Split(item_id, "-", idSplit);
|
|
|
|
|
|
if (c_line_count == 0 && flMap.count(idSplit[0]) == 0) {
|
|
|
string item_id_cut = "";
|
|
|
if (idSplit.size() > 1) {
|
|
|
for (int i = 0; i < idSplit.size() - 1; i++) {
|
|
|
if (item_id_cut.size() > 0) {
|
|
|
item_id_cut.append("-");
|
|
|
}
|
|
|
item_id_cut.append(idSplit[i]);
|
|
|
}
|
|
|
}
|
|
|
if (find(dists.begin(), dists.end(), type) != dists.end()) {
|
|
|
log("框架BOM[%s]不进行原材料展开", item_id);
|
|
|
return;
|
|
|
}
|
|
|
if (tc_strcmp(type, "ZT2_Design3DRevision") == 0 && tc_strcmp(zt2_Source, "自制") == 0) {
|
|
|
tag_t comp = NULLTAG;
|
|
|
map<string, string> materials;
|
|
|
if (tc_strcmp(type1.c_str(), "E") == 0) {
|
|
|
comp = getClassPartDB(rev, groupName, by_materials, materials, errMsg);
|
|
|
}
|
|
|
else {
|
|
|
comp = getClassPart(rev, codeRemark, unct, by_materials, errMsg);
|
|
|
}
|
|
|
// 原材料展开时投料工序获取父项的工艺首工序改为获取父项的投料工序
|
|
|
char *sortno = NULL;
|
|
|
ITKCALL(AOM_ask_value_string(line, "ZT2_ClassificationNo", &sortno));
|
|
|
log("工序编码 =>%s", sortno);
|
|
|
_ns1__DT_USCOREBOM_USCORES4_USCOREREQ_LIST_HEAD head;
|
|
|
_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;
|
|
|
if (partRev != NULLTAG) {
|
|
|
char *zt2_MaterialNo = NULL, *zt2_WBSNo = NULL, *zt2_unit = NULL;
|
|
|
ITKCALL(AOM_UIF_ask_value(partRev, "zt2_MaterialNo", &zt2_MaterialNo));
|
|
|
log("zt2_MaterialNo ==>%s", zt2_MaterialNo);
|
|
|
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("str = [%s]", zt2_unit);
|
|
|
ITKCALL(AOM_UIF_ask_value(partRev, "zt2_WBSNo", &zt2_WBSNo));
|
|
|
string property = "";
|
|
|
if (!zt2_WBSNo || tc_strlen(zt2_WBSNo) == 0) {
|
|
|
if (find(kjBomIds.begin(), kjBomIds.end(), idSplit[0]) != kjBomIds.end()) {
|
|
|
property.append(projWbsNo);
|
|
|
}
|
|
|
}
|
|
|
else {
|
|
|
property.append(zt2_WBSNo);
|
|
|
}
|
|
|
char *wbs = (char*)MEM_alloc((property.size() + 1) * sizeof(char));
|
|
|
tc_strcpy(wbs, property.c_str());
|
|
|
log("PSPNR:%s", wbs);
|
|
|
head.PSPNR = wbs;
|
|
|
head.MATNR = zt2_MaterialNo;
|
|
|
head.BMEIN = zt2_unit;
|
|
|
}
|
|
|
head.STLAN = (char*)"1";
|
|
|
head.STLAL = (char*)"1";
|
|
|
head.BMENG = (char*)"1";
|
|
|
head.WERKS = groupName;
|
|
|
head.DATUV = now;
|
|
|
char* parnetUid = NULL;
|
|
|
ITK__convert_tag_to_uid(partRev, &parnetUid);
|
|
|
head.STKTX = parnetUid;
|
|
|
//inCcpMap[parnetUid] = ccpMaterialMap;
|
|
|
|
|
|
items_item.DATUV = now;
|
|
|
items_item.POSTP = (char*)"L";
|
|
|
items_item.POSNR = "0010";
|
|
|
if (!sortno || tc_strlen(sortno) == 0) {
|
|
|
char* mos = NULL;
|
|
|
ITKCALL(AOM_ask_value_string(rev, "object_string", &mos));
|
|
|
errMsg.append("自制件").append(mos).append("未投料\\n");
|
|
|
}
|
|
|
if (comp != NULLTAG) {
|
|
|
tag_t crev = NULLTAG;
|
|
|
char *os = NULL;
|
|
|
ITKCALL(ITEM_ask_latest_rev(comp, &crev));
|
|
|
ITKCALL(AOM_ask_value_string(crev, "object_string", &os));
|
|
|
log("原材料 =>%s", os);
|
|
|
//tag_t item2;
|
|
|
char *zt2_MaterialNo2 = NULL, *zt2_unit2 = NULL;
|
|
|
ITKCALL(AOM_UIF_ask_value(crev, "zt2_MaterialNo", &zt2_MaterialNo2));
|
|
|
if (!zt2_MaterialNo2 || tc_strlen(zt2_MaterialNo2) == 0) {
|
|
|
errMsg.append(line_os).append("物料号为空;");
|
|
|
}
|
|
|
//ITKCALL(ITEM_ask_item_of_rev(comp, &item2));
|
|
|
ITKCALL(AOM_ask_value_string(comp, "zt2_unit", &zt2_unit2));
|
|
|
items_item.IDNRK = zt2_MaterialNo2;
|
|
|
//char* unit22 = getUnti(zt2_unit2);
|
|
|
items_item.MEINS = zt2_unit2;
|
|
|
char *menge = NULL;
|
|
|
menge = (char*)MEM_alloc((16 + 1) * sizeof(char));
|
|
|
if (tc_strcmp(type1.c_str(), "E") == 0) {
|
|
|
char *zt2_MaterialMark = NULL;
|
|
|
ITKCALL(AOM_UIF_ask_value(rev, "zt2_MaterialMark", &zt2_MaterialMark));
|
|
|
if (materials.count(zt2_MaterialMark) > 0) {
|
|
|
tc_strcpy(menge, getZYSAPMENGE2(materials[zt2_MaterialMark], rev, line, true, errMsg));
|
|
|
}
|
|
|
else {
|
|
|
tc_strcpy(menge, getSAPMENGE(rev, crev, line, true, codeRemark, errMsg));
|
|
|
}
|
|
|
}
|
|
|
else {
|
|
|
tc_strcpy(menge, getSAPMENGE(rev, crev, line, true, codeRemark, errMsg));
|
|
|
}
|
|
|
items_item.MENGE = menge;
|
|
|
}
|
|
|
else {
|
|
|
char* mos = NULL;
|
|
|
ITKCALL(AOM_ask_value_string(rev, "object_string", &mos));
|
|
|
errMsg.append(mos).append("未能匹配到对应的原材料\\n");
|
|
|
items_item.IDNRK = "";
|
|
|
items_item.MEINS = "";
|
|
|
items_item.MENGE = "";
|
|
|
}
|
|
|
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;
|
|
|
}
|
|
|
char *os = NULL;
|
|
|
_ns1__DT_USCOREBOM_USCORES4_USCOREREQ_LIST_HEAD head;
|
|
|
if (partRev != NULLTAG) {
|
|
|
ITKCALL(AOM_ask_value_string(partRev, "object_string", &os));
|
|
|
char *zt2_MaterialNo = NULL, *zt2_WBSNo = NULL, *zt2_unit = NULL;
|
|
|
ITKCALL(AOM_ask_value_string(partRev, "zt2_MaterialNo", &zt2_MaterialNo));
|
|
|
log("zt2_MaterialNo ==>%s", 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]", unit);
|
|
|
string property = "";
|
|
|
if (!zt2_WBSNo || tc_strlen(zt2_WBSNo) == 0) {
|
|
|
if (find(kjBomIds.begin(), kjBomIds.end(), idSplit[0]) != kjBomIds.end()) {
|
|
|
property.append(projWbsNo);
|
|
|
}
|
|
|
}
|
|
|
else {
|
|
|
property.append(zt2_WBSNo);
|
|
|
}
|
|
|
char *wbs = (char*)MEM_alloc((property.size() + 1) * sizeof(char));
|
|
|
tc_strcpy(wbs, property.c_str());
|
|
|
log("PSPNR:%s", wbs);
|
|
|
head.PSPNR = wbs;
|
|
|
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];
|
|
|
vector<tag_t> fls;
|
|
|
vector<string> gxs;
|
|
|
if (flMap.count(idSplit[0]) > 0) {
|
|
|
log("flMap contains %s", idSplit[0].c_str());
|
|
|
tag_t query_tag = NULLTAG;
|
|
|
ITKCALL(QRY_find2("chint_query_CSHItemID", &query_tag));//零组件 ID
|
|
|
for (int i = 0; i < flMap[idSplit[0]].size(); i++) {
|
|
|
char **fl = flMap[idSplit[0]][i];
|
|
|
char* qry_entries[1] = { "CSHItemID" }, *qry_values[1] = { fl[0] };//零组件 ID
|
|
|
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
|
|
|
}
|
|
|
}
|
|
|
log("fls:%zd", fls.size());
|
|
|
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++) {
|
|
|
string buff;
|
|
|
_ns1__DT_USCOREBOM_USCORES4_USCOREREQ_LIST_ITEMS_ITEM items_item;
|
|
|
tag_t c_line_tag = c_line_tags[i], rev2;
|
|
|
char *c_line_os = NULL;
|
|
|
ITKCALL(AOM_ask_value_string(c_line_tag, "object_string", &c_line_os));
|
|
|
log("c_line_tag:%s\n", c_line_os);
|
|
|
ITKCALL(AOM_ask_value_tag(c_line_tag, "bl_line_object", &rev2));
|
|
|
auto start = std::chrono::high_resolution_clock::now();
|
|
|
tag_t partRev2 = getBOMPart(c_line_tag, groupName);
|
|
|
auto end = std::chrono::high_resolution_clock::now();
|
|
|
std::chrono::duration<double> elapsed = end - start;
|
|
|
printf("getBOMPart用时:%f\n", elapsed.count());
|
|
|
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));
|
|
|
end = std::chrono::high_resolution_clock::now();
|
|
|
elapsed = end - start;
|
|
|
printf("BOM用时:%f\n", elapsed.count());
|
|
|
|
|
|
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));
|
|
|
log("partRev2:%s", 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));
|
|
|
int seq2 = 0;
|
|
|
if (bl_sequence_no && tc_strlen(bl_sequence_no) > 0) {
|
|
|
seq2 = stoi(bl_sequence_no);
|
|
|
}
|
|
|
if (seq2 > seq) {
|
|
|
seq = seq2;
|
|
|
}
|
|
|
|
|
|
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 = c_sortno;
|
|
|
if (!c_sortno || tc_strlen(c_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("(父项:");
|
|
|
if (os)
|
|
|
msg.append(os);
|
|
|
else
|
|
|
msg.append(c_line_os);
|
|
|
msg.append("):").append(buff);
|
|
|
log("buff ===== %s", 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, codeRemark, unct, kjBomIds, projWbsNo, by_materials, now, proclist, level, errMsg, type1, dists, flMap);
|
|
|
}
|
|
|
if (flMap.count(idSplit[0]) > 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 = getBOMPart(c_line_tag, groupName);
|
|
|
|
|
|
char *zt2_MaterialNo2 = NULL, *zt2_unit2 = NULL;
|
|
|
if (partRev2 != NULLTAG) {
|
|
|
ITKCALL(AOM_UIF_ask_value(partRev2, "zt2_MaterialNo", &zt2_MaterialNo2));
|
|
|
log("fl===== %s", 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 *seqstr = (char*)MEM_alloc(16 * sizeof(char));
|
|
|
tc_strcpy(seqstr, seqs);
|
|
|
char *gxstr = (char*)MEM_alloc((gxs[i].size() + 1) * sizeof(char));
|
|
|
tc_strcpy(gxstr, gxs[i].c_str());
|
|
|
log("fl seq:%s", seqstr);
|
|
|
log("fl gxs:%s", gxstr);
|
|
|
|
|
|
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 = seqstr;
|
|
|
items_item.MENGE = menge;
|
|
|
items_item.SORTF = gxstr;// (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 + fls.size();
|
|
|
_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 "";
|
|
|
}
|
|
|
|
|
|
//lidy20241126 BOM传递SAP时拼接辅料BOM
|
|
|
map<string, vector<char**>> getFlMap(tag_t topItem) {
|
|
|
map<string, vector<char**>> flMap;
|
|
|
tag_t top_classificationObject = NULLTAG;
|
|
|
ITKCALL(ICS_ask_classification_object(topItem, &top_classificationObject));
|
|
|
if (top_classificationObject == NULLTAG) {
|
|
|
return flMap;
|
|
|
}
|
|
|
int n_attrs = 0;
|
|
|
char** attr_names = NULL;
|
|
|
char** attr_vals = NULL;
|
|
|
ITKCALL(ICS_ask_attributes_of_classification_obj(top_classificationObject, &n_attrs, &attr_names, &attr_vals));
|
|
|
string flfz = "";
|
|
|
for (int i = 0; i < n_attrs; i++) {
|
|
|
if (tc_strcmp(attr_names[i], "辅料分组") == 0) {
|
|
|
flfz = attr_vals[i];
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
string sql = "select \"flno\",\"tuhao\",\"gx\" from CHINT_GYFL_M005 where \"group\"='";
|
|
|
sql.append(flfz).append("'");
|
|
|
int outputColumn1 = 0, outputValueCount1 = 0;
|
|
|
char*** outputValue1 = NULL;
|
|
|
log("search3 ===> %s\n", sql.c_str());
|
|
|
QuerySQLNoInputParam((char*)sql.c_str(), &outputColumn1, &outputValueCount1, &outputValue1);
|
|
|
if (outputValueCount1 > 0) {
|
|
|
for (int i = 0; i < outputValueCount1; i++) {
|
|
|
vector<string> v1;
|
|
|
Split(outputValue1[i][1], "-", v1);
|
|
|
if (flMap.count(v1[0]) == 0) {
|
|
|
vector<char**> v;
|
|
|
flMap[v1[0]] = v;
|
|
|
log("flMap ===> %s\n", v1[0].c_str());
|
|
|
}
|
|
|
flMap[v1[0]].push_back(outputValue1[i]);
|
|
|
}
|
|
|
}
|
|
|
return flMap;
|
|
|
}
|
|
|
|
|
|
void SAPZZNewOp(vector<tag_t> ccpVector, char* projectNo, char* groupName, char* wbs, char* now, string& errMsgBuf,
|
|
|
char*code, char* transfer, char* userName, char* type, vector<string> dists, char* projectName) {
|
|
|
|
|
|
log("************** SAPZZNewOp **************");
|
|
|
int pref_cnt = 0;
|
|
|
char **pref = NULL;
|
|
|
string codeRemark = "ICM0801";
|
|
|
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];
|
|
|
}
|
|
|
}
|
|
|
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;
|
|
|
}
|
|
|
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]);
|
|
|
}
|
|
|
int unct = getIcsId((char*)codeRemark.c_str(), "材料标记");
|
|
|
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), topItem = NULLTAG;
|
|
|
if (zzRev == NULLTAG && tc_strcmp(type, "E") != 0) {
|
|
|
errMsgBuf.append("总装图 ").append(os).append(" 未关联出厂编号!!变压器跳过、互感电容走中压;");
|
|
|
log("errMsgBuf ===> %s\n", errMsgBuf);
|
|
|
string updateSum = "update CHINT_BOM_TO_SAP_SUM set \"DATASTATUS\" = '%s' ,SAPRESULT = 'PLM检查未通过',PLMRESULT = '已发送飞书通知' where code = '%s' ";
|
|
|
char selectRxfs[800];
|
|
|
string timel;
|
|
|
sprintf(selectRxfs, updateSum.c_str(), errMsgBuf.c_str(), code);
|
|
|
log("selectRecord2 ===> %s\n", selectRxfs);
|
|
|
ExecuteSQLNoInputParam(selectRxfs);
|
|
|
ExecuteSQLNoInputParam((char*)"commit");
|
|
|
|
|
|
sendNotice(code, errMsgBuf, wbs, groupName, userName, projectName);
|
|
|
return;
|
|
|
}
|
|
|
if (tc_strcmp(type, "E") == 0) {
|
|
|
zzRev = getZYDesign(partRev);
|
|
|
}
|
|
|
if (zzRev == NULLTAG) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
ITKCALL(ITEM_ask_item_of_rev(zzRev, &topItem));
|
|
|
char *os1 = NULL;
|
|
|
ITKCALL(AOM_UIF_ask_value(topItem, "object_string", &os1));
|
|
|
log("os1 ===> %s\n", os1);
|
|
|
char *projWbsNo = NULL;
|
|
|
int n_referencers = 0;
|
|
|
int* levels = NULL;
|
|
|
tag_t* referencers = NULL;
|
|
|
char** relations = NULL;
|
|
|
ITKCALL(WSOM_where_referenced2(topItem, 1, &n_referencers, &levels, &referencers, &relations));
|
|
|
for (int i = 0; i < n_referencers; i++) {
|
|
|
char *os2 = NULL;
|
|
|
ITKCALL(AOM_UIF_ask_value(referencers[i], "object_string", &os2));
|
|
|
log("os2 ===> %s\n", os2);
|
|
|
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 *os3 = NULL;
|
|
|
ITKCALL(AOM_UIF_ask_value(referencers2[0], "object_string", &os3));
|
|
|
log("os3 ===> %s\n", os3);
|
|
|
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;
|
|
|
tag_t* referencers3 = NULL;
|
|
|
char** relations3 = NULL;
|
|
|
ITKCALL(WSOM_where_referenced2(referencers2[0], 1, &n_referencers3, &levels3, &referencers3, &relations3));
|
|
|
if (n_referencers3 > 0) {
|
|
|
char *os4 = NULL;
|
|
|
ITKCALL(AOM_UIF_ask_value(referencers3[0], "object_string", &os4));
|
|
|
log("os4 ===> %s\n", os4);
|
|
|
char *type3 = NULL;
|
|
|
ITKCALL(WSOM_ask_object_type2(referencers3[0], &type3));
|
|
|
if (tc_strcmp(type3, "ZT2_ProjectItem") == 0) {
|
|
|
ITKCALL(AOM_ask_value_string(referencers3[0], "zt2_WBSNo", &projWbsNo));
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
log("projWbsNo:%s", projWbsNo);
|
|
|
|
|
|
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;
|
|
|
|
|
|
//lidy20241126 BOM传递SAP时拼接辅料BOM
|
|
|
map<string, vector<char**>> flMap = getFlMap(topItem);
|
|
|
|
|
|
recurBYZZSAP(line, zzRev, partRev, groupName, gy_meops, needTCM_meops, bomIsExist, set_meops, transfer, type,
|
|
|
list, (char*)codeRemark.c_str(), unct, kjBomIds, projWbsNo, by_materials, now, proclist, 1, errMsg, type,
|
|
|
dists, 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 (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, urls[1]);//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, 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");
|
|
|
}
|
|
|
}
|
|
|
|
|
|
void SAPPartZYOp2(vector<tag_t> ccpVector, char* projectNo, char* groupName, char* wbs,
|
|
|
char* now, string& errMsgBuf, char*code, char* transfer, char* userName, char* type, char* projectName) {
|
|
|
|
|
|
log("************** SAPPartZYOp2 **************");
|
|
|
int pref_cnt = 0;
|
|
|
char **pref = NULL;
|
|
|
string codeRemark = "ICM0801";
|
|
|
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];
|
|
|
}
|
|
|
}
|
|
|
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;
|
|
|
}
|
|
|
map<tag_t, vector<_ns1__DT_USCOREBOM_USCORES4_USCOREREQ_LIST>> mapList;
|
|
|
map<string, vector<string>> inCcpMap;//记录单元对应的产成品物料编码
|
|
|
for (int len = 0; len < ccpVector.size(); len++) {
|
|
|
tag_t rev = ccpVector[len], *factoryNos;
|
|
|
char* revUid;
|
|
|
ITK__convert_tag_to_uid(rev, &revUid);
|
|
|
log("产成品UID:%s", revUid);
|
|
|
char *type = NULL;
|
|
|
ITKCALL(WSOM_ask_object_type2(rev, &type));
|
|
|
if (tc_strcmp(type, "ZT2_Design3DRevision") != 0 && tc_strcmp(type, "Part Revision") != 0) {
|
|
|
continue;
|
|
|
}
|
|
|
int num = 0;
|
|
|
ITKCALL(AOM_ask_value_tags(rev, "ZT2_FactoryNumber", &num, &factoryNos));
|
|
|
tag_t designRev = NULLTAG;
|
|
|
if (num > 0) {
|
|
|
int n_references = 0;
|
|
|
int* levels = 0;
|
|
|
tag_t* references_tag;
|
|
|
char** relation_type_name = NULL;
|
|
|
//通过出厂编号查找到图纸
|
|
|
ITKCALL(WSOM_where_referenced(factoryNos[0], 1, &n_references, &levels, &references_tag, &relation_type_name));
|
|
|
for (int i = 0; i < n_references; i++) {
|
|
|
if (tc_strcmp(relation_type_name[i], "ZT2_FactoryNumber") == 0) {
|
|
|
char *type2 = NULL;
|
|
|
ITKCALL(WSOM_ask_object_type2(references_tag[i], &type2));
|
|
|
if (tc_strcmp(type2, "ZT2_Design3DRevision") == 0) {
|
|
|
designRev = references_tag[i];
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
if (designRev == NULLTAG) {
|
|
|
designRev = rev;
|
|
|
}
|
|
|
tag_t ebom_window = NULLTAG, line = NULLTAG;
|
|
|
ITKCALL(BOM_create_window(&ebom_window));
|
|
|
ITKCALL(BOM_set_window_top_line(ebom_window, NULL, designRev, NULLTAG, &line));
|
|
|
|
|
|
char *ccpMaterialNo = NULL;
|
|
|
ITKCALL(AOM_ask_value_string(rev, "zt2_MaterialNo", &ccpMaterialNo));
|
|
|
int unct = getIcsId((char*)codeRemark.c_str(), "材料标记");
|
|
|
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<string> ccpMaterialMap;
|
|
|
ccpMaterialMap.push_back(ccpMaterialNo);
|
|
|
inCcpMap[revUid] = ccpMaterialMap;
|
|
|
string errMsg = "";
|
|
|
recurZYGGSAPNoProc(designRev, rev, groupName, line, gy_meops, needTCM_meops, now, proclist, bomIsExist,
|
|
|
list, (char*)codeRemark.c_str(), unct, by_materials, false, errMsg, inCcpMap, ccpMaterialMap, matr);
|
|
|
//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(rev, "zt2_BOMScheme", &zt2_BOMScheme));
|
|
|
if (list.size() > 0 && strcmp(zt2_BOMScheme, "汇总") == 0) {
|
|
|
char* zt2_Quantity;
|
|
|
ITKCALL(AOM_ask_value_string(rev, "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[rev] = list;
|
|
|
}
|
|
|
ITKCALL(BOM_close_window(ebom_window));
|
|
|
}
|
|
|
if (mapList.size() > 0) {
|
|
|
//传递BOM
|
|
|
//logBomMsg(list);
|
|
|
//sendBom(list, sendMsg);
|
|
|
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");
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 壳体方案传递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 **************");
|
|
|
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;
|
|
|
}
|
|
|
//记录是否有重复的出厂编号
|
|
|
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, urls[0]);
|
|
|
|
|
|
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, urls[1]);//proclists.push_back(proclist);//sendProcess(proclist);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
if (mapList.size() > 0) {
|
|
|
//传递BOM
|
|
|
//logBomMsg(list);
|
|
|
//sendBom(list, sendMsg);
|
|
|
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");
|
|
|
}
|
|
|
} |