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.

2156 lines
72 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 "jk_custom.h"
#include "tc_log.h"
#include <res/res_itk.h>
typedef struct{
string jk8ProductType;//产品类型
string jk8ProductModNO;// 产品型号
string jk8ProductIdentifyNO;// 识别号
string jk8ProductName;// 产品名称
string jk8BaseMeterManufactor;// 基表厂家 5
string jk8ICCardType;// IC卡型号
string jk8CircBoardModNO;// 线路板型号
string jk8ProgramFeatures;// 程序特征
string jk8InsteadType;// 替代型号
string jk8FunctionOverview;// 功能概述 10
string jk8CustSpecRequirements;// 客户特殊要求
//string jk8U8NO;// U8编码号 (去掉)
string jk8Valve;// 阀门
string jk8EncryptType;// 加密类型
string jk8Applicant;// 申请人
string jk8RecordDate;// 登记日期
string jk8ApplyMarket;// 适用市场
string jk8BMManfMatched;// 配套基表厂家
string jk8ProjectName;//项目名称
string jk8ProjectNO;//项目编号 19
string jk8Status;// 状态 //2018.6.4新加4属性
string jk8ValveType;// 阀门类型
string jk8CommunicateMode;// 通信方式
string jk8PowerSupplyMode;// 供电类型 23
//2019.07.31
string jk8GasType;//气体种类
string jk8AlaDectRelation;//报警部分与检测部分的关系
string jk8UsePlace;//使用场所
string jk8OutputSignal;//输出信号种类
string jk8ProFeatNum;//产品特征号
//2020-03-31
string jk8Manufacturer;//生产厂家
string jk8CommunicateMode2;//通信方式2
}JK_SUMMARY_STRUCT;
typedef struct{
string jk8Companylogo;//公司标识
string jk8MeasureType;// 计量方式
string jk8CommunicateMode;// 通讯方式
string jk8Application;// 应用范围
string jk8PCBNO;// pcb编码 5
string jk8Projectname;//项目名称
}JK_SUMMARY_PCB_STRUCT;
extern "C" int POM_AM__set_application_bypass(logical bypass);
/**
* 获取四张扩展表的属性
*
*/
void JK_get_form_prop(tag_t form_tag,JK_SUMMARY_STRUCT &bean,char *form_type){
// char * form_value[28];
// int prop_count = 28;
//2020-03-31
char * form_value[30];
int prop_count = 30;
WriteLog_jk("开始获取单张表属性 \n");
tag_t user_tag =NULLTAG;
ITKCALL(AOM_ask_value_tag(form_tag,"owning_user",&user_tag));
if(user_tag!=NULLTAG)
{
ITKCALL(AOM_ask_value_string(user_tag,"user_name",&form_value[13]))
}else{
form_value[13] = (char *)MEM_alloc(sizeof(char)*128);//申请人
}
form_value[14] = (char *)MEM_alloc(sizeof(char)*128);//登记日期
//ITKCALL(AOM_ask_value_string(form_tag,"jk8RecordDate",&form_value[14]));// 登记日期
time_t now;
struct tm *p;
time(&now);
p = localtime(&now);
sprintf(form_value[14], "%d年%d月%d日", 1900+p->tm_year,p->tm_mon+1 ,p->tm_mday );
if(strcmp(form_type , "JK8CotlerPModAppForm")==0){//控制器表单(产品型号)
for (int i = 0; i < prop_count; i++)
{
if((i!=4)&&(i!=9)&&1<i<17||i==20||i==22){
form_value[i] = (char *)MEM_alloc(sizeof(char)*128);
strcpy(form_value[i],"");// 状态 默认为空
}
}
ITKCALL(AOM_ask_value_string(form_tag,"jk8ProductModNO",&form_value[1]));// 产品型号
//ITKCALL(AOM_ask_value_string(form_tag,"jk8ProductIdentifyNO",&form_value[2]));// 识别号
ITKCALL(AOM_ask_value_string(form_tag,"jk8BMManufactor",&form_value[4]));// 基表厂家
ITKCALL(AOM_ask_value_string(form_tag,"jk8FunctionOverview",&form_value[9]));// 功能概述
ITKCALL(AOM_ask_value_string(form_tag,"jk8ProjectName",&form_value[17]));// 项目名称
ITKCALL(AOM_ask_value_string(form_tag,"jk8ProjectNO",&form_value[18]));// 项目编号
form_value[19] = (char *)MEM_alloc(sizeof(char)*128);
strcpy(form_value[19],"");// 状态 默认为空
// ITKCALL(AOM_ask_value_string(form_tag,"jk8ValveType",&form_value[20]));// 阀门类型
ITKCALL(AOM_ask_value_string(form_tag,"jk8CommunicateMode",&form_value[21]));// 通信方式
// ITKCALL(AOM_ask_value_string(form_tag,"jk8PowerSupplyMode",&form_value[22]));// 供电方式
}else if(strcmp(form_type , "JK8ColPIdenNOAppForm")==0){//控制器产品识别号
for (int i = 0; i < prop_count; i++)
{
if(2<i<17){
form_value[i] = (char *)MEM_alloc(sizeof(char)*128);
strcpy(form_value[i],"");// 状态 默认为空
}
}
ITKCALL(AOM_ask_value_string(form_tag,"jk8ProductModNO",&form_value[1]));// 产品型号
ITKCALL(AOM_ask_value_string(form_tag,"jk8ProductIdentifyNO",&form_value[2]));// 识别号
ITKCALL(AOM_ask_value_string(form_tag,"jk8ProjectName",&form_value[17]));// 项目名称
ITKCALL(AOM_ask_value_string(form_tag,"jk8ProjectNO",&form_value[18]));// 项目编号
form_value[19] = (char *)MEM_alloc(sizeof(char)*128);
strcpy(form_value[19],"");// 状态 默认为空
ITKCALL(AOM_ask_value_string(form_tag,"jk8ValveType",&form_value[20]));// 阀门类型
ITKCALL(AOM_ask_value_string(form_tag,"jk8CommunicateMode",&form_value[21]));// 通信方式
ITKCALL(AOM_ask_value_string(form_tag,"jk8PowerSupplyMode",&form_value[22]));// 供电方式
form_value[23] = (char *)MEM_alloc(sizeof(char)*128);
strcpy(form_value[23],"");//气体种类代号 默认为空
form_value[24] = (char *)MEM_alloc(sizeof(char)*128);
strcpy(form_value[24],"");//使用场所 默认为空
form_value[25] = (char *)MEM_alloc(sizeof(char)*128);
strcpy(form_value[25],"");//报警部分与检测部分的关系 默认为空
form_value[26] = (char *)MEM_alloc(sizeof(char)*128);
strcpy(form_value[26],"");//输出信号种类 默认为空
form_value[27] = (char *)MEM_alloc(sizeof(char)*128);
strcpy(form_value[27],"");//产品特征号 默认为空
}
else if(strcmp(form_type , "JK8ALPModAppForm")==0)//2019.07.31报警器产品型号
{
for (int i = 0; i < prop_count; i++)
{
if(i!=1&&i!=3&&i!=13&&i!=14&&i!=17&&i!=18&&i!=23&&i!=24&&i!=25&&i!=26&&i!=27){
form_value[i] = (char *)MEM_alloc(sizeof(char)*128);
strcpy(form_value[i],"");// 状态 默认为空
}
}
// ITKCALL(AOM_ask_value_string(form_tag,"jk8ProductType",&form_value[0]));//产品类型
ITKCALL(AOM_ask_value_string(form_tag,"jk8ProductModNO",&form_value[1]));// 产品型号
// ITKCALL(AOM_ask_value_string(form_tag,"jk8ProductIdentifyNO",&form_value[2]));// 识别号
ITKCALL(AOM_ask_value_string(form_tag,"jk8ProductName",&form_value[3]));// 产品名称
// ITKCALL(AOM_ask_value_string(form_tag,"jk8BMManufactor",&form_value[4]));// 基表厂家
// ITKCALL(AOM_ask_value_string(form_tag,"jk8ICCardType",&form_value[5]));// IC卡型号
// ITKCALL(AOM_ask_value_string(form_tag,"jk8CircBoardModNO",&form_value[6]));// 线路板型号
// ITKCALL(AOM_ask_value_string(form_tag,"jk8ProgramFeatures",&form_value[7]));// 程序特征
// ITKCALL(AOM_ask_value_string(form_tag,"jk8InsteadType",&form_value[8]));// 替代型号
// ITKCALL(AOM_ask_value_string(form_tag,"jk8FunctionOverview",&form_value[9]));// 功能概述
// ITKCALL(AOM_ask_value_string(form_tag,"jk8CustSpecRequirements",&form_value[10]));// 客户特殊要求
//ITKCALL(AOM_ask_value_string(attachments[i],"jk8U8NO",&form_value));// U8编码号 (去掉)
// ITKCALL(AOM_ask_value_string(form_tag,"jk8Valve",&form_value[11]));// 阀门
// ITKCALL(AOM_ask_value_string(form_tag,"jk8EncryptType",&form_value[12]));// 加密类型
//
//ITKCALL(AOM_ask_value_string(form_tag,"jk8Applicant",&form_value[13]));// 申请人
// ITKCALL(AOM_ask_value_string(form_tag,"jk8ApplyMarket",&form_value[15]));// 适用市场
// ITKCALL(AOM_ask_value_string(form_tag,"jk8BMManfMatched",&form_value[16]));// 配套基表厂家
ITKCALL(AOM_ask_value_string(form_tag,"jk8ProjectName",&form_value[17]));// 项目名称
ITKCALL(AOM_ask_value_string(form_tag,"jk8ProjectNO",&form_value[18]));// 项目编号
ITKCALL(AOM_ask_value_string(form_tag,"jk8GasType",&form_value[23]));// 气体种类
ITKCALL(AOM_ask_value_string(form_tag,"jk8UsePlace",&form_value[24]));// 使用场所
ITKCALL(AOM_ask_value_string(form_tag,"jk8AlaDectRelation",&form_value[25]));// 报警部分与检测部分的关系
ITKCALL(AOM_ask_value_string(form_tag,"jk8OutputSignal",&form_value[26]));// 输出信号种类
ITKCALL(AOM_ask_value_string(form_tag,"jk8ProFeatNum",&form_value[27]));// 产品特征号
}
// 2020-03-31
else if(strcmp(form_type , "JK8WarnerNPModINOAppForm")==0)//报警器产品型号识别号申请表
{
for (int i = 0; i < prop_count; i++)
{
if(i!=1&&i!=3&&i!=13&&i!=14&&i!=17&&i!=18&&i!=23&&i!=24&&i!=25&&i!=26&&i!=27){
form_value[i] = (char *)MEM_alloc(sizeof(char)*128);
strcpy(form_value[i],"");// 状态 默认为空
}
}
// ITKCALL(AOM_ask_value_string(form_tag,"jk8ProductType",&form_value[0]));//产品类型
ITKCALL(AOM_ask_value_string(form_tag,"jk8ProductModNO",&form_value[1]));// 产品型号
// ITKCALL(AOM_ask_value_string(form_tag,"jk8ProductIdentifyNO",&form_value[2]));// 识别号
ITKCALL(AOM_ask_value_string(form_tag,"jk8ProductName",&form_value[3]));// 产品名称
// ITKCALL(AOM_ask_value_string(form_tag,"jk8BMManufactor",&form_value[4]));// 基表厂家
// ITKCALL(AOM_ask_value_string(form_tag,"jk8ICCardType",&form_value[5]));// IC卡型号
// ITKCALL(AOM_ask_value_string(form_tag,"jk8CircBoardModNO",&form_value[6]));// 线路板型号
// ITKCALL(AOM_ask_value_string(form_tag,"jk8ProgramFeatures",&form_value[7]));// 程序特征
// ITKCALL(AOM_ask_value_string(form_tag,"jk8InsteadType",&form_value[8]));// 替代型号
// ITKCALL(AOM_ask_value_string(form_tag,"jk8FunctionOverview",&form_value[9]));// 功能概述
// ITKCALL(AOM_ask_value_string(form_tag,"jk8CustSpecRequirements",&form_value[10]));// 客户特殊要求
//ITKCALL(AOM_ask_value_string(attachments[i],"jk8U8NO",&form_value));// U8编码号 (去掉)
// ITKCALL(AOM_ask_value_string(form_tag,"jk8Valve",&form_value[11]));// 阀门
// ITKCALL(AOM_ask_value_string(form_tag,"jk8EncryptType",&form_value[12]));// 加密类型
//
//ITKCALL(AOM_ask_value_string(form_tag,"jk8Applicant",&form_value[13]));// 申请人
// ITKCALL(AOM_ask_value_string(form_tag,"jk8ApplyMarket",&form_value[15]));// 适用市场
// ITKCALL(AOM_ask_value_string(form_tag,"jk8BMManfMatched",&form_value[16]));// 配套基表厂家
ITKCALL(AOM_ask_value_string(form_tag,"jk8ProjectName",&form_value[17]));// 项目名称
ITKCALL(AOM_ask_value_string(form_tag,"jk8ProjectNO",&form_value[18]));// 项目编号
ITKCALL(AOM_ask_value_string(form_tag,"jk8GasType",&form_value[23]));// 气体种类
ITKCALL(AOM_ask_value_string(form_tag,"jk8UsePlace",&form_value[24]));// 使用场所
ITKCALL(AOM_ask_value_string(form_tag,"jk8AlaDectRelation",&form_value[25]));// 报警部分与检测部分的关系
ITKCALL(AOM_ask_value_string(form_tag,"jk8OutputSignal",&form_value[26]));// 输出信号种类
ITKCALL(AOM_ask_value_string(form_tag,"jk8ProFeatNum",&form_value[27]));// 产品特征号
ITKCALL(AOM_ask_value_string(form_tag,"jk8Manufacturer",&form_value[28]));// 生产厂家
ITKCALL(AOM_ask_value_string(form_tag,"jk8ProductType",&form_value[0]));// 产品类型
ITKCALL(AOM_ask_value_string(form_tag,"jk8CommunicateMode2",&form_value[29]));// 通信方式2
}
else if(strcmp(form_type , "JK8WarnerNPINOAppForm")==0)//报警器产品识别号申请表
{
for (int i = 0; i < prop_count; i++)
{
if(i!=1&&i!=3&&i!=13&&i!=14&&i!=17&&i!=18&&i!=23&&i!=24&&i!=25&&i!=26&&i!=27){
form_value[i] = (char *)MEM_alloc(sizeof(char)*128);
strcpy(form_value[i],"");// 状态 默认为空
}
}
// ITKCALL(AOM_ask_value_string(form_tag,"jk8ProductType",&form_value[0]));//产品类型
ITKCALL(AOM_ask_value_string(form_tag,"jk8ProductModNO",&form_value[1]));// 产品型号
// ITKCALL(AOM_ask_value_string(form_tag,"jk8ProductIdentifyNO",&form_value[2]));// 识别号
ITKCALL(AOM_ask_value_string(form_tag,"jk8ProductName",&form_value[3]));// 产品名称
// ITKCALL(AOM_ask_value_string(form_tag,"jk8BMManufactor",&form_value[4]));// 基表厂家
// ITKCALL(AOM_ask_value_string(form_tag,"jk8ICCardType",&form_value[5]));// IC卡型号
// ITKCALL(AOM_ask_value_string(form_tag,"jk8CircBoardModNO",&form_value[6]));// 线路板型号
// ITKCALL(AOM_ask_value_string(form_tag,"jk8ProgramFeatures",&form_value[7]));// 程序特征
// ITKCALL(AOM_ask_value_string(form_tag,"jk8InsteadType",&form_value[8]));// 替代型号
// ITKCALL(AOM_ask_value_string(form_tag,"jk8FunctionOverview",&form_value[9]));// 功能概述
// ITKCALL(AOM_ask_value_string(form_tag,"jk8CustSpecRequirements",&form_value[10]));// 客户特殊要求
//ITKCALL(AOM_ask_value_string(attachments[i],"jk8U8NO",&form_value));// U8编码号 (去掉)
// ITKCALL(AOM_ask_value_string(form_tag,"jk8Valve",&form_value[11]));// 阀门
// ITKCALL(AOM_ask_value_string(form_tag,"jk8EncryptType",&form_value[12]));// 加密类型
//
//ITKCALL(AOM_ask_value_string(form_tag,"jk8Applicant",&form_value[13]));// 申请人
// ITKCALL(AOM_ask_value_string(form_tag,"jk8ApplyMarket",&form_value[15]));// 适用市场
// ITKCALL(AOM_ask_value_string(form_tag,"jk8BMManfMatched",&form_value[16]));// 配套基表厂家
ITKCALL(AOM_ask_value_string(form_tag,"jk8ProjectName",&form_value[17]));// 项目名称
ITKCALL(AOM_ask_value_string(form_tag,"jk8ProjectNO",&form_value[18]));// 项目编号
ITKCALL(AOM_ask_value_string(form_tag,"jk8GasType",&form_value[23]));// 气体种类
ITKCALL(AOM_ask_value_string(form_tag,"jk8UsePlace",&form_value[24]));// 使用场所
ITKCALL(AOM_ask_value_string(form_tag,"jk8AlaDectRelation",&form_value[25]));// 报警部分与检测部分的关系
ITKCALL(AOM_ask_value_string(form_tag,"jk8OutputSignal",&form_value[26]));// 输出信号种类
ITKCALL(AOM_ask_value_string(form_tag,"jk8ProFeatNum",&form_value[27]));// 产品特征号
ITKCALL(AOM_ask_value_string(form_tag,"jk8Manufacturer",&form_value[28]));// 生产厂家
ITKCALL(AOM_ask_value_string(form_tag,"jk8ProductType",&form_value[0]));// 产品类型
ITKCALL(AOM_ask_value_string(form_tag,"jk8CommunicateMode2",&form_value[29]));// 通信方式2
}
else//其他表单类型,包括新产品型号与识别号申请表,识别号申请表,衍生号申请表,特殊要求申请表
{
cout<<"2---"<<endl;
ITKCALL(AOM_ask_value_string(form_tag,"jk8ProductType",&form_value[0]));//产品类型
ITKCALL(AOM_ask_value_string(form_tag,"jk8ProductModNO",&form_value[1]));// 产品型号
ITKCALL(AOM_ask_value_string(form_tag,"jk8ProductIdentifyNO",&form_value[2]));// 识别号
ITKCALL(AOM_ask_value_string(form_tag,"jk8ProductName",&form_value[3]));// 产品名称
ITKCALL(AOM_ask_value_string(form_tag,"jk8BMManufactor",&form_value[4]));// 基表厂家
ITKCALL(AOM_ask_value_string(form_tag,"jk8ICCardType",&form_value[5]));// IC卡型号
ITKCALL(AOM_ask_value_string(form_tag,"jk8CircBoardModNO",&form_value[6]));// 线路板型号
ITKCALL(AOM_ask_value_string(form_tag,"jk8ProgramFeatures",&form_value[7]));// 程序特征
ITKCALL(AOM_ask_value_string(form_tag,"jk8InsteadType",&form_value[8]));// 替代型号
ITKCALL(AOM_ask_value_string(form_tag,"jk8FunctionOverview",&form_value[9]));// 功能概述
ITKCALL(AOM_ask_value_string(form_tag,"jk8CustSpecRequirements",&form_value[10]));// 客户特殊要求
//ITKCALL(AOM_ask_value_string(attachments[i],"jk8U8NO",&form_value));// U8编码号 (去掉)
ITKCALL(AOM_ask_value_string(form_tag,"jk8Valve",&form_value[11]));// 阀门
ITKCALL(AOM_ask_value_string(form_tag,"jk8EncryptType",&form_value[12]));// 加密类型
//ITKCALL(AOM_ask_value_string(form_tag,"jk8Applicant",&form_value[13]));// 申请人
ITKCALL(AOM_ask_value_string(form_tag,"jk8ApplyMarket",&form_value[15]));// 适用市场
ITKCALL(AOM_ask_value_string(form_tag,"jk8BMManfMatched",&form_value[16]));// 配套基表厂家
ITKCALL(AOM_ask_value_string(form_tag,"jk8ProjectName",&form_value[17]));// 项目名称
ITKCALL(AOM_ask_value_string(form_tag,"jk8ProjectNO",&form_value[18]));// 项目编号
form_value[19] = (char *)MEM_alloc(sizeof(char)*128);
strcpy(form_value[19],"");// 状态 默认为空
form_value[20] = (char *)MEM_alloc(sizeof(char)*128);
strcpy(form_value[20],"");// 状态 默认为空
form_value[21] = (char *)MEM_alloc(sizeof(char)*128);
strcpy(form_value[21],"");// 状态 默认为空
form_value[22] = (char *)MEM_alloc(sizeof(char)*128);
strcpy(form_value[22],"");// 状态 默认为空
form_value[23] = (char *)MEM_alloc(sizeof(char)*128);
strcpy(form_value[23],"");//气体种类代号 默认为空
form_value[24] = (char *)MEM_alloc(sizeof(char)*128);
strcpy(form_value[24],"");//使用场所 默认为空
form_value[25] = (char *)MEM_alloc(sizeof(char)*128);
strcpy(form_value[25],"");//报警部分与检测部分的关系 默认为空
form_value[26] = (char *)MEM_alloc(sizeof(char)*128);
strcpy(form_value[26],"");//输出信号种类 默认为空
form_value[27] = (char *)MEM_alloc(sizeof(char)*128);
strcpy(form_value[27],"");//产品特征号 默认为空
form_value[28] = (char *)MEM_alloc(sizeof(char)*128);
strcpy(form_value[28],"");//产品特征号 默认为空
form_value[29] = (char *)MEM_alloc(sizeof(char)*128);
strcpy(form_value[29],"");//产品特征号 默认为空
cout<<"3---"<<endl;
//ITKCALL(AOM_ask_value_string(form_tag,"jk8ValveType",&form_value[20]));// 阀门类型
//ITKCALL(AOM_ask_value_string(form_tag,"jk8CommunicateMode",&form_value[21]));// 通信方式
//ITKCALL(AOM_ask_value_string(form_tag,"jk8PowerSupplyMode",&form_value[22]));// 供电方式
}
{
if(strcmp(form_type , "JK8NPModINOAppForm")==0){//新产品型号与识别号申请表
char * jk8ProductType1 =NULL;
ITKCALL(AOM_ask_value_string(form_tag,"jk8ProductType1",&jk8ProductType1));//产品类型
if(strcmp(jk8ProductType1,"民用表")==0 ){
bean.jk8ProductType.assign("tb1");//产品类型
}else if(strcmp(jk8ProductType1,"流量计")==0 || strcmp(jk8ProductType1,"工业表")==0){
bean.jk8ProductType.assign("tb2");
}else if(strcmp(form_value[0],"采集器")==0){
bean.jk8ProductType.assign("tb3");//产品类型
}else if(strcmp(form_value[0],"阀门")==0){
bean.jk8ProductType.assign("tb4");//产品类型
}else if(strcmp(form_value[0],"集中器")==0){
bean.jk8ProductType.assign("tb5");//产品类型
}else if(strcmp(form_value[0],"充值宝")==0){
bean.jk8ProductType.assign("tb6");//产品类型
}else if(strcmp(form_value[0],"手持机")==0){
bean.jk8ProductType.assign("tb7");//产品类型
}else if(strcmp(form_value[0],"读卡器")==0){
bean.jk8ProductType.assign("tb8");//产品类型
}else if(strcmp(form_value[0],"模组")==0){
bean.jk8ProductType.assign("tb9");//产品类型
}else if(strcmp(form_value[0],"控制器")==0){
bean.jk8ProductType.assign("tb10");//产品类型
}else{
bean.jk8ProductType.assign("tb11");//产品类型
}
if(jk8ProductType1 != NULL){
MEM_free(jk8ProductType1);
jk8ProductType1 = NULL;
}
}else if(strcmp(form_type , "JK8CotlerPModAppForm")==0){ //控制器产品型号
bean.jk8ProductType.assign("tb10");//产品类型
}else if(strcmp(form_type , "JK8ColPIdenNOAppForm")==0){//控制器识别号
bean.jk8ProductType.assign("tb10");//产品类型
}else if(strcmp(form_type , "JK8ALPModAppForm")==0){//报警器产品型号
bean.jk8ProductType.assign("tb12");//产品类型
}else{
bean.jk8ProductType.assign(form_value[0]);//产品类型
}
bean.jk8ProductModNO.assign(form_value[1]);// 产品型号
bean.jk8ProductIdentifyNO.assign(form_value[2]);// 识别号
bean.jk8ProductName.assign(form_value[3]);// 产品名称
bean.jk8BaseMeterManufactor.assign(form_value[4]);// 基表厂家 5
bean.jk8ICCardType.assign(form_value[5]);// IC卡型号
bean.jk8CircBoardModNO.assign(form_value[6]);// 线路板型号
bean.jk8ProgramFeatures.assign(form_value[7]);// 程序特征
bean.jk8InsteadType.assign(form_value[8]);// 替代型号
bean.jk8FunctionOverview.assign(form_value[9]);// 功能概述 10
bean.jk8CustSpecRequirements.assign(form_value[10]);
//bean.jk8U8NO.assign(form_value[0]);// U8编码号 (去掉)
bean.jk8Valve.assign(form_value[11]);// 阀门
bean.jk8EncryptType.assign(form_value[12]);// 加密类型
bean.jk8Applicant.assign(form_value[13]);// 申请人
bean.jk8RecordDate.assign(form_value[14]);// 登记日期
bean.jk8ApplyMarket.assign(form_value[15]);// 适用市场
bean.jk8BMManfMatched.assign(form_value[16]);// 配套基表厂家
bean.jk8ProjectName.assign(form_value[17]);// 项目名称
bean.jk8ProjectNO.assign(form_value[18]);// 项目编号
bean.jk8Status.assign(form_value[19]);// 状态
bean.jk8ValveType.assign(form_value[20]);// 阀门类型
bean.jk8CommunicateMode.assign(form_value[21]); // 通信方式
bean.jk8PowerSupplyMode.assign(form_value[22]);// 供电方式
//2019.07.31 气体种类
bean.jk8GasType.assign(form_value[23]);
bean.jk8UsePlace.assign(form_value[24]);
bean.jk8AlaDectRelation.assign(form_value[25]);
bean.jk8OutputSignal.assign(form_value[26]);
bean.jk8ProFeatNum.assign(form_value[27]);
// 2020-03-31
bean.jk8Manufacturer.assign(form_value[28]);
bean.jk8CommunicateMode2.assign(form_value[29]);
}
//释放资源
for(int i = 0 ;i <prop_count;i++){
if(form_value[i]!=NULL){
MEM_free(form_value[i]);
form_value[i] = NULL;
}
}
}
/**
*
* 获取汇总表的属性
*
*/
void JK_get_summary_form_prop(tag_t form_tag,vector<JK_SUMMARY_STRUCT> &bean_vec,int * isOk){
// int prop_count = 28;
// int count[28],sum_count =0;
// char ** form_value[28];
// 20200331
int prop_count = 30;
int count[30],sum_count =0;
char ** form_value[30];
//POM_AM__set_application_bypass(true);
*isOk = 1;
WriteLog_jk("获取汇总表单【%d】的属性\n",form_tag);
printf("获取汇总表单【%d】的属性\n",form_tag);
ITKCALL(AOM_ask_value_strings(form_tag,"jk8ProductType",&count[0],&form_value[0]));//产品类型
sum_count = count[0];
ITKCALL(AOM_ask_value_strings(form_tag,"jk8ProductModNO",&count[1],&form_value[1]));// 产品型号
ITKCALL(AOM_ask_value_strings(form_tag,"jk8ProductIdentifyNO",&count[2],&form_value[2]));// 识别号
ITKCALL(AOM_ask_value_strings(form_tag,"jk8ProductName",&count[3],&form_value[3]));// 产品名称
ITKCALL(AOM_ask_value_strings(form_tag,"jk8BaseMeterManufactor",&count[4],&form_value[4]));// 基表厂家
ITKCALL(AOM_ask_value_strings(form_tag,"jk8ICCardType",&count[5],&form_value[5]));// IC卡型号
ITKCALL(AOM_ask_value_strings(form_tag,"jk8CircBoardModNO",&count[6],&form_value[6]));// 线路板型号
ITKCALL(AOM_ask_value_strings(form_tag,"jk8ProgramFeatures",&count[7],&form_value[7]));// 程序特征
ITKCALL(AOM_ask_value_strings(form_tag,"jk8InsteadType",&count[8],&form_value[8]));// 替代型号
ITKCALL(AOM_ask_value_strings(form_tag,"jk8FunctionOverview",&count[9],&form_value[9]));// 功能概述
ITKCALL(AOM_ask_value_strings(form_tag,"jk8CustSpecRequirements",&count[10],&form_value[10]));// 客户特殊要求
//ITKCALL(AOM_ask_value_string(attachments[i],"jk8U8NO",&form_value));// U8编码号 (去掉)
ITKCALL(AOM_ask_value_strings(form_tag,"jk8Valve",&count[11],&form_value[11]));// 阀门
ITKCALL(AOM_ask_value_strings(form_tag,"jk8EncryptType",&count[12],&form_value[12]));// 加密类型
ITKCALL(AOM_ask_value_strings(form_tag,"jk8Applicant",&count[13],&form_value[13]));// 申请人
ITKCALL(AOM_ask_value_strings(form_tag,"jk8RecordDate",&count[14],&form_value[14]));// 登记日期
ITKCALL(AOM_ask_value_strings(form_tag,"jk8ApplyMarket",&count[15],&form_value[15]));// 适用市场
ITKCALL(AOM_ask_value_strings(form_tag,"jk8BMManfMatched",&count[16],&form_value[16]));// 配套基表厂家
ITKCALL(AOM_ask_value_strings(form_tag,"jk8ProjectName",&count[17],&form_value[17]));// 项目名称
ITKCALL(AOM_ask_value_strings(form_tag,"jk8ProjectNO",&count[18],&form_value[18]));// 项目编号
ITKCALL(AOM_ask_value_strings(form_tag,"jk8Status",&count[19],&form_value[19]));// 项目名称
ITKCALL(AOM_ask_value_strings(form_tag,"jk8ValveType",&count[20],&form_value[20]));// 项目编号
ITKCALL(AOM_ask_value_strings(form_tag,"jk8CommunicateMode",&count[21],&form_value[21]));// 项目名称
ITKCALL(AOM_ask_value_strings(form_tag,"jk8PowerSupplyMode",&count[22],&form_value[22]));// 项目编号
//2019.07.31
ITKCALL(AOM_ask_value_strings(form_tag,"jk8GasType",&count[23],&form_value[23]));// 气体种类
ITKCALL(AOM_ask_value_strings(form_tag,"jk8AlaDectRelation",&count[24],&form_value[24]));// 报警部分与检测部分的关系
ITKCALL(AOM_ask_value_strings(form_tag,"jk8UsePlace",&count[25],&form_value[25]));// 使用场所
ITKCALL(AOM_ask_value_strings(form_tag,"jk8OutputSignal",&count[26],&form_value[26]));// 输出信号种类
ITKCALL(AOM_ask_value_strings(form_tag,"jk8ProFeatNum",&count[27],&form_value[27]));// 产品特征号
//2020-03-31
ITKCALL(AOM_ask_value_strings(form_tag,"jk8Manufacturer",&count[28],&form_value[28]));// 生产厂家
ITKCALL(AOM_ask_value_strings(form_tag,"jk8CommunicateMode2",&count[29],&form_value[29]));// 通信方式2
for(int i = 0 ;i < (prop_count-1);i++){
if(count[i] !=count[i+1]){
*isOk = 0;
WriteLog_jk("汇总表单属性不正确=>\n");
printf("属性不正确=>\n");
}
}
printf("222222222222222222=>\n");
if( *isOk ==1){
printf("3333333333333333=>\n");
for(int i = 0 ;i <sum_count;i++ ){
JK_SUMMARY_STRUCT bean ;
bean.jk8ProductType.assign(form_value[0][i]);//产品类型
bean.jk8ProductModNO.assign(form_value[1][i]);// 产品型号
bean.jk8ProductIdentifyNO.assign(form_value[2][i]);// 识别号
bean.jk8ProductName.assign(form_value[3][i]);// 产品名称
bean.jk8BaseMeterManufactor.assign(form_value[4][i]);// 基表厂家 5
bean.jk8ICCardType.assign(form_value[5][i]);// IC卡型号
bean.jk8CircBoardModNO.assign(form_value[6][i]);// 线路板型号
bean.jk8ProgramFeatures.assign(form_value[7][i]);// 程序特征
bean.jk8InsteadType.assign(form_value[8][i]);// 替代型号
bean.jk8FunctionOverview.assign(form_value[9][i]);// 功能概述 10
bean.jk8CustSpecRequirements.assign(form_value[10][i]);// 客户特殊要求
//bean.jk8U8NO.assign(form_value[0][i]);// U8编码号 (去掉)
bean.jk8Valve.assign(form_value[11][i]);// 阀门
bean.jk8EncryptType.assign(form_value[12][i]);// 加密类型
bean.jk8Applicant.assign(form_value[13][i]);// 申请人
bean.jk8RecordDate.assign(form_value[14][i]);// 登记日期
bean.jk8ApplyMarket.assign(form_value[15][i]);// 适用市场
bean.jk8BMManfMatched.assign(form_value[16][i]);// 配套基表厂家
bean.jk8ProjectName.assign(form_value[17][i]);// 项目名称
bean.jk8ProjectNO.assign(form_value[18][i]);// 项目编号
bean.jk8Status.assign(form_value[19][i]);// 状态
bean.jk8ValveType.assign(form_value[20][i]);// 阀门类型
bean.jk8CommunicateMode.assign(form_value[21][i]);// 通信方式
bean.jk8PowerSupplyMode.assign(form_value[22][i]);// 供电类型
//2019.07.31
bean.jk8GasType.assign(form_value[23][i]);// 气体种类
bean.jk8AlaDectRelation.assign(form_value[24][i]);// 报警部分
bean.jk8UsePlace.assign(form_value[25][i]);// 使用场所
bean.jk8OutputSignal.assign(form_value[26][i]);// 输出信号种类
bean.jk8ProFeatNum.assign(form_value[27][i]);// 产品特征号
//2020-03-31
bean.jk8Manufacturer.assign(form_value[28][i]);// 生产厂家
bean.jk8CommunicateMode2.assign(form_value[29][i]);// 通信方式2
bean_vec.push_back(bean);
}
}
printf("444444444444444=>\n");
for(int i = 0 ;i < prop_count; i++){
for(int j = 0;j < count[i];j++){
MEM_free(form_value[i][j]);
form_value[i][j] =NULL;
}
MEM_free(form_value[i]);
form_value[i] = NULL;
}
//POM_AM__set_application_bypass(false);
printf("555555555555=>\n");
}
/**
* 设置汇总表属性
*/
void JK_set_summary_form_prop(tag_t form_tag,vector<JK_SUMMARY_STRUCT> bean_vec){
WriteLog_jk("开始设置汇总表属性\n");
int i = 0,j=0 ;
int prop_count = 30;
char ** values[30];
if(bean_vec.size() > 0){
for(i = 0 ;i < prop_count;i++){
values[i] =(char**) MEM_alloc(sizeof(char*)*bean_vec.size());
for(j =0;j < bean_vec.size();j++){
values[i][j] = (char *) MEM_alloc(sizeof(char)*256);
}
}
for(i = 0 ;i < bean_vec.size();i++){
JK_SUMMARY_STRUCT bean = bean_vec[i];
strcpy(values[0][i],bean.jk8ProductType.c_str());
strcpy(values[1][i],bean.jk8ProductModNO.c_str());// 产品型号
strcpy(values[2][i],bean.jk8ProductIdentifyNO.c_str());// 识别号
strcpy(values[3][i],bean.jk8ProductName.c_str());// 产品名称
strcpy(values[4][i],bean.jk8BaseMeterManufactor.c_str());// 基表厂家 5
strcpy(values[5][i],bean.jk8ICCardType.c_str());// IC卡型号
strcpy(values[6][i],bean.jk8CircBoardModNO.c_str());// 线路板型号
strcpy(values[7][i],bean.jk8ProgramFeatures.c_str());// 程序特征
strcpy(values[8][i],bean.jk8InsteadType.c_str());;// 替代型号
strcpy(values[9][i],bean.jk8FunctionOverview.c_str());// 功能概述 10
strcpy(values[10][i],bean.jk8CustSpecRequirements.c_str());// 客户特殊要求
//bean.jk8U8NO.c_str());// U8编码号 (去掉)
strcpy(values[11][i],bean.jk8Valve.c_str());// 阀门
strcpy(values[12][i],bean.jk8EncryptType.c_str());// 加密类型
strcpy(values[13][i],bean.jk8Applicant.c_str());// 申请人
strcpy(values[14][i],bean.jk8RecordDate.c_str());// 登记日期
strcpy(values[15][i],bean.jk8ApplyMarket.c_str());// 适用市场
strcpy(values[16][i],bean.jk8BMManfMatched.c_str());// 配套基表厂家
strcpy(values[17][i],bean.jk8ProjectName.c_str());// 项目名称
strcpy(values[18][i],bean.jk8ProjectNO.c_str());// 项目编号
strcpy(values[19][i],bean.jk8Status.c_str());// 状态
strcpy(values[20][i],bean.jk8ValveType.c_str());// 阀门类型
strcpy(values[21][i],bean.jk8CommunicateMode.c_str());// 通信方式
strcpy(values[22][i],bean.jk8PowerSupplyMode.c_str());// 供电类型
strcpy(values[23][i],bean.jk8GasType.c_str());// 气体种类
strcpy(values[24][i],bean.jk8UsePlace.c_str());// 使用场所
strcpy(values[25][i],bean.jk8AlaDectRelation.c_str());// 报警部分
strcpy(values[26][i],bean.jk8OutputSignal.c_str());// 输出信号种类
strcpy(values[27][i],bean.jk8ProFeatNum.c_str());// 产品特征号
// 2020-03-31
strcpy(values[28][i],bean.jk8Manufacturer.c_str());// 生产厂家
strcpy(values[29][i],bean.jk8CommunicateMode2.c_str());// 通信方式2
}
}
ITKCALL(AOM_set_value_strings(form_tag,"jk8ProductType",bean_vec.size(),values[0]));//产品类型
ITKCALL(AOM_set_value_strings(form_tag,"jk8ProductModNO",bean_vec.size(),values[1]));// 产品型号
ITKCALL(AOM_set_value_strings(form_tag,"jk8ProductIdentifyNO",bean_vec.size(),values[2]));// 识别号
ITKCALL(AOM_set_value_strings(form_tag,"jk8ProductName",bean_vec.size(),values[3]));// 产品名称
ITKCALL(AOM_set_value_strings(form_tag,"jk8BaseMeterManufactor",bean_vec.size(),values[4]));// 基表厂家
ITKCALL(AOM_set_value_strings(form_tag,"jk8ICCardType",bean_vec.size(),values[5]));// IC卡型号
ITKCALL(AOM_set_value_strings(form_tag,"jk8CircBoardModNO",bean_vec.size(),values[6]));// 线路板型号
ITKCALL(AOM_set_value_strings(form_tag,"jk8ProgramFeatures",bean_vec.size(),values[7]));// 程序特征
ITKCALL(AOM_set_value_strings(form_tag,"jk8InsteadType",bean_vec.size(),values[8]));// 替代型号
ITKCALL(AOM_set_value_strings(form_tag,"jk8FunctionOverview",bean_vec.size(),values[9]));// 功能概述
ITKCALL(AOM_set_value_strings(form_tag,"jk8CustSpecRequirements",bean_vec.size(),values[10]));// 客户特殊要求
//ITKCALL(AOM_ask_value_string(attachments[i],"jk8U8NO",&form_value));// U8编码号 (去掉)
ITKCALL(AOM_set_value_strings(form_tag,"jk8Valve",bean_vec.size(),values[11]));// 阀门
ITKCALL(AOM_set_value_strings(form_tag,"jk8EncryptType",bean_vec.size(),values[12]));// 加密类型
ITKCALL(AOM_set_value_strings(form_tag,"jk8Applicant",bean_vec.size(),values[13]));// 申请人
ITKCALL(AOM_set_value_strings(form_tag,"jk8RecordDate",bean_vec.size(),values[14]));// 登记日期
ITKCALL(AOM_set_value_strings(form_tag,"jk8ApplyMarket",bean_vec.size(),values[15]));// 适用市场
ITKCALL(AOM_set_value_strings(form_tag,"jk8BMManfMatched",bean_vec.size(),values[16]));// 配套基表厂家
ITKCALL(AOM_set_value_strings(form_tag,"jk8ProjectName",bean_vec.size(),values[17]));// 项目名称
ITKCALL(AOM_set_value_strings(form_tag,"jk8ProjectNO",bean_vec.size(),values[18]));// 项目编号
ITKCALL(AOM_set_value_strings(form_tag,"jk8Status",bean_vec.size(),values[19]));// 状态
ITKCALL(AOM_set_value_strings(form_tag,"jk8ValveType",bean_vec.size(),values[20]));// 阀门类型
ITKCALL(AOM_set_value_strings(form_tag,"jk8CommunicateMode",bean_vec.size(),values[21]));// 通信方式
ITKCALL(AOM_set_value_strings(form_tag,"jk8PowerSupplyMode",bean_vec.size(),values[22]));// 供电类型
//2019.07.31
ITKCALL(AOM_set_value_strings(form_tag,"jk8GasType",bean_vec.size(),values[23]));// 气体种类
ITKCALL(AOM_set_value_strings(form_tag,"jk8UsePlace",bean_vec.size(),values[24]));// 使用场所
ITKCALL(AOM_set_value_strings(form_tag,"jk8AlaDectRelation",bean_vec.size(),values[25]));// 报警部分
ITKCALL(AOM_set_value_strings(form_tag,"jk8OutputSignal",bean_vec.size(),values[26]));// 输出信号种类
ITKCALL(AOM_set_value_strings(form_tag,"jk8ProFeatNum",bean_vec.size(),values[27]));// 产品特征号
// 2020-03-31
ITKCALL(AOM_set_value_strings(form_tag,"jk8Manufacturer",bean_vec.size(),values[28]));// 生产厂家
ITKCALL(AOM_set_value_strings(form_tag,"jk8CommunicateMode2",bean_vec.size(),values[29]));// 通信方式2
ITKCALL(AOM_save(form_tag));
ITKCALL(AOM_refresh(form_tag,false));
ITKCALL(AOM_unlock(form_tag,0));
WriteLog_jk("传递汇总表结束,保存数据完成\n");
printf("------------传递汇总表0000-----------------");
//释放资源
/*for(i = 0 ;i <prop_count;i++){
for(j =0;j < bean_vec.size();j++){
MEM_free(values[i][j]);
values[i][j] = NULL;
}
MEM_free(values[i]);
values[i] = NULL;
}*/
printf("------------传递汇总表1111-----------------");
}
/**
* 产品汇总表
*/
int JK_summary_form(EPM_rule_message_t msg)
{
char tc_log_file_name[512];
time_t now;
struct tm *p;
time(&now);
p = localtime(&now);
//sprintf(startDate,"%04d-%d-%02d 00:00", 1900+p->tm_year,p->tm_mon+1 ,p->tm_mday);
//sprintf(endDate,"%04d-%d-%02d 23:59", 1900+p->tm_year,p->tm_mon+1 ,p->tm_mday);
sprintf(tc_log_file_name, "%s\\jk_hzb_log_[%d-%d-%d-%d-%02d].txt",getenv("TEMP"),1900+p->tm_year,p->tm_mon+1 ,p->tm_mday,p->tm_hour,p->tm_min );
printf("tc_log_file_name=%s\n",tc_log_file_name);
CreateLogFile_jk(tc_log_file_name);
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,summary_form_tag = NULLTAG;
char *arg = NULL,*argflag = NULL, *argvalue = NULL,type_class[WSO_object_type_size_c+1] ="\0",*form_value = NULL;
vector<JK_SUMMARY_STRUCT> bean_vec;
//用来获取汇总表的PUID
vector<string> pref_vec;
getPrefStrings("JK_SQB_FORM_PUID",TC_preference_site, pref_vec);
if(pref_vec.size() > 0){
ITK__convert_uid_to_tag(pref_vec[0].c_str(),&summary_form_tag);
if(summary_form_tag == NULLTAG){
WriteLog_jk("PUID[%s]不能转换成对象\n",pref_vec[0].c_str());
CloseLog_jk();
printf("PUID[%s]不能转换成对象\n",pref_vec[0].c_str());
return EPM_nogo;
}
printf("找到了汇总表\n");
int isOk = 1;
logical is_reserved;
POM_AM__set_application_bypass(true);
ITKCALL(RES_is_checked_out(summary_form_tag,&is_reserved));
if (is_reserved)
{
WriteLog_jk("汇总表签出,开始签入\n");
ITKCALL(RES_checkin(summary_form_tag));
}
ITKCALL(AOM_lock(summary_form_tag));
ITKCALL(AOM_refresh(summary_form_tag,false));
POM_AM__set_application_bypass(false);
JK_get_summary_form_prop(summary_form_tag,bean_vec,&isOk);
if(isOk == 0){
ITKCALL(AOM_unlock(summary_form_tag));
printf("PUID[%s]表单属性不正确\n",pref_vec[0].c_str());
WriteLog_jk("PUID[%s]表单属性不正确\n",pref_vec[0].c_str());
CloseLog_jk();
return EPM_nogo;
}
}else{
printf("请配置首选项[connor_custSummaryFormPUID]\n");
WriteLog_jk("请配置首选项[connor_custSummaryFormPUID]\n");
CloseLog_jk();
return EPM_nogo;
}
//获取当前触发的任务
task_tag = msg.task;
//获取根流程节点
ITKCALL(ifail = EPM_ask_root_task(task_tag, &rootTask_tag));
//获取目标引用对象
ITKCALL(ifail = EPM_ask_attachments(rootTask_tag, EPM_target_attachment, &att_cnt, &attachments));
//循环目标对象
for(i = 0;i < att_cnt ; i++){
//获取对象的类型
/**********************************************
* 对象类型JK8DerPIdenNOAppForm
* 对象类型JK8SpecPINOAppForm
* 对象类型JK8NewPIdenNOAppForm
* 对象类型JK8NPModINOAppForm
* 对象类型JK8ExtPIdenNOAppForm
**********************************************/
ITKCALL( WSOM_ask_object_type(attachments[i], type_class));
WriteLog_jk("对象类型:%s \n",type_class);
printf("对象类型:%s \n",type_class);
if(strcmp(type_class,"JK8DerPIdenNOAppForm") ==0 //衍生产品识别号申请表
||strcmp(type_class,"JK8SpecPINOAppForm") ==0 //特殊要求产品识别号申请表
||strcmp(type_class,"JK8NewPIdenNOAppForm") ==0 //新产品识别号申请表
||strcmp(type_class,"JK8ExtPIdenNOAppForm") ==0 //扩展产品识别号申请表 //2017.12.4增加申请表
||strcmp(type_class,"JK8NPModINOAppForm") ==0//新产品型号与识别号申请表
||strcmp(type_class,"JK8CotlerPModAppForm") ==0//控制器产品型号申请表//2018.1.20 新增申请表
||strcmp(type_class,"JK8ColPIdenNOAppForm") ==0//控制器识别号申请表//2018.6.4 新增申请表
||strcmp(type_class,"JK8ALPModAppForm") ==0//2019.07.31 新增报警器产品型号申请表
//2020-03-31
||strcmp(type_class,"JK8WarnerNPModINOAppForm") ==0 // 报警器产品型号识别号申请表
||strcmp(type_class,"JK8WarnerNPINOAppForm") ==0 // 报警器产品识别号申请表
)
{
WriteLog_jk("对象类型符合,开始执行代码 \n");
char *name_fo;
ITKCALL(AOM_ask_value_string(attachments[i],"object_name",&name_fo));
WriteLog_jk("对象名称:%s \n",name_fo);
char *sbhstr,*cpxhstr;
if(strcmp(type_class,"JK8CotlerPModAppForm") ==0){
ITKCALL(AOM_ask_value_string(attachments[i],"jk8ProductModNO",&cpxhstr));// 产品型号
if(strcmp(cpxhstr,"") ==0){
printf("产品型号为空,无法传递\n");
ITKCALL(AOM_unlock(summary_form_tag));
WriteLog_jk("产品型号为空,无法传递\n");
CloseLog_jk();
return EPM_nogo;
}
}
else if(strcmp(type_class,"JK8ALPModAppForm") ==0){
ITKCALL(AOM_ask_value_string(attachments[i],"jk8ProductModNO",&cpxhstr));// 产品型号
if(strcmp(cpxhstr,"") ==0){
printf("产品型号为空,无法传递\n");
ITKCALL(AOM_unlock(summary_form_tag));
WriteLog_jk("产品型号为空,无法传递\n");
CloseLog_jk();
return EPM_nogo;
}
}
else{
ITKCALL(AOM_ask_value_string(attachments[i],"jk8ProductIdentifyNO",&sbhstr));// 识别号
if(strcmp(sbhstr,"") ==0){
printf("识别号为空,无法传递\n");
ITKCALL(AOM_unlock(summary_form_tag));
WriteLog_jk("识别号为空,无法传递\n");
CloseLog_jk();
return EPM_nogo;
}
}
JK_SUMMARY_STRUCT bean ;
//获取单张表的属性
JK_get_form_prop(attachments[i],bean,type_class);
cout<<"单张属性获取完毕"<<endl;
bean_vec.push_back(bean);
}
}
POM_AM__set_application_bypass(true);
JK_set_summary_form_prop(summary_form_tag,bean_vec);
printf("------------传递汇总表2222-----------------");
POM_AM__set_application_bypass(false);
if(attachments!=NULL)
{
MEM_free(attachments);
attachments = NULL;
}
WriteLog_jk("------------传递汇总表结束-----------------");
CloseLog_jk();
printf("------------传递汇总表完成-----------------");
return decision;
}
/**
* 设置汇总表属性pcb
*/
void JK_set_summary_pcb_form_prop(tag_t form_tag,vector<JK_SUMMARY_PCB_STRUCT> bean_vec){
int i = 0,j=0 ;
int prop_count = 6;
char ** values[6];
if(bean_vec.size() > 0){
for(i = 0 ;i < prop_count;i++){
values[i] =(char**) MEM_alloc(sizeof(char*)*bean_vec.size());
for(j =0;j < bean_vec.size();j++){
values[i][j] = (char *) MEM_alloc(sizeof(char)*256);
}
}
for(i = 0 ;i < bean_vec.size();i++){
JK_SUMMARY_PCB_STRUCT bean = bean_vec[i];
strcpy(values[0][i],bean.jk8PCBNO.c_str());//pcb编码
strcpy(values[1][i],bean.jk8Companylogo.c_str());// 公司标识
strcpy(values[2][i],bean.jk8MeasureType.c_str());// 计量原理
strcpy(values[3][i],bean.jk8CommunicateMode.c_str());// 通讯方式
strcpy(values[4][i],bean.jk8Application.c_str());// 应用范围 5
strcpy(values[5][i],bean.jk8Projectname.c_str());
}
}
ITKCALL(AOM_lock(form_tag));
ITKCALL(AOM_set_value_strings(form_tag,"jk8PCBNO",bean_vec.size(),values[0]));//pcb编码
ITKCALL(AOM_set_value_strings(form_tag,"jk8Companylogo",bean_vec.size(),values[1]));//公司标识
ITKCALL(AOM_set_value_strings(form_tag,"jk8MeasureType",bean_vec.size(),values[2]));// 计量原理
ITKCALL(AOM_set_value_strings(form_tag,"jk8CommunicateMode",bean_vec.size(),values[3]));// 通讯方式
ITKCALL(AOM_set_value_strings(form_tag,"jk8Application",bean_vec.size(),values[4]));// 应用范围
ITKCALL(AOM_set_value_strings(form_tag,"jk8Projectname",bean_vec.size(),values[5]));// 应用范围
ITKCALL(AOM_save(form_tag));
ITKCALL(AOM_unlock(form_tag,0));
printf("------------传递汇总表0000-----------------");
//释放资源
for(i = 0 ;i <prop_count;i++){
for(j =0;j < bean_vec.size();j++){
if(values[i][j]!=NULL){
MEM_free(values[i][j]);
values[i][j] = NULL;
}
}
if(values[i]!=NULL){
MEM_free(values[i]);
values[i] = NULL;
}
}
printf("------------传递汇总表1111-----------------");
}
/**
* 获取2张扩展表的属性
* pcb
*/
void JK_get_pcb_form_prop(tag_t form_tag,JK_SUMMARY_PCB_STRUCT &bean,char *form_type){
char * form_value[5];
int prop_count = 5;
ITKCALL(AOM_ask_value_string(form_tag,"jk8PCBNO",&form_value[0]));//pcb编码
ITKCALL(AOM_ask_value_string(form_tag,"jk8Companylogo",&form_value[1]));// 公司标识
ITKCALL(AOM_ask_value_string(form_tag,"jk8MeasureType",&form_value[2]));// 计量原理
ITKCALL(AOM_ask_value_string(form_tag,"jk8CommunicateMode",&form_value[3]));// 通讯方式
ITKCALL(AOM_ask_value_string(form_tag,"jk8Application",&form_value[4]));// 应用范围
ITKCALL(AOM_ask_value_string(form_tag,"jk8Projectname",&form_value[5]));// 项目名称
bean.jk8PCBNO.assign(form_value[0]);// 产品型号
bean.jk8Companylogo.assign(form_value[1]);// 产品型号
bean.jk8MeasureType.assign(form_value[2]);// 识别号
bean.jk8CommunicateMode.assign(form_value[3]);// 产品名称
bean.jk8Application.assign(form_value[4]);// 基表厂家 5
bean.jk8Projectname.assign(form_value[5]);// 项目名称
//释放资源
for(int i = 0 ;i <prop_count;i++){
if(form_value[i]!=NULL){
MEM_free(form_value[i]);
form_value[i] = NULL;
}
}
}
/**
*
* 获取汇总表的属性 pcb
*
*/
void JK_get_summary_pcb_form_prop(tag_t form_tag,vector<JK_SUMMARY_PCB_STRUCT> &bean_vec,int * isOk){
int prop_count = 6;
int count[6],sum_count =0;
char ** form_value[6];
//POM_AM__set_application_bypass(true);
*isOk = 1;
printf("获取汇总表单【%d】的属性\n",form_tag);
ITKCALL(AOM_ask_value_strings(form_tag,"jk8PCBNO",&count[0],&form_value[0]));//PCB编码
sum_count = count[0];
ITKCALL(AOM_ask_value_strings(form_tag,"jk8Companylogo",&count[1],&form_value[1]));// 公司标识
ITKCALL(AOM_ask_value_strings(form_tag,"jk8MeasureType",&count[2],&form_value[2]));// 计量原理
ITKCALL(AOM_ask_value_strings(form_tag,"jk8CommunicateMode",&count[3],&form_value[3]));// 通讯方式
ITKCALL(AOM_ask_value_strings(form_tag,"jk8Application",&count[4],&form_value[4]));// 应用范围
ITKCALL(AOM_ask_value_strings(form_tag,"jk8Projectname",&count[5],&form_value[5]));// 项目名称
for(int i = 0 ;i < (prop_count-1);i++){
if(count[i] !=count[i+1]){
*isOk = 0;
printf("属性不正确=>\n");
}
}
printf("222222222222222222=>\n");
if( *isOk ==1){
printf("3333333333333333=>\n");
for(int i = 0 ;i <sum_count;i++ ){
JK_SUMMARY_PCB_STRUCT bean ;
bean.jk8PCBNO.assign(form_value[0][i]);//PCB编码
bean.jk8Companylogo.assign(form_value[1][i]);// 公司标识
bean.jk8MeasureType.assign(form_value[2][i]);// 计量原理
bean.jk8CommunicateMode.assign(form_value[3][i]);// 通讯方式
bean.jk8Application.assign(form_value[4][i]);// 应用范围 5
bean.jk8Projectname.assign(form_value[5][i]);// 项目名称 6
bean_vec.push_back(bean);
}
}
printf("444444444444444=>\n");
for(int i = 0 ;i < prop_count; i++){
for(int j = 0;j < count[i];j++){
if(form_value[i][j]!=NULL){
MEM_free(form_value[i][j]);
form_value[i][j] =NULL;
}
}
if(form_value[i]!=NULL){
MEM_free(form_value[i]);
form_value[i] = NULL;
}
}
//POM_AM__set_application_bypass(false);
printf("555555555555=>\n");
}
/**
* pcb汇总表
*/
int JK_summary_pcb_form(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,summary_form_tag = NULLTAG;
char *arg = NULL,*argflag = NULL, *argvalue = NULL,type_class[WSO_object_type_size_c+1] ="\0",*form_value = NULL;
vector<JK_SUMMARY_PCB_STRUCT> bean_vec;
//用来获取汇总表的PUID
vector<string> pref_vec;
getPrefStrings("JK_PCBReg_uid",TC_preference_site, pref_vec);
if(pref_vec.size() > 0){
ITK__convert_uid_to_tag(pref_vec[0].c_str(),&summary_form_tag);
if(summary_form_tag == NULLTAG){
printf("PUID[%s]不能转换成对象\n",pref_vec[0].c_str());
return EPM_nogo;
}
printf("找到了汇总表\n");
int isOk = 1;
JK_get_summary_pcb_form_prop(summary_form_tag,bean_vec,&isOk);
if(isOk == 0){
printf("PUID[%s]表单属性不正确\n",pref_vec[0].c_str());
return EPM_nogo;
}
}else{
printf("请配置首选项[JK_PCBReg_uid]\n");
return EPM_nogo;
}
//获取当前触发的任务
task_tag = msg.task;
//获取根流程节点
ITKCALL(ifail = EPM_ask_root_task(task_tag, &rootTask_tag));
//获取目标引用对象
ITKCALL(ifail = EPM_ask_attachments(rootTask_tag, EPM_target_attachment, &att_cnt, &attachments));
//循环目标对象
for(i = 0;i < att_cnt ; i++){
//获取对象的类型
/**********************************************
* 对象类型JK8PCBNOAppForm
* 对象类型JK8SpecPINOAppForm
**********************************************/
ITKCALL( WSOM_ask_object_type(attachments[i], type_class));
printf("对象类型:%s \n",type_class);
if(strcmp(type_class,"JK8PCBNOAppForm") ==0 //PCB编码申请表
||strcmp(type_class,"JK8DerPCBNOAppForm") ==0 )//衍生PCB编码申请表
{
char *sbhstr;
ITKCALL(AOM_ask_value_string(attachments[i],"jk8PCBNO",&sbhstr));// 识别号
if(strcmp(sbhstr,"") ==0){
printf("识别号为空,无法传递\n");
return EPM_nogo;
}
JK_SUMMARY_PCB_STRUCT bean ;
//获取单张表的属性
JK_get_pcb_form_prop(attachments[i],bean,type_class);
bean_vec.push_back(bean);
}
}
POM_AM__set_application_bypass(true);
JK_set_summary_pcb_form_prop(summary_form_tag,bean_vec);
printf("------------传递汇总表2222-----------------");
POM_AM__set_application_bypass(false);
if(attachments!=NULL)
{
MEM_free(attachments);
attachments = NULL;
}
printf("------------传递汇总表完成-----------------");
return decision;
}
/**
*
* 发送邮件
*
*/
int JK_send_email(EPM_action_message_t msg){
int ifail = 0, att_cnt = 0 ,i =0,compare=0;
tag_t task_tag =NULLTAG , rootTask_tag =NULLTAG , *attachments =NULL;
char wuliao[10240] = "\0", * itemName = NULL, * itemID = NULL ,* itemUser = NULL,*jk8SpecModel=NULL,*jk8TechModel=NULL;
//vector<string> emailNameVec ;
printf( "\n ----------发送邮箱开始---------\n");
//获取配置的发送到
//getPrefStrings("JK_SendEmailName_Option",TC_preference_site,emailNameVec);
//获得参数配置-SignName 邮箱1;邮箱2
char arg1value[1024] = "",arg2value[1024] = "",arg3value[1024]="",arg4value[1024]="",
signcounter_info[1024] = "", *value = NULL;
char *argflag =NULL,*argvalue=NULL ,*arg = NULL;
BOOL bypass = FALSE;
int arg_cnt = 0;
char emailName[1024] = "";
char title[256] = "";
arg_cnt = TC_number_of_arguments(msg.arguments);
ECHO("参数个数为:%d\n",arg_cnt);
POM_AM__set_application_bypass(true);
if (arg_cnt > 0)
{
for (i=0;i<arg_cnt;i++)
{
arg = TC_next_argument(msg.arguments);
ifail = ITK_ask_argument_named_value((const char*)arg, &argflag, &argvalue);
printf("参数1%s \n",argflag);
printf("参数2%s \n",argvalue);
if (stricmp(argflag, "addr") == 0)
{
if(argvalue != NULL)
{
strcpy(emailName,argvalue);
printf("参数邮箱:%s \n",emailName);
}
}else if(stricmp(argflag, "title") == 0){
if(argvalue != NULL)
{
strcpy(title,argvalue);
printf("标题:%s \n",title);
}
}
}
MEM_free(argflag);
MEM_free(argvalue);
}
printf("222222222222222222222\n");
//获取当前触发的任务
task_tag = msg.task;
//获取根流程节点
ITKCALL(ifail = EPM_ask_root_task(task_tag, &rootTask_tag));
//获取目标引用对象
ITKCALL(ifail = EPM_ask_attachments(rootTask_tag, EPM_target_attachment, &att_cnt, &attachments));
//循环目标对象
strcat(wuliao,"{");
for(i = 0;i < att_cnt ; i++){
tag_t item_tag = NULLTAG;
tag_t form_tag = NULLTAG;
//判断是否是item
if(checkIsTypeOrSubtype(attachments[i],"Item")){
item_tag = attachments[i];
}
//判断是否是itemRevision
if(checkIsTypeOrSubtype(attachments[i],"ItemRevision") ){
//通过版本获取item
ITEM_ask_item_of_rev(attachments[i],&item_tag);
int formcount;
tag_t * formTagS;
AOM_ask_value_tags(attachments[i],"IMAN_master_form_rev",&formcount,&formTagS);
if(formcount>0){
form_tag = formTagS[0];
printf("-----------------获得---------------------\n");
}
}
if(stricmp(title, "") != 0){
if(item_tag != NULLTAG){
tag_t owning_user = NULLTAG;
AOM_ask_value_string(item_tag,"item_id",&itemID);//获取对象的item_id
AOM_ask_value_string(item_tag,"object_name",&itemName);//获取对象的名称
AOM_ask_value_tag(item_tag,"owning_user",&owning_user);//获取对象的所有者
ITKCALL(AOM_ask_value_string(owning_user,"user_name",&itemUser))
strcat(wuliao,"[编码:");
strcat(wuliao,itemID);
strcat(wuliao," 名称:");
strcat(wuliao,itemName);
strcat(wuliao," 所有者:");
strcat(wuliao,itemUser);
strcat(wuliao,"]");
//strcat(itemNames,itemName);
if(itemID !=NULL){
MEM_free(itemID);
itemID =NULL;
}
if(itemName !=NULL){
MEM_free(itemName);
itemName =NULL;
}
if(itemUser !=NULL){
MEM_free(itemUser);
itemUser =NULL;
}
}
}else{
if(item_tag != NULLTAG&&form_tag!=NULLTAG){
tag_t owning_user = NULLTAG;
AOM_ask_value_string(item_tag,"item_id",&itemID);//获取对象的item_id
AOM_ask_value_string(item_tag,"object_name",&itemName);//获取对象的名称
AOM_ask_value_tag(item_tag,"owning_user",&owning_user);//获取对象的所有者
ITKCALL(AOM_ask_value_string(owning_user,"user_name",&itemUser))
AOM_ask_value_string(form_tag,"jk8SpecModel",&jk8SpecModel);//获取表单的规格型号
AOM_ask_value_string(form_tag,"jk8TechModel",&jk8TechModel);//获取对象的技术型号
//TODO 通过判断E-U8物料的名称是否以“E-8”开头来决定是否发邮件
compare=strncmp(itemID,"E-8",3);
if(compare == 0){
ECHO("物料为E-U8物料不发送邮件");
if(itemID !=NULL){
MEM_free(itemID);
itemID =NULL;
}
if(itemName !=NULL){
MEM_free(itemName);
itemName =NULL;
}
if(itemUser !=NULL){
MEM_free(itemUser);
itemUser =NULL;
}
if(jk8SpecModel !=NULL){
MEM_free(jk8SpecModel);
jk8SpecModel =NULL;
}
if(jk8TechModel !=NULL){
MEM_free(jk8TechModel);
jk8TechModel =NULL;
}
continue;
//return 0;
}
strcat(wuliao,"[编码:");
strcat(wuliao,itemID);
strcat(wuliao," 名称:");
strcat(wuliao,itemName);
strcat(wuliao," 规格型号:");
strcat(wuliao,jk8SpecModel);
strcat(wuliao," 技术型号::");
strcat(wuliao,jk8TechModel);
strcat(wuliao," 申请者:");
strcat(wuliao,itemUser);
strcat(wuliao,"]");
//strcat(itemNames,itemName);
if(itemID !=NULL){
MEM_free(itemID);
itemID =NULL;
}
if(itemName !=NULL){
MEM_free(itemName);
itemName =NULL;
}
if(itemUser !=NULL){
MEM_free(itemUser);
itemUser =NULL;
}
if(jk8SpecModel !=NULL){
MEM_free(jk8SpecModel);
jk8SpecModel =NULL;
}
if(jk8TechModel !=NULL){
MEM_free(jk8TechModel);
jk8TechModel =NULL;
}
}
}
}
strcat(wuliao,"}");
char cmd[20560] = "\0";
char * tc_root_dir = getenv("tc_root");
char jar_file[2560] = "\0";
if(stricmp(title, "") != 0){
strcpy(jar_file, tc_root_dir);
strcat(jar_file, "\\bin\\");
strcat(jar_file, "JK_Email.jar");
strcpy( cmd, "java -jar " );
strcat(cmd , " \"");
strcat(cmd ,jar_file);
strcat( cmd, "\" \"" );
strcat( cmd, title );
//strcat( cmd, "\" \"" );
//strcat( cmd, itemNames );
/*if(emailNameVec.size() > 0){
strcat( cmd, "\" \"" );
strcat( cmd , emailNameVec[0].c_str());
}*/
//printf( "\n 首选项邮箱 %s\n",emailNameVec[0].c_str() );
if(emailName!=NULL){
strcat( cmd, "\" \"" );
strcat( cmd , emailName);
}
strcat( cmd, "\" \"" );
strcat( cmd, wuliao );
strcat( cmd,"\"");
printf( "\n%s\n",cmd );
}else{
strcpy(jar_file, tc_root_dir);
strcat(jar_file, "\\bin\\");
strcat(jar_file, "JK_SendEmail.jar");
strcpy( cmd, "java -jar " );
strcat(cmd , " \"");
strcat(cmd ,jar_file);
strcat( cmd, "\" \"" );
strcat( cmd, wuliao );
//strcat( cmd, "\" \"" );
//strcat( cmd, itemNames );
/*if(emailNameVec.size() > 0){
strcat( cmd, "\" \"" );
strcat( cmd , emailNameVec[0].c_str());
}*/
//printf( "\n 首选项邮箱 %s\n",emailNameVec[0].c_str() );
if(emailName!=NULL){
strcat( cmd, "\" \"" );
strcat( cmd , emailName);
}
strcat( cmd,"\"");
}
printf( "\n%s\n",cmd );
system( cmd );
if(attachments !=NULL){
MEM_free(attachments);
attachments = NULL;
}
return 0;
}
/**
*
* 发送邮件
*
*/
int JK_send_email_2(EPM_action_message_t msg){
int ifail = 0, att_cnt = 0 ,i =0,compare=0;
tag_t task_tag =NULLTAG , rootTask_tag =NULLTAG ;
char wuliao[10240] = "\0";// * itemName = NULL, * itemID = NULL ,* itemUser = NULL,*jk8SpecModel=NULL,*jk8TechModel=NULL;
//vector<string> emailNameVec ;
printf( "\n ----------发送邮箱开始---------\n");
//获取配置的发送到
//getPrefStrings("JK_SendEmailName_Option",TC_preference_site,emailNameVec);
//获得参数配置-SignName 邮箱1;邮箱2
char arg1value[1024] = "",arg2value[1024] = "",arg3value[1024]="",arg4value[1024]="",
signcounter_info[1024] = "", *value = NULL;
char *argflag =NULL,*argvalue=NULL ,*arg = NULL;
BOOL bypass = FALSE;
int arg_cnt = 0;
char emailName[1024] = "";
char title[256] = "";
char *my_job_name =NULL,*my_task_name=NULL,*template_name = NULL;
tag_t temp_task_tag =NULLTAG;
arg_cnt = TC_number_of_arguments(msg.arguments);
ECHO("参数个数为:%d\n",arg_cnt);
POM_AM__set_application_bypass(true);
if (arg_cnt > 0)
{
for (i=0;i<arg_cnt;i++)
{
arg = TC_next_argument(msg.arguments);
ifail = ITK_ask_argument_named_value((const char*)arg, &argflag, &argvalue);
printf("参数1%s \n",argflag);
printf("参数2%s \n",argvalue);
if (stricmp(argflag, "addr") == 0)
{
if(argvalue != NULL)
{
strcpy(emailName,argvalue);
printf("参数邮箱:%s \n",emailName);
}
}else if(stricmp(argflag, "title") == 0){
if(argvalue != NULL)
{
strcpy(title,argvalue);
printf("标题:%s \n",title);
}
}
}
MEM_free(argflag);
MEM_free(argvalue);
}
printf("222222222222222222222\n");
//获取当前触发的任务
task_tag = msg.task;
AOM_ask_value_string(task_tag,"job_name",&my_job_name);
AOM_ask_value_string(task_tag,"object_name",&my_task_name);
//获取根流程节点
ITKCALL(ifail = EPM_ask_root_task(task_tag, &rootTask_tag));
AOM_ask_value_tag(rootTask_tag,"task_template",&temp_task_tag);
AOM_ask_value_string(temp_task_tag,"object_name",&template_name);
//循环目标对象
// if(strcmp(template_name,"LCM_007")==0
// || strcmp(template_name,"LCM_009")==0
// || strcmp(template_name,"LCM_016")==0
// || strcmp(template_name,"LCM_025")==0
// || strcmp(template_name,"LCM_026")==0
// || strcmp(template_name,"LCM_027")==0){
sprintf(wuliao,"%s(%s)",my_job_name,my_task_name);
char cmd[20560] = "\0";
char * tc_root_dir = getenv("tc_root");
char jar_file[2560] = "\0";
strcpy(jar_file, tc_root_dir);
strcat(jar_file, "\\bin\\");
strcat(jar_file, "JK_SendMail20180102.jar");
strcpy( cmd, "java -jar " );
strcat(cmd , " \"");
strcat(cmd ,jar_file);
strcat( cmd, "\" \"" );
strcat( cmd, title );
strcat( cmd, "\" \"" );
strcat( cmd , emailName);
strcat( cmd, "\" \"" );
strcat( cmd, wuliao );
strcat( cmd,"\"");
system( cmd );
// }
if(my_job_name!=NULL){
MEM_free(my_job_name);
my_job_name =NULL;
}
if(my_task_name!=NULL){
MEM_free(my_task_name);
my_task_name =NULL;
}
if(template_name!=NULL){
MEM_free(template_name);
template_name =NULL;
}
return 0;
}
/**
*
* 设置权限
*
*/
void JK_set_owing_usre_and_group(tag_t obj_tag,tag_t user_tag,tag_t group_tag){
ITKCALL(AOM_refresh(obj_tag,0));
ITKCALL(AOM_lock(obj_tag));
ITKCALL(AOM_set_ownership(obj_tag,user_tag,group_tag));
ITKCALL(AOM_save(obj_tag));
ITKCALL(AOM_unlock(obj_tag));
}
void removeReleaseStatusByName1(string statusName,tag_t rootTask,vector<tag_t> revVec,int num){
tag_t release_status =NULLTAG;
tag_t * attachments = NULL;
int *att_types=NULL;
int ifail = 0;
att_types = (int*) MEM_alloc (sizeof(int) * ( revVec.size() ));
attachments = (tag_t*) MEM_alloc (sizeof(tag_t) * ( revVec.size() ));
//制定目标,数组转换
for ( int indx = 0; indx < revVec.size(); indx++ )
{
att_types[indx] = EPM_target_attachment;//EPM_reference_attachment;
attachments[indx] = revVec[indx];
}
//把所有的版本都添加到流程中
printf("1ifail=>%d\n",ifail);
ITKCALL(ifail=EPM_add_attachments(rootTask,revVec.size(),attachments,att_types));
printf("2ifail=>%d\n",ifail);
ITKCALL(ifail =CR_create_release_status(statusName.c_str(),&release_status));
printf("4ifail=>%d\n",ifail);
if(release_status!=NULLTAG){
POM_AM__set_application_bypass(true);
//可能有多次基线的情况,所以要删除所有的基线状态
for(int n=0;n<num;n++)
{
ITKCALL(ifail =EPM_remove_status_from_targets(release_status,rootTask));//删除目标下对象的状态
}
printf("6ifail=>%d\n",ifail);
POM_AM__set_application_bypass(false);
}
if(att_types)
{
MEM_free(att_types);
att_types = NULL;
}
if(attachments)
{
MEM_free(attachments);
attachments = NULL;
}
}
void removeRevFromTask1(tag_t rootTask,vector<tag_t> revVec){
cout<<"enter removeRevFromTask "<<endl;
tag_t * attachments = NULL;
attachments = (tag_t*) MEM_alloc (sizeof(tag_t) * ( revVec.size() ));
//制定目标,数组转换
for ( int indx = 0; indx < revVec.size(); indx++ )
{
attachments[indx] = revVec[indx];
}
cout<<"mark1--"<<endl;
POM_AM__set_application_bypass(true);
ITKCALL(EPM_remove_attachments(rootTask,revVec.size(),attachments));
POM_AM__set_application_bypass(false);
cout<<"mark2--"<<endl;
if(attachments)
{
MEM_free(attachments);
attachments = NULL;
}
}
/**
*
* 转移权限并且删除基线状态
*
*/
int JK_change_qx(EPM_action_message_t msg){
int ifail = 0 ,
i = 0 ,
j = 0 ,
att_cnt = 0,
spec_cnt = 0,
attach_cnt = 0;
tag_t task_tag = NULLTAG ,
root_task_tag = NULLTAG ,
*attachments =NULL,
owning_user =NULL,
owning_group =NULL;
int release_status_num=0;
int release_status_num_temp=0;
vector<tag_t> target_vec;
// *specification_tags = NULL,
// *attach_tags =NULL;
POM_AM__set_application_bypass(true);
task_tag = msg.task;
ITKCALL(ifail = EPM_ask_root_task(task_tag, &root_task_tag));
//获取目标引用对象
ITKCALL(ifail = EPM_ask_attachments(root_task_tag, EPM_target_attachment, &att_cnt, &attachments));
ITKCALL(ifail = AOM_ask_value_tag(root_task_tag,"owning_user",&owning_user));
ITKCALL(ifail = AOM_ask_value_tag(root_task_tag,"owning_group",&owning_group));
//循环目标对象
for(i = 0 ;i < att_cnt ;i ++)
{
if(checkIsTypeOrSubtype(attachments[i],"ItemRevision")){
tag_t *xgwj_tags = NULL;
tag_t *release_status = NULL;
//tag_t xgwj_tag = NULLTAG;
int xgwj_count = 0;
//TODO 先获取attachments[i]的类型,根据类型,再判断用哪个类型
char *object_type=NULL;
AOM_ask_value_string(attachments[i],"object_type",&object_type);
cout<<"object_type-------------"<<object_type<<endl;
if(strcmp(object_type,"TX2RJGGPSBRevision")==0)
{
ITKCALL(ifail = AOM_ask_value_tags(attachments[i],"TX2ReleaseFileRelation",&xgwj_count,&xgwj_tags));
}else
{
ITKCALL(ifail = AOM_ask_value_tags(attachments[i],"JK8RelatedFiles",&xgwj_count,&xgwj_tags));
}
if(object_type!=NULL)
{
MEM_free(object_type);
object_type=NULL;
}
for(int w = 0;w< xgwj_count;w++)
{
JK_set_owing_usre_and_group(xgwj_tags[w],owning_user,owning_group);
//TODO 2018.5.16用户可能对对象进行了多次基线(比如分阶段和整个项目的),所以要删除所有的基线状态
AOM_ask_value_tags(xgwj_tags[w],"release_status_list",&release_status_num_temp,&release_status);
if(release_status_num<release_status_num_temp)
{
release_status_num=release_status_num_temp;
}
//TODO 2018.4.28删除"基线"状态
target_vec.push_back(xgwj_tags[w]);
//2018.4.18 去除转移对象下挂的数据集的权限
// ITKCALL(AOM_ask_value_tags(xgwj_tags[w],"IMAN_specification",&spec_cnt,&specification_tags));
// ITKCALL(AOM_ask_value_tags(xgwj_tags[w],"TC_Attaches",&attach_cnt,&attach_tags));
// //给IMAN_specification关系下的文件赋予权限
// for(j = 0;j < spec_cnt;j++){
// JK_set_owing_usre_and_group(specification_tags[j],owning_user,owning_group);
// }
// //给TC_Attaches关系下的文件赋予权限
// for(j = 0;j < attach_cnt;j++){
// JK_set_owing_usre_and_group(attach_tags[j],owning_user,owning_group);
// }
//
// if(specification_tags !=NULL){
// MEM_free(specification_tags);
// specification_tags =NULL;
// }
//
// if(attach_tags !=NULL){
// MEM_free(attach_tags);
// attach_tags =NULL;
// }
}
if(xgwj_tags == NULL){
MEM_free(xgwj_tags);
xgwj_tags =NULL;
}
if(release_status == NULL){
MEM_free(release_status);
release_status =NULL;
}
}
}
//TODO 2018.4.28
POM_AM__set_application_bypass(true);
// removeReleaseStatus("删除状态流程",target_vec);
cout<<"mark1"<<endl;
removeReleaseStatusByName1("Baselined",root_task_tag,target_vec,release_status_num);
cout<<"mark2"<<endl;
removeRevFromTask1(root_task_tag,target_vec);
cout<<"mark3"<<endl;
POM_AM__set_application_bypass(false);
cout<<"mark4"<<endl;
if(attachments != NULL){
MEM_free(attachments);
attachments = NULL;
}
POM_AM__set_application_bypass(false);
return 0;
}
/**
* 调用JAR汇总费用信息
*
*/
void summary_fee(char * excelPath, char * logPath){
char cmd[1028] = "\0";
char * tc_root_dir = getenv("tc_root");
char jar_file[256] = "\0";
strcpy(jar_file, tc_root_dir);
strcat(jar_file, "\\bin\\");
strcat(jar_file, "JK_SummaryFee.jar");
strcpy( cmd, "java -jar " );
strcat(cmd , " \"");
strcat(cmd ,jar_file);
strcat( cmd, "\" \"" );
strcat( cmd, excelPath );
strcat( cmd, "\" \"" );
strcat( cmd , logPath);
strcat( cmd,"\"");
printf( "\n%s\n",cmd );
system( cmd );
}
int create_summary_fee_file(char *file_content,char *item_id, char **file_name)
{
time_t now;
struct tm *p;
FILE *filePtr = NULL;
char *temp_dir = getenv("TEMP");
char local_path[MAX_PATH] = "";
time(&now);
p = localtime(&now);
if(temp_dir[strlen(temp_dir) - 1] == '\\')
{
sprintf_s(local_path, "%s%s-%d-%d-%d-%d-%d-%d.dat", temp_dir,item_id,
1900+p->tm_year,p->tm_mon+1 ,p->tm_mday+1 ,p->tm_hour,p->tm_min ,p->tm_sec);
}
else
{
sprintf_s(local_path, "%s\\%s-%d-%d-%d-%d-%d-%d.dat", temp_dir,item_id,
1900+p->tm_year,p->tm_mon+1 ,p->tm_mday+1 ,p->tm_hour,p->tm_min ,p->tm_sec);
}
if((filePtr = fopen(local_path, "wt")) == NULL)
{
printf("Can not create the temp dat file!\n");
return -1;
}
*file_name = (char *)MEM_alloc(sizeof(char)*512);
strcpy((*file_name), local_path);
fwrite(file_content, sizeof(char), strlen(file_content), filePtr);
fclose(filePtr);
return ITK_ok;
}
int summary_free_msexcel(tag_t dataset, char *dat_file, char *ext)
{
tag_t spec_dataset_rev = NULLTAG,
ref_object = NULLTAG;
AE_reference_type_t reference_type;
AE_ask_dataset_latest_rev(dataset, &spec_dataset_rev);
char ref_name[WSO_name_size_c + 1] = "excel";
AE_ask_dataset_named_ref(spec_dataset_rev, ref_name, &reference_type, &ref_object);
if(reference_type == AE_PART_OF)
{
char pathname[SS_MAXPATHLEN] = "";
IMF_ask_file_pathname(ref_object, SS_WNT_MACHINE, pathname);
char origin_file_name[IMF_filename_size_c + 1] = "";
IMF_ask_original_file_name(ref_object, origin_file_name);
char new_ds_name[WSO_name_size_c + 1] = "";
char *new_file_name = USER_new_file_name(new_ds_name, ref_name, ext, 0);
char *temp_dir = getenv("temp");
char temp_file[SS_MAXPATHLEN] = "";
strcpy(temp_file, temp_dir);
strcat(temp_file, "\\");
strcat(temp_file, new_file_name);
IMF_export_file(ref_object, temp_file);
int iCnt;
char *user_lib_env,pTempStr[500];
char local_path[MAX_PATH] = "";
/*char cmd[256] = "";
strcpy( cmd, "SubstMacros-MSExcel.wsf" );
strcat( cmd, " \"" );
strcat( cmd, temp_file );
strcat( cmd, "\" \"" );
strcat( cmd, dat_file );
strcat( cmd, "\"" );
printf( "\n%s\n",cmd );
system( cmd );
*/
summary_fee(temp_file,dat_file);
//strcpy(user_lib_env, local_path);
tag_t new_file_tag = NULLTAG;
IMF_file_t file_descriptor;
IMF_import_file(temp_file, new_file_name, SS_BINARY, &new_file_tag, &file_descriptor);
IMF_set_original_file_name(new_file_tag, origin_file_name);
IMF_close_file(file_descriptor);
AOM_save(new_file_tag);
AOM_unlock(new_file_tag);
AOM_lock(spec_dataset_rev);
//CALL(AOM_load (dataset));
//CALL(AOM_load(spec_dataset_rev));
AE_remove_dataset_named_ref_by_tag(spec_dataset_rev, ref_name, ref_object);
AE_add_dataset_named_ref(spec_dataset_rev, ref_name, AE_PART_OF, new_file_tag);
AOM_save(spec_dataset_rev);
AOM_unlock(spec_dataset_rev);
}
return ITK_ok;
}
/**
* 汇总物料信息
*
*
*
*/
int JK_matereial_summary_fee(EPM_action_message_t msg){
int ifail =0,
att_cnt = 0,
excelCnt = 0;
tag_t task_tag = NULLTAG,
root_task_tag = NULLTAG,
* attachments =NULL,
* excelTags =NULL;
char *dataset_type = NULL;
task_tag = msg.task;
POM_AM__set_application_bypass(true);
ITKCALL(ifail = EPM_ask_root_task(task_tag, &root_task_tag));
//获取目标引用对象
ITKCALL(ifail = EPM_ask_attachments(root_task_tag, EPM_target_attachment, &att_cnt, &attachments));
for(int i = 0;i < att_cnt;i++){
tag_t taskTag = attachments[i];
if(checkIsTypeOrSubtype(taskTag,"JK8BOMCostEstmRevision")){
ITKCALL(ifail = AOM_ask_value_tags(taskTag,"IMAN_specification",&excelCnt,&excelTags));
for(int j = 0 ;j < excelCnt;j++){
AOM_ask_value_string(excelTags[j],"object_type",&dataset_type);
char *data_file = NULL;
create_summary_fee_file("","费用汇总日志", &data_file);
if( data_file == NULL )
{
continue;
}
ECHO("\n 创建文本文件%s",data_file);
if(strcmp(dataset_type, "MSExcel") ==0 )
{
summary_free_msexcel(excelTags[j],data_file,"xls");
}
else if(strcmp(dataset_type, "MSExcelX") ==0)
{
summary_free_msexcel(excelTags[j],data_file,"xlsx");
}
if(dataset_type!=NULL){
MEM_free(dataset_type);
dataset_type = NULL;
}
}
if(excelTags!=NULL)
{
MEM_free(excelTags);
excelTags =NULL;
}
}
}
if(attachments!= NULL){
MEM_free(attachments);
attachments = NULL;
}
POM_AM__set_application_bypass(false);
return 0;
}
/*******************************************************
*
* 获取子TOP Bomline属性的属性
*
********************************************************/
void JK_get_bomline_props(tag_t top_line_tag,char errs[10240],char cherrs[10240])
{
int ifail = 0 ,
i = 0,
status_count = 0 ,
c_line_count = 0 ,
rev_form_cnt = 0 ,
isra_cou=0,
isra_cou_form=0;
tag_t rev_tag =NULLTAG,
item_tag = NULLTAG,
bom_window_tag = NULLTAG,
*c_line_tags = NULL,
*rev_form_tags = NULL,
*isra_tags = NULL,
*isra_tags_form = NULL;
char item_id[ITEM_id_size_c + 1] = "\0",
rev_id[ITEM_id_size_c + 1] = "\0",
*user_name = NULL,
*jk8_mjshl = NULL,
create_date_str[32] = "\0",
person_name[SA_person_name_size_c + 1] = "\0";
//因为生产代码权限控制的缘故,需要在此处开旁路
POM_AM__set_application_bypass(true);
printf("1111");
ITKCALL(AOM_ask_value_tag(top_line_tag,"bl_line_object",&rev_tag));//获取BOMLINE关联的版本
ITKCALL(ITEM_ask_item_of_rev(rev_tag,&item_tag));
ITKCALL(ITEM_ask_id(item_tag,item_id));//物料编码
printf("判断是否发布%s\n",item_id);
ITKCALL(AOM_ask_value_tags(rev_tag,"release_status_list",&isra_cou,&isra_tags));//判断是否发布
if(isra_cou==0){
printf("%s未发布\n",item_id);
strcat(errs,"[");
strcat(errs,item_id);
strcat(errs,"]");
}else{
//20200427如果是整机才检查组件就不检查
//20200429如果是开发状态就不做检查
ITKCALL(ITEM_ask_rev_id(rev_tag,rev_id));//获取版本号
//20200318
char* object_type_release=NULL;
logical develop=false;
for (int f=0;f<isra_cou;f++){
AOM_ask_value_string(isra_tags[f],"object_name",&object_type_release);
if(strcmp(object_type_release,"JK8Develop")==0 || strcmp(object_type_release,"jk8Develop")==0){
develop=true;
break;
}
}
if(develop==false)
{
for (int f=0;f<isra_cou;f++){
AOM_ask_value_string(isra_tags[f],"object_name",&object_type_release);
if(strcmp(object_type_release,"jk8Checking")==0 || strcmp(object_type_release,"JK8Checking")==0){
printf("%s发布状态\n",item_id);
strcat(cherrs,"[");
strcat(cherrs,item_id);
strcat(cherrs,"]");
break;
}
}
}
if(object_type_release!=NULL)
{
MEM_free(object_type_release);
object_type_release=NULL;
}
//ITKCALL(AOM_ask_value_tags(rev_tag,"IMAN_master_form_rev",&rev_form_cnt,&rev_form_tags)); //不判断表单
//if(rev_form_cnt>0){
// ITKCALL(AOM_ask_value_tags(rev_form_tags[0],"release_status_list",&isra_cou_form,&isra_tags_form));//判断表单是否发布
// if(isra_cou_form==0){
// printf("%s表单未发布\n",item_id);
// strcat(errs,"[");
// strcat(errs,item_id);
// strcat(errs,"]表单");
// }
// if(isra_tags_form!=NULL){
// MEM_free(isra_tags_form);
// isra_tags_form =NULL;
// }
//}
//if(rev_form_tags!=NULL){
// MEM_free(rev_form_tags);
// rev_form_tags =NULL;
//}
}
ITKCALL(BOM_line_ask_all_child_lines(top_line_tag,&c_line_count,&c_line_tags));
if(c_line_count == 0){
printf("没有BOM结构");
POM_AM__set_application_bypass(false);
return;
}
for (int i = 0; i < c_line_count; i++)
{
cout<<"2----"<<endl;
JK_get_bomline_props( c_line_tags[i],errs,cherrs);
}
POM_AM__set_application_bypass(false);
if(c_line_tags!=NULL){
MEM_free(c_line_tags);
c_line_tags =NULL;
}
}
int JK_Bom_is_release(EPM_rule_message_t msg){
printf("===================================\n");
printf("根据BOM子件是否发布,限制流程发起 开始\n");
printf("===================================\n");
//参数定义
int ifail = EPM_go ,
arg_cnt = 0 ,
i = 0 ,
att_cnt = 0,
c_line_count=0;
tag_t task_tag = NULLTAG ,
root_task_tag =NULLTAG ,
*attachments = NULL,
bom_window_tag = NULLTAG,
top_line_tag=NULLTAG,
*c_line_tags=NULL,
rev_tag=NULL,
item_tag=NULL;
char * argflag = NULL ,
*argvalue =NULL ,
*arg = NULL ,
arg_value[1024] = "\0",
material_type[1024] = "\0",
type_class[WSO_object_type_size_c+1] ="\0",
all_errs[10240]="\0",
check_errs[10240]="\0", // 20200318
item_id[ITEM_id_size_c + 1] = "\0";
logical is_debug = false;
//记录错误信息
map<string,int> errMap;
vector<string> type_vec;
//获取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, "include_type") == 0)
{
if(argvalue != NULL)
{
strcpy(arg_value,argvalue);
Split(arg_value,"/",type_vec);
}else{
string key_id;
key_id.assign("缺少include_type参数");
errMap.insert(pair<string,int>(key_id,HANDLER_ARGUMENT_ERROR));
}
}
if (stricmp(argflag, "material_type") == 0)
{
if(argvalue != NULL)
{
strcpy(material_type,argvalue);
}
}
}
MEM_free(argflag);
MEM_free(argvalue);
}
//获取目标对象
task_tag = msg.task;
if(task_tag == NULLTAG)
{
return EPM_nogo;
}
EPM_ask_root_task(task_tag, &root_task_tag);
EPM_ask_attachments(root_task_tag, EPM_target_attachment, &att_cnt, &attachments);
for(i = 0 ;i < att_cnt;i++){
char errs[1024]="\0";
char cherrs[1024]="\0"; //20200318
tag_t target_tag = attachments[i];
//获取对象的类型 PSBOMViewRevision
ITKCALL( WSOM_ask_object_type(target_tag, type_class));
ECHO("对象类型%s\n",type_class);
string type_str ;
type_str.assign(type_class);
vector<string>::iterator it;
it = find(type_vec.begin(),type_vec.end(),type_str);
if(it == type_vec.end()){
ECHO("此类型不包含在include_type中 跳过\n");
continue;
}
POM_AM__set_application_bypass(true);
ITKCALL(BOM_create_window(&bom_window_tag));//创建window视图
ITKCALL(BOM_set_window_top_line_bvr(bom_window_tag,target_tag,&top_line_tag));//获取顶层bomline
ITKCALL(BOM_line_ask_all_child_lines(top_line_tag,&c_line_count,&c_line_tags));
ITKCALL(AOM_ask_value_tag(top_line_tag,"bl_line_object",&rev_tag));//获取BOMLINE关联的版本
ITKCALL(ITEM_ask_item_of_rev(rev_tag,&item_tag));
ITKCALL(ITEM_ask_id(item_tag,item_id));//物料编码
if(c_line_count == 0){
printf("没有BOM结构\n");
}else{
printf("有BOM结构 数量%d\n",c_line_count);
for (int t = 0; t < c_line_count; t++)
{
printf("开始遍历对象%s\n",item_id);
POM_AM__set_application_bypass(true);
cout<<"1----"<<endl;
JK_get_bomline_props(c_line_tags[t],errs,cherrs); //20200318
POM_AM__set_application_bypass(false);
}
}
if(strcmp(errs,"\0")!=0){
strcat(all_errs,"存在对象{");
strcat(all_errs,item_id);
strcat(all_errs,"}下关联子件");
strcat(all_errs,errs);
strcat(all_errs,"未发布!\n");
}
//20200318
if(strcmp(cherrs,"\0")!=0){
strcat(check_errs,"存在对象{");
strcat(check_errs,item_id);
strcat(check_errs,"}下关联子件");
strcat(check_errs,cherrs);
strcat(check_errs,"处于验证状态!\n");
}
if(c_line_tags!=NULL)
{
MEM_free(c_line_tags);
c_line_tags =NULL;
}
ITKCALL(BOM_close_window(bom_window_tag));
}
if(strcmp(all_errs,"\0")!=0){
ifail=EPM_nogo;
printf("错误:%s\n",all_errs);
EMH_store_error_s1(EMH_severity_information,278701,all_errs);//错误弹窗
}
//如果是整机,任何子阶有验证状态的物料 则整机的流程编制无法完成
if(strcmp(material_type,"1")==0)
{
if(strcmp(check_errs,"\0")!=0){
ifail=EPM_nogo;
printf("错误:%s\n",check_errs);
EMH_store_error_s1(EMH_severity_information,278701,check_errs);//错误弹窗
}
}
if(attachments!=NULL)
{
MEM_free(attachments);
attachments =NULL;
}
return ifail;
}