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;
 | 
						|
            });
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 |