From a603c1d45b3ead37aeb5cfc4851bb68d87e3096e Mon Sep 17 00:00:00 2001 From: leo <10200039@qq.com> Date: Sat, 6 May 2023 15:09:47 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=89=A9=E6=96=99=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E8=B7=AF=E7=BA=BF=E7=9A=84=E6=9D=83=E9=99=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/MaterialTeamworkController.cs | 290 ++++++++++-------- FactorySystemBll/MaterialTaskBll.cs | 67 ++-- FactorySystemBll/MaterialTeamworkBll.cs | 2 +- FactorySystemBll/UserBll.cs | 4 +- 4 files changed, 215 insertions(+), 148 deletions(-) diff --git a/FactorySystemApi/Controllers/MaterialTeamworkController.cs b/FactorySystemApi/Controllers/MaterialTeamworkController.cs index 80ef071..bc3a1cb 100644 --- a/FactorySystemApi/Controllers/MaterialTeamworkController.cs +++ b/FactorySystemApi/Controllers/MaterialTeamworkController.cs @@ -13,6 +13,7 @@ using System.Reflection; using System.Data; using System.IO; using System.Security.Cryptography; +using System.Threading.Tasks; namespace FactorySystemApi.Controllers { @@ -127,37 +128,48 @@ namespace FactorySystemApi.Controllers } inParam.Add("FTeamworkType", 1); + + // 获取具备相应权限的用户 + List users = MaterialTaskBll.GetTaskUsers(0, "10", factory.FID); - int teamId = BaseBll.InsertDataModel(inParam, "TFS_FMaterialTeamwork"); - result.Add("TeamId", teamId); - - if (teamId > 0) + // 如果没有获取到用户,则不创建路线、任务、物料和视图 + if (users != null && users.Count > 0) { - inParam.Add("FID", teamId); + int teamId = BaseBll.InsertDataModel(inParam, "TFS_FMaterialTeamwork"); + result.Add("TeamId", teamId); - if (state.ToString().Contains("1")) + if (teamId > 0) { - TFS_FMaterialTeamwork teamwork = BaseBll.GetTempModel(teamId); - - // 创建物料和物料视图 - Dictionary materialInfo = CreateMaterialData(inParam, factory, teamwork); + inParam.Add("FID", teamId); - if (materialInfo.ContainsKey("FMaterialCode") && !string.IsNullOrEmpty(materialInfo["FMaterialCode"].ToString())) + if (state.ToString().Contains("1")) { - teamwork.FMaterialCode = materialInfo["FMaterialCode"].ToString(); - MaterialTeamworkBll.UpdateMaterialTeamwork(teamwork); - } + TFS_FMaterialTeamwork teamwork = BaseBll.GetTempModel(teamId); - foreach(string key in materialInfo.Keys) - { - result.Add(key, materialInfo[key]); - } + // 创建物料和物料视图 + Dictionary materialInfo = CreateMaterialData(inParam, factory, teamwork); + + if (materialInfo.ContainsKey("FMaterialCode") && !string.IsNullOrEmpty(materialInfo["FMaterialCode"].ToString())) + { + teamwork.FMaterialCode = materialInfo["FMaterialCode"].ToString(); + MaterialTeamworkBll.UpdateMaterialTeamwork(teamwork); + } - // 创建物料分类任务 - int taskId = MaterialTaskBll.CreateMaterialTask(teamId, 1, user.FID, 0, factory.FID); - result.Add("TaskId", taskId); + foreach (string key in materialInfo.Keys) + { + result.Add(key, materialInfo[key]); + } + + // 创建物料分类任务 + int taskId = MaterialTaskBll.CreateMaterialTask(teamId, 1, user.FID, 0, factory.FID, users); + result.Add("TaskId", taskId); + } } } + else + { + result.Add("TaskId", -9); + } apiResult.Data = result; }, apiResult, Request, inParam); @@ -219,6 +231,7 @@ namespace FactorySystemApi.Controllers { var apiResult = new ApiResult(); int step = -1; + Dictionary result = new Dictionary(); return ExceptionHelper.TryReturnException(() => { if (Request.Properties["token"] is ApiAuthInfo user) @@ -232,6 +245,8 @@ namespace FactorySystemApi.Controllers int teamId = int.Parse(inParam["FTeamID"].ToString()); int teamworkType = int.Parse(inParam["FTeamworkType"].ToString()); + string viewType = GetViewType(viewList); + // 更新视图 MaterialTeamworkBll.UpdateMaterialViewById(viewList, user.FID, teamId, teamworkType); // 更新物料 @@ -252,61 +267,49 @@ namespace FactorySystemApi.Controllers } else if((task = tasks.FindLast(t => t.FType == 1)) != null) { - // 结束物料编辑任务 - MaterialTaskBll.CloseMaterialTask(teamId, user.FID, 1); - // 创建物料确认任务 - int taskId = MaterialTaskBll.CreateMaterialTask(teamId, teamworkType, user.FID, 2, task.FFactoryID); + List users = MaterialTaskBll.GetTaskUsers(0, viewType, task.FFactoryID); + + if (users != null && users.Count > 0) + { + // 结束物料编辑任务 + MaterialTaskBll.CloseMaterialTask(teamId, user.FID, 1); + // 创建物料确认任务 + int taskId = MaterialTaskBll.CreateMaterialTask(teamId, teamworkType, user.FID, 2, task.FFactoryID, users); + result.Add("TaskId", taskId); + } + else + { + result.Add("TaskId", -9); + } + } else if ((task = tasks.FindLast(t => t.FType == 0)) != null) { - // 结束物料分类任务 - MaterialTaskBll.CloseMaterialTask(teamId, user.FID, 0); - // 创建物料编辑任务 - int taskId = MaterialTaskBll.CreateMaterialTask(teamId, teamworkType, user.FID, 1, task.FFactoryID); + List users = MaterialTaskBll.GetTaskUsers(0, viewType, task.FFactoryID); + + if (users != null && users.Count > 0) + { + // 结束物料分类任务 + MaterialTaskBll.CloseMaterialTask(teamId, user.FID, 0); + // 创建物料编辑任务 + int taskId = MaterialTaskBll.CreateMaterialTask(teamId, teamworkType, user.FID, 1, task.FFactoryID, users); + result.Add("TaskId", taskId); + } + else + { + result.Add("TaskId", -9); + } + } - //if (tasks != null && tasks.Count == 1) - //{ - // TFS_FMaterialTask task = tasks[0]; - // if (task.FType == 0) - // { - // // 结束物料分类任务 - // MaterialTaskBll.CloseMaterialTask(teamId, user.FID, 0); - // // 创建物料编辑任务 - // int taskId = MaterialTaskBll.CreateMaterialTask(teamId, user.FID, 1, task.FFactoryID); - // } - //} - //else if (tasks.Count == 2) - //{ - // TFS_FMaterialTask task = tasks.FindLast(t => t.FType == 1); - - // if (task != null) - // { - // // 结束物料编辑任务 - // MaterialTaskBll.CloseMaterialTask(teamId, user.FID, 1); - // // 创建物料确认任务 - // int taskId = MaterialTaskBll.CreateMaterialTask(teamId, user.FID, 2, task.FFactoryID); - // } - //} - //else if (tasks.Count == 3) - //{ - // TFS_FMaterialTask task = tasks.FindLast(t => t.FType == 2); - - // if (task != null) - // { - // // 结束物料确认任务 - // MaterialTaskBll.CloseMaterialTask(teamId, user.FID, 2); - // MaterialTeamworkBll.CloseMaterialTeamwork(teamId, user.FID); - // } - //} - - apiResult.Data = teamId; + result.Add("TeamId", teamId); + apiResult.Data = result; } }, apiResult, Request, inParam); } - + private Dictionary CreateMaterialData(Dictionary inParam, TFS_Factory factory, TFS_FMaterialTeamwork teamwork) { Dictionary result = new Dictionary(); @@ -432,70 +435,79 @@ namespace FactorySystemApi.Controllers result.Add("ViewId", vmId); } - // 设置物料修改路线 - teamworkParam.Add("FTeamworkType", 2); // 路线类型-修改 - teamworkParam.Add("FState", 1); // 路线状态-进行中 - teamworkParam.Add("FMaterialCode", material.FCode); // 物料编号 - teamworkParam.Add("FMaterialName", material.FName); // 物料描述 - teamworkParam.Add("FTestCode", material.FTestCode); // 试验号 - teamworkParam.Add("FMaterialType", material.FType); // 物料类型(产品分类):TBasicCode.FType=32 - teamworkParam.Add("FMaterialGroup", material.FMaterialGroup); // 物料组:TDataCode.FType=2 - teamworkParam.Add("FWeightUnit", material.FBaseUnit); // 计量单位 - teamworkParam.Add("FAddUser", user.FID); // 创建用户 - teamworkParam.Add("FAddDate", DateTime.Now); // 创建时间 - teamworkParam.Add("FEditUser", user.FID); // 修改用户 - teamworkParam.Add("FEditDate", DateTime.Now); // 修改时间 - teamworkParam.Add("FCreateFactoryID", factory.FID); // 工厂ID - teamworkParam.Add("FCreateFactoryCode", factory.FCode); // 工厂Code - teamworkParam.Add("FCreateFactoryType", factory.FType); // 工厂类型 - - // 如果当前模式是委托,获取委托工厂 - if (factory.FType == 1) - { - int prodFactoryId = factory.FFactoryID; - prodFactory = BaseBll.GetTempModel(prodFactoryId); - - teamworkParam.Add("FProdFactoryID", prodFactory.FID); // 委托工厂ID - teamworkParam.Add("FProdFactoryCode", prodFactory.FCode); // 委托工厂Code - - prodView = MaterialTeamworkBll.GetMaterialViewsByFactoryAndMaterial(prodFactoryId, materialId); - - // 新增委托工厂视图 - if (prodView == null) + List users = MaterialTaskBll.GetTaskUsers(0, view.FMRP1ProductType, factory.FID); + + if (users == null || users.Count > 0) + { + // 设置物料修改路线 + teamworkParam.Add("FTeamworkType", 2); // 路线类型-修改 + teamworkParam.Add("FState", 1); // 路线状态-进行中 + teamworkParam.Add("FMaterialCode", material.FCode); // 物料编号 + teamworkParam.Add("FMaterialName", material.FName); // 物料描述 + teamworkParam.Add("FTestCode", material.FTestCode); // 试验号 + teamworkParam.Add("FMaterialType", material.FType); // 物料类型(产品分类):TBasicCode.FType=32 + teamworkParam.Add("FMaterialGroup", material.FMaterialGroup); // 物料组:TDataCode.FType=2 + teamworkParam.Add("FWeightUnit", material.FBaseUnit); // 计量单位 + teamworkParam.Add("FAddUser", user.FID); // 创建用户 + teamworkParam.Add("FAddDate", DateTime.Now); // 创建时间 + teamworkParam.Add("FEditUser", user.FID); // 修改用户 + teamworkParam.Add("FEditDate", DateTime.Now); // 修改时间 + teamworkParam.Add("FCreateFactoryID", factory.FID); // 工厂ID + teamworkParam.Add("FCreateFactoryCode", factory.FCode); // 工厂Code + teamworkParam.Add("FCreateFactoryType", factory.FType); // 工厂类型 + + // 如果当前模式是委托,获取委托工厂 + if (factory.FType == 1) { - prodView = Clone(view); - prodView.FFactoryID = prodFactoryId; - prodView.FFactoryCode = prodFactory.FCode; - prodView.FAddDate = DateTime.Now; + int prodFactoryId = factory.FFactoryID; + prodFactory = BaseBll.GetTempModel(prodFactoryId); + + teamworkParam.Add("FProdFactoryID", prodFactory.FID); // 委托工厂ID + teamworkParam.Add("FProdFactoryCode", prodFactory.FCode); // 委托工厂Code + + prodView = MaterialTeamworkBll.GetMaterialViewsByFactoryAndMaterial(prodFactoryId, materialId); + + // 新增委托工厂视图 + if (prodView == null) + { + prodView = Clone(view); + prodView.FFactoryID = prodFactoryId; + prodView.FFactoryCode = prodFactory.FCode; + prodView.FAddDate = DateTime.Now; - // 插入视图 - int prodVmId = MaterialTeamworkBll.InsertMaterialView(prodView); - prodView.FID = prodVmId; + // 插入视图 + int prodVmId = MaterialTeamworkBll.InsertMaterialView(prodView); + prodView.FID = prodVmId; - result.Add("ProdViewId", prodVmId); + result.Add("ProdViewId", prodVmId); + } } - } - // 创建物料修改路线 - int teamId = BaseBll.InsertDataModel(teamworkParam, "TFS_FMaterialTeamwork"); - result.Add("TeamId", teamId); + // 创建物料修改路线 + int teamId = BaseBll.InsertDataModel(teamworkParam, "TFS_FMaterialTeamwork"); + result.Add("TeamId", teamId); + + // 更新视图 + view.FMdfMaterialTeamID = teamId; + view.FTeamType = 1; + MaterialTeamworkBll.UpdateMaterialView(view); - // 更新视图 - view.FMdfMaterialTeamID = teamId; - view.FTeamType = 1; - MaterialTeamworkBll.UpdateMaterialView(view); + if (prodView != null) + { + prodView.FMdfMaterialTeamID = teamId; + prodView.FTeamType = 1; + MaterialTeamworkBll.UpdateMaterialView(prodView); + } - if (prodView != null) + // 创建物料修改事项 + int taskId = MaterialTaskBll.CreateMaterialTask(teamId, 2, user.FID, 1, factory.FID, users); + result.Add("TaskId", taskId); + } + else { - prodView.FMdfMaterialTeamID = teamId; - prodView.FTeamType = 1; - MaterialTeamworkBll.UpdateMaterialView(prodView); + result.Add("TaskId", -9); } - // 创建物料修改事项 - int taskId = MaterialTaskBll.CreateMaterialTask(teamId, 2, user.FID, 1, factory.FID); - result.Add("TaskId", taskId); - apiResult.Data = result; }, apiResult, Request); @@ -544,6 +556,44 @@ namespace FactorySystemApi.Controllers return result; } + private string GetViewType(List> viewList) + { + string vType = null; + + if (viewList != null && viewList.Count > 0) + { + Dictionary view = viewList[0]; + // 成品视图 + if (view.ContainsKey("FMRP1ProductType") && "10".Equals(view["FMRP1ProductType"].ToString())) + { + vType = "1"; + } + // 半成品视图 + else if (view.ContainsKey("FMRP1ProductType") && "20".Equals(view["FMRP1ProductType"].ToString())) + { + vType = "2"; + } + // 中间品视图 + else if (view.ContainsKey("FMRP1ProductType") && "30".Equals(view["FMRP1ProductType"].ToString())) + { + vType = "3"; + + // 香基视图 + if (view.ContainsKey("FBaseMaterialDesc") && view["FBaseMaterialDesc"].ToString().Contains("香基")) + { + vType = "4"; + } + } + // 原料视图 + else if (view.ContainsKey("FMRP1ProductType") && "40".Equals(view["FMRP1ProductType"].ToString())) + { + vType = "5"; + } + } + + return vType; + } + #endregion public T Clone(T obj) where T : class diff --git a/FactorySystemBll/MaterialTaskBll.cs b/FactorySystemBll/MaterialTaskBll.cs index 869f89e..6fbe104 100644 --- a/FactorySystemBll/MaterialTaskBll.cs +++ b/FactorySystemBll/MaterialTaskBll.cs @@ -48,36 +48,15 @@ namespace FactorySystemBll /// /// 创建物料新增事项 /// - public int CreateMaterialTask(int teamId, int teamworkType, int userId, int type, int factoryId) + public int CreateMaterialTask(int teamId, int teamworkType, int userId, int type, int factoryId, List users) { SqlSugarClient db = AppSettingsHelper.GetSqlSugar(); - int funcType = (int)Constant.RoleType.物料视图编辑; - string tType = type == 0 ? "10" : "11"; int taskId = -1; try { - List funcVal = db.Queryable().Where(s => s.FType == (int)Constant.BasicCode.物料视图编辑 && s.F1 == tType && s.FState == 1).Select(s => s.FValue).ToList(); - //List users = db.Queryable((a, b, c) => new JoinQueryInfos(JoinType.Left, a.FRoleID == b.FRoleID, - // JoinType.Left, a.FID == int.Parse(c.FUserID))) - // .Where((a, b) => a.FState == 1 && a.FDeleted != 1 && b.FType == funcType && funcVal.Contains(b.FFunctionID.ToString())) - // .Where(factoryId<=0 ? "1=1" : string.Format("c.FFactoryID in({0})", factoryId)) - // .GroupBy("a.FID,c.FFactoryID,a.FName,a.FUser").Select("a.FID,c.FFactoryID,a.FName,a.FUser").ToList(); - - List users = db.Queryable((a, b, c) => new JoinQueryInfos( - JoinType.Left, a.FUserID.Equals(b.FID.ToString()), - JoinType.Left, a.FRole.Equals(c.FRoleID.ToString()) - )) - .Where((a, b, c) => factoryId.ToString().Contains(a.FFactoryID)) - .Where((a, b, c) => b.FState == 1 && b.FDeleted != 1) - .Where((a, b, c) => c.FType == funcType && funcVal.Contains(c.FFunctionID.ToString())) - .GroupBy("b.FID, a.FFactoryID, b.FName, b.FUser") - .Select("b.FID, cast(a.FFactoryID as int), b.FName, b.FUser") - .ToList(); - if (users.Count > 0) { - TFS_FMaterialTask materialTask = new TFS_FMaterialTask(); materialTask.FMaterialTeamID = teamId; materialTask.FType = type; @@ -87,6 +66,8 @@ namespace FactorySystemBll materialTask.FAddDate = DateTime.Now; materialTask.FState = 1; materialTask.FTeamworkType = teamworkType; + materialTask.FUserID = string.Join(",", users.GroupBy(ss => ss.FID).Select(sss => sss.Key)); + materialTask.FUserName = string.Join("、", users.GroupBy(ss => ss.FName).Select(sss => sss.Key)); if (type == 0) { @@ -104,9 +85,6 @@ namespace FactorySystemBll materialTask.FDesc = "物料视图确认"; } - materialTask.FUserID = string.Join(",", users.GroupBy(ss => ss.FID).Select(sss => sss.Key)); - materialTask.FUserName = string.Join("、", users.GroupBy(ss => ss.FName).Select(sss => sss.Key)); - taskId = db.Insertable(materialTask).IgnoreColumns(true).ExecuteReturnIdentity(); } } @@ -138,5 +116,44 @@ namespace FactorySystemBll return result; } + + /** + * 20230505 修改权限BUG + * 获取事项用户,用于判断是否生成路线和事项 + * **/ + public List GetTaskUsers(int taskType, string viewType, int factoryId) + { + SqlSugarClient db = AppSettingsHelper.GetSqlSugar(); + List users = null; + string funcType = null; + List funcVal = null; + + // 物料分类任务 | 物料编辑任务 + if (taskType == 0 || taskType == 1) + { + funcType = "4, 5"; + funcVal = db.Queryable().Where(s => (s.FType == (int)Constant.BasicCode.物料视图编辑 || s.FType == (int)Constant.BasicCode.物料基础编辑) && + viewType.Equals(s.F1) && // 视图编辑中的物料分类 + s.FState == 1).Select(s => s.FValue).ToList(); + } + // 物料确认任务 + else if (taskType == 2) + { + funcType = "2"; + funcVal = new List { "7" }; + } + + users = db.Queryable((a, b, c) => new JoinQueryInfos( + JoinType.Left, a.FUserID.Equals(b.FID.ToString()), + JoinType.Left, a.FRole.Equals(c.FRoleID.ToString()))) + .Where((a, b, c) => factoryId.ToString().Contains(a.FFactoryID)) + .Where((a, b, c) => b.FState == 1 && b.FDeleted != 1) + .Where((a, b, c) => funcType.Contains(c.FType.ToString()) && funcVal.Contains(c.FFunctionID.ToString())) + .GroupBy("b.FID, a.FFactoryID, b.FName, b.FUser") + .Select("b.FID, cast(a.FFactoryID as int), b.FName, b.FUser") + .ToList(); + + return users; + } } } diff --git a/FactorySystemBll/MaterialTeamworkBll.cs b/FactorySystemBll/MaterialTeamworkBll.cs index 48c7f3a..eb5f205 100644 --- a/FactorySystemBll/MaterialTeamworkBll.cs +++ b/FactorySystemBll/MaterialTeamworkBll.cs @@ -210,7 +210,7 @@ namespace FactorySystemBll for (int i = 0; i < viewList.Count; i++) { //判断是否等于中间品 - if (viewList[i]["FMRP1Type"].ToString() == "30") + if (viewList[i]["FMRP1ProductType"].ToString() == "30") { TFS_MaterialType materialType = materialTypeBll.GetMaterialTypeByID(int.Parse(viewList[i]["FTypeID2"].ToString())).LastOrDefault(); if (materialType.FName.Contains("香基")) diff --git a/FactorySystemBll/UserBll.cs b/FactorySystemBll/UserBll.cs index 0cf0cd8..56466fb 100644 --- a/FactorySystemBll/UserBll.cs +++ b/FactorySystemBll/UserBll.cs @@ -171,8 +171,8 @@ namespace FactorySystemBll factoryID = fTeamwork.FCreateFactoryID; break; case 1: - TFS_MaterialFTeamwork materialFTeamwork = BaseBll.GetTempModel("FID=" + teamId.ToString()); - factoryID = materialFTeamwork.FCreateFactoryID; + TFS_FMaterialTeamwork FMaterialTeamwork = BaseBll.GetTempModel("FID=" + teamId.ToString()); + factoryID = FMaterialTeamwork.FCreateFactoryID; break; case 2: TFS_HalfMaterialFTeamwork halfMaterialFTeamwork = BaseBll.GetTempModel("FID=" + teamId.ToString());