private void DataSynchEntity(object entity, string oper) { if (entity == null) { return; } RealtimeData data = new RealtimeData(); data.Oper = oper; data.Type = "dept"; if (entity is OrgDept) { OrgDept orgDept = entity as OrgDept; List <OrgDept> orgDepts = new List <OrgDept>(); orgDepts.Add(orgDept); data.Data = orgDepts; } else if (entity is List <OrgDept> ) { List <OrgDept> orgDepts = entity as List <OrgDept>; data.Data = orgDepts; } RealtimeSynchServiceFactory.GetInstance().EnqueueQueue(data); }
private void HandlerOrgdept(FapDynamicObject fapDynamicData) { string pid = fapDynamicData.Get("Pid").ToString(); if (pid.IsPresent()) { OrgDept parentDept = _dbContext.Get <OrgDept>(pid); var childDepts = _dbContext.Query <OrgDept>("select * from OrgDept where Pid=@Pid", new DynamicParameters(new { Pid = pid })); if (parentDept.IsFinal == 1) { //更新父部门是否末级标记 parentDept.IsFinal = 0; _dbContext.Update(parentDept); } fapDynamicData.SetValue("PCode", parentDept.DeptCode); fapDynamicData.SetValue("TreeLevel", parentDept.TreeLevel + 1); if (fapDynamicData.ContainsKey("DeptOrder") && fapDynamicData.Get("DeptOrder").ToString() == "0") { fapDynamicData.SetValue("DeptOrder", childDepts.Any() ? childDepts.Count() : 1); } fapDynamicData.SetValue("FullName", parentDept.FullName + "/" + fapDynamicData.Get("DeptName")); fapDynamicData.SetValue("DeptCode", childDepts.Any() ? (childDepts.Max(d => d.DeptCode).ToInt() + 1).ToString() : $"{parentDept.DeptCode}01"); } else { int c = _dbContext.Count <OrgDept>("Pid=''") + 1; if (fapDynamicData.Get("DeptCode").ToString().IsMissing()) { fapDynamicData.SetValue("DeptCode", c); fapDynamicData.SetValue("FullName", fapDynamicData.Get("DeptName")); fapDynamicData.SetValue("TreeLevel", 0); fapDynamicData.SetValue("DeptOrder", c); } } }
public ResponseViewModel MergeDepartment(MergeDeptModel mergeDept) { Guard.Against.Null(mergeDept, nameof(mergeDept)); try { var employees = _dbContext.QueryWhere <Employee>("DeptUid in @Depts", new Dapper.DynamicParameters(new { Depts = mergeDept.MergeFids })); foreach (var employee in employees) { employee.DeptUid = mergeDept.DeptFid; employee.DeptCode = mergeDept.DeptCode; _dbContext.Update(employee); } //删除旧部门 var mergeDepts = _platformDomain.OrgDeptSet.Where(d => mergeDept.MergeFids.Contains(d.Fid)); foreach (var dept in mergeDepts) { _dbContext.Delete(dept); } return(ResponseViewModelUtils.Sueecss()); } catch (Exception ex) { //删除新建的合并部门 OrgDept dept = _dbContext.Get <OrgDept>(mergeDept.DeptFid); _dbContext.Delete(dept); return(ResponseViewModelUtils.Failure(ex.Message)); } }
private void HandlerOrgdept(OrgDept orgDept) { string pid = orgDept.Pid; if (pid.IsPresent()) { OrgDept parentDept = _dbContext.Get <OrgDept>(pid); var childDepts = _dbContext.Query <OrgDept>("select * from OrgDept where Pid=@Pid", new DynamicParameters(new { Pid = pid })); if (parentDept.IsFinal == 1) { //更新父部门是否末级标记 parentDept.IsFinal = 0; _dbContext.Update(parentDept); } orgDept.PCode = parentDept.DeptCode; orgDept.TreeLevel = parentDept.TreeLevel + 1; if (orgDept.DeptOrder == 0) { orgDept.DeptOrder = childDepts.Any() ? childDepts.Count() : 1; } orgDept.FullName = parentDept.FullName + "/" + orgDept.DeptName; orgDept.DeptCode = childDepts.Any() ? (childDepts.Max(d => d.DeptCode).ToInt() + 1).ToString() : $"{parentDept.DeptCode}01"; } else { int c = _dbContext.Count <OrgDept>("Pid=''") + 1; if (orgDept.DeptCode.IsMissing()) { orgDept.DeptCode = c.ToString(); orgDept.FullName = orgDept.DeptName; orgDept.TreeLevel = 0; orgDept.DeptOrder = c; } } }
public JsonResult GetOrgChart2(string fid) { //人员类别设置 string sql = "select count(0) as Num,DeptUid from Employee where 1=1 "; DynamicParameters parameters = new DynamicParameters(); string empCategorys = _configService.GetSysParamValue("system.stat.empcategory"); if (empCategorys.IsPresent()) { sql += " and EmpCategory in @EmpCategorys "; parameters.Add("EmpCategorys", new List <string>(empCategorys.Split(','))); } //List<OrgDept> deptList = _dbContext.QueryEntity<OrgDept>(true); //查找有权限部门 IEnumerable <OrgDept> deptList = _rbacService.GetDeptInfoAuthority(_applicationContext.CurrentRoleUid); IEnumerable <string> powerdepts = deptList.Where(d => d.HasPartPower == false).Select(d => d.Fid); if (powerdepts != null && powerdepts.Any()) { sql += " and DeptUid in @PowerDepts"; parameters.Add("PowerDepts", powerdepts); } sql += " group by DeptUid"; IEnumerable <DeptStat> list = _dbContext.Query <DeptStat>(sql, parameters); //获取选中部门 OrgDept parent = deptList.FirstOrDefault <OrgDept>(d => d.Fid == fid); //过滤子部门 根据DeptCode IEnumerable <OrgDept> depts = deptList.Where(d => d.DeptCode.StartsWith(parent.DeptCode, StringComparison.OrdinalIgnoreCase)).OrderBy(d => d.DeptOrder); var employees = _dbContext.QueryAll <Fap.Core.Rbac.Model.Employee>(); //人数计算 depts.ToList().ForEach((d) => { d.EmpNum = (list.FirstOrDefault(e => e.DeptUid == d.Fid)?.Num.ToString() ?? "0").ToInt(); }); depts.ToList().ForEach((d) => { d.EmpNum = depts.Where(dd => dd.DeptCode.StartsWith(d.DeptCode, StringComparison.OrdinalIgnoreCase)).Sum(dd => dd.EmpNum); if (d.DeptManager.IsPresent()) { d.DeptManagerMC = employees.FirstOrDefault(e => e.Fid == d.DeptManager)?.EmpName; } if (d.Director.IsPresent()) { d.DirectorMC = employees.FirstOrDefault(e => e.Fid == d.Director)?.EmpName; } }); IEnumerable <OrgChartNode2> nodeList = depts .Select <OrgDept, OrgChartNode2>(d => new OrgChartNode2 { Key = d.Fid, Parent = d.Pid, DeptName = d.DeptName, DeptCode = d.DeptCode, ManagerUid = d.DeptManager, ManagerName = d.DeptManagerMC, DirectorUid = d.Director, DirectorName = d.DirectorMC, DeptNum = d.EmpNum.ToString() }); //IEnumerable<OrgChartNode> nodeList = deptList.Select<OrgDept, OrgChartNode>(d => new OrgChartNode { Id = d.Id, Parent = (deptList.FirstOrDefault(t => t.Fid == d.Pid) == null ? 0 : deptList.FirstOrDefault(t => t.Fid == d.Pid).Id), Text = d.DeptName, ExtendData=d.DeptCode }); return(Json(nodeList)); }
public override void AfterEntityDelete(object entity) { //通过上面的动态删除子集的时候调用 OrgDept orgDept = entity as OrgDept; //string fid = orgDept.Fid; HandleDelete(entity, orgDept.Fid, orgDept.Pid); }
private void ValideDelete(string fid) { int c = _dbContext.Count <Employee>("DeptUid=@Fid", new DynamicParameters(new { Fid = fid })); if (c > 0) { OrgDept dept = _dbContext.Get <OrgDept>(fid); throw new Exception($"[{dept.DeptName}]还有员工,不能删除!"); } }
/// <summary> /// 更新前 /// </summary> public override void BeforeDynamicObjectUpdate(FapDynamicObject fapDynamicData) { string fid = fapDynamicData.Get("Fid").ToString(); OrgDept orgDept = _dbContext.Get <OrgDept>(fid); string pid = fapDynamicData.Get("Pid").ToString(); //父部门没变化 if (pid != orgDept.Pid) { HandlerOrgdept(fapDynamicData); } }
public override void BeforeEntityUpdate(object entity) { OrgDept orgDept = entity as OrgDept; string fid = orgDept.Fid; OrgDept oriDept = _dbContext.Get <OrgDept>(fid); string pid = orgDept.Pid; //父部门没变化 if (pid != oriDept.Pid) { HandlerOrgdept(orgDept); } }
/// <summary> /// 更新前 /// </summary> public override void BeforeDynamicObjectUpdate(dynamic fapDynamicData) { dynamic dynamicData = fapDynamicData; string fid = dynamicData.Fid; string sql = $"select * from OrgDept where Fid='{fid}'"; OrgDept oriDept = _dbContext.QueryFirst <OrgDept>(sql, null, false, _dbSession); string pid = dynamicData.Pid; //父部门没变化 if (pid == oriDept.Pid && pid.IsNotNullOrEmpty()) { OrgDept pDept = _dbContext.Get <OrgDept>(pid, false, _dbSession); dynamicData.FullName = pDept.FullName + "/" + dynamicData.DeptName; } else { //父部门不为空 if (pid.IsNotNullOrEmpty()) { DynamicParameters param = new DynamicParameters(); param.Add("Fid", pid); IEnumerable <OrgDept> list = _dbContext.QueryWhere <OrgDept>(" Fid=@Fid or Pid=@Fid", param, false, _dbSession); OrgDept pDept = list.First <OrgDept>(d => d.Fid == pid); dynamicData.PCode = pDept.DeptCode; dynamicData.TreeLevel = pDept.TreeLevel + 1; if (dynamicData.ContainsKey("DeptOrder") && dynamicData.DeptOrder == 0) { dynamicData.DeptOrder = list.Count(); } dynamicData.FullName = pDept.FullName + "/" + dynamicData.DeptName; var childs = list.Where(d => d.Pid == pid); if (childs == null || childs.Count() < 1) { dynamicData.DeptCode = pDept.DeptCode + "01"; } else { string maxCode = childs.Max(d => d.DeptCode); dynamicData.DeptCode = (maxCode.ToInt32() + 1).ToString(); } } else { dynamicData.DeptCode = "1"; dynamicData.FullName = dynamicData.DeptName; dynamicData.TreeLevel = 1; dynamicData.DeptOrder = 1; } } }
public bool TryGetValue(string fid, out OrgDept fapOrg) { if (!_initialized) { Init(); } var result = _allOrgs.FirstOrDefault <OrgDept>(f => f.Fid == fid); if (result != null) { fapOrg = result; return(true); } fapOrg = null; return(false); }
public override void AfterEntityUpdate(object entity) { OrgDept orgDept = entity as OrgDept; string fid = orgDept.Fid; //检查是否有子 var childs = _dbContext.Query <OrgDept>("select * from OrgDept where Pid=@Pid", new DynamicParameters(new { Pid = fid })); if (childs.Any()) { string deptCode = orgDept.DeptCode; string fullName = orgDept.FullName; int level = orgDept.TreeLevel; HandlerChildsEdit(deptCode, fullName, level, childs); } //同步其他系統,放入隊列 DataSynchDynamicObject(orgDept, DataChangeTypeEnum.UPDATE); _appDomain.OrgDeptSet.Refresh(); }
private void HandleDelete(object fapDynamicData, string fid, string pid) { if (pid.IsPresent()) { var pchilds = _dbContext.Query <OrgDept>("select * from OrgDept where Pid=@Pid", new DynamicParameters(new { Pid = pid })); if (!pchilds.Any()) { //如果父部门无子部门,修改父部门末级标记 OrgDept parentOrgDept = _dbContext.Get <OrgDept>(pid); if (parentOrgDept != null) { parentOrgDept.IsFinal = 1; //简单修改末级标记简单处理 _dbContext.Execute("Update OrgDept set IsFinal=1 where Fid=@Fid", new DynamicParameters(new { Fid = parentOrgDept.Fid })); DataSynchDynamicObject(parentOrgDept, DataChangeTypeEnum.UPDATE); } } } var rd = _appDomain.RoleDeptSet.Where(d => d.DeptUid == fid); if (rd.Any()) { //删除角色部门中的数据 DynamicParameters param = new DynamicParameters(); param.Add("Fid", fid); _dbContext.DeleteExec(nameof(FapRoleDept), "DeptUid=@Fid", param); _appDomain.RoleDeptSet.Refresh(); } //删除子部门 IEnumerable <OrgDept> childs = _dbContext.Query <OrgDept>("select * from OrgDept where Pid=@Pid", new DynamicParameters(new { Pid = fid })); if (childs.Any()) { HandlerChildsDelete(childs); } _appDomain.OrgDeptSet.Refresh(); //同步其他系统 放入队列 DataSynchDynamicObject(fapDynamicData, DataChangeTypeEnum.DELETE); }
// POST: api/Common public JsonResult GetOrgDepts(string pid) { IEnumerable <OrgDept> listDepts = null; OrgDept pDept = null; if (pid.IsMissing()) { pDept = _dbContext.QueryFirstOrDefaultWhere <OrgDept>("(Pid='' or Pid='~' or Pid='0')"); var listDept = _dbContext.QueryAll <OrgDept>().AsList(); listDept.Remove(pDept); listDepts = listDept; } else { pDept = _dbContext.Get <OrgDept>(pid); listDepts = _dbContext.QueryWhere <OrgDept>("DeptCode like '" + pDept.DeptCode + "%'"); } List <TreeDataView> oriList = listDepts.Select(t => new TreeDataView { Id = t.Fid.ToString(), Pid = t.Pid.ToString(), Data = new { deptCode = t.DeptCode }, Text = t.DeptName, Icon = "icon-folder orange ace-icon fa fa-folder" }).ToList <TreeDataView>(); List <TreeDataView> tree = new List <TreeDataView>(); TreeDataView treeRoot = new TreeDataView() { Id = pDept.Fid, Text = pDept.DeptName, Data = new { deptCode = pDept.DeptCode }, State = new NodeState { Opened = true }, Icon = "icon-folder orange ace-icon fa fa-folder", }; tree.Add(treeRoot); TreeViewHelper.MakeTree(treeRoot.Children, oriList, treeRoot.Id); return(JsonIgnoreNull(tree)); }
/// <summary> /// 获取带权限的部门列表,如果仅仅是部分权限 OrgDept属性HasPartPower=true /// </summary> /// <param name="roleUid"></param> /// <param name="roleDepts"></param> /// <returns></returns> public bool TryGetValueByRole(string roleUid, out IEnumerable <OrgDept> orgDepts) { if (!_initialized) { Init(); } var roleDepts = _allRoleDept.Where <FapRoleDept>(f => f.RoleUid == roleUid); IEnumerable <OrgDept> allDepts = _fapPlatformDomain.OrgDeptSet; OrgDept rootDept = allDepts.FirstOrDefault(d => string.IsNullOrWhiteSpace(d.Pid) || d.Pid == "#" || d.Pid == "~" || d.Pid == ""); if (roleDepts.Any()) { var roleDeptList = roleDepts.AsList(); if (roleDeptList.Exists(r => r.DeptUid == rootDept.Fid)) { orgDepts = allDepts; } else { List <OrgDept> powerDepts = new List <OrgDept>(); if (rootDept != null) { var croot = rootDept.Clone() as OrgDept; croot.HasPartPower = true; powerDepts.Add(croot); } foreach (var rd in roleDepts) { OrgDept tempDept = allDepts.FirstOrDefault <OrgDept>(d => d.Fid == rd.DeptUid); if (tempDept != null) { powerDepts.Add(tempDept); AddParentOrgDept(tempDept); } } orgDepts = powerDepts; void AddParentOrgDept(OrgDept tempDept) { if (tempDept != null && tempDept.Fid != rootDept.Fid) { var tempDeptParent = allDepts.FirstOrDefault <OrgDept>(d => d.Fid == tempDept.Pid); //存在父部门 if (tempDeptParent != null) { //父部门没在权限中,且还没包含进去 if (!roleDeptList.Exists(r => r.DeptUid == tempDeptParent.Fid) && !powerDepts.Exists(d => d.Fid == tempDeptParent.Fid)) { var cp = tempDeptParent.Clone() as OrgDept; cp.HasPartPower = true; powerDepts.Add(cp); } AddParentOrgDept(tempDeptParent); } } } } return(true); } orgDepts = Enumerable.Empty <OrgDept>(); return(false); }
private void BiuldOrgDept(IEnumerable <OrgDept> cOrgDepts, IEnumerable <OrgDept> allOrgDept, OrgDept pOrgDept) { if (cOrgDepts != null && cOrgDepts.Any()) { pOrgDept.Children = cOrgDepts; foreach (OrgDept dept in cOrgDepts) { var tempDepts = allOrgDept.Where(d => d.Pid == dept.Fid); BiuldOrgDept(tempDepts, allOrgDept, dept); } } }
public Pageable AnalysisPostData(JqGridPostData jqGridPostData) { IEnumerable <FapColumn> fapColumns = _dbContext.Columns(jqGridPostData.QuerySet.TableName); jqGridPostData.Filters = jqGridPostData.Filters.IsPresent() ? jqGridPostData.Filters.Replace("query ", "select ") : ""; //矫正当前页为0的情况 if (jqGridPostData.Page < 0) { jqGridPostData.Page = 1; } QuerySet qs = jqGridPostData.QuerySet; Pageable pageable = new Pageable(_dbContext) { TableName = qs.TableName, QueryCols = qs.QueryCols, HistoryTimePoint = jqGridPostData.TimePoint }; //设置统计 if (qs.Statsetlist != null && qs.Statsetlist.Any()) { pageable.AddStatField(qs.Statsetlist); } if (qs.Parameters != null && qs.Parameters.Count > 0) { foreach (var param in qs.Parameters) { pageable.AddParameter(param.ParamKey, param.ParamValue); } } //优先级高 if (jqGridPostData.Sidx.IsPresent()) { var sidxs = jqGridPostData.Sidx.SplitComma(); foreach (var sidx in sidxs) { if (sidx.IsPresent()) { string[] odx = sidx.Trim().Split(' '); if (odx != null) { var col = fapColumns.First(f => f.ColName == odx[0]); string colName = col.ColName; if (col.CtrlType == FapColumn.CTRL_TYPE_REFERENCE) { colName += "MC"; } if (odx.Length > 1) { pageable.OrderBy.AddOrderByCondtion(colName, odx[1]); } else { pageable.OrderBy.AddOrderByCondtion(colName, jqGridPostData.Sord); } } } } } if (qs.OrderByList != null && qs.OrderByList.Count > 0) { foreach (var orderby in qs.OrderByList) { pageable.OrderBy.AddOrderByCondtion(orderby.Field, orderby.Direction); } } //构造初始化条件,如果没有过滤条件,又设置了初始化条件则设置初始化条件。或者设置了过滤条件且初始化条件为全局条件则同样设置where条件 if (qs.GlobalWhere.IsPresent()) { pageable.AddWhere(qs.GlobalWhere); } if (jqGridPostData.Filters.IsMissing() && qs.InitWhere.IsPresent()) { pageable.AddWhere(qs.InitWhere); } //页面级条件 JsonFilterToSql jfs = new JsonFilterToSql(_dbContext); if (jqGridPostData.PageCondition.IsPresent()) { pageable.AddWhere(jfs.BuilderFilter(pageable.TableName, jqGridPostData.PageCondition), QuerySymbolEnum.AND); } //构造jqgrid过滤条件 if (jqGridPostData.Filters.IsPresent()) { pageable.AddWhere(jfs.BuilderFilter(pageable.TableName, jqGridPostData.Filters), QuerySymbolEnum.AND); //string filterWhere = JsonFilterToSql.BuildFilterCondition(fapColumns, jqGridPostData.Filters); } //事件处理 //actionSimplepageable?.Invoke(pageable); pageable.CurrentPage = jqGridPostData.Page; pageable.PageSize = jqGridPostData.Rows; //数据权限 string dataWhere = DataWhere(); if (dataWhere.IsPresent()) { pageable.AddWhere(dataWhere); } //解析条件 pageable.Where = AnalysisWhere(pageable.Where); return(pageable); string AnalysisWhere(string where) { if (where.IsMissing()) { return(""); } //获得安全sql where = where.FilterDangerSql(); //替换部门权限占位符 if (where.IndexOf(FapPlatformConstants.DepartmentAuthority) > -1) { where = where.Replace(FapPlatformConstants.DepartmentAuthority, DeptWhere()); } return(where.ReplaceIgnoreCase("query", "select ")); } string DeptWhere() { var roledepts = _rbacService.GetRoleDeptList(_applicationContext.CurrentRoleUid); if (roledepts.Any()) { return(string.Join(",", roledepts.Select(d => "'" + d.DeptUid + "'"))); } else { return("'meiyou'"); } } //数据权限 string DataWhere() { string where = string.Empty; var roleDatas = _rbacService.GetRoleDataList(_applicationContext.CurrentRoleUid); if (roleDatas != null && roleDatas.Any()) { var rd = roleDatas.FirstOrDefault <FapRoleData>(r => r.TableUid == qs.TableName); if (rd != null) { where = rd.SqlCondition; string pattern = FapPlatformConstants.VariablePattern; Regex reg = new Regex(pattern); MatchCollection matchs = reg.Matches(where); foreach (var mtch in matchs) { int length = mtch.ToString().Length - 3; string colName = mtch.ToString().Substring(2, length); if (colName.EqualsWithIgnoreCase("DeptUid")) { where = where.Replace(mtch.ToString(), _applicationContext.DeptUid); } else if (colName.EqualsWithIgnoreCase("CurrentRoleUid")) { where = where.Replace(mtch.ToString(), _applicationContext.CurrentRoleUid); } else if (colName.EqualsWithIgnoreCase("EmpUid")) { where = where.Replace(mtch.ToString(), _applicationContext.EmpUid); } else if (colName.EqualsWithIgnoreCase("DeptCode")) { string deptCode = _applicationContext.DeptCode; if (deptCode.IsMissing()) { OrgDept dept = _dbContext.Get <OrgDept>(_applicationContext.DeptUid); deptCode = dept.DeptCode; } where = where.Replace(mtch.ToString(), deptCode); } } } } return(where); } }
public override void BeforeEntityDelete(object entity) { OrgDept dept = entity as OrgDept; ValideDelete(dept.Fid); }