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
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;
|
|
} |