CNCEC_SUBQHSE_WUHUAN/SGGL/FineUIPro.Web/HSSE/Check/CheckSpecialDetailIn.aspx.cs

570 lines
22 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 BLL;
using BLL.Common;
using FineUIPro.Web.BaseInfo;
using FineUIPro.Web.DataShow;
using Model;
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.IO;
using System.Linq;
using System.Web.Services.Description;
namespace FineUIPro.Web.HSSE.Check
{
public partial class CheckSpecialProDetailIn : PageBase
{
#region
/// <summary>
/// 上传预设的虚拟路径
/// </summary>
private string initPath = Const.ExcelUrl;
/// <summary>
/// 错误集合
/// </summary>
public static List<Model.ErrorInfo> errorInfos = new List<Model.ErrorInfo>();
/// <summary>
/// 项目id
/// </summary>
public string ProjectId
{
get
{
return (string)ViewState["ProjectId"];
}
set
{
ViewState["ProjectId"] = value;
}
}
/// <summary>
/// 检查id
/// </summary>
public string CheckSpecialId
{
get
{
return (string)ViewState["CheckSpecialId"];
}
set
{
ViewState["CheckSpecialId"] = value;
}
}
public static int Cols = 11;//列数
public static Dictionary<string, string> imgDic = new Dictionary<string, string>();
//public static List<string> unitWorks = new List<string>();
public static List<WBS_UnitWork> unitWorks = new List<WBS_UnitWork>();
public static List<Base_Unit> units = new List<Base_Unit>();
public static List<Sys_User> hseManagers = new List<Sys_User>();
public static List<HSSE_Hazard_HazardRegisterTypes> types = new List<HSSE_Hazard_HazardRegisterTypes>();
public static List<string> validLevelStrings = new List<string> { "低风险", "一般风险", "较大风险", "重大风险" };
public static List<string> validStateStrings = new List<string> { "待整改", "已整改" };
public static List<string> validTypeStrings = new List<string> { "当场纠正", "口头警告" };
#endregion
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
this.ProjectId = Request.Params["ProjectId"];
this.CheckSpecialId = Request.Params["CheckSpecialId"];
///单位工程
var unitWorkList = (from x in Funs.DB.WBS_UnitWork
where x.ProjectId == this.ProjectId && x.SuperUnitWork == null
orderby x.UnitWorkCode
select x).ToList();
//var unitWorkList = (from x in Funs.DB.WBS_UnitWork
// where x.ProjectId == this.ProjectId && x.SuperUnitWork == null
// orderby x.UnitWorkCode
// select new
// {
// x.UnitWorkId,
// UnitWorkName = UnitWorkService.GetUnitWorkALLName(x.UnitWorkId)
// }).ToList();
if (unitWorkList.Any())
{
unitWorks.AddRange(unitWorkList);
//unitWorks.AddRange(unitWorkList.Select(x => x.UnitWorkName));
}
//受检单位
units = (from x in Funs.DB.Base_Unit
join y in Funs.DB.Project_ProjectUnit on x.UnitId equals y.UnitId
where y.ProjectId == this.ProjectId
orderby x.UnitCode
select x).ToList();
//HSE经理
hseManagers = BLL.ProjectUserService.GetProjectUserByUnitidAndProjectId(this.ProjectId, Const.HSSEManager);
//安全巡检类型
types = BLL.HSSE_Hazard_HazardRegisterTypesService.GetHazardRegisterTypesList("1");
this.hdFileName.Text = string.Empty;
if (errorInfos != null)
{
errorInfos.Clear();
}
//if (this.CurrUser.UserId == Const.AdminId)
//{
// this.btnFastImport.Hidden = false;
//}
}
}
#region
/// <summary>
/// 下载模板按钮
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void btnDownLoad_Click(object sender, EventArgs e)
{
//这里要注意了,如果传过来的没有记录
PageContext.RegisterStartupScript(Confirm.GetShowReference("确定下载导入模板吗?", String.Empty,
MessageBoxIcon.Question, PageManager1.GetCustomEventReference(false, "Confirm_OK"),
PageManager1.GetCustomEventReference("Confirm_Cancel")));
}
/// <summary>
/// 下载导入模板
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void PageManager1_CustomEvent(object sender, CustomEventArgs e)
{
if (e.EventArgument == "Confirm_OK")
{
string rootPath = Server.MapPath("~/");
string uploadfilepath = rootPath + Const.CheckSpecialDetailTemplateUrl;
string filePath = Const.CheckSpecialDetailTemplateUrl;
string fileName = Path.GetFileName(filePath);
FileInfo info = new FileInfo(uploadfilepath);
long fileSize = info.Length;
Response.ClearContent();
Response.AddHeader("Content-Disposition", "attachment;filename=" + System.Web.HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8));
Response.ContentType = "excel/plain";
Response.ContentEncoding = System.Text.Encoding.UTF8;
Response.AddHeader("Content-Length", fileSize.ToString().Trim());
Response.TransmitFile(uploadfilepath, 0, fileSize);
Response.End();
}
}
#endregion
#region
/// <summary>
/// 审核
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void btnAudit_Click(object sender, EventArgs e)
{
try
{
if (this.fuAttachUrl.HasFile == false)
{
ShowNotify("请您选择Excel文件", MessageBoxIcon.Warning);
return;
}
string IsXls = Path.GetExtension(this.fuAttachUrl.FileName).ToString().Trim().ToLower();
if (IsXls != ".xls" && IsXls != ".xlsx")
{
ShowNotify("只可以选择Excel文件", MessageBoxIcon.Warning);
return;
}
if (errorInfos != null)
{
errorInfos.Clear();
}
string rootPath = Server.MapPath("~/");
string initFullPath = rootPath + initPath;
if (!Directory.Exists(initFullPath))
{
Directory.CreateDirectory(initFullPath);
}
this.hdFileName.Text = BLL.Funs.GetNewFileName() + IsXls;
string filePath = initFullPath + this.hdFileName.Text;
this.fuAttachUrl.PostedFile.SaveAs(filePath);
AuditExcelAndShowResult(filePath);
}
catch (Exception ex)
{
ShowNotify("'" + ex.Message + "'", MessageBoxIcon.Warning);
}
}
/// <summary>
/// 审核Excel并展示校验结果
/// </summary>
private void AuditExcelAndShowResult(string fileName)
{
try
{
string msg = string.Empty;
var dt =NPOIHelper.ExcelToDataSet(fileName, out msg, true);
if (dt != null)
{
//string rootPath = Server.MapPath("~/");
//var localPath = ConfigurationManager.AppSettings["localRoot"];
//imgDic = NPOIHelper.ExtractDispimgImagesFromXml(rootPath + initPath + this.hdFileName.Text, localPath + "FileUpload/CheckSpecial");
ValidateExcelData(dt.Tables[0], false);
hdCheckResult.Text = "1";
}
}
catch (Exception exc)
{
BLL.ErrLogInfo.WriteLog("", exc);
Response.Write(exc);
}
}
/// <summary>
/// 校验Excel数据仅校验
/// </summary>
/// <param name="pds"></param>
/// <param name="import">true:导入false:审核</param>
/// <returns></returns>
private bool ValidateExcelData(DataTable pds, bool import)
{
int ic = pds.Columns.Count;
if (ic < Cols)
{
ShowNotify($"导入Excel格式错误Excel只有{ic}列", MessageBoxIcon.Warning);
return false;
}
int ir = pds.Rows.Count;
if (pds == null || ir <= 0)
{
ShowNotify("导入数据为空!", MessageBoxIcon.Warning);
return false;
}
var errors = new List<ErrorInfo>();
for (int i = 0; i < ir; i++)
{
var (error, _) = ValidateRowAndBuildEntity(pds.Rows[i], (i + 2).ToString(), import);
if (error.Any()) { errors.AddRange(error); }
}
errorInfos.Clear();
errorInfos.AddRange(errors);
this.gvErrorInfo.DataSource = errorInfos;
this.gvErrorInfo.DataBind();
if (errors.Count > 0)
{
ShowNotify("存在校验错误,请查看错误列表并修正后再次导入。", MessageBoxIcon.Warning);
return false;
}
ShowNotify("审核完成,请点击导入!", MessageBoxIcon.Success);
return true;
}
/// <summary>
/// 校验单行并生成实体(字段顺序与新模板一致)
/// </summary>
private (List<ErrorInfo> lstError, Model.Check_CheckSpecialProDetail entity) ValidateRowAndBuildEntity(DataRow row, string displayRow, bool import)
{
List<ErrorInfo> lstError = new List<ErrorInfo>();
// 新模板字段顺序
string checkAreaName = row[0]?.ToString().Trim(); // 单位工程
string checkUnitName = row[1]?.ToString().Trim(); // 受检单位
string hseManageName = row[2]?.ToString().Trim(); // HSE经理
string description = row[3]?.ToString().Trim(); // 问题描述
string urls = row[4]?.ToString().Trim(); // 问题图片地址
string checkItemName = row[5]?.ToString().Trim(); // 问题类型
string levelName = row[6]?.ToString().Trim(); // 风险级别
string completeStatusName = row[7]?.ToString().Trim(); // 现场处理结果
string handMethod = row[8]?.ToString().Trim(); // 处理方式
string limitedDateStr = row[9]?.ToString().Trim(); // 限时日期
string suggestions = row[10]?.ToString().Trim(); // 整改要求
string CheckArea = string.Empty;
string UnitId = string.Empty;
string HSEManageId = string.Empty;
string CheckContent = string.Empty;
string CheckItem = string.Empty;
string RiskLevel = string.Empty;
bool CompleteStatus = false;
DateTime? CompletedDate = null;
string RectifyOpinion = string.Empty;
DateTime? LimitedDate = null;
string Suggestions = string.Empty;
// 校验并转换
if (!string.IsNullOrEmpty(checkAreaName))
{
if (unitWorks.Any(x => x.UnitWorkName == checkAreaName))
{
//CheckArea = checkAreaName;
CheckArea = unitWorks.Where(x => x.UnitWorkName == checkAreaName).FirstOrDefault().UnitWorkId;
}
else
{
lstError.Add(new ErrorInfo { Row = displayRow, Column = "单位工程", Reason = $"单位工程名称[{checkAreaName}]不存在" });
}
}
else
{
lstError.Add(new ErrorInfo { Row = displayRow, Column = "单位工程", Reason = "不能为空" });
}
if (!string.IsNullOrEmpty(checkUnitName))
{
if (units.Any(x => x.UnitName == checkUnitName))
{
UnitId = units.Where(x => x.UnitName == checkUnitName).FirstOrDefault().UnitId;
}
else
{
lstError.Add(new ErrorInfo { Row = displayRow, Column = "受检单位", Reason = $"受检单位名称[{checkUnitName}]不存在" });
}
}
else
{
lstError.Add(new ErrorInfo { Row = displayRow, Column = "受检单位", Reason = "不能为空" });
}
if (!string.IsNullOrEmpty(hseManageName))
{
if (hseManagers.Any(x => x.UserName == hseManageName))
{
HSEManageId = hseManagers.Where(x => x.UserName == hseManageName).FirstOrDefault().UserId;
}
else
{
lstError.Add(new ErrorInfo { Row = displayRow, Column = "HSE经理", Reason = $"项目不存在用户[{hseManageName}]" });
}
}
if (!string.IsNullOrEmpty(checkItemName))
{
if (types.Any(x => x.RegisterTypesName == checkItemName))
{
CheckContent = checkItemName;
CheckItem = types.Where(x => x.RegisterTypesName == checkItemName).FirstOrDefault().RegisterTypesId;
}
else
{
lstError.Add(new ErrorInfo { Row = displayRow, Column = "问题类型", Reason = $"问题类型[{checkItemName}]不存在" });
}
}
if (!string.IsNullOrEmpty(levelName))
{
if (validLevelStrings.Any(x => x == levelName))
{
switch (levelName)
{
case "低": RiskLevel = "0"; break;
case "一般": RiskLevel = "1"; break;
case "较高": RiskLevel = "2"; break;
case "高": RiskLevel = "3"; break;
default: RiskLevel = "0"; break;
}
}
else
{
lstError.Add(new ErrorInfo { Row = displayRow, Column = "风险级别", Reason = $"风险级别[{levelName}]不存在" });
}
}
if (!string.IsNullOrEmpty(completeStatusName))
{
if (validStateStrings.Any(x => x == completeStatusName))
{
if (completeStatusName == "已整改")
{
CompleteStatus = true;
CompletedDate = DateTime.Now;
}
else
{
CompleteStatus = false;
}
}
else
{
lstError.Add(new ErrorInfo { Row = displayRow, Column = "现场处理结果", Reason = $"现场处理结果[{completeStatusName}]不存在" });
}
}
if (!string.IsNullOrEmpty(handMethod))
{
if (validTypeStrings.Any(x => x == handMethod))
{
RectifyOpinion = handMethod;
}
else
{
lstError.Add(new ErrorInfo { Row = displayRow, Column = "处理方式", Reason = $"处理方式[{handMethod}]不存在" });
}
}
if (!string.IsNullOrWhiteSpace(limitedDateStr))
{
if (!DateTime.TryParse(limitedDateStr, out DateTime ct))
lstError.Add(new ErrorInfo { Row = displayRow, Column = "限时日期", Reason = "日期格式错误" });
LimitedDate = ct;
}
else
{
lstError.Add(new ErrorInfo { Row = displayRow, Column = "限时日期", Reason = "不能为空" });
}
if (!string.IsNullOrEmpty(suggestions))
{
Suggestions = suggestions;
}
//if (import)
//{图片待处理
// try
// {
// urls = urls.Substring(urls.IndexOf('"') + 1, urls.LastIndexOf('"') - urls.IndexOf('"') - 1);
// var sss = imgDic.ContainsKey(urls) ? imgDic[urls].Replace(Funs.RootPath, "") : "";
// }
// catch (Exception e) { }
//}
if (lstError.Any())
{
return (lstError, null);
}
// 其余字段可根据实际业务映射到实体
var entity = new Model.Check_CheckSpecialProDetail
{
CheckSpecialDetailId = SQLHelper.GetNewID(),
CheckSpecialId = this.CheckSpecialId,
CheckArea = CheckArea,
UnitId = UnitId,
HSEManage = HSEManageId,
Unqualified = description,
CheckContent = CheckContent,
CheckItem = CheckItem,
RiskLevel = RiskLevel,
CompleteStatus = CompleteStatus,
CompletedDate = CompletedDate,
RectifyOpinion = RectifyOpinion,
LimitedDate = LimitedDate,
Suggestions = Suggestions
};
return (lstError, entity);
}
#endregion
#region
/// <summary>
/// 导入
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void btnImport_Click(object sender, EventArgs e)
{
if (hdCheckResult.Text == "1")
{
if (errorInfos.Count <= 0)
{
string rootPath = Server.MapPath("~/");
var localPath = ConfigurationManager.AppSettings["localRoot"];
//imgDic = NPOIHelper.ExtractDispimgImagesFromXml(rootPath + initPath + this.hdFileName.Text, localPath + "FileUpload/CheckSpecial");
ImportExcelToDatabase(rootPath + initPath + this.hdFileName.Text, true);
hdCheckResult.Text = string.Empty;
ShowNotify("导入成功!", MessageBoxIcon.Success);
PageContext.RegisterStartupScript(ActiveWindow.GetHidePostBackReference());
}
else
{
ShowNotify("请先将错误数据修正,再重新导入提交!", MessageBoxIcon.Warning);
}
}
else
{
ShowNotify("请先审核要导入的文件!", MessageBoxIcon.Warning);
}
}
/// <summary>
/// 导入Excel到数据库
/// </summary>
private void ImportExcelToDatabase(string fileName, bool import)
{
try
{
string msg = string.Empty;
var dt = NPOIHelper.ExcelToDataSet(fileName, out msg, true);
BLL.ErrLogInfo.WriteLog(msg);
SaveExcelDataToDatabase(fileName, dt.Tables[0], import);
}
catch (Exception ex)
{
ErrLogInfo.WriteLog("", ex);
}
}
/// <summary>
/// 校验并保存数据到数据库
/// </summary>
private bool SaveExcelDataToDatabase(string fileName, DataTable pds, bool import)
{
int ic = pds.Columns.Count;
if (ic < Cols)
{
ShowNotify($"导入Excel格式错误Excel只有{ic}列", MessageBoxIcon.Warning);
return false;
}
int ir = pds.Rows.Count;
if (pds == null || ir <= 0)
{
ShowNotify("导入数据为空!", MessageBoxIcon.Warning);
return false;
}
var errors = new List<ErrorInfo>();
var toInsert = new List<Model.Check_CheckSpecialProDetail>();
for (int i = 0; i < ir; i++)
{
var (error, entity) = ValidateRowAndBuildEntity(pds.Rows[i], (i + 2).ToString(), import);
if (error.Any())
errors.AddRange(error);
else
toInsert.Add(entity);
}
if (errors.Count > 0)
{
errorInfos.Clear();
errorInfos.AddRange(errors);
this.gvErrorInfo.DataSource = errorInfos;
this.gvErrorInfo.DataBind();
ShowNotify("存在校验错误,请先审核并修正后再导入。", MessageBoxIcon.Warning);
return false;
}
try
{
if (toInsert.Any())
{
Funs.DB.Check_CheckSpecialProDetail.InsertAllOnSubmit(toInsert);
Funs.DB.SubmitChanges();
}
ShowNotify($"成功导入 {toInsert.Count} 条记录。", MessageBoxIcon.Success);
PageContext.RegisterStartupScript(ActiveWindow.GetHidePostBackReference());
return true;
}
catch (Exception ex)
{
ErrLogInfo.WriteLog("导入 Check_CheckSpecialProDetail 失败", ex);
ShowNotify("导入失败:" + ex.Message, MessageBoxIcon.Error);
return false;
}
}
#endregion // 导入
}
}