mh_sms/APT.MicroApi/APT.SC.WebApi/Controllers/Api/OGController/03OGSafeAssessPlanInputController.cs
2024-01-22 09:17:01 +08:00

502 lines
20 KiB
C#

using APT.BaseData.Domain.Entities.FM;
using APT.BaseData.Domain.Enums.PF;
using APT.Infrastructure.Core;
using APT.MS.Domain.Entities.OG;
using APT.MS.Domain.Entities.SC;
using APT.MS.Domain.Enums;
using APT.Utility;
using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Linq;
namespace APT.SC.WebApi.Controllers.Api.OG
{
[Route("api/OG/OGSafeAssessPlanInput")]
public class OGSafeAssessPlanInputController : AuthorizeApiController<T_OG_SAFE_ASSESS_PLAN_INPUT>
{
/// <summary>
/// 保存
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[HttpPost, Route("FullUpdate")]
public JsonActionResult<bool> FullUpdate([FromBody]T_OG_SAFE_ASSESS_PLAN_INPUT entity)
{
return SafeExecute(() =>
{
if (entity.USER_ID == null)
{
entity.USER_ID = APT.Infrastructure.Api.AppContext.CurrentSession.UserID.Value;
}
var items = entity.Nav_SafeAssessItem;
entity.Nav_SafeAssessItem = null;
decimal? score = 0;
if (items != null)
{
items.ForEach(i => {
score += i.SCORE;
});
}
if (score != 100)
{
throw new Exception("标准分相加应为100分");
}
if (entity.CODE == null)
{
entity.CODE = DateTime.Now.ToString("yyyyMMddHHmmss");
}
UnifiedCommit(() =>
{
UpdateEntityNoCommit(entity);
if (items != null)
{
BantchSaveEntityNoCommit(items);
}
});
return true;
});
}
public class AssessUserModel
{
public List<T_FM_USER> Nav_User { get; set; }
}
[HttpPost, Route("GetAssessUser")]
public JsonActionResult<AssessUserModel> GetAssessUser([FromBody] KeywordFilter filter)
{
var ret = new JsonActionResult<AssessUserModel>();
if (filter.Keyword == null)
{
ret.Data = new AssessUserModel
{
Nav_User = new List<T_FM_USER>(),
};
ret.IsSuccessful = true;
ret.TotalCount = 0;
ret.ErrorMessage = "";
return ret;
}
var id = new Guid(filter.Keyword);
var departIds = new List<Guid>();
var depUsers = new List<T_FM_USER>();
var tmpUsers = new List<T_FM_USER>();
var headUserId = new List<Guid>();
var retUsers = new List<T_FM_USER>();
var safeUserIds = new List<Guid>();
var posts = GetEntities<T_FM_USER_POST>(t => t.ID == id,
new BaseFilter(filter.GetOrgId())).ToList();
bool isAsSafeUser = false;
//if (posts != null)
//{
// if (posts.Count > 0)
// {
// isAsSafeUser = posts[0].Nav_Post.AS_SAFE_USER;
// }
// posts.ForEach(t =>
// {
// departIds.AddRange(t.Nav_Post.Nav_Posts.Select(m => m.Nav_Depost.DEPARTMENT_ID.Value).ToList());
// });
// tmpUsers = posts.Select(u => u.Nav_User).ToList();
//}
//if (isAsSafeUser)
//{
// var safePost = GetEntities<T_FM_DEPARTMENT_POST>(
// t => t.Nav_Workduty.NAME == "安全员" && departIds.Contains(t.DEPARTMENT_ID),
// new BaseFilter(entity.ORG_ID),
// new string[] { "Nav_Workduty", "Nav_Users", "Nav_Users.Nav_User" }).ToList();
// if (safePost != null)
// {
// safePost.ForEach(t =>
// {
// safeUserIds.AddRange(t.Nav_Users.Select(u => u.USER_ID).ToList());
// });
// }
// tmpUsers = tmpUsers.Where(u => safeUserIds.Contains(u.ID)).ToList();
//}
//var userData = GetEntity<T_FM_USER>(u => u.ID == APT.Infrastructure.Api.AppContext.CurrentSession.UserID,
// new BaseFilter(entity.ORG_ID),
// new string[] { "Nav_Department" });
//// 公司级,除选矿部和矿山部
//if (userData.Nav_Department.DEPARTMENT_LEVEL == (int)FMDepartmentLevelEnum.公司级)
//{
// var depData = GetEntities<T_FM_DEPARTMENT>(d => d.CODE == "XLKKS" || d.CODE == "XLKXK",
// new BaseFilter(entity.ORG_ID),
// new string[] { "" }).ToList();
// depData.ForEach(t =>
// {
// // 获取选矿部和矿山部所有成员
// getDepAllUser(t.ID, depUsers, headUserId);
// });
// if (tmpUsers.Count > 0)
// {
// tmpUsers.ForEach(t =>
// {
// if (depUsers.Count > 0)
// {
// var hasData = false;
// depUsers.ForEach(d =>
// {
// if (t.ID == d.ID)
// {
// hasData = true;
// }
// });
// if (!hasData)
// {
// retUsers.Add(t);
// }
// }
// });
// }
//}
//else
//{
// // 部门级,或车间级,或班组级时,把当前部门和下级人员,除了负责人过滤出来
// getDepAllUser(userData.DEPARTMENT_ID.Value, depUsers, headUserId);
// if (tmpUsers.Count > 0)
// {
// tmpUsers.ForEach(t =>
// {
// if (depUsers.Count > 0)
// {
// depUsers.ForEach(d =>
// {
// if (t.ID == d.ID && !headUserId.Contains(t.ID))
// {
// retUsers.Add(t);
// }
// });
// }
// });
// }
//}
//ret.Data = new AssessUserModel
//{
// Nav_User = retUsers,
//};
ret.IsSuccessful = true;
ret.TotalCount = retUsers == null ? 0 : retUsers.Count;
ret.ErrorMessage = "";
return ret;
}
public void getDepAllUser(Guid depId, List<T_FM_USER> user, List<Guid> headUserId)
{
var userData = GetEntities<T_FM_USER>(u => u.DEPARTMENT_ID == depId,
new BaseFilter(APT.Infrastructure.Api.AppContext.CurrentSession.OrgId),
new string[] { "Nav_Department" }).ToList();
if (userData != null && userData.Count > 0)
{
userData.ForEach(u =>
{
headUserId.Add(u.Nav_Department.USER_ID.Value);
});
user.AddRange(userData);
}
var chidlData = GetEntities<T_FM_DEPARTMENT>(d => d.PARENT_ID == depId,
new BaseFilter(APT.Infrastructure.Api.AppContext.CurrentSession.OrgId),
new string[] { }).ToList();
if (chidlData != null && chidlData.Count > 0)
{
chidlData.ForEach(c =>
{
getDepAllUser(c.ID, user, headUserId);
});
}
}
public String GetAssessPlanInputCode()
{
return DateTime.Now.ToString("yyyyMMddHHmmss");
}
/// <summary>
/// 安全生产组织保障考核方案导入model
/// </summary>
public class AssessPlanInfoModel
{
/// <summary>
/// 用户导入model
/// </summary>
public AssessPlanInfoModel()
{
this.MessageList = new List<string>();
this.Nav_AssessPlanItem = new List<AssessPlanItemModel>();
}
/// <summary>
/// 提示信息
/// </summary>
public List<string> MessageList { get; set; }
public List<AssessPlanItemModel> Nav_AssessPlanItem { get; set; }
}
/// <summary>
/// 安全生产组织保障考核方案导入model
/// </summary>
public class AssessPlanItemModel
{
/// <summary>
/// ID
/// </summary>
public Guid? ID { get; set; }
/// <summary>
/// 被考核岗位ID
/// </summary>
public Guid? POST_ID { get; set; }
/// <summary>
/// 被考核岗位
/// </summary>
public string POST_NAME { get; set; }
/// <summary>
/// 考核年度
/// </summary>
public int ANNUAL { get; set; }
/// <summary>
/// 考核周期ID
/// </summary>
public PTAssessmentCycleEnums CYCLE { get; set; }
/// <summary>
/// 考核项目
/// </summary>
public string NAME { get; set; }
/// <summary>
/// 标准分
/// </summary>
public int SCORE { get; set; }
/// <summary>
/// 考核认定评分办法
/// </summary>
public string METHOD { get; set; }
}
/// <summary>
/// 导入安全生产组织考核方案
/// </summary>
/// <returns></returns>
[HttpPost, Route("ImportAssessPlan")]
public JsonActionResult<AssessPlanInfoModel> ImportAssessPlan()
{
return SafeExecute<AssessPlanInfoModel>(() =>
{
AssessPlanInfoModel model = new AssessPlanInfoModel();
var httpRequest = this.HttpContext.Request;
string orgIdStr = httpRequest.Form["OrgId"];// 获取 组织
Guid? orgId = null;
if (!string.IsNullOrEmpty(orgIdStr))
orgId = new Guid(orgIdStr);
var unitlists = this.GetEntities<T_FM_UNIT>(null, new BaseFilter(orgId));
foreach (var key in httpRequest.Form.Files) // 文件键
{
var postedFile = key; // 获取文件键对应的文件对象
var dic = Path.Combine(System.AppContext.BaseDirectory, "tempImportFiles");
if (!Directory.Exists(dic))
Directory.CreateDirectory(dic);
string fileName = 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(fileName, FileMode.CreateNew))
{
fs.Write(fileData, 0, fileData.Length);
fs.Flush();
fs.Close();
}
var table = FileUtils.ReadExcelTable(fileName, 0);
try
{
System.IO.File.Delete(fileName);
}
catch { }
if (table != null && table.Rows.Count > 0)
{
DataColumn colPostName = table.Columns[0];//被考核岗位
DataColumn colAnnual = table.Columns[1];//考核年度
DataColumn colCycleName = table.Columns[2];//考核周期
DataColumn colItem = table.Columns[3];//考核项目
DataColumn colScore = table.Columns[4];//标准分
DataColumn colMethod = table.Columns[5];//考核认定评分办法
DataColumn colRowNO = new DataColumn("RowNo", typeof(int));//序号
colRowNO.DefaultValue = 0;
table.Columns.Add(colRowNO);
int rowNo = 1;
foreach (DataRow row in table.Rows)
{
row[colRowNO] = rowNo;
rowNo++;
}
List<T_OG_SAFE_ASSESS_PLAN_INPUT> allPlanInput = this.GetEntities<T_OG_SAFE_ASSESS_PLAN_INPUT>(null, new BaseFilter(), new string[] { "Nav_Post", "Nav_SafeAssessItem" }).ToList();
List<T_SC_POST> postList = null;
postList = this.GetEntities<T_SC_POST>(null, new BaseFilter(null, FilterOrgTypeEnum.), new string[] { "Nav_Posts" }).ToList();
DataView dataView = new DataView(table, string.Empty, colPostName.ColumnName, DataViewRowState.CurrentRows);
foreach (DataRowView rV in dataView)
{
AssessPlanItemModel item = new AssessPlanItemModel();
DataRow r = rV.Row;
string postcodeName = LibUtils.ToString(r[colPostName]);
int annual = LibUtils.ToInt(r[colAnnual]);
int cycleName = LibUtils.ToInt(r[colCycleName]);
string itemStr = LibUtils.ToString(r[colItem]);
int scoreInt = LibUtils.ToInt(r[colScore]);
string methodStr = LibUtils.ToString(r[colMethod]);
int tmpRowNo = LibUtils.ToInt(r[colRowNO]);
T_SC_POST post = postList == null ? null :
postList.Where(t => t.NAME == postcodeName).FirstOrDefault();
if (string.IsNullOrEmpty(postcodeName))
{
model.MessageList.Add(string.Format("序号{0}:被考核岗位为空,已忽略导入", tmpRowNo));
continue;
}
item.ID = Guid.NewGuid();
item.ANNUAL = annual;
if (post != null)
{
item.POST_ID = post.ID;
item.POST_NAME = post.NAME;
}
else
{
model.MessageList.Add(string.Format("序号{0}:被考核岗位{1}不存在,已忽略导入", tmpRowNo, postcodeName));
continue;
}
item.CYCLE = (PTAssessmentCycleEnums)cycleName;
item.NAME = itemStr;
item.SCORE = scoreInt;
item.METHOD = methodStr;
model.Nav_AssessPlanItem.Add(item);
}
}
}
return model;
});
}
/// <summary>
/// 保存导入考核方案
/// </summary>
/// <returns></returns>
[HttpPost, Route("SaveImportAssessPlan")]
public JsonActionResult<bool> SaveImportAssessPlan([FromBody] AssessPlanInfoModel model)
{
return SafeExecute<bool>(() =>
{
if (model == null || model.Nav_AssessPlanItem == null || model.Nav_AssessPlanItem.Count == 0)
throw new Exception("请输入");
var inputList = new List<T_OG_SAFE_ASSESS_PLAN_INPUT>();
var itemList = new List<T_OG_SAFE_ASSESS_ITEM>();
model.Nav_AssessPlanItem.ForEach(t =>
{
var index = -1;
var codeIndex = 0;
int i = 0;
inputList.ForEach(p =>
{
if (p.POST_ID == t.POST_ID && p.ANNUAL == t.ANNUAL && p.CYCLE == t.CYCLE)
{
index = i;
}
i++;
});
if (index != -1)
{
T_OG_SAFE_ASSESS_ITEM item = new T_OG_SAFE_ASSESS_ITEM();
item.ID = Guid.NewGuid();
item.ORG_ID = APT.Infrastructure.Api.AppContext.CurrentSession.OrgId;
item.ASSESS_PLAN_INPUT_ID = inputList[index].ID;
item.NAME = t.NAME;
item.SCORE = t.SCORE;
item.METHOD = t.METHOD;
itemList.Add(item);
}
else
{
var userData = GetEntity<T_FM_USER>(u => u.ID == APT.Infrastructure.Api.AppContext.CurrentSession.UserID,new string[] { "Nav_Department" });
var depName = "";
if (userData != null && userData.Nav_Department != null)
{
depName = userData.Nav_Department.NAME;
}
var code = "";
while (true)
{
var hasData = false;
code = GetAssessPlanInputCode();
inputList.ForEach(p =>
{
if (p.CODE == code)
{
hasData = true;
}
});
if (!hasData)
{
break;
}
}
T_OG_SAFE_ASSESS_PLAN_INPUT input = new T_OG_SAFE_ASSESS_PLAN_INPUT
{
ID = Guid.NewGuid(),
ORG_ID = APT.Infrastructure.Api.AppContext.CurrentSession.OrgId,
CODE = code,
POST_ID = t.POST_ID,
USER_ID = APT.Infrastructure.Api.AppContext.CurrentSession.UserID,
ANNUAL = t.ANNUAL,
CYCLE = t.CYCLE,
DEP_NAME = depName,
STATUS = (int)PFStandardStatus.Draft,
ENTITY_ORG_TPYE = 2
};
inputList.Add(input);
T_OG_SAFE_ASSESS_ITEM item = new T_OG_SAFE_ASSESS_ITEM();
item.ID = Guid.NewGuid();
item.ORG_ID = APT.Infrastructure.Api.AppContext.CurrentSession.OrgId;
item.ASSESS_PLAN_INPUT_ID = input.ID;
item.NAME = t.NAME;
item.SCORE = t.SCORE;
item.METHOD = t.METHOD;
itemList.Add(item);
codeIndex++;
}
});
UnifiedCommit(() =>
{
if (inputList.Count > 0)
BantchSaveEntityNoCommit(inputList);
if (itemList.Count > 0)
BantchSaveEntityNoCommit(itemList);
});
return true;
});
}
}
}