You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1836 lines
66 KiB

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

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

#include "SIO_USCOREBOM_USCOREPLM_USCOREASYNBinding.nsmap"
#include "soapH.h"
#include "soapStub.h"
#include "stdsoap2.h"
#include "ado.h"
#include "soapSIO_USCOREBOM_USCOREPLM_USCOREASYNBindingProxy.h"
#include "soapSI_USCOREFACTORY_USCORENUMBER_USCOREPLM_USCOREOUT_USCORESYNBindingProxy.h"
#include "soapSI_USCOREPROCESSROUTE_USCOREPLM_USCOREOUT_USCORESYNBindingProxy.h"
#include <ict/ict_userservice.h>
#include <tccore/custom.h>
#include <epm/epm_toolkit_tc_utils.h>
#include <tccore/aom.h>
#include <tccore/aom_prop.h>
#include <tccore/item.h>
#include <bom/bom.h>
#include "ps/ps.h";
#include "ps/vrule.h"
#include "sstream"
#include <tccore/grm.h>
#include "epm/epm.h"
#include "sa/sa.h"
#include "libxl.h"
#include <map>
#include "epm/signoff.h"
#include <ctime>
#include <vector>
#include <locale>
#include <codecvt>
#include "ae/dataset.h"
#include <stdlib.h>
#include <tccore/aom.h>
#include <tc/emh.h>
#include <ict/ict_userservice.h>
#include <tccore/tctype.h>
//#include "ado.h"
#include "ocilib.h"
#include <tc/preferences.h>
#include <regex>
#include <me/me.h>
#include "dfl_custom.h"
#include "CRUL_server_call_httpserver.h"
#include "util.h"
//#include "SendSap.h"
using namespace std;
//
char* getNotNullMsg(char* msg);
void logBomMsg(vector<_ns1__DT_USCOREBOM_USCORES4_USCOREREQ_LIST> lists);
void logProcessMsg(vector <_ns1__DT_USCOREPROCESSROUTE_USCORES4_USCOREREQ_LIST> proclist);// vector <_ns1__DT_USCOREPROCESSROUTE_USCORES4_USCOREREQ_LIST> proclist;
char* getUnti(char* unti);
struct FlowBean {
vector<tag_t> flowList;
tag_t flow_split = NULLTAG;
tag_t flow_combine = NULLTAG;
tag_t flow_end = NULLTAG;
char* BEZFL; // ²Î¿¼Ë³Ðò
string PLNFL = ""; // ÐòÁÐ
boolean isMain = true;
boolean isOther = false;
vector<tag_t> flow_combine_list;
};
FlowBean getClone(FlowBean oldBean) {
FlowBean newBean;
newBean.isMain = false;
newBean.flow_combine = oldBean.flow_combine;
newBean.flow_split = oldBean.flow_split;
for (int num = 0; num < oldBean.flowList.size(); num++) {
newBean.flowList.push_back(oldBean.flowList[num]);
}
return newBean;
}
////
void printfMsg(ns1__DT_USCOREPROCESSROUTE_USCORES4_USCORERSP ns1Rsp, string& sendMsg) {
/*_ns1__DT_USCOREPROCESSROUTE_USCORES4_USCORERSP_RSP_USCOREBASEINFO info = ns1Rsp.RSP_USCOREBASEINFO;
char* id = info.REQ_USCORETRACE_USCOREID;
log("id:[%s]", id);*/
_ns1__DT_USCOREPROCESSROUTE_USCORES4_USCORERSP_ZTABLE_USCORERETURN* returnTable = ns1Rsp.ZTABLE_USCORERETURN;
int num = ns1Rsp.__sizeZTABLE_USCORERETURN;
log("¹¤ÒÕ·ÏßRETURN:{}", num);/**/
for (int i = 0; i < num; i++) {
_ns1__DT_USCOREPROCESSROUTE_USCORES4_USCORERSP_ZTABLE_USCORERETURN returnMsg = returnTable[i];
//System.out.println(z.getSERNR() + "|" + z.getTYPE() + "|" + z.getMESSAGE());
string logMsg;
char* msg = getNotNullMsg(returnMsg.MESSAGE);
msg = U2G(msg);
logMsg.append(returnMsg.MATNR).append("|")
.append(returnMsg.TYPE).append("|").append(msg);
if (tc_strcmp(returnMsg.TYPE, "E") == 0) {
sendMsg.append("\n").append(returnMsg.MATNR).append(": ").append(msg);
}
log(logMsg.c_str());
}
}
void printfMsg(ns1__DT_USCOREFACTORY_USCORENUMBER_USCORERSP ns1Rsp) {
int num = ns1Rsp.__sizeZTABLE_USCORERETURN;
//_ns1__DT_USCOREFACTORY_USCORENUMBER_USCORERSP_RSP_USCOREBASEINFO *info = ns1Rsp.RSP_USCOREBASEINFO;
//char* id = info[0].REQ_USCORETRACE_USCOREID;
_ns1__DT_USCOREFACTORY_USCORENUMBER_USCORERSP_ZTABLE_USCORERETURN* returnTable = ns1Rsp.ZTABLE_USCORERETURN;
log("³ö³§±àºÅRETURN:%d\n", num);/**/
for (int i = 0; i < num; i++) {
_ns1__DT_USCOREFACTORY_USCORENUMBER_USCORERSP_ZTABLE_USCORERETURN returnMsg = returnTable[i];
//System.out.println(z.getSERNR() + "|" + z.getTYPE() + "|" + z.getMESSAGE());
string logMsg = getNotNullMsg(returnMsg.SERNR);
char* msg = getNotNullMsg(returnMsg.MESSAGE);
msg = U2G(msg);
logMsg.append("|").append(getNotNullMsg(returnMsg.TYPE)).append("|").append(msg);
log("{}", logMsg);
}
}
void SplitStr(string strArg, string spliter, vector<string>& ans)
{
ans.clear();
size_t index0 = 0;
string one_arg;
if (strArg.find_first_not_of(' ') == string::npos)
strArg = "";
while (strArg.size() > 0)
{
index0 = strArg.find(spliter);
log(" ind %d \n", index0);
if (index0 != string::npos)
{
one_arg = strArg.substr(0, index0);
strArg = strArg.substr(index0 + 1);
ans.push_back(one_arg);
}
else
{
ans.push_back(strArg);
break;
}
}
}
void sendBom(vector<_ns1__DT_USCOREBOM_USCORES4_USCOREREQ_LIST> list, string batchMsg) {
//SIO_USCOREBOM_USCOREPLM_USCOREASYNBinding
SIO_USCOREBOM_USCOREPLM_USCOREASYNBindingProxy proxy;
ns1__DT_USCOREBOM_USCORES4_USCOREREQ ns1Req;
proxy.userid = "shpodev";
proxy.passwd = "sap@2019Test";
soap_mode(&proxy, SOAP_C_UTFSTRING);
_ns1__DT_USCOREBOM_USCORES4_USCOREREQ_LIST* reqList =
new _ns1__DT_USCOREBOM_USCORES4_USCOREREQ_LIST[list.size()];
log("list ===> %d \n", list.size());
for (int i = 0; i < list.size(); i++) {
_ns1__DT_USCOREBOM_USCORES4_USCOREREQ_LIST msg = list[i];
reqList[i] = list[i];
}
_ns1__DT_USCOREBOM_USCORES4_USCOREREQ_BASEINFO baseInfo;
ns1Req.LIST = reqList;
ns1Req.__sizeLIST = list.size();
baseInfo.REQ_USCORETRACE_USCOREID = (char*)batchMsg.c_str();//batchNum;
ns1Req.BASEINFO = &baseInfo;
//ns1__DT_USCOREBOM_USCOREPLM_USCORERSP ns1Rsp;
int xlt = proxy.send_SIO_USCOREBOM_USCOREPLM_USCOREASYN(NULL, NULL, &ns1Req);
log("111");
char* msg = proxy.buf;
vector<string> vecMsg;
//Split(msg, "?>", vecMsg);
//webserviceµ÷²»Í¨ ÔÝʱ²ð·Ö»ñÈ¡xmlÐÅÏ¢curlµ÷ÓÃ
/*string lastMsg = vecMsg[vecMsg.size()-1].c_str();
lastMsg = lastMsg.substr(1, lastMsg.size());*/
log("BOM XML MSG:{}", msg);/* xmlÐÅÏ¢*/
SplitStr(msg, "soap1.1\"", vecMsg);
string lastMsg = vecMsg[1].substr(11);
string str = callHttpserver2(lastMsg);
string logmsg = "BOM XML MSG:";
log2(logmsg.append(lastMsg));/* xmlÐÅÏ¢*/
logmsg = "return MSG :";
log2(logmsg.append(str));
soap_print_fault(&proxy, stderr);
log("xlt:[%d]", xlt);
//printfMsg(ns1Rsp, sendMsg);
}
//ÅжÏÊÇ·ñΪÖ÷Ïß
void isMain(FlowBean& bean, vector<tag_t>& mainLines, vector<tag_t>& endLines,
vector<tag_t>& splits, map<tag_t, char*>& BEZFL_maps, int num2) {
tag_t combine = bean.flow_combine;
vector<tag_t> lists = bean.flowList;
for (int i = 0; i < lists.size(); i++) {
tag_t b = lists[i];
char* idmte;
tag_t gxRev;
ITKCALL(AOM_ask_value_tag(b, "bl_line_object", &gxRev));
ITKCALL(AOM_ask_value_string(gxRev, "item_id", &idmte));
log("=====flowList=====%s====\n", idmte);
}
vector<tag_t> lists2 = bean.flow_combine_list;
//char* uid;
//ITK__convert_tag_to_uid(combine, &uid);
if (combine == NULLTAG) {
log("»ãºÏµã:\n");
}
int len = lists.size() - 1;
if (len >= -1) {
if (std::find(splits.begin(), splits.end(), lists[0]) == splits.end()) {
bean.flow_split = lists[0];
splits.push_back(lists[0]);
bean.isOther = true;
}
}
if (combine != NULLTAG && std::find(mainLines.begin(), mainLines.end(), combine) != mainLines.end()) {
bean.isMain = false;
int num = std::find(mainLines.begin(), mainLines.end(), combine) - mainLines.begin();
log("num %d\n", num);
vector<tag_t>::const_iterator index1 = lists.begin();
vector<tag_t>::const_iterator index2 = lists.begin() + num;
log("num %d\n", num);
vector<tag_t> vec_new; // еÄvector´æ·Å
log("num %d\n", num);
vec_new.assign(index1, index2);
log("num %d\n", num);
bean.flowList = vec_new;
if (BEZFL_maps.count(combine) > 0) {
bean.BEZFL = BEZFL_maps[combine];
}
return;
}
log("1\n");
if (mainLines.size() == 0) {
bean.isMain = (true);
}
else {
bean.isMain = (false);
}
if (len > -1) {
tag_t end = lists[len];
if (combine == NULLTAG) {
endLines.push_back(end);
if (BEZFL_maps.count(end) > 0) {
bean.BEZFL = BEZFL_maps[end];
}
}
else {
int size = lists2.size();
if (BEZFL_maps.count(lists2[size - 1]) > 0) {
bean.BEZFL = BEZFL_maps[lists2[size - 1]];
}
if (!bean.isMain) {
int cout = 0;
for (int i = 0; i < size; i++) {
if (std::find(mainLines.begin(), mainLines.end(), lists2[i]) != mainLines.end()) {
//mainLines.count(lists2[i))
cout = i;
break;
}
}
bean.flow_combine = lists2[cout];
}
endLines.push_back(combine);
}
}
for (int i = 0; i <= len; i++) {
if (std::find(mainLines.begin(), mainLines.end(), lists[i]) == mainLines.end()) {
log("3\n");
mainLines.push_back(lists[i]);
char* fileDate = new char[20];
sprintf(fileDate, "%06d", num2);
BEZFL_maps[lists[i]] = fileDate;
log("4\n");
}
}
return;
}
void sendProcess(vector <_ns1__DT_USCOREPROCESSROUTE_USCORES4_USCOREREQ_LIST> proclist, string& sendMsg) {
//ns1__DT_USCOREPROCESSROUTE_USCORES4_USCOREREQ *ns1__MT_USCOREPROCESSROUTE_USCORES4_USCOREREQ
SI_USCOREPROCESSROUTE_USCOREPLM_USCOREOUT_USCORESYNBindingProxy proxy;
soap_mode(&proxy, SOAP_C_UTFSTRING);
ns1__DT_USCOREPROCESSROUTE_USCORES4_USCOREREQ ns1Req;
_ns1__DT_USCOREPROCESSROUTE_USCORES4_USCOREREQ_BASEINFO baseInfo;
baseInfo.REQ_USCORETRACE_USCOREID = (char*)"123456";
ns1Req.BASEINFO = baseInfo;
_ns1__DT_USCOREPROCESSROUTE_USCORES4_USCOREREQ_LIST* LIST = new _ns1__DT_USCOREPROCESSROUTE_USCORES4_USCOREREQ_LIST[proclist.size()];
for (int i = 0; i < proclist.size(); i++) {
_ns1__DT_USCOREPROCESSROUTE_USCORES4_USCOREREQ_LIST list = proclist[i];
LIST[i] = list;
}
ns1Req.__sizeLIST = proclist.size();
ns1Req.LIST = LIST;
ns1__DT_USCOREPROCESSROUTE_USCORES4_USCORERSP ns1Rsp;
proxy.userid = "shplm";//shplm
proxy.passwd = "sap@2019";
int xlt = proxy.SI_USCOREPROCESSROUTE_USCOREPLM_USCOREOUT_USCORESYN(NULL, NULL, &ns1Req, ns1Rsp);
if (xlt != 0) {
soap_print_fault(&proxy, stderr);
}
//log("PROCESS XML MSG:{}", U2G(proxy.buf));/* xmlÐÅÏ¢*/
log("xlt:[%d]", xlt);
printfMsg(ns1Rsp, sendMsg);
}
void sendFactoryNo(vector<_ns1__DT_USCOREFACTORY_USCORENUMBER_USCOREREQ_ITEMS_ITEM> list_Factorys) {
SI_USCOREFACTORY_USCORENUMBER_USCOREPLM_USCOREOUT_USCORESYNBindingProxy proxy;
//soap_set_omode(&proxy, SOAP_C_UTFSTRING);
/*ssoap_set_mode(&soap, SOAP_C_MBSTRING);*/
soap_mode(&proxy, SOAP_C_UTFSTRING);
proxy.userid = "shplm";
proxy.passwd = "sap@2019";
ns1__DT_USCOREFACTORY_USCORENUMBER_USCOREREQ ns1Req;
_ns1__DT_USCOREFACTORY_USCORENUMBER_USCOREREQ_BASEINFO info;
info.REQ_USCORETRACE_USCOREID = (char*)"123456";
ns1Req.BASEINFO = &info;
_ns1__DT_USCOREFACTORY_USCORENUMBER_USCOREREQ_ITEMS items;
_ns1__DT_USCOREFACTORY_USCORENUMBER_USCOREREQ_ITEMS_ITEM* item_items =
new _ns1__DT_USCOREFACTORY_USCORENUMBER_USCOREREQ_ITEMS_ITEM[list_Factorys.size()];
for (int i = 0; i < list_Factorys.size(); i++) {
item_items[i] = list_Factorys[i];
}
items.__sizeITEM = list_Factorys.size();
items.ITEM = item_items;
ns1Req.ITEMS = &items;
ns1__DT_USCOREFACTORY_USCORENUMBER_USCORERSP ns1Rsp;
int xlt = proxy.SI_USCOREFACTORY_USCORENUMBER_USCOREPLM_USCOREOUT_USCORESYN(NULL, NULL, &ns1Req, ns1Rsp);
log("xlt:[%d]", xlt);
if (xlt != 0) {
soap_print_fault(&proxy, stderr);
}
printfMsg(ns1Rsp);
}
void getFactoryNoList(char* projectNo, char* groupName, char* wbs,
tag_t* factoryNos, int num, tag_t ccp, vector<_ns1__DT_USCOREFACTORY_USCORENUMBER_USCOREREQ_ITEMS_ITEM>& list) {
char* zt2_MaterialNo, *zt2_TankNo, *zt2_Site;
ITKCALL(AOM_UIF_ask_value(ccp, "zt2_MaterialNo", &zt2_MaterialNo));
ITKCALL(AOM_UIF_ask_value(ccp, "zt2_TankNo", &zt2_TankNo));
ITKCALL(AOM_UIF_ask_value(ccp, "zt2_Site", &zt2_Site));
//_ns1__DT_USCOREFACTORY_USCORENUMBER_USCOREREQ_ITEMS_ITEM
for (int i = 0, len = num; i < len; i++) {
tag_t factoryNo = factoryNos[i];
char* itemId;
ITKCALL(AOM_ask_value_string(factoryNo, "item_id", &itemId));
_ns1__DT_USCOREFACTORY_USCORENUMBER_USCOREREQ_ITEMS_ITEM item_factoryNo;
int index = i + 1;
char fileDate[128] = "";
item_factoryNo.MATNR = zt2_MaterialNo;
item_factoryNo.PSPID = projectNo;
sprintf_s(fileDate, "%04d", index);
char* rspos = fileDate;
item_factoryNo.RSPOS = rspos;
item_factoryNo.SERNR = itemId;
item_factoryNo.WERKS = groupName;
item_factoryNo.ZGH = G2U(zt2_TankNo);
item_factoryNo.ZPSPID = wbs;
item_factoryNo.ZZD = zt2_Site;
list.push_back(item_factoryNo);
}
}
vector<tag_t> addLastRev(map<tag_t, vector<tag_t>> items2) {
vector<tag_t> revLast;
map<tag_t, vector<tag_t>>::iterator it;
//Ãû³ÆÄ£ºýÆ¥Åä
for (it = items2.begin(); it != items2.end(); it++) {
tag_t s = it->first;
vector<tag_t> rev2 = items2[s];
tag_t revTag = NULLTAG;
char* revId = (char*)"";
for (int j = 0; j < rev2.size(); j++) {
char* id2;
AOM_ask_value_string(rev2[j], "item_revision_id", &id2);
if (strcmp(id2, revId) > 0) {
revId = id2;
revTag = rev2[j];
}
}
revLast.push_back(revTag);
}
return revLast;
}
//
tag_t getProcessTag(tag_t mantr, char* groupName) {
int n_references = 0;
int* levels = 0;
tag_t* references_tag, processTag = NULLTAG;
char** relation_type_name = NULL;
//ͨ¹ýÒýÓùØÏµ²éÕÒµ½±ä¸üµ¥
ITKCALL(WSOM_where_referenced(mantr, 1, &n_references, &levels, &references_tag, &relation_type_name));
for (int n = 0; n < n_references; n++) {
log("relation_type_name===>%s\n", relation_type_name[n]);
if (strcmp(relation_type_name[n], "IMAN_METarget") == 0) {//IMAN_METarget
//
char *os = NULL;
ITKCALL(AOM_ask_value_string(references_tag[n], "object_string", &os));
tag_t group = NULLTAG;
char *gname = NULL;
ITKCALL(AOM_ask_value_tag(references_tag[n], "owning_group", &group));
ITKCALL(AOM_ask_value_string(group, "name", &gname));
log("gname:%s===>%s\n", os, gname);
if (tc_strcmp(gname, groupName) == 0) {
processTag = references_tag[n];
break;
}
}
}
return processTag;
}
boolean isTcm2(tag_t mantr) {
int releaseCount = 0;
tag_t* releaseTags = NULL;
//ÅжÏ×Ó¼þÊÇ·ñ·¢²¼
ITKCALL(AOM_ask_value_tags(mantr, "release_status_list", &releaseCount, &releaseTags));
if (releaseCount > 0) {
return true;
}
else {
return false;
}
}
vector<tag_t> getFlowStartsYH(int num, tag_t* c_line_tags) {
vector<tag_t> starts;
for (int i = 0; i < num; i++) {
tag_t gxLine = c_line_tags[i], *successors, *Mfg0predecessors;
int sucCnt = 0, preCnt = 0;
ITKCALL(AOM_ask_value_tags(gxLine, "Mfg0successors", &sucCnt, &successors));
ITKCALL(AOM_ask_value_tags(gxLine, "Mfg0predecessors", &preCnt, &Mfg0predecessors));
log("sucCnt %d preCnt%d \n", sucCnt, preCnt);
if (preCnt == 0 && sucCnt > 0) {
starts.push_back(gxLine);
}
}
return starts;
}
void readGXFlow(tag_t gxLine, vector<FlowBean>& flowBeans, FlowBean& currentFlow,
boolean isMainFlow, boolean top) {
tag_t* successors, *Mfg0predecessors;
int sucCnt = 0, preCnt = 0;
ITKCALL(AOM_ask_value_tags(gxLine, "Mfg0successors", &sucCnt, &successors));
ITKCALL(AOM_ask_value_tags(gxLine, "Mfg0predecessors", &preCnt, &Mfg0predecessors));
currentFlow.flowList.push_back(gxLine);
if (preCnt > 1) {
currentFlow.flow_combine_list.push_back(gxLine);
}
if (preCnt > 1 && currentFlow.flow_combine == NULLTAG) {
currentFlow.flow_combine = gxLine;
}
if (sucCnt == 0) {
return;
}
for (int i = 1; i < sucCnt; i++) {
FlowBean newFlow = getClone(currentFlow);
if (newFlow.flow_combine == NULLTAG)
{
log("==============");
}
newFlow.flow_split = gxLine;
readGXFlow(successors[i], flowBeans, newFlow, false, false);
flowBeans.push_back(newFlow);
}
readGXFlow(successors[0], flowBeans, currentFlow, false, false);
if (top) {
log("sucCnt %d\n", sucCnt);
currentFlow.isMain = isMainFlow;;
flowBeans.push_back(currentFlow);
}
}
//¹¤ÒÕÐÅÏ¢ÅÅÐò
void getSort(vector<FlowBean>& flowBeans) {
if (flowBeans.size() == 1 || flowBeans.size() == 0)
return;
vector<int> flowInt;
map<int, vector<FlowBean>> flows;
for (FlowBean b : flowBeans) {
int size = b.flowList.size();
if (flows.count(size) > 0) {
flows[size].push_back(b);
}
else {
vector<FlowBean> flow;
flow.push_back(b);
flowInt.push_back(size);
flows[size] = flow;
}
}
flowBeans.clear();
vector<tag_t> mainLines;
vector<tag_t> endLines;
vector<tag_t> splits;
int index = 0;
map<tag_t, char*> BEZFL_maps;
sort(flowInt.rbegin(), flowInt.rend());
for (vector<int>::iterator it = flowInt.begin(); it != flowInt.end(); it++) {
cout << *it << " ";
if (flows.count(*it) > 0) {
vector<FlowBean> beans = flows[*it];
for (int x = 0; x < beans.size(); x++) {
isMain(beans[x], mainLines, endLines, splits, BEZFL_maps, index);
flowBeans.push_back(beans[x]);
index++;
}
}
}
}
char* getGXNR(tag_t gxLine) {
if (gxLine == NULLTAG) {
return (char*)"";
}
char* bl_sequence_no;
ITKCALL(AOM_ask_value_string(gxLine, "bl_sequence_no", &bl_sequence_no));
//String seq = gxLine.getProperty("bl_sequence_no");
int seqI = 0;
if (strcmp(bl_sequence_no, "") != 0) {
seqI = atoi(bl_sequence_no);
}
char* fileDate = new char[20];
sprintf(fileDate, "%04d", seqI);
return fileDate;
}
char* getBomUid(tag_t gxLine) {
char* gxUid;
tag_t gxRev;
if (gxLine == NULLTAG) {
return (char*)"";
}
ITKCALL(AOM_ask_value_tag(gxLine, "bl_line_object", &gxRev));
ITK__convert_tag_to_uid(gxRev, &gxUid);
return gxUid;
}
_ns1__DT_USCOREPROCESSROUTE_USCORES4_USCOREREQ_LIST_ITEMS_ITEM getGXInfo(FlowBean bean, int index,
tag_t partRev, char* p_uom, char* now) {
_ns1__DT_USCOREPROCESSROUTE_USCORES4_USCOREREQ_LIST_ITEMS_ITEM item;
item.PLNAL = (char*)("1");// ×鼯ÊýÆ÷
char* fileDate = new char[20];
sprintf(fileDate, "%06d", index);
item.PLNFL = fileDate;// ÐòÁÐ
item.DATUV = now;// ÓÐЧÆðʼÈÕÆÚ
boolean bx = false;
item.VORNR1 = (char*)("");
item.VORNR2 = (char*)("");
item.BEZFL = (char*)("");// ²Î¿¼Ë³Ðò
// item.setLTXA1("");//˳ÐòÃèÊö
if (!bean.isMain) {// ²¢ÐÐ
// item.setBEZFL("000000");//²Î¿¼Ë³Ðò
item.BEZFL = bean.BEZFL;
bx = true;
item.FLGAT = (char*)("1");// ˳ÐòÀà±ð
// System.out.println("ǰÇý:"+bean.flow_split);
if (bean.flow_split != NULLTAG) {
item.VORNR1 = getGXNR(bean.flow_split);// ǰÇý
}
else {
log("bean.flow_split ====== NULL");
}
if (bean.isOther)
bean.flow_split = NULLTAG;
if (bean.flow_combine != NULLTAG) {
item.VORNR2 = getGXNR(bean.flow_combine);// ºóÖÃ (SAPUtil.getGXNR(bean.flow_combine))
}
}
else {// ·Ç²¢ÐÐ
item.FLGAT = (char*)("0");// ˳ÐòÀà±ð
}
int cnt = bean.flowList.size();
_ns1__DT_USCOREPROCESSROUTE_USCORES4_USCOREREQ_LIST_ITEMS_ITEM_SUBITEMS subitemsArr;
vector<_ns1__DT_USCOREPROCESSROUTE_USCORES4_USCOREREQ_LIST_ITEMS_ITEM_SUBITEMS_SUBITEM> subItems;
boolean inBx = bean.flow_split == NULLTAG;
for (int i = 0; i < cnt; i++) {
tag_t gxLine = bean.flowList[i];
char* gxUid;
tag_t gxRev;
ITKCALL(AOM_ask_value_tag(gxLine, "bl_line_object", &gxRev));
ITK__convert_tag_to_uid(gxRev, &gxUid);
if (bx) {
if (strcmp(getBomUid(bean.flow_combine), gxUid) == 0) { //gxLine.equals(bean.flow_combine)
break;
}
if (strcmp(getBomUid(bean.flow_split), gxUid) == 0) { //gxLine.equals(bean.flow_split)
inBx = true;
continue;
}
if (!inBx) {
continue;
}
}
_ns1__DT_USCOREPROCESSROUTE_USCORES4_USCOREREQ_LIST_ITEMS_ITEM_SUBITEMS_SUBITEM sub;
char* zt2_WorkCenter, *zt2_ControlCode, *object_name, *zt2_ClassificationCode, *zt2_ArtificialTime, *zt2_MachineTime, *zt2_ReadinessTime;
ITKCALL(AOM_ask_value_string(gxRev, "zt2_WorkCenter", &zt2_WorkCenter));
ITKCALL(AOM_UIF_ask_value(gxLine, "zt2_ControlCode", &zt2_ControlCode));
ITKCALL(AOM_UIF_ask_value(gxRev, "object_name", &object_name));
ITKCALL(AOM_UIF_ask_value(gxRev, "zt2_ClassificationCode", &zt2_ClassificationCode));
ITKCALL(AOM_UIF_ask_value(gxLine, "zt2_ArtificialTime", &zt2_ArtificialTime));
ITKCALL(AOM_UIF_ask_value(gxLine, "zt2_MachineTime", &zt2_MachineTime));
ITKCALL(AOM_UIF_ask_value(gxLine, "zt2_ReadinessTime", &zt2_ReadinessTime));
sub.VORNR = getGXNR(gxLine);// ¹¤Ðò
sub.ARBPL = zt2_WorkCenter;// (gxRev.getTCProperty("zt2_WorkCenter").getStringValue());// ¹¤×÷ÖÐÐÄ
sub.STEUS = zt2_ControlCode;// (gxLine.getProperty("zt2_ControlCode"));// ¿ØÖÆÂë
sub.LTXA1 = G2U(object_name);// (gxRev.getProperty("object_name"));// ¹¤ÐòÃèÊö
sub.USR00 = zt2_ClassificationCode;// (gxRev.getProperty("zt2_ClassificationCode"));// ¹¤Ðò±àÂë
sub.BMSCH = (char*)("1");// »ù±¾ÊýÁ¿
sub.PLNME = p_uom;
sub.VGW01 = zt2_ArtificialTime;// (gxLine.getProperty("zt2_ArtificialTime"));// ±ê×¼Öµ1
sub.VGE01 = (char*)("MIN");// ±ê×¼Öµµ¥Î»1
sub.VGW02 = zt2_MachineTime;// (gxLine.getProperty("zt2_MachineTime"));// ±ê×¼Öµ2
sub.VGE02 = (char*)("MIN");// ±ê×¼Öµµ¥Î»2
sub.VGW05 = zt2_ReadinessTime;// (gxLine.getProperty("zt2_ReadinessTime"));// ±ê×¼Öµ5
sub.VGE05 = (char*)("MIN");// ±ê×¼Öµµ¥Î»5
subItems.push_back(sub);
}
_ns1__DT_USCOREPROCESSROUTE_USCORES4_USCOREREQ_LIST_ITEMS_ITEM_SUBITEMS_SUBITEM* SUBITEM =
new _ns1__DT_USCOREPROCESSROUTE_USCORES4_USCOREREQ_LIST_ITEMS_ITEM_SUBITEMS_SUBITEM[subItems.size()];
for (int i = 0; i < subItems.size(); i++) {
SUBITEM[i] = subItems[i];
}
subitemsArr.__sizeSUBITEM = subItems.size();
subitemsArr.SUBITEM = SUBITEM;
item.SUBITEMS = subitemsArr;
return item;
}
//////»ñÈ¡¹¤ÒÕÐÅÏ¢
void readBopInfo1YH(tag_t rev, tag_t partRev, boolean flag,
map<string, tag_t>& gy_meops, vector<tag_t>& needTCM_meops,
char* groupName, char* now, vector <_ns1__DT_USCOREPROCESSROUTE_USCORES4_USCOREREQ_LIST>& proclist) {
//"zt2_MaterialNo", "zt2_WBSNo"
char* zt2_MaterialNo, *zt2_WBSNo;
ITKCALL(AOM_ask_value_string(partRev, "zt2_MaterialNo", &zt2_MaterialNo));
ITKCALL(AOM_ask_value_string(partRev, "zt2_WBSNo", &zt2_WBSNo));
if (isTcm2(rev) && flag)
return;
if (gy_meops.count(zt2_MaterialNo) > 0)
return;
/*if (rev == null) {
throw new Exception("ȨÏÞ²»×ã,ÎÞ·¨¶ÁÈ¡ÎïÁÏ[" + zt2_MaterialNo + "]Ëù¹ØÁª¹¤ÒÕ");
}*/
gy_meops[zt2_MaterialNo] = rev;
//!needTCM_meops.contains(rev)
if (std::find(needTCM_meops.begin(), needTCM_meops.end(), rev) == needTCM_meops.end())
needTCM_meops.push_back(rev);
tag_t ebom_window, bom_line;
ITKCALL(ME_create_bop_window(&ebom_window));
ITKCALL(BOM_set_window_top_line(ebom_window, NULL, rev, NULLTAG, &bom_line));
int c_line_count;
tag_t* c_line_tags;
ITKCALL(BOM_line_ask_all_child_lines(bom_line, &c_line_count, &c_line_tags));
if (c_line_count == 0) {
return;
}
_ns1__DT_USCOREPROCESSROUTE_USCORES4_USCOREREQ_LIST proc_list;
_ns1__DT_USCOREPROCESSROUTE_USCORES4_USCOREREQ_LIST_HEAD head;
head.PSPNR = zt2_WBSNo;
head.MATNR = zt2_MaterialNo;
head.DATUV = now;// ÆðʼÈÕÆÚ
head.PLNAL = (char*)"1";// ×鼯ÊýÆ÷
head.STATU = (char*)"4";// ״̬
head.VERWE = (char*)"1";// ÓÃ;
head.WERKS = groupName;// ¹¤³§
_ns1__DT_USCOREPROCESSROUTE_USCORES4_USCOREREQ_LIST_ITEMS items;
vector<FlowBean> flowBeans;
vector<tag_t> startLines = getFlowStartsYH(c_line_count, c_line_tags);
tag_t part2;
char* zt2_unit2;
ITKCALL(ITEM_ask_item_of_rev(partRev, &part2));
ITKCALL(AOM_ask_value_string(part2, "zt2_unit", &zt2_unit2));
char* unit = getUnti(zt2_unit2);
if (startLines.size() > 0) {
char* itemID;
//ITKCALL(AOM_ask_value_string(startLines[0], "item_id", &itemID));
log("ÕÒµ½¹¤ÐòÁ÷Æðʼµã :\n");
}
for (int i = 0; i < startLines.size(); i++) {
FlowBean firstBean;
log("startLines == \n");
char* idmte;
tag_t gxRev;
ITKCALL(AOM_ask_value_tag(startLines[i], "bl_line_object", &gxRev));
ITKCALL(AOM_ask_value_string(gxRev, "item_id", &idmte));
log("=====idmte=====%s====\n", idmte);
readGXFlow(startLines[i], flowBeans, firstBean, i == 0, true);
for (int i = 0; i < firstBean.flowList.size(); i++) {
tag_t b = firstBean.flowList[i];
char* idmte;
tag_t gxRev;
ITKCALL(AOM_ask_value_tag(b, "bl_line_object", &gxRev));
ITKCALL(AOM_ask_value_string(gxRev, "item_id", &idmte));
log("=====ffirstBean.flowList=====%s====\n", idmte);
}
}// ´òÓ¡Á÷ÐÅÏ¢
if (flowBeans.size() > 0) {
}
else {
// ÎÞPERTÊý¾Ý
log("ÎÞPERTÊý¾Ý");
FlowBean bean;
bean.isMain = true;
for (int j = 0; j < c_line_count; j++) {
tag_t gxLine = c_line_tags[j];
bean.flowList.push_back(gxLine);
}
// bean.print();
flowBeans.push_back(bean);
}
// ÅÅÐò
getSort(flowBeans);
// ¶ÁÈ¡BOPÐÅÏ¢
_ns1__DT_USCOREPROCESSROUTE_USCORES4_USCOREREQ_LIST_ITEMS_ITEM* gxInfo =
new _ns1__DT_USCOREPROCESSROUTE_USCORES4_USCOREREQ_LIST_ITEMS_ITEM[flowBeans.size()];
log("flowBeans %d \n", flowBeans.size());
for (int i = 0; i < flowBeans.size(); i++) {
FlowBean bean = flowBeans[i];
/*bean.print();;*/
gxInfo[i] = getGXInfo(bean, i, partRev, unit, now);
//gxInfo(getGXInfo(bean, i, partRev, p_uom, now));
}
items.__sizeITEM = flowBeans.size();
items.ITEM = gxInfo;
proc_list.HEAD = head;
proc_list.ITEMS = items;
proclist.push_back(proc_list);
//for (int i = 0; i < flowBeans.size(); i++) {
// FlowBean bean = flowBeans.get(i);
// bean.print();
// gxInfo.add(SAPUtil.getGXInfo(bean, i, partRev, p_uom, now));
//}
//proclist.add(
// new DT_PROCESSROUTE_S4_REQLIST(head, gxInfo.toArray(new DT_PROCESSROUTE_S4_REQLISTITEMSITEM[]{})));
//window.clearCache();
//// window.refresh();
//window.closeBOPWindow();
//System.out.println("====¶ÁÈ¡¹¤ÒÕÐÅÏ¢½áÊø===");
ITKCALL(ME_close_bop_window(ebom_window));
}
char* getUnti(char* unti) {
char* s = _strupr(unti);
return s;
}
// ¼Ç¼ÒѾ­´æÔÚµÄBOMList<String> bomISExist
void recurZYZZSAPYH(tag_t line, tag_t rev, vector<string>& bomISExist,
char* groupName, char* now, string& errMess, vector<tag_t>& set_meops,
map<string, tag_t>& material_revs, vector<_ns1__DT_USCOREBOM_USCORES4_USCOREREQ_LIST>& list,
map<string, tag_t>& gy_meops, vector<tag_t>& needTCM_meops,
vector <_ns1__DT_USCOREPROCESSROUTE_USCORES4_USCOREREQ_LIST>& proclist) {
char* zt2_Diagram, *item_id, *object_name, *zt2_MaterialNo, *zt2_WBSNo;
//"zt2_Diagram","item_id","object_name","zt2_MaterialNo","zt2_WBSNo"
ITKCALL(AOM_ask_value_string(rev, "zt2_Diagram", &zt2_Diagram));
ITKCALL(AOM_ask_value_string(rev, "item_id", &item_id));
ITKCALL(AOM_ask_value_string(rev, "object_name", &object_name));
ITKCALL(AOM_ask_value_string(rev, "zt2_MaterialNo", &zt2_MaterialNo));
ITKCALL(AOM_ask_value_string(rev, "zt2_WBSNo", &zt2_WBSNo));
string x = zt2_MaterialNo;
log("item_id = [%s] \n", item_id);
if (x.rfind("99", 0) == 0) {
tag_t meops = getProcessTag(rev, groupName);
if (meops != NULLTAG) {
if (!isTcm2(meops)) {
set_meops.push_back(meops);
}
readBopInfo1YH(meops, rev, true, gy_meops, needTCM_meops, groupName, now, proclist);
}
else {
log("item_id22 = [%s] \n", item_id);
}
}
int c_line_count;
tag_t* c_line_tags;
ITKCALL(BOM_line_ask_all_child_lines(line, &c_line_count, &c_line_tags));
log("child c_line_count %d \n", c_line_count);
if (c_line_count == 0) {
return;
}
_ns1__DT_USCOREBOM_USCORES4_USCOREREQ_LIST_HEAD head;
if (std::find(bomISExist.begin(), bomISExist.end(), zt2_MaterialNo) != bomISExist.end()) {
return;
}
else {
bomISExist.push_back(zt2_MaterialNo);
}
tag_t item;
char* zt2_unit;
ITKCALL(ITEM_ask_item_of_rev(rev, &item));
ITKCALL(AOM_ask_value_string(item, "zt2_unit", &zt2_unit));
char* unit = getUnti(zt2_unit);
log("str = [%s] \n", unit);
head.PSPNR = zt2_WBSNo;
head.MATNR = zt2_MaterialNo;
head.BMEIN = unit;
head.STLAN = (char*)"1";
head.STLAL = (char*)"1";
head.BMENG = (char*)"1";
head.WERKS = groupName;
head.DATUV = now;
char* parnetUid;
ITK__convert_tag_to_uid(rev, &parnetUid);
head.STKTX = parnetUid;
_ns1__DT_USCOREBOM_USCORES4_USCOREREQ_LIST_ITEMS_ITEM* items_items =
new _ns1__DT_USCOREBOM_USCORES4_USCOREREQ_LIST_ITEMS_ITEM[c_line_count];
_ns1__DT_USCOREBOM_USCORES4_USCOREREQ_LIST_ITEMS items;
for (int i = 0; i < c_line_count; i++) {
string buff;
_ns1__DT_USCOREBOM_USCORES4_USCOREREQ_LIST_ITEMS_ITEM items_item;
tag_t c_line_tag = c_line_tags[i], rev2;
ITKCALL(AOM_ask_value_tag(c_line_tag, "bl_line_object", &rev2));
char* prop0, *prop1, *prop2, *prop3, *prop4, *zt2_unit2;
ITKCALL(AOM_ask_value_string(rev2, "zt2_Diagram", &prop0));
ITKCALL(AOM_ask_value_string(rev2, "item_id", &prop1));
ITKCALL(AOM_ask_value_string(rev2, "object_name", &prop2));
ITKCALL(AOM_ask_value_string(rev2, "zt2_SapState", &prop3));
ITKCALL(AOM_ask_value_string(rev2, "zt2_MaterialNo", &prop4));
tag_t part2;
ITKCALL(ITEM_ask_item_of_rev(rev2, &part2));
ITKCALL(AOM_ask_value_string(part2, "zt2_unit", &zt2_unit2));
char* unit22 = getUnti(zt2_unit2);
items_item.IDNRK = prop4;
char* unit = unit22;
items_item.MEINS = unit;
items_item.DATUV = now;
items_item.POSTP = (char*)"L";
char* bl_sequence_no, *bl_quantity, *ZT2_ClassificationNo, *ZT2_Remark;
//"bl_sequence_no", "bl_quantity", "ZT2_ClassificationNo", "ZT2_Remark"
ITKCALL(AOM_ask_value_string(c_line_tag, "bl_sequence_no", &bl_sequence_no));
ITKCALL(AOM_ask_value_string(c_line_tag, "bl_quantity", &bl_quantity));
ITKCALL(AOM_ask_value_string(c_line_tag, "ZT2_ClassificationNo", &ZT2_ClassificationNo));
ITKCALL(AOM_ask_value_string(c_line_tag, "ZT2_Remark", &ZT2_Remark));
items_item.POSNR = bl_sequence_no;
//string sss = bl_quantity;//line2.getProperty("bl_quantity");
log("bl_quantity ===== %s\n", bl_quantity);
if (strcmp(bl_quantity, "") == 0) {
buff.append("δÌîдÊýÁ¿(bl_quantity);");
}
double ddd = atof(bl_quantity);
char* strff = new char[21];
sprintf(strff, "%.3f", ddd);
items_item.MENGE = strff;
items_item.SORTF = ZT2_ClassificationNo;
if (strcmp(ZT2_ClassificationNo, "") == 0) {
buff.append("BOMÐÐδÕÒµ½Í¶ÁÏÐÅÏ¢;");
}
items_item.POTX1 = ZT2_Remark;
items_items[i] = items_item;
string msg;
msg.append(prop1).append("-").append(prop2).append("(¸¸Ïî:")
.append(item_id).append("-").append(object_name).append("):").append(buff);
log("buff ===== %s\n", buff.c_str());
if (buff.length() > 0 && strstr(errMess.c_str(), msg.c_str()) == NULL) {
errMess.append("\\n").append(msg);
}
if (strcmp(prop4, "") == 0) {
material_revs[prop4] = rev2;
}
}
//items.
items.ITEM = items_items;
items.__sizeITEM = c_line_count;
_ns1__DT_USCOREBOM_USCORES4_USCOREREQ_LIST list1;
list1.HEAD = head;
log("list1.HEAD %s\n ", list1.HEAD.BMEIN);
list1.ITEMS = items;
list.push_back(list1);
}
// Çå³þΪ¿ÕµÄ×ÓÏî
//void removeNull(vector<_ns1__DT_USCOREBOM_USCOREPLM_USCOREREQ_LIST> list) {
// for (int i = list.size() - 1; i >= 0; i--) {
// _ns1__DT_USCOREBOM_USCOREPLM_USCOREREQ_LIST dt = list[i];
// _ns1__DT_USCOREBOM_USCOREPLM_USCOREREQ_LIST_ITEMS items = dt.ITEMS;
// for (int j = 0; j < items.__sizeITEM; j++) {
//
// }
// }
//// for (int i = list.size() - 1; i >= 0; i--) {
//// DT_BOM_PLM_REQLIST dt = list.get(i);
//// List<DT_BOM_PLM_REQLISTITEMSITEM> item_lists = new ArrayList<DT_BOM_PLM_REQLISTITEMSITEM>();
//// DT_BOM_PLM_REQLISTITEMSITEM items[] = dt.getITEMS();
//// for (DT_BOM_PLM_REQLISTITEMSITEM item : items) {
//// if (item != null)
//// item_lists.add(item);
//// /*
//// * else { //KUtil.isEmpty(item.getDATUV()) }
//// */
//// }
//// if (item_lists == null || item_lists.size() == 0)
//// list.remove(dt);
//// else {
//// DT_BOM_PLM_REQLISTITEMSITEM[] request = item_lists
//// .toArray(new DT_BOM_PLM_REQLISTITEMSITEM[item_lists.size()]);
//// dt.setITEMS(request);
//// }
//// }
//}
#define OBJECT_NAME "object_name"
#define MATERIAL_NO "zt2_MaterialNo"
void readSchemesYH(vector<tag_t> vectorRev, tag_t partRev,
map<tag_t, vector<_ns1__DT_USCOREBOM_USCORES4_USCOREREQ_LIST>>& scheme_boms,
vector<string>& bomISExist, map<tag_t, vector<tag_t>>& rev_meops,
char* groupName, char* now, string& errMess,
map<string, tag_t>& material_revs, map<string, tag_t>& gy_meops, vector<tag_t>& needTCM_meops,
map<tag_t, vector<_ns1__DT_USCOREPROCESSROUTE_USCORES4_USCOREREQ_LIST>>& process_boms, char* transfer,
map<string, vector<string>> &inCcpMap) {
vector<tag_t> set_meops;
tag_t ebom_window;
ITKCALL(BOM_create_window(&ebom_window));
//±éÀú²ú³ÉÆ·¹ØÁªµÄµçÆøBOM
char* ccpMaterialNo;
ITKCALL(AOM_ask_value_string(partRev, MATERIAL_NO, &ccpMaterialNo));
for (int i = 0; i < vectorRev.size(); i++) {
tag_t rev = vectorRev[i], bom_line;
char* cName, *zt2_MaterialNo, *zt2_BOMScheme, *revUid;
ITK__convert_tag_to_uid(rev, &revUid);
//material_revs ¼Ç¼ÎïÁϱàÂë¶ÔÓ¦µÄ²ú³ÉÆ·ÓÃÀ´ÐÞ¸Ä״̬
ITKCALL(AOM_ask_value_string(rev, "object_name", &cName));
ITKCALL(AOM_ask_value_string(rev, "zt2_MaterialNo", &zt2_MaterialNo));
ITKCALL(AOM_UIF_ask_value(rev, "zt2_BOMScheme", &zt2_BOMScheme));
//ÅжÏÃû³ÆÊÇ·ñ´æÔÚ µçÆøÉè¼Æ¡¢ÃúÅÆ¿ÇÌå
if (strstr(cName, transfer) == NULL) {
//ÅжÏÊDz»ÊÇÔÚ¶ÔÓ¦µÄÎļþ¼ÐÏÂ
boolean pflag = false;
int n_references = 0;
int* levels = 0;
tag_t* references_tag;
char** relation_type_name = NULL;
//ͨ¹ýÒýÓùØÏµÕÒËùÔÚµÄÎļþ¼Ð
tag_t itemTag;
ITKCALL(ITEM_ask_item_of_rev(rev, &itemTag));
ITKCALL(WSOM_where_referenced(itemTag, 1, &n_references, &levels, &references_tag, &relation_type_name));
for (int j = 0; j < n_references; j++) {
tag_t refTag = references_tag[j];
char* folderName;
ITKCALL(AOM_ask_value_string(refTag, OBJECT_NAME, &folderName));
if (strstr(folderName, transfer) != NULL) {
pflag = true;
break;
}
}
//»ñÈ¡ÒýÓÃrev
if (!pflag) {
continue;
}
}
if (scheme_boms.count(rev) > 0) {
log("folderName = {} \n", zt2_MaterialNo);
inCcpMap[revUid].push_back(ccpMaterialNo);
continue;
}
vector<string> ccpMaterialMap;
ccpMaterialMap.push_back(ccpMaterialNo);
inCcpMap[revUid] = ccpMaterialMap;
//ÅжϷ½°¸ÐÅÏ¢
//material_revs.put(zt2_MaterialNo, rev);
ITKCALL(BOM_set_window_top_line(ebom_window, NULL, rev, NULLTAG, &bom_line));
vector<_ns1__DT_USCOREBOM_USCORES4_USCOREREQ_LIST> list; //¼Ç¼µ¥¸öµçÆøBOMÐÅÏ¢
vector <_ns1__DT_USCOREPROCESSROUTE_USCORES4_USCOREREQ_LIST> proclist;
recurZYZZSAPYH(bom_line, rev, bomISExist, groupName, now, errMess, set_meops, material_revs,
list, gy_meops, needTCM_meops, proclist);
/*List<DT_BOM_PLM_REQLIST> list = new ArrayList<DT_BOM_PLM_REQLIST>();
List<DT_PROCESSROUTE_S4_REQLIST> proclist = new ArrayList<DT_PROCESSROUTE_S4_REQLIST>();*/
if (list.size() > 0 && strcmp(zt2_BOMScheme, "»ã×Ü") == 0) {
char* zt2_Quantity;
ITKCALL(AOM_ask_value_string(rev, "zt2_Quantity", &zt2_Quantity));
if (strstr(zt2_Quantity, "") != 0) {
int quantity = atoi(zt2_Quantity);
if (quantity == 0) {
quantity = 1;
}
int size = list.size();
char* s = new char[10];
_itoa(quantity, s, 10);
list[size - 1].HEAD.BMENG = s;
//head.BMENG = (char*)to_string(quantity).c_str();
}
}
log("µçÆøBOMÐÅÏ¢");
logBomMsg(list);
if (proclist.size() > 0) {
logProcessMsg(proclist);
}
scheme_boms[rev] = list;
process_boms[rev] = proclist;
}
ITKCALL(BOM_close_window(ebom_window));
rev_meops[partRev] = set_meops;
}
char* getFLMDb2(string zt2_MaterialNo2, string groupName, map<string, char*>& flmMap) {
vector<string> matnr;
split(zt2_MaterialNo2, "-", &matnr);
string mes = matnr[0];
if (flmMap.count(mes) > 0) {
return flmMap[mes];
}
char* sortno = (char*)"";
string sql = "select WLFLM from CHINT_GYGL_000 where ZZBM = '";
sql.append(groupName).append("' and WLMC = '/' and FABN = '").append(mes).append("'");
int outputColumn1 = 0, outputValueCount1 = 0;
char*** outputValue1 = NULL;
log("search3 ===> %s\n", sql.c_str());
QuerySQLNoInputParam((char*)sql.c_str(), &outputColumn1, &outputValueCount1, &outputValue1);
if (outputValueCount1 > 0) {
sortno = outputValue1[0][0];
}
flmMap[mes] = sortno;
log("sortno ·ÖÀàÂë [%s]\n", sortno);
return sortno;
// if (read.next()) {
// sortno = read.getString("WLFLM");
// System.out.println("ͶÁÏ·ÖÀࣺ" + sortno + "zt2_MaterialNo2==>" + zt2_MaterialNo2 + "groupName==>" + groupName);
// }
}
char* getWlflm2(string fabn, map<string, char*>& flmMap) {
char* wlflmMap = (char*)"";
// ²éѯÎïÁÏ·ÖÀàÂë
if (flmMap.count(fabn) > 0) {
return flmMap[fabn];
}
string query = "select WLFLM from CHINT_GYGL_000 where zzbm = 'M040' and WLMC = '/' and FABN = '%s' ";
char selectRxfs[200];
sprintf(selectRxfs, query.c_str(), fabn.c_str());
int outputColumn1 = 0, outputValueCount1 = 0;
char*** outputValue1 = NULL;
log("search3 ===> %s\n", selectRxfs);
QuerySQLNoInputParam(selectRxfs, &outputColumn1, &outputValueCount1, &outputValue1);
for (int num = 0; num < outputValueCount1; num++) {
//TarGXCODE\", \"TarGXNAME\", \"TemGXCODE\", \"TemGXNAME
wlflmMap = outputValue1[num][0];
}
flmMap[fabn] = wlflmMap;
return wlflmMap;
}
/**
* »ñÈ¡BOMÏêϸÐÅÏ¢ ²ú³ÉƷϵĵ¥ÔªÐÅÏ¢
* @param ccp ²ú³ÉÆ·¶ÔÏó
* @param schemes ²ú³ÉÆ·ÏÂÃæµÄµ¥Ôª
* @param list ¼Ç¼BOM xml
* @param proclist ¼Ç¼¹¤ÒÕ·Ïßxml
* @param isSends ¼Ç¼ÒѾ­´«µÝµÄ¶ÔÏó
* @param txtPath ûÓÃÉÏ
* @param material_revs ¼Ç¼ÐèÒªÐÞ¸ÄÊôÐԵIJú³ÉÆ·£¨Ö»¼Ç¼ÁË£¬ÐÞ¸ÄÔڻش«£©
* @param groupName ×éID M040
* @param now µ±Ç°Ê±¼ä
* @param scheme_boms µ¥Ôª ¶ÔÓ¦ µ¥ÔªÏÂÃæµÄBOM
* @param gy_meops ¼Ç¼¹¤ÒÕ¹¤²½ÐÅÏ¢
* @param needTCM_meops ¼Ç¼ÐèÒª·¢²¼µÄ¹¤ÒÕ·Ïß
* @param flmMap ¼Ç¼¸¨ÁÏÐÅÏ¢
* @param isExistBom ¼Ç¼ÒѾ­×éÖ¯µÄÊý¾Ý
*/
void readBomInfoYH(tag_t ccp, vector<tag_t> schemes,
vector<_ns1__DT_USCOREBOM_USCORES4_USCOREREQ_LIST>& list,
vector <_ns1__DT_USCOREPROCESSROUTE_USCORES4_USCOREREQ_LIST>& proclist,
vector<tag_t> isSends, string txtPath, map<string, tag_t>& material_revs,
char* groupName, char* now, map<tag_t, vector<_ns1__DT_USCOREBOM_USCORES4_USCOREREQ_LIST>> scheme_boms,
map<string, tag_t>& gy_meops, vector<tag_t>& needTCM_meops, map<string, char*>& flmMap,
map<tag_t, char*> &isExistBom) {
char* zt2_MaterialNo, *zt2_WBSNo, *zt2_BOMScheme, *zt2_Quantity, *zt2_unit2;
_ns1__DT_USCOREBOM_USCORES4_USCOREREQ_LIST_HEAD head;
AOM_ask_value_string(ccp, "zt2_MaterialNo", &zt2_MaterialNo);
AOM_ask_value_string(ccp, "zt2_WBSNo", &zt2_WBSNo);
AOM_UIF_ask_value(ccp, "zt2_BOMScheme", &zt2_BOMScheme);
AOM_ask_value_string(ccp, "zt2_Quantity", &zt2_Quantity);
tag_t part2;
ITEM_ask_item_of_rev(ccp, &part2);
AOM_ask_value_string(part2, "zt2_unit", &zt2_unit2);
char* unit2 = getUnti(zt2_unit2);
material_revs[zt2_MaterialNo] = ccp;
head.PSPNR = (zt2_WBSNo);
head.MATNR = (zt2_MaterialNo);
head.STLAN = (char*)("1");
head.STLAL = (char*)("1");
head.BMENG = (char*)("1");
if (strcmp("»ã×Ü", zt2_BOMScheme) == 0) {
if (strstr(zt2_Quantity, "") != 0) {
int quantity = atoi(zt2_Quantity);
if (quantity == 0) {
quantity = 1;
}
char* s = new char[10];
_itoa(quantity, s, 10);
head.BMENG = s;
}
}
head.WERKS = groupName;
head.BMEIN = unit2;
head.DATUV = now;
char* parnetUid;
ITK__convert_tag_to_uid(ccp, &parnetUid);
head.STKTX = parnetUid;
tag_t meops = getProcessTag(ccp, groupName); //c²ú³ÉÆ·¹¤ÒÕ
if (meops != NULLTAG) {
char* itemId;
ITKCALL(AOM_ask_value_string(meops, "item_id", &itemId));
log("processId %s \n", itemId);
readBopInfo1YH(meops, ccp, true, gy_meops, needTCM_meops, groupName, now, proclist);
}
else {
vector<string> vecc;
tag_t item, lastRev = NULLTAG;
split(zt2_MaterialNo, "-", &vecc);
ITKCALL(ITEM_find_item(vecc[0].c_str(), &item));
ITKCALL(ITEM_ask_latest_rev(item, &lastRev));
//log("vecc[0].c_str()%s\n", vecc[0].c_str());
if (lastRev != NULLTAG) {
log("1");
tag_t meops2 = getProcessTag(lastRev, groupName);
readBopInfo1YH(meops2, ccp, false, gy_meops, needTCM_meops, groupName, now, proclist);
}
}
_ns1__DT_USCOREBOM_USCORES4_USCOREREQ_LIST_ITEMS_ITEM* items_items =
new _ns1__DT_USCOREBOM_USCORES4_USCOREREQ_LIST_ITEMS_ITEM[schemes.size()];
for (int i = 0; i < schemes.size(); i++) {
tag_t rev2 = schemes[i];
char* prop1, *propp2;
ITKCALL(AOM_ask_value_string(rev2, "zt2_MaterialNo", &prop1));
ITKCALL(AOM_ask_value_string(rev2, "object_name", &propp2));
_ns1__DT_USCOREBOM_USCORES4_USCOREREQ_LIST_ITEMS_ITEM items_item;
char* flm = getFLMDb2(prop1, groupName, flmMap);
items_item.SORTF = flm;
items_item.DATUV = now;
items_item.POSTP = (char*)"L";
items_item.POSNR = (char*)"";
items_item.IDNRK = prop1;
items_item.MENGE = (char*)"1";
items_item.POTX1 = (char*)"";
if (strstr(prop1, "-") != NULL) {
vector<string> vecc;
split(prop1, "-", &vecc);
char* flm2 = getWlflm2(vecc[0], flmMap);
items_item.SORTF = flm2;
}
char* zt2_unit22;
tag_t part22;
ITKCALL(ITEM_ask_item_of_rev(rev2, &part22));
ITKCALL(AOM_ask_value_string(part22, "zt2_unit", &zt2_unit22));
char* unit22 = getUnti(zt2_unit22);
items_item.MEINS = unit22;
items_items[i] = items_item;
if (std::find(isSends.begin(), isSends.end(), rev2) != isSends.end())
continue;
else
isSends.push_back(rev2);
if (scheme_boms.count(rev2) > 0 && isExistBom.count(rev2) == 0) {
isExistBom[rev2] = (char*)"test";
vector<_ns1__DT_USCOREBOM_USCORES4_USCOREREQ_LIST> lists = scheme_boms[rev2];
for (int j = 0, len = lists.size(); j < len; j++) {
if (j != len - 1) {
list.push_back(lists[j]);
}
else {
_ns1__DT_USCOREBOM_USCORES4_USCOREREQ_LIST dt = lists[j];
dt.HEAD.PSPNR = zt2_WBSNo;
list.push_back(dt);
}
}
}
}
_ns1__DT_USCOREBOM_USCORES4_USCOREREQ_LIST_ITEMS items;
items.ITEM = items_items;
items.__sizeITEM = schemes.size();
_ns1__DT_USCOREBOM_USCORES4_USCOREREQ_LIST list22;
list22.HEAD = head;
list22.ITEMS = items;
list.push_back(list22);
}
char* getNotNullMsg(char* msg) {
if (msg == NULL) {
return (char*)"";
}
else {
return msg;
}
}
/**
* ¼Ç¼³ö³§±àºÅÐÅÏ¢ÈÕÖ¾
*/
void logCcbh(vector<_ns1__DT_USCOREFACTORY_USCORENUMBER_USCOREREQ_ITEMS_ITEM> list_Factorys) {
string msg = "";
for (int i = 0; i < list_Factorys.size(); i++) {
_ns1__DT_USCOREFACTORY_USCORENUMBER_USCOREREQ_ITEMS_ITEM list_Factory = list_Factorys[i];
msg.append("PSPID = ").append(getNotNullMsg(list_Factory.PSPID)).append(" ");
msg.append("RSPOS = ").append(getNotNullMsg(list_Factory.RSPOS)).append(" ");
msg.append("SERNR = ").append(getNotNullMsg(list_Factory.SERNR)).append(" ");
msg.append("MATNR = ").append(getNotNullMsg(list_Factory.MATNR)).append(" ");
msg.append("WERKS = ").append(getNotNullMsg(list_Factory.WERKS)).append(" ");
msg.append("ZGH = ").append(U2G(getNotNullMsg(list_Factory.ZGH))).append(" ");
msg.append("ZPSPID = ").append(getNotNullMsg(list_Factory.ZPSPID)).append(" ");
msg.append("ZZD = ").append(getNotNullMsg(list_Factory.ZZD)).append("\n");
}
log(" ³ö³§±àºÅÐÅÏ¢:%s\n", msg.c_str());
}
/**
* ¼Ç¼¹¤ÒÕ·ÏßÐÅÏ¢ÈÕÖ¾
*/
void logProcessMsg(vector <_ns1__DT_USCOREPROCESSROUTE_USCORES4_USCOREREQ_LIST> proclist) {
log("start log ProecessMSG %d \n", proclist.size());
string msg = "";
for (int i = 0; i < proclist.size(); i++) {
_ns1__DT_USCOREPROCESSROUTE_USCORES4_USCOREREQ_LIST list = proclist[i];
_ns1__DT_USCOREPROCESSROUTE_USCORES4_USCOREREQ_LIST_HEAD head = list.HEAD;
msg.append("MATNR= ").append(getNotNullMsg(head.MATNR)).append(" ");
msg.append("WERKS= ").append(getNotNullMsg(head.WERKS)).append(" ");
msg.append("VERWE= ").append(getNotNullMsg(head.VERWE)).append(" ");
msg.append("STATU= ").append(getNotNullMsg(head.STATU)).append(" ");
msg.append("DATUV= ").append(getNotNullMsg(head.DATUV)).append(" ");
msg.append("PLNAL= ").append(getNotNullMsg(head.PLNAL)).append(" ");
msg.append("PSPNR= ").append(getNotNullMsg(head.PSPNR)).append("\n[");
_ns1__DT_USCOREPROCESSROUTE_USCORES4_USCOREREQ_LIST_ITEMS items = list.ITEMS;
_ns1__DT_USCOREPROCESSROUTE_USCORES4_USCOREREQ_LIST_ITEMS_ITEM* items_item = items.ITEM;
for (int j = 0; j < items.__sizeITEM; j++) {
_ns1__DT_USCOREPROCESSROUTE_USCORES4_USCOREREQ_LIST_ITEMS_ITEM item_item = items_item[j];
msg.append("PLNAL= ").append(getNotNullMsg(item_item.PLNAL)).append(" ");
msg.append("PLNFL= ").append(getNotNullMsg(item_item.PLNFL)).append(" ");
msg.append("DATUV= ").append(getNotNullMsg(item_item.DATUV)).append(" ");
msg.append("FLGAT= ").append(getNotNullMsg(item_item.FLGAT)).append(" ");
msg.append("BEZFL= ").append(getNotNullMsg(item_item.BEZFL)).append(" ");
msg.append("LTXA1= ").append(U2G(getNotNullMsg(item_item.LTXA1))).append(" ");
msg.append("VORNR1= ").append(getNotNullMsg(item_item.VORNR1)).append(" ");
msg.append("VORNR2= ").append(getNotNullMsg(item_item.VORNR2)).append("\n");
_ns1__DT_USCOREPROCESSROUTE_USCORES4_USCOREREQ_LIST_ITEMS_ITEM_SUBITEMS subItems = item_item.SUBITEMS;
_ns1__DT_USCOREPROCESSROUTE_USCORES4_USCOREREQ_LIST_ITEMS_ITEM_SUBITEMS_SUBITEM* sbuItemSubItems = subItems.SUBITEM;
msg.append("[");
for (int x = 0; x < subItems.__sizeSUBITEM; x++) {
_ns1__DT_USCOREPROCESSROUTE_USCORES4_USCOREREQ_LIST_ITEMS_ITEM_SUBITEMS_SUBITEM sbuItemSubItem = sbuItemSubItems[x];
msg.append("VORNR= ").append(getNotNullMsg(sbuItemSubItem.VORNR)).append(" ");
msg.append("ARBPL= ").append(getNotNullMsg(sbuItemSubItem.ARBPL)).append(" ");
msg.append("STEUS= ").append(getNotNullMsg(sbuItemSubItem.STEUS)).append(" ");
msg.append("LTXA1= ").append(U2G(getNotNullMsg(sbuItemSubItem.LTXA1))).append(" ");
msg.append("USR00= ").append(getNotNullMsg(sbuItemSubItem.USR00)).append(" ");
msg.append("BMSCH= ").append(getNotNullMsg(sbuItemSubItem.BMSCH)).append(" ");
msg.append("PLNME= ").append(getNotNullMsg(sbuItemSubItem.PLNME)).append(" ");
msg.append("VGW01= ").append(getNotNullMsg(sbuItemSubItem.VGW01)).append(" ");
msg.append("VGE01= ").append(getNotNullMsg(sbuItemSubItem.VGE01)).append(" ");
msg.append("VGW02= ").append(getNotNullMsg(sbuItemSubItem.VGW02)).append(" ");
msg.append("VGE02= ").append(getNotNullMsg(sbuItemSubItem.VGE02)).append(" ");
msg.append("VGW05= ").append(getNotNullMsg(sbuItemSubItem.VGW05)).append(" ");
msg.append("VGE05= ").append(getNotNullMsg(sbuItemSubItem.VGE05)).append("\n");
}
msg.append("]\n");
}
msg.append("]\n");
}
string logmsg = " ¿ªÊ¼¼Ç¼PROCESSÐÅÏ¢====>";
//log(" ¿ªÊ¼¼Ç¼PROCESSÐÅÏ¢====>%s", msg.c_str());
log2(logmsg.append(msg));
}
/**
* ¼Ç¼BOMÐÅÏ¢ÈÕÖ¾
*/
void logBomMsg(vector<_ns1__DT_USCOREBOM_USCORES4_USCOREREQ_LIST> lists) {
string msg = "";
for (int i = 0; i < lists.size(); i++) {
_ns1__DT_USCOREBOM_USCORES4_USCOREREQ_LIST list = lists[i];
_ns1__DT_USCOREBOM_USCORES4_USCOREREQ_LIST_HEAD head = list.HEAD;
msg.append("PSPNR= ").append(getNotNullMsg(head.PSPNR)).append(" ");
msg.append("MATNR= ").append(getNotNullMsg(head.MATNR)).append(" ");
msg.append("WERKS= ").append(getNotNullMsg(head.WERKS)).append(" ");
msg.append("DATUV= ").append(getNotNullMsg(head.DATUV)).append(" ");
msg.append("STLAN= ").append(getNotNullMsg(head.STLAN)).append(" ");
msg.append("STLAL= ").append(getNotNullMsg(head.STLAL)).append(" ");
msg.append("BMENG= ").append(getNotNullMsg(head.BMENG)).append(" ");
msg.append("BMEIN= ").append(getNotNullMsg(head.BMEIN)).append(" ");
msg.append("STKTX= ").append(getNotNullMsg(head.STKTX)).append("\n[");
_ns1__DT_USCOREBOM_USCORES4_USCOREREQ_LIST_ITEMS items = list.ITEMS;
_ns1__DT_USCOREBOM_USCORES4_USCOREREQ_LIST_ITEMS_ITEM* items_item = items.ITEM;
for (int j = 0; j < items.__sizeITEM; j++) {
_ns1__DT_USCOREBOM_USCORES4_USCOREREQ_LIST_ITEMS_ITEM item_item = items_item[j];
msg.append("DATUV= ").append(getNotNullMsg(item_item.DATUV)).append(" ");
msg.append("POSTP= ").append(getNotNullMsg(item_item.POSTP)).append(" ");
msg.append("POSNR= ").append(getNotNullMsg(item_item.POSNR)).append(" ");
msg.append("IDNRK= ").append(getNotNullMsg(item_item.IDNRK)).append(" ");
msg.append("MENGE= ").append(getNotNullMsg(item_item.MENGE)).append(" ");
msg.append("MEINS= ").append(getNotNullMsg(item_item.MEINS)).append(" ");
msg.append("SORTF= ").append(getNotNullMsg(item_item.SORTF)).append(" ");
msg.append("POTX1= ").append(getNotNullMsg(item_item.POTX1)).append("\n");
}
msg.append("]\n");
}
string logmsg = " ¿ªÊ¼¼Ç¼BOMÐÅÏ¢====>";
//log(" ¿ªÊ¼¼Ç¼BOMÐÅÏ¢====>%s", msg.c_str());
log2(logmsg.append(msg));
}
/**
* ¼Ç¼´«µÝÐÅÏ¢µ½DETAILS±íÖÐ »Ø´«ÓÃ
* @param bomMsg ×éÖ¯µÄxmlÐÅÏ¢
* @param isExistTag Åжϵ¥ÔªÊÇ·ñ¶à´Î³öÏÖ
* @param ccpTagMap »ñÈ¡µ¥Ôª¶ÔÓ¦µÄ²ú³ÉÆ·ÎïÁϱàÂë
* @param code ´«µÝºÅ
* @param batchNum Åú´ÎºÅ
*/
void logBatabase(_ns1__DT_USCOREBOM_USCORES4_USCOREREQ_LIST bomMsg,
map<string, string> &isExistTag, map<string, vector<string>> ccpTagMap,
char *code, string batchNum, char *groupId, char*wbsNo, char* alterstatus) {
log("logBatabase===0");
char topUid[32] = "", *itemId = NULL, *topMatnrNo = NULL;
string materialNoTmp = "";
tc_strcpy(topUid, bomMsg.HEAD.STKTX);
log("topUid===%s", topUid);
if (ccpTagMap.count(topUid) == 0) {
log("logBatabase===1");
materialNoTmp = bomMsg.HEAD.MATNR;
}
else {
log("logBatabase===2");
vector<string> ccps = ccpTagMap[topUid];
for (int i = 0; i < ccps.size(); i++) {
if (i > 0) {
materialNoTmp.append(";").append(ccps[i]);
}
else {
materialNoTmp.append(ccps[i]);
}
}
}
if (isExistTag.count(topUid) == 0) {
log("logBatabase===3");
//²åÈëÏêÇéÊý¾Ý±í
tag_t topTag = NULLTAG, partTag = NULLTAG;
ITK__convert_uid_to_tag(topUid, &topTag);
char *type = NULL;
ITKCALL(WSOM_ask_object_type2(topTag, &type));
if (tc_strcmp(type, "ZT2_Design3DRevision") == 0) {
int num = 0;
tag_t *comps = NULL;
ITKCALL(AOM_ask_value_tags(topTag, "representation_for", &num, &comps));
for (int i = 0; i < num; i++) {
char *type2 = NULL;
ITKCALL(WSOM_ask_object_type2(comps[i], &type2));
if (tc_strcmp(type2, "Part Revision") == 0) {
partTag = comps[i];
break;
}
}
}
else {
ITK__convert_uid_to_tag(topUid, &partTag);
}
ITKCALL(AOM_ask_value_string(topTag, "item_id", &itemId));
ITKCALL(AOM_ask_value_string(partTag, "zt2_MaterialNo", &topMatnrNo));
isExistTag[topUid] = materialNoTmp.c_str();
string insertSql = "insert into CHINT_BOM_TO_SAP_DETIALS (code,batchnumber,plmsendstatus,plmsendstarttime,factory,productmaterialno,pitemid,puid,materialno,wbsno,plmstatus,plmalterstatus) VALUES ('%s','%s','PLM¿ªÊ¼´«µÝ',SYSDATE,'%s','%s','%s','%s','%s','%s','δ´¦Àí','%s') ";
char selectRxfs[3000];
sprintf(selectRxfs, insertSql.c_str(), code, batchNum.c_str(), groupId, materialNoTmp.c_str(), itemId, topUid, bomMsg.HEAD.MATNR, wbsNo, alterstatus);
log("selectRecord2 ===> %s\n", selectRxfs);
ExecuteSQLNoInputParam(selectRxfs);
ExecuteSQLNoInputParam((char*)"commit");
}
else {
log("logBatabase===4");
string updateSql = "update CHINT_BOM_TO_SAP_DETIALS set productmaterialno = '%s' where batchnumber = '%s'";
char selectRxfs[3000];
sprintf(selectRxfs, updateSql.c_str(), materialNoTmp.c_str(), batchNum.c_str());
log("selectRecord2 ===> %s\n", selectRxfs);
ExecuteSQLNoInputParam(selectRxfs);
ExecuteSQLNoInputParam((char*)"commit");
}
log("logBatabase===5");
return;
}
/**
* ¼ÆËã´«µÝµÄºÄʱ
* @param code ´«µÝºÅ
*/
string getPlmTime(char *code) {
string getMsg = "select trunc((sysdate - plmstarttime) * 24)||'h:'||trunc(mod((sysdate - plmstarttime) * 24 * 60, 60))||'min:'|| trunc(mod((sysdate - plmstarttime) * 24 * 60 * 60, 60))||'s' tim from CHINT_BOM_TO_SAP_SUM where code = %s ";
char selectRxfs[600];
string timel;
sprintf(selectRxfs, getMsg.c_str(), code);
int outputColumn1 = 0, outputValueCount1 = 0;
char*** outputValue1 = NULL;
log("selectRecord2 ===> %s\n", selectRxfs);
QuerySQLNoInputParam(selectRxfs, &outputColumn1, &outputValueCount1, &outputValue1);
for (int num = 0; num < outputValueCount1; num++) {
//TarGXCODE\", \"TarGXNAME\", \"TemGXCODE\", \"TemGXNAME
timel = outputValue1[num][0];
}
return timel;
}
/**
* ·ÖÅú´Î´«µÝBOMÖÁSAP
* @param groupId Óû§ËùÔÚ×éID
* @param mapList ¼Ç¼ ²ú³ÉÆ·¶ÔÓ¦µÄBOMÐÅÏ¢
* @param code ´«µÝºÅ
* @param wbsNo WBSºÅ
* @param inCcpMap µ¥Ôª¶ÔÓ¦²ú³ÉÆ·µÄÎïÁϱàÂë 1¶Ô¶à
*/
void startSplitSend(char*groupId,
map<tag_t, vector<_ns1__DT_USCOREBOM_USCORES4_USCOREREQ_LIST>> mapList,
char *code, char *wbsNo, map<string, vector<string>> inCcpMap) {
int url_num = 0;
char** url_vals = NULL;
//Ê×Ñ¡ÏîÅäÖÃ×é¶ÔÓ¦µÄ²ð·Ö·½·¨
ITKCALL(PREF_ask_char_values("CHINT_SAPBOM_SPLIT", &url_num, &url_vals));
int cfNum = 1; // ²ð·Ö´«µÝµÄÊýÁ¿
int type = 0; //0²ú³ÉƷά¶È 1 BOM
for (int j = 0; j < url_num; j++) {
vector<string> vec;
Split(url_vals[j], ":", vec);
if (vec.size() == 3) {
if (strcmp(groupId, vec[0].c_str()) == 0) {
if (strcmp("BOM", vec[1].c_str()) == 0) {
type = 1;
}
cfNum = atoi(vec[2].c_str());
}
}
}
log("====url_vals====%d %zd\n", cfNum, mapList.size());
url_num = 0;
char** rule_vals = NULL;
char alterstatus[2] = "N";
//ÊÇ·ñÐèÒªÐÞ¸Ä״̬
ITKCALL(PREF_ask_char_values("CHINT_BOMTOSAP_STATUS_RULE", &url_num, &rule_vals));
for (int i = 0; i < url_num; i++) {
vector<string> vec;
Split(rule_vals[i], ":", vec);
if (tc_strcmp(vec[0].c_str(), groupId) == 0) {
tc_strcpy(alterstatus, vec[1].c_str());
break;
}
}
int batchNum = 1;
int numberCnt = 0;
map<string, string> ccpMap;
//map<string, vector<tag_t>> ccpTagMap;
//´«µÝBOM °´²ú³ÉÆ·ÊýÁ¿²ð·Ö´«µÝ
if (type == 0) {
int count = 1;
vector<_ns1__DT_USCOREBOM_USCORES4_USCOREREQ_LIST> list;
for (auto it = mapList.begin(); it != mapList.end(); ++it) {
//std::cout << "Key: " << it->first << ", Value: " << it->second << std::endl;
tag_t ccp = it->first;
vector<_ns1__DT_USCOREBOM_USCORES4_USCOREREQ_LIST > bomList = mapList[ccp];
log("====bomList====%d \n", bomList.size());
logBomMsg(bomList);
for (int i = 0; i < bomList.size(); i++) {
_ns1__DT_USCOREBOM_USCORES4_USCOREREQ_LIST bomMsg = bomList[i];
/*if (ccpTagMap.count(bomMsg.HEAD.STKTX) > 0) {
ccpTagMap[bomMsg.HEAD.STKTX].push_back(ccp);
}
else {
vector< tag_t> ccpVector;
ccpVector.push_back(ccp);
ccpTagMap[bomMsg.HEAD.STKTX] = ccpVector;
}*/
list.push_back(bomMsg);
}
if (count == mapList.size()) {
numberCnt = numberCnt + 1;
string batchMsg;
char numMsg[128] = "";
sprintf_s(numMsg, "%05d", batchNum);
batchMsg.append(code).append("-").append(numMsg);
log("batchMsg%s\n", batchMsg.c_str());
for (int i = 0; i < list.size(); i++) {
log("i.size() ===> %d \n", i);
_ns1__DT_USCOREBOM_USCORES4_USCOREREQ_LIST bomMsg = list[i];
logBatabase(bomMsg, ccpMap, inCcpMap, code, batchMsg, groupId, wbsNo, alterstatus);
}
log(" start SEND ===\n");
sendBom(list, batchMsg);
batchNum = batchNum + 1;
list.clear();
}
else if (count % cfNum == 0) {
numberCnt = numberCnt + 1;
string batchMsg;
char numMsg[128] = "";
sprintf_s(numMsg, "%05d", batchNum);
batchMsg.append(code).append("-").append(numMsg);
log("batchMsg%s\n", batchMsg.c_str());
log("list.size() ===> %d \n", list.size());
for (int i = 0; i < list.size(); i++) {
log("i.size() ===> %d \n", i);
_ns1__DT_USCOREBOM_USCORES4_USCOREREQ_LIST bomMsg = list[i];
logBatabase(bomMsg, ccpMap, inCcpMap, code, batchMsg, groupId, wbsNo, alterstatus);
//log("i.size() ===> %d \n", i);
}
log(" start SEND ===");
sendBom(list, batchMsg);
batchNum = batchNum + 1;
list.clear();
}
count++;
}
}
else {
//°´BOMÊýÁ¿²ð·Ö´«µÝ
int count = 1;
vector<_ns1__DT_USCOREBOM_USCORES4_USCOREREQ_LIST> list;
for (auto it = mapList.begin(); it != mapList.end(); ++it) {
//std::cout << "Key: " << it->first << ", Value: " << it->second << std::endl;
tag_t ccp = it->first;
vector<_ns1__DT_USCOREBOM_USCORES4_USCOREREQ_LIST > bomList = mapList[ccp];
for (int i = 0; i < bomList.size(); i++) {
list.push_back(bomList[i]);
if (list.size() % cfNum == 0) {
numberCnt = numberCnt + 1;
string batchMsg;
char numMsg[128] = "";
sprintf_s(numMsg, "%05d", batchNum);
batchMsg.append(code).append("-").append(numMsg);
for (int i = 0; i < list.size(); i++) {
_ns1__DT_USCOREBOM_USCORES4_USCOREREQ_LIST bomMsg = list[i];
logBatabase(bomMsg, ccpMap, inCcpMap, code, batchMsg, groupId, wbsNo, alterstatus);
}
sendBom(list, batchMsg);
batchNum = batchNum + 1;
list.clear();
}
}
if (count == mapList.size() && list.size()>0) {
string batchMsg;
char numMsg[128] = "";
sprintf_s(numMsg, "%05d", batchNum);
numberCnt = numberCnt + 1;
batchMsg.append(code).append("-").append(numMsg);
for (int i = 0; i < list.size(); i++) {
_ns1__DT_USCOREBOM_USCORES4_USCOREREQ_LIST bomMsg = list[i];
logBatabase(bomMsg, ccpMap, inCcpMap, code, batchMsg, groupId, wbsNo, alterstatus);
}
sendBom(list, batchMsg);
batchNum = batchNum + 1;
list.clear();
}
count++;
}
}
string time1 = getPlmTime(code);
string updateSum = "update CHINT_BOM_TO_SAP_SUM set \"NUMBER\" = %d ,datastatus = 'Êý¾ÝÕý³£ÍÆËÍSAP',organizationaltime = '%s',taskstauts = '×éÖ¯Íê³É',PLMFINISHTIME = SYSDATE where code = '%s' ";
char selectRxfs[800];
string timel;
sprintf(selectRxfs, updateSum.c_str(), numberCnt, time1.c_str(), code);
log("selectRecord2 ===> %s\n", selectRxfs);
ExecuteSQLNoInputParam(selectRxfs);
ExecuteSQLNoInputParam((char*)"commit");
}
#define SEND_MSG "·¢ÆðµÄ \\\""
#define SPLIT_MSG "\\\" \\\""
#define CODE_MSG "\\\" ÏîÄ¿ÒѾ­´¦ÀíÍê±Ï, ÈÎÎñºÅ: "
#define TYPE_MSG ", ´«µÝÀàÐÍ: "
#define RESULT_MSG ", ±¾´Î´«µÝ½á¹ûΪ: PLM¼ì²éδͨ¹ý¡£¾ßÌåÔ­Òò:\\n"
/**
* ´íÎóÐÅÏ¢·¢ËÍ·ÉÊé֪ͨ
* @param code ´«µÝµÄ±àºÅcode
* @param errMsg ´íÎóÐÅÏ¢
* @param wbsNo ÏîÄ¿µÄWBSºÅ
* @param userName Óû§Ãû³Æ
* @param projectName ÏîÄ¿Ãû³Æ
*/
void sendNotice(char *code, string errMsg, char *wbsNo, char *userName, char* projectName) {
/*string noticeMsg = "ÏîÄ¿BOM´«µÝÒì³£WBS:";
noticeMsg.append(wbsNo).append("\n").append(errMsg);*/
string search = "select userid,TO_CHAR(STARTTIME,'yyyy-MM-dd HH24:mi:ss'),transfer from CHINT_BOM_TO_SAP_SUM where code = '%s' ";
char selectRxfs[600];
string userNameStr = "wangll06";
string startTime, transfer;
//»ñÈ¡·¢ÆðµÄʱ¼ä
sprintf(selectRxfs, search.c_str(), code);
int outputColumn1 = 0, outputValueCount1 = 0;
char*** outputValue1 = NULL;
log("selectRecord2 ===> %s\n", selectRxfs);
QuerySQLNoInputParam(selectRxfs, &outputColumn1, &outputValueCount1, &outputValue1);
for (int num = 0; num < outputValueCount1; num++) {
userNameStr = outputValue1[num][0];
startTime = outputValue1[num][1];
transfer = outputValue1[num][2];
}
string noticeMsg = "¡¾PLMϵͳ×Ô¶¯Í¨Öª¡¿£º";
noticeMsg.append(startTime).append(" ")
.append(userName).append(SEND_MSG)
.append(wbsNo).append(SPLIT_MSG)
.append(projectName).append(CODE_MSG)
.append(code).append(TYPE_MSG).append(transfer).append(RESULT_MSG)
.append(errMsg);
string json = "{";
json.append("\"mobiles\":").append("[\"13588843438\",\"15295371103\"],");
json.append("\"emails\":").append("[");
json.append("\"").append(userNameStr).append("\"],");
json.append("\"sms\":").append("false,");
json.append("\"content\":\"").append(noticeMsg).append("\"");
json.append("}");
log(" ÏîÄ¿Êý¾Ý×éÖ¯´íÎóÐÅÏ¢ :%s \n", json.c_str());
string returnMsg = callFsHttpserver(json, "http://10.128.10.170/api/feishu/Message/sendMessages");
log(" ·ÉÊé֪ͨ½á¹û :%s \n", returnMsg.c_str());
}
/**
* ¸ù¾Ý²ú³ÉÆ·»ñÈ¡³ö³§±àºÅ ºÍµçÆøÉè¼ÆÏµÄBOM
* @param ccpVector ²ú³ÉÆ·µÄ¼¯ºÏ
* @param projectNo ÏîÄ¿±àºÅ
* @param groupName Óû§ËùÔÚµÄ×é
* @param wbs ÏîÄ¿µÄWBSºÅ
* @param now µ±Ç°Ê±¼ä
* @param errMsgBuf ´íÎóÐÅÏ¢
* @param code ´«µÝµÄ±àºÅcode
* @param transfer ´«µÝÀàÐÍ µçÆøÉè¼Æ
* @param userName Óû§Ãû³Æ
* @param projectName ÏîÄ¿Ãû³Æ
*/
void getCcpAndBom(vector<tag_t> ccpVector, char* projectNo, char* groupName, char* wbs,
char* now, string& errMsgBuf, char*code, char* transfer, char* userName, char* projectName) {
log("************** getCcpAndBom **************");
//¼Ç¼ÊÇ·ñÓÐÖØ¸´µÄ³ö³§±àºÅ
vector<tag_t> isCheck_FactoryNos;
//¼Ç¼²ú³ÉÆ· ¶ÔÓ¦µÄ µçÆøBOM¼¯ºÏ
map<tag_t, vector<tag_t>> cPart_schemes;
vector<_ns1__DT_USCOREFACTORY_USCORENUMBER_USCOREREQ_ITEMS_ITEM> list_Factorys;
for (int len = 0; len < ccpVector.size(); len++) {
vector<tag_t> elcBoms;
tag_t ccp = ccpVector[len], *factoryNos;
char* ccpUid;
ITK__convert_tag_to_uid(ccp, &ccpUid);
log("²ú³ÉÆ·UID:%s\n", ccpUid);
ITKCALL(AOM_refresh(ccp, FALSE));
int num = 0;
ITKCALL(AOM_ask_value_tags(ccp, "ZT2_FactoryNumber", &num, &factoryNos));
if (num == 0) {
cPart_schemes[ccp] = elcBoms;
}
else {
if (cPart_schemes.count(ccp) > 0) {
continue;
}//×éÖ¯´«µÝ³ö³§±àºÅµÄ
getFactoryNoList(projectNo, groupName, wbs, factoryNos, num, ccp, list_Factorys);
map<tag_t, vector<tag_t>> items2;
for (int i = 0; i < num; i++) {
tag_t factoryNo = factoryNos[i];
if (std::find(isCheck_FactoryNos.begin(), isCheck_FactoryNos.end(), factoryNo) != isCheck_FactoryNos.end())
continue;
isCheck_FactoryNos.push_back(factoryNos[i]);
int n_references = 0;
int* levels = 0;
tag_t* references_tag;
char** relation_type_name = NULL;
//ͨ¹ýÒýÓùØÏµ²éÕÒµ½±ä¸üµ¥
ITKCALL(WSOM_where_referenced(factoryNo, 1, &n_references, &levels, &references_tag, &relation_type_name));
//ÐÂÔöÂß¼­£¬»ñȡϲú³ÉÆ·µÄITEM·ÀÖ¹¶à¸ö°æ±¾Ó°Ïì
tag_t ccpItem;
char* ccpItemUid;
ITEM_ask_item_of_rev(ccp, &ccpItem);
ITK__convert_tag_to_uid(ccpItem, &ccpItemUid);
log("===========%d \n", n_references);
for (int i = 0; i < n_references; i++)
{
char* refType, *grpName, *useUid, *object_name, *zt2_SapState;
tag_t refTag = references_tag[i], group, item;
ITKCALL(AOM_ask_value_string(refTag, "object_type", &refType));
if (strcmp(refType, "Part Revision") != 0) {
continue;
}
ITK__convert_tag_to_uid(refTag, &useUid);
//Åжϲ»ÊDzú³ÉÆ· ²¢ÇÒͬһ×é
ITKCALL(AOM_ask_value_tag(refTag, "owning_group", &group));
ITKCALL(AOM_ask_value_string(group, "name", &grpName));
if (strcmp(grpName, groupName) != 0 || strcmp(ccpUid, useUid) == 0)
continue;
ITKCALL(AOM_UIF_ask_value(refTag, "object_name", &object_name));
ITKCALL(AOM_UIF_ask_value(refTag, "zt2_SapState", &zt2_SapState));
if (strcmp(zt2_SapState, "1") == 0 || strcmp(zt2_SapState, "δ´«") == 0) {
continue;
}
ITKCALL(ITEM_ask_item_of_rev(refTag, &item));
char* unitUid;
ITK__convert_tag_to_uid(item, &unitUid);
if (strcmp(unitUid, ccpItemUid) == 0) {
continue;
}
log("useUid %s object_name %s \n", useUid, object_name);
if (items2.count(item) > 0) {
items2[item].push_back(refTag);
}
else {
vector<tag_t> revs2;
revs2.push_back(refTag);
items2[item] = revs2;
}
}
}
vector<tag_t> rev2 = addLastRev(items2);
cPart_schemes[ccp] = rev2;
}
}
//´«µÝ³ö³§±àºÅµÄ¼Ç¼ÈÕÖ¾ÐÅÏ¢
log("³ö³§±àºÅÊýÁ¿ num :%zd\n", list_Factorys.size());
logCcbh(list_Factorys);
sendFactoryNo(list_Factorys);
string errMess;//¼Ç¼BOM´íÎóÐÅÏ¢
map<string, tag_t> material_revs; //¼Ç¼ÐèÒªÐÞ¸ÄÊôÐԵIJú³ÉÆ·
vector<tag_t> set_meops; //¼Ç¼ÐèÒª·¢²¼µÄ¹¤ÒÕ·Ïß
map<string, tag_t> gy_meops; //±ÜÃâÖØ¸´¹¤ÒÕ·Ïß
vector<tag_t> needTCM_meops;//ûÓÃÉÏ
map<tag_t, vector<tag_t>>::iterator it;
map<tag_t, vector<_ns1__DT_USCOREBOM_USCORES4_USCOREREQ_LIST>> scheme_boms;//¼Ç¼²ú³ÉÆ·¹ØÁªµÄBOM´«µÝµÄÐÅÏ¢
map<tag_t, vector<_ns1__DT_USCOREPROCESSROUTE_USCORES4_USCOREREQ_LIST>> process_boms;
vector<string> bomISExist;//¼Ç¼ÎïÁϱàÂë·ÀÖ¹ÖØ¸´
//Ãû³ÆÄ£ºýÆ¥Åä
map<tag_t, vector<tag_t>> rev_meops;
map<string, vector<string>> inCcpMap;//¼Ç¼µ¥Ôª¶ÔÓ¦µÄ²ú³ÉÆ·ÎïÁϱàÂë
for (it = cPart_schemes.begin(); it != cPart_schemes.end(); it++) {
tag_t s = it->first;
vector<tag_t> vectorRev = cPart_schemes[s];
log("vectorRev size ±éÀúBOM %zd\n", vectorRev.size());
readSchemesYH(vectorRev, s, scheme_boms, bomISExist, rev_meops, groupName, now, errMess,
material_revs, gy_meops, needTCM_meops, process_boms, transfer, inCcpMap);
log("scheme_boms %zd\n", scheme_boms.size());
}
if (errMess.length() > 0) {
errMsgBuf.append("BOMÒì³£:\\n").append(errMess);
//
string updateSum = "update CHINT_BOM_TO_SAP_SUM set \"DATASTATUS\" = 'Êý¾Ý¼ì²éÓÐÎÊÌâ' ,SAPRESULT = 'PLM¼ì²éδͨ¹ý',PLMRESULT = 'ÒÑ·¢ËÍ·ÉÊé֪ͨ' where code = '%s' ";
char selectRxfs[800];
string timel;
sprintf(selectRxfs, updateSum.c_str(), code);
log("selectRecord2 ===> %s\n", selectRxfs);
ExecuteSQLNoInputParam(selectRxfs);
ExecuteSQLNoInputParam((char*)"commit");
//´íÎóÊý¾ÝÒÑ·¢ËÍ·ÉÊéÌáÐÑ
sendNotice(code, errMsgBuf, wbs, userName, projectName);
return;
}
vector <_ns1__DT_USCOREPROCESSROUTE_USCORES4_USCOREREQ_LIST> proclist;
//vector< vector<_ns1__DT_USCOREBOM_USCOREPLM_USCOREREQ_LIST>> lists;
//vector< vector<_ns1__DT_USCOREPROCESSROUTE_USCORES4_USCOREREQ_LIST>> proclists;
vector<tag_t> isSends;
//vector<tag_t> errorParts;
//vector<tag_t> successParts;
map<tag_t, char*> isExistBom; //ÒѾ­´«µÝ¹ýµÄµ¥Ôª²»ÔÙ´«µÝ
map<string, char*> flmMap;
string sendErrMsg;
map<tag_t, vector<_ns1__DT_USCOREBOM_USCORES4_USCOREREQ_LIST>> mapList;
for (int i = 0; i < ccpVector.size(); i++) {
//list.clear();
proclist.clear();
vector<_ns1__DT_USCOREBOM_USCORES4_USCOREREQ_LIST> list; //¼Ç¼µ¥¸öµçÆøBOMÐÅÏ¢
tag_t ccp = ccpVector[i];
if (cPart_schemes.count(ccp) > 0) {
vector<tag_t> schemes = cPart_schemes[ccp];
string sendMsg;
log("schemes size %d \n", schemes.size());
//²ú³ÉƷûÓÐµçÆøµ¥Ôª¾ÍÌø¹ý
if (schemes.size() == 0) {
continue;
}
readBomInfoYH(ccp, schemes, list, proclist, isSends, "", material_revs,
groupName, now, scheme_boms, gy_meops, needTCM_meops, flmMap, isExistBom);
if (list.size() > 0) {
//logBomMsg(list);
mapList[ccp] = list;
}
if (proclist.size() > 0) {
logProcessMsg(proclist);// vector <_ns1__DT_USCOREPROCESSROUTE_USCORES4_USCOREREQ_LIST> proclist;
sendProcess(proclist, sendMsg);//proclists.push_back(proclist);//sendProcess(proclist);
}
}
}
/*if (errorParts.size() > 0) {
errMsgBuf.append("BOM´«µÝ·¢ÉúÒì³£:\n").append(sendErrMsg);
}
else {
string endBuff;
for (int j = 0; j < successParts.size(); j++) {
char* object_string;
AOM_ask_value_string(successParts[j], "object_string", &object_string);
endBuff.append(object_string).append("\n");
}
errMsgBuf.append("´«µÝ³É¹¦:\n").append(endBuff);
}*/
if (mapList.size() > 0) {
//´«µÝBOM
//logBomMsg(list);
//sendBom(list, sendMsg);
startSplitSend(groupName, mapList, code, wbs, inCcpMap);
//sendBom(list);
}
else {
string time1 = getPlmTime(code);
string updateSum = "update CHINT_BOM_TO_SAP_SUM set datastatus = 'ûÓкϷ¨BOM',organizationaltime = '%s',taskstauts = '×éÖ¯Íê³É',PLMFINISHTIME = SYSDATE where code = '%s' ";
char selectRxfs[800];
string timel;
sprintf(selectRxfs, updateSum.c_str(), time1.c_str(), code);
log("selectRecord2 ===> %s\n", selectRxfs);
ExecuteSQLNoInputParam(selectRxfs);
ExecuteSQLNoInputParam((char*)"commit");
}
}
//void startLog() {
// tag_t current_member = NULLTAG, current_user = NULLTAG;
// char* user_id = "";
//
// SA_ask_current_groupmember(&current_member);
// SA_ask_groupmember_user(current_member, &current_user);
// SA_ask_user_identifier2(current_user, &user_id);
//
// string userId = user_id;
// //»ñÈ¡µ±Ç°Ê±¼ä
// time_t now = time(0);
// tm* p = localtime(&now);
// char dateNow[128] = "";
// sprintf_s(dateNow, "%04d%02d%02d%02d%02d%02d", 1900 + p->tm_year, p->tm_mon + 1, p->tm_mday, p->tm_hour, p->tm_min, p->tm_sec);
// string dateString = dateNow;
// auto file_logger = basic_logger_mt("import_logger", "C:/logs/" + userId + "_" + dateString + ".log");
// set_default_logger(file_logger);
// log("begin connor_import_object");
//}