using AutoMapper;
using Microsoft.Extensions.Logging;
using Serilog;
using Newtonsoft.Json;
using OASystem.Domain;
using OASystem.Domain.Dtos;
using OASystem.Domain.Dtos.Financial;
using OASystem.Domain.Dtos.PersonnelModule;
using OASystem.Domain.Entities.Financial;
using OASystem.Domain.Entities.PersonnelModule;
using OASystem.Domain.ViewModels.Financial;
using OASystem.Infrastructure.Repositories.PersonnelModule;
using OASystem.Infrastructure.Repositories.System;
namespace OASystem.Infrastructure.Repositories.Financial
{
///
/// 财务 - 日付申请
///
public class DailyFeePaymentRepository : BaseRepository
{
private readonly IMapper _mapper;
private readonly SetDataTypeRepository _setDataTypeRep;
private readonly UsersRepository _UsersRep;
private readonly CompanyRepository _CompanyRep;
private readonly GoodsRepository _goodsRep;
private readonly ILogger _logger;
///
///
///
///
///
///
///
///
///
///
public DailyFeePaymentRepository(SqlSugarClient sqlSugar,
IMapper mapper,
SetDataTypeRepository setDataTypeRep,
UsersRepository usersRep,
CompanyRepository companyRep,
GoodsRepository goodsRep,
ILogger logger)
: base(sqlSugar)
{
_mapper = mapper;
_setDataTypeRep = setDataTypeRep;
_UsersRep = usersRep;
_CompanyRep = companyRep;
_goodsRep = goodsRep;
_logger = logger;
}
///
/// 日付申请查询 使用的数据源
///
///
///
public async Task GetPagePriceTypeData(PortDtoBase dto, int currUserId = 0)
{
Result result = new Result() { Code = -2 };
dynamic? DailyFeePaymentList = null;
var setTypeData = _setDataTypeRep.QueryDto().ToList();
var setData = _setDataTypeRep.QueryDto().ToList();
//48人员费用 49办公费用 50 销售费用 51 其他费用 55 大运会
var typeIds = new List() {
48, //人员费用
49, //办公费用
50, //销售费用
51, //其他费用
55, //大运会
90, //各部门基础固定费用明细
104, //团组费用
116, //物资采购
};
var priceTypeData = setTypeData.Where(s => typeIds.Contains(s.Id)).ToList();
var priceSubTypeData = setData.Where(s => typeIds.Contains(s.STid)).ToList();
//var isEnable = false;
//员工姓名列表
var userData = _sqlSugar.Queryable()
.LeftJoin((u, d) => u.DepId == d.Id)
.LeftJoin((u, d, jp) => u.JobPostId == jp.Id)
.Where((u, d, jp) => u.IsDel == 0)
.Select((u, d, jp) => new
{
u.Id,
u.CnName,
u.DepId,
d.DepName,
u.JobPostId,
jp.JobName
})
.ToList();
//1 经理职位 查看该部门下所有人员
if (currUserId > 0)
{
//42
var auditUserIds = _sqlSugar.Queryable().Where(x => x.IsDel == 0 && x.SmId == 42 && x.FId == 12).Select(x => x.UId).ToList();
if (!auditUserIds.Contains(currUserId))
{
var screenWheres = new List() { "经理", "主管" };
var userInfo = userData.Find(x => x.Id == currUserId && screenWheres.Contains(x.JobName));
if (userInfo != null)
{
userData = userData.Where(x => x.DepName.Equals(userInfo.DepName)).ToList();
}
else
{
userData = userData.Where(x => x.Id == currUserId).ToList();
}
}
else
{
userData.Insert(0, new { Id = -1, CnName = "全部", DepId = 0, DepName = "", JobPostId = 0, JobName = "" });
}
}
var userData1 = userData.Select(x => new { x.Id, x.CnName }).ToList();
//62 公转 63 私转
var feeMarkTypeData = setTypeData.Where(s => s.Id == 62 || s.Id == 63).ToList();
var feeMarkSubTypeData = setData.Where(s => s.STid == 62 || s.STid == 63).ToList();
var companyNameData = await _CompanyRep.GetCompanyNameData();
//审核状态
var auditStatusData = new List()
{
new { Id = -1, Name = "全部" },
new { Id = 0, Name = "未审核" },
new { Id = 1, Name = "已审核" },
new { Id = 2, Name = "审核未通过" },
new { Id = 3, Name = "自动审核" }
};
if (dto.PortType == 1) //web
{
DailyFeePaymentList = new
{
FeeTypeData = priceTypeData,
FeeSubTypeData = priceSubTypeData,
UserNameData = userData1,
FeeMarkTypeData = feeMarkTypeData,
FeeMarkSubTypeData = feeMarkSubTypeData,
CompanyNameData = companyNameData.Data,
AuditStatusData = auditStatusData
};
}
else if (dto.PortType == 2) //安卓
{
DailyFeePaymentList = new
{
UserNameData = userData1,
FeeTypeData = priceTypeData,
FeeTypeSubData = priceSubTypeData
};
}
result.Code = 0;
result.Msg = "查询成功!";
result.Data = DailyFeePaymentList;
return result;
}
///
/// 总经理自动审核通过类型
/// 90 Parent 各部门基础固定费用明细
/// 104 Parent 团组费用
/// 672 Sub 办公费用-信息部申请费用
/// 1433 Sub 团组/会务储备物资采购
///
///
///
public async Task GMAutoApprovalType(int typeId)
{
if (typeId < 1) return false;
var parentIds = new List()
{
90, // 各部门基础固定费用明细
104, // 团组费用
};
var subIds = new List()
{
672, //办公费用-信息部申请费用
1433, //团组/会务储备物资采购
};
var parentTypeDatas = await _sqlSugar.Queryable().Where(x => x.IsDel == 0 && parentIds.Contains(x.STid)).ToListAsync();
var subTypeDatas = await _sqlSugar.Queryable().Where(x => x.IsDel == 0 && subIds.Contains(x.Id)).ToListAsync();
var typeDatas = new List();
if (parentTypeDatas.Any()) typeDatas.AddRange(parentTypeDatas);
if (subTypeDatas.Any()) typeDatas.AddRange(subTypeDatas);
if (typeDatas.Any(x => x.Id == typeId)) return true;
return false;
}
///
/// 日付申请查询 使用的数据源
///
///
///
public async Task GetPriceTypeAddData(PortDtoBase dto)
{
Result result = new() { Code = -2 };
dynamic? DailyFeePaymentList = null;
var setTypeData = _setDataTypeRep.QueryDto().ToList();
var setData = _setDataTypeRep.QueryDto().ToList();
//48人员费用 49办公费用 50 销售费用 51 其他费用 55 大运会
var priceTypeData = setTypeData.Where(s => s.Id == 48 || s.Id == 49 || s.Id == 50 || s.Id == 51 || s.Id == 55).ToList();
var priceSubTypeData = setData.Where(s => s.STid == 48 || s.STid == 49 || s.STid == 50 || s.STid == 51 || s.STid == 55).ToList();
//员工姓名列表
var userNameData = await _UsersRep.GetUserNameList(dto.PortType);
//62 公转 63 私转
var feeMarkTypeData = setTypeData.Where(s => s.Id == 62 || s.Id == 63).ToList();
var feeMarkSubTypeData = setData.Where(s => s.STid == 62 || s.STid == 63).ToList();
var companyNameData = await _CompanyRep.GetCompanyNameData();
if (dto.PortType == 1) //web
{
DailyFeePaymentList = new Fin_DailyFeePaymentPagePriceTypeDataView
{
FeeTypeData = priceTypeData,
FeeSubTypeData = priceSubTypeData,
UserNameData = userNameData.Data,
FeeMarkTypeData = feeMarkTypeData,
FeeMarkSubTypeData = feeMarkSubTypeData,
CompanyNameData = companyNameData.Data
};
}
else if (dto.PortType == 2) //安卓
{
DailyFeePaymentList = new
{
CompanyNameData = companyNameData.Data,
FeeTypeData = feeMarkTypeData,
FeeTypeSubData = feeMarkSubTypeData
};
}
result.Code = 0;
result.Msg = "查询成功!";
result.Data = DailyFeePaymentList;
return result;
}
///
/// 日付申请 page 查询
///
///
///
public async Task GetPageSearchAll(PageDailyFeePaymentDto dto)
{
Result result = new Result() { Code = -2 };
ListViewBase dailyFeePaymentPageList = new ListViewBase()
{
ReceiveDt = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")
};
#region sql条件处理
string sqlWhere = "";
if (dto.CompanyId != -1) //公司
sqlWhere += string.Format(" And dfp.CompanyId = {0}", dto.CompanyId);
if (dto.FinancialAuditStatus != -1) //财务审核
sqlWhere += string.Format(" And dfp.FAudit = {0}", dto.FinancialAuditStatus);
if (dto.ManagerAuditStatus != -1) //总经理审核
sqlWhere += string.Format(" And dfp.MAudit = {0}", dto.ManagerAuditStatus);
if (dto.IsPaySign != -1) //付款状态
{
sqlWhere += string.Format(" And dfp.IsPay = {0}", dto.IsPaySign);
}
if (dto.FeeTypeId != -1) //费用类型
{
if (dto.FeeSubTypeId != -1) //子类处理
{
sqlWhere += string.Format(" And dfp.PriceTypeId = {0}", dto.FeeSubTypeId);
}
else
{
var setData = _setDataTypeRep.QueryDto(s => s.STid == dto.FeeTypeId).ToList();
if (setData.Count > 0)
{
string setDataIds = string.Join(",", setData.Select(x => x.Id).ToList());
sqlWhere += string.Format(" And dfp.PriceTypeId In ({0})", setDataIds);
}
}
}
if (!string.IsNullOrEmpty(dto.FeeDesc))
sqlWhere += string.Format(" And dfp.Instructions Like '%{0}%'", dto.FeeDesc);
if (dto.CreateUserId != -1)
sqlWhere += string.Format(" And dfp.CreateUserId = {0}", dto.CreateUserId);
int startIndex = (dto.PageIndex - 1) * dto.PageSize + 1;
int endIndex = startIndex + dto.PageSize - 1;
string sqlPage = string.Format(@"Select * From (
Select row_number() over (order by dfp.Id Desc) as RowNumber,
dfp.Id,dfp.CompanyId,c.CompanyName,dfp.Instructions,dfp.SumPrice,
dfp.CreateUserId,u.CnName CreateUser,dfp.CreateTime,dfp.FAudit,dfp.MAudit,
dfp.PriceTypeId,dfp.IsPay
From Fin_DailyFeePayment dfp
Inner Join Sys_Company c On dfp.CompanyId = c.Id
Left Join Sys_Users u On dfp.CreateUserId = u.Id
Where dfp.IsDel=0 {0}
) temp Where RowNumber Between {1} and {2}", sqlWhere, startIndex, endIndex);
string sqlCount = string.Format(@"Select COUNT(1) as Count From (
Select dfp.Id,dfp.CompanyId,c.CompanyName,dfp.Instructions,dfp.SumPrice,
dfp.CreateUserId,u.CnName CreateUser,dfp.CreateTime,dfp.FAudit,dfp.MAudit,
dfp.PriceTypeId
From Fin_DailyFeePayment dfp
Inner Join Sys_Company c On dfp.CompanyId = c.Id
Left Join Sys_Users u On dfp.CreateUserId = u.Id
Where dfp.IsDel=0 {0}
) temp ", sqlWhere);
#endregion
if (dto.PortType == 1 || dto.PortType == 2 || dto.PortType == 3) //web
{
//Fin_DailyFeePaymentPageCount
var dailyFeePaymentCount = await _sqlSugar.SqlQueryable(sqlCount).FirstAsync();
var DailyFeePaymentData = await _sqlSugar.SqlQueryable(sqlPage).ToListAsync();
int totalCount = dailyFeePaymentCount.Count;
dailyFeePaymentPageList = new ListViewBase
{
CurrPageIndex = dto.PageIndex,
CurrPageSize = dto.PageSize,
DataCount = totalCount,
DataList = DailyFeePaymentData
};
}
result.Code = 0;
result.Msg = "查询成功!";
result.Data = dailyFeePaymentPageList;
return result;
}
///
/// 日付申请 single 查询 By Id
///
///
///
public async Task GetSearchById(SearchDailyFeePaymentDto dto)
{
Result result = new Result() { Code = -2 };
if (dto.PortType == 1) //web
{
Fin_DailyFeePaymentInfolView feeData = new Fin_DailyFeePaymentInfolView();
string feeSql = string.Format(@"Select * From Fin_DailyFeePayment
Where IsDel=0 And Id = {0} ", dto.Id);
feeData = await _sqlSugar.SqlQueryable(feeSql).FirstAsync();
string feeContentSql = string.Format(@"Select * From Fin_DailyFeePaymentContent
Where IsDel=0 And DFPId = {0} ", dto.Id);
feeData.FeeContents = await _sqlSugar.SqlQueryable(feeContentSql).ToListAsync();
result.Code = 0;
result.Msg = "查询成功!";
result.Data = feeData;
}
else if (dto.PortType == 2 || dto.PortType == 3) //android And ios
{
Fin_DailyFeePaymentInfoAndroidlView feeData = new Fin_DailyFeePaymentInfoAndroidlView();
string feeSql = string.Format(@"Select * From Fin_DailyFeePayment
Where IsDel=0 And Id = {0} ", dto.Id);
feeData = await _sqlSugar.SqlQueryable(feeSql).FirstAsync();
//feeData.TransferTypeId = feeData.TransferTypeId == 0 ? 62 : feeData.TransferTypeId == 1 ? 63 : 0;
string feeContentSql = string.Format(@"Select * From Fin_DailyFeePaymentContent
Where IsDel=0 And DFPId = {0} ", dto.Id);
feeData.FeeContents = await _sqlSugar.SqlQueryable(feeContentSql).ToListAsync();
result.Code = 0;
result.Msg = "查询成功!";
result.Data = feeData;
}
return result;
}
///
/// 日付申请 添加
///
///
///
public async Task Add(AddDailyFeePaymentDto dto)
{
Result result = new Result() { Code = -2 };
_sqlSugar.BeginTran();
var _fee = _mapper.Map(dto);
_fee.CreateUserId = dto.UserId;
_fee.GroupId = dto.GroupId;
//自动审核验证
var auditPer = await GMAutoApprovalType(dto.PriceTypeId);
var priceTypeInfo = await _sqlSugar.Queryable().FirstAsync(x => x.IsDel == 0 && x.Id == dto.PriceTypeId);
if (auditPer)
{
_fee.MAudit = 3;
_fee.MAuditDate = DateTime.Now;
}
int? feeId = await _sqlSugar.Insertable(_fee).ExecuteReturnIdentityAsync();
if (dto.FeeContents.Any())
{
var _feeContents = _mapper.Map>(dto.FeeContents);
foreach (var item in _feeContents)
{
item.DFPId = feeId == null ? -1 : Convert.ToInt32(feeId);
item.CreateUserId = dto.UserId;
}
await _sqlSugar.Insertable(_feeContents).ExecuteCommandAsync();
}
_sqlSugar.CommitTran();
result.Code = 0;
var data = new { dailyId = feeId, sign = 1 };
result.Data = data;
return result;
}
///
/// 日付申请 编辑
///
///
///
public async Task Edit(EditDailyFeePaymentDto dto)
{
Result result = new Result() { Code = -2 };
//自动审核验证
var auditPer = await GMAutoApprovalType(dto.PriceTypeId);
#region 已审核的数据不可编辑
var dailyFeeInfo = await _sqlSugar.Queryable().Where(it => it.Id == dto.Id && it.IsDel == 0).FirstAsync();
if (dailyFeeInfo != null)
{
var auditIds = new List() { 1, 3 };
if (auditIds.Contains(dailyFeeInfo.FAudit) || auditIds.Contains(dailyFeeInfo.MAudit))
{
if (auditPer)
{
if (dailyFeeInfo.IsPay == 1)
{
result.Msg = "该笔费用已付款,不可修改!";
return result;
}
}
else
{
result.Msg = "审核已通过,不可修改!";
return result;
}
}
}
#endregion
_sqlSugar.BeginTran();
try
{
Fin_DailyFeePayment _fee = _mapper.Map(dto);
_fee.CreateUserId = dto.UserId;
int? editFeeStatus = await _sqlSugar.Updateable()
.SetColumns(a => new Fin_DailyFeePayment
{
Instructions = dto.Instructions,
SumPrice = dto.SumPrice,
TransferTypeId = dto.TransferTypeId,
PriceTypeId = dto.PriceTypeId,
CompanyId = dto.CompanyId,
GroupId = dto.GroupId,
})
.SetColumnsIF(auditPer, a => a.MAudit == 3)
.SetColumnsIF(auditPer, a => a.MAuditDate == DateTime.Now)
.Where(a => a.Id == dto.Id)
.ExecuteCommandAsync();
var _feeContents = _mapper.Map>(dto.FeeContents);
await _sqlSugar.Updateable()
.Where(a => a.DFPId == _fee.Id)
.SetColumns(a => new Fin_DailyFeePaymentContent
{
IsDel = 1,
DeleteUserId = _fee.CreateUserId,
DeleteTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
})
.ExecuteCommandAsync();
if (_feeContents.Any())
{
foreach (var item in _feeContents)
{
item.DFPId = _fee.Id;
item.CreateUserId = dto.UserId;
}
await _sqlSugar.Insertable(_feeContents).ExecuteCommandAsync();
}
_sqlSugar.CommitTran();
result.Code = 0;
var data = new { dailyId = dto.Id, sign = 2 };
result.Data = data;
}
catch (Exception ex)
{
_sqlSugar.RollbackTran();
result.Msg = ex.Message;
}
return result;
}
///
/// 日付申请 删除
///
///
///
public async Task Del(DelDailyFeePaymentDto dto)
{
Result result = new Result() { Code = -2 };
int? delFeeStatus = await _sqlSugar.Updateable()
.Where(a => a.Id == dto.Id)
.SetColumns(a => new Fin_DailyFeePayment
{
IsDel = 1,
DeleteUserId = dto.UserId,
DeleteTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
}).ExecuteCommandAsync();
result.Code = 0;
return result;
}
///
/// 日付申请 审核
///
///
///
public async Task DailyPaymentAudit(DP_AuditStatusDto dto)
{
Result result = new Result() { Code = -2 };
if (dto.AuditType == 1) //财务审核
{
int auditStatus = await _sqlSugar.Updateable()
.Where(a => a.Id == dto.Id)
.SetColumns(a => new Fin_DailyFeePayment
{
FAudit = dto.AuditStatus,
FAuditDate = DateTime.Now,
}).ExecuteCommandAsync();
if (auditStatus > 0) result.Code = 0;
else result.Msg = "财务审核操作失败";
}
else if (dto.AuditType == 2) //总经理
{
int auditStatus = await _sqlSugar.Updateable()
.Where(a => a.Id == dto.Id)
.SetColumns(a => new Fin_DailyFeePayment
{
MAudit = dto.AuditStatus,
MAuditDate = DateTime.Now,
}).ExecuteCommandAsync();
if (auditStatus > 0) result.Code = 0;
else result.Msg = "总经理审核操作失败";
}
#region 审核完全通过 指定类型 向物资添加信息
//费用类型
var feeTypeIds = new List() {
1433, //团组/会务储备物资采购
1435, //公司固定物资采购
};
//审核状态集合
var auditStatuses = new List() {
1, //审核通过
3, //自动审核
};
var dailyInfo = await _sqlSugar.Queryable()
.FirstAsync(x => x.Id == dto.Id && x.IsDel == 0 &&
auditStatuses.Contains(x.MAudit) &&
auditStatuses.Contains(x.FAudit) &&
feeTypeIds.Contains(x.PriceTypeId));
if (dailyInfo != null)
{
//执行物资添加、入库、关联信息操作
var linkOpRes = await ApplicationLinkGoodsAddAsync(dailyInfo.Id);
// Updated the logging statement to ensure consistent message templates
_logger.LogInformation("【日付申请单关联物品】请求参数:{DailyInfoId}\r\n返回参数:{LinkOpResData}\r\n返回消息:{LinkOpResMsg}",
dailyInfo.Id,
JsonConvert.SerializeObject(linkOpRes.Data),
linkOpRes.Msg);
}
#endregion
return result;
}
///
/// 购买申请单关联物品
///
/// 日付申请Id
///
public async Task ApplicationLinkGoodsAddAsync(int applicatId)
{
if (applicatId < 1) return new JsonView() { Code = StatusCodes.Status400BadRequest, Msg = $"日付申请单ID不正确!" };
//if (currUserId < 1) return new JsonView() { Code = StatusCodes.Status400BadRequest, Msg = $"当前登陆人ID不正确!" };
var dailyInfoRes = await GetSearchById(new Domain.Dtos.Financial.SearchDailyFeePaymentDto() { PortType = 1, Id = applicatId });
if (dailyInfoRes.Code != 0) return new JsonView() { Code = StatusCodes.Status400BadRequest, Msg = dailyInfoRes?.Msg ?? "日付申请单信息不存在!" };
string dynamicJson = JsonConvert.SerializeObject(dailyInfoRes.Data);
Fin_DailyFeePaymentInfolView dailyInfo = JsonConvert.DeserializeObject(dynamicJson);
if (dailyInfo == null || !dailyInfo.FeeContents.Any())
{
return new JsonView() { Code = StatusCodes.Status400BadRequest, Msg = $"付申请单信息不存在!!" };
}
//审核验证 总经理 && 财务 审核通过 才可进行 物品添加、入库、关联信息 操作
if (dailyInfo.MAudit == 0 || dailyInfo.MAudit == 2 || dailyInfo.FAudit == 0 || dailyInfo.FAudit == 2)
{
return new JsonView() { Code = StatusCodes.Status400BadRequest, Msg = $"审核未通过,不可进行物资关联信息!" };
}
_sqlSugar.BeginTran();
//1.验证物品信息
var currGoodsTypeId = dailyInfo.PriceTypeId switch
{
1433 => 1424, //团组物资
1435 => 1426, //固定资产
_ => 0
};
var paras = new List();
foreach (var item in dailyInfo.FeeContents)
{
var goodsInfo = await _sqlSugar.Queryable().FirstAsync(x => x.Name.Equals(item.PriceName) && x.IsDel == 0)
?? new Pm_GoodsInfo()
{
Id = 0,
Name = item.PriceName,
Type = currGoodsTypeId,
Unit = "-",
CreateUserId = dailyInfo.CreateUserId,
Remark = $"日付申请模块新增物品信息(需自行更改单位):\n{item.Remark}",
};
//物品不存在执行添加
if (goodsInfo.Id == 0)
{
goodsInfo.Id = await _sqlSugar.Insertable(goodsInfo).ExecuteReturnIdentityAsync();
if (goodsInfo.Id < 1)
{
_sqlSugar.RollbackTran();
return new JsonView() { Code = StatusCodes.Status400BadRequest, Msg = $"物品添加失败!" };
}
}
//执行入库信息添加
var storageRes = await _goodsRep.GoodsStorageOp(new GoodsStorageOpDto()
{
GoodsId = goodsInfo.Id,
Quantity = item.Quantity,
UnitPrice = item.Price,
TotalPrice = item.ItemTotal,
SupplierName = "-",
SupplierTel = "-",
SupplierAddress = "-",
SupplierSource = "-",
StorageUserId = 374, //固定前台ID为入库人
StorageTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
Remark = $"日付申请模块新增物品入库信息:{item.Remark}",
}, 374);
if (storageRes.Code != StatusCodes.Status200OK)
{
_sqlSugar.RollbackTran();
return new JsonView() { Code = StatusCodes.Status400BadRequest, Msg = $"物品入库信息添加失败!" };
}
var storageId = Convert.ToInt32(storageRes.Data.GetType().GetProperty("sign").GetValue(storageRes.Data, null) ?? 0);
//执行关联表添加
var addStatus = await _sqlSugar.Insertable(new Fin_ApplicationLinkGoods(
id: 0,
dailyId: dailyInfo.Id,
goodsId: goodsInfo.Id,
goodsStorageId: storageId,
remark: "",
userId: dailyInfo.CreateUserId
)).ExecuteCommandAsync();
if (addStatus < 1)
{
_sqlSugar.RollbackTran();
return new JsonView() { Code = StatusCodes.Status400BadRequest, Msg = $"日付、物品入库信息关联信息添加失败!" };
}
paras.Add(new
{
dailyId = dailyInfo.Id,
goodsId = goodsInfo.Id,
GoodsStorageId = storageId,
LinkTableId = addStatus
});
}
_sqlSugar.CommitTran();
return new JsonView() { Code = StatusCodes.Status200OK, Data = paras, Msg = $"操作成功!" };
}
}
}