.NETAdmin/ZR.Service/Business/CamWorkrecordService.cs
2025-09-12 20:22:39 +08:00

179 lines
6.5 KiB
C#

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
{
/// <summary>
/// 工作记录Service业务层处理
/// </summary>
[AppService(ServiceType = typeof(ICamWorkrecordService), ServiceLifetime = LifeTime.Transient)]
public class CamWorkrecordService : BaseService<CamWorkrecord>, ICamWorkrecordService
{
private ICamWorkerService camWorkerService;
public CamWorkrecordService(ICamWorkerService camWorkerService)
{
this.camWorkerService = camWorkerService;
}
/// <summary>
/// 查询工作记录列表
/// </summary>
/// <param name="parm"></param>
/// <returns></returns>
public PagedInfo<CamWorkrecordDto> GetList(CamWorkrecordQueryDto parm)
{
var predicate = QueryExp(parm);
var response = Queryable()
.OrderBy("Id desc")
.Where(predicate.ToExpression())
.ToPage<CamWorkrecord, CamWorkrecordDto>(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<Dictionary<string, object>>(item.Remarks);
}
catch (Exception ex)
{
}
}
});
}
return response;
}
/// <summary>
/// 获取详情
/// </summary>
/// <param name="Id"></param>
/// <returns></returns>
public CamWorkrecord GetInfo(int Id)
{
var response = Queryable()
.Where(x => x.Id == Id)
.First();
return response;
}
/// <summary>
/// 添加工作记录
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
public CamWorkrecord AddCamWorkrecord(CamWorkrecord model)
{
return Insertable(model).ExecuteReturnEntity();
}
/// <summary>
/// 修改工作记录
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
public int UpdateCamWorkrecord(CamWorkrecord model)
{
return Update(model, true, "修改工作记录");
}
/// <summary>
/// 导出工作记录
/// </summary>
/// <param name="parm"></param>
/// <returns></returns>
public PagedInfo<CamWorkrecordExcelDto> 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<Dictionary<string, object>>(item.Remarks);
}
catch (Exception ex)
{
}
}
});
}
return response;
}
/// <summary>
/// 查询导出表达式
/// </summary>
/// <param name="parm"></param>
/// <returns></returns>
private static Expressionable<CamWorkrecord> QueryExp(CamWorkrecordQueryDto parm)
{
var predicate = Expressionable.Create<CamWorkrecord>();
//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<CamWorker>()
.Where(w => w.WorkrecordId == it.Id && w.WorkerName.Contains(parm.Workrecord))
.Any()
);
}
return predicate;
}
}
}