531 lines
20 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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
}
}