#define _CRT_SECURE_NO_WARNINGS #include "epm_handler_common.h" void getItemJson(int index, tag_t topLine, tag_t BomLine, bool isStart, map typePropertyType, char parameters[100000]); void getBomLineProperty(tag_t topLine, tag_t BomLine, map typePropertyType, char* bomBaseNum, char* sortString, char parameters[100000]); bool isSendBomStart = true; int RB_SendErpBom(EPM_action_message_t msg) { printf("=========================BOM下发到ERP Start===================\n"); //POM_AM__set_application_bypass(true); int ifail = ITK_ok; int attachments_num = 0; tag_t rootTask = NULLTAG, * attachments = NULLTAG; //获取任务对象 EPM_ask_root_task(msg.task, &rootTask); //获取任务目标对象 EPM_ask_attachments(rootTask, EPM_target_attachment, &attachments_num, &attachments); //获取参数 char* argflag = NULL, * argvalue = NULL, * arg = NULL; char messageUser[1024] = "", messageResult[1024] = ""; int arg_cnt = TC_number_of_arguments(msg.arguments); printf("参数个数为:%d\n", arg_cnt); if (arg_cnt > 0) { for (int i = 0; i < arg_cnt; i++) { //获取下一个参数(从0开始) arg = TC_next_argument(msg.arguments); //获取参数的名称和值 ifail = ITK_ask_argument_named_value((const char*)arg, &argflag, &argvalue); if (stricmp(argflag, "ownerId") == 0) { if (argvalue != NULL) { strcpy(messageUser, argvalue); } } else if (stricmp(argflag, "messageResult") == 0) { if (argvalue != NULL) { strcpy(messageResult, argvalue); } } } } vector messageUserValues; if (strstr(messageUser, ",") != NULL) { int vectorValueCount = 0; char** vectorValueChar = new char* [64]; split(messageUser, ",", vectorValueChar, &vectorValueCount); for (int i = 0; i < vectorValueCount; i++) { messageUserValues.push_back(vectorValueChar[i]); } } else { messageUserValues.push_back(messageUser); } int pref_cnt = 0; char** pref_vals = NULL; //获取首选项的值 PREF_ask_char_values("RB_BOMSendErpProperty", &pref_cnt, &pref_vals); map typePropertyType; for (int j = 0; j < pref_cnt; j++) { if (strstr(pref_vals[j], "-") != NULL) { //按照-进行拆分。拆分条件 int valueCount = 0; char** valueChar = new char* [64]; //分割字符串 split(pref_vals[j], "-", valueChar, &valueCount); typePropertyType[valueChar[0]] = valueChar[1];// .insert(std::pair(valueChar[0], valueChar[1])); } } char* tc_root_file = getenv("tc_root"); //C:\Siemens\Teamcenter11 char errorMessage[100000] = "";//写入到文件的值 for (int i = 0; i < attachments_num; i++) { char* itemType = NULL; AOM_ask_value_string(attachments[i], "object_type", &itemType); printf("itemType%s Start===================\n", itemType); //过滤掉非版本的对象 if (strcmp(itemType, "RB3_ZCRevision") != 0) { DOFREE(itemType); continue; } isSendBomStart = true; char parameters[100000] = "";//写入到文件的值 strcat(parameters, "getBomPropertys}}"); strcat(parameters, "["); /*if ((strstr(itemType, "ZCRevision") == NULL) || (strstr(itemType, "Master") != NULL) || (strstr(itemType, "master") != NULL) || (strstr(itemType, "BOM") != NULL) || (strstr(itemType, "bom") != NULL) || (strstr(itemType, "Bom") != NULL)) { DOFREE(itemType); continue; }*/ //获取所有包含替代项目组的BOM行 vector bomLines; //获取子项 tag_t top_line = NULLTAG, window = NULLTAG; BOM_create_window(&window); //设置顶层BOM BOM_set_window_top_line(window, NULLTAG, attachments[i], NULLTAG, &top_line); //获取单个的json字符串 if (isSendBomStart) { getItemJson(-1, top_line, NULLTAG, isSendBomStart, typePropertyType, parameters); //isStart = false; } else { getItemJson(-1, top_line, NULLTAG, isSendBomStart, typePropertyType, parameters); } DOFREE(itemType); strcat(parameters, "]"); //获取当前时间 time_t now = time(0); tm* p = localtime(&now); char date[128] = ""; sprintf_s(date, "%04d%02d%02d%02d%02d%02d", 1900 + p->tm_year, p->tm_mon + 1, p->tm_mday, p->tm_hour, p->tm_min, p->tm_sec); //把数据用写入文件 char data_file[SS_MAXPATHLEN] = ""; strcat(data_file, tc_root_file); strcat(data_file, "\\"); strcat(data_file, date); strcat(data_file, ".txt"); ofstream file; file.open(data_file); file << parameters << endl; // 使用与cout同样的方式进行写入 file.close(); string strResult; //cmd指令 char cmd[256] = ""; strcpy(cmd, "java -jar \""); //strcat(cmd, jar_file); strcat(cmd, tc_root_file); strcat(cmd, "\\portal\\plugins\\"); strcat(cmd, "RB_SendErp.jar"); strcat(cmd, "\" "); //传参 cout << data_file << endl; strcat(cmd, data_file); //用来传递本流程的流程名称(@分割) //strcat(cmd,"@"); //strcat(cmd,handler_name); printf("路径:\n%s\n", cmd); char buf[8000] = { 0 }; FILE* pf = NULL; if ((pf = _popen(cmd, "r")) == NULL) { printf("接口返回:\n%s", "1"); } while (fgets(buf, sizeof buf, pf)) { strResult += buf; } _pclose(pf); cout << strResult << endl; unsigned int iSize = strResult.size(); if (iSize > 0 && strResult[iSize - 1] == '\n' && strlen(parameters) > 0) { strResult = strResult.substr(0, iSize - 1); printf("下发失败\n"); cout << strResult << endl; strcat(errorMessage, strResult.c_str()); if (strcmp(messageResult, "1") == 0) { ifail = 1; } } } messageUserValues.clear(); vector().swap(messageUserValues); MEM_free(attachments); tc_root_file = NULL; pref_vals = NULL; if (ifail == 1) { EMH_store_error_s1(EMH_severity_user_error, EMH_USER_error_base, errorMessage); } printf("=========================BOM下发到ERP End===================\n"); return ifail; } void getItemJson(int index, tag_t topLine, tag_t BomLine, bool isStart, map typePropertyType, char parameters[100000]) { //获取版本产线 int factoryNum = 0; char** factoryValues = NULL; char* localization_status; logical master; tag_t revisions = NULLTAG; AOM_ask_value_tag(topLine, "bl_line_object", &revisions); char* itemType = NULL; AOM_ask_value_string(revisions, "object_type", &itemType); string propertyNames = typePropertyType[itemType]; if (propertyNames.c_str() != NULL) { //获取工厂 const char* constName = propertyNames.c_str(); char* name = new char[2048];//足够长 strcpy(name, constName); if (strstr(name, ",") != NULL) { //按照,进行拆分。拆分条件 int valueCount = 0; char** valueChar = new char* [64]; //分割字符串 split(name, ",", valueChar, &valueCount); for (int k = 0; k < valueCount; k++) { if (strstr(valueChar[k], "=") != NULL) { //按照-进行拆分。拆分条件 int valueNum = 0; char** values = new char* [64]; //分割字符串 split(valueChar[k], "=", values, &valueNum); if (strcmp(values[1], "FACTORY") == 0) { //printf("values[0]:%s\n", values[0]); //TCGetPropertyValue(attachments[i], "Revision", values[0], &factoryValues); AOM_UIF_ask_localized_value_strings(revisions, values[0], "zh_CN", &factoryNum, &factoryValues, &localization_status, &master); //AOM_ask_value_strings(revisions, values[0], &factoryNum, &factoryValues); } } } } else { //按照-进行拆分。拆分条件 int valueCount = 0; char** valueChar = new char* [64]; //分割字符串 split(name, "=", valueChar, &valueCount); if (strcmp(valueChar[1], "FACTORY") == 0) { //printf("valueChar[0]:%s\n", valueChar[0]); AOM_UIF_ask_localized_value_strings(revisions, valueChar[0], "zh_CN", &factoryNum, &factoryValues, &localization_status, &master); //AOM_UIF_ask_values(revisions, valueChar[0], &factoryNum, &factoryValues); } } } //获取当前时间 time_t now = time(0); tm* p = localtime(&now); char date[128] = ""; sprintf_s(date, "%04d%02d%02d%02d%02d%02d", 1900 + p->tm_year, p->tm_mon + 1, p->tm_mday, p->tm_hour, p->tm_min, p->tm_sec); printf("factoryNum:%d\n", factoryNum); if (factoryNum > 0) { for (int j = 0; j < factoryNum; j++) { if (factoryValues[j] == NULL || strcmp(factoryValues[j], "") == 0) { continue; } printf("factoryValues[j]:%s\n", factoryValues[j]); getBomLineProperty(topLine, BomLine, typePropertyType, factoryValues[j], date, parameters); } } } void getBomLineProperty(tag_t topLine, tag_t BomLine, map typePropertyType, char* bomBaseNum, char* date, char parameters[100000]) { //char parameters[100000] = "";//写入到文件的值 //bool isStart = true; int count = 0; tag_t* children_line = NULLTAG; BOM_line_ask_all_child_lines(topLine, &count, &children_line); printf("count:%d\n", count); for (int i = 0; i < count; i++) { //AOM_ask_value_string(children_line[i], "fnd0bl_line_object_type", &itemType); char* itemType = NULL; AOM_ask_value_string(children_line[i], "bl_item_object_type", &itemType); char* puid = NULL; //获取PUID ITK__convert_tag_to_uid(children_line[i], &puid); string revisionType = itemType; string typeRev = revisionType + "Revision"; printf("object_type%s\n", typeRev.c_str()); //过滤掉非版本的对象 string propertyNames = typePropertyType[typeRev]; //printf("propertyNames%s\n", propertyNames.c_str()); if (!propertyNames.empty() && propertyNames.length() > 0) { printf("propertyNames%s\n", propertyNames.c_str()); if (isSendBomStart) { strcat(parameters, "{"); isSendBomStart = false; } else { strcat(parameters, ",{"); } const char* constName = propertyNames.c_str(); char* name = new char[2048];//足够长 strcpy(name, constName); if (strstr(name, ",") != NULL) { //按照,进行拆分。拆分条件 printf("按照,进行拆分。拆分条件\n"); int valueCount = 0; char** valueChar = new char* [64]; //分割字符串 split(name, ",", valueChar, &valueCount); for (int k = 0; k < valueCount; k++) { if (strstr(valueChar[k], "=") != NULL) { //按照-进行拆分。拆分条件 int valueNum = 0; char** values = new char* [64]; //分割字符串 split(valueChar[k], "=", values, &valueNum); strcat(parameters, "\""); strcat(parameters, values[1] == NULL ? "" : values[1]); strcat(parameters, "\""); strcat(parameters, ":"); char* item_rev_value = NULL; //printf("values[0]%s\n", values[0]); TCGetPropertyValue(children_line[i], "BOMLine", values[0], &item_rev_value); //printf("item_rev_value%s\n", item_rev_value); if (strcmp(values[1], "INPUTTIME") == 0) { item_rev_value = date; } if (strcmp(values[1], "PARENTID") == 0) { TCGetPropertyValue(topLine, "BOMLine", "rev.item_id", &item_rev_value); } if (strcmp(values[1], "FACTORY") == 0) { item_rev_value = bomBaseNum; } if (strcmp(item_rev_value, "/") == 0) { item_rev_value = ""; } strcat(parameters, "\""); strcat(parameters, item_rev_value == NULL ? "" : item_rev_value); strcat(parameters, "\""); if (k < valueCount - 1) { strcat(parameters, ","); } //printf("字符串%s\n", parameters); DOFREE(item_rev_value); } } } else { //按照-进行拆分。拆分条件 printf("按照-进行拆分。拆分条件\n"); int valueCount = 0; char** valueChar = new char* [64]; //分割字符串 split(name, "=", valueChar, &valueCount); strcat(parameters, "\""); strcat(parameters, valueChar[1] == NULL ? "" : valueChar[1]); strcat(parameters, "\""); strcat(parameters, ":"); char* item_rev_value = NULL; TCGetPropertyValue(children_line[i], "BOMLine", valueChar[0], &item_rev_value); if (strcmp(valueChar[1], "INPUTTIME") == 0) { item_rev_value = date; } if (strcmp(valueChar[1], "PARENTID") == 0) { TCGetPropertyValue(topLine, "BOMLine", "rev.item_id", &item_rev_value); } if (strcmp(valueChar[1], "FACTORY") == 0) { item_rev_value = bomBaseNum; } if (strcmp(item_rev_value, "/") == 0) { item_rev_value = ""; } strcat(parameters, "\""); strcat(parameters, item_rev_value == NULL ? "" : item_rev_value); strcat(parameters, "\""); //printf("字符串%s\n", parameters); DOFREE(item_rev_value); } strcat(parameters, "}"); DOFREE(constName); } DOFREE(replaceProject); DOFREE(itemType); DOFREE(puid); printf("parameters:%s\n", parameters); getBomLineProperty(children_line[i], BomLine, typePropertyType, bomBaseNum, date, parameters); } DOFREE(children_line); } map getClassAttrMap(map> classMap, char* classId) { map attrMap; //分类属性名称对应id map存储 if (classMap.find(classId) == classMap.end()) { int count = 0; int* ids; int* arraySize; int* formats; int* options; char** names; char** shortNames; char** annotations; char** unit; char** minValues; char** maxValues; char** defaultValues; char** descriptions; ITKCALL(ICS_class_describe_attributes(classId, &count, &ids, &names, &shortNames, &annotations, &arraySize, &formats, &unit, &minValues, &maxValues, &defaultValues, &descriptions, &options)); for (int i = 0; i < count; i++) { attrMap.insert(pair(names[i], ids[i])); } classMap.insert(pair>(classId, attrMap)); if (ids != NULL) { DOFREE(ids); } if (arraySize != NULL) { DOFREE(arraySize); } if (formats != NULL) { DOFREE(formats); } if (options != NULL) { DOFREE(options); } if (names != NULL) { DOFREE(names); } if (shortNames != NULL) { DOFREE(shortNames); } if (annotations != NULL) { DOFREE(annotations); } if (unit != NULL) { DOFREE(unit); } if (minValues != NULL) { DOFREE(minValues); } if (maxValues != NULL) { DOFREE(maxValues); } if (defaultValues != NULL) { DOFREE(defaultValues); } if (descriptions != NULL) { DOFREE(descriptions); } } else { attrMap = classMap[classId]; } return attrMap; } void getItemClass(int status, char* itemType, tag_t ico_tag, tag_t zi_rev, map attrMap, char* classId, char** classCode) { printf("-----------------getItemClass------------------------\n"); if (status) { printf("提示:中间数据表访问失败\n"); } else { char* field1 = NULL; char* field2 = NULL; int outputColumn = 0, outputValueCount = 0; char*** outputValue = NULL; //物料分类特殊处理,通过数据库表匹配 char sql[1024] = "\0"; if (strcmp("RB3_LBJRevision", itemType) == 0 || strcmp("RB3_GNZCRevision", itemType) == 0 || strcmp("RB3_GNLBJRevision", itemType) == 0 || strcmp("RB3_GYZYRevision", itemType) == 0) { if (strcmp("RB3_LBJRevision", itemType) == 0 && ico_tag != NULLTAG) { ITKCALL(AOM_UIF_ask_value(zi_rev, "object_name", &field1)); char* value = NULL; ICS_ask_attribute_value(ico_tag, "类别", &value); if (value != NULL) { int id = attrMap["类别"]; getClassValue(value, id, &field2); DOFREE(value); } } else if (strcmp("RB3_GNZCRevision", itemType) == 0 && ico_tag != NULLTAG) { char* value = NULL; ICS_ask_attribute_value(ico_tag, "产品类别", &value); if (value != NULL) { int id = attrMap["产品类别"]; getClassValue(value, id, &field1); DOFREE(value); } ITKCALL(AOM_UIF_ask_value(zi_rev, "object_name", &field2)); } else if (strcmp("RB3_GNLBJRevision", itemType) == 0 && ico_tag != NULLTAG) { ITKCALL(AOM_UIF_ask_value(zi_rev, "object_name", &field1)); char* value = NULL; ICS_ask_attribute_value(ico_tag, "产品类别", &value); if (value != NULL) { int id = attrMap["产品类别"]; getClassValue(value, id, &field2); DOFREE(value); } } else if (strcmp("RB3_GYZYRevision", itemType) == 0 && ico_tag != NULLTAG) { char* new_classId = NULL; if (startsWith(classId, '1', '2') || startsWith(classId, '1', '7')) { new_classId = getFirstStr(classId, 2); } else { new_classId = getFirstStr(classId, 4); } tag_t classTag = NULLTAG; char* id = NULL; if (new_classId != NULL) { ITKCALL(ICS_find_class(new_classId, &classTag)); if (classTag != NULLTAG) { ITKCALL(ICS_ask_id_name(classTag, &id, &field1)); } } if (id != NULL) { DOFREE(id); } if (classTag != NULL) { DOFREE(classTag); } if (new_classId != NULL) { DOFREE(new_classId); } } if (field1 != NULL) { if (field1 != NULL && field2 != NULL) { sprintf(sql, "select PCLASSCODE,PCLASSNAME,NEW_COLUMN,PUNIT from PLM_ERP_CLASS_TABLE where PFIELD01= '%s' and PFIELD02= '%s'", field1, field2); } else { sprintf(sql, "select PCLASSCODE,PCLASSNAME,NEW_COLUMN,PUNIT from PLM_ERP_CLASS_TABLE where PFIELD01= '%s'", field1); } } } else { if (strcmp("RB3_ZCRevision", itemType) == 0) { ITKCALL(AOM_UIF_ask_value(zi_rev, "rb3_zclx", &field1)); } else if (strcmp("RB3_BZJRevision", itemType) == 0 || strcmp("RB3_BZJBJRevision", itemType) == 0 || strcmp("RB3_YZRevision", itemType) == 0 || strcmp("RB3_GQRevision", itemType) == 0 || strcmp("RB3_GQBJRevision", itemType) == 0 || strcmp("RB3_GZRevision", itemType) == 0 || strcmp("RB3_GZBJRevision", itemType) == 0) { ITKCALL(AOM_UIF_ask_value(zi_rev, "object_name", &field1)); printf("提示:field1T==%s\n", field1); } else if (strcmp("RB3_YCLRevision", itemType) == 0 || strcmp("RB3_SLRevision", itemType) == 0 || strcmp("RB3_XJRevision", itemType) == 0 || strcmp("RB3_WJTLRevision", itemType) == 0) { ITKCALL(AOM_UIF_ask_value(zi_rev, "rb3_bjlx", &field1)); } else if (strcmp("RB3_XZCPRevision", itemType) == 0) { ITKCALL(AOM_UIF_ask_value(zi_rev, "rb3_cplx2", &field1)); } else if (strcmp("RB3_XZLBJRevision", itemType) == 0 && ico_tag != NULLTAG) { char* value = NULL; ICS_ask_attribute_value(ico_tag, "零件类别", &value); if (value != NULL) { int id = attrMap["零件类别"]; getClassValue(value, id, &field1); DOFREE(value); } } if (field1 != NULL) { sprintf(sql, "select PCLASSCODE,PCLASSNAME,NEW_COLUMN,PUNIT from PLM_ERP_CLASS_TABLE where PFIELD01= '%s'", field1); } } if (strcmp("", sql) != 0) { printf("提示:sqlT==%s\n", sql); if (QuerySQLNoInputParam(sql, &outputColumn, &outputValueCount, &outputValue) == -1 || outputValueCount == 0) { //printf("提示:物料分类查询 失败, %s \n", sql); char sql2[128] = "\0"; sprintf(sql2, "select PCLASSCODE,PCLASSNAME from PLM_ERP_CLASS_TABLE where PFIELD01= '%s'", field1); printf("提示:sql2T==%s\n", sql2); if (QuerySQLNoInputParam(sql2, &outputColumn, &outputValueCount, &outputValue) == -1) { printf("提示:物料分类查询 失败, %s \n", sql2); } } printf("outputValueCount=%d\n", outputValueCount); printf("outputColumn=%d\n", outputColumn); //free(sql); if (outputValueCount > 0) { *classCode = outputValue[0][0]; printf("物料分类====%s\n", *classCode); } } if (outputValue != NULL) { DOFREE(outputValue); } if (field1 != NULL) { DOFREE(field1); } if (field2 != NULL) { DOFREE(field2); } } } void getBomLinePropertyNew(tag_t topLine, char** c_sql_values, vector* parameters_vec, map> classMap, map> factoryMap, map unitMap) { printf("开始获取子件信息\n"); tag_t fu_rev = NULLTAG; AOM_ask_value_tag(topLine, "bl_line_object", &fu_rev); tag_t* children_line = NULLTAG; int count = 0; BOM_line_ask_all_child_lines(topLine, &count, &children_line); if (count > 0) { int status = ConnServer(c_sql_values[1], c_sql_values[2], c_sql_values[0]); char* fu_item_id = NULL; char* fu_smzqzt = NULL; char* fu_item_revision_id = NULL; char* fu_object_name = NULL; char* fu_object_type = NULL; char* fu_cph = NULL; char** fu_scgc = NULL; int factoryCount = 0; ITKCALL(AOM_UIF_ask_value(fu_rev, "item_id", &fu_item_id)); ITKCALL(AOM_UIF_ask_value(fu_rev, "rb3_smzqzt", &fu_smzqzt)); ITKCALL(AOM_UIF_ask_value(fu_rev, "item_revision_id", &fu_item_revision_id)); ITKCALL(AOM_UIF_ask_value(fu_rev, "object_name", &fu_object_name)); ITKCALL(AOM_UIF_ask_value(fu_rev, "rb3_cph", &fu_cph)); char* itemType = NULL; AOM_ask_value_string(fu_rev, "object_type", &itemType); if (strcmp("RB3_XZCPRevision", itemType) == 0 || strcmp("RB3_XZLBJRevision", itemType) == 0) { ITKCALL(AOM_UIF_ask_values(fu_rev, "rb3_xzscgc", &factoryCount, &fu_scgc)); } else if (strcmp("RB3_GNZCRevision", itemType) == 0 || strcmp("RB3_GNLBJRevision", itemType) == 0 || strcmp("RB3_GYZYRevision", itemType) == 0 || strcmp("RB3_BZJRevision", itemType) == 0) { ITKCALL(AOM_UIF_ask_values(fu_rev, "rb3_scgc", &factoryCount, &fu_scgc)); } else if (strcmp("RB3_YCLRevision", itemType) == 0) { ITKCALL(AOM_UIF_ask_values(fu_rev, "rb3_sygc1", &factoryCount, &fu_scgc)); } else { ITKCALL(AOM_UIF_ask_values(fu_rev, "rb3_scgc1", &factoryCount, &fu_scgc)); } ITKCALL(AOM_ask_value_string(fu_rev, "object_type", &fu_object_type)); char facttoryNameStr[4000] = "\0"; char factoryCodeStr[2000] = "\0"; char organizeNameStr[5000] = "\0"; char organizeCodeStr[3000] = "\0"; //这里写服务名,不能用实例名(名称相同除外) if (status) { printf("提示:中间数据表访问失败\n"); } else { //工厂组织编码特殊处理,通过数据库表匹配 for (int i = 0; i < factoryCount; i++) { if (factoryMap.find(fu_scgc[i]) == factoryMap.end()) { char* factoryCode = NULL; char* factoryName = NULL; int factoryColumn = 0, factoryValueCount = 0; char*** factoryValue = NULL; char factorySql[128] = "\0"; sprintf(factorySql, "select PFACTORYCODE,PFACTORYNAME from PLM_ERP_FACTORY_TABLE where PFACTORY= '%s'", fu_scgc[i]); printf("提示:factorySql==%s\n", factorySql); if (QuerySQLNoInputParam(factorySql, &factoryColumn, &factoryValueCount, &factoryValue) == -1) { printf("提示:组织编码查询 失败, %s \n", factorySql); } //printf("factoryValueCount=%d\n", factoryValueCount); //printf("factoryColumn=%d\n", factoryColumn); if (factoryValueCount > 0) { factoryCode = factoryValue[0][0]; factoryName = factoryValue[0][1]; vector factoryVec; factoryVec.push_back(factoryCode); factoryVec.push_back(factoryName); factoryMap[fu_scgc[i]] = factoryVec; //printf("组织编码====%s\n", factoryCode); //printf("组织名称====%s\n", factoryName); if (strcmp(facttoryNameStr, "") != 0) { strcat(facttoryNameStr, ","); strcat(factoryCodeStr, ","); } if (factoryName != NULL) { strcat(facttoryNameStr, factoryName); } if (factoryCode != NULL) { strcat(factoryCodeStr, factoryCode); } } if (factoryValue != NULL) { DOFREE(factoryValue); } if (factoryCode != NULL) { DOFREE(factoryCode); } if (factoryName != NULL) { DOFREE(factoryName); } } else { vector factoryVec = factoryMap[fu_scgc[i]]; if (strcmp(facttoryNameStr, "") != 0) { strcat(facttoryNameStr, ","); strcat(factoryCodeStr, ","); } strcat(factoryCodeStr, factoryVec[0].c_str()); strcat(facttoryNameStr, factoryVec[1].c_str()); } } char* fu_class_code = NULL; tag_t fu_ico_tag = NULLTAG; char* fu_class_id = NULL; map fuAttrMap; ICS_ask_classification_object(fu_rev, &fu_ico_tag); if (fu_ico_tag != NULLTAG) { ICS_ico_ask_class(fu_ico_tag, &fu_class_id); printf(">> fu_class_id: %s\n", fu_class_id); fuAttrMap = getClassAttrMap(classMap, fu_class_id); } getItemClass(status, fu_object_type, fu_ico_tag, fu_rev, fuAttrMap, fu_class_id, &fu_class_code); //处理组织工厂逻辑 char* organizeCode = NULL; char* organizeName = NULL; char* organizeFactory = NULL; char factorySql2[128] = "\0"; int organizeColumn = 0, organizeValueCount = 0; char*** organizeValue = NULL; printf("fu_object_type: %s\n", fu_object_type); printf("fu_class_code: %s\n", fu_class_code); printf("fu_item_id: %s\n", fu_item_id); if (strcmp("RB3_LBJRevision", fu_object_type) == 0) { sprintf(factorySql2, "select PFACTORY,PFACTORYCODE,PFACTORYNAME from PLM_FACTORY_ORGANIZE_TABLE where CLASSCODE= '%s'", fu_class_code); printf("提示:factorySql2==%s\n", factorySql2); if (QuerySQLNoInputParam(factorySql2, &organizeColumn, &organizeValueCount, &organizeValue) == -1) { printf("提示:组织编码查询 失败, %s \n", factorySql2); } //printf("factoryValueCount=%d\n", organizeValueCount); //printf("factoryColumn=%d\n", organizeColumn); if (organizeValueCount > 0) { organizeFactory = organizeValue[0][0]; organizeCode = organizeValue[0][1]; organizeName = organizeValue[0][2]; printf("组织工厂====%s\n", organizeFactory); printf("组织名称2====%s\n", organizeName); printf("组织编码2====%s\n", organizeCode); } else { strcpy(organizeNameStr, facttoryNameStr); strcpy(organizeCodeStr, factoryCodeStr); } if (organizeFactory != NULL && strcmp("", organizeFactory) != 0 && strcmp("NULL", organizeFactory) != 0) { strcpy(organizeNameStr, facttoryNameStr); strcpy(organizeCodeStr, factoryCodeStr); } if (organizeName != NULL && strcmp("NULL", organizeName) != 0 && strcmp("", organizeName) != 0) { if (strcmp(organizeNameStr, "") != 0) { strcat(organizeNameStr, ","); } strcat(organizeNameStr, organizeName); } if (organizeCode != NULL && strcmp("NULL", organizeCode) != 0 && strcmp("", organizeCode) != 0) { if (strcmp(organizeCodeStr, "") != 0) { strcat(organizeCodeStr, ","); } strcat(organizeCodeStr, organizeCode); } } else if (strcmp("RB3_XZCPRevision", fu_object_type) == 0) { char* field1 = NULL; int outputColumn = 0, outputValueCount = 0; char*** outputValue = NULL; //物料分类特殊处理,通过数据库表匹配 char sql[1024] = "\0"; ITKCALL(AOM_UIF_ask_value(fu_rev, "rb3_cplx2", &field1)); if (field1 != NULL) { sprintf(sql, "select PCLASSCODE from PLM_ERP_CLASS_TABLE where PFIELD01= '%s'", field1); } if (QuerySQLNoInputParam(sql, &outputColumn, &outputValueCount, &outputValue) == -1 || outputValueCount == 0) { printf("提示:父级物料分类查询 失败, %s \n", sql); strcpy(organizeNameStr, facttoryNameStr); strcpy(organizeCodeStr, factoryCodeStr); } else { //printf("outputValueCount=%d\n", outputValueCount); //printf("outputColumn=%d\n", outputColumn); //free(sql); char* fuClassCode = NULL; if (outputValueCount > 0) { fuClassCode = outputValue[0][0]; //printf("父级物料分类====%s\n", fuClassCode); } if (strcmp("IN07", fuClassCode) == 0) { sprintf(factorySql2, "select PFACTORYCODE,PFACTORYNAME from PLM_FACTORY_ORGANIZE_TABLE where PTYPE= 'RB3_GNZCRevision' and PFIELD01= '滚动体类'"); printf("提示:factorySql2==%s\n", factorySql2); if (QuerySQLNoInputParam(factorySql2, &organizeColumn, &organizeValueCount, &organizeValue) == -1) { printf("提示:组织编码查询 失败, %s \n", factoryCodeStr); } //printf("factoryValueCount=%d\n", organizeValueCount); //printf("factoryColumn=%d\n", organizeColumn); if (organizeValueCount > 0) { organizeCode = organizeValue[0][0]; organizeName = organizeValue[0][1]; printf("组织名称2====%s\n", organizeName); printf("组织编码2====%s\n", organizeCode); } else { strcpy(organizeNameStr, facttoryNameStr); strcpy(organizeCodeStr, factoryCodeStr); } if (organizeName != NULL && strcmp("NULL", organizeName) != 0) { strcpy(organizeNameStr, organizeName); } if (organizeCode != NULL && strcmp("NULL", organizeCode) != 0) { strcpy(organizeCodeStr, organizeCode); } } else { strcpy(organizeNameStr, facttoryNameStr); strcpy(organizeCodeStr, factoryCodeStr); } if (fuClassCode != NULL) { DOFREE(fuClassCode); } } if (field1 != NULL) { DOFREE(field1); } if (outputValue != NULL) { DOFREE(outputValue); } } else if (strcmp("RB3_BZJRevision", fu_object_type) == 0) { char* field1 = NULL; int outputColumn = 0, outputValueCount = 0; char*** outputValue = NULL; //物料分类特殊处理,通过数据库表匹配 char sql[1024] = "\0"; ITKCALL(AOM_UIF_ask_value(fu_rev, "object_name", &field1)); if (field1 != NULL) { sprintf(sql, "select PCLASSCODE from PLM_ERP_CLASS_TABLE where PFIELD01= '%s'", field1); } if (QuerySQLNoInputParam(sql, &outputColumn, &outputValueCount, &outputValue) == -1 || outputValueCount == 0) { printf("提示:父级物料分类查询 失败, %s \n", sql); strcpy(organizeNameStr, facttoryNameStr); strcpy(organizeCodeStr, factoryCodeStr); } else { //printf("outputValueCount=%d\n", outputValueCount); //printf("outputColumn=%d\n", outputColumn); //free(sql); char* fuClassCode = NULL; if (outputValueCount > 0) { fuClassCode = outputValue[0][0]; //printf("父级物料分类====%s\n", fuClassCode); } if (strcmp("IN07", fuClassCode) == 0) { sprintf(factorySql2, "select PFACTORY,PFACTORYCODE,PFACTORYNAME from PLM_FACTORY_ORGANIZE_TABLE where CLASSCODE= '%s'", fuClassCode); printf("提示:factorySql2==%s\n", factorySql2); if (QuerySQLNoInputParam(factorySql2, &organizeColumn, &organizeValueCount, &organizeValue) == -1) { printf("提示:组织编码查询 失败, %s \n", factoryCodeStr); } //printf("factoryValueCount=%d\n", organizeValueCount); //printf("factoryColumn=%d\n", organizeColumn); if (organizeValueCount > 0) { organizeFactory = organizeValue[0][0]; organizeCode = organizeValue[0][1]; organizeName = organizeValue[0][2]; printf("组织工厂====%s\n", organizeFactory); printf("组织名称2====%s\n", organizeName); printf("组织编码2====%s\n", organizeCode); } else { strcpy(organizeNameStr, facttoryNameStr); strcpy(organizeCodeStr, factoryCodeStr); } if (organizeFactory != NULL && strcmp("", organizeFactory) != 0 && strcmp("NULL", organizeFactory) != 0) { strcpy(organizeNameStr, facttoryNameStr); strcpy(organizeCodeStr, factoryCodeStr); } if (organizeName != NULL && strcmp("NULL", organizeName) != 0 && strcmp("", organizeName) != 0) { if (strcmp(organizeNameStr, "") != 0) { strcat(organizeNameStr, ","); } strcat(organizeNameStr, organizeName); } if (organizeCode != NULL && strcmp("NULL", organizeCode) != 0 && strcmp("", organizeCode) != 0) { if (strcmp(organizeCodeStr, "") != 0) { strcat(organizeCodeStr, ","); } strcat(organizeCodeStr, organizeCode); } } else { strcpy(organizeNameStr, facttoryNameStr); strcpy(organizeCodeStr, factoryCodeStr); } if (fuClassCode != NULL) { DOFREE(fuClassCode); } } if (field1 != NULL) { DOFREE(field1); } if (outputValue != NULL) { DOFREE(outputValue); } } else { strcpy(organizeNameStr, facttoryNameStr); strcpy(organizeCodeStr, factoryCodeStr); } //if (strcmp("RB3_ZCRevision", fu_object_type) == 0) { // if (strstr(fu_object_name, "轴承") == NULL) { // sprintf(factorySql2, "select PFACTORY,PFACTORYCODE,PFACTORYNAME from PLM_FACTORY_ORGANIZE_TABLE where PFIELD01= '%s'", fu_object_name); // printf("提示:factorySql2==%s\n", factorySql2); // if (QuerySQLNoInputParam(factorySql2, &organizeColumn, &organizeValueCount, &organizeValue) == -1) // { // printf("提示:组织编码查询 失败, %s \n", factorySql2); // } // printf("factoryValueCount=%d\n", organizeValueCount); // printf("factoryColumn=%d\n", organizeColumn); // organizeFactory = organizeValue[0][0]; // organizeCode = organizeValue[0][1]; // organizeName = organizeValue[0][2]; // printf("组织工厂====%s\n", organizeFactory); // printf("组织名称2====%s\n", organizeName); // printf("组织编码2====%s\n", organizeCode); // if (strcmp("", organizeFactory) != 0 && organizeFactory != NULL && strcmp("NULL", organizeFactory) != 0) { // strcpy(organizeNameStr, facttoryNameStr); // strcpy(organizeCodeStr, factoryCodeStr); // } // if (organizeName != NULL && strcmp("NULL", organizeName) != 0) { // if (strcmp(organizeNameStr, "") != 0) { // strcat(organizeNameStr, ","); // } // strcat(organizeNameStr, organizeName); // } // if (organizeCode != NULL && strcmp("NULL", organizeCode) != 0) { // if (strcmp(organizeCodeStr, "") != 0) { // strcat(organizeCodeStr, ","); // } // strcat(organizeCodeStr, organizeCode); // } // } // else { // strcpy(organizeNameStr, facttoryNameStr); // strcpy(organizeCodeStr, factoryCodeStr); // } //} //else if (strcmp("RB3_XZCPRevision", fu_object_type) == 0) { // char* field1 = NULL; // int outputColumn = 0, outputValueCount = 0; // char*** outputValue = NULL; // //物料分类特殊处理,通过数据库表匹配 // char sql[1024] = "\0"; // ITKCALL(AOM_UIF_ask_value(fu_rev, "rb3_cplx2", &field1)); // if (field1 != NULL) { // sprintf(sql, "select PCLASSCODE from PLM_ERP_CLASS_TABLE where PFIELD01= '%s'", field1); // } // if (QuerySQLNoInputParam(sql, &outputColumn, &outputValueCount, &outputValue) == -1 || outputValueCount == 0) // { // printf("提示:父级物料分类查询 失败, %s \n", sql); // } // else { // printf("outputValueCount=%d\n", outputValueCount); // printf("outputColumn=%d\n", outputColumn); // //free(sql); // char* fuClassCode = NULL; // if (outputValueCount > 0) { // fuClassCode = outputValue[0][0]; // printf("父级物料分类====%s\n", fuClassCode); // } // if (strcmp("IN07", fuClassCode) == 0) { // sprintf(factorySql2, "select PFACTORYCODE,PFACTORYNAME from PLM_FACTORY_ORGANIZE_TABLE where PTYPE= 'RB3_GNZCRevision' and PFIELD01= '滚动体类'"); // } // else { // sprintf(factorySql2, "select PFACTORYCODE,PFACTORYNAME from PLM_FACTORY_ORGANIZE_TABLE where PTYPE= 'RB3_GNZCRevision' and PFIELD01= '除滚动体外产品'"); // } // printf("提示:factorySql2==%s\n", factorySql2); // if (QuerySQLNoInputParam(factorySql2, &organizeColumn, &organizeValueCount, &organizeValue) == -1) // { // printf("提示:组织编码查询 失败, %s \n", factoryCodeStr); // } // printf("factoryValueCount=%d\n", organizeValueCount); // printf("factoryColumn=%d\n", organizeColumn); // organizeCode = organizeValue[0][0]; // organizeName = organizeValue[0][1]; // printf("组织名称2====%s\n", organizeName); // printf("组织编码2====%s\n", organizeCode); // if (organizeName != NULL && strcmp("NULL", organizeName) != 0) { // strcpy(organizeNameStr, organizeName); // } // if (organizeCode != NULL && strcmp("NULL", organizeCode) != 0) { // strcpy(organizeCodeStr, organizeCode); // } // if (fuClassCode != NULL) { // DOFREE(fuClassCode); // } // } // if (field1 != NULL) { // DOFREE(field1); // } // if (outputValue != NULL) { // DOFREE(outputValue); // } //} //else if (strcmp("RB3_GNZCRevision", fu_object_type) == 0) { // sprintf(factorySql2, "select PFACTORYCODE,PFACTORYNAME from PLM_FACTORY_ORGANIZE_TABLE where PTYPE= 'RB3_GNZCRevision'"); // printf("提示:factorySql2==%s\n", factorySql2); // if (QuerySQLNoInputParam(factorySql2, &organizeColumn, &organizeValueCount, &organizeValue) == -1) // { // printf("提示:组织编码查询 失败, %s \n", factoryCodeStr); // } // printf("factoryValueCount=%d\n", organizeValueCount); // printf("factoryColumn=%d\n", organizeColumn); // organizeCode = organizeValue[0][0]; // organizeName = organizeValue[0][1]; // printf("组织名称2====%s\n", organizeName); // printf("组织编码2====%s\n", organizeCode); // if (organizeName != NULL && strcmp("NULL", organizeName) != 0) { // strcpy(organizeNameStr, organizeName); // } // if (organizeCode != NULL && strcmp("NULL", organizeCode) != 0) { // strcpy(organizeCodeStr, organizeCode); // } //} //else { // strcpy(organizeNameStr, facttoryNameStr); // strcpy(organizeCodeStr, factoryCodeStr); //} if (organizeCode != NULL) { DOFREE(organizeCode); } if (organizeName != NULL) { DOFREE(organizeName); } if (organizeFactory != NULL) { DOFREE(organizeFactory); } if (organizeValue != NULL) { DOFREE(organizeValue); } if (fu_class_code != NULL) { DOFREE(fu_class_code); } if (fu_class_id != NULL) { DOFREE(fu_class_id); } } printf("count:%d\n", count); // 初始化变量和预估最大长度 size_t buffer_size = 200000; // 初始大小,可根据实际情况调整 char* parameters = static_cast(malloc(buffer_size)); parameters[0] = '\0'; // 确保字符串以空字符开始 strcat(parameters, "{"); //AOM_ask_value_string(children_line[i], "fnd0bl_line_object_type", &itemType); strcat(parameters, "\"parentPartCode\":\""); strcat(parameters, fu_item_id == NULL ? "" : fu_item_id); strcat(parameters, "\","); strcat(parameters, "\"lifeCycleStages\":\""); strcat(parameters, fu_smzqzt == NULL ? "" : fu_smzqzt); strcat(parameters, "\","); strcat(parameters, "\"version\":\""); strcat(parameters, fu_item_revision_id == NULL ? "" : fu_item_revision_id); strcat(parameters, "\","); strcat(parameters, "\"componentType\":\""); strcat(parameters, fu_object_name == NULL ? "" : fu_object_name); strcat(parameters, "\","); strcat(parameters, "\"bomProductNumber1\":\""); strcat(parameters, fu_cph == NULL ? "" : fu_cph); strcat(parameters, "\","); strcat(parameters, "\"usingOrgName\":\""); strcat(parameters, organizeNameStr == NULL ? "" : organizeNameStr); strcat(parameters, "\","); strcat(parameters, "\"usingOrgCode\":\""); strcat(parameters, organizeCodeStr == NULL ? "" : organizeCodeStr); strcat(parameters, "\","); strcat(parameters, "\"bomDetail\":["); for (int i = 0; i < count; i++) { tag_t zi_rev = NULLTAG; AOM_ask_value_tag(children_line[i], "bl_line_object", &zi_rev); tag_t ico_tag = NULLTAG; char* classId = NULL; map attrMap; ICS_ask_classification_object(zi_rev, &ico_tag); if (ico_tag != NULLTAG) { ICS_ico_ask_class(ico_tag, &classId); printf(">> classId: %s\n", classId); attrMap = getClassAttrMap(classMap, classId); } char* itemType = NULL; AOM_ask_value_string(zi_rev, "object_type", &itemType); printf("object_type: %s\n", itemType); char* zi_item_id = NULL; char* zi_smzqzt = NULL; char* zi_item_revision_id = NULL; char* zi_object_name = NULL; char* zi_cph = NULL; ITKCALL(AOM_UIF_ask_value(zi_rev, "item_id", &zi_item_id)); ITKCALL(AOM_UIF_ask_value(zi_rev, "rb3_smzqzt", &zi_smzqzt)); ITKCALL(AOM_UIF_ask_value(zi_rev, "item_revision_id", &zi_item_revision_id)); ITKCALL(AOM_UIF_ask_value(zi_rev, "object_name", &zi_object_name)); ITKCALL(AOM_UIF_ask_value(zi_rev, "rb3_cph", &zi_cph)); char* zi_uom = NULL; char* zi_quantity = NULL; ITKCALL(AOM_UIF_ask_value(children_line[i], "bl_uom", &zi_uom)); ITKCALL(AOM_UIF_ask_value(children_line[i], "bl_quantity", &zi_quantity)); strcat(parameters, "{"); strcat(parameters, "\"componentCode\":\""); strcat(parameters, zi_item_id == NULL ? "" : zi_item_id); strcat(parameters, "\","); strcat(parameters, "\"theLifecycle\":\""); strcat(parameters, zi_smzqzt == NULL ? "" : zi_smzqzt); strcat(parameters, "\","); strcat(parameters, "\"bomObjectVersion\":\""); strcat(parameters, zi_item_revision_id == NULL ? "" : zi_item_revision_id); strcat(parameters, "\","); strcat(parameters, "\"bomObjectType\":\""); strcat(parameters, zi_object_name == NULL ? "" : zi_object_name); strcat(parameters, "\","); strcat(parameters, "\"bomProductNumber\":\""); strcat(parameters, zi_cph == NULL ? "" : zi_cph); strcat(parameters, "\","); strcat(parameters, "\"bomQuantity\":"); strcat(parameters, zi_quantity == NULL ? "" : zi_quantity); strcat(parameters, ","); char* classCode = NULL; getItemClass(status, itemType, ico_tag, zi_rev, attrMap, classId, &classCode); //处理子件单位转换逻辑 if (strstr(zi_uom, "比例系数") != NULL) { strcat(parameters, "\"parentItemBase\":1,"); } else { printf("zi_uom111 = %s \n", zi_uom); printf("classCode111 = %s \n", classCode); if (classCode != NULL) { if (strcmp("IN07", classCode) == 0 && strstr("L(粒)", zi_uom) != NULL) { zi_uom = "WL(万粒)"; strcat(parameters, "\"parentItemBase\":10000,"); } else if ((strcmp("IN01", classCode) == 0 || strcmp("IN56", classCode) == 0 || strcmp("IN59", classCode) == 0) && strstr("GM(克)", zi_uom) != NULL) { zi_uom = "T(吨)"; strcat(parameters, "\"parentItemBase\":1000000,"); } else if (strcmp("IN12", classCode) == 0 && strstr("GM(克)", zi_uom) != NULL) { zi_uom = "KG(千克)"; strcat(parameters, "\"parentItemBase\":1000,"); } else { strcat(parameters, "\"parentItemBase\":1,"); } } else { strcat(parameters, "\"parentItemBase\":1,"); } } strcat(parameters, "\"bomUnit\":\""); if (unitMap.find(zi_uom) != unitMap.end()) { strcat(parameters, unitMap[zi_uom].c_str()); } else { strcat(parameters, zi_uom); } strcat(parameters, "\""); strcat(parameters, "}"); //printf("parameters%d:%s\n", i,parameters); if (i < count - 1) { strcat(parameters, ","); } if (zi_item_id != NULL) { DOFREE(fu_item_id); } if (zi_smzqzt != NULL) { DOFREE(fu_smzqzt); } if (zi_item_revision_id != NULL) { DOFREE(fu_item_revision_id); } if (zi_object_name != NULL) { DOFREE(fu_object_name); } if (zi_cph != NULL) { DOFREE(fu_cph); } if (zi_uom != NULL) { DOFREE(zi_uom); } if (zi_quantity != NULL) { DOFREE(zi_quantity); } if (classCode != NULL) { DOFREE(classCode); } if (itemType != NULL) { DOFREE(itemType); } } if (fu_item_id != NULL) { DOFREE(fu_item_id); } if (fu_smzqzt != NULL) { DOFREE(fu_smzqzt); } if (fu_item_revision_id != NULL) { DOFREE(fu_item_revision_id); } if (fu_object_name != NULL) { DOFREE(fu_object_name); } if (fu_cph != NULL) { DOFREE(fu_cph); } if (fu_scgc != NULL) { DOFREE(fu_scgc); } if (fu_object_type != NULL) { DOFREE(fu_object_type); } DisConnServer(); strcat(parameters, "]}"); parameters_vec->push_back(parameters); } for (int i = 0; i < count; i++) { int child_count = 0; tag_t* zi_children_line = NULLTAG; BOM_line_ask_all_child_lines(children_line[i], &child_count, &zi_children_line); if (child_count > 0) { getBomLinePropertyNew(children_line[i], c_sql_values, parameters_vec, classMap, factoryMap, unitMap); } } if (children_line != NULL) { DOFREE(children_line); } } int RB_SendErpBom_New(EPM_action_message_t msg) { printf("=========================BOM下发到ERP Start===================\n"); //POM_AM__set_application_bypass(true); int ifail = ITK_ok; int attachments_num = 0; tag_t rootTask = NULLTAG, * attachments = NULLTAG; //获取任务对象 EPM_ask_root_task(msg.task, &rootTask); //获取任务目标对象 EPM_ask_attachments(rootTask, EPM_target_attachment, &attachments_num, &attachments); int c_sql_value_count = 0; char** c_sql_values; ITKCALL(PREF_ask_char_values("RB3_SQL_Connect2", &c_sql_value_count, &c_sql_values)); if (c_sql_value_count != 3) { printf("首选项 RB3_SQL_Connect2 配置错误 数量%d ", c_sql_value_count); return 1; } int unit_pref_cnt = 0; char** unit_pref_vals = NULL; //获取首选项的值 PREF_ask_char_values("RB_SEND_UNIT_MATCHING", &unit_pref_cnt, &unit_pref_vals); map unitMap; for (int i = 0; i < unit_pref_cnt; i++) { if (strstr(unit_pref_vals[i], "=") != NULL) { //按照-进行拆分。拆分条件 int valueCount = 0; char** valueChar = new char* [64]; //分割字符串 split(unit_pref_vals[i], "=", valueChar, &valueCount); unitMap[valueChar[0]] = valueChar[1]; DOFREE(valueChar); } } char* tc_root_file = getenv("tc_root"); //C:\Siemens\Teamcenter11 char errorMessage[100000] = "";//写入到文件的值 for (int i = 0; i < attachments_num; i++) { char* itemType = NULL; AOM_ask_value_string(attachments[i], "object_type", &itemType); printf("itemType:%s\n", itemType); //过滤掉非版本的对象 if (strcmp(itemType, "RB3_ZCRevision") == 0 || strcmp(itemType, "RB3_GNZCRevision") == 0 || strcmp(itemType, "RB3_XZCPRevision") == 0) { //获取子项 tag_t top_line = NULLTAG, window = NULLTAG; BOM_create_window(&window); //设置顶层BOM BOM_set_window_top_line(window, NULLTAG, attachments[i], NULLTAG, &top_line); //获取单个的json字符串 vector parameters_vec; map> classMap; map> factoryMap; printf("=========================遍历获取子件信息===================\n"); getBomLinePropertyNew(top_line, c_sql_values, ¶meters_vec, classMap, factoryMap, unitMap) DOFREE(itemType); char parameters[100000] = "";//写入到文件的值 strcat(parameters, "{\"data\":["); for (int i = 0; i < parameters_vec.size(); i++) { strcat(parameters, parameters_vec[i].c_str()); if (i < parameters_vec.size() - 1) { strcat(parameters, ","); } } strcat(parameters, "],\"control\":{\"keydata\":null,\"ifid\": null,\"ifno\":\"JDE_MDM_BOM_01\",\"suser\": null,\"sysid\": null}}"); //获取当前时间 time_t now = time(0); tm* p = localtime(&now); char date[128] = ""; sprintf_s(date, "%04d%02d%02d%02d%02d%02d", 1900 + p->tm_year, p->tm_mon + 1, p->tm_mday, p->tm_hour, p->tm_min, p->tm_sec); //把数据用写入文件 char data_file[SS_MAXPATHLEN] = ""; strcat(data_file, tc_root_file); strcat(data_file, "\\"); strcat(data_file, date); strcat(data_file, ".txt"); printf("data_file: %s\n", data_file); ofstream file; file.open(data_file); file << parameters << endl; // 使用与cout同样的方式进行写入 file.close(); string strResult; //cmd指令 char cmd[256] = ""; strcpy(cmd, "java -jar \""); ////strcat(cmd, jar_file); strcat(cmd, tc_root_file); strcat(cmd, "\\portal\\plugins\\"); strcat(cmd, "RB_SendErp_New.jar"); strcat(cmd, "\" "); //传参 //cout << data_file << endl; strcat(cmd, data_file); //用来传递本流程的流程名称(@分割) strcat(cmd, "@BOM"); //strcat(cmd,handler_name); //printf("路径:\n%s\n", cmd); char buf[8000] = { 0 }; FILE* pf = NULL; if ((pf = _popen(cmd, "r")) == NULL) { printf("接口返回:\n%s", "1"); } while (fgets(buf, sizeof buf, pf)) { strResult += buf; } _pclose(pf); cout << strResult << endl; unsigned int iSize = strResult.size(); if (iSize > 0 && strResult[iSize - 1] == '\n' && strlen(parameters) > 0) { strResult = strResult.substr(0, iSize - 1); cout << strResult << endl; if (strstr(strResult.c_str(), "\"code\":200") == NULL) { printf("下发成功\n"); strcat(errorMessage, strResult.c_str()); } } DOFREE(itemType); } } MEM_free(attachments); MEM_free(c_sql_values); if (ifail == 1) { EMH_store_error_s1(EMH_severity_user_error, EMH_USER_error_base, errorMessage); } printf("=========================BOM下发到ERP End===================\n"); return ifail; } void getGYLXBomLinePropertyNew(tag_t topLine, char** c_sql_values, vector* parameters_vec, map unitMap, map> classMap, map workCenterMap) { map> ziVecMap; tag_t* children_line = NULLTAG; int count = 0; map> factoryMap; ITKCALL(BOM_line_ask_all_child_lines(topLine, &count, &children_line)); if (count > 0) { int status = ConnServer(c_sql_values[1], c_sql_values[2], c_sql_values[0]); //获取工艺路线关联的制造目标对象 tag_t fu_rev = NULLTAG; ITKCALL(AOM_ask_value_tag(topLine, "bl_line_object", &fu_rev)); tag_t* wl_items = NULLTAG; int wl_count = 0; ITKCALL(AOM_ask_value_tags(fu_rev, "IMAN_METarget", &wl_count, &wl_items)); char* fu_item_id = NULL; ITKCALL(AOM_UIF_ask_value(fu_rev, "item_id", &fu_item_id)); int valueCount = 0; char** valueChar = new char* [64]; if (strstr(fu_item_id, "_") != NULL) { //按照-进行拆分。拆分条件 //分割字符串 split(fu_item_id, "_", valueChar, &valueCount); } char* describe1 = NULL;//rb3_ms char* partNumber = NULL;//rb3_jh char* productId = NULL;//rb3_cph char* assemblyType = NULL;//rb3_zclx char* lifecycleState = NULL;//rb3_smzqzt char* item_type = NULL; if (wl_count > 0) { tag_t wl_item = wl_items[0]; ITKCALL(AOM_ask_value_string(wl_item, "object_type", &item_type)); printf("item_type = %s \n", item_type); if (strcmp("RB3_ZCRevision", item_type) == 0) { ITKCALL(AOM_UIF_ask_value(wl_item, "rb3_ms", &describe1)); ITKCALL(AOM_UIF_ask_value(wl_item, "rb3_cph", &productId)); ITKCALL(AOM_UIF_ask_value(wl_item, "rb3_zclx", &assemblyType)); ITKCALL(AOM_UIF_ask_value(wl_item, "rb3_smzqzt", &lifecycleState)); } else if (strcmp("RB3_LBJRevision", item_type) == 0) { ITKCALL(AOM_UIF_ask_value(wl_item, "rb3_jh", &partNumber)); } } printf("count:%d\n", count); for (int i = 0; i < count; i++) { char* wlbm = NULL;//bl_MEOPRevision_rb3_wlbm materialCode 物料编码 char* jgbz = NULL;//bl_MEOPRevision_rb3_jgbz processingSteps 加工步骤 ITKCALL(AOM_UIF_ask_value(children_line[i], "bl_MEOPRevision_rb3_wlbm", &wlbm)); ITKCALL(AOM_UIF_ask_value(children_line[i], "bl_MEOPRevision_rb3_jgbz", &jgbz)); if (wlbm == NULL || strcmp("", wlbm) == 0 || jgbz == NULL || strcmp("", jgbz) == 0) { if (wlbm != NULL) { DOFREE(wlbm); } if (jgbz != NULL) { DOFREE(jgbz); } continue; } char* jgbz_rel = NULL; ITKCALL(AOM_ask_value_string(children_line[i], "bl_MEOPRevision_rb3_jgbz", &jgbz_rel)); char processRouteCode[64] = "\0"; char processRouteName[64] = "\0"; strcpy(processRouteCode, wlbm); strcat(processRouteCode, jgbz_rel); strcpy(processRouteName, wlbm); strcat(processRouteName, jgbz); if (ziVecMap.find(processRouteCode) == ziVecMap.end()) { vector ziVec; ziVec.push_back(children_line[i]); ziVecMap.insert(std::make_pair(processRouteCode, ziVec)); } else { vector ziVec = ziVecMap[processRouteCode]; //printf("parameters_map存值 \n"); ziVec.push_back(children_line[i]); // 删除元素 ziVecMap.erase(processRouteCode); ziVecMap.insert(std::make_pair(processRouteCode, ziVec)); } } for (std::map>::iterator it = ziVecMap.begin(); it != ziVecMap.end(); ++it) { string key = it->first; vector ziVec = it->second; char fu_params[10000] = "\0"; for (int i = 0; i < ziVec.size(); i++) { tag_t zi_tag = ziVec[i]; char* wlbm = NULL;//bl_MEOPRevision_rb3_wlbm materialCode 物料编码 ITKCALL(AOM_UIF_ask_value(zi_tag, "bl_MEOPRevision_rb3_wlbm", &wlbm)); char* jgbz = NULL;//bl_MEOPRevision_rb3_jgbz processingSteps 加工步骤 char* jgbz_rel = NULL; ITKCALL(AOM_UIF_ask_value(zi_tag, "bl_MEOPRevision_rb3_jgbz", &jgbz)); ITKCALL(AOM_ask_value_string(zi_tag, "bl_MEOPRevision_rb3_jgbz", &jgbz_rel)); char* sfww = NULL;//bl_MEOPRevision_rb3_sfww whetherOutsource 是否委外 ITKCALL(AOM_UIF_ask_value(zi_tag, "bl_MEOPRevision_rb3_sfww", &sfww)); char* sfbg = NULL;//bl_MEOPRevision_rb3_sfbg whetherReportWork 是否报工 ITKCALL(AOM_UIF_ask_value(zi_tag, "bl_MEOPRevision_rb3_sfbg", &sfbg)); char* bzgs1 = NULL;//bl_MEOPRevision_rb3_bzgs1 standardWorkingHours 标准工时 ITKCALL(AOM_UIF_ask_value(zi_tag, "bl_MEOPRevision_rb3_bzgs1", &bzgs1)); char bzgs_str[64] = "\0"; if (bzgs1 != NULL && strcmp(bzgs1, "") != 0 && strcmp(bzgs1, " ") != 0) { double bzgs_d = std::stod(bzgs1); //ITKCALL(AOM_ask_value_double(zi_tag, "bl_MEOPRevision_rb3_bzgs1", &bzgs1)); bzgs_d = round(bzgs_d * 100) / 100; //long lValue = static_cast(bzgs_d); // 转换为long if (bzgs_d > 0) { sprintf(bzgs_str, "%.2f", bzgs_d); } else { sprintf(bzgs_str, "%0.2f", bzgs_d); } printf("bzgs_str: %s\n", bzgs_str); } char* bzgsdw = NULL;//bl_MEOPRevision_rb3_bzgsdw standardWorkingHoursUnit 标准工时单位 ITKCALL(AOM_UIF_ask_value(zi_tag, "bl_MEOPRevision_rb3_bzgsdw", &bzgsdw)); char* sfjy = NULL;//bl_MEOPRevision_rb3_sfjy whetherVerify 是否检验 ITKCALL(AOM_UIF_ask_value(zi_tag, "bl_MEOPRevision_rb3_sfjy", &sfjy)); char* gzzx = NULL;//bl_MEOPRevision_rb3_gzzx workCenter 工作中心 ITKCALL(AOM_UIF_ask_value(zi_tag, "bl_MEOPRevision_rb3_gzzx", &gzzx)); char* sepuence_no = NULL;//bl_sepuence_no findNumber 查找编号 ITKCALL(AOM_UIF_ask_value(zi_tag, "bl_sequence_no", &sepuence_no)); char* quantity = NULL;//bl_quantity quantity 数量 ITKCALL(AOM_UIF_ask_value(zi_tag, "bl_quantity", &quantity)); char* uom = NULL;//bl_uom unitMeasurement 度量单位 ITKCALL(AOM_UIF_ask_value(zi_tag, "bl_uom", &uom)); int factoryCount = 0; char* scgc = NULL;//bl_MEOPRevision_rb3_scgc unitMeasurement 度量单位 ITKCALL(AOM_UIF_ask_value(zi_tag, "bl_MEOPRevision_rb3_scgc", &scgc)); if (strstr(scgc, ",") != NULL) { removeChar(scgc, ','); } char* gxh = NULL;//RB3_GXH processNumber 标准工序号 ITKCALL(AOM_UIF_ask_value(zi_tag, "RB3_GXH", &gxh)); //printf("jgbz = %s\n", jgbz); //printf("jgbz_rel = %s\n", jgbz_rel); //printf("sfww = %s\n", sfww); //printf("sfbg = %s\n", sfbg); //printf("bzgs1 = %s\n", bzgs1); //printf("bzgsdw = %s\n", bzgsdw); //printf("sfjy = %s\n", sfjy); //printf("gzzx = %s\n", gzzx); //printf("sepuence_no = %s\n", sepuence_no); //printf("quantity = %s\n", quantity); //printf("uom = %s\n", uom); //printf("scgc = %s\n", scgc); //printf("gxh = %s\n", gxh); char* newStr = NULL; if (strcmp("", scgc) != 0) { newStr = removeSpaces(scgc); } printf("newStr = %s\n", newStr); tag_t zi_rev = NULLTAG; ITKCALL(AOM_ask_value_tag(zi_tag, "bl_line_object", &zi_rev)); char* item_id = NULL;//item_id componentId 工序ID ITKCALL(AOM_UIF_ask_value(zi_rev, "item_id", &item_id)); char* object_name = NULL;//object_name componentName 工序名称 ITKCALL(AOM_UIF_ask_value(zi_rev, "object_name", &object_name)); //分类属性名称对应id map存储 tag_t ico_tag = NULLTAG; char* cplb_disValue = NULL; char* classId = NULL; map attrMap; ICS_ask_classification_object(zi_rev, &ico_tag); if (ico_tag != NULLTAG) { if (classMap.find(classId) == classMap.end()) { int count = 0; int* ids; int* arraySize; int* formats; int* options; char** names; char** shortNames; char** annotations; char** unit; char** minValues; char** maxValues; char** defaultValues; char** descriptions; ITKCALL(ICS_class_describe_attributes(classId, &count, &ids, &names, &shortNames, &annotations, &arraySize, &formats, &unit, &minValues, &maxValues, &defaultValues, &descriptions, &options)); for (int i = 0; i < count; i++) { attrMap.insert(pair(names[i], ids[i])); } classMap.insert(pair>(classId, attrMap)); if (ids != NULL) { DOFREE(ids); } if (arraySize != NULL) { DOFREE(arraySize); } if (formats != NULL) { DOFREE(formats); } if (options != NULL) { DOFREE(options); } if (names != NULL) { DOFREE(names); } if (shortNames != NULL) { DOFREE(shortNames); } if (annotations != NULL) { DOFREE(annotations); } if (unit != NULL) { DOFREE(unit); } if (minValues != NULL) { DOFREE(minValues); } if (maxValues != NULL) { DOFREE(maxValues); } if (defaultValues != NULL) { DOFREE(defaultValues); } if (descriptions != NULL) { DOFREE(descriptions); } } else { attrMap = classMap[classId]; } if (attrMap.find("产品类别") != attrMap.end()) { char* cplb = NULL; ICS_ask_attribute_value(ico_tag, "产品类别", &cplb); if (cplb != NULL) { int id = attrMap["产品类别"]; getClassValue(cplb, id, &cplb_disValue); DOFREE(cplb); } } } char* rev_id = NULL;//object_name version 版本 ITKCALL(AOM_UIF_ask_value(zi_rev, "item_revision_id", &rev_id)); char processRouteCode[64] = "\0"; char processRouteName[64] = "\0"; strcpy(processRouteCode, wlbm); strcat(processRouteCode, jgbz_rel); strcpy(processRouteName, wlbm); strcat(processRouteName, jgbz); //printf("processRouteCode =%s\n", processRouteCode); //printf("processRouteName =%s\n", processRouteName); char* factoryCode = NULL; char* factoryName = NULL; string factoryCodeStr = ""; string facttoryNameStr = ""; if (newStr != NULL) { if (factoryMap.find(newStr) != factoryMap.end()) { vector factoryVec = factoryMap[newStr]; factoryCodeStr = factoryVec[0]; facttoryNameStr = factoryVec[1]; } else { if (status) { printf("提示:中间数据表访问失败\n"); } else { //工厂组织编码特殊处理,通过数据库表匹配 int factoryColumn = 0, factoryValueCount = 0; char*** factoryValue = NULL; char factorySql[128] = "\0"; sprintf(factorySql, "select PFACTORYCODE,PFACTORYNAME from PLM_ERP_FACTORY_TABLE where PFACTORY= '%s'", newStr); printf("提示:factorySql==%s\n", factorySql); if (QuerySQLNoInputParam(factorySql, &factoryColumn, &factoryValueCount, &factoryValue) == -1) { printf("提示:组织编码查询 失败, %s \n", factorySql); } printf("factoryValueCount=%d\n", factoryValueCount); printf("factoryColumn=%d\n", factoryColumn); if (factoryValueCount > 0) { factoryCode = factoryValue[0][0]; factoryName = factoryValue[0][1]; vector factoryVec; factoryVec.push_back(factoryCode); factoryVec.push_back(factoryName); factoryMap[newStr] = factoryVec; printf("组织编码====%s\n", factoryCode); printf("组织名称====%s\n", factoryName); } if (factoryValue != NULL) { DOFREE(factoryValue); } } } } if (strcmp("", fu_params) == 0) { strcat(fu_params, "{\"processRouteCode\":\""); strcat(fu_params, processRouteCode); strcat(fu_params, "\","); strcat(fu_params, "\"processRouteName\":\""); strcat(fu_params, processRouteName); strcat(fu_params, "\","); strcat(fu_params, "\"productionFactoryCode\":\""); if (factoryCode != NULL) { strcat(fu_params, factoryCode); } else { strcat(fu_params, factoryCodeStr.c_str()); } strcat(fu_params, "\","); strcat(fu_params, "\"processingSteps\":\""); strcat(fu_params, jgbz); strcat(fu_params, "\","); strcat(fu_params, "\"productionFactoryName\":\""); if (factoryName != NULL) { strcat(fu_params, factoryName); } else { strcat(fu_params, facttoryNameStr.c_str()); } strcat(fu_params, "\","); strcat(fu_params, "\"materialCode\":\""); strcat(fu_params, wlbm); strcat(fu_params, "\","); strcat(fu_params, "\"version\":\""); if (valueCount > 0) { strcat(fu_params, valueChar[1]); strcat(fu_params, rev_id); } else { strcat(fu_params, rev_id); } strcat(fu_params, "\","); strcat(fu_params, "\"standardWorkingHoursUnit\":\""); strcat(fu_params, bzgsdw); strcat(fu_params, "\","); strcat(fu_params, "\"processDetailed\":\ ["); } strcat(fu_params, "{"); strcat(fu_params, "\"componentId\":\""); strcat(fu_params, item_id); strcat(fu_params, "\","); strcat(fu_params, "\"describe1\":\""); if (describe1 != NULL) { strcat(fu_params, describe1); } strcat(fu_params, "\","); strcat(fu_params, "\"processNumber\":\""); strcat(fu_params, gxh); strcat(fu_params, "\","); strcat(fu_params, "\"findNumber\":\""); strcat(fu_params, sepuence_no); strcat(fu_params, "\","); strcat(fu_params, "\"componentName\":\""); //if (cplb_disValue != NULL) { // strcat(fu_params, cplb_disValue); // strcat(fu_params, "-"); //} strcat(fu_params, object_name); strcat(fu_params, "\","); strcat(fu_params, "\"whetherOutsource\":\""); strcat(fu_params, sfww); strcat(fu_params, "\","); strcat(fu_params, "\"whetherReportWork\":\""); strcat(fu_params, sfbg); strcat(fu_params, "\","); strcat(fu_params, "\"standardWorkingHours\":\""); strcat(fu_params, bzgs_str); strcat(fu_params, "\","); strcat(fu_params, "\"whetherVerify\":\""); strcat(fu_params, sfjy); strcat(fu_params, "\","); strcat(fu_params, "\"workCenter\":\""); if (workCenterMap.find(gzzx) != workCenterMap.end()) { strcat(fu_params, workCenterMap[gzzx].c_str()); } else { strcat(fu_params, gzzx); } strcat(fu_params, "\","); strcat(fu_params, "\"unitMeasurement\":\""); if (unitMap.find(uom) != unitMap.end()) { strcat(fu_params, unitMap[uom].c_str()); } else { strcat(fu_params, uom); } strcat(fu_params, "\","); strcat(fu_params, "\"quantity\":\""); strcat(fu_params, quantity); strcat(fu_params, "\","); strcat(fu_params, "\"partNumber\":\""); if (partNumber != NULL) { strcat(fu_params, partNumber); } strcat(fu_params, "\","); strcat(fu_params, "\"productId\":\""); if (productId != NULL) { strcat(fu_params, productId); } strcat(fu_params, "\","); strcat(fu_params, "\"assemblyType\":\""); if (assemblyType != NULL) { strcat(fu_params, assemblyType); } strcat(fu_params, "\","); strcat(fu_params, "\"lifecycleState\":\""); if (lifecycleState != NULL) { strcat(fu_params, lifecycleState); } strcat(fu_params, "\"}"); if (i < ziVec.size() - 1) { strcat(fu_params, ","); } if (factoryCode != NULL) { DOFREE(factoryCode); } if (factoryName != NULL) { DOFREE(factoryName); } if (zi_tag != NULL) { DOFREE(zi_tag); } if (zi_rev != NULL) { DOFREE(zi_rev); } if (scgc != NULL) { DOFREE(scgc); } if (gxh != NULL) { DOFREE(gxh); } if (object_name != NULL) { DOFREE(object_name); } if (rev_id != NULL) { DOFREE(rev_id); } if (jgbz != NULL) { DOFREE(jgbz); } if (jgbz_rel != NULL) { DOFREE(jgbz_rel); } if (sfww != NULL) { DOFREE(sfww); } if (sfbg != NULL) { DOFREE(sfbg); } if (bzgs1 != NULL) { DOFREE(bzgs1); } if (bzgsdw != NULL) { DOFREE(bzgsdw); } if (sfjy != NULL) { DOFREE(sfjy); } if (gzzx != NULL) { DOFREE(gzzx); } if (sepuence_no != NULL) { DOFREE(sepuence_no); } if (quantity != NULL) { DOFREE(quantity); } if (uom != NULL) { DOFREE(uom); } if (classId != NULL) { DOFREE(classId); } if (cplb_disValue != NULL) { DOFREE(cplb_disValue); } } strcat(fu_params, "]}"); parameters_vec->push_back(fu_params); } if (fu_item_id != NULL) { DOFREE(fu_item_id); } if (describe1 != NULL) { DOFREE(describe1); } if (partNumber != NULL) { DOFREE(partNumber); } if (productId != NULL) { DOFREE(productId); } if (assemblyType != NULL) { DOFREE(assemblyType); } if (lifecycleState != NULL) { DOFREE(lifecycleState); } DisConnServer(); } if (children_line != NULL) { DOFREE(children_line); } factoryMap.clear(); } int RB_Send_MDM_GYLX_New(EPM_action_message_t msg) { printf("=========================工艺路线下发到mdm Start===================\n"); //POM_AM__set_application_bypass(true); int ifail = ITK_ok; int attachments_num = 0; tag_t rootTask = NULLTAG, * attachments = NULLTAG; //获取任务对象 EPM_ask_root_task(msg.task, &rootTask); //获取任务目标对象 EPM_ask_attachments(rootTask, EPM_target_attachment, &attachments_num, &attachments); int c_sql_value_count = 0; char** c_sql_values; ITKCALL(PREF_ask_char_values("RB3_SQL_Connect2", &c_sql_value_count, &c_sql_values)); if (c_sql_value_count != 3) { printf("首选项 RB3_SQL_Connect2 配置错误 数量%d ", c_sql_value_count); return 1; } int unit_pref_cnt = 0; char** unit_pref_vals = NULL; //获取首选项的值 PREF_ask_char_values("RB_SEND_UNIT_MATCHING", &unit_pref_cnt, &unit_pref_vals); map unitMap; for (int i = 0; i < unit_pref_cnt; i++) { if (strstr(unit_pref_vals[i], "=") != NULL) { //按照-进行拆分。拆分条件 int valueCount = 0; char** valueChar = new char* [64]; //分割字符串 split(unit_pref_vals[i], "=", valueChar, &valueCount); unitMap[valueChar[0]] = valueChar[1]; DOFREE(valueChar); } } int workCenter_pref_cnt = 0; char** workCenter_pref_vals = NULL; //获取首选项的值 PREF_ask_char_values("RB3_GYLX_workCenter", &workCenter_pref_cnt, &workCenter_pref_vals); map workCenterMap; for (int i = 0; i < workCenter_pref_cnt; i++) { if (strstr(workCenter_pref_vals[i], "=") != NULL) { //按照-进行拆分。拆分条件 int valueCount = 0; char** valueChar = new char* [64]; //分割字符串 split(workCenter_pref_vals[i], "=", valueChar, &valueCount); workCenterMap[valueChar[0]] = valueChar[1]; DOFREE(valueChar); } } map> classMap; char* tc_root_file = getenv("tc_root"); //C:\Siemens\Teamcenter11 for (int i = 0; i < attachments_num; i++) { char* itemType = NULL; AOM_ask_value_string(attachments[i], "object_type", &itemType); printf("itemType%s Start===================\n", itemType); //过滤掉非版本的对象 if (strcmp(itemType, "MEProcessRevision") != 0) { DOFREE(itemType); continue; } //获取子项 tag_t top_line = NULLTAG, window = NULLTAG; BOM_create_window(&window); //设置顶层BOM BOM_set_window_top_line(window, NULLTAG, attachments[i], NULLTAG, &top_line); //获取单个的json字符串 vector parameters_vec; getGYLXBomLinePropertyNew(top_line, c_sql_values, ¶meters_vec, unitMap, classMap, workCenterMap); char parameters[100000] = "";//写入到文件的值 strcat(parameters, "{\"data\":["); for (int i = 0; i < parameters_vec.size(); i++) { strcat(parameters, parameters_vec[i].c_str()); if (i < parameters_vec.size() - 1) { strcat(parameters, ","); } } strcat(parameters, "],\"control\":{\"keydata\":null,\"ifid\": null,\"ifno\":\"TC_to_MDM_GYLX\",\"suser\": null,\"sysid\": null}}"); //获取当前时间 time_t now = time(0); tm* p = localtime(&now); char date[128] = ""; sprintf_s(date, "%04d%02d%02d%02d%02d%02d", 1900 + p->tm_year, p->tm_mon + 1, p->tm_mday, p->tm_hour, p->tm_min, p->tm_sec); //把数据用写入文件 char data_file[SS_MAXPATHLEN] = ""; strcat(data_file, tc_root_file); strcat(data_file, "\\"); strcat(data_file, date); strcat(data_file, ".txt"); printf("data_file: %s\n", data_file); ofstream file; file.open(data_file); file << parameters << endl; // 使用与cout同样的方式进行写入 file.close(); string strResult; //cmd指令 char cmd[256] = ""; strcpy(cmd, "java -jar \""); ////strcat(cmd, jar_file); strcat(cmd, tc_root_file); strcat(cmd, "\\portal\\plugins\\"); strcat(cmd, "RB_SendErp_New.jar"); strcat(cmd, "\" "); //传参 //cout << data_file << endl; strcat(cmd, data_file); //用来传递本流程的流程名称(@分割) strcat(cmd, "@GYLX"); //strcat(cmd,handler_name); //printf("路径:\n%s\n", cmd); char buf[8000] = { 0 }; FILE* pf = NULL; if ((pf = _popen(cmd, "r")) == NULL) { printf("接口返回:\n%s", "1"); } while (fgets(buf, sizeof buf, pf)) { strResult += buf; } _pclose(pf); unsigned int iSize = strResult.size(); if (iSize > 0 && strResult[iSize - 1] == '\n' && strlen(parameters) > 0) { strResult = strResult.substr(0, iSize - 1); cout << strResult << endl; if (strstr(strResult.c_str(), "\"code\":200") == NULL) { printf("下发成功\n"); } } MEM_free(itemType); } MEM_free(attachments); MEM_free(c_sql_values); printf("=========================工艺路线下发到mdm End===================\n"); return ifail; }