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; } } }