using System; using System.Collections.Generic; using System.Linq; using System.Media; using System.Reflection; using System.Web.UI.WebControls; using FactorySystemCommon; using FactorySystemModel.EnumModel; using FactorySystemModel.SqlSugarModel; using SqlSugar; namespace FactorySystemBll { public class ViewBll { /// /// 根据协同ID获取物料视图 /// public List> GetListByTeamId(int teamId, int viewType, int currUserId, out List materialId, out string FGuaranteePeriod, out string FStorageConditions, bool byFactory = true) { TUser currUser = null; FGuaranteePeriod = ""; FStorageConditions = ""; if (byFactory == true) currUser = BaseBll.GetTempModel(currUserId, "FFactoryID, FFactoryList"); var db = AppSettingsHelper.GetSqlSugar(); /** * 20230414 需求变更 * 新增物料分类视图获取逻辑 * 物料分类的viewType=10,此时,取所有下载的bomList中的视图,a.FViewType in (2,3,4,5) * 分别对应半成品视图、中间品视图、香基视图、原料视图 * 此处的viewType来自TBasicCode中FType=33时,的FRemark字段 * **/ List> viewList = new List>(); List viewTypes = new List { 2, 3, 4, 5 }; if (viewTypes.Contains(viewType)) { viewList = db.Queryable((a, b) => new JoinQueryInfos(JoinType.Inner, a.FMaterialID == b.FID)) .Where((a, b) => a.FTeamID == teamId) //.WhereIF(currUser != null, (a, b) => a.FFactoryID == currUser.FFactoryID) .WhereIF(currUser != null, (a, b) => currUser.FFactoryList.Contains(a.FFactoryID.ToString())) .WhereIF(viewType > 0, (a, b) => a.FViewType == viewType) .Select("distinct a.*,b.FTypeID1,b.FTypeID2,b.FK3Code,b.FK3Name,b.FK3ShortCode,b.FTestCode,b.FRelationCode,b.FRelationName,b.FSAPCode,b.FSAPDescription,b.FMaterialGroup,b.FMaterialType,b.FCustomerCode,b.FStoreHouse," + "b.FBomEntry,b.FLineHouse,b.FProductDesc,b.FWorkCenter,b.FCraftExplain,b.FIidentifier,b.FGuaranteePeriod,b.FBStorageConditions,b.FSafetyStock,b.FTriggerRatio,b.FMinAmount,b.FMaxAmount,b.FYield,b.FFixedLoss,b.FTheoryYield," + "b.FQualityTest1,b.FQualityTest2").ToDictionaryList(); } else if (viewType == 10) { viewList = db.Queryable((a, b) => new JoinQueryInfos(JoinType.Inner, a.FMaterialID == b.FID)) .Where((a, b) => a.FTeamID == teamId) //.WhereIF(currUser != null, (a, b) => a.FFactoryID == currUser.FFactoryID) .WhereIF(currUser != null, (a, b) => currUser.FFactoryList.Contains(a.FFactoryID.ToString())) .Select("distinct a.*,b.FTypeID1,b.FTypeID2,b.FK3Code,b.FK3Name,b.FK3ShortCode,b.FTestCode,b.FRelationCode,b.FRelationName,b.FSAPCode,b.FSAPDescription,b.FMaterialGroup,b.FMaterialType,b.FCustomerCode,b.FStoreHouse," + "b.FBomEntry,b.FLineHouse,b.FProductDesc,b.FWorkCenter,b.FCraftExplain,b.FIidentifier,b.FGuaranteePeriod,b.FBStorageConditions,b.FSafetyStock,b.FTriggerRatio,b.FMinAmount,b.FMaxAmount,b.FYield,b.FFixedLoss,b.FTheoryYield," + "b.FQualityTest1,b.FQualityTest2").ToDictionaryList(); TFS_FTeamwork teamWork = db.Queryable().Where(s => s.FID == teamId).First(); TFS_PackageMain packAge = db.Queryable().Where(s => s.FCode == teamWork.FPackCode).First(); if (packAge != null) { viewList[0].Remove("FBaseGrossWeight"); viewList[0].Add("FBaseGrossWeight", packAge.FGrossWeight); viewList[0].Remove("FBaseNetWeight"); viewList[0].Add("FBaseNetWeight", packAge.FNetWeight); viewList[0].Remove("FBaseSpecification"); viewList[0].Add("FBaseSpecification", packAge.FSpecs); viewList[0].Add("HalfCode", teamWork.FMaterialHalfIDs); } var FBaseMaterialDesc = viewList.GroupBy(s => s["FBaseMaterialDesc"]).Select(s => s.Key).ToList(); if (FBaseMaterialDesc.Count > 0) { viewList[0].Add("HalfDesc", FBaseMaterialDesc[0]); } } if (viewType == 1) { viewList = db.Queryable((a, b) => new JoinQueryInfos(JoinType.Inner, a.FMaterialID == b.FID)) .Where((a, b) => a.FTeamID == teamId) //.WhereIF(currUser != null, (a, b) => a.FFactoryID == currUser.FFactoryID) .WhereIF(currUser != null, (a, b) => currUser.FFactoryList.Contains(a.FFactoryID.ToString())) .WhereIF(viewType > 0, (a, b) => a.FViewType == 1) .Select("distinct a.*,b.FTypeID1,b.FTypeID2,b.FK3Code,b.FK3Name,b.FK3ShortCode,b.FTestCode,b.FRelationCode,b.FRelationName,b.FSAPCode,b.FSAPDescription,b.FMaterialGroup,b.FMaterialType,b.FCustomerCode,b.FStoreHouse," + "b.FBomEntry,b.FLineHouse,b.FProductDesc,b.FWorkCenter,b.FCraftExplain,b.FIidentifier,b.FGuaranteePeriod,b.FBStorageConditions,b.FSafetyStock,b.FTriggerRatio,b.FMinAmount,b.FMaxAmount,b.FYield,b.FFixedLoss,b.FTheoryYield," + "b.FQualityTest1,b.FQualityTest2").ToDictionaryList(); List Minfo = GetMaterialInfoList(viewList.GroupBy(s => s["FMaterialID"]).Select(s => int.Parse(s.Key.ToString())).ToList(), "", "", currUserId); if (Minfo.Count > 0) { FGuaranteePeriod = Minfo[0].FGuaranteePeriod; FStorageConditions = Minfo[0].FStorageConditions; } TFS_FTeamwork teamWork = db.Queryable().Where(s => s.FID == teamId).First(); TFS_PackageMain packAge = db.Queryable().Where(s => s.FCode == teamWork.FPackCode).First(); if (packAge != null) { viewList[0].Remove("FBaseGrossWeight"); viewList[0].Add("FBaseGrossWeight", packAge.FGrossWeight); viewList[0].Remove("FBaseNetWeight"); viewList[0].Add("FBaseNetWeight", packAge.FNetWeight); viewList[0].Remove("FBaseSpecification"); viewList[0].Add("FBaseSpecification", packAge.FSpecs); viewList[0].Add("HalfCode", teamWork.FMaterialHalfIDs); } var FBaseMaterialDesc = viewList.GroupBy(s => s["FBaseMaterialDesc"]).Select(s => s.Key).ToList(); if (FBaseMaterialDesc.Count > 0) { viewList[0].Add("HalfDesc", FBaseMaterialDesc[0]); } } materialId = viewList.GroupBy(s => s["FMaterialID"]).Select(s => int.Parse(s.Key.ToString())).ToList(); return viewList; } /// /// 根据协同ID获取物料视图 /// public List> GetHalfMaterialListByTeamId(int teamId, int viewType, int currUserId, out List materialId, out string FGuaranteePeriod, out string FStorageConditions, bool byFactory = true) { TUser currUser = null; FGuaranteePeriod = ""; FStorageConditions = ""; if (byFactory == true) currUser = BaseBll.GetTempModel(currUserId, "FFactoryID"); var db = AppSettingsHelper.GetSqlSugar(); /** * 20230414 需求变更 * 新增物料分类视图获取逻辑 * 物料分类的viewType=10,此时,取所有下载的bomList中的视图,a.FViewType in (2,3,4,5) * 分别对应半成品视图、中间品视图、香基视图、原料视图 * 此处的viewType来自TBasicCode中FType=33时,的FRemark字段 * **/ List> viewList = new List>(); List viewTypes = new List { 2, 3, 4, 5 }; if (viewTypes.Contains(viewType)) { viewList = db.Queryable((a, b) => new JoinQueryInfos(JoinType.Inner, a.FMaterialID == b.FID)) .Where((a, b) => a.FHalfMaterialTeamID == teamId) .WhereIF(currUser != null, (a, b) => a.FFactoryID == currUser.FFactoryID) .WhereIF(viewType > 0, (a, b) => a.FViewType == viewType) .Select("distinct a.*,b.FTypeID1,b.FTypeID2,b.FK3Code,b.FK3Name,b.FK3ShortCode,b.FTestCode,b.FRelationCode,b.FRelationName,b.FSAPCode,b.FSAPDescription,b.FMaterialGroup,b.FMaterialType,b.FCustomerCode,b.FStoreHouse," + "b.FBomEntry,b.FLineHouse,b.FProductDesc,b.FWorkCenter,b.FCraftExplain,b.FIidentifier,b.FGuaranteePeriod,b.FBStorageConditions,b.FSafetyStock,b.FTriggerRatio,b.FMinAmount,b.FMaxAmount,b.FYield,b.FFixedLoss,b.FTheoryYield," + "b.FQualityTest1,b.FQualityTest2").ToDictionaryList(); } else if (viewType == 10) { viewList = db.Queryable((a, b) => new JoinQueryInfos(JoinType.Inner, a.FMaterialID == b.FID)) .Where((a, b) => a.FTeamID == teamId) .WhereIF(currUser != null, (a, b) => a.FFactoryID == currUser.FFactoryID) .Select("distinct a.*,b.FTypeID1,b.FTypeID2,b.FK3Code,b.FK3Name,b.FK3ShortCode,b.FTestCode,b.FRelationCode,b.FRelationName,b.FSAPCode,b.FSAPDescription,b.FMaterialGroup,b.FMaterialType,b.FCustomerCode,b.FStoreHouse," + "b.FBomEntry,b.FLineHouse,b.FProductDesc,b.FWorkCenter,b.FCraftExplain,b.FIidentifier,b.FGuaranteePeriod,b.FBStorageConditions,b.FSafetyStock,b.FTriggerRatio,b.FMinAmount,b.FMaxAmount,b.FYield,b.FFixedLoss,b.FTheoryYield," + "b.FQualityTest1,b.FQualityTest2").ToDictionaryList(); TFS_HalfMaterialFTeamwork teamWork = db.Queryable().Where(s => s.FID == teamId).First(); TFS_PackageMain packAge = db.Queryable().Where(s => s.FCode == teamWork.FPackCode).First(); if (packAge != null) { viewList[0].Remove("FBaseGrossWeight"); viewList[0].Add("FBaseGrossWeight", packAge.FGrossWeight); viewList[0].Remove("FBaseNetWeight"); viewList[0].Add("FBaseNetWeight", packAge.FNetWeight); viewList[0].Remove("FBaseSpecification"); viewList[0].Add("FBaseSpecification", packAge.FSpecs); viewList[0].Add("HalfCode", teamWork.FMaterialHalfIDs); } var FBaseMaterialDesc = viewList.GroupBy(s => s["FBaseMaterialDesc"]).Select(s => s.Key).ToList(); if (FBaseMaterialDesc.Count > 0) { viewList[0].Add("HalfDesc", FBaseMaterialDesc[0]); } } if (viewType == 1) { viewList = db.Queryable((a, b) => new JoinQueryInfos(JoinType.Inner, a.FMaterialID == b.FID)) .Where((a, b) => a.FHalfMaterialTeamID == teamId) .WhereIF(currUser != null, (a, b) => a.FFactoryID == currUser.FFactoryID) .WhereIF(viewType > 0, (a, b) => a.FViewType == 2) .Select("distinct a.*,b.FTypeID1,b.FTypeID2,b.FK3Code,b.FK3Name,b.FK3ShortCode,b.FTestCode,b.FRelationCode,b.FRelationName,b.FSAPCode,b.FSAPDescription,b.FMaterialGroup,b.FMaterialType,b.FCustomerCode,b.FStoreHouse," + "b.FBomEntry,b.FLineHouse,b.FProductDesc,b.FWorkCenter,b.FCraftExplain,b.FIidentifier,b.FGuaranteePeriod,b.FBStorageConditions,b.FSafetyStock,b.FTriggerRatio,b.FMinAmount,b.FMaxAmount,b.FYield,b.FFixedLoss,b.FTheoryYield," + "b.FQualityTest1,b.FQualityTest2").ToDictionaryList(); List Minfo = GetMaterialInfoList(viewList.GroupBy(s => s["FMaterialID"]).Select(s => int.Parse(s.Key.ToString())).ToList(), "", "", currUserId); if (Minfo.Count > 0) { FGuaranteePeriod = Minfo[0].FGuaranteePeriod; FStorageConditions = Minfo[0].FStorageConditions; } TFS_HalfMaterialFTeamwork teamWork = db.Queryable().Where(s => s.FID == teamId).First(); TFS_PackageMain packAge = db.Queryable().Where(s => s.FCode == teamWork.FPackCode).First(); if (packAge != null) { viewList[0].Remove("FBaseGrossWeight"); viewList[0].Add("FBaseGrossWeight", packAge.FGrossWeight); viewList[0].Remove("FBaseNetWeight"); viewList[0].Add("FBaseNetWeight", packAge.FNetWeight); viewList[0].Remove("FBaseSpecification"); viewList[0].Add("FBaseSpecification", packAge.FSpecs); viewList[0].Add("HalfCode", teamWork.FMaterialHalfIDs); } var FBaseMaterialDesc = viewList.GroupBy(s => s["FBaseMaterialDesc"]).Select(s => s.Key).ToList(); if (FBaseMaterialDesc.Count > 0) { viewList[0].Add("HalfDesc", FBaseMaterialDesc[0]); } } materialId = viewList.GroupBy(s => s["FMaterialID"]).Select(s => int.Parse(s.Key.ToString())).ToList(); return viewList; } /// /// 根据协同ID获取物料视图 /// public List> GetMaterialViewsByTeamId(int teamId, int viewType, int teamType, int currUserId, out List materialId, out string FGuaranteePeriod, out string FStorageConditions, bool byFactory = true) { TUser currUser = null; FGuaranteePeriod = ""; FStorageConditions = ""; if (byFactory == true) currUser = BaseBll.GetTempModel(currUserId, "FFactoryID, FFactoryList"); var db = AppSettingsHelper.GetSqlSugar(); List> viewList = new List>(); if (viewType == 10) { viewList = db.Queryable((a, b) => new JoinQueryInfos(JoinType.Left, a.FMaterialID == b.FID)) .Where((a, b) => a.FTeamID == teamId) .Where((a, b) => a.FTeamType == teamType) //.WhereIF(currUser != null, (a, b) => a.FFactoryID == currUser.FFactoryID) .WhereIF(currUser != null, (a, b) => currUser.FFactoryList.Contains(a.FFactoryID.ToString())) .Select("distinct a.*,b.FTypeID1,b.FTypeID2,b.FK3Code,b.FK3Name,b.FK3ShortCode,b.FTestCode,b.FRelationCode,b.FRelationName,b.FSAPCode,b.FSAPDescription,b.FMaterialGroup,b.FMaterialType,b.FCustomerCode,b.FStoreHouse," + "b.FBomEntry,b.FLineHouse,b.FProductDesc,b.FWorkCenter,b.FCraftExplain,b.FIidentifier,b.FGuaranteePeriod,b.FBStorageConditions,b.FSafetyStock,b.FTriggerRatio,b.FMinAmount,b.FMaxAmount,b.FYield,b.FFixedLoss,b.FTheoryYield," + "b.FQualityTest1,b.FQualityTest2").ToDictionaryList(); } else { viewList = db.Queryable((a, b) => new JoinQueryInfos(JoinType.Left, a.FMaterialID == b.FID)) .Where((a, b) => a.FTeamID == teamId) .Where((a, b) => a.FTeamType == teamType) //.WhereIF(currUser != null, (a, b) => a.FFactoryID == currUser.FFactoryID) .WhereIF(currUser != null, (a, b) => currUser.FFactoryList.Contains(a.FFactoryID.ToString())) .WhereIF(viewType > 0, (a, b) => a.FViewType == viewType) .Select("distinct a.*,b.FTypeID1,b.FTypeID2,b.FK3Code,b.FK3Name,b.FK3ShortCode,b.FTestCode,b.FRelationCode,b.FRelationName,b.FSAPCode,b.FSAPDescription,b.FMaterialGroup,b.FMaterialType,b.FCustomerCode,b.FStoreHouse," + "b.FBomEntry,b.FLineHouse,b.FProductDesc,b.FWorkCenter,b.FCraftExplain,b.FIidentifier,b.FGuaranteePeriod,b.FBStorageConditions,b.FSafetyStock,b.FTriggerRatio,b.FMinAmount,b.FMaxAmount,b.FYield,b.FFixedLoss,b.FTheoryYield," + "b.FQualityTest1,b.FQualityTest2").ToDictionaryList(); } materialId = viewList.GroupBy(s => s["FMaterialID"]).Select(s => int.Parse(s.Key.ToString())).ToList(); return viewList; } /// /// 根据协同ID获取物料视图 /// public List> GetListByTeamId2(int teamId, int currUserId, out List materialId, out string FGuaranteePeriod, out string FStorageConditions, bool byFactory = true) { TUser currUser = null; FGuaranteePeriod = ""; FStorageConditions = ""; //if (byFactory == true) currUser = BaseBll.GetTempModel(currUserId, "FFactoryID"); var db = AppSettingsHelper.GetSqlSugar(); List> viewList = db.Queryable((a, b) => new JoinQueryInfos(JoinType.Inner, a.FMaterialID == b.FID)) .Where((a, b) => a.FTeamID == teamId) //.WhereIF(currUser != null, (a, b) => a.FFactoryID == currUser.FFactoryID) .Select("distinct a.*,b.FTypeID1,b.FTypeID2,b.FK3Code,b.FK3Name,b.FK3ShortCode").ToDictionaryList(); foreach (var item in viewList) { if (item["FViewType"].ToString() == "1") { int viewType = int.Parse(item["FViewType"].ToString()); if (viewType == 1) { List> viewList1 = db.Queryable((a, b) => new JoinQueryInfos(JoinType.Inner, a.FMaterialID == b.FID)) .Where((a, b) => a.FTeamID == teamId) .WhereIF(currUser != null, (a, b) => a.FFactoryID == currUser.FFactoryID) .WhereIF(viewType > 0, (a, b) => a.FViewType == 2) .Select("distinct a.*,b.FTypeID1,b.FTypeID2,b.FK3Code,b.FK3Name,b.FK3ShortCode").ToDictionaryList(); List Minfo = GetMaterialInfoList(viewList1.GroupBy(s => s["FMaterialID"]).Select(s => int.Parse(s.Key.ToString())).ToList(), "", "", currUserId); if (Minfo.Count > 0) { FGuaranteePeriod = Minfo[0].FGuaranteePeriod; FStorageConditions = Minfo[0].FStorageConditions; } TFS_FTeamwork teamWork = db.Queryable().Where(s => s.FID == teamId).First(); TFS_PackageMain packAge = db.Queryable().Where(s => s.FCode == teamWork.FPackCode).First(); if (packAge != null) { item.Remove("FBaseGrossWeight"); item.Add("FBaseGrossWeight", packAge.FGrossWeight); item.Remove("FBaseNetWeight"); item.Add("FBaseNetWeight", packAge.FNetWeight); item.Remove("FBaseSpecification"); item.Add("FBaseSpecification", packAge.FSpecs); item.Add("HalfCode", teamWork.FMaterialHalfIDs); } var FBaseMaterialDesc = viewList1.GroupBy(s => s["FBaseMaterialDesc"]).Select(s => s.Key).ToList(); if (FBaseMaterialDesc.Count > 0) { viewList[0].Add("HalfDesc", FBaseMaterialDesc[0]); } } } } materialId = viewList.GroupBy(s => s["FMaterialID"]).Select(s => int.Parse(s.Key.ToString())).ToList(); return viewList; } /// /// 根据替换物料TeamID获取物料视图 /// public List> GetListByHalfMaterialTeamId(int teamId, int currUserId, out List materialId, out string FGuaranteePeriod, out string FStorageConditions, bool byFactory = true) { TUser currUser = null; FGuaranteePeriod = ""; FStorageConditions = ""; //if (byFactory == true) currUser = BaseBll.GetTempModel(currUserId, "FFactoryID"); var db = AppSettingsHelper.GetSqlSugar(); List> viewList = db.Queryable((a, b) => new JoinQueryInfos(JoinType.Inner, a.FMaterialID == b.FID)) .Where((a, b) => a.FHalfMaterialTeamID == teamId) //.WhereIF(currUser != null, (a, b) => a.FFactoryID == currUser.FFactoryID) .Select("distinct a.*,b.FTypeID1,b.FTypeID2,b.FK3Code,b.FK3Name,b.FK3ShortCode").ToDictionaryList(); foreach (var item in viewList) { if (item["FViewType"].ToString() == "1") { int viewType = int.Parse(item["FViewType"].ToString()); if (viewType == 1) { List> viewList1 = db.Queryable((a, b) => new JoinQueryInfos(JoinType.Inner, a.FMaterialID == b.FID)) .Where((a, b) => a.FTeamID == teamId) .WhereIF(currUser != null, (a, b) => a.FFactoryID == currUser.FFactoryID) .WhereIF(viewType > 0, (a, b) => a.FViewType == 2) .Select("distinct a.*,b.FTypeID1,b.FTypeID2,b.FK3Code,b.FK3Name,b.FK3ShortCode").ToDictionaryList(); List Minfo = GetMaterialInfoList(viewList1.GroupBy(s => s["FMaterialID"]).Select(s => int.Parse(s.Key.ToString())).ToList(), "", "", currUserId); if (Minfo.Count > 0) { FGuaranteePeriod = Minfo[0].FGuaranteePeriod; FStorageConditions = Minfo[0].FStorageConditions; } TFS_HalfMaterialFTeamwork teamWork = db.Queryable().Where(s => s.FID == teamId).First(); TFS_PackageMain packAge = db.Queryable().Where(s => s.FCode == teamWork.FPackCode).First(); if (packAge != null) { item.Remove("FBaseGrossWeight"); item.Add("FBaseGrossWeight", packAge.FGrossWeight); item.Remove("FBaseNetWeight"); item.Add("FBaseNetWeight", packAge.FNetWeight); item.Remove("FBaseSpecification"); item.Add("FBaseSpecification", packAge.FSpecs); item.Add("HalfCode", teamWork.FMaterialHalfIDs); } var FBaseMaterialDesc = viewList1.GroupBy(s => s["FBaseMaterialDesc"]).Select(s => s.Key).ToList(); if (FBaseMaterialDesc.Count > 0) { viewList[0].Add("HalfDesc", FBaseMaterialDesc[0]); } } } } materialId = viewList.GroupBy(s => s["FMaterialID"]).Select(s => int.Parse(s.Key.ToString())).ToList(); return viewList; } /// /// 根据物料获取基本信息 /// public List GetMaterialInfoList(List materialIds, string FGuaranteePeriod, string FStorageConditions, int userId) { SqlSugarClient db = AppSettingsHelper.GetSqlSugar(); List infoList = db.Queryable().Where(s => materialIds.Contains(s.FDataID) && s.FType == 2).ToList(); if (infoList.Count != materialIds.Count) { materialIds = materialIds.Where(s => infoList.Find(f => f.FDataID == s) == null).ToList(); foreach (int materialId in materialIds) { TFS_Material temp = db.Queryable().Where(s => s.FID == materialId).First(); TFS_MaterialInfo info = new TFS_MaterialInfo() { FType = 2, FDataID = materialId, FAddUser = userId, FType2 = temp.FTypeID2, FMaterialGroup = temp.FMaterialGroup, FMaterialType = temp.FMaterialType, FTestCode= temp.FTestCode, FBaseTestCode=temp.FTestCode }; db.Insertable(info).IgnoreColumns(true).ExecuteCommand(); } } if (!FGuaranteePeriod.Equals("")) { infoList[0].FGuaranteePeriod = FGuaranteePeriod; } if (!FStorageConditions.Equals("")) { infoList[0].FStorageConditions = FStorageConditions; } return infoList; } /// /// 根据物料分类集合信息 /// public object GetMaterialTypeList() { return AppSettingsHelper.GetSqlSugar().Queryable().Where(s => s.FDeleted != 1 && s.FState == 1) .OrderBy("FDepth,FID").Select("FID,FName,FID FValue,FDepth,FParentID").ToList(); } /// /// 获取视图编辑列 /// public List> GetColumns() { List fieldList = AppSettingsHelper.GetSqlSugar().Queryable() .Where(it => it.FType == (int)Constant.ViewType.成品视图 || it.FType == (int)Constant.ViewType.物料主表) .OrderBy(it => it.FType, OrderByType.Desc) .OrderBy(it => it.FOrder) .ToList(); List> dicList = new List>(); foreach (var field in fieldList) { Dictionary dic = new Dictionary { { "id", field.FID } }; string[] fArr = field.FField.Split('.'); dic.Add("key", fArr.Last()); dic.Add("table", fArr.First()); string[] nArr = field.FName.Split('.'); dic.Add("title", nArr.Last()); dic.Add("category", nArr.First()); dic.Add("width", field.FWidth); dic.Add("align", field.FAlign); dic.Add("dataType", field.FDataType); if (field.FName.Equals("基本视图.大小/量纲(规格)") || field.FName.Equals("基本视图.毛重") || field.FName.Equals("基本视图.净重")) { dic.Add("fieldType", 7); } else { dic.Add("fieldType", field.FType); } dicList.Add(dic); } return dicList; } /// /// 保存视图编辑内容 /// /// public int UpdateBatchById(List> rows, int userId) { SqlSugarClient db = AppSettingsHelper.GetSqlSugar(); foreach (var row in rows) { db.Updateable(row).AS("TFS_ViewMaterial").WhereColumns("FMaterialID", "FTeamID", "FViewType").AddQueue(); } int result = db.SaveQueues(); if (!rows[0].ContainsKey("FTeamID") || !int.TryParse(rows[0]["FTeamID"].ToString(), out int teamId)) teamId = -1; if (!rows[0].ContainsKey("FViewType") || !int.TryParse(rows[0]["FViewType"].ToString(), out int taskType)) taskType = -1; if (teamId > 0 && taskType > 0) result += CheckTaskComplete(db, teamId, taskType, userId); return result; } /// /// 保存视图编辑内容2 /// public int UpdateBatchById2(List> viewList, List> materialList, List> infoList, int teamId, int viewType, int userId) { int result = 0; SqlSugarClient db = AppSettingsHelper.GetSqlSugar(); MaterialTypeBll materialTypeBll = new MaterialTypeBll(); if (viewList != null && viewList.Count > 0) { string sqlWhere = string.Format("FViewType={0} and FTeamID={1}", viewType, teamId); if (viewType == 10) { sqlWhere = string.Format("FViewType in (2, 3, 4, 5) and FTeamID={1}", viewType, teamId); } for (int i = 0; i < viewList.Count; i++) { //判断是否等于中间品 if (viewList[i]["FMRP1ProductType"].ToString() == "30") { TFS_MaterialType materialType = materialTypeBll.GetMaterialTypeByID(int.Parse(viewList[i]["FTypeID2"].ToString())).LastOrDefault(); if (materialType.FName.Contains("香基")) { if (viewList[i].ContainsKey("FViewType")) { viewList[i]["FViewType"] = (int)Constant.ViewType.香基视图; } else { viewList[i].Add("FViewType", (int)Constant.ViewType.香基视图); } } else { if (viewList[i].ContainsKey("FViewType")) { viewList[i]["FViewType"] = (int)Constant.ViewType.中间品视图; } else { viewList[i].Add("FViewType", (int)Constant.ViewType.中间品视图); } } } else if (viewList[i]["FMRP1ProductType"].ToString() == "10") { if (viewList[i].ContainsKey("FViewType")) { viewList[i]["FViewType"] = (int)Constant.ViewType.成品视图; } else { viewList[i].Add("FViewType", (int)Constant.ViewType.成品视图); } } else if (viewList[i]["FMRP1ProductType"].ToString() == "20") { if (viewList[i].ContainsKey("FViewType")) { viewList[i]["FViewType"] = (int)Constant.ViewType.半成品视图; } else { viewList[i].Add("FViewType", (int)Constant.ViewType.半成品视图); } } else if (viewList[i]["FMRP1ProductType"].ToString() == "40") { if (viewList[i].ContainsKey("FViewType")) { viewList[i]["FViewType"] = (int)Constant.ViewType.原料视图; } else { viewList[i].Add("FViewType", (int)Constant.ViewType.原料视图); } } if (viewList[i].ContainsKey("FTypeID2")) viewList[i].Remove("FTypeID2"); result += db.Updateable(viewList[i]).AS("TFS_ViewMaterial").WhereColumns("FMaterialID").ExecuteCommand(); } result += UnionModifyData(viewList, "TFS_ViewMaterial", teamId, db, "FMaterialID"); } if (materialList != null && materialList.Count > 0) { for (int i = 0; i < materialList.Count; i++) { materialList[i]["FID"] = materialList[i]["FMaterialID"]; materialList[i].Remove("FMaterialID"); if (materialList[i].TryGetValue("FK3Code", out object k3Code)) { if (materialList[i].ContainsKey("FK3ShortCode")) { materialList[i]["FK3ShortCode"] = k3Code.ToString().Split('.').Last(); } else { materialList[i].Add("FK3ShortCode", k3Code.ToString().Split('.').Last()); } } result += db.Updateable(materialList[i]).AS("TFS_Material").WhereColumns("FID").ExecuteCommand(); } result += UnionModifyData(materialList, "TFS_Material", teamId, db); } if (infoList != null && infoList.Count > 0) { for (int i = 0; i < infoList.Count; i++) { infoList[i]["FDataID"] = infoList[i]["FMaterialID"]; infoList[i].Remove("FMaterialID"); infoList[i].Add("FType", 2); result += db.Updateable(infoList[i]).AS("TFS_MaterialInfo").WhereColumns("FType", "FDataID").ExecuteCommand(); } result += UnionModifyData(infoList, "TFS_MaterialInfo", teamId, db, "FDataID"); } result += CheckTaskComplete(db, teamId, viewType, userId); return result; } public int UpdateMaterialViewById(List> viewList, List> materialList, List> infoList, int teamId, int viewType, int userId) { int result = 0; SqlSugarClient db = AppSettingsHelper.GetSqlSugar(); if (viewList != null && viewList.Count > 0) { string sqlWhere = string.Format("FViewType={0} and FTeamID={1}", viewType, teamId); result += db.Updateable(viewList).AS("TFS_ViewMaterial").WhereColumns("FMaterialID").Where(sqlWhere).ExecuteCommand(); result += UnionModifyData(viewList, "TFS_ViewMaterial", teamId, db, "FMaterialID"); } if (materialList != null && materialList.Count > 0) { for (int i = 0; i < materialList.Count; i++) { materialList[i]["FID"] = materialList[i]["FMaterialID"]; materialList[i].Remove("FMaterialID"); if (materialList[i].TryGetValue("FK3Code", out object k3Code)) { if (materialList[i].ContainsKey("FK3ShortCode")) { materialList[i]["FK3ShortCode"] = k3Code.ToString().Split('.').Last(); } else { materialList[i].Add("FK3ShortCode", k3Code.ToString().Split('.').Last()); } } } result += db.Updateable(materialList).AS("TFS_Material").WhereColumns("FID").ExecuteCommand(); result += UnionModifyData(materialList, "TFS_Material", teamId, db); } if (infoList != null && infoList.Count > 0) { for (int i = 0; i < infoList.Count; i++) { infoList[i]["FDataID"] = infoList[i]["FMaterialID"]; infoList[i].Remove("FMaterialID"); infoList[i].Add("FType", 2); } result += db.Updateable(infoList).AS("TFS_MaterialInfo").WhereColumns("FType", "FDataID").ExecuteCommand(); result += UnionModifyData(infoList, "TFS_MaterialInfo", teamId, db, "FDataID"); } return result; } private int CheckTaskComplete(SqlSugarClient db, int teamId, int taskType, int userId) { int result = 0; //List fields = db.Queryable((a, b) => new JoinQueryInfos(JoinType.Left, a.F2 == b.FID.ToString())) // .Where((a, b) => a.FType == 40 && b.FType == 1 && a.F1 == taskType.ToString()).Select((a, b) => b.FField).ToList(); //string okSql = string.Format("select count(1) from TFS_ViewMaterial where FTeamID={0} and FViewType={1} and(", teamId, taskType); //okSql += string.Join("='' or ", fields).Replace("TFS_ViewMaterial.", "") + "='')"; //string okResult = db.Ado.GetString(okSql); string okResult = ""; if (string.IsNullOrEmpty(okResult) || okResult == "0") { if (taskType != 10) { //视图类型+2是事项,除了包材 taskType += 2; if (taskType >= (int)Constant.TaskType.组编号申请) taskType = (int)Constant.TaskType.新包材视图; } else { taskType = 15; } string taskSql = ""; int proType = -2; string appSql = " and(select count(1) from TFS_Task t where t.FTeamID=a.FTeamID and t.FType in({0}) and t.FState!=2)=0"; switch (taskType) { case 3://成品视图事项:3→成品视图:2 proType = 2; break; case 4://新半成品视图:4 case 5://新中间品视图:5 case 6://新香基视图:6→新半成品/中间品/香基:3 proType = 3; appSql = string.Format(appSql, "4,5,6"); break; case 7://新原料视图:7→新原料视图:4 proType = 4; break; case 15://物料分类视图:15→物料分类视图:0 proType = 0; break; case 11://新包材视图:7→新原料视图:8 proType = 8; break; } if (taskType == 15 || proType > 0) taskSql = BaseBll.GetProcessSql(teamId, proType, "F3", 2, string.Format(appSql, taskType)); taskSql = BaseBll.GetTaskSql(-1, 2, teamId, taskType, -1, string.Format("','+a.FUserID+',' like ',%{0}%,'", userId)) + taskSql; result += db.Ado.ExecuteCommand(taskSql); TeamworkBll.ChangeTeamProcess(teamId); } return result; } /// /// 试验号变更-保存视图编辑内容3 /// public int UpdateBatchById3(List> viewList, List> materialList, List> infoList, int teamId, int viewType, int userId) { int result = 0; SqlSugarClient db = AppSettingsHelper.GetSqlSugar(); MaterialBll materialBll = new MaterialBll(); MaterialTypeBll materialTypeBll = new MaterialTypeBll(); if (viewList != null && viewList.Count > 0) { string sqlWhere = string.Format(" FHalfMaterialTeamID={1}", viewType, teamId); //if (viewType == 10) //{ // sqlWhere = string.Format("FViewType in (2, 3, 4, 5) and FHalfMaterialTeamID={1}", viewType, teamId); //} for (int i = 0; i < viewList.Count; i++) { //判断是否等于中间品 if (viewList[i].ContainsKey("FMRP1ProductType") &&viewList[i]["FMRP1ProductType"].ToString() == "30") { TFS_MaterialType materialType = materialTypeBll.GetMaterialTypeByID(int.Parse(materialList[i]["FTypeID2"].ToString())).LastOrDefault(); if (materialType.FName.Contains("香基")) { if (viewList[i].ContainsKey("FViewType")) { viewList[i]["FViewType"] = (int)Constant.ViewType.香基视图; } else { viewList[i].Add("FViewType", (int)Constant.ViewType.香基视图); } } else { if (viewList[i].ContainsKey("FViewType")) { viewList[i]["FViewType"] = (int)Constant.ViewType.中间品视图; } else { viewList[i].Add("FViewType", (int)Constant.ViewType.中间品视图); } } } else { switch (viewList[i]["FMRP1ProductType"].ToString()) { case "10": if (viewList[i].ContainsKey("FViewType")) { viewList[i]["FViewType"] = (int)Constant.ViewType.成品视图; } else { viewList[i].Add("FViewType", (int)Constant.ViewType.成品视图); } break; case "20": if (viewList[i].ContainsKey("FViewType")) { viewList[i]["FViewType"] = (int)Constant.ViewType.半成品视图; } else { viewList[i].Add("FViewType", (int)Constant.ViewType.半成品视图); } break; case "40": if (viewList[i].ContainsKey("FViewType")) { viewList[i]["FViewType"] = (int)Constant.ViewType.原料视图; } else { viewList[i].Add("FViewType", (int)Constant.ViewType.原料视图); } break; default: if (viewList[i].ContainsKey("FViewType")) { viewList[i]["FViewType"] = -1; } else { viewList[i].Add("FViewType", -1); } break; } } } result += db.Updateable(viewList).AS("TFS_ViewMaterial").WhereColumns("FMaterialID").Where(sqlWhere).ExecuteCommand(); result += HalfMaterialUnionModifyData(viewList, "TFS_ViewMaterial", teamId, db, "FMaterialID"); } if (materialList != null && materialList.Count > 0) { for (int i = 0; i < materialList.Count; i++) { materialList[i]["FID"] = materialList[i]["FMaterialID"]; materialList[i].Remove("FMaterialID"); if (materialList[i].TryGetValue("FK3Code", out object k3Code)) { if (materialList[i].ContainsKey("FK3ShortCode")) { materialList[i]["FK3ShortCode"] = k3Code.ToString().Split('.').Last(); } else { materialList[i].Add("FK3ShortCode", k3Code.ToString().Split('.').Last()); } } if (materialList[i].ContainsKey("FName")) { materialList[i]["FName"] = viewList[i]["FBaseMaterialDesc"]; } else { materialList[i].Add("FName", viewList[i]["FBaseMaterialDesc"]); } if (materialList[i].ContainsKey("FDesc")) { materialList[i]["FDesc"] = viewList[i]["FBaseMaterialDesc"]; } else { materialList[i].Add("FDesc", viewList[i]["FBaseMaterialDesc"]); } if (materialList[i].ContainsKey("FType")) { materialList[i]["FType"] = viewList[i]["FMRP1ProductType"]; } else { materialList[i].Add("FType", viewList[i]["FMRP1ProductType"]); } if (materialList[i].ContainsKey("FCode")) { materialList[i]["FCode"] = viewList[i]["FBaseMaterialCode"]; } else { materialList[i].Add("FCode", viewList[i]["FBaseMaterialCode"]); } result += db.Updateable(materialList[i]).AS("TFS_Material").WhereColumns("FID").ExecuteCommand(); } result += HalfMaterialUnionModifyData(materialList, "TFS_Material", teamId, db); } if (infoList != null && infoList.Count > 0) { for (int i = 0; i < infoList.Count; i++) { if (infoList[i].ContainsKey("FTestCode")) { if (materialList[i].ContainsKey("FTestCode")) { infoList[i]["FTestCode"] = materialList[i]["FTestCode"].ToString(); } } else { if (materialList[i].ContainsKey("FTestCode")) { infoList[i].Add("FTestCode", materialList[i]["FTestCode"].ToString()); } } if (infoList[i].ContainsKey("FBaseTestCode")) { if (viewList[i].ContainsKey("FBaseTestCode")) { infoList[i]["FBaseTestCode"] = viewList[i]["FBaseTestCode"].ToString(); } } else { if (viewList[i].ContainsKey("FBaseTestCode")) { infoList[i].Add("FBaseTestCode", viewList[i]["FBaseTestCode"].ToString()); } } infoList[i]["FDataID"] = infoList[i]["FMaterialID"]; infoList[i].Remove("FMaterialID"); infoList[i].Add("FType", 2); infoList[i].Add("FType2", int.Parse(materialList[i]["FTypeID2"].ToString())); result += db.Updateable(infoList[i]).AS("TFS_MaterialInfo").WhereColumns("FType", "FDataID").ExecuteCommand(); } result += UnionModifyData(infoList, "TFS_MaterialInfo", teamId, db, "FDataID"); } //result += CheckTaskComplete2(db, teamId, viewType, userId); return result; } /// /// 试验号变更- /// /// /// /// /// /// private int CheckTaskComplete2(SqlSugarClient db, int teamId, int taskType, int userId) { int result = 0; //List fields = db.Queryable((a, b) => new JoinQueryInfos(JoinType.Left, a.F2 == b.FID.ToString())) // .Where((a, b) => a.FType == 40 && b.FType == 1 && a.F1 == taskType.ToString()).Select((a, b) => b.FField).ToList(); //string okSql = string.Format("select count(1) from TFS_ViewMaterial where FTeamID={0} and FViewType={1} and(", teamId, taskType); //okSql += string.Join("='' or ", fields).Replace("TFS_ViewMaterial.", "") + "='')"; //string okResult = db.Ado.GetString(okSql); string okResult = ""; if (string.IsNullOrEmpty(okResult) || okResult == "0") { if (taskType != 10) { //视图类型+2是事项,除了包材 taskType += 2; if (taskType >= (int)Constant.TaskType.组编号申请) taskType = (int)Constant.TaskType.新包材视图; } else { taskType = 15; } string taskSql = ""; int proType = -2; string appSql = " and(select count(1) from TFS_HalfMaterialTask t where t.FTeamID=a.FTeamID and t.FType in({0}) and t.FState!=2)=0"; switch (taskType) { case 3://成品视图事项:3→成品视图:2 proType = 2; break; case 4://新半成品视图:4 case 5://新中间品视图:5 case 6://新香基视图:6→新半成品/中间品/香基:3 proType = 3; appSql = string.Format(appSql, "4,5,6"); break; case 7://新原料视图:7→新原料视图:4 proType = 4; break; case 15://物料分类视图:15→物料分类视图:0 proType = 0; break; case 11://新包材视图:7→新原料视图:8 proType = 8; break; } if (taskType == 15 || proType > 0) taskSql = BaseBll.GetProcessSql2(teamId, proType, "F3", 2, string.Format(appSql, taskType)); taskSql = BaseBll.GetTaskSql2(-1, 2, teamId, taskType, -1, string.Format("','+a.FUserID+',' like ',%{0}%,'", userId)) + taskSql; result += db.Ado.ExecuteCommand(taskSql); HalfMaterialTeamworkBll.ChangeTeamProcess(teamId); } return result; } /// /// 联合修改 /// private int UnionModifyData(List> dataList, string srcTable, int teamId, SqlSugarClient db = null, string colName = "FID") { int result = 0; if (dataList != null && dataList.Count > 0) { if (db == null) db = AppSettingsHelper.GetSqlSugar(); List unionList = db.Queryable().Where(s => s.FDeleted != 1 && s.FTableOriginal == srcTable).ToList(); if (unionList.Count > 0) { List sqlList = new List() { "update {0} set {0}.{1}={2}.{3} from {0} left join {2} on {4} where {2}.{5}='{6}' {7}" }; foreach (Dictionary data in dataList) { foreach (TFS_UnionModify union in unionList) { if (data.TryGetValue(union.FColumnOriginal, out object srcVal)) { string sqlWhere = ""; if (union.FTableTarget == "TFS_ViewMaterial" || union.FTableOriginal == "TFS_ViewMaterial") { sqlWhere = " and TFS_ViewMaterial.FTeamID=" + teamId; } sqlList.Add(string.Format(sqlList[0], union.FTableTarget, union.FColumnTarget, union.FTableOriginal, union.FColumnOriginal, union.FUnionCondition, colName, data[colName], sqlWhere)); } } } sqlList.RemoveAt(0); if (sqlList.Count > 0) { string updateSql = string.Join(";", sqlList); try { result = db.Ado.ExecuteCommand(updateSql); } catch (Exception) { } } } } return result; } private int HalfMaterialUnionModifyData(List> dataList, string srcTable, int teamId, SqlSugarClient db = null, string colName = "FID") { int result = 0; if (dataList != null && dataList.Count > 0) { if (db == null) db = AppSettingsHelper.GetSqlSugar(); List unionList = db.Queryable().Where(s => s.FDeleted != 1 && s.FTableOriginal == srcTable).ToList(); if (unionList.Count > 0) { List sqlList = new List() { "update {0} set {0}.{1}={2}.{3} from {0} left join {2} on {4} where {2}.{5}='{6}' {7}" }; foreach (Dictionary data in dataList) { foreach (TFS_UnionModify union in unionList) { if (data.TryGetValue(union.FColumnOriginal, out object srcVal)) { string sqlWhere = ""; if (union.FTableTarget == "TFS_ViewMaterial" || union.FTableOriginal == "TFS_ViewMaterial") { sqlWhere = " and TFS_ViewMaterial.FHalfMaterialTeamID=" + teamId; } sqlList.Add(string.Format(sqlList[0], union.FTableTarget, union.FColumnTarget, union.FTableOriginal, union.FColumnOriginal, union.FUnionCondition, colName, data[colName], sqlWhere)); } } } sqlList.RemoveAt(0); if (sqlList.Count > 0) { string updateSql = string.Join(";", sqlList); try { result = db.Ado.ExecuteCommand(updateSql); } catch (Exception) { } } } } return result; } public object EexcSql(int tempId = 0) { string sql = ""; SqlSugarClient db = AppSettingsHelper.GetSqlSugar(); if (tempId > 0) { sql = string.Format("SELECT FMaterialFormulaIDs FROM TFS_FTeamwork WHERE FID='{0}'", tempId); var result= db.Ado.SqlQuery(sql); if (string.IsNullOrWhiteSpace(result[0])) { return null; } sql = string.Format(@"SELECT DISTINCT a.*, c.FName AS 'FUserName' FROM TFS_Material AS a LEFT JOIN TUser AS c ON a.FEditUser= c.FID WHERE a.FID IN({0});", result[0]); } else { sql = string.Format(@"SELECT DISTINCT b.*,c.FName AS 'FUserName' FROM TFS_ViewMaterial AS a LEFT JOIN TFS_Material AS b ON a.FMaterialID=b.FID LEFT JOIN TUser AS c ON b.FEditUser=c.FID "); } return db.Ado.SqlQuery(sql); } public int InsertMaterialView(TFS_ViewMaterial view) { SqlSugarClient db = AppSettingsHelper.GetSqlSugar(); return db.Insertable(view).IgnoreColumns(true).ExecuteReturnIdentity(); } } }