You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

276 lines
7.9 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#include <tc\tc.h>
#include <property\propdesc.h>
#include <epm\epm.h>
#include <epm\epm_toolkit_tc_utils.h>
#include <tccore\item.h>
#include <tccore\grmtype.h>
#include <tccore\grm.h>
#include <tccore\imantype.h>
#include <sa\am.h>
#include <tccore\aom.h>
#include <tccore\aom_prop.h>
#include <property\prop_errors.h>
#include <tccore\workspaceobject.h>
#include <ics\ics.h>
#include <ics\ics2.h>
#include <qry\qry.h>
#include <epm\signoff.h>
#include <direct.h>
#include <pom\pom\pom.h>
#include <pom\pom\pom_errors.h>
#include <fclasses\tc_date.h>
#include <tc/preferences.h>
#define MAX_PATH_LENGTH 2000
/******************************************************
* @headerfile standard c & cpp header files
********************************************************/
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <string>
#include <vector>
#include <map>
#include <fstream>
#include <iostream>
#include <algorithm>
#include "epm_handler_common.h"
#include "error_handling.h"
#include "common_itk_util.h"
#include "string_helper.h"
#include "ocilib.h"
#include "erp_utils.h"
using namespace std;
FILE* jklogFile = NULL;
void jk2_CreateLogFile(char* FunctionName)
{
int i=0, ifail = ITK_ok;
date_t status_now;
//char* date_string = NULL;
char date_string[MAX_PATH_LENGTH];
char logFileDir[MAX_PATH_LENGTH];
char logFileName[MAX_PATH_LENGTH];
char* session_uid = NULL;
tag_t session_tag = NULLTAG;
time_t now;
struct tm *p;
time(&now);
jklogFile = NULL;
//current_time(&status_now);
p=localtime(&now);
memset(date_string, 0, sizeof(date_string));
sprintf(date_string,"%4d%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 );
//if( DATE_date_to_string( status_now, "%Y%m%d%H%M%S", &date_string) != ITK_ok )
//ifail = ITK_date_to_string (status_now, &date_string );
//if (ifail)
//{
// printf("!*ERROR*!: Failed to get current date time\n");
// goto CLEANUP;
//}
memset(logFileDir, 0, sizeof(logFileDir));
memset(logFileName, 0, sizeof(logFileName));
//get log dir
sprintf(logFileDir, "%s", getenv("TC_USER_LOG_DIR"));
printf("\n log file dir: %s\n", logFileDir);
//try to change dir to TC_USER_LOG_DIR
if(chdir(logFileDir)!=ITK_ok)
{
//not set TC_USER_LOG_DIR
//log in to default TC_LOG
memset(logFileDir, 0, sizeof(logFileDir));
sprintf(logFileDir, "%s", getenv("TEMP"));
printf("\n TC_USER_LOG_DIR invalide, log file dir: %s\n", logFileDir);
if(chdir(logFileDir)!=ITK_ok)
{
//still can not change to log dir
printf("!*ERROR*!: Failed to change dir to TC_USER_LOG_DIR\n");
goto CLEANUP;
}
}
//get session_uid to make sure the log file name unique
POM_ask_session(&session_tag);
ITK__convert_tag_to_uid(session_tag, &session_uid);
//get logFileName
sprintf(logFileName, "%s_%s_%s.log", FunctionName, session_uid, date_string);
printf("log file name: %s\n", logFileName);
//for(i = 0; _access((char *)logFileName, 4) == 0; i++)
{
memset(logFileName, 0, sizeof(logFileName));
sprintf(logFileName, "%s_%s_%s_%d.log", FunctionName, session_uid, date_string, i);
}
printf("final log file name: %s\n", logFileName);
//create log file
jklogFile = fopen(logFileName, "w");
CLEANUP:
//DOFREE(date_string);
DOFREE(session_uid);
}
int jk_AutoSign_Handler(EPM_action_message_t msg){
int ifail = ITK_ok,arg_cnt=0,i=0;
tag_t root_task =NULLTAG;
char arg1value[1024] = "",arg2value[1024] = "",arg3value[1024]="",arg4value[1024]="";
char *argflag =NULL,*argvalue=NULL ,*arg = NULL;
char *rootTaskUid = NULL;
char sql[4000] ="\0";
char ** sqlArgs =NULL ;
// char tc_log_file_name[128]="\0"; //<2F><>־<EFBFBD>ļ<EFBFBD>·<EFBFBD><C2B7>
int sqlArgsCount = 9;
vector<string> pref_vec ;
time_t now;
struct tm *p;
time(&now);
p = localtime(&now);
// sprintf(tc_log_file_name, "%s\\tx_AutoSign_log_[%d-%d-%d-%d-%02d].txt",getenv("TEMP"),1900+p->tm_year,p->tm_mon+1 ,p->tm_mday,p->tm_hour,p->tm_min );
// printf("tc_log_file_name=%s\n",tc_log_file_name);
// tx_CreateLogFile(tc_log_file_name);
//TODO <20><>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
getPrefStrings("jk_AutoSign_DB_Configer",TC_preference_site, pref_vec);
if(pref_vec.size() < 3){
// WriteLog("ERROR:û<>л<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1>[AutoSign_DB_Configer]\n");
// CloseLog();
return ifail;
}
if(ConnServer((char*)pref_vec[0].c_str(),(char*)pref_vec[1].c_str(),(char*)pref_vec[2].c_str()) == -1){
// WriteLog("ERROR:ORACLE<4C><45><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD>¼ʧ<C2BC><CAA7>\n");
// CloseLog();
return ifail;
}
cout<<"1-------------------------"<<endl;
arg_cnt = TC_number_of_arguments(msg.arguments);
cout<<"2-------------------------"<<endl;
// WriteLog("INFO:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>%d",arg_cnt);
if (arg_cnt > 0)
{
cout<<"3-------------------------"<<endl;
for (i=0;i<arg_cnt;i++)
{
cout<<"4-------------------------"<<endl;
arg = TC_next_argument(msg.arguments);
cout<<"5-------------------------"<<endl;
ITKCALL(ifail = ITK_ask_argument_named_value((const char*)arg, &argflag, &argvalue));
if (stricmp(argflag, "SignUserName") == 0)
{
if(argvalue != NULL)
{
strcpy(arg1value,argvalue);//<2F><>argvalueֵ<65><D6B5>ֵ<EFBFBD><D6B5>arg1value<75><65>
// WriteLog("INFO:SignUserName=%s",arg1value);
}
}
else if(stricmp(argflag, "SignDate") == 0)
{
if(argvalue != NULL)
{
strcpy(arg2value,argvalue);
// WriteLog("INFO:SignDate=%s",arg2value);
}
}
else if(stricmp(argflag,"SignDateFormat") == 0)
{
if(argvalue != NULL)
{
strcpy(arg3value,argvalue);
// WriteLog("INFO:SignDateFormat=%s",arg3value);
}
}else if (stricmp(argflag, "SignName") == 0)
{
if(argvalue != NULL)
{
strcpy(arg4value,argvalue);
// WriteLog("INFO:SignName=%s",arg4value);
}
}
cout<<"6-------------------------"<<endl;
}
MEM_free(argflag);
MEM_free(argvalue);
}
ITKCALL(EPM_ask_root_task( msg.task, &root_task ));
ITK__convert_tag_to_uid(root_task,&rootTaskUid);
// WriteLog("INFO:ProcessUid=%s",rootTaskUid);
//<2F><><EFBFBD>ӷ<EFBFBD><D3B7><EFBFBD><EFBFBD><EFBFBD> <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD> <20><>ҵ<EFBFBD><D2B5>
char *job_name=NULL;
ITKCALL(ifail=AOM_ask_value_string(root_task,"job_name",&job_name));
date_t date_t_i;
ITKCALL(ifail=AOM_ask_value_date(root_task,"fnd0StartDate",&date_t_i));
char shijain[100]="";
sprintf(shijain,"%d<><64>%d<><64>%d<><64> %d<><64>%d<><64>",date_t_i.year,date_t_i.month +1,date_t_i.day,date_t_i.hour,date_t_i.minute);
string timeString=shijain;
cout<<"7-------------------------"<<endl;
// WriteLog("INFO:ProcessUid=%s",rootTaskUid);
tag_t owning_user;
cout<<"8-------------------------"<<endl;
ITKCALL(ifail=AOM_ask_value_tag(root_task,"owning_user",&owning_user));
cout<<"9-------------------------"<<endl;
char *user_name=NULL;
ITKCALL(ifail=AOM_ask_value_string(owning_user,"user_name",&user_name));
cout<<"user_name---------"<<user_name<<endl;
string usernameString=user_name;
sqlArgs = (char **)MEM_alloc(9*sizeof(char*));
for(i = 0;i < sqlArgsCount;i++){
sqlArgs[i] = (char *)MEM_alloc(1028*sizeof(char));
}
strcpy(sqlArgs[0],rootTaskUid);
strcpy(sqlArgs[1],arg1value);
strcpy(sqlArgs[2],arg2value);
strcpy(sqlArgs[3],arg3value);
strcpy(sqlArgs[4],arg4value);
strcpy(sqlArgs[5],"0");
strcpy(sqlArgs[6],job_name);
cout<<"9.1-------------------------"<<endl;
strcpy(sqlArgs[7],timeString.c_str());
cout<<"9.2-------------------------"<<endl;
strcpy(sqlArgs[8],usernameString.c_str());
cout<<"10-------------------------"<<endl;
sprintf(sql,"INSERT INTO JK_PCN_AUTOSIGN ( PUID , SIGN_NAME_INFO , SIGN_DATE_INFO , SIGN_DATE_FORMATE , SIGN_NAME , PSTATUS, JOB_NAME, START_DATE, USER_NAME ) VALUES ( :1 , :2 , :3 , :4 , :5 , :6 , :7 , :8 , :9)");
cout<<"11-------------------------"<<endl;
if(-1 == ExecuteSQL(sql,sqlArgsCount,sqlArgs)){
cout<<"12-------------------------"<<endl;
// WriteLog("ERROR:д<><D0B4><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD>ʧ<EFBFBD><CAA7>");
}else{
// WriteLog("INFO:д<><D0B4><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD><DDBF>ɹ<EFBFBD>");
}
for(i = 0;i < sqlArgsCount;i++){
MEM_free(sqlArgs[i]);
}
MEM_free(rootTaskUid);
MEM_free(sqlArgs);
if(user_name!=NULL)
{
MEM_free(user_name);
user_name=NULL;
}
if(job_name!=NULL)
{
MEM_free(job_name);
job_name=NULL;
}
sqlArgs = NULL;
DisConnServer();
CloseLog();
return ifail;
}