using EmitMapper;
using FineUIPro;
using MiniExcelLibs;
using MiniExcelLibs.Attributes;
using Model;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
namespace BLL
{
public static class PHTGL_QuantityService
{
public static PHTGL_Quantity GetPHTGL_QuantityById(string Id)
{
return Funs.DB.PHTGL_Quantity.FirstOrDefault(x => x.Id == Id);
}
public static PHTGL_Quantity GetPHTGL_QuantityByNumBer(string serialNumber, string marjor)
{
return Funs.DB.PHTGL_Quantity.FirstOrDefault(x => x.SerialNumber == serialNumber && x.Major == marjor);
}
public static void AddPHTGL_Quantity(PHTGL_Quantity newtable)
{
var table = new PHTGL_Quantity
{
Id = newtable.Id,
Major = newtable.Major,
SubProject = newtable.SubProject,
SubItemProject = newtable.SubItemProject,
ProjectCode = newtable.ProjectCode,
ProjectName = newtable.ProjectName,
ProjectDescription = newtable.ProjectDescription,
UnitOfMeasurement = newtable.UnitOfMeasurement,
Quantity = newtable.Quantity,
TotalCostFixedComprehensiveUnitPrice = newtable.TotalCostFixedComprehensiveUnitPrice,
MainMaterialCost = newtable.MainMaterialCost,
TotalPrice = newtable.TotalPrice,
CalculationRule = newtable.CalculationRule,
WorkContent = newtable.WorkContent,
Remarks = newtable.Remarks,
IsTemplate = newtable.IsTemplate,
ParentId = newtable.ParentId,
SerialNumber = newtable.SerialNumber
};
Funs.DB.PHTGL_Quantity.InsertOnSubmit(table);
Funs.DB.SubmitChanges();
}
///
/// 通过模板增加实体
///
///
///
public static void AddPHTGL_QuantityByTemModel(PHTGL_Quantity newtable, string parentId)
{
var table = new PHTGL_Quantity
{
Id = SQLHelper.GetNewID(),
Major = newtable.Major,
SubProject = newtable.SubProject,
SubItemProject = newtable.SubItemProject,
ProjectCode = newtable.ProjectCode,
ProjectName = newtable.ProjectName,
ProjectDescription = newtable.ProjectDescription,
UnitOfMeasurement = newtable.UnitOfMeasurement,
Quantity = newtable.Quantity,
TotalCostFixedComprehensiveUnitPrice = newtable.TotalCostFixedComprehensiveUnitPrice,
MainMaterialCost = newtable.MainMaterialCost,
TotalPrice = newtable.TotalPrice,
CalculationRule = newtable.CalculationRule,
WorkContent = newtable.WorkContent,
Remarks = newtable.Remarks,
IsTemplate = false,
ParentId = parentId,
SerialNumber = newtable.SerialNumber
};
Funs.DB.PHTGL_Quantity.InsertOnSubmit(table);
Funs.DB.SubmitChanges();
}
public static void UpdatePHTGL_Quantity(PHTGL_Quantity newtable)
{
var table = Funs.DB.PHTGL_Quantity.FirstOrDefault(x => x.Id == newtable.Id);
if (table != null)
{
table.Id = newtable.Id;
table.Major = newtable.Major;
table.SubProject = newtable.SubProject;
table.SubItemProject = newtable.SubItemProject;
table.ProjectCode = newtable.ProjectCode;
table.ProjectName = newtable.ProjectName;
table.ProjectDescription = newtable.ProjectDescription;
table.UnitOfMeasurement = newtable.UnitOfMeasurement;
table.Quantity = newtable.Quantity;
table.TotalCostFixedComprehensiveUnitPrice = newtable.TotalCostFixedComprehensiveUnitPrice;
table.MainMaterialCost = newtable.MainMaterialCost;
table.TotalPrice = newtable.TotalPrice;
table.CalculationRule = newtable.CalculationRule;
table.WorkContent = newtable.WorkContent;
table.Remarks = newtable.Remarks;
table.IsTemplate = newtable.IsTemplate;
table.ParentId = newtable.ParentId;
table.SerialNumber = newtable.SerialNumber;
Funs.DB.SubmitChanges();
}
}
public static void DeletePHTGL_QuantityById(string Id)
{
var table = Funs.DB.PHTGL_Quantity.FirstOrDefault(x => x.Id == Id);
if (table != null)
{
Funs.DB.PHTGL_Quantity.DeleteOnSubmit(table);
Funs.DB.SubmitChanges();
}
}
public static void DeletePHTGL_QuantityByParentId(string parentId)
{
var table = Funs.DB.PHTGL_Quantity.Where(x => x.ParentId == parentId);
if (table.Any())
{
Funs.DB.PHTGL_Quantity.DeleteAllOnSubmit(table);
Funs.DB.SubmitChanges();
}
}
///
/// 导入数据
///
/// 数据文件地址
/// 专业类型
///
public static ResponeData ImportData(string path, string majortype)
{
var responeData = new ResponeData();
List rows = new List();
List remarkQuery = new List();
string Major = "";
try
{
var sheetNames = MiniExcel.GetSheetNames(path);
foreach (var item in sheetNames)
{
if (item == "编制说明")
{
remarkQuery = MiniExcel.Query(path, sheetName: item).ToList();
}
else
{
rows = MiniExcel.Query(path, sheetName: item).ToList();
}
}
}
catch (Exception e)
{
responeData.code = 0;
responeData.message = "模板错误";
return responeData;
}
var mapper =
ObjectMapperManager.DefaultInstance.GetMapper, List>();
var modeList = mapper.Map(rows);
if (modeList.Count == 0)
{
responeData.code = 0;
responeData.message = "没有数据";
return responeData;
}
Major = GetMajorItems().Where(x => x.Text == majortype).Select(x => x.Value).FirstOrDefault() ??
"";
List consts = new List();
int SortIndex = 0;
foreach (var item in remarkQuery)
{
if (string.IsNullOrEmpty(Major)) break;
Model.Sys_Const model = new Model.Sys_Const()
{
ID = SQLHelper.GetNewID(),
ConstValue = item.A?.ToString(),
SortIndex = SortIndex,
GroupId = "工程量清单-" + Major
};
consts.Add(model);
SortIndex++;
}
var old = ConstValue.drpConstItemList("工程量清单-" + Major);
if (old.Count > 0)
{
Funs.DB.Sys_Const.DeleteAllOnSubmit(old);
Funs.DB.SubmitChanges();
}
;
Funs.DB.Sys_Const.InsertAllOnSubmit(consts);
Funs.DB.SubmitChanges();
foreach (var item in modeList)
{
item.Major = Major;
if (string.IsNullOrEmpty(Major)) break;
if (string.IsNullOrEmpty(item.ProjectName)) continue;
if (item.ProjectName == "项目名称") continue;
var queryPhtglQuantity = new PHTGL_Quantity
{
Major = item.Major,
SubProject = item.SubProject,
SubItemProject = item.SubItemProject,
ProjectCode = item.ProjectCode,
ProjectName = item.ProjectName,
IsTemplate = true
};
var resultModel = GetPHTGL_QuantityByModle(queryPhtglQuantity);
if (resultModel.Any())
{
item.Id = resultModel[0].Id;
UpdatePHTGL_Quantity(item);
}
else
{
item.Id = SQLHelper.GetNewID();
item.IsTemplate = true;
AddPHTGL_Quantity(item);
}
}
return responeData;
}
public static ResponeData ImportData(string path, string majortype, string mainProjectQuantityId)
{
var responeData = new ResponeData();
List rows;
try
{
rows = MiniExcel.Query(path).ToList();
}
catch (Exception e)
{
responeData.code = 0;
responeData.message = "模板错误";
return responeData;
}
var mapper =
ObjectMapperManager.DefaultInstance.GetMapper, List>();
var modeList = mapper.Map(rows);
if (modeList.Count == 0)
{
responeData.code = 0;
responeData.message = "没有数据";
return responeData;
}
foreach (var item in modeList)
{
if (!string.IsNullOrEmpty(majortype))
{
item.Major = GetMajorItems().Where(x => x.Text == majortype).Select(x => x.Value).FirstOrDefault() ??
"";
}
if (string.IsNullOrEmpty(item.Major)) break;
var queryPhtglQuantity = new PHTGL_Quantity
{
Major = item.Major,
SubProject = item.SubProject,
SubItemProject = item.SubItemProject,
ProjectCode = item.ProjectCode,
};
if (string.IsNullOrEmpty(mainProjectQuantityId))
{
queryPhtglQuantity.IsTemplate = true;
item.IsTemplate = true;
}
else
{
queryPhtglQuantity.IsTemplate = false;
queryPhtglQuantity.ParentId = mainProjectQuantityId;
item.ParentId = mainProjectQuantityId;
item.IsTemplate = false;
}
var resultModel = GetPHTGL_QuantityByModle(queryPhtglQuantity);
if (resultModel.Any())
{
item.Id = resultModel[0].Id;
UpdatePHTGL_Quantity(item);
}
else
{
item.Id = SQLHelper.GetNewID();
AddPHTGL_Quantity(item);
}
}
return responeData;
}
public static ListItem[] GetMajorItems()
{
var list = new ListItem[12];
list[0] = new ListItem("0", "土建工程");
list[1] = new ListItem("1", "钢结构预制工程");
list[2] = new ListItem("2", "工艺管道安装工程");
list[3] = new ListItem("3", "工艺设备安装工程");
list[4] = new ListItem("4", "非标设备现场制作安装工程");
list[5] = new ListItem("5.1", "电气工程");
list[6] = new ListItem("5.2", "仪表工程");
list[7] = new ListItem("5.3", "电信工程");
list[8] = new ListItem("6", "水暖安装工程");
list[9] = new ListItem("7", "防腐绝热工程");
list[10] = new ListItem("8", "无损检测工程");
list[11] = new ListItem("9", "消防工程");
return list;
}
public static ListItem[] GetMajorItems2()
{
var list = new ListItem[12];
list[0] = new ListItem("Z01", "土建工程");
list[1] = new ListItem("Z02", "钢结构预制工程");
list[2] = new ListItem("Z03", "工艺管道安装工程");
list[3] = new ListItem("Z04", "工艺设备安装工程");
list[4] = new ListItem("Z05", "非标设备现场制作安装工程");
list[5] = new ListItem("Z06.1", "电气工程");
list[6] = new ListItem("Z06.2", "仪表工程");
list[7] = new ListItem("Z06.3", "电信工程");
list[8] = new ListItem("Z07", "水暖安装工程");
list[9] = new ListItem("Z08", "防腐绝热工程");
list[10] = new ListItem("Z09", "无损检测工程");
list[11] = new ListItem("Z10", "消防工程");
return list;
}
public static ListItem[] GetMajorItems3()
{
var list = new ListItem[12];
list[0] = new ListItem("土建工程", "土建工程");
list[1] = new ListItem("钢结构预制工程", "钢结构预制工程");
list[2] = new ListItem("工艺管道安装工程", "工艺管道安装工程");
list[3] = new ListItem("工艺设备安装工程", "工艺设备安装工程");
list[4] = new ListItem("非标设备现场制作安装工程", "非标设备现场制作安装工程");
list[5] = new ListItem("电气工程", "电气工程");
list[6] = new ListItem("仪表工程", "仪表工程");
list[7] = new ListItem("电信工程", "电信工程");
list[8] = new ListItem("水暖安装工程", "水暖安装工程");
list[9] = new ListItem("防腐绝热工程", "防腐绝热工程");
list[10] = new ListItem("无损检测工程", "无损检测工程");
list[11] = new ListItem("消防工程", "消防工程");
return list;
}
public static void IniGetMajorItems3DownList(FineUIPro.DropDownList dropName, bool isShowPlease)
{
dropName.DataValueField = "Value";
dropName.DataTextField = "Text";
dropName.DataSource = GetMajorItems3();
dropName.DataBind();
if (isShowPlease)
{
Funs.FineUIPleaseSelect(dropName);
}
}
public static string GetMajorName(string majorIds)
{
string majorName = string.Empty;
if (!string.IsNullOrEmpty(majorIds))
{
string[] strs = majorIds.Split(',');
var items = GetMajorItems2();
foreach (var item in strs)
{
var un = items.FirstOrDefault(x => x.Text == item);
if (un != null)
{
majorName += un.Value + ",";
}
}
if (!string.IsNullOrEmpty(majorName))
{
majorName = majorName.Substring(0, majorName.LastIndexOf(","));
}
}
return majorName;
}
#region 获取列表
///
/// 记录数
///
public static int count { get; set; }
public static List GetPHTGL_QuantityByModle(PHTGL_Quantity table)
{
var q = from x in Funs.DB.PHTGL_Quantity
where
(string.IsNullOrEmpty(table.Id) || x.Id.Contains(table.Id)) &&
(string.IsNullOrEmpty(table.Major) || x.Major.Contains(table.Major)) &&
(string.IsNullOrEmpty(table.SubProject) || x.SubProject.Contains(table.SubProject)) &&
(string.IsNullOrEmpty(table.SubItemProject) ||
x.SubItemProject.Contains(table.SubItemProject)) &&
(string.IsNullOrEmpty(table.ProjectCode) || x.ProjectCode.Contains(table.ProjectCode)) &&
(string.IsNullOrEmpty(table.ProjectName) || x.ProjectName.Contains(table.ProjectName)) &&
(string.IsNullOrEmpty(table.ProjectDescription) ||
x.ProjectDescription.Contains(table.ProjectDescription)) &&
(string.IsNullOrEmpty(table.UnitOfMeasurement) ||
x.UnitOfMeasurement.Contains(table.UnitOfMeasurement)) &&
(string.IsNullOrEmpty(table.Quantity) || x.Quantity.Contains(table.Quantity)) &&
(string.IsNullOrEmpty(table.TotalCostFixedComprehensiveUnitPrice) ||
x.TotalCostFixedComprehensiveUnitPrice.Contains(table.TotalCostFixedComprehensiveUnitPrice)) &&
(string.IsNullOrEmpty(table.MainMaterialCost) ||
x.MainMaterialCost.Contains(table.MainMaterialCost)) &&
(string.IsNullOrEmpty(table.TotalPrice) || x.TotalPrice.Contains(table.TotalPrice)) &&
(string.IsNullOrEmpty(table.CalculationRule) ||
x.CalculationRule.Contains(table.CalculationRule)) &&
(string.IsNullOrEmpty(table.WorkContent) || x.WorkContent.Contains(table.WorkContent)) &&
(string.IsNullOrEmpty(table.Remarks) || x.Remarks.Contains(table.Remarks)) &&
x.IsTemplate == table.IsTemplate &&
(string.IsNullOrEmpty(table.ParentId) || x.ParentId.Contains(table.ParentId))
select x;
//select new { x ,IntSerialNumber= Funs.GetNewIntOrZero(x.SerialNumber.Replace(".", ""))
// }
;
//var model = q.ToList().OrderBy(x => x.IntSerialNumber).Select(itemx => itemx.x).ToList();
var model = q.ToList().OrderBy(x => x.SerialNumber, new CustomComparer()).ToList();
return model;
}
/// 获取分页列表
///
/// 页码
/// 每页数量
///
public static IEnumerable getListData(PHTGL_Quantity table, Grid Grid1)
{
var q = GetPHTGL_QuantityByModle(table);
count = q.Count();
if (count == 0) return null;
q = q.Skip(Grid1.PageSize * Grid1.PageIndex).Take(Grid1.PageSize).ToList();
// q = SortConditionHelper.SortingAndPaging(q, Grid1.SortField, Grid1.SortDirection, Grid1.PageIndex, Grid1.PageSize);
return from x in q
select new
{
x.Id,
x.SerialNumber,
x.Major,
x.SubProject,
x.SubItemProject,
x.ProjectCode,
x.ProjectName,
x.ProjectDescription,
x.UnitOfMeasurement,
x.Quantity,
x.TotalCostFixedComprehensiveUnitPrice,
x.MainMaterialCost,
x.TotalPrice,
x.CalculationRule,
x.WorkContent,
x.Remarks,
x.IsTemplate,
x.ParentId
};
}
public static void CheckSubProjectName(List list)
{
foreach (var item in list)
{
var SubProject = "";
var SubItemProject = "";
var SerialNumberArry = item.SerialNumber?.Split('.');
if (SerialNumberArry.Length == 2)
{
item.SubProject = GetPHTGL_QuantityByNumBer(SerialNumberArry[0], item.Major).ProjectName;
UpdatePHTGL_Quantity(item);
}
else if (SerialNumberArry.Length == 3)
{
item.SubProject = GetPHTGL_QuantityByNumBer(SerialNumberArry[0], item.Major).ProjectName;
item.SubItemProject = GetPHTGL_QuantityByNumBer(SerialNumberArry[0] + "." + SerialNumberArry[1], item.Major).ProjectName;
UpdatePHTGL_Quantity(item);
}
}
}
#endregion
}
public class CustomComparer : IComparer
{
public int Compare(string x, string y)
{
if (string.IsNullOrEmpty(x) || string.IsNullOrEmpty(y))
{
return 0;
}
var xParts = x.Split('.');
var yParts = y.Split('.');
for (int i = 0; i < Math.Min(xParts.Length, yParts.Length); i++)
{
int xNumber, yNumber;
if (int.TryParse(xParts[i], out xNumber) && int.TryParse(yParts[i], out yNumber))
{
if (xNumber != yNumber)
{
return xNumber.CompareTo(yNumber);
}
}
else
{
return x.CompareTo(y);
}
}
return xParts.Length.CompareTo(yParts.Length);
}
}
public class PHTGL_QuantityDtoIn
{
[ExcelColumnIndex("A")] public string SerialNumber { get; set; }
[ExcelColumnIndex("B")] public string SubProject { get; set; }
[ExcelColumnIndex("C")] public string SubItemProject { get; set; }
[ExcelColumnIndex("D")] public string ProjectCode { get; set; }
[ExcelColumnIndex("E")] public string ProjectName { get; set; }
[ExcelColumnIndex("F")] public string ProjectDescription { get; set; }
[ExcelColumnIndex("G")] public string UnitOfMeasurement { get; set; }
[ExcelColumnIndex("H")] public string Quantity { get; set; }
[ExcelColumnIndex("I")] public string TotalCostFixedComprehensiveUnitPrice { get; set; }
[ExcelColumnIndex("J")] public string MainMaterialCost { get; set; }
[ExcelColumnIndex("K")] public string TotalPrice { get; set; }
[ExcelColumnIndex("L")] public string CalculationRule { get; set; }
[ExcelColumnIndex("M")] public string WorkContent { get; set; }
[ExcelColumnIndex("N")] public string Remarks { get; set; }
}
}