d_sms_service/APT.MicroApi/APT.FO.WebApi/Controllers/PreOperSchController.cs
2024-10-28 13:45:58 +08:00

325 lines
16 KiB
C#

using APT.BaseData.Domain.Entities;
using APT.BaseData.Domain.Entities.FM;
using APT.BaseData.Domain.Enums;
using APT.BaseData.Domain.IServices;
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 Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.Linq;
namespace APT.FM.WebApi.Controllers.Api.FO
{
/// <summary>
/// FOPreOperSch
/// </summary>
[Route("api/FO/FOPreOperSch")]
public class PreOperSchController : AuthorizeApiController<T_FO_PRE_OPER_SCH>
{
IPFCodeRuleService CodeRuleService { get; set; }
IFMNotificationTaskService NotificationTaskService { get; set; }
IFMDepartmentService DepartmentService { get; set; }
/// <summary>
/// FOPreOperSch
/// </summary>
/// <param name="codeRuleService"></param>
public PreOperSchController(IPFCodeRuleService codeRuleService, IFMNotificationTaskService notificationTaskService, IFMDepartmentService departmentService)
{
CodeRuleService = codeRuleService;
NotificationTaskService = notificationTaskService;
DepartmentService = departmentService;
}
/// <summary>
/// 更新
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
[HttpPost, Route("FullUpdate")]
public JsonActionResult<bool> FullUpdate([FromBody] T_FO_PRE_OPER_SCH entity)
{
return SafeExecute<bool>(() =>
{
var users = entity.Nav_PreOperSchUser;
if (users != null && users.Any())
{
users = users.Where(t => t.USER_ID != null && !t.IS_DELETED).ToList();
}
var files = entity.Nav_PreOperSchFile;
entity.Nav_PreOperSchUser = null;
entity.Nav_PreOperSchFile = null;
entity.LANUNCH_TIME=DateTime.Now;
entity.FORM_STATUS = (int)FOTeamActivityState.稿;
var userID = APT.Infrastructure.Api.AppContext.CurrentSession.UserID;
entity.LANUNCH_USER_ID = Guid.Parse(userID.ToString());
entity.DEPARTMENT_ID = APT.Infrastructure.Api.AppContext.CurrentSession.DepartmentID;
List<T_FM_NOTIFICATION_TASK> notices = new List<T_FM_NOTIFICATION_TASK>();
T_FO_CRUCIAL_LICENSE_JOB job = null;
T_FO_PRE_OPER_SCH_USER applyUser = new T_FO_PRE_OPER_SCH_USER();
applyUser.USER_ID = (Guid)userID;
if (users != null && users.Any())
{
var loginUser=users.FirstOrDefault(t => t.USER_ID == applyUser.USER_ID);
if (loginUser == null)
users.Add(applyUser);
if (entity.PUBLISH != null && entity.PUBLISH.Equals("SaveAndNotify"))
{
entity.FORM_STATUS = (int)FOTeamActivityState.;
//直接处理班组长已签到,并修改通知状态
users.ForEach(t =>
{
if (t.USER_ID == userID)
{
t.DEAL_STATUS = (int)FOUserShiftStatusEnum.;
}
t.ORG_ID = entity.ORG_ID;
t.PRE_OPER_SCH_ID = entity.ID;
t.Nav_User = null;
});
//新增的消息通知
var noChargeUsers = users.Where(i => i.USER_ID != userID && i.IS_DELETED == false).ToList();
List<Guid> userIds = noChargeUsers.Select(t => t.USER_ID).Distinct().ToList();
DateTime dtEnd = NotificationTaskService.GetTaskEndTime(FMTASKTYPE.JobSite, entity.ORG_ID.Value, DateTime.Now, null, null);
if (userIds.Count() > 0)
{
var UserNames = new List<string>();
var user = this.GetEntities<T_FM_USER>(t => t.ENABLE_STATUS == (int)FMEnableStatusEnum. && userIds.Contains(t.ID), new BaseFilter(entity.ORG_ID));
foreach (var u in userIds)
{
var current = user.FirstOrDefault(t => t.ID == u);
UserNames.Add(current?.NAME);
}
//发消息
notices = NotificationTaskService.InsertUserNoticeTaskModels("作业方案讨论记录表", entity.ID, entity.ORG_ID, userIds, UserNames, DateTime.Now,
dtEnd, (int)FMNoticeTypeEnum., "FO008_SHOWPRINT");
}
else
{
entity.FORM_STATUS = (int)FOTeamActivityState.;
//触发工作票
job = InsertJob(entity);
if (job != null)
{
//通知
List<Guid> noticesUserIds = new List<Guid>();
noticesUserIds.Add((Guid)userID);
var UserNames = new List<string>();
var user = this.GetEntity<T_FM_USER>(t => t.ENABLE_STATUS == (int)FMEnableStatusEnum. && userIds.Contains(t.ID));
UserNames.Add(user?.NAME);
//发消息
notices = NotificationTaskService.InsertUserNoticeTaskModels("关键作业/许可作业工作票", job.ID, entity.ORG_ID, userIds, UserNames, DateTime.Now,
dtEnd, (int)FMNoticeTypeEnum., "FO017");
}
}
}
else
{
applyUser.DEAL_STATUS = (int)FOUserShiftStatusEnum.;
applyUser.ORG_ID = entity.ORG_ID;
applyUser.PRE_OPER_SCH_ID = entity.ID;
var user = this.GetEntity<T_FM_USER>(t=>t.ID == applyUser.USER_ID && t.ENABLE_STATUS == 0, "Nav_Person");
applyUser.REAL_DEPARTMENT_POST_ID = user.Nav_Person.POST_ID;
loginUser = users.FirstOrDefault(t => t.USER_ID == applyUser.USER_ID);
if (loginUser == null)
users.Add(applyUser);
}
}
else
{
applyUser.DEAL_STATUS = (int)FOUserShiftStatusEnum.;
applyUser.ORG_ID = entity.ORG_ID;
applyUser.PRE_OPER_SCH_ID = entity.ID;
var user = this.GetEntity<T_FM_USER>(t=>t.ID == applyUser.USER_ID && t.ENABLE_STATUS == 0, "Nav_Person");
applyUser.REAL_DEPARTMENT_POST_ID = user.Nav_Person.POST_ID;
//var loginUser = users.FirstOrDefault(t => t.USER_ID == applyUser.USER_ID);
//if (loginUser == null)
// users.Add(applyUser);
users.Add(applyUser);
entity.FORM_STATUS = (int)FOTeamActivityState.;
//触发工作票
job = InsertJob(entity);
if (job != null)
{
DateTime dtEnd = NotificationTaskService.GetTaskEndTime(FMTASKTYPE.JobSite, entity.ORG_ID.Value, DateTime.Now, null, null);
//通知
List<Guid> noticesUserIds = new List<Guid>();
noticesUserIds.Add((Guid)userID);
var UserNames = new List<string>();
var userInfo = this.GetEntity<T_FM_USER>(t => t.ENABLE_STATUS == (int)FMEnableStatusEnum. && (Guid)userID == t.ID);
UserNames.Add(userInfo?.NAME);
//发消息
notices = NotificationTaskService.InsertUserNoticeTaskModels("关键作业/许可作业工作票", job.ID, entity.ORG_ID, noticesUserIds, UserNames, DateTime.Now,
dtEnd, (int)FMNoticeTypeEnum., "FO017");
}
}
this.UnifiedCommit(() =>
{
if (entity != null)
UpdateEntityNoCommit(entity); //保存主表
if (users!=null && users.Any())
BantchSaveEntityNoCommit(users); //保存子表
//保存新的
if (files!=null && files.Any())
this.BantchSaveEntityNoCommit(files);
if (notices != null && notices.Any())
this.BantchSaveEntityNoCommit(notices);
});
return true;
});
}
/// <summary>
/// 是否显示同意按钮
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
[HttpPost, Route("GetPreShiftMeetingRecord")]
public JsonActionResult<bool> GetPreShiftMeetingRecord([FromBody] T_FO_PRE_OPER_SCH entity)
{
return SafeExecute<bool>(() =>
{
if (entity == null)
return false;
var model = GetEntity<T_FO_PRE_OPER_SCH>(entity.ID.ToString(),false, "Nav_PreOperSchUser");
if (model.FORM_STATUS != (int)FOTeamActivityState.)
return false;
if (model.Nav_PreOperSchUser != null && model.Nav_PreOperSchUser.Any())
{
var userID = APT.Infrastructure.Api.AppContext.CurrentSession.UserID;
var count=model.Nav_PreOperSchUser.Where(t=>t.PRE_OPER_SCH_ID == entity.ID && t.USER_ID == userID && t.DEAL_STATUS == 0).Count();
if (count > 0) //该用户在该记录中是否参与且未同意则显示同意按钮
{
return true;
}
else
{
return false;
}
}
else
return false;
});
}
/// <summary>
/// 签到同意
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
[HttpPost, Route("PersonalAgree")]
public JsonActionResult<bool> PersonalAgree([FromBody] T_FO_PRE_OPER_SCH entity)
{
return SafeExecute<bool>(() =>
{
var orgId = APT.Infrastructure.Api.AppContext.CurrentSession.OrgId;
var userID = APT.Infrastructure.Api.AppContext.CurrentSession.UserID;
entity.ORG_ID = orgId;
var user = this.GetEntity<T_FO_PRE_OPER_SCH_USER>(t => t.PRE_OPER_SCH_ID == entity.ID && t.USER_ID == userID, new BaseFilter(orgId));
user.DEAL_STATUS = (int)FOUserShiftStatusEnum.;
entity.CREATER_ID = user.CREATER_ID;
var todoCount = this.GetCount<T_FO_PRE_OPER_SCH_USER>(t => t.PRE_OPER_SCH_ID == entity.ID && t.DEAL_STATUS == 0, new BaseFilter(orgId));
T_FO_PRE_OPER_SCH model = null;
T_FO_CRUCIAL_LICENSE_JOB job = null;
List<T_FM_NOTIFICATION_TASK> notices = new List<T_FM_NOTIFICATION_TASK>();
if (todoCount == 0 || todoCount == 1)
{
model = GetEntity<T_FO_PRE_OPER_SCH>(entity.ID.ToString());
model.FORM_STATUS = (int)FOTeamActivityState.;
//触发工作票
job = InsertJob(entity);
if (job != null)
{
//通知
List<Guid> userIds = new List<Guid>();
userIds.Add((Guid)user.CREATER_ID);
var UserNames = new List<string>();
var users = this.GetEntity<T_FM_USER>(t => t.ENABLE_STATUS == (int)FMEnableStatusEnum. && userIds.Contains(t.ID));
UserNames.Add(users?.NAME);
//发消息
DateTime dtEnd = NotificationTaskService.GetTaskEndTime(FMTASKTYPE.JobSite, entity.ORG_ID.Value, DateTime.Now, null, null);
notices = NotificationTaskService.InsertUserNoticeTaskModels(entity.FILE_NAME+"关键作业/许可作业工作票", job.ID, entity.ORG_ID, userIds, UserNames, DateTime.Now,
dtEnd, (int)FMNoticeTypeEnum., "FO017");
}
}
T_FM_NOTIFICATION_TASK task = null;
//查询消息表
if (entity.TaskID != Guid.Empty)
{
task = NotificationTaskService.GetTaskFinishModel(entity.TaskID);
task.SOURCE_FORMCODE = "FO008_SHOWPRINT";
}
this.UnifiedCommit(() =>
{
if (model != null)
UpdateEntityNoCommit(model);
if (task != null)
this.UpdateEntityNoCommit(task);
if (user != null)
this.UpdateEntityNoCommit(user);
if (job != null)
UpdateEntityNoCommit(job);
if (notices != null && notices.Any())
this.BantchSaveEntityNoCommit(notices);
});
return true;
});
}
/// <summary>
/// 排序分页查询数据
/// </summary>
/// <param name="pageFilter">分页过滤实体</param>
/// <returns></returns>
[HttpPost, Route("FullOrderPaged")]
public PagedActionResult<T_FO_PRE_OPER_SCH> FullOrderPaged([FromBody] KeywordPageFilter pageFilter)
{
var result = new PagedActionResult<T_FO_PRE_OPER_SCH>();
var loginDepartmentId = APT.Infrastructure.Api.AppContext.CurrentSession.DepartmentID;
var loginUserId = APT.Infrastructure.Api.AppContext.CurrentSession.UserID;
var loginUserCode = APT.Infrastructure.Api.AppContext.CurrentSession.UserCode;
//安环部负责人departmentID
var manageDepartId = this.GetEntity<T_FM_USER>(t => t.Nav_ApproveRole != null && t.Nav_ApproveRole.NAME == "安环部负责人" && t.ENABLE_STATUS == 0)?.DEPARTMENT_ID;
if (loginUserCode == "admin" || loginDepartmentId == manageDepartId)
{
result = this.GetOrderPageEntities<T_FO_PRE_OPER_SCH>(null, pageFilter);
}
else
{
List<Guid> departmentId = new List<Guid>() { loginDepartmentId.Value };
List<Guid> departmentIds = new List<Guid>() { loginDepartmentId.Value };
DepartmentService.GetDepartmentIds(pageFilter.OrgId.Value, departmentId, ref departmentIds);
if (departmentIds != null && departmentIds.Any())
{
result = this.GetOrderPageEntities<T_FO_PRE_OPER_SCH>(t => (t.DEPARTMENT_ID != null && departmentIds.Contains(t.DEPARTMENT_ID.Value)), pageFilter);//|| dataIds.Contains(t.ID)
}
else
result.Data = null;
}
return result;
}
private T_FO_CRUCIAL_LICENSE_JOB InsertJob(T_FO_PRE_OPER_SCH entity)
{
var job = new T_FO_CRUCIAL_LICENSE_JOB();
//取审批流水码
var sysFilter = new SystemCodeFilter();
sysFilter.CodeType = (int)PFCodeRuleType.;
sysFilter.Count = 1;
sysFilter.OrgId = entity.ORG_ID;
var codes = CodeRuleService.NewGenSerial(sysFilter);
var codeList = codes.Split(new char[] { ',' });
//主表
job.CODE = codeList[0];
job.ORG_ID = entity.ORG_ID;
job.APPLY_USER_ID = entity.CREATER_ID;
job.JOB_SCHEME_ID = entity.ID;
job.IS_AUTO = (int)ISImportantEnum.;
return job;
}
}
}