diff --git a/HEZON_ITK/epm_handler_common.h b/HEZON_ITK/epm_handler_common.h index feb260d..9c01c4e 100644 --- a/HEZON_ITK/epm_handler_common.h +++ b/HEZON_ITK/epm_handler_common.h @@ -45,7 +45,9 @@ int bs_bom_save_check(METHOD_message_t *msg, va_list args); int bs_sign_cad(EPM_action_message_t msg); int jd_signoff(EPM_action_message_t msg); int bs_test_release_check(EPM_rule_message_t msg); - ////将流程信息签入版本属性上去 +int bs_bypass(void *retValType); + + ////锟斤拷锟斤拷锟斤拷锟斤拷息签锟斤拷姹撅拷锟斤拷锟斤拷锟饺 //int qtmc_sign_ir(EPM_action_message_t msg); diff --git a/HEZON_ITK/epm_register_handler.cxx b/HEZON_ITK/epm_register_handler.cxx index 740d0c4..3d9b39d 100644 --- a/HEZON_ITK/epm_register_handler.cxx +++ b/HEZON_ITK/epm_register_handler.cxx @@ -173,6 +173,20 @@ extern DLLAPI int USERSERVICE_custom_register_methods() printf("register bomwindow_save failed\n"); } + + int numberOfArguments = 1, + returnValueType = USERARG_STRING_TYPE, + *argumentList = (int*)MEM_alloc(numberOfArguments * sizeof(int)); + argumentList[0] = USERARG_LOGICAL_TYPE;; + USER_function_t functionPtr; + functionPtr = bs_bypass; + status = USERSERVICE_register_method("bs_bypass", functionPtr, numberOfArguments, argumentList, returnValueType); + if (status == ITK_ok) { + printf("register bs_bypass success\n"); + } else { + printf("register bs_bypass failed\n"); + + } } return 0; diff --git a/HEZON_ITK/jd_clear_field.cpp b/HEZON_ITK/jd_clear_field.cpp index 3cf44e2..552fd31 100644 --- a/HEZON_ITK/jd_clear_field.cpp +++ b/HEZON_ITK/jd_clear_field.cpp @@ -105,7 +105,7 @@ #define MKDIR(path) mkdir(path,S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH) #endif -#define LOCALJARPATH "D:\\Siemens\\Teamcenter11\\bin\\tc_extra_jar\\" +#define LOCALJARPATH "D:\\Siemens\\Teamcenter12\\bin\\tc_extra_jar\\" #define REMOTEJARPATH "D:\\app\\Siemens\\Teamcenter12\\bin\\tc_extra_jar\\" //#include @@ -198,23 +198,25 @@ extern "C" { 鏄犲皠 -path 璺緞 -name 鐢ㄦ埛鍚 - -step 娴佺▼闃舵: 缂栧埗锛49锛屾牎瀵癸細50锛屽鏍革細51锛屼細绛撅細52锛屾壒鍑嗭細53 */ - static int sign(JNIEnv* env, jclass class_Test, const char* path, char* name, int step) { + static int sign(JNIEnv* env, jclass class_Test, const char* path, char* name, char* sign_location, char* sign_str) { printf("signin\n"); - jmethodID methodId_main = env->GetStaticMethodID(class_Test, "sign", "(Ljava/lang/String;Ljava/lang/String;I)I"); + jmethodID methodId_main = env->GetStaticMethodID(class_Test, "sign", "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)I"); if (methodId_main == NULL) { - printf("error\n"); + printf("error, check jar location\n"); return 0; } string path1 = GBKToUTF8(path); string name1 = GBKToUTF8(name); + string sign_location1 = GBKToUTF8(sign_location); + string sign_str1 = GBKToUTF8(sign_str); jstring jpath = env->NewStringUTF(path1.c_str()); jstring jname = env->NewStringUTF(name1.c_str()); - jint jstep = (jint)step; - printf("path:%s,name%s,step%d\n", path1.c_str(), name1.c_str(), step); + jstring jsign_location = env->NewStringUTF(sign_location1.c_str()); + jstring jsign_str = env->NewStringUTF(sign_str1.c_str()); + printf("path:%s\nname:%s\nsign_location:%s\nsign_str:%s\n", path1.c_str(), name1.c_str(), sign_location1.c_str(), sign_str1.c_str()); jint result = 0; - result = env->CallStaticIntMethod(class_Test, methodId_main, jpath, jname, jstep); + result = env->CallStaticIntMethod(class_Test, methodId_main, jpath, jname, jsign_location, jsign_str); int res = result; printf("result:%d\n", res); printf("signout\n"); @@ -239,9 +241,11 @@ extern "C" { int JD_clear(METHOD_message_t* msg, va_list args, tag_t new_rev) { printf("鍗囩増鎵ц\n"); //鑾峰彇鏁版嵁闆 - char *temp_path, *attach_type; - int n_attachs; + const char *sign_location1, *sign_str; + char *temp_path, *attach_type,*prop,**pref_values1; + int n_attachs, pref_count1; tag_t ref_obj, excelx_tag, excel_tag, wordx_tag, word_tag, type_tag, word_ref, excel_ref, *dataset; + stringstream sign_date; ITEM_attached_object_t *rev_attachments; AE_reference_type_t ae_ref; TCTYPE_find_type("MSExcelX", "Dataset", &excelx_tag); @@ -348,19 +352,27 @@ extern "C" { ITKCALL(AOM_ask_value_tags(new_rev, "IMAN_master_form_rev", &objects_count, &objects)); + + PREF_ask_char_values("jd2_signoff_list", &pref_count1, &pref_values1); + stringstream temps; + for (int i = 0;i < pref_count1;i++) { + temps << pref_values1[i]; + temps << ","; + } //琛ㄥ崟绛惧悕 for (auto iii = 0; iii < objects_count; iii++) { AOM_lock(objects[iii]); - AOM_set_value_string(objects[iii], "jd2_bz", ""); - AOM_set_value_string(objects[iii], "jd2_bzrq", ""); - AOM_set_value_string(objects[iii], "jd2_jd", ""); - AOM_set_value_string(objects[iii], "jd2_jdrq", ""); - AOM_set_value_string(objects[iii], "jd2_sh", ""); - AOM_set_value_string(objects[iii], "jd2_shrq", ""); - AOM_set_value_string(objects[iii], "jd2_hq", ""); - AOM_set_value_string(objects[iii], "jd2_hqrq", ""); - AOM_set_value_string(objects[iii], "jd2_pz", ""); - AOM_set_value_string(objects[iii], "jd2_pzrq", ""); + for (int i = 0;i < pref_count1;i++) { + sign_date.str(""); + sign_date << pref_values1[i]; + sign_date << "rq"; + AOM_ask_value_string(objects[iii], pref_values1[i], &prop); + if (tc_strlen(prop) != 0) { + AOM_set_value_string(objects[iii], pref_values1[i], ""); + AOM_set_value_string(objects[iii], sign_date.str().c_str(), ""); + } + } + printf("sign clear\n"); ITKCALL(AOM_save(objects[iii])); AOM_unlock(objects[iii]); } @@ -398,13 +410,13 @@ extern "C" { printf("file_type:%d\n", file_type); if (file_type == 0) { class_Test = env->FindClass("sign2file/SignToWord"); - int res = sign(env, class_Test, ss.str().c_str(), "", 54); + int res = sign(env, class_Test, ss.str().c_str(), "", "clear", (char*)temps.str().c_str()); if (res) { replace_dataset_named_reference(dataset[i], word_ref, ss.str().c_str(), "word"); } } else if (file_type == 1) { class_Test = env->FindClass("sign2file/SignToExcel"); - int res = sign(env, class_Test, ss.str().c_str(), "", 54); + int res = sign(env, class_Test, ss.str().c_str(), "", "clear", (char*)temps.str().c_str()); if (res) { replace_dataset_named_reference(dataset[i], excel_ref, ss.str().c_str(), "excel"); } @@ -442,13 +454,13 @@ extern "C" { printf("file_type:%d\n", file_type); if (file_type == 0) { class_Test = env->FindClass("sign2file/SignToWord"); - int res = sign(env, class_Test, ss.str().c_str(), "", 54); + int res = sign(env, class_Test, ss.str().c_str(), "", "clear", (char*)temps.str().c_str()); if (res) { replace_dataset_named_reference(dataset[i], word_ref, ss.str().c_str(), "word"); } } else if (file_type == 1) { class_Test = env->FindClass("sign2file/SignToExcel"); - int res = sign(env, class_Test, ss.str().c_str(), "", 54); + int res = sign(env, class_Test, ss.str().c_str(), "", "clear", (char*)temps.str().c_str()); if (res) { replace_dataset_named_reference(dataset[i], excel_ref, ss.str().c_str(), "excel"); } diff --git a/HEZON_ITK/jd_signoff.cpp b/HEZON_ITK/jd_signoff.cpp index 5c70ac8..43d7a45 100644 --- a/HEZON_ITK/jd_signoff.cpp +++ b/HEZON_ITK/jd_signoff.cpp @@ -62,6 +62,8 @@ #include #define MAX_PATH_LEN 256 +#define GUID_LEN 64 + #ifdef WIN32 #define ACCESS(fileName,accessMode) _access(fileName,accessMode) #define MKDIR(path) _mkdir(path) @@ -70,7 +72,7 @@ #define MKDIR(path) mkdir(path,S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH) #endif -#define LOCALJARPATH "D:\\Siemens\\Teamcenter11\\bin\\tc_extra_jar\\" +#define LOCALJARPATH "D:\\Siemens\\Teamcenter12\\bin\\tc_extra_jar\\" #define REMOTEJARPATH "D:\\app\\Siemens\\Teamcenter12\\bin\\tc_extra_jar\\" using namespace std; @@ -96,6 +98,7 @@ int32_t createDirectory(const std::string &directoryPath) { return 0; } + static void replace_dataset_named_reference(tag_t dataset_tag, tag_t old_file, const char *new_file_path, char *ref_name) { IMF_file_data_p_t file_data; @@ -159,23 +162,25 @@ string GBKToUTF8(const char* strGBK) 鏄犲皠 -path 璺緞 -name 鐢ㄦ埛鍚 --step 娴佺▼闃舵: 缂栧埗锛49锛屾牎瀵癸細50锛屽鏍革細51锛屼細绛撅細52锛屾壒鍑嗭細53 */ -static int sign(JNIEnv* env, jclass class_Test,const char* path, char* name, int step) { +static int sign(JNIEnv* env, jclass class_Test,const char* path, char* name, char* sign_location, char* sign_str) { printf("signin\n"); - jmethodID methodId_main = env->GetStaticMethodID(class_Test, "sign", "(Ljava/lang/String;Ljava/lang/String;I)I"); + jmethodID methodId_main = env->GetStaticMethodID(class_Test, "sign", "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)I"); if (methodId_main==NULL) { - printf("error\n"); + printf("error, check jar location\n"); return 0; } string path1 = GBKToUTF8(path); string name1 = GBKToUTF8(name); + string sign_location1= GBKToUTF8(sign_location); + string sign_str1 = GBKToUTF8(sign_str); jstring jpath = env->NewStringUTF(path1.c_str()); jstring jname = env->NewStringUTF(name1.c_str()); - jint jstep = (jint)step; - printf("path:%s,name%s,step%d\n", path1.c_str(), name1.c_str(),step); + jstring jsign_location = env->NewStringUTF(sign_location1.c_str()); + jstring jsign_str = env->NewStringUTF(sign_str1.c_str()); + printf("path:%s\nname:%s\nsign_location:%s\nsign_str:%s\n", path1.c_str(), name1.c_str(), sign_location1.c_str(),sign_str1.c_str()); jint result = 0; - result = env->CallStaticIntMethod(class_Test, methodId_main, jpath, jname, jstep); + result = env->CallStaticIntMethod(class_Test, methodId_main, jpath, jname, jsign_location, jsign_str); int res = result; printf("result:%d\n", res); printf("signout\n"); @@ -201,23 +206,39 @@ void add_path(JNIEnv* env, const std::string& path) //鍚夊痉琛ㄥ崟绛惧悕 int jd_signoff(EPM_action_message_t msg) { - const char bz = '1', jd = '2', sh = '3', hq = '4', pz = '5', bz_back = '0', clear='6'; + const char *sign_location, *sign_str; - int ifail = ITK_ok, att_count, objects_count, step; + int ifail = ITK_ok, att_count, objects_count,pref_count; tag_t rootTask, *attachments, user_tag, *objects; - char *user_name; + char *user_name,**pref_values, *prop; logical verdict; + bool flag; + stringstream sign_date; //鑾峰彇鏃堕棿 time_t t; time(&t); tm* time = localtime(&t); stringstream date; - date << time->tm_year + 1900 << "-"; - date << time->tm_mon + 1 << "-"; - date << time->tm_mday << "-"; - date << time->tm_hour << "-"; - date << time->tm_min << "-"; - date << time->tm_sec; + date << time->tm_year + 1900 << "."; + date << time->tm_mon + 1 << "."; + date << time->tm_mday ; + + //鑾峰彇guid + //鑾峰彇guid + char buffer[GUID_LEN] = { 0 }; + GUID guid; + + if (CoCreateGuid(&guid)) { + fprintf(stderr, "create guid error\n"); + return NULL; + } + _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); //鑾峰彇鏁版嵁闆 @@ -252,7 +273,30 @@ int jd_signoff(EPM_action_message_t msg) { ITK_ask_argument_named_value(TC_next_argument(arguments), &temp_key, &temp_val); paras[temp_key] = temp_val; } - step = paras["step"].c_str()[0]; + sign_location = paras["sign_location"].c_str(); + printf("sign_location:%s\n", sign_location); + + sign_date << sign_location; + sign_date << "rq"; + + //璇诲彇棣栭夐」 + PREF_ask_char_values("jd2_signoff_list", &pref_count, &pref_values); + flag = false; + stringstream temps; + for (int i = 0;i < pref_count;i++) { + printf("signoff:%s\n", pref_values[i]); + temps << pref_values[i]; + temps << ","; + if (strcmp(pref_values[i], sign_location)==0) { + flag = true; + } + } + if (strcmp("clear", sign_location)==0) { + flag = true; + } + if (!flag) { + return -1; + } //鍒涘缓tc_export鐩綍 stringstream dir; @@ -365,7 +409,6 @@ int jd_signoff(EPM_action_message_t msg) { jclass class_Test; int file_type = -1; - printf("step:%d\n", step); printf("user_name:%s\n", user_name); printf("date:%s\n", date.str().c_str()); @@ -374,50 +417,25 @@ int jd_signoff(EPM_action_message_t msg) { ITKCALL(AOM_ask_value_tags(attachments[ii], "IMAN_master_form_rev", &objects_count, &objects)); //琛ㄥ崟绛惧悕 for (auto iii = 0; iii < objects_count; iii++) { - printf("step:%c\n",step); AOM_lock(objects[iii]); - switch (step) { - case bz: - AOM_set_value_string(objects[iii], "jd2_bz", user_name); - AOM_set_value_string(objects[iii], "jd2_bzrq", date.str().c_str()); - printf("bz signoff\n"); - break; - case jd: - AOM_set_value_string(objects[iii], "jd2_jd", user_name); - AOM_set_value_string(objects[iii], "jd2_jdrq", date.str().c_str()); - printf("jd signoff\n"); - break; - case sh: - AOM_set_value_string(objects[iii], "jd2_sh", user_name); - AOM_set_value_string(objects[iii], "jd2_shrq", date.str().c_str()); - printf("sh signoff\n"); - break; - case hq: - AOM_set_value_string(objects[iii], "jd2_hq", user_name); - AOM_set_value_string(objects[iii], "jd2_hqrq", date.str().c_str()); - printf("hq signoff\n"); - break; - case pz: - AOM_set_value_string(objects[iii], "jd2_pz", user_name); - AOM_set_value_string(objects[iii], "jd2_pzrq", date.str().c_str()); - printf("pz signoff\n"); - break; - case clear: - AOM_set_value_string(objects[iii], "jd2_bz", ""); - AOM_set_value_string(objects[iii], "jd2_bzrq", ""); - printf("clear signoff\n"); - case bz_back: - AOM_set_value_string(objects[iii], "jd2_jd", ""); - AOM_set_value_string(objects[iii], "jd2_jdrq", ""); - AOM_set_value_string(objects[iii], "jd2_sh", ""); - AOM_set_value_string(objects[iii], "jd2_shrq", ""); - AOM_set_value_string(objects[iii], "jd2_hq", ""); - AOM_set_value_string(objects[iii], "jd2_hqrq", ""); - AOM_set_value_string(objects[iii], "jd2_pz", ""); - AOM_set_value_string(objects[iii], "jd2_pzrq", ""); - printf("bz_back signoff\n"); - break; + if (strcmp("clear",sign_location)==0) { + for (int i = 0;i < pref_count;i++) { + sign_date.str(""); + sign_date << pref_values[i]; + sign_date << "rq"; + AOM_ask_value_string(attachments[ii], pref_values[i], &prop); + if (tc_strlen(prop)!=0) { + AOM_set_value_string(objects[iii], pref_values[i], ""); + AOM_set_value_string(objects[iii], sign_date.str().c_str(), ""); + } + } + printf("sign clear\n"); + } else { + AOM_set_value_string(objects[iii], sign_location, user_name); + AOM_set_value_string(objects[iii], sign_date.str().c_str(), date.str().c_str()); + printf("%s,%s signoff\n", sign_location, sign_date.str().c_str()); } + ITKCALL(AOM_save(objects[iii])); AOM_unlock(objects[iii]); } @@ -434,7 +452,7 @@ int jd_signoff(EPM_action_message_t msg) { ITKCALL(AE_ask_dataset_named_ref2(dataset[i], "word", &ae_ref, &word_ref)); char *file_name; ITKCALL(AOM_UIF_ask_value(word_ref, "file_name", &file_name)); - ss << date.str().c_str(); + ss << buffer; ss << "_"; ss << file_name; printf("path:%s\n", ss.str().c_str()); @@ -444,7 +462,7 @@ int jd_signoff(EPM_action_message_t msg) { ITKCALL(AE_ask_dataset_named_ref2(dataset[i], "excel", &ae_ref, &excel_ref)); char *file_name; ITKCALL(AOM_UIF_ask_value(excel_ref, "file_name", &file_name)); - ss << date.str().c_str(); + ss << buffer; ss << "_"; ss << file_name; printf("path:%s\n", ss.str().c_str()); @@ -455,13 +473,13 @@ int jd_signoff(EPM_action_message_t msg) { printf("file_type:%d\n", file_type); if (file_type == 0) { class_Test = env->FindClass("sign2file/SignToWord"); - int res = sign(env, class_Test, ss.str().c_str(), user_name, step); + int res = sign(env, class_Test, ss.str().c_str(), user_name, (char*)sign_location, (char*)temps.str().c_str()); if (res) { replace_dataset_named_reference(dataset[i], word_ref, ss.str().c_str(), "word"); } } else if (file_type == 1) { class_Test = env->FindClass("sign2file/SignToExcel"); - int res = sign(env, class_Test, ss.str().c_str(), user_name, step); + int res = sign(env, class_Test, ss.str().c_str(), user_name, (char*)sign_location, (char*)temps.str().c_str()); if (res) { replace_dataset_named_reference(dataset[i], excel_ref, ss.str().c_str(), "excel"); } @@ -478,7 +496,7 @@ int jd_signoff(EPM_action_message_t msg) { ITKCALL(AE_ask_dataset_named_ref2(dataset[i], "word", &ae_ref, &word_ref)); char *file_name; ITKCALL(AOM_UIF_ask_value(word_ref, "file_name", &file_name)); - ss << date.str().c_str(); + ss << buffer; ss << "_"; ss << file_name; printf("path:%s\n", ss.str().c_str()); @@ -488,7 +506,7 @@ int jd_signoff(EPM_action_message_t msg) { ITKCALL(AE_ask_dataset_named_ref2(dataset[i], "excel", &ae_ref, &excel_ref)); char *file_name; ITKCALL(AOM_UIF_ask_value(excel_ref, "file_name", &file_name)); - ss << date.str().c_str(); + ss << buffer; ss << "_"; ss << file_name; printf("path:%s\n", ss.str().c_str()); @@ -499,13 +517,13 @@ int jd_signoff(EPM_action_message_t msg) { printf("file_type:%d\n", file_type); if (file_type == 0) { class_Test = env->FindClass("sign2file/SignToWord"); - int res = sign(env, class_Test, ss.str().c_str(), user_name, step); + int res = sign(env, class_Test, ss.str().c_str(), user_name, (char*)sign_location, (char*)temps.str().c_str()); if (res) { replace_dataset_named_reference(dataset[i], word_ref, ss.str().c_str(), "word"); } } else if (file_type == 1) { class_Test = env->FindClass("sign2file/SignToExcel"); - int res = sign(env, class_Test, ss.str().c_str(), user_name, step); + int res = sign(env, class_Test, ss.str().c_str(), user_name, (char*)sign_location, (char*)temps.str().c_str()); if (res) { replace_dataset_named_reference(dataset[i], excel_ref, ss.str().c_str(), "excel"); }