using AutoMapper;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WMS.Web.Core.Dto;
using WMS.Web.Core.Dto.Login;
using WMS.Web.Core.Internal.Results;
using WMS.Web.Domain.Entitys;
using WMS.Web.Domain.Infrastructure;
using WMS.Web.Domain.IService;
using WMS.Web.Domain.IService.Public;
using WMS.Web.Domain.Values;
namespace WMS.Web.Domain.Services
{
///
/// 箱唛-服务
///
public class BoxMarkService : IBoxMarkService
{
private readonly IMapper _mapper;
public readonly IBasicsRepositories _transactionRepositories;
private readonly IBoxMarkRepositories _boxMarkRepositories;
private readonly ILogger _logger;
public BoxMarkService(IMapper mapper, ILogger logger,
IBasicsRepositories transactionRepositories,
IBoxMarkRepositories boxMarkRepositories)
{
_mapper = mapper;
_logger = logger;
_transactionRepositories = transactionRepositories;
_boxMarkRepositories = boxMarkRepositories;
}
///
/// 生成
///
///
///
///
public async Task> Generate(GenerateBoxMarkDto dto, LoginInDto loginInfo)
{
_logger.LogInformation($"箱唛生成:{JsonConvert.SerializeObject(dto)} 操作人:{loginInfo.UserInfo.StaffId + loginInfo.UserInfo.Nickname}");
//1.获取最新的箱唛信息
var billNo_new = await _boxMarkRepositories.GetLastBillNo();
//2.dto映射实体
var entity = new BoxMark();
entity= _mapper.Map(dto, entity);
entity.Create(loginInfo.UserInfo.StaffId);
int new_firstBillNo = billNo_new == null ? 0 : billNo_new.FirstBillNo;
int new_lastBillNo = billNo_new == null ? 0 : billNo_new.LastBillNo;
entity.GenerateBillNo(new_firstBillNo, new_lastBillNo);
//添加
var model = await _boxMarkRepositories.Add(entity);
if (model==null)
return ResultList.ReFailure(ResultCodes.DateWriteError);
//返回列表-对应刚刚生成的数据和编号集合
var list= await _boxMarkRepositories.GetListInfoBy(model.Id, loginInfo.UserInfo.CompanyId);
if (list != null && list.Count != 0)
{
//处理-总数量
list.ForEach(x =>
{
x.BoxSortCount = this.GetSortCount(x.ProductQty, x.CratingQty);
});
}
return ResultList.ReSuccess(list);
}
///
/// 列表分页
///
///
///
///
public async Task<(List list, int total)> GetPagedList(BoxMarkQueryRequest dto, int companyId)
{
var (list, count) = await _boxMarkRepositories.GetPagedList(dto, companyId);
if (list != null && list.Count != 0)
{
list.ForEach(x =>
{
x.BoxSortCount = this.GetSortCount(x.ProductQty, x.CratingQty);
});
}
return (list, count);
}
///
/// 装箱总数
///
///
///
///
private int GetSortCount(decimal productQty, decimal cratingQty)
{
//计算要装的箱数量
var boxCount_tag = productQty / cratingQty;
var boxCount = Convert.ToInt32(boxCount_tag);
//判断是否存在小数点;true表明有尾箱数,false没有尾箱数
var hasPart = Math.Floor(boxCount_tag) != boxCount_tag;
//有小数点向上取整
if (hasPart)
boxCount = Convert.ToInt32(Math.Ceiling(boxCount_tag));
return boxCount;
}
}
}