//#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);
//}