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);
}
}
}