//#define _CRT_SECURE_NO_WARNINGS //#include "epm_handler_common.h" // //void getBomLineReplaceItem(tag_t topLine, vector &bomLine); //void getItemJson(int index,tag_t topLine, tag_t BomLine, bool isStart, map typePropertyType, char parameters[100000]); //void getBomLineProperty(tag_t topLine, tag_t BomLine, map typePropertyType, char * bomBaseNum, char * sortString, char parameters[100000]); // //int ML_SendSapBom(EPM_action_message_t msg) //{ // printf("=========================BOM下发到SAP 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; // //获取首选项的值 // PREF_ask_char_values("ML_BOMSendSapProperty", &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])); // } // } // // bool isStart = true; // char *tc_root_file = getenv("tc_root"); //C:\Siemens\Teamcenter11 // char* parameters = new char[100000000]; // //char parameters[100000] = "";//写入到文件的值 // strcat(parameters, "getBomPropertys}}"); // strcat(parameters, "["); // for (int i = 0; i < attachments_num; i++) // { // char *itemType = NULL; // AOM_ask_value_string(attachments[i], "object_type", &itemType); // // printf("itemType%s Start===================\n", itemType); // // //过滤掉非版本的对象 // if ((strcmp(itemType, "ML8_RefrigeratorRevision") == 0) || (strcmp(itemType, "ML8_WashingRevision") == 0) // || (strcmp(itemType, "ML8_ColdRevision") == 0) || (strcmp(itemType, "ML8_OthersRevision") == 0) || (strcmp(itemType, "ML8_PartRevision") == 0) // || (strcmp(itemType, "ML8_RawMaterialRevision") == 0)) // { // //判断ml8_AddTrade为否ml8_ProcessingMode为外协外购并且包含子件则不传递 // //char * addTrade = NULL, * processingMode = NULL; // //AOM_ask_value_string(attachments[i], "ml8_AddTrade", &addTrade); // //AOM_ask_value_string(attachments[i], "ml8_ProcessingMode", &processingMode); // //int childNum = 0; // //tag_t * childItem = NULLTAG; // ////获取子件 // //AOM_ask_value_tags(attachments[i], "ps_children", &childNum, &childItem); // //if (strcmp(addTrade, "否") == 0 && strcmp(processingMode, "外协外购") == 0 && childNum > 0) // //{ // // MEM_free(addTrade); // // MEM_free(processingMode); // // MEM_free(childItem); // // continue; // //} // // //获取所有包含替代项目组的BOM行 // vector bomLines; // //获取子项 // tag_t top_line = NULLTAG, window = NULLTAG; // BOM_create_window(&window); // //设置顶层BOM // BOM_set_window_top_line(window, NULLTAG, attachments[i], NULLTAG, &top_line); // getBomLineReplaceItem(top_line, bomLines); // if (bomLines.size() > 0) // { // for (int j = 0; j < bomLines.size(); j++) // { // tag_t bomLine = bomLines.at(j); // //获取单个的json字符串 // if (isStart) // { // getItemJson(j + 1,top_line, bomLine, isStart, typePropertyType, parameters); // isStart = false; // } // else // { // getItemJson(j + 1, top_line, bomLine, isStart, typePropertyType, parameters); // } // } // } // else // { // //获取单个的json字符串 // if (isStart) // { // getItemJson(-1,top_line, NULLTAG, isStart, typePropertyType, parameters); // isStart = false; // } // else // { // getItemJson(-1, top_line, NULLTAG, isStart, typePropertyType, parameters); // } // } // // BOM_close_window(window); // // /*MEM_free(addTrade); // MEM_free(processingMode); // MEM_free(childItem);*/ // } // // MEM_free(itemType); // } // strcat(parameters, "]"); // //获取当前时间 // time_t now = time(0); // tm *p = localtime(&now); // // char date[128] = ""; // sprintf_s(date, "%04d%02d%02d%02d%02d%02d", 1900 + p->tm_year, p->tm_mon + 1, p->tm_mday, p->tm_hour, p->tm_min, p->tm_sec); // // //把数据用写入文件 // char data_file[SS_MAXPATHLEN] = ""; // strcat(data_file, tc_root_file); // strcat(data_file, "\\"); // strcat(data_file, date); // strcat(data_file, ".txt"); // // ofstream file; // file.open(data_file); // file << parameters << endl; // 使用与cout同样的方式进行写入 // file.close(); // // string strResult; // // //cmd指令 // char cmd[256] = ""; // strcpy(cmd, "java -jar \""); // //strcat(cmd, jar_file); // strcat(cmd, tc_root_file); // strcat(cmd, "\\portal\\plugins\\"); // strcat(cmd, "ML_SendSap.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; // //发送消息到企业微信 // for (auto messageUserValue : messageUserValues) { // BOMSendToWeixin(messageUserValue, rootTask, strResult); // } // if (strcmp(messageResult, "1") == 0) // { // ifail = 1; // } // } // else // { // POM_AM__set_application_bypass(TRUE); // //获取首次发送时间 // for (int i = 0; i < attachments_num; i++) // { // char *itemType = NULL; // AOM_ask_value_string(attachments[i], "object_type", &itemType); // //过滤掉非版本的对象 // if ((strcmp(itemType, "ML8_RefrigeratorRevision") == 0) || (strcmp(itemType, "ML8_WashingRevision") == 0) // || (strcmp(itemType, "ML8_ColdRevision") == 0) || (strcmp(itemType, "ML8_OthersRevision") == 0) || (strcmp(itemType, "ML8_PartRevision") == 0) // || (strcmp(itemType, "ML8_RawMaterialRevision") == 0)) // { // char * sendTime = NULL; // // AOM_ask_value_string(attachments[i], "ml8_BOMFirstTime", &sendTime); // // //获取当前时间 // time_t now = time(0); // tm *p = localtime(&now); // // char dateNow[128] = ""; // sprintf_s(dateNow, "%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); // // AOM_lock(attachments[i]); // if (sendTime == NULL || strcmp(sendTime, "") == 0) // { // AOM_set_value_string(attachments[i], "ml8_BOMFirstTime", dateNow); // } // else // { // AOM_set_value_string(attachments[i], "ml8_BOMNewTime", dateNow); // } // AOM_save(attachments[i]); // AOM_unlock(attachments[i]); // AOM_refresh(attachments[i], false); // DOFREE(sendTime); // } // DOFREE(itemType); // } // POM_AM__set_application_bypass(FALSE); // } // 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("=========================BOM下发到SAP End===================\n"); // return ifail; //} // //void getBomLineReplaceItem(tag_t topLine, vector &bomLine) //{ // int count; // tag_t *children_line; // // BOM_line_ask_all_child_lines(topLine, &count, &children_line); // // for (int i = 0; i < count; i++) // { // char * replaceProject = NULL; // AOM_ask_value_string(children_line[i], "ML8_ProjectTeam", &replaceProject); // printf("ML8_ProjectTeam%s===================\n", replaceProject); // if (replaceProject != NULL && strcmp(replaceProject, "") != 0) // { // bomLine.push_back(children_line[i]); // } // DOFREE(replaceProject); // } // DOFREE(children_line); //} // //void getItemJson(int index,tag_t topLine, tag_t BomLine, bool isStart, map typePropertyType, char parameters[100000]) //{ // // if (isStart) // { // strcat(parameters, "{"); // } // else // { // strcat(parameters, ",{"); // } // //获取属性 // char * matnr = NULL; // char * werks = NULL; // char * bomusage = NULL; // char * alternative = NULL; // char * validdate = "20090301"; // char * description = NULL; // char * basequan = NULL; // char * sortString = NULL; // //char * lineCode = NULL; // // tag_t revisions = NULLTAG; // // AOM_ask_value_tag(topLine, "bl_line_object", &revisions); // // AOM_ask_value_string(topLine, "bl_item_item_id", &matnr); // AOM_ask_value_string(revisions, "ml8_Factory1", &werks); // //AOM_ask_value_string(revisions, "ml8_LineCode", &lineCode); // if (werks == NULL || strcmp(werks, "") == 0) // { // AOM_ask_value_string(revisions, "ml8_Factory", &werks); // } // AOM_ask_value_string(revisions, "ml8_BOMPurpose", &bomusage); // if (index > -1) // { // char itc[10]; // _itoa(index, itc, 10); // alternative = itc; // } // else // { // AOM_ask_value_string(revisions, "ml8_SAPBOMRevision", &alternative); // if (alternative == NULL || strcmp(alternative, "") == 0) // { // alternative = "1"; // } // } // if (strstr(matnr, "-") != NULL) // { // //按照,进行拆分。拆分条件 // int matnrCount = 0; // char ** matnrChar = new char *[64]; // //分割字符串 // split(matnr, "-", matnrChar, &matnrCount); // // matnr = matnrChar[0]; // } // // AOM_ask_value_string(topLine, "bl_item_object_name", &description); // AOM_ask_value_string(revisions, "ml8_BOMBasicQuantity", &basequan); // AOM_ask_value_string(revisions, "ml8_SortString", &sortString); // // if (basequan == NULL || strcmp(basequan, "") == 0) // { // basequan = "1000"; // } // // //if ((sortString == NULL || strcmp(sortString, "") == 0) && lineCode != NULL && strcmp(lineCode, "") != 0) // //{ // // sortString = getLineCode(lineCode); // //} // // // strcat(parameters, "\"matnr\":\""); // strcat(parameters, matnr); // strcat(parameters, "\","); // strcat(parameters, "\"werks\":\""); // strcat(parameters, werks); // strcat(parameters, "\","); // strcat(parameters, "\"bomusage\":\""); // strcat(parameters, bomusage); // strcat(parameters, "\","); // strcat(parameters, "\"alternative\":\""); // //strcat(parameters, lineCode); // strcat(parameters, alternative); // strcat(parameters, "\","); // strcat(parameters, "\"validdate\":\""); // strcat(parameters, validdate); // strcat(parameters, "\","); // strcat(parameters, "\"description\":\""); // strcat(parameters, description); // strcat(parameters, "\","); // strcat(parameters, "\"basequan\":\""); // strcat(parameters, basequan); // strcat(parameters, "\","); // // strcat(parameters, "\"itemdetail\":["); // getBomLineProperty(topLine, BomLine, typePropertyType, basequan, sortString, parameters); // strcat(parameters, "]"); // strcat(parameters, "}"); // // DOFREE(matnr); // DOFREE(werks); // DOFREE(bomusage); // DOFREE(alternative); // DOFREE(validdate); // DOFREE(description); // DOFREE(basequan); //} // //void getBomLineProperty(tag_t topLine, tag_t BomLine, map typePropertyType, char * bomBaseNum, char * sortString, char parameters[100000]) //{ // //char parameters[100000] = "";//写入到文件的值 // bool isStart = true; // int count; // tag_t *children_line = NULLTAG; // // BOM_line_ask_all_child_lines(topLine, &count, &children_line); // // for (int i = 0; i < count; i++) // { // char * replaceProject = NULL; // AOM_ask_value_string(children_line[i], "ML8_ProjectTeam", &replaceProject); // // if (replaceProject != NULL && strcmp(replaceProject, "") != 0 && BomLine != NULLTAG) // { // //判断是否等于传进来的BOM行 // char * itemId = NULL; // AOM_ask_value_string(children_line[i], "bl_item_item_id", &itemId); // char * inputItemId = NULL; // AOM_ask_value_string(BomLine, "bl_item_item_id", &inputItemId); // if (strcmp(itemId, inputItemId) != 0) // { // continue; // } // } // // char *itemType = NULL; // AOM_ask_value_string(children_line[i], "fnd0bl_line_object_type", &itemType); // char * puid = NULL; // //获取PUID // ITK__convert_tag_to_uid(children_line[i], &puid); // //过滤掉非版本的对象 // string propertyNames = typePropertyType[itemType]; // if (propertyNames.c_str() != NULL) // { // 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]); // strcat(parameters, "\""); // strcat(parameters, ":"); // // char * item_rev_value = NULL; // TCGetPropertyValue(children_line[i], "BOMLine", values[0], &item_rev_value); // if (strcmp(values[1], "itemno") == 0) // { // //需要*10后,格式化为4位长度后进行传递 // int number = std::atoi(item_rev_value); // stringToLenth(number * 10, 4, &item_rev_value); // } // else if (strcmp(values[1], "compqty") == 0) // { // //BOM关系中子项数量*SAP BOM基本数量 // double bomNum = atof(item_rev_value); // double bomBase = atof(bomBaseNum); // double sum = bomNum*bomBase; // char * sumChar = new char[20]; // sprintf(sumChar, "%.3f", sum); // //cout << "bomNum【" << bomNum << "】,bomBaseNum【" << bomBaseNum << "】,bomBase【" << bomBase << "】,sum【" << sum << "】,sumChar【" << sumChar << "】\n" << endl; // //printf("bomNum【%d】,bomBaseNum【%s】,bomBase:【%d】,sum:【%d】,sumChar:【%s】\n", bomNum, bomBaseNum,bomBase, sum, sumChar); // item_rev_value = sumChar; // } // else if (strcmp(values[1], "itemtext1") == 0) // { // if (item_rev_value == NULL || strcmp(item_rev_value, "") == 0 || strcmp(item_rev_value, "Eac") == 0 || strcmp(item_rev_value, "Each.") == 0 || strcmp(item_rev_value, "每个") == 0) // { // item_rev_value = "ea"; // } // } // else if (strcmp(values[1], "sortstring") == 0) // { // item_rev_value = sortString; // } // else if (strcmp(values[1], "component") == 0) // { // if (strstr(item_rev_value, "-") != NULL) // { // //按照,进行拆分。拆分条件 // int matnrCount = 0; // char ** matnrChar = new char *[64]; // //分割字符串 // split(item_rev_value, "-", matnrChar, &matnrCount); // // item_rev_value = matnrChar[0]; // } // } // // 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; // // } // // strcat(parameters, "\""); // strcat(parameters, item_rev_value); // strcat(parameters, "\""); // if (k < valueCount - 1) // { // strcat(parameters, ","); // } // //printf(parameters); // // DOFREE(item_rev_value); // } // } // } // else // { // //按照-进行拆分。拆分条件 // int valueCount = 0; // char ** valueChar = new char *[64]; // //分割字符串 // split(name, "=", valueChar, &valueCount); // // strcat(parameters, "\""); // strcat(parameters, valueChar[1]); // strcat(parameters, "\""); // strcat(parameters, ":"); // // char * item_rev_value = NULL; // TCGetPropertyValue(children_line[i], "BOMLine", valueChar[0], &item_rev_value); // // if (strcmp(valueChar[1], "itemno") == 0) // { // //需要*10后,格式化为4位长度后进行传递 // int number = std::atoi(item_rev_value); // stringToLenth(number * 10, 4, &item_rev_value); // } // else if (strcmp(valueChar[1], "compqty") == 0) // { // //BOM关系中子项数量*SAP BOM基本数量 // double bomNum = atof(item_rev_value); // double bomBase = atof(bomBaseNum); // double sum = bomNum*bomBase; // char * sumChar = new char[20]; // sprintf(sumChar, "%.3f", sum); // //cout << "bomNum【" << bomNum << "】,bomBaseNum【" << bomBaseNum << "】,bomBase【" << bomBase << "】,sum【" << sum << "】,sumChar【" << sumChar << "】\n" << endl; // item_rev_value = sumChar; // } // else if (strcmp(valueChar[1], "itemtext1") == 0) // { // if (item_rev_value == NULL || strcmp(item_rev_value, "") == 0 || strcmp(item_rev_value, "Eac") == 0 || strcmp(item_rev_value, "Each.") == 0 || strcmp(item_rev_value, "每个") == 0) // { // item_rev_value = "ea"; // } // } // else if (strcmp(valueChar[1], "sortstring") == 0) // { // item_rev_value = sortString; // } // else if (strcmp(valueChar[1], "component") == 0) // { // if (strstr(item_rev_value, "-") != NULL) // { // //按照,进行拆分。拆分条件 // int matnrCount = 0; // char ** matnrChar = new char *[64]; // //分割字符串 // split(item_rev_value, "-", matnrChar, &matnrCount); // // item_rev_value = matnrChar[0]; // } // } // 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; // // } // strcat(parameters, "\""); // strcat(parameters, item_rev_value); // strcat(parameters, "\""); // // //printf(parameters); // // DOFREE(item_rev_value); // } // strcat(parameters, "}"); // // DOFREE(constName); // } // // // DOFREE(replaceProject); // DOFREE(itemType); // DOFREE(puid); // } // // DOFREE(children_line); //}