From 267c35191f2c6894718ecea36551e2e1852323fe Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E4=BD=95=E7=BE=8E=E8=8D=A3?=
<10755671+mei-rong-he@user.noreply.gitee.com>
Date: Wed, 12 Nov 2025 01:09:44 +0800
Subject: [PATCH] =?UTF-8?q?=E9=A2=86=E5=AF=BC=E5=B8=A6=E7=8F=AD=E4=B8=8B?=
=?UTF-8?q?=E4=BA=95=E8=AE=B0=E5=BD=95?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
APT.MS.Domain/Enums/FO/FOShiftRecordEnum.cs | 8 +-
.../Controllers/LeaderWellRecordController.cs | 275 ++++++++++++++++--
2 files changed, 253 insertions(+), 30 deletions(-)
diff --git a/APT.MS.Domain/Enums/FO/FOShiftRecordEnum.cs b/APT.MS.Domain/Enums/FO/FOShiftRecordEnum.cs
index 453a402..96a3516 100644
--- a/APT.MS.Domain/Enums/FO/FOShiftRecordEnum.cs
+++ b/APT.MS.Domain/Enums/FO/FOShiftRecordEnum.cs
@@ -178,8 +178,12 @@ namespace APT.MS.Domain.Enums
/// 草稿 0
///
[Description("草稿")]
- Draft = 0,
-
+ Draft = 0,
+ ///
+ /// 交班人确认 2
+ ///
+ [Description("交班人确认")]
+ PreSign = 2,
///
/// 责任人确认 5
///
diff --git a/APT.MicroApi/APT.FO.WebApi/Controllers/LeaderWellRecordController.cs b/APT.MicroApi/APT.FO.WebApi/Controllers/LeaderWellRecordController.cs
index 2deb978..57d4e55 100644
--- a/APT.MicroApi/APT.FO.WebApi/Controllers/LeaderWellRecordController.cs
+++ b/APT.MicroApi/APT.FO.WebApi/Controllers/LeaderWellRecordController.cs
@@ -1,7 +1,13 @@
-using APT.Infrastructure.Core;
+using APT.BaseData.Domain.Entities;
+using APT.BaseData.Domain.Entities.FM;
+using APT.BaseData.Domain.IServices.FM;
+using APT.BaseData.Services.Services.FM;
+using APT.Infrastructure.Core;
using APT.MS.Domain.Entities.FO;
+using APT.MS.Domain.Enums;
using APT.Utility;
using Google.Protobuf.Collections;
+using InfluxData.Net.InfluxDb.Models.Responses;
using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
@@ -15,7 +21,11 @@ namespace APT.FO.WebApi.Controllers
[Route("api/FO/FOLeaderWellRecord")]
public partial class LeaderWellRecordController : AuthorizeApiController
{
-
+ IFMNotificationTaskService NotificationTaskService { get; set; }
+ public LeaderWellRecordController(IFMNotificationTaskService notificationTaskService)
+ {
+ NotificationTaskService = notificationTaskService;
+ }
[HttpPost, Route("GetEdit")]
public JsonActionResult GetEdit([FromBody] KeywordFilter filter)
{
@@ -48,12 +58,14 @@ namespace APT.FO.WebApi.Controllers
var departmentId = APT.Infrastructure.Api.AppContext.CurrentSession.DepartmentID;
entity.APPLY_USER_ID = loginUserId;
entity.APPLY_DEPARTMENT_ID = departmentId;
- var details = entity.Nav_Details;
- if (details != null && details.Any())
+ if (entity.JOB_START_DATE == null)
{
- details = details.Where(t => !t.IS_DELETED).ToList();
+ throw new Exception("值班开始时间不能为空");
+ }
+ if (entity.JOB_END_DATE == null)
+ {
+ throw new Exception("值班结束时间不能为空");
}
- entity.Nav_Details = null;
var userIds = this.GetEntities(t => t.LEADER_WELL_RECORD_ID == entity.ID, new BaseFilter(entity.ORG_ID)).Select(m => m.ID).ToList();
var fileIds = this.GetEntities(t => t.LEADER_WELL_RECORD_ID == entity.ID, new BaseFilter(entity.ORG_ID)).Select(m => m.ID).ToList();
var detailIds = this.GetEntities(t => t.LEADER_WELL_RECORD_ID == entity.ID, new BaseFilter(entity.ORG_ID)).Select(m => m.ID).ToList();
@@ -68,6 +80,44 @@ namespace APT.FO.WebApi.Controllers
var detailAreaList = new List();
var detailPreUserList = new List();
var detailAfterUserList = new List();
+ var users = entity.Nav_Users;
+ if (users != null && users.Any())
+ {
+ users = users.Where(t => !t.IS_DELETED).ToList();
+ }
+ else
+ {
+ users = new List();
+ var currUserRecord = new T_FO_LEADER_WELL_RECORD_USER()
+ {
+ LEADER_WELL_RECORD_ID = entity.ID,
+ USER_ID = (Guid)loginUserId,
+ ORG_ID = entity.ORG_ID,
+ DEAL_STATUS = 0
+ };
+ users.Add(currUserRecord);
+ }
+ entity.Nav_Users = null;
+ if (users != null && users.Any())
+ {
+ foreach (var item in users)
+ {
+ item.ORG_ID = entity.ORG_ID;
+ item.LEADER_WELL_RECORD_ID = entity.ID;
+ item.Nav_User = null;
+ if (item.USER_ID == loginUserId)
+ {
+ item.DEAL_STATUS = MS.Domain.Enums.FOUserShiftStatusEnum.已处理;
+ }
+ userList.Add(item);
+ }
+ }
+ var details = entity.Nav_Details;
+ if (details != null && details.Any())
+ {
+ details = details.Where(t => !t.IS_DELETED).ToList();
+ }
+ entity.Nav_Details = null;
if (details != null && details.Any())
{
foreach (var item in details)
@@ -99,9 +149,30 @@ namespace APT.FO.WebApi.Controllers
item2.ORG_ID = entity.ORG_ID;
item2.LEADER_WELL_RECORD_DETAIL_ID = item.ID;
item2.Nav_PreUser = null;
+ if (item2.PRE_USER_ID == loginUserId)
+ {
+ item2.PRE_USER_DEAL_STATUS = MS.Domain.Enums.FOUserShiftStatusEnum.已处理;
+ }
detailPreUserList.Add(item2);
}
}
+ else
+ {
+ foreach(var user in users)
+ {
+ T_FO_LEADER_WELL_RECORD_DETAIL_PREUSER currUserRecord = new T_FO_LEADER_WELL_RECORD_DETAIL_PREUSER();
+ currUserRecord.ORG_ID = entity.ORG_ID;
+ currUserRecord.LEADER_WELL_RECORD_DETAIL_ID = item.ID;
+ currUserRecord.PRE_USER_ID = user.USER_ID;
+ currUserRecord.PRE_USER_DEAL_STATUS = user.DEAL_STATUS;
+ currUserRecord.Nav_PreUser = null;
+ if (currUserRecord.PRE_USER_ID == loginUserId)
+ {
+ currUserRecord.PRE_USER_DEAL_STATUS = MS.Domain.Enums.FOUserShiftStatusEnum.已处理;
+ }
+ detailPreUserList.Add(currUserRecord);
+ }
+ }
if (item.Nav_AfterUsers != null && item.Nav_AfterUsers.Any())
{
foreach (var item2 in item.Nav_AfterUsers)
@@ -109,12 +180,20 @@ namespace APT.FO.WebApi.Controllers
item2.ORG_ID = entity.ORG_ID;
item2.LEADER_WELL_RECORD_DETAIL_ID = item.ID;
item2.Nav_AfterUser = null;
+ if (item2.AFTER_USER_ID == loginUserId)
+ {
+ item2.AFTER_USER_DEAL_STATUS = MS.Domain.Enums.FOUserShiftStatusEnum.已处理;
+ }
detailAfterUserList.Add(item2);
}
}
item.ORG_ID = entity.ORG_ID;
item.LEADER_WELL_RECORD_ID = entity.ID;
item.Nav_DetailFiles = null;
+ if (item.USER_ID == loginUserId)
+ {
+ item.USER_DEAL_STATUS = MS.Domain.Enums.FOUserShiftStatusEnum.已处理;
+ }
detailList.Add(item);
}
}
@@ -134,36 +213,42 @@ namespace APT.FO.WebApi.Controllers
fileList.Add(item);
}
}
- var users = entity.Nav_Users;
- if (users != null && users.Any())
- {
- users = users.Where(t => !t.IS_DELETED).ToList();
- }
- entity.Nav_Users = null;
- if (users != null && users.Any())
- {
- foreach (var item in users)
- {
- item.ORG_ID = entity.ORG_ID;
- item.LEADER_WELL_RECORD_ID = entity.ID;
- item.Nav_User = null;
- userList.Add(item);
- }
- }
+ entity.STATUS = FOStatusEnum.Draft;
+ var sendNotices = new List();
if (entity.PUBLISH != null && entity.PUBLISH.Equals("SaveAndNotify"))
{
- if (entity.STATUS == MS.Domain.Enums.FOStatusEnum.Draft)
+ var allUsers = this.GetEntities(t => t.ENABLE_STATUS == 0 && !t.CODE.Contains("admin"), new BaseFilter(entity.ORG_ID));
+ var sendUserIds = detailPreUserList.Where(t => t.PRE_USER_ID != loginUserId && t.PRE_USER_ID != null).Select(m => (Guid)m.PRE_USER_ID).Distinct().ToList();
+ if (sendUserIds != null && sendUserIds.Any())
{
- foreach (var user in users)
+ //当班人员不等于自己的,触发签字确认单
+ var sendUserNames = allUsers.Where(t => sendUserIds.Contains(t.ID)).Select(m => m.NAME).ToList();
+ sendNotices = NotificationTaskService.InsertUserNoticeTaskModels("领导带班下井记录-交班人签字确认", entity.ID, entity.ORG_ID, sendUserIds, sendUserNames, DateTime.Now, entity.JOB_END_DATE.Value, 1, "FO037_SHOWPRINT");
+ entity.STATUS = FOStatusEnum.PreSign;
+ }
+ else
+ {
+ //触发给现场责任人签字确认
+ var detailUserIds = details.Where(t => t.USER_ID != loginUserId && t.USER_ID != null).Select(m => (Guid)m.USER_ID).Distinct().ToList();
+ if (detailUserIds != null && detailUserIds.Any())
{
- if (user.USER_ID == loginUserId)
+ var sendUserNames = allUsers.Where(t => detailUserIds.Contains(t.ID)).Select(m => m.NAME).ToList();
+ sendNotices = NotificationTaskService.InsertUserNoticeTaskModels("领导带班下井记录-现场责任人签字确认", entity.ID, entity.ORG_ID, detailUserIds, sendUserNames, DateTime.Now, entity.JOB_END_DATE.Value, 1, "FO037_SHOWPRINT");
+ entity.STATUS = FOStatusEnum.Sign;
+ }
+ else
+ {
+ var afterUserIds = detailAfterUserList.Where(t => t.AFTER_USER_ID != loginUserId && t.AFTER_USER_ID != null).Select(m => (Guid)m.AFTER_USER_ID).Distinct().ToList();
+ if (afterUserIds != null && afterUserIds.Any())
{
- user.DEAL_STATUS = MS.Domain.Enums.FOUserShiftStatusEnum.已处理;
+ //触发给接班人签字确认
+ var sendUserNames = allUsers.Where(t => afterUserIds.Contains(t.ID)).Select(m => m.NAME).ToList();
+ sendNotices = NotificationTaskService.InsertUserNoticeTaskModels("领导带班下井记录-接班人签字确认", entity.ID, entity.ORG_ID, afterUserIds, sendUserNames, DateTime.Now, entity.JOB_END_DATE.Value, 1, "FO037_SHOWPRINT");
+ entity.STATUS = FOStatusEnum.SignAccept;
}
}
- var sendUserIds= users.Where(t=>t.USER_ID != loginUserId && t.USER_ID!=null).Select(m=>m.USER_ID).Distinct().ToList();
-
}
+
}
this.UnifiedCommit(() =>
{
@@ -197,6 +282,140 @@ namespace APT.FO.WebApi.Controllers
this.BantchSaveEntityNoCommit(userList);
if (fileList != null && fileList.Any())
this.BantchSaveEntityNoCommit(fileList);
+ if (sendNotices != null && sendNotices.Any())
+ this.BantchSaveEntityNoCommit(sendNotices);
+ });
+ return true;
+ });
+ }
+ ///
+ /// 签到同意
+ ///
+ ///
+ ///
+ [HttpPost, Route("PersonalAgree")]
+ public JsonActionResult PersonalAgree([FromBody] T_FO_LEADER_WELL_RECORD entity)
+ {
+ return SafeExecute(() =>
+ {
+ var orgId = APT.Infrastructure.Api.AppContext.CurrentSession.OrgId;
+ var userID = APT.Infrastructure.Api.AppContext.CurrentSession.UserID;
+ if (entity.TaskID != Guid.Empty)
+ {
+ var currTask = GetEntity(t => t.ID == entity.TaskID);
+ if (currTask != null)
+ {
+ userID = currTask.USER_ID;
+ }
+ }
+ var allUsers = this.GetEntities(t => t.ENABLE_STATUS == 0 && !t.CODE.Contains("admin"), new BaseFilter(orgId));
+ var sendNotices = new List();
+ var detailUsers = new List();
+ var preUsers = new List();
+ var afterUsers = new List();
+ var record = this.GetEntity(entity.ID);
+ if (record.STATUS == FOStatusEnum.PreSign)
+ {
+ var details = this.GetEntities(t => t.LEADER_WELL_RECORD_ID == record.ID, new BaseFilter(orgId));
+ var detailIds = details.Select(m => m.ID).ToList();
+ preUsers = this.GetEntities(t => detailIds.Contains(t.LEADER_WELL_RECORD_DETAIL_ID) && t.PRE_USER_ID == userID, new BaseFilter(orgId)).ToList();
+ if (preUsers != null && preUsers.Any())
+ {
+ preUsers.ForEach(t => t.PRE_USER_DEAL_STATUS = FOUserShiftStatusEnum.已处理);
+ }
+ var todoCount = this.GetCount(t => detailIds.Contains(t.LEADER_WELL_RECORD_DETAIL_ID) && t.PRE_USER_ID != userID && t.PRE_USER_DEAL_STATUS == 0 && t.PRE_USER_ID != null, new BaseFilter(orgId));
+ if (todoCount == 0)
+ {
+ //触发给现场责任人签字确认
+ var detailUserIds = details.Where(t => t.USER_ID != userID && t.USER_ID != null).Select(m => (Guid)m.USER_ID).Distinct().ToList();
+ if (detailUserIds != null && detailUserIds.Any())
+ {
+ var sendUserNames = allUsers.Where(t => detailUserIds.Contains(t.ID)).Select(m => m.NAME).ToList();
+ sendNotices = NotificationTaskService.InsertUserNoticeTaskModels("领导带班下井记录-现场责任人签字确认", entity.ID, record.ORG_ID, detailUserIds, sendUserNames, DateTime.Now, record.JOB_END_DATE.Value, 1, "FO037_SHOWPRINT");
+ record.STATUS = FOStatusEnum.Sign;
+ }
+ else
+ {
+ var afterUserIds = this.GetEntities(t => detailIds.Contains(t.LEADER_WELL_RECORD_DETAIL_ID) && t.AFTER_USER_ID != userID && t.AFTER_USER_ID != null, new BaseFilter(orgId)).Select(m => (Guid)m.AFTER_USER_ID).Distinct().ToList();
+ if (afterUserIds != null && afterUserIds.Any())
+ {
+ //触发给接班人签字确认
+ var sendUserNames = allUsers.Where(t => afterUserIds.Contains(t.ID)).Select(m => m.NAME).ToList();
+ sendNotices = NotificationTaskService.InsertUserNoticeTaskModels("领导带班下井记录-接班人签字确认", entity.ID, record.ORG_ID, afterUserIds, sendUserNames, DateTime.Now, record.JOB_END_DATE.Value, 1, "FO037_SHOWPRINT");
+ record.STATUS = FOStatusEnum.SignAccept;
+ }
+ else
+ {
+ record.STATUS = FOStatusEnum.Archived;
+ }
+ }
+ }
+ }
+ else if (record.STATUS == FOStatusEnum.Sign)
+ {
+ var details = this.GetEntities(t => t.LEADER_WELL_RECORD_ID == record.ID, new BaseFilter(orgId));
+ detailUsers = details.Where(t => t.USER_ID == userID).ToList();
+ if (detailUsers != null && detailUsers.Any())
+ {
+ detailUsers.ForEach(t => t.USER_DEAL_STATUS = FOUserShiftStatusEnum.已处理);
+ }
+ var todoCount = this.GetCount(t => t.LEADER_WELL_RECORD_ID == record.ID && t.USER_ID != userID && t.USER_DEAL_STATUS == 0 && t.USER_ID != null, new BaseFilter(orgId));
+ if (todoCount == 0)
+ {
+ var detailIds = details.Select(m => m.ID).ToList();
+ var afterUserIds = this.GetEntities(t => detailIds.Contains(t.LEADER_WELL_RECORD_DETAIL_ID) && t.AFTER_USER_ID != userID && t.AFTER_USER_ID != null, new BaseFilter(orgId)).Select(m => (Guid)m.AFTER_USER_ID).Distinct().ToList();
+ if (afterUserIds != null && afterUserIds.Any())
+ {
+ //触发给接班人签字确认
+ var sendUserNames = allUsers.Where(t => afterUserIds.Contains(t.ID)).Select(m => m.NAME).ToList();
+ sendNotices = NotificationTaskService.InsertUserNoticeTaskModels("领导带班下井记录-接班人签字确认", entity.ID, record.ORG_ID, afterUserIds, sendUserNames, DateTime.Now, record.JOB_END_DATE.Value, 1, "FO037_SHOWPRINT");
+ record.STATUS = FOStatusEnum.SignAccept;
+ }
+ else
+ {
+ record.STATUS = FOStatusEnum.Archived;
+ }
+ }
+ }
+ else if (record.STATUS == FOStatusEnum.SignAccept)
+ {
+ var details = this.GetEntities(t => t.LEADER_WELL_RECORD_ID == record.ID, new BaseFilter(orgId));
+ var detailIds = details.Select(m => m.ID).ToList();
+ afterUsers = this.GetEntities(t => detailIds.Contains(t.LEADER_WELL_RECORD_DETAIL_ID) && t.AFTER_USER_ID == userID, new BaseFilter(orgId)).ToList();
+ if (afterUsers != null && afterUsers.Any())
+ {
+ afterUsers.ForEach(t => t.AFTER_USER_DEAL_STATUS = FOUserShiftStatusEnum.已处理);
+ }
+ var todoCount = this.GetCount(t => detailIds.Contains(t.LEADER_WELL_RECORD_DETAIL_ID) && t.AFTER_USER_ID != userID && t.AFTER_USER_DEAL_STATUS == 0 && t.AFTER_USER_ID != null, new BaseFilter(orgId));
+ if (todoCount == 0)
+ {
+ record.STATUS = FOStatusEnum.Archived;
+ }
+ }
+ else
+ {
+ record.STATUS = FOStatusEnum.Archived;
+ }
+ T_FM_NOTIFICATION_TASK task = null;
+ if (entity.TaskID != Guid.Empty)
+ {
+ task = NotificationTaskService.GetTaskFinishModel(entity.TaskID);
+ task.SOURCE_FORMCODE = "FO037_SHOWPRINT";
+ }
+ this.UnifiedCommit(() =>
+ {
+ if (record != null)
+ UpdateEntityNoCommit(record);
+ if (preUsers != null && preUsers.Any())
+ this.BantchSaveEntityNoCommit(preUsers);
+ if (detailUsers != null && detailUsers.Any())
+ this.BantchSaveEntityNoCommit(detailUsers);
+ if (afterUsers != null && afterUsers.Any())
+ this.BantchSaveEntityNoCommit(afterUsers);
+ if (sendNotices != null && sendNotices.Any())
+ this.BantchSaveEntityNoCommit(sendNotices);
+ if (task != null)
+ this.UpdateEntityNoCommit(task);
});
return true;
});