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 { IFMNotificationTaskService NotificationTaskService { get; set; } public WBSafeCheckTaskController(IFMNotificationTaskService notificationTaskService) { NotificationTaskService = notificationTaskService; } /// /// 保存 /// /// /// [HttpPost, Route("FullUpdate")] public JsonActionResult FullUpdate([FromBody] T_WB_SAFE_CHECK_TASK entity) { return SafeExecute(() => { T_FM_NOTIFICATION_TASK finishNotice = null; List 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 users = new List(); 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(); var lisUserID = users.Select(e => e.USER_ID).Distinct(); var listUser = GetEntities(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; }); } /// /// 签到 /// /// /// [HttpPost, Route("recordSign")] public JsonActionResult recordSign([FromBody] KeywordFilter filter) { return SafeExecute(() => { 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 => 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(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; }); } /// /// 搜索检查详情 /// /// /// [HttpPost, Route("GetEntities")] public JsonActionResult> GetEntities([FromBody] KeywordFilter filter) { return SafeExecute>(() => { Guid ID = Guid.Empty; if (!string.IsNullOrEmpty(filter.Keyword)) { try { ID = new Guid(filter.Keyword); } catch { } } Guid CHECK_TYPE_ID = Guid.Empty; List listAreaID = new List(); //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(); } } else if (item.Field == "Parameter3") { MineType = item.Value.ToString(); } } filter.FilterGroup.Rules.Clear(); } List listResult = new List(); if (CHECK_TYPE_ID == Guid.Empty || listAreaID.Count < 1 || string.IsNullOrEmpty(MineType)) { return listResult; } Expression> expression = e => e.ENABLE_STATUS == BaseData.Domain.Enums.FMEnableStatusEnum.启用; var minetypeArry = MineType.Split('_', StringSplitOptions.RemoveEmptyEntries); List listMineType = new List(); 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(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; }); } /// /// 获得单条实体数据 /// /// 过滤实体 /// [HttpPost, Route("GetInfo")] public JsonActionResult GetInfo([FromBody] KeywordFilter filter) { return SafeExecute(() => { var result = GetEntity(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 listMineType = new List(); 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(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(e => listAreaID.Contains(e.ID), null, null); List ListArea = new List(); 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(); result.Nav_ListArea = ListArea; List listDetails = new List(); 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(); result.Nav_Details = listDetails; } } } return result; }); } } }