435 lines
16 KiB
C#
435 lines
16 KiB
C#
|
using DocumentFormat.OpenXml.Drawing.Spreadsheet;
|
|||
|
using DocumentFormat.OpenXml.Spreadsheet;
|
|||
|
using Learun.Application.Base.SystemModule;
|
|||
|
using Learun.Application.Organization;
|
|||
|
using Learun.Application.TwoDevelopment.ZZDT_EC;
|
|||
|
using Learun.Application.TwoDevelopment.ZZDT_EC.ec_lookup;
|
|||
|
using Learun.Util;
|
|||
|
using Learun.Util.SqlSugar;
|
|||
|
using Newtonsoft.Json;
|
|||
|
using NPOI.HSSF.UserModel;
|
|||
|
using NPOI.SS.UserModel;
|
|||
|
using NPOI.SS.Util;
|
|||
|
using NPOI.XSSF.UserModel;
|
|||
|
using Org.BouncyCastle.Asn1.Ocsp;
|
|||
|
using Pipelines.Sockets.Unofficial.Arenas;
|
|||
|
using System;
|
|||
|
using System.Collections.Generic;
|
|||
|
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-02-24 11:10
|
|||
|
/// 描 述:lookup
|
|||
|
/// </summary>
|
|||
|
public class ec_LookupTableController : MvcControllerBase
|
|||
|
{
|
|||
|
ec_REFLOOKUPTABLEBLL bll = new ec_REFLOOKUPTABLEBLL();
|
|||
|
#region 获取数据
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 主页面
|
|||
|
/// <summary>
|
|||
|
/// <returns></returns>
|
|||
|
[HttpGet]
|
|||
|
public ActionResult LookupIndex()
|
|||
|
{
|
|||
|
return View();
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 表单页
|
|||
|
/// <summary>
|
|||
|
/// <returns></returns>
|
|||
|
[HttpGet]
|
|||
|
public ActionResult Form()
|
|||
|
{
|
|||
|
return View();
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 表单页
|
|||
|
/// <summary>
|
|||
|
/// <returns></returns>
|
|||
|
[HttpGet]
|
|||
|
public ActionResult Structure()
|
|||
|
{
|
|||
|
return View();
|
|||
|
}
|
|||
|
/// <summary>
|
|||
|
/// lookup 复用,选择仪表类型
|
|||
|
/// </summary>
|
|||
|
/// <returns></returns>
|
|||
|
[HttpGet]
|
|||
|
public ActionResult SelectObjectType()
|
|||
|
{
|
|||
|
return View();
|
|||
|
}
|
|||
|
/// <summary>
|
|||
|
/// 表单页
|
|||
|
/// <summary>
|
|||
|
/// <returns></returns>
|
|||
|
[HttpGet]
|
|||
|
public ActionResult DataDefinition()
|
|||
|
{
|
|||
|
return View();
|
|||
|
}
|
|||
|
/// <summary>
|
|||
|
/// 表单页
|
|||
|
/// <summary>
|
|||
|
/// <returns></returns>
|
|||
|
[HttpGet]
|
|||
|
public ActionResult FormStructure()
|
|||
|
{
|
|||
|
return View();
|
|||
|
}
|
|||
|
/// <summary>
|
|||
|
/// 某个类型下的lookup
|
|||
|
/// <param name="objectTypeId">对象类型id</param>
|
|||
|
/// <param name="ProjectId">项目id</param>
|
|||
|
/// <summary>
|
|||
|
/// <returns></returns>
|
|||
|
[HttpGet]
|
|||
|
[AjaxOnly]
|
|||
|
public ActionResult GetList(string objectTypeId, string ProjectId, string filter = "")
|
|||
|
{
|
|||
|
var data = bll.GetList(ProjectId);
|
|||
|
|
|||
|
data = data.FindAll(x => x.ObjectTypeId == objectTypeId);
|
|||
|
|
|||
|
if (!string.IsNullOrEmpty(filter))
|
|||
|
{
|
|||
|
data = data.FindAll(x => x.Name.Contains(filter));
|
|||
|
}
|
|||
|
return Success(data);
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 某个类型下的lookup
|
|||
|
/// <param name="objectTypeId">对象类型id</param>
|
|||
|
/// <param name="ProjectId">项目id</param>
|
|||
|
/// <summary>
|
|||
|
/// <returns></returns>
|
|||
|
[HttpGet]
|
|||
|
[AjaxOnly]
|
|||
|
public ActionResult GetStructure(string spid, string ProjectId)
|
|||
|
{
|
|||
|
var data = bll.GetLookupTableStructure(ProjectId, spid);
|
|||
|
|
|||
|
return Success(data);
|
|||
|
}
|
|||
|
/// <summary>
|
|||
|
/// 可以lookup复用出去的仪表类型
|
|||
|
/// </summary>
|
|||
|
/// <param name="ProjectId"></param>
|
|||
|
/// <param name="ObjectTypeID"></param>
|
|||
|
/// <returns></returns>
|
|||
|
[HttpGet]
|
|||
|
[AjaxOnly]
|
|||
|
public ActionResult AvailableObjTypeTree(string ProjectId, string ObjectTypeID)
|
|||
|
{
|
|||
|
string queryJson = "{\"ProjectId\":\"" + ProjectId + "\"}";
|
|||
|
var list = new ec_objecttypeBLL().GetList(queryJson).ToList();
|
|||
|
var validTypes = new List<string>();
|
|||
|
//1.过滤掉自己
|
|||
|
var type = list.FirstOrDefault(x => x.ObjectTypeID == ObjectTypeID);
|
|||
|
list.Remove(type);
|
|||
|
//2.过滤出属性比自己至少多的类型
|
|||
|
var lookupTbName = ProjectSugar.TableName<EC_REFLOOKUPTABLE>(ProjectId);
|
|||
|
var lookupAttTbName = ProjectSugar.TableName<ec_REFLOOKUPTABLEAttr>(ProjectId);
|
|||
|
var objectTypePTbName = ProjectSugar.TableName<ec_objecttypepEntity>(ProjectId);
|
|||
|
|
|||
|
var curTypeLookupPs = SqlSugarHelper.Db.Queryable<ec_REFLOOKUPTABLEAttr>().AS(lookupAttTbName)
|
|||
|
.InnerJoin<EC_REFLOOKUPTABLE>((a, b) => a.lookupTableID == b.SP_ID).AS<EC_REFLOOKUPTABLE>(lookupTbName)
|
|||
|
.Where((a, b) => b.ObjectTypeId == ObjectTypeID).ToList();
|
|||
|
var curTypeLookupPId = curTypeLookupPs.Select(x => x.PropertyID).Distinct().ToList();
|
|||
|
var allProp = SqlSugarHelper.Db.Queryable<ec_objecttypepEntity>().AS(objectTypePTbName).ToList();
|
|||
|
|
|||
|
var matchProps = allProp.Where(x => curTypeLookupPId.Contains(x.PropertyID)).ToList();
|
|||
|
|
|||
|
var matchTypeIds = matchProps.Select(x => x.ObjectTypeID).Distinct().Where(x => x != ObjectTypeID).ToList();
|
|||
|
|
|||
|
foreach (var typeid in matchTypeIds)
|
|||
|
{
|
|||
|
var count = matchProps.Count(x => x.ObjectTypeID == typeid);
|
|||
|
if (count < curTypeLookupPId.Count)
|
|||
|
{
|
|||
|
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
validTypes.Add(typeid);
|
|||
|
}
|
|||
|
}
|
|||
|
var validFolders = new List<string>();
|
|||
|
foreach (var id in validTypes)
|
|||
|
{
|
|||
|
var fullPath = list.FirstOrDefault(x => x.ObjectTypeID == id)?.FullPath;
|
|||
|
validFolders.AddRange(fullPath.Split(','));
|
|||
|
|
|||
|
}
|
|||
|
list = list.Where(x => validTypes.Contains(x.ObjectTypeID) || validFolders.Contains(x.ObjectTypeID)).ToList();//想办法保留目录,否则tree结构没了
|
|||
|
|
|||
|
List<TreeModel> treeList = new List<TreeModel>();
|
|||
|
foreach (var item in list)
|
|||
|
{
|
|||
|
TreeModel node = new TreeModel();
|
|||
|
node.id = item.ObjectTypeID;
|
|||
|
node.text = item.ObjectTypeName;
|
|||
|
node.value = item.ObjectTypeID;
|
|||
|
node.showcheck = true;
|
|||
|
node.checkstate = 0;
|
|||
|
node.isexpand = false;
|
|||
|
node.parentId = item.UpObjectTypeID;
|
|||
|
node.NodeExtData = item;
|
|||
|
treeList.Add(node);
|
|||
|
}
|
|||
|
var res = treeList.ToTree();
|
|||
|
return Success(res);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 某个类型下的lookup
|
|||
|
/// <param name="objectTypeId">对象类型id</param>
|
|||
|
/// <param name="ProjectId">项目id</param>
|
|||
|
/// <summary>
|
|||
|
/// <returns></returns>
|
|||
|
[HttpGet]
|
|||
|
[AjaxOnly]
|
|||
|
public ActionResult GetAttrData(string PropertyID, string ProjectId, string lookuptableid)
|
|||
|
{
|
|||
|
var data = bll.GetLookupTableStructure(ProjectId, lookuptableid);
|
|||
|
var res = data.FirstOrDefault(x => x.PropertyID == PropertyID);
|
|||
|
|
|||
|
return Success(res);
|
|||
|
}
|
|||
|
/// <summary>
|
|||
|
///
|
|||
|
/// </summary>
|
|||
|
/// <param name="ProjectId"></param>
|
|||
|
/// <param name="lookupTableId"></param>
|
|||
|
/// <returns></returns>
|
|||
|
public ActionResult GetDataRecord(string ProjectId, string lookupTableId)
|
|||
|
{
|
|||
|
var res = bll.GetLookupDataRecord(ProjectId, lookupTableId).OrderBy(x => x.recordNumber).ToList();
|
|||
|
var structure = bll.GetLookupTableStructure(ProjectId, lookupTableId);
|
|||
|
var res2 = bll.TransformData(res, structure);
|
|||
|
return Success(res2);
|
|||
|
}
|
|||
|
#endregion
|
|||
|
#region 修改
|
|||
|
/// <summary>
|
|||
|
///
|
|||
|
/// </summary>
|
|||
|
/// <param name="typeId"></param>
|
|||
|
/// <param name="ProjectId"></param>
|
|||
|
/// <returns></returns>
|
|||
|
[HttpPost]
|
|||
|
[AjaxOnly]
|
|||
|
public ActionResult Copy2(string typeId, string ProjectId, string objectTypeIDs)
|
|||
|
{
|
|||
|
var typesWillCopy = objectTypeIDs.Split(',');
|
|||
|
|
|||
|
var lookupTb = ProjectSugar.TableName<EC_REFLOOKUPTABLE>(ProjectId);
|
|||
|
|
|||
|
var lookupDefTb = ProjectSugar.TableName<ec_REFLOOKUPTABLEAttr>(ProjectId);
|
|||
|
|
|||
|
var lookupDataTb = ProjectSugar.TableName<ec_REFLOOKUPTABLEData>(ProjectId);
|
|||
|
|
|||
|
var lookups = SqlSugarHelper.Db.Queryable<EC_REFLOOKUPTABLE>().AS(lookupTb).ToList();
|
|||
|
var source = lookups.Where(x => x.ObjectTypeId == typeId).ToList();
|
|||
|
var sourceDef = SqlSugarHelper.Db.Queryable<ec_REFLOOKUPTABLEAttr>().AS(lookupDefTb)
|
|||
|
.Where(x => source.Select(y=>y.SP_ID).Contains(x.lookupTableID)).ToList();
|
|||
|
var sourceData = SqlSugarHelper.Db.Queryable<ec_REFLOOKUPTABLEData>().AS(lookupDataTb)
|
|||
|
.Where(x => sourceDef.Select(y => y.SP_ID).Contains(x.lookupTableAttrId)).ToList();
|
|||
|
|
|||
|
var newLookups = new List<EC_REFLOOKUPTABLE>();
|
|||
|
var newLookupDefs = new List<ec_REFLOOKUPTABLEAttr>();
|
|||
|
var newLookupData = new List<ec_REFLOOKUPTABLEData>();
|
|||
|
foreach (var item in typesWillCopy)
|
|||
|
{
|
|||
|
if (lookups.Any(x=>x.ObjectTypeId == item))
|
|||
|
{
|
|||
|
continue;//原本就有,就不复制了
|
|||
|
}
|
|||
|
#region copy
|
|||
|
foreach (var lookup in source)
|
|||
|
{
|
|||
|
var newLookup = new EC_REFLOOKUPTABLE()
|
|||
|
{
|
|||
|
SP_ID = Guid.NewGuid().ToString(),
|
|||
|
DefaultFlag = lookup.DefaultFlag,
|
|||
|
Name = lookup.Name,
|
|||
|
ObjectTypeId = item
|
|||
|
};
|
|||
|
newLookups.Add(newLookup);
|
|||
|
|
|||
|
//var attDic = new Dictionary<string, string>();
|
|||
|
foreach (var def in sourceDef.Where(x => x.lookupTableID == lookup.SP_ID))
|
|||
|
{
|
|||
|
var newattrId = Guid.NewGuid().ToString();
|
|||
|
var newDef = new ec_REFLOOKUPTABLEAttr()
|
|||
|
{
|
|||
|
SP_ID = newattrId,
|
|||
|
lookupTableID = newLookup.SP_ID,
|
|||
|
PropertyID = def.PropertyID,
|
|||
|
PropertyName = def.PropertyName ,
|
|||
|
inOutFlag = def.inOutFlag,
|
|||
|
orderId = def.orderId,
|
|||
|
overwriteFlag = def.overwriteFlag
|
|||
|
};
|
|||
|
newLookupDefs.Add(newDef);
|
|||
|
//attDic.Add(def.SP_ID, newDef.SP_ID);
|
|||
|
|
|||
|
|
|||
|
foreach (var data in sourceData.Where(x => x.lookupTableAttrId == def.SP_ID))
|
|||
|
{
|
|||
|
var newData = new ec_REFLOOKUPTABLEData()
|
|||
|
{
|
|||
|
SP_ID = Guid.NewGuid().ToString(),
|
|||
|
lookupValue = data.lookupValue,
|
|||
|
recordNumber = data.recordNumber,
|
|||
|
lookupTableAttrId = newattrId,
|
|||
|
};
|
|||
|
newLookupData.Add(newData);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
}
|
|||
|
#endregion
|
|||
|
}
|
|||
|
SqlSugarHelper.Db.Insertable(newLookups).AS(lookupTb).ExecuteCommand();
|
|||
|
SqlSugarHelper.Db.Insertable(newLookupDefs).AS(lookupDefTb).ExecuteCommand();
|
|||
|
SqlSugarHelper.Db.Insertable(newLookupData).AS(lookupDataTb).ExecuteCommand();
|
|||
|
return Success("lookup已复制。");
|
|||
|
}
|
|||
|
/// <summary>
|
|||
|
/// 保存实体数据(新增、修改)
|
|||
|
/// <param name="keyValue">主键</param>
|
|||
|
/// <summary>
|
|||
|
/// <returns></returns>
|
|||
|
[HttpPost]
|
|||
|
[ValidateAntiForgeryToken]
|
|||
|
[AjaxOnly]
|
|||
|
public ActionResult SaveAttr(string ProjectId, string strEntity)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
var entity = strEntity.ToObject<ec_REFLOOKUPTABLEAttr>();
|
|||
|
if (string.IsNullOrEmpty(entity.SP_ID))
|
|||
|
{
|
|||
|
bll.AddAttr(ProjectId, entity);
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
bll.ModifyAttr(ProjectId, entity);
|
|||
|
}
|
|||
|
|
|||
|
return Success("修改成功");
|
|||
|
}
|
|||
|
catch (Exception e)
|
|||
|
{
|
|||
|
return Fail(e.Message);
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
/// <summary>
|
|||
|
/// 保存
|
|||
|
/// </summary>
|
|||
|
/// <param name="ProjectId"></param>
|
|||
|
/// <param name="lookupTableId"></param>
|
|||
|
/// <param name="strEntity"></param>
|
|||
|
/// <returns></returns>
|
|||
|
[HttpPost]
|
|||
|
[AjaxOnly]
|
|||
|
public ActionResult SaveData(string ProjectId, string lookupTableId, string strEntity)
|
|||
|
{
|
|||
|
List<Dictionary<string, string>> tableData = JsonConvert.DeserializeObject<List<Dictionary<string, string>>>(strEntity);
|
|||
|
bll.ModifyData(ProjectId, lookupTableId, tableData);
|
|||
|
return Success("");
|
|||
|
}
|
|||
|
/// <summary>
|
|||
|
/// 保存实体数据(新增、修改)
|
|||
|
/// <param name="keyValue">主键</param>
|
|||
|
/// <summary>
|
|||
|
/// <returns></returns>
|
|||
|
[HttpPost]
|
|||
|
[ValidateAntiForgeryToken]
|
|||
|
[AjaxOnly]
|
|||
|
public ActionResult SaveForm(string objectTypeId, string ProjectId, string strEntity)
|
|||
|
{
|
|||
|
|
|||
|
var entity = strEntity.ToObject<EC_REFLOOKUPTABLE>();
|
|||
|
entity.ObjectTypeId = objectTypeId;
|
|||
|
var exist = bll.GetList(ProjectId).FindAll(x => x.ObjectTypeId == objectTypeId);
|
|||
|
if (exist.Any(x => x.Name.ToUpper() == entity.Name.ToUpper() && x.SP_ID != entity.SP_ID))
|
|||
|
{
|
|||
|
return Success("不能有重名的!");
|
|||
|
}
|
|||
|
if (string.IsNullOrEmpty(entity.SP_ID))
|
|||
|
{
|
|||
|
bll.AddLookupTable(ProjectId, entity);
|
|||
|
return Success("插入成功");
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
bll.ModifyLookupTable(ProjectId, entity);
|
|||
|
return Success("更新成功");
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 删除实体数据
|
|||
|
/// <param name="keyValue">主键</param>
|
|||
|
/// <summary>
|
|||
|
/// <returns></returns>
|
|||
|
[HttpPost]
|
|||
|
[AjaxOnly]
|
|||
|
public ActionResult DeleteForm(string keyValue, string ProjectId)
|
|||
|
{
|
|||
|
bll.DeleteEntity(keyValue, ProjectId);
|
|||
|
return Success("删除成功!");
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 删除实体数据
|
|||
|
/// <param name="keyValue">主键</param>
|
|||
|
/// <summary>
|
|||
|
/// <returns></returns>
|
|||
|
[HttpPost]
|
|||
|
[AjaxOnly]
|
|||
|
public ActionResult DeleteAttr(string keyValue, string ProjectId)
|
|||
|
{
|
|||
|
bll.DeleteEntity(keyValue, ProjectId);
|
|||
|
return Success("删除成功!");
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 删除实体数据
|
|||
|
/// <param name="keyValue">主键</param>
|
|||
|
/// <summary>
|
|||
|
/// <returns></returns>
|
|||
|
[HttpPost]
|
|||
|
[AjaxOnly]
|
|||
|
public ActionResult DeleteData(string ProjectId, string lookupTableId, string strEntity)
|
|||
|
{
|
|||
|
Dictionary<string, string> tableData = JsonConvert.DeserializeObject<Dictionary<string, string>>(strEntity);
|
|||
|
bll.DeleteData(lookupTableId, tableData, ProjectId);
|
|||
|
return Success("删除成功!");
|
|||
|
}
|
|||
|
#endregion
|
|||
|
}
|
|||
|
}
|