mh_jy_safe/APT.MicroApi/APT.SK.WebApi/Controllers/Api/CheckContentsController.cs
2026-03-26 18:28:22 +08:00

857 lines
42 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 APT.BaseData.Domain.ApiModel;
using APT.BaseData.Domain.Entities.FM;
using APT.BaseData.Services.Services.FM;
using APT.Infrastructure.Core;
using APT.MS.Domain.Entities.HM;
using APT.MS.Domain.Entities.LR;
using APT.MS.Domain.Entities.SC.PT;
using APT.MS.Domain.Entities.SK;
using APT.MS.Domain.Enums.SK;
using APT.Utility;
using Castle.Core.Internal;
using Google.Protobuf.WellKnownTypes;
using ICSharpCode.SharpZipLib.Core;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.DependencyModel;
using NPOI.SS.Formula.Functions;
using NPOI.Util;
using Org.BouncyCastle.Asn1.Ess;
using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Linq;
using System.Reflection.Metadata;
using Ubiety.Dns.Core;
namespace APT.SK.WebApi.Controllers.Api
{
/// <summary>
/// 检查内容
/// </summary>
[Route("api/SK/SKCheckContents")]
public partial class CheckContentsController : AuthorizeApiController<T_SK_CHECK_CONTENTS>
{
/// <summary>
/// 排序分页查询数据
/// </summary>
/// <param name="pageFilter">分页过滤实体</param>
/// <returns></returns>
[HttpPost, Route("SKOrderPaged")]
public PagedActionResult<T_SK_CHECK_CONTENTS> SKOrderPaged([FromBody] KeywordPageFilter pageFilter)
{
if (pageFilter.Sort == "NAME")
{
pageFilter.Sort = "";
}
var filter = pageFilter.FilterGroup.Rules.FirstOrDefault(t => t.Field == "reset");
if (filter != null && !string.IsNullOrEmpty(filter.Value.ToString()))
{
pageFilter.FilterGroup.Rules.Remove(filter);
}
pageFilter.Include.Add("Nav_ListCheckQuestion");
pageFilter.Include.Add("Nav_ContentsBasics.Nav_Law");
pageFilter.SelectField.Add("Nav_ListCheckQuestion.NUM");
pageFilter.SelectField.Add("Nav_ListCheckQuestion.DESCREPTION");
pageFilter.SelectField.Add("Nav_ListCheckQuestion.DEMAND");
pageFilter.SelectField.Add("Nav_ContentsBasics.Nav_Law.NAME");
var result = GetOrderPageEntities<T_SK_CHECK_CONTENTS>(null, pageFilter);
if (result != null && result.Data != null && result.Data.Any())
{
foreach (var item in result.Data)
{
if (item.Nav_ListCheckQuestion != null && item.Nav_ListCheckQuestion.Any())
{
foreach (var item2 in item.Nav_ListCheckQuestion.OrderBy(t => t.NUM))
{
if (item2 != null && !string.IsNullOrEmpty(item2.DESCREPTION) && !string.IsNullOrEmpty(item2.DEMAND))
{
var tempD = item2.NUM + "*" + item2.DESCREPTION;
item.DESCREPTION = item.DESCREPTION + tempD;
var tempL = item2.NUM + "*" + item2.QUESTION_LEVEL.GetDescription();
item.QUESTION_LEVEL_SHOW = item.QUESTION_LEVEL_SHOW + tempL;
var tempM = item2.NUM + "*" + item2.DEMAND;
item.DEMAND = item.DEMAND + tempM;
}
}
}
if (item.Nav_ContentsBasics != null && item.Nav_ContentsBasics.Any())
{
item.CHECK_BASICS = string.Join("", item.Nav_ContentsBasics.Select(t=>t.Nav_Law?.NAME));
}
}
}
return result;
}
/// <summary>
/// 获得单条实体数据
/// </summary>
/// <param name="filter">过滤实体</param>
/// <returns></returns>
[HttpPost, Route("SkGet")]
public JsonActionResult<T_SK_CHECK_CONTENTS> SkGet([FromBody] KeywordFilter filter)
{
return SafeExecute<T_SK_CHECK_CONTENTS>(() =>
{
if(filter.FilterGroup.Rules.Any(t=>t.Field=="ID"))
{
var ids = filter.FilterGroup.Rules.FirstOrDefault(t => t.Field == "ID").Value.ToString();
if(ids.Contains(","))
{
var idArr = ids.Split(",");
filter.FilterGroup.Rules.Remove(filter.FilterGroup.Rules.FirstOrDefault(t => t.Field == "ID"));
filter.FilterGroup.Rules.Add(new APT.Infrastructure.Core.FilterRule
{
Field = "ID",
Operate = FilterOperate.Equal,
Value = idArr.FirstOrDefault()
});
}
}
var entity = this.GetEntity<T_SK_CHECK_CONTENTS>(null,filter);
return entity;
});
}
/// <summary>
/// 更新或新增数据
/// </summary>
/// <param name="entity">对象实体</param>
/// <returns></returns>
[HttpPost, Route("FullUpdate")]
public JsonActionResult<bool> FullUpdate([FromBody] T_SK_CHECK_CONTENTS entity)
{
return SafeExecute<bool>(() =>
{
var olds = this.GetEntity<T_SK_CHECK_CONTENTS>(t => !t.IS_DELETED && t.CHECKCONTENT == entity.CHECKCONTENT && t.ID != entity.ID && t.PRODUCTION_UNIT_ID == entity.PRODUCTION_UNIT_ID);
if (olds != null)
{
throw new Exception("检查内容重复,请先修改");
}
var details = entity.Nav_ListCheckQuestion;
entity.Nav_ListCheckQuestion = null;
if (details != null && details.Any())
{
foreach (var item in details)
{
item.ORG_ID = entity.ORG_ID;
item.CHECK_CONTENTS_ID = entity.ID;
}
}
var basics = entity.Nav_ContentsBasics;
entity.Nav_ContentsBasics = null;
if (basics != null && basics.Any())
{
foreach (var item in basics)
{
item.ORG_ID = entity.ORG_ID;
item.CHECK_CONTENTS_ID = entity.ID;
item.Nav_Law = null;
}
}
this.UnifiedCommit(() =>
{
if (entity != null)
UpdateEntityNoCommit(entity);
if (details != null && details.Any())
BantchSaveEntityNoCommit(details);
if (basics != null && basics.Any())
BantchSaveEntityNoCommit(basics);
});
return true;
});
}
/// <summary>
/// 检查内容对应的隐患描述
/// </summary>
/// <param name="filter"></param>
/// <returns></returns>
[HttpPost, Route("GetHiddenScripList")]
public PagedActionResult<T_SK_CHECK_QUESTION> GetHiddenScripList([FromBody] KeywordPageFilter pageFilter)
{
if (pageFilter.Sort == "NAME")
{
pageFilter.Sort = "";
}
var result = new PagedActionResult<T_SK_CHECK_QUESTION>();
var filter = pageFilter.FilterGroup.Rules.FirstOrDefault(t => t.Field == "CHECK_CONTENTS_ID");
if (filter != null && !string.IsNullOrEmpty(filter.Value.ToString()))
{
pageFilter.FilterGroup.Rules.Remove(filter);
result = this.GetOrderPageEntities<T_SK_CHECK_QUESTION>(t => t.CHECK_CONTENTS_ID == Guid.Parse(filter.Value.ToString()), pageFilter);
}
else
{
var resultTemp = this.GetEntities<T_SK_CHECK_QUESTION>(t => t.IS_DELETED == false, new BaseFilter(pageFilter.OrgId));
var questionIds = resultTemp.Distinct(t => t.DESCREPTION).Select(m => m.ID).ToList();
result = this.GetOrderPageEntities<T_SK_CHECK_QUESTION>(m => questionIds.Contains(m.ID), pageFilter);
}
return result;
}
/// <summary>
/// 导入
/// </summary>
/// <param name="files"></param>
/// <returns></returns>
[HttpPost, Route("ImportUpdate")]
public JsonActionResult<bool> ImportUpdate(IFormCollection files)
{
return SafeExecute<bool>(() =>
{
bool isOK = true;
var orgId = APT.Infrastructure.Api.AppContext.CurrentSession.OrgId;
var httpRequest = this.HttpContext.Request;
string orgIdStr = httpRequest.Form["OrgId"];// 获取 组织
var dic = Path.Combine(System.AppContext.BaseDirectory, "tempImportFiles");
if (!Directory.Exists(dic))
Directory.CreateDirectory(dic);
foreach (var key in httpRequest.Form.Files) // 文件键
{
var postedFile = key; // 获取文件键对应的文件对象
string filePath = Path.Combine(dic, DateTime.Now.ToString("yyyy_MM_dd_hh_mm_ss") + "_" + postedFile.FileName);
Byte[] fileData = new Byte[postedFile.Length];
Stream sr = postedFile.OpenReadStream();//创建数据流对象
sr.Read(fileData, 0, (int)postedFile.Length);
using (FileStream fs = new FileStream(filePath, FileMode.CreateNew))
{
fs.Write(fileData, 0, fileData.Length);
fs.Flush();
fs.Close();
}
//获取数据
Dictionary<int, int> startRowIndexs = new Dictionary<int, int>();
startRowIndexs.Add(0, 2);//根据Excel格式数据赋值
var dataTables = FileUtils.ReadExcelByOledb(filePath, startRowIndexs);
string Msg = string.Empty;
isOK = InsertModel3(dataTables.Tables[0], orgId, ref Msg);
try
{
System.IO.File.Delete(filePath);
}
catch { }
}
return isOK;
});
}
/// <summary>
/// 导入
/// </summary>
/// <param name="dtSource"></param>
/// <param name="orgId"></param>
/// <param name="Msg"></param>
/// <param name="rowIndex"></param>
/// <returns></returns>
/// <exception cref="Exception"></exception>
public bool InsertModel(DataTable dtSource, Guid? orgId, ref string Msg, int rowIndex = 1)
{
var userId = APT.Infrastructure.Api.AppContext.CurrentSession.UserID;
if (dtSource == null || dtSource.Rows.Count < rowIndex)
{
Msg = "未获取到导入数据";
throw new Exception(Msg);
}
int rowAll = dtSource.Rows.Count;
if (rowAll == 1)
{
throw new Exception("导入必须两条以上,一条请直接新增");
}
List<T_SK_CHECK_CONTENTS> contents = new List<T_SK_CHECK_CONTENTS>();
List<T_SK_CHECK_QUESTION> qustions = new List<T_SK_CHECK_QUESTION>();
Guid? checkId = null;
var baseFilter = new BaseFilter(orgId);
var oldContents = this.GetEntities<T_SK_CHECK_CONTENTS>(i => i.IS_DELETED == false, baseFilter, "Nav_ListCheckQuestion");
for (int i = 0; i < rowAll; i++)
{
if (!string.IsNullOrEmpty(dtSource.Rows[i][0].ToString().Trim()))
{
var first = oldContents.FirstOrDefault(x => x.CHECKCONTENT == dtSource.Rows[i][0].ToString().Trim());
if (first != null)//旧表已存在数据
{
Msg = Msg + ("第" + (i + 2) + "行,检查内容已存在,请勿重复导入");
}
else//不存在
{
T_SK_CHECK_CONTENTS content = new T_SK_CHECK_CONTENTS();
content.ORG_ID = orgId;
content.CHECKCONTENT = dtSource.Rows[i][0].ToString().Trim();
checkId = content.ID;
contents.Add(content);
}
var items = new List<string>();
var scores = new List<string>();
var methods = new List<string>();
var itemLists = dtSource.Rows[i][1].ToString().Trim().Split("。").ToList();
var scoreLists = dtSource.Rows[i][2].ToString().Trim().Split("。").ToList();
var methodLists = dtSource.Rows[i][3].ToString().Trim().Split("。").ToList();
foreach (var ite in itemLists)
{
if (!string.IsNullOrEmpty(ite))
items.Add(ite);
}
foreach (var ite in scoreLists)
{
if (!string.IsNullOrEmpty(ite))
scores.Add(ite);
}
foreach (var ite in methodLists)
{
if (!string.IsNullOrEmpty(ite))
methods.Add(ite);
}
if (items.Count != scores.Count || items.Count != methods.Count)
Msg= Msg+("第" + (i + 2) + "行,隐患描述与隐患等级与整改措施不匹配");
else
{
if (items != null && items.Any())
{
var NO = 1;
foreach (var item in items)
{
T_SK_CHECK_QUESTION question = new T_SK_CHECK_QUESTION();
question.CHECK_CONTENTS_ID = checkId;
question.ORG_ID = orgId;
var itemArr = item.Split("、");
if (itemArr.Length != 2)
{
question.NUM = NO;
question.DESCREPTION = item.ToString();
}
else
{
question.NUM = int.Parse(itemArr[0]);
question.DESCREPTION = itemArr[1].ToString();
}
qustions.Add(question);
NO++;
}
}
if (scores != null && scores.Any())
{
var NO = 1;
foreach (var item in scores)
{
var itemArr = item.Split("、");
if (itemArr.Length != 2)
{
var question = qustions.FirstOrDefault(t => t.CHECK_CONTENTS_ID == checkId && t.NUM == NO);
if (question != null)
{
question.QUESTION_LEVEL = item == "重大" ? SKHiddenLevel.Major : SKHiddenLevel.General;
}
else
Msg= Msg+("隐患对应序号的层级未填写");
}
else
{
var question = qustions.FirstOrDefault(t => t.CHECK_CONTENTS_ID == checkId && t.NUM == int.Parse(itemArr[0]));
if (question != null)
question.QUESTION_LEVEL = itemArr[1] == "重大" ? SKHiddenLevel.Major : SKHiddenLevel.General;
else
Msg= Msg+("隐患对应序号的层级未填写");
}
NO++;
}
}
if (methods != null && methods.Any())
{
var NO = 1;
foreach (var item in methods)
{
var itemArr = item.Split("、");
if (itemArr.Length != 2)
{
var question = qustions.FirstOrDefault(t => t.CHECK_CONTENTS_ID == checkId && t.NUM == NO);
if (question != null)
question.DEMAND = item;
else
Msg= Msg+("隐患对应序号的整改措施未填写");
}
else
{
var question = qustions.FirstOrDefault(t => t.CHECK_CONTENTS_ID == checkId && t.NUM == int.Parse(itemArr[0]));
if (question != null)
question.DEMAND = itemArr[1];
else
Msg= Msg+("隐患对应序号的整改措施未填写");
}
NO++;
}
}
}
}
}
if (!string.IsNullOrEmpty(Msg))
{
throw new Exception(Msg);
}
else
{
UnifiedCommit(() =>
{
if (contents != null && contents.Any())
BantchSaveEntityNoCommit(contents);
if (qustions != null && qustions.Any())
BantchSaveEntityNoCommit(qustions);
});
Msg = "导入成功!";
}
return true;
}
/// <summary>
/// 导入
/// </summary>
/// <param name="dtSource"></param>
/// <param name="orgId"></param>
/// <param name="Msg"></param>
/// <param name="rowIndex"></param>
/// <returns></returns>
/// <exception cref="Exception"></exception>
public bool InsertModel2(DataTable dtSource, Guid? orgId, ref string Msg, int rowIndex = 1)
{
var userId = APT.Infrastructure.Api.AppContext.CurrentSession.UserID;
if (dtSource == null || dtSource.Rows.Count < rowIndex)
{
Msg = "未获取到导入数据";
throw new Exception(Msg);
}
int rowAll = dtSource.Rows.Count;
if (rowAll == 1)
{
throw new Exception("导入必须两条以上,一条请直接新增");
}
List<T_SK_CHECK_CONTENTS> contents = new List<T_SK_CHECK_CONTENTS>();
List<T_SK_CHECK_QUESTION> qustions = new List<T_SK_CHECK_QUESTION>();
List<T_SK_CHECK_CONTENTS_BASIC> basics = new List<T_SK_CHECK_CONTENTS_BASIC>();
List<T_SK_CHECK_QUESTION> qustionTemps = new List<T_SK_CHECK_QUESTION>();
var baseFilter = new BaseFilter(orgId);
var lawList = this.GetEntities<T_LR_LAW>(i => i.IS_DELETED == false, baseFilter);
var productionUnits = this.GetEntities<T_FM_USER_PRODUCTION_UNIT_SET>(i => i.IS_DELETED == false, baseFilter);
var oldContents = this.GetEntities<T_SK_CHECK_CONTENTS>(i => i.IS_DELETED == false, baseFilter);
var oldHiddens = this.GetEntities<T_SK_CHECK_QUESTION>(i => i.IS_DELETED == false, baseFilter);
var oldbass = this.GetEntities<T_SK_CHECK_CONTENTS_BASIC>(i => i.IS_DELETED == false, baseFilter);
for (int i = 0; i < rowAll; i++)
{
if (!string.IsNullOrEmpty(dtSource.Rows[i][0].ToString().Trim()))
{
var unit = productionUnits.FirstOrDefault(t => t.NAME == dtSource.Rows[i][0].ToString().Trim());
var first = oldContents.FirstOrDefault(x =>x.PRODUCTION_UNIT_ID == unit?.ID && x.CHECKCONTENT == dtSource.Rows[i][1].ToString().Trim());
if (first != null)//旧表已存在数据
{
Msg = Msg + "检查内容:" + dtSource.Rows[i][1].ToString().Trim() + "已存在,请直接到系统配置修改;";
//T_SK_CHECK_QUESTION content = new T_SK_CHECK_QUESTION();
//content.ORG_ID = orgId;
//content.CHECKCONTENT = dtSource.Rows[i][1].ToString().Trim();
//content.CHECK_BASICS = dtSource.Rows[i][2].ToString().Trim();
//content.CHECK_STANDARD = dtSource.Rows[i][3].ToString().Trim();
//content.DESCREPTION = dtSource.Rows[i][4].ToString().Trim();
//content.QUESTION_LEVEL_SHOW = dtSource.Rows[i][5].ToString().Trim();
//content.QUESTION_LEVEL = content.QUESTION_LEVEL_SHOW == "重大" ? SKHiddenLevel.Major : SKHiddenLevel.General;
//content.DEMAND = dtSource.Rows[i][6].ToString().Trim();
//content.PRODUCTION_UNIT_ID = unit?.ID;
//content.CHECK_CONTENTS_ID = first.ID;
//qustionTemps.Add(content);
//first.CHECK_STANDARD = content.CHECK_STANDARD;
//contents.Add(first);
}
else
{
T_SK_CHECK_QUESTION content = new T_SK_CHECK_QUESTION();
content.ORG_ID = orgId;
content.CHECKCONTENT = dtSource.Rows[i][1].ToString().Trim();
content.CHECK_BASICS = dtSource.Rows[i][2].ToString().Trim();
content.CHECK_STANDARD = dtSource.Rows[i][3].ToString().Trim();
content.DESCREPTION = dtSource.Rows[i][4].ToString().Trim();
content.QUESTION_LEVEL_SHOW = dtSource.Rows[i][5].ToString().Trim();
content.QUESTION_LEVEL = content.QUESTION_LEVEL_SHOW == "重大" ? SKHiddenLevel.Major : SKHiddenLevel.General;
content.DEMAND = dtSource.Rows[i][6].ToString().Trim();
content.PRODUCTION_UNIT_ID = unit?.ID;
qustionTemps.Add(content);
}
}
}
if (qustionTemps != null && qustionTemps.Any())
{
//已有检查内容,隐患描述直接加
//var contentList2 = qustionTemps.Where(m => m.CHECK_CONTENTS_ID != null).GroupBy(t => new { t.CHECK_CONTENTS_ID, t.PRODUCTION_UNIT_ID, t.CHECKCONTENT }).Distinct().ToList();
//if (contentList2 != null && contentList2.Any())
//{
// foreach (var item in contentList2)
// {
// var qus = qustionTemps.Where(t => t.CHECK_CONTENTS_ID == item.Key.CHECK_CONTENTS_ID && t.PRODUCTION_UNIT_ID == item.Key.PRODUCTION_UNIT_ID && t.CHECKCONTENT == item.Key.CHECKCONTENT).ToList();
// var j = 1;
// foreach (var que in qus)
// {
// var quFirst = oldHiddens.FirstOrDefault(t =>t.CHECK_CONTENTS_ID== item.Key.CHECK_CONTENTS_ID && t.DESCREPTION == que.DESCREPTION && t.DEMAND == que.DEMAND && t.QUESTION_LEVEL == que.QUESTION_LEVEL);
// if (quFirst == null)
// {
// T_SK_CHECK_QUESTION qu = new T_SK_CHECK_QUESTION();
// qu.CHECK_CONTENTS_ID = item.Key.CHECK_CONTENTS_ID;
// qu.ORG_ID = orgId;
// qu.DESCREPTION = que.DESCREPTION;
// qu.DEMAND = que.DEMAND;
// qu.QUESTION_LEVEL = que.QUESTION_LEVEL;
// qu.NUM = j;
// qustions.Add(qu);
// j++;
// }
// if (!string.IsNullOrEmpty(que.CHECK_BASICS))
// {
// var laws=que.CHECK_BASICS.Split("").ToList();
// foreach (var law in laws)
// {
// var lawFirst = lawList.FirstOrDefault(t => t.NAME == law);
// if (!string.IsNullOrEmpty(law))
// {
// if (lawFirst != null)
// {
// var laFirst = oldbass.FirstOrDefault(t => t.CHECK_CONTENTS_ID == item.Key.CHECK_CONTENTS_ID && t.LAW_ID == lawFirst.ID);
// if (laFirst == null)
// {
// T_SK_CHECK_CONTENTS_BASIC bas = new T_SK_CHECK_CONTENTS_BASIC();
// bas.ORG_ID = orgId;
// bas.LAW_ID = lawFirst.ID;
// basics.Add(bas);
// }
// }
// else
// {
// Msg = Msg + "找不到检查依据:" + law + ",请先到法律法规库添加";
// }
// }
// }
// }
// }
// }
//}
//新增的检查内容
var contentList = qustionTemps.Where(m=>m.CHECK_CONTENTS_ID==null).GroupBy(t => new { t.PRODUCTION_UNIT_ID, t.CHECKCONTENT }).Distinct().ToList();
if (contentList != null && contentList.Any())
{
foreach (var item in contentList)
{
T_SK_CHECK_CONTENTS content = new T_SK_CHECK_CONTENTS();
content.ORG_ID = orgId;
content.PRODUCTION_UNIT_ID = item.Key.PRODUCTION_UNIT_ID;
content.CHECKCONTENT = item.Key.CHECKCONTENT;
content.CHECK_STANDARD = qustionTemps.FirstOrDefault(t => t.PRODUCTION_UNIT_ID == item.Key.PRODUCTION_UNIT_ID && t.CHECKCONTENT == item.Key.CHECKCONTENT)?.CHECK_STANDARD;
contents.Add(content);
var qus = qustionTemps.Where(t => t.PRODUCTION_UNIT_ID == item.Key.PRODUCTION_UNIT_ID && t.CHECKCONTENT == item.Key.CHECKCONTENT).ToList();
var j = 1;
foreach (var que in qus)
{
T_SK_CHECK_QUESTION qu = new T_SK_CHECK_QUESTION();
qu.CHECK_CONTENTS_ID = content.ID;
qu.ORG_ID = orgId;
qu.DESCREPTION = que.DESCREPTION;
qu.DEMAND = que.DEMAND;
qu.QUESTION_LEVEL = que.QUESTION_LEVEL;
qu.NUM = j;
qustions.Add(qu);
j++;
if (!string.IsNullOrEmpty(que.CHECK_BASICS))
{
var laws = que.CHECK_BASICS.Split("").ToList();
foreach (var law in laws)
{
var lawFirst = lawList.FirstOrDefault(t => t.NAME == law);
if (!string.IsNullOrEmpty(law))
{
if (lawFirst != null)
{
T_SK_CHECK_CONTENTS_BASIC bas = new T_SK_CHECK_CONTENTS_BASIC();
bas.ORG_ID = orgId;
bas.LAW_ID = lawFirst.ID;
basics.Add(bas);
}
else
{
Msg = Msg + "找不到检查依据:" + law + ",请先到法律法规库添加;";
}
}
}
}
}
}
}
}
if (!string.IsNullOrEmpty(Msg))
{
throw new Exception(Msg);
}
else
{
UnifiedCommit(() =>
{
if (contents != null && contents.Any())
BantchSaveEntityNoCommit(contents);
if (qustions != null && qustions.Any())
BantchSaveEntityNoCommit(qustions);
});
Msg = "导入成功!";
}
return true;
}
/// <summary>
/// 导入
/// </summary>
/// <param name="dtSource"></param>
/// <param name="orgId"></param>
/// <param name="Msg"></param>
/// <param name="rowIndex"></param>
/// <returns></returns>
/// <exception cref="Exception"></exception>
public bool InsertModel3(DataTable dtSource, Guid? orgId, ref string Msg, int rowIndex = 1)
{
var userId = APT.Infrastructure.Api.AppContext.CurrentSession.UserID;
if (dtSource == null || dtSource.Rows.Count < rowIndex)
{
Msg = "未获取到导入数据";
throw new Exception(Msg);
}
int rowAll = dtSource.Rows.Count;
if (rowAll == 1)
{
throw new Exception("导入必须两条以上,一条请直接新增");
}
List<T_SK_CHECK_CONTENTS> contents = new List<T_SK_CHECK_CONTENTS>();
List<T_SK_CHECK_QUESTION> qustions = new List<T_SK_CHECK_QUESTION>();
List<T_SK_CHECK_CONTENTS_BASIC> basics = new List<T_SK_CHECK_CONTENTS_BASIC>();
List<T_SK_CHECK_QUESTION> qustionTemps = new List<T_SK_CHECK_QUESTION>();
var baseFilter = new BaseFilter(orgId);
var productionUnits = this.GetEntities<T_FM_USER_PRODUCTION_UNIT_SET>(i => i.IS_DELETED == false, baseFilter);
var oldContents = this.GetEntities<T_SK_CHECK_CONTENTS>(i => i.IS_DELETED == false, baseFilter);
var oldLaws = this.GetEntities<T_LR_LAW>(i => i.IS_DELETED == false, baseFilter);
for (int i = 0; i < rowAll; i++)
{
if (!string.IsNullOrEmpty(dtSource.Rows[i][0].ToString().Trim()))
{
var unit = productionUnits.FirstOrDefault(t => t.NAME == dtSource.Rows[i][0].ToString().Trim());
if (unit == null)//旧表已存在数据
{
Msg = Msg +"第" + (i + 3) + "行生产单元:" + dtSource.Rows[i][0].ToString().Trim() + "不存在,请先到系统管理添加;";
}
}
else
{
Msg = Msg + "第" + (i + 3) + "行生产单元不能为空;";
}
if (!string.IsNullOrEmpty(dtSource.Rows[i][1].ToString().Trim()))
{
var conFirst = oldContents.FirstOrDefault(t => t.CHECKCONTENT == dtSource.Rows[i][1].ToString().Trim());
if (conFirst != null)
{
Msg = Msg + "第" + (i + 3) + "行检查内容" + dtSource.Rows[i][1].ToString().Trim() + "已存在,请勿重复导入;";
}
}
else
{
Msg = Msg + "第" + (i + 3) + "行检查内容不能为空;";
}
if (!string.IsNullOrEmpty(dtSource.Rows[i][2].ToString().Trim()))
{
var lists = dtSource.Rows[i][2].ToString().Trim().Split("").ToList();
if (lists != null && lists.Any())
{
foreach (var item in lists)
{
if (!string.IsNullOrEmpty(item))
{
var conFirst = oldLaws.FirstOrDefault(t => t.NAME == item);
if (conFirst == null)
{
Msg = Msg + "第" + (i + 3) + "行检查依据" + item + "不存在,请先到知识库法律法规库维护;";
}
}
}
}
}
var hiddenDes = dtSource.Rows[i][4].ToString().Trim();
if (!string.IsNullOrEmpty(hiddenDes))
{
if (!hiddenDes.Contains("。"))
{
Msg = Msg + "第" + (i + 3) + "行隐患描述格式不正确1*内容。";
}
if (!hiddenDes.Contains("*"))
{
Msg = Msg + "第" + (i + 3) + "行隐患描述格式不正确1*内容。";
}
var lists = hiddenDes.Split("。").ToList();
if (lists != null && lists.Any())
{
foreach (var item in lists)
{
if (!string.IsNullOrEmpty(item))
{
if (!item.Contains("*"))
{
Msg = Msg + "第" + (i + 3) + "行隐患描述格式不正确1*内容。";
}
}
}
}
}
var hiddenLevel = dtSource.Rows[i][5].ToString().Trim();
if (!string.IsNullOrEmpty(hiddenLevel))
{
if (!hiddenLevel.Contains("。"))
{
Msg = Msg + "第" + (i + 3) + "行隐患等级格式不正确1*内容。";
}
if (!hiddenLevel.Contains("*"))
{
Msg = Msg + "第" + (i + 3) + "行隐患等级格式不正确1*内容。";
}
var lists = hiddenLevel.Split("。").ToList();
if (lists != null && lists.Any())
{
foreach (var item in lists)
{
if (!string.IsNullOrEmpty(item))
{
if (!item.Contains("*"))
{
Msg = Msg + "第" + (i + 3) + "行隐患等级格式不正确1*内容。";
}
else
{
if (item.Split('*')[1] != "一般" && item.Split('*')[1] != "重大")
{
Msg = Msg + "第" + (i + 3) + "行隐患等级只能填写一般或重大";
}
}
}
}
}
}
var hiddenMes = dtSource.Rows[i][6].ToString().Trim();
if (!string.IsNullOrEmpty(hiddenMes))
{
if (!hiddenMes.Contains("。"))
{
Msg = Msg + "第" + (i + 3) + "行整改措施格式不正确1*内容。";
}
if (!hiddenMes.Contains("*"))
{
Msg = Msg + "第" + (i + 3) + "行整改措施格式不正确1*内容。";
}
var lists = hiddenMes.Split("。").ToList();
if (lists != null && lists.Any())
{
foreach (var item in lists)
{
if (!string.IsNullOrEmpty(item))
{
if (!item.Contains("*"))
{
Msg = Msg + "第" + (i + 3) + "行整改措施格式不正确1*内容。";
}
}
}
}
}
}
if (!string.IsNullOrEmpty(Msg))
{
throw new Exception(Msg);
}
for (int i = 0; i < rowAll; i++)
{
var unit = productionUnits.FirstOrDefault(t => t.NAME == dtSource.Rows[i][0].ToString().Trim());
T_SK_CHECK_QUESTION content = new T_SK_CHECK_QUESTION();
content.ORG_ID = orgId;
content.CHECKCONTENT = dtSource.Rows[i][1].ToString().Replace("\n", "").Trim();
content.CHECK_BASICS = dtSource.Rows[i][2].ToString().Replace("\n", "").Trim();
content.CHECK_STANDARD = dtSource.Rows[i][3].ToString().Replace("\n", "").Trim();
content.DESCREPTION = dtSource.Rows[i][4].ToString().Replace("\n", "").Trim();
content.QUESTION_LEVEL_SHOW = dtSource.Rows[i][5].ToString().Replace("\n", "").Trim();
content.DEMAND = dtSource.Rows[i][6].ToString().Replace("\n", "").Trim();
content.PRODUCTION_UNIT_ID = unit?.ID;
qustionTemps.Add(content);
}
if (qustionTemps != null && qustionTemps.Any())
{
foreach (var item in qustionTemps)
{
T_SK_CHECK_CONTENTS content = new T_SK_CHECK_CONTENTS();
content.ORG_ID = orgId;
content.PRODUCTION_UNIT_ID = item.PRODUCTION_UNIT_ID;
content.CHECKCONTENT = item.CHECKCONTENT;
content.CHECK_STANDARD = item.CHECK_STANDARD;
contents.Add(content);
if (!string.IsNullOrEmpty(item.DESCREPTION) && !string.IsNullOrEmpty(item.DEMAND))
{
var ques = item.DESCREPTION.Split("。").ToList();
var levels = item.QUESTION_LEVEL_SHOW.Split("。").ToList();
var mess = item.DEMAND.Split("。").ToList();
if (ques != null && ques.Any())
{
foreach (var que in ques)
{
var quNum = que.Split("*")[0];
var mes = mess.FirstOrDefault(t => t.StartsWith(quNum));
var level = levels.FirstOrDefault(t => t.StartsWith(quNum));
T_SK_CHECK_QUESTION qu = new T_SK_CHECK_QUESTION();
qu.CHECK_CONTENTS_ID = content.ID;
qu.ORG_ID = orgId;
qu.DESCREPTION = que.Split('*')[1];
qu.DEMAND = mes.Split("*")[1];
qu.QUESTION_LEVEL = level!=null && level.Split("*")[1] =="重大"? SKHiddenLevel.Major: SKHiddenLevel.General;
qu.NUM = int.Parse(que.Split('*')[0]);
qustions.Add(qu);
}
}
}
if (!string.IsNullOrEmpty(item.CHECK_BASICS))
{
var lists = item.CHECK_BASICS.Split("").ToList();
if (lists != null && lists.Any())
{
foreach (var bas in lists)
{
if (!string.IsNullOrEmpty(bas))
{
var basFirst = oldLaws.FirstOrDefault(t => t.NAME == bas);
T_SK_CHECK_CONTENTS_BASIC post = new T_SK_CHECK_CONTENTS_BASIC();
post.ORG_ID = orgId;
post.CHECK_CONTENTS_ID = content.ID;
post.LAW_ID = basFirst.ID;
basics.Add(post);
}
}
}
}
}
}
if (!string.IsNullOrEmpty(Msg))
{
throw new Exception(Msg);
}
else
{
UnifiedCommit(() =>
{
if (contents != null && contents.Any())
BantchSaveEntityNoCommit(contents);
if (qustions != null && qustions.Any())
BantchSaveEntityNoCommit(qustions);
if (basics != null && basics.Any())
BantchSaveEntityNoCommit(basics);
});
Msg = "导入成功!";
}
return true;
}
}
}