first commit

main
李建辉 1 month ago
commit 96858860c8

@ -0,0 +1,28 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 14
VisualStudioVersion = 14.0.25420.1
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SignOff_itk", "SignOff_itk\SignOff_itk.vcxproj", "{8240A4EB-EBA7-448B-B846-2FEC53074C73}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
Release|x64 = Release|x64
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{8240A4EB-EBA7-448B-B846-2FEC53074C73}.Debug|x64.ActiveCfg = Debug|x64
{8240A4EB-EBA7-448B-B846-2FEC53074C73}.Debug|x64.Build.0 = Debug|x64
{8240A4EB-EBA7-448B-B846-2FEC53074C73}.Debug|x86.ActiveCfg = Release|x64
{8240A4EB-EBA7-448B-B846-2FEC53074C73}.Debug|x86.Build.0 = Release|x64
{8240A4EB-EBA7-448B-B846-2FEC53074C73}.Release|x64.ActiveCfg = Release|x64
{8240A4EB-EBA7-448B-B846-2FEC53074C73}.Release|x64.Build.0 = Release|x64
{8240A4EB-EBA7-448B-B846-2FEC53074C73}.Release|x86.ActiveCfg = Release|Win32
{8240A4EB-EBA7-448B-B846-2FEC53074C73}.Release|x86.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal

Binary file not shown.

Binary file not shown.

@ -0,0 +1,96 @@
#include "CRUL_server_call_httpserver.h"
#include <map>
#include <string>
#include "common_itk_util.h"
//#define HTTP_HOST "localhost"
#define HTTP_POST 9293
void callHttpserver(string signinfoJsonString,char * HTTP_HOST)
{
CURL *curl;
CURLcode res;
char httpUrl[1028] = "\0";
curl = curl_easy_init();
sprintf(httpUrl,"http://%s:%d/server/signoff",HTTP_HOST,HTTP_POST);
WriteLog("发送地址:%s\n", httpUrl);
if (curl) {
curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
curl_easy_setopt(curl, CURLOPT_URL, httpUrl);
//curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
//curl_easy_setopt(curl, CURLOPT_DEFAULT_PROTOCOL, "https");
struct curl_slist *headers = NULL;
headers = curl_slist_append(headers, "Accept-Charset: GBK");
headers = curl_slist_append(headers, "Content-Type: application/json;charset=GBK");
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
WriteLog("发送内容:%s\n", signinfoJsonString.c_str());
//printf("data=>%s\n",signinfoJsonString.c_str());
const char *data = signinfoJsonString.c_str();
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data);
curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 10);
curl_easy_setopt(curl, CURLOPT_TIMEOUT, 20);
res = curl_easy_perform(curl);
WriteLog("返回值:%d\n", res);
}
curl_easy_cleanup(curl);
}
//void callHttpserverDwgtopdf(string signinfoJsonString, char* HTTP_HOST)
//{
// CURL* curl;
// CURLcode res;
// char httpUrl[1028] = "\0";
// curl = curl_easy_init();
// sprintf(httpUrl, "http://%s:%d/server/dwgtopdf", HTTP_HOST, HTTP_POST);
// if (curl) {
// curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
// curl_easy_setopt(curl, CURLOPT_URL, httpUrl);
// //curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
// //curl_easy_setopt(curl, CURLOPT_DEFAULT_PROTOCOL, "https");
// struct curl_slist* headers = NULL;
// headers = curl_slist_append(headers, "Accept-Charset: GBK");
// headers = curl_slist_append(headers, "Content-Type: application/json;charset=GBK");
// curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
// WriteLog("发送内容:%s\n", signinfoJsonString.c_str());
//// printf("data=>%s\n", signinfoJsonString.c_str());
// const char* data = signinfoJsonString.c_str();
// curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data);
// curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 10);
// curl_easy_setopt(curl, CURLOPT_TIMEOUT, 20);
// res = curl_easy_perform(curl);
// WriteLog("返回值:%d\n", res);
//
// }
// curl_easy_cleanup(curl);
//}
//
//void callHttpserverMail(string signinfoJsonString, char* HTTP_HOST)
//{
// CURL* curl;
// CURLcode res;
// char httpUrl[4096] = "\0";
// WriteLog("内容长度%d\n", signinfoJsonString.size());
// curl = curl_easy_init();
// sprintf(httpUrl, "http://%s:%d/server/sendmail", HTTP_HOST, HTTP_POST);
//// printf("call=>%s \n", httpUrl);
// WriteLog("发送的路径:%s\n", httpUrl);
// if (curl) {
// curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
// curl_easy_setopt(curl, CURLOPT_URL, httpUrl);
// //curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
// //curl_easy_setopt(curl, CURLOPT_DEFAULT_PROTOCOL, "https");
// struct curl_slist* headers = NULL;
// headers = curl_slist_append(headers, "Accept-Charset: GBK");
// headers = curl_slist_append(headers, "Content-Type: application/json;charset=GBK");
// curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
//// curl_easy_setopt(curl, CURLOPT_HTTPHEADER, "Expect:");
// WriteLog("发送内容:%s\n", signinfoJsonString.c_str());
// // printf("data=>%s\n", signinfoJsonString.c_str());
// const char* data = signinfoJsonString.c_str();
// curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data);
// curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 10);
// curl_easy_setopt(curl, CURLOPT_TIMEOUT, 20);
// res = curl_easy_perform(curl);
// WriteLog("返回值:%d\n", res);
// }
// curl_easy_cleanup(curl);
//}

@ -0,0 +1,7 @@
#include <iostream>
#include <Windows.h>
#include <curl\curl.h>
using namespace std;
void callHttpserver(string signinfoJsonString,char * HTTP_HOST);
//void callHttpserverDwgtopdf(string signinfoJsonString, char* HTTP_HOST);
//void callHttpserverMail(string signinfoJsonString, char* HTTP_HOST);

@ -0,0 +1,197 @@
#include "Supor_register.h"
#include "ado.h"
#include <regex>
using namespace std;
extern "C" int POM_AM__set_application_bypass(logical bypass);
int Connor_ChangeTask_AssignUser(EPM_action_message_t msg) {
int ifail = ITK_ok;
char* log_file = NULL;
printf("*************************************************************\n");
printf("* Connor_ChangeTask_AssignUser is strat ! *\n");
printf("*************************************************************\n");
int arg_cnt = 0, attachments = 0, * attach_type, occur_of_counts = 0, form_count;
tag_t root_task = NULLTAG, * taskAttches = NULLTAG, root_job = NULLTAG;
arg_cnt = TC_number_of_arguments(msg.arguments);
EPM_ask_root_task(msg.task, &root_task);
EPM_ask_job(root_task, &root_job);
EPM_ask_attachments(root_task, EPM_target_attachment, &occur_of_counts, &taskAttches);
POM_AM__set_application_bypass(true);
char* taskUid;
ITK__convert_tag_to_uid(root_job, &taskUid);
char* argflag = NULL, * argvalue = NULL, * arg = NULL;
char* uid;
char* endResult;
char* objecttype = NULL;
char* userField = NULL;
printf("参数个数为:%d\n", arg_cnt);
if (arg_cnt > 0)
{
for (int i = 0; i < arg_cnt; i++)
{
//获取下一个参数从0开始
arg = TC_next_argument(msg.arguments);
//获取参数的名称和值
ITK_ask_argument_named_value((const char*)arg, &argflag, &argvalue);
if (stricmp(argflag, "objecttype") == 0)
{
if (argvalue != NULL)
{
objecttype = argvalue;
printf("获取的值%s\n", objecttype);
}
}
else if (stricmp(argflag, "user") == 0)
{
if (argvalue != NULL)
{
userField = argvalue;
printf("获取的值%s\n", userField);
}
}
}
}
if (objecttype == NULL || userField == NULL) {
EMH_store_error_s1(EMH_severity_error,
919012,
"请配置参数!");
return 1;
}
char* task_type = NULL;
char* userName = NULL;
char* user_id = NULL;
tag_t aUserTag = NULLTAG, responsibleParty = NULLTAG, cur_perform_task = NULLTAG, * attachmentTags = NULLTAG;
WSOM_ask_object_type2(msg.task, &task_type);
vector<string> dbPrefs;
getPrefStrings("LD_dbinfo", dbPrefs);
if (dbPrefs.size() != 4)
{
EMH_store_error_s2(EMH_severity_error, 919012, "数据库连接首选项配置错误", "LD_dbinfo");
}
if (open((char*)dbPrefs[0].c_str(), (char*)dbPrefs[1].c_str(), (char*)dbPrefs[2].c_str(), (char*)dbPrefs[3].c_str()))
{
printf("数据库连接失败:用户名:%s密码%s数据库%sip%s", dbPrefs[0].c_str(), dbPrefs[1].c_str(), dbPrefs[2].c_str(), dbPrefs[3].c_str());
EMH_store_error_s1(EMH_severity_error,
919012,
"数据库连接失败");
return 1;
}
printf("数据库连接成功\n");
for (int count = 0; count < occur_of_counts; count++) {
char* id = NULL;//用户id
char* object_type = NULL;//用户id
ITKCALL(AOM_ask_value_string(taskAttches[count], "object_type", &object_type));
printf("object_type=========%s\n", object_type);
if (strstr(objecttype, object_type)) {
ITKCALL(AOM_ask_value_string(taskAttches[count], "item_id", &id));
printf("id=========%s\n", id);
char selectById[1024] = "";
vector<string> result;
sprintf(selectById, "select %s from LY_CHANGETASSKFORM_DETAILS where ID='%s' and WFUID='%s'", userField, id, taskUid);
printf("selectById====%s\n", selectById);
if (selectData(selectById, result) != -1) {
if (result.size() > 0) {
string userId = result[0];
if (userId.length() > 0) {
printf("userId1===%s\n", userId.c_str());
userId.resize(userId.length() - 1);
printf("userId2===%s\n", userId.c_str());
//解析括号
// 查找左括号的位置
size_t startPos = userId.find('(');
if (startPos == std::string::npos) {
std::cerr << "No '(' found in the string." << std::endl;
}
else {
// 查找右括号的位置
size_t endPos = userId.find(')', startPos);
if (endPos == std::string::npos) {
std::cerr << "No ')' found in the string." << std::endl;
return 1;
}
else {
// 提取括号内的内容
std::string id = userId.substr(startPos + 1, endPos - startPos - 1);
// 将提取的ID赋值给 userId
userId = id;
// 输出结果
std::cout << "Extracted ID: " << userId << std::endl;
}
}
printf("task_type========%s\n", task_type);
if (strcmp("EPMAcknowledgeTask", task_type) == 0) {
int mem_cnt = 0, signoff_cnt = 0, signmem_count = 0, * attach_type;
tag_t user_tag = NULLTAG, login_group = NULLTAG, * members = NULLTAG, * signoffs = NULLTAG, select_signoff_tag = NULLTAG, * attachmentTags = NULLTAG;
EPM_ask_sub_task(msg.task, "select-signoff-team", &select_signoff_tag);
//EPM_ask_sub_task(task_tags[i], "select-signoff-team", &cur_perform_task);
EPM_ask_all_attachments(select_signoff_tag, &signmem_count, &attachmentTags, &attach_type);
if (signmem_count == 0) {
ITKCALL(SA_find_user2(userId.c_str(), &user_tag));
if (user_tag != NULLTAG) {
ITKCALL(SA_ask_user_login_group(user_tag, &login_group));
ITKCALL(SA_find_groupmembers(user_tag, login_group, &mem_cnt, &members));
ITKCALL(EPM_create_adhoc_signoff(select_signoff_tag, members[0], &signoff_cnt, &signoffs));
ITKCALL(EPM_set_adhoc_signoff_selection_done(select_signoff_tag, true));
}
else {
POM_AM__set_application_bypass(true);
ITKCALL(EPM_promote_task(msg.task, ""));
POM_AM__set_application_bypass(false);
}
}
DOFREE(members);
DOFREE(signoffs);
}
}
}
else {
printf("未找到\n");
}
}
}
}
POM_AM__set_application_bypass(false);
printf("*************************************************************\n");
printf("* Connor_ChangeTask_AssignUser is end ! *\n");
printf("*************************************************************\n");
return ifail;
}

@ -0,0 +1,149 @@
#include "Supor_register.h"
#include "ado.h"
using namespace std;
extern "C" int POM_AM__set_application_bypass(logical bypass);
int Connor_ChangeTask_CheckValue(EPM_action_message_t msg) {
int ifail = ITK_ok;
char* log_file = NULL;
printf("*************************************************************\n");
printf("* Connor_ChangeTask_CheckValue is strat ! *\n");
printf("*************************************************************\n");
int arg_cnt = 0, attachments = 0, * attach_type, occur_of_counts = 0, form_count;
tag_t root_task = NULLTAG, * taskAttches = NULLTAG,root_job = NULLTAG;
arg_cnt = TC_number_of_arguments(msg.arguments);
EPM_ask_root_task(msg.task, &root_task);
EPM_ask_job(root_task,&root_job);
EPM_ask_attachments(root_task, EPM_target_attachment, &occur_of_counts, &taskAttches);
POM_AM__set_application_bypass(true);
char* taskUid;
ITK__convert_tag_to_uid(root_job, &taskUid);
char* argflag = NULL, * argvalue = NULL, * arg = NULL;
char* uid;
char* endResult;
char* objecttype = NULL;
char* checkvaluename = NULL;
char* errormessage = NULL;
printf("参数个数为:%d\n", arg_cnt);
if (arg_cnt > 0)
{
for (int i = 0; i < arg_cnt; i++)
{
//获取下一个参数从0开始
arg = TC_next_argument(msg.arguments);
//获取参数的名称和值
ITK_ask_argument_named_value((const char*)arg, &argflag, &argvalue);
if (stricmp(argflag, "objecttype") == 0)
{
if (argvalue != NULL)
{
objecttype = argvalue;
printf("获取的值%s\n", objecttype);
}
}
else if (stricmp(argflag, "checkvaluename") == 0)
{
if (argvalue != NULL)
{
checkvaluename = argvalue;
printf("获取的值%s\n", checkvaluename);
}
}
else if (stricmp(argflag, "errormessage") == 0)
{
if (argvalue != NULL)
{
errormessage = argvalue;
printf("获取的值%s\n", errormessage);
}
}
}
}
if (objecttype == NULL || checkvaluename == NULL || errormessage == NULL) {
EMH_store_error_s1(EMH_severity_error,
919012,
"请配置参数!");
return 1;
}
char* task_type = NULL;
char* userName = NULL;
char* user_id = NULL;
tag_t aUserTag = NULLTAG, responsibleParty = NULLTAG, cur_perform_task = NULLTAG, * attachmentTags = NULLTAG;
WSOM_ask_object_type2(msg.task, &task_type);
vector<string> dbPrefs;
getPrefStrings("LD_dbinfo", dbPrefs);
if (dbPrefs.size() != 4)
{
EMH_store_error_s2(EMH_severity_error, 919012, "数据库连接首选项配置错误", "LD_dbinfo");
}
if (open((char*)dbPrefs[0].c_str(), (char*)dbPrefs[1].c_str(), (char*)dbPrefs[2].c_str(), (char*)dbPrefs[3].c_str()))
{
printf("数据库连接失败:用户名:%s密码%s数据库%sip%s", dbPrefs[0].c_str(), dbPrefs[1].c_str(), dbPrefs[2].c_str(), dbPrefs[3].c_str());
EMH_store_error_s1(EMH_severity_error,
919012,
"数据库连接失败");
return 1;
}
printf("数据库连接成功\n");
for (int count = 0; count < occur_of_counts; count++) {
char* id = NULL;//用户id
char* object_type = NULL;//用户id
ITKCALL(AOM_ask_value_string(taskAttches[count], "object_type", &object_type));
printf("object_type=========%s\n", object_type);
if (strstr(objecttype, object_type)) {
ITKCALL(AOM_ask_value_string(taskAttches[count], "item_id", &id));
printf("id=========%s\n", id);
char selectById[1024] = "";
vector<string> result;
sprintf(selectById, "select %s from LY_CHANGETASSKFORM_DETAILS where ID='%s' and WFUID='%s'", checkvaluename, id, taskUid);
printf("selectById====%s\n", selectById);
if (selectDataNormal(selectById, result) != -1) {
if (result.size() <= 0) {
printf("未找到\n");
/*string field = result[0];
printf("field====%s\n", field.c_str());
if (field.length() <= 0) {
}*/
EMH_store_error_s1(EMH_severity_error,
919012,
errormessage);
return 1;
}
}
}
}
POM_AM__set_application_bypass(false);
printf("*************************************************************\n");
printf("* Connor_ChangeTask_CheckValue is end ! *\n");
printf("*************************************************************\n");
return ifail;
}

@ -0,0 +1,180 @@
#include "Supor_register.h"
#include "ado.h"
using namespace std;
extern "C" int POM_AM__set_application_bypass(logical bypass);
int Connor_ChangeTask_SetComments(EPM_action_message_t msg) {
int ifail = ITK_ok;
char* log_file = NULL;
printf("*************************************************************\n");
printf("* Connor_ChangeTask_SetComments is strat ! *\n");
printf("*************************************************************\n");
int arg_cnt = 0, attachments = 0, * attach_type, occur_of_counts = 0, form_count;
tag_t root_task = NULLTAG, * taskAttches = NULLTAG, root_job = NULLTAG;
arg_cnt = TC_number_of_arguments(msg.arguments);
EPM_signoff_decision_t dec;
EPM_ask_root_task(msg.task, &root_task);
EPM_ask_job(root_task, &root_job);
EPM_ask_attachments(root_task, EPM_target_attachment, &occur_of_counts, &taskAttches);
POM_AM__set_application_bypass(true);
char* taskUid;
ITK__convert_tag_to_uid(root_job, &taskUid);
char* argflag = NULL, * argvalue = NULL, * arg = NULL;
char* uid;
char* endResult;
char* objecttype = NULL;
char* setcomments = NULL;
char* comments = NULL;
tag_t* sub_tasks = NULL; int sub_task_count = 0;
//通过节点获取根流程
EPM_ask_root_task(msg.task, &root_task);
//得到根流程下的所有的一级节点
EPM_ask_sub_tasks(root_task, &sub_task_count, &sub_tasks);
for (int i = 0; i < sub_task_count; i++)
{
char* uid = NULL;
ITK__convert_tag_to_uid(sub_tasks[i], &uid);
printf("uid============%s\n", uid);
date_t decision_date;
int perform_count = 0;
tag_t* perform_attaches = NULLTAG;
tag_t memberTag = NULLTAG;
SIGNOFF_TYPE_t memberType;
EPM_ask_all_attachments(msg.task, &perform_count, &perform_attaches, &attach_type);
for (int i = 0; i < perform_count; i++)
{
EPM_ask_signoff_member(perform_attaches[i], &memberTag, &memberType);
// CR_ask_signoff_decision(perform_attaches[i], &signoff_decision, comments, &decision_date);
// cout<<"注释1-------------"<<comments<<endl;
EPM_ask_signoff_decision(perform_attaches[i], &dec, &comments, &decision_date);
printf("comments===========%s\n", comments);
}
}
printf("参数个数为:%d\n", arg_cnt);
if (arg_cnt > 0)
{
for (int i = 0; i < arg_cnt; i++)
{
//获取下一个参数从0开始
arg = TC_next_argument(msg.arguments);
//获取参数的名称和值
ITK_ask_argument_named_value((const char*)arg, &argflag, &argvalue);
if (stricmp(argflag, "objecttype") == 0)
{
if (argvalue != NULL)
{
objecttype = argvalue;
printf("获取的值%s\n", objecttype);
}
}
else if (stricmp(argflag, "setcomments") == 0)
{
if (argvalue != NULL)
{
setcomments = argvalue;
printf("获取的值%s\n", setcomments);
}
}
}
}
if (objecttype == NULL || setcomments == NULL) {
EMH_store_error_s1(EMH_severity_error,
919012,
"请配置参数!");
return 1;
}
char* task_type = NULL;
char* userName = NULL;
char* user_id = NULL;
tag_t aUserTag = NULLTAG, responsibleParty = NULLTAG, cur_perform_task = NULLTAG, * attachmentTags = NULLTAG;
WSOM_ask_object_type2(msg.task, &task_type);
vector<string> dbPrefs;
getPrefStrings("LD_dbinfo", dbPrefs);
if (dbPrefs.size() != 4)
{
EMH_store_error_s2(EMH_severity_error, 919012, "数据库连接首选项配置错误", "LD_dbinfo");
}
if (open((char*)dbPrefs[0].c_str(), (char*)dbPrefs[1].c_str(), (char*)dbPrefs[2].c_str(), (char*)dbPrefs[3].c_str()))
{
printf("数据库连接失败:用户名:%s密码%s数据库%sip%s", dbPrefs[0].c_str(), dbPrefs[1].c_str(), dbPrefs[2].c_str(), dbPrefs[3].c_str());
EMH_store_error_s1(EMH_severity_error,
919012,
"数据库连接失败");
return 1;
}
printf("数据库连接成功\n");
for (int count = 0; count < occur_of_counts; count++) {
char* id = NULL;//用户id
char* object_type = NULL;//用户id
ITKCALL(AOM_ask_value_string(taskAttches[count], "object_type", &object_type));
printf("object_type=========%s\n", object_type);
if (strstr(objecttype, object_type)) {
ITKCALL(AOM_ask_value_string(taskAttches[count], "item_id", &id));
printf("id=========%s\n", id);
//因为后操走两次 先查一下数据库中是否有相同id的数据
char updateSql[1024] = "";
vector<string> result;
//sprintf(updateSql, "update LY_CHANGETASSKFORM_DETAILS set %s='%s' where ID='%s' and WFUID='%s'", setcomments,comments2, id, taskUid);
sprintf(updateSql, "update LY_CHANGETASSKFORM_DETAILS set %s='%s' where ID='%s' and WFUID='%s'", setcomments, comments, id, taskUid);
if (ExecuteSQLNoInputParam(updateSql) == -1)
{
printf("保存数据失败\n");
}
else
{
//ExecuteSQLNoInputParam("commit");
printf("保存数据成功\n");
}
printf("updateSql====%s\n", updateSql);
}
}
POM_AM__set_application_bypass(false);
printf("*************************************************************\n");
printf("* Connor_ChangeTask_SetComments is end ! *\n");
printf("*************************************************************\n");
return ifail;
}

@ -0,0 +1,216 @@
#include "Supor_register.h"
#include "ado.h"
using namespace std;
extern "C" int POM_AM__set_application_bypass(logical bypass);
int Connor_ChangeTask_SetValue(EPM_action_message_t msg) {
int ifail = ITK_ok;
char* log_file = NULL;
printf("*************************************************************\n");
printf("* Connor_ChangeTask_SetValue is strat ! *\n");
printf("*************************************************************\n");
int arg_cnt = 0, attachments = 0, * attach_type, occur_of_counts = 0, form_count;
tag_t root_task = NULLTAG, * taskAttches = NULLTAG, root_job = NULLTAG;
arg_cnt = TC_number_of_arguments(msg.arguments);
EPM_ask_root_task(msg.task, &root_task);
EPM_ask_job(root_task, &root_job);
EPM_ask_attachments(root_task, EPM_target_attachment, &occur_of_counts, &taskAttches);
POM_AM__set_application_bypass(true);
char* taskUid;
ITK__convert_tag_to_uid(root_job, &taskUid);
char* argflag = NULL, * argvalue = NULL, * arg = NULL;
char* uid;
char* endResult;
char* objecttype = NULL;
char* setvaluename = NULL;
char* setvalue = NULL;
printf("参数个数为:%d\n", arg_cnt);
if (arg_cnt > 0)
{
for (int i = 0; i < arg_cnt; i++)
{
//获取下一个参数从0开始
arg = TC_next_argument(msg.arguments);
//获取参数的名称和值
ITK_ask_argument_named_value((const char*)arg, &argflag, &argvalue);
if (stricmp(argflag, "objecttype") == 0)
{
if (argvalue != NULL)
{
objecttype = argvalue;
printf("获取的值%s\n", objecttype);
}
}
else if (stricmp(argflag, "setvaluename") == 0)
{
if (argvalue != NULL)
{
setvaluename = argvalue;
printf("获取的值%s\n", setvaluename);
}
}
else if (stricmp(argflag, "setvalue") == 0)
{
if (argvalue != NULL)
{
setvalue = argvalue;
printf("获取的值%s\n", setvalue);
}
}
}
}
if (objecttype == NULL || setvaluename == NULL || setvalue == NULL) {
EMH_store_error_s1(EMH_severity_error,
919012,
"请配置参数!");
return 1;
}
char* task_type = NULL;
char* userName = NULL;
char* user_id = NULL;
tag_t aUserTag = NULLTAG, responsibleParty = NULLTAG, cur_perform_task = NULLTAG, * attachmentTags = NULLTAG;
SIGNOFF_TYPE_t memberType;
tag_t memberTag = NULLTAG;
WSOM_ask_object_type2(msg.task, &task_type);
EPM_signoff_decision_t dec;
if (strcmp("EPMDoTask", task_type) == 0 || strcmp("EPMOrTask", task_type) == 0 || strcmp("EPMConditionTask", task_type) == 0) {
EPM_ask_responsible_party(msg.task, &responsibleParty);
POM_get_user(&userName, &aUserTag);
AOM_ask_value_string(aUserTag, "object_string", &user_id);
}
else
{
EPM_ask_sub_task(msg.task, "perform-signoffs", &cur_perform_task);
EPM_ask_all_attachments(cur_perform_task, &attachments, &attachmentTags, &attach_type);
printf("数量:%d\n", attachments);
if (attachments > 0) {
int start = 0;
for (int j = 0; j < attachments; j++) {
char* comment = NULL;
date_t decision_date_temp;
ITKCALL(EPM_ask_signoff_decision(attachmentTags[j], &dec, &comment, &decision_date_temp));
ITKCALL(EPM_ask_signoff_member(attachmentTags[j], &memberTag, &memberType));
if (memberType == SIGNOFF_GROUPMEMBER && dec == EPM_approve_decision) {
ITKCALL(SA_ask_groupmember_user(memberTag, &aUserTag));
ITKCALL(AOM_ask_value_string(aUserTag, "object_string", &user_id));
}
}
}
}
printf("user_id========%s\n", user_id);
time_t now;
struct tm* p;
time(&now);//获取当前时间
p = localtime(&now);//本地化时间,可以细分为年月日时分秒等
int year = 1900 + p->tm_year;
int month = p->tm_mon;
int day = p->tm_mday;
int hour = p->tm_hour;
int min = p->tm_min;
int second = p->tm_sec;
date_t timesss;
char date_str_act[30] = "\0";
sprintf(date_str_act, "%d-%d-%d", year, month + 1, day);
printf("当前时间:%s\n", date_str_act);
vector<string> fieldNmae;
Split(setvaluename, ";", fieldNmae);
vector<string> fieldValue;
Split(setvalue, ";", fieldValue);
string sets;
for (int i = 0; i < fieldNmae.size(); i++) {
if (strcmp(fieldValue[i].c_str(),"sysdate") == 0) {
sets.append(fieldNmae[i]);
sets.append("=");
sets.append("'");
sets.append(date_str_act);
sets.append("',");
}
if (strcmp(fieldValue[i].c_str(), "nodeuser") == 0) {
sets.append(fieldNmae[i]);
sets.append("=");
sets.append("'");
sets.append(user_id);
sets.append("',");
}
}
if (!sets.empty()) { // 确保字符串不为空
sets.erase(sets.size() - 1); // 移除最后一个字符
}
printf("sets=========%s\n", sets.c_str());
vector<string> dbPrefs;
getPrefStrings("LD_dbinfo", dbPrefs);
if (dbPrefs.size() != 4)
{
EMH_store_error_s2(EMH_severity_error, 919012, "数据库连接首选项配置错误", "LD_dbinfo");
}
if (open((char*)dbPrefs[0].c_str(), (char*)dbPrefs[1].c_str(), (char*)dbPrefs[2].c_str(), (char*)dbPrefs[3].c_str()))
{
printf("数据库连接失败:用户名:%s密码%s数据库%sip%s", dbPrefs[0].c_str(), dbPrefs[1].c_str(), dbPrefs[2].c_str(), dbPrefs[3].c_str());
EMH_store_error_s1(EMH_severity_error,
919012,
"数据库连接失败");
return 1;
}
printf("数据库连接成功\n");
for (int count = 0; count < occur_of_counts; count++) {
char* id = NULL;//用户id
char* object_type = NULL;//用户id
ITKCALL(AOM_ask_value_string(taskAttches[count], "object_type", &object_type));
printf("object_type=========%s\n", object_type);
if (strstr(objecttype, object_type)) {
ITKCALL(AOM_ask_value_string(taskAttches[count], "item_id", &id));
printf("id=========%s\n", id);
//因为后操走两次 先查一下数据库中是否有相同id的数据
char updateSql[1024] = "";
vector<string> result;
sprintf(updateSql, "update LY_CHANGETASSKFORM_DETAILS set %s where ID='%s' and WFUID='%s'",sets.c_str(), id, taskUid);
//sprintf(updateSql, "update LY_CHANGETASSKFORM_DETAILS set %s where ID='%s' and WFUID='%s'", sets.c_str(), id, "R9LAAiNz51TfkD");
if (ExecuteSQLNoInputParam(updateSql) == -1)
{
printf("保存数据失败\n");
}
else
{
//ExecuteSQLNoInputParam("commit");
printf("保存数据成功\n");
}
printf("updateSql====%s\n", updateSql);
}
}
POM_AM__set_application_bypass(false);
printf("*************************************************************\n");
printf("* Connor_ChangeTask_SetValue is end ! *\n");
printf("*************************************************************\n");
return ifail;
}

@ -0,0 +1,579 @@
#include "Supor_register.h"
#include "ado.h"
#include <tc\preferences.h>
extern "C" int POM_AM__set_application_bypass(logical bypass);
using namespace std;
#define debug true
#define ITK_err 919012
#define PREF_ML_DB "LD_dbinfo"
/**
*
* ItemRevision
*
*/
int checkIsItemRevision(tag_t objtag,logical & isItems){
tag_t type = NULLTAG;
tag_t item_type = NULLTAG;
ITKCALL2(TCTYPE_ask_object_type(objtag,&type));
ITKCALL2(TCTYPE_find_type("ItemRevision","",&item_type));
if(item_type != NULLTAG){
logical isok = FALSE;
ITKCALL2(TCTYPE_is_type_of(type,item_type,&isok));
if(isok){
isItems = TRUE;
}else{
isItems = FALSE;
}
}
return 0;
}
/**
* mappingjson
* paramMap mapping
* jsonString json
*/
int stringToJson(map<string,string> paramMap,string &jsonString)
{
std::map<string, string>::iterator iter;
jsonString.assign("{");
int tempIndex = 0;
int mapCount = paramMap.size();
for (iter=paramMap.begin(); iter!=paramMap.end(); iter++)
{
jsonString.append("\"");
jsonString.append(iter->first);
jsonString.append("\":\"");
jsonString.append(iter->second);
jsonString.append("\"");
if(tempIndex != (mapCount-1)){
jsonString.append(",");
}
tempIndex ++ ;
}
jsonString.append("}");
return 0;
}
/**
*
* paramMap
* paraName signinfos
* json json
* jsonString
*/
int stringToJsonPlus(map<string,string> paramMap, string paraName,string json ,string &jsonString)
{
std::map<string, string>::iterator iter;
jsonString.assign("{");
for (iter=paramMap.begin(); iter!=paramMap.end(); iter++)
{
jsonString.append("\"");
jsonString.append(iter->first);
jsonString.append("\":\"");
jsonString.append(iter->second);
jsonString.append("\",");
}
jsonString.append("\"");
jsonString.append(paraName);
jsonString.append("\":");
jsonString.append(json);
jsonString.append("}");
return 0;
}
/**
*
* paramMap
* signInfoMap
* signJson json
*/
//void getSignoffInfoJson(map<string,string> paramMap ,map<string,string> signInfoMap,string &signJson)
//{
// string signInfo ;
// stringToJson(signInfoMap,signInfo);
// stringToJsonPlus(paramMap,"signinfos",signInfo,signJson);
//}
/**
* map
* revisionRevTag
* signInfoMap map
*/
void getSignoffInfoJson(tag_t revisionRevTag,map<string,string> &signInfoMap,char * processid,char *sign_relation,char *sign_info_option){
tag_t * signoffFormTags = NULL;
tag_t signFormTag = NULLTAG;
int signoffFormCount = 0;
char* tempValue = NULL;
ITKCALL2(AOM_ask_value_tags(revisionRevTag, sign_relation,&signoffFormCount,&signoffFormTags));
WriteLog("签名表单个数:%d\n",signoffFormCount);
if(signoffFormCount > 0){
signFormTag = signoffFormTags[0];
}
DOFREE(signoffFormTags);
if(signFormTag == NULLTAG){
WriteLog("没有获取到签名表单\n");
return;
}
vector<string> signoffVec ;
getPrefStrings(sign_info_option,signoffVec);
WriteLog("首选项[%s]=[%d]\n", sign_info_option,signoffVec.size());
for(int i = 0 ; i < signoffVec.size() ; i++){
vector<string> secondVec ;
Split(signoffVec[i],":",secondVec);
string signinfoValue ;
if(secondVec.size() !=2){
secondVec.clear();
continue;
}
if(strcmp(secondVec[0].c_str(),processid) != 0){
secondVec.clear();
continue;
}
signinfoValue.assign(secondVec[1]);
secondVec.clear();
Split( signinfoValue,";",secondVec);
for(int j = 0;j <secondVec.size();j++){
vector<string> thirdVec ;
Split( secondVec[j],"=",thirdVec);
if(thirdVec.size() == 2){
PROP_value_type_t propertyValueType;
char * propertyType = NULL;
ITKCALL2(AOM_ask_value_type(signFormTag,thirdVec[0].c_str(),&propertyValueType,&propertyType));
WriteLog("属性:%s\n", thirdVec[0].c_str());
if(propertyValueType == 8){
char valueTemp[128] = "\0";
ITKCALL2(AOM_ask_value_string(signFormTag,thirdVec[0].c_str(),&tempValue));
WriteLog("属性:%s, 内容:%s\n", thirdVec[0].c_str(), tempValue);
if (strcmp(ISNULL(tempValue), "") != 0) {
//char* tempValueGBK = tempValue;
// char* thirdVecGBK = thirdVec[1].c_str();
//sprintf(valueTemp, "%s%s%s", picpath, tempValueGBK, picext);
signInfoMap.insert(pair<string, string>(thirdVec[1], tempValue));
DOFREE(tempValue);
// DOFREE(tempValueGBK);
// DOFREE(thirdVecGBK);
}
}else if(propertyValueType == 2){
date_t date;
AOM_ask_value_date(signFormTag,thirdVec[0].c_str(),&date);
if(date.year > 1000){
// char* thirdVecGBK = thirdVec[1].c_str());
ITKCALL2(DATE_date_to_string(date,"%Y/%m/%d",&tempValue));
signInfoMap.insert(pair<string,string>(thirdVec[1],tempValue));
DOFREE(tempValue);
// DOFREE(thirdVecGBK);
}
}
DOFREE(propertyType);
}
thirdVec.clear();
}
secondVec.clear();
break;
}
}
/**
* Connor_signoff_dataset
* handler
* -issignpdf=true
* -tcdepartmentid=sx IDPDF
* -relation=IMAN_specification,IMAN_reference PDF
* -datasettype=MSExcel,MSExcelX,MSWord,MSWordX,PDF PDF
* -sign_relation=S8SignOffR
* -sign_info_option=Supor_signoff_dataset
* -serverhost=172.24.14.164 IP
* -tcpdfrelation=IMAN_specification PDF
* -processid=D
* -dwgtype=S8AutoCAD Dwg
* -tcstatus PDF
*/
int Connor_signoff_dataset(EPM_action_message_t msg)
{
int ifail = ITK_ok;
char *log_file=NULL;
CreateLogFile("Connor_signoff_dataset", &log_file);
WriteLog("*************************************************************\n");
WriteLog("* Connor_signoff_dataset is strat ! *\n");
WriteLog("*************************************************************\n");
starTime();
//===============业务====================
string signJson ;
string signInfo;
int arg_cnt = 0 ,
i = 0,
j =0,
k = 0,
n = 0,
attachesCount = 0;
char *arg = NULL,
*argflag =NULL,
*argvalue=NULL,
typeClass[TCTYPE_class_name_size_c+1]="\0";
char issignpdf[16]="true",
sign_relation[56]="\0",
sign_info_option[56]="\0",
tcdepartmentid[56]="\0",
tccomponentuid[56] ="\0",
tcdatasetuid[56]="\0",
tccomponentrelation[56]="\0" ,
pdfuid[56] = "\0",
tcpdfrelation[56]="\0",
serverhost[56]="\0",
processid[56] = "\0",
dwgtype[56] = "\0",
userid[56]="\0",
objectType[56]="\0",
tcstatus[56]="\0",
taskpuid[56] = "\0",
istranslatepdf[56] = "\0";
vector<string> relationVec;
vector<string> datasetTypeVec, dbPrefs;
tag_t rootTask =NULLTAG,
*taskAttches =NULL,
attachTag=NULLTAG,
itemTag=NULLTAG,
relationTag = NULLTAG,
datasetTag = NULLTAG;
int grmSecondCount =0 ;
tag_t *grmSecondTags = NULL;
char * tempValue = NULL;
logical isneed = false;
EPM_decision_t decision = EPM_go;
arg_cnt = TC_number_of_arguments(msg.arguments);
if (arg_cnt > 0)
{
for (i=0;i<arg_cnt;i++)
{
arg = TC_next_argument(msg.arguments);
ITKCALL2( ITK_ask_argument_named_value((const char*)arg, &argflag, &argvalue));
if (stricmp(argflag, "issignpdf") == 0){
if(argvalue != NULL)
{
WriteLog("-issignpdf=%s",argvalue);
tc_strcpy(issignpdf,argvalue);
}
}
if(stricmp(argflag, "processid") == 0){
if(argvalue != NULL)
{
WriteLog("-processid=%s",argvalue);
tc_strcpy(processid,argvalue);
}
}
if (stricmp(argflag, "sign_relation") == 0) {
if (argvalue != NULL)
{
WriteLog("-sign_relation=%s", argvalue);
tc_strcpy(sign_relation, argvalue);
}
}
if (stricmp(argflag, "sign_info_option") == 0) {
if (argvalue != NULL)
{
WriteLog("-sign_info_option=%s", argvalue);
tc_strcpy(sign_info_option, argvalue);
}
}
if(stricmp(argflag, "serverhost") == 0){
if(argvalue != NULL)
{
WriteLog("-serverhost=%s",argvalue);
tc_strcpy(serverhost,argvalue);
}
}
if(stricmp(argflag, "relation") == 0){
if(argvalue != NULL)
{
WriteLog("-relation=%s",argvalue);
Split(argvalue,",",relationVec);
}
}
if(stricmp(argflag, "datasettype") == 0){
if(argvalue != NULL)
{
WriteLog("-datasettype=%s",argvalue);
Split(argvalue,",",datasetTypeVec);
}
}
if(stricmp(argflag, "dwgtype") == 0){
if(argvalue != NULL)
{
WriteLog("-dwgtype=%s",argvalue);
tc_strcpy(dwgtype,argvalue);
}
}
if(stricmp(argflag, "tcdepartmentid") == 0){
if(argvalue != NULL)
{
WriteLog("-tcdepartmentid=%s",argvalue);
tc_strcpy(tcdepartmentid,argvalue);
}
}
if(stricmp(argflag, "tcpdfrelation") == 0){
if(argvalue != NULL)
{
WriteLog("-tcpdfrelation=%s\n",argvalue);
tc_strcpy(tcpdfrelation,argvalue);
}
}
if (stricmp(argflag, "tcstatus") == 0) {
if (argvalue != NULL)
{
WriteLog("-tcstatus=%s\n", argvalue);
tc_strcpy(tcstatus, argvalue);
}
}
if (stricmp(argflag, "istranslatepdf") == 0) {
if (argvalue != NULL)
{
WriteLog("-istranslatepdf=%s\n", argvalue);
tc_strcpy(istranslatepdf, argvalue);
}
}
MEM_free(argflag);
MEM_free(argvalue);
}
}
//================遍历流程对象====================
ITKCALL2(EPM_ask_root_task( msg.task, &rootTask ));
ITK__convert_tag_to_uid(rootTask, &tempValue);
tc_strcpy(taskpuid, tempValue);
DOFREE(tempValue);
ITKCALL2(EPM_ask_attachments(rootTask, EPM_target_attachment, &attachesCount, &taskAttches));
WriteLog("流程目标个数:%d\n",attachesCount);
getPrefStrings(PREF_ML_DB, dbPrefs);
if (dbPrefs.size() != 4)
{
EMH_store_error_s2(EMH_severity_error,ITK_err, "数据库连接首选项配置错误", PREF_ML_DB);
}
if (open((char*)dbPrefs[0].c_str(), (char*)dbPrefs[1].c_str(), (char*)dbPrefs[2].c_str(), (char*)dbPrefs[3].c_str()))
{
WriteLog("数据库连接失败:用户名:%s密码%s数据库%sip%s", dbPrefs[0].c_str(), dbPrefs[1].c_str(), dbPrefs[2].c_str(), dbPrefs[3].c_str());
EMH_store_error_s1(EMH_severity_error,
ITK_err,
"数据库连接失败");
return 1;
}
/*if (SuporConnectionDB() == -1) {
WriteLog("数据库连接失败,请检查配置文件配置\n");
CloseLog();
EMH_store_error_s1(EMH_severity_error, EMH_AE_error_base, GbkToUtf8("数据库连接失败,请检查配置文件配置"));
return EPM_nogo;
}*/
POM_AM__set_application_bypass(true);
for( i=0; i<attachesCount; i++ )
{
WriteLog("最外循环==================%d\n", i);
attachTag = taskAttches[i];
logical isRev = false;
checkIsItemRevision(attachTag,isRev);
if(!isRev)
{
WriteLog("对象[%d]不是ItemRevision\n",taskAttches[i]);
continue;
}
map<string, string> inSignoffMap;
//遍历所有的关系
//版本对象转换uid
ITK__convert_tag_to_uid(attachTag, &tempValue);
tc_strcpy(tccomponentuid, tempValue);
DOFREE(tempValue);
getSignoffInfoJson(attachTag, inSignoffMap, processid,sign_relation,sign_info_option);
stringToJson(inSignoffMap, signInfo);
WriteLog("relationVec.size()==================%d\n", relationVec.size());
for(int j = 0;j<relationVec.size();j++)
{
WriteLog("中间循环==================%d\n", j);
ITKCALL2(GRM_find_relation_type( relationVec[j].c_str(), &relationTag ));
ITKCALL2(GRM_list_secondary_objects_only(attachTag, relationTag, &grmSecondCount, &grmSecondTags ));
WriteLog("对象[%d]不是ItemRevision\n", grmSecondCount);
for(int k=0;k <grmSecondCount;k++ ){
WriteLog("内部循环==================%d\n", k);
datasetTag = grmSecondTags[k];
ITKCALL2(AOM_ask_value_string(datasetTag,"object_type",&tempValue));
tc_strcpy(objectType, tempValue);
tc_strcpy(tccomponentrelation, relationVec[j].c_str());
if(std::find(datasetTypeVec.begin(),datasetTypeVec.end(),tempValue) == datasetTypeVec.end())
{
DOFREE(tempValue);
continue;
}
DOFREE(tempValue);
map<string, string> inMap;
//数据集转换uid
ITK__convert_tag_to_uid(datasetTag,&tempValue);
tc_strcpy(tcdatasetuid, tempValue);
tag_t owningUser = NULLTAG;
ITKCALL2(AOM_ask_value_tag(datasetTag, "owning_user", &owningUser));
ITKCALL2(AOM_ask_value_string(owningUser, "user_id", &tempValue));
tc_strcpy(userid, tempValue);
DOFREE(tempValue);
WriteLog("添加的对象:%s添加的数据集%s,添加的关系%s\n", tccomponentuid, tcdatasetuid, tccomponentrelation);
WriteLog("类型是%s\n", objectType);
//如果数据集是PDF先判断是否是转PDF系统生成的
if (strcmp("PDF", objectType) == 0) {
char selectRecord[1024] = "";
vector<string> results2;
/*int outputValueCount = 0, outputColumn = 0;
char*** outputValue = NULL;*/
sprintf(selectRecord, "select ITEMPUID from CONNOR_PDFMESSAGE where PDFPUID='%s'", tcdatasetuid);
if (selectData(selectRecord, results2) != -1) {
if (results2.size() > 0) {
WriteLog("是系统生成的,跳过:%s\n", tcdatasetuid);
continue;
}
}
}
char selectRecord[1024] = "";
vector<string> results;
vector<string> values;
sprintf(selectRecord, "select ITEMPUID,PDFPUID from CONNOR_PDFMESSAGE where ITEMPUID='%s' and DATASETPUID='%s'", tccomponentuid, tcdatasetuid);
WriteLog("查找的数据:%s\n", selectRecord);
if (selectData(selectRecord, results) != -1) {
WriteLog("查找的结果数量:%d\n", results.size());
if (results.size()>0) {
Split(results[0], ",", values);
char updateRecord[1024] = "";
char** params = (char**)MEM_alloc(4 * sizeof(char*));
params[0] = taskpuid;
params[1] = (char*)signInfo.c_str();
params[2] = tcstatus;
params[3] = "正在发送到服务";
sprintf(updateRecord, "update CONNOR_PDFMESSAGE set ITEMPUID = '%s',SIGNINFO = '%s',TCSTATUS= '%s',STAGE= '%s',CREATEDATE=GETDATE() where ITEMPUID='%s' and DATASETPUID = '%s'", taskpuid, signInfo.c_str(), "正在发送到服务" , tcstatus,tccomponentuid, tcdatasetuid);
WriteLog("更新数据:%s\n", updateRecord);
if (ExecuteSQLNoInputParam(updateRecord) == -1)
{
WriteLog("更新数据失败:%s", tcdatasetuid);
}
else
{
ExecuteSQLNoInputParam("commit");
WriteLog("更新数据成功");
}
if (values.size() == 1) {
//if (strcmp("", values[1].c_str()) == 0) {
tc_strcpy(pdfuid, "nopdf");
//}
}
else
{
char selectRecord2[1024] = "";
/*int outputValueCount2 = 0, outputColumn2 = 0;
char*** outputValue2 = NULL;*/
sprintf(selectRecord2, "select PUID from PPOM_APPLICATION_OBJECT where PUID='%s'", values[1].c_str());
WriteLog("查找的数据:%s\n", selectRecord2);
vector<string> values22;
if (selectData(selectRecord2, values22) != -1) {
if (values22.size() > 0) {
tc_strcpy(pdfuid, values[1].c_str());
}
else
{
WriteLog("数据库查询出的PDF%s 已不存在\n", values[1].c_str());
tc_strcpy(pdfuid, "nopdf");
}
}
else
{
WriteLog("数据库查询PDF%s 失败\n", values[1].c_str());
tc_strcpy(pdfuid, "nopdf");
}
}
}
else {
char insertRecord[1024] = "";
char** params = (char**)MEM_alloc(10 * sizeof(char*));
params[0] = tccomponentuid;
params[1] = tcdatasetuid;
params[2] = (char*)signInfo.c_str();
params[3] = serverhost;
params[4] = "正在发送到服务";
params[5] = userid;
params[6] = tcdepartmentid;
params[7] = taskpuid;
params[8] = tccomponentrelation;
params[9] = tcstatus;
sprintf(insertRecord, "insert into CONNOR_PDFMESSAGE(ITEMPUID,DATASETPUID,SIGNINFO,SERVERHOST,STAGE,OWNINGUSER,DEPARTMENTID,TASKPUID,TCRELATION,TCSTATUS,CREATEDATE) values('%s','%s','%s','%s','%s','%s','%s','%s','%s','%s',GETDATE())",
params[0] , params[1], params[2], params[3], params[4], params[5], params[6], params[7], params[8], params[9]);
WriteLog("插入数据:%s\n", insertRecord);
if (ExecuteSQLNoInputParam(insertRecord) == -1)
{
WriteLog("保存数据失败2%s", tcdatasetuid);
}
else
{
ExecuteSQLNoInputParam("commit");
WriteLog("保存数据成功");
}
tc_strcpy(pdfuid, "nopdf");
}
}
else {
WriteLog("查询失败");
tc_strcpy(pdfuid, "nopdf");
}
if (strcmp("PDF", objectType) == 0) {
tc_strcpy(pdfuid, tcdatasetuid);
}
inMap.insert(pair<string, string>("issignpdf", issignpdf));
inMap.insert(pair<string, string>("tccomponentuid", tccomponentuid));
inMap.insert(pair<string, string>("tcdatasetuid", tcdatasetuid));
inMap.insert(pair<string, string>("tccomponentrelation", tccomponentrelation));
inMap.insert(pair<string, string>("pdfuid", pdfuid));
inMap.insert(pair<string, string>("tcdepartmentid", tcdepartmentid));
inMap.insert(pair<string, string>("dwgtype", dwgtype));
inMap.insert(pair<string, string>("tcpdfrelation", tcpdfrelation));
inMap.insert(pair<string, string>("tcstatus", tcstatus));
inMap.insert(pair<string, string>("taskpuid", taskpuid));
inMap.insert(pair<string, string>("istranslatepdf", istranslatepdf));
stringToJsonPlus(inMap, "signinfos", signInfo, signJson);
WriteLog("发送的签字数据:%s\n", signJson.c_str());
callHttpserver(signJson, serverhost);
}
WriteLog(" release grmSecondTags \n");
DOFREE(grmSecondTags);
WriteLog(" release grmSecondTags over \n");
}
WriteLog(" go toend \n");
//goto end;
}
//end:
WriteLog(" bypass close() \n");
POM_AM__set_application_bypass(false);
//DisConnServer();
WriteLog(" sqlserver connection close() \n");
close();
WriteLog("*************************************************************\n");
WriteLog("* Connor_signoff_dataset is end ! *\n");
WriteLog("*************************************************************\n");
//CloseLog();
return ifail;
}

@ -0,0 +1,544 @@
#include "Supor_register.h"
using namespace std;
extern "C" int POM_AM__set_application_bypass(logical bypass);
/**
*
* Description:
* This handler will set signoff infomation to properties of rev
*
* Syntax:
*
*
* -SignUserName: ID
*
* -SignDate:
*
* -SignDateFormate: %Y-%m-%d
*
* -SignComment:
*
* -SignRelation:
*
*
*/
int Connor_signoff_form(EPM_action_message_t msg) {
int ifail = ITK_ok;
char* log_file = NULL;
CreateLogFile("Connor_signoff_form", &log_file);
WriteLog("*************************************************************\n");
WriteLog("* Connor_signoff_form is strat ! *\n");
WriteLog("*************************************************************\n");
starTime();
char* arg = NULL,
* argflag = NULL,
* argvalue = NULL,
* tempValue = NULL;
char* task_type = NULL;
char* userName = NULL;
char* person_name = NULL, * type_class = NULL, * user_id = NULL;
int arg_cnt = 0, attachments = 0, * attach_type, occur_of_counts = 0, form_count;
date_t decision_date;
char SignUserName[56] = "\0",
SignDate[1024] = "\0",
SignDateFormate[56] = "\0",
SignComment[56] = "\0",
SignRelation[56] = "\0",
comments[4096] = "\0";
char person_value[1024] = "\0";
char person_value2[1024] = "\0";
tag_t memberTag = NULLTAG;
SIGNOFF_TYPE_t memberType;
EPM_signoff_decision_t dec;
tag_t aUserTag = NULLTAG, responsibleParty = NULLTAG, cur_perform_task = NULLTAG, * attachmentTags = NULLTAG;
tag_t root_task = NULLTAG, * taskAttches = NULLTAG, master_form_rel_type = NULLTAG, * form_list = NULLTAG;
tag_t type_tag = NULLTAG, * user_tags = NULLTAG;
int user_cnt = 0;
char* timeinfo = NULL;
arg_cnt = TC_number_of_arguments(msg.arguments);
if (arg_cnt > 0)
{
for (int i = 0; i < arg_cnt; i++)
{
arg = TC_next_argument(msg.arguments);
ITKCALL2(ITK_ask_argument_named_value((const char*)arg, &argflag, &argvalue));
if (stricmp(argflag, "SignUserName") == 0) {
if (argvalue != NULL)
{
tc_strcpy(SignUserName, argvalue);
// WriteLog("-SignUserName=%s",Utf8ToGbk(SignUserName));
WriteLog("-SignUserName=%s", SignUserName);
}
}
if (stricmp(argflag, "SignDate") == 0) {
if (argvalue != NULL)
{
tc_strcpy(SignDate, argvalue);
WriteLog("-SignDate=%s", SignDate);
}
}
if (stricmp(argflag, "SignComment") == 0) {
if (argvalue != NULL)
{
tc_strcpy(SignComment, argvalue);
WriteLog("-SignComment=%s", SignComment);
}
}
if (stricmp(argflag, "SignRelation") == 0) {
if (argvalue != NULL)
{
tc_strcpy(SignRelation, argvalue);
WriteLog("-SignRelation=%s", SignRelation);
}
}
if (stricmp(argflag, "SignDateFormate") == 0) {
if (argvalue != NULL)
{
tc_strcpy(SignDateFormate, argvalue);
WriteLog("-SignDateFormate=%s", SignDateFormate);
}
}
MEM_free(argflag);
MEM_free(argvalue);
}
}
EPM_ask_root_task(msg.task, &root_task);
WSOM_ask_object_type2(msg.task, &task_type);
if (strcmp("EPMDoTask", task_type) == 0 || strcmp("EPMOrTask", task_type) == 0 || strcmp("EPMConditionTask", task_type) == 0) {
EPM_ask_responsible_party(msg.task, &responsibleParty);
POM_get_user(&userName, &aUserTag);
AOM_ask_value_string(aUserTag, "user_id", &user_id);
SA_ask_user_person_name2(aUserTag, &person_name);
tc_strcpy(person_value, person_name);
strcat(person_value, "#:#");
strcat(person_value, user_id);
AOM_ask_value_date(msg.task, "last_mod_date", &decision_date);
DATE_date_to_string(decision_date, SignDateFormate, &timeinfo);
}
else
{
EPM_ask_sub_task(msg.task, "perform-signoffs", &cur_perform_task);
EPM_ask_all_attachments(cur_perform_task, &attachments, &attachmentTags, &attach_type);
WriteLog("数量:%d\n", attachments);
if (attachments > 0) {
int start = 0;
for (int j = 0; j < attachments; j++) {
char* comment = NULL;
date_t decision_date_temp;
ITKCALL2(EPM_ask_signoff_decision(attachmentTags[j], &dec, &comment, &decision_date_temp));
ITKCALL2(EPM_ask_signoff_member(attachmentTags[j], &memberTag, &memberType));
if (memberType == SIGNOFF_GROUPMEMBER && dec == EPM_approve_decision) {
ITKCALL2(SA_ask_groupmember_user(memberTag, &aUserTag));
ITKCALL2(SA_ask_user_person_name2(aUserTag, &person_name));
ITKCALL2(AOM_ask_value_string(aUserTag, "user_id", &user_id));
if (start == 0) {
tc_strcpy(person_value, person_name);
strcat(person_value, "#:#");
strcat(person_value, user_id);
strcpy(comments, comment);
decision_date = decision_date_temp;
start = 1;
}
else {
strcat(person_value, ",");
strcat(person_value, person_name);
strcat(person_value, "#:#");
strcat(person_value, user_id);
strcat(comments, ",");
strcat(comments, comment);
char* timeinfo2 = NULL, * timeinfo3 = NULL;
ITKCALL2(DATE_date_to_string(decision_date, SignDateFormate, &timeinfo2));
ITKCALL2(DATE_date_to_string(decision_date_temp, SignDateFormate, &timeinfo3));
int year1, month1, day1;
int year2, month2, day2;
sscanf(timeinfo2, "%d-%d-%d", &year1, &month1, &day1);
sscanf(timeinfo3, "%d-%d-%d", &year2, &month2, &day2);
int tm1 = year1 * 10000 + month1 * 100 + day1;
int tm2 = year2 * 10000 + month2 * 100 + day2;
WriteLog("时间1:%d\n", tm1);
WriteLog("时间2:%d\n", tm2);
if (tm2 > tm1) {
decision_date = decision_date_temp;
}
}
}
}
}
}
EPM_ask_attachments(root_task, EPM_target_attachment, &occur_of_counts, &taskAttches);
GRM_find_relation_type(SignRelation, &master_form_rel_type);
POM_AM__set_application_bypass(true);
for (int count = 0; count < occur_of_counts; count++) {
char* object_string = NULL;
char* objectString = NULL;
int num = 0;
tag_t* release_tags = NULLTAG;
tag_t owning_user = NULLTAG;
//char* owner_name = NULL, * owner_id = NULL;
AOM_ask_value_string(taskAttches[count], "object_string", &object_string);
// objectString = Utf8ToGbk(object_string);
objectString = object_string;
TCTYPE_ask_object_type(taskAttches[count], &type_tag);
TCTYPE_ask_class_name2(type_tag, &type_class);
WriteLog("流程中对象%s的类型%s\n", objectString, type_class);
if (((strstr(type_class, "Revision") != NULL) || (strstr(type_class, "revision") != NULL))
&& (strstr(type_class, "Master") == NULL) && (strstr(type_class, "master") == NULL)
&& (strstr(type_class, "BOM") == NULL) && (strstr(type_class, "bom") == NULL) && (strstr(type_class, "Bom") == NULL))
{
ITKCALL2(AOM_ask_value_tags(taskAttches[count], "release_status_list", &num, &release_tags));
WriteLog("流程中对象%s的状态数量%d\n", objectString, num);
if (num > 0) {
WriteLog("流程中对象%s的状态数量大于0不再修改表单内容\n", objectString);
continue;
}
GRM_list_secondary_objects_only(taskAttches[count], master_form_rel_type, &form_count, &form_list);
WriteLog("流程中对象%s的签审表单数量%d\n", objectString, form_count);
if (form_count > 0) {
WriteLog("属性:%s, 内容:%s\n", ISNULL(SignUserName), person_value);
ITKCALL2(DATE_date_to_string(decision_date, SignDateFormate, &timeinfo));
if (strcmp(ISNULL(timeinfo), "") != 0) {
WriteLog("时间属性:%s, 内容:%s\n", ISNULL(SignDate), timeinfo);
AOM_lock(form_list[0]);
PROP_value_type_t propertyValueType;
char* propertyType = NULL;
ITKCALL2(AOM_ask_value_type(form_list[0], SignDate, &propertyValueType, &propertyType));
if (propertyValueType == PROP_date) {
ITKCALL2(AOM_set_value_date(form_list[0], SignDate, decision_date));
}
else
{
ITKCALL2(AOM_set_value_string(form_list[0], SignDate, timeinfo));
}
WriteLog("设置人员属性\n");
ITKCALL2(AOM_set_value_string(form_list[0], SignUserName, person_value));
if (strcmp("", SignComment) != 0 && strcmp("", comments) != 0) {
WriteLog("注释属性:%s, 内容:%s\n", ISNULL(SignComment), comments);
ITKCALL2(AOM_set_value_string(form_list[0], SignComment, comments));
}
WriteLog("设置属性完成\n");
AOM_save(form_list[0]);
AOM_unlock(form_list[0]);
WriteLog("保存,解锁\n");
}
else
{
WriteLog("获取时间内容失败\n");
}
}
}
DOFREE(release_tags);
DOFREE(object_string);
/*DOFREE(objectString);
DOFREE(owner_name);
DOFREE(owner_id);*/
}
printf("关旁路\n");
POM_AM__set_application_bypass(false);
//DOFREE(log_file);
DOFREE(task_type);
DOFREE(userName);
DOFREE(person_name);
DOFREE(type_class);
DOFREE(attachmentTags);
DOFREE(taskAttches);
DOFREE(form_list);
DOFREE(timeinfo);
WriteLog("*************************************************************\n");
WriteLog("* Connor_signoff_form is end ! *\n");
WriteLog("*************************************************************\n");
CloseLog();
return ifail;
}
//#include "Supor_register.h"
//using namespace std;
//extern "C" int POM_AM__set_application_bypass(logical bypass);
//
///**
//*
//* Description:
//* This handler will set signoff infomation to properties of rev
//*
//* Syntax:
//*
//*
//* -SignUserName: 填入用户ID的属性 必填
//*
//* -SignDate: 填入时间的属性 必填
//*
//* -SignDateFormate: %Y-%m-%d 时间格式 必填
//*
//* -SignComment: 填入注释的属性 非必填
//*
//* -SignRelation: 审签表和版本的关系 必填
//*
//*
//*/
//int Connor_signoff_form(EPM_action_message_t msg) {
// int ifail = ITK_ok;
// char* log_file = NULL;
//
// CreateLogFile("Connor_signoff_form", &log_file);
// WriteLog("*************************************************************\n");
// WriteLog("* Connor_signoff_form is strat ! *\n");
// WriteLog("*************************************************************\n");
// starTime();
// char* arg = NULL,
// * argflag = NULL,
// * argvalue = NULL,
// * tempValue = NULL;
//
// char* task_type = NULL;
// char* userName=NULL;
// char* person_name = NULL, * type_class = NULL,*user_id=NULL;
// int arg_cnt = 0, attachments=0,*attach_type, occur_of_counts=0,form_count;
// date_t decision_date;
// char SignUserName[56] = "\0",
// SignDate[1024] = "\0",
// SignDateFormate[56] = "\0",
// SignComment[56]="\0",
// SignRelation[56]="\0",
// comments[4096]="\0";
// char person_value[1024] = "\0";
// char person_value2[1024] = "\0";
// tag_t memberTag = NULLTAG;
// SIGNOFF_TYPE_t memberType;
// EPM_signoff_decision_t dec;
// tag_t aUserTag = NULLTAG, responsibleParty=NULLTAG, cur_perform_task=NULLTAG, *attachmentTags=NULLTAG;
// tag_t root_task = NULLTAG, *taskAttches=NULLTAG, master_form_rel_type=NULLTAG; //,* form_list=NULLTAG
// tag_t type_tag = NULLTAG,*user_tags=NULLTAG;
// int user_cnt=0;
// char* timeinfo = NULL;
// arg_cnt = TC_number_of_arguments(msg.arguments);
// if (arg_cnt > 0)
// {
// for (int i = 0;i < arg_cnt;i++)
// {
// arg = TC_next_argument(msg.arguments);
// ITKCALL2(ITK_ask_argument_named_value((const char*)arg, &argflag, &argvalue));
// if (stricmp(argflag, "SignUserName") == 0) {
// if (argvalue != NULL)
// {
// tc_strcpy(SignUserName, argvalue);
// // WriteLog("-SignUserName=%s",Utf8ToGbk(SignUserName));
// WriteLog("-SignUserName=%s",SignUserName);
// }
// }
// if (stricmp(argflag, "SignDate") == 0) {
// if (argvalue != NULL)
// {
// tc_strcpy(SignDate, argvalue);
// WriteLog("-SignDate=%s", SignDate);
// }
// }
// if (stricmp(argflag, "SignComment") == 0) {
// if (argvalue != NULL)
// {
// tc_strcpy(SignComment, argvalue);
// WriteLog("-SignComment=%s", SignComment);
// }
// }
// if (stricmp(argflag, "SignRelation") == 0) {
// if (argvalue != NULL)
// {
// tc_strcpy(SignRelation, argvalue);
// WriteLog("-SignRelation=%s", SignRelation);
// }
// }
// if (stricmp(argflag, "SignDateFormate") == 0) {
// if (argvalue != NULL)
// {
// tc_strcpy(SignDateFormate, argvalue);
// WriteLog("-SignDateFormate=%s", SignDateFormate);
// }
// }
// MEM_free(argflag);
// MEM_free(argvalue);
// }
// }
// EPM_ask_root_task(msg.task, &root_task);
// WSOM_ask_object_type2(msg.task, &task_type);
// if (strcmp("EPMDoTask", task_type) == 0 || strcmp("EPMOrTask", task_type) == 0|| strcmp("EPMConditionTask", task_type) == 0) {
// EPM_ask_responsible_party(msg.task, &responsibleParty);
// POM_get_user(&userName, &aUserTag);
// AOM_ask_value_string(aUserTag, "user_id", &user_id);
// SA_ask_user_person_name2(aUserTag, &person_name);
// tc_strcpy(person_value, person_name);
// strcat(person_value, "#:#");
// strcat(person_value, user_id);
// AOM_ask_value_date(msg.task, "last_mod_date", &decision_date);
// DATE_date_to_string(decision_date, SignDateFormate, &timeinfo);
// }
// else
// {
// EPM_ask_sub_task(msg.task, "perform-signoffs", &cur_perform_task);
// EPM_ask_all_attachments(cur_perform_task, &attachments, &attachmentTags, &attach_type);
// WriteLog("数量:%d\n", attachments);
// if (attachments > 0) {
// int start = 0;
// for (int j = 0;j < attachments;j++) {
// char* comment = NULL;
// date_t decision_date_temp;
// ITKCALL2(EPM_ask_signoff_decision(attachmentTags[j], &dec, &comment, &decision_date_temp));
// ITKCALL2(EPM_ask_signoff_member(attachmentTags[j], &memberTag, &memberType));
// if (memberType == SIGNOFF_GROUPMEMBER && dec == EPM_approve_decision) {
// ITKCALL2(SA_ask_groupmember_user(memberTag, &aUserTag));
// ITKCALL2(SA_ask_user_person_name2(aUserTag, &person_name));
// ITKCALL2(AOM_ask_value_string(aUserTag, "user_id", &user_id));
// if (start == 0) {
// tc_strcpy(person_value, person_name);
// strcat(person_value, "#:#");
// strcat(person_value, user_id);
// strcpy(comments, comment);
// decision_date = decision_date_temp;
// start = 1;
// }
// else {
// strcat(person_value, ",");
// strcat(person_value, person_name);
// strcat(person_value, "#:#");
// strcat(person_value, user_id);
//
// strcat(comments, ",");
// strcat(comments, comment);
// char* timeinfo2 = NULL, * timeinfo3 = NULL;
// ITKCALL2(DATE_date_to_string(decision_date, SignDateFormate, &timeinfo2));
// ITKCALL2(DATE_date_to_string(decision_date_temp, SignDateFormate, &timeinfo3));
// int year1, month1, day1;
//
// int year2, month2, day2;
//
// sscanf(timeinfo2, "%d-%d-%d", &year1, &month1, &day1);
//
// sscanf(timeinfo3, "%d-%d-%d", &year2, &month2, &day2);
//
// int tm1 = year1 * 10000 + month1 * 100 + day1;
//
// int tm2 = year2 * 10000 + month2 * 100 + day2;
// WriteLog("时间1:%d\n", tm1);
// WriteLog("时间2:%d\n", tm2);
// if (tm2 > tm1) {
// decision_date = decision_date_temp;
// }
// }
// }
// /*
// if (j == 0) {
// strcpy(comments, comment);
// decision_date = decision_date_temp;
// }
// else
// {
// strcat(comments, ",");
// strcat(comments, comment);
// char* timeinfo2 = NULL, * timeinfo3 = NULL;
// ITKCALL2(DATE_date_to_string(decision_date, SignDateFormate, &timeinfo2));
// ITKCALL2(DATE_date_to_string(decision_date_temp, SignDateFormate, &timeinfo3));
// int year1, month1, day1;
//
// int year2, month2, day2;
//
// sscanf(timeinfo2, "%d-%d-%d", &year1, &month1, &day1);
//
// sscanf(timeinfo3, "%d-%d-%d", &year2, &month2, &day2);
//
// int tm1 = year1 * 10000 + month1 * 100 + day1;
//
// int tm2 = year2 * 10000 + month2 * 100 + day2;
// WriteLog("时间1:%d\n", tm1);
// WriteLog("时间2:%d\n", tm2);
// if (tm2 > tm1) {
// decision_date = decision_date_temp;
// }
// }*/
// }
// }
// }
// EPM_ask_attachments(root_task, EPM_target_attachment, &occur_of_counts, &taskAttches);
// GRM_find_relation_type(SignRelation, &master_form_rel_type);
// POM_AM__set_application_bypass(true);
// for (int count = 0; count < occur_of_counts; count++) {
// char* object_string = NULL;
// char* objectString = NULL;
// int num = 0;
// tag_t* release_tags = NULLTAG;
// tag_t owning_user = NULLTAG;
// char* owner_name = NULL, * owner_id = NULL;
// AOM_ask_value_string(taskAttches[count], "object_string", &object_string);
// // objectString = Utf8ToGbk(object_string);
// objectString = object_string;
// TCTYPE_ask_object_type(taskAttches[count], &type_tag);
// TCTYPE_ask_class_name2(type_tag, &type_class);
// WriteLog("流程中对象%s的类型%s\n", objectString, type_class);
// if (((strstr(type_class, "Revision") != NULL) || (strstr(type_class, "revision") != NULL))
// && (strstr(type_class, "Master") == NULL) && (strstr(type_class, "master") == NULL)
// && (strstr(type_class, "BOM") == NULL) && (strstr(type_class, "bom") == NULL) && (strstr(type_class, "Bom") == NULL))
// {
// ITKCALL2(AOM_ask_value_tags(taskAttches[count], "release_status_list", &num, &release_tags));
// WriteLog("流程中对象%s的状态数量%d\n", objectString, num);
// if (num > 0) {
// WriteLog("流程中对象%s的状态数量大于0不再修改表单内容\n", objectString);
// continue;
// }
// /*GRM_list_secondary_objects_only(taskAttches[count], master_form_rel_type, &form_count, &form_list);
// WriteLog("流程中对象%s的签审表单数量%d\n", objectString, form_count);
// if (form_count > 0) {}*/
// WriteLog("属性:%s, 内容:%s\n", ISNULL(SignUserName), person_value);
// ITKCALL2(DATE_date_to_string(decision_date, SignDateFormate, &timeinfo));
// if (strcmp(ISNULL(timeinfo), "") != 0) {
// WriteLog("时间属性:%s, 内容:%s\n", ISNULL(SignDate), timeinfo);
// AOM_lock(taskAttches[count]);
// PROP_value_type_t propertyValueType;
// char* propertyType = NULL;
// ITKCALL2(AOM_ask_value_type(taskAttches[count], SignDate, &propertyValueType, &propertyType));
// if (propertyValueType == 2) {
// ITKCALL2(AOM_set_value_date(taskAttches[count], SignDate, decision_date));
// }
// else
// {
// ITKCALL2(AOM_set_value_string(taskAttches[count], SignDate, timeinfo));
// }
// ITKCALL2(AOM_set_value_string(taskAttches[count], SignUserName, person_value));
// if (strcmp("", SignComment) != 0 && strcmp("", comments) != 0) {
// WriteLog("注释属性:%s, 内容:%s\n", ISNULL(SignComment), comments);
// ITKCALL2(AOM_set_value_string(taskAttches[count], SignComment, comments));
// }
// AOM_save(taskAttches[count]);
// AOM_unlock(taskAttches[count]);
// }
// else
// {
// WriteLog("获取时间内容失败\n");
// }
//
// }
// DOFREE(release_tags);
// DOFREE(object_string);
// DOFREE(objectString);
// DOFREE(owner_name);
// DOFREE(owner_id);
// }
// POM_AM__set_application_bypass(false);
// DOFREE(log_file);
// DOFREE(task_type);
// DOFREE(userName);
// DOFREE(person_name);
// DOFREE(type_class);
// DOFREE(attachmentTags);
// DOFREE(taskAttches);
// DOFREE(timeinfo);
// WriteLog("*************************************************************\n");
// WriteLog("* Connor_signoff_form is end ! *\n");
// WriteLog("*************************************************************\n");
// CloseLog();
// return ifail;
//}

@ -0,0 +1,30 @@
========================================================================
控制台应用程序XNY_itk 项目概述
========================================================================
应用程序向导已为您创建了此 XNY_itk 应用程序。
本文件概要介绍组成 XNY_itk 应用程序的每个文件的内容。
XNY_itk.vcxproj
这是使用应用程序向导生成的 VC++ 项目的主项目文件,其中包含生成该文件的 Visual C++ 的版本信息,以及有关使用应用程序向导选择的平台、配置和项目功能的信息。
XNY_itk.vcxproj.filters
这是使用“应用程序向导”生成的 VC++ 项目筛选器文件。它包含有关项目文件与筛选器之间的关联信息。在 IDE 中,通过这种关联,在特定节点下以分组形式显示具有相似扩展名的文件。例如,“.cpp”文件与“源文件”筛选器关联。
XNY_itk.cpp
这是主应用程序源文件。
/////////////////////////////////////////////////////////////////////////////
其他标准文件:
StdAfx.h, StdAfx.cpp
这些文件用于生成名为 XNY_itk.pch 的预编译头 (PCH) 文件和名为 StdAfx.obj 的预编译类型文件。
/////////////////////////////////////////////////////////////////////////////
其他注释:
应用程序向导使用“TODO:”注释来指示应添加或自定义的源代码部分。
/////////////////////////////////////////////////////////////////////////////

@ -0,0 +1,11 @@
// XNY_itk.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
int main()
{
return 0;
}

@ -0,0 +1,196 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{8240A4EB-EBA7-448B-B846-2FEC53074C73}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<RootNamespace>SignOff_itk</RootNamespace>
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
<ProjectName>SignOff_itk</ProjectName>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="Shared">
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<LinkIncremental>true</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<LinkIncremental>true</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<LinkIncremental>false</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<LinkIncremental>false</LinkIncremental>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<PrecompiledHeader>Use</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>MaxSpeed</Optimization>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;IPLIB=none;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck>
<AdditionalIncludeDirectories>C:\app\admin\product\12.1.0\dbhome_1\OCI\include;D:\TC12.4\include_cpp;D:\TC12.4\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalLibraryDirectories>C:\JKTC11\Siemens\Teamcenter\OTW11\OCI\lib\MSVC;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>D:\TC12.4\lib\*.lib;%(AdditionalDependencies)</AdditionalDependencies>
<IgnoreSpecificDefaultLibraries>libuser_exits.ar.lib</IgnoreSpecificDefaultLibraries>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<PrecompiledHeader>Use</PrecompiledHeader>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<PrecompiledHeader>
</PrecompiledHeader>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;IPLIB=none;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>
</SDLCheck>
<AdditionalIncludeDirectories>D:\WorkEnvironment\tc13ITK\include_cpp;D:\WorkEnvironment\tc13ITK\include;D:\WorkEnvironment\tc11ITK\curl-7.84.0\curl-7.84.0\builds\libcurl-vc15-x64-release-dll-ipv6-sspi-schannel\include;D:\dflittk\oci\include;D:\hf include\include;D:\hf include\include_cpp;D:\project\TC12.4\Excel_New\lib\native\include_cpp;D:\instantclient_19_12\sdk\include;D:\project\TC12.4\include;D:\project\TC12.4\include_cpp;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<BufferSecurityCheck>false</BufferSecurityCheck>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>D:\curl-7.84.0\curl-7.84.0\builds\libcurl-vc15-x64-release-dll-ipv6-sspi-schannel\lib\*.lib;D:\hf include\lib\*.lib;D:\project\TC12.4\lib\*.lib;D:\instantclient_19_12\sdk\lib\msvc\*.lib;D:\project\TC12.4\Excel_New\lib\native\lib\*.lib;D:\WorkEnvironment\tc13ITK\lib\*.lib;*.lib;D:\WorkEnvironment\tc13ITK\*.lib;%(AdditionalDependencies)</AdditionalDependencies>
<IgnoreSpecificDefaultLibraries>libuser_exits.ar.lib</IgnoreSpecificDefaultLibraries>
<OutputFile>$(OutDir)SignOff_itk.dll</OutputFile>
<UACExecutionLevel>RequireAdministrator</UACExecutionLevel>
<UACUIAccess>true</UACUIAccess>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<Text Include="ReadMe.txt" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="ado.h" />
<ClInclude Include="common_itk_util.h" />
<ClInclude Include="connor_util.h" />
<ClInclude Include="CRUL_server_call_httpserver.h" />
<ClInclude Include="epm_register_handler.h" />
<ClInclude Include="error_handling.h" />
<ClInclude Include="ocilib.h" />
<ClInclude Include="Supor_register.h" />
<ClInclude Include="string_helper.h" />
<ClInclude Include="string_utils.h" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="addLb.cpp" />
<ClCompile Include="ado.cxx" />
<ClCompile Include="common_itk_util.cxx" />
<ClCompile Include="Connor_ChangeTask_AssignUser.cpp" />
<ClCompile Include="Connor_ChangeTask_CheckValue.cpp" />
<ClCompile Include="Connor_ChangeTask_SetComments.cpp" />
<ClCompile Include="Connor_ChangeTask_SetValue.cpp" />
<ClCompile Include="connor_util.cpp" />
<ClCompile Include="CRUL_server_call_httpserver.cpp" />
<ClCompile Include="epm_register_handler.cpp" />
<ClCompile Include="lib_custom_main.cpp" />
<ClCompile Include="ocilib.cxx" />
<ClCompile Include="string_helper.cpp" />
<ClCompile Include="string_utils.cxx" />
<ClCompile Include="Connor_signoff_dataset.cpp" />
<ClCompile Include="Connor_signoff_form.cpp" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>

@ -0,0 +1,108 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="源文件">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
<Filter Include="头文件">
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
<Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
</Filter>
<Filter Include="资源文件">
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
</Filter>
<Filter Include="common">
<UniqueIdentifier>{2799e3e0-5454-43a6-a04a-5627cde49936}</UniqueIdentifier>
</Filter>
<Filter Include="epm_handler">
<UniqueIdentifier>{88c2de69-1cc0-4edb-a6ba-b56cb3ec6551}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
<Text Include="ReadMe.txt" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="epm_register_handler.h">
<Filter>epm_handler</Filter>
</ClInclude>
<ClInclude Include="error_handling.h">
<Filter>common</Filter>
</ClInclude>
<ClInclude Include="common_itk_util.h">
<Filter>common</Filter>
</ClInclude>
<ClInclude Include="connor_util.h">
<Filter>common</Filter>
</ClInclude>
<ClInclude Include="ocilib.h">
<Filter>common</Filter>
</ClInclude>
<ClInclude Include="string_helper.h">
<Filter>common</Filter>
</ClInclude>
<ClInclude Include="string_utils.h">
<Filter>common</Filter>
</ClInclude>
<ClInclude Include="Supor_register.h">
<Filter>epm_handler</Filter>
</ClInclude>
<ClInclude Include="CRUL_server_call_httpserver.h">
<Filter>common</Filter>
</ClInclude>
<ClInclude Include="ado.h">
<Filter>epm_handler</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="lib_custom_main.cpp">
<Filter>common</Filter>
</ClCompile>
<ClCompile Include="epm_register_handler.cpp">
<Filter>epm_handler</Filter>
</ClCompile>
<ClCompile Include="common_itk_util.cxx">
<Filter>common</Filter>
</ClCompile>
<ClCompile Include="connor_util.cpp">
<Filter>common</Filter>
</ClCompile>
<ClCompile Include="ocilib.cxx">
<Filter>common</Filter>
</ClCompile>
<ClCompile Include="string_helper.cpp">
<Filter>common</Filter>
</ClCompile>
<ClCompile Include="string_utils.cxx">
<Filter>common</Filter>
</ClCompile>
<ClCompile Include="CRUL_server_call_httpserver.cpp">
<Filter>epm_handler</Filter>
</ClCompile>
<ClCompile Include="Connor_signoff_dataset.cpp">
<Filter>epm_handler</Filter>
</ClCompile>
<ClCompile Include="Connor_signoff_form.cpp">
<Filter>epm_handler</Filter>
</ClCompile>
<ClCompile Include="ado.cxx">
<Filter>common</Filter>
</ClCompile>
<ClCompile Include="addLb.cpp">
<Filter>epm_handler</Filter>
</ClCompile>
<ClCompile Include="Connor_ChangeTask_SetValue.cpp">
<Filter>epm_handler</Filter>
</ClCompile>
<ClCompile Include="Connor_ChangeTask_AssignUser.cpp">
<Filter>epm_handler</Filter>
</ClCompile>
<ClCompile Include="Connor_ChangeTask_CheckValue.cpp">
<Filter>epm_handler</Filter>
</ClCompile>
<ClCompile Include="Connor_ChangeTask_SetComments.cpp">
<Filter>epm_handler</Filter>
</ClCompile>
</ItemGroup>
</Project>

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup />
</Project>

@ -0,0 +1,45 @@
#include <vector>
#include <map>
#include <string>
#include <string.h>
#include <epm/epm.h>
#include <tccore/item_errors.h>
#include <ics/ics_enquiry.h>
#include <ict/ict_userservice.h>
#include <tccore/item_errors.h>
#include <bom/bom_msg.h>
#include <tccore/tc_msg.h>
#include <ics/ics.h>
#include <property/prop_msg.h>
#include <bom/bom_msg.h>
#include <tccore/item_msg.h>
#include <tccore/project.h>
#include "ocilib.h"
#include "common_itk_util.h"
#include "string_utils.h"
#include "error_handling.h"
#include "connor_util.h"
#include "CRUL_server_call_httpserver.h"
#define ITKCALL2( argument ) \
{ \
int retcode = argument; \
if ( retcode != ITK_ok ) { \
char* s; \
WriteLog( " "#argument "\n" ); \
WriteLog( " returns [%d]\n", retcode ); \
EMH_ask_error_text (retcode, &s); \
WriteLog( " Teamcenter ERROR: [%s]\n", s); \
WriteLog( " in file [" __FILE__ "], line [%d]\n\n", __LINE__ ); \
if (s != 0) MEM_free (s); \
} \
}
int Connor_signoff_dataset(EPM_action_message_t msg);
int Connor_signoff_form(EPM_action_message_t msg);
int Connor_CreateItemPost(METHOD_message_t* msg, va_list args);
int Connor_ChangeTask_AssignUser(EPM_action_message_t msg);
int Connor_ChangeTask_SetComments(EPM_action_message_t msg);
int Connor_ChangeTask_SetValue(EPM_action_message_t msg);
int Connor_ChangeTask_CheckValue(EPM_action_message_t msg);

@ -0,0 +1,145 @@
#include "Supor_register.h"
#include "ado.h"
#include <tc\preferences.h>
int getPrefStrings(const char* preference, vector<string>& pref_vec)
{
int ifail = ITK_ok, i = 0, j = 0, k = 0, num = 0;
char** values;
ITKCALL2(ifail = PREF_ask_char_values(preference, &num, &values));
for (i = 0; i < num; i++)
{
pref_vec.push_back(values[i]);
}
DOFREE(values);
return ifail;
}
int Connor_CreateItemPost(METHOD_message_t* msg, va_list va)
{
char* desc = NULL;
char* type = NULL;
//tag_t new_item_tag = NULLTAG;
printf("----------------------------------------------------\n");
const char* temp = NULL;
//while ((temp = va_arg(va, const char*)) != NULL && strlen(temp) > 0) {
// printf("Number: %s\n", temp);
//}
//printf("--------------------------------\n");
const char* item_id = va_arg(va, const char*);
const char* item_name = va_arg(va, const char*);
const char* item_type = va_arg(va, const char*);
const char* rev_id = va_arg(va, const char*);
printf("item_id=========%s\n", item_id);
printf("item_name=========%s\n", item_name);
printf("item_type=========%s\n", item_type);
printf("rev_id=========%s\n", rev_id);
tag_t* new_item_tag = va_arg(va, tag_t*);//创建后的对象
//获取首选项
int type_num = 0;
char** type_vals = NULL;
PREF_ask_char_values("Connor_ECRECNForm_Datbase_Config", &type_num, &type_vals);
string types;
for (int r = 0; r < type_num; r++) {
vector<string> vec;
Split(type_vals[r], "|", vec);
types.append(vec[0]);
}
printf("types======%s\n", types.c_str());
//获取版本
tag_t new_rev = NULLTAG;
ITKCALL(ITEM_ask_latest_rev(*new_item_tag,&new_rev));
if (new_item_tag && types.find(item_type) != std::string::npos && new_rev)
{
char* lov = NULL;
ITKCALL(AOM_UIF_ask_value(new_rev, "ly6_template", &lov));
printf("%s=================lov",lov);
//ITKCALL(AOM_ask_value_string(*new_item_tag, "object_type", &type));
//printf("object_type=========%s\n", type);
//if (strcmp(type,"LY6_BasicMat") == 0) {
//连接数据库
vector<string> dbPrefs;
getPrefStrings("LD_dbinfo", dbPrefs);
if (dbPrefs.size() != 4)
{
EMH_store_error_s2(EMH_severity_error, 919012, "数据库连接首选项配置错误", "LD_dbinfo");
}
if (open((char*)dbPrefs[0].c_str(), (char*)dbPrefs[1].c_str(), (char*)dbPrefs[2].c_str(), (char*)dbPrefs[3].c_str()))
{
printf("数据库连接失败:用户名:%s密码%s数据库%sip%s", dbPrefs[0].c_str(), dbPrefs[1].c_str(), dbPrefs[2].c_str(), dbPrefs[3].c_str());
EMH_store_error_s1(EMH_severity_error,
919012,
"数据库连接失败");
return 1;
}
printf("数据库连接成功\n");
//因为后操走两次 先查一下数据库中是否有相同id的数据
char selectById[1024] = "";
vector<string> result;
sprintf(selectById, "select ID from LY_CHANGETASSKFORM_DETAILS where ID='%s'", item_id);
if (selectData(selectById, result) != -1) {
if (result.size() > 0) {
printf("%s已经生成\n", item_id);
return 0;
}
else {
printf("%s未生成\n", item_id);
}
}
printf("selectById====%s\n", selectById);
char selectRecord[1024] = "";
vector<string> fields;
vector<string> results;
sprintf(selectRecord, "select * from LY_CHANGETASSKFORM_TEMPLATE where OBJECTTYPE='%s' and FIELDWHEN='%s' ORDER BY XH ASC", item_type,lov);
//printf("查找的数据:%s\n", selectRecord);
if (selectData2(selectRecord, results,fields) != -1) {
printf("查找的结果数量:%d\n", results.size());
// 获取 vector 的大小
size_t row = fields.size();
// 使用传统的 for 循环遍历 vector
for (size_t i = 0; i < row; ++i) {
string sql = "insert into LY_CHANGETASSKFORM_DETAILS(";
string field = fields[i];
string result = results[i];
// 使用 resize 方法去掉最后一个,
/* if (!field.empty() && !result.empty()) {
field.resize(field.length() - 1);
result.resize(result.length() - 1);
}*/
//printf("field============%s\n", field.c_str());
//printf("result======================%s\n",result.c_str());
sql.append(field);
sql.append("ID) values(");
sql.append(result);
//id
sql.append("'");
sql.append(item_id);
sql.append("')");
printf("sql============%s\n", sql.c_str());
if (ExecuteSQLNoInputParam((char*)sql.c_str()) == -1)
{
printf("保存数据失败2%s", sql.c_str());
}
else
{
ExecuteSQLNoInputParam("commit");
printf("保存数据成功");
}
}
}
}
return 0;
}

@ -0,0 +1,521 @@
#include "ado.h"
_ConnectionPtr m_pConnection;
_RecordsetPtr m_pRecordset;
HRESULT hr;
using namespace std;
void PrintVariantType(VARTYPE vt,string name) {
switch (vt) {
case VT_EMPTY: std::cout<< name<<"=======" << "VT_EMPTY"; break;
case VT_NULL: std::cout << name << "=======" << "VT_NULL"; break;
case VT_I2: std::cout << name << "=======" << "VT_I2 (Short)"; break;
case VT_I4: std::cout << name << "=======" << "VT_I4 (Long)"; break;
case VT_R4: std::cout << name << "=======" << "VT_R4 (Float)"; break;
case VT_R8: std::cout << name << "=======" << "VT_R8 (Double)"; break;
case VT_BOOL: std::cout << name << "=======" << "VT_BOOL"; break;
case VT_DATE: std::cout << name << "=======" << "VT_DATE"; break;
case VT_BSTR: std::cout << name << "=======" << "VT_BSTR (String)"; break;
case VT_DISPATCH: std::cout << name << "=======" << "VT_DISPATCH"; break;
case VT_ERROR: std::cout << name << "=======" << "VT_ERROR"; break;
case VT_VARIANT: std::cout << name << "=======" << "VT_VARIANT"; break;
case VT_UNKNOWN: std::cout << name << "=======" << "VT_UNKNOWN"; break;
case VT_DECIMAL: std::cout << name << "=======" << "VT_DECIMAL"; break;
case VT_I1: std::cout << name << "=======" << "VT_I1 (Char)"; break;
case VT_UI1: std::cout << name << "=======" << "VT_UI1 (Byte)"; break;
case VT_UI2: std::cout << name << "=======" << "VT_UI2 (Unsigned Short)"; break;
case VT_UI4: std::cout << name << "=======" << "VT_UI4 (Unsigned Long)"; break;
case VT_I8: std::cout << name << "=======" << "VT_I8 (Long Long)"; break;
case VT_UI8: std::cout << name << "=======" << "VT_UI8 (Unsigned Long Long)"; break;
case VT_INT: std::cout << name << "=======" << "VT_INT (Int)"; break;
case VT_UINT: std::cout << name << "=======" << "VT_UINT (Unsigned Int)"; break;
case VT_VOID: std::cout << name << "=======" << "VT_VOID"; break;
case VT_HRESULT: std::cout << name << "=======" << "VT_HRESULT"; break;
case VT_PTR: std::cout << name << "=======" << "VT_PTR"; break;
case VT_SAFEARRAY: std::cout << name << "=======" << "VT_SAFEARRAY"; break;
case VT_CARRAY: std::cout << name << "=======" << "VT_CARRAY"; break;
case VT_USERDEFINED: std::cout << name << "=======" << "VT_USERDEFINED"; break;
case VT_LPSTR: std::cout << name << "=======" << "VT_LPSTR (String)"; break;
case VT_LPWSTR: std::cout << name << "=======" << "VT_LPWSTR (Wide String)"; break;
case VT_RECORD: std::cout << name << "=======" << "VT_RECORD"; break;
case VT_INT_PTR: std::cout << name << "=======" << "VT_INT_PTR"; break;
case VT_UINT_PTR: std::cout << name << "=======" << "VT_UINT_PTR"; break;
case VT_FILETIME: std::cout << name << "=======" << "VT_FILETIME"; break;
case VT_BLOB: std::cout << name << "=======" << "VT_BLOB"; break;
case VT_STREAM: std::cout << name << "=======" << "VT_STREAM"; break;
case VT_STORAGE: std::cout << name << "=======" << "VT_STORAGE"; break;
case VT_STREAMED_OBJECT: std::cout << name << "=======" << "VT_STREAMED_OBJECT"; break;
case VT_STORED_OBJECT: std::cout << name << "=======" << "VT_STORED_OBJECT"; break;
case VT_BLOB_OBJECT: std::cout << name << "=======" << "VT_BLOB_OBJECT"; break;
case VT_CF: std::cout << name << "=======" << "VT_CF"; break;
case VT_CLSID: std::cout << name << "=======" << "VT_CLSID"; break;
case VT_VERSIONED_STREAM: std::cout << name << "=======" << "VT_VERSIONED_STREAM"; break;
case VT_BSTR_BLOB: std::cout << name << "=======" << "VT_BSTR_BLOB"; break;
default: std::cout << name << "=======" << "Unknown type (" << vt << ")"; break;
}
}
int selectData2(const string& sql, vector<string>& results, vector<string>& fields)
{
int ret = -1;
string ss;
string aa;
try
{
//这里每次调用都创建实例比较慢
if (!FAILED(m_pRecordset.CreateInstance(__uuidof(Recordset))))
{
ret = 0;
m_pRecordset->Open((_bstr_t)sql.c_str(), _variant_t((IDispatch*)m_pConnection, true),
adOpenKeyset, adLockOptimistic, adCmdText);
long line = 0;
while (NULL != m_pRecordset && !m_pRecordset->adoEOF && adStateClosed != m_pRecordset->State)
{
long count = m_pRecordset->Fields->Count;
++line;
ss = "";
aa = "";
printf("count%d\n", count);
for (long i = 0; i < count; ++i)
{
//按名称获取数据
//
//_variant_t Column("lastUpdDt");
//_variant_t RusultGet = m_pRecordset->Fields->GetItem(Column)->Value;
BSTR bstrColName = NULL;
m_pRecordset->Fields->Item[i]->get_Name(&bstrColName);
/*const char* name;
name = (const char*)bstrColName;
printf(" name=========================== %s \n ", name);*/
// 将BSTR转换为std::wstring
std::wstring wname(bstrColName);
// 将std::wstring转换为std::string
std::string name(wname.begin(), wname.end());
//printf(" name=========================== %s \n ", name.c_str());
if (name.length() > 0) {
aa.append(name);
aa.append(",");
}
//按列序号从0开始
if (bstrColName != NULL) {
_variant_t taskStyle = m_pRecordset->GetCollect(bstrColName);
/*if (taskStyle.bstrVal) {
}*/
//PrintVariantType(taskStyle.vt,name);
if (taskStyle.vt != VT_NULL && taskStyle.vt != VT_EMPTY)
{
const char* str;
if (taskStyle.vt == VT_DATE)
{
SYSTEMTIME systime;
VariantTimeToSystemTime(taskStyle.date, &systime);
char buffer[20];
sprintf(buffer, "%04d-%02d-%02d %02d:%02d:%02d",
systime.wYear, systime.wMonth, systime.wDay,
systime.wHour, systime.wMinute, systime.wSecond);
str = buffer;
}
else {
_bstr_t value = (_bstr_t)taskStyle;
str = (const char*)value;
}
if (str != NULL) {
//printf(" 查询的结果 %s \n", str);
if (strcmp(str, "00:00:00.0000000") == 0) {
ss.append("NULL");
ss.append(",");
}
else {
ss.append("'");
ss.append(str);
ss.append("'");
ss.append(",");
}
}
else {
ss.append("NULL");
ss.append(",");
}
}
else {
ss.append("NULL");
ss.append(",");
}
}
}
// printf(" 查询出来的结果 %s \n ", ss.c_str());
// printf(" 查询出来的字段 %s \n ", aa.c_str());
results.push_back(ss);
fields.push_back(aa);
m_pRecordset->MoveNext();
}
m_pRecordset->Close();
m_pRecordset = NULL;
}
else
{
}
}
catch (_com_error e)
{
std::cout << "查询记录结果操作失败 " << e.ErrorMessage() << std::endl;
if (strcmp(ss.c_str(), "") != 0) {
results.push_back(ss);
}
}
return ret;
}
int selectDataNormal(const string& sql, vector<string>& results)
{
int ret = -1;
string ss;
try
{
//这里每次调用都创建实例比较慢
if (!FAILED(m_pRecordset.CreateInstance(__uuidof(Recordset))))
{
ret = 0;
m_pRecordset->Open((_bstr_t)sql.c_str(), _variant_t((IDispatch*)m_pConnection, true),
adOpenKeyset, adLockOptimistic, adCmdText);
long line = 0;
while (NULL != m_pRecordset && !m_pRecordset->adoEOF && adStateClosed != m_pRecordset->State)
{
long count = m_pRecordset->Fields->Count;
++line;
ss = "";
printf("count%d\n", count);
for (long i = 0; i < count; ++i)
{
//按名称获取数据
//
//_variant_t Column("lastUpdDt");
//_variant_t RusultGet = m_pRecordset->Fields->GetItem(Column)->Value;
BSTR bstrColName = NULL;
m_pRecordset->Fields->Item[i]->get_Name(&bstrColName);
/*const char* name;
name = (const char*)bstrColName;
printf(" name=========================== %s \n ", name);*/
// 将BSTR转换为std::wstring
std::wstring wname(bstrColName);
// 将std::wstring转换为std::string
std::string name(wname.begin(), wname.end());
printf(" name=========================== %s \n ", name.c_str());
//按列序号从0开始
if (bstrColName != NULL) {
_variant_t taskStyle = m_pRecordset->GetCollect(bstrColName);
/*if (taskStyle.bstrVal) {
}*/
const char* str;
_bstr_t value = (_bstr_t)taskStyle;
str = (const char*)value;
if (str != NULL) {
//printf(" 查询的结果 %s \n", str);
ss.append(str);
}
}
}
//printf(" 查询出来的结果 %s \n ", ss.c_str());
results.push_back(ss);
m_pRecordset->MoveNext();
}
m_pRecordset->Close();
m_pRecordset = NULL;
}
else
{
}
}
catch (_com_error e)
{
std::cout << "查询记录结果操作失败 " << e.ErrorMessage() << std::endl;
if (strcmp(ss.c_str(), "") != 0) {
results.push_back(ss);
}
}
return ret;
}
int selectData(const string& sql, vector<string>& results)
{
int ret = -1;
string ss;
try
{
//这里每次调用都创建实例比较慢
if (!FAILED(m_pRecordset.CreateInstance(__uuidof(Recordset))))
{
ret = 0;
m_pRecordset->Open((_bstr_t)sql.c_str(), _variant_t((IDispatch*)m_pConnection, true),
adOpenKeyset, adLockOptimistic, adCmdText);
long line = 0;
while (NULL != m_pRecordset && !m_pRecordset->adoEOF && adStateClosed != m_pRecordset->State)
{
long count = m_pRecordset->Fields->Count;
++line;
ss = "";
printf("count%d\n", count);
for (long i = 0; i < count; ++i)
{
//按名称获取数据
//
//_variant_t Column("lastUpdDt");
//_variant_t RusultGet = m_pRecordset->Fields->GetItem(Column)->Value;
BSTR bstrColName = NULL;
m_pRecordset->Fields->Item[i]->get_Name(&bstrColName);
/*const char* name;
name = (const char*)bstrColName;
printf(" name=========================== %s \n ", name);*/
// 将BSTR转换为std::wstring
std::wstring wname(bstrColName);
// 将std::wstring转换为std::string
std::string name(wname.begin(), wname.end());
printf(" name=========================== %s \n ", name.c_str());
//按列序号从0开始
if (bstrColName != NULL) {
_variant_t taskStyle = m_pRecordset->GetCollect(bstrColName);
/*if (taskStyle.bstrVal) {
}*/
const char* str;
_bstr_t value = (_bstr_t)taskStyle;
str = (const char*)value;
if (str != NULL) {
//printf(" 查询的结果 %s \n", str);
ss.append(str);
ss.append(",");
}
}
}
//printf(" 查询出来的结果 %s \n ", ss.c_str());
results.push_back(ss);
m_pRecordset->MoveNext();
}
m_pRecordset->Close();
m_pRecordset = NULL;
}
else
{
}
}
catch (_com_error e)
{
std::cout << "查询记录结果操作失败 " << e.ErrorMessage() << std::endl;
if (strcmp(ss.c_str(), "")!=0) {
results.push_back(ss);
}
}
return ret;
}
bool open(char* username, char* password, char* dbname, char* ip)
{
try
{
::CoInitialize(NULL); //初始化COM环境
m_pConnection.CreateInstance(__uuidof(Connection)); //创建连接对象
char connStr[200] = "";
sprintf(connStr, "Provider=SQLOLEDB;Data Source=%s;Initial Catalog=%s;", ip, dbname);
printf(" connStr %s name %s password %s :\n", connStr , username , password);
hr = m_pConnection->Open(connStr, username, password, -1);
if (hr != S_OK)
return true;
}
catch (_com_error e)
{
return true;
}
return false;
}
// 有输入参数的查询
int QuerySQL(char* SQL, int inputValueCount, int* outputColumn, int* outputValueCount, char**** outputValue)
{
Fields* fields = NULL;
long ColCount = 0;
*outputColumn = 0;
*outputValueCount = 0;
m_pRecordset.CreateInstance(__uuidof(Recordset));
m_pRecordset->Open(SQL, m_pConnection.GetInterfacePtr(), adOpenStatic, adLockOptimistic, adCmdText);
hr = m_pRecordset->get_Fields(&fields); //得到记录集的字段集和
if (SUCCEEDED(hr))
{
fields->get_Count(&ColCount);
}
if (ColCount == 0) {
return 0;
}
else
{
*outputValueCount = 1;
}
int index = 0;
// 开始分配内存并且存储
*outputValue = (char***)calloc( 1, sizeof(char**));
if (!m_pRecordset->adoEOF)
{
printf("查找的结果数量:%d\n", index);
(*outputValue)[index] = (char**)calloc( 1, sizeof(char*));
for (long i = 0; i < ColCount; i++)
{
BSTR bstrColName = NULL;
fields->Item[i]->get_Name(&bstrColName);
(*outputValue)[index][i] = (char*)calloc(1000, sizeof(char));
_variant_t taskStyle = NULL;
taskStyle = m_pRecordset->GetCollect(bstrColName);
const char* str;
_bstr_t bst_t = (_bstr_t)taskStyle;
str = (const char*)bst_t;
strcpy((*outputValue)[index][i], str);
}
m_pRecordset->MoveNext();///移到下一条记录
printf("查找的结果数量:%d\n", index);
index++;
}
return 0;
}
// 执行查询
int QuerySQLNoInputParam(char* SQL, int* outputColumn, int* outputValueCount, char**** outputValue)
{
return QuerySQL(SQL, 0, outputColumn, outputValueCount, outputValue);
}
// 执行删除更新
int ExecuteSQLNoInputParam(char* SQL)
{
return ExecuteSQL(SQL, 0, NULL);
}
int ExecuteSQL(char* SQL, int valueCount, char** value)
{
try
{
m_pConnection->Execute(_bstr_t(SQL), 0, adCmdText);
}
catch (_com_error e)
{
//printf("插入失败\n");
printf(e.Description());
return -1;
}
return 0;
}
void close(void)
{
try
{
if (m_pRecordset != NULL) {
//m_pRecordset->MoveFirst();
m_pRecordset->Close();
m_pConnection->Close();
}
printf("释放环境");
::CoUninitialize(); //释放环境
}
catch (_com_error e)
{
printf("释放环境 error");
return;
}
}

@ -0,0 +1,40 @@
#import "c:\program files\common files\system\ado\msado15.dll" no_namespace rename("EOF", "adoEOF")
#include "Supor_register.h"
bool open(char* username, char* password, char* dbname, char* ip);
_RecordsetPtr& execute(_bstr_t SQL);
/**
* SQL.
* @param SQL - <I> SQL
* @param inputValueCount - <I>
* @param inputValue - <I>
* @param outputColumn - <O>
* @param outputValueCount - <O>
* @param outputValue - <O>
* @return - OCI_OK or error code
*
* ORACLE
*/
int QuerySQL(char* SQL, int inputValueCount, char** inputValue, int* outputColumn, int* outputValueCount, char**** outputValue);
int QuerySQLNoInputParam(char* SQL, int* outputColumn, int* outputValueCount, char**** outputValue);
// 执行类操作
int ExecuteSQL(char* SQL, int valueCount, char** value);
/**
* SQL.
* @param SQL - <I> SQL
* @return - OCI_OK or error code
*
* ORACLE
*/
int selectData2(const string& sql, vector<string>& results, vector<string>& fields);
int selectData(const string& sql,vector<string>& results);
int selectDataNormal(const string& sql, vector<string>& results);
int ExecuteSQLNoInputParam(char* SQL);
int getPrefStrings(const char* preference, vector<string>& pref_vec);
/**
* .
*
* ORACLE
*/
void close();

@ -0,0 +1,477 @@
/**
* @file common_itk_util.cpp
* @brief itk warpper utility function
* @author James
* @history
* ===================================================================================
* Date Name Description of Change
* 18-July-2008 James
*/
#pragma warning (disable: 4996)
#pragma warning (disable: 4819)
#include "error_handling.h"
#include "ado.h"
#include "common_itk_util.h"
#include "ocilib.h"
#include <wchar.h>
#include <string.h>
#ifdef WIN32
#include <io.h>
#include <direct.h>
#else
#include <unistd.h>
#endif
#define ARGS_LENGTH 200
#define ARGS_NAME_DEBUG "-debug"
#define DEBUG "-debug="
#define MAX_PRINTLINE_LENGTH 2000
#define MAX_PATH_LENGTH 2000
#define MAX_ARGUMENT_LENGTH 400
#define MAX_PARAMNAME_LENGTH 50
#define MAX_FILE_EXT_LENGTH 10
#define TRUE_FLAG 1
#define FALSE_FLAG 0
#define DETAILLOG 1
void ECHO(char *format, ...)
{
//if( !YFJC_OPT_DEBUG )
// return;
char msg[4096];
va_list args;
va_start( args, format );
vsprintf( msg, format, args );
va_end( args );
printf( msg );
TC_write_syslog( msg );
}
FILE* logFile = NULL;
/*=============================================================================*
* FUNCTION: current_time
* PURPOSE : get the current datetime
* INPUT:
* date_t* date_tag // current date time tag
*
* RETURN:
* void
*============================================================================*/
void current_time( date_t * date_tag )
{
time_t ltime;
struct tm *today ;
// Set time zone from TZ environment variable. If TZ is not set,
// the operating system is queried to obtain the default value
// for the variable.
//
//_tzset();
// Get UNIX-style time and display as number and string.
time( &ltime );
today = localtime( &ltime );
date_tag->year = today->tm_year + 1900 ;
date_tag->month = today->tm_mon ;
date_tag->day = today->tm_mday ;
date_tag->hour = today->tm_hour ;
date_tag->minute = today->tm_min ;
date_tag->second = today->tm_sec ;
}
/*=============================================================================*
* FUNCTION: CreateLogFile
* PURPOSE : create log file
* INPUT:
* char* FunctionName // the funtion which need to create log file
* FILE** logFile // out: the log file pointer
*
* RETURN:
* void
*============================================================================*/
void CreateLogFile(char* FunctionName, char **fullname)
{
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);
logFile = 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 );
sprintf(date_string,"%4d%02d%02d",1900+p->tm_year,p->tm_mon+1 ,p->tm_mday);
//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("TEMP"));
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("TC_LOG"));
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);
sprintf(logFileName, "%s_%s.log", FunctionName, date_string);
printf("log file name: %s\n", logFileName);
*fullname = (char *)MEM_alloc(sizeof(char)*512);
sprintf(*fullname,"%s\\%s",logFileDir,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
logFile = fopen(logFileName, "a");
CLEANUP:
//DOFREE(date_string);
DOFREE(session_uid);
}
/*=============================================================================*
* FUNCTION: WriteLog
* PURPOSE : write log, if debug log File not null, write log message to log File
* INPUT:
* const char* format // debug message string
*
* RETURN:
* void
*============================================================================*/
void WriteLog(const char* format, ...)
{
va_list arg;
char tmp[MAX_PRINTLINE_LENGTH];
if(logFile)
{
//get the message
memset(tmp, 0, sizeof(tmp));
va_start(arg, format);
vsprintf(tmp, format, arg);
va_end(arg);
//----------print to command window for trace--------//
printf("%s\n", tmp);
//print message to log file
fprintf(logFile, "%s\n", tmp);
fflush(logFile);
}
else
{
printf("*!Error!*: Log File Not Exist\n");
}
}
void CloseLog(void)
{
if(logFile)
{
fclose(logFile);
logFile = NULL;
}
}
//void getTypeinfo(char *type)
//{
// int ulen = 0,i=0,tempcount=0,asd=0;
//
// char temp[128]="";
// ulen = strlen(type);
// asd = ulen-1;
// for(i=0;i < ulen;i++)
// {
// if(type[i] == ';')
// {
// temp[tempcount] = '\0';
// strcpy(excludetypes[typecount].type,temp);
// strcpy(temp,"");
// tempcount = 0;
// typecount = typecount + 1;
// }
// else
// {
//
// temp[tempcount] = type[i];
// tempcount = tempcount + 1;
// if(i==asd)
// {
// temp[tempcount] = '\0';
// strcpy(excludetypes[typecount].type,temp);
// typecount = typecount + 1;
// }
//
// }
//
// }
//}
int SuporConnectionDB(){
char username[100]="\0",//数据库用户名
password[100]="\0",//数据库密码
url[100] = "\0",
sid[100]="\0"; //数据库链接
FILE* dbconfig = NULL;
char* tc_root_dir = getenv("tc_root");
char filePath[1024] = "";
tc_strcpy(filePath, tc_root_dir);
tc_strcat(filePath,"\\bin\\dbConfig.properties");
dbconfig = fopen(filePath, "r");
if(dbconfig==NULL){
WriteLog("%s该路径的配置文件读取失败请检查权限或是否存在\n", filePath);
}else
{
int line_num=0;
int data_count=0;
char **data_values=NULL;
char lineBuffer[1024]="";
while( fgets(lineBuffer, sizeof(lineBuffer), dbconfig) != NULL ){
line_num++;
EPM__parse_string(lineBuffer, "=", &data_count, &data_values);
if(line_num==1){
strcpy(username,data_values[1]);
WriteLog("用户名:%s\n",username);
}
if(line_num==2){
strcpy(password,data_values[1]);
WriteLog("密码:%s\n",password);
}
if(line_num==3){
strcpy(sid,data_values[1]);
WriteLog("sid%s\n",sid);
}
if (line_num == 4) {
strcpy(url, data_values[1]);
WriteLog("url%s\n", url);
}
}
DOFREE(data_values);
fclose(dbconfig);
// WriteLog("数据库连接配置内容:用户名:%s密码%s链接%s\n",username,password,sid);
if (open(username, password, sid, url))
{
WriteLog("连接数据库失败\n");
return -1;
}else
{
return 0;
}
}
return -1;
}
char* GbkToUtf8(const char* src_str)
{
int len = MultiByteToWideChar(CP_ACP, 0, src_str, -1, NULL, 0);
wchar_t* wstr = (wchar_t*)MEM_alloc((len + 1) * sizeof(wchar_t));
memset(wstr, 0, len + 1);
MultiByteToWideChar(CP_ACP, 0, src_str, -1, wstr, len);
len = WideCharToMultiByte(CP_UTF8, 0, wstr, -1, NULL, 0, NULL, NULL);
char *str = (char*)MEM_alloc((len + 1) * sizeof(char));
memset(str, 0, len + 1);
WideCharToMultiByte(CP_UTF8, 0, wstr, -1, str, len, NULL, NULL);
return str;
}
char* Utf8ToGbk(const char* src_str)
{
int len = MultiByteToWideChar(CP_UTF8, 0, src_str, -1, NULL, 0);
wchar_t* wszGBK = (wchar_t*)MEM_alloc((len + 1) * sizeof(wchar_t));
memset(wszGBK, 0, len * 2 + 2);
MultiByteToWideChar(CP_UTF8, 0, src_str, -1, wszGBK, len);
len = WideCharToMultiByte(CP_ACP, 0, wszGBK, -1, NULL, 0, NULL, NULL);
char *szGBK = (char*)MEM_alloc((len + 1) * sizeof(char));
memset(szGBK, 0, len + 1);
WideCharToMultiByte(CP_ACP, 0, wszGBK, -1, szGBK, len, NULL, NULL);
return szGBK;
}
void starTime() {
time_t now;
struct tm* p;
time(&now);
p = localtime(&now);
WriteLog("start time %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);
}
/**
*
* ItemRevision
*
*/
logical checkIsItemRevision(tag_t objtag) {
tag_t type = NULLTAG;
tag_t item_type = NULLTAG;
logical isItems = false;
ITKCALL(TCTYPE_ask_object_type(objtag, &type));
ITKCALL(TCTYPE_find_type("ItemRevision", "", &item_type));
if (item_type != NULLTAG) {
logical isok = FALSE;
ITKCALL(TCTYPE_is_type_of(type, item_type, &isok));
if (isok) {
isItems = TRUE;
}
else {
isItems = FALSE;
}
}
return isItems;
}
/*******************************************************************
*
*
*
*@param file_content
*@param item_id id
*@param file_name
*
*******************************************************************/
int Supor_create_signinfo_file(char* file_content,char *item_id, char** file_name)
{
time_t now;
struct tm* p;
FILE* filePtr = NULL;
char temp_dir[MAX_PATH_LENGTH];
char local_path[MAX_PATH] = "";
char date_string[MAX_PATH_LENGTH];
memset(temp_dir, 0, sizeof(temp_dir));
memset(local_path, 0, sizeof(local_path));
sprintf(temp_dir, "%s", getenv("TEMP"));
printf("\n file dir: %s\n", temp_dir);
time(&now);
p = localtime(&now);
if (chdir(temp_dir) != ITK_ok)
{
memset(temp_dir, 0, sizeof(temp_dir));
sprintf(temp_dir, "%s", getenv("TC_LOG"));
printf("\n TC_USER_LOG_DIR invalide, log file dir: %s\n", temp_dir);
if (chdir(temp_dir) != ITK_ok)
{
printf("!*ERROR*!: Failed to change dir to TC_USER_LOG_DIR\n");
}
}
memset(date_string, 0, sizeof(date_string));
if (item_id != NULL) {
sprintf(date_string, "%s_%4d%02d%02d%02d%02d%02d.dat", item_id, 1900 + p->tm_year, p->tm_mon + 1, p->tm_mday, p->tm_hour, p->tm_min, p->tm_sec);
}
else
{
sprintf(date_string, "%4d%02d%02d%02d%02d%02d.dat", 1900 + p->tm_year, p->tm_mon + 1, p->tm_mday, p->tm_hour, p->tm_min, p->tm_sec);
}
printf("file name: %s\n", date_string);
filePtr = fopen(date_string, "w");
printf("create the temp dat file success!\n");
*file_name = (char*)MEM_alloc(sizeof(char) * 512);
sprintf(local_path, "%s\\%s", temp_dir, date_string);
strcpy((*file_name), local_path);
fprintf(filePtr, "%s", file_content);
//fwrite(file_content, sizeof(char), strlen(file_content), filePtr);
fclose(filePtr);
return ITK_ok;
}
/*******************************************************************
*
*
*
*@param file_content
*@param item_id id
*@param file_name
*
*******************************************************************/
int Supor_create_txt_file(char* FunctionName, char** file_name)
{
time_t now;
struct tm* p;
FILE* filePtr = NULL;
char temp_dir[MAX_PATH_LENGTH];
char local_path[MAX_PATH] = "";
char date_string[MAX_PATH_LENGTH];
memset(temp_dir, 0, sizeof(temp_dir));
memset(local_path, 0, sizeof(local_path));
sprintf(temp_dir, "%s", getenv("TEMP"));
printf("\n file dir: %s\n", temp_dir);
time(&now);
p = localtime(&now);
if (chdir(temp_dir) != ITK_ok)
{
memset(temp_dir, 0, sizeof(temp_dir));
sprintf(temp_dir, "%s", getenv("TC_LOG"));
printf("\n TC_USER_LOG_DIR invalide, log file dir: %s\n", temp_dir);
if (chdir(temp_dir) != ITK_ok)
{
printf("!*ERROR*!: Failed to change dir to TC_USER_LOG_DIR\n");
}
}
memset(date_string, 0, sizeof(date_string));
sprintf(date_string, "%s_%4d%02d%02d%02d%02d%02d.txt", FunctionName, 1900 + p->tm_year, p->tm_mon + 1, p->tm_mday, p->tm_hour, p->tm_min, p->tm_sec);
printf("file name: %s\n", date_string);
filePtr = fopen(date_string, "w");
printf("create the temp dat file success!\n");
*file_name = (char*)MEM_alloc(sizeof(char) * 512);
sprintf(local_path, "%s\\%s", temp_dir, date_string);
strcpy((*file_name), local_path);
//fwrite(file_content, sizeof(char), strlen(file_content), filePtr);
fclose(filePtr);
return ITK_ok;
}

@ -0,0 +1,76 @@
/**
* @file common_itk_util.h
* @brief itk warpper utility function
* @author James
* @history
* ===================================================================================
* Date Name Description of Change
* 09-July-2008 James
*/
#ifndef COMMON_ITK_UTIL
#define COMMON_ITK_UTIL
#include <epm/epm.h>
#include <epm/epm_toolkit_tc_utils.h>
#include <ict/ict_userservice.h>
#include <tccore/item.h>
#include <ae/ae.h>
#include <tc/folder.h>
#include <tccore/aom.h>
#include <sa/sa.h>
#include <tccore/aom_prop.h>
#include <property/prop_errors.h>
#include <tccore/workspaceobject.h>
#include <tc/preferences.h>
#include <tccore//grm.h>
#include <tccore/grmtype.h>
#include <sa/am.h>
#include <cfm/cfm.h>
#include <bom/bom.h>
#include <tccore/uom.h>
#include <ps/ps.h>
#include <epm/signoff.h>
#include <fclasses/tc_date.h>
//#include <tccore/imantype.h>
//#include <textsrv/textserver.h>
//#include <user_exits/epm_toolkit_utils.h>
//#include <ss/ss_errors.h>
#include <Windows.h>
#include <stdlib.h>
//#include <io.h>
#include <stdio.h>
#include <time.h>
//#include <direct.h>
//#include <unistd.h>
#ifdef __cplusplus
extern "C" {
#endif
#define DOFREE(obj) \
{ \
if(obj) \
{ \
MEM_free(obj); \
obj = NULL; \
} \
}
void ECHO(char *format, ...);
void CreateLogFile(char* FunctionName, char **fullname);
void WriteLog(const char* format, ...);
void CloseLog(void);
void current_time( date_t * date_tag );
int SuporConnectionDB();
char* GbkToUtf8(const char* src_str);
char* Utf8ToGbk(const char* src_str);
void starTime();
logical checkIsItemRevision(tag_t objtag);
int Supor_create_signinfo_file(char* file_content,char *item_id, char** file_name);
int Supor_create_txt_file(char* FunctionName, char** file_name);
#ifdef __cplusplus
}
#endif
#endif

@ -0,0 +1,86 @@
#include "Supor_register.h"
using namespace std;
extern "C" int POM_AM__set_application_bypass(logical bypass);
/**
*
* Description:
* This handler will set signoff infomation to properties of rev
*
* Syntax:
*
*
* -SignUserName: ID
*
* -SignDate:
*
* -SignDateFormate: %Y-%m-%d
*
* -SignComment:
*
* -SignRelation:
*
*
*/
int connor_assign_user(EPM_action_message_t msg) {
int ifail = ITK_ok;
char* log_file = NULL;
CreateLogFile("connor_assign_user", &log_file);
WriteLog("*************************************************************\n");
WriteLog("* connor_assign_user is strat ! *\n");
WriteLog("*************************************************************\n");
int arg_cnt = 0, attachments = 0, * attach_type, occur_of_counts = 0, form_count;
SIGNOFF_TYPE_t memberType;
EPM_signoff_decision_t dec;
tag_t aUserTag = NULLTAG, responsibleParty = NULLTAG, cur_perform_task = NULLTAG, * attachmentTags = NULLTAG;
tag_t root_task = NULLTAG, * taskAttches = NULLTAG, master_form_rel_type = NULLTAG, * form_list = NULLTAG;
tag_t type_tag = NULLTAG, * user_tags = NULLTAG;
int user_cnt = 0;
char* timeinfo = NULL;
EPM_ask_root_task(msg.task, &root_task);
EPM_ask_attachments(root_task, EPM_target_attachment, &occur_of_counts, &taskAttches);
POM_AM__set_application_bypass(true);
for (int count = 0; count < occur_of_counts; count++) {
char* id = NULL;//用户id
ITKCALL(AOM_ask_value_string(taskAttches[count], "ly6_assignUser", &id));
printf("id=========%s\n", id);
if (id != NULL) {
tag_t tmp_select_signoff_task = NULLTAG;
ITKCALL(EPM_ask_sub_task(root_task, EPM_select_signoff_team_task, &tmp_select_signoff_task));
tag_t user;
ITKCALL(SA_find_user2(id, &user));
if (user) {
printf("11111111111111111111\n");
}
if (user && tmp_select_signoff_task) {
printf("=========\n");
int signoff_cnt = 0;
tag_t* signoffs = NULL;
ITKCALL(EPM_create_adhoc_signoff(tmp_select_signoff_task, user, &signoff_cnt, &signoffs));
ITKCALL(EPM_set_adhoc_signoff_selection_done(tmp_select_signoff_task, true));
if (signoffs)
{
MEM_free(signoffs);
signoffs = NULL;
}
}
}
}
POM_AM__set_application_bypass(false);
WriteLog("*************************************************************\n");
WriteLog("* connor_assign_user is end ! *\n");
WriteLog("*************************************************************\n");
CloseLog();
return ifail;
}

@ -0,0 +1,384 @@
#include "connor_util.h"
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#include <time.h>
#include <server_exits/user_server_exits.h>
extern "C" int POM_AM__set_application_bypass(logical bypass);
/**
*
*objtag
*type_name
*/
int checkIsTypeOrSubtype(tag_t objtag, char* type_name) {
printf("判断是否是%s及其子类\n", type_name);
tag_t type = NULLTAG;
ITKCALL(TCTYPE_ask_object_type(objtag, &type));
tag_t item_type = NULLTAG;
ITKCALL(TCTYPE_find_type(type_name, "", &item_type));
int is_type = 0;
if (item_type != NULLTAG) {
printf("找到%s类\n", type_name);
//printf(" find Folder type ok !!!! \n");
logical isok = FALSE;
ITKCALL(TCTYPE_is_type_of(type, item_type, &isok));
if (isok) {
printf("是%s类及其子类\n\n", type_name);
is_type = 1;
}
else {
printf("不是%s类及其子类\n\n", type_name);
is_type = 0;
}
}
else {
printf("没有找到%s类\n\n", type_name);
}
return is_type;
}
int Supor_open_bypass(void* returnValue)
{
POM_AM__set_application_bypass(true);
return 0;
}
int Supor_close_bypass(void* returnValue)
{
POM_AM__set_application_bypass(false);
return 0;
}
int ITK_server_bypass(void* returnValue)
{
int status = ITK_ok;
char* setBypass = false;
logical byPassStatus = false;
ITKCALL(status = USERARG_get_string_argument(&setBypass));
if (strcmp(setBypass, "true") == 0) {
byPassStatus = true;
}
POM_AM__set_application_bypass(setBypass);
return 0;
}
int Supor_add_release_status(void* return_data) {
int ifail = ITK_ok;
char* client_string = NULL, * client_string2 = NULL;
ITKCALL(ifail = USERARG_get_string_argument(&client_string));
ITKCALL(ifail = USERARG_get_string_argument(&client_string2));
printf(("添加发布状态 %s 到UID = %s \n", client_string2, client_string));
tag_t dataset_tag = NULLTAG;
tag_t release_stat = NULLTAG;
char* flag = NULL;
ITKCALL(ifail = POM_string_to_tag(client_string, &dataset_tag));
if (dataset_tag == NULLTAG) {
flag = "false";
}
else {
ITKCALL(ifail = RELSTAT_create_release_status(client_string2, &release_stat));
if (ifail == ITK_ok) {
ITKCALL(ifail = RELSTAT_add_release_status(release_stat, 1, &dataset_tag, true));
if (ifail == ITK_ok) {
printf(("添加发布状态成功\n"));
flag = "true";
}
else {
flag = "false";
}
}
else {
flag = "false";
}
}
MEM_free(client_string);
MEM_free(client_string2);
char server_string[10];
strcpy(server_string, flag);
*((char**)return_data) =
(char*)MEM_alloc((strlen(server_string) + 1) * sizeof(char));
strcpy(*((char**)return_data), server_string);
return ITK_ok;
}
//递归bom 判断子是否发布
boolean getchibomline_isrelease(tag_t top_line_tag, char* err) {
int m = 0, status_count = 0,
rev_form_cnt = 0,
c_line_count = 0,
tuzhi_col = 0;
tag_t bom_window_tag = NULLTAG,
* c_line_tags = NULL,
* rev_form_tags = NULL,
* tuzhi_tags = NULL;
printf("nnnn\n");
ITKCALL(BOM_line_ask_all_child_lines(top_line_tag, &c_line_count, &c_line_tags));
printf("c_line_count=%d\n" + c_line_count);
if (c_line_count == 0) {
printf("下面没有BOM结构\n");
}
else {
for (int m = 0; m < c_line_count; m++)
{
tag_t rev_tag = NULLTAG;
char* name = "\0";
ITKCALL(AOM_ask_value_tag(c_line_tags[m], "bl_line_object", &rev_tag));//获取BOMLINE关联的版本
ITKCALL(AOM_ask_value_string(rev_tag, "object_string", &name));
int wl_release_count = 0;
tag_t* wl_release_tags = NULL;
ITKCALL(AOM_ask_value_tags(rev_tag, "release_status_list", &wl_release_count, &wl_release_tags));
if (wl_release_count > 0)
{
printf("版本已发布\n");
}
else {
printf("版本未发布\n");
strcat(err, "[");
strcat(err, name);
strcat(err, "]");
}
getchibomline_isrelease(c_line_tags[m], err);
}
}
return true;
}
//判断子件是否发布
int BOM_CHI_ISRELEASE(EPM_rule_message_t msg) {
printf("===================================\n");
printf("根据BOM子件是否发布,限制流程发起 开始\n");
printf("===================================\n");
int ifail = EPM_go, att_cnt = 0;
tag_t task_tag = NULL_TAG,
root_task_tag = NULLTAG,
* attachments;;
task_tag = msg.task;
char errs[2500] = "\0";
char err[2000] = "\0";
if (task_tag == NULLTAG)
{
return EPM_nogo;
}
EPM_ask_root_task(task_tag, &root_task_tag);
EPM_ask_attachments(root_task_tag, EPM_target_attachment, &att_cnt, &attachments);
if (att_cnt <= 0) {
printf("目标为空 退出\n");
return EPM_go;
}
else {
POM_AM__set_application_bypass(true);
for (int i = 0; i < att_cnt; i++)
{
tag_t tagt = NULLTAG;
char* name = NULL;
int form_c = 0;
tagt = attachments[i];//
if (checkIsTypeOrSubtype(tagt, "PSBOMViewRevision") != 1)
{
printf("类型不是PSBOMViewRevision\n");
continue;
}
printf("类型是PSBOMViewRevision,继续\n");
ITKCALL(AOM_ask_value_string(tagt, "object_string", &name));
int m = 0, c_line_count = 0;
tag_t bom_window_tag = NULLTAG,
top_line_tag = NULLTAG,
* c_line_tags;
ITKCALL(BOM_create_window(&bom_window_tag));//创建window视图
ITKCALL(BOM_set_window_top_line_bvr(bom_window_tag, tagt, &top_line_tag));//获取顶层bomline
ITKCALL(BOM_line_ask_all_child_lines(top_line_tag, &c_line_count, &c_line_tags));
if (c_line_count == 0) {
printf("没有BOM结构\n");
}
else {
getchibomline_isrelease(top_line_tag, err);
if (strcmp(err, "") != 0)
{
sprintf(errs, "存在BOM对象%s子件%s未发布!!", name, err);
EMH_store_error_s1(EMH_severity_information, 278701, errs);//错误弹窗
ifail = EPM_nogo;
}
}
ITKCALL(BOM_close_window(bom_window_tag));
if (name != NULL) {
MEM_free(name);
name = NULL;
}
}
POM_AM__set_application_bypass(false);
}
printf("ifail:%d\n", ifail);
printf("===================================\n");
printf("根据BOM子件是否发布,限制流程发起 结束\n");
printf("===================================\n");
return ifail;
}
int checkIsTypeOrSubtype(tag_t objtag, const char* type_name) {
//printf("判断是否是%s及其子类\n",type_name);
tag_t type = NULLTAG;
ITKCALL(TCTYPE_ask_object_type(objtag, &type));//获得类型
tag_t item_type = NULLTAG;
ITKCALL(TCTYPE_find_type(type_name, "", &item_type));//获得所有类型为type_name的对象
int is_type = 0;
if (item_type != NULLTAG) {
//printf("找到%s类\n",type_name);
//printf(" find Folder type ok !!!! \n");
logical isok = FALSE;
ITKCALL(TCTYPE_is_type_of(type, item_type, &isok));//判断type是否为item_type的子类或者相同
if (isok) {
is_type = 1;
}
else {
is_type = 0;
}
}
else {
}
return is_type;
}
wchar_t* c2w(const char* str)
{
/*
int length = strlen(str) + 1;
wchar_t* t = (wchar_t*)malloc(sizeof(wchar_t) * length);
memset(t, 0, length * sizeof(wchar_t));
MultiByteToWideChar(CP_ACP, 0, str, strlen(str), t, length);
return t;
*/
int iSize;
wchar_t* pwszUnicode;
//返回接受字符串所需缓冲区的大小,已经包含字符结尾符'\0'
iSize = MultiByteToWideChar(CP_ACP, 0, str, -1, NULL, 0); //iSize =wcslen(pwsUnicode)+1=6
pwszUnicode = (wchar_t*)malloc(iSize * sizeof(wchar_t)); //不需要 pwszUnicode = (wchar_t *)malloc((iSize+1)*sizeof(wchar_t))
MultiByteToWideChar(CP_ACP, 0, str, -1, pwszUnicode, iSize);
return pwszUnicode;
}
string WStringToString(const wstring& ws)
{
string curLocale = setlocale(LC_ALL, NULL); // curLocale = "C";
setlocale(LC_ALL, "chs");
const wchar_t* _Source = ws.c_str();
size_t _Dsize = 2 * ws.size() + 1;
char* _Dest = new char[_Dsize];
memset(_Dest, 0, _Dsize);
wcstombs(_Dest, _Source, _Dsize);
string result = _Dest;
delete[]_Dest;
setlocale(LC_ALL, curLocale.c_str());
return result;
}
void split(std::string s, const char* delim, std::vector<std::string>* ret)
{
size_t last = 0;
size_t index = s.find(delim, last);
int size = strlen(delim);
while (index != std::string::npos) {
ret->push_back(s.substr(last, index - last));
last = index + size;
index = s.find(delim, last);
}
if (index - last > 0) {
ret->push_back(s.substr(last, index - last));
}
}
string trim(string& str)
{
str.erase(0, str.find_first_not_of(" \t")); // 去掉头部空格
str.erase(str.find_last_not_of(" \t") + 1); // 去掉尾部空格
return str;
}
string trim(const char* wtr)
{
string str = wtr;
str.erase(0, str.find_first_not_of(" \t")); // 去掉头部空格
str.erase(str.find_last_not_of(" \t") + 1); // 去掉尾部空格
return str;
}
void updateRev(tag_t form, map<string, string> map_prop, map<string, vector<string>> map_props)
{
WriteLog("-------updateRev start---------开旁路\n");
POM_AM__set_application_bypass(true);
AOM_lock(form);
for (auto it = map_prop.begin(); it != map_prop.end(); it++)
{
string str = GbkToUtf8(it->second.c_str());
WriteLog("更新单值属性[%s]=[%s]\n", it->first, it->second.c_str());
ITKCALL(AOM_set_value_string(form, it->first.data(), str.c_str()));
}
for (auto it = map_props.begin(); it != map_props.end(); it++)
{
vector<string> values = it->second;
int size = values.size();
if (size > 0)
{
WriteLog("更新多值属性[%s]\n", it->first);
char** props;
props = (char**)MEM_alloc((size + 1) * sizeof(char*));
for (auto i = 0; i < size; i++)
{
string str = GbkToUtf8(values[i].c_str());
WriteLog("---[%s]\n", values[i].c_str());
props[i] = (char*)MEM_alloc((str.size() + 1) * sizeof(char));
tc_strcpy(props[i], str.data());
}
ITKCALL(AOM_set_value_strings(form, it->first.data(), size, props));
DOFREE(props);
}
else
{
WriteLog("多值属性[%s]无值\n", it->first);
}
}
AOM_save(form);
AOM_unlock(form);
POM_AM__set_application_bypass(false);
WriteLog("-------updateRev end---------关闭旁路\n");
}

@ -0,0 +1,69 @@
#include <sa/user.h>
#include <time.h>
#include <string>
#include <vector>
#include <map>
#include <fstream>
#include <iostream>
#include <algorithm>
#include <io.h>
#include <direct.h>
#include <ict/ict_userservice.h>
#include <tccore/item.h>
#include <ae/ae.h>
#include <tc/folder.h>
#include <tccore/aom.h>
#include <pom/pom/pom.h>
#include <sa/sa.h>
#include <tccore/aom_prop.h>
#include <property/prop_errors.h>
#include <tccore/workspaceobject.h>
#include <tc/preferences.h>
//#include <tccore/imantype.h>
#include <tccore//grm.h>
#include <tccore/grmtype.h>
#include <sa/am.h>
#include <cfm/cfm.h>
#include <bom/bom.h>
#include <tccore/uom.h>
#include <ps/ps.h>
#include <epm/signoff.h>
#include <epm/epm_task_template_itk.h>
#include <fclasses/tc_date.h>
#include <tcinit/tcinit.h>
#include <ics/ics.h>
#include <ics/ics2.h>
#include <pom/enq/enq.h>
#include <rdv/arch.h>
#include <tc/envelope.h>
//#include <epm/distributionlist.h>
#include <sstream>
#include <iomanip>
#include "common_itk_util.h"
#define CUST_PROP_ERROR_NO 38600
using namespace std;
#define DOFREE(obj) \
{ \
if(obj) \
{ \
MEM_free(obj); \
obj = NULL; \
} \
}
#define ISNULL(s) (s == NULL? "" : (s ? s : ""))
int checkIsTypeOrSubtype(tag_t objtag,char * type_name);
int Supor_open_bypass(void *returnValue);
int Supor_close_bypass(void *returnValue);
int Supor_add_release_status(void * returnValue);
int BOM_CHI_ISRELEASE(EPM_rule_message_t msg);
int ITK_server_bypass(void *returnValue);
int checkIsTypeOrSubtype(tag_t objtag, const char* type_name);
string WStringToString(const wstring& ws);
wchar_t* c2w(const char* str);
void split(std::string s, const char* delim, std::vector<std::string>* ret);
string trim(string& str);
string trim(const char* wtr);
void updateRev(tag_t form, map<string, string> map_prop, map<string, vector<string>> map_props);

@ -0,0 +1,274 @@
/*===================================================================================================
Copyright(c) 2011 Siemens PLM Software Corp. All rights reserved.
Unpublished - All rights reserved
====================================================================================================
File description:
Filename : epm_register_handler.c
This file registers functions which are called when Teamcenter is being initialized
====================================================================================================
Date Name Description of Change
2011-8-21 Ray creation
$HISTORY$
==================================================================================================*/
#pragma warning (disable: 4819)
/**
* @headerfile tcua
*/
#include <server_exits/user_server_exits.h>
#include <tccore/custom.h>
#include <tccore/item_msg.h>
#include <epm/epm.h>
/**
* @headerfile standard c & cpp header files
*/
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#include <time.h>
#include <tccore/method.h>
#include <tccore/tc_msg.h>
/**
* @headerfile user's header files
*/
#include "epm_register_handler.h"
#include "connor_util.h"
#include "Supor_register.h"
#define LIMITDAY 2016
int checkvalue(char* str)
{
int i;
for (i=0;i<strlen(str);i++)
{
if (isdigit(str[i]) == 0)
return 0;
}
return 1;
}
char* decrypt(char *lic_file)
{
char* p = NULL, buf[512], *str;
int i = 0;
FILE *fp1=NULL;
if((fp1 = fopen(lic_file,"r")) == NULL)
{
printf("can not open the license file\n");
return "";
}
fgets(buf, 9, fp1);
//printf("buf=%s\n",buf);
p = buf;
while(*p != '\0')
*p++ ^= i++;
p = buf;
while(*p != '\0')
*p++ ^= i++;
p = buf;
while(*p != '\0')
*p++ ^= i++;
return buf;
}
char* encrypt(char* str)
{
char* p = str;
int i = 0;
while(*p != '\0')
*p++ ^= i++;
return str;
}
//供流程调用的
//标准的注册供流程调用服务handler的入口 TC_save_msg
extern DLLAPI int USERSERVICE_custom_register_handlers(int *decision, va_list args)
{
int ifail = ITK_ok, n=0;
char date_buf[80],*expire_date, env[512], temp1[512], temp2[512];
time_t now;
struct tm *p;
*decision = ALL_CUSTOMIZATIONS;
METHOD_id_t mth_tag;
int status = ITK_ok;
//指派人员
(ifail = EPM_register_action_handler("Connor_ChangeTask_AssignUser", "Connor_ChangeTask_AssignUser", (EPM_action_handler_t)Connor_ChangeTask_AssignUser));
if (ifail == 0)
{
printf("Registering action handler Connor_ChangeTask_AssignUser success\n");
}
else
{
printf("Registering action handler Connor_ChangeTask_AssignUser failed\n");
}
(ifail = EPM_register_action_handler("Connor_ChangeTask_SetComments", "Connor_ChangeTask_SetComments", (EPM_action_handler_t)Connor_ChangeTask_SetComments));
if (ifail == 0)
{
printf("Registering action handler Connor_ChangeTask_SetComments success\n");
}
else
{
printf("Registering action handler Connor_ChangeTask_SetComments failed\n");
}
(ifail = EPM_register_action_handler("Connor_ChangeTask_CheckValue", "Connor_ChangeTask_CheckValue", (EPM_action_handler_t)Connor_ChangeTask_CheckValue));
if (ifail == 0)
{
printf("Registering action handler Connor_ChangeTask_CheckValue success\n");
}
else
{
printf("Registering action handler Connor_ChangeTask_CheckValue failed\n");
}
(ifail = EPM_register_action_handler("Connor_signoff_dataset", "对数据集进行电子签名", (EPM_action_handler_t)Connor_signoff_dataset));
if(ifail==0)
{
printf("Registering action handler Connor_signoff_dataset success\n");
}else
{
printf("Registering action handler Supor_signoff_dataset failed\n");
}
(ifail = EPM_register_action_handler("Connor_signoff_form", "将审签信息记录到表单上", (EPM_action_handler_t)Connor_signoff_form));
if (ifail == 0)
{
printf("Registering action handler Connor_signoff_form success\n");
}
else
{
printf("Registering action handler Connor_signoff_form failed\n");
}
(ifail = EPM_register_action_handler("Connor_ChangeTask_SetValue", "Connor_ChangeTask_SetValue", (EPM_action_handler_t)Connor_ChangeTask_SetValue));
if (ifail == 0)
{
printf("Registering action handler Connor_ChangeTask_SetValue success\n");
}
else
{
printf("Registering action handler Connor_ChangeTask_SetValue failed\n");
}
//创建后操
(ifail = METHOD_find_method("Item", ITEM_create_msg, &mth_tag));//参数1类型支持原生和客制化的参数2操作类型
if (mth_tag.id != 0) {
(ifail = METHOD_add_action(mth_tag, METHOD_post_action_type, Connor_CreateItemPost, NULL));//参数2执行操作的时刻支持前操作和后操作
fprintf(stdout, "regist Connor_CreateItemPost post_action successfully !\n");
}
else {
fprintf(stdout, "regist Connor_CreateItemPost post_action fiald !\n");
}
return ifail;
}
//定义JAVA调用的服务
//register service method
extern DLLAPI int USERSERVICE_custom_register_methods(int *decision, va_list args)
{
int ifail = ITK_ok;
METHOD_id_t mth_tag;
int
status = ITK_ok,
numberOfArguments = 0,
returnValueType = USERARG_STRING_TYPE,
*argumentList = NULL;
USER_function_t functionPtr;
numberOfArguments = 2;
//需要调用的函数地址函数地址
functionPtr = Supor_add_release_status;
//定义java需要传递的参数
argumentList = (int*)MEM_alloc(numberOfArguments * sizeof(int) );
argumentList[0] = USERARG_STRING_TYPE;
argumentList[1] = USERARG_STRING_TYPE;
//定义返回值的类型
returnValueType = USERARG_STRING_TYPE;
ITKCALL(status = USERSERVICE_register_method("Supor_add_release_status", functionPtr, numberOfArguments,
argumentList, returnValueType ));
MEM_free(argumentList);
if(status == ITK_ok)
{
fprintf( stdout, "RegisteringSupor_add_release_status\n" );
}
else
{
fprintf( stdout, "Registering[%d]Supor_add_release_status\n" , status );
}
numberOfArguments = 1;
functionPtr = ITK_server_bypass;
argumentList = (int*)MEM_alloc(numberOfArguments * sizeof(int) );
argumentList[0] = USERARG_STRING_TYPE;
returnValueType = USERARG_VOID_TYPE;
ITKCALL(status = USERSERVICE_register_method("ITK_server_bypass", functionPtr, numberOfArguments,
argumentList, returnValueType ));
MEM_free(argumentList);
if(status == ITK_ok)
{
fprintf( stdout, "\n Registering ITK_server_bypass finished\n" );
}
else
{
fprintf( stdout, "\n Registering ITK_server_bypass failed %d\n" , status );
}
numberOfArguments = 1;
functionPtr = Supor_open_bypass;
argumentList = (int*)MEM_alloc(numberOfArguments * sizeof(int));
argumentList[0] = USERARG_STRING_TYPE;
returnValueType = USERARG_VOID_TYPE;
ITKCALL(status = USERSERVICE_register_method("Supor_open_bypass", functionPtr, numberOfArguments,
argumentList, returnValueType));
MEM_free(argumentList);
if (status == ITK_ok)
{
fprintf(stdout, "RegisteringSupor_open_bypass\n");
}
else
{
fprintf(stdout, "Registering[%d]Supor_open_bypass\n", status);
}
numberOfArguments = 1;
functionPtr = Supor_close_bypass;
argumentList = (int*)MEM_alloc(numberOfArguments * sizeof(int));
argumentList[0] = USERARG_STRING_TYPE;
returnValueType = USERARG_VOID_TYPE;
ITKCALL(status = USERSERVICE_register_method("Supor_close_bypass", functionPtr, numberOfArguments,
argumentList, returnValueType));
MEM_free(argumentList);
if (status == ITK_ok)
{
fprintf(stdout, "RegisteringSupor_close_bypass\n");
}
else
{
fprintf(stdout, "Registering[%d]Supor_close_bypass\n", status);
}
return ITK_ok;
}

@ -0,0 +1,36 @@

/*=================================================================================
* @file epm_register_handler.h
* @brief itk user exits function declation, to register custom handlers
* @date 2009/2/13
* @author Ray Li
* @history
* ===================================================================================
* Date Name Description
* 13-Feb-2009 Ray created
*===================================================================================*/
#ifndef EPM_REGISTER_HANDLER_CUSTOM
#define EPM_REGISTER_HANDLER_CUSTOM
#include <epm/epm.h>
#ifdef __cplusplus
extern "C" {
#endif
extern DLLAPI int USERSERVICE_custom_register_handlers(int *, va_list);
extern DLLAPI int USERSERVICE_custom_register_methods(int *decision, va_list args);
#ifdef __cplusplus
}
#endif
#endif
/**
* @}
*/

@ -0,0 +1,162 @@
/*!
* @addtogroup common
* \file error_handling.h
* \brief
* \date 2008/6/10
* \author Ray Li
*/
#ifndef SIMPLE_ERR_H_INCLUDED
#define SIMPLE_ERR_H_INCLUDED
//#include <itk/mem.h>
//#include <tc/iman.h>
#include <tc/emh.h>
#include <pom/pom/pom_errors.h>
//#include <tc/emh_const.h>
//#include <tc/tc.h>
#include <pom/pom/pom.h>
#include <stdio.h>
#include <time.h>
#define BUFSIZE 512
//
#define HANDLER_ARGUMENT_ERROR EMH_USER_error_base + 1
//#define WORKFLOW_NODE_IS_NOT_VALID EMH_USER_error_base + 2
#define ERROR_STATUS_ERROR EMH_USER_error_base + 2
//#define HANDLER_PLACED_INVALID EMH_USER_error_base + 3
//
////user errors define
////<error id="100">在站点文件中缺少 %1$ 配置,或该配置中无数据项</error>
//#define ERROR_PREFERENCE_NOT_FOUND (EMH_USER_error_base + 100)
#define DOFREE(obj) \
{ \
if(obj) \
{ \
MEM_free(obj); \
obj = NULL; \
} \
}
//#define ECHO(X) printf X;
#define SYS_LOG(X) IMAN_write_syslog X;
#define LOG_ECHO(X) printf X; IMAN_write_syslog X;
/*!
* \def CALL(x)
*
*/
#define CALL(x) { \
int stat; \
char *err_string; \
if( (stat = (x)) != ITK_ok) \
{ \
EMH_ask_error_text (stat, &err_string); \
LOG_ECHO( ("ERROR: %d ERROR MSG: %s.\n",stat, err_string) ) \
LOG_ECHO( ("Function: %s FILE: %s LINE: %d\n", #x, __FILE__, __LINE__ ) ) \
MEM_free (err_string); \
return (stat); \
} \
}
/*!
* \def DO(x)
*
*/
#define DO(x) { \
int stat; \
char *err_string; \
if( (stat = (x)) != POM_ok) \
{ \
EMH_ask_error_text (stat, &err_string); \
printf ("ERROR: %d ERROR MSG: %s.\n", stat, err_string); \
printf ("Function: %s FILE: %s LINE: %d\n",#x, __FILE__, __LINE__); \
MEM_free (err_string); \
} \
}
/*!
* \def CALLRNULL(x)
*
*/
#define CALLRNULL(x) { \
int stat; \
char *err_string; \
if( (stat = (x)) != ITK_ok) \
{ \
EMH_ask_error_text (stat, &err_string); \
printf ("ERROR: %d ERROR MSG: %s.\n", stat, err_string); \
printf ("Function: %s FILE: %s LINE: %d\n",#x, __FILE__, __LINE__); \
MEM_free (err_string); \
return ((char *)NULL); \
} \
}
/*!
* \def CALL2(x)
*
*/
#define CALL2(x) { \
int stat, n_ifails, *serverities, *ifails, err_count; \
char *err_string, **texts; \
if( (stat = (x)) != ITK_ok) \
{ \
printf ("Function: %s FILE: %s LINE: %d\n",#x, __FILE__, __LINE__); \
EMH_ask_errors( &n_ifails, (const int**)(&serverities), (const int**)(&ifails), (const char***)(&texts) );\
for( err_count=0; err_count<n_ifails; err_count++ ) \
{ \
printf( "ERROR: %d ERROR MSG: %s.\n", ifails[i], texts[i] ); \
} \
MEM_free( serverities ); \
MEM_free( ifails ); \
MEM_free( texts ); \
return (stat); \
} \
} \
#define CHECK_FILE(x,ret) { \
FILE *stream = NULL; \
if( (stream = fopen(x,"rb")) == NULL ) { \
printf( "%s doesn't exists, please check!\n", x ); \
IMAN_write_syslog( "%s doesn't exists, please check!\n", x) ; \
ret = -1; \
} \
else { \
fclose(stream); \
stream = NULL; \
ret = 0; \
} \
} \
#define CHECK_FILE_NOT_EXISTS(x,ret) { \
FILE *stream = NULL; \
if( (stream = fopen(x,"rb")) != NULL ) { \
fclose(stream); \
stream = NULL; \
printf( "%s exists, please check!\n", x ); \
IMAN_write_syslog( "%s exists, please check!\n", x) ; \
ret = -1; \
} \
else { \
ret = 0; \
} \
} \
#endif

@ -0,0 +1,49 @@

#pragma warning (disable: 4819)
/**
* @headerfile tcua
*/
#include <tc/tc_util.h>
#include <tccore/custom.h>
#include <server_exits/user_server_exits.h>
#include "error_handling.h"
#include "epm_register_handler.h"
#ifdef __cplusplus
extern "C" {
#endif
/**
* @fn extern "C" DLLAPI int liborigin_register_callbacks
* @return usually return ITK_ok
* @brief liborigin customization entry
* dll"_"
*/
DLLAPI int SignOff_itk_register_callbacks()
{
int ifail = ITK_ok;
TC_write_syslog("*******************************************************************************\n");
TC_write_syslog("* SUPOR_connor_itk register_callbacks is starting *\n");
TC_write_syslog("*******************************************************************************\n");
ITKCALL( ifail = CUSTOM_register_exit( "SignOff_itk", "USERSERVICE_register_methods",
(CUSTOM_EXIT_ftn_t)USERSERVICE_custom_register_methods) );
fprintf( stdout, "\n SUPOR_connor_itk registering USERSERVICE_custom_register_methods completed!\n" );
ITKCALL( ifail = CUSTOM_register_exit("SignOff_itk","USER_gs_shell_init_module",
(CUSTOM_EXIT_ftn_t)USERSERVICE_custom_register_handlers) );
fprintf( stdout, "\n SUPOR_connor_itk registering USERSERVICE_custom_register_handlers completed!\n" );
return ifail;
}
#ifdef __cplusplus
}
#endif

@ -0,0 +1,472 @@
///*=====================================================================================================================
// Copyright(c) 2012 ORIGIN.
// Unpublished - All rights reserved
//=======================================================================================================================
//File description:
//
// Filename: ocilib.cxx
// Module : OCI
//
// This file describes OCI library Package.
//
//=======================================================================================================================
//Date Name Description of Change
//1-Feb-2015 Ray li Initialize creation
//$HISTORY$
//=====================================================================================================================*/
//#include "common_itk_util.h"
//#include "ocilib.h"
//#include <stdlib.h>
//
//#define NUM 100
//#define USERNAME "MES"
//#define PASSWORD "infodba"
//#define DBNAME "TCPORD"
//
//
//// 定义句柄结构
//typedef struct{
// OCIEnv *p_env; //OCI environment handle 环境句柄
// OCIError *p_err; //OCI error handle 错误句柄
// OCISvcCtx *p_svc; //OCI service context handel 服务上下文句柄
// OCIServer *p_ser; //OCI server handle 服务器句柄
// OCISession *p_usr; //OCI user session handle 用户会话句柄
// OCIStmt *p_sql; //OCI statement handle 语句句柄
// OCIDefine *p_dfn; //OCI define handle 定义句柄
// OCIBind *p_bnd; //OCI bind handle 绑定句柄
//}OCIHandleInfo;
//
//
//// 定义错误句柄结构
//typedef struct{
// OCIEnv *p_env;
// OCIError *p_err;
// OCISvcCtx *p_svc;
// OCIStmt *p_sql;
// OCIDefine *p_dfn;
// OCIBind *p_bnd;
//}OCIDATA;
//
//
//// 定义执行语句时候的输入参数
//typedef struct{
// char value[NUM][NUM];
// char type[NUM][NUM];
//}SqlField;
//
//
//// 定义查询语句时候的输入,输出参数
//typedef struct{
// int naIntValue[NUM];
// int nIntNum;
// char caCharValue[500][500];
// int nCharNum;
//}SqlSelField;
//
//OCIHandleInfo *ociHandle = NULL;
//OCIHandleInfo ociHand;
//
//int InitHandle();
//int _ExeSQL(char *SQL,char ** inputValue,int inputValueCount);
//int _QuerySQL(char *SQL, SqlSelField *pOutField, SqlSelField *pSelField);
//int GetDataFromQuery(int *pRc, SqlSelField *pOutField);
//void QuitFreeHandle();
//
//
//
//
///****************************************************************************************************************************************
//函数名称:
//函数功能:
//入口参数:
//出口参数:
//备 注:
//*****************************************************************************************************************************************/
//
//
//// 初始化Handler
//int InitHandle()
//{
// int swResult;
//
// ociHandle = &ociHand;
//
//
// /*create OCI environment*/
// if(swResult = OCIEnvCreate(&ociHandle->p_env,OCI_DEFAULT,NULL,NULL,NULL,NULL,0,NULL)) //环境句柄
// {
// printf("environment create error!\n\n");
// WriteLog("environment create error!\n\n");
// return -1;
// }
// else
// {
// printf("environment create success!\n\n");
// WriteLog("environment create success!\n\n");
// //return 0;
// }
//
// /*init handle*/
// if(swResult = OCIHandleAlloc(ociHandle->p_env,(dvoid **)&ociHandle->p_ser,OCI_HTYPE_SERVER,0,NULL)) //服务器句柄
// {
// printf("init server handle error!\n\n");
// WriteLog("init server handle error!\n\n");
// return -1;
// }
//
//
// if(swResult = OCIHandleAlloc(ociHandle->p_env,(dvoid **)&ociHandle->p_err,OCI_HTYPE_ERROR,0,NULL)) //错误句柄
// {
// printf("init error handle error!\n\n");
// WriteLog("init error handle error!\n\n");
// return -1;
// }
//
//
// if(swResult = OCIHandleAlloc(ociHandle->p_env,(dvoid **)&ociHandle->p_usr,OCI_HTYPE_SESSION,0,NULL)) //事务句柄
// {
// printf("init session handle error!\n\n");
// WriteLog("init session handle error!\n\n");
// return -1;
// }
//
//
// if(swResult = OCIHandleAlloc(ociHandle->p_env,(dvoid **)&ociHandle->p_svc,OCI_HTYPE_SVCCTX,0,NULL)) //上下文句柄
// {
// printf("init service context handle error!\n\n");
// WriteLog("init service context handle error!\n\n");
// return -1;
// }
//
//
// if(swResult = OCIHandleAlloc(ociHandle->p_env,(dvoid **)&ociHandle->p_sql,OCI_HTYPE_STMT,0,NULL)) //SQL语句句柄
// {
// printf("init statement handle error!\n\n");
// WriteLog("init statement handle error!\n\n");
// return -1;
// }
//
// printf("init handle success!\n\n");
// WriteLog("init handle success!\n\n");
// return 0;
//}
//
//
//
//// 连接数据库服务器
//int ConnServer(char *username,char *password,char *dbname)
//{
// int swResult;
// char errbuf[100]={0};
// int errcode;
//
// if(InitHandle() == -1)//初始化句柄
// return -1;
//
// if(swResult = OCILogon(ociHandle->p_env,ociHandle->p_err,&ociHandle->p_svc,(text *)username,strlen(username),(text *)password,strlen(password),(text *)dbname,strlen(dbname)))
// {
// OCIErrorGet((dvoid *)ociHandle->p_err, (ub4) 1, (text *) NULL, &errcode, (ub1 *)errbuf, (ub4) sizeof(errbuf), OCI_HTYPE_ERROR);
// printf("Error - %.*s/n", 512, errbuf);
// WriteLog("Error - %.*s/n", 512, errbuf);
// return -1;
// }
// else {
// printf("数据库连接成功!\n\n");
// WriteLog("数据库连接成功!\n\n");
// }
//
// return 0;
//}
//
//
//
//// SQL语句的陈述(执行SQL语句)
//int _ExeSQL(char *SQL,char ** inputValue,int inputValueCount)
//{
// int swResult,i;
// int errcode;
//
// //设置绑定变量
// OCIBind *p_bndp[100];
//
// //准备SQL语句
// if(swResult = OCIStmtPrepare(ociHandle->p_sql,ociHandle->p_err,(text *)SQL,strlen(SQL),OCI_NTV_SYNTAX,OCI_DEFAULT))
// {
// printf("prepare SQL statements error!\n\n");
// WriteLog("prepare SQL statements error!\n\n");
// }
// else
// {
// printf("prepare SQL statements success!\n\n");
// WriteLog("prepare SQL statements success!\n\n");
// }
//
//
// // 绑定输入变量
// for(i=0;i<inputValueCount;i++)
// {
// char errbuf[100]={0};
// if(swResult = OCIBindByPos(ociHandle->p_sql,&p_bndp[i],ociHandle->p_err,i+1,(dvoid *)inputValue[i],(sb4)strlen(inputValue[i])+1,SQLT_STR, (dvoid *) 0, (ub2 *) 0, (ub2 *) 0, (ub4) 0, (ub4 *) 0, OCI_DEFAULT))
// {
// OCIErrorGet((dvoid *)ociHandle->p_err, (ub4) 1, (text *) NULL, &errcode, (ub1 *)errbuf, (ub4) sizeof(errbuf), OCI_HTYPE_ERROR);
// printf("Bind Error - %.*s/n", 512, errbuf);
// WriteLog("Bind Error - %.*s/n", 512, errbuf);
// return -1;
// }
// }
//
// //执行SQL statements
// if(swResult = OCIStmtExecute(ociHandle->p_svc,ociHandle->p_sql,ociHandle->p_err,1,0,NULL,NULL,OCI_DEFAULT))
// {
// char errbuf[100]={0};
// OCIErrorGet((dvoid *)ociHandle->p_err, (ub4) 1, (text *) NULL, &errcode, (ub1 *)errbuf, (ub4) sizeof(errbuf), OCI_HTYPE_ERROR);
// printf("execute SQL statement Error - %.*s\n", 512, errbuf);
// WriteLog("execute SQL statement Error - %.*s\n", 512, errbuf);
// return -1;
// }
// else
// {
// printf("execute SQL statement success!\n\n");
// WriteLog("execute SQL statement success!\n\n");
// }
// return 0;
//}
//
//
//
//
//// 查询SQL
//int _QuerySQL(char *SQL, SqlSelField *pOutField, SqlSelField *pSelField )
//{
// sword status;
// int rc= 0,ret=0;
// char errbuf[100]={0};
// int maxNum = 2048;
// char chTag[8];
// int iIndex = 0;
// int outputColumn = 0;
// int errcode=0;
// char nullValue = '\0'; //
// sb2 sb2aInd[30] = {'\0'};
//
// // 准备SQL语句
// status = OCIStmtPrepare(ociHandle->p_sql, ociHandle->p_err, (text *)SQL,(ub4)strlen(SQL), (ub4)OCI_NTV_SYNTAX, (ub4)OCI_DEFAULT);
//
// if (status != OCI_SUCCESS)
// {
// printf("SQL Preparing failed/n");
// WriteLog("SQL Preparing failed/n");
// return -1;
// }
//
//
// // 绑定int类型的, 定义SQL语句时 :1,:2, 定义输入变量
// for (iIndex=0; iIndex<pSelField->nIntNum; iIndex++)
// {
// memset(chTag, 0, 8);
// sprintf(chTag, ":%d", iIndex+1);
// if(rc = OCIBindByName(ociHandle->p_sql, (OCIBind **)&ociHandle->p_dfn, ociHandle->p_err, (text *)chTag,(sb4)strlen((char *)chTag),(dvoid *) &pSelField->naIntValue[iIndex], sizeof(int), SQLT_INT,(dvoid *) 0,(ub2 *) 0, (ub2 *) 0, (ub4) 0, (ub4 *) 0, OCI_DEFAULT))
// {
// OCIErrorGet((dvoid *)ociHandle->p_err, (ub4) 1, (text *) NULL, &errcode, (ub1 *)errbuf, (ub4) sizeof(errbuf), OCI_HTYPE_ERROR);
// printf("BindByPos Error of ociHandle->p_sql - %.*s\n", 512, errbuf);
// WriteLog("BindByPos Error of ociHandle->p_sql - %.*s\n", 512, errbuf);
// return -1;
// }
// }
//
// // 绑定char *类型的, 定义SQL语句时 :3,:4, 定义输入变量
// for (iIndex=0; iIndex<pSelField->nCharNum; iIndex++)
// {
// int n=0;
// memset(chTag, 0, 8);
// n = pSelField->nIntNum + iIndex +1;
// sprintf(chTag, ":%d", n);
// if(rc = OCIBindByName(ociHandle->p_sql, (OCIBind **)&ociHandle->p_dfn, ociHandle->p_err, (text *)chTag,(sb4)strlen((char *)chTag),(dvoid *) &pSelField->caCharValue[iIndex], NUM, SQLT_STR,(dvoid *) 0,(ub2 *) 0, (ub2 *) 0, (ub4) 0, (ub4 *) 0, OCI_DEFAULT))
// {
// OCIErrorGet((dvoid *)ociHandle->p_err, (ub4) 1, (text *) NULL, &errcode, (ub1 *)errbuf, (ub4) sizeof(errbuf), OCI_HTYPE_ERROR);
// printf("BindByPos Error of ociHandle->p_sql - %.*s\n", 512, errbuf);
// WriteLog("BindByPos Error of ociHandle->p_sql - %.*s\n", 512, errbuf);
// return -1;
// }
// }
//
//
// // 执行SQL语句
// if (rc = OCIStmtExecute(ociHandle->p_svc, ociHandle->p_sql, ociHandle->p_err, (ub4) 0, (ub4) 0,(CONST OCISnapshot *) NULL, (OCISnapshot *) NULL, OCI_STMT_SCROLLABLE_READONLY))
// {
// OCIErrorGet((dvoid *)ociHandle->p_err, (ub4) 1, (text *) NULL, &errcode, (ub1 *)errbuf, (ub4) sizeof(errbuf), OCI_HTYPE_ERROR);
// printf("execute SQL Error - %.*s\n", 512, errbuf);
// WriteLog("execute SQL Error - %.*s\n", 512, errbuf);
// return -1;
// }
// else
// {
// printf("execute SQL success!\n\n");
// WriteLog("execute SQL success!\n\n");
// }
//
//
// if (ret = OCIAttrGet (ociHandle->p_sql, (ub4)OCI_HTYPE_STMT, (dvoid *) &outputColumn, (ub4 *) 0, (ub4)OCI_ATTR_PARAM_COUNT, ociHandle->p_err))
// {
// OCIErrorGet((dvoid *)ociHandle->p_err, (ub4) 1, (text *) NULL, &errcode, (ub1 *)errbuf, (ub4) sizeof(errbuf), OCI_HTYPE_ERROR);
// printf("Get OCIAttr Error of ociHandle->p_sql - %.*s\n", 512, errbuf);
// WriteLog("Get OCIAttr Error of ociHandle->p_sql - %.*s\n", 512, errbuf);
// return -1;
// }
//
//
// // 绑定int类型的, 定义SQL语句时 :1,:2, 定义输出变量
// for (iIndex=0; iIndex<pOutField->nIntNum; iIndex++)
// {
// if(rc = OCIDefineByPos(ociHandle->p_sql, &ociHandle->p_dfn, ociHandle->p_err, iIndex+1, (dvoid *)&pOutField->naIntValue[iIndex], sizeof(int), SQLT_INT, (dvoid *) 0, (ub2 *)0,(ub2 *)0, OCI_DEFAULT))
// {
// OCIErrorGet((dvoid *)ociHandle->p_err, (ub4) 1, (text *) NULL, &errcode, (ub1 *)errbuf, (ub4) sizeof(errbuf), OCI_HTYPE_ERROR);
// printf("DefineByPos Error of ociHandle->p_sql - %.*s\n", 512, errbuf);
// WriteLog("DefineByPos Error of ociHandle->p_sql - %.*s\n", 512, errbuf);
// return -1;
// }
// }
//
//
// // 绑定char *类型的, 定义SQL语句时 :1,:2, 定义输出变量
// for (iIndex=0; iIndex<outputColumn; iIndex++)
// {
// int n = iIndex+1 ;
// if (rc = OCIDefineByPos(ociHandle->p_sql, &ociHandle->p_dfn, ociHandle->p_err, n, (dvoid *)&pOutField->caCharValue[iIndex], 1000*sizeof(char), SQLT_STR, (dvoid *) 0, (ub2 *)0,(ub2 *)0, OCI_DEFAULT))
// {
// OCIErrorGet((dvoid *)ociHandle->p_err, (ub4) 1, (text *) NULL, &errcode, (ub1 *)errbuf, (ub4) sizeof(errbuf), OCI_HTYPE_ERROR);
// printf("DefineByPos Error of ociHandle->p_sql - %.*s\n", 512, errbuf);
// WriteLog("DefineByPos Error of ociHandle->p_sql - %.*s\n", 512, errbuf);
// return -1;
// }
// }
//
// return 0;
//
//}
//
//
//
//// 释放Handler
//void QuitFreeHandle()
//{
// // 退出服务器
// OCILogoff(ociHandle->p_svc,ociHandle->p_err);
// printf("Quit success!\n");
// WriteLog("Quit success!\n");
//
// // 释放句柄
// OCIHandleFree(ociHandle->p_ser,OCI_HTYPE_SERVER); //释放服务器句柄
// OCIHandleFree(ociHandle->p_err,OCI_HTYPE_ERROR); //释放错误句柄
// OCIHandleFree(ociHandle->p_usr,OCI_HTYPE_SESSION); //释放事务句柄
// OCIHandleFree(ociHandle->p_svc,OCI_HTYPE_SVCCTX); //释放上下文句柄
// OCIHandleFree(ociHandle->p_sql,OCI_HTYPE_STMT); //释放SQL语句句柄
//}
//
//
//// 执行类操作
//int ExecuteSQL(char *SQL,int valueCount,char **value)
//{
// int i=0;
//
// if(i=_ExeSQL(SQL,value,valueCount))
// {
// printf("继续操作1\n");
// WriteLog("继续操作1\n");
// QuitFreeHandle();
// return -1;
// }
// printf("继续操作2\n");
// WriteLog("继续操作2\n");
// return 0;
//}
//
//
//// 有输入参数的查询
//int QuerySQL(char *SQL, int inputValueCount, char ** inputValue, int * outputColumn, int * outputValueCount, char **** outputValue)
//{
// int i = 0, j=0 ,ret =0;
//
// int times = 0, temp=0;
//
// SqlSelField infield;
// SqlSelField outField;
//
// // 初始化参数结构
// infield.nCharNum = inputValueCount;
// infield.nIntNum = 0;
// outField.nCharNum = 0;
// outField.nIntNum = 0;
//
// * outputColumn = 0;
// * outputValueCount = 0;
//
// for(i=0;i<inputValueCount;i++)
// {
// strcpy(infield.caCharValue[i],inputValue[i]);
// }
//
// // 执行查询语句
//
//
// if (ret = _QuerySQL(SQL,&outField,&infield))
// {
// printf("SQL查询失败!\n");
// WriteLog("SQL查询失败!\n");
// QuitFreeHandle();
// return -1;
// }
//
// // 获取结果列数
// ret= OCIAttrGet (ociHandle->p_sql, (ub4)OCI_HTYPE_STMT, (dvoid *) outputColumn, (ub4 *) 0, (ub4)OCI_ATTR_PARAM_COUNT, ociHandle->p_err);
//
// // 提取最后一行,便于去行数
// ret = OCIStmtFetch2(ociHandle->p_sql, ociHandle->p_err,1, OCI_FETCH_LAST,0, OCI_DEFAULT);
// // 获取结果行数
// ret= OCIAttrGet (ociHandle->p_sql, (ub4)OCI_HTYPE_STMT, (dvoid *) outputValueCount, (ub4 *) 0, (ub4)OCI_ATTR_ROW_COUNT, ociHandle->p_err);
//
// if(*outputValueCount == 0)
// return 0;
//
//
// // 开始分配内存并且存储
// ret = OCIStmtFetch2(ociHandle->p_sql, ociHandle->p_err,1, OCI_FETCH_FIRST,0, OCI_DEFAULT);
// *outputValue = (char ***) calloc ((*outputValueCount)+1,sizeof(char**));
// do
// {
// (*outputValue)[i] = (char **) calloc ((*outputColumn)+1,sizeof(char *));
// for(j=0;j<(*outputColumn);j++)
// {
// (*outputValue)[i][j] = (char *) calloc (1000,sizeof(char));
// strcpy((*outputValue)[i][j],outField.caCharValue[j]);
// //printf("outValue[%d][%d] = %s , 地址=%d, 所指向地址= %d\n ",i,j,(*outputValue)[i][j],&(*outputValue)[i][j],(*outputValue)[i][j]);
// }
// i++;
// }
// while((ret = OCIStmtFetch2(ociHandle->p_sql, ociHandle->p_err,1, OCI_FETCH_NEXT, 1, OCI_DEFAULT)!= OCI_NO_DATA));
//
// return 0;
//}
//
//
//// 无输入参数的查询
//int QuerySQLNoInputParam(char *SQL, int * outputColumn, int * outputValueCount, char **** outputValue)
//{
// return QuerySQL(SQL,0,NULL,outputColumn,outputValueCount,outputValue);
//}
//
//// 无参数操作
//int ExecuteSQLNoInputParam(char *SQL)
//{
// printf("开始操作\n");
// WriteLog("开始操作\n");
// return ExecuteSQL(SQL,0,NULL);
//}
//
//// 断开连接
//void DisConnServer()
//{
// if(ociHandle != NULL)
// QuitFreeHandle();
//}
//

@ -0,0 +1,98 @@
///*=====================================================================================================================
// Copyright(c) 2012 ORIGIN.
// Unpublished - All rights reserved
//=======================================================================================================================
//File description:
//
// Filename: ocilib.h
// Module : OCI
//
// This Header file of OCI library Package.
//
//=======================================================================================================================
//Date Name Description of Change
//1-Feb-2015 Ray Initialize creation
//$HISTORY$
//=====================================================================================================================*/
//#include <oci.h>
//#include <stdio.h>
//#include <memory.h>
//#include <string.h>
//#include <malloc.h>
////#include <limits.h>
//
//#define OCI_FAIL 1
//#define OCI_OK 0
//
//#ifdef __cplusplus
//extern "C"
//{
//#endif
// /**
// * 连接数据库.
// * @param username - <I> 用户名
// * @param password - <I> 密码
// * @param dbname - <I> 数据库SID
// * @return - OCI_OK or error code
// *
// * ORACLE 数据库的连接与封装函数
// */
// extern int ConnServer(char *username,char *password,char *dbname);
//
//
// /**
// * 不带输入参数的执行SQL语句.
// * @param SQL - <I> SQL语句
// * @return - OCI_OK or error code
// *
// * ORACLE 数据库的连接与封装函数
// */
// extern int ExecuteSQLNoInputParam(char *SQL);
//
// /**
// * 带输入参数的执行SQL语句.
// * @param SQL - <I> SQL语句
// * @param inputValueCount - <I> 输入参数数量
// * @param inputValue - <I> 输入参数值
// * @return - OCI_OK or error code
// *
// * ORACLE 数据库的连接与封装函数
// */
// extern int ExecuteSQL(char *SQL,int inputValueCount,char **inputValue);
//
// /**
// * 不带输入参数的查询SQL语句.
// * @param SQL - <I> SQL语句
// * @param outputColumn - <O> 输出表的列的数量
// * @param outputValueCount - <O> 输出表的行的数量
// * @param outputValue - <O> 输出表内容
// * @return - OCI_OK or error code
// *
// * ORACLE 数据库的连接与封装函数
// */
// extern int QuerySQLNoInputParam(char *SQL, int * outputColumn, int * outputValueCount, char **** outputValue);
//
// /**
// * 带输入参数的查询SQL语句.
// * @param SQL - <I> SQL语句
// * @param inputValueCount - <I> 输入参数数量
// * @param inputValue - <I> 输入参数值
// * @param outputColumn - <O> 输出表的列的数量
// * @param outputValueCount - <O> 输出表的行的数量
// * @param outputValue - <O> 输出表内容
// * @return - OCI_OK or error code
// *
// * ORACLE 数据库的连接与封装函数
// */
// extern int QuerySQL(char *SQL, int inputValueCount, char ** inputValue, int * outputColumn, int * outputValueCount, char **** outputValue);
//
// /**
// * 断开数据库连接.
// *
// * ORACLE 数据库的连接与封装函数
// */
// extern void DisConnServer();
//
//#ifdef __cplusplus
//}
//#endif

@ -0,0 +1,8 @@
// stdafx.cpp : 只包括标准包含文件的源文件
// XNY_itk.pch 将作为预编译头
// stdafx.obj 将包含预编译类型信息
#include "stdafx.h"
// TODO: 在 STDAFX.H 中引用任何所需的附加头文件,
//而不是在此文件中引用

@ -0,0 +1,15 @@
// stdafx.h : 标准系统包含文件的包含文件,
// 或是经常使用但不常更改的
// 特定于项目的包含文件
//
#pragma once
#include "targetver.h"
#include <stdio.h>
#include <tchar.h>
// TODO: 在此处引用程序需要的其他头文件

@ -0,0 +1,146 @@
/**
* @file string_helper.cpp
* @brief string utility functions' implemention
* @author James
* @history
* ===================================================================================
* Date Name Description of Change
* 09-July-2008 James
* 14-Jau-2009 James modify Split functions, add trim blank characters
*/
#pragma warning(disable:4996)
//
//#include <stdio.h>
//#include <iostream>
//#include <windows.h>
#include "string_helper.h"
string TrimString( string strArg )
{
size_t index1 = 0;
index1 = strArg.find_first_not_of( ' ');
if( index1 != string::npos )
strArg.erase( strArg.begin(), strArg.begin()+index1 );
index1 = strArg.find_last_not_of( ' ');
if( index1 != string::npos )
strArg.erase( strArg.begin() + index1 + 1 );
return strArg;
}
void Split( string strArg, char spliter, vector<string> &ans )
{
ans.clear();
size_t index0 = 0;
string one_arg;
if ( strArg.find_first_not_of(' ') == string::npos )
strArg = "";
while( strArg.size()>0 )
{
index0 = strArg.find_first_of( spliter );
if( index0 != string::npos )
{
one_arg = strArg.substr( 0,index0 );
strArg = strArg.substr( index0 + 1 );
ans.push_back( one_arg );
}
else
{
ans.push_back( strArg );
break;
}
}
}
void Split( string strArg, string spliter, vector<string> &ans )
{
ans.clear();
size_t index0;
string one_arg;
if ( strArg.find_first_not_of(" ") == string::npos )
strArg = "";
while( strArg.size()>0 )
{
index0 = strArg.find(spliter);
if( index0 != string::npos )
{
one_arg = strArg.substr( 0, index0 );
strArg = strArg.substr( index0 + spliter.size() );
ans.push_back( one_arg );
}
else
{
ans.push_back( strArg );
break;
}
}
}
void RemoveLiner( string &in, string &out )
{
char buf[BUFSIZ] = "";
for( int i=0; i<(int)in.size(); i++ )
{
if( in[i] == '\n')
continue;
else
sprintf( buf,"%s%c", buf, in[i] );
}
out.assign(buf);
}
////Converting a WChar string to a Ansi string
//std::string WChar2Ansi(LPCWSTR pwszSrc)
//{
// int nLen = WideCharToMultiByte(CP_ACP, 0, pwszSrc, -1, NULL, 0, NULL, NULL);
//
// if (nLen<= 0) return std::string("");
//
// char* pszDst = new char[nLen];
// if (NULL == pszDst) return std::string("");
//
// WideCharToMultiByte(CP_ACP, 0, pwszSrc, -1, pszDst, nLen, NULL, NULL);
// pszDst[nLen -1] = 0;
//
// std::string strTemp(pszDst);
// delete [] pszDst;
//
// return strTemp;
//}
//
//string ws2s(wstring& inputws){ return WChar2Ansi(inputws.c_str()); }
//
////Converting a Ansi string to WChar string
//std::wstring Ansi2WChar(LPCSTR pszSrc, int nLen)
//{
// int nSize = MultiByteToWideChar(CP_ACP, 0, (LPCSTR)pszSrc, nLen, 0, 0);
// if(nSize <= 0) return NULL;
//
// WCHAR *pwszDst = new WCHAR[nSize+1];
// if( NULL == pwszDst) return NULL;
//
// MultiByteToWideChar(CP_ACP, 0,(LPCSTR)pszSrc, nLen, pwszDst, nSize);
// pwszDst[nSize] = 0;
//
// if( pwszDst[0] == 0xFEFF) // skip Oxfeff
// for(int i = 0; i < nSize; i ++)
// pwszDst[i] = pwszDst[i+1];
//
// wstring wcharString(pwszDst);
// delete pwszDst;
//
// return wcharString;
//}
//
//std::wstring s2ws(const string& s){ return Ansi2WChar(s.c_str(),s.size());}

@ -0,0 +1,25 @@
/**
* @file string_helper.h
* @brief string utilities to help dealing with string
* @author James
* @history
* ===================================================================================
* Date Name Description of Change
* 09-July-2008 James
*/
#ifndef STRING_HELPER
#define STRING_HELPER
#include <string>
#include <vector>
using namespace std;
string TrimString( string strArg );
void Split( string strArg, char spliter, vector<string> &ans );
void Split( string strArg, string spliter, vector<string> &ans );
void RemoveLiner( string &in, string &out );
//string ws2s(wstring& inputws);
//wstring s2ws(const string& s);
#endif

@ -0,0 +1,253 @@
/*==================================================================================================================
Copyright(c) 2012 ORIGIN.
Unpublished - All rights reserved
====================================================================================================================
File description:
Filename: string_utils.c
Module : Common module.
This file includes some operations of the string.
====================================================================================================================
Date Name Description of Change
3-Feb-2015 Ray li Initialize creation
$HISTORY$
===================================================================================================================*/
#ifndef _cplusplus
#ifndef _CRT_SECURE_NO_DEPRECATE
#define _CRT_SECURE_NO_DEPRECATE
#endif
#endif
#include <fclasses/tc_string.h>
#include <tc/tc_util.h>
//#include <itk/mem.h>
#include <tccore/workspaceobject.h>
#include <stdlib.h>
#include <ctype.h>
#include "string_utils.h"
void Split( string strArg, string spliter, vector<string> &ans )
{
ans.clear();
size_t index0;
string one_arg;
if ( strArg.find_first_not_of(' ') == string::npos )
strArg = "";
while( strArg.size()>0 )
{
index0 = strArg.find(spliter);
if( index0 != string::npos )
{
one_arg = strArg.substr( 0, index0 );
strArg = strArg.substr( index0 + spliter.size() );
ans.push_back( one_arg );
}
else
{
ans.push_back( strArg );
break;
}
}
}
char* GSTR_clone( char **dst, const char *src )
{
char *retVal = NULL;
int srcLen = 0;
*dst = NULL;
if (src == NULL)
return NULL;
srcLen = (int)tc_strlen( src ) + 1;
*dst = (char*)MEM_alloc( srcLen * sizeof(char) );
retVal = tc_strncpy( *dst, src, srcLen );
(*dst)[srcLen - 1] = '\0';
return retVal;
}
char* GSTR_copy( char *dst, const char *src, int dstSize )
{
char *retVal = tc_strncpy( dst, src, dstSize );
dst[dstSize - 1] = '\0';
return retVal;
}
char* GSTR_int_to_string( char **dst, int value )
{
char strVal[128 + 1];
*dst = NULL;
memset( strVal, 0, sizeof(strVal)/sizeof(char) );
sprintf( strVal, "%d", value );
return GSTR_clone( dst, strVal );
}
void GSTR_format_int_to_string( char *dst, int digitNum, int value )
{
char sNum[WSO_desc_size_c + 1];
sprintf( sNum, "%%0%dd", digitNum );
sprintf( dst, sNum, value );
}
void GSTR_format_string( const char *dst, int m, const char *fill_char, char **out )
{
char sNum[WSO_name_size_c + 1] = {0};
char sNew[WSO_name_size_c + 1] = {0};
sprintf( sNum, "%%%d.%ds", m, m );
sprintf( sNew, sNum, dst );
STRNG_replace_str( sNew, " ", fill_char, out );
}
char* GSTR_string_append( const char *s1, const char *s2 )
{
char *s = NULL;
if (s1 == NULL || s2 == NULL)
{
GSTR_clone(&s, s1 == NULL ? (s2 == NULL ? "" : s2) : s1 );
}
else
{
int size = (int)tc_strlen(s1) + (int)tc_strlen(s2) + 1;
s = (char *)MEM_alloc( size );
tc_strcpy( s, s1 );
tc_strcat( s, s2 );
s[size - 1] = '\0';
}
return s;
}
logical GSTR_is_float(const char *str)
{
logical isfloat = true;
char *pStr = (char *)str;
logical hasPositive = false;
logical hasMinus = false;
logical hasDot = false;
if (str == NULL)
return false;
while (*pStr != '\0' && isfloat == true)
{
if ( (*pStr >= '0' && *pStr <= '9'))
{
//continue;
}
else if ( *pStr == '+' )
{
isfloat = (hasPositive ? false : (hasPositive = true));
}
else if ( *pStr == '-' )
{
isfloat = (hasMinus ? false : (hasMinus = true));
}
else if ( *pStr == '.' )
{
isfloat = (hasDot ? false : (hasDot = true));
}
else
isfloat = false;
pStr ++;
}
return isfloat;
}
logical GSTR_is_number(const char *str)
{
logical is_number = true;
char *pStr = (char *)str;
if (str == NULL)
return false;
while (*pStr != '\0')
{
if ( !( (*pStr >= '0' && *pStr <= '9') || *pStr == '-' ) )
{
is_number = false;
break;
}
pStr ++;
}
return is_number;
}
logical GSTR_is_ascii(char ch)
{
return ((unsigned int)ch) < 128;
}
int GSTR_trim_l( char *str, char s )
{
int count = 0;
char *pointer = str, *poffset = NULL;
if (str == NULL || str[0] == '\0')
return 0;
while ( *pointer != '\0' )
{
if ( *pointer != s )
{
break;
}
count++;
pointer++;
}
if (count == 0)
return 0;
poffset = str + count;
pointer = str;
while ( *poffset != '\0' )
{
*pointer = *poffset;
pointer ++;
poffset ++;
}
*pointer = '\0';
return count;
}
int GSTR_trim_r( char *str, char s )
{
int count = 0;
char *pointer = NULL;
if (str == NULL || str[0] == '\0')
return 0;
pointer = str + ((int) strlen(str) - 1);
while ( pointer != str )
{
if ( *pointer != s )
{
break;
}
*pointer = '\0';
count++;
pointer--;
}
return count;
}
void GSTR_trim_float( char *floatValue )
{
if ( !IS_EMPTY(floatValue) && tc_strstr(floatValue, ".") != NULL )
{
int len = 0;
GSTR_trim_r(floatValue, '0');
len = (int)tc_strlen(floatValue);
if (floatValue[ len - 1 ] == '.')
floatValue[ len - 1 ] = '\0';
}
}

@ -0,0 +1,125 @@
/*=====================================================================================================================
Copyright(c) 2005 ORIGIN PLM Software Corp. All rights reserved.
Unpublished - All rights reserved
=======================================================================================================================
File description:
Filename: string_utils.h
Module : Common module.
This file includes some operations of the string.
=======================================================================================================================
Date Name Description of Change
14-Jul-2009 Ray Li Initialize creation
$HISTORY$
=====================================================================================================================*/
#ifndef STRING_UTILS_H
#define STRING_UTILS_H
#include <string>
#include <map>
#include <vector>
using namespace std;
#ifdef __cplusplus
extern "C"
{
#endif
// @{{ String assister
#define IS_NULL(S) ((S)==NULL)
#define IS_EMPTY(S) (((S)==NULL) || !(*(S)))
// @}}
void Split( string strArg, string spliter, vector<string> &ans );
/**
* Clones the string.
* @param dst - <OF> the output string.
* @param src - <I> the string to be cloned.
* @return - the destinatin string pointer.
*/
extern char* GSTR_clone( char **dst, const char *src );
/**
* Copy safely the string with null end.
* @param dst - <O> the output string.
* @param src - <I> the string to be cloned.
* @param dstSize - <I> the size of output string.
* @return - the destinatin string pointer.
*/
extern char *GSTR_copy( char *dst, const char *src, int dstSize );
/**
* Converts int to string.
* @param dst - <OF> the output string.
* @param value - <I> the int to be cloned.
* @return - the destinatin string pointer.
*/
extern char* GSTR_int_to_string( char **dst, int value );
/**
* Formats the int/string value as string.
* @param dst - <O> the destination string.
* @param digitNum - <I> the digit number of the value.
* @param value - <I> the value to be converted.
* @return - N/A.
*/
extern void GSTR_format_int_to_string( char *dst, int digitNum, int value );
extern void GSTR_format_string( const char *dst, int m, const char *fill_char, char **out );
/**
* Appends the strings( never null returned )
* @param s1 - <I> string 1
* @param s2 - <I> string 2
* @return - <OF> new string
*/
extern char* GSTR_string_append( const char *s1, const char *s2 );
/**
* Whether the string is float type
* @param str - <I> The string
*
* NOTE: it's only check whether each word is in "+-.0123456789", not care the float with "E" or the float rule,
* like "00-1.+01", it will return true.
* @return - return true if it is one.
*/
extern logical GSTR_is_float(const char *str);
/**
* Whether all char of the string are number
* @param str - <I> The string
*
* NOTE: it's only check whether each word is in "0123456789"
* @return - return true if it is one.
*/
extern logical GSTR_is_number(const char *str);
/**
* Is ascii char
* @param ch - <I> ascii char
* @return - return true if it is.
*/
extern logical GSTR_is_ascii(char ch);
/**
* Trims the string's prefix.
* @param str - <I> The string
* @param s - <I> The char
*
* @return - count.
*/
extern int GSTR_trim_l( char *str, char s );
extern int GSTR_trim_r( char *str, char s );
/**
* Remove the zero.
* For Example:
* floatValue="50.00" -> = "50"
* floatValue="50.0100" -> = "50.01"
* @return - count.
*/
extern void GSTR_trim_float( char *floatValue );
#ifdef __cplusplus
}
#endif
#endif //STRING_UTILS_H

@ -0,0 +1,8 @@
#pragma once
// 包括 SDKDDKVer.h 将定义可用的最高版本的 Windows 平台。
// 如果要为以前的 Windows 平台生成应用程序,请包括 WinSDKVer.h并将
// 将 _WIN32_WINNT 宏设置为要支持的平台,然后再包括 SDKDDKVer.h。
#include <SDKDDKVer.h>

@ -0,0 +1,103 @@
/**
* @file common_itk_util.cpp
* @brief itk warpper utility function
* @author James
* @history
* ===================================================================================
* Date Name Description of Change
* 18-July-2008 Ray
*/
#include <tc/tc.h>
#include <tc/tc_util.h>
#include <tc/tc_arguments.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <time.h>
//
#ifdef WIN32
#include <io.h>
#include <direct.h>
#else
#include <unistd.h>
#endif
//
#include "tc_log.h"
#define ARGS_LENGTH 200
#define MAX_PRINTLINE_LENGTH 2000
#define MAX_PATH_LENGTH 2000
#define MAX_ARGUMENT_LENGTH 400
#define MAX_PARAMNAME_LENGTH 50
#define MAX_FILE_EXT_LENGTH 10
#define TRUE_FLAG 1
#define FALSE_FLAG 0
#define DETAILLOG 1
#define DOFREE(obj) \
{ \
if(obj) \
{ \
MEM_free(obj); \
obj = NULL; \
} \
}
FILE* logFile = NULL;
void CreateLogFile(char* logFileName)
{
int i=0;
logFile = NULL;
//get logFileName
sprintf(logFileName, "%s", logFileName);
printf("log file name: %s\n", logFileName);
//create log file
if((logFile = fopen(logFileName, "w"))==NULL)
{
printf("log file create failed\n");
}
}
void WriteLog(const char* format, ...)
{
va_list arg;
char tmp[MAX_PRINTLINE_LENGTH];
if(logFile)
{
//get the message
memset(tmp, 0, sizeof(tmp));
va_start(arg, format);
vsprintf(tmp, format, arg);
va_end(arg);
//----------print to command window for trace--------//
printf("%s\n", tmp);
//print message to log file
fprintf(logFile, "%s\n", tmp);
fflush(logFile);
}
else
{
printf("*!Error!*: Log File Not Exist\n");
}
}
void CloseLog(void)
{
if(logFile)
{
fclose(logFile);
logFile = NULL;
}
}

@ -0,0 +1,30 @@
/**
* @file common_itk_util.h
* @brief itk warpper utility function
* @author Ray
* @history
* ===================================================================================
* Date Name Description of Change
* 09-July-2008 Ray
*/
#ifndef TC_LOG_H
#define TC_LOG_H
#ifdef __cplusplus
extern "C" {
#endif
void CreateLogFile(char* logFileName);
void WriteLog(const char* format, ...);
void CloseLog(void);
//int FindDatasetReferenceExt( tag_t datasettype, const char *datasettype_ref, char ext[10] );
//int CompareDate( date_t date1, date_t date2 );
//int GetRandomTempFile( char tempFile[256] );
//logical IsItemRevisionType( char object_type[WSO_name_size_c + 1] );
#ifdef __cplusplus
}
#endif
#endif

@ -0,0 +1,32 @@
d:\source\力源\signoff_itk\signoff_itk\x64\release\vc142.pdb
d:\source\力源\signoff_itk\signoff_itk\x64\release\connor_signoff_form.obj
d:\source\力源\signoff_itk\signoff_itk\x64\release\connor_signoff_dataset.obj
d:\source\力源\signoff_itk\signoff_itk\x64\release\string_utils.obj
d:\source\力源\signoff_itk\signoff_itk\x64\release\string_helper.obj
d:\source\力源\signoff_itk\signoff_itk\x64\release\ocilib.obj
d:\source\力源\signoff_itk\signoff_itk\x64\release\lib_custom_main.obj
d:\source\力源\signoff_itk\signoff_itk\x64\release\epm_register_handler.obj
d:\source\力源\signoff_itk\signoff_itk\x64\release\crul_server_call_httpserver.obj
d:\source\力源\signoff_itk\signoff_itk\x64\release\connor_util.obj
d:\source\力源\signoff_itk\signoff_itk\x64\release\connor_changetask_setvalue.obj
d:\source\力源\signoff_itk\signoff_itk\x64\release\connor_changetask_setcomments.obj
d:\source\力源\signoff_itk\signoff_itk\x64\release\connor_changetask_checkvalue.obj
d:\source\力源\signoff_itk\signoff_itk\x64\release\connor_changetask_assignuser.obj
d:\source\力源\signoff_itk\signoff_itk\x64\release\common_itk_util.obj
d:\source\力源\signoff_itk\signoff_itk\x64\release\ado.obj
d:\source\力源\signoff_itk\signoff_itk\x64\release\addlb.obj
d:\source\力源\signoff_itk\x64\release\signoff_itk.dll
d:\source\力源\signoff_itk\signoff_itk\x64\release\signoff_itk.ipdb
d:\source\力源\signoff_itk\signoff_itk\x64\release\signoff_itk.iobj
d:\source\力源\signoff_itk\x64\release\signoff_itk.pdb
d:\source\力源\signoff_itk\x64\release\signoff_itk.lib
d:\source\力源\signoff_itk\x64\release\signoff_itk.exp
d:\source\力源\signoff_itk\signoff_itk\x64\release\msado15.tli
d:\source\力源\signoff_itk\signoff_itk\x64\release\msado15.tlh
d:\source\力源\signoff_itk\signoff_itk\x64\release\signoff_itk.tlog\cl.command.1.tlog
d:\source\力源\signoff_itk\signoff_itk\x64\release\signoff_itk.tlog\cl.read.1.tlog
d:\source\力源\signoff_itk\signoff_itk\x64\release\signoff_itk.tlog\cl.write.1.tlog
d:\source\力源\signoff_itk\signoff_itk\x64\release\signoff_itk.tlog\link.command.1.tlog
d:\source\力源\signoff_itk\signoff_itk\x64\release\signoff_itk.tlog\link.read.1.tlog
d:\source\力源\signoff_itk\signoff_itk\x64\release\signoff_itk.tlog\link.write.1.tlog
d:\source\力源\signoff_itk\signoff_itk\x64\release\signoff_itk.tlog\signoff_itk.write.1u.tlog

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<Project>
<ProjectOutputs>
<ProjectOutput>
<FullPath>D:\source\力源\SignOff_itk\x64\Release\SignOff_itk.dll</FullPath>
</ProjectOutput>
</ProjectOutputs>
<ContentFiles />
<SatelliteDlls />
<NonRecipeFileRefs />
</Project>

@ -0,0 +1,217 @@
 addLb.cpp
D:\WorkEnvironment\tc13ITK\include\pom\pom\pom.h(806,1): warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
D:\WorkEnvironment\tc13ITK\include\pom\pom\pom.h(5417,1): warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
D:\source\力源\SignOff_itk\SignOff_itk\addLb.cpp(106,12): warning C4477: “printf”: 格式字符串“%d”需要类型“int”的参数但可变参数 1 拥有了类型“unsigned __int64”
D:\source\力源\SignOff_itk\SignOff_itk\addLb.cpp(106,12): message : 请考虑在格式字符串中使用“%zd”
D:\source\力源\SignOff_itk\SignOff_itk\addLb.cpp(59,3): warning C4996: 'AOM_UIF_ask_value': "AOM_UIF_ask_value" deprecated in Teamcenter "11.1"; Use "AOM_ask_displayable_values" instead.
D:\source\力源\SignOff_itk\SignOff_itk\addLb.cpp(87,4): warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
D:\source\力源\SignOff_itk\SignOff_itk\addLb.cpp(103,4): warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
ado.cxx
D:\WorkEnvironment\tc13ITK\include\pom\pom\pom.h(806,1): warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
D:\WorkEnvironment\tc13ITK\include\pom\pom\pom.h(5417,1): warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
D:\source\力源\SignOff_itk\SignOff_itk\ado.cxx(132,9): warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
D:\source\力源\SignOff_itk\SignOff_itk\ado.cxx(406,3): warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
D:\source\力源\SignOff_itk\SignOff_itk\ado.cxx(461,4): warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
C:\VS2019\VC\Tools\MSVC\14.29.30133\include\xstring(2541,23): warning C4244: “参数”: 从“wchar_t”转换到“const _Elem”可能丢失数据
with
[
_Elem=char
]
C:\VS2019\VC\Tools\MSVC\14.29.30133\include\xstring(2552): message : 查看对正在编译的函数 模板 实例化“void std::basic_string<char,std::char_traits<char>,std::allocator<char>>::_Construct<wchar_t*>(_Iter,const _Iter,std::input_iterator_tag)”的引用
with
[
_Iter=wchar_t *
]
C:\VS2019\VC\Tools\MSVC\14.29.30133\include\xstring(2552): message : 查看对正在编译的函数 模板 实例化“void std::basic_string<char,std::char_traits<char>,std::allocator<char>>::_Construct<wchar_t*>(_Iter,const _Iter,std::input_iterator_tag)”的引用
with
[
_Iter=wchar_t *
]
C:\VS2019\VC\Tools\MSVC\14.29.30133\include\xstring(2532): message : 查看对正在编译的函数 模板 实例化“void std::basic_string<char,std::char_traits<char>,std::allocator<char>>::_Construct<wchar_t*>(const _Iter,const _Iter,std::forward_iterator_tag)”的引用
with
[
_Iter=wchar_t *
]
C:\VS2019\VC\Tools\MSVC\14.29.30133\include\xstring(2532): message : 查看对正在编译的函数 模板 实例化“void std::basic_string<char,std::char_traits<char>,std::allocator<char>>::_Construct<wchar_t*>(const _Iter,const _Iter,std::forward_iterator_tag)”的引用
with
[
_Iter=wchar_t *
]
D:\source\力源\SignOff_itk\SignOff_itk\ado.cxx(102): message : 查看对正在编译的函数 模板 实例化“std::basic_string<char,std::char_traits<char>,std::allocator<char>>::basic_string<std::_String_iterator<std::_String_val<std::_Simple_types<_Elem>>>,0>(_Iter,_Iter,const _Alloc &)”的引用
with
[
_Elem=wchar_t,
_Iter=std::_String_iterator<std::_String_val<std::_Simple_types<wchar_t>>>,
_Alloc=std::allocator<char>
]
D:\source\力源\SignOff_itk\SignOff_itk\ado.cxx(102): message : 查看对正在编译的函数 模板 实例化“std::basic_string<char,std::char_traits<char>,std::allocator<char>>::basic_string<std::_String_iterator<std::_String_val<std::_Simple_types<_Elem>>>,0>(_Iter,_Iter,const _Alloc &)”的引用
with
[
_Elem=wchar_t,
_Iter=std::_String_iterator<std::_String_val<std::_Simple_types<wchar_t>>>,
_Alloc=std::allocator<char>
]
common_itk_util.cxx
D:\source\力源\SignOff_itk\SignOff_itk\common_itk_util.cxx(52,5): warning C4996: 'vsprintf': This function or variable may be unsafe. Consider using vsprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
D:\source\力源\SignOff_itk\SignOff_itk\common_itk_util.cxx(84,10): warning C4996: 'localtime': This function or variable may be unsafe. Consider using localtime_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
D:\source\力源\SignOff_itk\SignOff_itk\common_itk_util.cxx(120,4): warning C4996: 'localtime': This function or variable may be unsafe. Consider using localtime_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
D:\source\力源\SignOff_itk\SignOff_itk\common_itk_util.cxx(124,2): warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
D:\source\力源\SignOff_itk\SignOff_itk\common_itk_util.cxx(136,2): warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
D:\source\力源\SignOff_itk\SignOff_itk\common_itk_util.cxx(139,5): warning C4996: 'chdir': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _chdir. See online help for details.
D:\source\力源\SignOff_itk\SignOff_itk\common_itk_util.cxx(144,3): warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
D:\source\力源\SignOff_itk\SignOff_itk\common_itk_util.cxx(146,6): warning C4996: 'chdir': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _chdir. See online help for details.
D:\source\力源\SignOff_itk\SignOff_itk\common_itk_util.cxx(161,2): warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
D:\source\力源\SignOff_itk\SignOff_itk\common_itk_util.cxx(165,2): warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
D:\source\力源\SignOff_itk\SignOff_itk\common_itk_util.cxx(175,12): warning C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
D:\source\力源\SignOff_itk\SignOff_itk\common_itk_util.cxx(202,3): warning C4996: 'vsprintf': This function or variable may be unsafe. Consider using vsprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
D:\source\力源\SignOff_itk\SignOff_itk\common_itk_util.cxx(284,5): warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
D:\source\力源\SignOff_itk\SignOff_itk\common_itk_util.cxx(288,5): warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
D:\source\力源\SignOff_itk\SignOff_itk\common_itk_util.cxx(292,5): warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
D:\source\力源\SignOff_itk\SignOff_itk\common_itk_util.cxx(296,5): warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
D:\source\力源\SignOff_itk\SignOff_itk\common_itk_util.cxx(303,6): error C2664: “int open(const char *,int,...)”: 无法将参数 2 从“char [100]”转换为“int”
D:\source\力源\SignOff_itk\SignOff_itk\common_itk_util.cxx(303,22): message : 没有使该转换得以执行的上下文
D:\Windows Kits\10\Include\10.0.19041.0\ucrt\corecrt_io.h(518,30): message : 参见“open”的声明
D:\source\力源\SignOff_itk\SignOff_itk\common_itk_util.cxx(267,22): warning C4996: 'getenv': This function or variable may be unsafe. Consider using _dupenv_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
D:\source\力源\SignOff_itk\SignOff_itk\common_itk_util.cxx(271,13): warning C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
D:\source\力源\SignOff_itk\SignOff_itk\common_itk_util.cxx(347,6): warning C4996: 'localtime': This function or variable may be unsafe. Consider using localtime_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
D:\source\力源\SignOff_itk\SignOff_itk\common_itk_util.cxx(422,2): warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
D:\source\力源\SignOff_itk\SignOff_itk\common_itk_util.cxx(394,2): warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
D:\source\力源\SignOff_itk\SignOff_itk\common_itk_util.cxx(397,6): warning C4996: 'localtime': This function or variable may be unsafe. Consider using localtime_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
D:\source\力源\SignOff_itk\SignOff_itk\common_itk_util.cxx(398,6): warning C4996: 'chdir': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _chdir. See online help for details.
D:\source\力源\SignOff_itk\SignOff_itk\common_itk_util.cxx(401,3): warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
D:\source\力源\SignOff_itk\SignOff_itk\common_itk_util.cxx(403,7): warning C4996: 'chdir': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _chdir. See online help for details.
D:\source\力源\SignOff_itk\SignOff_itk\common_itk_util.cxx(411,3): warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
D:\source\力源\SignOff_itk\SignOff_itk\common_itk_util.cxx(415,3): warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
D:\source\力源\SignOff_itk\SignOff_itk\common_itk_util.cxx(418,12): warning C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
D:\source\力源\SignOff_itk\SignOff_itk\common_itk_util.cxx(421,2): warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
D:\source\力源\SignOff_itk\SignOff_itk\common_itk_util.cxx(470,2): warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
D:\source\力源\SignOff_itk\SignOff_itk\common_itk_util.cxx(448,2): warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
D:\source\力源\SignOff_itk\SignOff_itk\common_itk_util.cxx(451,6): warning C4996: 'localtime': This function or variable may be unsafe. Consider using localtime_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
D:\source\力源\SignOff_itk\SignOff_itk\common_itk_util.cxx(452,6): warning C4996: 'chdir': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _chdir. See online help for details.
D:\source\力源\SignOff_itk\SignOff_itk\common_itk_util.cxx(455,3): warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
D:\source\力源\SignOff_itk\SignOff_itk\common_itk_util.cxx(457,7): warning C4996: 'chdir': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _chdir. See online help for details.
D:\source\力源\SignOff_itk\SignOff_itk\common_itk_util.cxx(464,2): warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
D:\source\力源\SignOff_itk\SignOff_itk\common_itk_util.cxx(466,12): warning C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
D:\source\力源\SignOff_itk\SignOff_itk\common_itk_util.cxx(469,2): warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
Connor_ChangeTask_AssignUser.cpp
D:\WorkEnvironment\tc13ITK\include\pom\pom\pom.h(806,1): warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
D:\WorkEnvironment\tc13ITK\include\pom\pom\pom.h(5417,1): warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
D:\source\力源\SignOff_itk\SignOff_itk\Connor_ChangeTask_AssignUser.cpp(47,8): warning C4996: 'stricmp': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _stricmp. See online help for details.
D:\source\力源\SignOff_itk\SignOff_itk\Connor_ChangeTask_AssignUser.cpp(55,13): warning C4996: 'stricmp': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _stricmp. See online help for details.
D:\source\力源\SignOff_itk\SignOff_itk\Connor_ChangeTask_AssignUser.cpp(112,4): warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
D:\source\力源\SignOff_itk\SignOff_itk\Connor_ChangeTask_AssignUser.cpp(18,73): warning C4101: “form_count”: 未引用的局部变量
D:\source\力源\SignOff_itk\SignOff_itk\Connor_ChangeTask_AssignUser.cpp(18,39): warning C4101: “attach_type”: 未引用的局部变量
D:\source\力源\SignOff_itk\SignOff_itk\Connor_ChangeTask_AssignUser.cpp(32,8): warning C4101: “uid”: 未引用的局部变量
D:\source\力源\SignOff_itk\SignOff_itk\Connor_ChangeTask_AssignUser.cpp(33,8): warning C4101: “endResult”: 未引用的局部变量
Connor_ChangeTask_CheckValue.cpp
D:\WorkEnvironment\tc13ITK\include\pom\pom\pom.h(806,1): warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
D:\WorkEnvironment\tc13ITK\include\pom\pom\pom.h(5417,1): warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
D:\source\力源\SignOff_itk\SignOff_itk\Connor_ChangeTask_CheckValue.cpp(47,8): warning C4996: 'stricmp': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _stricmp. See online help for details.
D:\source\力源\SignOff_itk\SignOff_itk\Connor_ChangeTask_CheckValue.cpp(55,13): warning C4996: 'stricmp': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _stricmp. See online help for details.
D:\source\力源\SignOff_itk\SignOff_itk\Connor_ChangeTask_CheckValue.cpp(63,13): warning C4996: 'stricmp': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _stricmp. See online help for details.
D:\source\力源\SignOff_itk\SignOff_itk\Connor_ChangeTask_CheckValue.cpp(120,4): warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
D:\source\力源\SignOff_itk\SignOff_itk\Connor_ChangeTask_CheckValue.cpp(18,73): warning C4101: “form_count”: 未引用的局部变量
D:\source\力源\SignOff_itk\SignOff_itk\Connor_ChangeTask_CheckValue.cpp(18,39): warning C4101: “attach_type”: 未引用的局部变量
D:\source\力源\SignOff_itk\SignOff_itk\Connor_ChangeTask_CheckValue.cpp(31,8): warning C4101: “uid”: 未引用的局部变量
D:\source\力源\SignOff_itk\SignOff_itk\Connor_ChangeTask_CheckValue.cpp(32,8): warning C4101: “endResult”: 未引用的局部变量
Connor_ChangeTask_SetComments.cpp
D:\WorkEnvironment\tc13ITK\include\pom\pom\pom.h(806,1): warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
D:\WorkEnvironment\tc13ITK\include\pom\pom\pom.h(5417,1): warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
D:\source\力源\SignOff_itk\SignOff_itk\Connor_ChangeTask_SetComments.cpp(91,8): warning C4996: 'stricmp': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _stricmp. See online help for details.
D:\source\力源\SignOff_itk\SignOff_itk\Connor_ChangeTask_SetComments.cpp(99,13): warning C4996: 'stricmp': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _stricmp. See online help for details.
D:\source\力源\SignOff_itk\SignOff_itk\Connor_ChangeTask_SetComments.cpp(160,4): warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
D:\source\力源\SignOff_itk\SignOff_itk\Connor_ChangeTask_SetComments.cpp(17,73): warning C4101: “form_count”: 未引用的局部变量
D:\source\力源\SignOff_itk\SignOff_itk\Connor_ChangeTask_SetComments.cpp(30,8): warning C4101: “uid”: 未引用的局部变量
D:\source\力源\SignOff_itk\SignOff_itk\Connor_ChangeTask_SetComments.cpp(31,8): warning C4101: “endResult”: 未引用的局部变量
Connor_ChangeTask_SetValue.cpp
D:\WorkEnvironment\tc13ITK\include\pom\pom\pom.h(806,1): warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
D:\WorkEnvironment\tc13ITK\include\pom\pom\pom.h(5417,1): warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
D:\source\力源\SignOff_itk\SignOff_itk\Connor_ChangeTask_SetValue.cpp(46,8): warning C4996: 'stricmp': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _stricmp. See online help for details.
D:\source\力源\SignOff_itk\SignOff_itk\Connor_ChangeTask_SetValue.cpp(54,13): warning C4996: 'stricmp': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _stricmp. See online help for details.
D:\source\力源\SignOff_itk\SignOff_itk\Connor_ChangeTask_SetValue.cpp(62,13): warning C4996: 'stricmp': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _stricmp. See online help for details.
D:\source\力源\SignOff_itk\SignOff_itk\Connor_ChangeTask_SetValue.cpp(118,6): warning C4996: 'localtime': This function or variable may be unsafe. Consider using localtime_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
D:\source\力源\SignOff_itk\SignOff_itk\Connor_ChangeTask_SetValue.cpp(127,2): warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
D:\source\力源\SignOff_itk\SignOff_itk\Connor_ChangeTask_SetValue.cpp(193,4): warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
D:\source\力源\SignOff_itk\SignOff_itk\Connor_ChangeTask_SetValue.cpp(125,9): warning C4101: “timesss”: 未引用的局部变量
D:\source\力源\SignOff_itk\SignOff_itk\Connor_ChangeTask_SetValue.cpp(17,73): warning C4101: “form_count”: 未引用的局部变量
D:\source\力源\SignOff_itk\SignOff_itk\Connor_ChangeTask_SetValue.cpp(30,8): warning C4101: “uid”: 未引用的局部变量
D:\source\力源\SignOff_itk\SignOff_itk\Connor_ChangeTask_SetValue.cpp(31,8): warning C4101: “endResult”: 未引用的局部变量
connor_util.cpp
D:\WorkEnvironment\tc13ITK\include\pom\pom\pom.h(806,1): warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
D:\WorkEnvironment\tc13ITK\include\pom\pom\pom.h(5417,1): warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
D:\source\力源\SignOff_itk\SignOff_itk\connor_util.cpp(102,2): warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
D:\source\力源\SignOff_itk\SignOff_itk\connor_util.cpp(105,62): warning C4267: “参数”: 从“size_t”转换到“int”可能丢失数据
D:\source\力源\SignOff_itk\SignOff_itk\connor_util.cpp(107,2): warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
D:\source\力源\SignOff_itk\SignOff_itk\connor_util.cpp(147,5): warning C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
D:\source\力源\SignOff_itk\SignOff_itk\connor_util.cpp(148,5): warning C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
D:\source\力源\SignOff_itk\SignOff_itk\connor_util.cpp(149,5): warning C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
D:\source\力源\SignOff_itk\SignOff_itk\connor_util.cpp(221,6): warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
D:\source\力源\SignOff_itk\SignOff_itk\connor_util.cpp(300,2): warning C4996: 'wcstombs': This function or variable may be unsafe. Consider using wcstombs_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
D:\source\力源\SignOff_itk\SignOff_itk\connor_util.cpp(312,26): warning C4267: “初始化”: 从“size_t”转换到“int”可能丢失数据
D:\source\力源\SignOff_itk\SignOff_itk\connor_util.cpp(359,27): warning C4267: “初始化”: 从“size_t”转换到“int”可能丢失数据
D:\source\力源\SignOff_itk\SignOff_itk\connor_util.cpp(369,64): warning C4267: “参数”: 从“size_t”转换到“int”可能丢失数据
D:\source\力源\SignOff_itk\SignOff_itk\connor_util.cpp(380,2): warning C4996: 'AOM_save': "AOM_save" deprecated in Teamcenter "11.2"; Use "AOM_save_with_extensions or AOM_save_without_extensions" instead.
CRUL_server_call_httpserver.cpp
D:\WorkEnvironment\tc13ITK\include\pom\pom\pom.h(806,1): warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
D:\WorkEnvironment\tc13ITK\include\pom\pom\pom.h(5417,1): warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
D:\source\力源\SignOff_itk\SignOff_itk\CRUL_server_call_httpserver.cpp(14,2): warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
epm_register_handler.cpp
D:\source\力源\SignOff_itk\SignOff_itk\epm_register_handler.cpp(65,12): warning C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
D:\source\力源\SignOff_itk\SignOff_itk\epm_register_handler.cpp(61,29): warning C4101: “str”: 未引用的局部变量
D:\source\力源\SignOff_itk\SignOff_itk\epm_register_handler.cpp(98,9): warning C4101: “now”: 未引用的局部变量
D:\source\力源\SignOff_itk\SignOff_itk\epm_register_handler.cpp(97,56): warning C4101: “temp2”: 未引用的局部变量
D:\source\力源\SignOff_itk\SignOff_itk\epm_register_handler.cpp(97,21): warning C4101: “expire_date”: 未引用的局部变量
D:\source\力源\SignOff_itk\SignOff_itk\epm_register_handler.cpp(97,7): warning C4101: “date_buf”: 未引用的局部变量
D:\source\力源\SignOff_itk\SignOff_itk\epm_register_handler.cpp(99,17): warning C4101: “p”: 未引用的局部变量
D:\source\力源\SignOff_itk\SignOff_itk\epm_register_handler.cpp(97,34): warning C4101: “env”: 未引用的局部变量
D:\source\力源\SignOff_itk\SignOff_itk\epm_register_handler.cpp(97,44): warning C4101: “temp1”: 未引用的局部变量
D:\source\力源\SignOff_itk\SignOff_itk\epm_register_handler.cpp(189,14): warning C4101: “mth_tag”: 未引用的局部变量
lib_custom_main.cpp
ocilib.cxx
string_helper.cpp
string_utils.cxx
D:\WorkEnvironment\tc13ITK\include\pom\pom\pom.h(806,1): warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
D:\WorkEnvironment\tc13ITK\include\pom\pom\pom.h(5417,1): warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
Connor_signoff_dataset.cpp
D:\WorkEnvironment\tc13ITK\include\pom\pom\pom.h(806,1): warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
D:\WorkEnvironment\tc13ITK\include\pom\pom\pom.h(5417,1): warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
D:\source\力源\SignOff_itk\SignOff_itk\Connor_signoff_dataset.cpp(43,32): warning C4267: “初始化”: 从“size_t”转换到“int”可能丢失数据
D:\source\力源\SignOff_itk\SignOff_itk\Connor_signoff_dataset.cpp(263,8): warning C4996: 'stricmp': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _stricmp. See online help for details.
D:\source\力源\SignOff_itk\SignOff_itk\Connor_signoff_dataset.cpp(270,7): warning C4996: 'stricmp': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _stricmp. See online help for details.
D:\source\力源\SignOff_itk\SignOff_itk\Connor_signoff_dataset.cpp(277,8): warning C4996: 'stricmp': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _stricmp. See online help for details.
D:\source\力源\SignOff_itk\SignOff_itk\Connor_signoff_dataset.cpp(284,8): warning C4996: 'stricmp': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _stricmp. See online help for details.
D:\source\力源\SignOff_itk\SignOff_itk\Connor_signoff_dataset.cpp(291,7): warning C4996: 'stricmp': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _stricmp. See online help for details.
D:\source\力源\SignOff_itk\SignOff_itk\Connor_signoff_dataset.cpp(298,7): warning C4996: 'stricmp': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _stricmp. See online help for details.
D:\source\力源\SignOff_itk\SignOff_itk\Connor_signoff_dataset.cpp(305,7): warning C4996: 'stricmp': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _stricmp. See online help for details.
D:\source\力源\SignOff_itk\SignOff_itk\Connor_signoff_dataset.cpp(312,7): warning C4996: 'stricmp': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _stricmp. See online help for details.
D:\source\力源\SignOff_itk\SignOff_itk\Connor_signoff_dataset.cpp(319,7): warning C4996: 'stricmp': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _stricmp. See online help for details.
D:\source\力源\SignOff_itk\SignOff_itk\Connor_signoff_dataset.cpp(326,7): warning C4996: 'stricmp': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _stricmp. See online help for details.
D:\source\力源\SignOff_itk\SignOff_itk\Connor_signoff_dataset.cpp(333,8): warning C4996: 'stricmp': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _stricmp. See online help for details.
D:\source\力源\SignOff_itk\SignOff_itk\Connor_signoff_dataset.cpp(340,8): warning C4996: 'stricmp': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _stricmp. See online help for details.
D:\source\力源\SignOff_itk\SignOff_itk\Connor_signoff_dataset.cpp(440,6): warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
D:\source\力源\SignOff_itk\SignOff_itk\Connor_signoff_dataset.cpp(451,5): warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
D:\source\力源\SignOff_itk\SignOff_itk\Connor_signoff_dataset.cpp(466,7): warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
D:\source\力源\SignOff_itk\SignOff_itk\Connor_signoff_dataset.cpp(488,8): warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
D:\source\力源\SignOff_itk\SignOff_itk\Connor_signoff_dataset.cpp(523,7): warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
Connor_signoff_form.cpp
D:\WorkEnvironment\tc13ITK\include\pom\pom\pom.h(806,1): warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
D:\WorkEnvironment\tc13ITK\include\pom\pom\pom.h(5417,1): warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
D:\source\力源\SignOff_itk\SignOff_itk\Connor_signoff_form.cpp(115,3): warning C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
D:\source\力源\SignOff_itk\SignOff_itk\Connor_signoff_form.cpp(116,3): warning C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
D:\source\力源\SignOff_itk\SignOff_itk\Connor_signoff_form.cpp(138,7): warning C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
D:\source\力源\SignOff_itk\SignOff_itk\Connor_signoff_form.cpp(139,7): warning C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
D:\source\力源\SignOff_itk\SignOff_itk\Connor_signoff_form.cpp(140,7): warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
D:\source\力源\SignOff_itk\SignOff_itk\Connor_signoff_form.cpp(145,7): warning C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
D:\source\力源\SignOff_itk\SignOff_itk\Connor_signoff_form.cpp(146,7): warning C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
D:\source\力源\SignOff_itk\SignOff_itk\Connor_signoff_form.cpp(147,7): warning C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
D:\source\力源\SignOff_itk\SignOff_itk\Connor_signoff_form.cpp(148,7): warning C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
D:\source\力源\SignOff_itk\SignOff_itk\Connor_signoff_form.cpp(150,7): warning C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
D:\source\力源\SignOff_itk\SignOff_itk\Connor_signoff_form.cpp(151,7): warning C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
D:\source\力源\SignOff_itk\SignOff_itk\Connor_signoff_form.cpp(67,8): warning C4996: 'stricmp': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _stricmp. See online help for details.
D:\source\力源\SignOff_itk\SignOff_itk\Connor_signoff_form.cpp(75,8): warning C4996: 'stricmp': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _stricmp. See online help for details.
D:\source\力源\SignOff_itk\SignOff_itk\Connor_signoff_form.cpp(82,8): warning C4996: 'stricmp': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _stricmp. See online help for details.
D:\source\力源\SignOff_itk\SignOff_itk\Connor_signoff_form.cpp(89,8): warning C4996: 'stricmp': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _stricmp. See online help for details.
D:\source\力源\SignOff_itk\SignOff_itk\Connor_signoff_form.cpp(96,8): warning C4996: 'stricmp': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _stricmp. See online help for details.
D:\source\力源\SignOff_itk\SignOff_itk\Connor_signoff_form.cpp(159,7): warning C4996: 'sscanf': This function or variable may be unsafe. Consider using sscanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
D:\source\力源\SignOff_itk\SignOff_itk\Connor_signoff_form.cpp(161,7): warning C4996: 'sscanf': This function or variable may be unsafe. Consider using sscanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
D:\source\力源\SignOff_itk\SignOff_itk\Connor_signoff_form.cpp(227,6): warning C4996: 'AOM_save': "AOM_save" deprecated in Teamcenter "11.2"; Use "AOM_save_with_extensions or AOM_save_without_extensions" instead.

@ -0,0 +1,2 @@
PlatformToolSet=v142:VCToolArchitecture=Native32Bit:VCToolsVersion=14.29.30133:TargetPlatformVersion=10.0.19041.0:
Release|x64|D:\source\力源\SignOff_itk\|

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -0,0 +1,25 @@
/target/
!.mvn/wrapper/maven-wrapper.jar
### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
### NetBeans ###
/nbproject/private/
/build/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/

Binary file not shown.

@ -0,0 +1 @@
distributionUrl=https://repo1.maven.org/maven2/org/apache/maven/apache-maven/3.5.3/apache-maven-3.5.3-bin.zip

@ -0,0 +1 @@
SpringBoot集成JWT实现token验证

Binary file not shown.

Binary file not shown.

Binary file not shown.

225
java_git/mvnw vendored

@ -0,0 +1,225 @@
#!/bin/sh
# ----------------------------------------------------------------------------
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
# ----------------------------------------------------------------------------
# ----------------------------------------------------------------------------
# Maven2 Start Up Batch script
#
# Required ENV vars:
# ------------------
# JAVA_HOME - location of a JDK home dir
#
# Optional ENV vars
# -----------------
# M2_HOME - location of maven2's installed home dir
# MAVEN_OPTS - parameters passed to the Java VM when running Maven
# e.g. to debug Maven itself, use
# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
# MAVEN_SKIP_RC - flag to disable loading of mavenrc files
# ----------------------------------------------------------------------------
if [ -z "$MAVEN_SKIP_RC" ] ; then
if [ -f /etc/mavenrc ] ; then
. /etc/mavenrc
fi
if [ -f "$HOME/.mavenrc" ] ; then
. "$HOME/.mavenrc"
fi
fi
# OS specific support. $var _must_ be set to either true or false.
cygwin=false;
darwin=false;
mingw=false
case "`uname`" in
CYGWIN*) cygwin=true ;;
MINGW*) mingw=true;;
Darwin*) darwin=true
# Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home
# See https://developer.apple.com/library/mac/qa/qa1170/_index.html
if [ -z "$JAVA_HOME" ]; then
if [ -x "/usr/libexec/java_home" ]; then
export JAVA_HOME="`/usr/libexec/java_home`"
else
export JAVA_HOME="/Library/Java/Home"
fi
fi
;;
esac
if [ -z "$JAVA_HOME" ] ; then
if [ -r /etc/gentoo-release ] ; then
JAVA_HOME=`java-config --jre-home`
fi
fi
if [ -z "$M2_HOME" ] ; then
## resolve links - $0 may be a link to maven's home
PRG="$0"
# need this for relative symlinks
while [ -h "$PRG" ] ; do
ls=`ls -ld "$PRG"`
link=`expr "$ls" : '.*-> \(.*\)$'`
if expr "$link" : '/.*' > /dev/null; then
PRG="$link"
else
PRG="`dirname "$PRG"`/$link"
fi
done
saveddir=`pwd`
M2_HOME=`dirname "$PRG"`/..
# make it fully qualified
M2_HOME=`cd "$M2_HOME" && pwd`
cd "$saveddir"
# echo Using m2 at $M2_HOME
fi
# For Cygwin, ensure paths are in UNIX format before anything is touched
if $cygwin ; then
[ -n "$M2_HOME" ] &&
M2_HOME=`cygpath --unix "$M2_HOME"`
[ -n "$JAVA_HOME" ] &&
JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
[ -n "$CLASSPATH" ] &&
CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
fi
# For Migwn, ensure paths are in UNIX format before anything is touched
if $mingw ; then
[ -n "$M2_HOME" ] &&
M2_HOME="`(cd "$M2_HOME"; pwd)`"
[ -n "$JAVA_HOME" ] &&
JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`"
# TODO classpath?
fi
if [ -z "$JAVA_HOME" ]; then
javaExecutable="`which javac`"
if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then
# readlink(1) is not available as standard on Solaris 10.
readLink=`which readlink`
if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then
if $darwin ; then
javaHome="`dirname \"$javaExecutable\"`"
javaExecutable="`cd \"$javaHome\" && pwd -P`/javac"
else
javaExecutable="`readlink -f \"$javaExecutable\"`"
fi
javaHome="`dirname \"$javaExecutable\"`"
javaHome=`expr "$javaHome" : '\(.*\)/bin'`
JAVA_HOME="$javaHome"
export JAVA_HOME
fi
fi
fi
if [ -z "$JAVACMD" ] ; then
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD="$JAVA_HOME/jre/sh/java"
else
JAVACMD="$JAVA_HOME/bin/java"
fi
else
JAVACMD="`which java`"
fi
fi
if [ ! -x "$JAVACMD" ] ; then
echo "Error: JAVA_HOME is not defined correctly." >&2
echo " We cannot execute $JAVACMD" >&2
exit 1
fi
if [ -z "$JAVA_HOME" ] ; then
echo "Warning: JAVA_HOME environment variable is not set."
fi
CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher
# traverses directory structure from process work directory to filesystem root
# first directory with .mvn subdirectory is considered project base directory
find_maven_basedir() {
if [ -z "$1" ]
then
echo "Path not specified to find_maven_basedir"
return 1
fi
basedir="$1"
wdir="$1"
while [ "$wdir" != '/' ] ; do
if [ -d "$wdir"/.mvn ] ; then
basedir=$wdir
break
fi
# workaround for JBEAP-8937 (on Solaris 10/Sparc)
if [ -d "${wdir}" ]; then
wdir=`cd "$wdir/.."; pwd`
fi
# end of workaround
done
echo "${basedir}"
}
# concatenates all lines of a file
concat_lines() {
if [ -f "$1" ]; then
echo "$(tr -s '\n' ' ' < "$1")"
fi
}
BASE_DIR=`find_maven_basedir "$(pwd)"`
if [ -z "$BASE_DIR" ]; then
exit 1;
fi
export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}
echo $MAVEN_PROJECTBASEDIR
MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS"
# For Cygwin, switch paths to Windows format before running java
if $cygwin; then
[ -n "$M2_HOME" ] &&
M2_HOME=`cygpath --path --windows "$M2_HOME"`
[ -n "$JAVA_HOME" ] &&
JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`
[ -n "$CLASSPATH" ] &&
CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
[ -n "$MAVEN_PROJECTBASEDIR" ] &&
MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"`
fi
WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
exec "$JAVACMD" \
$MAVEN_OPTS \
-classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
"-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@"

143
java_git/mvnw.cmd vendored

@ -0,0 +1,143 @@
@REM ----------------------------------------------------------------------------
@REM Licensed to the Apache Software Foundation (ASF) under one
@REM or more contributor license agreements. See the NOTICE file
@REM distributed with this work for additional information
@REM regarding copyright ownership. The ASF licenses this file
@REM to you under the Apache License, Version 2.0 (the
@REM "License"); you may not use this file except in compliance
@REM with the License. You may obtain a copy of the License at
@REM
@REM http://www.apache.org/licenses/LICENSE-2.0
@REM
@REM Unless required by applicable law or agreed to in writing,
@REM software distributed under the License is distributed on an
@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
@REM KIND, either express or implied. See the License for the
@REM specific language governing permissions and limitations
@REM under the License.
@REM ----------------------------------------------------------------------------
@REM ----------------------------------------------------------------------------
@REM Maven2 Start Up Batch script
@REM
@REM Required ENV vars:
@REM JAVA_HOME - location of a JDK home dir
@REM
@REM Optional ENV vars
@REM M2_HOME - location of maven2's installed home dir
@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands
@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending
@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven
@REM e.g. to debug Maven itself, use
@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files
@REM ----------------------------------------------------------------------------
@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'
@echo off
@REM enable echoing my setting MAVEN_BATCH_ECHO to 'on'
@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO%
@REM set %HOME% to equivalent of $HOME
if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%")
@REM Execute a user defined script before this one
if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre
@REM check for pre script, once with legacy .bat ending and once with .cmd ending
if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat"
if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd"
:skipRcPre
@setlocal
set ERROR_CODE=0
@REM To isolate internal variables from possible post scripts, we use another setlocal
@setlocal
@REM ==== START VALIDATION ====
if not "%JAVA_HOME%" == "" goto OkJHome
echo.
echo Error: JAVA_HOME not found in your environment. >&2
echo Please set the JAVA_HOME variable in your environment to match the >&2
echo location of your Java installation. >&2
echo.
goto error
:OkJHome
if exist "%JAVA_HOME%\bin\java.exe" goto init
echo.
echo Error: JAVA_HOME is set to an invalid directory. >&2
echo JAVA_HOME = "%JAVA_HOME%" >&2
echo Please set the JAVA_HOME variable in your environment to match the >&2
echo location of your Java installation. >&2
echo.
goto error
@REM ==== END VALIDATION ====
:init
@REM Find the project base dir, i.e. the directory that contains the folder ".mvn".
@REM Fallback to current working directory if not found.
set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR%
IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir
set EXEC_DIR=%CD%
set WDIR=%EXEC_DIR%
:findBaseDir
IF EXIST "%WDIR%"\.mvn goto baseDirFound
cd ..
IF "%WDIR%"=="%CD%" goto baseDirNotFound
set WDIR=%CD%
goto findBaseDir
:baseDirFound
set MAVEN_PROJECTBASEDIR=%WDIR%
cd "%EXEC_DIR%"
goto endDetectBaseDir
:baseDirNotFound
set MAVEN_PROJECTBASEDIR=%EXEC_DIR%
cd "%EXEC_DIR%"
:endDetectBaseDir
IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig
@setlocal EnableExtensions EnableDelayedExpansion
for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a
@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS%
:endReadAdditionalConfig
SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe"
set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar"
set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %*
if ERRORLEVEL 1 goto error
goto end
:error
set ERROR_CODE=1
:end
@endlocal & set ERROR_CODE=%ERROR_CODE%
if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost
@REM check for post script, once with legacy .bat ending and once with .cmd ending
if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat"
if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd"
:skipRcPost
@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on'
if "%MAVEN_BATCH_PAUSE%" == "on" pause
if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE%
exit /B %ERROR_CODE%

@ -0,0 +1,356 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.pjb</groupId>
<artifactId>ConnorSendMail</artifactId>
<version>2.0.0</version>
<packaging>jar</packaging>
<name>springboot-jjwt</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.7.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<skipTests>true</skipTests>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
<version>2.3.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
<version>2.3.7.RELEASE</version>
</dependency>
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
<version>6.1.0.jre8</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger-ui -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.47</version>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.1</version>
</dependency>
<dependency>
<groupId>com.auth0</groupId>
<artifactId>java-jwt</artifactId>
<version>3.4.0</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc8</artifactId>
<version>12.2.0.1</version>
</dependency>
<!--
<dependency>
<groupId>teamcenter</groupId>
<artifactId>commons-io</artifactId>
<version>2.5</version>
</dependency>
<dependency>
<groupId>teamcenter</groupId>
<artifactId>commons-logging</artifactId>
<version>2.5</version>
</dependency>
<dependency>
<groupId>teamcenter</groupId>
<artifactId>fccclient</artifactId>
<version>12.3.0</version>
</dependency>
<dependency>
<groupId>teamcenter</groupId>
<artifactId>fscclient</artifactId>
<version>12.3.0</version>
</dependency>
<dependency>
<groupId>teamcenter</groupId>
<artifactId>httpclient</artifactId>
<version>12.3.0</version>
</dependency>
<dependency>
<groupId>teamcenter</groupId>
<artifactId>httpcore</artifactId>
<version>12.3.0</version>
</dependency>
<dependency>
<groupId>teamcenter</groupId>
<artifactId>httpmime</artifactId>
<version>12.3.0</version>
</dependency>
<dependency>
<groupId>teamcenter</groupId>
<artifactId>log4j</artifactId>
<version>12.3.0</version>
</dependency>
<dependency>
<groupId>teamcenter</groupId>
<artifactId>TcSoaAdministrationStrong</artifactId>
<version>12.3.0</version>
</dependency>
<dependency>
<groupId>teamcenter</groupId>
<artifactId>TcSoaAiStrong</artifactId>
<version>12.3.0</version>
</dependency>
<dependency>
<groupId>teamcenter</groupId>
<artifactId>TcSoaAllocationsStrong</artifactId>
<version>12.3.0</version>
</dependency>
<dependency>
<groupId>teamcenter</groupId>
<artifactId>TcSoaBomStrong</artifactId>
<version>12.3.0</version>
</dependency>
<dependency>
<groupId>teamcenter</groupId>
<artifactId>TcSoaBusinessModelerStrong</artifactId>
<version>12.3.0</version>
</dependency>
<dependency>
<groupId>teamcenter</groupId>
<artifactId>TcSoaCadBomAlignmentStrong</artifactId>
<version>12.3.0</version>
</dependency>
<dependency>
<groupId>teamcenter</groupId>
<artifactId>TcSoaCadStrong</artifactId>
<version>12.3.0</version>
</dependency>
<dependency>
<groupId>teamcenter</groupId>
<artifactId>TcSoaCaeStrong</artifactId>
<version>12.3.0</version>
</dependency>
<dependency>
<groupId>teamcenter</groupId>
<artifactId>TcSoaCalendarManagementStrong</artifactId>
<version>12.3.0</version>
</dependency>
<dependency>
<groupId>teamcenter</groupId>
<artifactId>TcSoaChangeManagementStrong</artifactId>
<version>12.3.0</version>
</dependency>
<dependency>
<groupId>teamcenter</groupId>
<artifactId>TcSoaClassificationStrong</artifactId>
<version>12.3.0</version>
</dependency>
<dependency>
<groupId>teamcenter</groupId>
<artifactId>TcSoaClient</artifactId>
<version>12.3.0</version>
</dependency>
<dependency>
<groupId>teamcenter</groupId>
<artifactId>TcSoaCommon</artifactId>
<version>12.3.0</version>
</dependency>
<dependency>
<groupId>teamcenter</groupId>
<artifactId>TcSoaConfigurationStrong</artifactId>
<version>12.3.0</version>
</dependency>
<dependency>
<groupId>teamcenter</groupId>
<artifactId>TcSoaCoreLoose</artifactId>
<version>12.3.0</version>
</dependency>
<dependency>
<groupId>teamcenter</groupId>
<artifactId>TcSoaCoreStrong</artifactId>
<version>12.3.0</version>
</dependency>
<dependency>
<groupId>teamcenter</groupId>
<artifactId>TcSoaDocumentManagementStrong</artifactId>
<version>12.3.0</version>
</dependency>
<dependency>
<groupId>teamcenter</groupId>
<artifactId>TcSoaImportExportStrong</artifactId>
<version>12.3.0</version>
</dependency>
<dependency>
<groupId>teamcenter</groupId>
<artifactId>TcSoaQueryStrong</artifactId>
<version>12.3.0</version>
</dependency>
<dependency>
<groupId>teamcenter</groupId>
<artifactId>TcSoaStrongModel</artifactId>
<version>12.3.0</version>
</dependency>
<dependency>
<groupId>teamcenter</groupId>
<artifactId>TcSoaWorkflowLoose</artifactId>
<version>12.3.0</version>
</dependency>
<dependency>
<groupId>teamcenter</groupId>
<artifactId>TcSoaWorkflowStrong</artifactId>
<version>12.3.0</version>
</dependency>
<dependency>
<groupId>teamcenter</groupId>
<artifactId>tcserverjavabinding</artifactId>
<version>12.3.0</version>
</dependency>
<dependency>
<groupId>teamcenter</groupId>
<artifactId>tcmemjavabinding</artifactId>
<version>12.3.0</version>
</dependency>
<dependency>
<groupId>teamcenter</groupId>
<artifactId>xercesImpl</artifactId>
<version>12.3.0</version>
</dependency>
<dependency>
<groupId>teamcenter</groupId>
<artifactId>xml-apis</artifactId>
<version>12.3.0</version>
</dependency>
-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>2.0.3.RELEASE</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.2.0</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext-asian</artifactId>
<version>5.2.0</version>
</dependency>
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.4.0-b180830.0359</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.6</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>com.pjb.springbootjjwt.SpringbootJjwtApplication</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
</project>

@ -0,0 +1,16 @@
package com.pjb.springbootjjwt;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
@SpringBootApplication
//@MapperScan("com.pjb.springbootjjwt.mapper")
public class SpringbootJjwtApplication {
public static void main(String[] args) {
ConfigurableApplicationContext contenxt = SpringApplication.run(SpringbootJjwtApplication.class, args);
}
}

@ -0,0 +1,13 @@
package com.pjb.springbootjjwt.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface PassToken {
boolean required() default true;
}

@ -0,0 +1,13 @@
package com.pjb.springbootjjwt.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface UserLoginToken {
boolean required() default true;
}

@ -0,0 +1,21 @@
package com.pjb.springbootjjwt.config;
import com.pjb.springbootjjwt.interceptor.AuthenticationInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class InterceptorConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(authenticationInterceptor())
.addPathPatterns("/**"); // 拦截所有请求,通过判断是否有 @LoginRequired 注解 决定是否需要登录
}
@Bean
public AuthenticationInterceptor authenticationInterceptor() {
return new AuthenticationInterceptor();
}
}

@ -0,0 +1,10 @@
package com.pjb.springbootjjwt.config;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
@Configuration //说明这是一个配置类
@EnableSwagger2// 该注解开启Swagger2的自动配置
public class SwaggerConfig {
}

@ -0,0 +1,162 @@
package com.pjb.springbootjjwt.control;
import com.alibaba.fastjson.JSONObject;
import com.pjb.springbootjjwt.SpringbootJjwtApplication;
import com.pjb.springbootjjwt.entity.ServerDwgtopdfEntry;
import com.pjb.springbootjjwt.entity.ServerMailEntry;
import com.pjb.springbootjjwt.entity.ServerSignoffEntry;
import com.pjb.springbootjjwt.mapper.MailContentMapper;
import com.pjb.springbootjjwt.service.serviceImpl.IMailServiceImpl;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
@RestController
@RequestMapping("server")
public class CNServerController {
private final Logger logger = LoggerFactory.getLogger(CNServerController.class);
/**发送邮件服务*/
@Autowired
IMailServiceImpl sendMailService;
/**使用RabbitTemplate,这提供了接收/发送等等方法*/
@Autowired
RabbitTemplate rabbitTemplate;
@Autowired
private MailContentMapper mailMapper;
/**
*
* @param mailinfo
* @return
*/
// @PostMapping(value = "/sendmail")
// public Object sendMail(@RequestBody ServerMailEntry mailinfo)
// {
// System.out.println("请求发送邮件");
// logger.warn("请求发送邮件");
// JSONObject jsonObject=new JSONObject();
// if(mailinfo == null){
// System.out.println("发送邮件失败,获取接口参数内容为空!!!");
// logger.warn("发送邮件失败,获取接口参数内容为空!!!");
// jsonObject.put("success", false);
// jsonObject.put("message", "发送邮件失败");
// jsonObject.put("errorMessage","接口入参,参数不正确");
// return jsonObject;
// }
// System.out.println("请求的数据:"+mailinfo.toString());
// logger.warn("请求的数据:"+mailinfo.toString());
// try {
// jsonObject.put("mailInfo",mailinfo.toString());
// if(mailinfo.getFinddb()!=null&&!"".equals(mailinfo.getFinddb())){
// String content = mailMapper.findMailContent(mailinfo.getFinddb(),mailinfo.getTo()[0]);
// if(content!=null&&!"".equals(content)) {
// String[] contents = content.split("#-#");
// String[] tagters = contents[0].split("=");
// String[] references = contents[1].split("=");
// String alltagters = "<p style=\\\"color:#448da6;font-size:18px;\\\">目标:</p><table><tr><td>名称</td><td>类型</td></tr>";
// if (tagters.length > 1) {
// String[] tagter = tagters[1].split("\\|");
// for (int i = 0; i < tagter.length; i++) {
// String[] value = tagter[i].split("#~#");
// alltagters = alltagters + "<tr><td>" + value[0] + "</td><td>" + value[1] + "</td></tr>";
// }
// }
// alltagters = alltagters + "</table><p style=\\\"color:#448da6;font-size:18px;\\\">引用:</p><table><tr><td>名称</td><td>类型</td></tr>";
// if (references.length > 1) {
// String[] tagter = references[1].split("\\|");
// for (int i = 0; i < tagter.length; i++) {
// String[] value = tagter[i].split("#~#");
// alltagters = alltagters + "<tr><td>" + value[0] + "</td><td>" + value[1] + "</td></tr>";
// }
// }
// alltagters = alltagters + "</table></body></html>";
// mailinfo.setContent(mailinfo.getContent() + alltagters);
// }
// }
// sendMailService.sendHtmlMail(mailinfo.getNickname(),mailinfo.getTo(),mailinfo.getCc(),mailinfo.getSubject(),mailinfo.getContent());
// jsonObject.put("success", true);
// jsonObject.put("message", "发送邮件完成");
// System.out.println("邮件内容:"+mailinfo.getContent());
// logger.warn("邮件内容:"+mailinfo.getContent());
// System.out.println("发送邮件完成!!!");
// logger.warn("发送邮件完成!!!");
// } catch (Exception e) {
// System.out.println("发送邮件失败:"+e.getMessage());
// logger.warn("发送邮件失败:",e);
// jsonObject.put("success", false);
// jsonObject.put("message", "发送邮件失败");
// jsonObject.put("errorMessage",e.getMessage());
// }
// System.gc();
// return jsonObject;
// }
// /**
// * 后台dwg转PDF服务转好后直接将转换成功的pdf文件下挂到teamcenter中
// * @param dwgtopdfEntry
// * @return
// */
// @PostMapping(value = "/dwgtopdf")
// public Object dwgToPdf(@RequestBody ServerDwgtopdfEntry dwgtopdfEntry)
// {
// logger.info("请求DWG转PDF");
// logger.info("请求的数据:"+dwgtopdfEntry.toString());
// System.out.println("in dwgtopdf server "+new Date());
// JSONObject jsonObject=new JSONObject();
// System.out.println(dwgtopdfEntry.toString());
// jsonObject.put("data",dwgtopdfEntry);
// String messageId = String.valueOf(UUID.randomUUID());
// String createTime = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
// Map<String,Object> map=new HashMap<>();
// map.put("messageId",messageId);
// map.put("messageData",dwgtopdfEntry);
// map.put("createTime",createTime);
// //将消息携带绑定键值TestDirectRouting 发送到交换机TestDirectExchange
// rabbitTemplate.convertAndSend("SuporDwgtopdfQueueExchange", "SuporDwgtopdfQueueRouting", map);
// logger.info("发送数据到队列成功!!!");
// return jsonObject;
// }
/**
*
* @param signoffEntry
* @return
*/
@PostMapping(value = "/signoff")
public Object signoff(@RequestBody ServerSignoffEntry signoffEntry)
{
logger.info("请求PDF签字");
logger.info("请求的数据:"+signoffEntry.toString());
System.out.println("in signoff server "+new Date());
JSONObject jsonObject=new JSONObject();
System.out.println(signoffEntry.toString());
jsonObject.put("data",signoffEntry);
String messageId = String.valueOf(UUID.randomUUID());
String createTime = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
Map<String,Object> map=new HashMap<>();
map.put("messageId",messageId);
map.put("messageData",signoffEntry);
map.put("createTime",createTime);
//将消息携带绑定键值TestDirectRouting 发送到交换机TestDirectExchange
rabbitTemplate.convertAndSend("SuporSignoffQueueExchange", "SuporSignoffQueueRouting", map);
logger.info("发送数据到队列成功!!!");
return jsonObject;
}
}

@ -0,0 +1,25 @@
package com.pjb.springbootjjwt.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.HashMap;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ServerDwgtopdfEntry implements Serializable {
String[] tccomponentuid;
String[] tcdatasetuid;
String[] pdfuid;
String tccomponentrelation;
String dwgtype;
String dwgreferencename;
String tcoriginalfilename;
String tcdepartmentid;
String taskpuid;
String tcstatus;
HashMap<String,String> signinfos;
}

@ -0,0 +1,19 @@
package com.pjb.springbootjjwt.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ServerMailEntry {
String nickname;
String from;
String[] to;
String[] cc;
String subject;
String title;
String content;
String finddb;
}

@ -0,0 +1,41 @@
package com.pjb.springbootjjwt.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.HashMap;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ServerSignoffEntry implements Serializable {
/**是否签名PDF如果不是PDF则转换成PDF后进行签名*/
boolean issignpdf = true;
boolean isoriginalfilepdf = false;
boolean isoriginalfiledwg = false;
boolean istranslatepdf = false;
/**基地代号*/
String tcdepartmentid;
/**tc中的数据集UID*/
String tcdatasetuid ;
/**tc中的对象UID*/
String tccomponentuid;
/**tc中的签名后文件下挂到对象的关系*/
String tccomponentrelation;
String pdfuid;
String tcpdfrelation;
String tcoriginalname;
String tcoriginalext;
String tcoriginalfilename;
String tcpdffilename;
String tcsigninfofilename;
String dwgtype;
String taskpuid;
//pdf发布状态
String tcstatus;
HashMap<String,String> signinfos;
}

@ -0,0 +1,15 @@
package com.pjb.springbootjjwt.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
String app_secret;
String username;
String password;
}

@ -0,0 +1,82 @@
package com.pjb.springbootjjwt.interceptor;
import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTVerifier;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.exceptions.JWTDecodeException;
import com.auth0.jwt.exceptions.JWTVerificationException;
import com.pjb.springbootjjwt.annotation.PassToken;
import com.pjb.springbootjjwt.annotation.UserLoginToken;
import com.pjb.springbootjjwt.entity.User;
import com.pjb.springbootjjwt.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.lang.reflect.Method;
public class AuthenticationInterceptor implements HandlerInterceptor {
@Autowired
UserService userService;
@Override
public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object object) throws Exception {
String token = httpServletRequest.getHeader("access_token");// 从 http 请求头中取出 token
// 如果不是映射到方法直接通过
if(!(object instanceof HandlerMethod)){
return true;
}
HandlerMethod handlerMethod=(HandlerMethod)object;
Method method=handlerMethod.getMethod();
//检查是否有passtoken注释有则跳过认证
if (method.isAnnotationPresent(PassToken.class)) {
PassToken passToken = method.getAnnotation(PassToken.class);
if (passToken.required()) {
return true;
}
}
//检查有没有需要用户权限的注解
if (method.isAnnotationPresent(UserLoginToken.class)) {
UserLoginToken userLoginToken = method.getAnnotation(UserLoginToken.class);
if (userLoginToken.required()) {
// 执行认证
if (token == null) {
throw new RuntimeException("无token请重新登录");
}
// 获取 token 中的 user id
String userId;
try {
userId = JWT.decode(token).getAudience().get(0);
} catch (JWTDecodeException j) {
throw new RuntimeException("token验证失败");
}
User user = userService.findUserById(userId);
if (user == null) {
throw new RuntimeException("用户不存在,请重新登录");
}
// 验证 token
JWTVerifier jwtVerifier = JWT.require(Algorithm.HMAC256(user.getPassword())).build();
try {
jwtVerifier.verify(token);
} catch (JWTVerificationException e) {
throw new RuntimeException("token验证失败");
}
return true;
}
}
return true;
}
@Override
public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
}
@Override
public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
}
}

@ -0,0 +1,22 @@
package com.pjb.springbootjjwt.interceptor;
import com.alibaba.fastjson.JSONObject;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
@ControllerAdvice
public class GloablExceptionHandler {
@ResponseBody
@ExceptionHandler(Exception.class)
public Object handleException(Exception e) {
String msg = e.getMessage();
if (msg == null || msg.equals("")) {
msg = "服务器出错";
}
JSONObject jsonObject = new JSONObject();
jsonObject.put("message", msg);
return jsonObject;
}
}

@ -0,0 +1,13 @@
package com.pjb.springbootjjwt.mapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import java.util.List;
@Mapper
@Repository
public interface MailContentMapper {
String findMailContent(@Param("puid")String puid,@Param("user_mail")String user_mail);
}

@ -0,0 +1,16 @@
package com.pjb.springbootjjwt.mapper;
import com.pjb.springbootjjwt.entity.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
@Mapper
@Repository
public interface UserMapper {
User findByUsername(@Param("username") String username);
User findByUsernameAndId(@Param("username") String username, @Param("app_secret") String Id);
User findUserById(@Param("app_secret") String Id);
}

@ -0,0 +1,34 @@
package com.pjb.springbootjjwt.service;
import javax.mail.MessagingException;
public interface IMailService {
/**
*
* @param to
* @param subject
* @param content
*/
void sendSimpleMail(String to, String subject, String content);
/**
* HTML
* @param to
* @param subject
* @param content
*/
public void sendHtmlMail(String nickName,String[] to,String[] cc, String subject, String content) throws MessagingException, Exception;
/**
*
* @param to
* @param subject
* @param content
* @param filePath
*/
public void sendAttachmentsMail(String to, String subject, String content, String filePath);
}

@ -0,0 +1,18 @@
package com.pjb.springbootjjwt.service;
import com.auth0.jwt.JWT;
import com.auth0.jwt.algorithms.Algorithm;
import com.pjb.springbootjjwt.entity.User;
import org.springframework.stereotype.Service;
@Service("TokenService")
public class TokenService {
public String getToken(User user) {
String token="";
token = JWT.create().withAudience(user.getApp_secret())// 将 user id 保存到 token 里面
.sign(Algorithm.HMAC256(user.getPassword()));// 以 password 作为 token 的密钥
return token;
}
}

@ -0,0 +1,26 @@
package com.pjb.springbootjjwt.service;
import com.pjb.springbootjjwt.entity.User;
import com.pjb.springbootjjwt.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service("UserService")
public class UserService {
@Autowired
UserMapper userMapper;
public User findByUsername(User user) {
return userMapper.findByUsername(user.getUsername());
}
public User findByUsernameAndId(User user) {
return userMapper.findByUsernameAndId(user.getUsername(), user.getApp_secret());
}
public User findUserById(String userId) {
return userMapper.findUserById(userId);
}
}

@ -0,0 +1,125 @@
package com.pjb.springbootjjwt.service.serviceImpl;
import com.pjb.springbootjjwt.service.IMailService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.FileSystemResource;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service;
import javax.mail.MessagingException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.io.File;
@Service("SendMailService")
public class IMailServiceImpl implements IMailService {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
/**
* Spring Boot 使使
*/
@Autowired
private JavaMailSender mailSender;
/**
* qq
*/
@Value("${spring.mail.from}")
private String from;
/**
*
*
* @param to
* @param subject
* @param content
*/
@Override
public void sendSimpleMail(String to, String subject, String content) {
//创建SimpleMailMessage对象
SimpleMailMessage message = new SimpleMailMessage();
//邮件发送人
message.setFrom(from);
//邮件接收人
message.setTo(to);
//邮件主题
message.setSubject(subject);
//邮件内容
message.setText(content);
//发送邮件
mailSender.send(message);
}
/**
* html
*
* @param to
* @param subject
* @param content
*/
@Override
public void sendHtmlMail(String nickName, String[] to, String[] cc, String subject, String content) throws Exception {
//获取MimeMessage对象
MimeMessage message = mailSender.createMimeMessage();
MimeMessageHelper messageHelper;
messageHelper = new MimeMessageHelper(message, true);
//邮件发送人
if (nickName == null) {
messageHelper.setFrom(from);
} else {
messageHelper.setFrom(new InternetAddress(from, nickName));
}
//邮件接收人
messageHelper.setTo(to);
//邮件抄送人
if (cc != null) {
messageHelper.setCc(cc);
}
//邮件主题
messageHelper.setSubject(subject);
//邮件内容html格式
String contents = content.replace("\\\\","\\");
messageHelper.setText(content, true);
//发送
mailSender.send(messageHelper.getMimeMessage());
}
/**
*
*
* @param to
* @param subject
* @param content
* @param filePath
*/
@Override
public void sendAttachmentsMail(String to, String subject, String content, String filePath) {
MimeMessage message = mailSender.createMimeMessage();
try {
MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.setFrom(from);
helper.setTo(to);
helper.setSubject(subject);
helper.setText(content, true);
FileSystemResource file = new FileSystemResource(new File(filePath));
String fileName = filePath.substring(filePath.lastIndexOf(File.separator));
helper.addAttachment(fileName, file);
mailSender.send(message);
//日志信息
logger.info("邮件已经发送。");
} catch (MessagingException e) {
logger.error("发送邮件时发生异常!", e);
}
}
}

@ -0,0 +1,29 @@
{
"properties": [
{
"name": "teamcenter.url",
"type": "java.lang.String",
"description": "Description for teamcenter.url."
},
{
"name": "teamcenter.user",
"type": "java.lang.String",
"description": "Description for teamcenter.user."
},
{
"name": "teamcenter.pwd",
"type": "java.lang.String",
"description": "Description for teamcenter.pwd."
},
{
"name": "teamcenter.fmsurl",
"type": "java.lang.String",
"description": "Description for teamcenter.fmsurl."
},
{
"name": "teamcenter.fcccash",
"type": "java.lang.String",
"description": "Description for teamcenter.fcccash."
}
]
}

@ -0,0 +1,16 @@
debug: false
server:
port: 9293
spring:
application:
name: ConnorServer
rabbitmq:
host: localhost
port: 5672
username: admin
password: admin
#虚拟host 可以不设置,使用server默认host
virtual-host: suporserver
##mybatis配置文件
#mybatis:
# config-location: classpath:mybatis.xml

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.pjb.springbootjjwt.mapper.MailContentMapper">
<select id="findMailContent" parameterType="java.lang.String" resultType="string">
select mailcontent
from connor_poll_mail
where task_puid = #{puid} and user_mail=#{user_mail} and end_date is null
</select>
</mapper>

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.pjb.springbootjjwt.mapper.UserMapper">
<select id="findByUsername" resultType="com.pjb.springbootjjwt.entity.User">
SELECT app_secret, username, password
FROM tcoauser
where username = #{username}
</select>
<select id="findByUsernameAndId" resultType="com.pjb.springbootjjwt.entity.User">
SELECT app_secret, username, password
FROM tcoauser
where username = #{username}
and app_secret = #{app_secret}
</select>
<select id="findUserById" resultType="com.pjb.springbootjjwt.entity.User">
SELECT app_secret, username, password
FROM tcoauser
where app_secret = #{app_secret}
</select>
</mapper>

@ -0,0 +1,193 @@
<!--<?xml version="1.0" encoding="UTF-8"?>-->
<!--&lt;!&ndash; 日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL如果设置为WARN则低于WARN的信息都不会输出 &ndash;&gt;-->
<!--&lt;!&ndash; scan:当此属性设置为true时配置文档如果发生改变将会被重新加载默认值为true &ndash;&gt;-->
<!--&lt;!&ndash; scanPeriod:设置监测配置文档是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。-->
<!-- 当scan为true时此属性生效。默认的时间间隔为1分钟。 &ndash;&gt;-->
<!--&lt;!&ndash; debug:当此属性设置为true时将打印出logback内部日志信息实时查看logback运行状态。默认值为false。 &ndash;&gt;-->
<!--<configuration scan="true" scanPeriod="10 seconds">-->
<!-- <contextName>logback</contextName>-->
<!-- &lt;!&ndash; name的值是变量的名称value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义后可以使“${}”来使用变量。 &ndash;&gt;-->
<!-- <property name="log.path" value="D:/new_tcserver/logs" />-->
<!-- &lt;!&ndash;0. 日志格式和颜色渲染 &ndash;&gt;-->
<!-- &lt;!&ndash; 彩色日志依赖的渲染类 &ndash;&gt;-->
<!-- <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" />-->
<!-- <conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" />-->
<!-- <conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" />-->
<!-- &lt;!&ndash; 彩色日志格式 &ndash;&gt;-->
<!-- <property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(-&#45;&#45;){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>-->
<!-- &lt;!&ndash;1. 输出到控制台&ndash;&gt;-->
<!-- <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">-->
<!-- &lt;!&ndash;此日志appender是为开发使用只配置最底级别控制台输出的日志级别是大于或等于此级别的日志信息&ndash;&gt;-->
<!-- <filter class="ch.qos.logback.classic.filter.ThresholdFilter">-->
<!-- <level>info</level>-->
<!-- </filter>-->
<!-- <encoder>-->
<!-- <Pattern>${CONSOLE_LOG_PATTERN}</Pattern>-->
<!-- &lt;!&ndash; 设置字符集 &ndash;&gt;-->
<!-- <charset>GBK</charset>-->
<!-- </encoder>-->
<!-- </appender>-->
<!-- &lt;!&ndash;2. 输出到文档&ndash;&gt;-->
<!-- &lt;!&ndash; 2.1 level为 DEBUG 日志,时间滚动输出 &ndash;&gt;-->
<!-- <appender name="DEBUG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">-->
<!-- &lt;!&ndash; 正在记录的日志文档的路径及文档名 &ndash;&gt;-->
<!-- <file>${log.path}/web_debug.log</file>-->
<!-- &lt;!&ndash;日志文档输出格式&ndash;&gt;-->
<!-- <encoder>-->
<!-- <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>-->
<!-- <charset>UTF-8</charset> &lt;!&ndash; 设置字符集 &ndash;&gt;-->
<!-- </encoder>-->
<!-- &lt;!&ndash; 日志记录器的滚动策略,按日期,按大小记录 &ndash;&gt;-->
<!-- <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">-->
<!-- &lt;!&ndash; 日志归档 &ndash;&gt;-->
<!-- <fileNamePattern>${log.path}/web-debug-%d{yyyy-MM-dd}.%i.log</fileNamePattern>-->
<!-- <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">-->
<!-- <maxFileSize>100MB</maxFileSize>-->
<!-- </timeBasedFileNamingAndTriggeringPolicy>-->
<!-- &lt;!&ndash;日志文档保留天数&ndash;&gt;-->
<!-- <maxHistory>15</maxHistory>-->
<!-- </rollingPolicy>-->
<!-- &lt;!&ndash; 此日志文档只记录debug级别的 &ndash;&gt;-->
<!-- <filter class="ch.qos.logback.classic.filter.LevelFilter">-->
<!-- <level>debug</level>-->
<!-- <onMatch>ACCEPT</onMatch>-->
<!-- <onMismatch>DENY</onMismatch>-->
<!-- </filter>-->
<!-- </appender>-->
<!-- &lt;!&ndash; 2.2 level为 INFO 日志,时间滚动输出 &ndash;&gt;-->
<!-- <appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">-->
<!-- &lt;!&ndash; 正在记录的日志文档的路径及文档名 &ndash;&gt;-->
<!-- <file>${log.path}/web_info.log</file>-->
<!-- &lt;!&ndash;日志文档输出格式&ndash;&gt;-->
<!-- <encoder>-->
<!-- <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>-->
<!-- <charset>UTF-8</charset>-->
<!-- </encoder>-->
<!-- &lt;!&ndash; 日志记录器的滚动策略,按日期,按大小记录 &ndash;&gt;-->
<!-- <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">-->
<!-- &lt;!&ndash; 每天日志归档路径以及格式 &ndash;&gt;-->
<!-- <fileNamePattern>${log.path}/web-info-%d{yyyy-MM-dd}.%i.log</fileNamePattern>-->
<!-- <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">-->
<!-- <maxFileSize>100MB</maxFileSize>-->
<!-- </timeBasedFileNamingAndTriggeringPolicy>-->
<!-- &lt;!&ndash;日志文档保留天数&ndash;&gt;-->
<!-- <maxHistory>15</maxHistory>-->
<!-- </rollingPolicy>-->
<!-- &lt;!&ndash; 此日志文档只记录info级别的 &ndash;&gt;-->
<!-- <filter class="ch.qos.logback.classic.filter.LevelFilter">-->
<!-- <level>info</level>-->
<!-- <onMatch>ACCEPT</onMatch>-->
<!-- <onMismatch>DENY</onMismatch>-->
<!-- </filter>-->
<!-- </appender>-->
<!-- &lt;!&ndash; 2.3 level为 WARN 日志,时间滚动输出 &ndash;&gt;-->
<!-- <appender name="WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">-->
<!-- &lt;!&ndash; 正在记录的日志文档的路径及文档名 &ndash;&gt;-->
<!-- <file>${log.path}/web_warn.log</file>-->
<!-- &lt;!&ndash;日志文档输出格式&ndash;&gt;-->
<!-- <encoder>-->
<!-- <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>-->
<!-- <charset>UTF-8</charset> &lt;!&ndash; 此处设置字符集 &ndash;&gt;-->
<!-- </encoder>-->
<!-- &lt;!&ndash; 日志记录器的滚动策略,按日期,按大小记录 &ndash;&gt;-->
<!-- <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">-->
<!-- <fileNamePattern>${log.path}/web-warn-%d{yyyy-MM-dd}.%i.log</fileNamePattern>-->
<!-- <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">-->
<!-- <maxFileSize>100MB</maxFileSize>-->
<!-- </timeBasedFileNamingAndTriggeringPolicy>-->
<!-- &lt;!&ndash;日志文档保留天数&ndash;&gt;-->
<!-- <maxHistory>15</maxHistory>-->
<!-- </rollingPolicy>-->
<!-- &lt;!&ndash; 此日志文档只记录warn级别的 &ndash;&gt;-->
<!-- <filter class="ch.qos.logback.classic.filter.LevelFilter">-->
<!-- <level>warn</level>-->
<!-- <onMatch>ACCEPT</onMatch>-->
<!-- <onMismatch>DENY</onMismatch>-->
<!-- </filter>-->
<!-- </appender>-->
<!-- &lt;!&ndash; 2.4 level为 ERROR 日志,时间滚动输出 &ndash;&gt;-->
<!-- <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">-->
<!-- &lt;!&ndash; 正在记录的日志文档的路径及文档名 &ndash;&gt;-->
<!-- <file>${log.path}/web_error.log</file>-->
<!-- &lt;!&ndash;日志文档输出格式&ndash;&gt;-->
<!-- <encoder>-->
<!-- <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>-->
<!-- <charset>UTF-8</charset> &lt;!&ndash; 此处设置字符集 &ndash;&gt;-->
<!-- </encoder>-->
<!-- &lt;!&ndash; 日志记录器的滚动策略,按日期,按大小记录 &ndash;&gt;-->
<!-- <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">-->
<!-- <fileNamePattern>${log.path}/web-error-%d{yyyy-MM-dd}.%i.log</fileNamePattern>-->
<!-- <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">-->
<!-- <maxFileSize>100MB</maxFileSize>-->
<!-- </timeBasedFileNamingAndTriggeringPolicy>-->
<!-- &lt;!&ndash;日志文档保留天数&ndash;&gt;-->
<!-- <maxHistory>15</maxHistory>-->
<!-- </rollingPolicy>-->
<!-- &lt;!&ndash; 此日志文档只记录ERROR级别的 &ndash;&gt;-->
<!-- <filter class="ch.qos.logback.classic.filter.LevelFilter">-->
<!-- <level>ERROR</level>-->
<!-- <onMatch>ACCEPT</onMatch>-->
<!-- <onMismatch>DENY</onMismatch>-->
<!-- </filter>-->
<!-- </appender>-->
<!-- &lt;!&ndash;-->
<!-- <logger>用来设置某一个包或者具体的某一个类的日志打印级别、-->
<!-- 以及指定<appender>。<logger>仅有一个name属性-->
<!-- 一个可选的level和一个可选的addtivity属性。-->
<!-- name:用来指定受此logger约束的某一个包或者具体的某一个类。-->
<!-- level:用来设置打印级别大小写无关TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF-->
<!-- 还有一个特俗值INHERITED或者同义词NULL代表强制执行上级的级别。-->
<!-- 如果未设置此属性那么当前logger将会继承上级的级别。-->
<!-- addtivity:是否向上级logger传递打印信息。默认是true。-->
<!-- <logger name="org.springframework.web" level="info"/>-->
<!-- <logger name="org.springframework.scheduling.annotation.ScheduledAnnotationBeanPostProcessor" level="INFO"/>-->
<!-- &ndash;&gt;-->
<!-- &lt;!&ndash;-->
<!-- 使用mybatis的时候sql语句是debug下才会打印而这里我们只配置了info所以想要查看sql语句的话有以下两种操作-->
<!-- 第一种把<root level="info">改成<root level="DEBUG">这样就会打印sql不过这样日志那边会出现很多其他消息-->
<!-- 第二种就是单独给dao下目录配置debug模式代码如下这样配置sql语句会打印其他还是正常info级别-->
<!-- 【logging.level.org.mybatis=debug logging.level.dao=debug】-->
<!-- &ndash;&gt;-->
<!-- &lt;!&ndash;-->
<!-- root节点是必选节点用来指定最基础的日志输出级别只有一个level属性-->
<!-- level:用来设置打印级别大小写无关TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF-->
<!-- 不能设置为INHERITED或者同义词NULL。默认是DEBUG-->
<!-- 可以包含零个或多个元素标识这个appender将会添加到这个logger。-->
<!-- &ndash;&gt;-->
<!-- &lt;!&ndash; 4. 最终的策略 &ndash;&gt;-->
<!-- &lt;!&ndash; 4.1 开发环境:打印控制台&ndash;&gt;-->
<!-- <springProfile name="dev">-->
<!-- <logger name="com.sdcm.pmp" level="debug"/>-->
<!-- </springProfile>-->
<!-- <root level="info">-->
<!-- <appender-ref ref="CONSOLE" />-->
<!-- <appender-ref ref="DEBUG_FILE" />-->
<!-- <appender-ref ref="INFO_FILE" />-->
<!-- <appender-ref ref="WARN_FILE" />-->
<!-- <appender-ref ref="ERROR_FILE" />-->
<!-- </root>-->
<!-- &lt;!&ndash; 4.2 生产环境:输出到文档-->
<!-- <springProfile name="pro">-->
<!-- <root level="info">-->
<!-- <appender-ref ref="CONSOLE" />-->
<!-- <appender-ref ref="DEBUG_FILE" />-->
<!-- <appender-ref ref="INFO_FILE" />-->
<!-- <appender-ref ref="ERROR_FILE" />-->
<!-- <appender-ref ref="WARN_FILE" />-->
<!-- </root>-->
<!-- </springProfile> &ndash;&gt;-->
<!--</configuration>-->

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<settings>
<setting name="logImpl" value="SLF4J"/>
<!-- 开启驼峰命名转换 Table(create_time) -> Entity(createTime) -->
<setting name="mapUnderscoreToCamelCase" value="false"/>
</settings>
</configuration>

@ -0,0 +1,26 @@
[
{"departmentid":"wuhan",
"isleft": true,
"pdfsizes": [
{
"sizename": "A4",
"wmin": 123,
"wmax": 200,
"hmin": 123,
"hmax": 124,
"poisions":[
{
"property": "设计",
"xposition": 12,
"yposition": 25
},
{
"property": "审核",
"xposition": 12,
"yposition": 25
}
]
}
]
}
]

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save