|
|
|
@ -62,6 +62,8 @@
|
|
|
|
|
#include <string>
|
|
|
|
|
#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");
|
|
|
|
|
}
|
|
|
|
|