using APT.BaseData.Domain.ApiModel; using APT.BaseData.Domain.Entities; using APT.BaseData.Domain.Entities.FM; using APT.BaseData.Domain.Entities.OP; using APT.BaseData.Domain.Entities.PF; using APT.BaseData.Domain.Enums; using APT.BaseData.Domain.Enums.PF; using APT.BaseData.Domain.IServices.FM; using APT.BaseData.Domain.IServices.OP; using APT.BaseData.Domain.Msg; using APT.BaseData.Services.Services.FM; using APT.Infrastructure.Api; using APT.Infrastructure.Core; using APT.Migrations; using APT.MS.Domain.ApiModel; using APT.MS.Domain.Entities.HM; using APT.MS.Domain.Entities.OG; using APT.MS.Domain.Entities.PF; using APT.MS.Domain.Entities.SC; using APT.MS.Domain.Entities.SC.PT; using APT.MS.Domain.Entities.SC.SC; using APT.MS.Domain.Entities.SE; using APT.MS.Domain.Entities.SK; using APT.MS.Domain.Enums; using APT.Utility; using Castle.Core.Internal; using InfluxData.Net.InfluxDb.Models.Responses; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.DependencyModel; using MySqlX.XDevAPI.Common; using NPOI.SS.Formula.Functions; using StackExchange.Redis; using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Security.Cryptography; namespace APT.FM.WebApi.Controllers.Api.FM { /// /// 用户转移管理接口 /// [Route("api/FM/FMUserTransfer")] public class FMUserTransferController : AuthorizeApiController { //IFMUserService UserService { get; set; } //IFMDepartmentService DepartmentService { get; set; } //IFMNotificationTaskService NotificationTaskService { get; set; } //IOPTenantDBConnService OPTenantDBConnService { get; set; } IOPTenantDBConnService TenantDBConnService { get; set; } /// /// /// /// public FMUserTransferController(IOPTenantDBConnService tenantDBConnService) { //IFMUserService personnelService, IFMDepartmentService departmentService, IFMNotificationTaskService notificationTaskService, IOPTenantDBConnService opTenantDBConnService //UserService = personnelService; //DepartmentService = departmentService; //NotificationTaskService = notificationTaskService; //OPTenantDBConnService = opTenantDBConnService; TenantDBConnService = tenantDBConnService; } /// /// 公司级人员调整 /// /// 过滤实体 /// [HttpPost, Route("GetUserInfoByCode")] public JsonActionResult GetUserInfoByCode([FromBody] KeywordFilter filter) { return SafeExecute(() => { if (string.IsNullOrEmpty(filter.Keyword)) { return null; } T_OP_ALLUSER modelAllUser = null; using (var context = new MigrationContext()) { modelAllUser = context.GetEntity(e => e.CODE == filter.Keyword && !e.IS_DELETED, null, null); } if (modelAllUser == null) { return null;//没找到此登录账号 } if (!modelAllUser.ORG_ID.HasValue) { throw new Exception("用户信息异常!"); } T_FM_USER_TRANSFER result = null; string connOld = TenantDBConnService.GetConnByORGID(modelAllUser.ORG_ID.Value); T_FM_USER modelU = null; T_FM_DEPARTMENT modelDep = null; T_FM_DEPARTMENT modelDepCom = null; T_FM_USER_POST modelPost = null; using (var context = new MigrationContext(connOld)) { modelU = context.GetEntity(e => e.CODE == filter.Keyword && !e.IS_DELETED, null, null); if (modelU == null) { throw new Exception("数据异常"); } if (modelU.PERSON_ID.HasValue) { var person = context.GetEntity(e => e.ID == modelU.PERSON_ID.Value, null, "Nav_DepartMent", "Nav_Post"); modelDep = person.Nav_DepartMent; modelPost = person.Nav_Post; } if (modelDep != null && !modelDep.PARENT_ID.HasValue && modelDep.DEPARTMENT_TYPE == 5) { modelDepCom = modelDep; } else { modelDepCom = context.GetEntity(e => e.DEPARTMENT_TYPE == 5 && !e.PARENT_ID.HasValue, null, null); } } result = new T_FM_USER_TRANSFER(); if (modelDepCom != null) { result.COMPANYNAME_OLD = modelDepCom.NAME; } if (modelDep != null) { result.DEPARTMENTNAME_OLD = modelDep.NAME; result.DEPARTMENT_ID_OLD = modelDep.ID; } if (modelPost != null) { result.POST_ID_OLD = modelPost.ID; result.POSTNAME_OLD = modelPost.NAME; } result.NAME = modelU.NAME; result.CODE = modelU.CODE; result.USER_ID_OLD = modelU.ID; result.ORG_ID_OLD = modelU.ORG_ID; return result; }); } /// /// 排序分页查询数据 /// /// 分页过滤实体 /// [HttpPost, Route("OrderPagedDEP")] public PagedActionResult OrderPagedDEP([FromBody] KeywordPageFilter pageFilter) { return SafeGetPagedData(delegate (PagedActionResult result) { Guid ORGIDNEW = Guid.Empty; string NAME = string.Empty; if (pageFilter.FilterGroup != null && pageFilter.FilterGroup.Rules.Count() > 0) { foreach (var item in pageFilter.FilterGroup.Rules) { if (item.Field == "Parameter22" && item.Value != null) { try { ORGIDNEW = new Guid(item.Value.ToString()); } catch { ORGIDNEW = Guid.Empty; } } else if (item.Field == "NAME" && item.Value != null) { NAME = item.Value.ToString(); } } } if (string.IsNullOrEmpty(NAME) && pageFilter.FilterGroup.Groups.Count() > 0) { foreach (var item in pageFilter.FilterGroup.Groups) { foreach (var itemu in item.Rules) { if (itemu.Field == "NAME" && itemu.Value != null) { NAME = itemu.Value.ToString(); } } } } if (ORGIDNEW == Guid.Empty) { throw new Exception("请先选择转入公司后再选择!"); } string conn = TenantDBConnService.GetConnByORGID(ORGIDNEW); using (var context = new MigrationContext(conn)) { Dictionary dic = new Dictionary(); dic.Add("DEPARTMENT_TYPE", DbOrder.ASC); Expression> expression = e => !e.IS_DELETED && e.ENABLE_STATUS == 0; if (!string.IsNullOrEmpty(NAME)) { expression = expression.And(e => e.NAME.Contains(NAME)); } var data = context.GetOrderEntities(expression, dic, null, null); result.Data = data.Skip(pageFilter.Start).Take(pageFilter.Limit).ToList(); result.TotalCount = data.Count(); } }); } /// /// 排序分页查询数据 /// /// 分页过滤实体 /// [HttpPost, Route("OrderPagedUPost")] public PagedActionResult OrderPagedUPost([FromBody] KeywordPageFilter pageFilter) { return SafeGetPagedData(delegate (PagedActionResult result) { Guid ORGIDNEW = Guid.Empty; string NAME = string.Empty; if (pageFilter.FilterGroup != null && pageFilter.FilterGroup.Rules.Count() > 0) { foreach (var item in pageFilter.FilterGroup.Rules) { if (item.Field == "Parameter22" && item.Value != null) { try { ORGIDNEW = new Guid(item.Value.ToString()); } catch { ORGIDNEW = Guid.Empty; } } else if (item.Field == "NAME" && item.Value != null) { NAME = item.Value.ToString(); } } } if (string.IsNullOrEmpty(NAME) && pageFilter.FilterGroup.Groups.Count() > 0) { foreach (var item in pageFilter.FilterGroup.Groups) { foreach (var itemu in item.Rules) { if (itemu.Field == "NAME" && itemu.Value != null) { NAME = itemu.Value.ToString(); } } } } if (ORGIDNEW == Guid.Empty) { throw new Exception("请先选择转入公司后再选择!"); } string conn = TenantDBConnService.GetConnByORGID(ORGIDNEW); using (var context = new MigrationContext(conn)) { Dictionary dic = new Dictionary(); dic.Add("NAME", DbOrder.ASC); Expression> expression = e => !e.IS_DELETED; if (!string.IsNullOrEmpty(NAME)) { expression = expression.And(e => e.NAME.Contains(NAME)); } var data = context.GetOrderEntities(expression, dic, null, null); result.Data = data.Skip(pageFilter.Start).Take(pageFilter.Limit).ToList(); result.TotalCount = data.Count(); } }); } /// /// 检查更新 (分为主要检查人/非主要检查人 ) 更新 审批流参考 EvaluvationPlanController AddFullUpdate /// /// /// [HttpPost, Route("FullUpdate")] public JsonActionResult FullUpdate([FromBody] T_FM_USER_TRANSFER entity) { return SafeExecute(() => { if (string.IsNullOrEmpty(entity.CODE)) { throw new Exception("工号不能为空!"); } if (entity.REMARK != null && entity.REMARK.Length > 200) { throw new Exception("请精简备注到200字以内!"); } //if (entity.STATUS == PFStandardStatus.Draft) //{ // entity.CREATE_TIME = DateTime.Now; // entity.USERNAME_TRANSFER = APT.Infrastructure.Api.AppContext.CurrentSession.UserName; // this.UnifiedCommit(() => // { // UpdateEntityNoCommit(entity); // }); // return true; //} if (string.IsNullOrEmpty(entity.COMPANYNAME)) { throw new Exception("请选择转入公司"); } if (string.IsNullOrEmpty(entity.DEPARTMENTNAME) || entity.DEPARTMENT_ID == Guid.Empty) { throw new Exception("请选择新组织"); } if (entity.ORG_ID_OLD == Guid.Empty || entity.ORG_ID_NEW == Guid.Empty) { throw new Exception("获取数据异常,请重新操作"); } else if (entity.ORG_ID_OLD == entity.ORG_ID_NEW) { throw new Exception("公司内部的转移请勿在此处操作!"); } //人员组织调动 //判断 工号 新公司 是否存在 //原公司 账户禁用 T_FM_USER T_FM_PERSON //数据 变更 ORGID 存入 新组织 配置基础权限 // ops T_OP_ALLUSER TENANT 修改 //保存本次的操作数据 Guid guidAdmid = new Guid("11111111-1111-1111-1111-111111111111"); string connOld = TenantDBConnService.GetConnByORGID(entity.ORG_ID_OLD.Value); string connNEW = TenantDBConnService.GetConnByORGID(entity.ORG_ID_NEW.Value); T_FM_TEAM modelT = null; if (entity.DEPARTMENT_ID.HasValue) { using (var context = new MigrationContext(connNEW)) { var modelND = context.GetEntity(e => e.ID == entity.DEPARTMENT_ID.Value, null, null); if (modelND.DEPARTMENT_TYPE == 20) { modelT = context.GetEntity(e => e.DEPARTMENT_ID == entity.DEPARTMENT_ID.Value, null, null); if (modelT == null) { throw new Exception("请先到转入组织架构添加班组!"); } } } } T_FM_USER modelNwe = null; IEnumerable listUserCheck = null; using (var context = new MigrationContext(connNEW)) { listUserCheck = context.GetEntities(e => e.CODE == entity.CODE, null, null); } if (listUserCheck != null && listUserCheck.Count() > 0) { //如果有 并且名字一样 直接启用 //否则 直接提示 然后需要管理员操作 var userNCheck = listUserCheck.FirstOrDefault(e => e.ENABLE_STATUS == 0); if (userNCheck != null) { throw new Exception("转入公司该账号【" + entity.CODE + "】有对应启用用户,请联系管理员!"); } userNCheck = listUserCheck.FirstOrDefault(e => e.NAME == entity.NAME);//工号 姓名相同 定位为同一个人 if (userNCheck != null) { entity.USER_ID = userNCheck.ID;//账号重新被启用 modelNwe = userNCheck; } } T_FM_USER modelUOld = null; T_FM_PERSON modelPOld = null;// 有 新组织需要新增 无(新公司有数据 人员信息无需处理) using (var context = new MigrationContext(connOld)) { modelUOld = context.GetEntity(e => e.ID == entity.USER_ID_OLD, null, "Nav_Person"); modelPOld = modelUOld.Nav_Person; if (entity.USER_ID == Guid.Empty && modelPOld == null) { throw new Exception("获取信息有误!"); } modelUOld.Nav_Person = null; modelUOld.ENABLE_STATUS = 1; modelUOld.APPROVE_ROLE_ID = null; modelUOld.TEAM_ID = null; modelUOld.PROJECT_ID = null; modelUOld.USER_TYPE_ID = null; modelUOld.ISTRANSFER = true;//处理信息 modelUOld.MODIFY_TIME = DateTime.Now; modelUOld.MODIFIER_ID = guidAdmid; //APT.Infrastructure.Api.AppContext.CurrentSession.UserID; context.Update(modelUOld); context.SaveChanges(); } //用户信息 if (entity.USER_ID == Guid.Empty) { modelUOld.CREATER_ID = guidAdmid; modelPOld.CREATER_ID = guidAdmid; modelUOld.CREATE_TIME = DateTime.Now; modelPOld.CREATE_TIME = DateTime.Now; } modelUOld.ENABLE_STATUS = 0; modelUOld.ORG_ID = entity.ORG_ID_NEW; modelUOld.MODIFY_TIME = DateTime.Now; modelUOld.MODIFIER_ID = guidAdmid; //APT.Infrastructure.Api.AppContext.CurrentSession.UserID; modelUOld.DEPARTMENT_ID = entity.DEPARTMENT_ID; //人员信息 modelPOld.ORG_ID = entity.ORG_ID_NEW; modelPOld.MODIFY_TIME = DateTime.Now; modelPOld.MODIFIER_ID = guidAdmid; //APT.Infrastructure.Api.AppContext.CurrentSession.UserID; modelPOld.DEPARTMENT_ID = entity.DEPARTMENT_ID; modelPOld.POST_ID = entity.POST_ID; string nameCom = string.Empty; using (var context = new MigrationContext(connNEW)) { var depC = context.GetEntity(e => e.DEPARTMENT_TYPE == 5 && !e.IS_DELETED && e.ENABLE_STATUS == 0, null, null); if (depC != null) { nameCom = depC.NAME; } modelUOld.ISTRANSFER = false; if (entity.USER_ID != Guid.Empty) { context.Update(modelUOld); context.Update(modelPOld); } else { var lisrRole = context.GetEntities(e => e.ISDEFAULT && !e.ISDEFAULT, null, null); List listRole = null; if (lisrRole != null && lisrRole.Count() > 0) { listRole = new List(); foreach (var item in lisrRole) { listRole.Add(new T_FM_USER_BELONG_ROLE() { ID = Guid.NewGuid(), ORG_ID = modelUOld.ORG_ID, USER_ID = modelUOld.ID, BELONG_ROLE_ID = item.ID, CREATE_TIME = DateTime.Now, CREATER_ID = guidAdmid, MODIFIER_ID = guidAdmid }); } } //如果是班组级 有 T_FM_TEAM 表 直接添加 T_FM_TEAM_PERSON 表 T_FM_TEAM_PERSON teamPerson = null; if (modelT != null) { teamPerson = new T_FM_TEAM_PERSON(); teamPerson.ORG_ID = modelUOld.ORG_ID; teamPerson.ID = Guid.NewGuid(); teamPerson.TEAM_ID = modelT.ID;//new Guid(filter.Parameter3); teamPerson.PERSON_ID = modelPOld.ID; teamPerson.CREATE_TIME = DateTime.Now; teamPerson.CREATER_ID = guidAdmid; teamPerson.MODIFIER_ID = guidAdmid; } if (teamPerson != null) context.Add(teamPerson); context.Add(modelUOld); context.Add(modelPOld); if (listRole != null) context.AddEntities(listRole); } context.SaveChanges(); } using (var context = new MigrationContext()) { var modelAll = context.GetEntity(e => e.CODE == entity.CODE, null, null); modelAll.ORG_ID = entity.ORG_ID_NEW; modelAll.TENANT = entity.ORG_ID_NEW.Value.ToString().Substring(0, 3); modelAll.MODIFY_TIME = DateTime.Now; modelAll.MODIFIER_ID = guidAdmid; context.Update(modelAll); context.SaveChanges(); } ////保存单数据 ////检查数据 isCheck=false 不然获取数据可能会有问题 if (!string.IsNullOrEmpty(nameCom)) { entity.COMPANYNAME = nameCom; } entity.USER_ID = modelUOld.ID; entity.CREATE_TIME = DateTime.Now; entity.USERNAME_TRANSFER = APT.Infrastructure.Api.AppContext.CurrentSession.UserName; this.UnifiedCommit(() => { UpdateEntityNoCommit(entity); }); return true; }); } } }