using Central.Control.Domain; using MES.Production.Service.IService; using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace MES.Production.Service.ServiceImp { /// /// 岗位部门关系业务实现类 /// add 作者: 季健国 QQ:181589805 by 2016-09-10 /// public class PostDepartmentManage : RepositoryBase, IService.IPostDepartmentManage { /// /// 岗位人员 /// IPostUserManage PostUserManage { get; set; } /// /// 根据部门ID获取岗位集合 /// public List GetPostIDByDptId(string dptId) { return this.LoadAll(p => dptId == p.FK_DEPARTMENT_ID).Select(p => p.SYS_POST).ToList(); } /// /// 根据岗位ID获取所应用部门的集合 /// public List GetDptIDByPostID(string postId) { return this.LoadAll(p => postId == p.FK_POST_ID).Select(p => p.SYS_DISTRIBUTORS).ToList(); } /// /// 根据部门获取部门岗位,供人员选择岗位使用 /// public dynamic GetPostDptInfoByDptId(string dptId) { string sql = @"select d.name+'-'+ p.postname as postname, C.NAMETEXT AS posttype,s.id from sys_post p inner join Sys_Post_Department s on p.id=s.fk_post_id inner join SYS_DISTRIBUTORS d on s.fk_department_id=d.id left join sys_code c on p.posttype=c.codevalue and c.codetype='POSTTYPE' where s.fk_department_id in(" + dptId + ")"; return this.ExecuteSqlQuery(sql); } /// /// 设置部门岗位 /// public bool SetPost(string dptId, string postId,out string msg) { msg = string.Empty; var newpost = postId.Split(',').ToList(); try { //----验证当前部门的岗位是否分配了人员 //原有岗位是否存在 if (this.IsExist(p => p.FK_DEPARTMENT_ID == dptId)) { //原有岗位部门数据 var originalPost = this.LoadAll(p => p.FK_DEPARTMENT_ID == dptId); var oldpost = originalPost.Select(p => p.FK_POST_ID).OrderBy(p => p).ToList(); #region 对比当前选择的岗位与原有岗位是否一致 //规则:1、判断数量 2、排序对比内项 if (originalPost.Count() == newpost.Count && oldpost.All(newpost.Contains)) return true; #endregion #region 不一致处理 //查找不一致的岗位记录,是否存在人员分配 var differentPost = originalPost.Where(p => !postId.Contains(p.FK_POST_ID)).ToList(); var differentPostDptId = differentPost.Aggregate(string.Empty, (current, t) => current + t.ID + ",").TrimEnd(','); //有人员分配返回false 并提示那个岗位分配了人员 foreach (var item in differentPost.Select(c=>c.ID).ToList()) { var postUser = this.PostUserManage.LoadAll(p => p.FK_POST_DEPARTMENTID == item).Select(p => p.SYS_POST_DEPARTMENT.SYS_POST.POSTNAME).GroupBy(p => p).ToList(); if (postUser.Any()) { msg += postUser[0].Key + " 岗位中存在人员,请先将人员分配其他岗位
"; } } if (!string.IsNullOrEmpty(msg)) return false; //删除原有岗位部门废弃的记录 this.Delete(p => differentPostDptId.Contains(p.ID.ToString())); //移除原有不变的岗位ID postId = postId.PadRight(postId.Length + 1, ','); foreach (var item in originalPost.Where(c => postId.Contains(c.FK_POST_ID)).Select(c => c.FK_POST_ID).ToList()) { postId = postId.Replace(item, ""); } postId = postId.TrimStart(',').TrimEnd(','); #endregion } //保存新的数据 if (!string.IsNullOrEmpty(postId)) { var list = postId.Split(',').Select(item => new SYS_POST_DEPARTMENT() { FK_DEPARTMENT_ID = dptId, FK_POST_ID = item }).ToList(); return this.SaveList(list) > 0; } return true; } catch (Exception e) { throw e.InnerException; } } } }