@ -62,6 +62,8 @@
# include <string>
# include <string>
# define MAX_PATH_LEN 256
# define MAX_PATH_LEN 256
# define GUID_LEN 64
# ifdef WIN32
# ifdef WIN32
# define ACCESS(fileName,accessMode) _access(fileName,accessMode)
# define ACCESS(fileName,accessMode) _access(fileName,accessMode)
# define MKDIR(path) _mkdir(path)
# define MKDIR(path) _mkdir(path)
@ -70,7 +72,7 @@
# define MKDIR(path) mkdir(path,S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH)
# define MKDIR(path) mkdir(path,S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH)
# endif
# endif
# define LOCALJARPATH "D:\\Siemens\\Teamcenter1 1 \\bin\\tc_extra_jar\\"
# define LOCALJARPATH "D:\\Siemens\\Teamcenter1 2 \\bin\\tc_extra_jar\\"
# define REMOTEJARPATH "D:\\app\\Siemens\\Teamcenter12\\bin\\tc_extra_jar\\"
# define REMOTEJARPATH "D:\\app\\Siemens\\Teamcenter12\\bin\\tc_extra_jar\\"
using namespace std ;
using namespace std ;
@ -96,6 +98,7 @@ int32_t createDirectory(const std::string &directoryPath) {
return 0 ;
return 0 ;
}
}
static void replace_dataset_named_reference ( tag_t dataset_tag , tag_t old_file ,
static void replace_dataset_named_reference ( tag_t dataset_tag , tag_t old_file ,
const char * new_file_path , char * ref_name ) {
const char * new_file_path , char * ref_name ) {
IMF_file_data_p_t file_data ;
IMF_file_data_p_t file_data ;
@ -159,23 +162,25 @@ string GBKToUTF8(const char* strGBK)
映 射
映 射
- path 路 径
- path 路 径
- name 用 户 名
- 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 " ) ;
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 ) {
if ( methodId_main = = NULL ) {
printf ( " error \n " ) ;
printf ( " error , check jar location \n " ) ;
return 0 ;
return 0 ;
}
}
string path1 = GBKToUTF8 ( path ) ;
string path1 = GBKToUTF8 ( path ) ;
string name1 = GBKToUTF8 ( name ) ;
string name1 = GBKToUTF8 ( name ) ;
string sign_location1 = GBKToUTF8 ( sign_location ) ;
string sign_str1 = GBKToUTF8 ( sign_str ) ;
jstring jpath = env - > NewStringUTF ( path1 . c_str ( ) ) ;
jstring jpath = env - > NewStringUTF ( path1 . c_str ( ) ) ;
jstring jname = env - > NewStringUTF ( name1 . c_str ( ) ) ;
jstring jname = env - > NewStringUTF ( name1 . c_str ( ) ) ;
jint jstep = ( jint ) step ;
jstring jsign_location = env - > NewStringUTF ( sign_location1 . c_str ( ) ) ;
printf ( " path:%s,name%s,step%d \n " , path1 . c_str ( ) , name1 . c_str ( ) , step ) ;
jstring jsign_str = env - > NewStringUTF ( sign_str1 . c_str ( ) ) ;
printf ( " path:%s \n name:%s \n sign_location:%s \n sign_str:%s \n " , path1 . c_str ( ) , name1 . c_str ( ) , sign_location1 . c_str ( ) , sign_str1 . c_str ( ) ) ;
jint result = 0 ;
jint result = 0 ;
result = env - > CallStaticIntMethod ( class_Test , methodId_main , jpath , jname , js tep ) ;
result = env - > CallStaticIntMethod ( class_Test , methodId_main , jpath , jname , js ign_location, jsign_str ) ;
int res = result ;
int res = result ;
printf ( " result:%d \n " , res ) ;
printf ( " result:%d \n " , res ) ;
printf ( " signout \n " ) ;
printf ( " signout \n " ) ;
@ -201,23 +206,39 @@ void add_path(JNIEnv* env, const std::string& path)
//吉德表单签名
//吉德表单签名
int jd_signoff ( EPM_action_message_t msg ) {
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 ;
tag_t rootTask , * attachments , user_tag , * objects ;
char * user_name ;
char * user_name ,* * pref_values , * prop ;
logical verdict ;
logical verdict ;
bool flag ;
stringstream sign_date ;
//获取时间
//获取时间
time_t t ;
time_t t ;
time ( & t ) ;
time ( & t ) ;
tm * time = localtime ( & t ) ;
tm * time = localtime ( & t ) ;
stringstream date ;
stringstream date ;
date < < time - > tm_year + 1900 < < " - " ;
date < < time - > tm_year + 1900 < < " . " ;
date < < time - > tm_mon + 1 < < " - " ;
date < < time - > tm_mon + 1 < < " . " ;
date < < time - > tm_mday < < " - " ;
date < < time - > tm_mday ;
date < < time - > tm_hour < < " - " ;
date < < time - > tm_min < < " - " ;
//获取guid
date < < time - > tm_sec ;
//获取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 ) ;
ITK_ask_argument_named_value ( TC_next_argument ( arguments ) , & temp_key , & temp_val ) ;
paras [ 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目录
//创建tc_export目录
stringstream dir ;
stringstream dir ;
@ -365,7 +409,6 @@ int jd_signoff(EPM_action_message_t msg) {
jclass class_Test ;
jclass class_Test ;
int file_type = - 1 ;
int file_type = - 1 ;
printf ( " step:%d \n " , step ) ;
printf ( " user_name:%s \n " , user_name ) ;
printf ( " user_name:%s \n " , user_name ) ;
printf ( " date:%s \n " , date . str ( ) . c_str ( ) ) ;
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 ) ) ;
ITKCALL ( AOM_ask_value_tags ( attachments [ ii ] , " IMAN_master_form_rev " , & objects_count , & objects ) ) ;
//表单签名
//表单签名
for ( auto iii = 0 ; iii < objects_count ; iii + + ) {
for ( auto iii = 0 ; iii < objects_count ; iii + + ) {
printf ( " step:%c \n " , step ) ;
AOM_lock ( objects [ iii ] ) ;
AOM_lock ( objects [ iii ] ) ;
switch ( step ) {
if ( strcmp ( " clear " , sign_location ) = = 0 ) {
case bz :
for ( int i = 0 ; i < pref_count ; i + + ) {
AOM_set_value_string ( objects [ iii ] , " jd2_bz " , user_name ) ;
sign_date . str ( " " ) ;
AOM_set_value_string ( objects [ iii ] , " jd2_bzrq " , date . str ( ) . c_str ( ) ) ;
sign_date < < pref_values [ i ] ;
printf ( " bz signoff \n " ) ;
sign_date < < " rq " ;
break ;
AOM_ask_value_string ( attachments [ ii ] , pref_values [ i ] , & prop ) ;
case jd :
if ( tc_strlen ( prop ) ! = 0 ) {
AOM_set_value_string ( objects [ iii ] , " jd2_jd " , user_name ) ;
AOM_set_value_string ( objects [ iii ] , pref_values [ i ] , " " ) ;
AOM_set_value_string ( objects [ iii ] , " jd2_jdrq " , date . str ( ) . c_str ( ) ) ;
AOM_set_value_string ( objects [ iii ] , sign_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 ;
}
}
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 ] ) ) ;
ITKCALL ( AOM_save ( objects [ iii ] ) ) ;
AOM_unlock ( 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 ) ) ;
ITKCALL ( AE_ask_dataset_named_ref2 ( dataset [ i ] , " word " , & ae_ref , & word_ref ) ) ;
char * file_name ;
char * file_name ;
ITKCALL ( AOM_UIF_ask_value ( word_ref , " file_name " , & file_name ) ) ;
ITKCALL ( AOM_UIF_ask_value ( word_ref , " file_name " , & file_name ) ) ;
ss < < date. str ( ) . c_str ( ) ;
ss < < buffer ;
ss < < " _ " ;
ss < < " _ " ;
ss < < file_name ;
ss < < file_name ;
printf ( " path:%s \n " , ss . str ( ) . c_str ( ) ) ;
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 ) ) ;
ITKCALL ( AE_ask_dataset_named_ref2 ( dataset [ i ] , " excel " , & ae_ref , & excel_ref ) ) ;
char * file_name ;
char * file_name ;
ITKCALL ( AOM_UIF_ask_value ( excel_ref , " file_name " , & file_name ) ) ;
ITKCALL ( AOM_UIF_ask_value ( excel_ref , " file_name " , & file_name ) ) ;
ss < < date. str ( ) . c_str ( ) ;
ss < < buffer ;
ss < < " _ " ;
ss < < " _ " ;
ss < < file_name ;
ss < < file_name ;
printf ( " path:%s \n " , ss . str ( ) . c_str ( ) ) ;
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 ) ;
printf ( " file_type:%d \n " , file_type ) ;
if ( file_type = = 0 ) {
if ( file_type = = 0 ) {
class_Test = env - > FindClass ( " sign2file/SignToWord " ) ;
class_Test = env - > FindClass ( " sign2file/SignToWord " ) ;
int res = sign ( env , class_Test , ss . str ( ) . c_str ( ) , user_name , s tep) ;
int res = sign ( env , class_Test , ss . str ( ) . c_str ( ) , user_name , ( char * ) s ign_location, ( char * ) tem ps. str ( ) . c_str ( ) ) ;
if ( res ) {
if ( res ) {
replace_dataset_named_reference ( dataset [ i ] , word_ref , ss . str ( ) . c_str ( ) , " word " ) ;
replace_dataset_named_reference ( dataset [ i ] , word_ref , ss . str ( ) . c_str ( ) , " word " ) ;
}
}
} else if ( file_type = = 1 ) {
} else if ( file_type = = 1 ) {
class_Test = env - > FindClass ( " sign2file/SignToExcel " ) ;
class_Test = env - > FindClass ( " sign2file/SignToExcel " ) ;
int res = sign ( env , class_Test , ss . str ( ) . c_str ( ) , user_name , s tep) ;
int res = sign ( env , class_Test , ss . str ( ) . c_str ( ) , user_name , ( char * ) s ign_location, ( char * ) tem ps. str ( ) . c_str ( ) ) ;
if ( res ) {
if ( res ) {
replace_dataset_named_reference ( dataset [ i ] , excel_ref , ss . str ( ) . c_str ( ) , " excel " ) ;
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 ) ) ;
ITKCALL ( AE_ask_dataset_named_ref2 ( dataset [ i ] , " word " , & ae_ref , & word_ref ) ) ;
char * file_name ;
char * file_name ;
ITKCALL ( AOM_UIF_ask_value ( word_ref , " file_name " , & file_name ) ) ;
ITKCALL ( AOM_UIF_ask_value ( word_ref , " file_name " , & file_name ) ) ;
ss < < date. str ( ) . c_str ( ) ;
ss < < buffer ;
ss < < " _ " ;
ss < < " _ " ;
ss < < file_name ;
ss < < file_name ;
printf ( " path:%s \n " , ss . str ( ) . c_str ( ) ) ;
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 ) ) ;
ITKCALL ( AE_ask_dataset_named_ref2 ( dataset [ i ] , " excel " , & ae_ref , & excel_ref ) ) ;
char * file_name ;
char * file_name ;
ITKCALL ( AOM_UIF_ask_value ( excel_ref , " file_name " , & file_name ) ) ;
ITKCALL ( AOM_UIF_ask_value ( excel_ref , " file_name " , & file_name ) ) ;
ss < < date. str ( ) . c_str ( ) ;
ss < < buffer ;
ss < < " _ " ;
ss < < " _ " ;
ss < < file_name ;
ss < < file_name ;
printf ( " path:%s \n " , ss . str ( ) . c_str ( ) ) ;
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 ) ;
printf ( " file_type:%d \n " , file_type ) ;
if ( file_type = = 0 ) {
if ( file_type = = 0 ) {
class_Test = env - > FindClass ( " sign2file/SignToWord " ) ;
class_Test = env - > FindClass ( " sign2file/SignToWord " ) ;
int res = sign ( env , class_Test , ss . str ( ) . c_str ( ) , user_name , s tep) ;
int res = sign ( env , class_Test , ss . str ( ) . c_str ( ) , user_name , ( char * ) s ign_location, ( char * ) tem ps. str ( ) . c_str ( ) ) ;
if ( res ) {
if ( res ) {
replace_dataset_named_reference ( dataset [ i ] , word_ref , ss . str ( ) . c_str ( ) , " word " ) ;
replace_dataset_named_reference ( dataset [ i ] , word_ref , ss . str ( ) . c_str ( ) , " word " ) ;
}
}
} else if ( file_type = = 1 ) {
} else if ( file_type = = 1 ) {
class_Test = env - > FindClass ( " sign2file/SignToExcel " ) ;
class_Test = env - > FindClass ( " sign2file/SignToExcel " ) ;
int res = sign ( env , class_Test , ss . str ( ) . c_str ( ) , user_name , s tep) ;
int res = sign ( env , class_Test , ss . str ( ) . c_str ( ) , user_name , ( char * ) s ign_location, ( char * ) tem ps. str ( ) . c_str ( ) ) ;
if ( res ) {
if ( res ) {
replace_dataset_named_reference ( dataset [ i ] , excel_ref , ss . str ( ) . c_str ( ) , " excel " ) ;
replace_dataset_named_reference ( dataset [ i ] , excel_ref , ss . str ( ) . c_str ( ) , " excel " ) ;
}
}