#define _CRT_SECURE_NO_WARNINGS #include "epm_handler_common.h" #include #include #import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF")rename("BOF","adoBOF") #include #include #include #include #include #include #include #include #include #pragma warning(disable : 4996) #include #include #include #include extern "C" int POM_AM__set_application_bypass(logical bypass); using namespace std; #define DOFREE(obj) \ { \ if(obj) \ { \ MEM_free(obj); \ obj = NULL; \ } \ } char *MATNR, *WERKS, *STLAN, *STALT, *VBELN, *VBPOS, *BMENG, *POSNR, *POSTP, *IDNRK, *MENGE, *MEINS, *POTX1, *POTX2; //函数 void getBomPropertys(EPM_action_message_t msg, int ifail); void getBomLinePropertys(tag_t top_line,char *type); void getBomLinePropertysBom(tag_t top_line,string topUUID,char * carModel, _ConnectionPtr m_pConnection); int countNum = 1; long countInsertSql = 0; //int countNumCoe = countNum * 512; char *parameters; string getUUid() { char buffer[64] = { 0 }; GUID guid; if ( CoCreateGuid(&guid) ) { fprintf(stderr, "create guid error\n"); return ""; } _snprintf(buffer, sizeof(buffer),"%08X-%04X-%04x-%02X%02X-%02X%02X%02X%02X%02X%02X",guid.Data1, guid.Data2, guid.Data3, guid.Data4[0], guid.Data4[1], guid.Data4[2],guid.Data4[3], guid.Data4[4], guid.Data4[5],guid.Data4[6], guid.Data4[7]); //printf("guid: %s\n", buffer); return buffer; } int JLCS_05_BOMSendOutSap_Single(EPM_action_message_t msg) { printf("开始执行\n"); int ifail = ITK_ok; parameters = (char*)malloc(100000 * sizeof(char)); strcpy(parameters, "getBomPropertys}}"); //parameters = "getBomPropertys}}"; printf("parameters1:\n%s\n", parameters); int attachments_num; int bvr_count; tag_t rootTask = NULLTAG, *attachments = NULLTAG, top_line = NULLTAG, *children_line = NULLTAG, *bvr_list = NULLTAG; tag_t bom_window_tag; char *object_type = NULL; int count; char *tc_root_file = getenv("tc_root"); //获取tc_root的路径==C:\Siemens\Teamcenter11 char jar_file[SS_MAXPATHLEN] = ""; strcpy(jar_file, tc_root_file); strcat(jar_file, "\\portal\\plugins\\"); strcat(jar_file, "JLCS_05.jar"); //获取任务对象 EPM_ask_root_task(msg.task, &rootTask); //获取任务目标对象 EPM_ask_attachments(rootTask, EPM_target_attachment, &attachments_num, &attachments); //char *temp_dir = getenv("temp"); //C:\Windows\temp for (int i = 0; i < attachments_num; i++) { //获取topline AOM_ask_value_string(attachments[i], "object_type", &object_type); printf("object_type=%s \n", object_type); //过滤掉非版本的对象 if((strstr(object_type,"Revision") == NULL) || (strstr(object_type,"Master") != NULL) || (strstr(object_type,"master") != NULL) || (strstr(object_type,"BOM") != NULL) || (strstr(object_type,"bom") != NULL) || (strstr(object_type,"Bom") != NULL)) { continue; } char * puid = NULL; //获取PUID ITK__convert_tag_to_uid(attachments[i], &puid); //strcat(parameters, puid); //strcat(parameters, "}}"); printf("object_type2=%s \n", object_type); //if (strcmp("ItemRevision", object_type) == 0) { ITEM_rev_list_bom_view_revs(attachments[i], &bvr_count, &bvr_list); //printf("视图数量=%d \n", bvr_count); if (bvr_count == 0) { continue; } //传参属性 BOM_create_window(&bom_window_tag); BOM_set_window_top_line_bvr(bom_window_tag, bvr_list[bvr_count - 1], &top_line); //BOM_ask_window_top_line(bom_window_tag, &top_line); printf("parameters1:\n%s\n", parameters); //getBomLinePropertys(top_line,puid); BOM_line_ask_all_child_lines(top_line, &count, &children_line); for (int ii = 0; ii < count; ii++) { char * object_type = NULL; //获取版本 tag_t partItemRevision = NULLTAG, parentItemRevision = NULLTAG; AOM_ask_value_tag(children_line[ii],"bl_line_object",&partItemRevision); AOM_ask_value_tag(top_line,"bl_line_object",&parentItemRevision); //ITKCALL(ITEM_ask_latest_rev(partItem,&partItemRevision)); AOM_ask_value_string(partItemRevision, "object_type", &object_type); //过滤非零件版本的对象 if (strcmp("Gd6_PartsRevision", object_type) == 0 || strcmp("Gd6_BZJRevision", object_type) == 0|| strcmp("Gd6_XZMKCRevision", object_type) == 0) { int item_mast_rev_count = 0; tag_t * item_mast_rev = NULLTAG; //获取版本表单 ITKCALL(AOM_ask_value_tags(partItemRevision, "IMAN_master_form_rev", &item_mast_rev_count, &item_mast_rev ) ) //获取topline属性 //父件代号 AOM_ask_value_string(parentItemRevision, "item_id", &MATNR); //父件工厂 WERKS = "6300"; //AOM_ask_value_string(children_line[ii], "bl_formatted_parent_name", &bl_formatted_parent_name); //BOM用途 STLAN = "1"; //可选BOM STALT = "1"; //销售单号 VBELN = ""; //订单行项目 VBPOS = ""; //父件数量 AOM_ask_value_string(top_line, "bl_quantity", &BMENG); //BOM项目号 AOM_ask_value_string(children_line[ii], "bl_sequence_no", &POSNR); //项目类别 POSTP = "L"; //子件代号 AOM_ask_value_string(partItemRevision, "item_id", &IDNRK); //子件数量 AOM_ask_value_string(children_line[ii], "bl_quantity", &MENGE); //子件单位 AOM_ask_value_string(item_mast_rev[0], "gd6_dw", &MEINS); //配送区域 AOM_ask_value_string(children_line[0], "Gd6_psqy", &POTX1); //生产工位/配送工位gd6_scgw&gd6_psgw char * scgw = NULL, * psgw = NULL; AOM_ask_value_string(children_line[0], "Gd6_scgw", &scgw); AOM_ask_value_string(children_line[0], "Gd6_psgw", &psgw); strcat(parameters, MATNR); strcat(parameters, ","); strcat(parameters, WERKS); strcat(parameters, ","); strcat(parameters, STLAN); strcat(parameters, ","); strcat(parameters, STALT); strcat(parameters, ","); strcat(parameters, VBELN); strcat(parameters, ","); strcat(parameters, VBPOS); strcat(parameters, ","); strcat(parameters, BMENG); strcat(parameters, ","); strcat(parameters, POSNR); strcat(parameters, ","); strcat(parameters, POSTP); strcat(parameters, ","); strcat(parameters, IDNRK); strcat(parameters, ","); strcat(parameters, MENGE); strcat(parameters, ","); strcat(parameters, MEINS); strcat(parameters, ","); strcat(parameters, POTX1); strcat(parameters, ","); strcat(parameters, scgw); strcat(parameters, ","); strcat(parameters, psgw); strcat(parameters, ","); strcat(parameters, puid); strcat(parameters, "}}"); //strcat(parameters, parameter); printf("parameter:\n%s\n", parameters); //strcat(parameters, C5_gc); //strcat(parameters, C5_scgw); //char cmd[256] = ""; //strcpy(cmd, "java -jar \""); //strcat(cmd, jar_file); //strcat(cmd, "\" "); //传参 //strcat(cmd, parameter); //printf("路径:\n%s\n", cmd); //system(cmd); //countNum++; } } //DOFREE(puid) //char *strResult = (char*)malloc((strlen(parameters) + 512) * sizeof(int));; //string strResult; /*while (fgets(buf, sizeof buf, pf) != NULL) { printf("%s", buf); EMH_store_error_s1( EMH_severity_user_error, EMH_USER_error_base,buf); ifail = 1; }*/ //} } //把数据用写入文件 char data_file[SS_MAXPATHLEN] = ""; strcat(data_file,tc_root_file); strcat(data_file,"\\single_bom.txt"); FILE* fptr; fptr = fopen(data_file, "w"); fprintf(fptr, "%s", parameters); fclose(fptr); char *cmd = (char*)malloc(512 * sizeof(int)); strcpy(cmd, "java -jar \""); strcat(cmd, jar_file); strcat(cmd, "\" "); //传参 strcat(cmd, data_file); strcat(cmd,"getBomPropertys"); printf("路径:\n%s\n", cmd); char buf[64] = {0}; FILE *pf = NULL; if ((pf = _popen(cmd, "r")) == NULL) { printf("接口返回:\n%s", "1"); } string strResult; while (fgets(buf, sizeof buf, pf)) { strResult += buf; } _pclose(pf); unsigned int iSize = strResult.size(); if (iSize > 0 && strResult[iSize - 1] == '\n') { strResult = strResult.substr(0, iSize - 1); //获取流程作业 tag_t job = NULLTAG; EPM_ask_job(rootTask,&job); POM_AM__set_application_bypass(true); //设置描述属性值 //先lock AOM_lock(job); //再set AOM_set_value_string(job,"object_desc",strResult.c_str()); //再save AOM_save( job ) ; //最后unlock AOM_unlock( job ) ; AOM_refresh( job,FALSE ); POM_AM__set_application_bypass(false); //EMH_store_error_s1( EMH_severity_user_error, EMH_USER_error_base,strResult.c_str()); //ifail = 1; } //system(cmd); BOM_close_window(bom_window_tag); DOFREE(bvr_list); parameters = NULL; cmd = NULL; DOFREE(attachments); tc_root_file = NULL; DOFREE(children_line); DOFREE(MATNR); WERKS = NULL; STLAN = NULL; STALT = NULL; VBELN = NULL; VBPOS = NULL; BMENG = NULL; DOFREE(POSNR); POSTP = NULL; DOFREE(IDNRK); DOFREE(MENGE); DOFREE(MEINS); DOFREE(POTX1); DOFREE(POTX2); printf("执行结束\n"); return ifail; } int JLCS_05_BOMSendOutSap(EPM_action_message_t msg) { printf("开始执行\n"); int ifail = ITK_ok; parameters = (char*)malloc(512 * sizeof(char)); strcpy(parameters, "getBomPropertys}}"); //parameters = "getBomPropertys}}"; printf("parameters1:\n%s\n", parameters); int attachments_num; int bvr_count; tag_t rootTask = NULLTAG, *attachments = NULLTAG, top_line = NULLTAG, *children_line = NULLTAG, *bvr_list = NULLTAG; tag_t bom_window_tag; char *object_type = NULL; int count; char *tc_root_file = getenv("tc_root"); //获取tc_root的路径==C:\Siemens\Teamcenter11 char jar_file[SS_MAXPATHLEN] = ""; strcpy(jar_file, tc_root_file); strcat(jar_file, "\\portal\\plugins\\"); strcat(jar_file, "JLCS_05.jar"); //获取任务对象 EPM_ask_root_task(msg.task, &rootTask); //获取任务目标对象 EPM_ask_attachments(rootTask, EPM_target_attachment, &attachments_num, &attachments); //char *temp_dir = getenv("temp"); //C:\Windows\temp for (int i = 0; i < attachments_num; i++) { //获取topline AOM_ask_value_string(attachments[i], "object_type", &object_type); printf("object_type=%s \n", object_type); //过滤掉非版本的对象 if((strstr(object_type,"Revision") == NULL) || (strstr(object_type,"Master") != NULL) || (strstr(object_type,"master") != NULL) || (strstr(object_type,"BOM") != NULL) || (strstr(object_type,"bom") != NULL) || (strstr(object_type,"Bom") != NULL)) { continue; } char * puid = NULL; //获取PUID ITK__convert_tag_to_uid(attachments[i], &puid); strcat(parameters, puid); strcat(parameters, "}}"); printf("object_type2=%s \n", object_type); //if (strcmp("ItemRevision", object_type) == 0) { ITEM_rev_list_bom_view_revs(attachments[i], &bvr_count, &bvr_list); //printf("视图数量=%d \n", bvr_count); if (bvr_count == 0) { continue; } //传参属性 BOM_create_window(&bom_window_tag); BOM_set_window_top_line_bvr(bom_window_tag, bvr_list[bvr_count - 1], &top_line); //BOM_ask_window_top_line(bom_window_tag, &top_line); printf("parameters1:\n%s\n", parameters); getBomLinePropertys(top_line,NULL); char *cmd = (char*)malloc((strlen(parameters) + 512) * sizeof(int)); strcpy(cmd, "java -jar \""); strcat(cmd, jar_file); strcat(cmd, "\" "); //传参 strcat(cmd, parameters); //printf("路径:\n%s\n", cmd); char buf[64] = {0}; FILE *pf = NULL; if ((pf = _popen(cmd, "r")) == NULL) { printf("接口返回:\n%s", "1"); } string strResult; while (fgets(buf, sizeof buf, pf)) { strResult += buf; } _pclose(pf); unsigned int iSize = strResult.size(); if (iSize > 0 && strResult[iSize - 1] == '\n') { strResult = strResult.substr(0, iSize - 1); //获取流程作业 tag_t job = NULLTAG; EPM_ask_job(rootTask,&job); POM_AM__set_application_bypass(true); //设置描述属性值 //先lock AOM_lock(job); //再set AOM_set_value_string(job,"object_desc",strResult.c_str()); //再save AOM_save( job ) ; //最后unlock AOM_unlock( job ) ; AOM_refresh( job,FALSE ); POM_AM__set_application_bypass(false); //EMH_store_error_s1( EMH_severity_user_error, EMH_USER_error_base,strResult.c_str()); //ifail = 1; } //char *strResult = (char*)malloc((strlen(parameters) + 512) * sizeof(int));; //string strResult; /*while (fgets(buf, sizeof buf, pf) != NULL) { printf("%s", buf); EMH_store_error_s1( EMH_severity_user_error, EMH_USER_error_base,buf); ifail = 1; }*/ _pclose(pf); //system(cmd); BOM_close_window(bom_window_tag); DOFREE(bvr_list); parameters = NULL; cmd = NULL; DOFREE(puid) //} } DOFREE(attachments); tc_root_file = NULL; DOFREE(children_line); DOFREE(MATNR); WERKS = NULL; STLAN = NULL; STALT = NULL; VBELN = NULL; VBPOS = NULL; BMENG = NULL; DOFREE(POSNR); POSTP = NULL; DOFREE(IDNRK); DOFREE(MENGE); DOFREE(MEINS); DOFREE(POTX1); DOFREE(POTX2); printf("执行结束\n"); return ifail; } int Super_Bom_Appent_Data (void *returnValue) { printf("=========================同步超级BOM START ===================\n"); countInsertSql = 0; ::CoInitialize(NULL); //初始化OLE/COM库环境 HRESULT hr = NULL; _ConnectionPtr m_pConnection; // 数据库 _RecordsetPtr m_pRecordset; // 命令 _CommandPtr m_pCommand; // 记录 int valueNum=0; char* server_address; PREF_ask_char_value("TC11_SqlServer_Link_ITK", valueNum, &server_address); char *object_type = NULL, * carModel = NULL; int bvr_count; tag_t * bvr_list = NULLTAG,bom_window_tag = NULLTAG, top_line = NULLTAG; tag_t itemRevision = NULLTAG; ITKCALL(USERARG_get_tag_argument(&itemRevision)); //char *people = NULL; //USERARG_get_string_argument(&people); //获取topline AOM_ask_value_string(itemRevision, "object_type", &object_type); AOM_ask_value_string(itemRevision, "item_id", &carModel); printf("object_type=%s \n", object_type); printf("item_id=%s \n", carModel); ITEM_rev_list_bom_view_revs(itemRevision, &bvr_count, &bvr_list); if (bvr_count == 0) { return 0; } hr = m_pConnection.CreateInstance(_uuidof(Connection));//创建连接对象实例 if (SUCCEEDED(hr)) { /* Provider=SQLOLEDB.1 ------打开数据库用oledb的方式连接bai Persist Security Info ----是否保存安全信息du User ID-------------------用户名 PassWord------------------密码zhi Initial Catalog-----------数据库的名称或者数据库ip或者目dao录 Data Source---------------数据源 */ m_pConnection->ConnectionString = (server_address); //printf("\n==========================================================\n"); hr = m_pConnection->Open("", "", "", adConnectUnspecified);//打开数据库 if (FAILED(hr)) { printf("Open Failed!"); return 1; } else { //m_pRecordset->Open("","", adOpenKeyset,adLockOptimistic,adCmdText); //long RecordCount; //RecordCount=m_pRecordset->Fields->GetItem((long)0)->GetValue(); //修改属性为更新中(如果不存在就新增) long sumrows = 0; char* selectLable = (char*)calloc(1024, sizeof(char)); sprintf(selectLable,"select count(*) from GD_ORDERBOM_LABLE where ItemID = '%s'",carModel); m_pRecordset = m_pConnection->Execute(_bstr_t(selectLable), 0, adCmdText); /*sumrows = m_pRecordset->GetRecordCount();*/ _variant_t vIndex = (long)0; _variant_t vCount = m_pRecordset->GetCollect(vIndex); printf("共有%d条记录",vCount.lVal); sumrows = vCount.lVal; m_pRecordset->Close(); printf("end =%ld\n",sumrows); if(sumrows > 0){ //存在(修改) char* updateLable = (char*)calloc(1024, sizeof(char)); sprintf(updateLable, "update GD_ORDERBOM_LABLE set Lable = '更新中' where ItemID = '%s'", carModel); m_pConnection->Execute(_bstr_t(updateLable), 0, adCmdText); updateLable = NULL; } else{ //不存在(新增) char* insertLable = (char*)calloc(1024, sizeof(char)); sprintf(insertLable, "insert into GD_ORDERBOM_LABLE(ItemID,Lable) values('%s','更新中') ", carModel); m_pConnection->Execute(_bstr_t(insertLable), 0, adCmdText); insertLable = NULL; } selectLable = NULL; //先删除Lable中的一行,再添加。 //char* deleteLable = (char*)calloc(1024, sizeof(char)); //sprintf(deleteLable, "delete from GD_ORDERBOM_LABLE where ItemID = '%s'", carModel); //m_pConnection->Execute(_bstr_t(deleteLable), 0, adCmdText); //deleteLable = NULL; //char* insertLable = (char*)calloc(1024, sizeof(char)); //sprintf(insertLable, "insert into GD_ORDERBOM_LABLE(ItemID,Lable) values('%s','更新中') ", carModel); //m_pConnection->Execute(_bstr_t(insertLable), 0, adCmdText); //insertLable = NULL; //删除数据库中所有内容 char* deleteSql = (char*)calloc(1024, sizeof(char)); tag_t partItemRevision = NULLTAG,item = NULLTAG; sprintf(deleteSql, "delete from GD_ORDERBOM_DATA where carModel = '%s'", carModel); m_pConnection->Execute(_bstr_t(deleteSql), 0, adCmdText); //printf("删除成功!\n"); //添加数据gd6_psgw //传参属性 BOM_create_window(&bom_window_tag); BOM_set_window_top_line_bvr(bom_window_tag, bvr_list[bvr_count - 1], &top_line); string childUUID = carModel; char * itemId = ""; char * formula = ""; char * itemType = ""; char * sequenceNumber = ""; char * hierarchy = ""; char * quantity = ""; char * psqy = ""; char * scqy = ""; char * psqw = ""; char * scgw = ""; char * name = ""; char * sjzl = ""; char * mz = ""; char * wlfl = ""; char * dw = ""; char * jcjwlh = ""; char * sfqdj = ""; char * gyzy = ""; char * clgg = ""; char * clhd = ""; AOM_ask_value_tag(top_line,"bl_line_object",&partItemRevision); ITEM_ask_item_of_rev( partItemRevision, &item); AOM_ask_value_string(item, "object_type", &itemType); AOM_ask_value_string(top_line, "bl_sequence_no", &sequenceNumber); AOM_ask_value_string(top_line, "bl_item_item_id", &itemId); AOM_ask_value_string(top_line, "bl_formula", &formula); //AOM_ask_value_string(children_line[ii], "bl_level_starting_0", &POTX1); AOM_ask_value_string(top_line, "bl_quantity", &quantity); AOM_ask_value_string(top_line, "Gd6_psqy", &psqy); AOM_ask_value_string(top_line, "Gd6_scqy", &scqy); AOM_ask_value_string(top_line, "Gd6_psgw", &psqw); AOM_ask_value_string(top_line, "Gd6_scgw", &scgw); AOM_ask_value_string(top_line, "bl_item_object_name", &name); AOM_ask_value_string(top_line, "bl_Gd6_PartsRevisionMaster_gd6_sjzl", &sjzl); AOM_ask_value_string(top_line, "bl_Gd6_PartsRevisionMaster_gd6_mz", &mz); AOM_ask_value_string(top_line, "bl_Gd6_PartsRevisionMaster_gd6_wlfl", &wlfl); AOM_ask_value_string(top_line, "bl_Gd6_PartsRevisionMaster_gd6_dw", &dw); AOM_ask_value_string(top_line, "bl_Gd6_PartsRevisionMaster_gd6_jcjwlh", &jcjwlh); AOM_ask_value_string(top_line, "bl_Gd6_PartsRevisionMaster_gd6_sfqdj", &sfqdj); AOM_ask_value_string(top_line, "bl_Gd6_PartsRevisionMaster_gd6_gyzy", &gyzy); AOM_ask_value_string(top_line, "bl_Gd6_PartsRevisionMaster_gd6_clgg", &clgg); AOM_ask_value_string(top_line, "bl_Gd6_PartsRevisionMaster_gd6_clhd", &clhd); char* insertSql = (char*)calloc(1024, sizeof(char)); sprintf(insertSql, "INSERT INTO GD_ORDERBOM_DATA (carModel,parentID,id,bl_formula,bl_item_type,bl_sequence_no,uid,hierarchy,bl_quantity,psqy,scqy,psgw,scgw,bl_item_object_name,sjzl,mz,wlfl,dw,jcjwlh,sfqdj,gyzy,realParentID,clgg,clhd) VALUES ('%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s')",carModel,"",itemId,formula,itemType,sequenceNumber,childUUID.c_str(),hierarchy,quantity,psqy,scqy,psqw,scgw,name,sjzl,mz,wlfl,dw,jcjwlh,sfqdj,gyzy,"",clgg,clhd); m_pConnection->Execute(_bstr_t(insertSql), 0, adCmdText); countInsertSql++; deleteSql = NULL; DOFREE(itemId); DOFREE(formula); DOFREE(itemType); DOFREE(sequenceNumber); hierarchy = NULL; DOFREE(quantity); DOFREE(psqy); DOFREE(scqy); DOFREE(psqw); DOFREE(scgw); DOFREE(name); DOFREE(sjzl); DOFREE(mz); DOFREE(wlfl); DOFREE(dw); DOFREE(jcjwlh); DOFREE(sfqdj); DOFREE(gyzy); DOFREE(clgg); DOFREE(clhd); insertSql = NULL; try{ getBomLinePropertysBom(top_line,carModel,carModel,m_pConnection); //判断新增的条目数是否一致 long sqlCount = 0; char* selectCount = (char*)calloc(1024, sizeof(char)); sprintf(selectCount,"select count(*) from GD_ORDERBOM_DATA where carModel = '%s'",carModel); m_pRecordset = m_pConnection->Execute(_bstr_t(selectCount), 0, adCmdText); /*sumrows = m_pRecordset->GetRecordCount();*/ _variant_t vIndexCount = (long)0; _variant_t vCountCount = m_pRecordset->GetCollect(vIndexCount); printf("共新增了%d条记录\n",countInsertSql); printf("数据库中有%d条记录\n",vCountCount.lVal); sqlCount = vCountCount.lVal; m_pRecordset->Close(); if(sqlCount == countInsertSql){ //修改超级BOM的状态(成功) char* updateSql = (char*)calloc(1024, sizeof(char)); sprintf(updateSql, "update GD_ORDERBOM_LABLE set Lable = '更新成功',Remark = '' where ItemID = '%s'", carModel); m_pConnection->Execute(_bstr_t(updateSql), 0, adCmdText); updateSql = NULL; } else{ //修改超级BOM的状态(失败) char* updateSql = (char*)calloc(1024, sizeof(char)); sprintf(updateSql, "update GD_ORDERBOM_LABLE set Lable = '更新失败',Remark = '条目数不一致' where ItemID = '%s'", carModel); m_pConnection->Execute(_bstr_t(updateSql), 0, adCmdText); updateSql = NULL; } //日志表 //char *insertLog = (char*)calloc(1024, sizeof(char)); //sprintf(insertLog, "insert into GD_ORDERBOM_LABLE_LOG(ItemID,Lable) VALUES('%s','更新成功')",carModel); //m_pConnection->Execute(_bstr_t(insertLog), 0, adCmdText); //insertLog = NULL; } catch(exception e ){ //添加失败原因 char* updateSql = (char*)calloc(1024, sizeof(char)); sprintf(updateSql, "update GD_ORDERBOM_LABLE set Lable = '更新失败',Remark = '%s' where ItemID = '%s'",e.what() ,carModel); m_pConnection->Execute(_bstr_t(updateSql), 0, adCmdText); updateSql = NULL; //日志表 //char *insertLog = (char*)calloc(1024, sizeof(char)); //sprintf(insertLog, "insert into GD_ORDERBOM_LABLE_LOG(ItemID,Lable,Remark) VALUES('%s','更新失败','%s')",carModel,e.what() ); //m_pConnection->Execute(_bstr_t(insertLog), 0, adCmdText); //insertLog = NULL; std::cout << e.what() << std::endl; } } } else { printf("Create instance of connection failed!"); return 1; } DOFREE(object_type); DOFREE(server_address); DOFREE(carModel); DOFREE(bvr_list); printf("=========================同步超级BOM END ===================\n"); return 0; } void getBomLinePropertysBom(tag_t top_line,string topUUID,char * carModel, _ConnectionPtr m_pConnection) { //printf("开始执行getBomLinePropertys\n"); int count; tag_t *children_line; ITKCALL(BOM_line_ask_all_child_lines(top_line, &count, &children_line)); //printf("子行=%d \n", count); for (int ii = 0; ii < count; ii++) { countInsertSql++; tag_t partItemRevision = NULLTAG,item = NULLTAG; string childUUID = getUUid(); char * itemId = ""; char * formula = ""; char * itemType = ""; char * sequenceNumber = ""; char * hierarchy = ""; char * quantity = ""; char * psqy = ""; char * scqy = ""; char * psqw = ""; char * scgw = ""; char * name = ""; char * sjzl = ""; char * mz = ""; char * wlfl = ""; char * dw = ""; char * jcjwlh = ""; char * sfqdj = ""; char * gyzy = ""; char * realParentID = ""; char * clgg = ""; char * clhd = ""; ITKCALL(AOM_ask_value_string(top_line,"bl_item_item_id",&realParentID)); ITKCALL(AOM_ask_value_tag(children_line[ii],"bl_line_object",&partItemRevision)); ITKCALL(ITEM_ask_item_of_rev( partItemRevision, &item)); ITKCALL(AOM_ask_value_string(item, "object_type", &itemType)); ITKCALL(AOM_ask_value_string(children_line[ii], "bl_sequence_no", &sequenceNumber)); ITKCALL(AOM_ask_value_string(children_line[ii], "bl_item_item_id", &itemId)); ITKCALL(AOM_ask_value_string(children_line[ii], "bl_formula", &formula)); ITKCALL(AOM_ask_value_string(children_line[ii], "bl_quantity", &quantity)); ITKCALL(AOM_ask_value_string(children_line[ii], "Gd6_psqy", &psqy)); ITKCALL(AOM_ask_value_string(children_line[ii], "Gd6_scqy", &scqy)); ITKCALL(AOM_ask_value_string(children_line[ii], "Gd6_psgw", &psqw)); ITKCALL(AOM_ask_value_string(children_line[ii], "Gd6_scgw", &scgw)); ITKCALL(AOM_ask_value_string(children_line[ii], "bl_item_object_name", &name)); ITKCALL(AOM_ask_value_string(children_line[ii], "bl_Gd6_PartsRevisionMaster_gd6_sjzl", &sjzl)); ITKCALL(AOM_ask_value_string(children_line[ii], "bl_Gd6_PartsRevisionMaster_gd6_mz", &mz)); ITKCALL(AOM_ask_value_string(children_line[ii], "bl_Gd6_PartsRevisionMaster_gd6_wlfl", &wlfl)); ITKCALL(AOM_ask_value_string(children_line[ii], "bl_Gd6_PartsRevisionMaster_gd6_dw", &dw)); ITKCALL(AOM_ask_value_string(children_line[ii], "bl_Gd6_PartsRevisionMaster_gd6_jcjwlh", &jcjwlh)); ITKCALL(AOM_ask_value_string(children_line[ii], "bl_Gd6_PartsRevisionMaster_gd6_sfqdj", &sfqdj)); ITKCALL(AOM_ask_value_string(children_line[ii], "bl_Gd6_PartsRevisionMaster_gd6_gyzy", &gyzy)); ITKCALL(AOM_ask_value_string(children_line[ii], "bl_Gd6_PartsRevisionMaster_gd6_clgg", &clgg)); ITKCALL(AOM_ask_value_string(children_line[ii], "bl_Gd6_PartsRevisionMaster_gd6_clhd", &clhd)); char* insertSql = (char*)calloc(2048, sizeof(char)); sprintf(insertSql, "INSERT INTO GD_ORDERBOM_DATA (carModel,parentID,id,bl_formula,bl_item_type,bl_sequence_no,uid,hierarchy,bl_quantity,psqy,scqy,psgw,scgw,bl_item_object_name,sjzl,mz,wlfl,dw,jcjwlh,sfqdj,gyzy,realParentID,clgg,clhd) VALUES ('%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s')",carModel,topUUID.c_str(),itemId,formula,itemType,sequenceNumber,childUUID.c_str(),hierarchy,quantity,psqy,scqy,psqw,scgw,name,sjzl,mz,wlfl,dw,jcjwlh,sfqdj,gyzy,realParentID,clgg,clhd); //printf("插入sql!%s\n",insertSql); m_pConnection->Execute(_bstr_t(insertSql), 0, adCmdText); DOFREE(itemId); DOFREE(formula); DOFREE(itemType); DOFREE(sequenceNumber); hierarchy = NULL; DOFREE(quantity); DOFREE(psqy); DOFREE(scqy); DOFREE(psqw); DOFREE(scgw); DOFREE(name); DOFREE(sjzl); DOFREE(mz); DOFREE(wlfl); DOFREE(dw); DOFREE(jcjwlh); DOFREE(sfqdj); DOFREE(gyzy); DOFREE(realParentID); DOFREE(clgg); DOFREE(clhd); insertSql = NULL; getBomLinePropertysBom(children_line[ii],childUUID,carModel,m_pConnection); } DOFREE(children_line); } //void getBomPropertys(EPM_action_message_t msg, int ifail) { // // // // //} void getBomLinePropertys(tag_t top_line,char *type) { //printf("开始执行getBomLinePropertys\n"); int count; tag_t *children_line; parameters = (char *)realloc(parameters, (countNum * 512) * sizeof(char)); //char parameter[5120] = "getBomPropertys,"; char *tc_root_file = getenv("tc_root"); //C:\Siemens\Teamcenter11 char jar_file[SS_MAXPATHLEN] = ""; strcpy(jar_file, tc_root_file); strcat(jar_file, "\\portal\\plugins\\"); strcat(jar_file, "JLCS_05.jar"); BOM_line_ask_all_child_lines(top_line, &count, &children_line); printf("子行=%d \n", count); for (int ii = 0; ii < count; ii++) { char * object_type = NULL; //获取版本 tag_t partItemRevision = NULLTAG, parentItemRevision = NULLTAG; AOM_ask_value_tag(children_line[ii],"bl_line_object",&partItemRevision); AOM_ask_value_tag(top_line,"bl_line_object",&parentItemRevision); //ITKCALL(ITEM_ask_latest_rev(partItem,&partItemRevision)); AOM_ask_value_string(partItemRevision, "object_type", &object_type); //过滤非零件版本的对象 if (strcmp("Gd6_PartsRevision", object_type) == 0 || strcmp("Gd6_BZJRevision", object_type) == 0|| strcmp("Gd6_XZMKCRevision", object_type) == 0) { int item_mast_rev_count = 0; tag_t * item_mast_rev = NULLTAG; //获取版本表单 ITKCALL(AOM_ask_value_tags(partItemRevision, "IMAN_master_form_rev", &item_mast_rev_count, &item_mast_rev ) ) char * wlfl = NULL; AOM_ask_value_string(item_mast_rev[0], "gd6_wlfl", &wlfl); if(strcmp("H40", wlfl) == 0){ continue; } //获取topline属性 //父件代号 AOM_ask_value_string(parentItemRevision, "item_id", &MATNR); //父件工厂 WERKS = "6300"; //AOM_ask_value_string(children_line[ii], "bl_formatted_parent_name", &bl_formatted_parent_name); //BOM用途 STLAN = "1"; //可选BOM STALT = "1"; //销售单号 VBELN = ""; //订单行项目 VBPOS = ""; //父件数量 AOM_ask_value_string(top_line, "bl_quantity", &BMENG); //BOM项目号 AOM_ask_value_string(children_line[ii], "bl_sequence_no", &POSNR); //项目类别 POSTP = "L"; //子件代号 AOM_ask_value_string(partItemRevision, "item_id", &IDNRK); //子件数量 AOM_ask_value_string(children_line[ii], "bl_quantity", &MENGE); //子件单位 AOM_ask_value_string(item_mast_rev[0], "gd6_dw", &MEINS); //配送区域 AOM_ask_value_string(children_line[0], "Gd6_psqy", &POTX1); //生产工位/配送工位gd6_scgw&gd6_psgw char * scgw = NULL, * psgw = NULL; AOM_ask_value_string(children_line[0], "Gd6_scgw", &scgw); AOM_ask_value_string(children_line[0], "Gd6_psgw", &psgw); strcat(parameters, MATNR); strcat(parameters, ","); strcat(parameters, WERKS); strcat(parameters, ","); strcat(parameters, STLAN); strcat(parameters, ","); strcat(parameters, STALT); strcat(parameters, ","); strcat(parameters, VBELN); strcat(parameters, ","); strcat(parameters, VBPOS); strcat(parameters, ","); strcat(parameters, BMENG); strcat(parameters, ","); strcat(parameters, POSNR); strcat(parameters, ","); strcat(parameters, POSTP); strcat(parameters, ","); strcat(parameters, IDNRK); strcat(parameters, ","); strcat(parameters, MENGE); strcat(parameters, ","); strcat(parameters, MEINS); strcat(parameters, ","); strcat(parameters, POTX1); strcat(parameters, ","); strcat(parameters, scgw); strcat(parameters, ","); strcat(parameters, psgw); strcat(parameters, ","); strcat(parameters, type); strcat(parameters, "}}"); //strcat(parameters, parameter); printf("parameter:\n%s\n", parameters); //strcat(parameters, C5_gc); //strcat(parameters, C5_scgw); //char cmd[256] = ""; //strcpy(cmd, "java -jar \""); //strcat(cmd, jar_file); //strcat(cmd, "\" "); //传参 //strcat(cmd, parameter); //printf("路径:\n%s\n", cmd); //system(cmd); countNum++; } if(type == NULL){ getBomLinePropertys(children_line[ii],type); } } } //---------------------------------------------------工具------------------------------------------------------ //分割字符串 void split(char *src, const char *separator, char **dest, int *num) { /* src 源字符串的首地址(buf的地址) separator 指定的分割字符 dest 接收子字符串的数组 num 分割后子字符串的个数 */ char *pNext; int count = 0; if (src == NULL || strlen(src) == 0) //如果传入的地址为空或长度为0,直接终止 return; if (separator == NULL || strlen(separator) == 0) //如未指定分割的字符串,直接终止 return; printf("分割前的字符=======================%s\n",src); pNext = strtok(src, separator); //必须使用(char *)进行强制类型转换(虽然不写有的编译器中不会出现指针错误) while (pNext != NULL) { printf("分割后的字符=======================%s\n",pNext); dest[count] = pNext; ++count; pNext = strtok(NULL, separator); //必须使用(char *)进行强制类型转换 } *num = count; }