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 FactorySystemModel.RequestModel; using System.Reflection; using System.Data; using System.IO; using System.Web.UI.WebControls; using System.Linq; namespace FactorySystemApi.Controllers { /// /// 协同接口 /// [UserLoginFilter] public class MaterialTeamworkController : ApiController { /// /// 数据处理层 /// public readonly BaseBll BaseBll = new BaseBll(); /// /// 数据处理层-路线处理 /// private readonly MaterialTeamworkBll MaterialTeamworkBll = new MaterialTeamworkBll(); /// /// 数据处理层-任务处理 /// private readonly MaterialTaskBll MaterialTaskBll = new MaterialTaskBll(); /// /// 事项操作日志 /// private readonly OperateLogBll OperateLogBll = new OperateLogBll(); /// /// 初始化 /// private readonly BaseController baseController = new BaseController(); public MaterialTeamworkController() { } #region 物料新增 /// /// 新增物料路线 /// [HttpPost] public ApiResult CreateMaterial(Dictionary inParam) { ApiResult apiResult = new ApiResult(); return ExceptionHelper.TryReturnException(() => { ApiAuthInfo user = Request.Properties["token"] as ApiAuthInfo; TFS_Factory factory = BaseBll.GetTempModel(int.Parse(inParam["FCreateFactoryID"].ToString())); Dictionary result = new Dictionary(); inParam.Remove("FID"); string materialName = inParam["FMaterialName"].ToString(); TFS_Material existMaterial = BaseBll.GetTempModel("FName='" + materialName + "'"); if (existMaterial != null) { result.Add("TaskId", -8); } else { inParam.TryGetValue("FState", out object state); if (null == state) { inParam["FState"] = state = 1; } if (inParam.ContainsKey("FAddUser")) { inParam["FAddUser"] = user.FID; } else { inParam.Add("FAddUser", user.FID); } if (inParam.ContainsKey("FAddDate")) { inParam["FAddDate"] = DateTime.Now; } else { inParam.Add("FAddDate", DateTime.Now); } 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); } 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.单工厂) { TFS_Factory prodFactory = BaseBll.GetTempModel(factory.FFactoryID); inParam.Add("FProdFactoryID", prodFactory.FID); inParam.Add("FProdFactoryCode", prodFactory.FCode); } else { inParam.Add("FProdFactoryID", factory.FID); inParam.Add("FProdFactoryCode", factory.FCode); } inParam.Add("FTeamworkType", 1); // 获取具备相应权限的用户 List users = MaterialTaskBll.GetTaskUsers(0, "10", factory.FID); // 如果没有获取到用户,则不创建路线、任务、物料和视图 if (users != null && users.Count > 0) { int teamId = BaseBll.InsertDataModel(inParam, "TFS_FMaterialTeamwork"); result.Add("TeamId", teamId); if (teamId > 0) { inParam.Add("FID", teamId); if (state.ToString().Contains("1")) { TFS_FMaterialTeamwork teamwork = BaseBll.GetTempModel(teamId); // 创建物料和物料视图 Dictionary materialInfo = CreateMaterialData(inParam, factory, teamwork); if (materialInfo.ContainsKey("FMaterialCode") && !string.IsNullOrEmpty(materialInfo["FMaterialCode"].ToString())) { teamwork.FMaterialCode = materialInfo["FMaterialCode"].ToString(); MaterialTeamworkBll.UpdateMaterialTeamwork(teamwork); } 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); } /// /// 查询物料路线 /// [HttpPost] public ApiResult GetPageList(MaterialTeamworkQuery mtq) { ApiResult apiResult = new ApiResult(); return ExceptionHelper.TryReturnException(() => { if (mtq.FIsUser && Request.Properties["token"] is ApiAuthInfo user) { mtq.FUserID = user.FID; } List powerList = MaterialTeamworkBll.GetViewPower(mtq.FUserID); List list = MaterialTeamworkBll.GetList(mtq, out var totalNumber); int total = totalNumber; if (list != null && list.Count > 0) { foreach(MaterialTeamworkRow row in list) { row.FIsShowView = false; row.FIsDownloadView = false; int factoryId = row.FCreateFactoryID; List viewPowers = powerList.FindAll(p => ((IDictionary)p)["FFactoryID"].ToString().Equals(factoryId.ToString()) && ((IDictionary)p)["FFunctionID"].ToString().Equals("1")).ToList(); List operationPowers = powerList.FindAll(p => ((IDictionary)p)["FFactoryID"].ToString().Equals(factoryId.ToString()) && ((IDictionary)p)["FFunctionID"].ToString().Equals("6")).ToList(); if (viewPowers != null && viewPowers.Count > 0) row.FIsShowView = true; if (operationPowers != null && operationPowers.Count > 0) row.FIsDownloadView = true; } } apiResult.Data = new { List = list, Total = total }; }, apiResult, Request); } /// /// 根据物料路线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 teamWorkType = int.Parse(inParam["teamWorkType"].ToString()); int teamType = int.Parse(inParam["teamType"].ToString()); apiResult.Data = new { columns = MaterialTeamworkBll.GetColumns(), rows = MaterialTeamworkBll.GetMaterialViewsByTeamId(teamId, teamWorkType, teamType, user.FID, true, out List materialId), infos = MaterialTeamworkBll.GetMaterialInfoList(materialId, user.FID), types = MaterialTeamworkBll.GetMaterialTypeList() }; } }, apiResult, Request, inParam); } /// /// 更新物料 /// [HttpPost] public ApiResult UpdateMaterial(Dictionary inParam) { var apiResult = new ApiResult(); int step = -1; Dictionary result = new Dictionary(); 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 teamworkType = int.Parse(inParam["FTeamworkType"].ToString()); int taskType = int.Parse(inParam["FTaskType"].ToString()); string viewType = GetViewType(viewList); // 更新视图 int materialType = MaterialTeamworkBll.UpdateMaterialViewById(viewList, user.FID, teamId, teamworkType); // 更新物料 string materialCode = MaterialTeamworkBll.UpdateMaterialById(materialList, user.FID, teamId, teamworkType); // 更新物料信息 MaterialTeamworkBll.UpdateMaterialInfoById(infoList, user.FID, teamId, teamworkType); TFS_FMaterialTeamwork teamwork = MaterialTeamworkBll.GetMaterialTeamworkById(teamId); teamwork.FMaterialType = materialType.ToString(); teamwork.FMaterialCode = materialCode.ToString(); if (materialList != null) { int mindex = materialList.Count - 1; teamwork.FMaterialName = materialList[mindex]["FName"].ToString(); } MaterialTeamworkBll.UpdateMaterialTeamwork(teamwork); List tasks = MaterialTaskBll.GetMaterialTasks(teamId); TFS_FMaterialTask task = null; if (taskType == 2) { TFS_FMaterialTask currentTask = tasks.Find(t => t.FType == 2); // 结束物料确认任务 MaterialTaskBll.CloseAllMaterialTask(teamId, user.FID); // 结束物料路线 MaterialTeamworkBll.CloseMaterialTeamwork(teamId, user.FID); result.Add("TaskId", currentTask.FID); } else if(taskType == 1) { TFS_FMaterialTask currentTask = tasks.Find(t => t.FType == 1); List users = MaterialTaskBll.GetTaskUsers(2, viewType, currentTask.FFactoryID); if (users != null && users.Count > 0) { // 结束物料编辑任务 MaterialTaskBll.CloseMaterialTask(teamId, user.FID, 1); TFS_FMaterialTask nextTask = tasks.Find(t => t.FType == 2); if (nextTask == null) { // 创建物料确认任务 int taskId = MaterialTaskBll.CreateMaterialTask(teamId, teamworkType, user.FID, 2, currentTask.FFactoryID, users); result.Add("TaskId", taskId); } else { result.Add("TaskId", nextTask.FID); } } else { result.Add("TaskId", -9); } } else if (taskType == 0) { TFS_FMaterialTask currentTask = tasks.Find(t => t.FType == 0); List users = MaterialTaskBll.GetTaskUsers(1, viewType, currentTask.FFactoryID); if (users != null && users.Count > 0) { // 结束物料分类任务 MaterialTaskBll.CloseMaterialTask(teamId, user.FID, 0); TFS_FMaterialTask nextTask = tasks.Find(t => t.FType == 1); if (nextTask == null) { // 创建物料编辑任务 int taskId = MaterialTaskBll.CreateMaterialTask(teamId, teamworkType, user.FID, 1, currentTask.FFactoryID, users); result.Add("TaskId", taskId); } else { result.Add("TaskId", nextTask.FID); } } else { result.Add("TaskId", -9); } } 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(); // 创建物料(物料表新增数据) TFS_Material material = new TFS_Material(); material.FName = inParam["FMaterialName"].ToString(); // 物料名称 material.FDesc = inParam["FMaterialName"].ToString(); // 物料描述 material.FMaterialGroup = inParam["FMaterialGroup"].ToString(); // 物料组 material.FBaseUnit = inParam["FWeightUnit"].ToString(); // 计量单位 material.FFactoryID = factory.FFactoryID; // 工厂 material.FFactoryCode = factory.FCode; // 工厂标识 material.FTestCode = inParam.ContainsKey("FTestCode") ? inParam["FTestCode"].ToString() : ""; // 试验号 // 需要获取MDM编码逻辑,在页面勾选了需要获取MDM编码时,调用获取MDM编码接口 // 此处直接调用BaseController的GetMdmCode方法,inParam作为方法的输入参数 // 必须要传递FWeightUnit,FTestCode,FMaterialGroup/FGroup,FSaleCode/FName,FType/FMaterialType五个参数 // 其中FMaterialType传入固定值ZMAT,FTestCode非必填,其他参数必填 // 此处FWeightUnit,FTestCode,FMaterialGroup,添加FMaterialType为ZMAT已有,添加FName为FMaterialName bool FIsRaw = (bool)inParam["FIsRaw"]; if (FIsRaw) { // 添加物料名称属性 Dictionary temp = new Dictionary { { "FName", inParam["FMaterialName"] }, { "FGroup", inParam["FMaterialGroup"] }, { "FWeightUnit", inParam["FWeightUnit"] }, { "FType", "ZMAT" } }; if (!string.IsNullOrEmpty(material.FTestCode)) { temp.Add("FTestCode", material.FTestCode); } string FCode = baseController.GetMdmCode(temp); material.FCode = FCode; result.Add("FMaterialCode", FCode); } else { string FCode = inParam["FMaterialCode"].ToString(); material.FCode = FCode; } int materialId = MaterialTeamworkBll.InsertMaterial(material); result.Add("MaterialId", materialId); // 创建物料视图 TFS_ViewMaterial viewMaterial = new TFS_ViewMaterial(); viewMaterial.FTeamID = teamwork.FID; // 路线ID viewMaterial.FMaterialID = materialId; // 物料ID viewMaterial.FFactoryID = teamwork.FCreateFactoryID; // 工厂ID viewMaterial.FFactoryCode = teamwork.FCreateFactoryCode; // 工厂Code viewMaterial.FAddDate = DateTime.Now; // 创建日期 viewMaterial.FTeamType = 1; // 路线类型 viewMaterial.FBaseMaterialDesc = material.FName; // 物料描述 viewMaterial.FBaseMaterialCode = material.FCode; // 物料号 viewMaterial.FBaseTestCode = material.FTestCode; // 试验号 viewMaterial.FBaseMaterialGroup = material.FMaterialGroup; // 物料组 viewMaterial.FBaseBasicMeter = material.FBaseUnit; // 基本计量 int vmId = MaterialTeamworkBll.InsertMaterialView(viewMaterial); result.Add("ViewId", vmId); // 创建委托工厂视图 if (!teamwork.FCreateFactoryID.Equals(teamwork.FProdFactoryID)) { viewMaterial = new TFS_ViewMaterial(); viewMaterial.FTeamID = teamwork.FID; // 路线ID viewMaterial.FMaterialID = materialId; // 物料ID viewMaterial.FFactoryID = teamwork.FProdFactoryID; // 工厂ID viewMaterial.FFactoryCode = teamwork.FProdFactoryCode; // 工厂Code viewMaterial.FAddDate = DateTime.Now; // 创建日期 viewMaterial.FTeamType = 1; // 路线类型 viewMaterial.FBaseMaterialDesc = material.FName; // 物料描述 viewMaterial.FBaseMaterialCode = material.FCode; // 物料号 viewMaterial.FBaseTestCode = material.FTestCode; // 试验号 viewMaterial.FBaseMaterialGroup = material.FMaterialGroup; // 物料组 viewMaterial.FBaseBasicMeter = material.FBaseUnit; // 基本计量 int prodVmId = MaterialTeamworkBll.InsertMaterialView(viewMaterial); result.Add("ProdViewId", prodVmId); } return result; } #endregion #region 物料修改 /// /// 物料修改路线 /// [HttpPost] public ApiResult ModifyMaterial(Dictionary inParam) { ApiResult apiResult = new ApiResult(); Dictionary result = new Dictionary(); Dictionary teamworkParam = new Dictionary(); return ExceptionHelper.TryReturnException(() => { ApiAuthInfo user = Request.Properties["token"] as ApiAuthInfo; TFS_Factory prodFactory = null; int factoryId = int.Parse(inParam["FCreateFactoryID"].ToString()); int materialId = int.Parse(inParam["FMaterialId"].ToString()); // 根据FID获取工厂和物料 TFS_Factory factory = BaseBll.GetTempModel(factoryId); TFS_Material material = BaseBll.GetTempModel(materialId); // 获取当前工厂视图 TFS_ViewMaterial view = MaterialTeamworkBll.GetMaterialViewsByFactoryAndMaterial(factoryId, materialId); TFS_ViewMaterial prodView = null; // 当前物料和模式没有对应视图,则创建视图 if (view == null) { view = new TFS_ViewMaterial(); view.FMaterialID = materialId; // 物料ID view.FAddDate = DateTime.Now; // 创建日期 view.FTeamType = 1; // 路线类型 view.FFactoryID = factory.FID; // 工厂ID view.FFactoryCode = factory.FCode; // 工厂Code int vmId = MaterialTeamworkBll.InsertMaterialView(view); view.FID = vmId; result.Add("ViewId", vmId); } string productType = view.FMRP1ProductType; string materialName = material.FName; string vType = GetViewType(productType, materialName); List users = MaterialTaskBll.GetTaskUsers(1, vType, 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) { 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; result.Add("ProdViewId", prodVmId); } } // 创建物料修改路线 int teamId = BaseBll.InsertDataModel(teamworkParam, "TFS_FMaterialTeamwork"); result.Add("TeamId", teamId); // 更新视图 view.FMdfMaterialTeamID = teamId; view.FTeamType = 1; MaterialTeamworkBll.UpdateMaterialView(view); if (prodView != null) { prodView.FMdfMaterialTeamID = teamId; prodView.FTeamType = 1; MaterialTeamworkBll.UpdateMaterialView(prodView); } // 创建物料修改事项 int taskId = MaterialTaskBll.CreateMaterialTask(teamId, 2, user.FID, 1, factory.FID, users); result.Add("TaskId", taskId); } else { result.Add("TaskId", -9); } apiResult.Data = result; }, apiResult, Request); } /// /// 根据工厂和物料名查找物料 /// [HttpPost] public ApiResult SearchMaterialsByFactory(Dictionary inParam) { ApiResult apiResult = new ApiResult(); return ExceptionHelper.TryReturnException(() => { ApiAuthInfo user = Request.Properties["token"] as ApiAuthInfo; Dictionary result = new Dictionary(); string searchName = inParam["FSearchName"].ToString(); int pageNumber = 0; int pageSize = 0; int.TryParse(inParam["FPageIndex"].ToString(), out pageNumber); int.TryParse(inParam["FPageSize"].ToString(), out pageSize); List materials = MaterialTeamworkBll.SearchMaterialsByFactory(searchName, pageNumber, pageSize, out var totalNumber); result["List"] = materials; result["Total"] = totalNumber; apiResult.Data = result; }, apiResult, Request); } private Dictionary CreateProdMaterialData(TFS_ViewMaterial createViewMaterial, TFS_FMaterialTeamwork teamwork) { Dictionary result = new Dictionary(); createViewMaterial.FFactoryID = teamwork.FProdFactoryID; createViewMaterial.FFactoryCode = teamwork.FProdFactoryCode; // 工厂Code result.Add("ViewId", createViewMaterial.FID); int prodVmId = MaterialTeamworkBll.InsertMaterialView(createViewMaterial); result.Add("ProdViewId", prodVmId); 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; } private string GetViewType(string viewType, string materialName) { string vType = null; // 成品视图 if ("10".Equals(viewType)) { vType = "1"; } // 半成品视图 else if ("20".Equals(viewType)) { vType = "2"; } // 中间品视图 else if ("30".Equals(viewType)) { vType = "3"; // 香基视图 if (materialName.Contains("香基")) { vType = "4"; } } // 原料视图 else if ("40".Equals(viewType)) { vType = "5"; } return vType; } #endregion public T Clone(T obj) where T : class { // 如果对象是 null,则返回 null if (obj == null) { return null; } Type type = obj.GetType(); // 如果对象是字符串或值类型,则直接返回副本 if (type.IsPrimitive || type == typeof(string)) { return obj; } // 如果对象是数组,则创建一个新的数组并复制元素 if (type.IsArray) { Array sourceArray = obj as Array; Array destinationArray = sourceArray.Clone() as Array; for (int i = 0; i < sourceArray.Length; i++) { destinationArray.SetValue(Clone(sourceArray.GetValue(i)), i); } return destinationArray as T; } // 否则,创建一个新对象并复制属性值 object result = Activator.CreateInstance(type); foreach (FieldInfo field in type.GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)) { object fieldValue = field.GetValue(obj); field.SetValue(result, Clone(fieldValue)); } foreach (PropertyInfo property in type.GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)) { if (!property.CanWrite || !property.CanRead) { continue; } object propertyValue = property.GetValue(obj); property.SetValue(result, Clone(propertyValue), null); } return result as T; } /// /// 下载SAP视图 /// [HttpPost] public ApiResult DownMateialViewSAP(Dictionary inParam) { ApiResult apiResult = new ApiResult(); return ExceptionHelper.TryReturnException(() => { if (inParam.ContainsKey("teamId") && inParam.ContainsKey("teamWorkType")) { inParam.TryGetValue("teamId", out object teamworkId); inParam.TryGetValue("teamWorkType", out object teamworkType); inParam.TryGetValue("materialName", out object materialName); string basePath = AppDomain.CurrentDomain.BaseDirectory.Trim('\\'); string savePath = basePath + string.Format("\\File\\Temp\\{0}_{1}\\", inParam["teamId"], "ViewSAP"); if (!Directory.Exists(savePath)) Directory.CreateDirectory(savePath); string tempPath = savePath.Replace("\\File\\Temp\\", "\\File\\View\\"); if (!Directory.Exists(tempPath)) Directory.CreateDirectory(tempPath); savePath += ".xlsx"; bool hasFinish = inParam.ContainsKey("FFinish"); if (hasFinish) savePath = savePath.Replace("\\File\\Temp\\", "\\File\\View\\"); if (!File.Exists(savePath) || !hasFinish) { CreateExeclFileSAP(materialName.ToString() + "_SAP视图", savePath, teamworkId.ToString(), teamworkType.ToString()); } string url = Request.RequestUri.AbsoluteUri.Replace(Request.RequestUri.AbsolutePath, "") + savePath.Replace(basePath, "").Replace("\\", "/").Replace(".xlsx", materialName.ToString() + "_SAP视图.xlsx"); apiResult.Data = url; } else { apiResult.Error("视图信息获取失败"); } }, apiResult, Request); } /// /// 下载视图 /// [HttpPost] public ApiResult DownMateialView(Dictionary inParam) { ApiResult apiResult = new ApiResult(); return ExceptionHelper.TryReturnException(() => { if (inParam.ContainsKey("teamId") && inParam.ContainsKey("teamWorkType") && inParam.ContainsKey("materialName")) { inParam.TryGetValue("teamId", out object teamworkId); inParam.TryGetValue("teamWorkType", out object teamworkType); inParam.TryGetValue("materialName", out object materialName); string basePath = AppDomain.CurrentDomain.BaseDirectory.Trim('\\'); string savePath = basePath + string.Format("\\File\\Temp\\{0}_{1}\\", inParam["teamId"], "View"); if (!Directory.Exists(savePath)) Directory.CreateDirectory(savePath); string tempPath = savePath.Replace("\\File\\Temp\\", "\\File\\View\\"); if (!Directory.Exists(tempPath)) Directory.CreateDirectory(tempPath); savePath += ".xlsx"; bool hasFinish = inParam.ContainsKey("FFinish"); if (hasFinish) savePath = savePath.Replace("\\File\\Temp\\", "\\File\\View\\"); if (!File.Exists(savePath) || !hasFinish) { CreateExeclFile(materialName.ToString() + "_全部视图", savePath, teamworkId.ToString(), teamworkType.ToString()); } string url = Request.RequestUri.AbsoluteUri.Replace(Request.RequestUri.AbsolutePath, "") + savePath.Replace(basePath, "").Replace("\\", "/").Replace(".xlsx", materialName.ToString() + "_全部视图.xlsx"); apiResult.Data = url; } else { apiResult.Error("视图信息获取失败"); } }, apiResult, Request); } private void CreateExeclFileSAP(string fType, string savePath, string teamworkId, string teamworkType) { DataTable dataList = new DataTable(); dataList = MaterialTeamworkBll.GetViewMaterialSAP(teamworkId, teamworkType); NPOIHelper.ExportDTtoExcel(dataList, "Sheet1", savePath.Replace(".xlsx", fType + ".xlsx")); } private void CreateExeclFile(string fType, string savePath, string teamworkId, string teamworkType) { DataTable dataList = null; List viewList = null; int teamId; int teamType; int.TryParse(teamworkId, out teamId); int.TryParse(teamworkType, out teamType); viewList = MaterialTeamworkBll.GetViewMaterialByTeamId(teamId, teamType); if (viewList != null && viewList.Count > 0) { int materialId = viewList[0].FMaterialID; if (teamType == 3) { List materialIds = viewList.Select(m => m.FMaterialID).ToList(); string ids = string.Join(",", materialIds); dataList = MaterialTeamworkBll.GetViewMaterial(ids.ToString()); NPOIHelper.ExportDTtoExcel(dataList, "Sheet1", savePath.Replace(".xlsx", fType + ".xlsx")); } else { dataList = MaterialTeamworkBll.GetViewMaterial(materialId.ToString()); NPOIHelper.ExportDTtoExcel(dataList, "Sheet1", savePath.Replace(".xlsx", fType + ".xlsx")); } } } } }