using Dlhis.Basic.BusinessPlace.Request; using Dlhis.Basic.BusinessPlace.Response; using Dlhis.Entity.Basic.Entity; using Dlhis.Entity.Canteen.Enums; using Kurisu.AspNetCore.Utils.Extensions; using Kurisu.Core.DataAccess.Dto; using Kurisu.SqlSugar.Extensions; using Kurisu.SqlSugar.Services; using Mapster; namespace Dlhis.Basic.BusinessPlace.Services.Implements; public class BusinessPlaceService : IBusinessPlaceService { private readonly IDbContext _dbContext; public BusinessPlaceService(IDbContext dbContext) { _dbContext = dbContext; } public async Task> GetPageAsync(BusinessPlacePageRequest request) { var page = await _dbContext.Queryable() .LeftJoin((x, ps) => x.Code == ps.PlaceCode) .LeftJoin((x, ps, s) => s.Code == ps.ShiftCode) .WhereIF(request.Search.IsPresent(), x => x.CustomCode.Contains(request.Search) || x.Code.ToString().Contains(request.Search) || x.Name.Contains(request.Search)) .WhereIF(request.Catalog.HasValue, x => x.Catalog == request.Catalog) .WhereIF(request.Status.HasValue, x => x.Status == request.Status) .WhereIF(request.Source.HasValue, x => x.Source == request.Source) .Select((x, ps, s) => new BusinessPlaceResponse { Id = x.Id, Code = x.Code, Status = x.Status, Name = x.Name, Catalog = x.Catalog, CustomCode = x.CustomCode, Source = x.Source, Supplier = x.Supplier, ShiftCode = s.Code, ShiftName = s.Name }) .ToPageListAsync(request); return page; } public async Task> GetOpenedListAsync() { return await _dbContext.Queryable() .Where(x => x.Status == CanteenBusinessPlaceStatusEnumType.Opened) .Select() .ToListAsync(); } public async Task SaveAsync(BusinessPlaceSaveRequest request) { await CheckExistsCustomCodeAsync(request); if (!request.Id.HasValue) { var entity = request.Adapt(); entity.CustomCode = request.CustomCode; entity.Code = Guid.NewGuid(); await _dbContext.InsertAsync(entity); } else { var entity = await _dbContext.Queryable().FirstAsync(x => x.Id == request.Id); request.Adapt(entity); await _dbContext.UpdateAsync(entity); } } public async Task SaveShiftAsync(BusinessPlaceSaveShiftRequest request) { var place = await _dbContext.Queryable().Where(x => x.Id == request.Id).FirstAsync(); place.ThrowIfNull("营业点不存在"); var relationship = await _dbContext.Queryable().Where(x => x.PlaceCode == place.Code).FirstAsync(); if (relationship == null) { await _dbContext.InsertAsync(new BusinessPlaceShiftRelationshipEntity { PlaceCode = place.Code, ShiftCode = request.ShiftCode, }); } else { relationship.ShiftCode = request.ShiftCode; await _dbContext.UpdateAsync(relationship); } } //*********************************************** help methods ***************************************************// /// /// 检查重复手工号 /// /// /// private async Task CheckExistsCustomCodeAsync(BusinessPlaceSaveRequest request) { var existsSameCustomCode = await _dbContext.Queryable() .Where(x => x.CustomCode == request.CustomCode) .WhereIF(request.Id.HasValue, x => x.Id != request.Id) .AnyAsync(); existsSameCustomCode.ThrowIfTrue($"自定义手工号[{request.CustomCode}]存在重复,请检查."); } }