using AutoMapper;
using Kean.Application.Query.Interfaces;
using Kean.Application.Query.ViewModels;
using Kean.Infrastructure.Database;
using Kean.Infrastructure.Database.Repository.Default;
using Kean.Infrastructure.Database.Repository.Default.Entities;
//using Kean.Infrastructure.Database.Repository.Record;
//using Kean.Infrastructure.Database.Repository.Record.Entities;
using Kean.Infrastructure.Utilities;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Transactions;
namespace Kean.Application.Query.Implements
{
///
/// 库存信息查询服务实现
///
public sealed class RecordService : IRecordService
{
private readonly IMapper _mapper; // 模型映射
//private readonly IRecordDb _recordDb;
private readonly IDefaultDb _database; // 默认数据库
///
/// 依赖注入
///
public RecordService(
IMapper mapper,
//IRecordDb recordDb
IDefaultDb database)
{
_mapper = mapper;
//_recordDb = recordDb;
_database = database;
}
/*
* 实现 Kean.Application.Query.Interfaces.IRecordService.GetInterfaceRecordCount 方法
*/
public async Task GetInterfaceRecordCount(
string direction,
string method,
string requestNo,
string barcode,
string result,
DateTime? beginTimeFrom,
DateTime? beginTimeTo,
DateTime? endTimeFrom,
DateTime? endTimeTo)
{
return (await GetInterfaceRecordSchema(direction, method, requestNo, barcode, result, beginTimeFrom, beginTimeTo, endTimeFrom, endTimeTo)
.Single(r => new { Count = Function.Count(r.ID) }))
.Count;
}
/*
* 实现 Kean.Application.Query.Interfaces.IRecordService.GetInterfaceRecordList 方法
*/
public async Task> GetInterfaceRecordList(
string direction,
string method,
string requestNo,
string barcode,
string result,
DateTime? beginTimeFrom,
DateTime? beginTimeTo,
DateTime? endTimeFrom,
DateTime? endTimeTo,
string sort,
int? offset,
int? limit)
{
var properties = new Dictionary();
return _mapper.Map>(await GetInterfaceRecordSchema(direction, method, requestNo, barcode, result, beginTimeFrom, beginTimeTo, endTimeFrom, endTimeTo)
.Sort(sort, _mapper)
.OrderBy(r => r.START_TIME, Infrastructure.Database.Order.Descending)
.OrderBy(r => r.ID, Infrastructure.Database.Order.Descending)
.Page(offset, limit)
.Select());
}
/*
* 组织 GetInterfaceRecord 相关方法的条件
*/
private ISchema GetInterfaceRecordSchema(
string direction,
string method,
string requestNo,
string barcode,
string result,
DateTime? beginTimeFrom,
DateTime? beginTimeTo,
DateTime? endTimeFrom,
DateTime? endTimeTo)
{
//var schema = _recordDb.From();
var schema = _database.From();
if (direction != null)
{
schema = schema.Where(r => r.DIRECTION.Contains(direction));
}
if (method != null)
{
schema = schema.Where(r => r.METHOD.Contains(method));
}
if (requestNo != null)
{
schema = schema.Where(r => r.REQUEST_NO.Contains(requestNo));
}
if (barcode != null)
{
schema = schema.Where(r => r.BARCODE.Contains(barcode));
}
if (result != null)
{
schema = schema.Where(r => r.RESULT == result);
}
if (beginTimeFrom.HasValue)
{
schema = schema.Where(r => r.START_TIME >= beginTimeFrom.Value);
}
if (beginTimeTo.HasValue)
{
schema = schema.Where(r => r.START_TIME <= beginTimeTo.Value.AddDays(1));
}
if (endTimeFrom.HasValue)
{
schema = schema.Where(r => r.END_TIME >= endTimeFrom.Value);
}
if (endTimeTo.HasValue)
{
schema = schema.Where(r => r.END_TIME <= endTimeTo.Value.AddDays(1));
}
return schema;
}
/*
* 实现 Kean.Application.Query.Interfaces.IRecordService.GetApiRecordCount 方法
*/
public async Task GetApiRecordCount(
string userName,
string method,
string controlerName,
DateTime? requestTimeFrom,
DateTime? requestTimeTo)
{
return (await GetApiRecordSchema(userName, method, controlerName, requestTimeFrom, requestTimeTo)
.Single(r => new { Count = Function.Count(r.ID) }))
.Count;
}
/*
* 实现 Kean.Application.Query.Interfaces.IRecordService.GetApiRecordList 方法
*/
public async Task> GetApiRecordList(
string userName,
string method,
string controlerName,
DateTime? requestTimeFrom,
DateTime? requestTimeTo,
string sort,
int? offset,
int? limit)
{
var properties = new Dictionary();
return _mapper.Map>(await GetApiRecordSchema(userName, method, controlerName, requestTimeFrom, requestTimeTo)
.Sort(sort, _mapper)
.OrderBy(r => r.ID, Infrastructure.Database.Order.Descending)
.Page(offset, limit)
.Select());
}
/*
* 组织 GetApiRecord 相关方法的条件
*/
private ISchema GetApiRecordSchema(
string userName,
string method,
string controlerName,
DateTime? requestTimeFrom,
DateTime? requestTimeTo)
{
var schema = _database.From();
if (!string.IsNullOrEmpty(userName))
{
schema = schema.Where(r => r.USER_NAME.Contains(userName));
}
if (!string.IsNullOrEmpty(method))
{
schema = schema.Where(r => r.METHOD.Contains(method));
}
if (!string.IsNullOrEmpty(controlerName))
{
schema = schema.Where(r => r.CONTROLLER_NAME.Contains(controlerName));
}
if (requestTimeFrom.HasValue)
{
schema = schema.Where(r => r.REQUEST_TIME >= requestTimeFrom.Value);
}
if (requestTimeTo.HasValue)
{
schema = schema.Where(r => r.REQUEST_TIME <= requestTimeTo.Value.AddDays(1));
}
return schema;
}
/*
* 实现 Kean.Application.Query.Interfaces.IRecordService.RecordStatistics 方法
*/
public async Task