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.

213 lines
5.2 KiB

This file contains ambiguous Unicode characters!

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

#include <tc/tc.h>
#include "epm_handler_common.h"
#include <ict/ict_userservice.h>
#include <tccore/custom.h>
#include <epm/epm_toolkit_tc_utils.h>
#include <tccore/aom.h>
#include <tccore/aom_prop.h>
#include <tccore/item.h>
#include <bom/bom.h>
#include "ps/ps.h"
#include "ps/vrule.h"
#include "sstream"
#include <tccore/grm.h>
#include "epm/epm.h"
#include "sa/sa.h"
//#include "libxl.h"
#include <map>
#include "epm/signoff.h"
#include <ctime>
#include <vector>
#include <locale>
#include <codecvt>
#include "ae/dataset.h"
#include <iostream>
#include <regex>
#include "string_utils.h"
#include <list>
#include "tc_log.h"
#include <tc/tc.h>
#include "epm_handler_common.h"
#include <ict/ict_userservice.h>
#include <tccore/custom.h>
#include <epm/epm_toolkit_tc_utils.h>
#include <tccore/aom.h>
#include <tccore/aom_prop.h>
#include <tccore/item.h>
#include <bom/bom.h>
#include <tccore/grm.h>
#include "epm/epm.h"
//#include "libxl.h"
#include <iostream>
#include <regex>
using namespace std;
typedef struct
{
string ITEM_ID;//id号
}PRO_STRUCT;
int BOMDiscontinuation(EPM_rule_message_t msg)
{
cout<<"检查BOM能否发起物料停用流程"<<endl;
int ifail = ITK_ok;
EPM_decision_t decision = EPM_go;
tag_t task_tag = NULLTAG, rootTask_tag = NULLTAG, *attachments = NULLTAG,*revision_list=NULLTAG,bom_window_tag=NULLTAG,top_line_tag=NULLTAG,*c_line_tags=NULLTAG;
int arg_cnt = 0, i = 0, att_cnt = 0,c_line_count=0,item_num=0;
int release_nums=0,revtion_nums=0;
tag_t *release_list=NULLTAG;
tag_t *item=NULLTAG;
char* object_type;
//获取当前触发的任务
task_tag = msg.task;
//获取根流程节点
ifail = EPM_ask_root_task(task_tag, &rootTask_tag);
//获取目标引用对象
ifail = EPM_ask_attachments(rootTask_tag, EPM_target_attachment, &att_cnt, &attachments);
//循环目标对象
cout<<"数量------->"<<att_cnt<<endl;
vector<PRO_STRUCT> item_vec;
for (i = 0; i < att_cnt; i++)
{
//获得该bom下所有子集
ITKCALL(ifail=AOM_ask_value_string(attachments[i],"object_type",&object_type));
if(strcmp(object_type,"BOMView Revision")==0)
{
ITKCALL( ifail = BOM_create_window(&bom_window_tag));//创建window视图
ITKCALL(ifail = BOM_set_window_top_line_bvr(bom_window_tag,attachments[i],&top_line_tag));//获取顶层bomline
ITKCALL(ifail =BOM_line_ask_all_child_lines(top_line_tag,&c_line_count,&c_line_tags));
for (int j=0;j<c_line_count;j++)
{
//获得所在版本的物料
ITKCALL(ifail=AOM_ask_value_tags(c_line_tags[j],"bl_child_item",&item_num,&item));
ITKCALL(ifail=AOM_ask_value_string(item[0],"object_type",&object_type));
if(strcmp(object_type,"JK8Material")==0)//LP2_Design_Part JK8Material
{
ITKCALL( ifail=AOM_ask_value_tags(item[0],"revision_list",&revtion_nums,&revision_list));
int mark=0;
for (int k=0;k<revtion_nums;k++)
{
PRO_STRUCT elements ;
ITKCALL( ifail=AOM_ask_value_tags(revision_list[k],"release_status_list",&release_nums,&release_list));
//TODO 如果存在object_name 为jk8Disabled即为失效状态的物料就提示
for (int f=0;f<release_nums;f++)
{
AOM_ask_value_string(release_list[f],"object_name",&object_type);
if(strcmp(object_type,"jk8Disabled")==0)
{
ITKCALL( ifail=AOM_ask_value_string(item[0],"item_id",&object_type));
elements.ITEM_ID.assign(object_type);
item_vec.push_back(elements);
mark=1;
break;
}
}
if(mark==1)
{
mark=0;
break;
}
// if(release_nums>0)
// {
// ITKCALL( ifail=AOM_ask_value_string(item[0],"item_id",&object_type));
// elements.ITEM_ID.assign(object_type);
// item_vec.push_back(elements);
// break;
// }
}
}
}
ITKCALL(ifail=BOM_close_window(bom_window_tag));
}
}
cout<<"item_vec.size()--------------"<<item_vec.size()<<endl;
if(item_vec.size()>0)
{
for (int i=0;i<item_vec.size();i++)
{
string error_string="\nBOM子阶存在失效物料";
for (int i=0;i<item_vec.size();i++)
{
error_string=error_string+item_vec[i].ITEM_ID.c_str()+";";
}
EMH_store_error_s1(EMH_severity_warning, EMH_AE_error_base, error_string.c_str());
if (attachments != NULL)
{
MEM_free(attachments);
attachments = NULL;
}
if (revision_list != NULL)
{
MEM_free(revision_list);
revision_list = NULL;
}
if (c_line_tags != NULL)
{
MEM_free(c_line_tags);
c_line_tags = NULL;
}
if (c_line_tags != NULL)
{
MEM_free(c_line_tags);
c_line_tags = NULL;
}
if (release_list != NULL)
{
MEM_free(release_list);
release_list = NULL;
}
if (object_type != NULL)
{
MEM_free(object_type);
object_type = NULL;
}
return EPM_nogo;
}
}else
{
if (attachments != NULL)
{
MEM_free(attachments);
attachments = NULL;
}
if (revision_list != NULL)
{
MEM_free(revision_list);
revision_list = NULL;
}
if (c_line_tags != NULL)
{
MEM_free(c_line_tags);
c_line_tags = NULL;
}
if (c_line_tags != NULL)
{
MEM_free(c_line_tags);
c_line_tags = NULL;
}
if (release_list != NULL)
{
MEM_free(release_list);
release_list = NULL;
}
if (object_type != NULL)
{
MEM_free(object_type);
object_type = NULL;
}
return EPM_go;
}
return EPM_go;
}