using DocumentServiceAPI.Model.cyDocumentModel; using DocumentServiceAPI.Model.Oder; using DocumentServiceAPI.Model.Permissions; using DocumentServiceAPI.Model.UserInfoModel; using Furion; using Furion.JsonSerialization; using Furion.Logging.Extensions; using Furion.Schedule; using InitQ.Abstractions; using InitQ.Attributes; using InitQ.Cache; using Microsoft.Extensions.Options; using SqlSugar; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DocumentServiceApi.InitQMessage { /// /// 消息接收处理函数 /// public class MessageReceive: IRedisSubscribe { private InitQ.Cache.ICacheService _cacheService; public MessageReceive(InitQ.Cache.ICacheService cacheService) { _cacheService = cacheService; } /// /// 初始化订单处理 /// /// /// [Subscribe(INITQMessageDefine.InitTenantOder)] private async Task InitTenantOder(string msg) { TenantOderInfo? obj = JSON.Deserialize(msg); if(obj==null) { $"InitTenantOder 初始化 msg 对象错误 ,msg为{msg}".LogInformation(); return; } var _db= App.GetService(); Oder oder = new Oder() { Amount = obj.Amount, CreatBy = "消息队列 InitTenantOder", CreatTime = DateTime.Now, Description = obj.Description, EmployeeCount = obj.EmployeeCount, MonthCount = obj.MonthCount, UnitCount = obj.UnitCount, PayType = obj.PayType, PayTime = obj.PayTime, ZcUserID = obj.ZcUserID, ITCode = obj.ITCode, HasDocumentPermission=obj.HasDocumentPermission, HasManagePermission= obj.HasManagePermission, TenantId= obj.TenantId, }; TenantInfo? Tinfo = null; if (obj.TenantId!=null) Tinfo = await _db.Queryable().Where(x => x.Id == obj.TenantId).SingleAsync(); // 如果没有tengdeid 视为新建tenggdeid // else //Tinfo= await _db.Queryable().Where(x=>x.ZcUserID==obj.ZcUserID).SingleAsync(); if(Tinfo==null) { Tinfo = new TenantInfo { ZcUserID = obj.ZcUserID, ItCode = obj.ITCode, CreatBy = "消息队列 InitTenantOder", CreatTime = DateTime.Now, Description = obj.Description, Name =obj.TenantName , PsW = obj.ITCode.Substring(obj.ITCode.Length - 4), }; TenantPermissions ? Mangerpermissions = null; if (oder.HasManagePermission) { Mangerpermissions = new TenantPermissions() { CreatBy = "消息队列 InitTenantOder", CreatTime = DateTime.Now, Description = obj.Description, EmployeeMaxCount = obj.EmployeeCount ?? 0, UnitMaxCount = obj.UnitCount ?? 0, PermissionsType = TenantPermissionsType.Manage, OverTime = DateTime.Now.AddMonths(obj.MonthCount ?? 0), }; } TenantPermissions? DocumentPermissions = null; if (oder.HasDocumentPermission == true) { DocumentPermissions = new TenantPermissions() { CreatBy = "消息队列 InitTenantOder", CreatTime = DateTime.Now, Description = obj.Description, EmployeeMaxCount = obj.EmployeeCount ?? 0, UnitMaxCount = obj.UnitCount ?? 0, PermissionsType = TenantPermissionsType.Document, OverTime = DateTime.Now.AddMonths(obj.MonthCount ?? 0), }; } //新建租户员工 Document_EmployeeInfo employeeInfo = new Document_EmployeeInfo() { EmployeeName = "集团账号", UserName = Tinfo.ItCode, AdviseFlag = 2, UserId = 0, IsWork = 1, UserPassWord = Tinfo.ItCode.Substring(Tinfo.ItCode.Length - 6), Job = "集团用户", IsLogin = true, LastUpdateName = "消息队列 InitTenantOder", LastUpdateTime = DateTime.Now, }; EmployeeAtTenant employeeAtTenant = new EmployeeAtTenant() { CreatBy = "消息队列 InitTenantOder", CreatTime = DateTime.Now, }; Document_TenderUnit tenderUnit = new Document_TenderUnit() { UnitName = obj.TenantName ?? "集团公司", AdviseFlag = 2, UserId = 0, CreatTime = DateTime.Now.ToString("yyyy MM dd"), LastUpdateName = "消息队列 InitTenantOder", LastUpdateTime = DateTime.Now, IsDeled = false, IsEn = true, }; try { await _db.AsTenant().BeginTranAsync(); var id= await _db.Insertable(Tinfo).ExecuteReturnIdentityAsync(); var eid = await _db.Insertable(employeeInfo).ExecuteReturnIdentityAsync(); if (Mangerpermissions != null) { Mangerpermissions.TenantId = id; await _db.Insertable(Mangerpermissions).ExecuteCommandAsync(); } if (DocumentPermissions != null) { DocumentPermissions.TenantId = id; await _db.Insertable(DocumentPermissions).ExecuteCommandAsync(); } employeeAtTenant.TenantID = id; employeeAtTenant.EmployeeID = eid; tenderUnit.TenantId = id; await _db.Insertable(tenderUnit).ExecuteCommandAsync(); await _db.Insertable(employeeAtTenant).ExecuteCommandAsync(); await _db.Insertable(oder).ExecuteCommandAsync(); await _db.AsTenant().CommitTranAsync(); } catch (Exception e) { await _db.AsTenant().RollbackTranAsync(); $"新建租户处理失败 msg:{msg},e:{e.ToString()} BY:消息队列 InitTenantOder".LogInformation(); return; } } else { var Employee = await _db.Queryable((EAT, E) => new JoinQueryInfos( JoinType.Left, EAT.EmployeeID == E.EmployeeId )).Where((EAT, E) => EAT.TenantID==Tinfo.Id).Select((EAT,E)=>E).FirstAsync(); Tinfo.ItCode = obj.ITCode; Tinfo.UpdataBy = "消息队列 InitTenantOder"; Tinfo.UpdataTime = DateTime.Now; Tinfo.IsDel = false; Tinfo.IsEn = true; if (oder.HasManagePermission == true) { var tp = await _db.Queryable().Where(x => x.TenantId == Tinfo.Id&&x.PermissionsType== TenantPermissionsType.Manage && x.IsEn == true && x.IsDel == false).FirstAsync(); try { await _db.AsTenant().BeginTranAsync(); if (Tinfo.ItCode != obj.ITCode) { await _db.Updateable(Tinfo).ExecuteCommandAsync(); }; if (tp == null) { tp = new TenantPermissions() { CreatBy = "消息队列 InitTenantOder", CreatTime = DateTime.Now, IsDel = false, IsEn = true, EmployeeMaxCount = obj.EmployeeCount ?? 0, UnitMaxCount = obj.UnitCount ?? 0, OverTime = DateTime.Now.AddMinutes(obj.MonthCount ?? 0), TenantId = Tinfo.Id, PermissionsType= TenantPermissionsType.Manage, }; await _db.Insertable(tp).ExecuteCommandAsync(); } else { tp.IsDel = false; tp.IsEn = true; tp.UnitMaxCount = obj.UnitCount ?? tp.UnitMaxCount; tp.EmployeeMaxCount = obj.EmployeeCount ?? tp.EmployeeMaxCount; tp.OverTime = tp.OverTime.AddMonths(obj.MonthCount ?? 0); tp.UpdataBy = "消息队列 InitTenantOder"; tp.UpdataTime = DateTime.Now; await _db.Updateable(tp).ExecuteCommandAsync(); } if (obj.ITCode != Employee.UserName) { //如果发现用户名已经更改,则该集团员工用户名跟随更改 Employee.UserName = obj.ITCode; Employee.LastUpdateName = "消息队列 InitTenantOder"; Employee.LastUpdateTime = DateTime.Now; await _db.Updateable(Employee).ExecuteCommandAsync(); } await _db.Insertable(oder).ExecuteCommandAsync(); await _db.AsTenant().CommitTranAsync(); } catch (Exception e) { await _db.AsTenant().RollbackTranAsync(); $"修改租户权限失败 msg:{msg},e:{e.ToString()} By:消息队列 InitTenantOder".LogInformation(); return; } } if (oder.HasDocumentPermission == true) { var tp = await _db.Queryable().Where(x => x.TenantId == Tinfo.Id && x.PermissionsType == TenantPermissionsType.Document && x.IsEn == true && x.IsDel == false).FirstAsync(); try { await _db.AsTenant().BeginTranAsync(); if (Tinfo.ItCode != obj.ITCode) { await _db.Updateable(Tinfo).ExecuteCommandAsync(); }; if (tp == null) { tp = new TenantPermissions() { CreatBy = "消息队列 InitTenantOder", CreatTime = DateTime.Now, IsDel = false, IsEn = true, EmployeeMaxCount = obj.EmployeeCount ?? 0, UnitMaxCount = obj.UnitCount ?? 0, OverTime = DateTime.Now.AddMinutes(obj.MonthCount ?? 0), TenantId = Tinfo.Id, PermissionsType = TenantPermissionsType.Document, }; await _db.Insertable(tp).ExecuteCommandAsync(); } else { tp.IsDel = false; tp.IsEn = true; tp.UnitMaxCount = obj.UnitCount ?? tp.UnitMaxCount; tp.EmployeeMaxCount = obj.EmployeeCount ?? tp.EmployeeMaxCount; tp.OverTime = tp.OverTime.AddMonths(obj.MonthCount ?? 0); tp.UpdataBy = "消息队列 InitTenantOder"; tp.UpdataTime = DateTime.Now; await _db.Updateable(tp).ExecuteCommandAsync(); } if (obj.ITCode != Employee.UserName) { //如果发现用户名已经更改,则该集团员工用户名跟随更改 Employee.UserName = obj.ITCode; Employee.LastUpdateName = "消息队列 InitTenantOder"; Employee.LastUpdateTime = DateTime.Now; await _db.Updateable(Employee).ExecuteCommandAsync(); } await _db.Insertable(oder).ExecuteCommandAsync(); await _db.AsTenant().CommitTranAsync(); } catch (Exception e) { await _db.AsTenant().RollbackTranAsync(); $"修改租户权限失败 msg:{msg},e:{e.ToString()} By:消息队列 InitTenantOder".LogInformation(); return; } } if(oder.HasDocumentPermission!=true&&oder.HasManagePermission!=true) { //如果两个都不是,name就是增加人数或者增加公司数量,只有在管理系统中产生 var tp = await _db.Queryable().Where(x => x.TenantId == Tinfo.Id && x.PermissionsType == TenantPermissionsType.Manage&&x.IsEn==true&&x.IsDel==false).FirstAsync(); try { await _db.AsTenant().BeginTranAsync(); if (Tinfo.ItCode != obj.ITCode) { await _db.Updateable(Tinfo).ExecuteCommandAsync(); }; if (tp == null) { //没有TP 则不直接增加 报错 await _db.AsTenant().RollbackTranAsync(); $"修改员工人数,公司员工权限失败 已丢弃处理 msg:{msg} By:消息队列 InitTenantOder".LogInformation(); return; } else { tp.IsDel = false; tp.IsEn = true; tp.UnitMaxCount = tp.UnitMaxCount+=(obj.UnitCount??0); tp.EmployeeMaxCount = tp.UnitMaxCount += (obj.UnitCount ?? 0); tp.OverTime = tp.OverTime.AddMonths(obj.MonthCount ?? 0); tp.UpdataBy = "消息队列 InitTenantOder"; tp.UpdataTime = DateTime.Now; await _db.Updateable(tp).ExecuteCommandAsync(); } if (obj.ITCode != Employee.UserName) { //如果发现用户名已经更改,则该集团员工用户名跟随更改 Employee.UserName = obj.ITCode; Employee.LastUpdateName = "消息队列 InitTenantOder"; Employee.LastUpdateTime = DateTime.Now; await _db.Updateable(Employee).ExecuteCommandAsync(); } await _db.Insertable(oder).ExecuteCommandAsync(); await _db.AsTenant().CommitTranAsync(); return; } catch (Exception e) { await _db.AsTenant().RollbackTranAsync(); $"修改租户权限失败 msg:{msg},e:{e.ToString()} By:消息队列 InitTenantOder".LogInformation(); return; } } } } /// /// 发送消息给用户中,用户中心会响应这个消息 /// /// /// [SubscribeDelay(INITQMessageDefine.DTSendMessage)] private async Task SendMessage(string msg) { await _cacheService.ListRightPushAsync(INITQMessageDefine.DTSendMessage, msg); } } }