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