using Infrastructure; using Infrastructure.Attribute; using ZR.Model; using ZR.Model.Business; using ZR.Model.Business.Dto; using ZR.Model.System; using ZR.Repository; using ZR.Service.Business.IBusinessService; namespace ZR.Service.Business { /// /// 签到记录Service业务层处理 /// [AppService(ServiceType = typeof(IOdfCheckinService), ServiceLifetime = LifeTime.Transient)] public class OdfCheckinService : BaseService, IOdfCheckinService { /// /// 新增签到记录 /// /// /// public OdfCheckin AddCheckin(OdfCheckinDto dto) { // 校验 RoomId 存在 var room = Context.Queryable() .Where(r => r.Id == dto.RoomId) .First(); if (room == null) { throw new CustomException("机房不存在"); } var model = new OdfCheckin { RoomId = dto.RoomId, Personnel = dto.Personnel, CheckinTime = DateTime.Parse(dto.CheckinTime), WorkContent = dto.WorkContent, UserId = dto.UserId, CreatedAt = DateTime.Now }; return Insertable(model).ExecuteReturnEntity(); } /// /// 分页查询签到记录(联查机房名称和提交人用户名) /// /// /// public PagedInfo GetList(OdfCheckinQueryDto parm) { var predicate = QueryExp(parm); var response = Queryable() .Where(predicate.ToExpression()) .LeftJoin((it, r) => it.RoomId == r.Id) .LeftJoin((it, r, u) => it.UserId == u.UserId) .OrderByDescending((it, r, u) => it.CheckinTime) .Select((it, r, u) => new OdfCheckinListDto() { RoomName = r.RoomName, UserName = u.NickName }, true) .ToPage(parm); return response; } /// /// 导出签到记录 /// /// /// public PagedInfo ExportList(OdfCheckinQueryDto parm) { parm.PageNum = 1; parm.PageSize = 100000; var predicate = QueryExp(parm); var response = Queryable() .Where(predicate.ToExpression()) .LeftJoin((it, r) => it.RoomId == r.Id) .LeftJoin((it, r, u) => it.UserId == u.UserId) .OrderByDescending((it, r, u) => it.CheckinTime) .Select((it, r, u) => new OdfCheckinListDto() { RoomName = r.RoomName, UserName = u.NickName }, true) .ToPage(parm); return response; } /// /// 查询表达式 /// /// /// private static Expressionable QueryExp(OdfCheckinQueryDto parm) { var predicate = Expressionable.Create(); predicate = predicate.AndIF(parm.RoomId != null, it => it.RoomId == parm.RoomId); predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.Personnel), it => it.Personnel.Contains(parm.Personnel)); predicate = predicate.AndIF(parm.BeginCheckinTime != null, it => it.CheckinTime >= parm.BeginCheckinTime); predicate = predicate.AndIF(parm.EndCheckinTime != null, it => it.CheckinTime <= parm.EndCheckinTime); return predicate; } } }