using Infrastructure.Attribute; using Infrastructure.Extensions; using ZR.Model.Business.Dto; using ZR.Model.Business; using ZR.Repository; using ZR.Service.Business.IBusinessService; using ZR.ServiceCore.Services; namespace ZR.Service.Business { /// /// 工作记录Service业务层处理 /// [AppService(ServiceType = typeof(ICamWorkrecordService), ServiceLifetime = LifeTime.Transient)] public class CamWorkrecordService : BaseService, ICamWorkrecordService { private ICamWorkerService camWorkerService; public CamWorkrecordService(ICamWorkerService camWorkerService) { this.camWorkerService = camWorkerService; } /// /// 查询工作记录列表 /// /// /// public PagedInfo GetList(CamWorkrecordQueryDto parm) { var predicate = QueryExp(parm); var response = Queryable() .OrderBy("Id desc") .Where(predicate.ToExpression()) .ToPage(parm); var ids = response.Result.Select(it => it.Id).ToList(); if (ids != null && ids.Count > 0) { var works = camWorkerService.AsQueryable().Where(it => ids.Contains(it.WorkrecordId)).ToList(); response.Result.ForEach(item => { var w = works.Where(it => it.WorkrecordId == item.Id).Select(it => new CamWorkersDto { WorkerName = it.WorkerName, Id = it.Id }).ToList(); item.Workers = w; if (w.Count > 0) { item.Worker = string.Join(",", w.Select(it => it.WorkerName).ToList()); } else { item.Worker = ""; } if (!string.IsNullOrEmpty(item.Remarks)) { try { item.RemarksDic = JsonConvert.DeserializeObject>(item.Remarks); } catch (Exception ex) { } } }); } return response; } /// /// 获取详情 /// /// /// public CamWorkrecord GetInfo(int Id) { var response = Queryable() .Where(x => x.Id == Id) .First(); return response; } /// /// 添加工作记录 /// /// /// public CamWorkrecord AddCamWorkrecord(CamWorkrecord model) { return Insertable(model).ExecuteReturnEntity(); } /// /// 修改工作记录 /// /// /// public int UpdateCamWorkrecord(CamWorkrecord model) { return Update(model, true, "修改工作记录"); } /// /// 导出工作记录 /// /// /// public PagedInfo ExportList(CamWorkrecordQueryDto parm) { parm.PageNum = 1; parm.PageSize = 100000; var predicate = QueryExp(parm); var response = Queryable() .Where(predicate.ToExpression()) .Select((it) => new CamWorkrecordExcelDto() { }, true) .ToPage(parm); var ids = response.Result.Select(it => it.Id).ToList(); if (ids != null && ids.Count > 0) { var works = camWorkerService.AsQueryable().Where(it => ids.Contains(it.WorkrecordId)).ToList(); response.Result.ForEach(item => { var w = works.Where(it => it.WorkrecordId == item.Id).Select(it => it.WorkerName).ToList(); item.Workers = w; if (!string.IsNullOrEmpty(item.Remarks)) { try { //item.RemarksDic = JsonConvert.DeserializeObject>(item.Remarks); } catch (Exception ex) { } } }); } return response; } /// /// 查询导出表达式 /// /// /// private static Expressionable QueryExp(CamWorkrecordQueryDto parm) { var predicate = Expressionable.Create(); //predicate = predicate.AndIF(parm.BeginRecordTime == null, it => it.RecordTime >= DateTime.Now.ToShortDateString().ParseToDateTime()); predicate = predicate.AndIF(parm.BeginRecordTime != null, it => it.RecordTime >= parm.BeginRecordTime); predicate = predicate.AndIF(parm.EndRecordTime != null, it => it.RecordTime <= parm.EndRecordTime); predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.DeptName), it => it.DeptName == parm.DeptName); predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.Address), it => it.Address.Contains(parm.Address)); predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.Content), it => it.Content.Contains(parm.Content)); predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.StatusName), it => it.StatusName == parm.StatusName); //camWorkerService.AsQueryable().Where(it => it.WorkerName.Contains(parm.Workrecord)); // 关键:根据子表 CamWorker 过滤 if (!string.IsNullOrEmpty(parm.Workrecord)) { predicate = predicate.And(it => SqlFunc.Subqueryable() .Where(w => w.WorkrecordId == it.Id && w.WorkerName.Contains(parm.Workrecord)) .Any() ); } return predicate; } } }