#define _CRT_SECURE_NO_WARNINGS #include "epm_handler_common.h" void removeSubstring(char* str, const char* toRemove) { char* pos = strstr(str, toRemove); if (pos != NULL) { // 将子串之后的内容前移覆盖 memmove(pos, pos + strlen(toRemove), strlen(pos + strlen(toRemove)) + 1); } } int RB_SendErpItem_New_Rule(EPM_rule_message_t msg) { char* log_file = NULL; printf("创建日志文件\n"); //char* TO_SRM = (char*)malloc(sizeof("TO_SRM")); char tc_log_file_name[200] = ""; strcpy(tc_log_file_name, "RB_SendErpItem_New_Rule"); CreateLogFile(tc_log_file_name, &log_file); WriteLog("=========================对象下发到ERP Start rule===================\n"); //POM_AM__set_application_bypass(true); int ifail = EPM_go; 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* job_name = NULL; ITKCALL(AOM_ask_value_string(rootTask, "job_name", &job_name)); WriteLog("流程名称:%s\n", job_name); int email_count = 0; char** email_values; ITKCALL(PREF_ask_char_values("RB_SEND_ERP_EMAIL", &email_count, &email_values)); vector mail_addrs; if (email_count > 0) { int valueCount = 0; char** valueChar = new char* [128]; //分割字符串 split(email_values[0], ";", valueChar, &valueCount); for (int i = 0; i < valueCount; i++) { mail_addrs.push_back(valueChar[i]); } } int user_cnt = mail_addrs.size(); WriteLog("user_cnt===%d\n", user_cnt); 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) { WriteLog("首选项 RB3_SQL_Connect2 配置错误 数量%d ", c_sql_value_count); CloseLog(); 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" map> classMap; for (int i = 0; i < attachments_num; i++) { int status = ConnServer(c_sql_values[1], c_sql_values[2], c_sql_values[0]); WriteLog("status:%d\n", status); char* itemType = NULL; AOM_ask_value_string(attachments[i], "object_type", &itemType); WriteLog("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; } char* itemId1 = NULL; AOM_ask_value_string(attachments[i], "item_id", &itemId1); WriteLog("itemId1:%s\n", itemId1); 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); WriteLog(">> 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) { WriteLog("提示:中间数据表访问失败\n"); } else { char* field1 = NULL; char* field2 = NULL; int outputColumn = 0, outputValueCount = 0; char*** outputValue = NULL; WriteLog("提示:中间数据表访问成功\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) { if (startsWith(classId, '1', '2') || startsWith(classId, '1', '7') || startsWith(classId, '1', '3') || startsWith(classId, '1', '4')) { 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 { strcat(parameters, "}"); continue; } } 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); } } WriteLog("sql==- %s \n", sql); if (strcmp("", sql) != 0) { WriteLog("提示:sql==%s\n", sql); if (QuerySQLNoInputParam(sql, &outputColumn, &outputValueCount, &outputValue) == -1 || outputValueCount == 0) { WriteLog("提示:物料分类查询 失败, %s \n", sql); if (field1 != NULL) { 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) { WriteLog("提示:物料分类查询 失败, %s \n", sql2); } } } WriteLog("outputValueCount=%d\n", outputValueCount); WriteLog("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]; WriteLog("物料分类====%s\n", classCode); WriteLog("物料名称====%s\n", className); WriteLog("组织====%s\n", organization); WriteLog("单位====%s\n", punit); } else { string errMsg = ""; errMsg.append(itemId1); errMsg.append("物料分类查询请检查表PLM_ERP_CLASS_TABLE"); WriteLog("发送邮件:%d", user_cnt); for (int i = 0; i < user_cnt; i++) { char cmd[10240] = ""; // 64KB char jarfile[512] = ""; string mail_addr = mail_addrs[i]; if (mail_addr.size() > 0) { WriteLog(">> %d. 发送邮件给[%s]", i + 1, mail_addr.c_str()); sprintf(jarfile, "%s\\bin\\EMailSender.jar", getenv("TC_ROOT")); strcpy_s(cmd, "java -jar "); strcat_s(cmd, jarfile); strcat_s(cmd, " \""); strcat_s(cmd, mail_addr.c_str()); strcat_s(cmd, "\" \"【TeamCenter】传递ERP-BOM提醒\" \""); strcat_s(cmd, job_name); strcat_s(cmd, ":组织数据失败->"); strcat_s(cmd, errMsg.c_str()); strcat_s(cmd, "\""); WriteLog("CMD:%s", cmd); system(cmd); WriteLog("执行完成"); } DOFREE(cmd); } DisConnServer(); CloseLog(); return EPM_go; } } else { continue; } // //工厂组织编码特殊处理,通过数据库表匹配 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 || strcmp("RB3_XJRevision", itemType) == 0 || strcmp("RB3_WJTLRevision", itemType) == 0 || strcmp("RB3_SLRevision", 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)); } WriteLog("factoryCount=%d\n", factoryCount); for (int j = 0; j < factoryCount; j++) { char*** factoryValue = NULL; int factoryColumn = 0, factoryValueCount = 0; char factorySql[128] = "\0"; WriteLog("factorys[j]==%s\n", factorys[j]); if (factorys[j] == NULL || strcmp(factorys[j], "") == 0 || strcmp(factorys[j], "0") == 0) { sprintf(factorySql, "select PFACTORYCODE from PLM_ERP_FACTORY_TABLE where PFACTORY= 'globa100'"); } else { sprintf(factorySql, "select PFACTORYCODE from PLM_ERP_FACTORY_TABLE where PFACTORY= '%s'", factorys[j]); } WriteLog("提示:factorySql==%s\n", factorySql); if (QuerySQLNoInputParam(factorySql, &factoryColumn, &factoryValueCount, &factoryValue) == -1) { WriteLog("提示:组织编码查询 失败, %s \n", factorySql); } WriteLog("factoryValueCount=%d\n", factoryValueCount); WriteLog("factoryColumn=%d\n", factoryColumn); //free(sql); if (factoryValueCount > 0) { if (strcmp("", factoryCode) != 0) { strcat(factoryCode, ","); } strcat(factoryCode, factoryValue[0][0]); WriteLog("组织编码====%s\n", factoryCode); } else { string errMsg = ""; errMsg.append(itemId1); errMsg.append("组织编码查询,请检查表PLM_ERP_FACTORY_TABLE"); WriteLog("发送邮件:%d", user_cnt); for (int i = 0; i < user_cnt; i++) { char cmd[10240] = ""; // 64KB char jarfile[512] = ""; string mail_addr = mail_addrs[i]; if (mail_addr.size() > 0) { WriteLog(">> %d. 发送邮件给[%s]", i + 1, mail_addr.c_str()); sprintf(jarfile, "%s\\bin\\EMailSender.jar", getenv("TC_ROOT")); strcpy_s(cmd, "java -jar "); strcat_s(cmd, jarfile); strcat_s(cmd, " \""); strcat_s(cmd, mail_addr.c_str()); strcat_s(cmd, "\" \"【TeamCenter】传递ERP-BOM提醒\" \""); strcat_s(cmd, job_name); strcat_s(cmd, ":组织数据失败->"); strcat_s(cmd, errMsg.c_str()); strcat_s(cmd, "\""); WriteLog("CMD:%s", cmd); system(cmd); WriteLog("执行完成"); } DOFREE(cmd); } DisConnServer(); CloseLog(); return EPM_go; } WriteLog("1\n"); if (factoryValue != NULL) { WriteLog("2\n"); DOFREE(factoryValue); } } WriteLog("3\n"); //采购分类特殊处理,通过数据库表匹配 // char* limit_value = NULL; char* object_name = NULL; ITKCALL(AOM_UIF_ask_value(attachments[i], "object_name", &object_name)); WriteLog("4\n"); 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 (classCode == NULL) { string errMsg = ""; errMsg.append(itemId1); errMsg.append("ERP分类获取错误,请检查物料分类数据!"); EMH_store_error_s2(EMH_severity_error, 919031, errMsg.c_str(), "失败"); WriteLog("发送邮件:%d", user_cnt); for (int i = 0; i < user_cnt; i++) { char cmd[10240] = ""; // 64KB char jarfile[512] = ""; string mail_addr = mail_addrs[i]; if (mail_addr.size() > 0) { WriteLog(">> %d. 发送邮件给[%s]", i + 1, mail_addr.c_str()); sprintf(jarfile, "%s\\bin\\EMailSender.jar", getenv("TC_ROOT")); strcpy_s(cmd, "java -jar "); strcat_s(cmd, jarfile); strcat_s(cmd, " \""); strcat_s(cmd, mail_addr.c_str()); strcat_s(cmd, "\" \"【TeamCenter】传递ERP-ITEM提醒\" \""); strcat_s(cmd, job_name); strcat_s(cmd, ":组织数据失败->"); strcat_s(cmd, errMsg.c_str()); strcat_s(cmd, "\""); WriteLog("CMD:%s", cmd); system(cmd); WriteLog("执行完成"); } DOFREE(cmd); } CloseLog(); return EPM_go; } if (strcmp("IN04", classCode) == 0 || strcmp("IN03", classCode) == 0) { WriteLog("5\n"); 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' and PFIELDVALUE01= '%s'", itemType, parentClassName, object_name, classCode); sprintf(cgSql2, "select PCGCODE,PFIELDVALUE04 from PLM_ERP_CG_TABLE where PTYPE= '%s' and PFIELDVALUE02= '%s' and PFIELDVALUE01= '%s'", itemType, parentClassName, classCode); } } else if (strcmp("IN08", classCode) == 0) { WriteLog("6\n"); char* value = NULL; ICS_ask_attribute_value(ico_tag, "保持架类型", &value); if (value != NULL) { WriteLog("value=====%s\n", value); int id = attrMap["保持架类型"]; WriteLog("id=====================%d\n", id); getClassValue(value, id, &cgField1); DOFREE(value); } ICS_ask_attribute_value(ico_tag, "结构属性", &value); if (value != NULL) { WriteLog("value=====%s\n", value); int id = attrMap["结构属性"]; WriteLog("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) { WriteLog("7\n"); 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); } //20250721增加 1、匹配采购分类时,先匹配表中BIP物料分类; else if (strcmp("IN03", classCode) == 0 || strcmp("IN04", classCode) == 0) { sprintf(cgSql, "select PCGCODE,PFIELDVALUE04 from PLM_ERP_CG_TABLE where PTYPE= '%s' and PFIELDVALUE02= '%s' and PFIELDVALUE03= '%s' and PFIELDVALUE01= '%s'", itemType, cgField1, cgField2, classCode); } else { sprintf(cgSql, "select PCGCODE,PFIELDVALUE04 from PLM_ERP_CG_TABLE where PTYPE= '%s' and PFIELDVALUE02= '%s' and PFIELDVALUE03= '%s' and PFIELDVALUE01= '%s'", itemType, cgField1, cgField2, classCode); } } int cgOutputColumn = 0, cgOutputValueCount = 0; char*** cgOutputValue = NULL; if (strcmp("", cgSql) != 0) { WriteLog("提示: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); } WriteLog("I2 => C=%d,R=%d\n", cgOutputColumn, cgOutputValueCount); cgOutputColumn = 0; cgOutputValueCount = 0; cgOutputValue = NULL; WriteLog("提示:采购分类查询 失败, %s \n", cgSql); if (QuerySQLNoInputParam(cgSql2, &cgOutputColumn, &cgOutputValueCount, &cgOutputValue) == -1) { WriteLog("提示:采购分类查询 失败, %s \n", cgSql2); } } WriteLog("cgOutputValueCount=%d\n", cgOutputValueCount); WriteLog("cgOutputColumn=%d\n", cgOutputColumn); /*if (cgOutputValueCount <= 0) { string errMsg = ""; errMsg.append(itemId1); errMsg.append("采购分类查询失败,请检查表PLM_ERP_CG_TABLE"); EMH_store_error_s2(EMH_severity_error, 919031, errMsg.c_str(), "失败"); return EPM_nogo; }*/ //free(sql); if (cgField3 != NULL && (strcmp("IN01", classCode) == 0 || strcmp("IN03", classCode) == 0 || strcmp("IN04", classCode) == 0 || strcmp("IN07", classCode) == 0 || strcmp("IN52", classCode) == 0)) { WriteLog("111\n"); WriteLog("cgField3======%s\n", cgField3); char result[200]; // 确保result足够大,以存储结果 // 计算第二个字符的位置 size_t second_char_pos = 2; if (strstr(cgField3, "φ") != NULL) { // 截取第二个字符之后的所有内容 strcpy(result, cgField3 + second_char_pos); WriteLog("1\n"); } if (strstr(cgField3, "Φ") != NULL) { // 截取第二个字符之后的所有内容 strcpy(result, cgField3 + second_char_pos); WriteLog("2\n"); } WriteLog("cgField3====%s\n", result); double result_num = atof(result); // 转换为整数 if (cgOutputValueCount > 0) { cgCode = cgOutputValue[0][0]; limit_value = cgOutputValue[0][1]; WriteLog("采购分类====%s\n", cgCode); WriteLog("值区间====%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); } } WriteLog("采购分类====%s\n", cgCode); } } else { WriteLog("222\n"); if (cgOutputValueCount > 0) { cgCode = cgOutputValue[0][0]; } /*if (true) { return 0; }*/ WriteLog("333\n"); } if (object_name != NULL) { DOFREE(object_name); } if (limit_value != NULL) { DOFREE(limit_value); } } 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\":\""); int fattrCount = 0; char** fattrChar = new char* [128]; WriteLog("factoryCode=============%s\n", factoryCode); split(factoryCode, ",", fattrChar, &fattrCount); string factoryCodeStr = ""; for (int g = 0; g < fattrCount; g++) { if (!strstr(factoryCodeStr.c_str(), fattrChar[g])) { factoryCodeStr.append(fattrChar[g]); factoryCodeStr.append(","); } } WriteLog("factoryCodeStr.c_str()=============%s\n", factoryCodeStr.c_str()); strcat(parameters, factoryCodeStr.c_str()); if (organization != NULL && strcmp(organization, "") != 0) { 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); } else { strcat(parameters, ""); } 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; WriteLog("key: %s \n", key.c_str()); WriteLog("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()); WriteLog("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)); // WriteLog("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); //} // //20250721修改 5、单位字段由原先特定转换改为全部按BIP分类获取物料分类对照表中的单位 strcat(parameters, "\""); strcat(parameters, key.c_str()); strcat(parameters, "\":\""); if (punit != NULL) { strcat(parameters, punit); } strcat(parameters, "\""); } //重量特殊处理 else if (strcmp("netWeight", key.c_str()) == 0) { strcat(parameters, "\"netWeightUnitCode\":\"KG\","); ITKCALL(AOM_UIF_ask_value(attachments[i], attrChar[1], &value)); WriteLog("value=============================%s\n", value); if (value != NULL && strcmp("", value) != 0 && 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, "\""); } //rb3_th 特殊处理 else if (strcmp("rb3_th", attrChar[1]) == 0) { ITKCALL(AOM_UIF_ask_value(attachments[i], attrChar[1], &value)); WriteLog("rb3_th====%s\n", value); if (strstr(value,"XX-") || strstr(value, "SF-")) { removeSubstring(value, "XX-"); removeSubstring(value, "SF-"); } WriteLog("rb3_th===========%s\n", value); strcat(parameters, "\""); strcat(parameters, key.c_str()); strcat(parameters, "\":\""); 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); //} //20250721 增加去掉"无" 拼接的逻辑 if (strstr(attrChar[1], "&") != NULL) { int attrNum = 0; char** allAttrs = new char* [128]; //分割字符串 split(attrChar[1], "&", allAttrs, &attrNum); WriteLog("---attrChar===========%s\n", attrChar[1]); 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); WriteLog("---value===========%s\n", value); WriteLog("---allAttrs[i]===========%s\n", allAttrs[i]); if (strcmp(allAttrs[i], "振动加速度") == 0 || strcmp(allAttrs[i], "振动等级") == 0 || strcmp(allAttrs[i], "振动速度") == 0) { if (value != NULL) { int id = attrMap[allAttrs[i]]; char* disValue; getClassValue(value, id, &disValue); WriteLog("---disValue1===========%s\n", disValue); if (strcmp(disValue, "无") == 0) { strcat(values, ""); } else { if (strstr(disValue, ":")) { int mhNum = 0; char** mhAttrs = new char* [128]; //分割字符串 split(disValue, ":", mhAttrs, &mhNum); WriteLog("---mhAttrs===========%s\n", mhAttrs[0]); strcat(values, mhAttrs[0]); } else { int id = attrMap[allAttrs[i]]; char* disValue; getClassValue(value, id, &disValue); WriteLog("---disValue22===========%s\n", disValue); strcat(values, disValue); } } DOFREE(disValue); } } else { if (value != NULL) { int id = attrMap[allAttrs[i]]; char* disValue; getClassValue(value, id, &disValue); WriteLog("---disValue===========%s\n", disValue); strcat(values, disValue); DOFREE(disValue); } } } 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()) { //WriteLog("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()) { //WriteLog("2222\n"); attrChar[1] = "密封材料"; } else if (attrMap.find("密封材料(带轮端)") != attrMap.end()) { attrChar[1] = "密封材料(带轮端)"; } else if (attrMap.find("(内密封件材料)") != attrMap.end()) { attrChar[1] = "(内密封件材料)"; } } //WriteLog("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); /* WriteLog("id = %d \n", id); WriteLog("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, "\":\"\""); } } WriteLog("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) { WriteLog("零部件特殊处理\n"); char* value = NULL; if (attrMap.find("类别") != attrMap.end()) { ICS_ask_attribute_value(ico_tag, "类别", &value); WriteLog("类别 : %s \n", value); if (value != NULL && strcmp(value,"") != 0) { int id = attrMap["类别"]; char* disValue; getClassValue(value, id, &disValue); WriteLog("disValue : %s \n", disValue); if (disValue != NULL && 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 { WriteLog("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, "]"); //WriteLog("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"); WriteLog("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"); //WriteLog("路径:\n%s\n", cmd); char buf[8000] = { 0 }; FILE* pf = NULL; if ((pf = _popen(cmd, "r")) == NULL) { WriteLog("接口返回:\n%s", "1"); } while (fgets(buf, sizeof buf, pf)) { strResult += buf; } _pclose(pf); cout << strResult << endl; unsigned int iSize = strResult.size(); char errorMessage[100000] = "";//写入到文件的值 if (iSize > 0 && strResult[iSize - 1] == '\n' && strlen(parameters) > 0) { strResult = strResult.substr(0, iSize - 1); //WriteLog("下发失败\n"); //cout << strResult << endl; if (strstr(strResult.c_str(), "\"code\":200") != NULL) { WriteLog("下发成功\n"); } else { strcat(errorMessage, strResult.c_str()); WriteLog("发送邮件:%d", user_cnt); for (int i = 0; i < user_cnt; i++) { char cmd[10240] = ""; // 64KB char jarfile[512] = ""; string mail_addr = mail_addrs[i]; if (mail_addr.size() > 0) { WriteLog(">> %d. 发送邮件给[%s]", i + 1, mail_addr.c_str()); sprintf(jarfile, "%s\\bin\\EMailSender.jar", getenv("TC_ROOT")); strcpy_s(cmd, "java -jar "); strcat_s(cmd, jarfile); strcat_s(cmd, " \""); strcat_s(cmd, mail_addr.c_str()); strcat_s(cmd, "\" \"【TeamCenter】传递ERP-ITEM提醒\" \""); strcat_s(cmd, job_name); strcat_s(cmd, ":发送数据失败->"); strcat_s(cmd, errorMessage); strcat_s(cmd, "\""); WriteLog("CMD:%s", cmd); system(cmd); WriteLog("执行完成"); } DOFREE(cmd); } ifail = EPM_go; } } WriteLog("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); //} /*if (ifail == EPM_nogo) { EMH_store_error_s1(EMH_severity_user_error, EMH_USER_error_base, errorMessage); }*/ WriteLog("=========================对象下发到ERP rule End===================\n"); CloseLog(); return ifail; }