531 lines
20 KiB
C#
Raw Normal View History

2025-08-13 11:14:39 +08:00
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
{
/// <summary>
/// 版 本 PIT-ADMS V7.0.3 敏捷开发框架
/// Copyright (c) 2013-2018 Hexagon PPM
/// 创 建:超级管理员
/// 日 期2022-06-01 15:08
/// 描 述:数据字典
/// </summary>
public class ec_dataitemController : MvcControllerBase
{
private ec_dataitemIBLL ec_dataitemIBLL = new ec_dataitemBLL();
#region
/// <summary>
/// 字典明细管理页面
/// <summary>
/// <returns></returns>
[HttpGet]
public ActionResult Index()
{
return View();
}
/// <summary>
/// 字典明细管理表单页面
/// <summary>
/// <returns></returns>
[HttpGet]
public ActionResult Form()
{
return View();
}
/// <summary>
/// 字典分类管理页面
/// </summary>
/// <returns></returns>
[HttpGet]
public ActionResult ClassifyIndex()
{
return View();
}
/// <summary>
/// 字典分类管理表单页面
/// </summary>
/// <returns></returns>
[HttpGet]
public ActionResult ClassifyForm()
{
return View();
}
#endregion
#region
/// <summary>
/// 导出 单个 数据字典
/// </summary>
/// <returns></returns>
public void exportSingle(string ProjectId, string dataItemID)
{
IWorkbook workbook = new XSSFWorkbook();
var tbName = ProjectSugar.TableName<ec_dataitemEntity>(ProjectId);
var detailName = ProjectSugar.TableName<ec_dataitemdetailEntity>(ProjectId);
var codelist = SqlSugarHelper.Db.Queryable<ec_dataitemEntity>().AS(tbName).First(x => x.DataItemID == dataItemID);
if (codelist == null)
{
throw new System.Exception("无效的dataItemID");
}
var enums = SqlSugarHelper.Db.Queryable<ec_dataitemdetailEntity>().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);
}
/// <summary>
/// 获取页面显示列表数据
/// <summary>
/// <param name="queryJson">查询参数</param>
/// <returns></returns>
[HttpGet]
[AjaxOnly]
public ActionResult GetPageList(string pagination, string queryJson)
{
Pagination paginationobj = pagination.ToObject<Pagination>();
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);
}
/// <summary>
/// 获取页面显示列表数据
/// <summary>
/// <param name="queryJson">查询参数</param>
/// <returns></returns>
[HttpGet]
[AjaxOnly]
public ActionResult GetList(string queryJson)
{
var data = ec_dataitemIBLL.GetList(queryJson, false);
return Success(data);
}
/// <summary>
/// 获取表单数据
/// <summary>
/// <returns></returns>
[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);
}
/// <summary>
/// 获取字典分类列表(树结构)
/// </summary>
/// <returns></returns>
[HttpGet]
[AjaxOnly]
public ActionResult GetClassifyTree(string ProjectId)
{
var data = ec_dataitemIBLL.GetClassifyTree(ProjectId);
return this.Success(data);
}
/// <summary>
/// 分类编号不能重复
/// </summary>
/// <param name="DataItemCode">编码</param>
/// <param name="keyValue">主键</param>
/// <returns></returns>
[HttpGet]
[AjaxOnly]
public ActionResult ExistItemCode(string keyValue, string DataItemCode, string ProjectId)
{
bool res = ec_dataitemIBLL.ExistItemCode(keyValue, DataItemCode, ProjectId);
return Success(res);
}
/// <summary>
/// 分类名称不能重复
/// </summary>
/// <param name="DataItemName">名称</param>
/// <param name="keyValue">主键</param>
/// <returns></returns>
[HttpGet]
[AjaxOnly]
public ActionResult ExistItemName(string keyValue, string DataItemName, string ProjectId)
{
bool res = ec_dataitemIBLL.ExistItemName(keyValue, DataItemName, ProjectId);
return Success(res);
}
#endregion
#region
/// <summary>
/// 用于数据字典的导入。
/// </summary>
/// <param name="keyValue">事先上传到服务器的文件的id</param>
/// <param name="ProjectId"></param>
/// <returns></returns>
[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<ec_dataitemEntity>(ProjectId);
var detailName = ProjectSugar.TableName<ec_dataitemdetailEntity>(ProjectId);
var id = sheet.GetRow(0).GetCell(1).ToString();
var codelist = SqlSugarHelper.Db.Queryable<ec_dataitemEntity>().AS(tbName).First(x => x.DataItemID == id);
var ENUMS = SqlSugarHelper.Db.Queryable<ec_dataitemdetailEntity>().AS(detailName).Where(X => X.DataItemID == id).ToList();
var existIds = ENUMS.Select(x => x.DataItemDetailID).ToList();
if (codelist == null)
{
//无效
return Fail("单元格01为无效的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}】个");
}
/// <summary>
/// 单纯smart 3d的数据导入用于二三维校验用的part Name
/// </summary>
/// <param name="keyValue">事先上传到服务器的文件的id</param>
/// <param name="ProjectId"></param>
/// <returns></returns>
[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("导入成功!");
}
/// <summary>
/// 删除实体数据
/// <param name="keyValue">主键</param>
/// <summary>
/// <returns></returns>
[HttpPost]
[AjaxOnly]
public ActionResult DeleteForm(string keyValue, string ProjectId)
{
ec_dataitemIBLL.DeleteEntity(keyValue, ProjectId);
return Success("删除成功!");
}
/// <summary>
/// 保存实体数据(新增、修改)
/// <param name="keyValue">主键</param>
/// <summary>
/// <returns></returns>
[HttpPost]
[ValidateAntiForgeryToken]
[AjaxOnly]
public ActionResult SaveForm(string keyValue, string strEntity, string ProjectId)
{
ec_dataitemEntity entity = strEntity.ToObject<ec_dataitemEntity>();
ec_dataitemIBLL.SaveEntity(keyValue, entity, ProjectId);
return Success("保存成功!");
}
#endregion
#region
/// <summary>
/// 获取数据字典明显根据分类编号
/// </summary>
/// <param name="dataItemCode">分类编号</param>
/// <param name="keyword">查询条件</param>
/// <returns></returns>
[HttpGet]
[AjaxOnly]
public ActionResult GetDetailList(string dataItemCode, string keyword, string ProjectId)
{
var data = ec_dataitemIBLL.GetDetailList(dataItemCode, keyword, ProjectId);
return Success(data);
}
/// <summary>
/// 获取数据字典明显树形数据
/// </summary>
/// <param name="itemCode">分类编号</param>
/// <returns></returns>
[HttpGet]
[AjaxOnly]
public ActionResult GetDetailTree(string itemCode, string ProjectId)
{
var data = ec_dataitemIBLL.GetDetailTree(itemCode, ProjectId);
return Success(data);
}
/// <summary>
/// 获取数据字典明细树形数据
/// </summary>
/// <returns></returns>
[HttpGet]
[AjaxOnly]
public ActionResult GetTreeData(string ProjectId, bool isShowCheck, string DataItemID, string DataItemDetailID)
{
var tableName = ProjectSugar.TableName<ec_dataitemdetailEntity>(ProjectId);
var list = SqlSugarHelper.Db.Queryable<ec_dataitemdetailEntity>().AS(tableName).Where(x => x.DataItemID == DataItemID).ToList();
var childs = SqlSugarHelper.Db.Queryable<ec_dataitemdetailEntity>().AS(tableName).ToChildList(x => x.UpDataItemDetailID, DataItemDetailID);
childs.ForEach(x =>
{
var item = list.FirstOrDefault(y => y.DataItemDetailID == x.DataItemDetailID);
list.Remove(item);
});
List<TreeModel> treeList = new List<TreeModel>();
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);
}
/// <summary>
/// 字典明细编号不能重复
/// </summary>
/// <param name="keyValue">主键</param>
/// <param name="DataItemCode">字典明细编号</param>
/// <param name="itemCode">分类编码</param>
/// <returns></returns>
[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);
}
/// <summary>
/// 字典明细名称不能重复
/// </summary>
/// <param name="keyValue">主键</param>
/// <param name="DataItemName">字典明细名称</param>
/// <param name="itemCode">分类编码</param>
/// <returns></returns>
[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);
}
/// <summary>
/// 保存明细数据实体
/// </summary>
/// <param name="keyValue">主键</param>
/// <param name="itemCode">分类编码</param>
/// <param name="entity">实体</param>
[HttpPost]
[AjaxOnly]
[ValidateAntiForgeryToken]
public ActionResult SaveDetailForm(string keyValue, string itemCode, string strEntity, string ProjectId)
{
ec_dataitemdetailEntity entity = strEntity.ToObject<ec_dataitemdetailEntity>();
ec_dataitemIBLL.SaveDetailEntity(keyValue, entity, ProjectId);
return Success("保存成功!");
}
/// <summary>
/// 删除明细数据
/// </summary>
/// <param name="keyValue">主键</param>
/// <returns></returns>
[HttpPost]
[AjaxOnly]
public ActionResult DeleteDetailForm(string keyValue, string ProjectId)
{
ec_dataitemIBLL.DeleteDetail(keyValue, ProjectId);
return Success("删除成功!");
}
#endregion
}
}