using AutoMapper;
using OASystem.Domain;
using OASystem.Domain.Dtos;
using OASystem.Domain.Dtos.Financial;
using OASystem.Domain.Entities.Financial;
using OASystem.Domain.ViewModels.Financial;
using OASystem.Infrastructure.Repositories.System;
using System;
using System.Collections.Generic;
using System.ComponentModel.Design;
using System.Linq;
using System.Runtime.Intrinsics.Arm;
using System.Text;
using System.Threading.Tasks;
namespace OASystem.Infrastructure.Repositories.Financial
{
///
/// 财务 - 日付申请
///
public class DailyFeePaymentRepository : BaseRepository
{
private readonly IMapper _mapper;
private readonly System.SetDataTypeRepository _setDataTypeRep;
private readonly System.UsersRepository _UsersRep;
private readonly System.CompanyRepository _CompanyRep;
public DailyFeePaymentRepository(SqlSugarClient sqlSugar, IMapper mapper, System.SetDataTypeRepository setDataTypeRep,
UsersRepository usersRep, CompanyRepository companyRep)
: base(sqlSugar)
{
this._mapper = mapper;
this._setDataTypeRep = setDataTypeRep;
this._UsersRep = usersRep;
this._CompanyRep = companyRep;
}
///
/// 日付申请查询 使用的数据源
///
///
///
public async Task GetPagePriceTypeData(DtoBase dto)
{
Result result = new Result() { Code = -2 };
dynamic? DailyFeePaymentList = null;
if (dto.PortType == 1 || dto.PortType == 2) //web
{
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();
DailyFeePaymentList = new Fin_DailyFeePaymentPagePriceTypeDataView
{
FeeTypeData = priceTypeData,
FeeSubTypeData = priceSubTypeData,
UserNameData = userNameData.Data,
FeeMarkTypeData = feeMarkTypeData,
FeeMarkSubTypeData = feeMarkSubTypeData,
CompanyNameData = companyNameData.Data
};
}
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.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 = "";
foreach (var item in setData)
{
setDataIds += item.Id + ",";
}
if (setDataIds.Length > 0)
{
setDataIds = setDataIds.Substring(0, setDataIds.Length - 1);
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
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) //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 };
Fin_DailyFeePaymentInfolView feeData = new Fin_DailyFeePaymentInfolView();
if (dto.PortType == 1 || dto.PortType == 2) //web
{
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;
}
return result;
}
///
/// 日付申请 添加
///
///
///
public async Task Add(AddDailyFeePaymentDto dto)
{
Result result = new Result() { Code = -2 };
_sqlSugar.BeginTran();
try
{
Fin_DailyFeePayment _fee = _mapper.Map(dto);
_fee.CreateUserId = dto.UserId;
int? feeId = await _sqlSugar.Insertable(_fee).ExecuteReturnIdentityAsync();
if (dto.FeeContents.Count > 0)
{
List _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;
}
catch (Exception ex)
{
_sqlSugar.RollbackTran();
result.Msg = ex.Message;
}
return result;
}
///
/// 日付申请 编辑
///
///
///
public async Task Edit(EditDailyFeePaymentDto dto)
{
Result result = new Result() { Code = -2 };
_sqlSugar.BeginTran();
try
{
Fin_DailyFeePayment _fee = _mapper.Map(dto);
_fee.CreateUserId = dto.UserId;
int? editFeeStatus = await _sqlSugar.Updateable()
.Where(a => a.Id == dto.Id)
.SetColumns(a => new Fin_DailyFeePayment
{
Instructions = dto.Instructions,
SumPrice = dto.SumPrice,
TransferTypeId = dto.TransferTypeId,
PriceTypeId = dto.PriceTypeId,
CompanyId = dto.CompanyId,
}).ExecuteCommandAsync();
List _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.Count > 0)
{
foreach (var item in _feeContents)
{
item.DFPId = _fee.Id;
item.CreateUserId = dto.UserId;
}
if (_feeContents.Count > 0)
{
await _sqlSugar.Insertable(_feeContents).ExecuteCommandAsync();
}
}
_sqlSugar.CommitTran();
result.Code = 0;
}
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.Id,
DeleteTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
}).ExecuteCommandAsync();
result.Code = 0;
return result;
}
///
/// 日付申请 审核
///
///
///
public async Task DelDailyPaymentAudit(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 != null && 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 != null && auditStatus > 0)
result.Code = 0;
else
result.Msg = "总经理审核操作失败";
}
return result;
}
}
}