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 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.TenantName ,
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),
};
//新建租户员工
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();
permissions.TenantId = id;
employeeAtTenant.TenantID = id;
employeeAtTenant.EmployeeID = eid;
tenderUnit.TenantId = id;
await _db.Insertable(tenderUnit).ExecuteCommandAsync();
await _db.Insertable(employeeAtTenant).ExecuteCommandAsync();
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
{
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;
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();
}
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;
}
}
}
}
}