using AutoMapper;
using Kean.Application.Query.Interfaces;
using Kean.Infrastructure.Database;
using Kean.Infrastructure.Database.Repository.Default;
using Kean.Infrastructure.Database.Repository.Default.Entities;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Kean.Application.Query.Implements
{
///
/// 任务信息查询服务实现
///
public sealed class TaskService : ITaskService
{
private readonly IMapper _mapper; // 模型映射
private readonly IDefaultDb _database; // 默认数据库
///
/// 依赖注入
///
public TaskService(
IMapper mapper,
IDefaultDb database)
{
_mapper = mapper;
_database = database;
}
/*
* 实现 Kean.Application.Query.Interfaces.ITaskService.GetTaskCount 方法
*/
public async Task GetTaskCount(
int[] area,
string type,
string qualityState,
string barcode,
string original,
string destination,
DateTime? timeFrom,
DateTime? timeTo)
{
return (await GetTaskSchema(area, type, qualityState, barcode, original, destination, timeFrom, timeTo)
.Single(m => new { Count = Function.Count(m.MANAGE_ID) }))
.Count;
}
/*
* 实现 Kean.Application.Query.Interfaces.ITaskService.GetTaskList 方法
*/
public async Task> GetTaskList(
int[] area,
string type,
string qualityState,
string barcode,
string original,
string destination,
DateTime? timeFrom,
DateTime? timeTo,
string sort,
int? offset,
int? limit)
{
return _mapper.Map>(await GetTaskSchema(area, type, qualityState, barcode, original, destination, timeFrom, timeTo)
.Sort(sort, _mapper)
.OrderBy(r => r.MANAGE_ID, Infrastructure.Database.Order.Ascending)
.Page(offset, limit)
.Select());
}
/*
* 组织 GetTask 相关方法的条件
*/
private ISchema GetTaskSchema(
int[] area,
string type,
string qualityState,
string barcode,
string original,
string destination,
DateTime? timeFrom,
DateTime? timeTo)
{
var schema = _database.From();
if (area != null)
{
schema = schema.Where(m => (area.Contains(m.START_AREA_ID) || area.Contains(m.END_AREA_ID)));
}
if (type != null)
{
schema = schema.Where(m => m.MANAGE_TYPE == type);
}
if (barcode != null)
{
schema = schema.Where(m => m.STOCK_BARCODE.Contains(barcode));
}
if (original != null)
{
schema = schema.Where(m => m.START_CELL_NAME.Contains(original));
}
if (destination != null)
{
schema = schema.Where(m => m.END_CELL_NAME.Contains(destination));
}
if (timeFrom.HasValue)
{
schema = schema.Where(m => m.BEGIN_TIME >= timeFrom.Value);
}
if (timeTo.HasValue)
{
schema = schema.Where(m => m.BEGIN_TIME <= timeTo.Value.AddDays(1));
}
if (qualityState != null)
{
schema = schema.Where(m => m.GOODS_QC_STATE == qualityState);
}
return schema;
}
}
}