138 lines
4.4 KiB
C#
Raw Normal View History

2025-03-16 03:17:36 +08:00
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
using Seyounth.Hyosung.Data.Models;
using Seyounth.Hyosung.Data.Services;
using Seyounth.Hyosung.Data.Services.Hyosung;
namespace Seyounth.Hyosung.Core.Printer;
public class HyosungPrinter(
ILogger<HyosungPrinter> logger,
IVarietyService varietyService,
ITrayService trayService,
IDictService dictService,
IYarnService yarnService,
IHyosungWmsService hyosungWmsService,
IOptions<PrintTemp> options) : IHyosungPrinter
{
2025-04-14 16:09:10 +08:00
private readonly Dictionary<int, AveryPrinter> _printers = new Dictionary<int, AveryPrinter>()
{
{ 1001, new AveryPrinter("192.168.3.61", 9100) },
{ 2, new AveryPrinter("192.168.3.62", 9100) },
{ 1, new AveryPrinter("192.168.3.60", 9100) }
};
2025-03-16 03:17:36 +08:00
public async Task StartAsync(CancellationToken token)
{
List<Task> ls = new List<Task>();
2025-04-14 16:09:10 +08:00
foreach (var (_, printer) in _printers)
{
ls.Add(printer.ConnectAsync(token));
}
2025-03-16 03:17:36 +08:00
await Task.WhenAll(ls);
logger.LogInformation("printer connected");
}
public async Task StopAsync(CancellationToken token)
{
2025-04-14 16:09:10 +08:00
foreach (var (_, printer) in _printers)
{
printer.CloseAsync(token);
}
2025-03-16 03:17:36 +08:00
logger.LogInformation("printer disconnected");
}
2025-04-14 16:09:10 +08:00
public async Task PrintMasterLabelAsync(int color, string trayCode)
2025-03-16 03:17:36 +08:00
{
var tray = await trayService.GetByCode(trayCode);
2025-04-14 16:09:10 +08:00
var content = await GetMasterLabelContent(tray);
await _printers[color].CleanContextAsync();
await _printers[color].SendContentAsync(content);
await _printers[color].PrintAsync();
2025-03-16 03:17:36 +08:00
}
2025-04-14 16:09:10 +08:00
public async Task PrintSubLabelAsync(string trayCode)
2025-03-16 03:17:36 +08:00
{
2025-04-14 16:09:10 +08:00
var tray = await trayService.GetByCode(trayCode);
var content = await GetSubLabelContentAsync(tray);
await _printers[1001].CleanContextAsync();
await _printers[1001].SendContentAsync(content);
await _printers[1001].PrintAsync();
2025-03-16 03:17:36 +08:00
}
2025-04-14 16:09:10 +08:00
private async Task<string> GetSubLabelContentAsync(Tray tray)
2025-03-16 03:17:36 +08:00
{
var variety = await varietyService.GetById(tray.VarietyId);
2025-03-25 16:25:21 +08:00
var yarns = await yarnService.GetYarnsByTrayIdAsync(tray.Id);
2025-03-16 03:17:36 +08:00
var dic = new Dictionary<string, string>();
if (yarns.Count > 0)
{
var machineNoList = yarns
.Where(item => item.Machine.Contains('-'))
.Select(item => item.Machine.Split('-')[0])
.Distinct()
.ToList();
var machineStr = string.Join(" ", machineNoList);
dic.Add("1569", yarns[0].Lot.ToString());
dic.Add("T1 T2 T3 T4 T5", machineStr);
}
string temp;
2025-03-25 16:25:21 +08:00
if (variety.SubLabelCount == 1)
2025-03-16 03:17:36 +08:00
temp = options.Value.Partition;
else
{
var tempName = options.Value.Sides.First(t => t.ItemCode == variety.Code).TempName;
temp = options.Value.Temps.First(t => t.Name == tempName).Code;
}
foreach (var (key, value) in dic)
{
temp = temp.Replace(key, value);
}
return temp;
}
2025-04-14 16:09:10 +08:00
private async Task<string> GetMasterLabelContent(Tray tray)
2025-03-16 03:17:36 +08:00
{
var variety = await varietyService.GetById(tray.VarietyId);
2025-03-21 09:07:39 +08:00
var netWeight = tray.NetWeight.ToString("0.0");
if (netWeight.EndsWith(".0"))
netWeight = netWeight.Replace(".0", "");
2025-03-16 03:17:36 +08:00
var dic = new Dictionary<string, string>
{
{ "$1153", $"\"{variety.Lot}\"" },
{ "1670dtex -144F", $"\"{tray.DtexFila}\"" },
{ "1500D - 144F", $"\"{tray.DenFila}\"" },
{ "$SA", $"\"{tray.Grade}\"" },
2025-03-21 09:07:39 +08:00
{ "$900", $"\"{netWeight}\"" },
2025-03-16 03:17:36 +08:00
{ "25-01-01", $"\"{DateTime.Now:yy-MM-dd}\"" },
{ "$90", $"\"{variety.TotalCount}\"" },
{ "$965", $"\"{tray.GrossWeight}\"" },
2025-03-16 03:17:36 +08:00
{
"250101J068",
$"\"{DateTime.Now.ToString("yyMMdd" + "J") + tray.ControlNo.ToString()?.PadLeft(3, '0')}\""
},
2025-03-27 09:12:16 +08:00
{ "DTYY-JPA11530SFG250101000900115305480", $"{tray.Barcode}" }
2025-03-16 03:17:36 +08:00
};
string content = options.Value.DefaultTemp;
foreach (var (key, value) in dic)
{
content = content.Replace(key, value);
}
2025-04-14 16:09:10 +08:00
2025-03-27 09:12:16 +08:00
logger.LogInformation($"print content: {content}");
2025-03-16 03:17:36 +08:00
return content;
}
}