using Learun.Application.Base.SystemModule; using Learun.Application.TwoDevelopment.ZZDT_EC; using Learun.Util; using Learun.Util.SqlSugar; using NPOI.SS.Formula.Functions; using NPOI.SS.UserModel; using NPOI.XSSF.UserModel; using SqlSugar; using System; using System.Collections.Generic; using System.Data; using System.IO; using System.Linq; using System.Web.Mvc; using System.Windows.Interop; namespace Learun.Application.Web.Areas.ZZDT_EC.Controllers { /// /// 版 本 PIT-ADMS V7.0.3 敏捷开发框架 /// Copyright (c) 2013-2018 Hexagon PPM /// 创 建:超级管理员 /// 日 期:2022-06-01 15:08 /// 描 述:数据字典 /// public class ec_dataitemController : MvcControllerBase { private ec_dataitemIBLL ec_dataitemIBLL = new ec_dataitemBLL(); #region 视图功能 /// /// 字典明细管理页面 /// /// [HttpGet] public ActionResult Index() { return View(); } /// /// 字典明细管理表单页面 /// /// [HttpGet] public ActionResult Form() { return View(); } /// /// 字典分类管理页面 /// /// [HttpGet] public ActionResult ClassifyIndex() { return View(); } /// /// 字典分类管理表单页面 /// /// [HttpGet] public ActionResult ClassifyForm() { return View(); } #endregion #region 获取数据 /// /// 导出 单个 数据字典 /// /// public void exportSingle(string ProjectId, string dataItemID) { IWorkbook workbook = new XSSFWorkbook(); var tbName = ProjectSugar.TableName(ProjectId); var detailName = ProjectSugar.TableName(ProjectId); var codelist = SqlSugarHelper.Db.Queryable().AS(tbName).First(x => x.DataItemID == dataItemID); if (codelist == null) { throw new System.Exception("无效的dataItemID"); } var enums = SqlSugarHelper.Db.Queryable().AS(detailName).Where(x => x.DataItemID == dataItemID).ToList(); ISheet sheet = null; try { sheet = workbook.CreateSheet(codelist.DataItemName); } catch (System.Exception) { //万一名字奇奇怪怪的 sheet = workbook.CreateSheet("数据字典"); } //创建第一行 并赋值 IRow row = sheet.CreateRow(0); row.CreateCell(0).SetCellValue("数据字典内部ID(勿改)"); row.CreateCell(1).SetCellValue(dataItemID); row = sheet.CreateRow(2); row.CreateCell(0).SetCellValue("中文名称(不能重复)"); row.CreateCell(1).SetCellValue("英文名称"); row.CreateCell(2).SetCellValue("编号(不能重复)"); row.CreateCell(3).SetCellValue("是否有效(0无效,1有效)"); row.CreateCell(4).SetCellValue("备注"); row.CreateCell(5).SetCellValue("ID(勿改,新增的行留空即可)"); int rowIndex = 3; foreach (var ENUM in enums) { row = sheet.CreateRow(rowIndex); row.CreateCell(0).SetCellValue(ENUM.DataItemName); row.CreateCell(1).SetCellValue(ENUM.DataItemNameEN); row.CreateCell(2).SetCellValue(ENUM.DataItemCode); row.CreateCell(3).SetCellValue(ENUM.IsEnabled.ToString()); row.CreateCell(4).SetCellValue(ENUM.Remark); row.CreateCell(5).SetCellValue(ENUM.DataItemDetailID); rowIndex++; } string filename = $"数据字典_{codelist.DataItemName}_" + DateTime.Now.ToString("yyMMddHHmmss"); ExcelHelper.DownloadIWorkbook(workbook, filename); } /// /// 获取页面显示列表数据 /// /// 查询参数 /// [HttpGet] [AjaxOnly] public ActionResult GetPageList(string pagination, string queryJson) { Pagination paginationobj = pagination.ToObject(); var data = ec_dataitemIBLL.GetList(queryJson, pagination: paginationobj); var jsonData = new { rows = data, total = paginationobj.total, page = paginationobj.page, records = paginationobj.records }; return Success(jsonData); } /// /// 获取页面显示列表数据 /// /// 查询参数 /// [HttpGet] [AjaxOnly] public ActionResult GetList(string queryJson) { var data = ec_dataitemIBLL.GetList(queryJson, false); return Success(data); } /// /// 获取表单数据 /// /// [HttpGet] [AjaxOnly] public ActionResult GetFormData(string keyValue, string ProjectId) { var ec_dataitemData = ec_dataitemIBLL.GetEntity(keyValue, ProjectId); var ec_dataitemdetailData = ec_dataitemIBLL.GetEntity(ec_dataitemData.DataItemID, ProjectId); var jsonData = new { ec_dataitem = ec_dataitemData, ec_dataitemdetail = ec_dataitemdetailData, }; return Success(jsonData); } /// /// 获取字典分类列表(树结构) /// /// [HttpGet] [AjaxOnly] public ActionResult GetClassifyTree(string ProjectId) { var data = ec_dataitemIBLL.GetClassifyTree(ProjectId); return this.Success(data); } /// /// 分类编号不能重复 /// /// 编码 /// 主键 /// [HttpGet] [AjaxOnly] public ActionResult ExistItemCode(string keyValue, string DataItemCode, string ProjectId) { bool res = ec_dataitemIBLL.ExistItemCode(keyValue, DataItemCode, ProjectId); return Success(res); } /// /// 分类名称不能重复 /// /// 名称 /// 主键 /// [HttpGet] [AjaxOnly] public ActionResult ExistItemName(string keyValue, string DataItemName, string ProjectId) { bool res = ec_dataitemIBLL.ExistItemName(keyValue, DataItemName, ProjectId); return Success(res); } #endregion #region 提交数据 /// /// 用于数据字典的导入。 /// /// 事先上传到服务器的文件的id /// /// [HttpPost] [AjaxOnly] public ActionResult ExcelImport(string keyValue, string ProjectId) { //MVC //查询文件的真实路径 var file = new AnnexesFileBLL().GetByfolderIdEntity(keyValue); if (string.IsNullOrWhiteSpace(file?.F_FilePath)) { return Fail("找不到文件" + file?.F_FilePath); } string strFilePath = file?.F_FilePath;//"C:/Users/xingheng/Downloads/数据字典_甲板号_250627210628.xlsx" var insertCount = 0; var deleteCount = 0; #region 读取excel using (FileStream fs = new FileStream(strFilePath, FileMode.Open, FileAccess.Read)) { IWorkbook workbook = new XSSFWorkbook(fs); // .xlsx 用 XSSFWorkbook ISheet sheet = workbook.GetSheetAt(0); Console.WriteLine($"📄 Sheet: {sheet.SheetName}"); var tbName = ProjectSugar.TableName(ProjectId); var detailName = ProjectSugar.TableName(ProjectId); var id = sheet.GetRow(0).GetCell(1).ToString(); var codelist = SqlSugarHelper.Db.Queryable().AS(tbName).First(x => x.DataItemID == id); var ENUMS = SqlSugarHelper.Db.Queryable().AS(detailName).Where(X => X.DataItemID == id).ToList(); var existIds = ENUMS.Select(x => x.DataItemDetailID).ToList(); if (codelist == null) { //无效 return Fail("单元格(0,1)为无效的id"); } for (int row = 3; row <= sheet.LastRowNum; row++) { IRow currentRow = sheet.GetRow(row); if (currentRow == null) continue; var name = ExcelHelper.GetCellStringValue(currentRow.GetCell(0)); var nameEN = ExcelHelper.GetCellStringValue(currentRow.GetCell(1)); var code = ExcelHelper.GetCellStringValue(currentRow.GetCell(2)); var isEnable = ExcelHelper.GetCellStringValue(currentRow.GetCell(3)); var remark = ExcelHelper.GetCellStringValue(currentRow.GetCell(4)); var detailId = ExcelHelper.GetCellStringValue(currentRow.GetCell(5)); if (string.IsNullOrEmpty(name) || string.IsNullOrEmpty(code)) { continue; } var exist = ENUMS.FirstOrDefault(x => x.DataItemDetailID == detailId); if (exist != null) { #region m exist.DataItemName = name; exist.DataItemNameEN = nameEN; exist.DataItemCode = code; if (isEnable == "1") { exist.IsEnabled = 1; } else { exist.IsEnabled = 0; } exist.Remark = remark; exist.OrderID = row - 2; SqlSugarHelper.Db.Updateable(exist).AS(detailName).ExecuteCommand(); #endregion } else { #region a var existOther = ENUMS.Any(X => X.DataItemName == name); if (existOther) { //已有同名的 continue; } exist = new ec_dataitemdetailEntity(); exist.Create(); exist.DataItemName = name; exist.DataItemNameEN = nameEN; exist.DataItemCode = code; if (isEnable == "1") { exist.IsEnabled = 1; } else { exist.IsEnabled = 0; } exist.Remark = remark; exist.DataItemID = id; exist.OrderID = row - 2; insertCount++; SqlSugarHelper.Db.Insertable(exist).AS(detailName).ExecuteCommand(); #endregion } #region d existIds.Remove(detailId); #endregion } //剩下的就是需要删的 foreach (var item in existIds) { var nouse = ENUMS.FirstOrDefault(x => x.DataItemDetailID == item); nouse.IsEnabled = 0; nouse.UpdateTime = System.DateTime.Now; nouse.UpdateUserID = LoginUserInfo.Get().userId; SqlSugarHelper.Db.Updateable(nouse).AS(detailName).ExecuteCommand(); } deleteCount = existIds.Count; } #endregion return Success($"导入成功!合计新建【{insertCount}】个,删除【{deleteCount}】个"); } /// /// 单纯smart 3d的数据导入,用于二三维校验用的part Name /// /// 事先上传到服务器的文件的id /// /// [HttpPost] [AjaxOnly] public ActionResult ExcelImport3D(string keyValue, string ProjectId) { //MVC //查询文件的真实路径 var file = new AnnexesFileBLL().GetByfolderIdEntity(keyValue); if (string.IsNullOrWhiteSpace(file?.F_FilePath)) { return Fail("找不到文件" + file?.F_FilePath); } string strFilePath = file?.F_FilePath; var DataItemPartNumber = ec_dataitemIBLL.GetEntity("Part Number", ProjectId); if (DataItemPartNumber.IsEmpty()) { return Fail("请先在分类树中建立一个节点为Part Number的节点"); } string strPartNumberUID = DataItemPartNumber.DataItemID; ec_dataitemIBLL.PartNumberDetailImport(strPartNumberUID, strFilePath, ProjectId); return Success("导入成功!"); } /// /// 删除实体数据 /// 主键 /// /// [HttpPost] [AjaxOnly] public ActionResult DeleteForm(string keyValue, string ProjectId) { ec_dataitemIBLL.DeleteEntity(keyValue, ProjectId); return Success("删除成功!"); } /// /// 保存实体数据(新增、修改) /// 主键 /// /// [HttpPost] [ValidateAntiForgeryToken] [AjaxOnly] public ActionResult SaveForm(string keyValue, string strEntity, string ProjectId) { ec_dataitemEntity entity = strEntity.ToObject(); ec_dataitemIBLL.SaveEntity(keyValue, entity, ProjectId); return Success("保存成功!"); } #endregion #region 字典明细 /// /// 获取数据字典明显根据分类编号 /// /// 分类编号 /// 查询条件 /// [HttpGet] [AjaxOnly] public ActionResult GetDetailList(string dataItemCode, string keyword, string ProjectId) { var data = ec_dataitemIBLL.GetDetailList(dataItemCode, keyword, ProjectId); return Success(data); } /// /// 获取数据字典明显树形数据 /// /// 分类编号 /// [HttpGet] [AjaxOnly] public ActionResult GetDetailTree(string itemCode, string ProjectId) { var data = ec_dataitemIBLL.GetDetailTree(itemCode, ProjectId); return Success(data); } /// /// 获取数据字典明细树形数据 /// /// [HttpGet] [AjaxOnly] public ActionResult GetTreeData(string ProjectId, bool isShowCheck, string DataItemID, string DataItemDetailID) { var tableName = ProjectSugar.TableName(ProjectId); var list = SqlSugarHelper.Db.Queryable().AS(tableName).Where(x => x.DataItemID == DataItemID).ToList(); var childs = SqlSugarHelper.Db.Queryable().AS(tableName).ToChildList(x => x.UpDataItemDetailID, DataItemDetailID); childs.ForEach(x => { var item = list.FirstOrDefault(y => y.DataItemDetailID == x.DataItemDetailID); list.Remove(item); }); List treeList = new List(); foreach (var item in list) { TreeModel node = new TreeModel(); node.id = item.DataItemDetailID; node.text = item.DataItemName; node.value = item.DataItemDetailID; node.showcheck = isShowCheck; node.checkstate = 0; node.isexpand = false; node.parentId = item.UpDataItemDetailID; node.NodeExtData = item; treeList.Add(node); } var res = treeList.ToTree(); return Success(res); } /// /// 字典明细编号不能重复 /// /// 主键 /// 字典明细编号 /// 分类编码 /// [HttpGet] [AjaxOnly] public ActionResult ExistDetailItemCode(string keyValue, string DataItemCode, string itemCode, string ProjectId) { bool res = ec_dataitemIBLL.ExistDetailItemCode(keyValue, DataItemCode, itemCode, ProjectId); return Success(res); } /// /// 字典明细名称不能重复 /// /// 主键 /// 字典明细名称 /// 分类编码 /// [HttpGet] [AjaxOnly] public ActionResult ExistDetailItemName(string keyValue, string DataItemName, string itemCode, string ProjectId) { bool res = ec_dataitemIBLL.ExistDetailItemName(keyValue, DataItemName, itemCode, ProjectId); return Success(res); } /// /// 保存明细数据实体 /// /// 主键 /// 分类编码 /// 实体 [HttpPost] [AjaxOnly] [ValidateAntiForgeryToken] public ActionResult SaveDetailForm(string keyValue, string itemCode, string strEntity, string ProjectId) { ec_dataitemdetailEntity entity = strEntity.ToObject(); ec_dataitemIBLL.SaveDetailEntity(keyValue, entity, ProjectId); return Success("保存成功!"); } /// /// 删除明细数据 /// /// 主键 /// [HttpPost] [AjaxOnly] public ActionResult DeleteDetailForm(string keyValue, string ProjectId) { ec_dataitemIBLL.DeleteDetail(keyValue, ProjectId); return Success("删除成功!"); } #endregion } }