using OASystem.Domain.Entities.System;
using System.Collections;

namespace OASystem.API.Controllers
{
    /// <summary>
    /// 系统设置
    /// </summary>
    //[Authorize]
    [Route("api/[controller]/[action]")]
    public class SystemController : ControllerBase
    {
      
        private readonly CompanyRepository _syscomRep;
        private readonly DepartmentRepository _sysDepRep;
        private readonly UsersRepository _userRep;
        private readonly IMapper _mapper;

        private readonly SetDataRepository _setDataRepository;
        private readonly SystemMenuPermissionRepository _SystemMenuPermissionRepository;
        private readonly CompanyRepository _CompanyRepository;
        private readonly PageFunctionPermissionRepository _PageFunctionPermissionRepository;
        private readonly SystemMenuAndFunctionRepository _SystemMenuAndFunctionRepository;
        private readonly JobPostAuthorityRepository _JobPostAuthorityRepository;
        private readonly JobPostRepository _jobRep;

        public SystemController( CompanyRepository syscom, DepartmentRepository sysDepRep, UsersRepository userRep,
            IMapper mapper, SetDataRepository setDataRepository, CompanyRepository companyRepository,
            SystemMenuPermissionRepository systemMenuPermissionRepository, PageFunctionPermissionRepository pageFunctionPermissionRepository,
            SystemMenuAndFunctionRepository systemMenuAndFunctionRepository, JobPostAuthorityRepository jobPostAuthorityRepository, JobPostRepository jobRep)
            
        {
            _syscomRep = syscom;
            _sysDepRep = sysDepRep;
            _userRep = userRep;
            _mapper = mapper;
            _setDataRepository = setDataRepository;
            _CompanyRepository = companyRepository;
            _SystemMenuPermissionRepository = systemMenuPermissionRepository;
            _PageFunctionPermissionRepository = pageFunctionPermissionRepository;
            _SystemMenuAndFunctionRepository = systemMenuAndFunctionRepository;
            _JobPostAuthorityRepository = jobPostAuthorityRepository;
        }

        #region 企业操作
        /// <summary>
        /// 查询企业数据
        /// </summary>
        /// <param name="dto"></param>
        /// <returns></returns>
        [HttpPost]
        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
        public async Task<IActionResult> getCompanyList(DtoBase dto)
        {
            try
            {
                if (dto.PortType == 1)
                {
                    var CompanyDataResult = _CompanyRepository.GetCompanyData();
                    if (CompanyDataResult.Code != 0)
                    {
                        return Ok(JsonView(CompanyDataResult.Msg));
                    }
                    List<CompanyView> companyListView = _mapper.Map<List<CompanyView>>(CompanyDataResult.Data);
                    for (int i = 0; i < companyListView.Count; i++)
                    {
                        if (companyListView[i].ParentCompanyId != 0)
                        {
                            companyListView[i].ParentCompanyName = companyListView.Find(x => x.Id == companyListView[i].ParentCompanyId).CompanyName;
                        }
                        if (companyListView[i].ContactUserId!=0)
                        {
                            var user = _userRep.QueryDto<Sys_Users,UserInfoWebView>(x => x.Id == companyListView[i].ContactUserId).ToList();
                            if (user.Count!=0)
                            {
                                companyListView[i].ContactUserName = user[0].CnName;
                            }
                           
                        }

                    }
                    return Ok(JsonView(true, "查询成功!", companyListView));
                }
                else if (dto.PortType == 2)
                {
                    var CompanyDataResult = _CompanyRepository.GetCompanyData();
                    if (CompanyDataResult.Code != 0)
                    {
                        return Ok(JsonView(CompanyDataResult.Msg));
                    }
                    
                    return Ok(JsonView(true,"查询成功!", CompanyDataResult.Data));
                }
                else if (dto.PortType == 3)
                {
                    return Ok(JsonView(false, "暂无数据!"));
                }
                else
                {
                    return Ok(JsonView(false, "暂无数据!"));
                }
            }
            catch (Exception ex)
            {
                return Ok(JsonView(false, "程序错误!"));
                throw;
            }
        }

        /// <summary>
        /// 添加企业数据
        /// </summary>
        /// <param name="dto"></param>
        /// <returns></returns>
        [HttpPost]
        [ProducesResponseType(typeof(JsonView),StatusCodes.Status200OK)]
        public async Task<IActionResult> AddCompany(AddCompanyDto dto)
        {
            try
            {
                if (string.IsNullOrWhiteSpace(dto.CompanyName) || dto.CreateUserId == 0 || string.IsNullOrWhiteSpace(dto.CompanyCode))
                {
                    return Ok(JsonView(false, "请检查信息是否输入完整!"));
                }
                else if (string.IsNullOrWhiteSpace(dto.Tel))
                {
                    return Ok(JsonView(false, "请检查联系方式是否输入正确!"));
                }
                else
                {
                    Sys_Company _Company = _mapper.Map<Sys_Company>(dto);
                    int id = await _syscomRep.AddAsyncReturnId(_Company);
                    if (id == 0)
                    {
                        return Ok(JsonView(false, "添加失败!"));

                    }
                    return Ok(JsonView(true,"添加成功", new { Id = id }));
                }
            }
            catch (Exception)
            {
                return Ok(JsonView(false, "程序错误!"));
                throw;
            }
            
            
        }

        /// <summary>
        /// 企业修改
        /// </summary>
        /// <param name="dto"></param>
        /// <returns></returns>
        [HttpPost]
        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
        public async Task<IActionResult>EditCompany(EditCompanyDto dto)
        {
            try
            {
                if (string.IsNullOrWhiteSpace(dto.CompanyName) || string.IsNullOrWhiteSpace(dto.CompanyCode) || string.IsNullOrWhiteSpace(dto.Address)  || dto.ContactUserId == 0)
                {
                    return Ok(JsonView(false, "请检查信息是否输入完整!"));
                }
                else if (string.IsNullOrWhiteSpace(dto.Tel))
                {
                    return Ok(JsonView(false, "请检查联系方式是否输入正确!"));
                }
                else
                {
                    bool res = await _syscomRep.UpdateAsync(a => a.Id == dto.Id, a => new Sys_Company
                    {
                        CompanyName = dto.CompanyName,
                        CompanyCode = dto.CompanyCode,
                        Address = dto.Address,
                        ParentCompanyId = dto.ParentCompanyId,
                        Tel = dto.Tel,
                        ContactUserId = dto.ContactUserId,
                        Remark=dto.Remark,
                    });
                    if (!res) { return Ok(JsonView(false, "修改失败")); }
                    return Ok(JsonView(true,"修改成功!"));
                }
            }
            catch (Exception)
            {
                return Ok(JsonView(false, "程序错误!"));
                throw;
            }
            
            
        }

         /// <summary>
        /// 企业删除
        /// </summary>
        /// <param name="dto"></param>
        /// <returns></returns>
        [HttpPost]
        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
        public async Task<IActionResult> DelCompany(DelCompanyDto dto)
        {
            try
            {
                bool res = await _syscomRep.SoftDeleteAsync<Sys_Company>(dto.Id.ToString());
                if (!res) { return Ok(JsonView(false, "删除失败")); }
                return Ok(JsonView(true, "删除成功"));
            }
            catch (Exception)
            {
                return Ok(JsonView(false, "程序错误!"));
                throw;
            }
           
            

        }
        #endregion

        #region 部门操作

        /// <summary>
        /// 查询部门数据
        /// </summary>
        /// <param name="dto"></param>
        /// <returns></returns>
        
        [HttpPost]
        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
        public async Task<IActionResult> QueryDepartmentList(DepartmentDto dto)
        {
            try
            {
                if (dto.PortType==1)
                {
                    var result = _sysDepRep.QueryDto<Sys_Department, DepartmentIView>(s => s.CompanyId == dto.CompanyId).ToList();
                    if (result.Count == 0)
                    {
                        return Ok(JsonView(false, "暂无数据!"));
                    }
                    return Ok(JsonView(true, "查询成功!", result));
                }
                else if (dto.PortType==2)
                {
                    var result = _sysDepRep.QueryDto<Sys_Department, DepartmentIView>(s => s.CompanyId == dto.CompanyId).ToList();
                    if (result.Count == 0)
                    {
                        return Ok(JsonView(false, "暂无数据!"));
                    }
                    return Ok(JsonView(true,"查询成功!",result));
                }
                else if (dto.PortType == 3)
                {
                    return Ok(JsonView(false, "暂无数据!"));
                }
                else
                {
                    return Ok(JsonView(false, "暂无数据!"));
                }
            }
            catch (Exception ex)
            {
                return Ok(JsonView(false, "程序错误!"));
                throw;
            }
         
        }
        /// <summary>
        /// 部门添加
        /// </summary>
        /// <param name="dto"></param>
        /// <returns></returns>
        [HttpPost]
        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
        public async Task<IActionResult> AddDepartment(AddDepartmentDto dto)
        {
            try
            {
                if (dto.CreateUserId == 0 || string.IsNullOrWhiteSpace(dto.DepName) || dto.CompanyId == 0 || string.IsNullOrWhiteSpace(dto.DepCode))
                {
                    return Ok(JsonView(false, "请检查信息是否输入完整!"));
                }
                else
                {
                    Sys_Department _Department = _mapper.Map<Sys_Department>(dto);
                    int id = await _sysDepRep.AddAsyncReturnId(_Department);
                    if (id == 0)
                    {
                        return Ok(JsonView(false, "添加失败!"));
                    }
                    return Ok(JsonView(true, "添加成功!", new { Id = id }));
                }
            }
            catch (Exception)
            {
                return Ok(JsonView(false, "程序错误!"));
                throw;
            }
            
           
        }

        /// <summary>
        /// 部门修改
        /// </summary>
        /// <param name="dto"></param>
        /// <returns></returns>
        [HttpPost]
        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
        public async Task<IActionResult> EditDepartment(EditDepartmentDto dto)
        {
            try
            {
                if (dto.Id==0 || string.IsNullOrWhiteSpace(dto.DepName) || dto.CompanyId == 0 || string.IsNullOrWhiteSpace(dto.DepCode))
                {
                    return Ok(JsonView(false, "请检查信息是否输入完整!"));
                }
                else
                {
                    bool res = await _sysDepRep.UpdateAsync<Sys_Department>(a => a.Id == dto.Id, a => new Sys_Department
                    {
                        CompanyId=dto.CompanyId,
                        DepCode=dto.DepCode,
                        DepName=dto.DepName,
                        ParentDepId=dto.ParentDepId,
                        Remark=dto.Remark,
                     });
                    if (!res)
                    {
                        return Ok(JsonView(false, "修改失败!"));
                    }
                    return Ok(JsonView(true, "修改成功!"));
                }
            }
            catch (Exception)
            {
                return Ok(JsonView(false, "程序错误!"));
                throw;
            }


        }

        /// <summary>
        /// 部门删除
        /// </summary>
        /// <param name="dto"></param>
        /// <returns></returns>
        [HttpPost]
        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
        public async Task<IActionResult> DelDepartment(DelDepartmentDto dto)
        {
            try
            {
                if (dto.Id == 0)
                {
                    return Ok(JsonView(-1, "请检查信息是否输入完整!", null));
                }
                else
                {
                    bool res =await _sysDepRep.SoftDeleteAsync<Sys_Department>(dto.Id.ToString());
                    if (!res)
                    {
                        return Ok(JsonView(false, "删除失败!"));
                    }
                    return Ok(JsonView(true, "删除成功!"));
                }
            }
            catch (Exception)
            {
                return Ok(JsonView(false, "程序错误!"));
                throw;
            }


        }
        #endregion

        #region 岗位板块
        /// <summary>
        /// 岗位查询
        /// </summary>
        /// <param name="dto"></param>
        /// <returns></returns>
        [HttpPost]
        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
        public async Task<IActionResult> QueryJobPost(QueryJobPostDto dto)
        {
            try
            {
                if (dto.PortType == 1)
                {
                    var result = _sysDepRep.QueryDto<Sys_JobPost, JobPostView>(s => s.CompanyId == dto.CompanyId && s.DepId == dto.DepId).ToList();
                    if (result.Count == 0)
                    {
                        return Ok(JsonView(false, "暂无数据!"));
                    }
                    return Ok(JsonView(true, "查询成功!", result));
                }
                else if (dto.PortType == 2)
                {
                    var result = _jobRep.QueryDto<Sys_JobPost, JobPostView>(s => s.CompanyId == dto.CompanyId && s.DepId==dto.DepId).ToList();
                    if (result.Count == 0)
                    {
                        return Ok(JsonView(false, "暂无数据!"));
                    }
                    return Ok(JsonView(true, "查询成功!", result));
                }
                else if (dto.PortType == 3)
                {
                    return Ok(JsonView(false, "暂无数据!"));
                }
                else
                {
                    return Ok(JsonView(false, "暂无数据!"));
                }
            }
            catch (Exception ex)
            {
                return Ok(JsonView(false, "程序错误!"));
                throw;
            }
        }
        /// <summary>
        /// 添加岗位
        /// </summary>
        /// <param name="dto"></param>
        /// <returns></returns>
        [HttpPost]
        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
        public async Task<IActionResult> AddJobPost(AddJobPostDto dto)
        {
            try
            {
                Sys_JobPost sys_Job = _mapper.Map<Sys_JobPost>(dto);
                int id = await _jobRep.AddAsyncReturnId(sys_Job);
                if (id == 0)
                {
                    return Ok(JsonView(false, "添加失败"));
                }
                return Ok(JsonView(true, "添加成功", new { Id = id }));
            }
            catch (Exception ex)
            {
                return Ok(JsonView(false, "程序错误!"));
                throw;
            }
        }
        /// <summary>
        /// 修改岗位
        /// </summary>
        /// <param name="dto"></param>
        /// <returns></returns>
        [HttpPost]
        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
        public async Task<IActionResult> EditJobPost(EditJobPostDto dto)
        {
            try
            {
                bool res = await _jobRep.UpdateAsync<Sys_JobPost>(a=>a.Id==dto.Id,a =>new Sys_JobPost
                {
                    CompanyId=dto.CompanyId,
                    DepId=dto.DepId,
                    JobName=dto.JobName,
                    Remark=dto.Remark,
                });
                if (!res)
                {
                    return Ok(JsonView(false, "修改失败"));
                }
                return Ok(JsonView(true, "修改成功"));
            }
            catch (Exception ex)
            {
                return Ok(JsonView(false, "程序错误!"));
                throw;
            }
        }
        /// <summary>
        /// 删除岗位
        /// </summary>
        /// <param name="dto"></param>
        /// <returns></returns>
        [HttpPost]
        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
        public async Task<IActionResult> DelJobPost(DelJobPostDto dto)
        {
            try
            {
                bool res = await _jobRep.SoftDeleteAsync<Sys_JobPost>(dto.Id.ToString());
                if (!res)
                {
                    return Ok(JsonView(false, "删除失败!"));
                }
                return Ok(JsonView(true, "删除成功"));
            }
            catch (Exception)
            {
                return Ok(JsonView(false, "程序错误!"));
                throw;
            }
        }
        #endregion

        #region 用户操作
        /// <summary>
        /// 查询所有员工(web)
        /// </summary>
        /// <param name="dto"></param>
        /// <returns></returns>
        [HttpPost]
        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
        public async Task<IActionResult> GetUserList(DtoBase dto)
        {
            try
            {
                var result = _userRep.GetUserList(dto.PortType, string.Empty);
                if (result.Result.Code != 0)
                {
                    return Ok(JsonView(false, "暂无数据!"));

                }
                return Ok(JsonView(true, "查询成功!", result.Result.Data));
            }
            catch (Exception)
            {
                return Ok(JsonView(false, "程序错误!"));
                throw;
            }
        }

        /// <summary>
        /// 查询用户数据
        /// </summary>
        /// <param name="dto"></param>
        /// <returns></returns>
        [HttpPost]
        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
        public async Task<IActionResult> QueryUserList(UserDto dto)
        {
            try
            {
                string sqlWhere = string.Empty;
                if (dto.CompanyId!=0)
                {
                    sqlWhere += string.Format(@" And su.CompanyId={0}", dto.CompanyId);
                }
                if (dto.DepId != 0)
                {
                    sqlWhere += string.Format(@" And su.DepId={0}", dto.DepId);
                }
                if (dto.JobPostId != 0)
                {
                    sqlWhere += string.Format(@" And su.JobPostId={0}", dto.JobPostId);
                }
                if (!string.IsNullOrEmpty(sqlWhere.Trim()))
                {
                    Regex r = new Regex("And");
                    sqlWhere = r.Replace(sqlWhere, "Where", 1);
                }
                string userSqlWhere = string.Format(@"Select sc.CompanyName,sd.DepName,sjp.JobName,su.* From Sys_Users su 
                                                        Inner Join Sys_Company sc On su.CompanyId = sc.Id
                                                        Inner Join Sys_Department sd On su.DepId = sd.Id
                                                        Inner Join Sys_JobPost sjp On su.JobPostId = sjp.Id {0}", sqlWhere);
                var _userList =_userRep.GetListBySqlWithNolock(userSqlWhere);
                if (_userList.Count == 0)
                {
                    return Ok(JsonView(false, "暂无数据!"));

                }
                return Ok(JsonView(true,"查询成功!", _userList));
            }
            catch (Exception)
            {
                return Ok(JsonView(false, "程序错误!"));
                throw;
            }
           
        }

        /// <summary>
        /// 修改用户信息(上级修改/分配 公司、部门、岗位、工号等信息)
        /// </summary>
        /// <param name="dto"></param>
        /// <returns></returns>
        [HttpPost]
        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
        public async Task<IActionResult> EditUser(EditUserDto dto)
        {
            try
            {
                bool res = await _userRep.UpdateAsync<Sys_Users>(a => a.Id == dto.Id, a => new Sys_Users
                {
                    Number = dto.Number,
                    CompanyId = dto.CompanyId,
                    DepId = dto.DepId,
                    JobPostId = dto.JobPostId,
                    Ext = dto.Ext,
                    UsePeriod = dto.UsePeriod,
                    HrAudit = dto.HrAudit
                });
                if (!res) 
                {
                    return Ok(JsonView(false, "修改失败!"));
                }
                return Ok(JsonView(true, "修改成功!"));
            }
            catch (Exception)
            {
                return Ok(JsonView(false, "程序错误!"));
                throw;
            }
        }

        /// <summary>
        /// 修改用户信息(登录用户修改个人信息)
        /// </summary>
        /// <param name="dto"></param>
        /// <returns></returns>
        [HttpPost]
        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
        public async Task<IActionResult> EditMyUser(EditMyUserDto dto)
        {
            try
            {
                if (string.IsNullOrWhiteSpace(dto.CnName) || string.IsNullOrWhiteSpace(dto.Address) || string.IsNullOrWhiteSpace(dto.IDCard) || dto.Sex != 0 && dto.Sex != 1 ||
                    string.IsNullOrWhiteSpace(dto.MaritalStatus) || string.IsNullOrWhiteSpace(dto.HomeAddress)|| dto.Birthday>=DateTime.Now.AddYears(-1))
                {
                    return Ok(JsonView(false, "请完善你的个人信息!"));
                }
                else if (string.IsNullOrWhiteSpace(dto.GraduateInstitutions) || string.IsNullOrWhiteSpace(dto.Professional) || dto.Education == 0 || string.IsNullOrWhiteSpace(dto.GraduateInstitutions))
                {
                    return Ok(JsonView(false, "请完善你的学历信息!"));
                }
                else if (string.IsNullOrWhiteSpace(dto.Phone) || string.IsNullOrWhiteSpace(dto.UrgentPhone) || string.IsNullOrWhiteSpace(dto.Email))
                {
                    return Ok(JsonView(false, "请检查联系方式、紧急联系人及邮箱输写是否正确!"));
                }
                else
                {
                    bool res = await _userRep.UpdateAsync<Sys_Users>(a => a.Id == dto.Id, a => new Sys_Users
                    {
                        CnName = dto.CnName,
                        EnName = dto.EnName,
                        Sex = dto.Sex,
                        Phone = dto.Phone,
                        UrgentPhone = dto.UrgentPhone,
                        Email = dto.Email,
                        Address = dto.Address,
                        Edate = dto.Edate,
                        Birthday = dto.Birthday,
                        IDCard = dto.IDCard,
                        GraduateInstitutions = dto.GraduateInstitutions,
                        Professional = dto.Professional,
                        Education = dto.Education,
                        TheOrAdultEducation = dto.TheOrAdultEducation,
                        MaritalStatus = dto.MaritalStatus,
                        HomeAddress = dto.HomeAddress,
                        WorkExperience = dto.WorkExperience,
                        Certificate = dto.Certificate
                    });
                    if (!res)
                    {
                        return Ok(JsonView(false, "修改失败!"));
                    }
                    return Ok(JsonView(true, "修改成功!"));
                }
                
            }
            catch (Exception)
            {
                return Ok(JsonView(false, "程序错误!"));
                throw;
            }
        }
        #endregion

        #region 权限模块
        /// <summary>
        /// 权限数据页面初始化
        /// </summary>
        /// <param name="dto"></param>
        /// <returns></returns>
        //[Authorize]
        [HttpPost]
        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
        public async Task<IActionResult> GetAuth(AuthDto dto)
        {
            Result result = new Result();
            //模块数据
            var setDataResult = await _setDataRepository.GetSySDefultModule(_setDataRepository);
            if (setDataResult.Code != 0)
            {
                return Ok(JsonView(setDataResult.Msg));
            }

            //操作方式
            var PageOperation = _PageFunctionPermissionRepository.QueryDto<Sys_PageFunctionPermission, Sys_PageFunctionPermission>().ToList();

            //获取所有关联页面
            var Sys_SystemMenuAndFunction = _SystemMenuAndFunctionRepository.QueryDto<Sys_SystemMenuAndFunction, SystemMenuAndFunctionView>().ToList();


            //页面数据
            var SystemMenuPermissionData = _SystemMenuPermissionRepository.QueryDto<Sys_SystemMenuPermission, SystemMenuPermissionView>(x=>x.Mid == dto.moduleId).ToList();
            if (SystemMenuPermissionData == null || SystemMenuPermissionData.Count() == 0)
            {
                return Ok(JsonView("暂无数据"));
            }

            ArrayList viewData = new ArrayList();
            //组合页面数据
            foreach (var item in SystemMenuPermissionData)
            {
                ArrayList ids = new ArrayList();
                foreach (var viewop in PageOperation)
                {
                    var op =  Sys_SystemMenuAndFunction.FirstOrDefault(x => x.SmId == item.Id && x.FId == viewop.Id);
                    if (op != null)
                    {
                        ids.Add(viewop.Id);
                    }
                }
                viewData.Add(new
                {
                    Id = item.Id,
                    Mid = item.Mid,
                    Name = item.Name,
                    SystemMenuCode = item.SystemMenuCode,
                    opList = ids,
                    selList = new string[0]
                }) ;
            }

            //公司数据
            var CompanyDataResult = _CompanyRepository.GetCompanyData();
            if (CompanyDataResult.Code != 0)
            {
                return Ok(JsonView(CompanyDataResult.Msg));
            }

            result.Code = 0;
            result.Msg = "成功!";
            var Dyresult = new
            {
                setDataResult = setDataResult.Data,
                CompanyDataResult = CompanyDataResult.Data,
                SystemMenuPermissionData = viewData,
                PageOperation = PageOperation,
            };

            return Ok(JsonView(200, "成功!", Dyresult));
        }
        /// <summary>
        /// 获取职务权限
        /// </summary>
        /// <param name="dto"></param>
        /// <returns></returns>
        [HttpPost]
        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
        public IActionResult QueryJobAuth(QueryJobAuthDto dto)
        {
            //选中的操作权限
            var DBdata = _JobPostAuthorityRepository.QueryDto<Sys_JobPostAuthority, JobPostAuthorityView>(x=>x.JpId == dto.jobid).ToList();
            var SystemMenuPermissionData = _SystemMenuPermissionRepository.QueryDto<Sys_SystemMenuPermission, SystemMenuPermissionView>(x => x.Mid == dto.moduleId).ToList();
            if (SystemMenuPermissionData == null || SystemMenuPermissionData.Count() == 0)
            {
                return Ok(JsonView("暂无数据"));
            }

            //所有操作
            var PageOperation = _PageFunctionPermissionRepository.QueryDto<Sys_PageFunctionPermission, Sys_PageFunctionPermission>().ToList();

            //获取所有关联页面
            var Sys_SystemMenuAndFunction = _SystemMenuAndFunctionRepository.QueryDto<Sys_SystemMenuAndFunction, SystemMenuAndFunctionView>().ToList();

            ArrayList viewData = new ArrayList();
            //组合页面数据
            foreach (var item in SystemMenuPermissionData)
            {
                ArrayList ids = new ArrayList();
                foreach (var viewop in PageOperation)
                {
                    var op = Sys_SystemMenuAndFunction.FirstOrDefault(x => x.SmId == item.Id && x.FId == viewop.Id);
                    if (op != null)
                    {
                        ids.Add(viewop.Id);
                    }
                }

                //获取本职务的页面拥有的权限
                var DBwhere =  DBdata.Where(x => x.SmId == item.Id && x.JpId == dto.jobid).ToList();

                viewData.Add(new
                {
                    Id = item.Id,
                    Mid = item.Mid,
                    Name = item.Name,
                    SystemMenuCode = item.SystemMenuCode,
                    opList = ids,
                    selList = DBwhere.Select(x => x.FId)
                }) ;
            }

            return Ok(JsonView(200, "成功!", viewData));
        }
        /// <summary>
        /// 保存岗位权限
        /// </summary>
        /// <param name="dto"></param>
        /// <returns></returns>
        [HttpPost]
        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
        public async Task<IActionResult> SaveJobAuth(SaveJobDto dto)
        {
            //获取所有关联页面
            var Sys_SystemMenuAndFunction = _SystemMenuAndFunctionRepository.QueryDto<Sys_SystemMenuAndFunction, SystemMenuAndFunctionView>().ToList();
            
            List<Sys_JobPostAuthority> adds = new List<Sys_JobPostAuthority>();
            foreach (var item in dto.Savejobs)
            {
                foreach (var fid in item.FIds)
                {
                    var whereobj = Sys_SystemMenuAndFunction.FirstOrDefault(x => x.FId == fid && x.SmId == item.SmId);
                    if (whereobj != null)
                    {
                        adds.Add(new Sys_JobPostAuthority
                        {
                            CreateTime = DateTime.Now,
                            CreateUserId = 245,
                            FId = fid,
                            JpId = dto.Jpid,
                            SmId = item.SmId
                        });
                    }
                }
            }

            _JobPostAuthorityRepository.BeginTran();
            try
            {
                bool isdel = await _JobPostAuthorityRepository.DeleteAsync<Sys_JobPostAuthority>(x => x.JpId == dto.Jpid);
                int UpRows = _JobPostAuthorityRepository.Adds<Sys_JobPostAuthority>(adds);
            }
            catch (Exception ex)
            {
                _JobPostAuthorityRepository.RollbackTran();
                return Ok(JsonView("系统错误!"));
            }

            _JobPostAuthorityRepository.CommitTran();
            return Ok(JsonView(200, "成功", new { }));
        }

        #endregion
    }
}