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.

222 lines
5.4 KiB

#include "util.h"
using namespace Teamcenter;
string getYMD(date_t dat);
void AccessDesignTask(vector<string> vecs);
void getSch(tag_t task, bool *flag, tag_t *sch, int level);
int chint_Design_Task(tag_t task)
{
tag_t root_task;
int t_cnt;
tag_t *t_tag;
POM_AM__set_application_bypass(true);
EPM_ask_root_task(task, &root_task);
/*TC_argument_list_t * arguments = arguments;
int arg_cnt = TC_number_of_arguments(arguments);
char *temp_key, *temp_val;
map<string, string> texts;
vector<string> vec_tags;
for (int i = 0; i < arg_cnt; i++)
{
ITK_ask_argument_named_value(TC_next_argument(arguments), &temp_key, &temp_val);
if (temp_key == NULL || temp_key == "")
continue;
//vec_tags.push_back()
texts[temp_key] = temp_val;
printf("参数:%s,值:%s\r\n",temp_key,temp_val);
}
*/
tag_t *s_tasks; //时间表任务
int s_cnt;
AOM_ask_value_tags(root_task,"fnd0RootScheduleTask",&s_cnt,&s_tasks);
printf("当前流程一共挂载%d个时间表任务\r\n",s_cnt);
tag_t sch_task;
char *s_name;//时间表任务名称
bool flag = false;
for (auto i = 0; i < s_cnt; i++)
{
AOM_ask_value_string(s_tasks[i], "object_name", &s_name);
LINFO<<"时间表任务名称:"<<s_name;
//if (texts.find(s_name) == texts.end())
// continue;
//ITEM_rev_delete_bvr
getSch(s_tasks[i], &flag, &sch_task, 0);
if (sch_task != NULL)
{
int cnt;
int *levels;
char**relations;
tag_t folder, *refs;
char *folder_Name, *object_type;
tag_t pro_Folder;
bool flag2 = true;
ITKCALL(WSOM_where_referenced2(sch_task, 1, &cnt, &levels, &refs, &relations));
for (auto i = 0; i < cnt; i++)
{
ITKCALL(AOM_ask_value_string(refs[i], "object_name", &folder_Name));
ITKCALL(AOM_ask_value_string(refs[i], "object_type", &object_type));
printf("object_name:%s|object_type:%s\r\n", folder_Name, object_type);
if (isTypeOf(refs[i], "Folder") && strcmp("项目计划", folder_Name) == 0)
{
printf("找到项目计划文件夹\r\n");
folder = refs[i];
ITKCALL(WSOM_where_referenced2(folder, 1, &cnt, &levels, &refs, &relations));
for (auto j = 0; j < cnt; j++)
{
if (isTypeOf(refs[j], "ZT2_ProjectItem"))
{
pro_Folder = refs[j];
flag2 = false;
break;
}
}
break;
}
}
if (flag2)
{
printf("找不到项目零组件");
continue;
}
date_t ISDD, IEDD;
AOM_ask_value_date(sch_task, "fnd0SSTActualStart", &ISDD);
AOM_ask_value_date(sch_task, "fnd0SSTActualFinish", &IEDD);
char *item_id;
AOM_ask_value_string(pro_Folder, "item_id", &item_id);
Item *item = BusinessObjectRef<Item>(pro_Folder);
vector<tag_t> tasks_vec;
vector<int> tasks_cnt;
item->getTagArray("zt2_Tasks", tasks_vec, tasks_cnt);
printf("设计任务个数:%d\r\n",tasks_cnt.size());
vector<string> vecs;
for (auto j = 0; j < tasks_cnt.size(); j++)
{
char *acName, *acNo, *plansEnd, *planStart;
AOM_ask_value_string(tasks_vec[j], "zt2_activeName", &acName);
AOM_ask_value_string(tasks_vec[j], "zt2_activeNo", &acNo);
printf("%d-%s|%s\r\n",j,acName,acNo);
vecs.push_back(item_id);
vecs.push_back(acNo);
vecs.push_back(acName);
vecs.push_back(getYMD(ISDD));
vecs.push_back(getYMD(IEDD));
}
AccessDesignTask(vecs);
}
}
return 0;
}
void getSch(tag_t task, bool *flag, tag_t *sch, int level)
{
char *folder_Name, *object_type;
ITKCALL(AOM_ask_value_string(task, "object_name", &folder_Name));
ITKCALL(AOM_ask_value_string(task, "object_type", &object_type));
//printf("第%d层object_name:%s|object_type:%s|flag:%d \r\n",level,folder_Name,object_type,*flag);
if (*flag)
return;
tag_t *refs;
int cnt = 0, *levels;
char **relations;
ITKCALL(WSOM_where_referenced2(task, 1, &cnt, &levels, &refs, &relations));
//printf("level:%d|cnt:%d\r\n",level,cnt);
if (cnt == 0)
return;
for (auto i = 0; i<cnt; i++)
{
printf("开始遍历\r\n");
if (isTypeOf(refs[i], "Schedule"))
{
*sch = refs[i];
*flag = true;
break;
}
else if (isTypeOf(refs[i], "ScheduleTask"))
{
getSch(refs[i], flag, sch, level + 1);
}
}
}
string getYMD(date_t dat)
{
int year = dat.year;
int month = dat.month;
int day = dat.day;
printf("year-month-day:%d-%d-%d\r\n",year,month,day);
stringstream ss;
ss.str("");
ss << year;
if (month < 9)
ss << "0" << (month+1);
else
ss << (month + 1);
if (day < 10)
ss << "0" << day;
else
ss << day;
return ss.str();
}
//访问
void AccessDesignTask(vector<string> vecs)
{
printf("vecs size:%d\r\n", vecs.size());
if (vecs.size() % 5 != 0 && vecs.size()!=0)
{
printf("传入的参数不正确,请检查");
return;
}
string AUFNR = vecs[0]; //网络编码
string VORNR = vecs[1]; //活动编码
string LTXA1 = vecs[2]; //活动名称
string ISDD = vecs[3]; //实际开始时间
string IEDD = vecs[4]; //实际完成时间
printf("[AUFNR=%s;VORNR=%s;LTXA1=%s;ISDD=%s;IEDD=%s]\r\n", AUFNR, VORNR, LTXA1, ISDD, IEDD);
vector<string> isRep;
string filesStr;
filesStr.append("\"");
for (int i = 0; i<vecs.size(); i++)
{
isRep.push_back(vecs[i]);
filesStr.append(vecs[i].c_str());
if (i == vecs.size() - 1)
continue;
filesStr.append(";");
}
filesStr.append("\"");
char cmd[256] = "";
char * tc_root_dir = getenv("TC_ROOT");
string execStr;
execStr.append("cmd.exe /c java -jar ");
execStr.append(tc_root_dir);
execStr.append("\\bin\\DesignTask.jar ");
execStr.append(filesStr);
printf("\n%s\n", execStr.c_str());
system(execStr.c_str());
}
int deleteBom(vector<string> vec)
{
for(auto i=0;i<vec.size();i++)
{
}
return 0;
}