using AutoMapper; using JSMachine.WMS.App.Dto; using JSMachine.WMS.App.IService; using JSMachine.WMS.Domain.Entity; using JSMachine.WMS.Domain.IRepository; using JSMachine.WMS.Domain.Repository; using JSMachine.WMS.Infrastructure; using JSMachine.WMS.Infrastructure.LambdaHelp; using SqlSugar; using System.Data; using System.Linq.Expressions; namespace JSMachine.WMS.App.ServiceImpl { /// /// 应用层通用服务基类,负责 DTO 与领域实体之间的映射, /// 并将增删改查请求委托给对应的领域仓储。 /// /// 应用层数据传输对象类型。 /// 领域聚合根类型。 public class BaseService : IBaseService where TAggregateRoot : AggregateRoot, IAggregateRoot where TDTO : IRootDto { private IBaseRepository IBaseRepository; private static IMapper _mapper = GlobalServericeProvidor.GetService(); public BaseService(IBaseRepository baseRepository) { IBaseRepository = baseRepository; } /// /// 添加单个 DTO;当 DTO 未提供标识时生成新标识,并维护创建时间和修改时间。 /// /// 待保存的数据传输对象。 /// 可选的数据库作用域;为空时使用仓储默认作用域。 /// 数据库插入是否成功。 public async virtual Task Add(TDTO dto, SqlSugarScope sqlSugarScope=null) { if (dto.Id == Guid.Empty) dto.Id = Guid.NewGuid(); dto.CreationTime = DateTime.Now; dto.LastModifiedTime = DateTime.Now; return await IBaseRepository.Add(_mapper.Map(dto),sqlSugarScope); } public async virtual Task Add(TDTO dto, params string[] ignoreColumns) { if (dto.Id == Guid.Empty) dto.Id = Guid.NewGuid(); dto.CreationTime = DateTime.Now; dto.LastModifiedTime = DateTime.Now; return await IBaseRepository.Add(_mapper.Map(dto), ignoreColumns); } public async virtual Task Add(List entities) { if (entities == null || entities.Count == 0) return false; entities.ForEach(p => { if (p.Id == Guid.Empty) p.Id = Guid.NewGuid(); p.CreationTime = DateTime.Now; p.LastModifiedTime = DateTime.Now; }); return await IBaseRepository.Add(_mapper.Map>(entities)); } public async Task Add(string tableName, Dictionary dic) { if (dic.ContainsKey("Id")) dic.Add("Id", Guid.NewGuid().ToString("N")); return await IBaseRepository.Add(tableName, dic); } /// /// 添加之前判断指定字段是否存在,不存在则添加 /// /// /// /// public async Task AddIfNotExist(TDTO entity, Expression> expression) { return await IBaseRepository.AddIfNotExist(_mapper.Map(entity), _mapper.Map>>(expression)); } public async Task Count() { return await IBaseRepository.Count(); } public async Task Count(Expression> expression) { return await IBaseRepository.Count(_mapper.Map>>(expression)); } public async Task DeleByExpression(Expression> expression) { return await IBaseRepository.DeleByExpression(expression); } public async Task DeleteBatch(Guid[] ids) { return await IBaseRepository.DeleteBatch(ids); } public async Task DeleteByEntity(TDTO aggregateRoot) { return await IBaseRepository.DeleteByEntity(_mapper.Map(aggregateRoot)); } public async Task DeleteByEntity(List aggregateRoot) { return await IBaseRepository.DeleteByEntity(_mapper.Map>(aggregateRoot)); } public async Task DeleteById(Guid id, SqlSugarScope sqlSugarScope=null) { return await IBaseRepository.DeleteById(id,sqlSugarScope); } public async Task EditBatch(List dtos) { dtos.ForEach(p => p.LastModifiedTime = DateTime.Now); return await IBaseRepository.EditBatch(_mapper.Map>(dtos)); } /// /// 快速批量更新 /// /// /// public async Task EditBatchFast(List dtos) { dtos.ForEach(p => p.LastModifiedTime = DateTime.Now); return await IBaseRepository.EditBatchFast(_mapper.Map>(dtos)); } public async Task EditByDic(string tableName, Dictionary dic) { return await IBaseRepository.EditByDic(tableName, dic); } public async Task EditByDic(string tableName, List> dic) { return await IBaseRepository.EditByDic(tableName, dic); } public async virtual Task EditSingal(TDTO aggregateRoot) { aggregateRoot.LastModifiedTime = DateTime.Now; //更新的时候不能够更改数据的添加时间 return await IBaseRepository.EditSingal(_mapper.Map(aggregateRoot), new string[] { "CreationTime" }); } public async Task EditSingal(TDTO dto, Expression> ignoredColumns) { dto.LastModifiedTime = DateTime.Now; return await IBaseRepository.EditSingal(_mapper.Map(dto), _mapper.Map>>(ignoredColumns)); } public async Task EditSingal(TDTO dto, string[] ignoredColumns) { dto.LastModifiedTime = DateTime.Now; return await IBaseRepository.EditSingal(_mapper.Map(dto), ignoredColumns); } public async Task EditSingalWithSpecificCols(TDTO dto, string[] columns) { dto.LastModifiedTime = DateTime.Now; return await IBaseRepository.EditSingalWithSpecificCols(_mapper.Map(dto), columns); } public async Task Exist(Expression> expression) { return await IBaseRepository.Exist(_mapper.Map>>(expression)); } public async Task> GetAll() { List data = await IBaseRepository.GetAll(); return _mapper.Map>(data); } public async Task> GetAll(string orderByFiled, OrderByType orderByType) { List data = await IBaseRepository.GetAll(LambdaHelper.GetOrderExpression(orderByFiled), orderByType); return _mapper.Map>(data); } public async Task> GetAllFragment(int fragmentSize = 50000) { List data = await IBaseRepository.GetAllFragment(fragmentSize); return _mapper.Map>(data); } public async Task> GetAllFragment(string orderByFiled, OrderByType orderByType, int fragmentSize = 200) { List data = await IBaseRepository.GetAllFragment( LambdaHelper.GetOrderExpression(orderByFiled), orderByType, fragmentSize); return _mapper.Map>(data); } public async Task> GetBySql(string sql) { List data = await IBaseRepository.GetBySql(sql); return _mapper.Map>(data); } public async Task> GetBySql(string sql, Dictionary sqlParam) { List data = await IBaseRepository.GetBySql(sql, sqlParam); return _mapper.Map>(data); } public async Task GetDataTableBysql(string sql) { return await IBaseRepository.GetDataTableBysql(sql); } public async Task GetDataTableBysql(string sql, Dictionary sqlParam) { return await IBaseRepository.GetDataTableBysql(sql, sqlParam); } public async Task> GetDynamicsBysql(string sql) { return await IBaseRepository.GetDynamicsBysql(sql); } public async Task> GetDynamicsBysql(string sql, Dictionary sqlParam) { return await IBaseRepository.GetDynamicsBysql(sql, sqlParam); } public async Task> GetListByExpression(Expression> expression) { List data = await IBaseRepository.GetListByExpression( _mapper.Map>>(expression)); return _mapper.Map>(data); } /// /// 查询满足条件的所有实体(带排序功能) /// /// /// /// Asc = 0,Desc = 1 /// public async Task> GetListByExpression(Expression> expression, string filedName, OrderByType orderByType = OrderByType.Desc) { List data = await IBaseRepository.GetListByExpression( _mapper.Map>>(expression), filedName, orderByType); return _mapper.Map>(data); } /// /// 通过实体查询满足条件的数据 /// /// /// public async Task> GetListWhereClass(TDTO dto) { List data = await IBaseRepository.GetListWhereClass( _mapper.Map(dto)); return _mapper.Map>(data); } public async Task GetSingalByExpression(Expression> expression) { TAggregateRoot data = await IBaseRepository.GetSingalByExpression( _mapper.Map>>(expression)); return _mapper.Map(data); } public async Task GetSingalByExpression( Expression> expression, Expression> orderByExpress, OrderByType orderByType) { TAggregateRoot data = await IBaseRepository.GetSingalByExpression( _mapper.Map>>(expression), orderByExpress, orderByType); return _mapper.Map(data); } public async Task> QueryByIds(Guid[] ids) { List data = await IBaseRepository.QueryByIds(ids); return _mapper.Map>(data); } public async Task QueryByKey(string key) { TAggregateRoot data = await IBaseRepository.QueryByKey(key); return _mapper.Map(data); } public async Task> QueryByPage(PageQueryCondition pageQueryCondition) { PagedResult dataPage = await IBaseRepository.QueryByPage(pageQueryCondition); return new PagedResult(dataPage.TotalRecords, dataPage.PageSize, dataPage.PageNumber, _mapper.Map>(dataPage.PageData)); } public async Task ExcuteSql(string sql, params SugarParameter[] @params) { return await IBaseRepository.ExcuteSql(sql, @params); } #region 事务操作 public async Task BeginTran(SqlSugarScope sqlSugarScope) { await IBaseRepository.BeginTran(sqlSugarScope); } public async Task CommitTran(SqlSugarScope sqlSugarScope) { await IBaseRepository.CommitTran(sqlSugarScope); } public async Task RollbackTran(SqlSugarScope sqlSugarScope) { await IBaseRepository.RollbackTran(sqlSugarScope); } public SqlSugarTransaction UseTranAsync() { return IBaseRepository.UseTranAsync(); } #endregion } }