226 lines
12 KiB
C#
226 lines
12 KiB
C#
using APT.BaseData.Domain.Entities;
|
|
using APT.BaseData.Domain.Entities.FM;
|
|
using APT.BaseData.Domain.Entities.PF;
|
|
using APT.BaseData.Domain.Enums;
|
|
using APT.Infrastructure.Core;
|
|
using APT.MS.Domain.Entities.BS;
|
|
using APT.MS.Domain.Entities.HM;
|
|
using APT.MS.Domain.Entities.PF;
|
|
using APT.MS.Domain.Entities.SC;
|
|
using APT.MS.Domain.Enums;
|
|
using APT.Utility;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
|
|
namespace APT.PF.WebApi.Controllers.Api
|
|
{
|
|
/// <summary>
|
|
/// 审批角色
|
|
/// </summary>
|
|
[Route("api/PF/PFApprovalRole")]
|
|
public partial class ApprovalRoleController : AuthorizeApiController<T_PF_APPROVAL_ROLE>
|
|
{
|
|
/// <summary>
|
|
/// 更新或新增数据
|
|
/// </summary>
|
|
/// <param name="entity">对象实体</param>
|
|
/// <returns></returns>
|
|
[HttpPost, Route("FullUpdate")]
|
|
public JsonActionResult<bool> FullUpdate([FromBody] T_PF_APPROVAL_ROLE entity)
|
|
{
|
|
return SafeExecute<bool>(() =>
|
|
{
|
|
var orgId = APT.Infrastructure.Api.AppContext.CurrentSession.OrgId;
|
|
//var roleCodes = this.GetEntities<T_PF_APPROVAL_ROLE>(t => true, new BaseFilter(orgId)).Select(x => x.NAME).ToList();
|
|
//if (roleCodes.Contains(entity.NAME))
|
|
// throw new Exception("系统已存在审批角色编码为" + entity.NAME + "的数据,请勿重复!");
|
|
var departs = entity.Nav_ApproveDeparts;
|
|
entity.Nav_ApproveDeparts = null;
|
|
if (departs != null && departs.Any())
|
|
{
|
|
departs = departs.Where(t => !t.IS_DELETED).ToList();
|
|
}
|
|
if (departs != null && departs.Any())
|
|
{
|
|
departs.ForEach(t =>
|
|
{
|
|
t.ORG_ID = orgId;
|
|
t.APPROVAL_ROLE_ID = entity.ID;
|
|
t.Nav_Department = null;
|
|
});
|
|
}
|
|
List<T_PF_APPROVE_OPERATION_ROLE> listRoles = new List<T_PF_APPROVE_OPERATION_ROLE>();
|
|
var roles = entity.Nav_ApproveRoles;
|
|
entity.Nav_ApproveRoles = null;
|
|
if (roles == null)
|
|
{
|
|
var approveRole = this.GetEntity<T_FM_ROLE>(t => t.ENABLE_STATUS == 0 && t.NAME.Contains("负责人"));
|
|
if (approveRole != null)
|
|
{
|
|
var role = new T_PF_APPROVE_OPERATION_ROLE();
|
|
role.ORG_ID = orgId;
|
|
role.APPROVAL_ROLE_ID = entity.ID;
|
|
role.ROLE_ID = approveRole.ID;
|
|
listRoles.Add(role);
|
|
}
|
|
}
|
|
List <Guid> deleteIds = new List<Guid>();
|
|
if (entity.ROLE_ID != null)
|
|
{
|
|
var datas = this.GetEntities<T_PF_APPROVE_OPERATION_ROLE>(t => t.APPROVAL_ROLE_ID == entity.ID, new BaseFilter(orgId));
|
|
if (datas.Any())
|
|
{
|
|
var ids=datas.Select(t => t.ID).ToList();
|
|
deleteIds.AddRange(ids);
|
|
}
|
|
var role = new T_PF_APPROVE_OPERATION_ROLE();
|
|
role.ORG_ID = orgId;
|
|
role.APPROVAL_ROLE_ID = entity.ID;
|
|
role.ROLE_ID = entity.ROLE_ID;
|
|
listRoles.Add(role);
|
|
}
|
|
if (listRoles.Any())
|
|
{
|
|
listRoles = listRoles.Distinct(t => t.ROLE_ID).ToList();
|
|
}
|
|
UnifiedCommit(() =>
|
|
{
|
|
if (entity != null)
|
|
UpdateEntityNoCommit(entity); //保存主表
|
|
if (departs != null && departs.Any())
|
|
BantchSaveEntityNoCommit(departs); //保存子表
|
|
if (listRoles != null && listRoles.Any())
|
|
BantchSaveEntityNoCommit(listRoles); //保存子表
|
|
if (deleteIds != null && deleteIds.Any())
|
|
BantchDeleteEntityNoCommit<T_PF_APPROVE_OPERATION_ROLE>(deleteIds); //保存子表
|
|
});
|
|
return true;
|
|
});
|
|
}
|
|
/// <summary>
|
|
/// 批量添加节点
|
|
/// </summary>
|
|
/// <param name="keywordFilter">参数</param>
|
|
/// <returns></returns>
|
|
[HttpPost, Route("AddApproveRoles")]
|
|
public JsonActionResult<bool> AddApproveRoles([FromBody] KeywordFilter keywordFilter)
|
|
{
|
|
return base.SafeExecute(() =>
|
|
{
|
|
if (string.IsNullOrEmpty(keywordFilter.Parameter1))
|
|
throw new Exception("当前节点未选择!");
|
|
if (string.IsNullOrEmpty(keywordFilter.Parameter2) && string.IsNullOrEmpty(keywordFilter.Parameter3))
|
|
throw new Exception("上一节点和下一节点至少选择一个");
|
|
List<T_PF_APPROVE_TEMP_DETAIL> detailNews = new List<T_PF_APPROVE_TEMP_DETAIL>();
|
|
Guid newID = new Guid(keywordFilter.Parameter1);
|
|
var approveDetailTemps = this.GetEntities<T_PF_APPROVE_TEMP_DETAIL>(t => !t.IS_DELETED, new BaseFilter(keywordFilter.OrgId));
|
|
var approveIds = approveDetailTemps.Select(t => t.APPROVE_ID).Distinct().ToList();
|
|
Guid? preID = null;
|
|
var approvalRole = this.GetEntity<T_PF_APPROVAL_ROLE>(t => t.ID == newID);
|
|
if (!string.IsNullOrEmpty(keywordFilter.Parameter2))
|
|
{
|
|
preID = new Guid(keywordFilter.Parameter2);
|
|
if (newID == preID)
|
|
{
|
|
throw new Exception("当前节点和上一节点不能相同");
|
|
}
|
|
}
|
|
Guid? nextID = null;
|
|
if (!string.IsNullOrEmpty(keywordFilter.Parameter3))
|
|
{
|
|
nextID = new Guid(keywordFilter.Parameter3);
|
|
if (newID == preID)
|
|
{
|
|
throw new Exception("当前节点和下一节点不能相同");
|
|
}
|
|
}
|
|
if (preID != null && nextID != null && preID == nextID)
|
|
{
|
|
throw new Exception("上一节点和下一节点不能相同");
|
|
}
|
|
if (approveIds != null && approveIds.Any())
|
|
{
|
|
foreach (var item in approveIds)
|
|
{
|
|
var temps = approveDetailTemps.Where(t => t.APPROVE_ID == item).OrderBy(m => m.NUM).ToList();
|
|
if (temps.Any())
|
|
{
|
|
var isExiest = temps.FirstOrDefault(t => t.APPROVE_ROLE_ID == newID);
|
|
if (isExiest == null)
|
|
{
|
|
if (preID != null && nextID != null)
|
|
{
|
|
var pre = temps.FirstOrDefault(t => t.APPROVE_ROLE_ID == preID);
|
|
var next = temps.FirstOrDefault(t => t.APPROVE_ROLE_ID == nextID);
|
|
if (pre != null && next != null)
|
|
{
|
|
var nextTemp = temps.Where(m => m.NUM > pre.NUM).OrderBy(t => t.NUM).FirstOrDefault();
|
|
if (next.NUM == nextTemp.NUM)
|
|
{
|
|
T_PF_APPROVE_TEMP_DETAIL detailNew = new T_PF_APPROVE_TEMP_DETAIL();
|
|
detailNew.ID = Guid.NewGuid();
|
|
detailNew.ORG_ID = keywordFilter.OrgId;
|
|
detailNew.APPROVE_ID = item;
|
|
detailNew.APPROVE_ROLE_ID = newID;
|
|
detailNew.NUM = next.NUM;
|
|
detailNew.DEPARTMENT_TYPE = approvalRole.DEPARTMENT_TYPE;
|
|
detailNew.NAME = approvalRole.NAME;
|
|
temps.Add(detailNew);
|
|
temps.Where(t => t.NUM >= detailNew.NUM && t.APPROVE_ROLE_ID != newID).ForEach(m => { m.NUM = m.NUM + 1; });
|
|
detailNews.AddRange(temps);
|
|
}
|
|
}
|
|
}
|
|
else if (preID != null && nextID == null)
|
|
{
|
|
var pre = temps.FirstOrDefault(t => t.APPROVE_ROLE_ID == preID);
|
|
if (pre != null)
|
|
{
|
|
T_PF_APPROVE_TEMP_DETAIL detailNew = new T_PF_APPROVE_TEMP_DETAIL();
|
|
detailNew.ID = Guid.NewGuid();
|
|
detailNew.ORG_ID = keywordFilter.OrgId;
|
|
detailNew.APPROVE_ID = item;
|
|
detailNew.APPROVE_ROLE_ID = newID;
|
|
detailNew.NUM = pre.NUM + 1;
|
|
detailNew.DEPARTMENT_TYPE = approvalRole.DEPARTMENT_TYPE;
|
|
detailNew.NAME = approvalRole.NAME;
|
|
temps.Add(detailNew);
|
|
temps.Where(t => t.NUM >= detailNew.NUM && t.APPROVE_ROLE_ID != newID).ForEach(m => { m.NUM = m.NUM + 1; });
|
|
detailNews.AddRange(temps);
|
|
}
|
|
}
|
|
else if (preID == null && nextID != null)
|
|
{
|
|
var next = temps.FirstOrDefault(t => t.APPROVE_ROLE_ID == nextID);
|
|
if (next != null)
|
|
{
|
|
T_PF_APPROVE_TEMP_DETAIL detailNew = new T_PF_APPROVE_TEMP_DETAIL();
|
|
detailNew.ID = Guid.NewGuid();
|
|
detailNew.ORG_ID = keywordFilter.OrgId;
|
|
detailNew.APPROVE_ID = item;
|
|
detailNew.APPROVE_ROLE_ID = newID;
|
|
detailNew.NUM = next.NUM;
|
|
detailNew.DEPARTMENT_TYPE = approvalRole.DEPARTMENT_TYPE;
|
|
detailNew.NAME = approvalRole.NAME;
|
|
temps.Add(detailNew);
|
|
temps.Where(t => t.NUM >= detailNew.NUM && t.APPROVE_ROLE_ID != newID).ForEach(m => { m.NUM = m.NUM + 1; });
|
|
detailNews.AddRange(temps);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
UnifiedCommit(() =>
|
|
{
|
|
if (detailNews != null && detailNews.Any())
|
|
this.BantchSaveEntityNoCommit(detailNews);
|
|
});
|
|
return true;
|
|
});
|
|
}
|
|
}
|
|
}
|