using FactorySystemCommon; using FactorySystemModel.EnumModel; using FactorySystemModel.RequestModel; using FactorySystemModel.ResponseModel; using FactorySystemModel.SqlSugarModel; using SqlSugar; using System; using System.Collections.Generic; using System.Linq; using static FactorySystemModel.EnumModel.Constant; namespace FactorySystemBll { public class MaterialTeamworkBll { /// /// 获取路线列表 /// public List GetList(MaterialTeamworkQuery mtq, out int totalNumber) { totalNumber = 0; var db = AppSettingsHelper.GetSqlSugar(); return db.Queryable((a, b) => new JoinQueryInfos(JoinType.Left, a.FAddUser == b.FID)) // 事项状态 .WhereIF(mtq.FState > 0 && mtq.FState != 99, a => a.FState == mtq.FState) // 物料号 .WhereIF(!string.IsNullOrEmpty(mtq.FMaterialCode), a => a.FMaterialCode.Equals(mtq.FMaterialCode)) // 类型 .WhereIF(mtq.FTeamworkType > 0, a => a.FTeamworkType == mtq.FTeamworkType) // 发起时间 .WhereIF(mtq.FDateRange != null && mtq.FDateRange[0] != "",a => a.FAddDate >= DateTime.Parse(mtq.FDateRange[0])) .WhereIF(mtq.FDateRange != null && mtq.FDateRange[1] != "", a => a.FAddDate <= DateTime.Parse(mtq.FDateRange[1])) // 责任人 //.WhereIF(mtq.FUserID != null, (a, b) => (',' + a.FUserID + ',').Contains(',' + mtq.FUserID + ',') || a.FAddUser.Equals(mtq.FUserID)) //// 协同 //.WhereIF(mtq.FMaterialTeamID > 0, (a, b) => a.FMaterialTeamID == mtq.FMaterialTeamID).OrderBy((a, b) => a.FID, OrderByType.Desc) .Select("a.* ,b.FName as FAddUserName").OrderBy((a) => a.FID, OrderByType.Desc) .ToPageList(mtq.FPageIndex, mtq.FPageSize, ref totalNumber); } /// /// 获取视图编辑列 /// 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 List> GetMaterialViewsByTeamId(int teamId, int teamType, int currUserId, out List materialId, bool byFactory = true) { TUser currUser = null; if (byFactory == true) currUser = BaseBll.GetTempModel(currUserId, "FFactoryID"); var db = AppSettingsHelper.GetSqlSugar(); List> viewList = new List>(); viewList = db.Queryable((a, b) => new JoinQueryInfos(JoinType.Inner, 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) .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; } /// /// 根据物料获取基本信息 /// public List GetMaterialInfoList(List materialIds, 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, FMaterialGroup = temp.FMaterialGroup, FMaterialType = temp.FMaterialType }; db.Insertable(info).IgnoreColumns(true).ExecuteCommand(); infoList.Add(info); } } 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 int InsertMaterialView(TFS_ViewMaterial view) { SqlSugarClient db = AppSettingsHelper.GetSqlSugar(); return db.Insertable(view).IgnoreColumns(true).ExecuteReturnIdentity(); } public int InsertMaterial(TFS_Material material) { SqlSugarClient db = AppSettingsHelper.GetSqlSugar(); return db.Insertable(material).IgnoreColumns(true).ExecuteReturnIdentity(); } public int UpdateMaterial(TFS_Material material) { SqlSugarClient db = AppSettingsHelper.GetSqlSugar(); return db.Updateable(material).IgnoreColumns(true).Where("FID").ExecuteCommand(); } public int UpdateMaterialViewById(List> viewList, int userId, int teamId) { int result = 0; SqlSugarClient db = AppSettingsHelper.GetSqlSugar(); if (viewList != null && viewList.Count > 0) { for(int i = 0; i < viewList.Count; i++) { viewList[i]["FEditUser"] = userId; viewList[i]["FEditDate"] = DateTime.Now; } // 更新视图 string sqlWhere = string.Format("FViewType={0} and FTeamID={1} and FTeamType={2}", 0, teamId, 1); result += db.Updateable(viewList).AS("TFS_ViewMaterial").WhereColumns("FMaterialID").Where(sqlWhere).ExecuteCommand(); result += UnionModifyData(viewList, "TFS_ViewMaterial", teamId, db, "FMaterialID"); } return result; } public int UpdateMaterialById(List> materialList, int userId, int teamId) { int result = 0; SqlSugarClient db = AppSettingsHelper.GetSqlSugar(); if (materialList != null && materialList.Count > 0) { for (int i = 0; i < materialList.Count; i++) { materialList[i]["FID"] = materialList[i]["FMaterialID"]; materialList[i]["FEditUser"] = userId; materialList[i]["FEditDate"] = DateTime.Now; 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); } return result; } public int UpdateMaterialInfoById(List> infoList, int userId, int teamId) { int result = 0; SqlSugarClient db = AppSettingsHelper.GetSqlSugar(); if (infoList != null && infoList.Count > 0) { for (int i = 0; i < infoList.Count; i++) { infoList[i]["FDataID"] = infoList[i]["FMaterialID"]; infoList[i]["FEditUser"] = userId; infoList[i]["FEditDate"] = DateTime.Now; 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; } public int UpdateMaterialView(TFS_ViewMaterial view) { SqlSugarClient db = AppSettingsHelper.GetSqlSugar(); return db.Updateable(view).IgnoreColumns(true).Where("FID").ExecuteCommand(); } 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; } public int CloseMaterialTeamwork(int teamId, int userId) { SqlSugarClient db = AppSettingsHelper.GetSqlSugar(); List teamworkList = db.Queryable().Where(s => s.FID == teamId && s.FState == 1).ToList(); int result = 0; if (teamworkList != null && teamworkList.Count > 0) { TFS_FMaterialTeamwork fmt = teamworkList[0]; fmt.FState = 2; fmt.FEditUser = userId; fmt.FEditDate = DateTime.Now; result = db.Updateable(fmt).IgnoreColumns(true).WhereColumns("FID").ExecuteCommand(); } return result; } } }