mh_sms/APT.MicroApi/APT.SC.WebApi/Controllers/Api/OGController/02OGSafePdtAssessPlanCheckController.cs
2024-01-22 09:17:01 +08:00

356 lines
20 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.OG;
using APT.MS.Domain.Entities.SC;
using APT.MS.Domain.Entities.SC.OG;
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.OG
{
[Route("api/OG/OGSafePdtAssessPlanCheck")]
public class OGSafePdtAssessPlanCheckController : AuthorizeApiController<T_OG_SAFE_PDT_ASSESS_PLAN_CHECK>
{
IPFCodeRuleService CodeRuleService { get; set; }
IFMNotificationTaskService NotificationTaskService { get; set; }
IFMFlowPermitService MFlowPermitService { get; set; }
IPFApproveCallBackService ApproveCallBackService { get; set; }
/// <summary>
///
/// </summary>
/// <param name="notificationTaskService"></param>
public OGSafePdtAssessPlanCheckController(IPFCodeRuleService codeRuleService, IFMNotificationTaskService notificationTaskService, IFMFlowPermitService mFlowPermitService, IPFApproveCallBackService approveCallBackService)
{
CodeRuleService = codeRuleService;
NotificationTaskService = notificationTaskService;
MFlowPermitService = mFlowPermitService;
ApproveCallBackService = approveCallBackService;
}
/// <summary>
/// 新增/编辑
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
[HttpPost, Route("FullUpdate")]
public JsonActionResult<bool> FullUpdate([FromBody] T_OG_SAFE_PDT_ASSESS_PLAN_CHECK entity)
{
return SafeExecute(() =>
{
var details = entity.Nav_Details;
var files = entity.Nav_Files;
if (entity.ANNUAL == null || entity.ANNUAL == 0)
{
entity.ANNUAL = DateTime.Now.Year;
}
entity.USER_ID = APT.Infrastructure.Api.AppContext.CurrentSession.UserID;
var department = this.GetEntity<T_FM_USER>(t => t.ID == entity.USER_ID.Value, new string[] { "Nav_Department", "Nav_Person.Nav_Post" });
entity.DEPARTMENT_ID = department?.DEPARTMENT_ID;
entity.TIME = DateTime.Now;
List<T_FM_NOTIFICATION_TASK> notices = new List<T_FM_NOTIFICATION_TASK>();
List<T_OG_SAFE_PDT_ASSESS_PLAN_CHECK_DETAIL_CONTENT> contents = new List<T_OG_SAFE_PDT_ASSESS_PLAN_CHECK_DETAIL_CONTENT>();
T_FM_NOTIFICATION_TASK task = null;
List<T_OG_SAFE_ASSESS_PLAN_INPUT> newDetailTemps = new List<T_OG_SAFE_ASSESS_PLAN_INPUT>();
List<T_OG_SAFE_ASSESS_ITEM> newContentTemps = new List<T_OG_SAFE_ASSESS_ITEM>();
List<Guid> deleteIds = new List<Guid>();
if (entity.PUBLISH != null && entity.PUBLISH.Equals("SaveAndNotify"))
{
entity.STATUS = PFStandardStatus.Approving;
if (details != null && details.Any())
{
//回写考核方案导入表
var postBack = details.Select(t => t.POST_ID).Distinct().ToList();
var tempDetails = this.GetEntities<T_OG_SAFE_ASSESS_PLAN_INPUT>(t => t.DEPARTMENT_ID == entity.DEPARTMENT_ID && postBack.Contains(t.POST_ID.Value) && t.ANNUAL == entity.ANNUAL, new BaseFilter(entity.ORG_ID), new string[] { "Nav_SafeAssessItem" }).ToList();
foreach (var t in details)
{
t.ANNUAL = entity.ANNUAL;
if (t.CYCLE == 0)
this.ThrowError("040006");
var first = tempDetails.FirstOrDefault(f => f.POST_ID == t.POST_ID && f.ANNUAL == t.ANNUAL);
if (first == null)
{
T_OG_SAFE_ASSESS_PLAN_INPUT newDetailTemp = new T_OG_SAFE_ASSESS_PLAN_INPUT();
newDetailTemp.NAME = entity.NAME;
newDetailTemp.DEPARTMENT_ID =entity.DEPARTMENT_ID;
newDetailTemp.USER_ID = APT.Infrastructure.Api.AppContext.CurrentSession.UserID;
newDetailTemp.POST_ID = t.POST_ID;
newDetailTemp.CYCLE = t.CYCLE;
newDetailTemp.CODE = DateTime.Now.ToString("yyyyMMddHHmmss");
newDetailTemp.ANNUAL = t.ANNUAL;
newDetailTemp.ORG_ID = t.ORG_ID;
newDetailTemp.POST_ID = t.POST_ID;
newDetailTemp.CHECK_ID = entity.ID;
newDetailTemps.Add(newDetailTemp);
if (t.Nav_Contents != null && t.Nav_Contents.Any())
{
var sum = t.Nav_Contents.Where(p => !p.IS_DELETED).Sum(x => x.SCORE);
if (sum != 100)
throw new Exception("考试项目标准分总分必须为100");
t.Nav_Contents.ForEach(t1 =>
{
t1.ORG_ID = entity.ORG_ID;
t1.CHECK_DETAIL_ID = t.ID;
contents.Add(t1);
T_OG_SAFE_ASSESS_ITEM newContent = new T_OG_SAFE_ASSESS_ITEM();
newContent.ORG_ID = entity.ORG_ID;
newContent.ASSESS_PLAN_INPUT_ID = newDetailTemp.ID;
newContent.SCORE = t1.SCORE;
newContent.METHOD = t1.METHOD;
newContent.NAME = t1.NAME;
newContentTemps.Add(newContent);
});
t.Nav_Contents = null;
}
else
throw new Exception("考试项目未全部填写");
}
else
{
var ids = first.Nav_SafeAssessItem.Select(p => p.ID).ToList();
deleteIds.AddRange(ids);
if (t.Nav_Contents != null && t.Nav_Contents.Any())
{
var sum = t.Nav_Contents.Where(p => !p.IS_DELETED).Sum(x => x.SCORE);
if (sum != 100)
throw new Exception("考试项目标准分总分必须为100");
t.Nav_Contents.ForEach(t1 =>
{
t1.ORG_ID = entity.ORG_ID;
t1.CHECK_DETAIL_ID = t.ID;
contents.Add(t1);
T_OG_SAFE_ASSESS_ITEM newContent = new T_OG_SAFE_ASSESS_ITEM();
newContent.ORG_ID = entity.ORG_ID;
newContent.ASSESS_PLAN_INPUT_ID = first.ID;
newContent.SCORE = t1.SCORE;
newContent.METHOD = t1.METHOD;
newContent.NAME = t1.NAME;
newContentTemps.Add(newContent);
});
t.Nav_Contents = null;
}
else
throw new Exception("考试项目未全部填写");
}
};
}
entity.STATUS = PFStandardStatus.Approving;
entity.Nav_Details = null;
//取审批流水码
var sysFilter = new SystemCodeFilter();
sysFilter.CodeType = (int)PFCodeRuleType.;
sysFilter.Count = 1;
sysFilter.OrgId = entity.ORG_ID;
var codes = CodeRuleService.NewGenSerial(sysFilter);
var serialCode = codes.Split(new char[] { ',' });
var param = Enum.GetName(typeof(FMDepartmentType), entity.LEVEL);
MFlowPermitService.InsertApprove(serialCode[0], "OG004", param, entity.ID, "OG003_SHOWPRINT", entity.TaskID, true, () =>
{
if (entity != null)
this.UpdateEntityNoCommit(entity);
if (details != null && details.Any())
this.BantchSaveEntityNoCommit(details);
if (contents != null && contents.Any())
this.BantchSaveEntityNoCommit(contents);
if (newDetailTemps != null && newDetailTemps.Any())
this.BantchSaveEntityNoCommit(newDetailTemps);
if (deleteIds != null && deleteIds.Any())
this.BantchDeleteEntityNoCommit<T_OG_SAFE_ASSESS_ITEM>(deleteIds);
if (newContentTemps != null && newContentTemps.Any())
this.BantchSaveEntityNoCommit(newContentTemps);
if (task != null)
this.UpdateEntityNoCommit(task);
if (notices != null && notices.Any())
this.BantchSaveEntityNoCommit(notices);
if (files != null && files.Any())
this.BantchSaveEntityNoCommit(files);
}, null, null, null, null, null, "OG003_SHOWPRINT", null);
return true;
}
entity.Nav_Details = null;
UnifiedCommit(() =>
{
if (entity != null)
this.UpdateEntityNoCommit(entity);
if (details != null && details.Any())
this.BantchSaveEntityNoCommit(details);
if (contents != null && contents.Any())
this.BantchSaveEntityNoCommit(contents);
if (newDetailTemps != null && newDetailTemps.Any())
this.BantchSaveEntityNoCommit(newDetailTemps);
if (deleteIds != null && deleteIds.Any())
this.BantchDeleteEntityNoCommit<T_OG_SAFE_ASSESS_ITEM>(deleteIds);
if (newContentTemps != null && newContentTemps.Any())
this.BantchSaveEntityNoCommit(newContentTemps);
if (task != null)
this.UpdateEntityNoCommit(task);
if (notices != null && notices.Any())
this.BantchSaveEntityNoCommit(notices);
});
return true;
});
}
/// <summary>
/// 已阅
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
[HttpPost, Route("IdentityUpdate")]
public JsonActionResult<bool> IdentityUpdate([FromBody] T_OG_SAFE_PDT_ASSESS_PLAN_CHECK entity)
{
return SafeExecute(() =>
{
var audit = this.GetEntity<T_OG_SAFE_PDT_ASSESS_PLAN_CHECK>(entity.ID);
//发起车间、班组、个人目标与指标
T_OG_SAFE_PDT_ASSESS_PLAN_CHECK auditDepart = null;
var loginUserId = APT.Infrastructure.Api.AppContext.CurrentSession.UserID;
var loginUser = this.GetEntity<T_FM_USER>(t => t.ID == loginUserId.Value, "Nav_Department", "Nav_ApproveRole");
var name = ""; var type = 0; var departmentType = FMDepartmentType.;
switch (audit.LEVEL)
{
case FMDepartmentType.:
departmentType = FMDepartmentType.;
name = "部门"; type = 1;
break;
case FMDepartmentType.:
departmentType = FMDepartmentType.;
name = "车间"; type = 2;
break;
case FMDepartmentType.:
departmentType = FMDepartmentType.;
name = "班组";
break;
case FMDepartmentType.:
name = "";
break;
default:
name = "";
break;
}
List<T_OG_SAFE_PDT_ASSESS_PLAN_CHECK_DETAIL> auditDetails = new List<T_OG_SAFE_PDT_ASSESS_PLAN_CHECK_DETAIL>();
List<T_OG_SAFE_PDT_ASSESS_PLAN_CHECK_DETAIL_CONTENT> contents = new List<T_OG_SAFE_PDT_ASSESS_PLAN_CHECK_DETAIL_CONTENT>();
T_FM_NOTIFICATION_TASK notice = null;
if ((int)audit.LEVEL != loginUser.Nav_Department.DEPARTMENT_TYPE || ((int)audit.LEVEL == loginUser.Nav_Department.DEPARTMENT_TYPE && audit.LEVEL == FMDepartmentType.))
{
if (name == "")
{
auditDepart = null;
audit.STATUS = PFStandardStatus.Archived;
}
else
{
auditDepart = new T_OG_SAFE_PDT_ASSESS_PLAN_CHECK();
auditDepart.STATUS = PFStandardStatus.Draft;
auditDepart.ORG_ID = audit.ORG_ID;
auditDepart.ANNUAL = audit.ANNUAL;
auditDepart.TIME = DateTime.Now;
auditDepart.USER_ID = loginUserId;
auditDepart.DEPARTMENT_ID = loginUser?.DEPARTMENT_ID;
auditDepart.LEVEL = departmentType;
var departmentIds = this.GetEntities<T_FM_DEPARTMENT>(t => t.DEPARTMENT_TYPE == type && t.PARENT_ID == loginUser.DEPARTMENT_ID && t.ENABLE_STATUS == (int)FMEnableStatusEnum., new BaseFilter(audit.ORG_ID)).Select(m => m.ID).ToList();
if (departmentIds.Any())
{
foreach (var department in departmentIds)
{
//细表
T_OG_SAFE_PDT_ASSESS_PLAN_CHECK_DETAIL auditDetail = new T_OG_SAFE_PDT_ASSESS_PLAN_CHECK_DETAIL();
auditDetail.ORG_ID = audit.ORG_ID;
auditDetail.CHECK_ID = auditDepart.ID;
auditDetail.ANNUAL = DateTime.Now.Year;
auditDetails.Add(auditDetail);
}
}
var userInfos = this.GetEntities<T_FM_USER>(t => t.DEPARTMENT_ID == loginUser.DEPARTMENT_ID && (t.Nav_ApproveRole == null || (t.Nav_ApproveRole != null && !t.Nav_ApproveRole.NAME.Contains("副总"))) && t.ENABLE_STATUS == (int)FMEnableStatusEnum. && !t.CODE.Contains("admin"), new BaseFilter(entity.ORG_ID)).ToList();
foreach (var info in userInfos)
{
//细表
T_OG_SAFE_PDT_ASSESS_PLAN_CHECK_DETAIL auditDetail = new T_OG_SAFE_PDT_ASSESS_PLAN_CHECK_DETAIL();
auditDetail.ORG_ID = audit.ORG_ID;
auditDetail.POST_ID = info.ID;
auditDetail.CHECK_ID = auditDepart.ID;
auditDetail.ANNUAL = DateTime.Now.Year;
auditDetails.Add(auditDetail);
}
var userIds = userInfos.Select(t => t.ID).ToList();
var tempDetails = this.GetEntities<T_OG_SAFE_ASSESS_PLAN_INPUT>(t => departmentIds.Contains(t.DEPARTMENT_ID.Value) || userIds.Contains(t.USER_ID.Value), new BaseFilter(entity.ORG_ID), new string[] { "Nav_SafeAssessItem" }).ToList();
if (auditDetails != null && auditDetails.Any())
{
foreach (var auditDs in auditDetails)
{
var tempCurrent = tempDetails.FirstOrDefault(t => t.POST_ID == auditDs.POST_ID && t.ANNUAL == auditDs.ANNUAL);
if (tempCurrent != null)
{
auditDs.CYCLE = tempCurrent.CYCLE;
if (tempCurrent.Nav_SafeAssessItem != null && tempCurrent.Nav_SafeAssessItem.Any())
{
tempCurrent.Nav_SafeAssessItem.ForEach(t =>
{
T_OG_SAFE_PDT_ASSESS_PLAN_CHECK_DETAIL_CONTENT content = new T_OG_SAFE_PDT_ASSESS_PLAN_CHECK_DETAIL_CONTENT();
content.ORG_ID = t.ORG_ID;
content.CHECK_DETAIL_ID = auditDs.ID;
content.NAME = t.NAME;
content.SCORE = t.SCORE;
content.METHOD = t.METHOD;
contents.Add(content);
});
}
}
}
}
notice = NotificationTaskService.InsertUserNoticeTaskModel(name + "考核方案审核", auditDepart.ID, audit.ORG_ID, loginUser.ID, loginUser.NAME, DateTime.Now,
DateTime.Now.AddHours(24), (int)FMNoticeTypeEnum., "PT024");//userIds, userNames,
}
}
T_FM_NOTIFICATION_TASK task = null;
if (entity.TaskID != Guid.Empty)
{
task = NotificationTaskService.FOGetTaskFinishModel(entity.TaskID,entity.ID);
task.SOURCE_FORMCODE = "PT024_SHOWPRINT";
}
UnifiedCommit(() =>
{
if (audit != null)
this.UpdateEntityNoCommit(audit);
if (auditDepart != null)
this.UpdateEntityNoCommit(auditDepart);
if (auditDetails != null && auditDetails.Any())
this.BantchSaveEntityNoCommit(auditDetails);
if (contents != null && contents.Any())
this.BantchSaveEntityNoCommit(contents);
if (task != null)
this.UpdateEntityNoCommit(task);
if (notice != null)
this.UpdateEntityNoCommit(notice);
});
return true;
});
}
/// <summary>
/// 回调函数
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[HttpGet, Route("BackUpdate")]
public JsonActionResult<bool> BackUpdate(string id)
{
return SafeExecute(() =>
{
return ApproveCallBackService.CallBack("OG/OGSafePdtAssessPlanCheck/BackUpdate", id);
});
}
}
}