mh_jy_safe/APT.MicroApi/APT.SC.WebApi/Controllers/Api/WBController/8SafeCheckTaskController.cs
2025-08-25 09:56:57 +08:00

396 lines
18 KiB
C#

using APT.BaseData.Domain.Entities;
using APT.BaseData.Domain.Entities.FM;
using APT.BaseData.Domain.Enums;
using APT.BaseData.Domain.Enums.PF;
using APT.BaseData.Domain.IServices.FM;
using APT.Infrastructure.Core;
using APT.MS.Domain.Entities.FO;
using APT.MS.Domain.Entities.HM;
using APT.MS.Domain.Entities.LR;
using APT.MS.Domain.Entities.WB;
using APT.MS.Domain.Enums;
using APT.Utility;
using Castle.Core.Internal;
using InfluxData.Net.InfluxDb.Models.Responses;
using Microsoft.AspNetCore.Mvc;
using Microsoft.CodeAnalysis.Differencing;
using NPOI.SS.Formula.Functions;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
namespace APT.SC.WebApi.Controllers.Api.WB
{
[Route("api/WB/WBSafeCheckTask")]
public class WBSafeCheckTaskController : AuthorizeApiController<T_WB_SAFE_CHECK_TASK>
{
IFMNotificationTaskService NotificationTaskService { get; set; }
public WBSafeCheckTaskController(IFMNotificationTaskService notificationTaskService)
{
NotificationTaskService = notificationTaskService;
}
/// <summary>
/// 保存
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[HttpPost, Route("FullUpdate")]
public JsonActionResult<bool> FullUpdate([FromBody] T_WB_SAFE_CHECK_TASK entity)
{
return SafeExecute(() =>
{
T_FM_NOTIFICATION_TASK finishNotice = null;
List<T_FM_NOTIFICATION_TASK> sendNotices = null;
var Nav_Details = entity.Nav_Details;
entity.Nav_Details = null;
var ListArea = entity.Nav_ListArea;
entity.Nav_ListArea = null;
if (string.IsNullOrEmpty(entity.CODE))
{
Random r = new Random();
entity.CODE = DateTime.Now.ToString("yyyyMMddHHmmss") + r.Next(10, 99);
}
List<T_WB_SAFE_CHECK_TASK_DETAIL_USER> users = new List<T_WB_SAFE_CHECK_TASK_DETAIL_USER>();
var LoginID = APT.Infrastructure.Api.AppContext.CurrentSession.UserID;
foreach (var detail in Nav_Details)
{
if (detail.USER_ID == Guid.Empty)
{
throw new Exception("请选择记录人员!");
}
if (detail.Nav_Users != null)
{
detail.Nav_Users.ForEach(user =>
{
if (user.USER_ID == detail.USER_ID)
{
user.ROW_NUM = 0;
}
else
{
user.ROW_NUM = 999;
}
});
users.AddRange(detail.Nav_Users);
detail.Nav_Users = null;
}
};
if (entity.PUBLISH != null && entity.PUBLISH.Equals("SaveAndNotify"))
{
if (!entity.CHECK_TIME.HasValue)
{
throw new Exception("请选择检查时间!");
}
else if (entity.CHECK_TIME.Value <= DateTime.Now)
{
throw new Exception("检查时间必须大于当前时间!");
}
entity.STATUS = PFStandardStatus.Approving;
sendNotices = new List<T_FM_NOTIFICATION_TASK>();
var lisUserID = users.Select(e => e.USER_ID).Distinct();
var listUser = GetEntities<T_FM_USER>(e => lisUserID.Contains(e.ID), null, null);
foreach (var user in listUser)
{
sendNotices.Add(NotificationTaskService.InsertUserNoticeTaskModel("外包工程安全检查任务表-确认", entity.ID, entity.ORG_ID, user.ID, user.NAME, DateTime.Now, DateTime.Now.AddDays(7), 1, "WB029_SHOWPRINT"));
}
//操作人待办默认处理
if (lisUserID.Contains(LoginID.Value))
{
foreach (var item in sendNotices)
{
if (item.USER_ID == LoginID)
{
item.NOTICE_STATUS = 1;
item.TASK_DT = DateTime.Now;
break;
}
}
foreach (var item in users)
{
if (item.USER_ID == LoginID.Value)
{
item.MODIFY_TIME = DateTime.Now;
item.DEAL_STATUS = UserDealStatusEnum.;
}
}
}
if (entity.TaskID != Guid.Empty)
{
finishNotice = NotificationTaskService.FOGetTaskFinishModel(entity.TaskID, entity.ID);
}
entity.CREATER_ID = LoginID;//检查记录审批人
}
foreach (var item in ListArea)
{
item.Nav_CheckArea = null;
}
foreach (var item in users)
{
item.TASK_ID = entity.ID;
}
UnifiedCommit(() =>
{
UpdateEntity(entity);
if (Nav_Details != null && Nav_Details.Any())
BantchSaveEntityNoCommit(Nav_Details);
if (ListArea != null && ListArea.Any())
BantchSaveEntityNoCommit(ListArea);
if (users != null && users.Any())
BantchSaveEntityNoCommit(users);
if (sendNotices != null)
BantchAddEntityNoCommit(sendNotices);
if (finishNotice != null)
UpdateEntityNoCommit(finishNotice);
});
return true;
});
}
/// <summary>
/// 签到
/// </summary>
/// <param name="pageFilter"></param>
/// <returns></returns>
[HttpPost, Route("recordSign")]
public JsonActionResult<bool> recordSign([FromBody] KeywordFilter filter)
{
return SafeExecute<bool>(() =>
{
var id = Guid.Parse(filter.Parameter1);
var taskID = Guid.Parse(filter.Parameter2);
var userID = Guid.Parse(filter.Parameter3);
var orgId = filter.GetOrgId();
var sendUserID = Guid.Empty;
var sendUserNAME = "";
var users = GetEntities<T_WB_SAFE_CHECK_TASK_DETAIL_USER>(t => t.Nav_Record.Nav_Parent.ID == id, new BaseFilter(orgId));
//var currUser = users.FirstOrDefault(t => t.USER_ID == userID);
var currUser = users.Where(t => t.USER_ID == userID);
T_FM_NOTIFICATION_TASK finishTask = null;
T_FM_NOTIFICATION_TASK sendNotice = null;
//currUser.DEAL_STATUS = UserDealStatusEnum.已处理;
//currUser.MODIFY_TIME = DateTime.Now;
foreach (var item in currUser)
{
item.DEAL_STATUS = UserDealStatusEnum.;
item.MODIFY_TIME = DateTime.Now;
}
T_WB_SAFE_CHECK_TASK model = null;
var todoCount = users.Count(t => t.DEAL_STATUS == 0 && t.USER_ID != userID);
if (todoCount == 0)
{
model = GetEntity<T_WB_SAFE_CHECK_TASK>(id);
model.STATUS = PFStandardStatus.Reading;
}
if (taskID != Guid.Empty)
{
finishTask = NotificationTaskService.FOGetTaskFinishModel(taskID, id);
}
UnifiedCommit(() =>
{
if (model != null)
UpdateEntityNoCommit(model);
if (currUser != null && currUser.Any())
BantchSaveEntityNoCommit(currUser);
//UpdateEntityNoCommit(currUser);
if (sendNotice != null)
AddEntityNoCommit(sendNotice);
if (finishTask != null)
UpdateEntityNoCommit(finishTask);
});
return true;
});
}
/// <summary>
/// 搜索检查详情
/// </summary>
/// <param name="filter"></param>
/// <returns></returns>
[HttpPost, Route("GetEntities")]
public JsonActionResult<IEnumerable<T_WB_SAFE_CHECK_TASK_DETAIL>> GetEntities([FromBody] KeywordFilter filter)
{
return SafeExecute<IEnumerable<T_WB_SAFE_CHECK_TASK_DETAIL>>(() =>
{
Guid ID = Guid.Empty;
if (!string.IsNullOrEmpty(filter.Keyword))
{
try
{
ID = new Guid(filter.Keyword);
}
catch { }
}
Guid CHECK_TYPE_ID = Guid.Empty;
List<Guid> listAreaID = new List<Guid>();
//Guid CHECK_AREA_ID = Guid.Empty;
string MineType = string.Empty;
if (filter.FilterGroup.Rules.Any())
{
foreach (var item in filter.FilterGroup.Rules)
{
if (item.Field == "Parameter1")
{
try
{
CHECK_TYPE_ID = new Guid(item.Value.ToString());
}
catch { CHECK_TYPE_ID = Guid.Empty; }
}
else if (item.Field == "Parameter2")
{
try
{
var listA = item.Value.ToString().Split(",", StringSplitOptions.RemoveEmptyEntries);
foreach (var itemA in listA)
{
listAreaID.Add(new Guid(itemA));
}
}
catch { listAreaID = new List<Guid>(); }
}
else if (item.Field == "Parameter3")
{
MineType = item.Value.ToString();
}
}
filter.FilterGroup.Rules.Clear();
}
List<T_WB_SAFE_CHECK_TASK_DETAIL> listResult = new List<T_WB_SAFE_CHECK_TASK_DETAIL>();
if (CHECK_TYPE_ID == Guid.Empty || listAreaID.Count < 1 || string.IsNullOrEmpty(MineType))
{
return listResult;
}
Expression<Func<T_WB_CHECK_MAIN, bool>> expression = e => e.ENABLE_STATUS == BaseData.Domain.Enums.FMEnableStatusEnum.;
var minetypeArry = MineType.Split('_', StringSplitOptions.RemoveEmptyEntries);
List<FMProductionUnit> listMineType = new List<FMProductionUnit>();
foreach (var item in minetypeArry)
{
try
{
listMineType.Add((FMProductionUnit)int.Parse(item));
}
catch { }
}
expression = expression.And(e => CHECK_TYPE_ID == e.CHECK_TYPE_ID && e.CHECK_AREA_ID.HasValue && listAreaID.Contains(e.CHECK_AREA_ID.Value) && listMineType.Contains(e.MineType));
var listMain = GetEntities(expression, filter, null).OrderBy(e => e.MineType).ThenBy(e => e.CHECK_AREA_ID).ToList();
if (listMain == null || !listMain.Any() || listMain.Count() < 1)
{
return listResult;
}
var listArea = GetEntities<T_WB_CHECK_AREA_ENUM>(e => !e.IS_DELETED, null, null);
T_WB_CHECK_AREA_ENUM area = null;
int ROW_NUM = 0;
var CREATE_TIME = DateTime.Now;
foreach (var item in listMain)
{
area = listArea.FirstOrDefault(e => e.ID == item.CHECK_AREA_ID.Value);
if (area == null)
{
continue;
}
ROW_NUM++;
listResult.Add(new T_WB_SAFE_CHECK_TASK_DETAIL()
{
ID = Guid.NewGuid(),
ORG_ID = filter.OrgId,
MAIN_ID = item.ID,
Nav_Main = item,
PARENT_ID = ID,
ROW_NUM = ROW_NUM,
MineType = item.MineType,
AREA_ID = item.CHECK_AREA_ID.Value,
Nav_Area = area,
CHECK_CONTENT = item.CHECKCONTENT,
CHECK_BASIS = item.CHECKPROOF,
CREATE_TIME = CREATE_TIME
});
}
return listResult;
});
}
/// <summary>
/// 获得单条实体数据
/// </summary>
/// <param name="filter">过滤实体</param>
/// <returns></returns>
[HttpPost, Route("GetInfo")]
public JsonActionResult<T_WB_SAFE_CHECK_TASK> GetInfo([FromBody] KeywordFilter filter)
{
return SafeExecute(() =>
{
var result = GetEntity<T_WB_SAFE_CHECK_TASK>(null, filter, null);
if (result != null && result.CHECK_TYPE_ID != Guid.Empty && !string.IsNullOrEmpty(result.MineType) && (!result.Nav_Details.Any() || result.Nav_Details.Count() < 1))
{
//根据检查库 去填充信息
//T_WB_CHECK_MAIN
List<FMProductionUnit> listMineType = new List<FMProductionUnit>();
if (!string.IsNullOrEmpty(result.MineType))
{
var listMinetype = result.MineType.Split("_", StringSplitOptions.RemoveEmptyEntries);
foreach (var item in listMinetype)
{
listMineType.Add((FMProductionUnit)int.Parse(item));
}
}
//MineType
var listMain = GetEntities<T_WB_CHECK_MAIN>(e => !e.IS_DELETED && e.CHECK_TYPE_ID == result.CHECK_TYPE_ID && e.CHECK_AREA_ID.HasValue && listMineType.Contains(e.MineType), null, null).OrderBy(e => e.MineType).ThenBy(e => e.CHECK_AREA_ID);
var LoginID = APT.Infrastructure.Api.AppContext.CurrentSession.UserID;
if (listMain != null && listMain.Any())
{
var listAreaID = listMain.Select(e => e.CHECK_AREA_ID.Value).Distinct();
var listArea = GetEntities<T_WB_CHECK_AREA_ENUM>(e => listAreaID.Contains(e.ID), null, null);
List<T_WB_SAFE_CHECK_TASK_AREA> ListArea = new List<T_WB_SAFE_CHECK_TASK_AREA>();
foreach (var item in listArea)
{
ListArea.Add(new T_WB_SAFE_CHECK_TASK_AREA()
{
ID = Guid.NewGuid(),
ORG_ID = result.ORG_ID,
CHECK_AREA_ID = item.ID,
CHECK_TASK_ID = result.ID,
Nav_CheckArea = item
});
}
result.Nav_ListArea = new List<T_WB_SAFE_CHECK_TASK_AREA>();
result.Nav_ListArea = ListArea;
List<T_WB_SAFE_CHECK_TASK_DETAIL> listDetails = new List<T_WB_SAFE_CHECK_TASK_DETAIL>();
int ROW_NUM = 0;
foreach (var item in listMain)
{
ROW_NUM++;
listDetails.Add(new T_WB_SAFE_CHECK_TASK_DETAIL()
{
ID = Guid.NewGuid(),
ORG_ID = result.ORG_ID,
PARENT_ID = result.ID,
ROW_NUM = ROW_NUM,
MAIN_ID = item.ID,
//USER_ID=
MineType = item.MineType,
AREA_ID = item.CHECK_AREA_ID.Value,
Nav_Area = listArea.First(e => e.ID == item.CHECK_AREA_ID.Value),
CHECK_CONTENT = item.CHECKCONTENT,
CHECK_BASIS = item.CHECKPROOF,
CREATER_ID = LoginID,
CREATE_TIME = DateTime.Now
});
result.Nav_Details = new List<T_WB_SAFE_CHECK_TASK_DETAIL>();
result.Nav_Details = listDetails;
}
}
}
return result;
});
}
}
}