@ -375,7 +375,7 @@ namespace FactorySystemApi.Controllers
TFS_Formula formula = formulas [ 0 ] ;
TFS_Formula formula = formulas [ 0 ] ;
OAService oAService = new OAService ( ) ;
OAService oAService = new OAService ( ) ;
string bomListStr = "" ;
string bomListStr = "" ;
Dictionary < string , object > bomResult = null ;
List < Specifications > specifList = new List < Specifications > ( ) { new Specifications ( ) } ;
List < Specifications > specifList = new List < Specifications > ( ) { new Specifications ( ) } ;
specifList [ 0 ] . SP = formula . FPlmCode ;
specifList [ 0 ] . SP = formula . FPlmCode ;
@ -392,88 +392,315 @@ namespace FactorySystemApi.Controllers
if ( restResult ! = null & & restResult . data ! = null )
if ( restResult ! = null & & restResult . data ! = null )
{
{
List < BomModel > bomList = JsonConvert . DeserializeObject < List < BomModel > > ( restResult . data . ToString ( ) ) ;
List < BomModel > bomList = JsonConvert . DeserializeObject < List < BomModel > > ( restResult . data . ToString ( ) ) ;
string materialCodes = "," ;
string testCodes = "," ;
//string materialCodes = ",";
//string testCodes = ",";
if ( bomList ! = null & & bomList . Count > 0 )
if ( bomList ! = null & & bomList . Count > 0 )
{
{
List < BomModel > subBomList = bomList [ 0 ] . Specifications ;
bomResult = CheckBomMaterial ( bomList , 0 , new Random ( ) ) ;
//List<BomModel> subBomList = bomList[0].Specifications;
//if (subBomList != null && subBomList.Count > 0)
//{
// foreach(BomModel bom in subBomList)
// {
// string bomType = bom.Type.ToLower(); // 转小写
// if (bomType == "a" || bomType == "f")
// {
// bom.ABomType = "20";
// }
// else if (bomType == "b" || bomType == "bb" || bomType == "i" || bomType == "iz")
// {
// bom.ABomType = "30";
// }
// else
// {
// bom.ABomType = "40";
// }
// if ("40".Equals(bom.ABomType))
// {
// bom.ASapCode = bom.SP_VALUE;
// materialCodes = materialCodes + bom.ASapCode + ",";
// }
// else
// {
// bom.ATestCode = bom.SP_VALUE;
// testCodes = testCodes + bom.ATestCode + ",";
// }
// }
// List<TFS_ViewMaterial> viewsByMaterialCodes = FormulaBll.GetViewByMaterialCodes(materialCodes);
// List<TFS_ViewMaterial> viewsByTestCodes = FormulaBll.GetViewByTestCodes(testCodes);
// foreach (BomModel bom in subBomList)
// {
// if ("40".Equals(bom.ABomType))
// {
// if (viewsByMaterialCodes != null && viewsByMaterialCodes.Count > 0)
// {
// TFS_ViewMaterial view = viewsByMaterialCodes.Find(v => v.FBaseMaterialCode.Equals(bom.ASapCode));
// if (view != null)
// {
// bom.AMaterialCode = view.FSaleOldMaterialCode;
// }
// }
// }
// else
// {
// if (viewsByTestCodes != null && viewsByTestCodes.Count > 0)
// {
// TFS_ViewMaterial view = viewsByTestCodes.Find(v => v.FBaseTestCode.Equals(bom.ATestCode));
// if (view != null)
// {
// bom.AMaterialCode = view.FSaleOldMaterialCode;
// bom.ASapCode = view.FBaseMaterialCode;
// }
// }
// }
// }
// int formulaApplyHistoryId = FormulaBll.AddFormulaApplyHistroy(formula, user.FName, user.FID);
// resultObj.Add("applyHistoryId", formulaApplyHistoryId);
// resultObj.Add("bomList", bomList);
// bomListStr = JsonConvert.SerializeObject(resultObj);
//}
}
}
apiResult . Data = bomResult ;
}
} , apiResult , Request ) ;
}
/// <summary>
/// 递归梳理BOM
/// </summary>
/// <param name="dataList">需要解析的集合</param>
/// <param name="materLevel">层级</param>
/// <param name="random">内部定义会有问题,需要外部传入</param>
/// <param name="parentId">父子级关系ID</param>
private Dictionary < string , object > CheckBomMaterial ( List < BomModel > dataList , int materLevel , Random random , int parentId = - 1 )
{
List < TFS_Material > mateList = new List < TFS_Material > ( ) ;
List < TFS_ViewMaterial > viewList = new List < TFS_ViewMaterial > ( ) ;
List < TFS_Formula > formulaList = new List < TFS_Formula > ( ) ;
string ids1 = "" , ids2 = "" ; //需求变更ids2弃用
string materialCodes = "," ;
string testCodes = "," ;
if ( dataList ! = null & & dataList . Count > 0 )
{
foreach ( BomModel item in dataList )
{
if ( ! string . IsNullOrWhiteSpace ( item . SP ) )
{
item . Code = item . SP ;
}
if ( ! string . IsNullOrWhiteSpace ( item . SP_Version ) )
{
item . Version = item . SP_Version ;
}
if ( ! string . IsNullOrWhiteSpace ( item . SP_VALUE ) )
{
item . TestNO = item . SP_VALUE ;
}
if ( subBomList ! = null & & subBomList . Count > 0 )
int dataId = random . Next ( 1 , 99 ) * random . Next ( 1 , 99 ) ;
dataId + = random . Next ( 10 , 99 ) * random . Next ( 10 , 99 ) * 2 ;
dataId + = random . Next ( 1 , 99 ) * random . Next ( 1 , 99 ) * 10 ;
TFS_Material material = new TFS_Material ( )
{
{
foreach ( BomModel bom in subBomList )
FID = DateTime . Now . DayOfYear * 10 + dataId ,
FPlmCode = item . Code ,
FName = item . Name ,
//FCode = item.Code,
FType = item . Type . ToLower ( ) ,
//FTestCode = item.TestNO,
FVersionCode = item . Version ,
FParentID = parentId
} ;
TFS_ViewMaterial view = new TFS_ViewMaterial ( )
{
{
string bomType = bom . Type . ToLower ( ) ; // 转小写
//FBaseFameCode = "",
if ( bomType = = "a" | | bomType = = "f" )
//FBaseMaterialCode = material.FCode,
//FBaseTestCode = material.FTestCode,
FExtraQuantity = item . Quantity ,
FBaseMaterialDesc = material . FName ,
FLevel = materLevel ,
FBomMaterialID = material . FID
} ;
if ( material . FType = = "a" | | material . FType = = "f" )
{
{
bom . ABomType = "20" ;
material . F Type = "20" ;
}
}
else if ( bomType = = "b" | | bomType = = "bb" | | bomType = = "i" | | bomType = = "iz" )
else if ( material. F Type = = "b" | | material. F Type = = "bb" | | material. F Type = = "i" | | material. F Type = = "iz" )
{
{
bom . ABomType = "30" ;
material . F Type = "30" ;
}
}
else
else
{
{
bom . ABomType = "40" ;
material . F Type = "40" ;
}
}
if ( "40" . Equals ( bom . ABomType ) )
if ( "40" . Equals ( material. F Type) )
{
{
bom . ASapCode = bom . SP_VALUE ;
item . ASapCode = item . SP_VALUE ;
materialCodes = materialCodes + bom . ASapCode + "," ;
materialCodes = materialCodes + item . ASapCode + "," ;
item . ATestCode = "" ;
}
}
else
else
{
{
bom . ATestCode = bom . SP_VALUE ;
item . ATestCode = item . SP_VALUE ;
testCodes = testCodes + bom . ATestCode + "," ;
testCodes = testCodes + item . ATestCode + "," ;
}
}
}
List < TFS_ViewMaterial > viewsByMaterialCodes = FormulaBll . GetViewByMaterialCodes ( materialCodes ) ;
List < TFS_ViewMaterial > viewsByMaterialCodes = FormulaBll . GetViewByMaterialCodes ( materialCodes ) ;
List < TFS_ViewMaterial > viewsByTestCodes = FormulaBll . GetViewByTestCodes ( testCodes ) ;
List < TFS_ViewMaterial > viewsByTestCodes = FormulaBll . GetViewByTestCodes ( testCodes ) ;
foreach ( BomModel bom in subBomList )
MaterialBll materialBll = new MaterialBll ( ) ;
{
TFS_Material tFS_Material = materialBll . GetMaterialListByFTestCode ( item . SP_VALUE ) . LastOrDefault ( ) ;
if ( "40" . Equals ( bom . ABomType ) )
{
if ( "40" . Equals ( material . FType ) )
if ( viewsByMaterialCodes ! = null & & viewsByMaterialCodes . Count > 0 )
{
{
TFS_ViewMaterial view = viewsByMaterialCodes . Find ( v = > v . FBaseMaterialCode . Equals ( bom . ASapCode ) ) ;
item . AMaterialCode = item . SP_VALUE ;
if ( view ! = null )
if ( tFS_Material ! = null )
{
{
bom . AMaterialCode = view . FSaleOldMaterialCode ;
item . ASapCode = tFS_Material . Old Code;
}
}
else
{
item . ASapCode = "" ;
}
}
}
}
else
else
{
{
if ( viewsByTestCodes ! = null & & viewsByTestCodes . Count > 0 )
if ( viewsByTestCodes ! = null & & viewsByTestCodes . Count > 0 )
{
{
TFS_ViewMaterial view = viewsByTestCodes . Find ( v = > v . FBaseTestCode . Equals ( bom . ATestCode ) ) ;
//TFS_ViewMaterial view2 = viewsByTestCodes.Find(v => v.FBaseTestCode.Equals(item.ATestCode));
if ( view ! = null )
if ( tFS_Material ! = null )
{
{
bom . AMaterialCode = view . FSaleOldMaterialCode ;
item . AMaterialCode = tFS_Material . FCode ;
bom . ASapCode = view . FBaseMaterialCode ;
item . ASapCode = tFS_Material . OldCode ;
//item.AMaterialCode = view2.FSaleOldMaterialCode;
//item.ASapCode = view2.FBaseMaterialCode;
}
}
else
{
item . ASapCode = "" ;
}
}
}
}
}
}
item . ABomType = "kg" ;
int formulaApplyHistoryId = FormulaBll . AddFormulaApplyHistroy ( formula , user . FName , user . FID ) ;
if ( item . Name . Contains ( "@" ) )
{
resultObj . Add ( "applyHistoryId" , formulaApplyHistoryId ) ;
item . EnName = "甜味" ;
resultObj . Add ( "bomList" , bomList ) ;
bomListStr = JsonConvert . SerializeObject ( resultObj ) ;
}
}
else if ( item . Name . Contains ( "□" ) )
{
item . EnName = "咸味" ;
}
}
else {
item . EnName = "" ;
}
}
apiResult . Data = bomListStr ;
if ( materLevel = = 0 )
{
material . FType = "20" ;
ids2 = material . FID + "" ;
}
if ( material . FType = = "40" )
{
material . FCode = item . TestNO ;
//material.FPlmCode = "";
}
int . TryParse ( material . FType , out int mType ) ;
if ( materLevel = = 1 ) ids1 + = material . FID + "," ;
switch ( mType )
{
case ( int ) Constant . MaterialType . 产 成 品 :
material . FTestCode = item . TestNO ;
view . FBaseTestCode = item . TestNO ;
view . FViewType = 1 ;
break ;
case ( int ) Constant . MaterialType . 半 成 品 :
view . FViewType = ( int ) Constant . ViewType . 半 成 品 视 图 ;
material . FTestCode = item . TestNO ;
view . FBaseTestCode = item . TestNO ;
break ;
case ( int ) Constant . MaterialType . 中 间 品 :
view . FViewType = material . FName . Contains ( "香基" ) ? ( int ) Constant . ViewType . 香 基 视 图 : ( int ) Constant . ViewType . 中 间 品 视 图 ;
material . FTestCode = item . TestNO ;
view . FBaseTestCode = item . TestNO ;
break ;
case ( int ) Constant . MaterialType . 原 辅 料 :
view . FViewType = ( int ) Constant . ViewType . 原 料 视 图 ;
view . FBaseMaterialCode = material . FCode ;
//默认值不同
view . FPurchaseCompany = "kg" ;
view . FPurchaseCompanyCount = "1" ;
view . FPurchaseBaseCompanyCount = "1000" ;
view . FSaleAccountSettingGroup = "15" ;
view . FStorageTotalShelfLife = "7300" ;
view . FMRP2ExternalStoragePlace = "1000" ;
view . FPlanUnlimitedOverDelivery = "" ;
view . FAccountPriceControl = "V" ;
view . FAccountPriceDetermine = "2" ;
view . FAccountAccessType = "1000" ;
view . FAccountSaleOrderInventory = "1010" ;
break ;
}
}
} , apiResult , Request ) ;
mateList . Add ( material ) ;
viewList . Add ( view ) ;
if ( item . Specifications ! = null & & item . Specifications . Count > 0 )
{
Dictionary < string , object > childData = CheckBomMaterial ( item . Specifications , materLevel + 1 , random , material . FID ) ;
if ( materLevel > = 1 )
{
formulaList . Add ( new TFS_Formula ( )
{
FID = - 1 ,
FName = material . FName ,
FType = material . FType ,
FTestCode = material . FTestCode ,
FVersionCode = material . FVersionCode ,
FPlmCode = string . IsNullOrEmpty ( material . FPlmCode ) ? material . FCode : material . FPlmCode
} ) ;
}
}
mateList . AddRange ( ( List < TFS_Material > ) childData [ "mateList" ] ) ;
viewList . AddRange ( ( List < TFS_ViewMaterial > ) childData [ "viewList" ] ) ;
formulaList . AddRange ( ( List < TFS_Formula > ) childData [ "formulaList" ] ) ;
ids1 = ids1 . Trim ( ',' ) + "," + childData [ "formulaIds" ] + "," ;
ids2 = ids2 . Trim ( ',' ) + "," + childData [ "halfIds" ] + "," ;
}
}
}
return new Dictionary < string , object >
{
{ "mateList" , mateList } ,
{ "viewList" , viewList } ,
{ "formulaList" , formulaList } ,
{ "formulaIds" , ids1 . Trim ( ',' ) } ,
{ "halfIds" , ids2 . Trim ( ',' ) } ,
{ "bomList" , dataList }
} ;
}
/// <summary>
/// <summary>
/// 根据物料号列表获取物料列表
/// 根据物料号列表获取物料列表