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

252 lines
10 KiB

This file contains ambiguous Unicode characters!

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

#include <string>
#include "libxl.h"
#include <io.h>
#include <direct.h>
#include <cfm/cfm.h>
#include <wchar.h>
#include <locale>
#include <codecvt>
#include <chrono>
#include <Windows.h>
#include <epm/epm.h>
#include <tccore/aom.h>
#include <thread>
#include <regex>
#include <res\reservation.h>
#include <fstream>
#include <iostream>
#include <tccore/aom_prop.h>
#include "kutil.h"
using namespace std;
//int Connor_SetECNTaskNodes(EPM_action_message_t msg) {
// //检查文件夹和文件是否存在 不存在则创建
// const char* directory_path = "D:\\log";
// const char* file_path = "D:\\log\\Connor_SetECNTaskNodes.log";
// CreateDirectoryAndFile(directory_path, file_path);
// //打开日志文件,设置为追加模式
// auto logFile = std::make_unique<std::ofstream>("D:\\log\\Connor_SetECNTaskNodes.log", std::ios::app);
// logFile->is_open();
// //获取当前时间
// auto now = std::chrono::system_clock::now();
// std::time_t time1 = std::chrono::system_clock::to_time_t(now);
// std::string timeStr = std::ctime(&time1);
// *logFile << "[" << timeStr.substr(0, timeStr.size() - 1) << "] ";
// *logFile << "=========================Aks_Autosignuser===================" << std::endl;
// *logFile << "===================================" << std::endl;
// *logFile << "开始执行是否跳过节点Handler 开始" << std::endl;
// *logFile << "===================================" << std::endl;
// tag_t rootTask_tag = NULLTAG;
// tag_t task = NULLTAG;
// tag_t* attachments = NULLTAG;
// char* arg = NULL, * argflag = NULL, * argvalue = NULL;
// int arg_cnt = TC_number_of_arguments(msg.arguments);
// char* cheakName = NULL;
// task = msg.task;
// ITKCALL(EPM_ask_root_task(task, &rootTask_tag));
// if (arg_cnt > 0)
// {
// for (int i = 0; i < arg_cnt; i++)
// {
// arg = TC_next_argument(msg.arguments);
// ITKCALL(ITK_ask_argument_named_value((const char*)arg, &argflag, &argvalue));
// if (strcmp(argflag, "checkTaskNameInForm") == 0) {
// if (argvalue != NULL)
// {
// printf("获取的值%s:", argvalue);
// cheakName = argvalue;
//
// }
// }
// }
// /*
// * 去目标下的变更通知版本LD6_CNRevision下任务分配表关系LD6_WorkFRelation
// * 下寻找类型为LD6_CNForm或者LD6_CIForm,获取表单上的表属性ld6_ChangeTable
// * 找到表属性上的表行LD6_TableRow获取表行上ld6_ChangeTaskName属性值与此handler的
// * checkTaskNameInForm参数值相同的行并找到此行上ld6_YNChange的属性值如果为是
// * 则将此任务节点启动,如果为否,则将此节点提升或完成
// */
// int doc_num = 0;
// tag_t* doc_tags = NULLTAG;
// ITKCALL(EPM_ask_attachments(rootTask_tag, EPM_target_attachment, &doc_num, &doc_tags));
// for (int i = 0; i < doc_num; i++)
// {
// char* type = NULL;
// ITKCALL(AOM_ask_value_string(doc_tags[i], "object_type", &type));
// if (strcmp(type, "LD6_CNRevision") == 0)
// {
// //查找指定关系
// printf("查找指定关系\n");
// int gx_num; tag_t* gx_obj;
// ITKCALL(AOM_ask_value_tags(doc_tags[i], "LD6_WorkFRelation", &gx_num, &gx_obj));
// for (int j = 0; j < gx_num; j++)
// {
// char* form = NULL;
// ITKCALL(AOM_ask_value_string(gx_obj[i], "object_type", &form));
// printf("form=&s\n", form);
// if (strcmp(form, "LD6_CNForm") == 0 || strcmp(form, "LD6_CIForm") == 0)
// {
// printf("获取表格属性");
// //获取表格属性
// int rownum; tag_t* tableRownum = NULL;
// ITKCALL(AOM_ask_table_rows(gx_obj[i], "ld6_ChangeTable", &rownum, &tableRownum));
// for (int z = 0; z < rownum; z++)
// {
// tag_t rowTag = tableRownum[z];
// char* taskName = NULL;
// ITKCALL(AOM_ask_value_string(rowTag, "ld6_ChangeTaskName", &taskName));
// printf("taskName=%s\n", taskName);
// if (strcmp(taskName, cheakName) == 0)
// {
// //获取属性值
// char* isSkip = NULL;
// ITKCALL(AOM_ask_value_string(rowTag, "ld6_YNChange", &isSkip));
// printf("获取到ld6_YNChange的属性为%s\n", isSkip);
// if (strcmp(isSkip, "是") == 0)
// {
// //执行结束
// return ITK_ok;
// }
// else
// {
// //跳过当前节点
// printf("开始提升节点\n");
// tag_t* process = NULLTAG;//流程节点
// int processnum;//节点数量
// ITKCALL(AOM_ask_value_tags(rootTask_tag, "fnd0StartedTasks", &processnum, &process));
// ITKCALL(EPM_promote_task(process[0], ""));
// //执行结束
// return ITK_ok;
//
// }
// break;
// }
// }
// break;
// }
// }
// }
// }
// }
// else
// {
// EMH_store_error_s1(EMH_severity_user_error, EMH_USER_error_base, "流程参数设置有误,请检查后重新执行");
// return -1;
// }
//
//
// return ITK_ok;
//}
// Assuming the necessary headers and definitions for ITKCALL, TC_number_of_arguments, etc. are included elsewhere
int Connor_SetECNTaskNodes(EPM_action_message_t msg) {
// Check if the directory and file exist, create them if they don't
const char* directory_path = "D:\\log";
const char* file_path = "D:\\log\\Connor_SetECNTaskNodes.log";
CreateDirectoryAndFile(directory_path, file_path);
// Open the log file in append mode
auto logFile = std::make_unique<std::ofstream>(file_path, std::ios::app);
if (!logFile->is_open()) {
std::cerr << "Failed to open log file." << std::endl;
return -1;
}
// Get the current time
auto now = std::chrono::system_clock::now();
std::time_t time1 = std::chrono::system_clock::to_time_t(now);
std::string timeStr = std::ctime(&time1);
timeStr = timeStr.substr(0, timeStr.size() - 1); // Remove trailing newline
// Log the start of the function
*logFile << "[" << timeStr << "] ";
*logFile << "=========================Connor_SetECNTaskNodes===================" << std::endl;
*logFile << "===================================" << std::endl;
*logFile << "开始执行是否跳过节点Handler 开始" << std::endl;
*logFile << "===================================" << std::endl;
tag_t rootTask_tag = NULLTAG;
tag_t task = NULLTAG;
tag_t* attachments = NULLTAG;
char* arg = NULL, * argflag = NULL, * argvalue = NULL;
int arg_cnt = TC_number_of_arguments(msg.arguments);
char* cheakName = NULL;
task = msg.task;
ITKCALL(EPM_ask_root_task(task, &rootTask_tag));
if (arg_cnt > 0) {
*logFile << "[" << timeStr << "] " << "解析参数开始" << std::endl;
for (int i = 0; i < arg_cnt; i++) {
arg = TC_next_argument(msg.arguments);
ITKCALL(ITK_ask_argument_named_value((const char*)arg, &argflag, &argvalue));
if (strcmp(argflag, "checkTaskNameInForm") == 0) {
if (argvalue != NULL) {
*logFile << "[" << timeStr << "] " << "获取的值: " << argvalue << std::endl;
cheakName = argvalue;
}
}
}
*logFile << "[" << timeStr << "] " << "解析参数结束" << std::endl;
int doc_num = 0;
tag_t* doc_tags = NULLTAG;
ITKCALL(EPM_ask_attachments(rootTask_tag, EPM_target_attachment, &doc_num, &doc_tags));
for (int i = 0; i < doc_num; i++) {
char* type = NULL;
ITKCALL(AOM_ask_value_string(doc_tags[i], "object_type", &type));
if (strcmp(type, "LD6_CNRevision") == 0) {
*logFile << "[" << timeStr << "] " << "查找指定关系开始" << std::endl;
int gx_num; tag_t* gx_obj;
ITKCALL(AOM_ask_value_tags(doc_tags[i], "LD6_WorkFRelation", &gx_num, &gx_obj));
for (int j = 0; j < gx_num; j++) {
char* form = NULL;
ITKCALL(AOM_ask_value_string(gx_obj[j], "object_type", &form));
*logFile << "[" << timeStr << "] " << "表单类型: " << form << std::endl;
if (strcmp(form, "LD6_CNForm") == 0 || strcmp(form, "LD6_CIForm") == 0) {
*logFile << "[" << timeStr << "] " << "获取表格属性开始" << std::endl;
int rownum; tag_t* tableRownum = NULL;
ITKCALL(AOM_ask_table_rows(gx_obj[j], "ld6_ChangeTable", &rownum, &tableRownum));
for (int z = 0; z < rownum; z++) {
tag_t rowTag = tableRownum[z];
char* taskName = NULL;
ITKCALL(AOM_ask_value_string(rowTag, "ld6_ChangeTaskName", &taskName));
*logFile << "[" << timeStr << "] " << "表行任务名称: " << taskName << std::endl;
if (strcmp(taskName, cheakName) == 0) {
char* isSkip = NULL;
ITKCALL(AOM_ask_value_string(rowTag, "ld6_YNChange", &isSkip));
*logFile << "[" << timeStr << "] " << "获取到ld6_YNChange的属性值: " << isSkip << std::endl;
if (strcmp(isSkip, "") == 0) {
*logFile << "[" << timeStr << "] " << "执行结束" << std::endl;
return ITK_ok;
}
else {
*logFile << "[" << timeStr << "] " << "开始提升节点" << std::endl;
ITKCALL(EPM_promote_task(task, ""));
*logFile << "[" << timeStr << "] " << "节点提升成功" << std::endl;
*logFile << "[" << timeStr << "] " << "执行结束" << std::endl;
return ITK_ok;
}
break;
}
}
*logFile << "[" << timeStr << "] " << "获取表格属性结束" << std::endl;
break;
}
}
*logFile << "[" << timeStr << "] " << "查找指定关系结束" << std::endl;
}
}
}
else {
*logFile << "[" << timeStr << "] " << "流程参数设置有误,请检查后重新执行" << std::endl;
EMH_store_error_s1(EMH_severity_user_error, EMH_USER_error_base, "流程参数设置有误,请检查后重新执行");
return -1;
}
*logFile << "[" << timeStr << "] " << "函数执行结束" << std::endl;
return ITK_ok;
}