using BaseOUDAL;
using Org.BouncyCastle.Ocsp;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using YLErp.DBModels;
using YLErp.Model;
using YLErp.Modules.EodModule.QueryModule;
using YLErp.Modules.SwapModule.Dto;
namespace YLErp.Modules.SwapModule
{
public class TrsAccountManageService : YLBaseService
{
public TrsAccountManageService(OptUserInfo optUser) : base(optUser)
{
}
///
/// 分页查询
///
///
///
public SearchListResult SearchList(TrsAccountManageRequest req)
{
var predicate = PredicateBuilder.Create(x => !x.del_flag);
var detailPredicate = PredicateBuilder.Create(x => true);
if (!string.IsNullOrEmpty(req.Account))
{
predicate = predicate.And(x => x.account.Contains(req.Account));
}
if (!string.IsNullOrEmpty(req.AccountName))
{
predicate = predicate.And(x => x.account_name.Contains(req.AccountName));
}
if (req.ClientIds != null && req.ClientIds.Count() > 0)
{
detailPredicate = detailPredicate.And(x => req.ClientIds.Contains(x.client_id??0));
}
var query = DbContext.trs_account_manage.Where(predicate);
var detailQuery = DbContext.trs_account_manage_detail.Where(detailPredicate);
if (string.IsNullOrEmpty(req.sidx))
{
req.sidx = "id";
req.sord = "desc";
}
var mainQuery=from tm in query
where detailQuery.Any(tmd =>tmd.account_id == tm.id)
select tm;
var pageResult= mainQuery.ToSearchList(req);
SearchListResult pageNewResult = new SearchListResult()
{
page = pageResult.page,
records = pageResult.records,
Sum = pageResult.Sum,
total = pageResult.total,
rows=new List()
};
var list= new List();
foreach (var record in pageResult.rows)
{
TrsAccountManageDto trsAccountManageDto = new TrsAccountManageDto() {
id= record.id,
trader_id=record.trader_id,
account= record.account,
account_name= record.account_name,
OptDate=record.OptDate,
OptId=record.OptId,
OptName=record.OptName,
remark=record.remark,
};
trsAccountManageDto.TrsAccountManageDetails = detailQuery.Where(x=>x.account_id==record.id).ToList();
list.Add(trsAccountManageDto);
}
pageNewResult.rows= list;
return pageNewResult;
}
///
/// 保存
///
///
///
public void SaveAccountManage(TrsAccountManageSaveRequest req)
{
TrsAcountManage trsAcountManage= new TrsAcountManage();
if (req.id > 0)
{
trsAcountManage = DbContext.trs_account_manage.FirstOrDefault(x=>x.id== req.id && !x.del_flag);
if (trsAcountManage==null)
{
throw new Exception("修改失败,原数据不存在");
}
}
CheckClient(req.id,req.ClientIds);
trsAcountManage.trader_id = req.TraderId;
trsAcountManage.account=req.Account;
trsAcountManage.remark=req.Remark;
trsAcountManage.account_name = req.AccountName;
trsAcountManage.SetOpt(UserInfo);
if (req.id == 0)
{
DbContext.trs_account_manage.Add(trsAcountManage);
}
DbContext.SaveChanges();
var details = DbContext.trs_account_manage_detail.Where(x=>x.account_id== trsAcountManage.id);
DbContext.trs_account_manage_detail.RemoveRange(details);
if (req.ClientIds!=null)
{
List trsAccountManageDetails = new List();
foreach (var clientId in req.ClientIds)
{
TrsAccountManageDetail trsAccountManageDetail = new TrsAccountManageDetail();
trsAccountManageDetail.account_id = trsAcountManage.id;
trsAccountManageDetail.client_name = DataCacheProvider.GetClientDataSource().GetData(clientId)?.Name;
trsAccountManageDetail.client_id = clientId;
trsAccountManageDetail.SetOpt(UserInfo);
trsAccountManageDetails.Add(trsAccountManageDetail);
}
DbContext.trs_account_manage_detail.AddRange(trsAccountManageDetails);
}
else
{
TrsAccountManageDetail trsAccountManageDetail = new TrsAccountManageDetail();
trsAccountManageDetail.account_id = trsAcountManage.id;
trsAccountManageDetail.SetOpt(UserInfo);
DbContext.trs_account_manage_detail.Add(trsAccountManageDetail);
}
DbContext.SaveChanges();
}
private void CheckClient(int id,List clientIds)
{
if (clientIds==null|| clientIds.Count==0)
{
var details = from tm in DbContext.trs_account_manage.Where(x => x.id != id&&!x.del_flag)
join tmd in DbContext.trs_account_manage_detail.Where(x => x.account_id != id) on tm.id equals tmd.account_id into tmtemp
from t in tmtemp.DefaultIfEmpty()
where t == null
select tm;
if (details.ToList().Count>0)
{
throw new Exception($"已有账户未设置客户");
}
}
else
{
var details = DbContext.trs_account_manage_detail.Where(x => x.account_id != id && clientIds.Contains(x.client_id??0)).Select(s => s.client_name).ToList();
if (details.Any())
{
throw new Exception($"客户 {string.Join(",", details)} 已配置");
}
}
}
public void DeleteAccountManage(int id)
{
var trsAcountManage = DbContext.trs_account_manage.FirstOrDefault(x => x.id == id&&!x.del_flag);
if (trsAcountManage==null)
{
throw new Exception("删除失败,原数据不存在");
}
trsAcountManage.del_flag = true;
var details = DbContext.trs_account_manage_detail.Where(x => x.account_id == trsAcountManage.id);
DbContext.trs_account_manage_detail.RemoveRange(details);
DbContext.SaveChanges();
}
public TrsAccountManageDto GetDetial(int id)
{
TrsAccountManageDto trsAccountManageDto = new TrsAccountManageDto();
var trsAcountManage = DbContext.trs_account_manage.FirstOrDefault(x => x.id == id && !x.del_flag);
if (trsAcountManage == null)
{
throw new Exception("原数据不存在");
}
trsAccountManageDto.id = trsAcountManage.id;
trsAccountManageDto.account=trsAcountManage.account;
trsAccountManageDto.account_name = trsAcountManage.account_name;
trsAccountManageDto.remark= trsAcountManage.remark;
trsAccountManageDto.trader_id=trsAcountManage.trader_id;
trsAccountManageDto.TrsAccountManageDetails = DbContext.trs_account_manage_detail.Where(x=>x.account_id==id).ToList();
return trsAccountManageDto;
}
}
}