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.

1348 lines
49 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 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");
}
}