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; using APT.BaseData.Domain.IServices.FM; using APT.Infrastructure.Core; using APT.MS.Domain.Entities.TL; using APT.MS.Domain.Enums; using APT.Utility; using Microsoft.AspNetCore.Mvc; using System; using System.Collections.Generic; using System.Linq; namespace APT.SC.WebApi.Controllers.Api.SC { [Route("api/TL/TLWatchDayly")] public class TLWatchDaylyController : AuthorizeApiController { IFMFlowPermitService MFlowPermitService { get; set; } IFMNotificationTaskService NotificationTaskService { get; set; } IPFApproveCallBackService ApproveCallBackService { get; set; } public TLWatchDaylyController(IFMFlowPermitService mFlowPermitService, IFMNotificationTaskService notificationTaskService, IPFApproveCallBackService approveCallBackService) { MFlowPermitService = mFlowPermitService; NotificationTaskService = notificationTaskService; ApproveCallBackService = approveCallBackService; } /// /// 日常观测记录 /// 保存 即保存 /// 保存并发送 需要观测人确认 确认完 走审批流 /// 不需要确认 /// 如果有配置审批流 直接走审批流 /// 否则归档 /// /// /// [HttpPost, Route("FullUpdate")] public JsonActionResult FullUpdate([FromBody] T_TL_WATCH_DAYLY entity) { return SafeExecute(() => { T_FM_NOTIFICATION_TASK taskDo = null; List listTaskRemoveID = null; //只要有一个人操作了 检测待办 其余 删除 同一个 SOURCE_DATA_ID TL037 var loginID = APT.Infrastructure.Api.AppContext.CurrentSession.UserID; #region 代办处理 if (!loginID.HasValue) { throw new Exception("获取您的登录信息失败,请重新登录后再操作!"); } if ((entity.CREATE_TIME == null || (entity.CREATE_TIME.Value - DateTime.Now).TotalHours < 1) && entity.SUM_ID == Guid.Empty && entity.TaskID == Guid.Empty) { //判断为新增 无需任何处理 } else if (entity.USER_ID.HasValue) { if (entity.USER_ID.Value != loginID) { var userSend = GetEntity(entity.USER_ID.Value); if (userSend != null) { throw new Exception("您不是【" + userSend.NAME + "】无权限操作此单!"); } else { throw new Exception("您无权限操作此单!"); } } } else if (entity.TaskID == Guid.Empty) { var listTaskTemp = GetEntities(e => e.SOURCE_DATA_ID.HasValue && e.SOURCE_DATA_ID.Value == entity.ID && e.SOURCE_FORMCODE == "TL041", null, null); if (listTaskTemp != null && listTaskTemp.Any()) { taskDo = listTaskTemp.FirstOrDefault(e => e.USER_ID == loginID.Value); if (taskDo == null) { var listUserName = listTaskTemp.Where(e => e.USER_ID != loginID).Select(e => e.USER_NAME); if (listUserName == null) { throw new Exception("您无权限操作此单!"); } else { throw new Exception("您不是【" + String.Join(",", listUserName) + "】无权限操作此单!"); } } else { listTaskRemoveID = listTaskTemp.Where(e => e.USER_ID != loginID.Value).Select(e => e.ID).ToList(); } } } else { taskDo = GetEntity(entity.TaskID, null); if (taskDo == null) { throw new Exception("该日常观测已处理,您无需再次处理!"); } else { var listTaskTemp = GetEntities(e => e.SOURCE_DATA_ID.HasValue && e.SOURCE_DATA_ID.Value == taskDo.SOURCE_DATA_ID.Value && e.ID != taskDo.ID && e.SOURCE_FORMCODE == "TL037", null, null); if (listTaskTemp != null && listTaskTemp.Any()) { listTaskRemoveID = listTaskTemp.Select(e => e.ID).ToList(); } } } #endregion var liatDetail = entity.Nav_ListDetail;//明细 entity.Nav_ListDetail = null; entity.DATE = entity.DATETIME.Value.Date; var listUsers = entity.Nav_ListUser; entity.Nav_ListUser = null; if (!entity.USER_ID.HasValue || entity.USER_ID == Guid.Empty) { entity.USER_ID = loginID.Value; entity.DEPARTMENT_ID = APT.Infrastructure.Api.AppContext.CurrentSession.DepartmentID; } if (entity.USER_ID != loginID.Value) { throw new Exception("只能操作自己提交的记录!"); } T_TL_WATCH_SUM sum = null; if (entity.SUM_ID == Guid.Empty) { sum = GetEntity(e => e.DATE == DateTime.Now.Date); if (sum == null) { sum = new T_TL_WATCH_SUM(); sum.ID = Guid.NewGuid(); sum.ORG_ID = entity.ORG_ID; sum.DATE = DateTime.Now.Date; sum.TAILING_NAME = entity.TAILING_NAME; sum.TAILING_ID = entity.TAILING_ID; } entity.SUM_ID = sum.ID; } if (entity.STATUS == PFStandardStatus.Approving) { if (entity.DATE.Date > DateTime.Now.Date) { throw new Exception("日期不能大于今天【" + DateTime.Now.ToString("yyyy-MM-dd") + "】!"); } if (liatDetail == null || !liatDetail.Any()) { throw new Exception("日常观测明细不能为空!"); } //taskDo = GetEntity(entity.TaskID, null); if (taskDo != null) { //操作待办处理 taskDo.TASK_DT = DateTime.Now; taskDo.SOURCE_FORMCODE = "TL037_SHOWPRINT"; if (taskDo.TASK_ENDDT >= taskDo.TASK_DT) taskDo.NOTICE_STATUS = (int)FMNoticeStatusEnum.正常已办; else taskDo.NOTICE_STATUS = (int)FMNoticeStatusEnum.超期办理; } } List listUserID = null; //List listUsers = null;//观测人 //List listUserTemp = null;//观测人 if (liatDetail != null && liatDetail.Any()) { int rowIndex = 0; foreach (var item in liatDetail) { #region 数据填充 if (entity.TAILING_ID != Guid.Empty) { item.TAILING_ID = entity.TAILING_ID; } if (string.IsNullOrEmpty(item.TAILING_NAME) && !string.IsNullOrEmpty(entity.TAILING_NAME)) { item.TAILING_NAME = entity.TAILING_NAME; } item.DATE = entity.DATETIME; item.DAYLY_ID = entity.ID; item.SUM_ID = entity.SUM_ID; #endregion rowIndex++; if (entity.STATUS != PFStandardStatus.Approving) { continue; } if (!item.IS_DELETED && !item.ITEM_VALUE.HasValue) { throw new Exception("观测项行【" + rowIndex + "】不能为空!"); } //if (item.DATE == DateTime.MinValue) //{ // throw new Exception("观测日期行【" + rowIndex + "】不能为空!"); //} //if (!item.LONG.HasValue) //{ // throw new Exception("干滩长度/m行【" + rowIndex + "】不能为空!"); //} //if (!item.WATERLINE.HasValue) //{ // throw new Exception("库水位/m行【" + rowIndex + "】不能为空!"); //} //if (!item.DREEP.HasValue) //{ // throw new Exception("降雨量/mm行【" + rowIndex + "】不能为空!"); //} //if (!item.HIGHTEST.HasValue) //{ // throw new Exception("滩顶高程行【" + rowIndex + "】不能为空!"); //} //if (!item.HIGHT_MORE.HasValue) //{ // throw new Exception("安全超高行【" + rowIndex + "】不能为空!"); //} //if (item.Nav_ListUser == null || !item.Nav_ListUser.Any()) //{ // throw new Exception("观测人员行【" + rowIndex + "】不能为空!"); //} } } if (listUsers != null && listUsers.Any()) { foreach (var itemWatch in listUsers) { if (itemWatch.USER_ID == entity.USER_ID) { itemWatch.ISCHECK = true; } else { itemWatch.ISCHECK = false; } } if (entity.STATUS == PFStandardStatus.Approving && listUsers.Count() > 0) { if (listUserID == null) { listUserID = new List(); } foreach (var itemUser in listUsers) { if (itemUser.USER_ID != entity.USER_ID && !listUserID.Contains(itemUser.USER_ID) && !itemUser.IS_DELETED) { listUserID.Add(itemUser.USER_ID); } } } } List listTask = null; //发送 确认单 待办 if (listUserID != null && listUserID.Any()) { //接收确认 待办 List listUserSend = GetEntities(e => listUserID.Contains(e.ID), null, null).ToList(); entity.STATUS = PFStandardStatus.Sign; List listSendUserID = new List(); List listSendUserNAME = new List(); foreach (var item in listUserSend) { listSendUserID.Add(item.ID); listSendUserNAME.Add(item.NAME); } listTask = NotificationTaskService.InsertUserNoticeTaskModels("尾矿库日常观测记录确认-" + entity.DATE.ToString("MMdd"), entity.ID, entity.ORG_ID, listSendUserID, listSendUserNAME, DateTime.Now, 0, "TL037_SHOWPRINT", FMTASKTYPE.Default); } bool isApprove = false; if (entity.STATUS == PFStandardStatus.Approving) { var approveTemp = GetEntity(e => e.CODE == "TL037"); if (approveTemp != null) { isApprove = true; } } if (listUsers != null && listUsers.Any()) { foreach (var item in listUsers) { item.Nav_User = null; } } if (isApprove) { MFlowPermitService.InsertApprove(DateTime.Now.ToString("yyyyMMddHHmmss"), "TL037", null, entity.ID, "TL037_SHOWPRINT", null, true, () => { if (sum != null) UpdateEntityNoCommit(sum); if (entity != null)//待办信息主题保存 UpdateEntityNoCommit(entity); if (liatDetail != null && liatDetail.Any())//明细 BantchSaveEntityNoCommit(liatDetail); if (listUsers != null && listUsers.Any())//观测人 BantchSaveEntityNoCommit(listUsers); if (entity.STATUS != PFStandardStatus.Draft && taskDo != null)//检测记录待办删除 UpdateEntityNoCommit(taskDo); if (listTaskRemoveID != null && listTaskRemoveID.Any())//同部门岗位人员检测待办 删除 BantchDeleteEntity(listTaskRemoveID); if (listTask != null && listTask.Any())//多检测人添加确认待办 BantchSaveEntityNoCommit(listTask); }, null, null, null, null, null, "TL037_SHOWPRINT", null, null, FMTASKTYPE.Default); } else { this.UnifiedCommit(() => { if (sum != null) UpdateEntityNoCommit(sum); if (entity != null)//待办信息主题保存 UpdateEntityNoCommit(entity); if (liatDetail != null && liatDetail.Any())//明细 BantchSaveEntityNoCommit(liatDetail); if (listUsers != null && listUsers.Any())//观测人 BantchSaveEntityNoCommit(listUsers); if (entity.STATUS != PFStandardStatus.Draft && taskDo != null)//检测记录待办删除 UpdateEntityNoCommit(taskDo); if (listTaskRemoveID != null && listTaskRemoveID.Any())//同部门岗位人员检测待办 删除 BantchDeleteEntity(listTaskRemoveID); if (listTask != null && listTask.Any())//多检测人添加确认待办 BantchSaveEntityNoCommit(listTask); }); } //if (listUsers != null && listUsers.Any()) //{ // foreach (var item in listUsers) // { // item.Nav_User = null; // } //} return true; }); } /// /// 确认 /// /// /// [HttpPost, Route("sendCheck")] public JsonActionResult sendCheck([FromBody] KeywordFilter filter) { return SafeExecute(() => { if (string.IsNullOrEmpty(filter.Keyword) || string.IsNullOrEmpty(filter.Parameter1)) throw new Exception("获取参数有误"); Guid id = Guid.Empty; try { id = new Guid(filter.Keyword); } catch { throw new Exception("获取参数有误"); } Guid taskID = Guid.Empty; if (!string.IsNullOrEmpty(filter.Parameter1)) { try { taskID = new Guid(filter.Parameter1); } catch { throw new Exception("获取参数有误"); } } Guid LoginID = APT.Infrastructure.Api.AppContext.CurrentSession.UserID.Value; var detail = GetEntities(e => e.DAYLY_ID == id, null, "Nav_ListUser"); List listDestUserLogin = new List(); bool isOther = false; if (detail != null && detail.Any()) { foreach (var item in detail) { if (item.Nav_ListUser != null && item.Nav_ListUser.Any()) { try { var listDestUserTempLogin = item.Nav_ListUser.Where(e => !e.ISCHECK && e.USER_ID == LoginID); if (listDestUserTempLogin != null && listDestUserTempLogin.Any()) { listDestUserLogin.AddRange(listDestUserTempLogin); } if (!isOther) { var listDestUserTempNotLogin = item.Nav_ListUser.Where(e => !e.ISCHECK && e.USER_ID != LoginID); if (listDestUserTempNotLogin != null && listDestUserTempNotLogin.Any()) { isOther = true; } } } catch { } } } } var task = NotificationTaskService.GetEntityTask(taskID); if (listDestUserLogin != null && listDestUserLogin.Any()) listDestUserLogin.ForEach(e => { e.ISCHECK = true; e.MODIFY_TIME = DateTime.Now; }); T_TL_WATCH_DAYLY modelLine = null; //如果没有未确认的观测人 修改主表状态 bool isApprove = false; if (!isOther) { modelLine = GetEntity(id); modelLine.MODIFY_TIME = DateTime.Now; var approveTemp = GetEntity(e => e.CODE == "TL037"); if (approveTemp != null) { isApprove = true; modelLine.STATUS = PFStandardStatus.Approving; } else { modelLine.STATUS = PFStandardStatus.Archived; } } if (isApprove) { MFlowPermitService.InsertApprove(DateTime.Now.ToString("yyyyMMddHHmmss"), "TL037", null, id, "TL037_SHOWPRINT", null, true, () => { if (task != null)//代办消息 清除 UpdateEntityNoCommit(task);//状态修改 if (listDestUserLogin != null && listDestUserLogin.Count > 0) BantchSaveEntityNoCommit(listDestUserLogin); if (modelLine != null)//代办消息 清除 UpdateEntityNoCommit(modelLine);//状态修改 }, null, null, null, null, null, "TL037_SHOWPRINT", null, null, FMTASKTYPE.Default); } else { this.UnifiedCommit(() => { if (task != null)//代办消息 清除 UpdateEntityNoCommit(task);//状态修改 if (listDestUserLogin != null && listDestUserLogin.Count > 0) BantchSaveEntityNoCommit(listDestUserLogin); if (modelLine != null)//代办消息 清除 UpdateEntityNoCommit(modelLine);//状态修改 }); } return true; }); } /// /// 获取日常观测配置信息 /// /// /// [HttpPost, Route("GetItemsByTailingID")] public JsonActionResult> GetItemsByTailingID([FromBody] KeywordFilter filter) { return SafeExecute(() => { Guid? TAILING_ID = null; if (string.IsNullOrEmpty(filter.Keyword)) { throw new Exception("获取传参信息失败!"); } else { TAILING_ID = new Guid(filter.Keyword); } if (!TAILING_ID.HasValue) { throw new Exception("获取传参信息失败!"); } var listItems = GetEntities(e => e.TAILING_ID == TAILING_ID.Value && e.ENABLE_STATUS == FMEnableStatusEnum.启用 && !e.IS_DELETED, null, null); if (listItems == null || !listItems.Any()) { throw new Exception("请去后台完善该尾矿库的日常观测点位配置信息!"); } List listResult = new List(); listItems = listItems.OrderBy(e => e.ROW_NO); string REMIND = string.Empty; foreach (var item in listItems) { REMIND = "单位:" + item.UNITE; if (item.MIN.HasValue || item.MAX.HasValue) { if (item.MIN.HasValue && item.MAX.HasValue) { REMIND += " 范围:" + item.MIN.Value + " ~ " + item.MAX.Value; } else if (item.MIN.HasValue) { REMIND += " 下限值:" + item.MIN.Value; } else { REMIND += " 上限值:" + item.MAX.Value; } } listResult.Add(new T_TL_WATCH_DAYLY_DETAIL() { ID = Guid.NewGuid(), ORG_ID = filter.OrgId, TAILING_ID = TAILING_ID.Value, ITEM_ID = item.ID, Nav_Item = item, REMIND = REMIND }); } return listResult; }); } /// /// 日常观测审批 /// /// /// [HttpPost, Route("BackUpdateNew")] public JsonActionResult BackUpdateNew([FromBody] T_PF_APPROVE entity) { return SafeExecute(() => { return ApproveCallBackService.CallBackNew("TL/TLWatchDayly/BackUpdateNew", entity); }); } } }