#define _CRT_SECURE_NO_WARNINGS #include "epm_handler_common.h" int RB_SendErpItem(EPM_action_message_t msg) { printf("=========================对象下发到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 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; char* deleteTZRevision = new char[2048];//过滤的图纸版本 //获取首选项的值 PREF_ask_char_values("RB_ItemSendErpProperty", &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])); } //+++获取要过滤的所有版本 else if(strstr(pref_vals[j], "delete=") != NULL){ strcpy(deleteTZRevision,pref_vals[j]); } //+++ } 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\n", itemType); //过滤掉非版本的对象 if ((strstr(itemType, "Revision") == NULL) || (strstr(itemType, "Master") != NULL) || (strstr(itemType, "master") != NULL) || (strstr(itemType, "BOM") != NULL) || (strstr(itemType, "bom") != NULL) || (strstr(itemType, "Bom") != NULL)) { DOFREE(itemType); continue; } //+++过滤版本对象 if (strstr(deleteTZRevision, itemType) != NULL) { DOFREE(itemType); continue; } //+++ bool isStart = true; char parameters[100000] = "";//写入到文件的值 strcat(parameters, "getItemPropertys}}"); 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); string propertyNames = typePropertyType[itemType]; if (propertyNames.c_str() != NULL && propertyNames.size() > 0) { printf("propertyNames:%s\n", propertyNames.c_str()); int factoryNum = 0; char ** factoryValues = NULL; char * localization_status; logical master; //获取工厂 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], "FACTORYNAME") == 0) { printf("FACTORYNAME:%s\n", values[0]); if (strcmp(values[0], "/") != 0) { AOM_UIF_ask_localized_value_strings(attachments[i], values[0], "zh_CN", &factoryNum, &factoryValues, &localization_status, &master); } else { factoryNum = 1; factoryValues = new char*[64]; factoryValues[0] = ""; } //TCGetPropertyValue(attachments[i], "Revision", values[0], &factoryValues); //AOM_UIF_ask_values(attachments[i], values[0], &factoryNum, &factoryValues); } } } } else { //按照-进行拆分。拆分条件 int valueCount = 0; char ** valueChar = new char *[64]; //分割字符串 split(name, "=", valueChar, &valueCount); if (strcmp(valueChar[1], "FACTORYNAME") == 0) { printf("FACTORYNAME:%s\n", valueChar[0]); if (strcmp(valueChar[0], "/") != 0) { AOM_UIF_ask_localized_value_strings(attachments[i], valueChar[0], "zh_CN", &factoryNum, &factoryValues, &localization_status, &master); } else { factoryNum = 1; factoryValues = new char*[64]; factoryValues[0] = ""; } } } printf("factoryNum:%d\n", factoryNum); if (factoryNum > 0) { for (int j = 0; j < factoryNum; j++) { printf("factoryValues[j]:%s\n", factoryValues[j]); if (factoryValues[j] == NULL || strcmp(factoryValues[j], "") == 0) { continue; } if (isStart) { strcat(parameters, "{"); isStart = false; } else { strcat(parameters, ",{"); } //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); strcat(parameters, "\""); strcat(parameters, values[1] == NULL || strlen(values[1]) == 0 ? "" : values[1]); strcat(parameters, "\""); strcat(parameters, ":"); char * item_rev_value = NULL; TCGetPropertyValue(attachments[i], "Revision", values[0], &item_rev_value); if (strcmp(values[1], "FACTORYNAME") == 0) { item_rev_value = factoryValues[j]; } if (strcmp(values[1], "INPUTTIME") == 0) { item_rev_value = date; } if (strcmp(values[1], "VELOCITYOFVIBRATION") == 0) { char * zdjsd = NULL; char * zdsd = NULL; TCGetPropertyValue(attachments[i], "Revision", "class.110629", &zdjsd); TCGetPropertyValue(attachments[i], "Revision", "class.110630", &zdsd); if (zdjsd == NULL) { zdjsd = ""; } if (zdsd == NULL) { zdsd = ""; } if (strcmp(zdjsd, "无") == 0) { zdjsd = ""; } if (strcmp(zdsd, "无") == 0) { zdsd = ""; } if (zdjsd != NULL && strcmp(zdjsd, "") != 0 && strstr(zdjsd, ":") != NULL) { int TOLERANCE4Num = 0; char ** TOLERANCE4values = new char *[64]; //分割字符串 split(zdjsd, ":", TOLERANCE4values, &TOLERANCE4Num); zdjsd = TOLERANCE4values[0]; } if (zdsd != NULL && strcmp(zdsd, "") != 0 && strstr(zdsd, ":") != NULL) { int TOLERANCE4Num = 0; char ** TOLERANCE4values = new char *[64]; //分割字符串 split(zdsd, ":", TOLERANCE4values, &TOLERANCE4Num); zdsd = TOLERANCE4values[0]; } char revValue[256] = ""; strcat(revValue, zdjsd); strcat(revValue, zdsd); item_rev_value = revValue; /*if (zdjsd != NULL && strcmp(zdjsd, "") != 0 && zdsd != NULL && strcmp(zdsd, "") != 0) { if (strcmp(zdjsd, "无") == 0) { zdjsd = ""; } if (strcmp(zdsd, "无") == 0) { zdsd = ""; } char revValue[256] = ""; strcat(revValue, zdjsd); strcat(revValue, zdsd); item_rev_value = revValue; }*/ } if (strcmp(values[1], "TOLERANCE") == 0) { char * TOLERANCE1 = NULL; char * TOLERANCE2 = NULL; char * TOLERANCE3 = NULL; char * TOLERANCE4 = NULL; TCGetPropertyValue(attachments[i], "Revision", "class.110622", &TOLERANCE1); TCGetPropertyValue(attachments[i], "Revision", "class.112405", &TOLERANCE2); TCGetPropertyValue(attachments[i], "Revision", "class.112606", &TOLERANCE3); TCGetPropertyValue(attachments[i], "Revision", "class.110313", &TOLERANCE4); if (TOLERANCE1 != NULL && strcmp(TOLERANCE1, "") != 0) { item_rev_value = TOLERANCE1; } if (TOLERANCE2 != NULL && strcmp(TOLERANCE2, "") != 0) { item_rev_value = TOLERANCE2; } if (TOLERANCE3 != NULL && strcmp(TOLERANCE3, "") != 0) { item_rev_value = TOLERANCE3; } if (TOLERANCE4 != NULL && strcmp(TOLERANCE4, "") != 0) { item_rev_value = TOLERANCE4; } if (item_rev_value != NULL && strcmp(item_rev_value, "") != 0 && strstr(item_rev_value,":") != NULL) { int TOLERANCE4Num = 0; char ** TOLERANCE4values = new char *[64]; //分割字符串 split(item_rev_value, ":", TOLERANCE4values, &TOLERANCE4Num); item_rev_value = TOLERANCE4values[0]; } if (strcmp(item_rev_value, "无") == 0) { item_rev_value = ""; } } if (strcmp(values[1], "FIGURE") == 0) { string resultString = item_rev_value; if (strstr(item_rev_value, "SF-") != NULL) { resultString = replace_all_distinct(item_rev_value, "SF-", ""); } else if (strstr(item_rev_value, "XX-") != NULL) { resultString = replace_all_distinct(item_rev_value, "XX-", ""); } char resultChar[256] = ""; strcpy(resultChar, resultString.c_str()); *(resultChar + strlen(resultString.c_str())) = '\0'; item_rev_value = resultChar; } if (strstr(item_rev_value, "\\") != NULL) { string resultString = replace_all_distinct(item_rev_value, "\\", "&&"); char resultChar[256] = ""; strcpy(resultChar, resultString.c_str()); *(resultChar + strlen(resultString.c_str())) = '\0'; item_rev_value = resultChar; } if (strcmp(item_rev_value, "/") == 0) { item_rev_value = ""; } strcat(parameters, "\""); strcat(parameters, item_rev_value); strcat(parameters, "\""); if (k < valueCount - 1) { strcat(parameters, ","); } //printf("字符串%s\n", parameters); DOFREE(item_rev_value); } //printf("parameters:%s\n", parameters); } valueChar = NULL; } else { //按照-进行拆分。拆分条件 int valueCount = 0; char ** valueChar = new char *[64]; //分割字符串 split(name, "=", valueChar, &valueCount); strcat(parameters, "\""); strcat(parameters, valueChar[1] == NULL || strlen(valueChar[1]) == 0 ? "" : valueChar[1]); strcat(parameters, "\""); strcat(parameters, ":"); char * item_rev_value = NULL; TCGetPropertyValue(attachments[i], "Revision", valueChar[0], &item_rev_value); if (strcmp(valueChar[1], "FACTORYNAME") == 0) { item_rev_value = factoryValues[j]; } if (strcmp(valueChar[1], "INPUTTIME") == 0) { item_rev_value = date; } if (strcmp(valueChar[1], "VELOCITYOFVIBRATION") == 0) { char * zdjsd = NULL; char * zdsd = NULL; TCGetPropertyValue(attachments[i], "Revision", "class.110629", &zdjsd); TCGetPropertyValue(attachments[i], "Revision", "class.110630", &zdsd); if (zdjsd == NULL) { zdjsd = ""; } if (zdsd == NULL) { zdsd = ""; } if (strcmp(zdjsd, "无") == 0) { zdjsd = ""; } if (strcmp(zdsd, "无") == 0) { zdsd = ""; } if (zdjsd != NULL && strcmp(zdjsd, "") != 0 && strstr(zdjsd, ":") != NULL) { int TOLERANCE4Num = 0; char ** TOLERANCE4values = new char *[64]; //分割字符串 split(zdjsd, ":", TOLERANCE4values, &TOLERANCE4Num); zdjsd = TOLERANCE4values[0]; } if (zdsd != NULL && strcmp(zdsd, "") != 0 && strstr(zdsd, ":") != NULL) { int TOLERANCE4Num = 0; char ** TOLERANCE4values = new char *[64]; //分割字符串 split(zdsd, ":", TOLERANCE4values, &TOLERANCE4Num); zdsd = TOLERANCE4values[0]; } char revValue[256] = ""; strcat(revValue, zdjsd); strcat(revValue, zdsd); item_rev_value = revValue; /*if (zdjsd != NULL && strcmp(zdjsd, "") != 0 && zdsd != NULL && strcmp(zdsd, "") != 0) { if (strcmp(zdjsd, "无") == 0) { zdjsd = ""; } if (strcmp(zdsd, "无") == 0) { zdsd = ""; } char revValue[256] = ""; strcat(revValue, zdjsd); strcat(revValue, zdsd); item_rev_value = revValue; }*/ } if (strcmp(valueChar[1], "TOLERANCE") == 0) { char * TOLERANCE1 = NULL; char * TOLERANCE2 = NULL; char * TOLERANCE3 = NULL; char * TOLERANCE4 = NULL; TCGetPropertyValue(attachments[i], "Revision", "class.110622", &TOLERANCE1); TCGetPropertyValue(attachments[i], "Revision", "class.112405", &TOLERANCE2); TCGetPropertyValue(attachments[i], "Revision", "class.112606", &TOLERANCE3); TCGetPropertyValue(attachments[i], "Revision", "class.110313", &TOLERANCE4); if (TOLERANCE1 != NULL && strcmp(TOLERANCE1, "") != 0) { item_rev_value = TOLERANCE1; } if (TOLERANCE2 != NULL && strcmp(TOLERANCE2, "") != 0) { item_rev_value = TOLERANCE2; } if (TOLERANCE3 != NULL && strcmp(TOLERANCE3, "") != 0) { item_rev_value = TOLERANCE3; } if (TOLERANCE4 != NULL && strcmp(TOLERANCE4, "") != 0) { item_rev_value = TOLERANCE4; } if (item_rev_value != NULL && strcmp(item_rev_value, "") != 0 && strstr(item_rev_value, ":") != NULL) { int TOLERANCE4Num = 0; char ** TOLERANCE4values = new char *[64]; //分割字符串 split(item_rev_value, ":", TOLERANCE4values, &TOLERANCE4Num); item_rev_value = TOLERANCE4values[0]; } } if (strcmp(valueChar[1], "FIGURE") == 0) { string resultString = item_rev_value; if (strstr(item_rev_value, "SF-") != NULL) { resultString = replace_all_distinct(item_rev_value, "SF-", ""); } else if (strstr(item_rev_value, "XX-") != NULL) { resultString = replace_all_distinct(item_rev_value, "XX-", ""); } char resultChar[256] = ""; strcpy(resultChar, resultString.c_str()); *(resultChar + strlen(resultString.c_str())) = '\0'; item_rev_value = resultChar; } if (strstr(item_rev_value, "\\") != NULL) { string resultString = replace_all_distinct(item_rev_value, "\\", "&&"); char resultChar[256] = ""; strcpy(resultChar, resultString.c_str()); *(resultChar + strlen(resultString.c_str())) = '\0'; item_rev_value = resultChar; } if (strcmp(item_rev_value, "/") == 0) { item_rev_value = ""; } strcat(parameters, "\""); strcat(parameters, item_rev_value); strcat(parameters, "\""); DOFREE(item_rev_value); valueChar = NULL; } strcat(parameters, "}"); } } DOFREE(constName); name = NULL; } DOFREE(itemType); strcat(parameters, "]"); //把数据用写入文件 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; 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, strResult.c_str()); } printf("=========================对象下发到ERP End===================\n"); return ifail; } //int RB_SendErpItem_New(EPM_action_message_t msg) //{ // printf("=========================对象下发到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 pref_cnt = 0; // char** pref_vals = NULL; // //获取首选项的值 // PREF_ask_char_values("RB_ItemSendErp_Type_Attr", &pref_cnt, &pref_vals); // map> itemTypeMap; // map typePropertyType; // for (int i = 0; i < pref_cnt; i++) // { // if (strstr(pref_vals[i], ":") != NULL) // { // //按照-进行拆分。拆分条件 // int valueCount = 0; // char** valueChar = new char* [64]; // //分割字符串 // split(pref_vals[i], ":", valueChar, &valueCount); // if (strstr(valueChar[1], "|") != NULL) // { // int attrCount = 0; // char** attrChar = new char* [128]; // //分割字符串 // split(valueChar[1], "|", attrChar, &attrCount); // for (int j = 0; j < attrCount; j++) // { // if (strstr(attrChar[j], "=") != NULL) // { // int count = 0; // char** attrs = new char* [64]; // //分割字符串 // split(attrChar[j], "=", attrs, &count); // typePropertyType[attrs[0]] = attrs[1]; // DOFREE(attrs); // } // } // DOFREE(attrChar); // } // itemTypeMap[valueChar[0]] = typePropertyType; // typePropertyType.clear(); // DOFREE(valueChar); // // } // } // 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 smzq_pref_cnt = 0; // char** smzq_pref_vals = NULL; // //获取首选项的值 // PREF_ask_char_values("RB3_WL_SMZQ", &smzq_pref_cnt, &smzq_pref_vals); // map smzqMap; // for (int i = 0; i < smzq_pref_cnt; i++) // { // if (strstr(smzq_pref_vals[i], "=") != NULL) // { // //按照-进行拆分。拆分条件 // int valueCount = 0; // char** valueChar = new char* [64]; // //分割字符串 // split(smzq_pref_vals[i], "=", valueChar, &valueCount); // smzqMap[valueChar[0]] = valueChar[1]; // DOFREE(valueChar); // } // } // 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; // } // // char* tc_root_file = getenv("tc_root"); //C:\Siemens\Teamcenter11 // //+++ // char parameters[100000] = "";//写入到文件的值 // 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); // // //"tc11","infodba","//172.16.50.40/tc11" "TC12","infodba","172.16.68.13/tc1" // int status = ConnServer(c_sql_values[1], c_sql_values[2], c_sql_values[0]); // printf("status:%d\n", status); // map> classMap; // 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 ((strstr(itemType, "Revision") == NULL) || (strstr(itemType, "Master") != NULL) // || (strstr(itemType, "master") != NULL) || (strstr(itemType, "BOM") != NULL) || (strstr(itemType, "bom") != NULL) || (strstr(itemType, "Bom") != NULL)) // { // DOFREE(itemType); // continue; // } // if (itemTypeMap.find(itemType) != itemTypeMap.end()) { // map propMap = itemTypeMap[itemType]; // if (strstr(parameters, "[{") != NULL) { // strcat(parameters, ","); // } // strcat(parameters, "{"); // //采购分类默认值暂定为空 // strcat(parameters, "\"purchaseClassCode\":\"\","); // tag_t ico_tag = NULLTAG; // char* classId = NULL; // map attrMap; // ICS_ask_classification_object(attachments[i], &ico_tag); // if (ico_tag != NULLTAG) { // ICS_ico_ask_class(ico_tag, &classId); // printf(">> classId: %s\n", classId); // //分类属性名称对应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]; // } // } // // char* classCode = NULL; // char* className = NULL; // char* organization = NULL; // char* punit = NULL; // char factoryCode[2048] = "\0"; // //这里写服务名,不能用实例名(名称相同除外) // if (status) // { // printf("提示:中间数据表访问失败\n"); // } // else { // char* field1 = NULL; // char* field2 = NULL; // int outputColumn = 0, outputValueCount = 0; // char*** outputValue = NULL; // printf("提示:中间数据表访问成功\n"); // //物料分类特殊处理,通过数据库表匹配 // char sql[128] = "\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(attachments[i], "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(attachments[i], "object_name", &field2)); // } // else if (strcmp("RB3_GNLBJRevision", itemType) == 0 && ico_tag != NULLTAG) // { // ITKCALL(AOM_UIF_ask_value(attachments[i], "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(attachments[i], "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(attachments[i], "object_name", &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(attachments[i], "rb3_bjlx", &field1)); // } // else if (strcmp("RB3_XZCPRevision", itemType) == 0) // { // ITKCALL(AOM_UIF_ask_value(attachments[i], "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("提示:sql==%s\n", sql); // if (QuerySQLNoInputParam(sql, &outputColumn, &outputValueCount, &outputValue) == -1 || outputValueCount == 0) // { // printf("提示:物料分类查询 失败, %s \n", sql); // char sql2[1024] = "\0"; // sprintf(sql2, "select PCLASSCODE,PCLASSNAME,NEW_COLUMN,PUNIT from PLM_ERP_CLASS_TABLE where PFIELD01= '%s'", field1); // 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]; // className = outputValue[0][1]; // organization = outputValue[0][2]; // punit = outputValue[0][3]; // printf("物料分类====%s\n", classCode); // printf("物料名称====%s\n", className); // printf("组织====%s\n", organization); // printf("单位====%s\n", punit); // } // } // //采购分类特殊处理,通过数据库表匹配 // // // // // //工厂组织编码特殊处理,通过数据库表匹配 // char** factorys = NULL; // int factoryCount = 0; // if (strcmp("RB3_XZCPRevision", itemType) == 0 || strcmp("RB3_XZLBJRevision", itemType) == 0) { // ITKCALL(AOM_UIF_ask_values(attachments[i], "rb3_xzscgc", &factoryCount, &factorys)); // } // 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(attachments[i], "rb3_scgc", &factoryCount, &factorys)); // } // else if (strcmp("RB3_YCLRevision", itemType) == 0) { // ITKCALL(AOM_UIF_ask_values(attachments[i], "rb3_sygc1", &factoryCount, &factorys)); // } // else { // ITKCALL(AOM_UIF_ask_values(attachments[i], "rb3_scgc1", &factoryCount, &factorys)); // } // printf("factoryCount=%d\n", factoryCount); // for (int j = 0; j < factoryCount; j++) // { // char*** factoryValue = NULL; // int factoryColumn = 0, factoryValueCount = 0; // char factorySql[128] = "\0"; // printf("factorys[j]==%s\n", factorys[j]); // sprintf(factorySql, "select PFACTORYCODE from PLM_ERP_FACTORY_TABLE where PFACTORY= '%s'", factorys[j]); // 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); // //free(sql); // if (factoryValueCount > 0) { // if (strcmp("", factoryCode) != 0) { // strcat(factoryCode, ","); // } // strcat(factoryCode, factoryValue[0][0]); // printf("组织编码====%s\n", factoryCode); // } // if (factoryValue != NULL) { // DOFREE(factoryValue); // } // } // // if (factorys != NULL) { // DOFREE(factorys); // } // if (outputValue != NULL) { // DOFREE(outputValue); // } // if (field1 != NULL) { // DOFREE(field1); // } // if (field2 != NULL) { // DOFREE(field2); // } // } // if (factoryCode != NULL) { // strcat(parameters, "\"orgCode\":\""); // strcat(parameters, factoryCode); // if (organization != NULL) { // strcat(parameters, ","); // strcat(parameters, organization); // } // strcat(parameters, "\","); // } // strcat(parameters, "\"manageClassCode\":\""); // if (classCode != NULL) { // strcat(parameters, classCode); // } // strcat(parameters, "\","); // // 使用迭代器遍历map // int index = 0; // for (std::map::iterator it = propMap.begin(); it != propMap.end(); ++it) { // string key = it->first; // string attr = it->second; // printf("key: %s \n", key.c_str()); // printf("attr: %s \n", attr.c_str()); // if (strcmp("orgCode", key.c_str()) == 0) { // index++; // continue; // } // if (strstr(attr.c_str(), ".") != NULL) // { // int attrCount = 0; // char** attrChar = new char* [128]; // char* attrName = new char[2048];//足够长 // strcpy(attrName, attr.c_str()); // printf("attrName: %s \n", attrName); // //分割字符串 // split(attrName, ".", attrChar, &attrCount); // char* value = NULL; // if (strcmp("rev", attrChar[0]) == 0) { // //单位特殊处理 // if (strcmp("uom_tag", attrChar[1]) == 0) // { // tag_t item = NULLTAG; // ITKCALL(ITEM_ask_item_of_rev(attachments[i], &item)); // tag_t unitTag = NULLTAG; // ITKCALL(AOM_ask_value_tag(item, attrChar[1], &unitTag)); // if (unitTag != NULL) { // ITKCALL(AOM_UIF_ask_value(unitTag, "object_string", &value)); // printf("uom_tag: %s \n", value); // //单位换算 // // 特定物料分类单位换算:滚动体计量单位:L(粒)转WL(万粒);油脂的计量单位:GM(克) 转KG(千克);钢材,钢管计量单位:GM(克)转T(吨) // if (className != NULL) { // if (strcmp("滚动体", className) == 0 && strcmp("L(粒)", value) == 0) // { // value = "WL(万粒)"; // } // else if (strcmp("油脂", className) == 0 && strcmp("GM(克)", value) == 0) // { // value = "KG(千克)"; // }if ((strcmp("钢材", className) == 0 || strcmp("钢管", className) == 0) && strcmp("GM(克)", value) == 0) // { // value = "T(吨)"; // } // } // strcat(parameters, "\""); // strcat(parameters, key.c_str()); // strcat(parameters, "\":\""); // if (unitMap.find(value) != unitMap.end()) { // strcat(parameters, unitMap[value].c_str()); // } // else { // strcat(parameters, value); // } // strcat(parameters, "\""); // } // else { // strcat(parameters, "\""); // strcat(parameters, key.c_str()); // strcat(parameters, "\":\""); // if (punit != NULL) { // strcat(parameters, punit); // } // strcat(parameters, "\""); // // } // if (item != NULL) { // DOFREE(item); // } // if (unitTag != NULL) { // DOFREE(unitTag); // } // // } // //重量特殊处理 // else if (strcmp("netWeight", key.c_str()) == 0) // { // strcat(parameters, "\"netWeightUnitCode\":\"KG\","); // ITKCALL(AOM_UIF_ask_value(attachments[i], attrChar[1], &value)); // if (value != NULL && strcmp("", value) != 0) { // double dValue = std::stod(value); // dValue = dValue * 10000; // long lValue = static_cast(dValue); // 转换为long // strcat(parameters, "\""); // strcat(parameters, key.c_str()); // strcat(parameters, "\":"); // char netWeight[64] = "\0"; // sprintf(netWeight, "%d", lValue); // strcat(parameters, netWeight); // } // else { // strcat(parameters, "\""); // strcat(parameters, key.c_str()); // strcat(parameters, "\":0"); // } // } // //生命周期特殊处理 // else if (strcmp("material_status", key.c_str()) == 0) // { // ITKCALL(AOM_UIF_ask_value(attachments[i], attrChar[1], &value)); // strcat(parameters, "\""); // strcat(parameters, key.c_str()); // strcat(parameters, "\":\""); // if (smzqMap.find(value) != smzqMap.end()) { // strcat(parameters, smzqMap[value].c_str()); // } // else { // strcat(parameters, value); // } // strcat(parameters, "\""); // } // else { // ITKCALL(AOM_UIF_ask_value(attachments[i], attrChar[1], &value)); // strcat(parameters, "\""); // strcat(parameters, key.c_str()); // strcat(parameters, "\":\""); // strcat(parameters, value); // strcat(parameters, "\""); // } // } // else { // if (ico_tag != NULLTAG) { // if (strstr(attrChar[1], "&") != NULL) // { // int attrNum = 0; // char** allAttrs = new char* [128]; // //分割字符串 // split(attrChar[1], "&", allAttrs, &attrNum); // char values[256] = "";//多个属性拼接 // for (int i = 0; i < attrNum; i++) // { // if (attrMap.find(allAttrs[i]) != attrMap.end()) // { // ICS_ask_attribute_value(ico_tag, allAttrs[i], &value); // DOFREE(disValue); // if (value != NULL) { // int id = attrMap[allAttrs[i]]; // char* disValue; // getClassValue(value, id, &disValue); // strcat(values, disValue); // DOFREE(disValue); // } // else { // strcat(values, ""); // } // } // else { // strcat(values, ""); // } // } // strcat(parameters, "\""); // strcat(parameters, key.c_str()); // strcat(parameters, "\":\""); // strcat(parameters, values); // strcat(parameters, "\""); // DOFREE(allAttrs); // } // else { // //保持架板厚特殊处理 // if (strcmp("CU0261", key.c_str()) == 0) // { // if (attrMap.find("保持架板厚(mm)") != attrMap.end()) // { // attrChar[1] = "保持架板厚(mm)"; // } // else if (attrMap.find("冲压保持架板厚(mm)") != attrMap.end()) // { // attrChar[1] = "冲压保持架板厚(mm)"; // } // else if (attrMap.find("保持架板厚(铁保)") != attrMap.end()) // { // attrChar[1] = "保持架板厚(铁保)"; // } // } // //密封颜色特殊处理 // else if (strcmp("CU0262", key.c_str()) == 0) // { // if (attrMap.find("密封颜色") != attrMap.end()) // { // //printf("1111\n"); // attrChar[1] = "密封颜色"; // } // else if (attrMap.find("密封颜色(带轮端)") != attrMap.end()) // { // attrChar[1] = "密封颜色(带轮端)"; // } // else if (attrMap.find("(内密封件颜色)") != attrMap.end()) // { // attrChar[1] = "(内密封件颜色)"; // } // } // //密封材料特殊处理 // else if (strcmp("CU0263", key.c_str()) == 0) // { // if (attrMap.find("密封材料") != attrMap.end()) // { // //printf("2222\n"); // attrChar[1] = "密封材料"; // } // else if (attrMap.find("密封材料(带轮端)") != attrMap.end()) // { // attrChar[1] = "密封材料(带轮端)"; // } // else if (attrMap.find("(内密封件材料)") != attrMap.end()) // { // attrChar[1] = "(内密封件材料)"; // } // } // //printf("attrChar[1] = %s \n", attrChar[1]); // if (attrMap.find(attrChar[1]) != attrMap.end()) // { // ICS_ask_attribute_value(ico_tag, attrChar[1], &value); // if (value != NULL && strcmp(value,"") != 0 && strcmp(value, " ") != 0) { // int id = attrMap[attrChar[1]]; // char* disValue; // getClassValue(value, id, &disValue); // /* printf("id = %d \n", id); // printf("disValue = %s \n", disValue);*/ // strcat(parameters, "\""); // strcat(parameters, key.c_str()); // strcat(parameters, "\":\""); // strcat(parameters, disValue); // strcat(parameters, "\""); // DOFREE(disValue); // } // else { // strcat(parameters, "\""); // strcat(parameters, key.c_str()); // strcat(parameters, "\":\"\""); // } // } // else { // strcat(parameters, "\""); // strcat(parameters, key.c_str()); // strcat(parameters, "\":\"\""); // } // } // } // else { // strcat(parameters, "\""); // strcat(parameters, key.c_str()); // strcat(parameters, "\":\"\""); // } // } // printf("value: %s \n", value); // DOFREE(value); // DOFREE(attrChar); // DOFREE(attrName); // } // else { // if (strcmp("CU0266", key.c_str()) == 0 && strcmp("RB3_LBJRevision", itemType) == 0 && ico_tag != NULLTAG) // { // printf("零部件特殊处理\n"); // char* value = NULL; // if (attrMap.find("类别") != attrMap.end()) // { // printf("类别 : %s \n", value); // ICS_ask_attribute_value(ico_tag, "类别", &value); // if (value != NULL) { // int id = attrMap["类别"]; // char* disValue; // getClassValue(value, id, &disValue); // printf("disValue : %s \n", disValue); // if (strcmp("C:车工件", disValue) == 0) { // tag_t parentClass = NULLTAG; // char* parentClassId = NULL; // char* parentClassName = NULL; // ITKCALL(ICS_class_ask_parent(classId, &parentClass, &parentClassId)); // if (parentClass != NULLTAG) { // ITKCALL(ICS_ask_id_name(parentClass, &parentClassId, &parentClassName)); // strcat(parameters, "\""); // strcat(parameters, key.c_str()); // strcat(parameters, "\":\""); // strcat(parameters, parentClassName); // strcat(parameters, "\""); // } // else { // strcat(parameters, "\""); // strcat(parameters, key.c_str()); // strcat(parameters, "\":\"\""); // } // DOFREE(parentClass); // DOFREE(parentClassId); // DOFREE(parentClassName); // } // else { // strcat(parameters, "\""); // strcat(parameters, key.c_str()); // strcat(parameters, "\":\"\""); // } // DOFREE(disValue); // } // else { // strcat(parameters, "\""); // strcat(parameters, key.c_str()); // strcat(parameters, "\":\"\""); // } // } // else // { // strcat(parameters, "\""); // strcat(parameters, key.c_str()); // strcat(parameters, "\":\"\""); // } // DOFREE(value); // }//重量特殊处理 // else if (strcmp("netWeight", key.c_str()) == 0) // { // strcat(parameters, "\"netWeightUnitCode\":\"KG\","); // strcat(parameters, "\""); // strcat(parameters, key.c_str()); // strcat(parameters, "\":0"); // } // else // { // printf("key: %s 默认为空值\n", key.c_str()); // strcat(parameters, "\""); // strcat(parameters, key.c_str()); // strcat(parameters, "\":\"\""); // } // } // if (index < propMap.size() - 1) // { // strcat(parameters, ","); // } // if (classId != NULL) { // DOFREE(classId); // } // if (ico_tag != NULL) { // DOFREE(ico_tag); // } // if (classCode != NULL) { // DOFREE(classCode); // } // if (className != NULL) { // DOFREE(className); // } // if (organization != NULL) { // DOFREE(organization); // } // if (punit != NULL) { // DOFREE(punit); // } // index++; // } // strcat(parameters, "}"); // attrMap.clear(); // } // DOFREE(itemType); // } // DisConnServer(); // strcat(parameters, "]"); // //printf("parameters: %s\n", parameters); // //把数据用写入文件 // 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, 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, "@WL"); // //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; // } // printf("ifail: %d\n", ifail); // if (attachments != NULL) { // MEM_free(attachments); // } // if (pref_vals != NULL) { // MEM_free(pref_vals); // } // //if (tc_root_file != NULL) { // // MEM_free(tc_root_file); // //} // printf("=========================对象下发到ERP End===================\n"); // return ifail; //} int RB_SendErpItem_New(EPM_action_message_t msg) { printf("=========================对象下发到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 pref_cnt = 0; char** pref_vals = NULL; //获取首选项的值 PREF_ask_char_values("RB_ItemSendErp_Type_Attr", &pref_cnt, &pref_vals); map> itemTypeMap; map typePropertyType; for (int i = 0; i < pref_cnt; i++) { if (strstr(pref_vals[i], ":") != NULL) { //按照-进行拆分。拆分条件 int valueCount = 0; char** valueChar = new char* [64]; //分割字符串 split(pref_vals[i], ":", valueChar, &valueCount); if (strstr(valueChar[1], "|") != NULL) { int attrCount = 0; char** attrChar = new char* [128]; //分割字符串 split(valueChar[1], "|", attrChar, &attrCount); for (int j = 0; j < attrCount; j++) { if (strstr(attrChar[j], "=") != NULL) { int count = 0; char** attrs = new char* [64]; //分割字符串 split(attrChar[j], "=", attrs, &count); typePropertyType[attrs[0]] = attrs[1]; DOFREE(attrs); } } DOFREE(attrChar); } itemTypeMap[valueChar[0]] = typePropertyType; typePropertyType.clear(); DOFREE(valueChar); } } 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 smzq_pref_cnt = 0; char** smzq_pref_vals = NULL; //获取首选项的值 PREF_ask_char_values("RB3_WL_SMZQ", &smzq_pref_cnt, &smzq_pref_vals); map smzqMap; for (int i = 0; i < smzq_pref_cnt; i++) { if (strstr(smzq_pref_vals[i], "=") != NULL) { //按照-进行拆分。拆分条件 int valueCount = 0; char** valueChar = new char* [64]; //分割字符串 split(smzq_pref_vals[i], "=", valueChar, &valueCount); smzqMap[valueChar[0]] = valueChar[1]; DOFREE(valueChar); } } 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; } char* tc_root_file = getenv("tc_root"); //C:\Siemens\Teamcenter11 //+++ char parameters[100000] = "";//写入到文件的值 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); //"tc11","infodba","//172.16.50.40/tc11" "TC12","infodba","172.16.68.13/tc1" int status = ConnServer(c_sql_values[1], c_sql_values[2], c_sql_values[0]); printf("status:%d\n", status); map> classMap; for (int i = 0; i < attachments_num; i++) { char* itemType = NULL; char* itemId1 = NULL; AOM_ask_value_string(attachments[i], "item_id", &itemId1); AOM_ask_value_string(attachments[i], "object_type", &itemType); printf("itemType:%s\n", itemType); printf("itemId1:%s\n", itemId1); DOFREE(itemId1); //过滤掉非版本的对象 if ((strstr(itemType, "Revision") == NULL) || (strstr(itemType, "Master") != NULL) || (strstr(itemType, "master") != NULL) || (strstr(itemType, "BOM") != NULL) || (strstr(itemType, "bom") != NULL) || (strstr(itemType, "Bom") != NULL)) { DOFREE(itemType); continue; } if (itemTypeMap.find(itemType) != itemTypeMap.end()) { map propMap = itemTypeMap[itemType]; if (strstr(parameters, "[{") != NULL) { strcat(parameters, ","); } strcat(parameters, "{"); tag_t ico_tag = NULLTAG; char* classId = NULL; map attrMap; ICS_ask_classification_object(attachments[i], &ico_tag); if (ico_tag != NULLTAG) { ICS_ico_ask_class(ico_tag, &classId); printf(">> classId: %s\n", classId); //分类属性名称对应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]; } } char* classCode = NULL; char* cgCode = NULL; char* className = NULL; char* organization = NULL; char* punit = NULL; char factoryCode[2048] = "\0"; //这里写服务名,不能用实例名(名称相同除外) if (status) { printf("提示:中间数据表访问失败\n"); } else { char* field1 = NULL; char* field2 = NULL; int outputColumn = 0, outputValueCount = 0; char*** outputValue = NULL; printf("提示:中间数据表访问成功\n"); //物料分类特殊处理,通过数据库表匹配 char sql[256] = "\0"; if (strcmp("RB3_LBJRevision", itemType) == 0 || strcmp("RB3_GNZCRevision", itemType) == 0 || strcmp("RB3_GNLBJRevision", itemType) == 0 || strcmp("RB3_GYZYRevision", itemType) == 0 || strcmp("RB3_YCLRevision", itemType) == 0) { if (strcmp("RB3_LBJRevision", itemType) == 0 && ico_tag != NULLTAG) { ITKCALL(AOM_UIF_ask_value(attachments[i], "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(attachments[i], "object_name", &field2)); } else if (strcmp("RB3_GNLBJRevision", itemType) == 0 && ico_tag != NULLTAG) { ITKCALL(AOM_UIF_ask_value(attachments[i], "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); } } else if (strcmp("RB3_YCLRevision", itemType) == 0 && ico_tag != NULLTAG) { ITKCALL(AOM_UIF_ask_value(attachments[i], "rb3_bjlx", &field1)); char* value = NULL; ICS_ask_attribute_value(ico_tag, "材料形状", &value); if (value != NULL) { int id = attrMap["材料形状"]; getClassValue(value, id, &field2); DOFREE(value); } } if (field1 != NULL) { if (field1 != NULL && field2 != NULL) { sprintf(sql, "select PCLASSCODE,PCLASSNAME,NEW_COLUMN,PUNIT from PLM_ERP_CLASS_TABLE where PTYPE= '%s' and PFIELD01= '%s' and PFIELD02= '%s'", itemType, field1, field2); } else { sprintf(sql, "select PCLASSCODE,PCLASSNAME,NEW_COLUMN,PUNIT from PLM_ERP_CLASS_TABLE where PTYPE= '%s' and PFIELD01= '%s'", itemType, field1); } } } else { if (strcmp("RB3_ZCRevision", itemType) == 0) { ITKCALL(AOM_UIF_ask_value(attachments[i], "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(attachments[i], "object_name", &field1)); } else if (strcmp("RB3_SLRevision", itemType) == 0 || strcmp("RB3_XJRevision", itemType) == 0 || strcmp("RB3_WJTLRevision", itemType) == 0) { ITKCALL(AOM_UIF_ask_value(attachments[i], "rb3_bjlx", &field1)); } else if (strcmp("RB3_XZCPRevision", itemType) == 0) { ITKCALL(AOM_UIF_ask_value(attachments[i], "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 PTYPE= '%s' and PFIELD01= '%s'", itemType, field1); } } if (strcmp("", sql) != 0) { printf("提示:sql==%s\n", sql); if (QuerySQLNoInputParam(sql, &outputColumn, &outputValueCount, &outputValue) == -1 || outputValueCount == 0) { printf("提示:物料分类查询 失败, %s \n", sql); char sql2[256] = "\0"; sprintf(sql2, "select PCLASSCODE,PCLASSNAME,NEW_COLUMN,PUNIT from PLM_ERP_CLASS_TABLE where PTYPE= '%s' and PFIELD01= '%s'", itemType, field1); 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]; className = outputValue[0][1]; organization = outputValue[0][2]; punit = outputValue[0][3]; printf("物料分类====%s\n", classCode); printf("物料名称====%s\n", className); printf("组织====%s\n", organization); printf("单位====%s\n", punit); } } //采购分类特殊处理,通过数据库表匹配 // char* limit_value = NULL; char* object_name = NULL; ITKCALL(AOM_UIF_ask_value(attachments[i], "object_name", &object_name)); char* cgField1 = NULL; char* cgField2= NULL; char* cgField3 = NULL; char cgSql[256] = "\0"; char cgSql2[256] = "\0"; if (strcmp("RB3_YZRevision", itemType) == 0 || strcmp("RB3_BZJRevision", itemType) == 0) { //获取object_name与【字段值2】进行匹配,获取到对应【采购分类编码】进行传递 sprintf(cgSql, "select PCGCODE from PLM_ERP_CG_TABLE where PTYPE= '%s' and PFIELDVALUE02= '%s'", itemType, object_name); } else if (strcmp("RB3_GQRevision", itemType) == 0) { /* 获取分类字段【球类别】的值与【字段值2】进行匹配, 再获取【字段3】的值,如果【字段3】为空则直接匹配到对应【采购分类编码】进行传递; 如果有值获取后与【字段值3】进行比对:获取到的值小于第一个数值,即匹配【采购分类编码】的第一个值进行传递; 获取到的值大于等于第一个数值并小于第二个数值,即匹配【采购分类编码】的第二个值进行传递; 获取到的值大于等于第二个数值,即匹配【采购分类编码】的第三个值进行传递; */ char* value = NULL; ICS_ask_attribute_value(ico_tag, "球类别", &value); if (value != NULL) { int id = attrMap["球类别"]; getClassValue(value, id, &cgField1); DOFREE(value); } ICS_ask_attribute_value(ico_tag, "球规格", &value); if (value != NULL) { int id = attrMap["球规格"]; getClassValue(value, id, &cgField3); DOFREE(value); } sprintf(cgSql, "select PCGCODE,PFIELDVALUE03 from PLM_ERP_CG_TABLE where PTYPE= '%s' and PFIELDVALUE02= '%s'", itemType, cgField1); } else if (strcmp("RB3_GYZYRevision", itemType) == 0) { //先根据获取到的【ERP物料分类】匹配【字段值1】,再根据【字段2】的内容获取编码前六位or编码前四位, //获取的数值与【字段值2】进行匹配,从而获取到对应【采购分类编码】进行传递; //IN41 IN38 取前4位 char* newClassId = NULL; if (strcmp("IN41", classCode) == 0 || strcmp("IN38", classCode) == 0) { newClassId = getFirstStr(classId, 4); } else { newClassId = getFirstStr(classId, 6); } sprintf(cgSql, "select PCGCODE from PLM_ERP_CG_TABLE where PTYPE= '%s' and PFIELDVALUE01= '%s' and PFIELDVALUE02= '%s'", itemType, classCode, newClassId); } else if (strcmp("RB3_GZRevision", itemType) == 0) { /* 获取对应分类字段【滚动体类型】的值与【字段值2】进行匹配,再获取【字段3】的值, 如果【字段3】为空则直接匹配到对应【采购分类编码】进行传递; 如果有值获取后与【字段值3】进行比对 */ char* value = NULL; ICS_ask_attribute_value(ico_tag, "滚动体类型", &value); if (value != NULL) { int id = attrMap["滚动体类型"]; getClassValue(value, id, &cgField1); DOFREE(value); } AOM_UIF_ask_value(attachments[i], "rb3_gzzj", &cgField3); sprintf(cgSql, "select PCGCODE,PFIELDVALUE03 from PLM_ERP_CG_TABLE where PTYPE= '%s' and PFIELDVALUE02= '%s'", itemType, cgField1); } else if (strcmp("RB3_LBJRevision", itemType) == 0) { /* 如果为IN04、IN03,获取物料分类倒数第二级,与【字段值2】进行匹配,再获取【字段3】的值,如果【字段3】为空则直接匹配到对应【采购分类编码】进行传递;如果有值获取object_name与【字段值3】进行匹配;再获取【字段4】的值,如果【字段4】为空则直接匹配到对应【采购分类编码】进行传递;如果【字段4】有值,则以字段4的值获取对应分类属性的值,与【字段值4】匹配获取采购分类,比对逻辑参照上述区间数值匹配的逻辑举例说明; 如果为IN08,直接获取分类字段【结构属性】与【字段值3】进行匹配,获取到对应【采购分类编码】进行传递; 如果为IN09、IN24,获取object_name与【字段值2】进行匹配,获取到对应【采购分类编码】进行传递; */ if (strcmp("IN04", classCode) == 0 || strcmp("IN03", classCode) == 0) { tag_t parentClass = NULLTAG; char* parentClassId = NULL; char* parentClassName = NULL; if (strstr(object_name, "外圈") != NULL || strcmp("座圈", object_name) == 0) { //外形尺寸_外径(mm) char* value = NULL; ICS_ask_attribute_value(ico_tag, "外形尺寸_外径(mm)", &value); if (value != NULL) { int id = attrMap["外形尺寸_外径(mm)"]; getClassValue(value, id, &cgField3); DOFREE(value); } } else { // 外形尺寸_内径(mm) char* value = NULL; ICS_ask_attribute_value(ico_tag, "外形尺寸_内径(mm)", &value); if (value != NULL) { int id = attrMap["外形尺寸_内径(mm)"]; getClassValue(value, id, &cgField3); DOFREE(value); } } ITKCALL(ICS_class_ask_parent(classId, &parentClass, &parentClassId)); if (parentClass != NULLTAG) { ITKCALL(ICS_ask_id_name(parentClass, &parentClassId, &parentClassName)); sprintf(cgSql, "select PCGCODE,PFIELDVALUE04 from PLM_ERP_CG_TABLE where PTYPE= '%s' and PFIELDVALUE02= '%s' and PFIELDVALUE03= '%s'", itemType, parentClassName, object_name); sprintf(cgSql2, "select PCGCODE,PFIELDVALUE04 from PLM_ERP_CG_TABLE where PTYPE= '%s' and PFIELDVALUE02= '%s'", itemType, parentClassName); } } else if (strcmp("IN08", classCode) == 0) { char* value = NULL; ICS_ask_attribute_value(ico_tag, "保持架类型", &value); if (value != NULL) { printf("value=====%s\n", value); int id = attrMap["保持架类型"]; printf("id=====================%d\n", id); getClassValue(value, id, &cgField1); DOFREE(value); } ICS_ask_attribute_value(ico_tag, "结构属性", &value); if (value != NULL) { printf("value=====%s\n", value); int id = attrMap["结构属性"]; printf("id=====================%d\n",id); getClassValue(value, id, &cgField2); DOFREE(value); } sprintf(cgSql, "select PCGCODE from PLM_ERP_CG_TABLE where PTYPE= '%s' and PFIELDVALUE02= '%s' and PFIELDVALUE03= '%s'", itemType, cgField1, cgField2); } else if (strcmp("IN09", classCode) == 0 || strcmp("IN24", classCode) == 0) { sprintf(cgSql, "select PCGCODE from PLM_ERP_CG_TABLE where PTYPE= '%s' and PFIELDVALUE02= '%s'", itemType, object_name); } } else if (strcmp("RB3_SLRevision", itemType) == 0 || strcmp("RB3_XJRevision", itemType) == 0) { //直接获取到对应【采购分类编码】进行传递 sprintf(cgSql, "select PCGCODE from PLM_ERP_CG_TABLE where PTYPE= '%s'", itemType); } else if (strcmp("RB3_YCLRevision", itemType) == 0) { //直接获取分类字段【材料形状】与【字段值2】进行匹配,再获取【字段3】的值: //如果【字段3】为空则直接匹配到对应【采购分类编码】进行传递; //如果【字段3】的值为材料规格,则获取分类字段【材料规格】值与【字段值3】进行比对, // 比对逻辑参照上述区间数值匹配的逻辑举例说明; //如果【字段3】的值为用途,则获取分类字段【用途】值与【字段值3】进行匹配, //再获取【字段4】的值,如果【字段4】为空则直接匹配到对应【采购分类编码】进行传递; //如果【字段4】有值,则以字段4的值获取对应分类属性的值,与【字段值4】匹配获取采购分类 char* value = NULL; ICS_ask_attribute_value(ico_tag, "材料形状", &value); if (value != NULL) { int id = attrMap["材料形状"]; getClassValue(value, id, &cgField1); DOFREE(value); } ICS_ask_attribute_value(ico_tag, "用途", &value); if (value != NULL) { int id = attrMap["用途"]; getClassValue(value, id, &cgField2); DOFREE(value); } ICS_ask_attribute_value(ico_tag, "材料规格", &value); if (value != NULL) { int id = attrMap["材料规格"]; getClassValue(value, id, &cgField3); DOFREE(value); } if (strcmp("IN01", classCode) == 0 || strcmp("IN02", classCode) == 0 || strcmp("IN53", classCode) == 0) { sprintf(cgSql, "select PCGCODE,PFIELDVALUE04 from PLM_ERP_CG_TABLE where PTYPE= '%s' and PFIELDVALUE02= '%s'", itemType, cgField1); } else { sprintf(cgSql, "select PCGCODE,PFIELDVALUE04 from PLM_ERP_CG_TABLE where PTYPE= '%s' and PFIELDVALUE02= '%s' and PFIELDVALUE03= '%s'", itemType, cgField1, cgField2); } } int cgOutputColumn = 0, cgOutputValueCount = 0; char*** cgOutputValue = NULL; if (strcmp("", cgSql) != 0) { printf("提示:cgSql==%s\n", cgSql); if (QuerySQLNoInputParam(cgSql, &cgOutputColumn, &cgOutputValueCount, &cgOutputValue) == -1 || cgOutputValueCount == 0) { if (cgOutputValue != NULL) { for (int i1 = 0; i1 < cgOutputValueCount;i1 ++) { for (int i2 = 0; i2 < cgOutputColumn;i2 ++) { DOFREE(cgOutputValue[i1][i2]); } DOFREE(cgOutputValue[i1]); } DOFREE(cgOutputValue); } printf("I2 => C=%d,R=%d\n", cgOutputColumn, cgOutputValueCount); cgOutputColumn = 0; cgOutputValueCount = 0; printf("提示:采购分类查询 失败, %s \n", cgSql); if (QuerySQLNoInputParam(cgSql2, &cgOutputColumn, &cgOutputValueCount, &cgOutputValue) == -1) { printf("提示:采购分类查询 失败, %s \n", cgSql2); } } printf("cgOutputValueCount=%d\n", cgOutputValueCount); printf("cgOutputColumn=%d\n", cgOutputColumn); //free(sql); if (cgField3 != NULL && (strcmp("IN04", classCode) == 0 || strcmp("IN03", classCode) == 0)) { printf("111\n"); char result[32]; // 确保result足够大,以存储结果 // 计算第二个字符的位置 size_t second_char_pos = 2; if (strstr(cgField3, "φ") != NULL) { // 截取第二个字符之后的所有内容 strcpy(result, cgField3 + second_char_pos); printf("1\n"); } if (strstr(cgField3, "Φ") != NULL) { // 截取第二个字符之后的所有内容 strcpy(result, cgField3 + second_char_pos); printf("2\n"); } printf("cgField3====%s\n", result); double result_num = atof(result); // 转换为整数 if (cgOutputValueCount > 0) { cgCode = cgOutputValue[0][0]; limit_value = cgOutputValue[0][1]; printf("采购分类====%s\n", cgCode); printf("值区间====%s\n", limit_value); if (limit_value != NULL && strcmp(limit_value, "") != 0 && strcmp(limit_value, " ") != 0) { if (strstr(limit_value, "-") != NULL) { //按照-进行拆分。拆分条件 int numCount = 0; char** numChar = new char* [64]; int valCount = 0; char** valChar = new char* [64]; //分割字符串 split(limit_value, "-", numChar, &numCount); split(cgCode, ",", valChar, &valCount); for (int ii = 0; ii < numCount; ii++) { double int_value1 = atof(numChar[ii]); if (result_num < int_value1) { cgCode = valChar[ii]; break; } else { if (ii != numCount - 1) { double int_value2 = atof(numChar[ii + 1]); if (result_num < int_value2) { cgCode = valChar[ii + 1]; break; } } else { cgCode = valChar[numCount - 1]; break; } } } DOFREE(numChar); } } printf("采购分类====%s\n", cgCode); } } else { printf("222\n"); if (cgOutputValueCount > 0) { cgCode = cgOutputValue[0][0]; } /*if (true) { return 0; }*/ printf("333\n"); } if (object_name != NULL) { DOFREE(object_name); } if (limit_value != NULL) { DOFREE(limit_value); } } // //工厂组织编码特殊处理,通过数据库表匹配 char** factorys = NULL; int factoryCount = 0; if (strcmp("RB3_XZCPRevision", itemType) == 0 || strcmp("RB3_XZLBJRevision", itemType) == 0) { ITKCALL(AOM_UIF_ask_values(attachments[i], "rb3_xzscgc", &factoryCount, &factorys)); } 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(attachments[i], "rb3_scgc", &factoryCount, &factorys)); } else if (strcmp("RB3_YCLRevision", itemType) == 0) { ITKCALL(AOM_UIF_ask_values(attachments[i], "rb3_sygc1", &factoryCount, &factorys)); } else { ITKCALL(AOM_UIF_ask_values(attachments[i], "rb3_scgc1", &factoryCount, &factorys)); } printf("factoryCount=%d\n", factoryCount); for (int j = 0; j < factoryCount; j++) { char*** factoryValue = NULL; int factoryColumn = 0, factoryValueCount = 0; char factorySql[128] = "\0"; printf("factorys[j]==%s\n", factorys[j]); sprintf(factorySql, "select PFACTORYCODE from PLM_ERP_FACTORY_TABLE where PFACTORY= '%s'", factorys[j]); 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); //free(sql); if (factoryValueCount > 0) { if (strcmp("", factoryCode) != 0) { strcat(factoryCode, ","); } strcat(factoryCode, factoryValue[0][0]); printf("组织编码====%s\n", factoryCode); } if (factoryValue != NULL) { DOFREE(factoryValue); } } if (factorys != NULL) { DOFREE(factorys); } if (outputValue != NULL) { DOFREE(outputValue); } if (field1 != NULL) { DOFREE(field1); } if (field2 != NULL) { DOFREE(field2); } if (cgField1 != NULL) { DOFREE(cgField1); } if (cgField2 != NULL) { DOFREE(cgField2); } if (cgField3 != NULL) { DOFREE(cgField3); } } if (factoryCode != NULL) { strcat(parameters, "\"orgCode\":\""); strcat(parameters, factoryCode); if (organization != NULL) { strcat(parameters, ","); strcat(parameters, organization); } strcat(parameters, "\","); } strcat(parameters, "\"manageClassCode\":\""); if (classCode != NULL) { strcat(parameters, classCode); } strcat(parameters, "\","); strcat(parameters, "\"purchaseClassCode\":\""); if (cgCode != NULL) { strcat(parameters, cgCode); } strcat(parameters, "\","); // 使用迭代器遍历map int index = 0; for (std::map::iterator it = propMap.begin(); it != propMap.end(); ++it) { string key = it->first; string attr = it->second; printf("key: %s \n", key.c_str()); printf("attr: %s \n", attr.c_str()); if (strcmp("orgCode", key.c_str()) == 0) { index++; continue; } if (strstr(attr.c_str(), ".") != NULL) { int attrCount = 0; char** attrChar = new char* [128]; char* attrName = new char[2048];//足够长 strcpy(attrName, attr.c_str()); printf("attrName: %s \n", attrName); //分割字符串 split(attrName, ".", attrChar, &attrCount); char* value = NULL; if (strcmp("rev", attrChar[0]) == 0) { //单位特殊处理 if (strcmp("uom_tag", attrChar[1]) == 0) { tag_t item = NULLTAG; ITKCALL(ITEM_ask_item_of_rev(attachments[i], &item)); tag_t unitTag = NULLTAG; ITKCALL(AOM_ask_value_tag(item, attrChar[1], &unitTag)); if (unitTag != NULL) { ITKCALL(AOM_UIF_ask_value(unitTag, "object_string", &value)); printf("uom_tag: %s \n", value); //单位换算 // 特定物料分类单位换算:滚动体计量单位:L(粒)转WL(万粒);油脂的计量单位:GM(克) 转KG(千克);钢材,钢管计量单位:GM(克)转T(吨) if (className != NULL) { if (strcmp("滚动体", className) == 0 && strcmp("L(粒)", value) == 0) { value = "WL(万粒)"; } else if (strcmp("油脂", className) == 0 && strcmp("GM(克)", value) == 0) { value = "KG(千克)"; }if ((strcmp("钢材", className) == 0 || strcmp("钢管", className) == 0) && strcmp("GM(克)", value) == 0) { value = "T(吨)"; } } strcat(parameters, "\""); strcat(parameters, key.c_str()); strcat(parameters, "\":\""); if (unitMap.find(value) != unitMap.end()) { strcat(parameters, unitMap[value].c_str()); } else { strcat(parameters, value); } strcat(parameters, "\""); } else { strcat(parameters, "\""); strcat(parameters, key.c_str()); strcat(parameters, "\":\""); if (punit != NULL) { strcat(parameters, punit); } strcat(parameters, "\""); } if (item != NULL) { DOFREE(item); } if (unitTag != NULL) { DOFREE(unitTag); } } //重量特殊处理 else if (strcmp("netWeight", key.c_str()) == 0) { strcat(parameters, "\"netWeightUnitCode\":\"KG\","); ITKCALL(AOM_UIF_ask_value(attachments[i], attrChar[1], &value)); if (value != NULL && strcmp("", value) != 0) { double dValue = std::stod(value); dValue = dValue * 10000; long lValue = static_cast(dValue); // 转换为long strcat(parameters, "\""); strcat(parameters, key.c_str()); strcat(parameters, "\":"); char netWeight[64] = "\0"; sprintf(netWeight, "%d", lValue); strcat(parameters, netWeight); } else { strcat(parameters, "\""); strcat(parameters, key.c_str()); strcat(parameters, "\":0"); } } //生命周期特殊处理 else if (strcmp("material_status", key.c_str()) == 0) { ITKCALL(AOM_UIF_ask_value(attachments[i], attrChar[1], &value)); strcat(parameters, "\""); strcat(parameters, key.c_str()); strcat(parameters, "\":\""); if (smzqMap.find(value) != smzqMap.end()) { strcat(parameters, smzqMap[value].c_str()); } else { strcat(parameters, value); } strcat(parameters, "\""); } else { ITKCALL(AOM_UIF_ask_value(attachments[i], attrChar[1], &value)); strcat(parameters, "\""); strcat(parameters, key.c_str()); strcat(parameters, "\":\""); strcat(parameters, value); strcat(parameters, "\""); } } else { if (ico_tag != NULLTAG) { if (strstr(attrChar[1], "&") != NULL) { int attrNum = 0; char** allAttrs = new char* [128]; //分割字符串 split(attrChar[1], "&", allAttrs, &attrNum); char values[256] = "";//多个属性拼接 for (int i = 0; i < attrNum; i++) { if (attrMap.find(allAttrs[i]) != attrMap.end()) { ICS_ask_attribute_value(ico_tag, allAttrs[i], &value); if (value != NULL) { int id = attrMap[allAttrs[i]]; char* disValue; getClassValue(value, id, &disValue); strcat(values, disValue); DOFREE(disValue); } else { strcat(values, ""); } } else { strcat(values, ""); } } strcat(parameters, "\""); strcat(parameters, key.c_str()); strcat(parameters, "\":\""); strcat(parameters, values); strcat(parameters, "\""); DOFREE(allAttrs); } else { //保持架板厚特殊处理 if (strcmp("CU0261", key.c_str()) == 0) { if (attrMap.find("保持架板厚(mm)") != attrMap.end()) { attrChar[1] = "保持架板厚(mm)"; } else if (attrMap.find("冲压保持架板厚(mm)") != attrMap.end()) { attrChar[1] = "冲压保持架板厚(mm)"; } else if (attrMap.find("保持架板厚(铁保)") != attrMap.end()) { attrChar[1] = "保持架板厚(铁保)"; } } //密封颜色特殊处理 else if (strcmp("CU0262", key.c_str()) == 0) { if (attrMap.find("密封颜色") != attrMap.end()) { //printf("1111\n"); attrChar[1] = "密封颜色"; } else if (attrMap.find("密封颜色(带轮端)") != attrMap.end()) { attrChar[1] = "密封颜色(带轮端)"; } else if (attrMap.find("(内密封件颜色)") != attrMap.end()) { attrChar[1] = "(内密封件颜色)"; } } //密封材料特殊处理 else if (strcmp("CU0263", key.c_str()) == 0) { if (attrMap.find("密封材料") != attrMap.end()) { //printf("2222\n"); attrChar[1] = "密封材料"; } else if (attrMap.find("密封材料(带轮端)") != attrMap.end()) { attrChar[1] = "密封材料(带轮端)"; } else if (attrMap.find("(内密封件材料)") != attrMap.end()) { attrChar[1] = "(内密封件材料)"; } } //printf("attrChar[1] = %s \n", attrChar[1]); if (attrMap.find(attrChar[1]) != attrMap.end()) { ICS_ask_attribute_value(ico_tag, attrChar[1], &value); if (value != NULL && strcmp(value, "") != 0 && strcmp(value, " ") != 0) { int id = attrMap[attrChar[1]]; char* disValue; getClassValue(value, id, &disValue); /* printf("id = %d \n", id); printf("disValue = %s \n", disValue);*/ strcat(parameters, "\""); strcat(parameters, key.c_str()); strcat(parameters, "\":\""); strcat(parameters, disValue); strcat(parameters, "\""); DOFREE(disValue); } else { strcat(parameters, "\""); strcat(parameters, key.c_str()); strcat(parameters, "\":\"\""); } } else { strcat(parameters, "\""); strcat(parameters, key.c_str()); strcat(parameters, "\":\"\""); } } } else { strcat(parameters, "\""); strcat(parameters, key.c_str()); strcat(parameters, "\":\"\""); } } printf("value: %s \n", value); DOFREE(value); DOFREE(attrChar); DOFREE(attrName); } else { if (strcmp("CU0266", key.c_str()) == 0 && strcmp("RB3_LBJRevision", itemType) == 0 && ico_tag != NULLTAG) { printf("零部件特殊处理\n"); char* value = NULL; if (attrMap.find("类别") != attrMap.end()) { printf("类别 : %s \n", value); ICS_ask_attribute_value(ico_tag, "类别", &value); if (value != NULL) { int id = attrMap["类别"]; char* disValue; getClassValue(value, id, &disValue); printf("disValue : %s \n", disValue); if (strcmp("C:车工件", disValue) == 0) { tag_t parentClass = NULLTAG; char* parentClassId = NULL; char* parentClassName = NULL; ITKCALL(ICS_class_ask_parent(classId, &parentClass, &parentClassId)); if (parentClass != NULLTAG) { ITKCALL(ICS_ask_id_name(parentClass, &parentClassId, &parentClassName)); strcat(parameters, "\""); strcat(parameters, key.c_str()); strcat(parameters, "\":\""); strcat(parameters, parentClassName); strcat(parameters, "\""); } else { strcat(parameters, "\""); strcat(parameters, key.c_str()); strcat(parameters, "\":\"\""); } DOFREE(parentClass); DOFREE(parentClassId); DOFREE(parentClassName); } else { strcat(parameters, "\""); strcat(parameters, key.c_str()); strcat(parameters, "\":\"\""); } DOFREE(disValue); } else { strcat(parameters, "\""); strcat(parameters, key.c_str()); strcat(parameters, "\":\"\""); } } else { strcat(parameters, "\""); strcat(parameters, key.c_str()); strcat(parameters, "\":\"\""); } DOFREE(value); }//重量特殊处理 else if (strcmp("netWeight", key.c_str()) == 0) { strcat(parameters, "\"netWeightUnitCode\":\"KG\","); strcat(parameters, "\""); strcat(parameters, key.c_str()); strcat(parameters, "\":0"); } else { printf("key: %s 默认为空值\n", key.c_str()); strcat(parameters, "\""); strcat(parameters, key.c_str()); strcat(parameters, "\":\"\""); } } if (index < propMap.size() - 1) { strcat(parameters, ","); } index++; } if (classId != NULL) { DOFREE(classId); } if (ico_tag != NULL) { DOFREE(ico_tag); } if (classCode != NULL) { DOFREE(classCode); } if (cgCode != NULL) { DOFREE(cgCode); } if (className != NULL) { DOFREE(className); } if (organization != NULL) { DOFREE(organization); } if (punit != NULL) { DOFREE(punit); } strcat(parameters, "}"); attrMap.clear(); } DOFREE(itemType); } DisConnServer(); strcat(parameters, "]"); //printf("parameters: %s\n", parameters); //把数据用写入文件 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, 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, "@WL"); //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; } printf("ifail: %d\n", ifail); if (attachments != NULL) { MEM_free(attachments); } if (pref_vals != NULL) { MEM_free(pref_vals); } //if (tc_root_file != NULL) { // MEM_free(tc_root_file); //} printf("=========================对象下发到ERP End===================\n"); return ifail; } int RB_SendGX_New(EPM_action_message_t msg) { printf("=========================工序下发到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* tc_root_file = getenv("tc_root"); //C:\Siemens\Teamcenter11 //+++ char parameters[20000] = "";//写入到文件的值 strcat(parameters, "{\"data\":["); //获取当前时间 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); map> classMap; for (int i = 0; i < attachments_num; i++) { tag_t bzgx = attachments[i]; tag_t ico_tag = NULLTAG; char* classId = NULL; map attrMap; ICS_ask_classification_object(bzgx, &ico_tag); if (ico_tag != NULLTAG) { ICS_ico_ask_class(ico_tag, &classId); printf(">> classId: %s\n", classId); tag_t parentClass = NULLTAG; char* parentClassId = NULL; char* parentClassName = NULL; ITKCALL(ICS_class_ask_parent(classId, &parentClass, &parentClassId)); if (parentClass != NULLTAG) { ITKCALL(ICS_ask_id_name(parentClass, &parentClassId, &parentClassName)); if (strcmp("外检", parentClassName) == 0) { DOFREE(parentClass); DOFREE(parentClassId); DOFREE(parentClassName); DOFREE(classId); continue; } } DOFREE(parentClass); DOFREE(parentClassId); DOFREE(parentClassName); char* type = NULL; ITKCALL(AOM_ask_value_string(bzgx, "object_type", &type)); if (strcmp("MEOPRevision", type) != 0) { if (type != NULL) { DOFREE(type); } continue; } if (strstr(parameters, "[{") != NULL) { strcat(parameters, ","); } strcat(parameters, "{"); char* bzgxh = NULL;//rb3_bzgxh char* object_name = NULL;//object_name char* bzgs = NULL;//rb3_bzgs char* cplb = NULL;//产品类别 char* cplb_disValue = NULL;//产品类别显示值 //ITKCALL(AOM_ask_value_string(bzgx, "rb3_bzgxh", &bzgxh)); ITKCALL(AOM_ask_value_string(bzgx, "object_name", &object_name)); ITKCALL(AOM_ask_value_string(bzgx, "rb3_bzgs", &bzgs)); //分类属性名称对应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]; } if (attrMap.find("产品类别") != attrMap.end()) { ICS_ask_attribute_value(ico_tag, "产品类别", &cplb); if (cplb != NULL) { int id = attrMap["产品类别"]; getClassValue(cplb, id, &cplb_disValue); } } std::string str = classId; if (str.length() >= 4) { str.erase(0, 4); // 去除前4个字符 } //removeFirstFourChars(classId); strcat(parameters, "\"standardProcessNumber\":\""); strcat(parameters, str.c_str()); strcat(parameters, "\","); strcat(parameters, "\"processName\":\""); if (cplb_disValue != NULL) { strcat(parameters, cplb_disValue); strcat(parameters, "-"); } strcat(parameters, object_name); strcat(parameters, "\","); strcat(parameters, "\"standardWorkingHours\":\""); strcat(parameters, bzgs); strcat(parameters, "\","); strcat(parameters, "\"productCategory\":\""); if (cplb_disValue != NULL) { strcat(parameters, cplb_disValue); } strcat(parameters, "\""); strcat(parameters, "}"); if (bzgxh != NULL) { DOFREE(bzgxh); } if (object_name != NULL) { DOFREE(object_name); } if (bzgs != NULL) { DOFREE(bzgs); } if (cplb != NULL) { DOFREE(cplb); } if (cplb_disValue != NULL) { DOFREE(cplb_disValue); } if (classId != NULL) { DOFREE(classId); } } } strcat(parameters, "],\"control\":{\"keydata\":null,\"ifid\": null,\"ifno\":\"TC_to_MDM_BZGX\",\"suser\": null,\"sysid\": null}}"); printf("parameters: %s\n", parameters); //把数据用写入文件 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,"@GX"); ////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"); } } printf("ifail: %d\n", ifail); if (attachments != NULL) { MEM_free(attachments); } //if (tc_root_file != NULL) { // MEM_free(tc_root_file); //} printf("=========================工序下发到ERP End===================\n"); return ifail; }