username@email.com
2024-12-26 90858c80d9921b555119f41060c1f883f6e6ffc5
DocumentServiceApi.InitQMessage/MessageReceive.cs
@@ -1,5 +1,16 @@
using InitQ.Abstractions;
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;
@@ -13,19 +24,416 @@
    /// </summary>
    public class MessageReceive: IRedisSubscribe
    {
        private InitQ.Cache.ICacheService _cacheService;
      public    MessageReceive(InitQ.Cache.ICacheService cacheService)
        {
            _cacheService = cacheService;
        }
        /// <summary>
        /// 初始化订单处理
        /// </summary>
        /// <param name="msg"></param>
        /// <returns></returns>
        [Subscribe(INITQMessageDefine.InitTentOder)]
        /// <returns></returns>
        [Subscribe(INITQMessageDefine.InitTenantOder)]
        private async Task InitTenantOder(string msg)
        {
            TenantOderInfo? obj = JSON.Deserialize<TenantOderInfo>(msg);
            if(obj==null)
            {
                $"InitTenantOder 初始化 msg 对象错误 ,msg为{msg}".LogInformation<MessageReceive>();
                return;
            }
            var    _db=  App.GetService<ISqlSugarClient>();
            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<TenantInfo>().Where(x => x.Id == obj.TenantId).SingleAsync();
           // 如果没有tengdeid 视为新建tenggdeid
         //   else
         //Tinfo= await _db.Queryable<TenantInfo>().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<MessageReceive>();
                    return;
                }
            }
            else
            {
                var Employee = await _db.Queryable<EmployeeAtTenant,Document_EmployeeInfo>((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<TenantPermissions>().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<MessageReceive>();
                        return;
                    }
                }
                if (oder.HasDocumentPermission == true)
                {
                    var tp = await _db.Queryable<TenantPermissions>().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<MessageReceive>();
                        return;
                    }
                }
                if(oder.HasDocumentPermission!=true&&oder.HasManagePermission!=true)
                {
                    //如果两个都不是,name就是增加人数或者增加公司数量,只有在管理系统中产生
                    var tp = await _db.Queryable<TenantPermissions>().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<MessageReceive>();
                            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<MessageReceive>();
                        return;
                    }
                }
            }
        }
        /// <summary>
        /// 发送消息给用户中,用户中心会响应这个消息
        /// </summary>
        /// <param name="msg"></param>
        /// <returns></returns>
        [SubscribeDelay(INITQMessageDefine.DTSendMessage)]
        private async Task  SendMessage(string msg)
        {
          await  _cacheService.ListRightPushAsync(INITQMessageDefine.DTSendMessage, msg);
        }
    }
}