using AutoMapper;
using OASystem.Domain;
using OASystem.Domain.Dtos.Financial;
using OASystem.Domain.Entities.Financial;
using OASystem.Domain.Entities.Groups;
using OASystem.Domain.ViewModels.Financial;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace OASystem.Infrastructure.Repositories.Financial
{
///
/// 财务 - 团组已收款项
/// 雷怡 2023.08.16 15:24
///
public class ProceedsReceivedRepository : BaseRepository
{
private readonly IMapper _mapper;
///
///
///
///
///
public ProceedsReceivedRepository(SqlSugarClient sqlSugar, IMapper mapper)
: base(sqlSugar)
{
_mapper = mapper;
}
///
/// 根据diid查询团组已收款项 已关联应收款项
///
///
///
public async Task GetGroupReceivedByDiid(int diid)
{
Result result = new() { Code = -2 };
string sql = string.Format(@"Select * From Fin_ProceedsReceived Where IsDel=0 And Diid={0}", diid);
var groupReceivablesList = await _sqlSugar.SqlQueryable(sql).ToListAsync();
result.Code = 0;
result.Msg = "查询成功!";
result.Data = groupReceivablesList;
return result;
}
///
/// 根据diid 数组 查询团组已收款项 已关联应收款项
///
///
///
public async Task GetGroupReceivedByDiids(int[] diids)
{
Result result = new() { Code = -2 };
var groupReceivablesList = await _sqlSugar.Queryable()
.Where(fr => fr.IsDel == 0 && diids.Contains(fr.Diid)).ToListAsync();
result.Code = 0;
result.Msg = "查询成功!";
result.Data = groupReceivablesList;
return result;
}
///
/// 已收款项 已关联应收款项 删除
///
///
///
public async Task _Del(ProceedsReceivedDelDto dto)
{
Result result = new Result() { Code = -1, Msg = "程序错误!" };
var res = await _sqlSugar.Updateable()
.Where(it => it.Id == dto.Id)
.SetColumns(it => new Fin_ProceedsReceived()
{
IsDel = 1,
DeleteUserId = dto.UserId,
DeleteTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")
}
).ExecuteCommandAsync();
if (res > 0)
{
result.Msg = "删除成功!";
result.Code = 0;
}
else
{
result.Msg = "删除失败!";
}
return result;
}
///
/// 已收款项 已关联应收款项
/// Add And Update
///
///
///
public async Task PostAmountReceivedOperate(ProceedsReceivedDto dto)
{
Result result = new() { Code = -2 };
if (dto._ProceedsReceivedInfos.Count <= 0)
{
result.Msg = "已收款项没有信息,不能进行,添加或修改操作!!!";
return result;
}
int addCount = 0, updateCount = 0;
if (dto.PortType == 1)
{
List _ProceedsReceived = new List();
foreach (var item in dto._ProceedsReceivedInfos)
{
_ProceedsReceived.Add(new Fin_ProceedsReceived()
{
Diid = dto.DiId,
Id = item.Id,
SectionTime = item.SectionTime,
Price = item.Price,
Currency = item.Currency,
ReceivablesType = item.ReceivablesType,
Client = item.Client,
CustomerName = item.CustomerName,
CustomerTel = item.CustomerTel,
FID = item.FID,
CreateUserId = dto.UserId,
CreateTime = DateTime.Now,
Remark = item.Remark
});
}
if (_ProceedsReceived.Count > 0)
{
var x = _sqlSugar.Storageable(_ProceedsReceived).ToStorage();
addCount = x.AsInsertable.ExecuteCommand(); //不存在插入
updateCount = x.AsUpdateable.ExecuteCommand(); //存在更新
}
result.Code = 0;
result.Msg = string.Format(@"操作成功!添加:{0}条;更新:{1};", addCount, updateCount);
}
return result;
}
///
/// 已收款项 已关联应收款项
/// 分配已收款项至 应收项下
///
///
///
public async Task PostAllocateAmountReceived(AllocateAmountReceivedDto dto)
{
Result result = new() { Code = -2 };
if (dto.SubIds.Count <= 0)
{
result.Msg = "请选择要添加的已收款项!";
return result;
}
if (dto.PortType == 1)
{
List _proceedsReceived = new List();
foreach (var id in dto.SubIds)
{
_proceedsReceived.Add(new Fin_ProceedsReceived() { Id = id, FID = dto.ParentId });
}
var res = await _sqlSugar.Updateable(_proceedsReceived).
WhereColumns(it => new { it.Id })
.UpdateColumns(it => new { it.FID })
.ExecuteCommandAsync();
result.Code = 0;
}
return result;
}
///
/// 根据diid查询团组已收款项
/// 全字段
///
///
///
public async Task PostAmountReceivedByDiId(int diId)
{
Result result = new() { Code = -2 };
string sql = string.Format(@"Select * From Fin_ProceedsReceived Where IsDel=0 And Diid={0}", diId);
var groupReceivablesList = await _sqlSugar.SqlQueryable(sql).ToListAsync();
result.Code = 0;
result.Msg = "查询成功!";
result.Data = groupReceivablesList;
return result;
}
///
/// 根据diid查询团组已收款项
///
///
///
public async Task PostAmountReceived(int diid)
{
Result result = new() { Code = -2 };
string sql = string.Format(@"Select Id,Diid,SectionTime,Price,Currency,ReceivablesType,Client,CustomerName,CustomerTel, Remark From Fin_ProceedsReceived
Where IsDel=0 And Diid={0}", diid);
var groupReceivablesList = await _sqlSugar.SqlQueryable(sql).ToListAsync();
result.Code = 0;
result.Msg = "查询成功!";
result.Data = groupReceivablesList;
return result;
}
///
/// 已收款项
/// Add And Update
///
///
///
public async Task PostAmountReceivedAddOrEditDto(AmountReceivedAddOrEditDto dto)
{
Result result = new() { Code = -2 };
if (dto._ProceedsReceivedInfos.Count <= 0)
{
result.Msg = "已收款项没有信息,不能进行,添加或修改操作!!!";
return result;
}
int addCount = 0, updateCount = 0;
if (dto.PortType == 1)
{
List _ProceedsReceived = new List();
foreach (var item in dto._ProceedsReceivedInfos)
{
_ProceedsReceived.Add(new Fin_ProceedsReceived()
{
Diid = dto.DiId,
Id = item.Id,
SectionTime = item.SectionTime,
Price = item.Price,
Currency = item.Currency,
ReceivablesType = item.ReceivablesType,
Client = item.Client,
CustomerName = item.CustomerName,
CustomerTel = item.CustomerTel,
FID = 0,
CreateUserId = dto.UserId,
CreateTime = DateTime.Now,
Remark = item.Remark
});
}
if (_ProceedsReceived.Count > 0)
{
var x = _sqlSugar.Storageable(_ProceedsReceived).ToStorage();
addCount = x.AsInsertable.ExecuteCommand(); //不存在插入
_sqlSugar.BeginTran();
foreach (var item in _ProceedsReceived)
{
bool res = await UpdateAsync(s => s.Id == item.Id, s => new Fin_ProceedsReceived
{
SectionTime = item.SectionTime,
Price = item.Price,
Currency = item.Currency,
ReceivablesType = item.ReceivablesType,
Client = item.Client,
CustomerName = item.CustomerName,
CustomerTel = item.CustomerTel,
Remark = item.Remark
});
if (!res)
{
_sqlSugar.RollbackTran();
break;
}
updateCount++;
}
_sqlSugar.CommitTran();
//updateCount = x.AsUpdateable.IgnoreColumns(p => new
//{
// p.SectionTime,
// p.Price,
// p.Currency,
// p.ReceivablesType,
// p.Client,
// p.CustomerName,
// p.CustomerTel,
// p.Remark
//}).ExecuteCommand(); //存在更新
}
result.Code = 0;
result.Msg = string.Format(@"操作成功!添加:{0}条;更新:{1};", addCount, updateCount);
//修改团组状态
int diId = dto.DiId;
decimal sum_fr = 0M;
decimal sum_pr = 0M;
decimal sum_refund = 0M; //收款退还
decimal sum_extra = 0M; //超支费用
//1.应收
string sql_fr = string.Format(@" Select * From Fin_ForeignReceivables Where IsDel=0 And Diid={0} ", diId);
List list_fr = _sqlSugar.SqlQueryable(sql_fr).ToList();
sum_fr = list_fr.Sum(s => s.ItemSumPrice);
//2.已收
string sql_pr = string.Format(@" Select * From Fin_ProceedsReceived Where IsDel=0 And Diid={0} ", diId);
List list_pr = _sqlSugar.SqlQueryable(sql_pr).ToList();
sum_pr = list_pr.Sum(s => s.Price);
//3.收款退还
string sql_other = string.Format(@"Select * From Fin_PaymentRefundAndOtherMoney prao
Inner Join Grp_CreditCardPayment ccp On prao.Id = ccp.CId
Where ccp.CTable = 285 And ccp.IsPay = 1 And prao.IsDel = 0 And ccp.IsDel = 0 And prao.DiId = {0}", diId);
List list_other = _sqlSugar.SqlQueryable(sql_other).ToList();
sum_refund = list_other.Sum(s => s.RMBPrice);
//4.超支
string sql_extra = string.Format(@" Select c.* From Fin_GroupExtraCost f
Inner join Grp_CreditCardPayment c On f.Id = c.CId
Where c.CTable = 1015 And c.IsPay = 1 And f.IsDel = 0 And c.IsDel = 0 And f.DiId = {0} ", diId);
List list_extra = _sqlSugar.SqlQueryable(sql_extra).ToList();
sum_extra = list_extra.Sum(s => s.RMBPrice);
decimal balance = ((sum_fr + sum_extra) - (sum_pr - sum_refund));
if (balance <= 0)
{
bool res = await UpdateAsync(s => s.Id == dto.DiId, s => new Grp_DelegationInfo
{
IsSure = 1
});
}
}
return result;
}
///
/// 已收款项 删除
///
///
///
public async Task PostAmountReceivedDel(AmountReceivedDelDto dto)
{
Result result = new Result() { Code = -1, Msg = "程序错误!" };
var res = await _sqlSugar.Updateable()
.Where(it => it.Id == dto.Id)
.SetColumns(it => new Fin_ProceedsReceived()
{
IsDel = 1,
DeleteUserId = dto.UserId,
DeleteTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")
}
).ExecuteCommandAsync();
if (res > 0)
{
result.Msg = "删除成功!";
result.Code = 0;
}
else
{
result.Msg = "删除失败!";
}
return result;
}
}
}