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.

236 lines
5.9 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.

#pragma warning (disable: 4996)
#pragma warning (disable: 4819)
#pragma warning (disable: 4995)
#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 <stdlib.h>
#include <tccore/aom.h>
#include <tc/emh.h>
#include <ict/ict_userservice.h>
#include <tc/tc.h>
#include <tccore/tctype.h>
#include <sa/tcfile.h>
#include <ss/ss_errors.h>
#include <fclasses/tc_date.h>
#include "hx_custom.h"
int sum2(int y,int m,int d)
{
unsigned char x[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int i,s=0;
for(i=1;i<y;i++)
if(i%4==0 && i%100!=0 || i%400==0)
s+=366;//闰年
else
s+=365;//平年
if(y%4==0 && y%100!=0 || y%400==0)
x[2]=29;
for(i=1;i<m;i++)
s+=x[i];//整月的天数
s+=d;//日的天数
return s;//返回总天数,相对公元1年
}
int jk_decide_time(EPM_rule_message_t msg)
{
EPM_decision_t decision = EPM_go;
int ifail = ITK_ok, arg_cnt = 0, i = 0, att_cnt = 0;
tag_t task_tag = NULLTAG, rootTask_tag = NULLTAG, *attachments = NULL;
char * object_TYPE_1 = NULL;
// char * object_string1=NULL;
string value_type = "";
string value_property="";
char * ref_type=NULL;
int actualNum=0;
tag_t *actualtags=NULL;
string errorMessage="";
//获取当前触发的任务
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);
boolean warn=false;
date_t dateValue1 ,dateValue2;
int date1,date2;
vector<string> shijian;
vector<string> dates;
vector<string> times;
string bianzhitime;
char * argflag = NULL ,
*argvalue =NULL ,
*arg = NULL ,
arg_value[1024] = "\0";
string minute="";
//获取handler参数的个数
arg_cnt = TC_number_of_arguments(msg.arguments);
ECHO("参数个数为:%d\n",arg_cnt);
if (arg_cnt > 0)
{
for (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, "minute") == 0)
{
cout<<"1-------------"<<endl;
if(argvalue != NULL)
{
cout<<"1.1-------------"<<endl;
strcpy(arg_value,argvalue);
cout<<"2-------------"<<endl;
minute=arg_value;
}else{
EMH_store_error_s1(EMH_severity_warning, EMH_AE_error_base, "缺少minute参数");
cout<<"3-------------"<<endl;
return EPM_nogo;
}
}
}
MEM_free(argflag);
MEM_free(argvalue);
cout<<"4-------------"<<endl;
}
//循环目标对象
for (i = 0; i < att_cnt; i++) {
ifail = AOM_ask_value_string(attachments[i], "object_type", &object_TYPE_1);//对象类型
cout << object_TYPE_1;
cout << endl;
if(strcmp("JK8MaterialRevision",object_TYPE_1)==0)//如果是虚拟件版本类型,就检查其下的实体物料的关系下有没有实体物料对象,并且对象下有发布的版本
{
ifail=AOM_ask_value_tags(attachments[i],"fnd0ActuatedInteractiveTsks",&actualNum,&actualtags);//已启动的交互任务
for (int j=0;j<actualNum;j++)
{
char * object_name = NULL;
AOM_ask_value_string(actualtags[j],"object_name",&object_name);
//如果关系下的对象类型符合,查看下面有没有最新发布的版本
if(strcmp(object_name,"批准")==0)
{
ITKCALL(AOM_ask_value_date(actualtags[j],"fnd0EndDate",&dateValue1));//编制的结束日期
char * date_format = NULL;
DATE_default_date_format(&date_format);
char * date_str = NULL;
DATE_date_to_string(dateValue1,date_format,&date_str);
cout<<date_str<<endl;
bianzhitime=date_str;
Split(date_str," ",shijian);
Split(shijian[0],"-",dates);
Split(shijian[1],":",times);
int year=atoi(dates[0].c_str());
cout<<atoi(dates[0].c_str())<<atoi(dates[1].c_str())<<atoi(dates[2].c_str())<<endl;
cout<<atoi(times[0].c_str())<<atoi(times[1].c_str())<<endl;
date1= sum2(atoi(dates[0].c_str()),atoi(dates[1].c_str()),atoi(dates[2].c_str()))*10000+atoi(times[0].c_str())*100+atoi(times[1].c_str());
if(date_format!=NULL)
{
MEM_free(date_format);
date_format=NULL;
}
if(date_str!=NULL)
{
MEM_free(date_str);
date_str=NULL;
}
}else if(strcmp(object_name,"通知")==0)
{
warn=true;
}
if(object_name!=NULL)
{
MEM_free(object_name);
object_name=NULL;
}
}
if(actualtags!=NULL)
{
MEM_free(actualtags);
actualtags=NULL;
}
}
if(object_TYPE_1!=NULL)
{
MEM_free(object_TYPE_1);
object_TYPE_1=NULL;
}
}
time_t now;
struct tm *p;
time(&now);
p = localtime(&now);
date2=sum2((p->tm_year + 1900),p->tm_mon,p->tm_mday)*10000+p->tm_hour*100+p->tm_min;
cout<<(p->tm_year + 1900)<<"-"<<p->tm_mon<<"-"<<p->tm_mday<<" "<<p->tm_hour<<":"<<p->tm_min<<endl;
if(sum2((p->tm_year + 1900),p->tm_mon+1,p->tm_mday)>sum2(atoi(dates[0].c_str()),atoi(dates[1].c_str()),atoi(dates[2].c_str())))
{
warn=false;
}else if(sum2((p->tm_year + 1900),p->tm_mon+1,p->tm_mday)==sum2(atoi(dates[0].c_str()),atoi(dates[1].c_str()),atoi(dates[2].c_str())))
{
int time=atoi(minute.c_str());
if(p->tm_hour*60+p->tm_min-time>atoi(times[0].c_str())*60+atoi(times[1].c_str()))
{
warn=false;
}else
{
warn=true;
}
}
if(warn==true)
{
cout<<"提醒------------"<<endl;
}else
{
cout<<"不提醒------------"<<endl;
}
if(warn==true)
{
errorMessage="请于传递物料的节点审批完成后,即"+bianzhitime+" "+minute+"分钟后再进行操作!";
EMH_store_error_s1(EMH_severity_warning, EMH_AE_error_base, errorMessage.c_str());
return EPM_nogo;
}else
{
return EPM_go;
}
}