using DocumentServiceAPI.Model.Oder;
using DocumentServiceAPI.Model.Permissions;
using DocumentServiceAPI.Model.UserInfoModel;
using Furion;
using Furion.JsonSerialization;
using Furion.Logging.Extensions;
using InitQ.Abstractions;
using InitQ.Attributes;
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
{
///
/// 初始化订单处理
///
///
///
[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,
};
TenantInfo? 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.ITCode,
PsW = obj.ITCode.Substring(obj.ITCode.Length - 4),
};
TenantPermissions permissions = new TenantPermissions()
{
CreatBy = "消息队列 InitTenantOder",
CreatTime = DateTime.Now,
Description = obj.Description,
EmployeeMaxCount = obj.EmployeeCount ?? 0,
UnitMaxCount = obj.UnitCount ?? 0,
OverTime = DateTime.Now.AddMonths(obj.MonthCount ?? 0),
};
try
{
await _db.AsTenant().BeginTranAsync();
var id= await _db.Insertable(Tinfo).ExecuteReturnIdentityAsync();
permissions.TenantId = id;
await _db.Insertable(permissions).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
{
Tinfo.ItCode = obj.ITCode;
Tinfo.UpdataBy = "消息队列 InitTenantOder";
Tinfo.UpdataTime = DateTime.Now;
Tinfo.IsDel = false;
Tinfo.IsEn = true;
var tp= await _db.Queryable().Where(x=>x.TenantId==Tinfo.Id).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,
};
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();
}
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;
}
}
}
}
}