diff --git a/.vs/DFL_WL_BOM_TOSRM/v16/.suo b/.vs/DFL_WL_BOM_TOSRM/v16/.suo index a9c5e30..d5b1776 100644 Binary files a/.vs/DFL_WL_BOM_TOSRM/v16/.suo and b/.vs/DFL_WL_BOM_TOSRM/v16/.suo differ diff --git a/.vs/DFL_WL_BOM_TOSRM/v16/Browse.VC.db b/.vs/DFL_WL_BOM_TOSRM/v16/Browse.VC.db index c05637d..64e43dc 100644 Binary files a/.vs/DFL_WL_BOM_TOSRM/v16/Browse.VC.db and b/.vs/DFL_WL_BOM_TOSRM/v16/Browse.VC.db differ diff --git a/.vs/DFL_WL_BOM_TOSRM/v16/ipch/AutoPCH/19f56483ff14927e/DFL_WL_BOM_TOSRM.ipch b/.vs/DFL_WL_BOM_TOSRM/v16/ipch/AutoPCH/19f56483ff14927e/DFL_WL_BOM_TOSRM.ipch deleted file mode 100644 index 58fd352..0000000 Binary files a/.vs/DFL_WL_BOM_TOSRM/v16/ipch/AutoPCH/19f56483ff14927e/DFL_WL_BOM_TOSRM.ipch and /dev/null differ diff --git a/.vs/DFL_WL_BOM_TOSRM/v16/ipch/AutoPCH/c47bf696d93ffdde/COMMON_ITK_UTIL.ipch b/.vs/DFL_WL_BOM_TOSRM/v16/ipch/AutoPCH/c47bf696d93ffdde/COMMON_ITK_UTIL.ipch deleted file mode 100644 index 3c3a479..0000000 Binary files a/.vs/DFL_WL_BOM_TOSRM/v16/ipch/AutoPCH/c47bf696d93ffdde/COMMON_ITK_UTIL.ipch and /dev/null differ diff --git a/.vs/DFL_WL_BOM_TOSRM/v16/ipch/AutoPCH/df822c026b0f7b41/WTYPESBASE.ipch b/.vs/DFL_WL_BOM_TOSRM/v16/ipch/AutoPCH/df822c026b0f7b41/WTYPESBASE.ipch deleted file mode 100644 index d2bcc50..0000000 Binary files a/.vs/DFL_WL_BOM_TOSRM/v16/ipch/AutoPCH/df822c026b0f7b41/WTYPESBASE.ipch and /dev/null differ diff --git a/.vs/DFL_WL_BOM_TOSRM/v16/ipch/AutoPCH/ea35185c947d304f/TC_LOG.ipch b/.vs/DFL_WL_BOM_TOSRM/v16/ipch/AutoPCH/ea35185c947d304f/TC_LOG.ipch deleted file mode 100644 index 3f0e2fd..0000000 Binary files a/.vs/DFL_WL_BOM_TOSRM/v16/ipch/AutoPCH/ea35185c947d304f/TC_LOG.ipch and /dev/null differ diff --git a/.vs/DFL_WL_BOM_TOSRM/v16/ipch/AutoPCH/ea49433211dd9158/CONNOR_ITK_UTIL.ipch b/.vs/DFL_WL_BOM_TOSRM/v16/ipch/AutoPCH/ea49433211dd9158/CONNOR_ITK_UTIL.ipch deleted file mode 100644 index 2bdc99e..0000000 Binary files a/.vs/DFL_WL_BOM_TOSRM/v16/ipch/AutoPCH/ea49433211dd9158/CONNOR_ITK_UTIL.ipch and /dev/null differ diff --git a/DFL_WL_BOM_TOERP/DFL_WL_BOM_TOERP.vcxproj b/DFL_WL_BOM_TOERP/DFL_WL_BOM_TOERP.vcxproj index fbcd31b..0d134cc 100644 --- a/DFL_WL_BOM_TOERP/DFL_WL_BOM_TOERP.vcxproj +++ b/DFL_WL_BOM_TOERP/DFL_WL_BOM_TOERP.vcxproj @@ -23,7 +23,7 @@ {80658E28-1D8D-406B-B96C-6F8B3009168B} Win32Proj DFLWLBOMTOERP - 10.0.19041.0 + 10.0 DFL_WL_BOM_TOSRM @@ -82,6 +82,7 @@ false + BH_BOM_TOCAPP @@ -144,7 +145,7 @@ true NDEBUG;_CONSOLE;IPLIB=none;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;WIN32_LEAN_AND_MEAN;%(PreprocessorDefinitions) false - D:\Clibs\12\include;D:\Clibs\12\include_cpp;D:\Clibs\12\OCI\include;%(AdditionalIncludeDirectories) + C:\environment\Teamcenter-ENV\ITK_Configuration_File\tc12ITK\tc12ITK\dflittk\include;C:\environment\Teamcenter-ENV\ITK_Configuration_File\tc12ITK\tc12ITK\dflittk\include_cpp;C:\environment\Teamcenter-ENV\ITK_Configuration_File\tc12ITK\tc12ITK\dflittk\oci\include;C:\environment\aws-sdk-cpp-1.0.164\aws-cpp-sdk-core\include;C:\environment\aws-sdk-cpp-1.0.164\aws-cpp-sdk-s3\include;%(AdditionalIncludeDirectories) /D _CRT_SECURE_NO_WARNINGS %(AdditionalOptions) @@ -152,21 +153,154 @@ true true true - D:\项目\东富龙\东富龙\lib\*.lib;D:\Clibs\12\lib\*.lib;D:\Clibs\12\lib\itk_main.obj;%(AdditionalDependencies) + C:\environment\Teamcenter-ENV\ITK_Configuration_File\tc12ITK\tc12ITK\dflittk\lib\*.lib;C:\environment\Teamcenter-ENV\ITK_Configuration_File\tc12ITK\tc12ITK\dflittk\lib\itk_main.obj;%(AdditionalDependencies) libuser_exits.ar.lib;%(IgnoreSpecificDefaultLibraries) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/DFL_WL_BOM_TOERP/DFL_WL_BOM_TOERP.vcxproj.filters b/DFL_WL_BOM_TOERP/DFL_WL_BOM_TOERP.vcxproj.filters index ecb8b02..9c82c74 100644 --- a/DFL_WL_BOM_TOERP/DFL_WL_BOM_TOERP.vcxproj.filters +++ b/DFL_WL_BOM_TOERP/DFL_WL_BOM_TOERP.vcxproj.filters @@ -13,6 +13,96 @@ {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + {0c1340d0-0fb3-4d39-8855-f917502d2710} + + + {7aadf2ef-ddb6-4765-8482-ae989132d6c0} + + + {7bb560ab-2f66-4d4a-a6ae-3fe4fbdc764c} + + + {f12da17c-8886-4226-80df-0e6b0e14aee4} + + + {41f7e9ad-b635-4e4f-b62f-8b9bfd4bbfba} + + + {145f3644-48ea-423a-9196-d10997434be2} + + + {8ba764ba-4195-4baf-bf79-955d6a7d0253} + + + {0a350c3a-5f81-4143-9416-624be15e45b3} + + + {2be274bb-b31f-42dd-9092-73c830689087} + + + {6635bc27-2d20-48fc-89a4-f11e6419a6b0} + + + {273dd550-31ee-4992-a61b-c63f5db6370c} + + + {f1cab352-e5c9-4a79-831e-3eb8b9761b98} + + + {a4586207-c4a9-4101-a666-74508c4bad60} + + + {0b9f3493-de0a-40fe-b8fa-c43c37d922fb} + + + {5a81b3ce-8d10-420e-a124-db82fc034746} + + + {679456e1-77d3-4a46-bc85-6503ebcc9e0d} + + + {25a04671-aff5-4bc3-b4f3-3693dd988912} + + + {8971b66d-e402-4eec-b000-cb2102acf8bf} + + + {50128eb1-0962-4b3b-bdd8-bd3bebb77588} + + + {c8306670-f139-4fe2-aeaa-5a6508385fe8} + + + {04c963c8-0dbe-49de-b008-20526a629c4f} + + + {05e0d21b-ea01-44c9-b218-c0e954d0671a} + + + {be2c0615-bd5d-45b7-b879-297e53b4f440} + + + {4d5883b3-20f7-4c9c-85b1-f9f784bb4a56} + + + {00e1351b-9b0f-4c9f-b710-1bc701aed61c} + + + {3eceb7d0-8f2d-4c69-9ff1-ce9135fbd207} + + + {e1b6f0bb-3065-4776-9ed5-2e5367606870} + + + {cc983c02-b0e7-45ea-9333-1e35900c9dd2} + + + {935f3bd0-95a6-43df-9f3a-36f377fde53a} + + + {4e6d50af-147a-4349-890a-3dfcc65e8170} + @@ -27,6 +117,15 @@ 头文件 + + 头文件 + + + 头文件 + + + 头文件 + @@ -41,5 +140,387 @@ 头文件 + + 头文件 + + + 头文件 + + + 头文件\aws\core + + + 头文件\aws\core + + + 头文件\aws\core + + + 头文件\aws\core + + + 头文件\aws\core + + + 头文件\aws\core + + + 头文件\aws\core + + + 头文件\aws\core + + + 头文件\aws\core + + + 头文件\aws\core + + + 头文件\aws\core + + + 头文件\aws\core + + + 头文件\aws\core\auth + + + 头文件\aws\core\auth + + + 头文件\aws\core\auth + + + 头文件 + + + 头文件\aws\core\client + + + 头文件\aws\core\client + + + 头文件\aws\core\client + + + 头文件\aws\core\client + + + 头文件\aws\core\client + + + 头文件\aws\core\client + + + 头文件\aws\core\client + + + 头文件\aws\core\client + + + 头文件\aws\core\config + + + 头文件\aws\core\external\json-cpp + + + 头文件\aws\core\external\tinyxml2 + + + 头文件\aws\core\http + + + 头文件\aws\core\http + + + 头文件\aws\core\http + + + 头文件\aws\core\http + + + 头文件\aws\core\http + + + 头文件\aws\core\http + + + 头文件\aws\core\http + + + 头文件\aws\core\http\curl + + + 头文件\aws\core\http\curl + + + 头文件\aws\core\http\standard + + + 头文件\aws\core\http\standard + + + 头文件\aws\core\http\windows + + + 头文件\aws\core\http\windows + + + 头文件\aws\core\http\windows + + + 头文件\aws\core\http\windows + + + 头文件\aws\core\http\windows + + + 头文件\aws\core\http\windows + + + 头文件\aws\core\http\windows + + + 头文件\aws\core\internal + + + 头文件\aws\core\platform + + + 头文件\aws\core\platform + + + 头文件\aws\core\platform + + + 头文件\aws\core\platform + + + 头文件\aws\core\platform + + + 头文件\aws\core\platform + + + 头文件\aws\core\platform + + + 头文件\aws\core\platform\refs + + + 头文件\aws\core\utils + + + 头文件\aws\core\utils + + + 头文件\aws\core\utils + + + 头文件\aws\core\utils + + + 头文件\aws\core\utils + + + 头文件\aws\core\utils + + + 头文件\aws\core\utils + + + 头文件\aws\core\utils + + + 头文件\aws\core\utils + + + 头文件\aws\core\utils + + + 头文件\aws\core\utils + + + 头文件\aws\core\utils + + + 头文件\aws\core\utils\base64 + + + 头文件\aws\core\utils\crypto + + + 头文件\aws\core\utils\crypto + + + 头文件\aws\core\utils\crypto + + + 头文件\aws\core\utils\crypto + + + 头文件\aws\core\utils\crypto + + + 头文件\aws\core\utils\crypto + + + 头文件\aws\core\utils\crypto + + + 头文件\aws\core\utils\crypto + + + 头文件\aws\core\utils\crypto + + + 头文件\aws\core\utils\crypto + + + 头文件\aws\core\utils\crypto + + + 头文件\aws\core\utils\crypto + + + 头文件\aws\core\utils\crypto + + + 头文件\aws\core\utils\crypto + + + 头文件\aws\core\utils\crypto + + + 头文件\aws\core\utils\crypto\bcrypt + + + 头文件\aws\core\utils\crypto\commoncrypto + + + 头文件\aws\core\utils\crypto\openssl + + + 头文件\aws\core\utils\json + + + 头文件\aws\core\utils\logging + + + 头文件\aws\core\utils\logging + + + 头文件\aws\core\utils\logging + + + 头文件\aws\core\utils\logging + + + 头文件\aws\core\utils\logging + + + 头文件\aws\core\utils\logging + + + 头文件\aws\core\utils\logging + + + 头文件\aws\core\utils\logging + + + 头文件\aws\core\utils\logging\android + + + 头文件\aws\core\utils\memory + + + 头文件\aws\core\utils\memory + + + 头文件\aws\core\utils\memory\stl + + + 头文件\aws\core\utils\memory\stl + + + 头文件\aws\core\utils\memory\stl + + + 头文件\aws\core\utils\memory\stl + + + 头文件\aws\core\utils\memory\stl + + + 头文件\aws\core\utils\memory\stl + + + 头文件\aws\core\utils\memory\stl + + + 头文件\aws\core\utils\memory\stl + + + 头文件\aws\core\utils\memory\stl + + + 头文件\aws\core\utils\memory\stl + + + 头文件\aws\core\utils\memory\stl + + + 头文件\aws\core\utils\memory\stl + + + 头文件\aws\core\utils\memory\stl + + + 头文件\aws\core\utils\memory\stl + + + 头文件\aws\core\utils\ratelimiter + + + 头文件\aws\core\utils\ratelimiter + + + 头文件\aws\core\utils\stream + + + 头文件\aws\core\utils\stream + + + 头文件\aws\core\utils\stream + + + 头文件\aws\core\utils\threading + + + 头文件\aws\core\utils\threading + + + 头文件\aws\core\utils\threading + + + 头文件\aws\core\utils\xml + + + 头文件 + + + + + 头文件\aws\core + + + 头文件\aws\core + + + + + 资源文件 + \ No newline at end of file diff --git a/DFL_WL_BOM_TOERP/DFL_WL_BOM_TOSRM.cpp b/DFL_WL_BOM_TOERP/DFL_WL_BOM_TOSRM.cpp index c42a505..5e03692 100644 --- a/DFL_WL_BOM_TOERP/DFL_WL_BOM_TOSRM.cpp +++ b/DFL_WL_BOM_TOERP/DFL_WL_BOM_TOSRM.cpp @@ -1,7 +1,7 @@ #include #include #include "dfl_custom.h" -#include "ocilib.h" +//#include "ocilib.h" #include #include #include @@ -32,11 +32,180 @@ using namespace std; //#include "dfl_custom.h" //#include "util.h" //#include -//#include "ocilib.h" +#include "ocilib.h" //using namespace std; +#include +#include +#include +#include "curlToFtp.h" +//#include "httplib.h" + +//引入minIO需要的库 +#define USE_IMPORT_EXPORT +#include"iostream" + +#include "aws\s3\S3Client.h" +#include "aws\core\Aws.h" +#include "aws\core\auth\AWSCredentialsProvider.h" +#include +#include +using namespace Aws::S3; +using namespace Aws::S3::Model; +using namespace std; + +#include "aws\s3\model\PutObjectRequest.h" +#include "aws\s3\model\GetObjectRequest.h" +#include +#include +//#include "base64.h" + + extern "C" int POM_AM__set_application_bypass(logical bypass); +/* + 判断对象objtag是否属于type_name类型 +*/ +bool isTypeOf(tag_t objtag, const char* type_name) { + tag_t type = NULLTAG; + TCTYPE_ask_object_type(objtag, &type); + tag_t item_type = NULLTAG; + TCTYPE_find_type(type_name, "", &item_type); + bool is_type = false; + if (item_type != NULLTAG) { + logical isok = FALSE; + TCTYPE_is_type_of(type, item_type, &isok); + if (isok) { + is_type = true; + } + } + return is_type; +} + + +// 声明 +std::string base64_encode(unsigned char const* bytes_to_encode, size_t in_len, bool url = false); + +static const char* base64_chars[2] = { + "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + "abcdefghijklmnopqrstuvwxyz" + "0123456789" + "+/", + + "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + "abcdefghijklmnopqrstuvwxyz" + "0123456789" + "-_" }; + +// 定义 +std::string base64_encode(unsigned char const* bytes_to_encode, size_t in_len, bool url) { + + size_t len_encoded = (in_len + 2) / 3 * 4; + + unsigned char trailing_char = url ? '.' : '='; + + const char* base64_chars_ = base64_chars[url]; + + std::string ret; + ret.reserve(len_encoded); + + unsigned int pos = 0; + + while (pos < in_len) { + ret.push_back(base64_chars_[(bytes_to_encode[pos + 0] & 0xfc) >> 2]); + + if (pos + 1 < in_len) { + ret.push_back(base64_chars_[((bytes_to_encode[pos + 0] & 0x03) << 4) + ((bytes_to_encode[pos + 1] & 0xf0) >> 4)]); + + if (pos + 2 < in_len) { + ret.push_back(base64_chars_[((bytes_to_encode[pos + 1] & 0x0f) << 2) + ((bytes_to_encode[pos + 2] & 0xc0) >> 6)]); + ret.push_back(base64_chars_[bytes_to_encode[pos + 2] & 0x3f]); + } + else { + ret.push_back(base64_chars_[(bytes_to_encode[pos + 1] & 0x0f) << 2]); + ret.push_back(trailing_char); + } + } + else { + + ret.push_back(base64_chars_[(bytes_to_encode[pos + 0] & 0x03) << 4]); + ret.push_back(trailing_char); + ret.push_back(trailing_char); + } + + pos += 3; + } + + return ret; +} + + +/* +* system函数是阻塞调用,如果FTP服务器响应缓慢或网络不稳定,会导致程序长时间等待。 +*/ +bool UploadFileToFtp(const std::string& filePath, const std::string& ftpTargetPath, + const std::string& ftpServer, const std::string& ftpUsername, const std::string& ftpPassword) { + printf("UploadFileToFtp方法开始执行~\n"); + printf("=> filePath: %s\n", filePath.c_str()); + printf("=> ftpTargetPath: %s\n", ftpTargetPath.c_str()); + printf("=> ftpServer: %s\n", ftpServer.c_str()); + printf("=> ftpUsername: %s\n", ftpUsername.c_str()); + printf("=> ftpPassword: %s\n", ftpPassword.c_str()); + //std::string ftpUrl = "ftp://" + ftpUsername + ":" + ftpPassword + "@" + ftpServer + ftpTargetPath; + std::string ftpUrl = "ftp://" + ftpServer + ftpTargetPath; + + if (!ftpTargetPath.empty() && ftpTargetPath.back() != '/') { + ftpUrl += "/"; + } + + size_t lastSlashPos = filePath.find_last_of("\\/"); + std::string fileName = (lastSlashPos == std::string::npos) ? filePath : filePath.substr(lastSlashPos + 1); + //ftpUrl += fileName; + + //std::string command = "curl --max-time 30 -T \"" + filePath + "\" \"" + ftpUrl + "\""; + + // 构建curl命令,包含用户名和密码 + std::string command = "curl --max-time 60 -u \"" + ftpUsername + ":" + ftpPassword + "\" -T \"" + filePath + "\" \"" + ftpUrl + "\""; + + + int result = system(command.c_str()); + + if (result == 0) { + std::cout << "File uploaded successfully." << std::endl; + return true; + } + else { + std::cerr << "There was an error uploading the file." << std::endl; + return false; + } +} + +bool is_utf8(const char* str) { + int c; + while (*str) { + c = (unsigned char)*str; + if (c > 0 && c < 128) { + str++; + } + else if ((c & 0xE0) == 0xC0) { + if ((*(str + 1) & 0xC0) != 0x80) return false; + str += 2; + } + else if ((c & 0xF0) == 0xE0) { + if ((*(str + 1) & 0xC0) != 0x80 || (*(str + 2) & 0xC0) != 0x80) return false; + str += 3; + } + else if ((c & 0xF8) == 0xF0) { + if ((*(str + 1) & 0xC0) != 0x80 || (*(str + 2) & 0xC0) != 0x80 || (*(str + 3) & 0xC0) != 0x80) return false; + str += 4; + } + else { + return false; + } + } + return true; +} + 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; @@ -62,7 +231,79 @@ string GbkToUtf8(const std::string& strGbk)//传入的strGbk是GBK编码 strUtf8 = NULL; return strTemp; } +string GBKToUTF8_2(const char* data) +{ + string GBK = ""; + //1、GBK转unicode + //1.1 统计转换后的字节数 + int len = MultiByteToWideChar(CP_ACP, //转换的格式 + 0, //默认的转换方式 + data, //输入的字节 + -1, //输入的字符串大小 -1找\0结束 自己去算 + 0, //输出(不输出,统计转换后的字节数) + 0 //输出的空间大小 + ); + if (len <= 0) + { + return GBK; + } + wstring udata; //用wstring存储的 + udata.resize(len);//分配大小 + //开始写进去 + MultiByteToWideChar(CP_ACP, 0, data, -1, (wchar_t*)udata.data(), len); + + + //2 unicode 转 utf8 + len = WideCharToMultiByte(CP_UTF8, 0, (wchar_t*)udata.data(), -1, 0, 0, + 0, //失败替代默认字符 + 0 //是否使用默认替代 0 false + ); + if (len <= 0) + { + return GBK; + } + GBK.resize(len); + WideCharToMultiByte(CP_UTF8, 0, (wchar_t*)udata.data(), -1, (char*)GBK.data(), len, 0, 0); + + return GBK; +} + +string UTF8ToGBK_2(const char* data) +{ + string utf8 = ""; + //1、UTF8 先要转为unicode windows utf16 + //1.1 统计转换后的字节数 + int len = MultiByteToWideChar(CP_UTF8, //转换的格式 + 0, //默认的转换方式 + data, //输入的字节 + -1, //输入的字符串大小 -1找\0结束 自己去算 + 0, //输出(不输出,统计转换后的字节数) + 0 //输出的空间大小 + ); + if (len <= 0) + { + return utf8; + } + wstring udata; //用wstring存储的 + udata.resize(len);//分配大小 + //开始写进去 + MultiByteToWideChar(CP_UTF8, 0, data, -1, (wchar_t*)udata.data(), len); + + + //2 unicode 转 GBK + len = WideCharToMultiByte(CP_ACP, 0, (wchar_t*)udata.data(), -1, 0, 0, + 0, //失败替代默认字符 + 0 //是否使用默认替代 0 false + ); + if (len <= 0) + { + return utf8; + } + utf8.resize(len); + WideCharToMultiByte(CP_ACP, 0, (wchar_t*)udata.data(), -1, (char*)utf8.data(), len, 0, 0); + return utf8; +} char* U2G(const char* utf8) { int len = MultiByteToWideChar(CP_UTF8, 0, utf8, -1, NULL, 0); @@ -77,10 +318,364 @@ char* U2G(const char* utf8) return str; } -void createDir(string dPath,string mdCommand) { - if (_access(dPath.c_str(), 0) != 0) {//判断文件夹是否存在 - system(mdCommand.append(dPath).c_str()); +std::wstring s2ws(const std::string& s) +{ + int len; + int slength = (int)s.length() + 1; + len = MultiByteToWideChar(CP_ACP, 0, s.c_str(), slength, 0, 0); + wchar_t* buf = new wchar_t[len]; + MultiByteToWideChar(CP_ACP, 0, s.c_str(), slength, buf, len); + std::wstring r(buf); + delete[] buf; + return r; +} + + +// 函数用于转义需要在JSON中使用的字符串,不然在处理JSON数据时遇到了不认识的字符转义错误 +std::string escapeJson(const std::string& input) { + std::string output; + output.reserve(input.size() * 2); // 预分配足够的空间以提高性能 + + for (unsigned char c : input) { // 使用unsigned char来避免符号扩展问题 + switch (c) { + case '"': output += "\\\""; break; + case '\\': output += "\\\\"; break; + case '\b': output += "\\b"; break; + case '\f': output += "\\f"; break; + case '\n': output += "\\n"; break; + case '\r': output += "\\r"; break; + case '\t': output += "\\t"; break; + default: + // 对于ASCII控制字符(0x00-0x1F),使用Unicode转义序列 + if (std::iscntrl(c)) { + char buffer[7]; + snprintf(buffer, sizeof(buffer), "\\u%04X", c); + output += buffer; + } + else { + // 直接添加非ASCII控制字符(包括中文) + output += c; + } + } + } + + return output; +} + +// 回调函数,用于处理服务器返回的数据 +size_t WriteCallback(void* contents, size_t size, size_t nmemb, void* userp) { + ((std::string*)userp)->append((char*)contents, size * nmemb); + return size * nmemb; +} + +bool uploadFileToMinIO(const std::string& filePath, const std::string& bucketFileName) { + CURL* curl; + CURLcode res; + std::string readBuffer; + curl = curl_easy_init(); + if (curl) { + curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST"); + curl_easy_setopt(curl, CURLOPT_URL, "http://localhost:8080/minio/upload"); + 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: multipart/form-data"); + //headers = curl_slist_append(headers, "Accept-Charset: GBK"); + curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers); + + printf("C++上传文件到minIO方法入参:localFilePath=【%s】,bucketPath=【%s】\n", filePath.c_str(), bucketFileName.c_str()); + curl_mime* mime; + curl_mimepart* part; + mime = curl_mime_init(curl); + //string filePathString = GBKToUTF8_2(filePath.c_str()); + part = curl_mime_addpart(mime); + curl_mime_name(part, "filePath"); + curl_mime_filedata(part, filePath.c_str()); + + //string gbkString = UTF8ToGBK_2(bucketFileName.c_str()); + string utf8String = GBKToUTF8_2(bucketFileName.c_str()); + + + part = curl_mime_addpart(mime); + curl_mime_name(part, "bucketFileName"); + curl_mime_data(part, utf8String.c_str(), CURL_ZERO_TERMINATED); + curl_easy_setopt(curl, CURLOPT_MIMEPOST, mime); + + curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback); + curl_easy_setopt(curl, CURLOPT_WRITEDATA, &readBuffer); + res = curl_easy_perform(curl); + if (res != CURLE_OK) { + printf("C++上传文件到minIO方法失败,错误码:%d,错误信息:%s\n", res, curl_easy_strerror(res)); + } + else + { + printf("C++上传文件到minIO方法成功,成功码:%d,响应信息:%s\n", res, curl_easy_strerror(res)); + } + curl_mime_free(mime); + curl_slist_free_all(headers); + } + curl_easy_cleanup(curl); + return true; +} + + //上传文件到MinIO的方法SS +//bool uploadFileToMinIO(const std::string& filePath, const std::string& bucketFileName) { +// CURL* curl; +// CURLcode res; +// printf("C++上传文件到minIO方法入参:localFilePath=【%s】,bucketPath=【%s】\n", filePath.c_str(), bucketFileName.c_str()); +// // 初始化curl +// curl_global_init(CURL_GLOBAL_DEFAULT); +// curl = curl_easy_init(); +// if (curl) { +// // 设置URL +// std::string url = "http://localhost:8080/minio/upload"; +// curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST"); +// curl_easy_setopt(curl, CURLOPT_URL, url.c_str()); +// 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); +// +// // 准备POST数据 +// std::string postFields = "file=" + filePath + "&bucketFileName=" + bucketFileName; +// const char* data = U2G(postFields.c_str()); +// curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data); +// curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 10); +// curl_easy_setopt(curl, CURLOPT_TIMEOUT, 20); +// printf("06\n"); +// // 执行请求 +// res = curl_easy_perform(curl); +// printf("06\n"); +// // 检查错误 +// if (res != CURLE_OK) { +// std::cerr << "curl_easy_perform() failed: " << curl_easy_strerror(res) << std::endl; +// curl_easy_cleanup(curl); +// curl_global_cleanup(); +// return false; +// } +// +// // 清理 +// curl_easy_cleanup(curl); +// } +// curl_global_cleanup(); +// +// return true; +//} + +//==================================================================== + +//std::string escapeJson(const std::string& input) { +// std::ostringstream ss; +// for (unsigned char c : input) { +// switch (c) { +// case '"': ss << "\\\""; break; +// case '\\': ss << "\\\\"; break; +// case '\b': ss << "\\b"; break; +// case '\f': ss << "\\f"; break; +// case '\n': ss << "\\n"; break; +// case '\r': ss << "\\r"; break; +// case '\t': ss << "\\t"; break; +// default: ss << c; // 直接添加其他字符 +// } +// } +// return ss.str(); +//} +// +//void cleanup(CURL* curl, struct curl_slist* headers) { +// if (curl) curl_easy_cleanup(curl); +// if (headers) curl_slist_free_all(headers); +// curl_global_cleanup(); +//} +// +//bool uploadFileToMinIO(const std::string& filePath, const std::string& bucketFileName) { +// CURL* curl; +// CURLcode res; +// +// printf("C++上传文件到minIO方法入参:localFilePath=【%s】,bucketPath=【%s】\n", +// filePath.c_str(), bucketFileName.c_str()); +// // 将字符串转换为 unsigned char* 类型,因为 base64_encode 需要这种类型的输入 +// const unsigned char* bytes_to_encode_filePath = reinterpret_cast(filePath.c_str()); +// size_t in_len1 = filePath.size(); +// // 调用 base64_encode 函数进行编码,默认不使用 URL 安全字符 +// std::string encoded_str_filePath = base64_encode(bytes_to_encode_filePath, in_len1); +// +// const unsigned char* bytes_to_encode_bucketFileName = reinterpret_cast(bucketFileName.c_str()); +// size_t in_len2 = bucketFileName.size(); +// // 调用 base64_encode 函数进行编码,默认不使用 URL 安全字符 +// std::string encoded_str_bucketFileName = base64_encode(bytes_to_encode_bucketFileName, in_len2); +// +// curl_global_init(CURL_GLOBAL_DEFAULT); +// curl = curl_easy_init(); +// if (!curl) { +// std::cerr << "curl初始化失败!" << std::endl; +// return false; +// } +// +// printf("curl初始化完成!开始发送请求···\n"); +// +// std::string url = "http://localhost:8080/minio/upload"; +// curl_easy_setopt(curl, CURLOPT_URL, url.c_str()); +// +// std::string jsonPayload = "{\"filePath\":\"" + encoded_str_filePath +// + "\",\"bucketFileName\":\"" + encoded_str_bucketFileName +// + "\"}"; +// +// curl_easy_setopt(curl, CURLOPT_POST, 1L); +// curl_easy_setopt(curl, CURLOPT_POSTFIELDS, jsonPayload.c_str()); +// curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, jsonPayload.size()); +// +// struct curl_slist* headers = NULL; +// headers = curl_slist_append(headers, "Content-Type: application/json; charset=UTF-8"); +// curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers); +// +// res = curl_easy_perform(curl); +// +// if (res != CURLE_OK) { +// std::cerr << "curl_easy_perform() failed: " << curl_easy_strerror(res) << std::endl; +// cleanup(curl, headers); +// return false; +// } +// +// long http_code = 0; +// curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &http_code); +// if (http_code != 200) { +// std::cerr << "HTTP request failed with code: " << http_code << std::endl; +// cleanup(curl, headers); +// return false; +// } +// +// cleanup(curl, headers); +// return true; +//} + + + + + +/* +* 创建FTP层级目录 +*/ +int createFTPDir(HINTERNET session, char* dir) { + int ifail = ITK_ok; + std::string str(dir); // 将 char* 转换为 std::string + std::istringstream iss(str); + std::vector parts; + std::string part; + std::string createPath; + + while (std::getline(iss, part, '/')) { + if (!part.empty()) { // 忽略空字符串 + parts.push_back(part); + } + } + + for (const auto& p : parts) { + std::cout << p << std::endl; + createPath += "/" + p; + if (FtpCreateDirectoryA(session, createPath.c_str())) + { + WriteLog("提示:创建FTP文件夹成功== %s\n", createPath.c_str()); + } + else + { + WriteLog("提示:创建FTP文件夹失败== %s,若已存在此文件夹请忽略!\n", createPath.c_str()); + } + } + // 创建成功后尝试切换到新建目录下 + BOOL dirChangeResult = FtpSetCurrentDirectoryA(session, dir); + if (!dirChangeResult) + { + WriteLog("》》》提示:切换到新建目录 %s 失败!\n", dir); + return false; + } + else { + WriteLog("》》》提示:成功切换到新建目录 %s。\n", dir); + } + return ifail; +} + + +/* +* 清空远程目录下所有文件 +*/ +bool DeleteLRDirectory(const char* directory) +{ + CURL* curl; + CURLcode res; + std::string readBuffer; + curl = curl_easy_init(); + if (curl) { + curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST"); + curl_easy_setopt(curl, CURLOPT_URL, "http://localhost:8080/minio/deleteByDir"); + 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: multipart/form-data"); + curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers); + printf("C++清空minIO目录方法入参:directory=【%s】\n", directory); + curl_mime* mime; + curl_mimepart* part; + mime = curl_mime_init(curl); + + part = curl_mime_addpart(mime); + curl_mime_name(part, "directory"); + curl_mime_data(part, directory, CURL_ZERO_TERMINATED); + + curl_easy_setopt(curl, CURLOPT_MIMEPOST, mime); + curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback); + curl_easy_setopt(curl, CURLOPT_WRITEDATA, &readBuffer); + res = curl_easy_perform(curl); + if (res != CURLE_OK) { + printf("C++清空minIO目录失败,错误码:%d,错误信息:%s\n", res, curl_easy_strerror(res)); + } + else + { + printf("C++清空minIO目录成功,成功码:%d,响应信息:%s\n", res, curl_easy_strerror(res)); + } + curl_mime_free(mime); + curl_slist_free_all(headers); + } + curl_easy_cleanup(curl); + return true; +} + + +/*o +* 判断dpath路径是否存在,存在则清空该文件夹下的所有文件和子目录,否则创建该文件夹 +* @param dPath:文件夹路径 +*/ +void clearDir(string dPath) { + string command = ""; + if (_access(dPath.c_str(), 0) == 0) {//文件已存在,则清空该文件夹下的所有文件和子目录 + command.append("del /q "); + command.append(dPath); + command.append("*"); + system(command.c_str()); + printf("提示:清空文件夹命令:%s!\n",command.c_str()); + } + else + { + string mdCommand = "md "; + mdCommand.append(dPath); + system(mdCommand.c_str()); + printf("提示:新建文件夹成功!"); + } +} + + +// 函数定义 +std::string removeLastFileName(const std::string& path) { + // 查找最后一个反斜杠的位置 + size_t lastSlashPos = path.find_last_of('\\'); + + // 如果找到了反斜杠,并且它不是最后一个字符,则返回该位置之前的子字符串 + if (lastSlashPos != std::string::npos && lastSlashPos != path.length() - 1) { + return path.substr(0, lastSlashPos); } + + // 如果最后一个字符是反斜杠,或者没有找到反斜杠,返回原字符串 + return path; } void Split(string strArg, string spliter, vector& ans) @@ -117,741 +712,1768 @@ void Split(string strArg, string spliter, vector& ans) } } +/*o +* 异步任务处理完成时,根据流程id变更状态为“已完成” +* @param flow_uid:流程id +* @param field_name:要更新的字段名 +* @param new_value:要更新的字段值 +* +*/ +int setAttrForTask(const char* flow_uid, const char* field_name, const char* new_value) { + char sql_changeStatus[1024] = "\0"; + sprintf(sql_changeStatus, "update WHBH_CAPP_TASK set %s='%s' where FLOWID='%s'", field_name, new_value, flow_uid); + printf("提示:sql_changeStatus==%s \n", sql_changeStatus); + if (ExecuteSQLNoInputParam(sql_changeStatus) == -1) { + printf("》》》异常提示:更新流程状态失败!sql_changeStatus == %s\n", sql_changeStatus); + return 1; + }else { + printf("》》》提示:更新流程状态成功!sql_changeStatus == %s\n", sql_changeStatus); + ExecuteSQLNoInputParam("commit"); + } + return 0; +} + +/*o +* 获取当前yyyy-MM-dd HH-mm-ss格式的日期 +*/ +void get_current_time(char* updatetime) { + // 获取当前时间的秒数 + time_t rawtime; + time(&rawtime); + + // 将秒数转换为本地时间结构体 + struct tm* timeinfo; + timeinfo = localtime(&rawtime); + + // 格式化时间为字符串 + sprintf(updatetime, "%04d-%02d-%02d %02d:%02d:%02d", + timeinfo->tm_year + 1900, // 年份从1900年开始计算 + timeinfo->tm_mon + 1, // 月份从0开始计算 + timeinfo->tm_mday, // 日 + timeinfo->tm_hour, // 小时 + timeinfo->tm_min, // 分钟 + timeinfo->tm_sec); // 秒 +} -//物料传递erp -int DFL_WL_TO_SRM(char** c_sql_values, const char* flow_uid) { - WriteLog("===================================\n"); - WriteLog("WL to SRM begin\n"); - WriteLog("===================================\n"); - +/*o +* 保存物料相关信息到数据库表-WHBH_CAPP_PART +*/ +int savePart(tag_t revisionTag, char* username) { + printf("提示:开始执行savePart方法,得到username==%s \n", username); + tag_t itemTag = NULLTAG; + printf("提示:开始保存物料信息到数据库表 \n"); + //TODO 根据版本获取对象 + ITKCALL(ITEM_ask_item_of_rev(revisionTag, &itemTag)); int ifail = ITK_ok; - WriteLog("Open super privilege\n"); - POM_AM__set_application_bypass(true); - //流程的状态 - int status1 = 2; - int att_cnt = 0; - tag_t root_task_tag = NULLTAG, - *attachments; - tag_t executor; - tag_t query_tag1 = NULLTAG; - char* user_uid; - char dwg[] = ".dwg"; - char DWG[] = ".DWG"; - const char query_name_product[1][QRY_name_size_c + 1] = { "零组件版本" }; - //uid转tag对象 - ITK__convert_uid_to_tag(flow_uid, &root_task_tag); - tag_t root = NULLTAG; - EPM_ask_root_task(root_task_tag,&root); - - if (root_task_tag == NULLTAG || root == NULLTAG) { - - if (ConnServer(c_sql_values[1], c_sql_values[2], c_sql_values[0]))//"tc11","infodba","//172.16.50.40/tc11" "TC12","infodba","172.16.68.13/tc1" + int return_tag = 0; + char* materialno = NULL,//物料编码 + * name = NULL,//物料名称 + * version = NULL,//物料版本 + * unit = NULL,//单位 + * specification = NULL,//物料规格 + * designno = (char*)MEM_alloc(1028 * sizeof(char)),//图号 + * dversion = (char*)MEM_alloc(1028 * sizeof(char)),//图纸版本 + * orderno = NULL,//令号 + * source = NULL,//物料来源 + * purchase = NULL,//品牌说明 + * issuedtime = (char*)MEM_alloc(1028 * sizeof(char)),//下发时间 + * updatetime = (char*)MEM_alloc(1028 * sizeof(char));//更新时间 + char* userid; + tag_t* revMasterTags = NULL;//表单对象 + tag_t tuzTag = NULLTAG;//图纸对象 + tag_t* tuzTags = NULL; + char*** flowUID_values = NULL; + int outputValueCount; + char* type = NULL; + printf("提示:开始组织物料表信息 \n"); + ITKCALL(ifail = AOM_ask_value_string(itemTag, "item_id", &materialno)); + ITKCALL(ifail = AOM_ask_value_string(itemTag, "object_name", &name)); + ITKCALL(ifail = AOM_ask_value_string(itemTag, "object_type", &type)); + ITKCALL(ifail = AOM_UIF_ask_value(itemTag, "uom_tag", &unit)); + + printf("===>提示:物料【%s】类型【%s】的单位==%s \n",name,type, unit); + ITKCALL(ifail = AOM_ask_value_string(revisionTag, "item_revision_id", &version)); + //组织版本表单属性:根据版本对象获取表单对象 + int revMasterNum = 0; + ITKCALL(ifail = AOM_ask_value_tags(revisionTag, "IMAN_master_form_rev", &revMasterNum, &revMasterTags)); + if (revMasterNum > 0) + { + printf("=============================>>>提示:获取表单对象成功,共有%d个表单对象 \n", revMasterNum); + for (int i = 0; i < revMasterNum; i++) { - WriteLog("提示:中间数据表访问失败\n"); - return ifail; + ITKCALL(ifail = AOM_ask_value_string(revMasterTags[i], "h8_specification", &specification)); + ITKCALL(ifail = AOM_ask_value_string(revMasterTags[i], "h8_linghao", &orderno)); + ITKCALL(ifail = AOM_ask_value_string(revMasterTags[i], "h8_material_source", &source)); + ITKCALL(ifail = AOM_ask_value_string(revMasterTags[i], "h8_ppsm", &purchase)); + } - else { - char sql8[1024] = "\0"; - sprintf(sql8, "update DFL_DRAWING_TO_SRM_TASK set status = '%s' where flowid = '%s'", "已处理", flow_uid); - WriteLog("提示:sql8==%s\n", sql8); - if (ExecuteSQLNoInputParam(sql8) == -1) + + } + else + { + printf("提示:表单对象为空,无法获取物料表单信息 \n"); + } + int tuz_count = 0; + + //组织物料下的图纸属性:根据版本对象获取"提供者"关系文件夹下的图纸版本对象 + char* wlbb = NULL; + ITKCALL(ifail = AOM_ask_value_tags(revisionTag, "TC_Is_Represented_By", &tuz_count, &tuzTags)); + ITKCALL(ifail = AOM_ask_value_string(revisionTag, "item_id", &wlbb)); + + printf("=============>>>提示:物料::%s提供者关系文件夹下的图纸版本对象数量为::%d \n", wlbb, tuz_count); + if (tuz_count > 0) + { + printf("提示:获取‘提供者’关系下的图纸对象成功,个数为%d \n", tuz_count); + char* classification = NULL; + //对加密图纸的令号designno和版本dversion隐藏:空字符串 + AOM_ask_value_string(tuzTags[0], "ip_classification", &classification); + if (stricmp(classification, "内部") == 0) + { + printf("提示:图纸对象为非密图纸,令号and版本号正常写入 \n"); + tag_t* revisionTags = NULLTAG; + int revisionNums = 0; + ITKCALL(ITEM_ask_item_of_rev(tuzTags[0], &itemTag));//根据图纸版本获取图纸对象 + ITKCALL(ifail = AOM_ask_value_tags(itemTag, "revision_list", &revisionNums, &revisionTags)); + //TODO 图纸对象为空时插入异常 + ITKCALL(ifail = AOM_ask_value_string(itemTag, "item_id", &designno)); + ITKCALL(ifail = AOM_ask_value_string(revisionTags[revisionNums - 1], "item_revision_id", &dversion)); + printf("提示:图纸对象:%s 的最新版本对象为:%s \n", designno, dversion); + + MEM_free(revisionTags); + } + else + { + printf("提示:图纸对象为加密图纸,令号和版本号置空 \n"); + strcpy(designno, " "); + strcpy(dversion, " "); + } + + + } + else + { + printf("》》》异常提示:图纸对象为空,无法获取关系文件夹下的图纸信息,令号和版本号置空 \n"); + + strcpy(designno, " "); + printf("111"); + strcpy(dversion, " "); + } + + + printf("物料表表信息组织完成,开始插入or更新数据到数据库"); + int outputColumn = 0; + + char sql1[1024] = "\0"; + sprintf(sql1, "select * from WHBH_CAPP_PART where materialno = '%s' and version = '%s'", materialno, version); + printf("提示:sql1==%s\n", sql1); + printf("Tt:查询结果判断是否·已存在数据==%d\n", QuerySQLNoInputParam(sql1, &outputColumn, &outputValueCount, &flowUID_values)); + if (QuerySQLNoInputParam(sql1, &outputColumn, &outputValueCount, &flowUID_values) == -1) + { + printf("提示:查询数据 失败, %s \n", sql1); + //return 1; + } + else { + if (outputValueCount == 0) + { + printf("提示:未查询到数据, %s \n", sql1); + printf("》》》开始插入数据 \n");//插入更新时间和下发时间 + get_current_time(issuedtime); + get_current_time(updatetime); + char sql2[1024] = "\0"; + sprintf(sql2, "insert into WHBH_CAPP_PART(materialno,name,version,unit,specification,designno,dversion,orderno,source,purchase,username,issuedtime,updatetime) values('%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s')", materialno, name, version, unit, specification, designno, dversion, orderno, source, purchase, username, issuedtime, updatetime); + printf("提示:sql2==%s\n", sql2); + if (ExecuteSQLNoInputParam(sql2) == -1) { - WriteLog("提示:数据插入 失败, %s \n", sql8); - return 1; + printf("提示:sql2数据插入 失败, %s \n", sql2); + //return 1; + } + else { + ExecuteSQLNoInputParam("commit"); + } + } + else + { + printf("提示:查询到已存在数据, %s \n", sql1); + printf("==========:outputColumn == %d \n", outputColumn); + printf("==========:outputValueCount == %d \n", outputValueCount); + printf("》》》开始更新数据 \n");//只更新更新时间 + get_current_time(updatetime); + char sql3[1024] = "\0"; + sprintf(sql3, "update WHBH_CAPP_PART set name = '%s',unit = '%s',specification = '%s',designno = '%s',dversion = '%s',orderno = '%s',source = '%s',purchase = '%s',username = '%s',updatetime = '%s' where materialno = '%s' and version = '%s'", name, unit, specification, designno, dversion, orderno, source, purchase, username, updatetime, materialno, version); + printf("提示:sql3==%s\n", sql3); + if (ExecuteSQLNoInputParam(sql3) == -1) + { + printf("提示:数据更新 失败, %s \n", sql3); + //return 1; } else { ExecuteSQLNoInputParam("commit"); } } - return ifail; } - if (ifail != ITK_ok) { - WriteLog("this workflow is not exist!\n"); - return ifail; - } - ITKCALL(EPM_ask_attachments(root, EPM_target_attachment, &att_cnt, &attachments)); - vector items; - WriteLog("att_cnt=%d\n", att_cnt); - //便利流程下的对象,获取满足条件的item,并将item添加进items - int index = 0; - //获取ip和文件夹路径 - char* tomcatIp = NULL; - char* position = NULL; - char* url = NULL; - PREF_ask_char_value("DFL_FTP_IP", 0, &tomcatIp); - PREF_ask_char_value("DFL_FTP_IP", 1, &position); - PREF_ask_char_value("DFL_SRM_URL", 0, &url); - char* group_name1; - date_t creDate; - for (int i = 0; i < att_cnt; i++) - { - tag_t tagt1 = NULLTAG; - tagt1 = attachments[i];// - char* type1; - int juede = 0;//判断数据库是否连接 - //获取版本下的数据集 - int dataset_num = 0; - tag_t* dataset_tags = NULL; - ITKCALL(AOM_ask_value_string(tagt1, "object_type", &type1)); - if (strcmp("T2_outsourceRevision", type1) == 0) { - //判断是否存在dwg文件 - //获取版本下的数据集 - char* file_name = NULL; - char* origin_file_name = NULL; - tag_t* ref_object = NULL; - int n_found = 0; - - //数据 - char* itemId = NULL; - char* objectname = NULL; - char* datesetname = NULL; - char* fileurl = NULL; - char* revision = NULL; - int released = 0; - date_t createtime; - char* createtime_str = NULL; - date_t updatetime; - char* updatetime_str = NULL; - string urlCreateTime = ""; - string finishtime = ""; - string urlName = ""; - string filePaths = ""; - string zipPaths = ""; - ITKCALL(AOM_ask_value_tags(tagt1, "IMAN_specification", &dataset_num, &dataset_tags)); - int count = 0; - //循环一遍判断有几个dwg数据集 - for (int f = 0; f < dataset_num; f++) - { - ITKCALL(AOM_ask_value_string(dataset_tags[f], "object_name", &file_name)); - if (strstr(file_name, dwg) || strstr(file_name, DWG)) { - count++; - } - } - if (count == 1) { - for (int k = 0; k < dataset_num; k++) - { - string exportName = ""; - ITKCALL(AOM_ask_value_string(dataset_tags[k], "object_name", &file_name)); - - if (strstr(file_name, dwg) || strstr(file_name, DWG)) { - //获取数据集文件名称 - ITKCALL(AOM_ask_value_string(dataset_tags[k], "current_name", &origin_file_name)); - //ftp上传数据集 - ITKCALL(AE_ask_dataset_named_refs(dataset_tags[k], &n_found, &ref_object)); - - WriteLog("n_found=%d\n", n_found); - if (n_found > 0) { - //存在.dwg数据集 - //设置处理开始时间 - if (ConnServer(c_sql_values[1], c_sql_values[2], c_sql_values[0]))//"tc11","infodba","//172.16.50.40/tc11" "TC12","infodba","172.16.68.13/tc1" - { - WriteLog("提示:中间数据表访问失败\n"); - return ifail; - } - else { - juede = 1; - time_t curtime1; - time(&curtime1); - tm* nowtime1 = localtime(&curtime1); - string dealBeginTime; - dealBeginTime.append(std::to_string(1900 + nowtime1->tm_year)).append("-").append(std::to_string(1 + nowtime1->tm_mon)).append("-").append(std::to_string(nowtime1->tm_mday)).append(" ").append(std::to_string(nowtime1->tm_hour)).append("-").append(std::to_string(nowtime1->tm_min)).append("-").append(std::to_string(nowtime1->tm_sec)); - WriteLog("提示:中间数据表访问成功\n"); - char sql1[1024] = "\0"; - sprintf(sql1, "update DFL_DRAWING_TO_SRM_TASK set starttime = '%s' where flowid = '%s'", dealBeginTime.c_str(), flow_uid); - WriteLog("提示:sql1==%s\n", sql1); - if (ExecuteSQLNoInputParam(sql1) == -1) - { - WriteLog("提示:数据插入 失败, %s \n", sql1); - return 1; - } - else { - ExecuteSQLNoInputParam("commit"); - } - } - //1.下载文件到ftp目录 - time_t curtime2; - time(&curtime2); - tm* nowtime = localtime(&curtime2); - // 输出tm结构的年月日 - cout << "年: " << 1900 + nowtime->tm_year << endl; - cout << "月: " << 1 + nowtime->tm_mon << endl; - cout << "日: " << nowtime->tm_mday << endl; - urlCreateTime.append(std::to_string(1900 + nowtime->tm_year)).append("-").append(std::to_string(1 + nowtime->tm_mon)).append("-").append(std::to_string(nowtime->tm_mday)).append(" ").append(std::to_string(nowtime->tm_hour)).append("-").append(std::to_string(nowtime->tm_min)).append("-").append(std::to_string(nowtime->tm_sec)); - //拼接文件夹 年-》月-》日 - //创建文件夹 - string mdCommandYear = "md "; - string mdCommandMonth = "md "; - string mdCommandDay = "md "; - //string localPath = "C:\\Siemens\\ftp\\"; - string localPath = ""; - string dPath = localPath.append(position).append(std::to_string(1900 + nowtime->tm_year));//文件夹年路径 - WriteLog("position11111111111->%s", position); - WriteLog("dPath1->%s", dPath.c_str()); - //创建目录 复制文件 - if (_access(dPath.c_str(), 0) != 0) {//判断年是否存在 - //创建年 - system(mdCommandYear.append(dPath).c_str()); - } + /*MEM_free(userid); + MEM_free(username);*/ + MEM_free(dversion); + MEM_free(designno); + MEM_free(tuzTags); + MEM_free(purchase); + MEM_free(source); + MEM_free(orderno); + MEM_free(specification); + MEM_free(revMasterTags); + MEM_free(version); + MEM_free(unit); + MEM_free(type); + MEM_free(name); + MEM_free(materialno); + return ifail; +} - dPath.append("\\").append(std::to_string(1 + nowtime->tm_mon)); - WriteLog("dPath2->%s", dPath.c_str()); - if (_access(dPath.c_str(), 0) != 0) {//判断月是否存在 - //创建月 - system(mdCommandMonth.append(dPath).c_str()); - } +/*o +* 提取时间字符串中的年月日 +*/ +int extract_date_components(const char* issuedtime, char* year, char* month, char* day) { + int ifail = ITK_ok; + + // 提取年 + strncpy(year, issuedtime, 4); + year[4] = '\0'; // 确保字符串正确终止 + + // 提取月 + strncpy(month, issuedtime + 5, 2); + month[2] = '\0'; // 确保字符串正确终止 + + // 提取日 + strncpy(day, issuedtime + 8, 2); + day[2] = '\0'; // 确保字符串正确终止 - dPath.append("\\").append(std::to_string(nowtime->tm_mday)); - WriteLog("dPath3->%s", dPath.c_str()); - if (_access(dPath.c_str(), 0) != 0) {//判断日是否存在 - //创建日 - system(mdCommandDay.append(dPath).c_str()); - //数据集文件下载该目录 - IMF_export_file(ref_object[0], exportName.append(dPath).append("\\").append(origin_file_name).c_str()); - } - else { - IMF_export_file(ref_object[0], exportName.append(dPath).append("\\").append(origin_file_name).c_str()); - } - //3.封装数据存入 信息写入DFL_ DRAWING_TO_SRM_DETIALS - urlName.append(tomcatIp).append(std::to_string(1900 + nowtime->tm_year)).append("\\").append(std::to_string(1 + nowtime->tm_mon)).append("\\").append(std::to_string(nowtime->tm_mday)).append("\\").append(origin_file_name); - ITKCALL(AOM_ask_value_string(tagt1, "item_id", &itemId)); - ITKCALL(AOM_ask_value_string(tagt1, "object_name", &objectname)); - ITKCALL(AOM_ask_value_string(dataset_tags[k], "object_name", &datesetname)); - ITKCALL(AOM_ask_value_string(tagt1, "item_revision_id", &revision)); - //发布状态 - int wl_release_count = 0; - tag_t* wl_release_tags = NULL; - char* released_str; - //获取发布状态 - ITKCALL(AOM_ask_value_tags(dataset_tags[k], "release_status_list", &wl_release_count, &wl_release_tags)); - WriteLog("发布=>%d", wl_release_count); - if (wl_release_count > 0) { - //发布状态给0,封存状态给1(T2_D),其余状态都是0,取最后一次发布的状态 - tag_t released_tag = wl_release_tags[wl_release_count - 1]; - ITKCALL(AOM_ask_value_string(released_tag, "object_name", &released_str)); - WriteLog("released_str=%s\n", released_str); - if (strcmp(released_str, "T2_D") == 0) { - released = 1; - } - } - ITKCALL(AOM_ask_value_date(dataset_tags[k], "creation_date", &createtime)); - ITKCALL(DATE_date_to_string(createtime, "%Y-%m-%d %H:%M:%S", &createtime_str)); - ITKCALL(AOM_ask_value_date(dataset_tags[k], "last_mod_date", &updatetime)); - ITKCALL(DATE_date_to_string(updatetime, "%Y-%m-%d %H:%M:%S", &updatetime_str)); - //urlcreatetime - //调用sql插入数据 - if (juede == 1) { - char sql2[1024] = "\0"; - sprintf(sql2, "insert into DFL_DRAWING_TO_SRM_DETIALS(itemid,objectname,datesetname,fileurl,revision,released,createtime,updatetime,urlcreatetime,urlstatus) values('%s','%s','%s','%s','%s',%d,'%s','%s','%s','%s')", itemId, objectname, datesetname, urlName.c_str(), revision, released, createtime_str, updatetime_str, urlCreateTime.c_str(), "未同步"); - WriteLog("提示:sql2==%s\n", sql2); - if (ExecuteSQLNoInputParam(sql2) == -1) - { - WriteLog("提示:数据插入 失败, %s \n", sql2); - return 1; - } - else { - ExecuteSQLNoInputParam("commit"); - } - } - //4.调用SRM接口 - //拼接json - cJSON* array = cJSON_CreateArray(); - cJSON* data = cJSON_CreateObject(); - cJSON_AddStringToObject(data, "materialCode", itemId); - cJSON_AddStringToObject(data, "materialName", GbkToUtf8(objectname).c_str()); - cJSON_AddStringToObject(data, "materialDrawingName", GbkToUtf8(datesetname).c_str()); - cJSON_AddStringToObject(data, "fileUrl", GbkToUtf8(urlName).c_str()); - cJSON_AddStringToObject(data, "version", revision); - cJSON_AddStringToObject(data, "status", std::to_string(released).c_str()); - cJSON_AddStringToObject(data, "createTime", createtime_str); - cJSON_AddStringToObject(data, "publishTime", updatetime_str); - cJSON_AddItemToArray(array, data); - //发json - CURL* curl; - CURLcode res; - curl = curl_easy_init(); - if (curl) { - stringstream out; - curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST"); - //curl_easy_setopt(curl, CURLOPT_URL, "http://192.168.1.68/gateway/serviceApi/invoke/QZbycode/DFL-SRM-005"); - curl_easy_setopt(curl, CURLOPT_URL, url); - 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"); - //headers = curl_slist_append(headers, "Authorization: Basic UExNOkFmdGpzcFBQWW1DU2pNaWNROWh3U3htNDJ4eXpXUkhi"); - headers = curl_slist_append(headers, "Authorization: Basic UExNOmJlMVBYVzA5NzlKZGhEYWYxUXp4NzZaY3NEdE4zU3Iy"); - curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers); - //const char* data = "[{\r\n \"materialCode\": \"1\",\r\n \"materialName\": \"物料TEST001\",\r\n \"materialDrawingName\": \"图纸名称\",\r\n \"fileUrl\": \"www.baidu.com\",\r\n \"version\": \"1.1\",\r\n \"status\": \"\",\r\n \"createTime\": \"2023-11-26 11:11:10\",\r\n \"publishTime\": \"2023-11-27 11:11:10\"\r\n}]\r\n"; - curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data); - curl_easy_setopt(curl, CURLOPT_WRITEDATA, &out); - char* json_to_char = NULL; - WriteLog("JSON拼接完成\n"); - /* 打印JSON对象(整条链表)的所有数据 */ - json_to_char = cJSON_Print(array); - //cout << "JSON:" << json_to_char << endl; - WriteLog("json->%s\n", U2G(json_to_char)); - curl_easy_setopt(curl, CURLOPT_POSTFIELDS, json_to_char); - WriteLog("9\n"); - res = curl_easy_perform(curl); - //设置写数据 - - if (res != CURLE_OK) { - WriteLog("curl_easy_perform() failed: %s\n", curl_easy_strerror(res)); - } - else { - WriteLog("====>>>>OK\n"); + return ifail; +} - } - long retcode = 0; - CURLcode code = curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &retcode); - WriteLog("====>>>>retcode:%d\n", retcode); - if (code != CURLE_OK || retcode != 200) - { - WriteLog("发送数据给ERP失败\n"); - return 1; - } - else - { - WriteLog("发送数据给ERP成功\n"); +/*o +* 保存图纸相关信息到数据库表中-WHBH_CAPP_DESIGN +* 保存版本下关联的数据集存到服务器目录下 +* revisionTag:版本对象 +*/ +int saveDrawing(tag_t revisionTag, char* username) { + printf("方法-saveDrawing开始执行,接受到参数username==%s \n", username); + int ifail = ITK_ok; + char* designno, + * version, + * weight, + * materials, + * specification, + * name, + * address = (char*)malloc(128), + * userid, + * issuedtime = (char*)MEM_alloc(1028 * sizeof(char)), + * updatetime = (char*)MEM_alloc(1028 * sizeof(char)), + * nowTime = (char*)MEM_alloc(1028 * sizeof(char)); + + tag_t itemTag = NULLTAG;//图纸对象 + tag_t* revMasterTags = NULL;//版本表单 + tag_t revMasterTag = NULLTAG; + int dataset_num = 0; + tag_t* dataset_tags = NULL; + char* file_type = NULL; + char* origin_file_name = NULL, + * ref_file_name = NULL, + * ref_type = NULL, + * dataset_name = NULL; + // 为年、月、日分配存储空间 + char year[5]; // "yyyy" + null 终止符 + char month[3]; // "MM" + null 终止符 + char day[3]; // "dd" + null 终止符 + tag_t* ref_object = NULL; + int n_found = 0; + //get_current_time(nowTime); + string addressv; + + + + ITKCALL(ITEM_ask_item_of_rev(revisionTag, &itemTag)); + + int revMasterNum = 0; + ITKCALL(ifail = AOM_ask_value_tags(revisionTag, "IMAN_master_form_rev", &revMasterNum, &revMasterTags));//获取图纸版本对象下的版本表单 + if (revMasterNum > 0) + { + printf(">>>>>提示:图纸版本对象下有版本表单,开始获取版本表单信息 \n"); + for (int i = 0; i < revMasterNum; i++) + { + char* typevalue; + AOM_ask_value_string(revMasterTags[i], "object_type", &typevalue); + printf("》》》版本表单类型:%s\n", typevalue); + //1.组织图纸对象属性 + ITKCALL(ifail = AOM_ask_value_string(itemTag, "item_id", &designno)); + ITKCALL(ifail = AOM_ask_value_string(revisionTag, "item_revision_id", &version)); + ITKCALL(ifail = AOM_ask_value_string(revMasterTags[i], "h8_weight", &weight)); + ITKCALL(ifail = AOM_ask_value_string(revMasterTags[i], "h8_materials", &materials)); + ITKCALL(ifail = AOM_ask_value_string(revMasterTags[i], "h8_material_specification", &specification)); + printf("获取到的weight==%s继续后续流程\n", weight); + if (weight == NULL || weight[0] == '\0') + { + strcpy(weight, ""); + printf("提示:获取weight失败,请检查属性值是否存在!\n"); + } + if (materials == NULL || materials[0] == '\0') + { + strcpy(materials, ""); + printf("提示:获取materials失败,请检查属性值是否存在!\n"); + } + if (specification == NULL || specification[0] == '\0') { + strcpy(specification, ""); + printf("提示:获取specification失败,请检查属性值是否存在!\n"); + } + ITKCALL(ifail = AOM_ask_value_string(itemTag, "object_name", &name)); + printf("》》》当前正在保存的图纸信息为:图号==%s,图纸名称==%s,版本==%s\n", designno, name, version); + + /*tag_t user; + POM_get_user(&username, &user); + POM_get_user_id(&userid);*/ + + //------------开始判断存入图纸信息到数据库----------------------------------------------------------------------------- + int outputValueCount, + outputColumn; + char*** result_values; + char sql_cx[1024] = "\0"; + sprintf(sql_cx, "select ADDRESS from WHBH_CAPP_DESIGN where designno='%s' and version='%s' ", designno, version); + printf("提示:cxsql==%s\n", sql_cx); + if (QuerySQLNoInputParam(sql_cx, &outputColumn, &outputValueCount, &result_values) == -1) { + printf("提示:cxsql查询失败\n"); + return 1; + } + get_current_time(issuedtime); + get_current_time(updatetime); + printf(">>>>>查询结构:outputColumn==%d ,outputValueCount==%d \n", outputColumn, outputValueCount); + //--------------获取首选项中的FTP信息并与FTP建立连接---------------------------------------------------------------------------------------------------- + //获取首选项中配置的连接FTP的IP地址、用户名、密码 + int ftp_value_count = 0; + char** ftp_option_values; + char* ftp_ip = (char*)MEM_alloc(64*sizeof(char)), + * ftp_user = (char*)MEM_alloc(64 * sizeof(char)), + * ftp_password = (char*)MEM_alloc(64 * sizeof(char)); + //struct tm* lt2; + ITKCALL(PREF_ask_char_values("BH_CAPP_FTP", &ftp_value_count, &ftp_option_values)); + if (ftp_value_count != 3) + { + printf("首选项配置项错误:配置数量==%d,请核查!\n", ftp_value_count); + return ifail; + } + //printf("===>开始连接FTP服务器···"); + ////连接FTP服务器 + //HINTERNET hInternet = NULL, hFtpSession = NULL; + //hInternet = InternetOpenA(NULL, INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0); + //hFtpSession = InternetConnectA( + // hInternet, + // ftp_option_values[0], + // INTERNET_DEFAULT_FTP_PORT, + // ftp_option_values[1], + // ftp_option_values[2], + // INTERNET_SERVICE_FTP, + // INTERNET_FLAG_PASSIVE, + // 0 + //); + //if (hFtpSession == NULL) { + // printf("连接FTP服务器失败\n"); + //} + //else + //{ + // strcpy(ftp_ip, ftp_option_values[0]); + // strcpy(ftp_user, ftp_option_values[1]); + // strcpy(ftp_password, ftp_option_values[2]); + // printf("连接FTP服务器成功\n"); + //} + + + printf("===>>>开始判断是否存在原始数据\n"); + if (outputValueCount == 0) + {//不存在图纸原始数据,开始插入图纸数据 + WriteLog("===>不存在图纸原始数据,开始插入图纸数据\n"); + //提取年月日组件 + extract_date_components(issuedtime, year, month, day); + string exportName = "C:\\Design_temp\\"; + string ftpFilePath = "/Design/"; + exportName.append(year).append("\\").append(month).append("\\").append(day).append("\\").append(designno).append("-").append(version); + ftpFilePath.append(year).append("/").append(month).append("/").append(day).append("/").append(designno).append("-").append(version); + strcpy(address, ftpFilePath.c_str());//存储地址 + exportName.append("\\"); + //准备数据集存放目录 + clearDir(exportName); + //获取图纸版本下关联的数据集,并存储到服务器目录下 + ITKCALL(AOM_ask_value_tags(revisionTag, "IMAN_specification", &dataset_num, &dataset_tags)); + + if (dataset_num > 0) + { + DeleteLRDirectory(ftpFilePath.c_str()); - } - string str_json = out.str(); - WriteLog("return Msg===>%s\n", U2G(str_json.c_str())); - //5.如果接口调用成功了 修改两张表 - char* a = "同步成功"; - if (strstr(U2G(str_json.c_str()), a) != NULL) {//存在 - //task表 - time_t curtime3; - time(&curtime3); - tm* nowtime3 = localtime(&curtime3); - // 输出tm结构的年月日 - cout << "年: " << 1900 + nowtime3->tm_year << endl; - cout << "月: " << 1 + nowtime3->tm_mon << endl; - cout << "日: " << nowtime3->tm_mday << endl; - finishtime.append(std::to_string(1900 + nowtime3->tm_year)).append("-").append(std::to_string(1 + nowtime3->tm_mon)).append("-").append(std::to_string(nowtime3->tm_mday)).append(" ").append(std::to_string(nowtime3->tm_hour)).append("-").append(std::to_string(nowtime3->tm_min)).append("-").append(std::to_string(nowtime3->tm_sec)); - - char sql3[1024] = "\0"; - sprintf(sql3, "update DFL_DRAWING_TO_SRM_TASK set finishtime = '%s',status = '%s' where flowid = '%s'", finishtime.c_str(), "已推送", flow_uid); - WriteLog("提示:sql3==%s\n", sql3); - if (ExecuteSQLNoInputParam(sql3) == -1) - { - WriteLog("提示:数据插入 失败, %s \n", sql3); - return 1; - } - else { - ExecuteSQLNoInputParam("commit"); - } + //在FTP上提前创建存放数据集文件的文件夹,ftpFilePath路径形如:/Design/2022/01/25/000022-A + //ITKCALL(ifail = createFTPDir(hFtpSession, &ftpFilePath[0])); + + printf("提示:图纸版本下有数据集:%d个,开始保存数据集下的引用文件 \n", dataset_num); + for (int i = 0; i < dataset_num; i++) + { + printf("reforbegin\n"); + WriteLog("提示:开始循环遍历处理数据集[%d]\n", i); + //获取数据集文件名称 + ITKCALL(AOM_ask_value_string(dataset_tags[i], "current_name", &dataset_name)); + //数据集对象dataset_tags[i],数据集下的引用文件数量n_found,数据集下的引用文件ref_object + ITKCALL(AE_ask_dataset_named_refs(dataset_tags[i],&n_found, &ref_object)); + printf("提示:数据集名称==%s,引用文件数量==%d\n", dataset_name, n_found); - //detail表 - char sql4[1024] = "\0"; - sprintf(sql4, "update DFL_DRAWING_TO_SRM_DETIALS set urlstatus = '%s' where itemid = '%s' and revision = '%s'", "已同步", itemId, revision); - WriteLog("提示:sql4==%s\n", sql4); - if (ExecuteSQLNoInputParam(sql4) == -1) - { - WriteLog("提示:数据插入 失败, %s \n", sql4); - return 1; + if (n_found > 0) + { + for (int j = 0; j < n_found;j++) { + + //获取数据集下引用文件的类型 + ITKCALL(AOM_ask_value_string(ref_object[j], "object_type", &ref_type)); + printf("提示:当前引用文件类型==%s\n", ref_type); + if (strcmp(ref_type, "ImanFile") == 0) { + ITKCALL(AOM_ask_value_string(ref_object[j], "original_file_name", &ref_file_name)); + if (ref_file_name != NULL && ref_file_name[0] != '\0') { + string ftpFilePathTrue = ftpFilePath; + //每次拼接文件路径时,去掉最后一个\\符号后的内容(保留\\) + string final_exportName = removeLastFileName(exportName); + + final_exportName.append(ref_file_name);//C:\Design\2022\01\25\000022-A\111.dwg + printf("》》》提示:数据集下引用文件导出路径==%s \n 开始导出文件:%s》》》 \n", exportName.c_str(), ref_file_name); + + ITKCALL(ifail = IMF_export_file(ref_object[j], final_exportName.c_str())); + printf("=======OVER成功导出文件到本地缓存目录:%s======================== \n", final_exportName.c_str()); + printf("\n"); + printf("\n"); + printf("\n"); + + ftpFilePathTrue.append("/"); + std::cout << "==== upload test ====" << std::endl; + + string ip = ftp_ip; + string user = ftp_user; + string password = ftp_password; + /*bool success = UploadFileToFtp(final_exportName, + ftpFilePathTrue, + ip, + user, + password);*/ + ftpFilePathTrue.append(ref_file_name); + bool success = uploadFileToMinIO(final_exportName, ftpFilePathTrue); + if (success) { + printf("提示:FTP上传成功==%s\n", ftpFilePath.c_str()); } else { - ExecuteSQLNoInputParam("commit"); + printf("提示:FTP上传失败==%s\n", ftpFilePath.c_str()); } + } else { - char sql5[1024] = "\0"; - sprintf(sql5, "update DFL_DRAWING_TO_SRM_DETIALS set urlstatus = '%s' where itemid = '%s' and revision = '%s'", "同步失败", itemId, revision); - WriteLog("提示:sql5==%s\n", sql5); - if (ExecuteSQLNoInputParam(sql5) == -1) - { - WriteLog("提示:数据插入 失败, %s \n", sql5); - return 1; - } - else { - ExecuteSQLNoInputParam("commit"); - } + printf("提示:数据集[%s]下ImanFile类型的引用文件中不存在origin_file_name属性,获取引用文件名失败!不导出文件\n", dataset_name); } + printf("3\n"); + } - curl_easy_cleanup(curl); - - + printf("4\n"); + } + printf("5\n"); } + else + { + printf("提示:数据集下不存在引用文件,不导出文件\n"); + } + printf("6\n"); + } + printf("7\n"); + MEM_free(ref_object); + MEM_free(ftp_password); + MEM_free(ftp_user); + MEM_free(ftp_ip); + MEM_free(ref_type); + MEM_free(dataset_name); } - else if(count > 1){ - for (int k = 0; k < dataset_num; k++) + else { - string exportName = ""; - ITKCALL(AOM_ask_value_string(dataset_tags[k], "object_name", &file_name)); + printf("提示:数据集不存在,不导出文件\n"); + } + //删除本地临时文件夹上的所有内容 + WriteLog("》》》FTP上传数据集完成,开始清空本地临时文件夹\n"); + //clearDir(exportName); + - if (strstr(file_name, dwg) || strstr(file_name, DWG)) { + printf("提示:不存在原始数据,开始插入数据》》》\n"); + char sql_ins[1024] = "\0"; + sprintf(sql_ins, "insert into WHBH_CAPP_DESIGN(designno,version,weight,name,address,username,issuedtime,updatetime,materials,specification) values('%s','%s','%s','%s','%s','%s','%s','%s','%s','%s')", designno, version, weight, name, address, username, issuedtime, updatetime,materials,specification); + printf("提示:sqlins==%s\n", sql_ins); + if (ExecuteSQLNoInputParam(sql_ins) == -1) + { + printf("提示:数据插入 失败, %s \n", sql_ins); + return 1; + } + else { + ExecuteSQLNoInputParam("commit"); + } + } + else if (outputValueCount > 0) + { + // 存在,更新数据 + printf("提示:数据已存在,开始更新数据》》》\n"); + //获取原始数据的数据集物理文件保存地址 + string ftpExportName = result_values[0][0];// "/Design/2022/01/25/000022-C" + string zscfPath = "C:\\Design_temp\\";//暂时存放位置 + clearDir(zscfPath); + + ITKCALL(AOM_ask_value_tags(revisionTag, "IMAN_specification", &dataset_num, &dataset_tags)); + if (dataset_num > 0) + { + //更新 + WriteLog("已存在原始图纸记录,且更新后的图纸下存在数据集,开始更新FTP文件"); + // 清空ftp上的ftpExportName目录下的所有文件,为下面循环遍历取得数据集存放做准备 + DeleteLRDirectory(ftpExportName.c_str()); + //在FTP上提前创建存放数据集文件的文件夹,ftpFilePath路径形如:/Design/2022/01/25/000022-A/ + ftpExportName.append("/"); + //ITKCALL(ifail = createFTPDir(hFtpSession, &ftpExportName[0])); + + + printf("提示:图纸版本下有数据集:%d个,开始保存数据集下的引用文件 \n", dataset_num); + for (int i = 0; i < dataset_num; i++) + { //获取数据集文件名称 - ITKCALL(AOM_ask_value_string(dataset_tags[k], "current_name", &origin_file_name)); - //ftp上传数据集 - ITKCALL(AE_ask_dataset_named_refs(dataset_tags[k], &n_found, &ref_object)); - - WriteLog("n_found=%d\n", n_found); - if (n_found > 0) { - //存在.dwg数据集 - //设置处理开始时间 - if (ConnServer(c_sql_values[1], c_sql_values[2], c_sql_values[0]))//"tc11","infodba","//172.16.50.40/tc11" "TC12","infodba","172.16.68.13/tc1" - { - WriteLog("提示:中间数据表访问失败\n"); - return ifail; - } - else { - juede = 1; - time_t curtime1; - time(&curtime1); - tm* nowtime1 = localtime(&curtime1); - string dealBeginTime; - dealBeginTime.append(std::to_string(1900 + nowtime1->tm_year)).append("-").append(std::to_string(1 + nowtime1->tm_mon)).append("-").append(std::to_string(nowtime1->tm_mday)).append(" ").append(std::to_string(nowtime1->tm_hour)).append("-").append(std::to_string(nowtime1->tm_min)).append("-").append(std::to_string(nowtime1->tm_sec)); - WriteLog("提示:中间数据表访问成功\n"); - char sql1[1024] = "\0"; - sprintf(sql1, "update DFL_DRAWING_TO_SRM_TASK set starttime = '%s' where flowid = '%s'", dealBeginTime.c_str(), flow_uid); - WriteLog("提示:sql1==%s\n", sql1); - if (ExecuteSQLNoInputParam(sql1) == -1) - { - WriteLog("提示:数据插入 失败, %s \n", sql1); - return 1; + ITKCALL(AOM_ask_value_string(dataset_tags[i], "current_name", &origin_file_name)); + //数据集对象dataset_tags[i],数据集下的引用文件数量n_found,数据集下的引用文件ref_object + ITKCALL(AE_ask_dataset_named_refs(dataset_tags[i], &n_found, &ref_object)); + + printf("提示:数据集名称==%s,引用文件数量==%d\n", origin_file_name, n_found); + + if (n_found > 0) + { + for (int t = 0; t < n_found;t++) { + ITKCALL(AOM_ask_value_string(ref_object[t], "object_type", &ref_type)); + printf("提示:当前引用文件类型==%s\n", ref_type); + if (strcmp(ref_type, "ImanFile") == 0) { + //获取数据集下引用文件的名称 + ITKCALL(AOM_ask_value_string(ref_object[t], "original_file_name", &ref_file_name)); + if (ref_file_name != NULL && ref_file_name[0] != '\0') { + printf("提示:数据集下存在引用文件,开始导出文件》》》\n"); + string final_exportName = zscfPath;// C:\Design_temp\111.dwg + final_exportName.append(ref_file_name); + //导出当前数据集下存在的引用文件到服务器目录下 + ITKCALL(ifail = IMF_export_file(ref_object[t], final_exportName.c_str())); + printf("=======OVER成功导出文件到本地缓存目录:%s,导出文件:%s======================== \n", final_exportName.c_str(), ref_file_name); + printf("\n"); + printf("\n"); + printf("\n"); + string ftpFilePath = ftpExportName; + ftpFilePath.append(ref_file_name); + + printf("mao2 \n"); + string ip = ftp_ip; + string user = ftp_user; + string password = ftp_password; + /*bool success = UploadFileToFtp(final_exportName, + ftpExportName, + ip, + user, + password);*/ + + bool success = uploadFileToMinIO(final_exportName, ftpFilePath); + if (success) { + printf("提示:FTP上传成功==%s\n", ftpFilePath.c_str()); + } + else { + printf("提示:FTP上传失败==%s\n", ftpFilePath.c_str()); + } + } } else { - ExecuteSQLNoInputParam("commit"); + printf("提示:数据集[%s]下ImanFile类型的引用文件中不存在origin_file_name属性,获取引用文件名失败!不导出文件\n", origin_file_name); } + } - //1.下载文件到ftp目录 - time_t curtime2; - time(&curtime2); - tm* nowtime = localtime(&curtime2); - // 输出tm结构的年月日 - cout << "年: " << 1900 + nowtime->tm_year << endl; - cout << "月: " << 1 + nowtime->tm_mon << endl; - cout << "日: " << nowtime->tm_mday << endl; - - urlCreateTime.append(std::to_string(1900 + nowtime->tm_year)).append("-").append(std::to_string(1 + nowtime->tm_mon)).append("-").append(std::to_string(nowtime->tm_mday)).append(" ").append(std::to_string(nowtime->tm_hour)).append("-").append(std::to_string(nowtime->tm_min)).append("-").append(std::to_string(nowtime->tm_sec)); - //拼接文件夹 年-》月-》日 - //创建文件夹 - string mdCommandYear = "md "; - string mdCommandMonth = "md "; - string mdCommandDay = "md "; - //string localPath = "C:\\Siemens\\ftp\\"; - string localPath = ""; - string dPath = localPath.append(position).append(std::to_string(1900 + nowtime->tm_year));//文件夹年路径 - WriteLog("position11111111111->%s", position); - WriteLog("dPath1->%s", dPath.c_str()); - //创建目录 复制文件 - if (_access(dPath.c_str(), 0) != 0) {//判断年是否存在 - //创建年 - system(mdCommandYear.append(dPath).c_str()); - } + } + else + { + printf("提示:数据集下不存在引用文件,不导出文件\n"); + } - dPath.append("\\").append(std::to_string(1 + nowtime->tm_mon)); - WriteLog("dPath2->%s", dPath.c_str()); - if (_access(dPath.c_str(), 0) != 0) {//判断月是否存在 - //创建月 - system(mdCommandMonth.append(dPath).c_str()); - } + } - dPath.append("\\").append(std::to_string(nowtime->tm_mday)); - WriteLog("dPath3->%s", dPath.c_str()); - if (_access(dPath.c_str(), 0) != 0) {//判断日是否存在 - //创建日 - system(mdCommandDay.append(dPath).c_str()); - //数据集文件下载该目录 - IMF_export_file(ref_object[0], exportName.append(dPath).append("\\").append(origin_file_name).c_str()); - } - else { - IMF_export_file(ref_object[0], exportName.append(dPath).append("\\").append(origin_file_name).c_str()); - } - filePaths.append(exportName).append(";"); - //3.封装数据存入 信息写入DFL_ DRAWING_TO_SRM_DETIALS + MEM_free(ftp_password); + MEM_free(ftp_user); + MEM_free(ftp_ip); + MEM_free(ref_file_name); + MEM_free(ref_type); + MEM_free(ref_object); + MEM_free(origin_file_name); + //clearDir(zscfPath); + } + else + { + printf("提示:数据集不存在,不导出文件\n"); + } + + char sql_upd[1024] = "\0"; + sprintf(sql_upd, "update WHBH_CAPP_DESIGN set weight = '%s',name = '%s',username = '%s',updatetime = '%s' where designno='%s' and version='%s' and materials='%s' and specification='%s' ", weight,name, username, updatetime, designno, version, materials, specification); + printf("提示:sqlupd==%s\n", sql_upd); + if (ExecuteSQLNoInputParam(sql_upd) == -1) + { + printf("提示:数据插入 失败, %s \n", sql_upd); + return 1; + } + else { + ExecuteSQLNoInputParam("commit"); + } + } - ITKCALL(AOM_ask_value_string(tagt1, "item_id", &itemId)); - ITKCALL(AOM_ask_value_string(tagt1, "object_name", &objectname)); - ITKCALL(AOM_ask_value_string(dataset_tags[k], "object_name", &datesetname)); - ITKCALL(AOM_ask_value_string(tagt1, "item_revision_id", &revision)); + MEM_free(dataset_tags); + MEM_free(ftp_option_values); + MEM_free(name); + MEM_free(specification); + MEM_free(materials); + MEM_free(weight); + MEM_free(version); + MEM_free(designno); + MEM_free(typevalue); + } - if (urlName.size() == 0) { - urlName.append(tomcatIp).append(std::to_string(1900 + nowtime->tm_year)).append("\\").append(std::to_string(1 + nowtime->tm_mon)).append("\\").append(std::to_string(nowtime->tm_mday)).append("\\"); - zipPaths.append(dPath).append("\\").append(itemId).append("-").append(objectname).append(".zip"); - } - - //发布状态 - int wl_release_count = 0; - tag_t* wl_release_tags = NULL; - char* released_str; - //获取发布状态 - ITKCALL(AOM_ask_value_tags(dataset_tags[k], "release_status_list", &wl_release_count, &wl_release_tags)); - WriteLog("发布=>%d", wl_release_count); - if (wl_release_count > 0) { - //发布状态给0,封存状态给1(T2_D),其余状态都是0,取最后一次发布的状态 - tag_t released_tag = wl_release_tags[wl_release_count - 1]; - ITKCALL(AOM_ask_value_string(released_tag, "object_name", &released_str)); - WriteLog("released_str=%s\n", released_str); - if (strcmp(released_str, "T2_D") == 0) { - released = 1; - } - } - ITKCALL(AOM_ask_value_date(dataset_tags[k], "creation_date", &createtime)); - ITKCALL(DATE_date_to_string(createtime, "%Y-%m-%d %H:%M:%S", &createtime_str)); - ITKCALL(AOM_ask_value_date(dataset_tags[k], "last_mod_date", &updatetime)); - ITKCALL(DATE_date_to_string(updatetime, "%Y-%m-%d %H:%M:%S", &updatetime_str)); - //urlcreatetime - - + } + MEM_free(revMasterTags); + return ifail; +} +/*o +* 递归BOMLine取得相应的数据存到数据库表中 +* @param topLineTag:当前BOMLine,即为父项 +*/ +int throughAllBom(tag_t topLineTag,char* username) { + printf("开始执行方法=>throughAllBom,获取的参数username==%s\n",username); + int ifail = ITK_ok; + //BOM表中的数据条目 + char* parent, + * parentversion, + * parentname, + * sub, + * subversion = NULL, + * subname, + * lineno, + * quantity, + * issuedtime = (char*)MEM_alloc(1028 * sizeof(char)), + * updatetime = (char*)MEM_alloc(1028 * sizeof(char)); + tag_t itemTag = NULLTAG, + itemRevisionTag = NULLTAG, + partItemRevisionTag = NULLTAG,//物料版本对象 + partItemTag = NULLTAG, + drawingItemRevisionTag = NULLTAG,//物料版本对象 + drawingItemTag = NULLTAG;//物料对象 + tag_t childItemRevisionTag, + childItemTag; + char* userid = NULL; + tag_t user; + int outputColumnQ = 0; + int outputCountQ; + char*** outputValuesQ; + ITKCALL(ifail = AOM_ask_value_tag(topLineTag, bomAttr_lineItemRevTag, &itemRevisionTag)); + ITKCALL(ifail = AOM_ask_value_tag(topLineTag, bomAttr_lineItemTag, &itemTag)); + + //获取BOM信息 + ITKCALL(ifail = AOM_ask_value_string(itemTag, "item_id", &parent)); + ITKCALL(ifail = AOM_ask_value_string(itemRevisionTag, "item_revision_id", &parentversion)); + ITKCALL(ifail = AOM_ask_value_string(itemTag, "object_name", &parentname)); + printf("获取到当前物料版本对象的BOM信息:父项版本及名称==%s,%s,%s\n", parent, parentversion, parentname); + + //获取用户名称、id + /*POM_get_user(&username, &user); + POM_get_user_id(&userid);*/ + + tag_t* childLines = NULL; + int lineCount = 0; + //获取当前bom行-bomline的所有子行 + BOM_line_ask_child_lines(topLineTag, &lineCount, &childLines); + if (lineCount > 0) + { + for (int i = 0; i < lineCount; i++) + { + printf("提示:存在子项,开始处理子项信息》》》\n"); + + //在进入下一次递归前保存当前子项的物料相关信息 + ITKCALL(ifail = AOM_ask_value_tag(childLines[i], bomAttr_lineItemRevTag, &childItemRevisionTag)); + ITKCALL(ifail = AOM_ask_value_tag(childLines[i], bomAttr_lineItemTag, &childItemTag)); + char* objType; + AOM_ask_value_string(childItemRevisionTag, "object_type", &objType); //getStringProperty + printf("SB提示:当前版本对象类型==%s\n", objType); + if (stricmp(objType, "H8_wuliaoRevision") == 0)//物料BOM + { + printf("提示:当前子项为物料,开始获取物料信息》》》\n"); + //保存当前子项的物料信息 + ITKCALL(ifail = savePart(childItemRevisionTag,username)); + } + else if (stricmp(objType, "H8_frockItemRevision") == 0 || stricmp(objType, "H8_drawingRevision") == 0 || stricmp(objType, "H8_frockItemRevision") == 0 || stricmp(objType, "H8_standardPartsRevision") == 0 || stricmp(objType, "H8_ComponentRevision") == 0) {//图纸BOM + char* classification; + printf("提示:当前子项为图纸,开始获取图纸信息》》》\n"); - } - } + //判断 密级程度 + AOM_ask_value_string(childItemRevisionTag, "ip_classification", &classification); + if (stricmp(classification, "内部") == 0) + { + printf(">>>当前图纸为非密图纸,允许下发:%s \n", classification); + ITKCALL(ifail = saveDrawing(childItemRevisionTag,username)); } - //调用jar包生成zip - WriteLog("提示:filePaths.c_str()==%s\n", filePaths.c_str()); - - char cmd[256] = ""; - char* tc_root_dir = getenv("tc_root"); - strcpy(cmd, "java -jar "); - strcat(cmd, tc_root_dir); - strcat(cmd, "\\bin\\DFL_ZIP.jar"); - strcat(cmd, " \""); - strcat(cmd, filePaths.c_str()); - strcat(cmd, "\" \""); - strcat(cmd, zipPaths.c_str()); - strcat(cmd, "\""); - WriteLog("\n%s\n", cmd); - system(cmd); - //调用sql插入数据 - urlName.append(itemId).append("-").append(objectname).append(".zip"); - if (juede == 1) { - char sql2[1024] = "\0"; - sprintf(sql2, "insert into DFL_DRAWING_TO_SRM_DETIALS(itemid,objectname,datesetname,fileurl,revision,released,createtime,updatetime,urlcreatetime,urlstatus) values('%s','%s','%s','%s','%s',%d,'%s','%s','%s','%s')", itemId, objectname, datesetname, urlName.c_str(), revision, released, createtime_str, updatetime_str, urlCreateTime.c_str(), "未同步"); - WriteLog("提示:sql2==%s\n", sql2); - if (ExecuteSQLNoInputParam(sql2) == -1) - { - WriteLog("提示:数据插入 失败, %s \n", sql2); - return 1; - } - else { - ExecuteSQLNoInputParam("commit"); - } + MEM_free(classification); + } + //在每个子行中执行save操作,然后将当前子行作为topLineTag递归 + //从bom子行中获取物料信息 + //对子项版本特殊处理:物料和图纸的“子项版本”内容不是同一个数据来源 + ITKCALL(ifail = AOM_ask_value_string(childItemRevisionTag, "item_revision_id", &subversion)); + ITKCALL(ifail = AOM_ask_value_string(childItemTag, "item_id", &sub)); + ITKCALL(ifail = AOM_ask_value_string(childItemTag, "object_name", &subname)); + ITKCALL(ifail = AOM_ask_value_string(childLines[i], "bl_sequence_no", &lineno)); + ITKCALL(ifail = AOM_ask_value_string(childLines[i], "bl_quantity", &quantity)); + + //插入BOM数据到数据库表中 + char sql_query[1024] = "\0"; + sprintf(sql_query, "select * from WHBH_CAPP_BOM where parent = '%s' and parentversion = '%s' and sub = '%s' and subversion = '%s'",parent,parentversion,sub,subversion); + printf("Info:sql_query==%s\n", sql_query); + if (QuerySQLNoInputParam(sql_query,&outputColumnQ,&outputCountQ,&outputValuesQ) == -1){ + printf("提示:sql_query==%s查询失败\n", sql_query); + return NULL; + } + if (outputCountQ <= 0) { + //如果当前BOM不存在原始数据,则插入 + printf("提示:sql_query==%s无记录\n", sql_query); + get_current_time(issuedtime); + get_current_time(updatetime); + char sql1[1024] = "\0"; + sprintf(sql1, "insert into WHBH_CAPP_BOM(parent,parentversion,parentname,sub,subversion,subname,lineno,quantity,username,issuedtime,updatetime) values('%s','%s','%s','%s','%s','%s',%s,'%s','%s','%s','%s')", parent, parentversion, parentname, sub, subversion, subname, lineno, quantity, username, issuedtime, updatetime); + printf("提示:sql1==%s\n", sql1); + if (ExecuteSQLNoInputParam(sql1) == -1) + { + printf("提示:数据插入 失败, %s \n", sql1); + return 1; } - //4.调用SRM接口 - //拼接json - cJSON* array = cJSON_CreateArray(); - cJSON* data = cJSON_CreateObject(); - cJSON_AddStringToObject(data, "materialCode", itemId); - cJSON_AddStringToObject(data, "materialName", GbkToUtf8(objectname).c_str()); - cJSON_AddStringToObject(data, "materialDrawingName", GbkToUtf8(datesetname).c_str()); - cJSON_AddStringToObject(data, "fileUrl", GbkToUtf8(urlName).c_str()); - cJSON_AddStringToObject(data, "version", revision); - cJSON_AddStringToObject(data, "status", std::to_string(released).c_str()); - cJSON_AddStringToObject(data, "createTime", createtime_str); - cJSON_AddStringToObject(data, "publishTime", updatetime_str); - cJSON_AddItemToArray(array, data); - //发json - CURL* curl; - CURLcode res; - curl = curl_easy_init(); - if (curl) { - stringstream out; - curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST"); - //curl_easy_setopt(curl, CURLOPT_URL, "http://192.168.1.68/gateway/serviceApi/invoke/QZbycode/DFL-SRM-005"); - curl_easy_setopt(curl, CURLOPT_URL, url); - 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"); - //headers = curl_slist_append(headers, "Authorization: Basic UExNOkFmdGpzcFBQWW1DU2pNaWNROWh3U3htNDJ4eXpXUkhi"); - headers = curl_slist_append(headers, "Authorization: Basic UExNOmJlMVBYVzA5NzlKZGhEYWYxUXp4NzZaY3NEdE4zU3Iy"); - curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers); - //const char* data = "[{\r\n \"materialCode\": \"1\",\r\n \"materialName\": \"物料TEST001\",\r\n \"materialDrawingName\": \"图纸名称\",\r\n \"fileUrl\": \"www.baidu.com\",\r\n \"version\": \"1.1\",\r\n \"status\": \"\",\r\n \"createTime\": \"2023-11-26 11:11:10\",\r\n \"publishTime\": \"2023-11-27 11:11:10\"\r\n}]\r\n"; - curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data); - curl_easy_setopt(curl, CURLOPT_WRITEDATA, &out); - char* json_to_char = NULL; - WriteLog("JSON拼接完成\n"); - /* 打印JSON对象(整条链表)的所有数据 */ - json_to_char = cJSON_Print(array); - //cout << "JSON:" << json_to_char << endl; - WriteLog("json->%s\n", U2G(json_to_char)); - curl_easy_setopt(curl, CURLOPT_POSTFIELDS, json_to_char); - WriteLog("9\n"); - res = curl_easy_perform(curl); - //设置写数据 - - if (res != CURLE_OK) { - WriteLog("curl_easy_perform() failed: %s\n", curl_easy_strerror(res)); - } - else { + else { + ExecuteSQLNoInputParam("commit"); + } + }else{ + //如果当前BOM数据已存在,则更新 + get_current_time(updatetime); + char sql5[1024] = "\0"; + sprintf(sql5, "update WHBH_CAPP_BOM set parentname='%s',subname='%s',lineno='%s',quantity='%s',username='%s',updatetime='%s' where parent = '%s' and parentversion = '%s' and sub = '%s' and subversion = '%s'", parentname, subname, lineno, quantity, username,updatetime, parent, parentversion, sub,subversion); + printf("提示:sql5==%s\n", sql5); + if (ExecuteSQLNoInputParam(sql5) == -1) + { + printf("提示:数据插入 失败, %s \n", sql5); + return 1; + } + else { + ExecuteSQLNoInputParam("commit"); + } + } + // 递归 + throughAllBom(childLines[i],username); + + MEM_free(quantity); + MEM_free(lineno); + MEM_free(subname); + MEM_free(sub); + MEM_free(subversion); + MEM_free(objType); + } + } + else + { + printf("》》》异常提示:当前BOM不存在子项,即不存在BOM结构,不处理\n"); + } + MEM_free(childLines); + /*MEM_free(userid); + MEM_free(username);*/ + MEM_free(parentname); + MEM_free(parentversion); + MEM_free(parent); + return ifail; +} - WriteLog("====>>>>OK\n"); +/*o +* (exe)服务:获取流程下的对象,判断对象类型:物料or图纸,分别处理 +* @param c_sql_values: 数据库连接信息 +* @param flow_uid: 从“异步任务表”WHBH_CAPP_TASK 中查询出的待处理的流程ID +*/ +int DFL_WL_TO_CAPP(char** c_sql_values, const char* flow_uid,char* username) +{ + printf("DFL_WL_TO_CAPP方法开始执行,当前流程:%s的username==%s\n",flow_uid,username); + //char logFilePath[128] = "C:\\Users\\Administrator\\Desktop\\TC_LOG.txt"; + //CreateLogFile(logFilePath); - } - long retcode = 0; - CURLcode code = curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &retcode); - WriteLog("====>>>>retcode:%d\n", retcode); - if (code != CURLE_OK || retcode != 200) - { - WriteLog("发送数据给ERP失败\n"); - return 1; - } - else - { - WriteLog("发送数据给ERP成功\n"); + char* log_file = NULL; - } - string str_json = out.str(); - WriteLog("return Msg===>%s\n", U2G(str_json.c_str())); - //5.如果接口调用成功了 修改两张表 - char* a = "同步成功"; - if (strstr(U2G(str_json.c_str()), a) != NULL) {//存在 - //task表 - time_t curtime3; - time(&curtime3); - tm* nowtime3 = localtime(&curtime3); - // 输出tm结构的年月日 - cout << "年: " << 1900 + nowtime3->tm_year << endl; - cout << "月: " << 1 + nowtime3->tm_mon << endl; - cout << "日: " << nowtime3->tm_mday << endl; - finishtime.append(std::to_string(1900 + nowtime3->tm_year)).append("-").append(std::to_string(1 + nowtime3->tm_mon)).append("-").append(std::to_string(nowtime3->tm_mday)).append(" ").append(std::to_string(nowtime3->tm_hour)).append("-").append(std::to_string(nowtime3->tm_min)).append("-").append(std::to_string(nowtime3->tm_sec)); - - char sql3[1024] = "\0"; - sprintf(sql3, "update DFL_DRAWING_TO_SRM_TASK set finishtime = '%s',status = '%s' where flowid = '%s'", finishtime.c_str(), "已推送", flow_uid); - WriteLog("提示:sql3==%s\n", sql3); - if (ExecuteSQLNoInputParam(sql3) == -1) - { - WriteLog("提示:数据插入 失败, %s \n", sql3); - return 1; - } - else { - ExecuteSQLNoInputParam("commit"); - } + printf("创建日志文件\n"); + //char logFilePath[128] = "C:\\Users\\Administrator\\Desktop\\TC_LOG.txt"; + //CreateLogFile(logFilePath, &log_file); + + printf("===================================\n"); + printf("WL to CAPP begin\n"); + printf("===================================\n"); + + int ifail = ITK_ok; + printf("Open super privilege\n"); + POM_AM__set_application_bypass(true); + //流程的状态 + int status1 = 2; + int att_cnt = 0, + i = 0; + int attachmentCount = 0; + tag_t root_task_tag = NULLTAG, + *attachments; + tag_t rootTask = NULLTAG, + windowTag = NULLTAG, + topLineTag = NULLTAG; + tag_t executor; + tag_t query_tag1 = NULLTAG; + tag_t* attachmentTags = NULL, + revisionTag = NULLTAG, + itemTag = NULLTAG; + char* user_uid; + char dwg[] = "DWG"; + char T2_dwg[] = "T2_DWG"; + char AIDrawing[] = "AIDrawing"; + char t2_AIDrawing[] = "T2_AIDrawing"; + const char query_name_product[1][QRY_name_size_c + 1] = { "零组件版本" }; + //uid转tag对象:将流程uid转换为tag对象 + ITK__convert_uid_to_tag(flow_uid, &root_task_tag); + tag_t root = NULLTAG; + EPM_ask_root_task(root_task_tag,&root); + + if (ifail != ITK_ok) { + printf("this workflow is not exist!\n"); + return ifail; + } + printf("》》》开始获取流程下的对象\n"); +//---------------------------------------------------------------------------------------------------------------------------- + //获取流程下的对象数组-attachments + ITKCALL(EPM_ask_attachments(root, EPM_target_attachment, &att_cnt, &attachments)); + printf("当前流程:%s 下的对象数量为:%d \n", flow_uid, att_cnt); + if (att_cnt > 0) + { + for (i = 0; i < att_cnt; i++) { + //获得流程下的物料版本对象kuma + revisionTag = attachments[i]; + if (!isTypeOf(revisionTag, "ItemRevision")) {//如果不是版本对象,则跳过 + printf("流程:%s 下的当前对象不是版本对象,跳过\n", flow_uid); + continue; + } + //根据流程目标下的版本对象,获取版本对象对应的item对象 + ITKCALL(ITEM_ask_item_of_rev(revisionTag, &itemTag)); + + //TODO 判断流程目标下的版本对象是物料还是图纸 + char* objType; + char* objName; + char* publishStatus; + char* classification; + date_t publishDate; + AOM_ask_value_string(revisionTag, "object_type", &objType); + AOM_ask_value_string(revisionTag, "object_name", &objName); + printf("SB当前流程下对象版本类型为:%s \n", objType); + //------------------------------《开始判断流程下的对象类型:物料or图纸》----------------------------------------------------------------------------------------------------------- + if (stricmp(objType, "H8_wuliaoRevision") == 0)//如果此流程下的当前对象为:物料版本 + { + printf("当前流程下对象版本为物料版本\n"); + // 进入BOM递归前存一次物料,在递归过程中只存子项物料即可 + if (revisionTag != NULL) + { + savePart(revisionTag,username); + } + else + { + printf("当前流程下对象版本为空,无法保存物料信息到数据库"); + } + + //1.获取当前流程对象的bom行 + //创建Window + BOM_create_window(&windowTag); + //设置顶层BOMline + BOM_set_window_top_line(windowTag, itemTag, revisionTag, NULLTAG, &topLineTag); + + throughAllBom(topLineTag,username); + printf("》》》BOM递归结束"); + //关闭BOMwindow + BOM_close_window(windowTag); + }else if (stricmp(objType, "H8_frockItemRevision") == 0 || stricmp(objType, "H8_drawingRevision") == 0 || stricmp(objType, "H8_frockItemRevision") == 0 || stricmp(objType, "H8_standardPartsRevision") == 0 || stricmp(objType, "H8_ComponentRevision") == 0) + {//如果此流程下的当前对象为:图纸版本 + printf("当前流程下对象版本为图纸版本:%s \n",objType); + //校验发布状态,未发布则不执行并提示:当前版本未发布 + AOM_ask_value_date(revisionTag, "date_released", &publishDate); + if (publishDate.year == NULL) + { + printf("当前版本未发布,不执行 \n"); + return ifail; + } + else { + printf(">>>当前版本已发布,发布时间为: \n"); + printf("Date: %04hd-%02hhd-%02hhd\n", publishDate.year, publishDate.month, publishDate.day); + printf("Time: %02hhd:%02hhd:%02hhd\n", publishDate.hour, publishDate.minute, publishDate.second); + } + //判断 密级程度 + AOM_ask_value_string(revisionTag, "ip_classification", &classification); + if (stricmp(classification,"内部") == 0) + { + printf(">>>当前图纸为非密图纸,允许下发:%s \n", classification); + // 进入BOM递归前第一次存图纸,递归中再存一次给:将图纸版本对象属性以及表单属性记录到图纸数据表中 + ITKCALL(ifail = saveDrawing(revisionTag,username)); + } + else + { + printf(">>>当前图纸:%s为加密图纸,不允许下发:%s \n", objName, classification); + } + //1.获取当前流程对象的bom行 + //创建Window + BOM_create_window(&windowTag); + //设置顶层BOMline + BOM_set_window_top_line(windowTag, itemTag, revisionTag, NULLTAG, &topLineTag); + + throughAllBom(topLineTag,username); + + //关闭BOMwindow + BOM_close_window(windowTag); + MEM_free(classification); + + }else{ + printf("不满足要求:流程 ==> %s 下的 %s 对象类型为:%s\n", flow_uid, objName, objType); + } + MEM_free(objName); + MEM_free(objType); + } + }else + { + printf("》》》流程下没有对象,无法执行"); + } + MEM_free(attachments); + + CloseLog(); + return ifail; +} + +/*分割MSG“000022-A”为两个部分*/ +int split_msg(const char* msg, char* item_id, char* item_revision_id) { + int ifail = ITK_ok; + + char* buffer; + char* token; + + // 计算字符串长度并分配足够的内存 + size_t len = strlen(msg); + //buffer = malloc(len + 1); // +1 是为了容纳字符串终止符 '\0' + buffer = (char*)MEM_alloc(1028 * sizeof(char)); + if (buffer == NULL) { + fprintf(stderr, "Memory allocation failed\n"); + return 1; + } + + // 复制字符串到缓冲区 + strcpy(buffer, msg); + + // 使用 strtok 分割字符串 + token = strtok(buffer, "-"); + if (token != NULL) { + strcpy(item_id, token); + printf("拆分得到item_id: %s\n", token); // 输出 "000022" + } + token = strtok(NULL, "-"); + if (token != NULL) { + strcpy(item_revision_id, token); + printf("拆分msg得到item_revision_id: %s\n", token); // 输出 "A" + } + + // 释放分配的内存 + MEM_free(buffer); + + + return ifail; +} - //detail表 - char sql4[1024] = "\0"; - sprintf(sql4, "update DFL_DRAWING_TO_SRM_DETIALS set urlstatus = '%s' where itemid = '%s' and revision = '%s'", "已同步", itemId, revision); - WriteLog("提示:sql4==%s\n", sql4); - if (ExecuteSQLNoInputParam(sql4) == -1) +/* +* (exe)服务:手动下发 +*/ +int SD_TO_CAPP(const char* msg,char* username) +{ + printf("》》》开始执行手动下发SD_TO_CAPP方法,接受到入参MSG==%s,username==%s\n",msg,username); + char* log_file = NULL; + int ifail = ITK_ok; + char* item_id = (char*)MEM_alloc(1028 * sizeof(char)); + char* item_revision_id = (char*)MEM_alloc(1028 * sizeof(char)); + ITKCALL(ifail = split_msg(msg, item_id, item_revision_id)); + //1.通过MSG(“000022-A”)调用查询构建器获取具体的零组件版本对象 + tag_t query = NULL; + int n_found; + ITKCALL(ifail = QRY_find2("CAPP_Serch", &query)); + //ITKCALL(ifail = QRY_find2("零组件 ID", &query)); + tag_t* tags; + tag_t windowTag; + tag_t itemTag; + tag_t topLineTag; + date_t publishDate; + boolean saveFlag = true; + char* qry_entries[2] = { "ItemI" ,"Revisio" }, + * qry_values[2] = { item_id ,item_revision_id }, * errorId = ""; + /*char* qry_entries[1] = { "零组件 ID"}, + * qry_values[1] = { item_id }, * errorId = "";*/ + char* classification; + if (query == NULL) + { + printf(">>>>>>>查询不到CAPP构建器对象!"); + } + else + { + char* uid; + POM_tag_to_uid(query,&uid); + printf("uid======%s\n",uid); + printf(">>>>>查询到CAPP构建器对象,开始执行查询"); + printf(">>>查询条目:零组件 ID==%s,版本==%s\n", item_id, item_revision_id); + } + ITKCALL(ifail = QRY_execute(query, 2, qry_entries, qry_values, &n_found, &tags)); + printf("查询到%d个零组件版本结果\n", n_found); + if (n_found == 0) + { + printf("未找到对应的零组件版本对象,请检查MSG信息是否正确!"); + return ifail; + } + else + { + for (int i = 0; i < n_found; i++) { + char* itemIdC; + char* item_revision_idC; + AOM_ask_value_string(tags[i], "item_id", &itemIdC); + AOM_ask_value_string(tags[i], "item_revision_id", &item_revision_idC); + printf("查询到的零组件版本对象==> %s - %s\n", itemIdC, item_revision_idC); + + MEM_free(item_revision_idC); + MEM_free(itemIdC); + } + + //-----------------------判断获取到的零组件版本对象tags[0](理论上只能查询出一个结果),是物料or图纸---------------- + //2.根据版本对象获取版本类型 + char* objType; + char* objName; + AOM_ask_value_string(tags[0], "object_type", &objType); + AOM_ask_value_string(tags[0], "object_name", &objName); + //根据版本对象,获取版本对象对应的item对象 + ITKCALL(ITEM_ask_item_of_rev(tags[0], &itemTag)); + + //3.获取到版本类型:图纸版本/物料版本,分别复用上面自动下发的代码 + if (stricmp(objType, "H8_wuliaoRevision") == 0)//如果此流程下的当前对象为:物料版本 + { + printf("当前流程下对象版本为物料版本\n"); + // 进入BOM递归前存一次物料,在递归过程中只存子项物料即可 + if (tags[0] != NULL) + { + savePart(tags[0], username); + } + else + { + printf("当前流程下对象版本为空,无法保存物料信息到数据库"); + } + + //1.获取当前流程对象的bom行 + //创建Window + BOM_create_window(&windowTag); + //设置顶层BOMline + BOM_set_window_top_line(windowTag, itemTag, tags[0], NULLTAG, &topLineTag); + + throughAllBom(topLineTag, username); + printf("》》》BOM递归结束"); + //关闭BOMwindow + BOM_close_window(windowTag); + } + else if (stricmp(objType, "H8_frockItemRevision") == 0 || stricmp(objType, "H8_drawingRevision") == 0 || stricmp(objType, "H8_frockItemRevision") == 0 || stricmp(objType, "H8_standardPartsRevision") == 0 || stricmp(objType, "H8_ComponentRevision") == 0) + {//如果此流程下的当前对象为:图纸版本 + printf("当前流程下对象版本为图纸版本 \n"); + //校验发布状态,未发布则不执行并提示:当前版本未发布 + AOM_ask_value_date(tags[0], "date_released", &publishDate); + if (publishDate.year == NULL) + { + printf("当前版本未发布,不执行 \n"); + return ifail; + } + else { + printf(">>>当前版本已发布,发布时间为: \n"); + printf("Date: %04hd-%02hhd-%02hhd\n", publishDate.year, publishDate.month, publishDate.day); + printf("Time: %02hhd:%02hhd:%02hhd\n", publishDate.hour, publishDate.minute, publishDate.second); + } + //判断 密级程度 + AOM_ask_value_string(tags[0], "ip_classification", &classification); + if (stricmp(classification, "内部") == 0) + { + printf(">>>当前图纸为非密图纸,允许下发:%s \n", classification); + // 进入BOM递归前第一次存图纸,递归中再存一次给:将图纸版本对象属性以及表单属性记录到图纸数据表中 + ITKCALL(ifail = saveDrawing(tags[0], username)); + } + else + { + printf(">>>当前图纸:%s为加密图纸,不允许下发:%s \n", objName, classification); + } + //1.获取当前流程对象的bom行 + //创建Window + BOM_create_window(&windowTag); + //设置顶层BOMline + BOM_set_window_top_line(windowTag, itemTag, tags[0], NULLTAG, &topLineTag); + + throughAllBom(topLineTag, username); + + //关闭BOMwindow + BOM_close_window(windowTag); + MEM_free(classification); + + } + else { + printf("不满足要求:当前MSG包含的 %s 对象类型为:%s\n", objName, objType); + } + MEM_free(objName); + MEM_free(objType); + + } + + MEM_free(tags); + return ifail; + +} + +int get_last_release_rev(tag_t itemTag, tag_t* revTag) { + int ifail = ITK_ok; + //获取版本 + //tag_t revTag = NULLTAG; + int revisionNums = 0; + tag_t* revisionTags = NULLTAG; + //ITKCALL(ifail = AOM_ask_value_tags(itemTag, "revision_list", &revisionNums, &revisionTags)); + ITKCALL(ITEM_list_all_revs(itemTag, &revisionNums, &revisionTags)); + for (int k = revisionNums - 1; k >= 0; k--) { + int releaseNums = 0; + tag_t* releaseTags = NULLTAG; + ITKCALL(ifail = AOM_ask_value_tags(revisionTags[k], "release_status_list", &releaseNums, &releaseTags)); + if (releaseNums > 0) { + *revTag = revisionTags[k]; + } + MEM_free(releaseTags); + } + + MEM_free(revisionTags); + return ifail; +} + + +/* +* 变更通知单自动下发 +* @param msg 变更通知单的item_id +* @param usernamev 下发用户名 +* TODO 尚未释放内存 +*/ +int DFL_CHANGE_TO_CAPP(char** c_sql_values, char* msg, char* usernamev) { + printf("》》》开始执行变更单下发DFL_CHANGE_TO_CAPP方法,接受到入参MSG==%s,username==%s\n", msg, usernamev); + int ifail = ITK_ok; + tag_t item = NULLTAG; + tag_t revTag = NULLTAG; + char* changeno;//更改通知单号1 + tag_t user;//申请人 + char* username = NULL;//申请人名称 + char* solution;//解决方案项 + char* version;//解决方案项版本 + char* name;//更改单名称/概要 + char* address = (char*)MEM_alloc(1028 * sizeof(char));//变更单通知单物理文件地址 + char* issuedtime = (char*)MEM_alloc(1028 * sizeof(char));//下发时间1 + char* updatetime = (char*)MEM_alloc(1028 * sizeof(char));//更新时间1 + int pdcount = 0; + int count = 0; + tag_t* pdtags = NULLTAG;//“解决方案”项下的图纸and物料版本对象 + tag_t* dataset_tags = NULLTAG; + char* origin_file_name = NULL, + * ref_file_name = NULL, + * ref_type = NULL, + * dataset_name = NULL; + int n_found; + tag_t* ref_object = NULL; + // 为年、月、日分配存储空间 + char year[5]; // "yyyy" + null 终止符 + char month[3]; // "MM" + null 终止符 + char day[3]; // "dd" + null 终止符 + char* ftp_ip = (char*)MEM_alloc(64 * sizeof(char)); + char* ftp_user = (char*)MEM_alloc(64 * sizeof(char)); + char* ftp_password = (char*)MEM_alloc(64 * sizeof(char)); + + // 1.获取变更通知单对象(变更单item_id获取对象) + ITKCALL(ifail = ITEM_find_item(msg, &item)); + if (item == NULLTAG) { + printf(">>>提示:获取变更通知单对象失败!\n"); + return ifail; + } + + ITKCALL(ifail = AOM_ask_value_string(item, "item_id", &changeno)); + ITKCALL(ifail = AOM_ask_value_tag(item, "owning_user", &user)); + ITKCALL(ifail = AOM_ask_value_string(user, "user_name", &username)); + ITKCALL(ifail = AOM_ask_value_string(item, "object_name", &name)); + get_current_time(issuedtime); + get_current_time(updatetime); + //1.获取变更单下的最新发布版本-revTag + ITKCALL(ifail = get_last_release_rev(item, &revTag)); + if (revTag == NULLTAG) + { + printf(">>>获取变更单下的最新发布版本失败!\n 不存在已发布的变更单版本!\n"); + return ifail; + } + //获取变更通知单物理文件 + //提取年月日组件 + extract_date_components(issuedtime, year, month, day); + + //处理“解决方案”文件夹下的图纸or物料,并获取BOM + + //获取“解决方案”项下的图纸and物料版本对象,并遍历处理(遍历处理到“叶子结点”时存入数据库) + ITKCALL(ifail = AOM_ask_value_tags(revTag, "CMHasSolutionItem", &pdcount, &pdtags)); + if (pdcount > 0) + {//“解决方案”项下有版本对象 + for (int i = 0; i < pdcount; i++) + { + printf("================“解决方案”项下有版本对象 \n"); + tag_t revisionTag = NULLTAG; + char* objType; + char* objName; + tag_t windowTag; + tag_t itemTag; + tag_t topLineTag; + date_t publishDate; + char* classification = NULL; + + + //判断物料or图纸pdtags[i]; + revisionTag = pdtags[i]; + ITKCALL(ifail = AOM_ask_value_string(revisionTag, "object_type", &objType)); + ITKCALL(ifail = AOM_ask_value_string(revisionTag, "object_name", &objName)); + ITKCALL(ifail = AOM_ask_value_string(revisionTag, "item_id", &solution)); + ITKCALL(ifail = AOM_ask_value_string(revisionTag, "item_revision_id", &version)); + ITKCALL(ifail = ITEM_ask_item_of_rev(revisionTag, &itemTag)); + printf("=========================>>>>>>>>解决方案下的当前版本对象为::%s\n", objType); + if (stricmp(objType, "H8_wuliaoRevision") == 0) + {//如果当前对象为:物料版本 + printf("当前对象版本:%s为物料版本 \n", objName); + if (revisionTag != NULLTAG) + { + savePart(revisionTag, usernamev); + } + BOM_create_window(&windowTag); + BOM_set_window_top_line(windowTag, itemTag, revisionTag, NULLTAG, &topLineTag); + throughAllBom(topLineTag, usernamev); + BOM_close_window(windowTag); + + } + else if (stricmp(objType, "H8_frockItemRevision") == 0 || stricmp(objType, "H8_drawingRevision") == 0 || stricmp(objType, "H8_frockItemRevision") == 0 || stricmp(objType, "H8_standardPartsRevision") == 0 || stricmp(objType, "H8_ComponentRevision") == 0) + { + printf("当前对象版本:%s为图纸版本 \n", objName); + //校验发布状态,未发布则不执行并提示:当前版本未发布 + AOM_ask_value_date(revisionTag, "date_released", &publishDate); + if (publishDate.year == NULL) + { + printf("当前版本未发布,不执行 \n"); + return ifail; + } + else { + printf(">>>当前版本已发布,发布时间为: \n"); + printf("Date: %04hd-%02hhd-%02hhd\n", publishDate.year, publishDate.month, publishDate.day); + printf("Time: %02hhd:%02hhd:%02hhd\n", publishDate.hour, publishDate.minute, publishDate.second); + } + //判断图纸密级程度 + ITKCALL(ifail = AOM_ask_value_string(revisionTag, "ip_classification", &classification)); + if (stricmp(classification, "内部") == 0) { + printf(">>>当前图纸为非密图纸,允许下发:%s \n", classification); + ITKCALL(ifail = saveDrawing(revisionTag, usernamev)); + } + else + { + printf(">>>当前图纸为加密图纸,不允许下发:%s \n", classification); + } + //处理图纸对象的BOM + BOM_create_window(&windowTag); + BOM_set_window_top_line(windowTag, itemTag, revisionTag, NULLTAG, &topLineTag); + throughAllBom(topLineTag, usernamev); + BOM_close_window(windowTag); + + MEM_free(classification); + } + else + { + WriteLog(">>>当前对象版本:%s类型为:%s,不满足条件,请核查!\n", objName, objType); + continue; + } + //============================ 3.保存(新增or更新)变更通知单信息到数据库表中 + int outputValueCount, + outputColumn; + char*** result_values; + char sql_cx[1024] = "\0"; + sprintf(sql_cx, "select ADDRESS from WHBH_CAPP_CHANGE where solution='%s' and version='%s' ", solution, version); + printf("提示:cxsql==%s\n", sql_cx); + if (QuerySQLNoInputParam(sql_cx, &outputColumn, &outputValueCount, &result_values) == -1) { + printf("提示:cxsql查询变更通知单信息失败\n"); + return 1; + } + //--------------获取首选项中的FTP信息并与FTP建立连接---------------------------------------------------------------------------------------------------- + //获取首选项中配置的连接FTP的IP地址、用户名、密码 + int ftp_value_count = 0; + char** ftp_option_values; + //struct tm* lt2; + ITKCALL(PREF_ask_char_values("BH_CAPP_FTP", &ftp_value_count, &ftp_option_values)); + if (ftp_value_count != 3) + { + printf("首选项配置项错误:配置数量==%d,请核查!\n", ftp_value_count); + return ifail; + } + printf("===>开始连接FTP服务器···"); + //连接FTP服务器 + HINTERNET hInternet = NULL, hFtpSession = NULL; + hInternet = InternetOpenA(NULL, INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0); + hFtpSession = InternetConnectA(hInternet, ftp_option_values[0], INTERNET_DEFAULT_FTP_PORT, ftp_option_values[1], ftp_option_values[2], INTERNET_SERVICE_FTP, INTERNET_FLAG_PASSIVE, 0); + if (hFtpSession == NULL) { + printf("连接FTP服务器失败\n"); + } + else + { + strcpy(ftp_ip, ftp_option_values[0]); + strcpy(ftp_user, ftp_option_values[1]); + strcpy(ftp_password, ftp_option_values[2]); + printf("连接FTP服务器成功\n"); + } + + if (outputValueCount == 0) {//不存在change原始数据 + printf("提示:不存在变更通知单原始数据,新增变更通知单数据\n"); + string Change_temp_path = "C:\\Change_temp\\"; + string ftpFilePath = "/Change/"; + ftpFilePath.append(year).append("/").append(month).append("/").append(day).append("/").append(changeno); + strcpy(address, ftpFilePath.c_str());//存储地址 + printf(">>>=================变更通知单:%s的物理文件地址address:%s,ftpFilePath:%s\n", changeno, address, ftpFilePath.c_str()); + //准备数据集存放目录:存放数据集要根据是否存在原始数据进行更新或新增 + //clearDir(Change_temp_path); + ITKCALL(ifail = AOM_ask_value_tags(revTag, "IMAN_specification", &count, &dataset_tags)); + if (count > 0) { + printf(">>>变更通知单:%s的“更改引用项”下物理文件的个数:%d\n", changeno, count); + + DeleteLRDirectory(ftpFilePath.c_str()); + //createFTPDir(hFtpSession, &ftpFilePath[0]); + for (int t = 0; t < count; t++) + { + ITKCALL(AOM_ask_value_string(dataset_tags[t], "current_name", &origin_file_name)); + ITKCALL(AE_ask_dataset_named_refs(dataset_tags[i], &n_found, &ref_object)); + printf("提示:数据集名称==%s,引用文件数量==%d\n", origin_file_name, n_found); + if (n_found > 0) { - WriteLog("提示:数据插入 失败, %s \n", sql4); - return 1; - } - else { - ExecuteSQLNoInputParam("commit"); + for (int i = 0; i < n_found;i++) { + ITKCALL(AOM_ask_value_string(ref_object[i], "object_type", &ref_type)); + printf("提示:当前引用文件类型==%s\n", ref_type); + if (strcmp(ref_type, "ImanFile") == 0) { + ITKCALL(AOM_ask_value_string(ref_object[i], "original_file_name", &ref_file_name)); + if (ref_file_name != NULL && ref_file_name[0] != '\0') { + string final_exportName = Change_temp_path; + final_exportName.append(ref_file_name); + //导出当前数据集下存在的引用文件到服务器目录下 + ITKCALL(ifail = IMF_export_file(ref_object[i], final_exportName.c_str())); + + printf("=======OVER成功导出文件到本地缓存目录:%s======================== \n \n \n", final_exportName.c_str()); + //参数2:原始文件路径,参数3:FTP服务器文件路径。两者都精确到具体的文件路径,形如:/Design/2022/01/25/000022-A/111.dwg + string final_ftpFilePath = ftpFilePath; + final_ftpFilePath.append("/").append(ref_file_name); + + string ip = ftp_ip; + string user = ftp_user; + string password = ftp_password; + /*bool success = UploadFileToFtp(final_exportName, + ftpFilePath.append("/"), + ip, + user, + password);*/ + bool success = uploadFileToMinIO(final_exportName, final_ftpFilePath); + if (success) { + printf("提示:FTP上传成功==%s\n", ftpFilePath.c_str()); + } + else { + printf("提示:FTP上传失败==%s\n", ftpFilePath.c_str()); + } + + } + } + else { + printf("提示:数据集[%s]下ImanFile类型的引用文件中不存在origin_file_name属性,获取引用文件名失败!不导出文件\n", origin_file_name); + } + } } + } - else { - char sql5[1024] = "\0"; - sprintf(sql5, "update DFL_DRAWING_TO_SRM_DETIALS set urlstatus = '%s' where itemid = '%s' and revision = '%s'", "同步失败", itemId, revision); - WriteLog("提示:sql5==%s\n", sql5); - if (ExecuteSQLNoInputParam(sql5) == -1) + + MEM_free(ftp_password); + MEM_free(ftp_user); + MEM_free(ftp_ip); + } + //clearDir(Change_temp_path); + printf(">>>变更通知单导出完成!!!\n"); + //插入数据 + printf("提示:当前变更单不存在原始数据,开始插入\n"); + char sql_insert_change[1024] = "\0"; + sprintf(sql_insert_change, "insert into WHBH_CAPP_CHANGE(changeno,username,solution,version,name,address,issuedtime,updatetime) values('%s','%s','%s','%s','%s','%s','%s','%s')", changeno, username, solution, version, name, address, issuedtime, updatetime); + printf("提示:sql_insert_change==%s\n", sql_insert_change); + if (ExecuteSQLNoInputParam(sql_insert_change) == -1) + { + printf("提示:sql_insert_change数据插入 失败, %s \n", sql_insert_change); + return 1; + } + else { + ExecuteSQLNoInputParam("commit"); + } + } + else { + printf("提示:存在变更通知单原始数据,更新变更通知单原始数据\n"); + //准备数据集存放目录:存放数据集要根据是否存在原始数据进行更新或新增 + string ftp_file_path = result_values[0][0]; + string Change_temp_path = "C:\\Change_temp\\"; + printf("============>更新变更单物理文件的存放路径为:%s \n", result_values[0][0]); + clearDir(Change_temp_path); + ITKCALL(ifail = AOM_ask_value_tags(revTag, "IMAN_specification", &count, &dataset_tags)); + if (count > 0) { + printf(">>>变更通知单:%s的“更改引用项”下物理文件的个数:%d\n", changeno, count); + // 清空ftp上的ftpExportName目录下的所有文件,为下面循环遍历取得数据集存放做准备 + DeleteLRDirectory(ftp_file_path.c_str()); + //在FTP上提前创建存放数据集文件的文件夹,ftpFilePath路径形如:/Design/2022/01/25/000022-A/ + ftp_file_path.append("/"); + //ITKCALL(ifail = createFTPDir(hFtpSession, &ftp_file_path[0])); + for (int t = 0; t < count; t++) + { + ITKCALL(AOM_ask_value_string(dataset_tags[t], "current_name", &dataset_name)); + ITKCALL(AE_ask_dataset_named_refs(dataset_tags[i], &n_found, &ref_object)); + printf("提示:数据集名称==%s,引用文件数量==%d\n", dataset_name, n_found); + if (n_found > 0) { - WriteLog("提示:数据插入 失败, %s \n", sql5); - return 1; - } - else { - ExecuteSQLNoInputParam("commit"); + for (int i = 0; i < n_found;i++) { + ITKCALL(AOM_ask_value_string(ref_object[i], "object_type", &ref_type)); + //ITKCALL(AOM_ask_value_string(ref_object[i], "file_size", &file_size)); + + printf("提示:当前引用文件类型==%s\n", ref_type); + if (strcmp(ref_type, "ImanFile") == 0) { + ITKCALL(AOM_ask_value_string(ref_object[i], "original_file_name", &ref_file_name)); + + if (ref_file_name != NULL && ref_file_name[0] != '\0') { + string final_change_temp_path = Change_temp_path; + final_change_temp_path.append(ref_file_name); + //导出当前数据集下存在的引用文件到服务器目录下 + ITKCALL(ifail = IMF_export_file(ref_object[i], final_change_temp_path.c_str())); + printf("=======OVER成功导出文件到本地缓存目录:%s======================== \n \n \n", final_change_temp_path.c_str()); + string ftpFilePath = ftp_file_path; + ftpFilePath.append(ref_file_name); + + string ip = ftp_ip; + string user = ftp_user; + string password = ftp_password; + /*bool success = UploadFileToFtp(final_change_temp_path, + ftp_file_path, + ip, + user, + password);*/ + bool success = uploadFileToMinIO(final_change_temp_path, ftpFilePath); + if (success) { + printf("提示:FTP上传成功==%s\n", ftpFilePath.c_str()); + } + else { + printf("提示:FTP上传失败==%s\n", ftpFilePath.c_str()); + } + + } + else + { + printf("提示:数据集:【%s】下的引用文件[%d]不存在“original_file_name”属性,获取引用文件名称失败,无法导出文件\n", origin_file_name,i); + } + + } + + } + } } + + MEM_free(ftp_password); + MEM_free(ftp_user); + MEM_free(ftp_ip); + + + } + //clearDir(Change_temp_path); + printf(">>>变更通知单导出完成!!!\n"); + //更新数据 + printf("提示:当前变更单存在原始数据,开始更新\n"); + char sql_update_change[1024] = "\0"; + sprintf(sql_update_change, "update WHBH_CAPP_CHANGE set changeno = '%s',username = '%s',name = '%s',updatetime = '%s' where solution = '%s' and version = '%s'", changeno, username, name, updatetime, solution, version); + printf("提示:sql_update_change==%s\n", sql_update_change); + if (ExecuteSQLNoInputParam(sql_update_change) == -1) + { + printf("提示:sql_update_change数据插入 失败, %s \n", sql_update_change); + return 1; } - curl_easy_cleanup(curl); + else { + ExecuteSQLNoInputParam("commit"); } - } - + MEM_free(version); + MEM_free(solution); + MEM_free(objName); + MEM_free(objType); + cout << "Closing FTP Session" << endl; + InternetCloseHandle(hFtpSession); + cout << "Closing connection" << endl; + InternetCloseHandle(hInternet); // Close hInternet } - - - POM_AM__set_application_bypass(false); - WriteLog("===================================\n"); - WriteLog("WL to SRM end\n"); - WriteLog("===================================\n"); + } + MEM_free(ref_file_name); + MEM_free(ref_type); + MEM_free(ref_object); + MEM_free(dataset_name); + MEM_free(dataset_tags); + MEM_free(pdtags); + MEM_free(name); + MEM_free(username); + MEM_free(changeno); + CloseLog(); return ifail; } + + int ITK_user_main(int argc, char* argv[]) { char* log_file = NULL; printf("创建日志文件\n"); - char* TO_SRM = (char*)malloc(sizeof("TO_SRM")); - strcpy(TO_SRM, "TO_SRM"); - CreateLogFile(TO_SRM, &log_file); + char log_path[128] = "C:\\Temp\\KUMA_LOG.txt"; + CreateLogFile(log_path, &log_file); int ifail = ITK_ok; int len; int outputValueCount; char* pbuf = NULL; - char* tc_name, *tc_pwd, *tc_group; + char* tc_name, * tc_pwd, * tc_group; int c_sql_value_count = 0; - char** option_values; + char** option_values = NULL; + tc_name = ITK_ask_cli_argument("-u="); tc_pwd = ITK_ask_cli_argument("-p="); tc_group = ITK_ask_cli_argument("-g="); const char* flowuid = NULL; + const char* msg = NULL; const char* user_id = NULL; - char*** flowUID_values=NULL; - WriteLog("name= %s\n", tc_name); - WriteLog("pwd= %s\n", tc_pwd); - WriteLog("group= %s\n", tc_group); - ifail = TC_init_module(tc_name, tc_pwd, tc_group); + char* msgv = NULL; + char*** flowUID_values = NULL; + char*** taskSource_values = NULL; + char*** outputValue = NULL; + int countResultNum; + char* connIP = (char*)MEM_alloc(32 * sizeof(char)); + printf("name= %s\n", tc_name); + printf("pwd= %s\n", tc_pwd); + printf("group= %s\n", tc_group); + ifail = TC_init_module(tc_name, tc_pwd, tc_group);//初始化 Integration Tool Kit (ITK),并同时登录到 POM。 if (ifail != ITK_ok) { - WriteLog("login fail! \n"); + printf("login fail! \n"); return ifail; } - else { WriteLog("login>>>>> \n"); } - //获取首选项的值 - ITKCALL(PREF_ask_char_values("DFL2_SQL_Connect2", &c_sql_value_count, &option_values)); - if (c_sql_value_count != 3) - { - WriteLog("The preferences are incorrectly configured!\n"); - return 0; + else{ + printf("login>>>>> \n"); } - - WriteLog("===================================\n"); - WriteLog("get flowUID begin\n"); - WriteLog("===================================\n"); - int outputColumn = 0; - if (ConnServer(option_values[1], option_values[2], option_values[0]))//"tc11","infodba","//172.16.50.40/tc11" "TC12","infodba","172.16.68.13/tc1" + //获取首选项的值:连接数据库的参数 + ITKCALL(PREF_ask_char_values("BH_CAPP_Oracle", &c_sql_value_count, &option_values)); + if (c_sql_value_count != 4) { - WriteLog("Info: Failed to access the data table\n"); - return NULL; + printf("BH_CAPP_Oracle 首选项配置异常!\n"); + /*ITK_exit_module(true); + return ifail;*/ } else { - WriteLog("Info: The data table is accessed successfully\n"); - char sql_cx[1024] = "\0"; - sprintf(sql_cx, "select flowid from DFL_DRAWING_TO_SRM_TASK where STATUS ='未开始'ORDER BY CODE DESC"); - WriteLog("Tip: Process UID query started\n"); - WriteLog("Info:sql==%s\n", sql_cx); - if (QuerySQLNoInputParam(sql_cx, &outputColumn, &outputValueCount, &flowUID_values) == -1) + //组织连接数据库的ip和服务名 + strcpy(connIP, option_values[0]); + strcat(connIP, "/"); + strcat(connIP, option_values[1]); + WriteLog("连接数据库的IP和端口为:%s\n", connIP); + printf("===================================\n"); + printf("get flowUID begin\n"); + printf("===================================\n"); + int outputColumn = 0; + POM_AM__set_application_bypass(true); + if (ConnServer(option_values[2], option_values[3], connIP))//"tc11","infodba","//172.16.50.40/tc11" "TC12","infodba","172.16.68.13/tc1" { - WriteLog("Info: Failed to query the process UID. %s \n", sql_cx); - return NULL; + printf("Info: Failed to access the data table\n"); + } - if (outputValueCount <= 0) { - WriteLog("Info:Workflow data was not queried!\n"); - DisConnServer(); - return NULL; + else { + //连接数据库成功时 + printf("Info: The data table is accessed successfully\n"); + + //查询本次下发的(未完成Task的)来源 + char sql_getSource[1024] = "\0"; + sprintf(sql_getSource, "select TASKSOURCE,FLOWID,MSG from WHBH_CAPP_TASK where status = '未开始' ORDER BY code DESC"); + printf("Info:sql_getSource==%s\n", sql_getSource); + int outputColumnS = 0; + int outputValueCountS = 0; + if (QuerySQLNoInputParam(sql_getSource, &outputColumnS, &outputValueCountS, &taskSource_values) == -1) + { + printf("Info: 查询TASKSOURCE任务来源失败. %s \n", sql_getSource); + + } + else + { + if (outputValueCountS <= 0) { + printf("Info:未查到任何待处理的任务!\n"); + + } + else + { + printf("Info: 查询任务来源成功!\n"); + for (int t = 0; t < outputValueCountS; t++) + { + printf("taskSource_values[%d][0]=%s\n", t, taskSource_values[t][0]); + if (stricmp(taskSource_values[t][0], "工作流程") == 0) + { + WriteLog("Info:查询结果依次为任务来源 = %s,流程ID = %s,MSG = %s \n", taskSource_values[t][0], taskSource_values[t][1], taskSource_values[t][2]); + if (strlen(taskSource_values[t][2]) != 0) { + //自动下发=》存在msg=》说明是:变更通知单自动下发(因为只有变更通知单的任务来源为“工作流程”但存在msg) + WriteLog("Info:当前异步任务存在流程ID==%s和MSG==%s,任务来源:变更通知单自动下发!\n", taskSource_values[t][1], taskSource_values[t][2]); + msgv = taskSource_values[t][2]; + if (msgv == NULL || strlen(taskSource_values[t][2]) == 0) + { + printf("》》》ERROR变更通知单数据异常:Task表中的msg为空,无法下发!请核查%s流程数据\n", taskSource_values[t][1]); + + } + else + { + //查询下发发起人作为参数和msg中携带的变更通知单id一起传递给下发函数 + char sql_getUser[1024] = "\0"; + sprintf(sql_getUser, "select username from WHBH_CAPP_TASK where msg = '%s'", msgv); + printf("Info:sql_getUser==%s\n", sql_getUser); + int outputValueCountU = 0; + int outputColumnU = 0; + char*** username_values = NULL; + if (QuerySQLNoInputParam(sql_getUser, &outputColumnU, &outputValueCountU, &username_values) == -1) { + printf("Info: 查询用户名失败. %s \n", sql_getUser); + + }else { + if (outputValueCountU <= 0) { + printf("Info:当前变更通知单Task:%s不存在username!\n", msgv); + + } + else + { + char* username = username_values[0][0]; + printf("Info:当前变更通知单:%s的username是:%s!\n开始执行下发逻辑···", msgv, username); + ITKCALL(ifail = DFL_CHANGE_TO_CAPP(option_values, msgv, username)); + //下发完成,更新状态为已完成 + //---------------------------------------------------------根据msg更新状态和完成时间---------------------------- + char* currentTime = (char*)MEM_alloc(1028 * sizeof(char)); + get_current_time(currentTime); + char sql_changeStatus[1024] = "\0"; + sprintf(sql_changeStatus, "update WHBH_CAPP_TASK set STATUS='%s',ENDINGTIME='%s' where MSG='%s'", "已完成", currentTime, msgv); + printf("提示:sql_changeStatus==%s \n", sql_changeStatus); + if (ExecuteSQLNoInputParam(sql_changeStatus) == -1) { + printf("》》》异常提示:更新流程状态失败!sql_changeStatus == %s\n", sql_changeStatus); + + } + else { + printf("》》》提示:更新流程状态成功!sql_changeStatus == %s\n", sql_changeStatus); + ExecuteSQLNoInputParam("commit"); + } + } + + } + } + + } + else + {//自动下发,但不存在msg,说明是:图纸or物料自动下发 + flowuid = taskSource_values[t][1]; + char* currentTime = (char*)MEM_alloc(1028 * sizeof(char)); + + printf("开始处理未完成状态的流程-flowUID is:%s\n", flowuid); + char sql_getUser[1024] = "\0"; + sprintf(sql_getUser, "select username from WHBH_CAPP_TASK where flowid = '%s'", flowuid); + printf("Info:sql_getUser==%s\n", sql_getUser); + int outputValueCountU = 0; + int outputColumnU = 0; + char*** username_values = NULL; + if (QuerySQLNoInputParam(sql_getUser, &outputColumnU, &outputValueCountU, &username_values) == -1) { + printf("Info: 查询用户名失败. %s \n", sql_getUser); + + } + else { + if (outputValueCountU <= 0) { + printf("Info:当前流程:%s不存在username!\n", flowuid); + + } + else + { + char* username = username_values[0][0]; + printf("Info:当前流程:%s的username是:%s\n", flowuid, username); + ITKCALL(ifail = DFL_WL_TO_CAPP(option_values, flowuid, username)); + //下发完成,更新状态为已完成 + printf("》》》处理未完成状态的流程-flowUID is:%s 结束\n", flowuid); + ITKCALL(ifail = setAttrForTask(flowuid, "STATUS", "已完成")); + get_current_time(currentTime); + ITKCALL(ifail = setAttrForTask(flowuid, "ENDINGTIME", currentTime)); + } + } + } + } + else if (stricmp(taskSource_values[t][0], "手动下发") == 0) + { + printf("》》》任务类型:手动下发"); + //1.查询数据,获取手动下发的未完成任务中的MSG + msg = taskSource_values[t][2]; + printf("》》》手动下发的未完成任务中的MSG是:%s\n", msg); + + char sql_getUser[1024] = "\0"; + sprintf(sql_getUser, "select username from WHBH_CAPP_TASK where msg = '%s'", msg); + printf("Info:sql_getUser==%s\n", sql_getUser); + int outputValueCountU = 0; + int outputColumnU = 0; + char*** username_values = NULL; + if (QuerySQLNoInputParam(sql_getUser, &outputColumnU, &outputValueCountU, &username_values) == -1) { + printf("Info: 查询用户名失败. %s \n", sql_getUser); + + }else { + if (outputValueCountU <= 0) { + printf("Info:当前流程:%s不存在username!\n", flowuid); + + } + else + { + char* username = username_values[0][0]; + ITKCALL(ifail = SD_TO_CAPP(msg, username)); + //---------------------------------------------------------根据msg更新状态和完成时间---------------------------- + char* currentTime = (char*)MEM_alloc(1028 * sizeof(char)); + get_current_time(currentTime); + char sql_changeStatus[1024] = "\0"; + sprintf(sql_changeStatus, "update WHBH_CAPP_TASK set STATUS='%s',ENDINGTIME='%s' where MSG='%s'", "已完成", currentTime, msg); + printf("提示:sql_changeStatus==%s \n", sql_changeStatus); + if (ExecuteSQLNoInputParam(sql_changeStatus) == -1) { + printf("》》》异常提示:更新流程状态失败!sql_changeStatus == %s\n", sql_changeStatus); + + } + else { + printf("》》》提示:更新流程状态成功!sql_changeStatus == %s\n", sql_changeStatus); + ExecuteSQLNoInputParam("commit"); + } + MEM_free(currentTime); + } + } + } + else { + printf("当前任务来源异常:%s,无法执行下发操作!\n", taskSource_values[t][0]); + + } + } + MEM_free(option_values); + } + } } - WriteLog("Info: The process UID query is complete!\n"); - WriteLog("outputValueCount=%d\n", outputValueCount); - WriteLog("outputColumn=%d\n", outputColumn); - - WriteLog("===================================\n"); - WriteLog("get flowUID end\n"); - WriteLog("===================================\n"); - + DisConnServer(); + POM_AM__set_application_bypass(false); } - - for (int k = 0; k < outputValueCount; k++) { - flowuid = flowUID_values[k][0]; - WriteLog("flowUID is:%s\n", flowuid); - ifail = DFL_WL_TO_SRM(option_values, flowuid); - } - - DisConnServer(); - CloseLog(); + ITK_exit_module(true); return ifail; } @@ -860,3 +2482,4 @@ int ITK_user_main(int argc, char* argv[]) + diff --git a/DFL_WL_BOM_TOERP/common_itk_util.h b/DFL_WL_BOM_TOERP/common_itk_util.h index f27d079..640e412 100644 --- a/DFL_WL_BOM_TOERP/common_itk_util.h +++ b/DFL_WL_BOM_TOERP/common_itk_util.h @@ -27,7 +27,6 @@ void ECHO(char *format, ...); void CreateLogFile(char* FunctionName, char **fullname); void WriteLog(const char* format, ...); void CloseLog(void); -void set_bypass(logical bypass); //int FindDatasetReferenceExt( tag_t datasettype, const char *datasettype_ref, char ext[10] ); //int CompareDate( date_t date1, date_t date2 ); //int GetRandomTempFile( char tempFile[256] ); diff --git a/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOERP.log b/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOERP.log index 84a7ea4..b515a9f 100644 --- a/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOERP.log +++ b/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOERP.log @@ -1,47 +1,52 @@ -C:\VS2019\MSBuild\Microsoft\VC\v160\Microsoft.CppBuild.targets(513,5): warning MSB8028: 中间目录(x64\Release\)包含从另一个项目(DFL_WL_BOM_TOERP.vcxproj)共享的文件。 这会导致错误的清除和重新生成行为。 - cJSON.c -D:\source\东富龙\DFL_WL_BOM_TOSRM\DFL_WL_BOM_TOERP\cJSON.c(145,32): warning C4267: “return”: 从“size_t”转换到“int”,可能丢失数据 -D:\source\东富龙\DFL_WL_BOM_TOSRM\DFL_WL_BOM_TOERP\cJSON.c(261,18): warning C4244: “=”: 从“__int64”转换到“int”,可能丢失数据 -D:\source\东富龙\DFL_WL_BOM_TOSRM\DFL_WL_BOM_TOERP\cJSON.c(483,51): warning C4267: “+=”: 从“size_t”转换到“int”,可能丢失数据 -D:\source\东富龙\DFL_WL_BOM_TOSRM\DFL_WL_BOM_TOERP\cJSON.c(626,80): warning C4267: “+=”: 从“size_t”转换到“int”,可能丢失数据 - common_itk_util.c -D:\source\东富龙\DFL_WL_BOM_TOSRM\DFL_WL_BOM_TOERP\common_itk_util.c(90,28): warning C4013: “AM__set_application_bypass”未定义;假设外部返回 int +D:\Microsoft Visual Studio\2019\Community\MSBuild\Microsoft\VC\v160\Microsoft.CppBuild.targets(513,5): warning MSB8028: 中间目录(x64\Release\)包含从另一个项目(DFL_WL_BOM_TOERP.vcxproj)共享的文件。 这会导致错误的清除和重新生成行为。 + ado.cxx + curlToFtp.cpp +E:\ITK_WorkSpace\ITK\滨湖\BH_exe\DFL_WL_BOM_TOSRM\DFL_WL_BOM_TOERP\curlToFtp.cpp(32,16): warning C4477: “printf”: 格式字符串“%f”需要类型“double”的参数,但可变参数 1 拥有了类型“curl_off_t” +E:\ITK_WorkSpace\ITK\滨湖\BH_exe\DFL_WL_BOM_TOSRM\DFL_WL_BOM_TOERP\curlToFtp.cpp(36,12): warning C4477: “printf”: 格式字符串“%ld”需要类型“long”的参数,但可变参数 1 拥有了类型“curl_off_t” +E:\ITK_WorkSpace\ITK\滨湖\BH_exe\DFL_WL_BOM_TOSRM\DFL_WL_BOM_TOERP\curlToFtp.cpp(36,12): message : 请考虑在格式字符串中使用“%lld” +E:\ITK_WorkSpace\ITK\滨湖\BH_exe\DFL_WL_BOM_TOSRM\DFL_WL_BOM_TOERP\curlToFtp.cpp(36,12): message : 请考虑在格式字符串中使用“%Id” +E:\ITK_WorkSpace\ITK\滨湖\BH_exe\DFL_WL_BOM_TOSRM\DFL_WL_BOM_TOERP\curlToFtp.cpp(36,12): message : 请考虑在格式字符串中使用“%I64d” +E:\ITK_WorkSpace\ITK\滨湖\BH_exe\DFL_WL_BOM_TOSRM\DFL_WL_BOM_TOERP\curlToFtp.cpp(36,12): warning C4477: “printf”: 格式字符串“%ld”需要类型“long”的参数,但可变参数 2 拥有了类型“curl_off_t” +E:\ITK_WorkSpace\ITK\滨湖\BH_exe\DFL_WL_BOM_TOSRM\DFL_WL_BOM_TOERP\curlToFtp.cpp(36,12): message : 请考虑在格式字符串中使用“%lld” +E:\ITK_WorkSpace\ITK\滨湖\BH_exe\DFL_WL_BOM_TOSRM\DFL_WL_BOM_TOERP\curlToFtp.cpp(36,12): message : 请考虑在格式字符串中使用“%Id” +E:\ITK_WorkSpace\ITK\滨湖\BH_exe\DFL_WL_BOM_TOSRM\DFL_WL_BOM_TOERP\curlToFtp.cpp(36,12): message : 请考虑在格式字符串中使用“%I64d” +E:\ITK_WorkSpace\ITK\滨湖\BH_exe\DFL_WL_BOM_TOSRM\DFL_WL_BOM_TOERP\curlToFtp.cpp(36,12): warning C4477: “printf”: 格式字符串“%ld”需要类型“long”的参数,但可变参数 3 拥有了类型“curl_off_t” +E:\ITK_WorkSpace\ITK\滨湖\BH_exe\DFL_WL_BOM_TOSRM\DFL_WL_BOM_TOERP\curlToFtp.cpp(36,12): message : 请考虑在格式字符串中使用“%lld” +E:\ITK_WorkSpace\ITK\滨湖\BH_exe\DFL_WL_BOM_TOSRM\DFL_WL_BOM_TOERP\curlToFtp.cpp(36,12): message : 请考虑在格式字符串中使用“%Id” +E:\ITK_WorkSpace\ITK\滨湖\BH_exe\DFL_WL_BOM_TOSRM\DFL_WL_BOM_TOERP\curlToFtp.cpp(36,12): message : 请考虑在格式字符串中使用“%I64d” +E:\ITK_WorkSpace\ITK\滨湖\BH_exe\DFL_WL_BOM_TOSRM\DFL_WL_BOM_TOERP\curlToFtp.cpp(36,12): warning C4477: “printf”: 格式字符串“%ld”需要类型“long”的参数,但可变参数 4 拥有了类型“curl_off_t” +E:\ITK_WorkSpace\ITK\滨湖\BH_exe\DFL_WL_BOM_TOSRM\DFL_WL_BOM_TOERP\curlToFtp.cpp(36,12): message : 请考虑在格式字符串中使用“%lld” +E:\ITK_WorkSpace\ITK\滨湖\BH_exe\DFL_WL_BOM_TOSRM\DFL_WL_BOM_TOERP\curlToFtp.cpp(36,12): message : 请考虑在格式字符串中使用“%Id” +E:\ITK_WorkSpace\ITK\滨湖\BH_exe\DFL_WL_BOM_TOSRM\DFL_WL_BOM_TOERP\curlToFtp.cpp(36,12): message : 请考虑在格式字符串中使用“%I64d” DFL_WL_BOM_TOSRM.cpp -D:\Clibs\12\include\pom\pom\pom.h(806,1): warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失 -D:\Clibs\12\include\pom\pom\pom.h(5417,1): warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失 -D:\Clibs\12\include_cpp\base_utils\IFail.hxx(114,17): warning C4251: “IFail::m_message”: class“std::basic_string,std::allocator>”需要有 dll 接口由 class“IFail”的客户端使用 -C:\VS2019\VC\Tools\MSVC\14.29.30133\include\xstring(4871): message : 参见“std::basic_string,std::allocator>”的声明 -D:\source\东富龙\DFL_WL_BOM_TOSRM\DFL_WL_BOM_TOERP\DFL_WL_BOM_TOSRM.cpp(338,9): warning C4476: "printf": 格式说明符中的类型字段字符“Y”未知 -D:\source\东富龙\DFL_WL_BOM_TOSRM\DFL_WL_BOM_TOERP\DFL_WL_BOM_TOSRM.cpp(338,9): warning C4476: "printf": 格式说明符中的类型字段字符“m”未知 -D:\source\东富龙\DFL_WL_BOM_TOSRM\DFL_WL_BOM_TOERP\DFL_WL_BOM_TOSRM.cpp(338,9): warning C4473: “printf”: 没有为格式字符串传递足够的参数 -D:\source\东富龙\DFL_WL_BOM_TOSRM\DFL_WL_BOM_TOERP\DFL_WL_BOM_TOSRM.cpp(338,9): message : 占位符和其参数预计 2 可变参数,但提供的却是 0 参数 -D:\source\东富龙\DFL_WL_BOM_TOSRM\DFL_WL_BOM_TOERP\DFL_WL_BOM_TOSRM.cpp(338,9): message : 缺失的可变参数 1 为格式字符串“%d”所需 -D:\source\东富龙\DFL_WL_BOM_TOSRM\DFL_WL_BOM_TOERP\DFL_WL_BOM_TOSRM.cpp(340,9): warning C4476: "printf": 格式说明符中的类型字段字符“Y”未知 -D:\source\东富龙\DFL_WL_BOM_TOSRM\DFL_WL_BOM_TOERP\DFL_WL_BOM_TOSRM.cpp(340,9): warning C4476: "printf": 格式说明符中的类型字段字符“m”未知 -D:\source\东富龙\DFL_WL_BOM_TOSRM\DFL_WL_BOM_TOERP\DFL_WL_BOM_TOSRM.cpp(340,9): warning C4473: “printf”: 没有为格式字符串传递足够的参数 -D:\source\东富龙\DFL_WL_BOM_TOSRM\DFL_WL_BOM_TOERP\DFL_WL_BOM_TOSRM.cpp(340,9): message : 占位符和其参数预计 2 可变参数,但提供的却是 0 参数 -D:\source\东富龙\DFL_WL_BOM_TOSRM\DFL_WL_BOM_TOERP\DFL_WL_BOM_TOSRM.cpp(340,9): message : 缺失的可变参数 1 为格式字符串“%d”所需 -D:\source\东富龙\DFL_WL_BOM_TOSRM\DFL_WL_BOM_TOERP\DFL_WL_BOM_TOSRM.cpp(597,8): warning C4476: "printf": 格式说明符中的类型字段字符“Y”未知 -D:\source\东富龙\DFL_WL_BOM_TOSRM\DFL_WL_BOM_TOERP\DFL_WL_BOM_TOSRM.cpp(597,8): warning C4476: "printf": 格式说明符中的类型字段字符“m”未知 -D:\source\东富龙\DFL_WL_BOM_TOSRM\DFL_WL_BOM_TOERP\DFL_WL_BOM_TOSRM.cpp(597,8): warning C4473: “printf”: 没有为格式字符串传递足够的参数 -D:\source\东富龙\DFL_WL_BOM_TOSRM\DFL_WL_BOM_TOERP\DFL_WL_BOM_TOSRM.cpp(597,8): message : 占位符和其参数预计 2 可变参数,但提供的却是 0 参数 -D:\source\东富龙\DFL_WL_BOM_TOSRM\DFL_WL_BOM_TOERP\DFL_WL_BOM_TOSRM.cpp(597,8): message : 缺失的可变参数 1 为格式字符串“%d”所需 -D:\source\东富龙\DFL_WL_BOM_TOSRM\DFL_WL_BOM_TOERP\DFL_WL_BOM_TOSRM.cpp(599,8): warning C4476: "printf": 格式说明符中的类型字段字符“Y”未知 -D:\source\东富龙\DFL_WL_BOM_TOSRM\DFL_WL_BOM_TOERP\DFL_WL_BOM_TOSRM.cpp(599,8): warning C4476: "printf": 格式说明符中的类型字段字符“m”未知 -D:\source\东富龙\DFL_WL_BOM_TOSRM\DFL_WL_BOM_TOERP\DFL_WL_BOM_TOSRM.cpp(599,8): warning C4473: “printf”: 没有为格式字符串传递足够的参数 -D:\source\东富龙\DFL_WL_BOM_TOSRM\DFL_WL_BOM_TOERP\DFL_WL_BOM_TOSRM.cpp(599,8): message : 占位符和其参数预计 2 可变参数,但提供的却是 0 参数 -D:\source\东富龙\DFL_WL_BOM_TOSRM\DFL_WL_BOM_TOERP\DFL_WL_BOM_TOSRM.cpp(599,8): message : 缺失的可变参数 1 为格式字符串“%d”所需 -D:\source\东富龙\DFL_WL_BOM_TOSRM\DFL_WL_BOM_TOERP\DFL_WL_BOM_TOSRM.cpp(135,8): warning C4101: “executor”: 未引用的局部变量 -D:\source\东富龙\DFL_WL_BOM_TOSRM\DFL_WL_BOM_TOERP\DFL_WL_BOM_TOSRM.cpp(185,9): warning C4101: “group_name1”: 未引用的局部变量 -D:\source\东富龙\DFL_WL_BOM_TOSRM\DFL_WL_BOM_TOERP\DFL_WL_BOM_TOSRM.cpp(137,8): warning C4101: “user_uid”: 未引用的局部变量 -D:\source\东富龙\DFL_WL_BOM_TOSRM\DFL_WL_BOM_TOERP\DFL_WL_BOM_TOSRM.cpp(186,10): warning C4101: “creDate”: 未引用的局部变量 -D:\source\东富龙\DFL_WL_BOM_TOSRM\DFL_WL_BOM_TOERP\DFL_WL_BOM_TOSRM.cpp(782,6): warning C4101: “len”: 未引用的局部变量 +C:\environment\Teamcenter-ENV\ITK_Configuration_File\tc12ITK\tc12ITK\dflittk\include\pom\pom\pom.h(806,1): warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失 +C:\environment\Teamcenter-ENV\ITK_Configuration_File\tc12ITK\tc12ITK\dflittk\include\pom\pom\pom.h(5417,1): warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失 +C:\environment\Teamcenter-ENV\ITK_Configuration_File\tc12ITK\tc12ITK\dflittk\include_cpp\base_utils\IFail.hxx(114,17): warning C4251: “IFail::m_message”: class“std::basic_string,std::allocator>”需要有 dll 接口由 class“IFail”的客户端使用 +D:\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include\xstring(4871): message : 参见“std::basic_string,std::allocator>”的声明 + The contents of are available only with C++17 or later. +E:\ITK_WorkSpace\ITK\滨湖\BH_exe\DFL_WL_BOM_TOSRM\DFL_WL_BOM_TOERP\DFL_WL_BOM_TOSRM.cpp(781,8): warning C4101: “userid”: 未引用的局部变量 +E:\ITK_WorkSpace\ITK\滨湖\BH_exe\DFL_WL_BOM_TOSRM\DFL_WL_BOM_TOERP\DFL_WL_BOM_TOSRM.cpp(970,5): warning C4101: “userid”: 未引用的局部变量 +E:\ITK_WorkSpace\ITK\滨湖\BH_exe\DFL_WL_BOM_TOSRM\DFL_WL_BOM_TOERP\DFL_WL_BOM_TOSRM.cpp(1372,8): warning C4101: “user”: 未引用的局部变量 +E:\ITK_WorkSpace\ITK\滨湖\BH_exe\DFL_WL_BOM_TOSRM\DFL_WL_BOM_TOERP\DFL_WL_BOM_TOSRM.cpp(1530,8): warning C4101: “executor”: 未引用的局部变量 +E:\ITK_WorkSpace\ITK\滨湖\BH_exe\DFL_WL_BOM_TOSRM\DFL_WL_BOM_TOERP\DFL_WL_BOM_TOSRM.cpp(1535,8): warning C4101: “user_uid”: 未引用的局部变量 +E:\ITK_WorkSpace\ITK\滨湖\BH_exe\DFL_WL_BOM_TOSRM\DFL_WL_BOM_TOERP\DFL_WL_BOM_TOSRM.cpp(1570,10): warning C4101: “publishStatus”: 未引用的局部变量 +E:\ITK_WorkSpace\ITK\滨湖\BH_exe\DFL_WL_BOM_TOSRM\DFL_WL_BOM_TOERP\DFL_WL_BOM_TOSRM.cpp(2249,6): warning C4101: “len”: 未引用的局部变量 +E:\ITK_WorkSpace\ITK\滨湖\BH_exe\DFL_WL_BOM_TOSRM\DFL_WL_BOM_TOERP\DFL_WL_BOM_TOSRM.cpp(2250,6): warning C4101: “outputValueCount”: 未引用的局部变量 +E:\ITK_WorkSpace\ITK\滨湖\BH_exe\DFL_WL_BOM_TOSRM\DFL_WL_BOM_TOERP\DFL_WL_BOM_TOSRM.cpp(2266,6): warning C4101: “countResultNum”: 未引用的局部变量 ocilib.cpp -D:\source\东富龙\DFL_WL_BOM_TOSRM\DFL_WL_BOM_TOERP\ocilib.cpp(158,5): warning C4267: “参数”: 从“size_t”转换到“ub4”,可能丢失数据 -D:\source\东富龙\DFL_WL_BOM_TOSRM\DFL_WL_BOM_TOERP\ocilib.cpp(181,5): warning C4267: “参数”: 从“size_t”转换到“ub4”,可能丢失数据 +E:\ITK_WorkSpace\ITK\滨湖\BH_exe\DFL_WL_BOM_TOSRM\DFL_WL_BOM_TOERP\ocilib.cpp(158,5): warning C4267: “参数”: 从“size_t”转换到“ub4”,可能丢失数据 +E:\ITK_WorkSpace\ITK\滨湖\BH_exe\DFL_WL_BOM_TOSRM\DFL_WL_BOM_TOERP\ocilib.cpp(181,5): warning C4267: “参数”: 从“size_t”转换到“ub4”,可能丢失数据 + WininetHttp.cpp + cJSON.c +E:\ITK_WorkSpace\ITK\滨湖\BH_exe\DFL_WL_BOM_TOSRM\DFL_WL_BOM_TOERP\cJSON.c(145,32): warning C4267: “return”: 从“size_t”转换到“int”,可能丢失数据 +E:\ITK_WorkSpace\ITK\滨湖\BH_exe\DFL_WL_BOM_TOSRM\DFL_WL_BOM_TOERP\cJSON.c(261,18): warning C4244: “=”: 从“__int64”转换到“int”,可能丢失数据 +E:\ITK_WorkSpace\ITK\滨湖\BH_exe\DFL_WL_BOM_TOSRM\DFL_WL_BOM_TOERP\cJSON.c(483,51): warning C4267: “+=”: 从“size_t”转换到“int”,可能丢失数据 +E:\ITK_WorkSpace\ITK\滨湖\BH_exe\DFL_WL_BOM_TOSRM\DFL_WL_BOM_TOERP\cJSON.c(626,80): warning C4267: “+=”: 从“size_t”转换到“int”,可能丢失数据 + common_itk_util.c +E:\ITK_WorkSpace\ITK\滨湖\BH_exe\DFL_WL_BOM_TOSRM\DFL_WL_BOM_TOERP\common_itk_util.c(90,28): warning C4013: “AM__set_application_bypass”未定义;假设外部返回 int 正在生成代码 Previous IPDB not found, fall back to full compilation. - All 210 functions were compiled because no usable IPDB/IOBJ from previous compilation was found. + All 239 functions were compiled because no usable IPDB/IOBJ from previous compilation was found. 已完成代码的生成 -itk_main.obj : warning LNK4099: 未找到 PDB“vc150.pdb”(使用“itk_main.obj”或在“D:\source\东富龙\DFL_WL_BOM_TOSRM\x64\Release\vc150.pdb”中寻找);正在链接对象,如同没有调试信息一样 - DFL_WL_BOM_TOERP.vcxproj -> D:\source\东富龙\DFL_WL_BOM_TOSRM\x64\Release\DFL_WL_BOM_TOSRM.exe +itk_main.obj : warning LNK4099: 未找到 PDB“”(使用“itk_main.obj”或在“”中寻找);正在链接对象,如同没有调试信息一样 + DFL_WL_BOM_TOERP.vcxproj -> E:\ITK_WorkSpace\ITK\滨湖\BH_exe\DFL_WL_BOM_TOSRM\x64\Release\BH_BOM_TOCAPP.exe diff --git a/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOSRM.Build.CppClean.log b/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOSRM.Build.CppClean.log index a951f2b..76ee4e7 100644 --- a/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOSRM.Build.CppClean.log +++ b/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOSRM.Build.CppClean.log @@ -1,15 +1,19 @@ -d:\source\东富龙\dfl_wl_bom_tosrm\dfl_wl_bom_toerp\x64\release\vc142.pdb -d:\source\东富龙\dfl_wl_bom_tosrm\dfl_wl_bom_toerp\x64\release\common_itk_util.obj -d:\source\东富龙\dfl_wl_bom_tosrm\dfl_wl_bom_toerp\x64\release\cjson.obj -d:\source\东富龙\dfl_wl_bom_tosrm\dfl_wl_bom_toerp\x64\release\ocilib.obj -d:\source\东富龙\dfl_wl_bom_tosrm\dfl_wl_bom_toerp\x64\release\dfl_wl_bom_tosrm.obj -d:\source\东富龙\dfl_wl_bom_tosrm\x64\release\dfl_wl_bom_tosrm.exe -d:\source\东富龙\dfl_wl_bom_tosrm\dfl_wl_bom_toerp\x64\release\dfl_wl_bom_tosrm.ipdb -d:\source\东富龙\dfl_wl_bom_tosrm\dfl_wl_bom_toerp\x64\release\dfl_wl_bom_tosrm.iobj -d:\source\东富龙\dfl_wl_bom_tosrm\x64\release\dfl_wl_bom_tosrm.pdb -d:\source\东富龙\dfl_wl_bom_tosrm\dfl_wl_bom_toerp\x64\release\dfl_wl_bom_tosrm.tlog\cl.command.1.tlog -d:\source\东富龙\dfl_wl_bom_tosrm\dfl_wl_bom_toerp\x64\release\dfl_wl_bom_tosrm.tlog\cl.read.1.tlog -d:\source\东富龙\dfl_wl_bom_tosrm\dfl_wl_bom_toerp\x64\release\dfl_wl_bom_tosrm.tlog\cl.write.1.tlog -d:\source\东富龙\dfl_wl_bom_tosrm\dfl_wl_bom_toerp\x64\release\dfl_wl_bom_tosrm.tlog\link.command.1.tlog -d:\source\东富龙\dfl_wl_bom_tosrm\dfl_wl_bom_toerp\x64\release\dfl_wl_bom_tosrm.tlog\link.read.1.tlog -d:\source\东富龙\dfl_wl_bom_tosrm\dfl_wl_bom_toerp\x64\release\dfl_wl_bom_tosrm.tlog\link.write.1.tlog +e:\itk_workspace\itk\滨湖\bh_exe\dfl_wl_bom_tosrm\dfl_wl_bom_toerp\x64\release\vc142.pdb +e:\itk_workspace\itk\滨湖\bh_exe\dfl_wl_bom_tosrm\dfl_wl_bom_toerp\x64\release\ocilib.obj +e:\itk_workspace\itk\滨湖\bh_exe\dfl_wl_bom_tosrm\dfl_wl_bom_toerp\x64\release\dfl_wl_bom_tosrm.obj +e:\itk_workspace\itk\滨湖\bh_exe\dfl_wl_bom_tosrm\dfl_wl_bom_toerp\x64\release\curltoftp.obj +e:\itk_workspace\itk\滨湖\bh_exe\dfl_wl_bom_tosrm\dfl_wl_bom_toerp\x64\release\ado.obj +e:\itk_workspace\itk\滨湖\bh_exe\dfl_wl_bom_tosrm\dfl_wl_bom_toerp\x64\release\common_itk_util.obj +e:\itk_workspace\itk\滨湖\bh_exe\dfl_wl_bom_tosrm\dfl_wl_bom_toerp\x64\release\cjson.obj +e:\itk_workspace\itk\滨湖\bh_exe\dfl_wl_bom_tosrm\x64\release\dfl_wl_bom_tosrm.exe +e:\itk_workspace\itk\滨湖\bh_exe\dfl_wl_bom_tosrm\dfl_wl_bom_toerp\x64\release\dfl_wl_bom_tosrm.ipdb +e:\itk_workspace\itk\滨湖\bh_exe\dfl_wl_bom_tosrm\dfl_wl_bom_toerp\x64\release\dfl_wl_bom_tosrm.iobj +e:\itk_workspace\itk\滨湖\bh_exe\dfl_wl_bom_tosrm\x64\release\dfl_wl_bom_tosrm.pdb +e:\itk_workspace\itk\滨湖\bh_exe\dfl_wl_bom_tosrm\dfl_wl_bom_toerp\x64\release\msado15.tli +e:\itk_workspace\itk\滨湖\bh_exe\dfl_wl_bom_tosrm\dfl_wl_bom_toerp\x64\release\msado15.tlh +e:\itk_workspace\itk\滨湖\bh_exe\dfl_wl_bom_tosrm\dfl_wl_bom_toerp\x64\release\dfl_wl_bom_tosrm.tlog\cl.command.1.tlog +e:\itk_workspace\itk\滨湖\bh_exe\dfl_wl_bom_tosrm\dfl_wl_bom_toerp\x64\release\dfl_wl_bom_tosrm.tlog\cl.read.1.tlog +e:\itk_workspace\itk\滨湖\bh_exe\dfl_wl_bom_tosrm\dfl_wl_bom_toerp\x64\release\dfl_wl_bom_tosrm.tlog\cl.write.1.tlog +e:\itk_workspace\itk\滨湖\bh_exe\dfl_wl_bom_tosrm\dfl_wl_bom_toerp\x64\release\dfl_wl_bom_tosrm.tlog\link.command.1.tlog +e:\itk_workspace\itk\滨湖\bh_exe\dfl_wl_bom_tosrm\dfl_wl_bom_toerp\x64\release\dfl_wl_bom_tosrm.tlog\link.read.1.tlog +e:\itk_workspace\itk\滨湖\bh_exe\dfl_wl_bom_tosrm\dfl_wl_bom_toerp\x64\release\dfl_wl_bom_tosrm.tlog\link.write.1.tlog diff --git a/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOSRM.exe.recipe b/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOSRM.exe.recipe index 93daf1e..6b1bb32 100644 --- a/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOSRM.exe.recipe +++ b/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOSRM.exe.recipe @@ -2,7 +2,7 @@ - D:\source\东富龙\DFL_WL_BOM_TOSRM\x64\Release\DFL_WL_BOM_TOSRM.exe + E:\ITK_WorkSpace\ITK\滨湖\BH_exe\DFL_WL_BOM_TOSRM\x64\Release\DFL_WL_BOM_TOSRM.exe diff --git a/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOSRM.iobj b/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOSRM.iobj deleted file mode 100644 index 31d9adb..0000000 Binary files a/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOSRM.iobj and /dev/null differ diff --git a/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOSRM.ipdb b/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOSRM.ipdb deleted file mode 100644 index 24313ad..0000000 Binary files a/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOSRM.ipdb and /dev/null differ diff --git a/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOSRM.obj b/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOSRM.obj index af5c881..88b8a26 100644 Binary files a/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOSRM.obj and b/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOSRM.obj differ diff --git a/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOSRM.tlog/CL.command.1.tlog b/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOSRM.tlog/CL.command.1.tlog index 4c2ae3e..9aaacd7 100644 Binary files a/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOSRM.tlog/CL.command.1.tlog and b/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOSRM.tlog/CL.command.1.tlog differ diff --git a/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOSRM.tlog/CL.read.1.tlog b/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOSRM.tlog/CL.read.1.tlog index 709fc8f..9c4ad89 100644 Binary files a/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOSRM.tlog/CL.read.1.tlog and b/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOSRM.tlog/CL.read.1.tlog differ diff --git a/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOSRM.tlog/CL.write.1.tlog b/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOSRM.tlog/CL.write.1.tlog index 9f3636b..a244d6f 100644 Binary files a/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOSRM.tlog/CL.write.1.tlog and b/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOSRM.tlog/CL.write.1.tlog differ diff --git a/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOSRM.tlog/DFL_WL_BOM_TOSRM.lastbuildstate b/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOSRM.tlog/DFL_WL_BOM_TOSRM.lastbuildstate index 90015c7..2299877 100644 --- a/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOSRM.tlog/DFL_WL_BOM_TOSRM.lastbuildstate +++ b/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOSRM.tlog/DFL_WL_BOM_TOSRM.lastbuildstate @@ -1,2 +1,2 @@ -PlatformToolSet=v142:VCToolArchitecture=Native32Bit:VCToolsVersion=14.29.30133:VCServicingVersionMFC=14.29.30136:TargetPlatformVersion=10.0.19041.0: -Release|x64|D:\source\东富龙\DFL_WL_BOM_TOSRM\| +PlatformToolSet=v142:VCToolArchitecture=Native32Bit:VCToolsVersion=14.29.30133:TargetPlatformVersion=10.0.19041.0: +Release|x64|E:\ITK_WorkSpace\ITK\滨湖\BH_exe\DFL_WL_BOM_TOSRM\| diff --git a/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOSRM.tlog/link.command.1.tlog b/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOSRM.tlog/link.command.1.tlog index 40e6814..4440141 100644 Binary files a/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOSRM.tlog/link.command.1.tlog and b/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOSRM.tlog/link.command.1.tlog differ diff --git a/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOSRM.tlog/link.read.1.tlog b/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOSRM.tlog/link.read.1.tlog index a2c285c..a4967e0 100644 Binary files a/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOSRM.tlog/link.read.1.tlog and b/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOSRM.tlog/link.read.1.tlog differ diff --git a/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOSRM.tlog/link.write.1.tlog b/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOSRM.tlog/link.write.1.tlog index 67379f4..9dfb239 100644 Binary files a/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOSRM.tlog/link.write.1.tlog and b/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOSRM.tlog/link.write.1.tlog differ diff --git a/DFL_WL_BOM_TOERP/x64/Release/cJSON.obj b/DFL_WL_BOM_TOERP/x64/Release/cJSON.obj index 31a8ae6..4a4b434 100644 Binary files a/DFL_WL_BOM_TOERP/x64/Release/cJSON.obj and b/DFL_WL_BOM_TOERP/x64/Release/cJSON.obj differ diff --git a/DFL_WL_BOM_TOERP/x64/Release/common_itk_util.obj b/DFL_WL_BOM_TOERP/x64/Release/common_itk_util.obj index b7198c2..51da463 100644 Binary files a/DFL_WL_BOM_TOERP/x64/Release/common_itk_util.obj and b/DFL_WL_BOM_TOERP/x64/Release/common_itk_util.obj differ diff --git a/DFL_WL_BOM_TOERP/x64/Release/ocilib.obj b/DFL_WL_BOM_TOERP/x64/Release/ocilib.obj index 2ff3780..75ab37e 100644 Binary files a/DFL_WL_BOM_TOERP/x64/Release/ocilib.obj and b/DFL_WL_BOM_TOERP/x64/Release/ocilib.obj differ diff --git a/DFL_WL_BOM_TOERP/x64/Release/vc142.pdb b/DFL_WL_BOM_TOERP/x64/Release/vc142.pdb index bdc70df..4d45d57 100644 Binary files a/DFL_WL_BOM_TOERP/x64/Release/vc142.pdb and b/DFL_WL_BOM_TOERP/x64/Release/vc142.pdb differ diff --git a/x64/Release/DFL_WL_BOM_TOSRM.exe b/x64/Release/DFL_WL_BOM_TOSRM.exe deleted file mode 100644 index 1f93a24..0000000 Binary files a/x64/Release/DFL_WL_BOM_TOSRM.exe and /dev/null differ diff --git a/x64/Release/DFL_WL_BOM_TOSRM.pdb b/x64/Release/DFL_WL_BOM_TOSRM.pdb deleted file mode 100644 index 1ec7463..0000000 Binary files a/x64/Release/DFL_WL_BOM_TOSRM.pdb and /dev/null differ