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; } } }