From 6282225de7c5f9bd7c56a72cd992191536c6702e Mon Sep 17 00:00:00 2001
From: leo <10200039@qq.com>
Date: Tue, 18 Apr 2023 15:38:29 +0800
Subject: [PATCH] =?UTF-8?q?=E7=89=A9=E6=96=99=E6=96=B0=E5=A2=9E=E8=B7=AF?=
=?UTF-8?q?=E7=BA=BF=E4=BF=AE=E6=94=B9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../Controllers/MaterialTaskController.cs | 4 +-
.../Controllers/MaterialTeamworkController.cs | 126 ++++++--
.../Controllers/ViewController.cs | 64 +++++
FactorySystemBll/MaterialTaskBll.cs | 95 +++++-
FactorySystemBll/MaterialTeamworkBll.cs | 271 +++++++++++++++++-
FactorySystemBll/ViewBll.cs | 46 +++
.../ResponseModel/MaterialTaskRow.cs | 7 +
.../ResponseModel/MaterialTeamworkRow.cs | 11 +-
8 files changed, 595 insertions(+), 29 deletions(-)
diff --git a/FactorySystemApi/Controllers/MaterialTaskController.cs b/FactorySystemApi/Controllers/MaterialTaskController.cs
index 441a955..dcbaf5e 100644
--- a/FactorySystemApi/Controllers/MaterialTaskController.cs
+++ b/FactorySystemApi/Controllers/MaterialTaskController.cs
@@ -18,7 +18,7 @@ namespace FactorySystemApi.Controllers
[UserLoginFilter]
public class MaterialTaskController : ApiController
{
- private readonly MaterialTaskBll _taskBll = new MaterialTaskBll();
+ private readonly MaterialTaskBll MaterialTaskBll = new MaterialTaskBll();
///
/// 根据当前用户获取任务列表
@@ -35,7 +35,7 @@ namespace FactorySystemApi.Controllers
}
apiResult.Data = new
{
- List = _taskBll.GetList(mtq, out var totalNumber),
+ List = MaterialTaskBll.GetList(mtq, out var totalNumber),
Total = totalNumber
};
}, apiResult, Request);
diff --git a/FactorySystemApi/Controllers/MaterialTeamworkController.cs b/FactorySystemApi/Controllers/MaterialTeamworkController.cs
index 50c28f9..f250517 100644
--- a/FactorySystemApi/Controllers/MaterialTeamworkController.cs
+++ b/FactorySystemApi/Controllers/MaterialTeamworkController.cs
@@ -15,6 +15,7 @@ using FactorySystemApi.Plm_Formula;
using System.Linq;
using SqlSugar;
using FactorySystemModel.RequestModel;
+using System.Web.Http.Results;
namespace FactorySystemApi.Controllers
{
@@ -29,17 +30,13 @@ namespace FactorySystemApi.Controllers
///
public readonly BaseBll BaseBll = new BaseBll();
///
- /// 数据处理层-物料处理
- ///
- public readonly MaterialBll MaterialBll = new MaterialBll();
- ///
- /// 数据处理层-视图处理
+ /// 数据处理层-路线处理
///
- public readonly ViewBll ViewBll = new ViewBll();
+ private readonly MaterialTeamworkBll MaterialTeamworkBll = new MaterialTeamworkBll();
///
- /// 数据处理层-路线处理
+ /// 数据处理层-任务处理
///
- private readonly MaterialTeamworkBll _taskBll = new MaterialTeamworkBll();
+ private readonly MaterialTaskBll MaterialTaskBll = new MaterialTaskBll();
///
/// 事项操作日志
///
@@ -55,7 +52,7 @@ namespace FactorySystemApi.Controllers
/// 新增物料路线
///
[HttpPost]
- public ApiResult InsertDataModel(Dictionary inParam)
+ public ApiResult CreateMaterial(Dictionary inParam)
{
ApiResult apiResult = new ApiResult();
return ExceptionHelper.TryReturnException(() =>
@@ -64,7 +61,6 @@ namespace FactorySystemApi.Controllers
TFS_Factory factory = BaseBll.GetTempModel(int.Parse(inParam["FCreateFactoryID"].ToString()));
Dictionary result = new Dictionary();
- //inParam.Add("FMdmCode", GetMdmCode(inParam));
inParam.Remove("FID");
string materialName = inParam["FMaterialName"].ToString();
@@ -144,14 +140,14 @@ namespace FactorySystemApi.Controllers
TFS_FMaterialTeamwork teamwork = BaseBll.GetTempModel(teamId);
// 创建物料和物料视图
- Dictionary materialInfo = CreateMaterial(inParam, factory, teamwork);
+ Dictionary materialInfo = CreateMaterialData(inParam, factory, teamwork);
foreach(string key in materialInfo.Keys)
{
result.Add(key, materialInfo[key]);
}
// 创建物料分类任务
- int taskId = BaseBll.CreateMaterialTask(teamId, user.FID, 15, factory.FID);
+ int taskId = MaterialTaskBll.CreateMaterialTask(teamId, user.FID, 0, factory.FID);
result.Add("TaskId", taskId);
}
}
@@ -175,13 +171,109 @@ namespace FactorySystemApi.Controllers
}
apiResult.Data = new
{
- List = _taskBll.GetList(mtq, out var totalNumber),
+ List = MaterialTeamworkBll.GetList(mtq, out var totalNumber),
Total = totalNumber
};
}, apiResult, Request);
}
- private Dictionary CreateMaterial(Dictionary inParam, TFS_Factory factory, TFS_FMaterialTeamwork teamwork)
+ ///
+ /// 根据物料路线ID获取物料视图
+ ///
+ [HttpPost]
+ public ApiResult GetMaterialViewsByTeamId(Dictionary inParam)
+ {
+ var apiResult = new ApiResult();
+ return ExceptionHelper.TryReturnException(() =>
+ {
+ if (Request.Properties["token"] is ApiAuthInfo user)
+ {
+ int teamId = int.Parse(inParam["teamId"].ToString());
+ int teamType = int.Parse(inParam["teamType"].ToString());
+
+ apiResult.Data = new
+ {
+ columns = MaterialTeamworkBll.GetColumns(),
+ rows = MaterialTeamworkBll.GetMaterialViewsByTeamId(teamId, teamType, user.FID, out List materialId, true),
+ infos = MaterialTeamworkBll.GetMaterialInfoList(materialId, user.FID),
+ types = MaterialTeamworkBll.GetMaterialTypeList()
+ };
+
+ }
+ }, apiResult, Request, inParam);
+ }
+
+ ///
+ /// 更新物料
+ ///
+ [HttpPost]
+ public ApiResult UpdateMaterial(Dictionary inParam)
+ {
+ var apiResult = new ApiResult();
+
+ return ExceptionHelper.TryReturnException(() => {
+ if (Request.Properties["token"] is ApiAuthInfo user)
+ {
+ inParam.TryGetValue("TFS_ViewMaterial", out object viewObj);
+ inParam.TryGetValue("TFS_Material", out object materialObj);
+ inParam.TryGetValue("TFS_MaterialInfo", out object infoObj);
+ List> viewList = JsonConvert.DeserializeObject>>(JsonConvert.SerializeObject(viewObj));
+ List> materialList = JsonConvert.DeserializeObject>>(JsonConvert.SerializeObject(materialObj));
+ List> infoList = JsonConvert.DeserializeObject>>(JsonConvert.SerializeObject(infoObj));
+ int teamId = int.Parse(inParam["FTeamID"].ToString());
+
+ // 更新视图
+ MaterialTeamworkBll.UpdateMaterialViewById(viewList, user.FID, teamId);
+ // 更新物料
+ MaterialTeamworkBll.UpdateMaterialById(materialList, user.FID, teamId);
+ // 更新物料信息
+ MaterialTeamworkBll.UpdateMaterialInfoById(infoList, user.FID, teamId);
+
+ List tasks = MaterialTaskBll.GetMaterialTasks(teamId);
+
+ 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;
+
+ }
+ }, apiResult, Request, inParam);
+
+ }
+
+ private Dictionary CreateMaterialData(Dictionary inParam, TFS_Factory factory, TFS_FMaterialTeamwork teamwork)
{
Dictionary result = new Dictionary();
// 创建物料(物料表新增数据)
@@ -194,7 +286,7 @@ namespace FactorySystemApi.Controllers
material.FFactoryCode = factory.FCode; // 工厂标识
material.FTestCode = inParam["FTestCode"].ToString(); // 试验号
- int materialId = MaterialBll.InsertMaterial(material);
+ int materialId = MaterialTeamworkBll.InsertMaterial(material);
result.Add("MaterialId", materialId);
@@ -207,7 +299,7 @@ namespace FactorySystemApi.Controllers
viewMaterial.FAddDate = DateTime.Now; // 创建日期
viewMaterial.FTeamType = 1; // 路线类型
- int vmId = ViewBll.InsertMaterialView(viewMaterial);
+ int vmId = MaterialTeamworkBll.InsertMaterialView(viewMaterial);
result.Add("ViewId", vmId);
// 创建委托工厂视图
@@ -221,7 +313,7 @@ namespace FactorySystemApi.Controllers
viewMaterial.FAddDate = DateTime.Now; // 创建日期
viewMaterial.FTeamType = 1; // 路线类型
- int prodVmId = ViewBll.InsertMaterialView(viewMaterial);
+ int prodVmId = MaterialTeamworkBll.InsertMaterialView(viewMaterial);
result.Add("ProdViewId", prodVmId);
}
diff --git a/FactorySystemApi/Controllers/ViewController.cs b/FactorySystemApi/Controllers/ViewController.cs
index b3d7c94..82b7acb 100644
--- a/FactorySystemApi/Controllers/ViewController.cs
+++ b/FactorySystemApi/Controllers/ViewController.cs
@@ -9,6 +9,8 @@ using Microsoft.Ajax.Utilities;
using Newtonsoft.Json;
using FactorySystemModel.EnumModel;
using Aspose.Cells;
+using System.Globalization;
+using System.Linq;
namespace FactorySystemApi.Controllers
{
@@ -202,5 +204,67 @@ namespace FactorySystemApi.Controllers
}
}, apiResult, Request);
}
+
+ ///
+ /// 保存视图编辑的内容(物料新增条线)
+ ///
+ [HttpPost]
+ public ApiResult UpdateMaterialViewById(Dictionary inParam)
+ {
+ var apiResult = new ApiResult();
+ BaseBll BaseBll = new BaseBll();
+ return ExceptionHelper.TryReturnException(() =>
+ {
+ if (Request.Properties["token"] is ApiAuthInfo user)
+ {
+ inParam.TryGetValue("TFS_ViewMaterial", out object viewObj);
+ inParam.TryGetValue("TFS_Material", out object materialObj);
+ inParam.TryGetValue("TFS_MaterialInfo", out object infoObj);
+ List> viewList = JsonConvert.DeserializeObject>>(JsonConvert.SerializeObject(viewObj));
+ List> materialList = JsonConvert.DeserializeObject>>(JsonConvert.SerializeObject(materialObj));
+ List> infoList = JsonConvert.DeserializeObject>>(JsonConvert.SerializeObject(infoObj));
+ int teamId = int.Parse(inParam["FTeamID"].ToString());
+ int viewType = int.Parse(inParam["FViewType"].ToString());
+ apiResult.Data = _viewBll.UpdateMaterialViewById(viewList, materialList, infoList, teamId, viewType, user.FID);
+
+ if (viewType == 10)
+ {
+ // 创建物料视图事项
+ TFS_FTeamwork teamwork = BaseBll.GetTempModel(teamId);
+ List> vml = _viewBll.GetMaterialViewsByTeamId(teamId, viewType, 1, user.FID, out List materialId, out string FGuaranteePeriod, out string FStorageConditions, !inParam.ContainsKey("FAllView"));
+ Dictionary hasNewView = new Dictionary();
+
+ if (vml != null)
+ {
+ foreach (Dictionary row in vml)
+ {
+ int materialType = (int)(long)row["FViewType"];
+ string factoryId = row["FFactoryID"].ToString();
+
+ if (hasNewView.ContainsKey(materialType))
+ {
+ hasNewView[materialType] = hasNewView[materialType] + factoryId + ",";
+ }
+ else
+ {
+ hasNewView.Add(materialType, factoryId + ",");
+ }
+ }
+
+ hasNewView.OrderBy(s => s.Key);
+ string facoryIds = "";
+ foreach (var item in hasNewView)
+ {
+ //创建视图事项
+ string factorys = item.Value.Trim(',');
+ BaseBll.CreateTaskData(teamId, user.FID, "0", factorys);
+ facoryIds += factorys;
+ }
+ }
+
+ }
+ }
+ }, apiResult, Request);
+ }
}
}
diff --git a/FactorySystemBll/MaterialTaskBll.cs b/FactorySystemBll/MaterialTaskBll.cs
index f32779d..71f1b38 100644
--- a/FactorySystemBll/MaterialTaskBll.cs
+++ b/FactorySystemBll/MaterialTaskBll.cs
@@ -1,10 +1,12 @@
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;
namespace FactorySystemBll
{
@@ -17,7 +19,7 @@ namespace FactorySystemBll
{
totalNumber = 0;
var db = AppSettingsHelper.GetSqlSugar();
- return db.Queryable((a, b) => new JoinQueryInfos(JoinType.Inner, a.FMaterialTeamID == b.FID))
+ return db.Queryable((a, b, c) => new JoinQueryInfos(JoinType.Inner, a.FMaterialTeamID == b.FID, JoinType.Left, a.FAddUser == c.FID))
// 事项状态
.WhereIF(mtq.FState > 0 && mtq.FState != 99, (a, b) => a.FState == mtq.FState)
// 物料号
@@ -31,8 +33,97 @@ namespace FactorySystemBll
//.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.FMaterialName,b.FMaterialCode,b.FTestCode,b.FMaterialType")
+ .Select("a.*,b.FMaterialName,b.FMaterialCode,b.FTestCode,b.FMaterialType, c.FName as FAddUserName").OrderBy((a) => a.FID, OrderByType.Desc)
.ToPageList(mtq.FPageIndex, mtq.FPageSize, ref totalNumber);
}
+
+ public List GetMaterialTasks(int teamId)
+ {
+ var db = AppSettingsHelper.GetSqlSugar();
+ List tasks = db.Queryable().Where(t => t.FMaterialTeamID == teamId).ToList();
+
+ return tasks;
+ }
+
+ ///
+ /// 创建物料新增事项
+ ///
+ public int CreateMaterialTask(int teamId, int userId, int type, int factoryId)
+ {
+ 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) => new JoinQueryInfos(JoinType.Left, a.FRoleID == b.FRoleID))
+ .Where((a, b) => a.FState == 1 && a.FDeleted != 1 && b.FType == funcType && funcVal.Contains(b.FFunctionID.ToString()))
+ .Where(string.Format("a.FFactoryID in({0})", factoryId))
+ .GroupBy("a.FID,a.FFactoryID,a.FName,a.FUser").Select("a.FID,a.FFactoryID,a.FName,a.FUser").ToList();
+
+ if (users.Count > 0)
+ {
+
+ TFS_FMaterialTask materialTask = new TFS_FMaterialTask();
+ materialTask.FMaterialTeamID = teamId;
+ materialTask.FType = type;
+ materialTask.FFactoryID = factoryId;
+ materialTask.FCanEdit = 1;
+ materialTask.FAddUser = userId;
+ materialTask.FAddDate = DateTime.Now;
+ materialTask.FState = 1;
+
+ if (type == 0)
+ {
+ materialTask.FName = "物料分类";
+ materialTask.FDesc = "物料分类选择";
+ }
+ else if (type == 1)
+ {
+ materialTask.FName = "物料视图";
+ materialTask.FDesc = "物料视图编辑";
+ }
+ else
+ {
+ materialTask.FName = "确认视图";
+ 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();
+ }
+ }
+ catch (Exception ex)
+ {
+ taskId = -1;
+ }
+
+ return taskId;
+ }
+
+ public int CloseMaterialTask(int teamId, int userId, int type)
+ {
+ SqlSugarClient db = AppSettingsHelper.GetSqlSugar();
+ List taskList = db.Queryable().Where(s => s.FType == type && s.FMaterialTeamID == teamId && s.FState == 1).ToList();
+ int result = 0;
+
+ if (taskList != null && taskList.Count > 0)
+ {
+ TFS_FMaterialTask fmt = taskList[0];
+
+ fmt.FCanEdit = 2;
+ fmt.FState = 2;
+ fmt.FEditUser = userId;
+ fmt.FEditDate = DateTime.Now;
+
+ result = db.Updateable(fmt).IgnoreColumns(true).WhereColumns("FID").ExecuteCommand();
+ }
+
+ return result;
+ }
}
}
diff --git a/FactorySystemBll/MaterialTeamworkBll.cs b/FactorySystemBll/MaterialTeamworkBll.cs
index 6971d4c..2e54177 100644
--- a/FactorySystemBll/MaterialTeamworkBll.cs
+++ b/FactorySystemBll/MaterialTeamworkBll.cs
@@ -1,10 +1,13 @@
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
{
@@ -13,11 +16,11 @@ namespace FactorySystemBll
///
/// 获取路线列表
///
- public List GetList(MaterialTeamworkQuery mtq, out int totalNumber)
+ public List GetList(MaterialTeamworkQuery mtq, out int totalNumber)
{
totalNumber = 0;
var db = AppSettingsHelper.GetSqlSugar();
- return db.Queryable()
+ 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)
// 物料号
@@ -31,8 +34,270 @@ namespace FactorySystemBll
//.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()
+ .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