You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
haoliang-net/src/CncService/Impl/ProductionService.cs

108 lines
4.4 KiB
C#

using System;
using System.Collections.Generic;
using CncService.Interface;
using CncModels.Dto;
using CncModels.Dto.Production;
using CncModels.Entity;
using CncModels.Constants;
using CncRepository.Interface;
namespace CncService.Impl
{
/// <summary>
/// 产量管理实现
/// </summary>
public class ProductionService : IProductionService
{
private readonly IDailyProductionRepository _dailyProductionRepository;
private readonly IProductionSegmentRepository _productionSegmentRepository;
private readonly IProductionAdjustmentRepository _productionAdjustmentRepository;
public ProductionService(
IDailyProductionRepository dailyProductionRepository,
IProductionSegmentRepository productionSegmentRepository,
IProductionAdjustmentRepository productionAdjustmentRepository)
{
_dailyProductionRepository = dailyProductionRepository ?? throw new ArgumentNullException(nameof(dailyProductionRepository));
_productionSegmentRepository = productionSegmentRepository ?? throw new ArgumentNullException(nameof(productionSegmentRepository));
_productionAdjustmentRepository = productionAdjustmentRepository ?? throw new ArgumentNullException(nameof(productionAdjustmentRepository));
}
/// <inheritdoc/>
public PagedResult<DailyProductionListItem> GetList(ProductionQuery query)
{
if (query == null) throw new BusinessException(ErrorCode.BadRequest, "查询参数不能为空");
return _dailyProductionRepository.GetList(query);
}
/// <inheritdoc/>
public DailySummaryResponse GetSummary(DateTime? date, int? workshopId)
{
var targetDate = date ?? DateTime.Today;
var total = _dailyProductionRepository.GetTotalByDateRange(targetDate, targetDate, workshopId);
// 如果汇总表无数据,从产量分段实时计算
if (total == 0)
{
total = _productionSegmentRepository.GetTotalByDateRange(targetDate, targetDate, workshopId);
}
int machineCount = _productionSegmentRepository.GetActiveMachineCount(targetDate, workshopId);
decimal cuttingTime = _productionSegmentRepository.GetTotalCuttingTimeByDate(targetDate);
return new DailySummaryResponse
{
TotalQuantity = (int)total,
MachineCount = machineCount,
NormalCount = 0,
OfflineCount = 0,
totalCuttingTime = cuttingTime
};
}
/// <inheritdoc/>
public decimal GetTotalByDateRange(DateTime startDate, DateTime endDate, int? workshopId)
{
return _dailyProductionRepository.GetTotalByDateRange(startDate, endDate, workshopId);
}
/// <inheritdoc/>
public bool Adjust(ProductionAdjustRequest request)
{
if (request == null) throw new BusinessException(ErrorCode.BadRequest, "请求参数不能为空");
decimal newValue;
decimal.TryParse(request.NewValue, out newValue);
var entity = new ProductionAdjustment
{
TargetTable = request.TargetTable,
TargetId = request.TargetId,
FieldName = request.FieldName,
OldValue = null,
NewValue = newValue,
Reason = request.Reason,
OperatorIp = "",
CreatedAt = DateTime.Now
};
_productionAdjustmentRepository.Create(entity);
return true;
}
/// <inheritdoc/>
public List<AdjustmentHistoryItem> GetAdjustmentHistory(int recordId)
{
var records = _productionAdjustmentRepository.GetByTargetId(recordId);
var result = new List<AdjustmentHistoryItem>();
foreach (var r in records)
{
result.Add(new AdjustmentHistoryItem
{
Id = (int)r.Id,
OldValue = r.OldValue?.ToString() ?? "-",
NewValue = r.NewValue.ToString(),
Reason = r.Reason ?? "",
OperatorIp = r.OperatorIp ?? "",
CreatedAt = r.CreatedAt.ToString("yyyy-MM-dd HH:mm:ss")
});
}
return result;
}
}
}