You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

649 lines
19 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

//#define _CRT_SECURE_NO_WARNINGS
//#include "epm_handler_common.h"
//
//void getBomLineReplaceItem(tag_t topLine, vector<tag_t> &bomLine);
//void getItemJson(int index,tag_t topLine, tag_t BomLine, bool isStart, map<string, string> typePropertyType, char parameters[100000]);
//void getBomLineProperty(tag_t topLine, tag_t BomLine, map<string, string> 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<arg_cnt; i++)
// {
// //获取下一个参数从0开始
// arg = TC_next_argument(msg.arguments);
// //获取参数的名称和值
// ifail = ITK_ask_argument_named_value((const char*)arg, &argflag, &argvalue);
// if (stricmp(argflag, "ownerId") == 0)
// {
// if (argvalue != NULL)
// {
// strcpy(messageUser, argvalue);
// }
// }
// else if (stricmp(argflag, "messageResult") == 0)
// {
// if (argvalue != NULL)
// {
// strcpy(messageResult, argvalue);
// }
// }
// }
// }
//
// vector<char *> 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<string, string> 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<char*, char*>(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<tag_t> 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<char *>().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<tag_t> &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<string, string> 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<string, string> 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);
//}