dll变更逻辑修改

master
陈翼晖 1 year ago
parent 474e7ea5c3
commit 85ab7d65b7

@ -1,16 +1,22 @@
#include <tc/tc.h>
#include <epm/epm.h>
#include <string>
#include <map>
#include "epm_handler_common.h"
#include <vector>
#include <iostream>
#include "CRUL_server_call_httpserver.h"
#include <tccore/aom.h>
#include <tccore/aom_prop.h>
#include "common_itk_util.h"
#include "tc_util.h"
#include <tc/preferences.h>
#include "string_utils.h"
#include <fclasses\tc_date.h>
#include "CRUL_server_call_httpserver.h"
#include "ocilib.h"
#include "cJSON.h"
#include "tinyxml2.h"
using namespace std;
using namespace tinyxml2;
void connectSql() {
int url_num = 0;
char** url_vals = NULL;
@ -27,10 +33,44 @@ void closeConn() {
DisConnServer();
}
/*
SRM
*/
int CHINT_SendSRM(EPM_action_message_t msg) {
int ifail = ITK_ok;
tag_t root_task = NULLTAG, *sub_tasks = NULL, current_task = NULLTAG, type_tag = NULLTAG;
int sub_task_count = 0, attachCounts = 0;
tag_t* taskAttches = NULLTAG;
tag_t cur_task = NULLTAG;
current_task = msg.task;
EPM_ask_root_task(msg.task, &root_task);
EPM_ask_sub_tasks(root_task, &sub_task_count, &sub_tasks);
EPM_ask_attachments(root_task, EPM_target_attachment, &attachCounts, &taskAttches);
//多流程对象 ZT2_Procure Revision
for (int i = 0; i < attachCounts; i++) {
int pdfCnt = 0;
char *objType, *wbsNo, *materialNo, *revisionId;
tag_t procureRev = taskAttches[i], *datasets;
AOM_ask_value_string(procureRev, OBJECTTYPE, &objType);
if (strcmp(objType, PROCURETYPE) == 0) {
//获取版本属性wbs、物料编码、版本、获取规范关系下的pdf文件获取文件和uid通过接口推送至SRM系统
AOM_ask_value_string(procureRev, WBSNO, &wbsNo);
AOM_ask_value_string(procureRev, MATERIALNO, &materialNo);
AOM_ask_value_string(procureRev, REVISIONID, &revisionId);
AOM_ask_value_tags(procureRev, SPECIFICATION, &pdfCnt, &datasets);
//获取数据集的名称和UID
}
}
return ifail;
}
cJSON* getDrawingInform(tag_t changeTag) {
int changeNo,signNo, placesNo,beforeNo,verBefNo,aftNo,aftVerNo,reasonNo,processTypeNo;
int changeNo, signNo, placesNo, beforeNo, verBefNo, aftNo, aftVerNo, reasonNo, processTypeNo, prodNct;
char **changeDrawingNos, **signs, **placesNos, **changeBefs, **versionBefs,
**changeAfts, **versionAfts, **changeReasons, **processTypes;
**changeAfts, **versionAfts, **changeReasons, **processTypes, **products;
AOM_ask_value_strings(changeTag, "zt2_ChangeDrawingNo",&changeNo, &changeDrawingNos);
AOM_ask_value_strings(changeTag, "zt2_Sign", &signNo, &signs);
AOM_ask_value_strings(changeTag, "zt2_PlacesNo", &placesNo, &placesNos);
@ -38,6 +78,7 @@ cJSON* getDrawingInform(tag_t changeTag) {
AOM_ask_value_strings(changeTag, "zt2_SZVersionbefore", &verBefNo, &versionBefs);
AOM_ask_value_strings(changeTag, "zt2_ChangeAfter1", &aftNo, &changeAfts);
AOM_ask_value_strings(changeTag, "zt2_SZRevisedversion", &aftVerNo, &versionAfts);
AOM_ask_value_strings(changeTag, PROP_PRODUCT, &prodNct, &products);
AOM_ask_value_strings(changeTag, "zt2_ChangeReason", &reasonNo, &changeReasons);
AOM_ask_value_strings(changeTag, "zt2_ProcessType1", &processTypeNo, &processTypes);
cJSON* infomations = cJSON_CreateArray();
@ -50,20 +91,105 @@ cJSON* getDrawingInform(tag_t changeTag) {
cJSON_AddStringToObject(infomation, "S_PreChangeVersion", verBefNo > i ? versionBefs[i] : "");
cJSON_AddStringToObject(infomation, "S_AfterChange", aftNo > i ? changeAfts[i] : "");
cJSON_AddStringToObject(infomation, "S_AfterChangeVersion", aftVerNo > i ? versionAfts[i] : "");
cJSON_AddStringToObject(infomation, JSON_TXDJ, prodNct > i ? products[i] : "");
cJSON_AddStringToObject(infomation, "S_ChangeReason", reasonNo > i ? changeReasons[i] : "");
cJSON_AddStringToObject(infomation, "S_ZZPCL", processTypeNo > i ? processTypes[i] : "");
cJSON_AddItemToArray(infomations, infomation);
}
return infomations;
}
cJSON* getEHDepart(string ecnCode,string section,string &uuid) {
string searchSql = "SELECT \"actionstatement\",\"result\",\"pctime\",\"remark\",\"principal\" FROM CHINT_ECN_NOTIFICATION where \"ecncode\" = '%s' and \"section\" = '%s' order by \"no\"";
char selectRecord2[400];
sprintf(selectRecord2, searchSql.c_str(), ecnCode.c_str(), section);
int outputColumn1 = 0, outputValueCount1 = 0;
char*** outputValue1 = NULL;
printf("selectRecord2 ===> %s\n", selectRecord2);
QuerySQLNoInputParam(selectRecord2, &outputColumn1, &outputValueCount1, &outputValue1);
cJSON* infomations = cJSON_CreateArray();
for (int i = 0; i < outputValueCount1; i++) {
cJSON* infomation = cJSON_CreateObject();
if (i == 0) {
vector<string> uuidVec;
Split(outputValue1[i][4],";", uuidVec);
if (uuidVec.size() > 1 && strstr(uuidVec[1].c_str(),"null") == NULL) {
uuid = uuidVec[1];
}
}
cJSON_AddStringToObject(infomation, "S_JSBaction", outputValue1[i][0]);
cJSON_AddStringToObject(infomation, "S_PD", outputValue1[i][1]);
cJSON_AddStringToObject(infomation, "T_PlanTime", outputValue1[i][2]);
cJSON_AddStringToObject(infomation, "S_Remark", outputValue1[i][3]);
cJSON_AddItemToArray(infomations, infomation);
}
return infomations;
}
//上传文件到minio
string uploadMinio(string jarName, string logPath) {
char cmd[256] = "";
strcpy(cmd, "java -jar \"");
//strcat(cmd, jar_file);
strcat(cmd, getenv("TC_ROOT"));
strcat(cmd, "\\bin\\");
strcat(cmd, jarName.c_str());
strcat(cmd, "\" ");
string strResult;
strcat(cmd, logPath.c_str());
char buf[8000] = { 0 };
printf("路径:\n%s\n", cmd);
FILE* pf = NULL;
if ((pf = _popen(cmd, "r")) == NULL) {
printf("接口返回:\n%s", "1");
}
while (fgets(buf, sizeof buf, pf)) {
strResult += buf;
}
_pclose(pf);
return strResult;
//return;
}
/*
*/
int file_xcopy_stod(const char* source_dir, const char* destination_dir)
{
ifstream infile(source_dir, ios::in | ios::binary);//二进制形式打开
if (infile.is_open() == 0) {//出错处理
cout << "文件" << source_dir << "打开失败" << endl;
return -1;
}
ofstream outfile(destination_dir, ios::out | ios::binary);//二进制形式打开
if (outfile.is_open() == 0) {//出错处理
cout << "文件" << destination_dir << "打开失败" << endl;
infile.close();//记得关闭
return -1;
}
//开始读写
const int FLUSH_NUM = 1024 * 1024;//缓冲区大小设置为1M
char* ch = new(nothrow)char[FLUSH_NUM];
if (ch == NULL) {//出错处理
cout << "动态申请内存失败" << endl;
infile.close();//记得关闭
outfile.close();//记得关闭
return -1;
}
while (!infile.eof()) {
infile.read(ch, FLUSH_NUM);
outfile.write(ch, infile.gcount());//写入读入的成功个数
}
delete[]ch;//记得释放
infile.close();//记得关闭
outfile.close();//记得关闭
return 0;
}
//变更对象发送到OA
int CHINT_task_complete(EPM_action_message_t msg) {
int CHINT_ECN_SendOA(EPM_action_message_t msg) {
int ifail = ITK_ok;
ECHO("=========================================================\n");
ECHO("CHINT_task_complete ¿ªÊ¼Ö´ÐÐ\n");
ECHO("CHINT_ECN_SendOA 开始执行\n");
ECHO("=========================================================\n");
tag_t root_task = NULLTAG, *sub_tasks = NULL, current_task = NULLTAG, type_tag = NULLTAG;
int sub_task_count = 0, occur_of_counts = 0;
@ -76,19 +202,35 @@ int CHINT_task_complete(EPM_action_message_t msg) {
EPM_ask_sub_tasks(root_task, &sub_task_count, &sub_tasks);
EPM_ask_attachments(root_task, EPM_target_attachment, &occur_of_counts, &taskAttches);
//获取url地址
char* url;
char* url, *userId, *urlId;//
PREF_ask_char_value("CHINT_ECNSendOAUrl", 0, &url);
PREF_ask_char_value("CHINT_OAUserID_RUL", 0, &urlId);
char* log_file = NULL;
CreateLogFile("CHINT_ECN_SendOA", &log_file); //
//获取当前流程目标
connectSql();
POM_get_user_id(&userId);
string email = userId;
email.append("@chint.com");
string userXML = getUserIdOA(email, urlId);
//获取登陆组
tag_t group;
char *groupName, *taskUid;
POM_ask_group(&groupName, &group);
AOM_ask_value_string(group, PROP_GROUP_NAME, &groupName);
string userCode = readXmlId(userXML);
ITK__convert_tag_to_uid(msg.task, &taskUid); //流程uid
for (int count = 0; count < occur_of_counts; count++) {
char *type;
tag_t taskTag = taskAttches[count];
AOM_ask_value_string(taskTag, "object_type", &type);
if (strcmp(type, "ZT2_Change") == 0) {
//获取属性 查询数据库填写JSON
char* changeType,*productModel,
int unitCnt, processCnt = 0;
char* changeType, *productModel,
*productName, *fileName, *contractNo, *contractName,
*changeDateStr, *changeUnit;
*changeDateStr, **changeUnits, *itemId, *changeRequestNo, **processTypes;
AOM_ask_value_string(taskTag, "item_id", &itemId);
date_t changeDate;
AOM_ask_value_string(taskTag, "zt2_ChangeType", &changeType);//变更类型
AOM_ask_value_string(taskTag, "zt2_ProductModel", &productModel);//产品型号
@ -97,10 +239,35 @@ int CHINT_task_complete(EPM_action_message_t msg) {
AOM_ask_value_string(taskTag, "zt2_ContractNo", &contractNo); // 合同代号
AOM_ask_value_string(taskTag, "zt2_ContractName", &contractName); // 合同名称
AOM_ask_value_date(taskTag, "zt2_ChangeDate", &changeDate); // 变更实施日期
AOM_ask_value_string(taskTag, "zt2_ChangeUnit1", &changeUnit); // ºÏͬÃû³Æ
AOM_ask_value_strings(taskTag, "zt2_ChangeUnit1",&unitCnt, &changeUnits); // 合同名称
AOM_ask_value_string(taskTag, "zt2_ChangRequestNo", &changeRequestNo); // 更改通知单号
AOM_ask_value_strings(taskTag, PROP_PROCESS, &processCnt, &processTypes);
cJSON* paramValue = cJSON_CreateObject();
//json添加字段
cJSON_AddStringToObject(paramValue, "S_ChangeTypes", changeType);
/*S_ProductFeature 产品特性 字符串 A; B; C
S_GCFeeature A; B; C*/
cJSON_AddStringToObject(paramValue, S_GCDM, groupName);//工厂
cJSON_AddStringToObject(paramValue, "S_ChangeCode", itemId);//更改申请单号
cJSON_AddStringToObject(paramValue, "S_PLMCode", taskUid);
cJSON_AddStringToObject(paramValue, "S_ChangeNotificationCode", changeRequestNo);
string productFeature, changeTypeStr;
if (processCnt > 0) {
char *type = processTypes[0];
if (strcmp(type, "Y") == 0) {
productFeature = S_Product;
}
else {
productFeature = S_Process;
}
}
if (strstr(changeType, S_ZSChange) != NULL) {
changeTypeStr = S_ZSChange;
}
else {
changeTypeStr = S_LSChange;
}
cJSON_AddStringToObject(paramValue, "S_ProductFeature", productFeature.c_str());
cJSON_AddStringToObject(paramValue, "S_ChangeTypes", changeTypeStr.c_str());
cJSON_AddStringToObject(paramValue, "S_ProductNumber", productModel);
cJSON_AddStringToObject(paramValue, "S_ProductName", productName);
cJSON_AddStringToObject(paramValue, "S_Pcodename", fileName);
@ -108,16 +275,57 @@ int CHINT_task_complete(EPM_action_message_t msg) {
cJSON_AddStringToObject(paramValue, "S_ContractName", contractName);
DATE_date_to_string(changeDate, "%Y-%m-%d", &changeDateStr);
cJSON_AddStringToObject(paramValue, "T_MaterialDate", changeDateStr);
cJSON_AddStringToObject(paramValue, "S_FFBM", changeUnit);
cJSON_AddStringToObject(paramValue, "S_FFBM", changeUnits[0]);
//EH_DrawingInformation图样信息
cJSON* infomations = getDrawingInform(taskTag);
cJSON_AddItemToObject(paramValue, "EH_DrawingInformation", infomations);
string jsbUUid = "", gybUUid = "", zlbUUid = "",
scbUUid = "", cgbUUid = "", xszxUUid = "", cwbUUid = "";
cJSON* jsbZx = getEHDepart(itemId, "技术部", jsbUUid);
cJSON_AddItemToObject(paramValue, "EH_JSBZX", jsbZx);
cJSON* gybZx = getEHDepart(itemId, "工艺部", gybUUid);
cJSON_AddItemToObject(paramValue, "EH_GYBZX", gybZx);
cJSON* zlbZx = getEHDepart(itemId, "质量部", zlbUUid);
cJSON_AddItemToObject(paramValue, "EH_ZLBZX", zlbZx);
cJSON* scbZx = getEHDepart(itemId, "生产部", scbUUid);
cJSON_AddItemToObject(paramValue, "EH_SCBZX", scbZx);
cJSON* cgbZx = getEHDepart(itemId, "采购部", cgbUUid);
cJSON_AddItemToObject(paramValue, "EH_CGBZX", cgbZx);
cJSON* saleCenter = getEHDepart(itemId, "销售中心", xszxUUid);
cJSON_AddItemToObject(paramValue, "EH_XSZXZX", saleCenter);
cJSON* cwbZx = getEHDepart(itemId, "财务部", cwbUUid);
cJSON_AddItemToObject(paramValue, "EH_CWBZX", cwbZx);
cJSON_AddStringToObject(paramValue, "S_JSBZRR", jsbUUid.c_str());
cJSON_AddStringToObject(paramValue, "S_GYBZRR", gybUUid.c_str());
cJSON_AddStringToObject(paramValue, "S_ZLBZRR", zlbUUid.c_str());
cJSON_AddStringToObject(paramValue, "S_SCBZRR", scbUUid.c_str());
cJSON_AddStringToObject(paramValue, "S_CGBZRR", cgbUUid.c_str());
cJSON_AddStringToObject(paramValue, "S_XSZXZRR", xszxUUid.c_str());
cJSON_AddStringToObject(paramValue, "S_CWBZRR", cwbUUid.c_str());
char *json_to_char = cJSON_Print(paramValue);
string returnMsg = ecnSendOA(userCode.c_str(), json_to_char, url);
WriteLog("组织之后的JSON\n %s\n", json_to_char);
WriteLog("回传信息\n %s\n", returnMsg.c_str());
if (!returnMsg.empty()) {
EMH_store_error_s1(EMH_severity_user_error, EMH_USER_error_base, returnMsg.c_str());
}
}
}
closeConn();
//
CloseLog();
//string str = uploadMinio("uploadMinio.jar", log_file);
char date_string[MAX_PATH_LENGTHE], logFileName[MAX_PATH_LENGTHE];;
time_t now;
struct tm *p;
time(&now);
//current_time(&status_now);
p = localtime(&now);
memset(date_string, 0, sizeof(date_string));
sprintf(date_string, "%4d%02d%02d%02d%02d%02d", 1900 + p->tm_year, p->tm_mon + 1, p->tm_mday, p->tm_hour, p->tm_min, p->tm_sec);
sprintf(logFileName, "%s\\%s_%s.log", LOG_PATH, taskUid, date_string);
file_xcopy_stod(log_file, logFileName);
//printf("str %s \n", str.c_str());
return ifail;
}

@ -68,7 +68,7 @@ int CHINT_SendOAMaterial(EPM_action_message_t msg) {
int att_cnt = 0, rev_count = 0;
tag_t rootTask_tag = NULLTAG;
tag_t* attachments = NULL,
* rev_tags = NULL;
*rev_tags = NULL;
char* objtype = NULL;
time_t timep;
@ -117,6 +117,35 @@ int CHINT_SendOAMaterial(EPM_action_message_t msg) {
}
//修改数据库状态
int url_num = 0;
char** url_vals = NULL;
PREF_ask_char_values("database_tc", &url_num, &url_vals);
string urlSql = url_vals[0];
urlSql.append("/").append(url_vals[2]);
string errorBuff;
//map<string,
printf("urlSql ==> %s \n", urlSql.c_str());
if (ConnServer(url_vals[3], url_vals[4], (char*)urlSql.c_str()) == -1)
{
printf("提示:中间数据表访问失败\n");
//ifail = 1;
}
char sql5[1024] = "\0";
sprintf(sql5, "update \"CHINT_ FROCK\" set STATE = '%s' where instanceId = '%s'", "设计中", zt2_formnumber);
printf("提示:sql5==%s\n", sql5);
if (ExecuteSQLNoInputParam(sql5) == -1)
{
printf("提示:数据插入 失败, %s \n", sql5);
return 1;
}
else {
ExecuteSQLNoInputParam("commit");
}
WriteLog("item_id->%s", cPCode);
WriteLog("zt2_formnumber->%s", zt2_formnumber);
WriteLog("zt2_MaterialNo->%s", zt2_MaterialNo);
@ -144,6 +173,20 @@ int CHINT_SendOAMaterial(EPM_action_message_t msg) {
ifail = 1;
}
else {
//接口传递成功
char sql[1024] = "\0";
sprintf(sql, "update \"CHINT_ FROCK\" set STATE = '%s' where instanceId = '%s'", "已完成", zt2_formnumber);
printf("提示:sql==%s\n", sql);
if (ExecuteSQLNoInputParam(sql) == -1)
{
printf("提示:数据插入 失败, %s \n", sql);
return 1;
}
else {
ExecuteSQLNoInputParam("commit");
}
}
}
CloseLog();
return ifail;

@ -1,55 +1,17 @@
#include "CRUL_server_call_httpserver.h"
#include <map>
#include <string>
#include <sstream>
#include <iostream>
//#define HTTP_HOST "localhost"
//#define HTTP_POST 9293
//#include <boost/property_tree/ptree.hpp>
//#include <boost/property_tree/json_parser.hpp>
#include"tinyxml2.h"
using namespace tinyxml2;
size_t write_data(void* ptr, size_t size, size_t nmemb, void* stream) {
string data((const char*)ptr, (size_t)size * nmemb);
*((stringstream*)stream) << data << endl;
return size * nmemb;
}
//string callHttpserver(string signinfoJsonString,string url)
//{
// CURL* curl;
// CURLcode res;
// curl = curl_easy_init();
// printf("发送地址:%s\n", url);
// std::stringstream out;
// if (curl) {
// curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
// curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
// //curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
// //curl_easy_setopt(curl, CURLOPT_DEFAULT_PROTOCOL, "https");
// struct curl_slist* headers = NULL;
// headers = curl_slist_append(headers, "Accept-Charset: UTF-8");
// headers = curl_slist_append(headers, "Content-Type: application/json;charset=UTF-8");
// curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
// // 设置接收数据的处理函数和存放变量
// curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
// curl_easy_setopt(curl, CURLOPT_WRITEDATA, &out);
// printf("发送内容:%s\n", signinfoJsonString.c_str());
// //printf("data=>%s\n",signinfoJsonString.c_str());
// const char* data = signinfoJsonString.c_str();
// curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data);
// curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 10);
// curl_easy_setopt(curl, CURLOPT_TIMEOUT, 20);
// res = curl_easy_perform(curl);
//
// if (res != 0) {
// string errMessage = curl_easy_strerror(res);
// }
//
// printf("返回值:%d\n", res);
// }
// string str_json = out.str();
// curl_easy_cleanup(curl);
// printf("str_json===>%s\n", str_json.c_str());
// return str_json;
//}
string callHttpserver(string signinfoJsonString, string url){
CURL *curl;
CURLcode res;
@ -61,12 +23,12 @@ string callHttpserver(string signinfoJsonString, string url){
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
curl_easy_setopt(curl, CURLOPT_DEFAULT_PROTOCOL, "https");
struct curl_slist *headers = NULL;
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &out);
headers = curl_slist_append(headers, "Content-Type: application/json");
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
const char *data = signinfoJsonString.c_str();
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &out);
res = curl_easy_perform(curl);
if (res != 0) {
string errMessage = curl_easy_strerror(res);
@ -155,6 +117,95 @@ string sendOA(string sfid, string instanceId, string entityParamValues, string u
printf("return Msg===>%s\n", str_json.c_str());
return str_json;
}
char* G2U(const char* gb2312)
{
int len = MultiByteToWideChar(CP_ACP, 0, gb2312, -1, NULL, 0);
wchar_t* wstr = new wchar_t[len + 1];
memset(wstr, 0, len + 1);
MultiByteToWideChar(CP_ACP, 0, gb2312, -1, wstr, len);
len = WideCharToMultiByte(CP_UTF8, 0, wstr, -1, NULL, 0, NULL, NULL);
char* str = new char[len + 1];
memset(str, 0, len + 1);
WideCharToMultiByte(CP_UTF8, 0, wstr, -1, str, len, NULL, NULL);
if (wstr) delete[] wstr;
return str;
}
char* U2G(const char* utf8)
{
int len = MultiByteToWideChar(CP_UTF8, 0, utf8, -1, NULL, 0);
wchar_t* wstr = new wchar_t[len + 1];
memset(wstr, 0, len + 1);
MultiByteToWideChar(CP_UTF8, 0, utf8, -1, wstr, len);
len = WideCharToMultiByte(CP_ACP, 0, wstr, -1, NULL, 0, NULL, NULL);
char* str = new char[len + 1];
memset(str, 0, len + 1);
WideCharToMultiByte(CP_ACP, 0, wstr, -1, str, len, NULL, NULL);
if (wstr) delete[] wstr;
return str;
}
string readXmlId(string xmlMsg) {
printf("xmlMsg %s \n", xmlMsg.c_str());
tinyxml2::XMLDocument doc;
doc.Parse(U2G(xmlMsg.c_str()));
tinyxml2::XMLElement* root = doc.RootElement();
tinyxml2::XMLElement* typeEle = root->FirstChildElement("TYPE");
tinyxml2::XMLElement* item = root->FirstChildElement("items");
char * type = (char*)typeEle->GetText();
if (strcmp(type, "S") == 0) {
printf("1111");
tinyxml2::XMLElement* itemsCs = item->FirstChildElement("EH_HR_UserItems_CS");
tinyxml2::XMLElement* code = itemsCs->FirstChildElement("Code");
return code->GetText();
}
return typeEle->GetText();
}
/*获取用户ID
*/
string getUserIdOA(string email, string url) {
CURL* curl;
CURLcode res;
std::stringstream out;
curl = curl_easy_init();
if (curl) {
curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
curl_easy_setopt(curl, CURLOPT_DEFAULT_PROTOCOL, "https");
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &out);
struct curl_slist* headers = NULL;
headers = curl_slist_append(headers, "Content-Type: application/x-www-form-urlencoded");
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, false);
string temp; //Email=string&Name=string %E9%82%B5%E9%AA%8F%E9%BD%90
temp.append("Email=&Name=%E9%82%B5%E4%BF%8A%E9%BD%90");// .append("Email=").append("&Name=邵俊齐"); //.append(email)
printf("temp=%s\n", temp.c_str());
const char* data = temp.c_str();
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data);
res = curl_easy_perform(curl);
//curl_easy_strerror
printf("temp=%d\n", res);
}
string str_json = out.str();
curl_easy_cleanup(curl);
printf("return Msg===>%s\n", str_json.c_str());
return str_json;
}
//解析OA的返回信息
string readXmlMSG(string xmlMsg) {
printf("xmlMsg %s \n", xmlMsg.c_str());
tinyxml2::XMLDocument doc;
doc.Parse(xmlMsg.c_str());
tinyxml2::XMLElement* root = doc.RootElement();
tinyxml2::XMLElement* succEle = root->FirstChildElement("Success");//传递状态
tinyxml2::XMLElement* messageEle = root->FirstChildElement("Message");//错误原因
string msg = "";
if (strcmp(succEle->GetText(), "false") == 0) {
msg.append("更改通知单推送OA系统失败请联系管理员处理流程继续执行,错误原因: ");
msg.append(U2G(messageEle->GetText()));
}
return msg;
}
/*±ä¸ü֪ͨµ¥´«µÝOA
*/
string ecnSendOA(string instanceId, string entityParamValues, string url) {
@ -175,7 +226,8 @@ string ecnSendOA(string instanceId, string entityParamValues, string url) {
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, false);
string temp;
temp.append("workflowCode=EH_TE_ChangeNotice").append("&userCode=").
append(instanceId).append("&finishStart=true").append("&entityParamValues=").append(entityParamValues);
append(instanceId).append("&finishStart=true").append("&entityParamValues=").
append(G2U(entityParamValues.c_str()));
printf("temp=%s\n", temp.c_str());
const char* data = temp.c_str();
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data);
@ -186,65 +238,54 @@ string ecnSendOA(string instanceId, string entityParamValues, string url) {
string str_json = out.str();
curl_easy_cleanup(curl);
printf("return Msg===>%s\n", str_json.c_str());
return str_json;
string returnMsg = readXmlMSG(str_json);
return returnMsg;
}
/*调用云派接口获取项目的指派人
*/
string getAssignFromYP(string url) {
CURL* curl;
CURLcode res;
std::stringstream out;
curl = curl_easy_init();
if (curl) {
curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
curl_easy_setopt(curl, CURLOPT_DEFAULT_PROTOCOL, "https");
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &out);
struct curl_slist* headers = NULL;
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
res = curl_easy_perform(curl);
printf("temp=%d\n", res);
}
string str_json = out.str();
curl_easy_cleanup(curl);
return U2G(str_json.c_str());
}
void updatePiProject(string json,string url) {
CURL *curl;
CURLcode res;
curl = curl_easy_init();
std::stringstream out;
if (curl) {
curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
curl_easy_setopt(curl, CURLOPT_DEFAULT_PROTOCOL, "https");
struct curl_slist *headers = NULL;
headers = curl_slist_append(headers, "Content-Type: application/json");
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
const char *data = G2U(json.c_str());
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &out);
res = curl_easy_perform(curl);
}
string str_json = out.str();
curl_easy_cleanup(curl);
printf("str_json===>%s\n", str_json.c_str());
}
//void callHttpserverDwgtopdf(string signinfoJsonString, char* HTTP_HOST)
//{
// CURL* curl;
// CURLcode res;
// char httpUrl[1028] = "\0";
// curl = curl_easy_init();
// sprintf(httpUrl, "http://%s:%d/server/dwgtopdf", HTTP_HOST, HTTP_POST);
// if (curl) {
// curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
// curl_easy_setopt(curl, CURLOPT_URL, httpUrl);
// //curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
// //curl_easy_setopt(curl, CURLOPT_DEFAULT_PROTOCOL, "https");
// struct curl_slist* headers = NULL;
// headers = curl_slist_append(headers, "Accept-Charset: GBK");
// headers = curl_slist_append(headers, "Content-Type: application/json;charset=GBK");
// curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
// WriteLog("发送内容:%s\n", signinfoJsonString.c_str());
//// printf("data=>%s\n", signinfoJsonString.c_str());
// const char* data = signinfoJsonString.c_str();
// curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data);
// curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 10);
// curl_easy_setopt(curl, CURLOPT_TIMEOUT, 20);
// res = curl_easy_perform(curl);
// WriteLog("返回值:%d\n", res);
//
// }
// curl_easy_cleanup(curl);
//}
//
//void callHttpserverMail(string signinfoJsonString, char* HTTP_HOST)
//{
// CURL* curl;
// CURLcode res;
// char httpUrl[4096] = "\0";
// WriteLog("内容长度%d\n", signinfoJsonString.size());
// curl = curl_easy_init();
// sprintf(httpUrl, "http://%s:%d/server/sendmail", HTTP_HOST, HTTP_POST);
//// printf("call=>%s \n", httpUrl);
// WriteLog("发送的路径:%s\n", httpUrl);
// if (curl) {
// curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
// curl_easy_setopt(curl, CURLOPT_URL, httpUrl);
// //curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
// //curl_easy_setopt(curl, CURLOPT_DEFAULT_PROTOCOL, "https");
// struct curl_slist* headers = NULL;
// headers = curl_slist_append(headers, "Accept-Charset: GBK");
// headers = curl_slist_append(headers, "Content-Type: application/json;charset=GBK");
// curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
//// curl_easy_setopt(curl, CURLOPT_HTTPHEADER, "Expect:");
// WriteLog("发送内容:%s\n", signinfoJsonString.c_str());
// // printf("data=>%s\n", signinfoJsonString.c_str());
// const char* data = signinfoJsonString.c_str();
// curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data);
// curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 10);
// curl_easy_setopt(curl, CURLOPT_TIMEOUT, 20);
// res = curl_easy_perform(curl);
// WriteLog("返回值:%d\n", res);
// }
// curl_easy_cleanup(curl);
//}

@ -6,3 +6,7 @@ string callHttpserver(string signinfoJsonString, string url);
string callHttpGet(string url);
string sendOA(string sfid, string instanceId, string entityParamValues, string url);
string ecnSendOA(string instanceId, string entityParamValues, string url);
string readXmlId(string xmlMsg);
string getUserIdOA(string email, string url);
string getAssignFromYP(string url);
void updatePiProject(string json, string url);

@ -77,9 +77,10 @@ time_t getTimeStamp()
string callHttpserver2(string jsonStr,string jarName) {
char date[128] = "";
time_t now = time(0);
tm* p = localtime(&now);
char date[128] = "";
sprintf_s(date, "%04d%02d%02d%02d%02d%02d", 1900 + p->tm_year, p->tm_mon + 1, p->tm_mday, p->tm_hour, p->tm_min, p->tm_sec);
//把数据用写入文件

@ -502,6 +502,51 @@ void getGxbmMap(tag_t processTag, map<string, tag_t>& gxDocMap, map<string, Time
}
BOM_close_window(ebom_window);
}
//查询ID
tag_t * queryItem(char* itemId,tag_t newGx,char *relation) {
tag_t query_tag = NULLTAG,*tags=NULLTAG;
ITKCALL(QRY_find("零组件...", &query_tag));
char* qry_entries[1] = { "零组件 ID" }, *qry_values[1] = { itemId };
int n_found;
ITKCALL(QRY_execute(query_tag, 1, qry_entries, qry_values, &n_found, &tags));
if (n_found > 0) {
ITKCALL(AOM_set_value_tags(newGx, relation, n_found, tags));
}
return tags;
}
//根据数据库获取ID 2023/12/19 新增逻辑
void queryProcessRule(char *windWay, boolean isXq, char *processCode, tag_t &newGx) {
char selectGyId[200]; //根据工厂M060 二级工序编码 绕线方式(线圈) 获取工时信息
if (isXq) {
string sqlRuleId = "select \"processroutefiles\",\"esopfiles\" from CHINT_PROCESS_SOP_RULE where \"companycode\" = 'M060' and \"windway\" = '%s' and \"gxcode\" = '%s' ";
sprintf(selectGyId, sqlRuleId.c_str(), windWay, processCode);
}
else {
string sqlRuleId = "select \"processroutefiles\",\"esopfiles\" from CHINT_PROCESS_SOP_RULE where \"companycode\" = 'M060' and \"gxcode\" = '%s' ";
sprintf(selectGyId, sqlRuleId.c_str(), processCode);
}
printf("selectGyId %s \n", selectGyId);
int outputColumn3 = 0, outputValueCount3 = 0;
char*** outputValue3 = NULL;
QuerySQLNoInputParam(selectGyId, &outputColumn3, &outputValueCount3, &outputValue3);
printf("outputValueCount3 %d \n", outputValueCount3);
string processIds, esopIds;
for (int j = 0; j < outputValueCount3; j++) {
char* processId = outputValue3[j][0];
char* esopId = outputValue3[j][1];
if (strcmp(processId, "") != 0) {
processIds.append(processId).append(";");
}
if (strcmp(esopId, "") != 0) {
esopIds.append(esopId).append(";");
}
}
queryItem((char*)processIds.c_str(), newGx,"ZT2_ProcessRuleRelation");
queryItem((char*)esopIds.c_str(), newGx, "ZT2_ProcGuidBookRelation");
}
tag_t clone_process_from_template(char* process_item_id, boolean isXq, string productZu, string xqfs,string th, string lastId)
{
tag_t item_tag = NULLTAG;
@ -575,14 +620,14 @@ tag_t clone_process_from_template(char* process_item_id, boolean isXq, string pr
updateTemGxCode(clone_tag, temGxMap);
}
//if (!isXq) {
map<string, tag_t> tmpProcessMap;
map<string, tag_t> tmpProcessMap; //存放的是二级工序编码对应的二级工序版本 模板的
//vector<string> timeVec;
//工艺模板
map<string, TimeBean > beanMap;
//根据数据库配置修改工时
getGxbmMap(revision_tag, tmpProcessMap, beanMap);
map<string, tag_t> newProcessMap;
char selectGyId[200];
map<string, tag_t> newProcessMap;//存放的是二级工序编码对应的二级工序版本 克隆出来的
char selectGyId[200]; //根据产品族 模板id 绕线方式(线圈) 获取工时信息
if (isXq) {
sprintf(selectGyId, sqlGxTime2.c_str(), productZu.c_str(), process_item_id, xqfs.c_str());
}
@ -594,7 +639,7 @@ tag_t clone_process_from_template(char* process_item_id, boolean isXq, string pr
string gyId;
printf("search3 ===> %s\n", selectGyId);
QuerySQLNoInputParam(selectGyId, &outputColumn1, &outputValueCount1, &outputValue1);
//查询结果
//查询结果 四种工时
for (int num = 0; num < outputValueCount1; num++) {
string gxbm = outputValue1[num][0];
string rgsj = outputValue1[num][1];
@ -635,6 +680,7 @@ tag_t clone_process_from_template(char* process_item_id, boolean isXq, string pr
if (ret) {
searchTh = "1ZDB5**000X";
}
//查询二级工序编码的信息,更新克隆出来的BOM的工序编码
string sqlFl = "select \"materialno\",\"EJBM\",\"quantity\",\"xuhao\" from CHINT_GYFL_001 where \"ProductZu\" = '%s' and \"TuHao\" ='%s' and \"quantity\" !='/' ORDER BY CAST(\"xuhao\" AS DECIMAL) asc";
char selectFlId[600];
sprintf(selectFlId, sqlFl.c_str(), productZu.c_str(), searchTh);
@ -668,8 +714,8 @@ tag_t clone_process_from_template(char* process_item_id, boolean isXq, string pr
getGxbmMap(clone_tag, newProcessMap, beanMap, flBeanMap,th, lastId);
map<string, tag_t>::iterator it;
//复制“工艺守则”、“工序作业指导书”
for (it = tmpProcessMap.begin(); it != tmpProcessMap.end(); it++) {
//复制“工艺守则”、“工序作业指导书” 旧逻辑
/*for (it = tmpProcessMap.begin(); it != tmpProcessMap.end(); it++) {
string gxbm = it->first;
tag_t tmpGx = it->second;
if (newProcessMap.count(gxbm) != 0) {
@ -688,6 +734,31 @@ tag_t clone_process_from_template(char* process_item_id, boolean isXq, string pr
AOM_save(newGx);
AOM_unlock(newGx);
}
}*/
//复制“工艺守则”、“工序作业指导书” 2023/12/19新增逻辑 CHINT_PROCESS_SOP_RULE 表中查询
for (it = newProcessMap.begin(); it != newProcessMap.end(); it++) {
string gxbm = it->first;
tag_t newGx = it->second;
queryProcessRule((char*)xqfs.c_str(), isXq, (char*)gxbm.c_str(), newGx);
/*if (newProcessMap.count(gxbm) != 0) {
tag_t* procGuidBooks, *processRules;
int cnt2 = 0, cnt3 = 0;
if (isXq) {
sprintf(selectGyId, sqlGxTime2.c_str(), productZu.c_str(), process_item_id, xqfs.c_str());
}
tag_t newGx = newProcessMap[gxbm];
ITKCALL(AOM_ask_value_tags(tmpGx, "ZT2_ProcGuidBookRelation", &cnt2, &procGuidBooks));
ITKCALL(AOM_ask_value_tags(tmpGx, "ZT2_ProcessRuleRelation", &cnt3, &processRules));
AOM_lock(newGx);
if (cnt2 > 0) {
ITKCALL(AOM_set_value_tags(newGx, "ZT2_ProcGuidBookRelation", cnt2, procGuidBooks));
}
if (cnt3 > 0) {
ITKCALL(AOM_set_value_tags(newGx, "ZT2_ProcessRuleRelation", cnt3, processRules));
}
AOM_save(newGx);
AOM_unlock(newGx);
}*/
}
//}
return clone_tag;

File diff suppressed because it is too large Load Diff

@ -48,6 +48,7 @@ regex qq_reg("^1ZDB5.*\\d{1,}1000X.*"); //\\d{5,}$
struct newCBean
{
int num;
string blQty;
tag_t cLine;
};
struct EBomBean
@ -88,6 +89,7 @@ struct PMPC
};
PMPC pmpc;
vector<PRD> prds;
/**/
void save_representation2222(tag_t primaryTag, tag_t secondTag, char* relationType)
{
@ -126,6 +128,12 @@ void replaceBom(tag_t newTopLine, tag_t newChild) {
}
string sql_query = "select FeatureList from CcemVW_GoodsFeature where GoodsCode ='%s' ";
/**
* EBOM
* @param childPm EBOM
* @param map key:E val:P
* @param topPrev P
*/
void saveAsCycle(EBomBean& childPm, map<string, tag_t>& map, tag_t& topPrev) {
tag_t tcType, newItem, newRev;
char* newId;
@ -147,6 +155,7 @@ void saveAsCycle(EBomBean& childPm, map<string, tag_t>& map, tag_t& topPrev) {
childPm.pRev.push_back(map[eRevUid]);
}
else {
//另存操作
char* newid = NULL;
logical isModified = FALSE;
tag_t item_type_tag;
@ -190,6 +199,7 @@ void saveAsCycle(EBomBean& childPm, map<string, tag_t>& map, tag_t& topPrev) {
}
}
}
//另存之后需要替换BOM按EBOM结构搭建PBOM
if (childPm.parentBean.size() > 0) {
EBomBean parentBean = childPm.parentBean[0];
vector <tag_t> pRevs = parentBean.pRev;
@ -237,7 +247,17 @@ void getSpecs(tag_t rev, vector<string> &vec) {
//}
}
string insertSql = "insert into chint_material(\"Code\",\"PUID\",\"PmpcCode\",\"GoodsCode\",\"GoodsName\",\"UnitCode\",\"CompanyCode\",\"BpNo\",\"Spec\",\"TeRe\",\"State\",\"User\",\"Time\",\"Condition\",\"Info\") values('%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s',to_date('%s','yyyy-mm-dd HH24:mi:ss'),'%s','%s')";
//根据项数拆解线圈,并申请物料编码
/**
* 线
* @param rev
* @param user_id
* @param jsons JSON
* @param groupId
* @param spec
* @param nameNum A
* @param dcproxy
*/
tag_t send1(tag_t rev, string now,
char* user_id, vector<string>& jsons, string groupId, string spec, char* nameNum, char* idss, tag_t dcproxy) {
//map<tag_t, vector<string>>::iterator it;
@ -451,7 +471,14 @@ string getXqName(char *name) {
return xq;
}
//添加A项线圈的子行
/**
* 线A线
* @param c_line_tags
* @param c_line_count
* @param len
* @param newPAmatnr A线
* @param lastFlag
*/
void addToAmatnr(tag_t *c_line_tags, int c_line_count, int len, tag_t newPAmatnr,boolean lastFlag) {
tag_t mantr = newPAmatnr, ebom_window, bom_line;
@ -554,6 +581,7 @@ void replaceBom(EBomBean& childPm, map<string, tag_t>& map, int len, tag_t dcpro
ITKCALL(AOM_ask_value_string(owning_group, "name", &grpId));
ITKCALL(AOM_ask_value_string(owning_user, "user_id", &user_id));
vector<string> specs;
//获取物料属性规格
getSpecs(tzRev, specs);
printf("获取规格结束 \n");
time_t now;
@ -574,7 +602,7 @@ void replaceBom(EBomBean& childPm, map<string, tag_t>& map, int len, tag_t dcpro
tag_t* bvr_list = NULL;
(ITEM_rev_list_bom_view_revs(axqPmatnr, &bvr_count, &bvr_list));
printf("bvr_count=%d\n", bvr_count);
//没有物料视图的时候需要创建一个
if (bvr_count == 0) {
tag_t newView, newViewBvr, pitem;
ITEM_ask_item_of_rev(axqPmatnr, &pitem);
@ -595,6 +623,7 @@ void replaceBom(EBomBean& childPm, map<string, tag_t>& map, int len, tag_t dcpro
(BOM_create_window(&ebom_window));
(BOM_set_window_top_line_bvr(ebom_window, bvr_list[0], &bom_line)); //顶层bom获取
//ITKCALL(AOM_ask_value_tag(bom_line, "bl_line_object", &mantr));
//线圈转PBOM时候的特殊处理:申请物料 A、B、C项线圈 然后把原来的线圈的子项拆分数量复制
ITKCALL(BOM_line_ask_all_child_lines(bom_line, &c_line_count, &c_line_tags));
printf("int===>%d\n", len);
vector<tag_t> newPAmatnrs;
@ -625,7 +654,8 @@ void replaceBom(EBomBean& childPm, map<string, tag_t>& map, int len, tag_t dcpro
printf("jsons ===> %s \n", jsons[i].c_str());
string url = "http://10.128.20.35:9002/Post/PLM_Goods";
string jsonUf = G2U222(jsons[i].c_str());
string msg = callHttpserver(jsonUf, url);
//调用接口申请物料
//string msg = callHttpserver(jsonUf, url);
}
}
}
@ -686,7 +716,14 @@ string getRemarkMsg(string remark,int len) {
}
return xs;
}
/**
* EBOM
* @param tag_t EBOM
* @param parentBean EBOMPBOM
* @param len
* @param pErev EBOME
* @param errBuff
*/
void recyReadEBom(tag_t pLine, EBomBean parentBean, vector<EBomBean>& beans, int len, tag_t pErev, string& errBuff) {
int c_line_count, cnt2, numFac, cnt3;
@ -742,7 +779,7 @@ void recyReadEBom(tag_t pLine, EBomBean parentBean, vector<EBomBean>& beans, int
if (ret) {
char *zt2_ifpbom;
AOM_ask_value_string(eRev, "zt2_ifpbom", &zt2_ifpbom);
if (zt2_ifpbom!=NULL&&strcmp(zt2_ifpbom, "P") == 0) {
if (zt2_ifpbom != NULL && strcmp(zt2_ifpbom, "P") == 0) {
continue;
}
int cc_cnt;
@ -806,6 +843,7 @@ void recyReadEBom(tag_t pLine, EBomBean parentBean, vector<EBomBean>& beans, int
}
}
//获取dcproxy用户
tag_t findDcUser() {
tag_t* tags;
tag_t query = NULLTAG;
@ -846,27 +884,32 @@ public:
};
struct EBomUpBean
{
string blQuantity;
string matnrNo;
tag_t bomline;
tag_t mantr;
vector<EBomUpBean> parentBean; //遍历EBOM时候的父级
vector<newCBean> c_lines; //EBOM中的子件 只有线圈用
};
//遍历EBOM 存放所有EBOM的
//遍历EBOM 存放所有EBOM的更新时使用
void updatePbomCycle(tag_t eLine, string &errBuff, int len, EBomUpBean &upBean) {
int c_line_count;
tag_t *c_line_tags;
ITKCALL(BOM_line_ask_all_child_lines(eLine, &c_line_count, &c_line_tags));
//printf("upBean===>%s\n", upBean.matnrNo.c_str());
for (int i = 0; i < c_line_count; i++) {
char* ifpBom, *matnrNo;
char* ifpBom, *matnrNo, *childQty;
tag_t c_line_tag = c_line_tags[i], eRev;
ITKCALL(AOM_ask_value_tag(c_line_tag, "bl_line_object", &eRev));
AOM_ask_value_string(c_line_tag, BL_QUANTITY, &childQty);
AOM_ask_value_string(eRev, "zt2_ifpbom", &ifpBom);
AOM_ask_value_string(eRev, "zt2_MaterialNo", &matnrNo);
EBomUpBean cBean;
cBean.matnrNo = matnrNo;
//printf("CChild===>%s\n", matnrNo);
cBean.blQuantity = childQty;
cBean.mantr = eRev; //E物料
cBean.bomline = c_line_tag;
int num = 0;
tag_t* mantrs;
@ -915,18 +958,20 @@ void updatePbomCycle(tag_t eLine, string &errBuff, int len, EBomUpBean &upBean)
newCBean aBean;
aBean.num = blQty / len;
aBean.cLine = cc_line;
aBean.blQty = blQty;
cBean.c_lines.push_back(aBean);
}
}
else {
int blQty = atoi(bl_quantity);
if (blQty % len != 0 && strstr(bl_line_name, "线") == NULL) {
if (blQty % markMsg.length() != 0 && strstr(bl_line_name, "线") == NULL) {
errBuff.append("P类物料:").append(pId).append("下子件").append(c_pId)
.append("无法整除,请检查。").append("\n");
}
else {
newCBean aBean;
aBean.num = blQty / len;
aBean.blQty = blQty;
aBean.cLine = cc_line;
cBean.c_lines.push_back(aBean);
}
@ -1017,6 +1062,11 @@ tag_t saveAsUpdate(tag_t eRev, char *uid, tag_t pLine) {
}
return newRev;
}
/**
* EPBOM
* @param eRev E
* @param newChild
*/
tag_t saveAsUpdate(tag_t eRev, tag_t newChild) {
char* newid = NULL;
logical isModified = FALSE;
@ -1057,32 +1107,6 @@ tag_t saveAsUpdate(tag_t eRev, tag_t newChild) {
}
{
ITKCALL(BOM_line_replace(newChild, NULLTAG, newRev, NULLTAG));
//int bvr_count = 0, c_line_count;
//tag_t ebom_window = NULLTAG;
//tag_t bom_line = NULLTAG, * c_line_tags;
//(BOM_create_window(&ebom_window));
//tag_t* bvr_list = NULL;
//(ITEM_rev_list_bom_view_revs(pRevs[0], &bvr_count, &bvr_list));
//printf("bvr_count=%d\n", bvr_count);
//(BOM_set_window_top_line_bvr(ebom_window, bvr_list[0], &bom_line)); //顶层bom获取
////ITKCALL(AOM_ask_value_tag(bom_line, "bl_line_object", &mantr));
//ITKCALL(BOM_line_ask_all_child_lines(bom_line, &c_line_count, &c_line_tags));
//for (int ind = 0; ind < c_line_count; ind++) {
// tag_t c_line_tag = c_line_tags[ind], mantr;
// AOM_ask_value_tag(c_line_tag, "bl_line_object", &mantr);
// char* eRevUid2;
// ITK__convert_tag_to_uid(mantr, &eRevUid2);
// if (strcmp(eRevUid2, eRevUid) == 0) {
// if (childPm.pRev.size() > 0) {
// printf("eRevUid===>%s\n", eRevUid);
// ITKCALL(BOM_line_replace(c_line_tag, NULLTAG, childPm.pRev[0], NULLTAG));
// }
// }
//}
//BOM_save_window(ebom_window);
//BOM_close_window(ebom_window);
}
return newRev;
}
@ -1171,7 +1195,7 @@ void createAXxq(tag_t eRev, tag_t pRev, int len, tag_t dcproxy) {
printf("jsons ===> %s \n", jsons[i].c_str());
string url = "http://10.128.20.35:9002/Post/PLM_Goods";
string jsonUf = G2U222(jsons[i].c_str());
string msg = callHttpserver(jsonUf, url);
//string msg = callHttpserver(jsonUf, url);
}
}
}
@ -1241,13 +1265,246 @@ void addToAmatnrUp(vector<EBomUpBean> vecs, int len, tag_t newPAmatnr, boolean l
ITKCALL(BOM_save_window(ebom_window));
ITKCALL(BOM_close_window(ebom_window));
}
void startUpdate(EBomUpBean upBean, tag_t bom_line, int len, tag_t dcproxy,tag_t ebom_window2) {
/**
* EBOM EBOM
* @param upBean EBOM
*/
map<string, double> getEBomMesg(EBomUpBean upBean) {
vector<EBomUpBean> childs = upBean.parentBean;
map<string, double> eMap;
for (int i = 0; i < childs.size(); i++) {
EBomUpBean cBean = childs[i];
double qtyPXn = 1;
string matnrNo = cBean.matnrNo;
printf("matnrNo====> %s\n", matnrNo.c_str());
string cnt = cBean.blQuantity;
if (strcmp(cnt.c_str(), "") != 0) {
qtyPXn = atof(cnt.c_str()); //atof(oldQty);
}
if (eMap.count(matnrNo) > 0) {
eMap[matnrNo] = eMap[matnrNo] + qtyPXn;
}
else {
eMap[matnrNo] = qtyPXn;
}
}
return eMap;
}
/**
* PBOM线
* @param mantrRev P
* @param flag bom
*/
void getPBomMsg(tag_t bom_line, map<string, double>& bomMsgMap) {
int c_line_count;
tag_t* c_line_tags;
ITKCALL(BOM_line_ask_all_child_lines(bom_line, &c_line_count, &c_line_tags));
printf("c_line_count===>%d\n", c_line_count);
for (int t = 0; t < c_line_count; t++) {
tag_t c_Rev;
char *matnrNo, *cnt, *objName;
ITKCALL(AOM_ask_value_tag(c_line_tags[t], BL_LINE_OBJECT, &c_Rev));
AOM_ask_value_string(c_Rev, MATERIALNO, &matnrNo);
printf("zt2_MaterialNo===>%s\n", matnrNo);
double qtyPXn = 1;
AOM_ask_value_string(c_line_tags[t], BL_QUANTITY, &cnt);
if (strcmp(cnt, "") != 0) {
qtyPXn = atof(cnt);
}
if (bomMsgMap.count(matnrNo) > 0) {
bomMsgMap[matnrNo] = bomMsgMap[matnrNo] + qtyPXn;
}
else {
bomMsgMap[matnrNo] = qtyPXn;
}
}
}
/**
* PBOM EBOM
* 线P - 线P - ABC - 线E
* @param mantrRev P
* @param flag bom
*/
map<string, double> getPBomMsg(tag_t mantrRev, bool& flag, vector<tag_t>& termCoils) {
map<string, double> bomMsgMap;
tag_t* bvr_list = NULL, bom_line, ebom_window;
int bvr_count = 0;
ITKCALL(ITEM_rev_list_bom_view_revs(mantrRev, &bvr_count, &bvr_list));
//没有BOM视图创建
if (bvr_count == 0) {
flag = true;
return bomMsgMap;
}
ITKCALL(BOM_create_window(&ebom_window));
//移除原来的
ITKCALL(BOM_set_window_top_line(ebom_window, NULL, mantrRev, NULLTAG, &bom_line));
int c_line_count;
tag_t* c_line_tags;
ITKCALL(BOM_line_ask_all_child_lines(bom_line, &c_line_count, &c_line_tags));
printf("c_line_count===>%d\n", c_line_count);
for (int t = 0; t < c_line_count; t++) {
tag_t c_Rev;
char *matnrNo, *cnt, *objName;
ITKCALL(AOM_ask_value_tag(c_line_tags[t], "bl_line_object", &c_Rev));
AOM_ask_value_string(c_Rev, "zt2_MaterialNo", &matnrNo);
double qtyPXn = 1;
AOM_ask_value_string(c_line_tags[t], "bl_quantity", &cnt);
AOM_ask_value_string(c_Rev, OBJECT_NAME, &objName);
printf("zt2_MaterialNo===>%s objName ===> %s\n", matnrNo, objName);
if (checkName(objName)) {
termCoils.push_back(c_Rev);
getPBomMsg(c_line_tags[t], bomMsgMap);
continue;
}
if (strcmp(cnt, "") != 0) {
qtyPXn = atof(cnt);
}
if (bomMsgMap.count(matnrNo) > 0) {
bomMsgMap[matnrNo] = bomMsgMap[matnrNo] + qtyPXn;
}
else {
bomMsgMap[matnrNo] = qtyPXn;
}
}
BOM_close_window(ebom_window);
return bomMsgMap;
}
/**
* EbomDbom
* @param dMap D -
* @param eMap E -
*/
boolean combEAndDbom(map<string, double> dMap, map<string, double> eMap) {
map<string, double>::iterator it;
//名称模糊匹配
for (it = dMap.begin(); it != dMap.end(); it++) {
string s = it->first;
double dnum = dMap[s];
if (eMap.count(s) == 0) {
return true;
}
else if (dnum != eMap[s]) {
return true;
}
}
return false;
}
/**
* 线
* @param newPMantr
* @param oldPMantr
*/
void changeCoilOwner(tag_t newPMantr, tag_t oldPMantr) {
tag_t dsuser, *oldRevisions;
int revNum = 0, revNumOld = 0;
AOM_ask_value_tags(newPMantr, "structure_revisions", &revNumOld, &oldRevisions);
if (revNumOld > 0) {
AOM_ask_value_tag(oldRevisions[0], "owning_user", &dsuser);
tag_t defGroup, *structure_revisions;
ITKCALL(AOM_ask_value_tag(dsuser, "default_group", &defGroup));
AOM_ask_value_tags(newPMantr, "structure_revisions", &revNum, &structure_revisions);
if (revNum > 0) {
ITKCALL(AOM_set_ownership(structure_revisions[0], dsuser, defGroup));
}
}
}
/**
* DBOMEBOM
* @param topBean BOM
* @param isTop
* @param hasChange
* @param saveAsMap uid -
* @param pMaterial P
*/
tag_t saveAsMaterial(EBomUpBean topBean, boolean isTop,
string &hasChange, map<string, tag_t>& saveAsMap, tag_t pMaterial) {
char* oldUid;
ITK__convert_tag_to_uid(pMaterial, &oldUid);
if (saveAsMap.count(oldUid) > 0) {
return saveAsMap[oldUid];
}
bool flagTest = false;
map<string, double> dBomMesg = getEBomMesg(topBean);
vector<tag_t> termCoils;
map<string, double> eBomMesg = getPBomMsg(pMaterial, flagTest, termCoils);
if (flagTest) {
printf("dddd=====\n");
return pMaterial;
}
printf("dBomMesg[%d]", dBomMesg.size());
printf("eBomMesg[%d]\n", eBomMesg.size());
boolean needAs = false;
if (dBomMesg.size() != eBomMesg.size()) {
//升版 + 发布
needAs = true;
}
else if (combEAndDbom(dBomMesg, eBomMesg)) {
//升版 + 发布
needAs = true;
}
if (needAs) {
printf("=======TEST====== %d \n", termCoils.size());
//升版并发布 没发布的产成品直接更新
if (isTcm(pMaterial) && isBomViewTcm(pMaterial)) {
ITKCALL(ITEM_copy_rev(pMaterial, NULL, &pMaterial));
TCMAndOwner(pMaterial);
if (isTop) {
hasChange = "true";
}
saveAsMap[oldUid] = pMaterial;
}
for (int i = 0; i < termCoils.size(); i++) {
char* itemId;
AOM_ask_value_string(termCoils[i], "item_id", &itemId);
printf("=======itemId====== %s \n", itemId);
if (isTcm(termCoils[i]) && isBomViewTcm(termCoils[i])) {
tag_t newPMantr;
ITKCALL(ITEM_copy_rev(termCoils[i], NULL, &newPMantr));
changeCoilOwner(newPMantr, termCoils[i]);
//TCMAndOwner(newPMantr);
}
}
}
return pMaterial;
}
/**
* PBOM
* @param upBean EBOM
* @param bom_line PBOM
* @param len
* @param dcproxy dcproxy
* @param isTop
* @param hasChange
* @param saveAsMap
*/
void startUpdate(EBomUpBean upBean, tag_t pBomTag, int len, tag_t dcproxy,
boolean isTop, string &hasChange, map<string, tag_t>& saveAsMap) {
//记录的EBOM下面的子件
vector<EBomUpBean> vecs = upBean.parentBean;
int c_line_count = 0;
tag_t* c_line_tags;
vector<string> matnrVec;
//线圈
vector<tag_t> xqTagVec;
//PBOM
map<string, tag_t> pBomMap;
//线圈对象需要特别处理
tag_t pBomTop = saveAsMaterial(upBean, isTop, hasChange, saveAsMap, pBomTag);
tag_t ebom_window2, *bvr_list2, bom_line;
int bvr_count2 = 0;
char* pBomUid;
(BOM_create_window(&ebom_window2));
ITK__convert_tag_to_uid(pBomTop, &pBomUid);
(ITEM_rev_list_bom_view_revs(pBomTop, &bvr_count2, &bvr_list2));
if (bvr_count2 == 0) {
//errBuff.append("不存在EBOM请检查\n");
//原来没有PBOM
return;
}
ITKCALL(BOM_set_window_top_line_bvr(ebom_window2, bvr_list2[0], &bom_line)); //顶层bom获取
ITKCALL(BOM_line_ask_all_child_lines(bom_line, &c_line_count, &c_line_tags));
for (int i = 0; i < c_line_count; i++) {
char* ifpBom, *matnrNo, *name;
@ -1259,6 +1516,7 @@ void startUpdate(EBomUpBean upBean, tag_t bom_line, int len, tag_t dcproxy,tag_t
//移除PBOM
printf("zt2_MaterialNo ===>%s ifpBom==>%s\n", matnrNo, ifpBom);
if (strcmp(ifpBom, "P") == 0) {
//A项线圈是不带P的
matnrVec.push_back(matnrNo);
pBomMap[matnrNo] = c_line_tag;
//BOM_line_cut(c_line_tag);
@ -1277,6 +1535,7 @@ void startUpdate(EBomUpBean upBean, tag_t bom_line, int len, tag_t dcproxy,tag_t
int c_line_countXq = 0;
ITKCALL(BOM_line_ask_all_child_lines(xqLine, &c_line_countXq, &c_xqLine_tags));
printf("c_line_countXq===>%d\n", c_line_countXq);
//移除原来的 -> 进行对比是否有修改
for (int j = 0; j < c_line_countXq; j++) {
BOM_line_cut(c_xqLine_tags[j]);
}
@ -1287,15 +1546,9 @@ void startUpdate(EBomUpBean upBean, tag_t bom_line, int len, tag_t dcproxy,tag_t
lastFlag = true;
}
addToAmatnrUp(vecs, len, newPAmatnr, lastFlag);
/*for (int i = 0; i < vecs.size(); i++) {
EBomUpBean cupBean = vecs[i];
if (std::find(xqTagVec.begin(), xqTagVec.end(), cupBean.matnrNo) != xqTagVec.end()) {
tag_t c_line_tag = pBomMap[cupBean.matnrNo];
}
}*/
}
if (xqTagVec.size() == 0) {
//不是线圈 移除后复制
printf("vecs===>%d\n", vecs.size());
for (int i = 0; i < vecs.size(); i++) {
EBomUpBean cupBean = vecs[i];
@ -1305,40 +1558,11 @@ void startUpdate(EBomUpBean upBean, tag_t bom_line, int len, tag_t dcproxy,tag_t
tag_t c_Rev, bomView = NULLTAG;
ITKCALL(AOM_ask_value_tag(c_line_tag, "bl_line_object", &c_Rev));
boolean flagAs = false;
{
int structs = 0, statusNum = 0;
tag_t* structure_revisions, *release_status_list;
AOM_ask_value_tags(c_Rev, "structure_revisions", &structs, &structure_revisions);
if (structs > 0) {
AOM_ask_value_tags(structure_revisions[0], "release_status_list", &statusNum, &release_status_list);
if (statusNum > 0) {
tag_t* mantrsAs, dsuser, pBomTop, *bvr_list;
int revNum = 0, num = 0, bvr_count = 0;
ITEM_copy_rev(c_Rev, NULL, &pBomTop);
flagAs = true;
AOM_ask_value_tags(c_Rev, "TC_Is_Represented_By", &num, &mantrsAs);
AOM_ask_value_tag(mantrsAs[0], "owning_user", &dsuser);
tag_t defGroup;
ITKCALL(AOM_ask_value_tag(dsuser, "default_group", &defGroup));
ITKCALL(AOM_set_ownership(pBomTop, dsuser, defGroup));
if (num > 0) {
AOM_ask_value_tags(pBomTop, "structure_revisions", &revNum, &structure_revisions);
if (revNum > 0) {
ITKCALL(AOM_set_ownership(structure_revisions[0], dsuser, defGroup));
}
}
(BOM_create_window(&bomView));
(ITEM_rev_list_bom_view_revs(pBomTop, &bvr_count, &bvr_list));
printf("bvr_count=%d \n", bvr_count);
if (bvr_count == 0) {
//errBuff.append("不存在EBOM请检查\n");
}
ITKCALL(BOM_set_window_top_line_bvr(bomView, bvr_list[0], &c_line_tag)); //顶层bom获取
}
}
}
tag_t childPTag;
printf("matnrVec ===>%s\n", cupBean.matnrNo.c_str());
startUpdate(cupBean, c_line_tag, len, dcproxy, ebom_window2);
ITKCALL(AOM_ask_value_tag(c_line_tag, BL_LINE_OBJECT, &childPTag));
startUpdate(cupBean, childPTag, len, dcproxy, isTop, hasChange, saveAsMap);
if (bomView != NULLTAG && flagAs) {
BOM_save_window(bomView);
BOM_close_window(bomView);
@ -1347,10 +1571,15 @@ void startUpdate(EBomUpBean upBean, tag_t bom_line, int len, tag_t dcproxy,tag_t
else {
boolean flagLc = false;
char* seq;
printf(" pBomUid ===>%s \n", pBomUid);
printf("matnrVecNotP===>%s\n", cupBean.matnrNo.c_str());
tag_t cline = cupBean.bomline;
tag_t newChild;
ITKCALL(BOM_line_copy(bom_line, cline, NULLTAG, &newChild));
if (newChild == NULLTAG) {
printf(" newChild === NULLTAG 没有权限修改BOM视图 \n");
continue;
}
AOM_ask_value_string(cline, "bl_sequence_no", &seq);
AOM_lock(newChild);
AOM_set_value_string(newChild, "bl_sequence_no", seq);
@ -1363,14 +1592,15 @@ void startUpdate(EBomUpBean upBean, tag_t bom_line, int len, tag_t dcproxy,tag_t
//线圈装配
for (int j = 0; j < ccBeans.size(); j++) {
EBomUpBean ccBean = ccBeans[j];
//创建线圈对象
if (ccBean.c_lines.size() > 0) {
//要另存操作
char* uid;
tag_t cc_Rev;
tag_t newPrev = saveAsUpdate(c_Rev, newChild);
tag_t newPrev = saveAsUpdate(c_Rev, newChild); //另存调压线圈装配
ITKCALL(AOM_ask_value_tag(ccBean.bomline, "bl_line_object", &cc_Rev));
ITK__convert_tag_to_uid(cc_Rev, &uid);
tag_t cc_PRev = saveAsUpdate(cc_Rev, uid, newPrev);
tag_t cc_PRev = saveAsUpdate(cc_Rev, uid, newPrev);//另存调压线圈
createAXxq(cc_Rev, cc_PRev, len, dcproxy);
}
}
@ -1380,7 +1610,13 @@ void startUpdate(EBomUpBean upBean, tag_t bom_line, int len, tag_t dcproxy,tag_t
//移除所有非P 再从EBOM复制
ITKCALL(BOM_save_window(ebom_window2));
ITKCALL(BOM_close_window(ebom_window2));
}
/**
* BOM
* @param matnrTop
* @param otherPbom
*/
void copyBomLine(tag_t matnrTop, tag_t otherPbom) {
tag_t ebom_window, ebom_window2, *bvr_list, *bvr_list2, bom_line, bom_line2, *c_line_tags, *c_line_tags2;
int bvr_count = 0, bvr_count2 = 0, c_line_count, c_line_count2;
@ -1432,6 +1668,8 @@ void copyBomLine(tag_t matnrTop, tag_t otherPbom) {
BOM_close_window(ebom_window2);
BOM_close_window(ebom_window);
}
//EBOM转PBOM
int EbomToPMethod(void* returnValue) {
int ifail = ITK_ok;
char *sql = NULL, *revUid;
@ -1439,6 +1677,7 @@ int EbomToPMethod(void* returnValue) {
ITKCALL(ifail = USERARG_get_string_argument(&revUid));
ITK__convert_uid_to_tag(revUid, &matnrRev1);
//链接mdm数据库获取物料申请需要的信息
if (open("PLMUser", "PLMUser", "BDP2020", "10.128.20.35")) {
printf("链接SQLSERVER失败\n");
}
@ -1478,7 +1717,6 @@ int EbomToPMethod(void* returnValue) {
prds.push_back(prd);
}
}
close();
//遍历design BOM 获取物料信息
int bvr_count = 0, c_line_count;
@ -1489,6 +1727,7 @@ int EbomToPMethod(void* returnValue) {
int num = 0,num2=0;
tag_t* mantrs, designRev;
string errBuff;
//获取E物料的图纸
ITKCALL(AOM_ask_value_tags(matnrRev1, "TC_Is_Represented_By", &num, &mantrs));
int len = 1;
if (num >= 1) {
@ -1624,6 +1863,7 @@ int EbomToPMethod(void* returnValue) {
replaceBom(beans[t], map, len, dcproxy, topPrev);
}
DisConnServer();
//多个产成品直接复制BOM
for (it2 = wlbmMap.begin(); it2 != wlbmMap.end(); it2++) {
string ss = it2->first;
tag_t eMantr = wlbmMap[ss].eMantr;
@ -1672,7 +1912,7 @@ int EbomToPMethod(void* returnValue) {
}
}
else {
//更新逻辑 遍历Ebom 不带P的和带P的 目前更新逻辑移除所有重新添加
//更新逻辑 遍历Ebom 不带P的和带P的 目前更新逻辑移除所有重新添加 2024/1/15增加对比逻辑
tag_t matnrTop = NULLTAG;
tag_t pBomTop = NULLTAG;
map<string, E2PBean>::iterator it;
@ -1686,29 +1926,6 @@ int EbomToPMethod(void* returnValue) {
matnrTop = tagBean.eMantr;
pBomTop = tagBean.pMantr;
//判断版本视图是否发布,如果发布了,升版
int structs = 0, statusNum = 0;
tag_t *structure_revisions, *release_status_list;
AOM_ask_value_tags(pBomTop, "structure_revisions", &structs, &structure_revisions);
if (structs > 0) {
AOM_ask_value_tags(structure_revisions[0], "release_status_list", &statusNum, &release_status_list);
if (statusNum > 0) {
tag_t *mantrsAs, dsuser;
int revNum;
ITEM_copy_rev(pBomTop, NULL, &pBomTop);
AOM_ask_value_tags(matnrTop, "TC_Is_Represented_By", &num, &mantrsAs);
AOM_ask_value_tag(mantrsAs[0], "owning_user", &dsuser);
tag_t defGroup;
ITKCALL(AOM_ask_value_tag(dsuser, "default_group", &defGroup));
ITKCALL(AOM_set_ownership(pBomTop, dsuser, defGroup));
if (num > 0) {
AOM_ask_value_tags(pBomTop, "structure_revisions", &revNum, &structure_revisions);
if (revNum > 0) {
ITKCALL(AOM_set_ownership(structure_revisions[0], dsuser, defGroup));
}
}
}
}
break;
}
(BOM_create_window(&ebom_window));
@ -1721,20 +1938,10 @@ int EbomToPMethod(void* returnValue) {
printf("顶层bom获取\n");
EBomUpBean upBean;
upBean.bomline = bom_line;
//遍历获取EBOM信息
updatePbomCycle(bom_line, errBuff, len, upBean);
tag_t ebom_window2, *bvr_list2, bom_line2;
int bvr_count2 = 0;
char* revIdP;
(BOM_create_window(&ebom_window2));
(ITEM_rev_list_bom_view_revs(pBomTop, &bvr_count2, &bvr_list2));
AOM_ask_value_string(pBomTop, "item_revision_id", &revIdP);
printf("bvr_count=%d revIdP==>%s \n", bvr_count2, revIdP);
if (bvr_count2 == 0) {
errBuff.append("不存在EBOM请检查\n");
}
ITKCALL(BOM_set_window_top_line_bvr(ebom_window2, bvr_list2[0], &bom_line2)); //顶层bom获取
//AOM_lock(ebom_window2);
//ITKCALL(BOM_set_window_top_line_bvr(ebom_window2, bvr_list2[0], &bom_line2)); //顶层bom获取
int url_num = 0;
char** url_vals = NULL;
PREF_ask_char_values("database_tc", &url_num, &url_vals);
@ -1746,12 +1953,15 @@ int EbomToPMethod(void* returnValue) {
printf("提示:中间数据表访问失败\n");
ifail = 1;
}
startUpdate(upBean, bom_line2, len, dcproxy, ebom_window2);
//更新PBOM
string hasChange;
map<string, tag_t> saveAsMap;
startUpdate(upBean, pBomTop, len, dcproxy, true, hasChange, saveAsMap);
DisConnServer();
ITKCALL(BOM_save_window(ebom_window2));
//ITKCALL(AOM_unlock(ebom_window2));
ITKCALL(BOM_close_window(ebom_window2));
//保存PBOM
//ITKCALL(BOM_save_window(ebom_window2));
////ITKCALL(AOM_unlock(ebom_window2));
//ITKCALL(BOM_close_window(ebom_window2));
ITKCALL(BOM_close_window(ebom_window));
printf("keyNum===>%s\n", keyNum.c_str());
@ -1768,7 +1978,7 @@ int EbomToPMethod(void* returnValue) {
int structs = 0, statusNum = 0;
tag_t* structure_revisions, *release_status_list;
AOM_ask_value_tags(newRev, "structure_revisions", &structs, &structure_revisions);
if (structs > 0) {
if (structs > 0 && hasChange.compare("true") != 0) {
AOM_ask_value_tags(structure_revisions[0], "release_status_list", &statusNum, &release_status_list);
if (statusNum > 0) {
int revNum = 0;

@ -164,6 +164,7 @@
<ClInclude Include="targetver.h" />
<ClInclude Include="tc_log.h" />
<ClInclude Include="tc_util.h" />
<ClInclude Include="tinyxml2.h" />
<ClInclude Include="util.h" />
<ClInclude Include="w2_Clear_Form_PropValue.h" />
</ItemGroup>
@ -182,6 +183,7 @@
<ClCompile Include="chint_add_to_workflow.cpp" />
<ClCompile Include="chint_check_exist_ebom.cpp" />
<ClCompile Include="CHINT_cossheet_upgrade.cpp" />
<ClCompile Include="CHINT_Ecn_SendOA.cxx" />
<ClCompile Include="CHINT_GetFrock.cpp" />
<ClCompile Include="CHINT_SendOAMaterial.cpp" />
<ClCompile Include="chint_set_prop.cpp" />
@ -214,10 +216,12 @@
<ClCompile Include="Modify_Attributes.cpp" />
<ClCompile Include="chintP.cpp" />
<ClCompile Include="ocilib.cpp" />
<ClCompile Include="ProjectSavePost.cxx" />
<ClCompile Include="Remove_Release_Status.cpp" />
<ClCompile Include="SendToPi.cpp" />
<ClCompile Include="string_utils.cxx" />
<ClCompile Include="tc_util.cpp" />
<ClCompile Include="tinyxml2.cpp" />
<ClCompile Include="UpdateEtoP.cpp" />
<ClCompile Include="UpdateWorkTime.cpp" />
<ClCompile Include="w2_Clear_Form_PropValue.cpp" />

@ -78,6 +78,9 @@
<ClInclude Include="cJSON.h">
<Filter>头文件</Filter>
</ClInclude>
<ClInclude Include="tinyxml2.h">
<Filter>头文件</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="stdafx.cpp">
@ -206,5 +209,14 @@
<ClCompile Include="common_itk_util.c">
<Filter>源文件</Filter>
</ClCompile>
<ClCompile Include="CHINT_Ecn_SendOA.cxx">
<Filter>源文件</Filter>
</ClCompile>
<ClCompile Include="tinyxml2.cpp">
<Filter>源文件</Filter>
</ClCompile>
<ClCompile Include="ProjectSavePost.cxx">
<Filter>源文件</Filter>
</ClCompile>
</ItemGroup>
</Project>

@ -0,0 +1,157 @@
#include <epm/epm.h>
#include <string>
#include <map>
#include "epm_handler_common.h"
#include <tccore/aom.h>
#include <tc/preferences.h>
#include <tccore/item.h>
#include <tccore/aom_prop.h>
#include "CRUL_server_call_httpserver.h"
#include "cJSON.h"
tag_t getCcpFolder(tag_t projectItem) {
tag_t *folders;
int num = 0;
tag_t ccpFolder = NULLTAG;
AOM_ask_value_tags(projectItem, "IMAN_reference", &num, &folders);
for (int i = 0; i < num; i++) {
char *folderName;
AOM_ask_value_string(folders[i], "object_name", &folderName);
if (strcmp(folderName, "项目启动") == 0) {
int num2 = 0;
tag_t *folders2;
AOM_ask_value_tags(folders[i], "contents", &num2, &folders2);
for (int j = 0; j < num2; j++){
char *folderName2;
AOM_ask_value_string(folders2[j], "object_name", &folderName2);
if (strcmp(folderName2, "产成品") == 0) {
ccpFolder = folders2[j];
}
}
break;
}
}
return ccpFolder;
}
char* askDateVal(tag_t new_rev_tag,char *propName) { //"zt2_DeliveryDate"
date_t deliveryDate;
AOM_ask_value_date(new_rev_tag, propName, &deliveryDate);
char date[128] = "";
sprintf_s(date, "%04d%02d%02d", deliveryDate.year, deliveryDate.month + 1, deliveryDate.day);
return date;
}
/*
JSON
*/
void addStringJson(cJSON *paramValue, char *propName, tag_t project, char*piName) {
char *propVal;
AOM_UIF_ask_value(project, propName, &propVal);
cJSON_AddStringToObject(paramValue, piName, propVal);
}
int CHINT_SavePost(METHOD_message_t* msg, va_list args) {
tag_t new_rev_tag = va_arg(args, tag_t);
//ZT2_ProjectItem
tag_t userTag;
char *objType, *item_id, *zt2_ProjectNo, *object_name, *zt2_WBSNo, *userId;
AOM_ask_value_string(new_rev_tag, "object_type", &objType);
if (strcmp(objType, "ZT2_ProjectItem") == 0) {
int num = 0, taskNum = 0;
tag_t *ccpTags, *ztTasks;
AOM_ask_value_string(new_rev_tag, "item_id", &item_id);
AOM_ask_value_string(new_rev_tag, "zt2_ProjectNo", &zt2_ProjectNo);
AOM_ask_value_string(new_rev_tag, "object_name", &object_name);
AOM_ask_value_string(new_rev_tag, WBSNO, &zt2_WBSNo);
AOM_ask_value_tag(new_rev_tag, "owning_user", &userTag);
POM_ask_user_id(userTag, &userId);
char *date = askDateVal(new_rev_tag,"zt2_DeliveryDate");//"zt2_DeliveryDate"
printf("item_id===>%s \n", item_id);
cJSON* paramValue = cJSON_CreateObject();
//新增属性
cJSON_AddStringToObject(paramValue, "tcid", item_id);
cJSON_AddStringToObject(paramValue, "objectName", object_name);
cJSON_AddStringToObject(paramValue, "owningUser", userId);
cJSON_AddStringToObject(paramValue, "zt2WBSNo", zt2_WBSNo);
cJSON_AddStringToObject(paramValue, "zt2ProjectNo", zt2_ProjectNo);
cJSON_AddStringToObject(paramValue, "zt2DeliveryDate", date);
addStringJson(paramValue, "zt2_ShortName", new_rev_tag, "zt2ShortName");
addStringJson(paramValue, "zt2_MaterialNo", new_rev_tag, "ztMaterialNo");
addStringJson(paramValue, "zt2_ProductModel", new_rev_tag, "zt2ProductModel");
addStringJson(paramValue, "zt2_ProjectCode", new_rev_tag, "zt2ProjectCode");
addStringJson(paramValue, "zt2_ProjectPhase", new_rev_tag, "zt2ProjectPhase");
addStringJson(paramValue, "zt2_DrawingNo", new_rev_tag, "zt2DrawingNo");
addStringJson(paramValue, "zt2_ProjectPhase", new_rev_tag, "zt2ProjectPhase");
addStringJson(paramValue, "zt2_model", new_rev_tag, "zt2model");
addStringJson(paramValue, "zt2_Code", new_rev_tag, "zt2Code");
addStringJson(paramValue, "zt2_Numberofunits", new_rev_tag, "zt2Numberofunits");
addStringJson(paramValue, "zt2_Productionscheduling", new_rev_tag, "zt2Productionscheduling");
addStringJson(paramValue, "zt2_agreementsigned", new_rev_tag, "zt2agreementsigned");
addStringJson(paramValue, "zt2_classification", new_rev_tag, "zt2classification");
addStringJson(paramValue, "zt2_assessor", new_rev_tag, "zt2assessor");
addStringJson(paramValue, "zt2_Productcategory", new_rev_tag, "zt2Productcategory");
addStringJson(paramValue, "zt2_BElectromagnetic", new_rev_tag, "zt2BElectromagnetic");
addStringJson(paramValue, "zt2_StructuralSupervisor", new_rev_tag, "zt2StructuralSupervisor");
addStringJson(paramValue, "zt2_schedule", new_rev_tag, "zt2schedule");
addStringJson(paramValue, "zt2_month", new_rev_tag, "zt2month");
addStringJson(paramValue, "zt2_notes", new_rev_tag, "zt2notes");
tag_t ccpFolder = getCcpFolder(new_rev_tag);
AOM_ask_value_tags(ccpFolder, "contents", &num, &ccpTags);
cJSON* ccpValues = cJSON_CreateArray();
//产成品信息
for (int i = 0; i < num; i++) {
tag_t ccpRev;
char *ccpName, *ccpWbs, *ccpMatnrNo, *ccpQty;
cJSON* ccpValue = cJSON_CreateObject();
ITEM_ask_latest_rev(ccpTags[i], &ccpRev);
AOM_ask_value_string(ccpRev, "zt2_Quantity", &ccpQty);
AOM_ask_value_string(ccpRev, "zt2_MaterialNo", &ccpMatnrNo);
AOM_ask_value_string(ccpRev, "object_name", &ccpName);
AOM_ask_value_string(ccpRev, "zt2_WBSNo", &ccpWbs);
cJSON_AddStringToObject(ccpValue, "objectname", ccpName);
cJSON_AddStringToObject(ccpValue, "ztMaterialNo", ccpMatnrNo);
string qtyBase = ccpQty;
if (strcmp(ccpQty, "") == 0) {
qtyBase = "1";
}
cJSON_AddStringToObject(ccpValue, "ztQuantity", qtyBase.c_str());
cJSON_AddStringToObject(ccpValue, "ztWBSNo", ccpWbs);
cJSON_AddStringToObject(ccpValue, "ztFactory", "M060");
cJSON_AddItemToArray(ccpValues, ccpValue);
}
//APS信息
cJSON_AddItemToObject(paramValue, "zt2productinformation", ccpValues);
AOM_ask_value_tags(new_rev_tag, "zt2_Tasks", &taskNum, &ztTasks);
cJSON* taskValues = cJSON_CreateArray();
for (int i = 0; i < taskNum; i++) {
cJSON* taskValue = cJSON_CreateObject();
char *activeName, *activeNo;
AOM_ask_value_string(ztTasks[i], "zt2_activeName", &activeName);
AOM_ask_value_string(ztTasks[i], "zt2_activeNo", &activeNo);
char *plansStart = askDateVal(ztTasks[i], "zt2_plansStart");
char *plansEnd = askDateVal(ztTasks[i], "zt2_plansEnd");
cJSON_AddStringToObject(taskValue, "ztactiveName", activeName);
cJSON_AddStringToObject(taskValue, "ztnetWorkNo", activeNo);
cJSON_AddStringToObject(taskValue, "ztplansStart", plansStart);
cJSON_AddStringToObject(taskValue, "ztplansEnd", plansEnd);
cJSON_AddItemToArray(taskValues, taskValue);
}
cJSON_AddItemToObject(paramValue, "zt2APSMasterPlan", taskValues);
char *json_to_char = cJSON_PrintUnformatted(paramValue);
printf("json_to_char===>%s\n", json_to_char);
char* url;
PREF_ask_char_value("CHINT_PIUrl", 0, &url);
string ypUrl = url;
ypUrl = ypUrl.append("/api/open/project/create");
printf("ypUrl ==>%s\n", ypUrl.c_str());
updatePiProject(json_to_char, ypUrl);
//Request request = new Request.Builder().url(preference + "/api/open/project/create")
}
return ITK_ok;
}

File diff suppressed because it is too large Load Diff

@ -43,7 +43,156 @@
#include "ocilib.h"
#include <property/nr.h>
#include "CRUL_server_call_httpserver.h"
#include "cJSON.h"
boolean isUseGroup(char *groupName) {
int url_num = 0;
char** url_vals = NULL;
PREF_ask_char_values("CHINT_AssignmentLimits", &url_num, &url_vals);
if (url_num > 0) {
if (strstr(url_vals[0], groupName)!=NULL) {
return true;
}
}
return false;
}
//(char*)projectVec[0].c_str()
tag_t getUserFromYP(char* designId, char** url_vals, int url_num,char* projectId) {
vector<string> idVector;
tag_t userTag = NULLTAG;
char* url;
PREF_ask_char_value("CHINT_PIUrl", 0, &url);
string ypUrl = url;
ypUrl.append("/api/open/task/getTaskInfo/").append(projectId);
if (url_num > 0) {
Split(url_vals[0], ";", idVector);
for (int i = 0; i < idVector.size(); i++) {
if (strstr(idVector[i].c_str(), designId)!=NULL) {
vector<string> nameVector;
Split(idVector[i], "=", nameVector);
printf("nameVector===>%s \n", nameVector[1].c_str());
string jsonStr = getAssignFromYP(ypUrl);
cJSON* json = cJSON_Parse(jsonStr.c_str());
char *json_to_char = cJSON_Print(json);
printf("json_to_char===>%s \n", json_to_char);
cJSON* dataJson = cJSON_GetObjectItem(json, "data");
int size = cJSON_GetArraySize(dataJson);
for (int i = 0; i < size; i++) {
cJSON *arr = cJSON_GetArrayItem(dataJson, i);
cJSON *taskName = cJSON_GetObjectItem(arr, "taskname");
if (taskName != NULL && taskName->type == cJSON_String) {
char* tskName = taskName->valuestring;
if (strcmp(nameVector[1].c_str(), tskName) == 0) {
cJSON *userIdJson = cJSON_GetObjectItem(arr, "userid");
if (userIdJson != NULL && userIdJson->type == cJSON_String) {
char* userId = userIdJson->valuestring;
printf("tskName = %s\n", userId);
printf("tskName = %s\n", tskName);
SA_find_user(userId, &userTag);
}
}
}
}
}
}
}
return userTag;
}
int CHINT_Assignment(EPM_action_message_t msg) {
int ifail = ITK_ok;
ECHO("=========================================================\n");
ECHO("CHINT_Assignment 开始执行\n");
ECHO("=========================================================\n");
tag_t root_task = NULLTAG, *sub_tasks = NULL, current_task = NULLTAG, type_tag = NULLTAG;
int sub_task_count = 0;
tag_t cur_task = NULLTAG,groupTag;
char* jobName;
current_task = msg.task;
//获取流程名称 截取项目ID
AOM_ask_value_string(current_task, "job_name", &jobName);
EPM_ask_root_task(msg.task, &root_task);
EPM_ask_sub_tasks(root_task, &sub_task_count, &sub_tasks);
printf("sub_task_count===>%d\n", sub_task_count);
tag_t reviewTask = NULLTAG;
for (int i = 0; i < sub_task_count; i++) {
char*taskType, *objectName;
WSOM_ask_object_type2(sub_tasks[i], &taskType);
AOM_ask_value_string(sub_tasks[i],"object_name" ,&objectName);
if (strcmp("EPMReviewTask", taskType) == 0 && strcmp(objectName,"校对")==0) {
reviewTask = sub_tasks[i];
}
}
int url_num = 0;
char** url_vals = NULL, *groupName;
POM_ask_group(&groupName, &groupTag);
//首选项 配置哪些组可以使用
if (isUseGroup(groupName) && reviewTask !=NULLTAG) {
//1ZDB400000T=铁心校对; 1ZDB860000Y=油箱校对
PREF_ask_char_values("CHINT_Assignment", &url_num, &url_vals);
//获取当前节点信息 00089 和 ID前缀
vector<string>nameVec;
Split(jobName, "/", nameVec);
vector<string> projectVec;
Split(nameVec[0], "-", projectVec);
tag_t query = NULLTAG, *tags;
int n_found = 0;
ITKCALL(QRY_find2("查询项目", &query));
if (projectVec.size() > 1) {
char* qry_entries[1] = { "工程编号" }, *qry_values[1] = { (char*)projectVec[1].c_str() };
ITKCALL(QRY_execute(query, 1, qry_entries, qry_values, &n_found, &tags));
}
printf("n_found===>%d\n", n_found);
for (int t = 0; t < n_found; t++) {
tag_t project = tags[t], login_group;
char *id;
AOM_ask_value_string(project, "item_id", &id);
tag_t userTag = getUserFromYP((char*)projectVec[0].c_str(), url_vals, url_num, id);
if (userTag != NULLTAG) {
int mem_cnt = 0, signoff_cnt = 0, n_signoff = 0;
tag_t select_signoff_tag, *members, *signoffs;
EPM_ask_sub_task(reviewTask, EPM_select_signoff_team_task, &select_signoff_tag);
ITKCALL(SA_ask_user_login_group(userTag, &login_group));
ITKCALL(SA_find_groupmembers(userTag, login_group, &mem_cnt, &members));
//移除审核节点的审核人
tag_t signoffTag;
EPM_ask_attachments(select_signoff_tag, EPM_signoff_attachment,
&n_signoff, &signoffs);
printf(" n_signoff %d \n", n_signoff);
if (n_signoff > 0) {
try
{
tag_t member = NULLTAG;
SIGNOFF_TYPE_t type;
ITKCALL(EPM_ask_signoff_member(signoffs[0], &member, &type));
tag_t groupmembers[1] = { member };
int code = 0;
ITKCALL(code = EPM_remove_signoffs(reviewTask, 1, &groupmembers[0]));
printf("ifail %d \n", code);
EMH_clear_errors();
}
catch (const IFail &e)
{
printf("ifail %d \n", ifail);
ifail = e.ifail();
if (ifail == EPM_signoff_profile_not_staffed)
{
cout << "INFORMATION: The required staffing for the signoff";
cout << " profiles are not complete." << endl;
}
}
}
ITKCALL(EPM_create_adhoc_signoff(select_signoff_tag, members[0], &signoff_cnt, &signoffs));
ITKCALL(EPM_set_adhoc_signoff_selection_done(select_signoff_tag, true));
}
}
}
return ifail;
}
void addToFlow(tag_t bom_line,tag_t rootTask_tag, map<string, string> &uidMap) {
int structs=0;
@ -132,10 +281,13 @@ int CHINT_task_complete(EPM_action_message_t msg) {
//SA_workcontext_invalid_group_member
tag_t query = NULLTAG, *tags;
//fields.put("描述", "*" + item_id + "*" + zt2_TYJNo + "*");
int n_found = 0;
ITKCALL(QRY_find2("查询项目", &query));
if (projectVec.size() > 1) {
char* qry_entries[1] = { "工程编号" }, *qry_values[1] = { (char*)projectVec[1].c_str() };
int n_found;
ITKCALL(QRY_execute(query, 1, qry_entries, qry_values, &n_found, &tags));
}
printf("n_found===>%d\n", n_found);
for (int t = 0; t < n_found; t++) {
tag_t rev = tags[t];
@ -228,9 +380,9 @@ int chint_CheckTable_State(EPM_action_message_t msg) {
printf("selectRecord2 ===> %s\n", selectRecord2);
QuerySQLNoInputParam(selectRecord2, &outputColumn1, &outputValueCount1, &outputValue1);
if (outputValueCount1>0) {
string status = outputValue1[0][0];
string date = outputValue1[0][1];
if (status.compare("ÕýʽÌá½»") != 0 || date.empty()) {
//string status = ;
//string date = outputValue1[0][1];
if (strcmp(outputValue1[0][0],"正式提交") != 0 || strcmp(outputValue1[0][1], "") == 0) {
ifail = 1;
errmsg.append("图纸:").append(itemId).append(" 校对表没有正式提交,请检查.\n");
}

@ -58,7 +58,7 @@
#define ARGS_LENGTH 200
#define ARGS_NAME_DEBUG "-debug"
#define DEBUG "-debug="
#define MAX_PRINTLINE_LENGTH 2000
#define MAX_PRINTLINE_LENGTH 12000
#define MAX_PATH_LENGTH 2000
#define MAX_ARGUMENT_LENGTH 400
#define MAX_PARAMNAME_LENGTH 50
@ -136,12 +136,13 @@ void CreateLogFile(char* FunctionName, char **fullname)
int i=0, ifail = ITK_ok;
//date_t status_now;
//char* date_string = NULL;
char date_string[MAX_PATH_LENGTH];
char logFileDir[MAX_PATH_LENGTH];
char logFileName[MAX_PATH_LENGTH];
char* session_uid = NULL;
tag_t session_tag = NULLTAG;
char date_string[MAX_PATH_LENGTH];
time_t now;
struct tm *p;
@ -232,9 +233,6 @@ void WriteLog(const char* format, ...)
vsprintf(tmp, format, arg);
va_end(arg);
//----------print to command window for trace--------//
printf("%s\n", tmp);
//print message to log file
fprintf(logFile, "%s\n", tmp);
fflush(logFile);

@ -23,7 +23,7 @@ extern "C" {
obj = NULL; \
} \
}
void ECHO(char *format, ...);
//void ECHO(char *format, ...);
void CreateLogFile(char* FunctionName, char **fullname);
void WriteLog(const char* format, ...);
void CloseLog(void);

@ -50,13 +50,41 @@ int CHINT_task_complete(EPM_action_message_t msg);
int CHINT_cossheet_upgrade(EPM_action_message_t msg);
int CHINT_SendOAMaterial(EPM_action_message_t msg);
int CHINT_GetFrock(EPM_action_message_t msg);
int CHINT_ECN_SendOA(EPM_action_message_t msg);
int CHINT_Assignment(EPM_action_message_t msg);
int CHINT_SavePost(METHOD_message_t* msg, va_list args);
bool isTcm(tag_t mantr);
bool isBomViewTcm(tag_t mantr);
void TCMAndOwner(tag_t matnrTop);
//user service end
#ifdef __cplusplus
}
#endif
#endif
#define OBJECT_NAME "object_name"
#define CCP_NAME "变压器"
#define OBJECTTYPE "object_type"
#define PROCURETYPE "ZT2_Procure Revision"
#define WBSNO "zt2_WBSNo"
#define MATERIALNO "zt2_MaterialNo"
#define REVISIONID "item_revision_id"
#define SPECIFICATION "IMAN_specification"
#define PDF "pdf"
#define S_GCDM "S_GCDM" //工厂
#define LOG_PATH "D:\\Siemens\\ECNtoOAlog" //工厂
#define PROP_GROUP_NAME "name" //组ID
#define MAX_PATH_LENGTHE 2000
#define JSON_TXDJ "S_txdj"
#define PROP_PRODUCT "zt2_SZProduct"
#define PROP_PROCESS "zt2_SZProcess"
#define S_ProductFeature "S_ProductFeature" //工厂
#define S_Product "产品"
#define S_Process "过程"
#define S_ZSChange "正式更改"
#define S_LSChange "临时更改"
#define BL_QUANTITY "bl_quantity"
#define BL_LINE_OBJECT "bl_line_object"
#define ITKCALL( argument ) \
{ \
int retcode = argument; \

@ -184,7 +184,7 @@ extern DLLAPI int USERSERVICE_custom_register_handlers(int *decision, va_list ar
printf("Registering action handler chint_add_to_workflow successful\n");
}
else {
printf("Registering action handler chint_remove_other_deisgndata failed %d\n", ifail);
printf("Registering action handler chint_add_to_workflow failed %d\n", ifail);
}
ifail = EPM_register_action_handler("chint_remove_other_deisgndata", "chint_remove_other_deisgndata", (EPM_action_handler_t)chint_remove_other_deisgndata);
if (ifail == 0) {
@ -254,6 +254,24 @@ extern DLLAPI int USERSERVICE_custom_register_handlers(int *decision, va_list ar
else {
printf("Registering action handler CHINT_GetFrock failed %d\n", ifail);
}
//oa 变更传递OA
ifail = EPM_register_action_handler("chint_ecn_to_oa", "chint_ecn_to_oa", (EPM_action_handler_t)CHINT_ECN_SendOA);
if (ifail == 0) {
printf("Registering action handler chint_ecn_to_oa successful\n");
}
else {
printf("Registering action handler chint_ecn_to_oa failed %d\n", ifail);
}
//3.9.2.2.1流程指派人员自动获取
ifail = EPM_register_action_handler("CHINT_Assignment", "CHINT_Assignment", (EPM_action_handler_t)CHINT_Assignment);
if (ifail == 0) {
printf("Registering action handler CHINT_Assignment successful\n");
}
else {
printf("Registering action handler CHINT_Assignment failed %d\n", ifail);
}
return ifail;
}
//
@ -261,7 +279,14 @@ extern DLLAPI int USERSERVICE_custom_register_handlers(int *decision, va_list ar
//register service method
extern DLLAPI int USERSERVICE_custom_register_methods(int *decision, va_list args)
{
{ //2023 12 27 新增项目更新后操作
METHOD_id_t mth_tag;
METHOD_find_method("Item", "IMAN_save", &mth_tag);
if (mth_tag.id != 0) {
METHOD_add_action(mth_tag, METHOD_post_action_type, (METHOD_function_t)CHINT_SavePost, NULL);
printf("注册ItemRevision函数成功\n");
}
}
{
int numberOfArguments = 1;
int returnValueType = USERARG_STRING_TYPE;

@ -69,9 +69,6 @@ void ECHO(char *format, ...)
printf( msg );
TC_write_syslog( msg );
}
/**
* »ñÈ¡Ê×Ñ¡Ïî
*/

@ -45,6 +45,7 @@
//#include <io.h>
#include <time.h>
#include "string_utils.h"
#include "ocilib.h"
using namespace std;

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -335,8 +335,6 @@ extern "C" {
MEM_free(newREV_type);
newREV_type=NULL;
}
printf("*******************************************************\n");
printf("* W2_Clear_Form_PropValue is end *\n");
printf("*******************************************************\n");

Loading…
Cancel
Save