939 lines
37 KiB
C#
Raw Normal View History

2025-06-23 15:41:15 +08:00
using JetBrains.Annotations;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using NUglify.Helpers;
using Seyounth.Auto.Hs.Runtime.Plc;
using Seyounth.Auto.Hs.Runtime.Printer;
using Syc.Abp.Application.Contracts;
2025-06-23 15:41:15 +08:00
using Syc.Basic.Web.WMS.Dto;
using Syc.Basic.Web.WMS.Entitys;
using Syc.Basic.Web.WMS.IService;
2025-06-23 15:41:15 +08:00
using System;
using System.Collections;
2025-06-23 15:41:15 +08:00
using System.Collections.Generic;
using System.Linq;
using System.Linq.Dynamic.Core;
2025-06-23 15:41:15 +08:00
using System.Text;
using System.Threading.Tasks;
using Volo.Abp.DependencyInjection;
2025-06-23 15:41:15 +08:00
using Volo.Abp.Domain.Repositories;
namespace Syc.Basic.Web.WMS.Service
{
[AllowAnonymous]
public class BoxService : ApiService, IBoxService, ITransientDependency
2025-06-23 15:41:15 +08:00
{
private readonly IRepository<Box> boxRepository;
private readonly IRepository<Produce> produceRepository;
private readonly IRepository<Silk> silkRepository;
private readonly IPlcService plcService;
2025-06-23 15:41:15 +08:00
private readonly ILogger<BoxService> logger;
private readonly IPrinterService printerService;
2025-10-31 09:56:25 +08:00
private readonly IRepository<AutoLabel> autoRepository;
2025-11-11 09:20:17 +08:00
private readonly IRepository<Values> valueRepository;
2025-06-23 15:41:15 +08:00
public BoxService(IRepository<Box> boxRepository, IRepository<Produce> produceRepository, IRepository<Silk> silkRepository, IPlcService plcService, ILogger<BoxService> logger, IPrinterService printerService, IRepository<AutoLabel> autoRepository, IRepository<Values> valueRepository)
2025-06-23 15:41:15 +08:00
{
this.boxRepository = boxRepository;
this.produceRepository = produceRepository;
this.silkRepository = silkRepository;
this.plcService = plcService;
2025-06-23 15:41:15 +08:00
this.logger = logger;
this.printerService = printerService;
2025-10-31 09:56:25 +08:00
this.autoRepository = autoRepository;
2025-11-11 09:20:17 +08:00
this.valueRepository = valueRepository;
2025-06-23 15:41:15 +08:00
}
/// <summary>
/// 查询纸箱
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost]
public async Task<PageOutput<BoxDto>> GetBoxList(BoxInput input)
2025-06-23 15:41:15 +08:00
{
var boxlist = await boxRepository.GetQueryableAsync();
2025-06-24 18:26:51 +08:00
boxlist = boxlist.Where(x => x.IsDelete == 0);
if (input.Code != null)
boxlist = boxlist.Where(x => x.Code.Contains(input.Code));
if (input.Lot_No != null)
boxlist = boxlist.Where(x => x.Lot_No.Contains(input.Lot_No));
2025-06-23 15:41:15 +08:00
if (input.Spec != null)
boxlist = boxlist.Where(x => x.Spec.Contains(input.Spec));
2025-11-11 09:20:17 +08:00
if (input.Type != null)
boxlist = boxlist.Where(x => x.Type.Contains(input.Type));
if (input.Color != null)
{
if (input.Color == "无")
boxlist = boxlist.Where(x => x.Color == input.Color || x.Color == null);
2025-11-11 09:20:17 +08:00
else
boxlist = boxlist.Where(x => x.Color == input.Color);
}
if (input.Status > 0)
boxlist = boxlist.Where(x => x.DataType == input.Status - 1);
if (input.Mark != null)
boxlist = boxlist.Where(x => input.Mark.Contains(x.Mark));
2025-11-11 09:20:17 +08:00
if (input.Chang != null)
2026-01-04 08:44:48 +08:00
boxlist = boxlist.Where(x => x.Length == input.Chang);
if (input.Qty > 0)
2025-11-11 09:20:17 +08:00
boxlist = boxlist.Where(x => x.Qty == input.Qty);
if (input.Start_Time != null && input.End_Time != null)
boxlist = boxlist.Where(x => x.Dom_Time >= DateTime.Parse(input.Start_Time) && x.Dom_Time <= DateTime.Parse(input.End_Time));
2025-06-23 15:41:15 +08:00
2025-10-31 09:56:25 +08:00
var result = boxlist.OrderByDescending(x => x.Id).PageResult(input.Page, input.PageSize);
var data = result.Queryable.Select(e => new BoxDto()
2025-06-23 15:41:15 +08:00
{
Length = e.Length,
Net_Weight = e.Net_Weight,
Qty = e.Qty,
Id = e.Id,
Code = e.Code,
2025-10-31 09:56:25 +08:00
Dom_Time = DateTime.Parse(e.Dom_Time.ToString()).ToString("yyyy-MM-dd HH:mm:ss"),
DataType = e.DataType,
Mark = e.Mark,
2025-11-11 09:20:17 +08:00
Color = e.Color,
2025-10-31 09:56:25 +08:00
Create_Time = e.Create_Time,
Exp_Time = DateTime.Parse(e.Exp_Time.ToString()).ToString("yyyy-MM-dd HH:mm:ss"),
2025-06-23 15:41:15 +08:00
Lot_No = e.Lot_No,
Spec = e.Spec,
Gross_Weight = e.Gross_Weight,
Type = e.Type
2025-06-23 15:41:15 +08:00
}).ToList();
PageOutput<BoxDto> pageOutput = new PageOutput<BoxDto>();
pageOutput.Total = boxlist.Count();
2025-10-31 09:56:25 +08:00
pageOutput.Data = data;
pageOutput.PageIndex = input.Page;
2025-10-31 09:56:25 +08:00
pageOutput.PageSize = input.PageSize;
2025-06-23 15:41:15 +08:00
return pageOutput;
}
/// <summary>
/// 查询数量纸箱
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpGet]
public async Task<List<BoxDto>> GetBoxByNum()
{
2025-10-31 09:56:25 +08:00
var produce = await produceRepository.FirstOrDefaultAsync(x => x.IfUse == 1);
if (produce == null)
throw Oops.Oh("没有生产设置");
//var silks = await silkRepository.GetListAsync(x=>x.Status==1||x.Status==0);
var boxlist = await boxRepository.GetQueryableAsync();
2026-01-04 08:44:48 +08:00
boxlist = boxlist.Where(x => x.IsDelete == 0 && x.Spec == produce.Spec && x.Type == produce.Type && x.Lot_No == produce.Lot_No && x.Length == produce.Length);
2025-10-31 09:56:25 +08:00
var data = boxlist.Where(x => x.DataType == 0).Select(e => new BoxDto()
{
Net_Weight = e.Net_Weight,
Id = e.Id,
2025-10-31 09:56:25 +08:00
Code = e.Code,
DataType = e.DataType,
Mark = e.Mark
}).ToList();
2025-10-31 09:56:25 +08:00
return data.OrderByDescending(x => x.Id).Take(15).ToList();
}
/// <summary>
2025-06-23 15:41:15 +08:00
/// 添加纸箱
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost]
public async Task InsertBox(BoxDto input)
{
2025-11-11 09:20:17 +08:00
var values = await valueRepository.FirstOrDefaultAsync(x => x.Type == 0 && x.IsDelete == 0 && x.IfUse == 1);
var datetime = await valueRepository.FirstOrDefaultAsync(x => x.Type == 1 && x.IsDelete == 0 && x.IfUse == 1);
2025-11-11 09:20:17 +08:00
var keys = values.Key1.Split(',');
2025-10-31 09:56:25 +08:00
var produce = await produceRepository.FirstOrDefaultAsync(x => x.IfUse == 1);
var silksQuery = await silkRepository.GetQueryableAsync();
var silks = silksQuery.Where(x => x.IsDelete == 0 && x.Status == (int)SilkStatus. &&
//x.Color == keys[int.Parse(values.Value)] &&//颜色
x.Length == produce.Length &&//长度
x.Lot_No == produce.Lot_No &&//批号
x.Name == produce.Type &&//名称
x.Type == produce.Spec &&//规格
x.Date >= Convert.ToDateTime(datetime.Key1) && x.Date <= Convert.ToDateTime(datetime.Key2))
.ToList();
if (keys[int.Parse(values.Value)] == "无")
{
silks = silks.Where(x => x.Color == keys[int.Parse(values.Value)] || x.Color == null).ToList();
}
else
{
silks = silks.Where(x => x.Color == keys[int.Parse(values.Value)]).ToList();
}
silks = silks.OrderBy(x => x.Id).Take((int)produce.Qty).ToList();
2025-10-31 09:56:25 +08:00
if (produce == null)
throw Oops.Oh("没有生产设置");
if (silks.Count < produce.Qty)
{
logger.LogWarning($"没有{produce.Qty}条{produce.Type}的单品的信息,只有{silks.Count}条,无法创建码垛信息");
throw Oops.Oh($"没有{produce.Qty}条{produce.Type}的单品的信息,只有{silks.Count}条,无法创建码垛信息");
//return;
}
var netWeight = silks.Sum(x => x.Net_Weight);
var weight = silks.Average(x => x.Net_Weight);
var date = DateOnly.Parse(DateTime.Now.ToString("yyyy-MM-dd"));
var autolabel = await autoRepository.FirstOrDefaultAsync(x => x.Date == date && x.Type == (int)AutoLabelType.);
var timestr = DateTime.Now.ToString("yyyyMMddHHmmss");
if (autolabel == null)
{
2025-10-31 09:56:25 +08:00
autolabel = await autoRepository.InsertAsync(new AutoLabel()
{
Date = date,
Sort = 0,
Mark = timestr,
Type = (int)AutoLabelType.
}, true);
}
2025-10-31 09:56:25 +08:00
autolabel.Sort += 1;
logger.LogInformation("手动添加成箱信息" + timestr + autolabel.Sort.ToString().PadLeft(4, '0'));
await autoRepository.UpdateAsync(autolabel);
2025-06-23 15:41:15 +08:00
var box = new Box()
{
Dom_Time = DateTime.Now,
2025-10-31 09:56:25 +08:00
Exp_Time = produce.Exp_Time,
Qty = produce.Qty,
Length = produce.Length,
Lot_No = produce.Lot_No,
Code = timestr + autolabel.Sort.ToString().PadLeft(4, '0'),
Net_Weight = netWeight,
Spec = produce.Spec,
2025-11-11 09:20:17 +08:00
Color = keys[int.Parse(values.Value)],
2025-10-31 09:56:25 +08:00
Create_Time = DateTime.Now,
Type = produce.Type,
IsUse = true,
IsDelete = 0,
DataType = (int)BoxDataType.,
Mark = "已经手动添加装箱信息"
};
var entity = await boxRepository.InsertAsync(box, true);
logger.LogInformation($"已手动添加装箱信息,装箱编号:{box.Code},包含单品数量:{silks.Count}");
List<Silk> list = new List<Silk>();
foreach (var silk in silks)
{
silk.Status = (int)SilkStatus.;
silk.BoxId = entity.Id;
silk.Status_Details = "已手动装箱";
list.Add(silk);
}
await silkRepository.UpdateManyAsync(list);
}
/// <summary>
/// 添加纸箱
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost]
public async Task AddInsertBox(BoxDto input)
{
var date = DateOnly.Parse(DateTime.Now.ToString("yyyy-MM-dd"));
var autolabel = await autoRepository.FirstOrDefaultAsync(x => x.Date == date && x.Type == (int)AutoLabelType.);
var timestr = DateTime.Now.ToString("yyyyMMddHHmmss");
if (autolabel == null)
{
autolabel = await autoRepository.InsertAsync(new AutoLabel()
{
Date = date,
Sort = 0,
Mark = timestr,
Type = (int)AutoLabelType.
}, true);
}
autolabel.Sort += 1;
logger.LogInformation("手动添加成箱信息" + timestr + autolabel.Sort.ToString().PadLeft(4, '0'));
await autoRepository.UpdateAsync(autolabel);
var box = new Box()
{
Dom_Time = DateTime.Now,
Exp_Time = DateTime.Parse(input.Exp_Time),
2025-06-23 15:41:15 +08:00
Qty = input.Qty,
Length = input.Length,
Lot_No = input.Lot_No,
2025-10-31 09:56:25 +08:00
Code = timestr + autolabel.Sort.ToString().PadLeft(4, '0'),
2025-06-23 15:41:15 +08:00
Net_Weight = input.Net_Weight,
2025-06-24 18:26:51 +08:00
Spec = input.Spec,
2025-11-11 09:20:17 +08:00
Color = input.Color,
2025-10-31 09:56:25 +08:00
Create_Time = DateTime.Now,
Type = input.Type,
IsUse = true,
2025-10-31 09:56:25 +08:00
IsDelete = 0,
DataType = (int)BoxDataType.,
Mark = "手动添加的成箱信息数据库未绑定单品信息"
2025-06-23 15:41:15 +08:00
};
2025-10-31 09:56:25 +08:00
var entity = await boxRepository.InsertAsync(box, true);
2025-10-31 09:56:25 +08:00
logger.LogInformation($"手动添加的成箱信息未绑定单品信息:{box.Code},未含单品数量");
BarTenderHelper.BoxPrint(box);
logger.LogInformation($"打印条码{box.Code},成箱标签打印成功");
}
/// <summary>
/// 打印纸箱
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost]
public async Task PrintBox(DelInput input)
{
2025-10-31 09:56:25 +08:00
var box = await boxRepository.FirstOrDefaultAsync(x => x.Id == input.id);
BarTenderHelper.BoxPrint(box);
logger.LogInformation($"打印条码{box.Code},成箱标签打印成功");
//throw Oops.Oh("成箱标签打印成功");
2025-06-23 15:41:15 +08:00
}
/// <summary>
/// 修改纸箱
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost]
public async Task UpdateBox(BoxDto input)
{
var box = await boxRepository.FirstOrDefaultAsync(x => x.Id == input.Id);
box.Spec = input.Spec;
box.Length = input.Length;
2025-10-31 09:56:25 +08:00
//box.Code = input.Code;
2025-06-23 15:41:15 +08:00
box.Lot_No = input.Lot_No;
2025-11-11 09:20:17 +08:00
box.Color = input.Color;
2025-06-23 15:41:15 +08:00
box.Net_Weight = input.Net_Weight;
//box.Dom_Time = DateTime.Now;
2025-10-31 09:56:25 +08:00
box.Type = input.Type;
2025-06-23 15:41:15 +08:00
box.Qty = input.Qty;
box.Exp_Time = string.IsNullOrWhiteSpace(input.Exp_Time) ? null : Convert.ToDateTime(input.Exp_Time);
2025-06-23 15:41:15 +08:00
await boxRepository.UpdateAsync(box);
}
/// <summary>
/// 删除纸箱
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost]
public async Task DeleteBox(DelInput input)
2025-06-23 15:41:15 +08:00
{
2025-06-24 18:26:51 +08:00
var box = await boxRepository.FirstOrDefaultAsync(x => x.Id == input.id);
var silks = await silkRepository.GetListAsync(x => x.BoxId == input.id);
2025-06-24 18:26:51 +08:00
if (box == null)
2025-06-23 15:41:15 +08:00
throw Oops.Oh("删除失败,数据为空");
2025-06-24 18:26:51 +08:00
box.IsDelete = 1;
box.Delete_Time = DateTime.Now;
if (input.IfDeleteSilk)
{
foreach (var silk in silks)
{
silk.Status_Details = $"从{silk.BoxId}纸箱中删除待重新打印";
silk.BoxId = 0;
silk.Status = 1;
}
}
else
{
foreach (var silk in silks)
{
silk.Status_Details = $"未{silk.BoxId}纸箱中删除可恢复";
}
}
2025-06-24 18:26:51 +08:00
await boxRepository.UpdateAsync(box);
2025-06-23 15:41:15 +08:00
}
/// <summary>
/// 批量删除纸箱
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost]
public async Task DeletesBoxs(DelInput input)
2025-06-23 15:41:15 +08:00
{
2025-06-24 18:26:51 +08:00
var boxs = await boxRepository.GetListAsync(x => input.ids.Contains(x.Id));
var silks = await silkRepository.GetListAsync(x => input.ids.Contains(x.BoxId.Value) && x.IsDelete == 0);
2025-06-24 18:26:51 +08:00
if (boxs.Count == 0)
2025-06-23 15:41:15 +08:00
throw Oops.Oh("删除失败,数据为空");
2025-10-31 09:56:25 +08:00
for (var i = 0; i < boxs.Count; i++)
2025-06-24 18:26:51 +08:00
{
boxs[i].IsDelete = 1;
boxs[i].Delete_Time = DateTime.Now;
if (input.IfDeleteSilk)
{
foreach (var silk in silks)
{
silk.Status_Details = $"从{silk.BoxId}纸箱中删除待重新打印";
silk.BoxId = 0;
silk.Status = 1;
}
}
else
{
foreach (var silk in silks)
{
silk.Status_Details = $"未{silk.BoxId}纸箱中删除可恢复";
}
}
2025-06-24 18:26:51 +08:00
}
await boxRepository.UpdateManyAsync(boxs);
2025-06-23 15:41:15 +08:00
}
/// <summary>
/// 设置热缩机温度
/// </summary>
/// <returns></returns>
public async Task SetTemperature(ByIdInput<short> input)
{
2025-10-31 09:56:25 +08:00
await plcService.SetTemperatureAsync(input.Id);
}
/// <summary>
/// 复位
/// </summary>
/// <returns></returns>
[HttpGet]
public async Task ClearData()
{
await plcService.ClearData();
}
/// <summary>
/// 设置热缩机温度
/// </summary>
/// <returns></returns>
public async Task<int> GetTemperature()
{
2025-10-31 09:56:25 +08:00
return await plcService.GetTemperatureAsync();
}
/// <summary>
/// 整箱码垛打印标签
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost]
public async Task BoxsPalletPrint(FullPalletInput input)
{
var produce = await produceRepository.FirstOrDefaultAsync(x => x.IfUse == 1);
var values = await valueRepository.FirstOrDefaultAsync(x => x.Type == 0 && x.IsDelete == 0 && x.IfUse == 1);
var datetime = await valueRepository.FirstOrDefaultAsync(x => x.Type == 1 && x.IsDelete == 0 && x.IfUse == 1);
var keys = values.Key1.Split(',');
2025-10-31 09:56:25 +08:00
var boxQuery = await boxRepository.GetQueryableAsync();
var boxslist = boxQuery.Where(x => x.DataType == 0 && x.IsDelete == 0 &&
x.Length == produce.Length &&//长度
x.Lot_No == produce.Lot_No &&//批号
x.Type == produce.Type &&//名称
x.Spec == produce.Spec &&//规格
x.Dom_Time >= Convert.ToDateTime(datetime.Key1) && x.Dom_Time <= Convert.ToDateTime(datetime.Key2));//包装时间;
if (keys[int.Parse(values.Value)] == "无")
{
boxslist = boxslist.Where(x => x.Color == keys[int.Parse(values.Value)] || x.Color == null);
}
else
{
boxslist = boxslist.Where(x => x.Color == keys[int.Parse(values.Value)]);
}
var boxs = boxslist.OrderBy(x => x.Id).Take(input.Num).ToList();
2025-10-31 09:56:25 +08:00
if (produce == null)
throw Oops.Oh("没有生产设置");
if (boxs.Count < input.Num)
{
logger.LogWarning($"没有{input.Num}条{produce.Type}的整箱的信息,只有{boxs.Count}条,无法创建码垛信息");
throw Oops.Oh($"没有{input.Num}条{produce.Type}的整箱的信息,只有{boxs.Count}条,无法创建码垛信息");
//return;
}
#region Code
var netWeight = boxs.Sum(x => x.Net_Weight);
var date = DateOnly.Parse(DateTime.Now.ToString("yyyy-MM-dd"));
var autolabel = await autoRepository.FirstOrDefaultAsync(x => x.Date == date && x.Type == (int)AutoLabelType.);
var timestr = DateTime.Now.ToString("yyyyMMddHHmmss");
if (autolabel == null)
{
autolabel = await autoRepository.InsertAsync(new AutoLabel()
{
Date = date,
Sort = 0,
Mark = timestr,
Type = (int)AutoLabelType.
}, true);
}
autolabel.Sort += 1;
logger.LogInformation("整箱码垛生成Code" + timestr + autolabel.Sort.ToString().PadLeft(4, '0'));
await autoRepository.UpdateAsync(autolabel);
#endregion
var box = new Box()
{
Dom_Time = DateTime.Now,
Type = produce.Type,
Exp_Time = produce.Exp_Time,
Qty = input.Num,
Length = produce.Length,
Lot_No = produce.Lot_No,
//Code = Guid.NewGuid().ToString().Substring(9, 18),
Code = timestr + autolabel.Sort.ToString().PadLeft(4, '0'),
Net_Weight = netWeight,
Spec = produce.Spec,
IsUse = true,
IsDelete = 0,
DataType = (int)BoxDataType.,
Create_Time = DateTime.Now,
Mark = "整箱手动码垛,码垛整箱数量" + input.Num
};
var Box = await boxRepository.InsertAsync(box, true);
logger.LogInformation($"已添加码垛信息,码垛编号:{box.Code},包含整箱数量:{boxs.Count}");
List<Box> list = new List<Box>();
foreach (var item in boxs)
{
item.DataType = (int)BoxDataType.;
item.Mark = "已码垛到编号" + Box.Code + "中,码垛数据编号ID" + Box.Id;
list.Add(item);
}
await boxRepository.UpdateManyAsync(list);
#region
//打印标签
BarTenderHelper.BoxPrint(box);
logger.LogInformation($"打印条码{box.Code},成箱码垛标签打印成功");
//throw Oops.Oh("成箱码垛标签打印成功");
#endregion
}
/// <summary>
/// 单品码垛打印标签
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost]
public async Task SilksPalletPrint(FullPalletInput input)
{
var produce = await produceRepository.FirstOrDefaultAsync(x => x.IfUse == 1);
var values = await valueRepository.FirstOrDefaultAsync(x => x.Type == 0 && x.IsDelete == 0 && x.IfUse == 1);
var datetime = await valueRepository.FirstOrDefaultAsync(x => x.Type == 1 && x.IsDelete == 0 && x.IfUse == 1);
var keys = values.Key1.Split(',');
2025-10-31 09:56:25 +08:00
var silksQuery = await silkRepository.GetQueryableAsync();
var silkslist = silksQuery
.Where(x => x.IsDelete == 0 &&
x.Status == (int)SilkStatus. &&
x.Length == produce.Length &&//长度
x.Lot_No == produce.Lot_No &&//批号
x.Name == produce.Type &&//名称
x.Type == produce.Spec &&
x.Date >= Convert.ToDateTime(datetime.Key1) && x.Date <= Convert.ToDateTime(datetime.Key2));
if (keys[int.Parse(values.Value)] == "无")
{
silkslist = silkslist.Where(x => x.Color == keys[int.Parse(values.Value)] || x.Color == null);
}
else
{
silkslist = silkslist.Where(x => x.Color == keys[int.Parse(values.Value)]);
}
var silks = silkslist.OrderBy(x => x.Id).Take(input.Num).ToList();
2025-10-31 09:56:25 +08:00
if (produce == null)
throw Oops.Oh("没有生产设置");
if (silks.Count() < input.Num)
2025-10-31 09:56:25 +08:00
{
logger.LogWarning($"没有{input.Num}条{produce.Type}的单品的信息,只有{silks.Count()}条,无法创建码垛信息");
throw Oops.Oh($"没有{input.Num}条{produce.Type}的单品的信息,只有{silks.Count()}条,无法创建码垛信息");
2025-10-31 09:56:25 +08:00
//return;
}
var netWeight = silks.Sum(x => x.Net_Weight);
var weight = silks.Average(x => x.Net_Weight);
#region
var date = DateOnly.Parse(DateTime.Now.ToString("yyyy-MM-dd"));
var autolabel = await autoRepository.FirstOrDefaultAsync(x => x.Date == date && x.Type == (int)AutoLabelType.);
var timestr = DateTime.Now.ToString("yyyyMMddHHmmss");
if (autolabel == null)
{
autolabel = await autoRepository.InsertAsync(new AutoLabel()
{
Date = date,
Sort = 0,
Mark = timestr,
Type = (int)AutoLabelType.
}, true);
}
autolabel.Sort += 1;
logger.LogInformation("丝锭码垛生成Code" + timestr + autolabel.Sort.ToString().PadLeft(4, '0'));
await autoRepository.UpdateAsync(autolabel);
#endregion
var box = new Box()
{
Dom_Time = DateTime.Now,
Type = produce.Type,
Exp_Time = produce.Exp_Time,
Qty = input.Num,
Length = produce.Length,
Lot_No = produce.Lot_No,
Color = keys[int.Parse(values.Value)],
2025-10-31 09:56:25 +08:00
//Code = Guid.NewGuid().ToString().Substring(9, 18),
Code = timestr + autolabel.Sort.ToString().PadLeft(4, '0'),
Net_Weight = netWeight,
Spec = produce.Spec,
IsUse = true,
IsDelete = 0,
DataType = (int)BoxDataType.,
Create_Time = DateTime.Now,
Mark = "单品手动码垛,码垛单品数量" + input.Num
};
var Box = await boxRepository.InsertAsync(box, true);
logger.LogInformation($"已添加码垛信息,码垛编号:{box.Code},包含单品数量:{silks.Count()}");
2025-10-31 09:56:25 +08:00
List<Silk> list = new List<Silk>();
foreach (var silk in silks)
{
silk.Status = 3;
silk.BoxId = Box.Id;
silk.Status_Details = "已码垛";
list.Add(silk);
}
await silkRepository.UpdateManyAsync(list);
#region
//打印标签
BarTenderHelper.BoxPrint(box);
logger.LogInformation($"打印条码{box.Code},丝锭码垛标签打印成功");
//throw Oops.Oh("丝锭码垛标签打印成功");
#endregion
}
2025-11-11 09:20:17 +08:00
2026-01-04 08:44:48 +08:00
/// <summary>
/// 选中打印标签大标签
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost]
public async Task CheckSilksPrint(CheckSilkDto input)
{
var produce = await produceRepository.FirstOrDefaultAsync(x => x.Id == input.Pid);
var silksQuery = await silkRepository.GetQueryableAsync();
var silkslist = silksQuery
.Where(x => input.Ids.Contains(x.Id));
var netWeight = silkslist.Sum(x => x.Net_Weight);
var num = silkslist.Count();
if (produce == null)
throw Oops.Oh("没有生产设置");
if (silkslist.Count() == 0)
throw Oops.Oh("没有选中的丝锭");
if (silkslist.Where(x => x.Status != (int)SilkStatus.).Count() > 0)
throw Oops.Oh("选中的丝锭中包含未称重或者已装箱码垛的丝锭,无法创建码垛信息");
#region
var date = DateOnly.Parse(DateTime.Now.ToString("yyyy-MM-dd"));
var autolabel = await autoRepository.FirstOrDefaultAsync(x => x.Date == date && x.Type == (int)AutoLabelType.);
var timestr = DateTime.Now.ToString("yyyyMMddHHmmss");
if (autolabel == null)
{
autolabel = await autoRepository.InsertAsync(new AutoLabel()
{
Date = date,
Sort = 0,
Mark = timestr,
Type = (int)AutoLabelType.
}, true);
}
autolabel.Sort += 1;
logger.LogInformation("丝锭码垛生成Code" + timestr + autolabel.Sort.ToString().PadLeft(4, '0'));
await autoRepository.UpdateAsync(autolabel);
#endregion
var box = new Box()
{
Dom_Time = Convert.ToDateTime(input.Date),
Type = produce.Type,
Exp_Time = Convert.ToDateTime(input.ExpTime),
Qty = num,
Length = produce.Length,
Lot_No = produce.Lot_No,
Color = input.Color,
//Code = Guid.NewGuid().ToString().Substring(9, 18),
Code = timestr + autolabel.Sort.ToString().PadLeft(4, '0'),
Net_Weight = netWeight,
Spec = produce.Spec,
IsUse = true,
IsDelete = 0,
DataType = (int)BoxDataType.,
Create_Time = DateTime.Now,
Mark = "选中打印标签数量" + num
};
var Box = await boxRepository.InsertAsync(box, true);
logger.LogInformation($"已添加码垛信息,码垛编号:{box.Code},包含单品数量:{silkslist.Count()}");
List<Silk> list = new List<Silk>();
foreach (var silk in silkslist)
{
silk.Status = 6;
silk.BoxId = Box.Id;
silk.Status_Details = "选中打印标签";
list.Add(silk);
}
await silkRepository.UpdateManyAsync(list);
#region
//打印标签
BarTenderHelper.BoxPrint(box);
logger.LogInformation($"打印条码{box.Code},丝锭码垛标签打印成功");
//throw Oops.Oh("丝锭码垛标签打印成功");
#endregion
}
2025-11-11 09:20:17 +08:00
/// <summary>
/// 求总
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost]
public async Task<object> Sum(SumInput input)
{
var boxlist = await boxRepository.GetQueryableAsync();
boxlist = boxlist.Where(x => x.IsDelete == 0);
if (input.Spec != null)
boxlist = boxlist.Where(x => x.Spec.Contains(input.Spec));
if (input.Name != null)
boxlist = boxlist.Where(x => x.Type.Contains(input.Name));
if (input.Lot_No != null)
boxlist = boxlist.Where(x => x.Lot_No.Contains(input.Lot_No));
if (input.Value != null)
{
if (input.Value == "无")
boxlist = boxlist.Where(x => x.Color == input.Value || x.Color == null);
2025-11-11 09:20:17 +08:00
else
boxlist = boxlist.Where(x => x.Color == input.Value);
}
2025-11-11 09:20:17 +08:00
if (input.Chang != null)
2026-01-04 08:44:48 +08:00
boxlist = boxlist.Where(x => x.Length == input.Chang);
2025-11-11 09:20:17 +08:00
if (input.Qty > 0)
boxlist = boxlist.Where(x => x.Qty == input.Qty);
if (input.Start_Time != null && input.End_Time != null)
boxlist = boxlist.Where(x => x.Dom_Time >= DateTime.Parse(input.Start_Time) && x.Dom_Time <= DateTime.Parse(input.End_Time));
//1求颜色总数
if (input.Type == 1)
{
2025-11-11 09:20:17 +08:00
if (boxlist.Count() == 0)
throw Oops.Oh("求和失败,数据为空");
int sum = boxlist.Count();
return sum;
}
//2求重量总和
else
{
if (boxlist.Count() == 0)
throw Oops.Oh("求和失败,数据为空");
double sum = 0;
foreach (var box in boxlist)
{
sum += (double)box.Net_Weight;
}
return Math.Round(sum, 2);
}
}
/// <summary>
/// 查询删除纸箱的信息
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost]
public async Task<PageOutput<BoxDto>> GetDeleteBoxList(BoxInput input)
{
var boxlist = await boxRepository.GetQueryableAsync();
boxlist = boxlist.Where(x => x.IsDelete == 1);
if (input.Lot_No != null)
boxlist = boxlist.Where(x => x.Lot_No.Contains(input.Lot_No));
if (input.Spec != null)
boxlist = boxlist.Where(x => x.Spec.Contains(input.Spec));
if (input.Type != null)
boxlist = boxlist.Where(x => x.Type.Contains(input.Type));
if (input.Color != null)
{
if (input.Color == "无")
boxlist = boxlist.Where(x => x.Color == input.Color || x.Color == null);
else
boxlist = boxlist.Where(x => x.Color == input.Color);
}
if (input.Chang != null)
boxlist = boxlist.Where(x => x.Length.Contains(input.Chang));
if (input.Qty > 0)
boxlist = boxlist.Where(x => x.Qty == input.Qty);
if (input.Start_Time != null && input.End_Time != null)
boxlist = boxlist.Where(x => x.Dom_Time >= DateTime.Parse(input.Start_Time) && x.Dom_Time <= DateTime.Parse(input.End_Time));
var result = boxlist.OrderByDescending(x => x.Delete_Time).PageResult(input.Page, input.PageSize);
var data = result.Queryable.Select(e => new BoxDto()
{
Length = e.Length,
Net_Weight = e.Net_Weight,
Qty = e.Qty,
Id = e.Id,
Code = e.Code,
Dom_Time = DateTime.Parse(e.Dom_Time.ToString()).ToString("yyyy-MM-dd HH:mm:ss"),
DataType = e.DataType,
Mark = e.Mark,
Color = e.Color,
Create_Time = e.Create_Time,
Exp_Time = DateTime.Parse(e.Exp_Time.ToString()).ToString("yyyy-MM-dd HH:mm:ss"),
Lot_No = e.Lot_No,
Spec = e.Spec,
Gross_Weight = e.Gross_Weight,
Type = e.Type,
IsDelete = e.IsDelete,
Delete_Time = e.Delete_Time
}).ToList();
PageOutput<BoxDto> pageOutput = new PageOutput<BoxDto>();
pageOutput.Total = boxlist.Count();
pageOutput.Data = data;
pageOutput.PageIndex = input.Page;
pageOutput.PageSize = input.PageSize;
return pageOutput;
}
/// <summary>
/// 修改删除的纸箱信息
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[HttpGet]
public async Task UpdateDeleteBox(int id)
{
var box = await boxRepository.FirstOrDefaultAsync(x => x.Id == id);
var silks = await silkRepository.GetListAsync(x => x.Status == 1);
if (box == null)
throw Oops.Oh("没有数据");
2026-01-04 08:44:48 +08:00
box.IsDelete = 0;
box.Mark = "恢复数据";
foreach (var silk in silks)
{
if (silk.Status_Details.Contains(box.Id.ToString()))
{
if (box.DataType == (int)BoxDataType.)
{
silk.Status = (int)SilkStatus.;
silk.Status_Details += "(已重新码垛)";
silk.BoxId = box.Id;
}
else if (box.DataType == (int)BoxDataType.)
{
silk.Status = (int)SilkStatus.;
silk.Status_Details += "(已重新装箱)";
silk.BoxId = box.Id;
}
}
}
2026-01-04 08:44:48 +08:00
await boxRepository.UpdateAsync(box);
}
/// <summary>
/// 批量恢复纸箱
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost]
public async Task UpdateDeleteBoxs(IdsInput input)
{
var boxs = await boxRepository.GetListAsync(x => input.Ids.Contains(x.Id));
var silks = await silkRepository.GetListAsync(x => x.Status == 1);
if (boxs.Count() <= 0)
throw Oops.Oh("没有数据");
foreach (var box in boxs)
{
box.IsDelete = 0;
box.Mark = "恢复数据";
foreach (var silk in silks)
{
if (silk.Status_Details.Contains(box.Id.ToString()))
{
if (box.DataType == (int)BoxDataType.)
{
silk.Status = (int)SilkStatus.;
silk.Status_Details += "(已重新码垛)";
silk.BoxId = box.Id;
}
else if (box.DataType == (int)BoxDataType.)
{
silk.Status = (int)SilkStatus.;
silk.Status_Details += "(已重新装箱)";
silk.BoxId = box.Id;
}
2026-01-04 08:44:48 +08:00
}
}
await boxRepository.UpdateAsync(box);
}
}
2025-06-23 15:41:15 +08:00
}
}