From 25b05482dfd884d75c3729b5481107bca6158e59 Mon Sep 17 00:00:00 2001
From: Yang <903110162@qq.com>
Date: Mon, 17 Apr 2023 11:19:55 +0800
Subject: [PATCH 1/2] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E8=AF=95=E9=AA=8C?=
=?UTF-8?q?=E5=8F=B7=E5=8F=98=E6=9B=B4=E6=B5=81=E7=A8=8B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../Controllers/MaterialController.cs | 3 +-
.../Controllers/MaterialTaskController.cs | 45 +
.../Controllers/MaterialTeamworkController.cs | 1225 +++++++++++++++++
.../Controllers/TeamworkController.cs | 2 +-
FactorySystemApi/FactorySystemApi.csproj | 4 +
FactorySystemBll/BaseBll.cs | 221 +++
FactorySystemBll/FactorySystemBll.csproj | 2 +
FactorySystemBll/FormulaBll.cs | 2 +-
FactorySystemBll/MaterialBll.cs | 18 +
FactorySystemBll/MaterialTaskBll.cs | 44 +
FactorySystemBll/MaterialTeamworkBll.cs | 807 +++++++++++
FactorySystemModel/FactorySystemModel.csproj | 3 +
.../SqlSugarModel/TFS_MaterialFTeamProcess.cs | 123 ++
.../SqlSugarModel/TFS_MaterialFTeamwork.cs | 255 ++++
.../SqlSugarModel/TFS_MaterialTask.cs | 115 ++
FactorySystemModel/SqlSugarModel/TFS_Task.cs | 6 +-
16 files changed, 2869 insertions(+), 6 deletions(-)
create mode 100644 FactorySystemApi/Controllers/MaterialTaskController.cs
create mode 100644 FactorySystemApi/Controllers/MaterialTeamworkController.cs
create mode 100644 FactorySystemBll/MaterialTaskBll.cs
create mode 100644 FactorySystemBll/MaterialTeamworkBll.cs
create mode 100644 FactorySystemModel/SqlSugarModel/TFS_MaterialFTeamProcess.cs
create mode 100644 FactorySystemModel/SqlSugarModel/TFS_MaterialFTeamwork.cs
create mode 100644 FactorySystemModel/SqlSugarModel/TFS_MaterialTask.cs
diff --git a/FactorySystemApi/Controllers/MaterialController.cs b/FactorySystemApi/Controllers/MaterialController.cs
index 18412e0..4c61388 100644
--- a/FactorySystemApi/Controllers/MaterialController.cs
+++ b/FactorySystemApi/Controllers/MaterialController.cs
@@ -238,6 +238,8 @@ namespace FactorySystemApi.Controllers
}, apiResult, Request, inParam);
}
+
+
@@ -531,7 +533,6 @@ namespace FactorySystemApi.Controllers
}
}
-
#endregion
}
}
\ No newline at end of file
diff --git a/FactorySystemApi/Controllers/MaterialTaskController.cs b/FactorySystemApi/Controllers/MaterialTaskController.cs
new file mode 100644
index 0000000..97f1619
--- /dev/null
+++ b/FactorySystemApi/Controllers/MaterialTaskController.cs
@@ -0,0 +1,45 @@
+using System;
+using System.Collections.Generic;
+using System.Web.Http;
+using FactorySystemApi.Sap_Group;
+using FactorySystemBll;
+using FactorySystemCommon;
+using FactorySystemModel.BusinessModel;
+using FactorySystemModel.EnumModel;
+using FactorySystemModel.RequestModel;
+using FactorySystemModel.ResponseModel;
+using FactorySystemModel.SqlSugarModel;
+
+namespace FactorySystemApi.Controllers
+{
+ ///
+ /// 任务
+ ///
+ [UserLoginFilter]
+ public class MaterialTaskController : ApiController
+ {
+ private readonly MaterialTaskBll _taskBll = new MaterialTaskBll();
+
+ ///
+ /// 根据当前用户获取任务列表
+ ///
+ [HttpPost]
+ public ApiResult GetPageList(TaskQuery tq)
+ {
+ ApiResult apiResult = new ApiResult();
+ return ExceptionHelper.TryReturnException(() =>
+ {
+ if (tq.FIsUser && Request.Properties["token"] is ApiAuthInfo user)
+ {
+ tq.FUserID = user.FID.ToString();
+ }
+ apiResult.Data = new
+ {
+ List = _taskBll.GetList(tq, out var totalNumber),
+ Total = totalNumber
+ };
+ }, apiResult, Request);
+ }
+
+ }
+}
diff --git a/FactorySystemApi/Controllers/MaterialTeamworkController.cs b/FactorySystemApi/Controllers/MaterialTeamworkController.cs
new file mode 100644
index 0000000..0087a12
--- /dev/null
+++ b/FactorySystemApi/Controllers/MaterialTeamworkController.cs
@@ -0,0 +1,1225 @@
+using FactorySystemBll;
+using FactorySystemCommon;
+using FactorySystemModel.BusinessModel;
+using FactorySystemModel.EnumModel;
+using FactorySystemModel.ResponseModel;
+using FactorySystemModel.SqlSugarModel;
+using Newtonsoft.Json;
+using System;
+using System.Collections.Generic;
+using System.Web.Http;
+using System.Data;
+using System.IO;
+using Newtonsoft.Json.Linq;
+using FactorySystemApi.Plm_Formula;
+using System.Linq;
+using SqlSugar;
+
+namespace FactorySystemApi.Controllers
+{
+ ///
+ /// 协同接口
+ ///
+ [UserLoginFilter]
+ public class MaterialTeamworkController : BaseController
+ {
+ ///
+ /// 数据处理层
+ ///
+ public readonly MaterialTeamworkBll MaterialTeamworkBll = new MaterialTeamworkBll();
+ ///
+ /// 事项操作日志
+ ///
+ public readonly OperateLogBll OperateLogBll = new OperateLogBll();
+ ///
+ /// 初始化
+ ///
+ public MaterialTeamworkController()
+ {
+ //设置可新增、修改字段
+ InsertField = UpdateField = "";
+ }
+
+ ///
+ /// 获取子项集合
+ ///
+ [HttpPost]
+ public ApiResult GetTeamworkPageList(Dictionary pageParam)
+ {
+ ApiResult apiResult = new ApiResult();
+ return ExceptionHelper.TryReturnException(() =>
+ {
+ ApiAuthInfo user = Request.Properties["token"] as ApiAuthInfo;
+ apiResult.Data = new
+ {
+ List = MaterialTeamworkBll.GetTeamworkPageList(pageParam, user.FID, out int totalCount),
+ Total = totalCount
+ };
+ }, apiResult, Request, pageParam);
+ }
+
+ ///
+ /// 获取流程集合
+ ///
+ [HttpPost]
+ public ApiResult GetTeamProcessList(Dictionary pageParam)
+ {
+ return GetTPageList(pageParam, null, "FGroup,FType");
+ }
+
+ ///
+ /// 新增协同
+ ///
+ [HttpPost]
+ public override ApiResult InsertDataModel(Dictionary inParam)
+ {
+ List ids = null;
+ ApiResult apiResult = new ApiResult();
+ return ExceptionHelper.TryReturnException(() =>
+ {
+ //对接获取
+ //inParam.Add("FMdmCode", GetMdmCode(inParam));
+ var ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0);
+ inParam.Add("FMdmCode", ts.TotalSeconds.ToString("F0"));
+ if (!inParam.ContainsKey("FMdmCode") || string.IsNullOrEmpty(inParam["FMdmCode"].ToString().Trim()))
+ {
+ apiResult.Error("获取MDM失败");
+ }
+ else
+ {
+ try
+ {
+ ids = MaterialTeamworkBll.UpdateFormula(inParam["FTestCode"].ToString(), inParam["FNewTestCode"].ToString());
+ inParam.TryGetValue("FState", out object state);
+ if (null == state)
+ {
+ inParam["FState"] = state = 1;
+ }
+ inParam.Remove("FID");
+ ApiAuthInfo user = Request.Properties["token"] as ApiAuthInfo;
+ if (inParam.ContainsKey("FAddUser"))
+ {
+ inParam["FAddUser"] = user.FID;
+ }
+ else
+ {
+ inParam.Add("FAddUser", user.FID);
+ }
+ if (inParam.ContainsKey("FEditUser"))
+ {
+ inParam["FEditUser"] = user.FID;
+ }
+ else
+ {
+ inParam.Add("FEditUser", user.FID);
+ }
+ if (inParam.ContainsKey("FEditDate"))
+ {
+ inParam["FEditDate"] = DateTime.Now;
+ }
+ else
+ {
+ inParam.Add("FEditDate", DateTime.Now);
+ }
+
+ //TUser tUser = BaseBll.GetTempModel(user.FID);
+ TFS_Factory factory = BaseBll.GetTempModel(int.Parse(inParam["FCreateFactoryID"].ToString()));
+ if (inParam.ContainsKey("FCreateFactoryID"))
+ {
+ inParam.Remove("FCreateFactoryID");
+ }
+ inParam.Add("FCreateFactoryID", factory.FID);
+ inParam.Add("FCreateFactoryCode", factory.FCode);
+ inParam.Add("FCreateFactoryType", factory.FType);
+ if (factory.FType != (int)Constant.FactoryType.单工厂)
+ {
+ factory = BaseBll.GetTempModel(factory.FFactoryID);
+ inParam.Add("FProdFactoryID", factory.FID);
+ inParam.Add("FProdFactoryCode", factory.FCode);
+ }
+ else
+ {
+ inParam.Add("FProdFactoryID", factory.FID);
+ inParam.Add("FProdFactoryCode", factory.FCode);
+ }
+ if (!inParam.ContainsKey("FSaleCode"))
+ {
+ inParam.Add("FSaleCode", "");
+ }
+
+ //创建 TFS_FTeamwork
+ int teamId = BaseBll.InsertDataModel(inParam, "TFS_MaterialFTeamwork");
+ apiResult.Data = teamId;
+ if (teamId > 0)
+ {
+ inParam.Add("FID", teamId);
+ //创建流程
+ int resultProcessCreate = MaterialTeamworkBll.CreateProcessData(teamId, user.FID);
+ if (resultProcessCreate > 0)
+ {
+ //直接走下一步
+ if (state.ToString().Contains("1"))
+ {
+ TFS_MaterialFTeamwork teamwork = BaseBll.GetTempModel(teamId);
+ List materialList = MaterialTeamworkBll.CheckMaterialListByTest2(teamwork.FNewTestCode, teamwork.FCreateFactoryID);
+ if (materialList.Count == 0)
+ {
+ MaterialTeamworkBll.CreateProductView(teamwork, null, user.FID);
+ //开始BOM下载
+ DockGetBomData(teamwork.FID, user.FID);
+ }
+ else
+ {
+ MaterialTeamworkBll.CreateProductView(teamwork, materialList, user.FID);
+ MaterialTeamworkBll.HasMaterialTestCode(teamwork);
+
+ /**
+ * 20230414 需求变更
+ * 在创建各类事项前,先创建物料分类事项
+ * 此处创建各类事项流程中断,转移至物料分类事项提交后进行
+ * **/
+ BaseBll.CreateTaskData2(teamwork.FID, user.FID, "15"); //新增物料分类事项
+ BaseBll.UpdateTeamProcess2(teamId, (int)Constant.ProcessType.物料分类, 2, 1); // 更新物料分类流程
+
+ ////补充包材规格
+ //BaseBll.CreateTaskData(teamId, user.FID, "14");
+ ////成品视图
+ //BaseBll.CreateTaskData(teamwork.FID, user.FID, "3", teamwork.FCreateFactoryID + "," + teamwork.FProdFactoryID);
+ ////成品视图物料组复核,有权限的所有
+ //BaseBll.CreateTaskData(teamwork.FID, user.FID, "12");
+ //teamwork = BaseBll.GetTempModel(teamId);
+ //if (teamwork.FPackID == -1) {
+ // //新增新包材事项
+ // BaseBll.CreateTaskData(teamId, user.FID, "9");
+ // BaseBll.UpdateTeamProcess(teamId, (int)Constant.ProcessType.组装BOM包含新包材, 2, 1);
+ //} else {
+ // BaseBll.UpdateTeamProcess(teamId, (int)Constant.ProcessType.组装BOM包含新包材, 3, 2);
+ //}
+ //BaseBll.UpdateTeamProcess(teamwork.FID, (int)Constant.ProcessType.协同发起, 3, 2);
+ //BaseBll.UpdateTeamProcess(teamwork.FID, (int)Constant.ProcessType.成品视图, 2, 1);
+ }
+ }
+ else
+ {
+ BaseBll.CreateTaskData2(teamId, user.FID, ((int)Constant.TaskType.配方选择).ToString());
+ BaseBll.UpdateTeamProcess2(teamId, (int)Constant.ProcessType.协同发起, 1, 1);
+ }
+ }
+ else
+ {
+ BaseBll.DeleteDataById(teamId, "TFS_FTeamwork", true);
+ apiResult.Error("流程创建失败,请稍后重试");
+ }
+ MaterialTeamworkBll.ChangeTeamProcess(teamId);
+ }
+ }
+ catch (Exception ex)
+ {
+ //失败则把修改的更新回去
+ ids = MaterialTeamworkBll.UpdateFormula(inParam["FTestCode"].ToString(), inParam["FNewTestCode"].ToString(),string.Join(",",ids));
+ throw;
+ }
+
+ }
+ }, apiResult, Request, inParam);
+ }
+
+ ///
+ /// 修改协同
+ ///
+ [HttpPost]
+ public override ApiResult UpdateDataModel(Dictionary inParam)
+ {
+ ApiResult apiResult = new ApiResult();
+ return ExceptionHelper.TryReturnException(() =>
+ {
+ ApiAuthInfo user = Request.Properties["token"] as ApiAuthInfo;
+ inParam.TryGetValue("FState", out object state);
+ if (null == state) { inParam["FState"] = state = 1; }
+ inParam.Remove("FEditUser");
+ inParam.Remove("FEditDate");
+ inParam.Add("FEditUser", user.FID);
+ inParam.Add("FEditDate", DateTime.Now);
+ apiResult.Data = UpdateData(inParam);
+ int updateCount = BaseBll.UpdateDataModel(inParam, "TFS_FTeamwork");
+ if (updateCount > 0)
+ {
+ if (state.ToString().Contains("1"))
+ {
+ int teamId = int.Parse(inParam["FID"].ToString());
+ TFS_MaterialFTeamwork teamwork = BaseBll.GetTempModel(teamId);
+ List materialList = MaterialTeamworkBll.CheckMaterialListByTest(teamwork.FTestCode, teamwork.FVersionCode);
+ if (materialList.Count == 0)
+ {
+ MaterialTeamworkBll.CreateProductView(teamwork, null, user.FID);
+ //开始BOM下载
+ DockGetBomData(teamwork.FID, user.FID);
+ }
+ else
+ {
+ MaterialTeamworkBll.CreateProductView(teamwork, materialList, user.FID);
+ MaterialTeamworkBll.HasMaterialTestCode(teamwork);
+
+ /**
+ * 20230414 需求变更
+ * 在创建各类事项前,先创建物料分类事项
+ * 此处创建各类事项流程中断,转移至物料分类事项提交后进行
+ * **/
+ BaseBll.CreateTaskData2(teamwork.FID, user.FID, "15"); //新增物料分类事项
+ BaseBll.UpdateTeamProcess2(teamId, (int)Constant.ProcessType.物料分类, 2, 1); // 更新物料分类流程
+
+ //if (teamwork.FPackID == -1)
+ //{
+ // BaseBll.CreateTaskData(teamId, user.FID, "9");//新增新包材事项
+ // BaseBll.UpdateTeamProcess(teamId, (int)Constant.ProcessType.组装BOM包含新包材, 2, 1);
+ //}
+ //else
+ //{
+ // BaseBll.UpdateTeamProcess(teamId, (int)Constant.ProcessType.组装BOM包含新包材, 3, 2);
+ //}
+ //BaseBll.CreateTaskData(teamId, user.FID, "14");//补充包材规格
+ //BaseBll.UpdateTeamProcess(teamwork.FID, (int)Constant.ProcessType.协同发起, 3, 2);
+ //BaseBll.UpdateTeamProcess(teamId, (int)Constant.ProcessType.成品视图, 2, 1);
+ }
+ MaterialTeamworkBll.ChangeTeamProcess(teamId);
+ }
+ }
+ apiResult.Data = inParam["FID"];
+ }, apiResult, Request, inParam);
+ }
+
+ ///
+ /// 手动对接BOM下载
+ ///
+ [HttpPost]
+ public ApiResult DockDownBomData(Dictionary inParam)
+ {
+ ApiResult apiResult = new ApiResult();
+ return ExceptionHelper.TryReturnException(() =>
+ {
+ if (inParam.ContainsKey("FTeamID"))
+ {
+ ApiAuthInfo user = Request.Properties["token"] as ApiAuthInfo;
+ int teamId = int.Parse(inParam["FTeamID"].ToString());
+ apiResult.Data = DockGetBomData(teamId, user.FID);
+ }
+ else
+ {
+ apiResult.Error("获取协同信息失败");
+ }
+ }, apiResult, Request, inParam);
+ }
+
+ ///
+ /// 获取协同视图信息
+ ///
+ [HttpPost]
+ public ApiResult GetTeamworkView(Dictionary inParam)
+ {
+ ApiResult apiResult = new ApiResult();
+ return ExceptionHelper.TryReturnException(() =>
+ {
+ if (inParam.ContainsKey("FTeamID"))
+ {
+ inParam.TryGetValue("FViewType", out object objType);
+ int intType = null == objType ? (int)Constant.TeamViewType.物料视图 : int.Parse(objType.ToString());
+ string selectSql = "", joinSql = "", whereSql = string.Format("TFS_FTeamwork.FID={0} ", inParam["FTeamID"]);
+ string basePath = AppDomain.CurrentDomain.BaseDirectory.Trim('\\');
+ string savePath = basePath + string.Format("\\File\\Temp\\{0}_{1}\\", inParam["FTeamID"], intType);
+ if (!Directory.Exists(savePath)) Directory.CreateDirectory(savePath);
+ string tempPath = savePath.Replace("\\File\\Temp\\", "\\File\\View\\");
+ if (!Directory.Exists(tempPath)) Directory.CreateDirectory(tempPath);
+ switch (intType)
+ {
+ case (int)Constant.TeamViewType.配方视图:
+ savePath += Constant.TeamViewType.配方视图.ToString();
+ //原始配方
+ whereSql = string.Format(@"dbo.StrExistInStr(TFS_ViewMaterial.FMaterialID,(select FMaterialFormulaIDs from TFS_FTeamwork where FID={0}))>0
+ and TFS_ViewMaterial.FFactoryID=(select FProdFactoryID from TFS_FTeamwork where FID={0})", inParam["FTeamID"]);
+ //生产、计划配方
+ joinSql = string.Format(@"(dbo.StrExistInStr(TFS_ViewMaterial.FMaterialID,(select FMaterialFormulaIDs from TFS_FTeamwork where FID={0}))>0
+ and TFS_Material.FSuccedaneumID<1)and TFS_ViewMaterial.FFactoryID=(select FProdFactoryID from TFS_FTeamwork where FID={0})",
+ inParam["FTeamID"]);
+ break;
+ case (int)Constant.TeamViewType.生产工艺路线视图:
+ savePath += Constant.TeamViewType.生产工艺路线视图.ToString();
+ //只要生产工厂
+ whereSql += string.Format(" and TFS_ViewMaterial.FFactoryID in(select FID from TFS_Factory where FType={0})", (int)Constant.FactoryType.单工厂);
+ //视图类型
+ List tempInt3_1 = new List
+ {
+ (int)Constant.ViewType.成品视图,
+ (int)Constant.ViewType.半成品视图,
+ (int)Constant.ViewType.香基视图,
+ (int)Constant.ViewType.中间品视图
+ };
+ whereSql += string.Format(" and TFS_ViewMaterial.FViewType in({0})", string.Join(",", tempInt3_1));
+ break;
+ case (int)Constant.TeamViewType.生产版本视图:
+ savePath += Constant.TeamViewType.生产版本视图.ToString();
+ //只要生产工厂
+ whereSql += string.Format(" and TFS_ViewMaterial.FFactoryID in(select FID from TFS_Factory where FType={0})", (int)Constant.FactoryType.单工厂);
+ //视图类型
+ List tempInt4_1 = new List
+ {
+ (int)Constant.ViewType.成品视图,
+ (int)Constant.ViewType.半成品视图,
+ (int)Constant.ViewType.中间品视图,
+ (int)Constant.ViewType.香基视图
+ };
+ whereSql += string.Format(" and TFS_ViewMaterial.FViewType in({0})", string.Join(",", tempInt4_1));
+ break;
+ case (int)Constant.TeamViewType.组装BOM视图:
+ savePath += Constant.TeamViewType.组装BOM视图.ToString();
+ //一级半成品、包材→无替代料的
+ whereSql = string.Format(@"(dbo.StrExistInStr(TFS_ViewMaterial.FMaterialID,(select FMaterialHalfIDs from TFS_FTeamwork where FID={0}))>0 or
+ TFS_ViewMaterial.FMaterialID in(select FMaterialID from TFS_PackageChild where FTeamID={0} or
+ FPackageID=(select FPackID from TFS_FTeamwork where FID={0})))
+ ", inParam["FTeamID"]);
+ //只要生产工厂
+ whereSql += string.Format(" and TFS_ViewMaterial.FFactoryID=(select FProdFactoryID from TFS_FTeamwork where FID={0})", inParam["FTeamID"]);
+ break;
+ case (int)Constant.TeamViewType.物料视图:
+ default:
+ savePath += Constant.TeamViewType.物料视图.ToString();
+ whereSql += " and TFS_ViewMaterial.FMaterialID>0";
+ break;
+ }
+ savePath += ".xlsx";
+
+ bool hasFinish = inParam.ContainsKey("FFinish");
+ if (hasFinish) savePath = savePath.Replace("\\File\\Temp\\", "\\File\\View\\");
+ if (!File.Exists(savePath) || !hasFinish)
+ {
+ if (inParam.ContainsKey("HalfId")) {
+ CreateExeclFile(intType, savePath, selectSql, whereSql, joinSql, inParam["FTeamID"].ToString(), inParam["HalfId"].ToString());
+ } else {
+ CreateExeclFile(intType, savePath, selectSql, whereSql, joinSql, inParam["FTeamID"].ToString(), "");
+ }
+ }
+ if (inParam.TryGetValue("FType", out objType) && objType.ToString().Equals("1"))
+ {
+ if (intType == (int)Constant.TeamViewType.配方视图)
+ {
+ apiResult.Data = new
+ {
+ List1 = NPOIHelper.ImportExceltoDt(savePath.Replace(".xlsx", "1.xlsx")),
+ List2 = NPOIHelper.ImportExceltoDt(savePath.Replace(".xlsx", "2.xlsx")),
+ List3 = NPOIHelper.ImportExceltoDt(savePath.Replace(".xlsx", "3.xlsx"))
+ };
+ }
+ else if (intType == (int)Constant.TeamViewType.生产版本视图 || intType == (int)Constant.TeamViewType.组装BOM视图)
+ {
+ //生产和计划
+ apiResult.Data = new
+ {
+ List1 = NPOIHelper.ImportExceltoDt(savePath.Replace(".xlsx", "1.xlsx")),
+ List2 = NPOIHelper.ImportExceltoDt(savePath.Replace(".xlsx", "2.xlsx")),
+ };
+ }
+ else
+ {
+ apiResult.Data = new
+ {
+ List1 = NPOIHelper.ImportExceltoDt(savePath)
+ };
+ }
+ }
+ else
+ {
+ apiResult.Data = Request.RequestUri.AbsoluteUri.Replace(Request.RequestUri.AbsolutePath, "") + savePath.Replace(basePath, "").Replace("\\", "/");
+ }
+ }
+ else
+ {
+ apiResult.Error("获取协同信息失败");
+ }
+ }, apiResult, Request, inParam);
+ }
+
+ ///
+ /// 更新物料分类
+ ///
+ ///
+ ///
+ [HttpPost]
+ public ApiResult EditTypeList(Dictionary inParam)
+ {
+ ApiResult apiResult = new ApiResult();
+ return ExceptionHelper.TryReturnException(() => {
+ if (inParam["tempId"] != null && inParam["taskId"]!=null)
+ {
+ string sql = "";
+ JArray item = JArray.Parse(inParam["list"].ToString());
+ for (int i = 0; i < item.Count; i++)
+ {
+ JObject a = JObject.Parse(item[i].ToString());
+ sql += string.Format("update TFS_Material set FTypeID1={0},FTypeID2={1} where FID={2};", a["FTypeID1"].ToString(), a["FTypeID2"].ToString(), a["FMaterialID"].ToString());
+ }
+ int count = MaterialTeamworkBll.ExecSql(sql);
+ apiResult.Data = NextTask(int.Parse(inParam["tempId"].ToString()),int.Parse(inParam["taskId"].ToString()));
+ }
+
+
+ }, apiResult, Request, inParam);
+
+ }
+
+
+ ///
+ /// 更新试验号
+ ///
+ ///
+ ///
+ //public ApiResult UpdateFormula(Dictionary inParam)
+ //{
+
+ // ApiResult apiResult = new ApiResult();
+ // return ExceptionHelper.TryReturnException(() =>
+ // {
+ // if (!inParam.ContainsKey("formula1"))
+ // {
+ // apiResult.Error("视图信息获取失败");
+ // }
+ // else
+ // {
+ // MaterialTeamworkBll.UpdateFormula(inParam["formula1"].ToString(), inParam["formula2"].ToString());
+ // }
+ // }, apiResult, Request, inParam);
+ //}
+
+ #region 对接相关
+
+
+ private int NextTask(int teamId,int taskId)
+ {
+ int result = 0;
+ List specifList = new List() { new Specifications() };
+ TFS_FTeamwork teamwork = BaseBll.GetTempModel(teamId);
+ try
+ {
+ ApiAuthInfo user = Request.Properties["token"] as ApiAuthInfo;
+ TFS_Formula formula = BaseBll.GetTempModel(teamwork.FFormulaID);
+ OAService oAService = new OAService();
+ specifList[0].Code = formula.FTestCode;
+ specifList[0].Version = formula.FVersionCode;
+ RestResult restResult = oAService.GetSpecificationsList(specifList.ToArray());
+ string bomStr = restResult.data == null ? "[]" : restResult.data.ToString();
+ ExceptionHelper.AddSystemJournal(Request, specifList[0], restResult,user.FID, "DockGetBomData");
+ List bomList = JsonConvert.DeserializeObject>(bomStr);
+
+
+ if (bomList != null && bomList.Count > 0)
+ {
+
+ //修改协同主数据
+ Dictionary upParam = new Dictionary
+ {
+ { "FID", teamwork.FID },
+ { "FBomState", 1 },
+ { "FBomJson", bomStr }
+ };
+ BaseBll.UpdateDataModel(upParam, "TFS_MaterialFTeamwork");
+ BaseBll.UpdateTeamProcess2(teamwork.FID, (int)Constant.ProcessType.物料分类, 2, 2);
+ int count= MaterialTeamworkBll.ExecSql(BaseBll.GetTaskSql(taskId, 2, teamId, (int)Constant.ProcessType.物料分类));
+
+
+ BaseBll.UpdateTeamProcess2(teamwork.FID, (int)Constant.ProcessType.替代品确认, 2, 1);
+ BaseBll.CreateTaskData2(teamwork.FID, user.FID, "16");//替代品确认
+
+
+ BaseBll.UpdateTeamProcess2(teamwork.FID, (int)Constant.ProcessType.协同发起, 3, 2);
+
+ if (teamwork.FPackID == -1)
+ {
+ BaseBll.CreateTaskData2(teamwork.FID, user.FID, "9");//新增新包材事项
+ BaseBll.UpdateTeamProcess2(teamwork.FID, (int)Constant.ProcessType.组装BOM包含新包材, 2, 1);
+ }
+ else
+ {
+ BaseBll.UpdateTeamProcess2(teamwork.FID, (int)Constant.ProcessType.组装BOM包含新包材, 3, 2);
+ }
+ //等类型修改结束使用
+ //成品视图
+ BaseBll.CreateTaskData2(teamwork.FID, user.FID, "3", teamwork.FCreateFactoryID + "," + teamwork.FProdFactoryID);
+ //补充包材规格
+ BaseBll.CreateTaskData2(teamwork.FID, user.FID, "14");
+ //成品视图物料组复核,有权限的所有
+ BaseBll.CreateTaskData2(teamwork.FID, user.FID, "12");
+ MaterialTeamworkBll.ChangeTeamProcess(teamwork.FID);
+ result = 1;
+ }
+
+ }
+ catch (Exception)
+ {
+
+ throw;
+ }
+ return result;
+ }
+
+ ///
+ /// 对接获取Bom数据
+ ///
+ private int DockGetBomData(int teamId, int userId)
+ {
+ int result = 0;
+ List specifList = new List() { new Specifications() };
+ TFS_MaterialFTeamwork teamwork = BaseBll.GetTempModel(teamId);
+ try
+ {
+ TFS_Formula formula = BaseBll.GetTempModel(teamwork.FFormulaID);
+ OAService oAService = new OAService();
+ specifList[0].Code = formula.FTestCode;
+ specifList[0].Version = formula.FVersionCode;
+ RestResult restResult = oAService.GetSpecificationsList(specifList.ToArray());
+ string bomStr = restResult.data == null ? "[]" : restResult.data.ToString();
+ ExceptionHelper.AddSystemJournal(Request, specifList[0], restResult, userId, "DockGetBomData");
+ List bomList = JsonConvert.DeserializeObject>(bomStr);
+ if (bomList != null && bomList.Count > 0)
+ {
+ //BOM数据梳理
+ Dictionary bomResult = CheckBomMaterial(bomList, 0, new Random());
+ bomResult["formulaIds"] = bomResult["formulaIds"].ToString().Replace(",,", ",").Trim(',');
+ bomResult["halfIds"] = bomResult["halfIds"].ToString().Replace(",,", ",").Trim(',');
+ List mateList = (List)bomResult["mateList"];
+ List viewList = (List)bomResult["viewList"];
+ //日志分开写12
+ ExceptionHelper.AddSystemJournal(Request, null, mateList, userId, "CheckBomMaterial1");
+ ExceptionHelper.AddSystemJournal(Request, null, viewList, userId, "CheckBomMaterial2");
+ //BOM数据处理
+ if (MaterialTeamworkBll.AnalysisBomData(mateList, viewList, teamwork.FID, userId, null, bomResult["halfIds"].ToString()))
+ {
+ mateList.Clear(); viewList.Clear();
+ List formulaList = (List)bomResult["formulaList"];
+ //日志分开写3
+ ExceptionHelper.AddSystemJournal(Request, null, new { formulaIds = bomResult["formulaIds"], halfIds = bomResult["halfIds"], formulaList }, userId, "CheckBomMaterial3");
+ //2022-09-22:要求写入配方中间表(有子集就是配方,走配方逻辑)
+ new FormulaBll().DockingRecipeData(formulaList, userId);
+ //修改协同主数据
+ Dictionary upParam = new Dictionary
+ {
+ { "FID", teamwork.FID },
+ { "FBomState", 1 },
+ { "FBomJson", bomStr }
+ };
+ BaseBll.UpdateDataModel(upParam, "TFS_MaterialFTeamwork");
+
+ /**
+ * 20230414 需求变更
+ * 在创建各类事项前,先创建物料分类事项
+ * 此处创建各类事项流程中断,转移至物料分类事项提交后进行
+ * **/
+ BaseBll.CreateTaskData2(teamwork.FID, userId, "15"); //新增物料分类事项
+ BaseBll.UpdateTeamProcess2(teamId, (int)Constant.ProcessType.物料分类, 2, 1); // 更新物料分类流程
+
+ ////协同发起事项
+ //BaseBll.UpdateTeamProcess(teamwork.FID, (int)Constant.ProcessType.协同发起, 3, 2);
+ //BaseBll.UpdateTeamProcess(teamwork.FID, (int)Constant.ProcessType.成品视图, 2, 1);
+ //if (teamwork.FPackID == -1)
+ //{
+ // BaseBll.CreateTaskData(teamwork.FID, userId, "9");//新增新包材事项
+ // BaseBll.UpdateTeamProcess(teamwork.FID, (int)Constant.ProcessType.组装BOM包含新包材, 2, 1);
+ //}
+ //else
+ //{
+ // BaseBll.UpdateTeamProcess(teamwork.FID, (int)Constant.ProcessType.组装BOM包含新包材, 3, 2);
+ //}
+ ////成品视图
+ //BaseBll.CreateTaskData(teamwork.FID, userId, "3", teamwork.FCreateFactoryID + "," + teamwork.FProdFactoryID);
+ ////补充包材规格
+ //BaseBll.CreateTaskData(teamwork.FID, userId, "14");
+ ////成品视图物料组复核,有权限的所有
+ //BaseBll.CreateTaskData(teamwork.FID, userId, "12");
+ OperateLogBll.Add(teamwork.FID, 2, "BOM下载成功", userId);
+ MaterialTeamworkBll.ChangeTeamProcess(teamwork.FID);
+ result = 1;
+ }
+ }
+ else
+ {
+ OperateLogBll.Add(teamwork.FID, 2, "BOM下载失败,BOM数据为空", userId);
+ BaseBll.CreateTaskData2(teamwork.FID, userId, ((int)Constant.TaskType.BOM下载).ToString());
+ BaseBll.UpdateTeamProcess2(teamwork.FID, (int)Constant.ProcessType.协同发起, 2, 1);
+ MaterialTeamworkBll.ChangeTeamProcess(teamwork.FID);
+ }
+ }
+ catch (Exception ex)
+ {
+ OperateLogBll.Add(teamwork.FID, 2, "BOM下载失败,请稍后重试(对接)", userId);
+ BaseBll.CreateTaskData2(teamwork.FID, userId, ((int)Constant.TaskType.BOM下载).ToString());
+ BaseBll.UpdateTeamProcess(teamwork.FID, (int)Constant.ProcessType.协同发起, 2, 1);
+ ExceptionHelper.AddSystemJournal(Request, specifList[0], ex.Message, userId, "DockGetBomData");
+ }
+ //日志添加
+ return result;
+ }
+
+
+
+
+
+ ///
+ /// 递归梳理BOM
+ ///
+ /// 需要解析的集合
+ /// 层级
+ /// 内部定义会有问题,需要外部传入
+ /// 父子级关系ID
+ private Dictionary CheckBomMaterial(List dataList, int materLevel, Random random, int parentId = -1)
+ {
+ List mateList = new List();
+ List viewList = new List();
+ List formulaList = new List();
+ string ids1 = "", ids2 = "";//需求变更ids2弃用
+ if (dataList != null && dataList.Count > 0)
+ {
+ foreach (BomModel item in dataList)
+ {
+ 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()
+ {
+ 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()
+ {
+ //FBaseFameCode = "",
+ //FBaseMaterialCode = material.FCode,
+ FBaseTestCode = material.FTestCode,
+ FExtraQuantity = item.Quantity,
+ FBaseMaterialDesc = material.FName,
+ FLevel = materLevel,
+ FBomMaterialID = material.FID
+ };
+ if (material.FType == "a" || material.FType == "f")
+ {
+ material.FType = "20";
+ }
+ else if (material.FType == "b" || material.FType == "bb" || material.FType == "i" || material.FType == "iz")
+ {
+ material.FType = "30";
+ }
+ else
+ {
+ material.FType = "40";
+ }
+
+ if (materLevel == 0)
+ {
+ material.FType = "20";
+ ids2 = material.FID + "";
+ }
+ if (material.FType == "40")
+ {
+ material.FCode = material.FPlmCode;
+ material.FPlmCode = "";
+ }
+
+ int.TryParse(material.FType, out int mType);
+ if (materLevel == 1) ids1 += material.FID + ",";
+ switch (mType)
+ {
+ case (int)Constant.MaterialType.产成品:
+ view.FViewType = 1;
+ break;
+ case (int)Constant.MaterialType.半成品:
+ view.FViewType = (int)Constant.ViewType.半成品视图;
+ break;
+ case (int)Constant.MaterialType.中间品:
+ view.FViewType = material.FName.Contains("香基") ? (int)Constant.ViewType.香基视图 : (int)Constant.ViewType.中间品视图;
+ 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;
+ }
+ mateList.Add(material);
+ viewList.Add(view);
+
+ if (item.Specifications != null && item.Specifications.Count > 0)
+ {
+ Dictionary 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)childData["mateList"]);
+ viewList.AddRange((List)childData["viewList"]);
+ formulaList.AddRange((List)childData["formulaList"]);
+ ids1 = ids1.Trim(',') + "," + childData["formulaIds"] + ",";
+ ids2 = ids2.Trim(',') + "," + childData["halfIds"] + ",";
+ }
+ }
+ }
+ return new Dictionary
+ {
+ { "mateList", mateList },
+ { "viewList", viewList },
+ { "formulaList", formulaList },
+ { "formulaIds", ids1.Trim(',') },
+ { "halfIds", ids2.Trim(',') }
+ };
+ }
+
+ ///
+ /// 获取JObject值
+ ///
+ private string GetValue(JObject item, string optStr)
+ {
+ string[] options = optStr.Split('&');
+ for (int i = 0; i < options.Length; i++)
+ {
+ if (item.ContainsKey(options[i])) return item[options[i]].ToString();
+ }
+ return "";
+ }
+
+ #endregion
+
+ #region 内部方法
+
+ ///
+ /// 创建Excel文件
+ ///
+ private void CreateExeclFile(int intType, string savePath, string selectSql, string whereSql, string joinSql, string teamId, string halfId)
+ {
+ List filedList = MaterialTeamworkBll.GetTeamworkViewField(intType);
+ foreach (TFS_ViewFieldInfo field in filedList)
+ {
+ if (string.IsNullOrEmpty(field.FField))
+ {
+ selectSql += string.Format("'{0}' as '{1}'", string.IsNullOrEmpty(field.FDefault) ? "" : field.FDefault, field.FName);
+ }
+ else
+ {
+ selectSql += string.Format("isnull({0},'') as '{1}'", field.FField, field.FName);
+ }
+ selectSql += ",";
+ }
+ selectSql = selectSql.Replace("@FTeamID@", teamId);
+ selectSql = selectSql.Replace("@FMaterialID@", halfId);
+ DataTable dataList = new DataTable();
+ if (intType == (int)Constant.TeamViewType.组装BOM视图)
+ {
+ dataList = MaterialTeamworkBll.GetTeamworkViewData2(selectSql.Trim(','), whereSql, joinSql);
+ dataList.Columns.Remove("FMaterialID");
+ DataTable dataList2 = dataList.Copy();
+ List hasField = new List();
+ hasField.Add(dataList.Columns.Contains("BOM用途"));
+ hasField.Add(dataList.Columns.Contains("子项序号"));
+ hasField.Add(dataList.Columns.Contains("组件损耗率"));
+ hasField.Add(dataList.Columns.Contains("固定损耗数量"));
+ int rowCount = dataList.Rows.Count;
+
+ //生产组装BOM处理
+ for (int i = 0; i < rowCount; i++)
+ {
+ if (hasField[0]) dataList.Rows[i]["BOM用途"] = "Y";
+ if (hasField[1]) dataList.Rows[i]["子项序号"] = (i + 1) * 10;
+ if (hasField[2]) dataList.Rows[i]["组件损耗率"] = "";
+ if (hasField[3]) dataList.Rows[i]["固定损耗数量"] = "";
+ dataList.Rows[i]["可选文本"] = "生产组装BOM";
+ }
+ NPOIHelper.ExportDTtoExcel(dataList, "Sheet1", savePath.Replace(".xlsx", "1.xlsx"));
+
+ //计划组装BOM处理
+ DataTable dataList3 = dataList2.Copy();
+ for (int i = 0; i < rowCount; i++)
+ {
+ if (hasField[1])
+ {
+ dataList2.Rows[i]["子项序号"] = (i + 1) * 10;
+ }
+ if (hasField[3] && !string.IsNullOrEmpty(dataList2.Rows[i]["固定损耗数量"].ToString()) && !dataList2.Rows[i]["固定损耗数量"].ToString().Equals("0"))
+ {
+ dataList3.Rows[i]["组件数量"] = "";
+ dataList3.Rows[i]["组件损耗率"] = "";
+ dataList3.Rows[i]["固定损耗数量"] = "X";
+ if (hasField[1]) dataList3.Rows[i]["子项序号"] = (i + rowCount + 1) * 10;
+ dataList3.Rows[i]["可选文本"] = "计划组装BOM";
+ dataList2.ImportRow(dataList3.Rows[i]);
+ }
+ dataList2.Rows[i]["固定损耗数量"] = "";
+ dataList2.Rows[i]["可选文本"] = "计划组装BOM";
+ }
+ NPOIHelper.ExportDTtoExcel(dataList2, "Sheet1", savePath.Replace(".xlsx", "2.xlsx"));
+ for (int i = 0; i < dataList2.Rows.Count; i++)
+ {
+ if (i == 0) dataList.Rows.Add("[换色]");
+ dataList.ImportRow(dataList2.Rows[i]);
+ }
+ }
+ else if (intType == (int)Constant.TeamViewType.配方视图)
+ {
+ //原始配方
+ DataTable dataList1 = MaterialTeamworkBll.GetTeamworkViewData2(selectSql.Trim(','), whereSql);
+ TFS_FTeamwork teamwork = BaseBll.GetTempModel("FID=" + teamId);
+ List bfList = JsonConvert.DeserializeObject>(teamwork.FBomFormula);
+ //SetBFData(null, bfList, dataList1);
+ List forIdList = teamwork.FMaterialFormulaIDs.Split(',').ToList();
+
+ DataTable tempTable = dataList1.Copy();
+ tempTable.Rows.Clear();
+ DataTable totalTable = tempTable.Copy();
+
+ List rowList = SetXHData(null, bfList, dataList1, forIdList, 1);
+ foreach (var item in rowList)
+ {
+ tempTable.Rows.Add(item.ItemArray);
+ totalTable.Rows.Add(item.ItemArray);
+ }
+ tempTable.Columns.Remove("FMaterialID");
+ NPOIHelper.ExportDTtoExcel(tempTable, "Sheet1", savePath.Replace(".xlsx", "1.xlsx"));
+ tempTable = dataList1.Copy();
+ tempTable.Rows.Clear();
+
+ rowList = SetXHData(null, bfList, dataList1, forIdList, 2);
+ totalTable.Rows.Add("[换色]");
+ foreach (var item in rowList)
+ {
+ tempTable.Rows.Add(item.ItemArray);
+ totalTable.Rows.Add(item.ItemArray);
+ }
+ tempTable.Columns.Remove("FMaterialID");
+ NPOIHelper.ExportDTtoExcel(tempTable, "Sheet1", savePath.Replace(".xlsx", "2.xlsx"));
+ tempTable = dataList1.Copy();
+ tempTable.Rows.Clear();
+
+ rowList = SetXHData(null, bfList, dataList1, forIdList, 3);
+ totalTable.Rows.Add("[换色]");
+ foreach (var item in rowList)
+ {
+ tempTable.Rows.Add(item.ItemArray);
+ totalTable.Rows.Add(item.ItemArray);
+ }
+ tempTable.Columns.Remove("FMaterialID");
+ NPOIHelper.ExportDTtoExcel(tempTable, "Sheet1", savePath.Replace(".xlsx", "3.xlsx"));
+ tempTable.Rows.Clear();
+
+ dataList = totalTable;
+ dataList.Columns.Remove("FMaterialID");
+
+ /*dataList1.Columns.Remove("FMaterialID");
+ List hasField = new List
+ {
+ dataList1.Columns.Contains("BOM用途"),
+ dataList1.Columns.Contains("子项序号"),
+ dataList1.Columns.Contains("组件损耗率"),
+ dataList1.Columns.Contains("固定损耗数量"),
+ dataList1.Columns.Contains("BOM项目文本2")
+ };
+ int rowCount = dataList1.Rows.Count;
+ for (int i = 0; i < rowCount; i++)
+ {
+ //if (hasField[0]) dataList1.Rows[i]["BOM用途"] = "1";
+ if (hasField[1]) dataList1.Rows[i]["子项序号"] = (i + 1) * 10;
+ if (hasField[2]) dataList1.Rows[i]["组件损耗率"] = "";
+ if (hasField[3]) dataList1.Rows[i]["固定损耗数量"] = "";
+ if (hasField[4]) dataList1.Rows[i]["BOM项目文本2"] = "";
+ dataList1.Rows[i]["可选文本"] = "原始BOM配方";
+ dataList.ImportRow(dataList1.Rows[i]);
+ }
+ NPOIHelper.ExportDTtoExcel(dataList1, "Sheet1", savePath.Replace(".xlsx", "1.xlsx"));
+ dataList = dataList1.Copy();
+ //生产配方
+ DataTable dataList2 = TeamworkBll.GetTeamworkViewData2(selectSql.Trim(','), joinSql.Trim(','));
+ SetBFData(null, bfList, dataList2);
+ dataList2.Columns.Remove("FMaterialID");
+ DataTable dataList3 = dataList2.Copy();
+ string fuIds = "";
+ dataList.Rows.Add("[换色]");
+ rowCount = dataList2.Rows.Count;
+ for (int i = 0; i < rowCount; i++)
+ {
+ if (hasField[0]) dataList2.Rows[i]["BOM用途"] = "Y";
+ if (hasField[1]) dataList2.Rows[i]["子项序号"] = (i + 1) * 10;
+ if (hasField[2]) dataList2.Rows[i]["组件损耗率"] = "";
+ if (hasField[3]) dataList2.Rows[i]["固定损耗数量"] = "";
+ if (hasField[4])
+ {
+ if (!string.IsNullOrEmpty(dataList3.Rows[i]["BOM项目文本2"].ToString()))
+ {
+ fuIds += dataList3.Rows[i]["BOM项目文本2"].ToString() + ",";
+ }
+ dataList2.Rows[i]["BOM项目文本2"] = "";
+ }
+ dataList2.Rows[i]["可选文本"] = "生产BOM配方";
+ dataList.ImportRow(dataList2.Rows[i]);
+ }
+ if (!string.IsNullOrEmpty(fuIds))
+ {
+ joinSql = string.Format("TFS_ViewMaterial.FMaterialID in({0}) and ", fuIds.Trim(',')) + joinSql.Substring(joinSql.IndexOf("TFS_ViewMaterial.FFactoryID"));
+ DataTable tempList = TeamworkBll.GetTeamworkViewData2(selectSql.Trim(','), joinSql.Trim(','));
+ tempList.Columns.Remove("FMaterialID");
+ foreach (DataRow dr in tempList.Rows)
+ {
+ dataList2.ImportRow(dr);
+ dataList3.ImportRow(dr);
+ if (hasField[0])
+ {
+ dataList2.Rows[dataList2.Rows.Count - 1]["BOM用途"] = "Y";
+ dataList3.Rows[dataList3.Rows.Count - 1]["BOM用途"] = "1";
+ }
+ if (hasField[1])
+ {
+ dataList2.Rows[dataList2.Rows.Count - 1]["子项序号"] = dataList2.Rows.Count * 10;
+ dataList3.Rows[dataList3.Rows.Count - 1]["子项序号"] = dataList2.Rows.Count * 10;
+ }
+ if (hasField[2])
+ {
+ dataList2.Rows[dataList2.Rows.Count - 1]["组件损耗率"] = "";
+ dataList3.Rows[dataList3.Rows.Count - 1]["组件损耗率"] = "";
+ }
+ if (hasField[3])
+ {
+ dataList2.Rows[dataList2.Rows.Count - 1]["固定损耗数量"] = "";
+ }
+ if (hasField[4])
+ {
+ dataList2.Rows[dataList2.Rows.Count - 1]["BOM项目文本2"] = "";
+ dataList3.Rows[dataList3.Rows.Count - 1]["BOM项目文本2"] = "";
+ }
+ dataList2.Rows[dataList2.Rows.Count - 1]["可选文本"] = "生产BOM配方";
+ dataList3.Rows[dataList3.Rows.Count - 1]["可选文本"] = "计划BOM配方";
+ dataList.ImportRow(dataList2.Rows[dataList2.Rows.Count - 1]);
+ }
+ }
+ NPOIHelper.ExportDTtoExcel(dataList2, "Sheet1", savePath.Replace(".xlsx", "2.xlsx"));
+ //计划配方
+ dataList.Rows.Add("[换色]");
+ rowCount = dataList3.Rows.Count;
+ for (int i = 0; i < rowCount; i++)
+ {
+ if (hasField[0]) dataList3.Rows[i]["BOM用途"] = "1";
+ if (hasField[1]) dataList3.Rows[i]["子项序号"] = (i + 1) * 10;
+ if (hasField[3])
+ {
+ if (!string.IsNullOrEmpty(dataList3.Rows[i]["固定损耗数量"].ToString()))
+ {
+ DataRow dr = dataList3.Copy().Rows[i];
+ dr["组件数量"] = dataList3.Rows[i]["固定损耗数量"];
+ dr["组件损耗率"] = "";
+ dr["固定损耗数量"] = "X";
+ if (hasField[4]) dr["BOM项目文本2"] = "";
+ if (hasField[1]) dr["子项序号"] = (dataList3.Rows.Count + 1) * 10;
+ dr["可选文本"] = "计划BOM配方";
+ dataList3.ImportRow(dr);
+ }
+ dataList3.Rows[i]["固定损耗数量"] = "";
+ if (hasField[4]) dataList3.Rows[i]["BOM项目文本2"] = "";
+ }
+ dataList3.Rows[i]["可选文本"] = "计划BOM配方";
+ }
+ NPOIHelper.ExportDTtoExcel(dataList3, "Sheet1", savePath.Replace(".xlsx", "3.xlsx"));
+ rowCount = dataList3.Rows.Count;
+ for (int i = 0; i < rowCount; i++) { dataList.ImportRow(dataList3.Rows[i]); }*/
+ }
+ else
+ {
+ dataList = MaterialTeamworkBll.GetTeamworkViewData(selectSql.Trim(','), whereSql, joinSql);
+ dataList.Columns.Remove("FMaterialID");
+ if (intType == (int)Constant.TeamViewType.生产版本视图)
+ {
+ NPOIHelper.ExportDTtoExcel(dataList, "Sheet1", savePath.Replace(".xlsx", "1.xlsx"));
+ int rowCount = dataList.Rows.Count;
+ bool isChange = dataList.Columns.Contains("BOM用途");
+
+ DataTable dataList2 = dataList.Copy();
+ for (int i = 0; i < rowCount; i++)
+ {
+ if (isChange && dataList2.Rows[i]["BOM用途"].ToString() == "1")
+ {
+ dataList2.Rows[i]["BOM用途"] = "Y";
+ }
+ }
+ NPOIHelper.ExportDTtoExcel(dataList2, "Sheet1", savePath.Replace(".xlsx", "2.xlsx"));
+ for (int i = 0; i < rowCount; i++)
+ {
+ if (i == 0) dataList.Rows.Add("[换色]");
+ dataList.ImportRow(dataList2.Rows[i]);
+ }
+ }
+ }
+ if (intType == (int)Constant.TeamViewType.物料视图)
+ {
+ //處理名字點
+ }
+ NPOIHelper.ExportDTtoExcel(dataList, "Sheet1", savePath);
+ }
+
+ ///
+ /// 梳理父项
+ ///
+ private void SetBFData(TFS_ViewMaterial parent, List bfList, DataTable dtList)
+ {
+ if (bfList != null && bfList.Count > 0)
+ {
+ foreach (var item in bfList)
+ {
+ if (parent != null)
+ {
+ DataRow[] rows = dtList.Select("FMaterialID=" + item.mId);
+ foreach (var row in rows)
+ {
+ row["父项编码"] = parent.FBaseMaterialCode;
+ row["父项描述"] = parent.FBaseMaterialDesc;
+ row["基本数量"] = parent.FExtraQuantity;
+ }
+ }
+ if (item.childs.Count > 0)
+ {
+ SetBFData(BaseBll.GetTempModel("FMaterialID=" + item.mId), item.childs, dtList);
+ }
+ }
+ }
+ }
+
+ ///
+ /// 梳理序号(type:1原始,2生产,3计划)
+ ///
+ private List SetXHData(BomFormulaDto parent, List bfList, DataTable dtList, List forIdList, int type)
+ {
+ if (bfList != null && bfList.Count > 0)
+ {
+ //物料、替代、副产、固损
+ List> rowList = new List>() { new List(), new List(), new List(), new List() };
+ foreach (BomFormulaDto item in bfList)
+ {
+ DataRow[] rows = dtList.Select("FMaterialID=" + item.mId);
+ if (rows != null && rows.Length > 0)
+ {
+ string mId = rows[0]["FMaterialID"].ToString();
+ if (forIdList.IndexOf(mId) != -1)
+ {
+ DataRow main = dtList.Copy().Select("FMaterialID=" + item.mId)[0];
+ if (parent != null)
+ {
+ TFS_ViewMaterial temp = BaseBll.GetTempModel("FMaterialID=" + parent.mId);
+ if (temp != null)
+ {
+ main["父项编码"] = temp.FBaseMaterialCode;
+ main["父项描述"] = temp.FBaseMaterialDesc;
+ main["基本数量"] = temp.FExtraQuantity;
+ }
+ }
+ main["BOM项目文本2"] = "";
+ //固定损耗
+ if (type == 3 && !string.IsNullOrEmpty(main["固定损耗数量"].ToString()))
+ {
+ DataRow drGu = dtList.Copy().Select("FMaterialID=" + item.mId)[0];
+ drGu["组件数量"] = main["固定损耗数量"];
+ drGu["组件损耗率"] = "";
+ drGu["固定损耗数量"] = "X";
+ drGu["BOM项目文本2"] = "";
+ drGu["可选文本"] = "计划BOM配方";
+ rowList[3].Add(drGu);
+ }
+ if (type > 1)
+ {
+ {
+ //副产物判断
+ TFS_Material mTi = BaseBll.GetTempModel(string.Format("FID=(select a.FFuProductsID from TFS_Material a where a.FID={0})", mId));
+ if (mTi != null)
+ {
+ DataRow drFu = dtList.Copy().Select("FMaterialID=" + item.mId)[0];
+ TFS_ViewMaterial vTi = BaseBll.GetTempModel(string.Format("FMaterialID={0}", mTi.FID));
+ TFS_MaterialInfo iTi = BaseBll.GetTempModel(string.Format("FType=2 and FDataID={0}", mTi.FID));
+ if (iTi == null) iTi = new TFS_MaterialInfo();
+ DataRow drTi = dtList.Copy().Select("FMaterialID=" + item.mId)[0];
+ drFu["子项编码"] = vTi == null ? mTi.FCode : vTi.FBaseMaterialCode;
+ drFu["子件描述"] = vTi == null ? mTi.FName : vTi.FBaseMaterialDesc;
+ drFu["组件数量"] = vTi == null ? drTi["组件数量"] : vTi.FExtraQuantity;
+ drFu["计量单位"] = vTi == null ? mTi.FBaseUnit : vTi.FBaseBasicMeter;
+ drFu["物料供应标识符"] = mTi == null ? iTi.FCustomerCode : mTi.FSupplyCode;
+ drFu["生产仓储地点"] = vTi == null ? iTi.FStoreHouse : vTi.FMRP2ExternalStoragePlace;
+ drFu["成本核算标识相关"] = (mTi != null ? mTi.FSupplyCode : drTi["物料供应标识符"].ToString()) == "K" ? "" : "X";
+ drFu["固定损耗数量"] = mTi == null ? iTi.FFixedLoss : mTi.FFixedLoss;
+ if (type == 3) drFu["BOM用途"] = "Y";
+ rowList[2].Add(drFu);
+ }
+ }
+ {
+ //替代料判断
+ TFS_Material mTi = BaseBll.GetTempModel(string.Format("FID=(select a.FSuccedaneumID from TFS_Material a where a.FID={0})", mId));
+ if (mTi != null)
+ {
+ TFS_ViewMaterial vTi = BaseBll.GetTempModel(string.Format("FMaterialID={0}", mTi.FID));
+ TFS_MaterialInfo iTi = BaseBll.GetTempModel(string.Format("FType=2 and FDataID={0}", mTi.FID));
+ if (iTi == null) iTi = new TFS_MaterialInfo();
+ DataRow drTi = dtList.Copy().Select("FMaterialID=" + item.mId)[0];
+ drTi["子项编码"] = vTi == null ? mTi.FCode : vTi.FBaseMaterialCode;
+ drTi["子件描述"] = vTi == null ? mTi.FName : vTi.FBaseMaterialDesc;
+ drTi["组件数量"] = vTi == null ? drTi["组件数量"] : vTi.FExtraQuantity;
+ drTi["计量单位"] = vTi == null ? mTi.FBaseUnit : vTi.FBaseBasicMeter;
+ drTi["物料供应标识符"] = mTi == null ? iTi.FCustomerCode : mTi.FSupplyCode;
+ drTi["生产仓储地点"] = vTi == null ? iTi.FStoreHouse : vTi.FMRP2ExternalStoragePlace;
+ drTi["成本核算标识相关"] = (mTi != null ? mTi.FSupplyCode : drTi["物料供应标识符"].ToString()) == "K" ? "" : "X";
+ drTi["固定损耗数量"] = mTi == null ? iTi.FFixedLoss : mTi.FFixedLoss;
+ main = drTi;
+ }
+ }
+ }
+ if (type == 2) main["BOM用途"] = "Y";
+ rowList[0].Add(main);
+ }
+ }
+ }
+ if (type != 1) { rowList[0].AddRange(rowList[1]); rowList[0].AddRange(rowList[2]); }
+ if (type == 3) rowList[0].AddRange(rowList[3]);
+ for (int i = 0; i < rowList[0].Count; i++)
+ {
+ rowList[0][i]["子项序号"] = (i + 1) * 10;
+ switch (type)
+ {
+ case 1: rowList[0][i]["可选文本"] = "原始BOM配方"; break;
+ case 2: rowList[0][i]["可选文本"] = "生产BOM配方"; break;
+ case 3: rowList[0][i]["可选文本"] = "计划BOM配方"; break;
+ }
+ }
+ foreach (BomFormulaDto item in bfList)
+ {
+ if (item.childs != null && item.childs.Count > 0)
+ {
+ List temps = SetXHData(item, item.childs, dtList, forIdList, type);
+ if (temps.Count > 0) rowList[0].AddRange(temps);
+ }
+ }
+ return rowList[0];
+ }
+ return new List();
+ }
+
+ #endregion
+ }
+}
diff --git a/FactorySystemApi/Controllers/TeamworkController.cs b/FactorySystemApi/Controllers/TeamworkController.cs
index cfe1431..dd44e73 100644
--- a/FactorySystemApi/Controllers/TeamworkController.cs
+++ b/FactorySystemApi/Controllers/TeamworkController.cs
@@ -992,7 +992,7 @@ namespace FactorySystemApi.Controllers
}
else
{
- dataList = TeamworkBll.GetTeamworkViewData(selectSql.Trim(','), whereSql, joinSql);
+ dataList = TeamworkBll.GetTeamworkViewData2(selectSql.Trim(','), whereSql, joinSql);
dataList.Columns.Remove("FMaterialID");
if (intType == (int)Constant.TeamViewType.生产版本视图)
{
diff --git a/FactorySystemApi/FactorySystemApi.csproj b/FactorySystemApi/FactorySystemApi.csproj
index 0d56cf8..ffaf07a 100644
--- a/FactorySystemApi/FactorySystemApi.csproj
+++ b/FactorySystemApi/FactorySystemApi.csproj
@@ -190,7 +190,9 @@
+
+
@@ -307,6 +309,8 @@
+
+
diff --git a/FactorySystemBll/BaseBll.cs b/FactorySystemBll/BaseBll.cs
index 6119d24..7bb4c7e 100644
--- a/FactorySystemBll/BaseBll.cs
+++ b/FactorySystemBll/BaseBll.cs
@@ -221,6 +221,52 @@ namespace FactorySystemBll
}
}
+ ///
+ /// 试验号变更修改流程进度
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public void UpdateTeamProcess2(int teamId, int proType, int proProgress, int proState = -1, string appWhere = "1=1")
+ {
+ SqlSugarClient db = AppSettingsHelper.GetSqlSugar();
+ TBasicCode basicCode = db.Queryable().Where(s => s.FValue == proType.ToString()
+ && s.FType == (int)Constant.BasicCode.流程类型).First();
+ if (basicCode != null)
+ {
+ Dictionary updateModel = new Dictionary();
+ switch (proProgress)
+ {
+ case 1:
+ updateModel.Add("FDesc", basicCode.F1);
+ break;
+ case 2:
+ updateModel.Add("FDesc", basicCode.F2);
+ break;
+ case 3:
+ updateModel.Add("FDesc", basicCode.F3);
+ break;
+ case 4:
+ updateModel.Add("FDesc", basicCode.F4);
+ break;
+ case 5:
+ updateModel.Add("FDesc", basicCode.F5);
+ break;
+ }
+ if (proState > 0)
+ {
+ updateModel.Add("FState", proState);
+ if (proState == 1) updateModel.Add("FStartDate", DateTime.Now);
+ else if (proState == 2) updateModel.Add("FFinishDate", DateTime.Now);
+ }
+ updateModel.Add("FProgress", proProgress);
+ db.Updateable(updateModel).Where(s => s.FTeamID == teamId && s.FType == proType)
+ .Where(appWhere).ExecuteCommand();
+ }
+ }
+
///
/// 创建数据库表
///
@@ -376,6 +422,150 @@ namespace FactorySystemBll
}
}
+ ///
+ /// 更换试验号流程创建事项
+ ///
+ public static void CreateTaskData2(int teamId, int userId, string taskTypes, string factoryId = "", bool onceMore = true, SqlSugarClient db = null)
+ {
+ List insertList = new List();
+ List updateList = new List();
+ List messageList = new List();
+ try
+ {
+ if (db == null) db = AppSettingsHelper.GetSqlSugar();
+
+ List taskTypeList = taskTypes.Split(',').ToList();
+
+ List basicCodeList = db.Queryable().Where(s => s.FType == (int)Constant.BasicCode.事项类型
+ && s.FState == 1 && taskTypeList.Contains(s.FValue)).ToList();
+
+ PropertyInfo[] basicCodeProps = typeof(TBasicCode).GetProperties();
+ for (int i = 0; i < taskTypeList.Count; i++)
+ {
+ TBasicCode basicCode = basicCodeList.Find(s => s.FValue == taskTypeList[i]);
+ if (basicCode == null) continue;
+
+ string[] temps = basicCode.FRemark.Split('_');
+ int temp0 = int.Parse(temps[0]), funcType = -1;
+ string taskDesc = basicCode.F1;
+
+ List funcVal = new List();
+ switch (temp0)
+ {
+ case (int)Constant.BasicCode.事项权限:
+ funcType = (int)Constant.RoleType.事项权限;
+ funcVal.Add(temps[1]);
+ break;
+ case (int)Constant.BasicCode.物料视图编辑:
+ funcType = (int)Constant.RoleType.物料视图编辑;
+ string tType = temps[1];
+ funcVal = db.Queryable().Where(s => s.FType == (int)Constant.BasicCode.物料视图编辑 &&
+ s.F1 == tType && s.FState == 1).Select(s => s.FValue).ToList();
+ break;
+ }
+ if (funcType > 0)
+ {
+ 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.IsNullOrEmpty(factoryId) ? "1=1" : 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)
+ {
+ if (string.IsNullOrEmpty(factoryId))
+ {
+ TFS_MaterialTask newTask = new TFS_MaterialTask()
+ {
+ FName = basicCode.FName,
+ FDesc = taskDesc,
+ FTeamID = teamId,
+ FEditUser = userId,
+ FFactoryID = -1,
+ FAddDate = DateTime.Now,
+ FCanEdit = 1,
+ FEditDate = DateTime.Now,
+ FType = int.Parse(basicCode.FValue),
+ FUserID = string.Join(",", users.GroupBy(ss => ss.FID).Select(sss => sss.Key)),
+ FUserName = string.Join("、", users.GroupBy(ss => ss.FName).Select(sss => sss.Key)),
+ FState = 1
+ };
+ TFS_MaterialTask oldTask = db.Queryable().Where(s => s.FTeamID == teamId && s.FType == newTask.FType
+ && s.FFactoryID == newTask.FFactoryID).First();
+ if (oldTask == null)
+ {
+ insertList.Add(newTask);
+ messageList.Add(new MessageDto()
+ {
+ message = newTask.FDesc,
+ userId = string.Join(",", users.GroupBy(ss => ss.FDockID).Select(sss => sss.Key))
+ });
+ }
+ else
+ {
+ oldTask.FUserID = newTask.FUserID;
+ updateList.Add(oldTask);
+ }
+ }
+ else
+ {
+ foreach (var factory in users.GroupBy(s => s.FFactoryID))
+ {
+ TFS_MaterialTask newTask = new TFS_MaterialTask()
+ {
+ FName = basicCode.FName,
+ FDesc = taskDesc,
+ FTeamID = teamId,
+ FEditUser = userId,
+ FFactoryID = factory.Key,
+ FAddDate = DateTime.Now,
+ FCanEdit = 1,
+ FEditDate = DateTime.Now,
+ FType = int.Parse(basicCode.FValue),
+ FUserID = string.Join(",", factory.GroupBy(ss => ss.FID).Select(sss => sss.Key)),
+ FUserName = string.Join("、", factory.GroupBy(ss => ss.FName).Select(sss => sss.Key)),
+ FState = 1
+ };
+ TFS_MaterialTask oldTask = db.Queryable().Where(s => s.FTeamID == teamId && s.FType == newTask.FType
+ && s.FFactoryID == factory.Key).First();
+ if (oldTask == null)
+ {
+ insertList.Add(newTask);
+ messageList.Add(new MessageDto()
+ {
+ message = newTask.FDesc,
+ userId = string.Join(",", factory.GroupBy(ss => ss.FDockID).Select(sss => sss.Key))
+ });
+ }
+ else
+ {
+ oldTask.FUserID = newTask.FUserID;
+ updateList.Add(oldTask);
+ }
+ }
+ }
+ }
+ }
+ }
+ if (insertList.Count() > 0)
+ {
+ db.Insertable(insertList).ExecuteCommand();
+ SendWeChatMessage(messageList);
+ }
+ if (updateList.Count() > 0) db.Updateable(updateList).ExecuteCommand();
+ }
+ catch (Exception ex)
+ {
+ if (onceMore)
+ {
+ CreateTaskData(teamId, userId, taskTypes, factoryId, false);
+ }
+ else
+ {
+ insertList.AddRange(updateList);
+ ExceptionHelper.AddSystemJournal(null, insertList, ex.Message, userId, "TeamworkBll.CreateTaskData");
+ }
+ }
+ }
+
///
/// 发送微信消息
///
@@ -417,6 +607,23 @@ namespace FactorySystemBll
return string.Format(@"update a set {0} from TFS_Task a where {1} {2};", updateSql, string.Join(" and ", whereSql), sqlAppend);
}
+ ///
+ /// 试验号更换事项变更SQL语句
+ ///
+ public static string GetTaskSql2(int taskId, int taskState, int teamId = -1, int taskType = -1, int taskEdit = -1, string sqlAppend = "")
+ {
+ string updateSql = string.Format("a.FState={0}", taskState);
+ if (taskState == 2) updateSql += ",FFinishDate=isnull(a.FFinishDate, getdate())";
+ if (taskEdit > 0) updateSql += string.Format(",a.FCanEdit={0}", taskEdit);
+ List whereSql = new List();
+ if (taskId > 0) whereSql.Add(string.Format("a.FID={0}", taskId));
+ if (teamId > 0) whereSql.Add(string.Format("a.FTeamID={0}", teamId));
+ if (taskType > 0) whereSql.Add(string.Format("a.FType={0}", taskType));
+ if (whereSql.Count == 0 && string.IsNullOrEmpty(sqlAppend)) return "";
+ if (!string.IsNullOrEmpty(sqlAppend) && whereSql.Count > 0) sqlAppend = " and " + sqlAppend;
+ return string.Format(@"update a set {0} from TFS_Task a where {1} {2};", updateSql, string.Join(" and ", whereSql), sqlAppend);
+ }
+
///
/// 流程变更SQL语句
///
@@ -429,5 +636,19 @@ namespace FactorySystemBll
FState={3} from TFS_FTeamProcess a where a.FTeamID={0} {5} and FType={1} {4};", teamId,
proType, viewDesc, timeSql, sqlAppend, proState > 0 ? ("and FState<" + proState) : "");
}
+
+
+ ///
+ /// 试验号流程变更SQL语句
+ ///
+ public static string GetProcessSql2(int teamId, int proType, string viewDesc, int proState, string sqlAppend = "")
+ {
+ string timeSql = proState.ToString();
+ if (proState == 1) timeSql += ",FStartDate=getdate()";
+ else if (proState == 2) timeSql += ",FFinishDate=getdate()";
+ return string.Format(@"update a set a.FDesc=(select {2} from TBasicCode where FType=34 and FValue={1}),
+ FState={3} from TFS_MaterialFTeamProcess a where a.FTeamID={0} {5} and FType={1} {4};", teamId,
+ proType, viewDesc, timeSql, sqlAppend, proState > 0 ? ("and FState<" + proState) : "");
+ }
}
}
diff --git a/FactorySystemBll/FactorySystemBll.csproj b/FactorySystemBll/FactorySystemBll.csproj
index 61867fc..8da7ace 100644
--- a/FactorySystemBll/FactorySystemBll.csproj
+++ b/FactorySystemBll/FactorySystemBll.csproj
@@ -58,7 +58,9 @@
True
Settings.settings
+
+
diff --git a/FactorySystemBll/FormulaBll.cs b/FactorySystemBll/FormulaBll.cs
index 014ed58..b9ae9de 100644
--- a/FactorySystemBll/FormulaBll.cs
+++ b/FactorySystemBll/FormulaBll.cs
@@ -26,7 +26,7 @@ namespace FactorySystemBll
public static List GetFormulaList()
{
int isDelete = (int)Constant.DeleteCode.已删除;
- return AppSettingsHelper.GetSqlSugar().Queryable().Where(s => s.FDeleted != isDelete).ToList();
+ return AppSettingsHelper.GetSqlSugar().Queryable().Where(s => s.FDeleted != isDelete).Distinct().ToList();
}
diff --git a/FactorySystemBll/MaterialBll.cs b/FactorySystemBll/MaterialBll.cs
index 2a70ea1..d02aa9d 100644
--- a/FactorySystemBll/MaterialBll.cs
+++ b/FactorySystemBll/MaterialBll.cs
@@ -1329,6 +1329,24 @@ namespace FactorySystemBll
return db.Ado.ExecuteCommand(sql);
}
+ ///
+ /// 更新配方
+ ///
+ /// 原配方
+ /// 新配方
+ ///
+ public bool UpdateFormula(string testCode,string testCode2)
+ {
+ SqlSugarClient db = AppSettingsHelper.GetSqlSugar();
+
+ List materialList=db.Queryable().Where(m=>m.FTestCode== testCode).ToList();
+ List ids = materialList.Select(m => m.FID).ToList();
+ //更新配方
+ string sql = string.Format("update TFS_Material set FFTestCode={0} WHERE FID in ({1})", testCode2, string.Join(",", ids));
+
+ return false;
+ }
+
}
}
\ No newline at end of file
diff --git a/FactorySystemBll/MaterialTaskBll.cs b/FactorySystemBll/MaterialTaskBll.cs
new file mode 100644
index 0000000..ab6b4f7
--- /dev/null
+++ b/FactorySystemBll/MaterialTaskBll.cs
@@ -0,0 +1,44 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using FactorySystemCommon;
+using FactorySystemModel.EnumModel;
+using FactorySystemModel.RequestModel;
+using FactorySystemModel.ResponseModel;
+using FactorySystemModel.SqlSugarModel;
+using Newtonsoft.Json;
+using SqlSugar;
+
+namespace FactorySystemBll
+{
+ public class MaterialTaskBll
+ {
+ ///
+ /// 获取任务列表
+ ///
+ public List