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

554 lines
25 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;
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<T_TL_WATCH_DAYLY>
{
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;
}
/// <summary>
/// 日常观测记录
/// 保存 即保存
/// 保存并发送 需要观测人确认 确认完 走审批流
/// 不需要确认
/// 如果有配置审批流 直接走审批流
/// 否则归档
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
[HttpPost, Route("FullUpdate")]
public JsonActionResult<bool> FullUpdate([FromBody] T_TL_WATCH_DAYLY entity)
{
return SafeExecute<bool>(() =>
{
T_FM_NOTIFICATION_TASK taskDo = null;
List<Guid> 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<T_FM_USER>(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<T_FM_NOTIFICATION_TASK>(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<T_FM_NOTIFICATION_TASK>(entity.TaskID, null);
if (taskDo == null)
{
throw new Exception("该日常观测已处理,您无需再次处理!");
}
else
{
var listTaskTemp = GetEntities<T_FM_NOTIFICATION_TASK>(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<T_TL_WATCH_SUM>(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<T_FM_NOTIFICATION_TASK>(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<Guid> listUserID = null;
//List<T_TL_WATCH_DAYLY_DETAIL_USER> listUsers = null;//观测人
//List<T_TL_WATCH_DAYLY_DETAIL_USER> 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<Guid>();
}
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<T_FM_NOTIFICATION_TASK> listTask = null;
//发送 确认单 待办
if (listUserID != null && listUserID.Any())
{
//接收确认 待办
List<T_FM_USER> listUserSend = GetEntities<T_FM_USER>(e => listUserID.Contains(e.ID), null, null).ToList();
entity.STATUS = PFStandardStatus.Sign;
List<Guid> listSendUserID = new List<Guid>();
List<string> listSendUserNAME = new List<string>();
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<T_PF_APPROVE_TEMP>(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<T_FM_NOTIFICATION_TASK>(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<T_FM_NOTIFICATION_TASK>(listTaskRemoveID);
if (listTask != null && listTask.Any())//多检测人添加确认待办
BantchSaveEntityNoCommit(listTask);
});
}
//if (listUsers != null && listUsers.Any())
//{
// foreach (var item in listUsers)
// {
// item.Nav_User = null;
// }
//}
return true;
});
}
/// <summary>
/// 确认
/// </summary>
/// <param name="filter"></param>
/// <returns></returns>
[HttpPost, Route("sendCheck")]
public JsonActionResult<bool> sendCheck([FromBody] KeywordFilter filter)
{
return SafeExecute<bool>(() =>
{
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<T_TL_WATCH_DAYLY_DETAIL>(e => e.DAYLY_ID == id, null, "Nav_ListUser");
List<T_TL_WATCH_DAYLY_DETAIL_USER> listDestUserLogin = new List<T_TL_WATCH_DAYLY_DETAIL_USER>();
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<T_TL_WATCH_DAYLY>(id);
modelLine.MODIFY_TIME = DateTime.Now;
var approveTemp = GetEntity<T_PF_APPROVE_TEMP>(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;
});
}
/// <summary>
/// 获取日常观测配置信息
/// </summary>
/// <param name="filter"></param>
/// <returns></returns>
[HttpPost, Route("GetItemsByTailingID")]
public JsonActionResult<List<T_TL_WATCH_DAYLY_DETAIL>> 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<T_TL_SET_WATCH_DAYLY_ITEM>(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<T_TL_WATCH_DAYLY_DETAIL> listResult = new List<T_TL_WATCH_DAYLY_DETAIL>();
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;
});
}
/// <summary>
/// 日常观测审批
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
[HttpPost, Route("BackUpdateNew")]
public JsonActionResult<bool> BackUpdateNew([FromBody] T_PF_APPROVE entity)
{
return SafeExecute(() =>
{
return ApproveCallBackService.CallBackNew("TL/TLWatchDayly/BackUpdateNew", entity);
});
}
}
}