Compare commits

..

No commits in common. "master" and "Code-long" have entirely different histories.

53 changed files with 292 additions and 2426 deletions

View File

@ -1,371 +0,0 @@
From ce0a2a6362e96697323b6547b4d1697e25e07072 Mon Sep 17 00:00:00 2001
From: anerx <512464164@qq.com>
Date: Thu, 20 Mar 2025 18:28:21 +0800
Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E6=89=93=E5=8D=B0=E9=83=A8?=
=?UTF-8?q?=E5=88=86=E4=BB=A3=E7=A0=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../Agv/HyosungAgvService.cs | 2 +-
.../Plc/HyosungPlcService.cs | 21 +++++++--
.../Plc/IHyosungPlcService.cs | 2 +-
.../Printer/HyosungPrinter.cs | 2 +-
.../Entities/AgvBinEntity.cs | 2 +
.../Services/AgvBinService.cs | 47 ++++++++++++++-----
.../Services/Hyosung/HyosungWmsService.cs | 18 +++----
Seyounth.Hyosung.Runtime/HyosungRuntime.cs | 24 +++++-----
Seyounth.Hyosung/ViewModels/HomeViewModel.cs | 1 +
.../Views/Pages/HomeViewPage.xaml | 22 +++++----
Seyounth.Hyosung/Views/Pages/VarietyPage.xaml | 2 +
11 files changed, 94 insertions(+), 49 deletions(-)
diff --git a/Seyounth.Hyosung.Core/Agv/HyosungAgvService.cs b/Seyounth.Hyosung.Core/Agv/HyosungAgvService.cs
index 5d804af..7d095f4 100644
--- a/Seyounth.Hyosung.Core/Agv/HyosungAgvService.cs
+++ b/Seyounth.Hyosung.Core/Agv/HyosungAgvService.cs
@@ -35,7 +35,7 @@ public class HyosungAgvService(
PositionCode = bin.CtnrCode,
Type = "05"
};
- var ctnrType = await dictService.GetKeyAsync("AgvRackType", height.ToString());
+ var ctnrType = await dictService.GetKeyAsync("AgvRackType", bin.Height.ToString());
await _agv.CarryToAsync(start, stop, ctnrType, 120, "1");
await agvBinService.BindAsync(bin);
}
diff --git a/Seyounth.Hyosung.Core/Plc/HyosungPlcService.cs b/Seyounth.Hyosung.Core/Plc/HyosungPlcService.cs
index 9a5da67..14198dc 100644
--- a/Seyounth.Hyosung.Core/Plc/HyosungPlcService.cs
+++ b/Seyounth.Hyosung.Core/Plc/HyosungPlcService.cs
@@ -105,14 +105,25 @@ public class HyosungPlcService(ILogger<HyosungPlcService> logger) : IHyosungPlcS
await _writer.WriteShortsAsync(12120, ls.ToArray());
}
- public async Task WritePrintLabelResultAsync(int index, bool result)
+ public async Task WritePrintLabelResultAsync(int index, int side, bool result)
{
var address = index == 1 ? 13060 : 13061;
if (index == 2)
- await _writer.WriteShortsAsync(13053, 4);
+ {
+ var data = SetBit(0, side);
+ await _writer.WriteShortsAsync(13053, data);
+ }
+
await _writer.WriteShortsAsync(address, (short)(result ? 1 : 2));
}
+ static byte SetBit(byte value, int bitPosition)
+ {
+ // 创建一个掩码,该掩码只有第 bitPosition 位为 1
+ byte mask = (byte)(1 << bitPosition);
+ // 使用按位或操作将 value 的第 bitPosition 位置为 1
+ return (byte)(value | mask);
+ }
public event Func<int, Task>? OnPlcRequestScanProduct;
@@ -254,11 +265,11 @@ public class HyosungPlcService(ILogger<HyosungPlcService> logger) : IHyosungPlcS
YarnCount = status[0],
TotalYarnCount = status[1]
};
- if (yarn1!=0)
+ if (yarn1 != 0)
info.YarnCode.Add(yarn1);
- if (yarn2!=0)
+ if (yarn2 != 0)
info.YarnCode.Add(yarn2);
- if (yarn3!=0)
+ if (yarn3 != 0)
info.YarnCode.Add(yarn3);
if (info.YarnCode.Count != info.YarnCount)
{
diff --git a/Seyounth.Hyosung.Core/Plc/IHyosungPlcService.cs b/Seyounth.Hyosung.Core/Plc/IHyosungPlcService.cs
index c92c092..13208d0 100644
--- a/Seyounth.Hyosung.Core/Plc/IHyosungPlcService.cs
+++ b/Seyounth.Hyosung.Core/Plc/IHyosungPlcService.cs
@@ -58,7 +58,7 @@ public interface IHyosungPlcService
Task WritePackLineOptionAsync(PackLineOption option);
- Task WritePrintLabelResultAsync(int index, bool result);
+ Task WritePrintLabelResultAsync(int index, int side, bool result);
/// <summary>
/// Plc请求扫描产品
diff --git a/Seyounth.Hyosung.Core/Printer/HyosungPrinter.cs b/Seyounth.Hyosung.Core/Printer/HyosungPrinter.cs
index 31abdbf..9e3d9b8 100644
--- a/Seyounth.Hyosung.Core/Printer/HyosungPrinter.cs
+++ b/Seyounth.Hyosung.Core/Printer/HyosungPrinter.cs
@@ -111,7 +111,7 @@ public class HyosungPrinter(
{ "1670dtex -144F", $"\"{tray.DtexFila}\"" },
{ "1500D - 144F", $"\"{tray.DenFila}\"" },
{ "$SA", $"\"{tray.Grade}\"" },
- { "$900", $"\"{labelResult.NET_WEIGHT.ToString("0.0")}\"" },
+ { "$900", $"\"{labelResult.NET_WEIGHT:0.0}\"" },
{ "25-01-01", $"\"{DateTime.Now:yy-MM-dd}\"" },
{ "$90", $"\"{variety.TotalCount}\"" },
{ "$965", $"\"{labelResult.GROSS_WEIGHT}\"" },
diff --git a/Seyounth.Hyosung.Data/Entities/AgvBinEntity.cs b/Seyounth.Hyosung.Data/Entities/AgvBinEntity.cs
index e6143bd..b426c16 100644
--- a/Seyounth.Hyosung.Data/Entities/AgvBinEntity.cs
+++ b/Seyounth.Hyosung.Data/Entities/AgvBinEntity.cs
@@ -31,4 +31,6 @@ public class AgvBinEntity
[SugarColumn(ColumnDescription = "排序")]
public int Sort { get; set; }
+
+ public bool IsDeleted { get; set; }
}
\ No newline at end of file
diff --git a/Seyounth.Hyosung.Data/Services/AgvBinService.cs b/Seyounth.Hyosung.Data/Services/AgvBinService.cs
index 74211c1..7436ae1 100644
--- a/Seyounth.Hyosung.Data/Services/AgvBinService.cs
+++ b/Seyounth.Hyosung.Data/Services/AgvBinService.cs
@@ -18,22 +18,43 @@ public class AgvBinService : IAgvBinService
public async Task<AgvBinEntity> GetAvailableBin(int height)
{
- if (height < 180)
+ var bin = await _repository.AsQueryable()
+ .Where(x => x.IsFree && x.IsDeleted == false)
+ .OrderBy(x => x.Sort)
+ .FirstAsync();
+ if (bin.BinCode == "B10")
{
- return _cache
- .Where(x =>
- x is { CtnrType: 1, IsFree: true } ||
- x is { CtnrType: 2, IsFree: true } &&
- _cache.Any(y =>
- y is { CtnrType: 1, IsFree: false } && y.BinCode == x.BinCode &&
- y is { Height: < 180 })
- )
- .OrderByDescending(x => x.CtnrType)
- .ThenBy(x => x.Sort)
- .First();
+ await _repository.AsUpdateable()
+ .Where(x => x.RackType == 2 && x.IsDeleted == false)
+ .SetColumns(x => x.IsFree, true)
+ .ExecuteCommandAsync();
}
+ else if (bin.BinCode == "B33")
+ {
+ await _repository.AsUpdateable()
+ .Where(x => x.RackType == 1 && x.IsDeleted == false)
+ .SetColumns(x => x.IsFree, true)
+ .ExecuteCommandAsync();
+ }
+
+ return bin;
- return _cache.Where(a => a is { IsFree: true }).OrderBy(a => a.CtnrType).First();
+ // if (height < 180)
+ // {
+ // return _cache
+ // .Where(x =>
+ // x is { CtnrType: 1, IsFree: true } ||
+ // x is { CtnrType: 2, IsFree: true } &&
+ // _cache.Any(y =>
+ // y is { CtnrType: 1, IsFree: false } && y.BinCode == x.BinCode &&
+ // y is { Height: < 180 })
+ // )
+ // .OrderByDescending(x => x.CtnrType)
+ // .ThenBy(x => x.Sort)
+ // .First();
+ // }
+ //
+ // return _cache.Where(a => a is { IsFree: true }).OrderBy(a => a.CtnrType).First();
}
public Task BindAsync(AgvBinEntity entity)
diff --git a/Seyounth.Hyosung.Data/Services/Hyosung/HyosungWmsService.cs b/Seyounth.Hyosung.Data/Services/Hyosung/HyosungWmsService.cs
index 7cb6c21..4513593 100644
--- a/Seyounth.Hyosung.Data/Services/Hyosung/HyosungWmsService.cs
+++ b/Seyounth.Hyosung.Data/Services/Hyosung/HyosungWmsService.cs
@@ -53,12 +53,12 @@ public class HyosungWmsService : IHyosungWmsService
else
{
await _db.Updateable<MST_BOXNO_SEQ_NON_DATE>()
- .SetColumns(i => new MST_BOXNO_SEQ_NON_DATE
- {
- LastNo = controlNo,
- ModifiedTime = DateTime.Now,
- ModifiedBy = "seyounth"
- })
+ .SetColumns(i => new MST_BOXNO_SEQ_NON_DATE
+ {
+ LastNo = controlNo,
+ ModifiedTime = DateTime.Now,
+ ModifiedBy = "seyounth"
+ })
.Where(i => i.BeId == "2240" &&
i.ItemCode == variety.Code &&
i.CheckCode == checkCode).ExecuteCommandAsync();
@@ -70,7 +70,7 @@ public class HyosungWmsService : IHyosungWmsService
try
{
string code = $"{itemCode.Trim()} {DateTime.Now.AddDays(0):yyMMdd}";
- string code2 = $"{lot.Trim()}{(controlNo-1).ToString().PadLeft(4, '0')}0";
+ string code2 = $"{lot.Trim()}{(controlNo - 1).ToString().PadLeft(4, '0')}0";
// 使用 SqlSugar 进行查询
return await _db.Queryable<LabelResult>()
@@ -80,10 +80,10 @@ public class HyosungWmsService : IHyosungWmsService
x.BE_ID == "2240"
)
.FirstAsync();
- } catch (Exception e)
+ }
+ catch (Exception e)
{
throw e;
}
-
}
}
\ No newline at end of file
diff --git a/Seyounth.Hyosung.Runtime/HyosungRuntime.cs b/Seyounth.Hyosung.Runtime/HyosungRuntime.cs
index 7165216..87fa36a 100644
--- a/Seyounth.Hyosung.Runtime/HyosungRuntime.cs
+++ b/Seyounth.Hyosung.Runtime/HyosungRuntime.cs
@@ -291,29 +291,31 @@ public class HyosungRuntime(
logger.LogInformation($"plc request print label:{arg1} {trayCode} {height}");
try
{
-
- var tray = await trayService.GetByCode(trayCode);
- var variety = await varietyService.GetById(tray.VarietyId);
- var mod = await hyosungWmsService.GetItemInfoByItemCode(variety.Code);
- var grade = "1";
- if (mod.GRADE != "AA") grade = mod.GRADE;
- var controlNo = await hyosungWmsService.GetControlNo(variety, grade);
+ var tray = await trayService.GetByCode(trayCode);
+ var variety = await varietyService.GetById(tray.VarietyId);
+ var mod = await hyosungWmsService.GetItemInfoByItemCode(variety.Code);
+ var grade = "1";
+ if (mod.GRADE != "AA") grade = mod.GRADE;
+ var controlNo = await hyosungWmsService.GetControlNo(variety, grade);
await trayService.PrintTrayAsync(trayCode, height, controlNo, mod);
if (arg1 == 1)
{
-
- await printer.PrintAsync(1, trayCode);
+ await printer.PrintAsync(1, trayCode);
+ await hyosungPlcService.WritePrintLabelResultAsync(arg1, variety.SubLabelCount, true);
}
else
+ {
await printer.PrintAsync(2, trayCode);
+ await hyosungPlcService.WritePrintLabelResultAsync(arg1, variety.MasterLabelCount, true);
+ }
+
- await hyosungPlcService.WritePrintLabelResultAsync(arg1, true);
await hyosungWmsService.UpdateControlNo(variety, controlNo);
logger.LogInformation($"plc request print label success");
}
catch (Exception e)
{
- await hyosungPlcService.WritePrintLabelResultAsync(arg1, false);
+ await hyosungPlcService.WritePrintLabelResultAsync(arg1, 1, false);
logger.LogError(e, "print label fail");
}
}
diff --git a/Seyounth.Hyosung/ViewModels/HomeViewModel.cs b/Seyounth.Hyosung/ViewModels/HomeViewModel.cs
index ecfee3b..b48e525 100644
--- a/Seyounth.Hyosung/ViewModels/HomeViewModel.cs
+++ b/Seyounth.Hyosung/ViewModels/HomeViewModel.cs
@@ -51,5 +51,6 @@ public partial class HomeViewModel : ObservableObject
{
Stack1 = _runtime.Stack1;
Stack2 = _runtime.Stack2;
+ PackLineOption = _runtime.PackLineOption;
}
}
\ No newline at end of file
diff --git a/Seyounth.Hyosung/Views/Pages/HomeViewPage.xaml b/Seyounth.Hyosung/Views/Pages/HomeViewPage.xaml
index 3ffc4b3..74b45b0 100644
--- a/Seyounth.Hyosung/Views/Pages/HomeViewPage.xaml
+++ b/Seyounth.Hyosung/Views/Pages/HomeViewPage.xaml
@@ -67,6 +67,9 @@
<GridViewColumn
DisplayMemberBinding="{Binding Lot}"
Header="Lot" />
+ <GridViewColumn
+ DisplayMemberBinding="{Binding ScanTime}"
+ Header="扫码时间" />
<GridViewColumn
DisplayMemberBinding="{Binding StackTime}"
Header="码垛时间" />
@@ -125,6 +128,9 @@
<GridViewColumn
DisplayMemberBinding="{Binding Lot}"
Header="Lot" />
+ <GridViewColumn
+ DisplayMemberBinding="{Binding ScanTime}"
+ Header="扫码时间" />
<GridViewColumn
DisplayMemberBinding="{Binding StackTime}"
Header="码垛时间" />
@@ -305,7 +311,7 @@
</Grid.ColumnDefinitions>
<TextBlock VerticalAlignment="Center" Margin="10"
Foreground="White" Grid.Row="0" Grid.Column="0" Text="主-贴标数:" />
- <TextBox Foreground="White" IsEnabled="False" Margin="10" Grid.Row="0" Grid.Column="1" />
+ <TextBox Foreground="White" IsEnabled="False" Margin="10" Grid.Row="0" Grid.Column="1" />
<TextBlock VerticalAlignment="Center" Margin="10"
Foreground="White" Grid.Row="1" Grid.Column="0" Text="主-前:" />
<CheckBox Grid.Row="1" Grid.Column="1" HorizontalAlignment="Center" />
@@ -317,27 +323,27 @@
<TextBlock VerticalAlignment="Center" Margin="10"
Foreground="White" Grid.Row="3" Grid.Column="0" Text="主-后:" />
<CheckBox Grid.Row="3" Grid.Column="1" HorizontalAlignment="Center" />
-
+
<TextBlock VerticalAlignment="Center" Margin="10"
Foreground="White" Grid.Row="4" Grid.Column="0" Text="主-右:" />
<CheckBox Grid.Row="4" Grid.Column="1" HorizontalAlignment="Center" />
-
+
<TextBlock VerticalAlignment="Center" Margin="10"
Foreground="White" Grid.Row="0" Grid.Column="2" Text="副-贴标数:" />
- <TextBox Foreground="White" IsEnabled="False" Margin="10" Grid.Row="0" Grid.Column="3" />
-
+ <TextBox Foreground="White" IsEnabled="False" Margin="10" Grid.Row="0" Grid.Column="3" />
+
<TextBlock VerticalAlignment="Center" Margin="10"
Foreground="White" Grid.Row="1" Grid.Column="2" Text="副-前:" />
<CheckBox Grid.Row="1" Grid.Column="3" HorizontalAlignment="Center" />
-
+
<TextBlock VerticalAlignment="Center" Margin="10"
Foreground="White" Grid.Row="2" Grid.Column="2" Text="副-左:" />
<CheckBox Grid.Row="2" Grid.Column="3" HorizontalAlignment="Center" />
-
+
<TextBlock VerticalAlignment="Center" Margin="10"
Foreground="White" Grid.Row="3" Grid.Column="2" Text="副-后:" />
<CheckBox Grid.Row="3" Grid.Column="3" HorizontalAlignment="Center" />
-
+
<TextBlock VerticalAlignment="Center" Margin="10"
Foreground="White" Grid.Row="4" Grid.Column="2" Text="副-右:" />
<CheckBox Grid.Row="4" Grid.Column="3" HorizontalAlignment="Center" />
diff --git a/Seyounth.Hyosung/Views/Pages/VarietyPage.xaml b/Seyounth.Hyosung/Views/Pages/VarietyPage.xaml
index 0713f96..ea2e362 100644
--- a/Seyounth.Hyosung/Views/Pages/VarietyPage.xaml
+++ b/Seyounth.Hyosung/Views/Pages/VarietyPage.xaml
@@ -67,6 +67,8 @@
AutoGenerateColumns="False"
HeadersVisibility="All"
VerticalContentAlignment="Center"
+ VirtualizingStackPanel.IsVirtualizing="True"
+ VirtualizingStackPanel.VirtualizationMode="Recycling"
ItemsSource="{Binding ViewModel.Varieties, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
CellEditEnding="DataGrid_CellEditEnding">
<DataGrid.Columns>
--
2.43.0.windows.1

View File

@ -1,7 +1,6 @@
using System.Net.Http.Json;
using Microsoft.Extensions.Logging;
using Seyounth.Hyosung.Core.Agv.HikModels;
using Seyounth.Hyosung.Data.Entities;
namespace Seyounth.Hyosung.Core.Agv;
@ -46,8 +45,7 @@ public class HikAgv(ILogger<HikAgv> logger)
logger.LogInformation($"task {taskCode} cancel succeed.");
}
public async Task<string> CarryToAsync(AgvPosition start, AgvPosition end, string ctnrType, int priority,
string taskType)
public async Task CarryToAsync(AgvPosition start, AgvPosition end, string ctnrType, int priority, string taskType)
{
var url = Url + SchedulingTaskUri;
var input = new
@ -66,75 +64,17 @@ public class HikAgv(ILogger<HikAgv> logger)
var rs = await PostAsync<string>(url, input);
if (rs is null)
{
throw new NullReferenceException($"{start.PositionCode} carry to {end.PositionCode} error: result is null");
}
if (rs.Code != "0")
{
throw new Exception(
$"{start.PositionCode} carry to {end.PositionCode} error: code is {rs.Code} message is {rs.Message}");
}
return rs.Data;
}
public async Task WaitingForTaskCompletedAsync(string taskCode)
{
while (true)
{
var input = new
{
reqCode = GetRequestCode(),
taskCodes = new List<string> { taskCode }
};
var rs = await PostAsync<List<TaskStatusModel>>(Url + "queryTaskStatus", input);
if (rs is null)
{
throw new NullReferenceException($"task {taskCode} wait completed error: result is null");
}
if (rs.Code != "0")
{
throw new Exception($"task {taskCode} wait completed error: code is {rs.Code} message is {rs.Message}");
}
// 检查是否有符合条件的任务状态为 9
var task = rs.Data.FirstOrDefault(t => t.taskCode == taskCode);
if (task is { taskStatus: "9" })
{
logger.LogInformation($"task {taskCode} wait completed succeed");
break; // 退出循环
}
// 可以添加适当的延迟,避免频繁请求
await Task.Delay(1000);
}
}
public async Task UnBin(AgvBinEntity bin)
{
var url = Url + "bindCtnrAndBin";
var input = new
{
reqCode = GetRequestCode(),
stgBinCode = bin.CtnrCode,
ctnrTyp = bin.HeightCode,
indBind = "0"
};
var rs = await PostAsync<string>(url, input);
if (rs is null)
{
logger.LogWarning($"agv unbin {bin.CtnrCode} error: result is null");
logger.LogWarning($"{start.PositionCode} carry to {end.PositionCode} error: result is null");
return;
}
if (rs.Code != "0")
{
logger.LogWarning($"agv unbin {bin.CtnrCode} error: code is {rs.Code} message:{rs.Message}");
logger.LogWarning($"{start.PositionCode} carry to {end.PositionCode} error: code is {rs.Code}");
return;
}
logger.LogInformation($"agv unbin {bin.CtnrCode} succeed");
logger.LogInformation($"{start.PositionCode} carry to {end.PositionCode} succeed");
}
public async Task MovingToAsync(AgvPosition des, string taskType)

View File

@ -1,8 +0,0 @@
namespace Seyounth.Hyosung.Core.Agv.HikModels;
public class TaskStatusModel
{
public string taskCode { get; set; }
public string taskStatus { get; set; }
}

View File

@ -1,6 +1,5 @@
using Microsoft.Extensions.Logging;
using Seyounth.Hyosung.Core.Agv.HikModels;
using Seyounth.Hyosung.Data.Entities;
using Seyounth.Hyosung.Data.Services;
namespace Seyounth.Hyosung.Core.Agv;
@ -14,7 +13,7 @@ public class HyosungAgvService(
private readonly HikAgv _agv = new(loggerFactory.CreateLogger<HikAgv>());
public async Task StorageAsync(string trayCode)
public async Task StorageAsync(long trayCode)
{
AgvStatusInfo? status;
do
@ -24,7 +23,7 @@ public class HyosungAgvService(
} while (status is null);
var tray = await trayService.GetByCode(trayCode);
var height = (int)Math.Ceiling((double)((tray.StackHeight ?? 0) / 10.0)!);
var height = (int)Math.Ceiling((double)(tray.StackHeight / 10.0)!);
var bin = await agvBinService.GetAvailableBin(height);
AgvPosition start = new AgvPosition()
{
@ -36,20 +35,8 @@ public class HyosungAgvService(
PositionCode = bin.CtnrCode,
Type = "05"
};
if (!string.IsNullOrEmpty(bin.HeightCode))
await UnBin(bin);
var ctnrType = await dictService.GetKeyAsync("AgvRackType", bin.Height.ToString());
if (string.IsNullOrEmpty(ctnrType))
ctnrType = "14";
bin.HeightCode = ctnrType;
var taskCode = await _agv.CarryToAsync(start, stop, ctnrType, 120, "1");
await _agv.WaitingForTaskCompletedAsync(taskCode);
var ctnrType = await dictService.GetKeyAsync("AgvRackType", height.ToString());
await _agv.CarryToAsync(start, stop, ctnrType, 120, "1");
await agvBinService.BindAsync(bin);
}
public async Task UnBin(AgvBinEntity bin)
{
await _agv.UnBin(bin);
}
}

View File

@ -1,5 +1,3 @@
using Seyounth.Hyosung.Data.Entities;
namespace Seyounth.Hyosung.Core.Agv;
public interface IHyosungAgvService
@ -9,7 +7,5 @@ public interface IHyosungAgvService
/// </summary>
/// <param name="trayCode"></param>
/// <returns></returns>
Task StorageAsync(string trayCode);
Task UnBin(AgvBinEntity bin);
Task StorageAsync(long trayCode);
}

View File

@ -1,4 +1,3 @@
using System.Text.Json;
using MCProtocol;
using Microsoft.Extensions.Logging;
using Seyounth.Hyosung.Data.Models;
@ -47,12 +46,12 @@ public class HyosungPlcService(ILogger<HyosungPlcService> logger) : IHyosungPlcS
logger.LogInformation($"write [{variety.Id}] to plc address[4230]");
}
public async Task WriteScanYarnResultAsync(bool result, short? varietyId = null, string? yarnCode = null)
public async Task WriteScanYarnResultAsync(bool result, short? varietyId = null, long yarnCode = 0)
{
if (result && yarnCode != null && varietyId != null)
{
await _writer.WriteShortsAsync(4009, varietyId.Value);
await _writer.WriteStringAsync(4010, yarnCode);
await _writer.WriteLongAsync(4010, yarnCode);
logger.LogInformation($"write [{yarnCode}] to plc address[4010]");
}
@ -82,10 +81,10 @@ public class HyosungPlcService(ILogger<HyosungPlcService> logger) : IHyosungPlcS
isLeaving = false;
}
public async Task WriteTrayCodeAsync(int index, string trayCode)
public async Task WriteTrayCodeAsync(int index, long trayCode)
{
var address = index == 1 ? 4100 : 4110;
await _writer.WriteStringAsync(address, trayCode);
await _writer.WriteLongAsync(address, trayCode);
}
public async Task WriteReceivedYarnCountAsync(int count)
@ -106,71 +105,14 @@ public class HyosungPlcService(ILogger<HyosungPlcService> logger) : IHyosungPlcS
await _writer.WriteShortsAsync(12120, ls.ToArray());
}
public async Task WritePrintLableOptionsAsync(int side, int slave)
{
short masterCount = 0;
switch (side)
{
case 0:
masterCount = 1;
break;
case 1:
masterCount = 2;
break;
case 2:
masterCount = 6;
break;
case 3:
masterCount = 14;
break;
case 4:
masterCount = 30;
break;
}
short slaveCount = 0;
switch (slave)
{
case 0:
slaveCount = 1;
break;
case 1:
slaveCount = 2;
break;
case 2:
slaveCount = 6;
break;
case 3:
slaveCount = 14;
break;
case 4:
slaveCount = 30;
break;
}
await _writer.WriteShortsAsync(13050, [1, 1, 1, 2]);
}
public async Task WritePrintLabelResultAsync(int index, bool result)
{
var address = index == 1 ? 13060 : 13061;
if (index == 2)
await _writer.WriteShortsAsync(13053, 4);
await _writer.WriteShortsAsync(address, (short)(result ? 1 : 2));
}
public async Task WriteScanEntryResultAsync(int index, bool result)
{
var address = index == 1 ? 4530 : 4531;
await _writer.WriteShortsAsync(address, (short)(result ? 1 : 2));
}
//static byte SetBit(byte value, int bitPosition)
//{
// // 创建一个掩码,该掩码只有第 bitPosition 位为 1
// byte mask = (byte)(1 << bitPosition);
// // 使用按位或操作将 value 的第 bitPosition 位置为 1
// return (byte)(value | mask);
//}
public event Func<int, Task>? OnPlcRequestScanProduct;
@ -182,11 +124,10 @@ public class HyosungPlcService(ILogger<HyosungPlcService> logger) : IHyosungPlcS
public event Func<PlcStackingInfo, Task>? OnPlcPutCompleted;
public event Func<string, Task>? OnPlcRequestPackLineOption;
public event Func<long, Task>? OnPlcRequestPackLineOption;
public event Func<int, long, int, Task>? OnRequestPrintLabel;
public event Func<int, int, Task>? OnRequestPrintLabel;
public event Func<string, Task> OnRequestGetPrintLableOption;
public event Func<int, Task>? OnRequestScanEntry;
private async Task ReadLoop(CancellationToken token)
{
@ -194,7 +135,6 @@ public class HyosungPlcService(ILogger<HyosungPlcService> logger) : IHyosungPlcS
{
try
{
await QueryScanEntry();
await QueryScanProductRequest();
await QueryScanFixtureRequest();
if (!isLeaving)
@ -204,7 +144,6 @@ public class HyosungPlcService(ILogger<HyosungPlcService> logger) : IHyosungPlcS
await QueryPackLineOption();
await QueryPrintLabel();
await Task.Delay(100, token);
await QueryGetPrintLabel();
}
catch (Exception e)
{
@ -265,16 +204,17 @@ public class HyosungPlcService(ILogger<HyosungPlcService> logger) : IHyosungPlcS
// var stackStatus = await _reader.ReadShortsAsync(12110, 1);
if (leavingProductionLine[0] == 1)
{
var trayCode = await _reader.ReadStringAsync(12600);
//if (!string.IsNullOrEmpty(trayCode))
//{
PlcStackInfo info = new PlcStackInfo()
await _writer.WriteShortsAsync(4020, 0);
var trayCode = await _reader.ReadLongAsync(12600);
if (trayCode != 0)
{
TrayCode = trayCode
};
isLeaving = true;
OnPlcRequestLeavingProductionLine?.Invoke(info);
// }
PlcStackInfo info = new PlcStackInfo()
{
TrayCode = trayCode
};
isLeaving = true;
OnPlcRequestLeavingProductionLine?.Invoke(info);
}
}
}
@ -303,24 +243,22 @@ public class HyosungPlcService(ILogger<HyosungPlcService> logger) : IHyosungPlcS
var status = await _reader.ReadShortsAsync(4691, 2);
if (status[0] > 0)
{
logger.LogInformation($"request put yarn completed");
await _writer.WriteShortsAsync(4690, 0, 0, 0);
var trayCode = await _reader.ReadStringAsync(4620);
var yarn1 = await _reader.ReadStringAsync(4630);
var yarn2 = await _reader.ReadStringAsync(4640);
var yarn3 = await _reader.ReadStringAsync(4650);
var trayCode = await _reader.ReadLongAsync(4620);
var yarn1 = await _reader.ReadLongAsync(4630);
var yarn2 = await _reader.ReadLongAsync(4640);
var yarn3 = await _reader.ReadLongAsync(4650);
var info = new PlcStackingInfo()
{
TrayCode = trayCode,
YarnCount = status[0],
TotalYarnCount = status[1]
};
logger.LogInformation($"request put yarn get info: {JsonSerializer.Serialize(info)}");
if (!string.IsNullOrEmpty(yarn1))
if (yarn1!=0)
info.YarnCode.Add(yarn1);
if (!string.IsNullOrEmpty(yarn2))
if (yarn2!=0)
info.YarnCode.Add(yarn2);
if (!string.IsNullOrEmpty(yarn3))
if (yarn3!=0)
info.YarnCode.Add(yarn3);
if (info.YarnCode.Count != info.YarnCount)
{
@ -342,52 +280,29 @@ public class HyosungPlcService(ILogger<HyosungPlcService> logger) : IHyosungPlcS
var requestPackLineOption = await _reader.ReadShortsAsync(4022, 1);
if (requestPackLineOption[0] == 1)
{
var trayCode = await _reader.ReadStringAsync(12100);
var trayCode = await _reader.ReadLongAsync(12100);
await _writer.WriteShortsAsync(4022, 0);
OnPlcRequestPackLineOption?.Invoke(trayCode);
}
}
private async Task QueryScanEntry()
{
var requestScanEntry = await _reader.ReadShortsAsync(4030, 2);
if (requestScanEntry[0] == 1)
{
await _writer.WriteShortsAsync(4030, 0);
OnRequestScanEntry?.Invoke(1);
}
else if (requestScanEntry[1] == 1)
{
await _writer.WriteShortsAsync(4030, 0);
OnRequestScanEntry?.Invoke(2);
}
}
private async Task QueryGetPrintLabel()
{
var trayCode = await _reader.ReadStringAsync(13000);
if (!string.IsNullOrEmpty(trayCode) && !trayCode.StartsWith("0000"))
{
await _reader.WriteStringAsync(13000, "00000000000000000000");
OnRequestGetPrintLableOption?.Invoke(trayCode);
}
}
private async Task QueryPrintLabel()
{
var requestPrintLabel = await _reader.ReadShortsAsync(13010, 3);
if (requestPrintLabel[0] == 1)
{
var trayCode = await _reader.ReadLongAsync(13000);
await _writer.WriteShortsAsync(13010, 0);
await _writer.WriteShortsAsync(13012, 0);
OnRequestPrintLabel?.Invoke(1, requestPrintLabel[2]);
OnRequestPrintLabel?.Invoke(1, trayCode, requestPrintLabel[2]);
}
if (requestPrintLabel[1] == 1)
{
var trayCode = await _reader.ReadLongAsync(13000);
await _writer.WriteShortsAsync(13011, 0);
await _writer.WriteShortsAsync(13012, 0);
OnRequestPrintLabel?.Invoke(2, requestPrintLabel[2]);
OnRequestPrintLabel?.Invoke(2, trayCode, requestPrintLabel[2]);
}
}
}

View File

@ -24,7 +24,7 @@ public interface IHyosungPlcService
/// <param name="varietyId">品类ID</param>
/// <param name="yarnCode">纱码</param>
/// <returns></returns>
Task WriteScanYarnResultAsync(bool result, short? varietyId = null, string? yarnCode = null);
Task WriteScanYarnResultAsync(bool result, short? varietyId = null, long yarnCode = 0);
/// <summary>
/// 写入治具扫码结果
@ -47,7 +47,7 @@ public interface IHyosungPlcService
/// <param name="index"></param>
/// <param name="trayCode"></param>
/// <returns></returns>
Task WriteTrayCodeAsync(int index, string trayCode);
Task WriteTrayCodeAsync(int index, long trayCode);
/// <summary>
/// 写入收到的纱数量
@ -58,12 +58,7 @@ public interface IHyosungPlcService
Task WritePackLineOptionAsync(PackLineOption option);
Task WritePrintLableOptionsAsync(int side,int slaveCount);
Task WritePrintLabelResultAsync(int index, bool result);
Task WriteScanEntryResultAsync(int index, bool result);
Task WritePrintLabelResultAsync(int index, bool result);
/// <summary>
/// Plc请求扫描产品
@ -93,14 +88,10 @@ public interface IHyosungPlcService
/// <summary>
/// Plc请求打包线选项
/// </summary>
event Func<string, Task> OnPlcRequestPackLineOption;
event Func<long, Task> OnPlcRequestPackLineOption;
/// <summary>
/// 贴标站请求贴标
/// </summary>
event Func<int, int, Task> OnRequestPrintLabel;
event Func<string, Task> OnRequestGetPrintLableOption;
event Func<int, Task> OnRequestScanEntry;
event Func<int, long, int, Task> OnRequestPrintLabel;
}

View File

@ -51,6 +51,27 @@ public class McPlc(string host, int port, Mitsubishi.McFrame type)
return shorts;
}
public async Task<long> ReadLongAsync(int address)
{
// 一个 long 类型是 8 字节,所以需要读取 8 个字节的数据
var bytes = await ReadBytesAsync(address, 8);
// 确保读取到了足够的字节
if (bytes.Length < 8)
{
throw new Exception("读取 long 类型数据时字节数不足");
}
// 将字节数组转换为 long 类型
return BitConverter.ToInt64(bytes, 0);
}
public async Task WriteLongAsync(int address, long value)
{
byte[] bytes = BitConverter.GetBytes(value);
// Write the byte array to the PLC
await WriteBytesAsync(address, bytes);
}
public async Task WriteShortsAsync(int address, params short[] values)
{
var code = await _mc.WriteDeviceBlock(Mitsubishi.PlcDeviceType.D, address, values.Length,
@ -79,8 +100,8 @@ public class McPlc(string host, int port, Mitsubishi.McFrame type)
// 将字符串使用 ASCII 编码转换为字节数组
byte[] bytes = System.Text.Encoding.ASCII.GetBytes(value);
// 确保字节数组长度为 10
byte[] fixedLengthBytes = new byte[fixedLength*2];
Array.Copy(bytes, fixedLengthBytes, Math.Min(bytes.Length, fixedLength*2));
byte[] fixedLengthBytes = new byte[fixedLength];
Array.Copy(bytes, fixedLengthBytes, Math.Min(bytes.Length, fixedLength));
// 调用 WriteBytesAsync 方法写入字节数组
await WriteBytesAsync(address, fixedLengthBytes);
}

View File

@ -7,32 +7,18 @@ public class AveryPrinter(string host, int port)
{
public string Host => host;
public int Port => port;
private Socket _socket = new(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
private readonly Socket _socket = new(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
public async Task ConnectAsync(CancellationToken token)
{
try
{
await _socket.ConnectAsync(Host, Convert.ToInt32(port), token);
}
catch (Exception e)
}catch(Exception e)
{
Console.WriteLine($"Host[{Host}:{port}] error:{e.Message}");
}
}
private async Task<bool> CheckConnectAsync()
{
byte[] arrMsg = [0xff];
try
{
await _socket.SendAsync(arrMsg); //发送字节数组
return true;
}
catch
{
return false;
}
}
public async Task CloseAsync(CancellationToken token)
@ -43,13 +29,7 @@ public class AveryPrinter(string host, int port)
public async Task SendContentAsync(string context)
{
if (!await CheckConnectAsync())
{
_socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
await ConnectAsync(CancellationToken.None);
}
await _socket.SendAsync(Encoding.ASCII.GetBytes(context));
await _socket.SendAsync(Encoding.UTF8.GetBytes(context));
}
private const string CleanCmd = "#!A1#!CA#!P1";
@ -57,23 +37,11 @@ public class AveryPrinter(string host, int port)
public async Task CleanContextAsync()
{
if (!await CheckConnectAsync())
{
_socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
await ConnectAsync(CancellationToken.None);
}
await _socket.SendAsync(Encoding.ASCII.GetBytes(CleanCmd));
await _socket.SendAsync(Encoding.UTF8.GetBytes(CleanCmd));
}
public async Task PrintAsync()
{
if (!await CheckConnectAsync())
{
_socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
await ConnectAsync(CancellationToken.None);
}
await _socket.SendAsync(Encoding.ASCII.GetBytes(PrintCmd));
await _socket.SendAsync(Encoding.UTF8.GetBytes(PrintCmd));
}
}

View File

@ -15,14 +15,14 @@ public class HyosungPrinter(
IHyosungWmsService hyosungWmsService,
IOptions<PrintTemp> options) : IHyosungPrinter
{
private readonly AveryPrinter _masterPrinter = new("192.168.3.61", 9100);
private readonly AveryPrinter _slavePrinter = new("192.168.3.60", 9100);
private readonly AveryPrinter _masterPrinter = new("192.168.3.60", 9100);
private readonly AveryPrinter _slavePrinter = new("192.168.3.61", 9100);
public async Task StartAsync(CancellationToken token)
{
List<Task> ls = new List<Task>();
ls.Add(_masterPrinter.ConnectAsync(token));
ls.Add(_slavePrinter.ConnectAsync(token));
ls.Add(_masterPrinter.ConnectAsync(token)) ;
ls.Add(_slavePrinter.ConnectAsync(token)) ;
await Task.WhenAll(ls);
logger.LogInformation("printer connected");
}
@ -34,7 +34,7 @@ public class HyosungPrinter(
logger.LogInformation("printer disconnected");
}
public async Task PrintAsync(int index, string trayCode)
public async Task PrintAsync(int index, long trayCode)
{
var tray = await trayService.GetByCode(trayCode);
if (index == 1)
@ -66,7 +66,7 @@ public class HyosungPrinter(
private async Task<string> GetPrint1Content(Tray tray)
{
var variety = await varietyService.GetById(tray.VarietyId);
var yarns = await yarnService.GetYarnsByTrayIdAsync(tray.Id);
var yarns = await yarnService.GetYarnsByTrayIdAsync(tray.VarietyId);
var dic = new Dictionary<string, string>();
if (yarns.Count > 0)
{
@ -84,7 +84,7 @@ public class HyosungPrinter(
}
string temp;
if (variety.SubLabelCount == 1)
if (variety.MasterLabelCount == 1)
temp = options.Value.Partition;
else
{
@ -103,32 +103,30 @@ public class HyosungPrinter(
private async Task<string> GetPrint2Content(Tray tray)
{
var variety = await varietyService.GetById(tray.VarietyId);
var netWeight = tray.NetWeight.ToString("0.0");
if (netWeight.EndsWith(".0"))
netWeight = netWeight.Replace(".0", "");
var labelResult =
await hyosungWmsService.GetLabelResult(variety.Code, variety.Lot.ToString(), tray.ControlNo!.Value);
var dic = new Dictionary<string, string>
{
{ "$1153", $"\"{variety.Lot}\"" },
{ "1670dtex -144F", $"\"{tray.DtexFila}\"" },
{ "1500D - 144F", $"\"{tray.DenFila}\"" },
{ "$SA", $"\"{tray.Grade}\"" },
{ "$900", $"\"{netWeight}\"" },
{ "$900", $"\"{labelResult.NET_WEIGHT.ToString("0.0")}\"" },
{ "25-01-01", $"\"{DateTime.Now:yy-MM-dd}\"" },
{ "$90", $"\"{variety.TotalCount}\"" },
{ "$965", $"\"{tray.GrossWeight}\"" },
{ "$965", $"\"{labelResult.GROSS_WEIGHT}\"" },
{
"250101J068",
$"\"{DateTime.Now.ToString("yyMMdd" + "J") + tray.ControlNo.ToString()?.PadLeft(3, '0')}\""
},
{ "DTYY-JPA11530SFG250101000900115305480", $"{tray.Barcode}" }
{ "DTYY-JPA11530SFG250101000900115305480", $"\"{labelResult.BAR_CODE}\"" }
};
string content = options.Value.DefaultTemp;
foreach (var (key, value) in dic)
{
content = content.Replace(key, value);
}
logger.LogInformation($"print content: {content}");
return content;
}
}

View File

@ -11,5 +11,5 @@ public interface IHyosungPrinter
/// </summary>
/// <param name="trayCode"></param>
/// <returns></returns>
Task PrintAsync(int index,string trayCode);
Task PrintAsync(int index,long trayCode);
}

View File

@ -5,12 +5,10 @@ using Newtonsoft.Json.Linq;
namespace Seyounth.Hyosung.Core.Scanner;
public class HikScanner(string host, int port,int timeout=1000)
public class HikScanner(string host, int port)
{
public string Host => host;
public int Port => port;
public int Timeout => timeout;
private Socket _socket = new(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
public async Task ConnectAsync(CancellationToken token)
@ -25,71 +23,27 @@ public class HikScanner(string host, int port,int timeout=1000)
_socket.Dispose();
}
public async Task Restart()
{
try
{
_socket.Close();
}
finally
{
_socket = new(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
await _socket.ConnectAsync(Host, Port);
}
}
public async Task Stop()
{
var cmd = "stop"u8.ToArray();
await _socket.SendAsync(cmd);
}
public async Task<string> ScanAsync()
{
var barcode = string.Empty;
try
{
if (!_socket.Connected)
{
_socket = new(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
await _socket.ConnectAsync(Host, Port);
}
byte[] cmd = "start"u8.ToArray();
await _socket.SendAsync(cmd);
byte[] buffer = new byte[1024];
int len = await _socket.ReceiveAsync(buffer).WaitAsync(TimeSpan.FromMilliseconds(2000));
cmd = "stop"u8.ToArray();
await _socket.SendAsync(cmd);
byte[] _ = new byte[1024];
while (_socket.Available > 0)
{
await _socket.ReceiveAsync(_, SocketFlags.None);
}
_socket.ReceiveTimeout = 1000;
byte[] cmd = "start"u8.ToArray();
await _socket.SendAsync(cmd);
byte[] buffer = new byte[1024];
int len = await _socket.ReceiveAsync(buffer).WaitAsync(TimeSpan.FromMilliseconds(Timeout));
barcode= Encoding.ASCII.GetString(buffer, 0, len);
return Encoding.ASCII.GetString(buffer, 0, len);
}
catch (Exception e)
{
_socket.Close();
_socket = new(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
await _socket.ConnectAsync(Host, Port);
byte[] _ = new byte[1024];
while (_socket.Available > 0)
{
await _socket.ReceiveAsync(_, SocketFlags.None);
}
_socket.ReceiveTimeout = 1000;
byte[] cmd = "start"u8.ToArray();
await _socket.SendAsync(cmd);
byte[] buffer = new byte[1024];
int len = await _socket.ReceiveAsync(buffer).WaitAsync(TimeSpan.FromMilliseconds(1000));
barcode= Encoding.ASCII.GetString(buffer, 0, len);
return string.Empty;
}
finally
{
var cmd = "stop"u8.ToArray();
await _socket.SendAsync(cmd);
}
return barcode;
// 清空缓冲区 防止收到之前的数据
}
}

View File

@ -12,10 +12,6 @@ public class HyosungScannerService : IHyosungScannerService
private readonly ConcurrentDictionary<int, HikScanner> _fixtureScanners = new();
private readonly List<HikScanner> _carScanners = new();
private readonly List<HikScanner> _varietyScanners = new();
private List<string> lastCodes = new List<string>();
public HyosungScannerService(ILogger<HyosungScannerService> logger)
{
@ -28,19 +24,12 @@ public class HyosungScannerService : IHyosungScannerService
_fixtureScanners.TryAdd(2, new HikScanner("192.168.3.32", 2001));
_fixtureScanners.TryAdd(3, new HikScanner("192.168.3.33", 2001));
_fixtureScanners.TryAdd(4, new HikScanner("192.168.3.30", 2001));
_carScanners.Add(new HikScanner("192.168.30.46", 2001,5000));
//_carScanners.Add(new HikScanner("1920.168.3.48", 2001,5000));
_varietyScanners.Add(new HikScanner("192.168.30.47", 2001,10000));
//_varietyScanners.Add(new HikScanner("192.168.3.49", 2001,10000));
_logger = logger;
lastCodes.Add("");
lastCodes.Add("");
lastCodes.Add("");
lastCodes.Add("");
}
public async Task StartAsync(CancellationToken token)
{
// 创建一个超时任务
var timeoutTask = Task.Delay(2000, token);
@ -58,23 +47,8 @@ public class HyosungScannerService : IHyosungScannerService
return Task.WhenAny(connectTask, timeoutTask);
}).ToList();
var varietyScannerTasks = _varietyScanners.Select(scanner =>
{
var connectTask = scanner.ConnectAsync(token);
return Task.WhenAny(connectTask, timeoutTask);
}).ToList();
// 为每个车号扫描器创建一个带有超时的连接任务
var carScannerTasks = _carScanners.Select(scanner =>
{
var connectTask = scanner.ConnectAsync(token);
return Task.WhenAny(connectTask, timeoutTask);
}).ToList();
// 合并所有任务
var allTasks = new List<Task>();
allTasks.AddRange(carScannerTasks);
allTasks.AddRange(varietyScannerTasks);
allTasks.AddRange(yarnScannerTasks);
allTasks.AddRange(fixtureScannerTasks);
@ -101,26 +75,6 @@ public class HyosungScannerService : IHyosungScannerService
Console.WriteLine($"夹具扫描器连接超时");
}
}
foreach (var task in varietyScannerTasks)
{
var innerTask = task as Task<Task>;
if (innerTask.Result == timeoutTask)
{
// 处理纱线扫描器连接超时的情况
Console.WriteLine($"产品扫描器连接超时");
}
}
foreach (var task in carScannerTasks)
{
var innerTask = task as Task<Task>;
if (innerTask.Result == timeoutTask)
{
// 处理车号扫描器连接超时的情况
Console.WriteLine($"车号扫描器连接超时");
}
}
// foreach (var scanner in _yarnScanners)
// {
// await scanner.ConnectAsync(token);
@ -141,63 +95,41 @@ public class HyosungScannerService : IHyosungScannerService
public async Task<Yarn?> ScanYarnAsync(int varietyId)
{
List<Task<string>> ls = _yarnScanners.Select(scanner => scanner.ScanAsync()).ToList();
List<Task<Yarn?>> ls = _yarnScanners.Select(scanner => scanner.ScanAsync()
.ContinueWith(task =>
{
if (task.IsCompletedSuccessfully && !string.IsNullOrEmpty(task.Result))
{
_logger.LogInformation($"scanner[{scanner.Host}:{scanner.Port}] scan yarn {task.Result}");
return Yarn.Create(task.Result, varietyId);
}
//停止所有的扫码枪
return null;
}))
.ToList();
while (ls.Count > 0)
{
// 使用 Task.WhenAny 方法等待任意一个任务完成
Task<string> completedTask = await Task.WhenAny(ls);
Task<Yarn?> completedTask = await Task.WhenAny(ls);
// 移除已经完成的任务
ls.Remove(completedTask);
// 获取完成任务的结果
string result = await completedTask;
Yarn? result = await completedTask;
// 如果结果不为空,立即返回结果
if (!string.IsNullOrEmpty(result))
if (result != null)
{
_yarnScanners.Select(async scanner => await scanner.Stop());
return Yarn.Create(result, varietyId);
return result;
}
}
//_yarnScanners.Select( scanner => scanner.Stop());
_logger.LogWarning($"all scanner no scan yarn");
_yarnScanners.Select(async scanner => await scanner.Restart());
// 如果所有任务都完成且没有找到非空结果,返回 null
return null;
}
public async Task<string> ScanFixtureAsync(int fixtureId)
{
try
{
return await _fixtureScanners[fixtureId].ScanAsync();
}
catch (Exception e)
{
_logger.LogError(e, $"Fixture{fixtureId} Scan Error");
await _fixtureScanners[fixtureId].Restart();
return await _fixtureScanners[fixtureId].ScanAsync();
}
//string code = "";
//do
//{
// code= await _fixtureScanners[fixtureId].ScanAsync();
// await Task.Delay(100);
//} while (code != lastCodes[fixtureId - 1]);
//lastCodes[fixtureId - 1] = code;
//return code;
}
public async Task<string> ScanYarnCarAsync(int entryId)
{
return await _carScanners[entryId - 1].ScanAsync();
}
public async Task<string> ScanVarietyAsync(int entryId)
{
return await _varietyScanners[entryId - 1].ScanAsync();
return await _fixtureScanners[fixtureId].ScanAsync();
}
}

View File

@ -21,8 +21,4 @@ public interface IHyosungScannerService
/// <param name="fixtureId"></param>
/// <returns></returns>
Task<string> ScanFixtureAsync(int fixtureId);
Task<string> ScanYarnCarAsync(int entryId);
Task<string> ScanVarietyAsync(int entryId);
}

View File

@ -31,9 +31,4 @@ public class AgvBinEntity
[SugarColumn(ColumnDescription = "排序")]
public int Sort { get; set; }
[SugarColumn(IsNullable =true)]
public string HeightCode { get; set; }
public bool IsDeleted { get; set; }
}

View File

@ -12,7 +12,7 @@ public class ScannedYarnEntity
public string QrCode { get; set; }
[SugarColumn(ColumnDescription = "纱线代码", Length = 20)]
public string ScanCode { get; set; }
public long ScanCode { get; set; }
[SugarColumn(ColumnDescription = "Lot")]
public int Lot { get; set; }

View File

@ -9,7 +9,7 @@ public class TrayEntity
public int Id { get; set; }
[SugarColumn(ColumnDescription = "托盘唯一号")]
public string TrayCode { get; set; }
public long TrayCode { get; set; }
[SugarColumn(ColumnDescription = "所属的品类信息")]
public int VarietyId { get; set; }
@ -40,10 +40,4 @@ public class TrayEntity
[SugarColumn(IsNullable = true)] public double GrossWeight { get; set; }
[SugarColumn(IsNullable = true)] public int? AgvBinId { get; set; }
[SugarColumn(IsNullable = true)] public string? Barcode { get; set; }
[SugarColumn(IsNullable = true)] public bool? IsPacking { get; set; } = false;
[SugarColumn(IsNullable = true)] public bool? Exported { get; set; }
}

View File

@ -83,14 +83,5 @@ public class VarietyEntity
[SugarColumn(ColumnDescription = "副标签数量")]
public int SubLabelCount { get; set; }
[SugarColumn(IsNullable =true)]
public int? LastNo { get; set; }
[SugarColumn(IsNullable =true)]
public double? NetWeight { get; set; }
[SugarColumn(IsNullable =true)]
public double? GrossWeight { get; set; }
}

View File

@ -16,5 +16,5 @@ public partial class PackLineOption : ObservableObject
[ObservableProperty] private bool isLam;
[ObservableProperty] private string trayCode;
[ObservableProperty] private long trayCode;
}

View File

@ -5,6 +5,6 @@ namespace Seyounth.Hyosung.Data.Models.Plc;
/// </summary>
public class PlcStackInfo
{
public string TrayCode { get; set; }
public long TrayCode { get; set; }
}

View File

@ -2,9 +2,9 @@ namespace Seyounth.Hyosung.Data.Models.Plc;
public class PlcStackingInfo
{
public string TrayCode { get; set; }
public long TrayCode { get; set; }
public List<string> YarnCode { get; set; } = new List<string>();
public List<long> YarnCode { get; set; } = new ();
public int YarnCount { get; set; }

View File

@ -6,7 +6,7 @@ public class Tray
{
public int Id { get; set; }
public string TrayCode { get; set; }
public long TrayCode { get; set; }
public int VarietyId { get; set; }
@ -36,12 +36,6 @@ public class Tray
public int? AgvBinId { get; set; }
public string? Barcode { get; set; }
public bool? IsPacking { get; set; }
public bool? Exported { get; set; }
public TrayEntity ToEntity()
{
return new TrayEntity()
@ -61,10 +55,7 @@ public class Tray
Grade = Grade,
Type = Type,
Unit = Unit,
AgvBinId = AgvBinId,
Barcode = Barcode,
IsPacking = IsPacking,
Exported = Exported
AgvBinId = AgvBinId
};
}
@ -87,10 +78,7 @@ public class Tray
Grade = entity.Grade,
Type = entity.Type,
Unit = entity.Unit,
AgvBinId = entity.AgvBinId,
Barcode = entity.Barcode,
IsPacking = entity.IsPacking,
Exported = entity.Exported
AgvBinId = entity.AgvBinId
};
}
}

View File

@ -64,12 +64,6 @@ public class Variety
public bool IsTurn { get; set; }
public int? LastNo { get; set; }
public double? NetWeight { get; set; }
public double? GrossWeight { get; set; }
public static Variety Create(VarietyEntity entity, List<PalletEntity> pallets)
{
var variety = new Variety()
@ -98,10 +92,7 @@ public class Variety
MiddlePallet = Pallet.FromEntity(pallets.First(x => x.Id == entity.MiddlePalletId)),
TopAndBottomPallet = Pallet.FromEntity(pallets.First(x => x.Id == entity.TopAndBottomPalletId)),
Tray = Pallet.FromEntity(pallets.First(x => x.Id == entity.TrayId)),
HasBox = entity.HasBox,
LastNo = entity.LastNo,
NetWeight = entity.NetWeight,
GrossWeight = entity.GrossWeight
HasBox = entity.HasBox
};
if (entity.PaperTrayId != null && entity.PaperTrayId != 0)
variety.PaperTray = Pallet.FromEntity(pallets.First(x => x.Id == entity.PaperTrayId));
@ -139,9 +130,6 @@ public class Variety
TopAndBottomPalletId = TopAndBottomPallet.Id,
TrayId = Tray.Id,
HasBox = HasBox,
LastNo = LastNo,
NetWeight = NetWeight,
GrossWeight = GrossWeight
};
return entity;
}
@ -176,8 +164,8 @@ public class Variety
ls.Add((short)PaperTray.Height);
}
ls.Add((short)(TopAndBottomPallet.HoleCount is null ? 0 : TopAndBottomPallet.HoleCount));
ls.Add((short)(TopAndBottomPallet.IsBigHole is null ? 2 : (TopAndBottomPallet.IsBigHole.Value ? 1 : 2)));
ls.Add((short)(TopAndBottomPallet.HoleCount is null?0: TopAndBottomPallet.HoleCount));
ls.Add((short)(TopAndBottomPallet.IsBigHole is null?2:(TopAndBottomPallet.IsBigHole.Value?1:2)));
ls.Add((short)TopAndBottomPallet.Length);
ls.Add((short)TopAndBottomPallet.Width);
ls.Add((short)TopAndBottomPallet.Height);

View File

@ -9,7 +9,7 @@ public class Yarn
public string QrCode { get; set; }
public string ScanCode { get; set; }
public long ScanCode { get; set; }
public int Lot { get; set; }
@ -53,7 +53,7 @@ public class Yarn
ProduceTime = parts[3],
ScanTime = DateTime.Now,
VarietyId = varietyId,
ScanCode = DateTime.Now.ToTimestamp().ToString(),
ScanCode = DateTime.Now.ToTimestamp(),
TrayId = null
};
yarn.WorkShift = parts[1] switch
@ -79,7 +79,7 @@ public class Yarn
ScanTime = DateTime.Now,
VarietyId = varietyId,
TrayId = null,
ScanCode = DateTime.Now.ToTimestamp().ToString().PadLeft(10, '0'),
ScanCode = DateTime.Now.ToTimestamp(),
};
yarn.WorkShift = parts[5] switch
{

View File

@ -36,7 +36,7 @@ public static class ServiceExtensions
//#endif
return sqlSugar;
});
services.AddSingleton(typeof(IRepository<>), typeof(Repository<>));
services.AddScoped(typeof(IRepository<>), typeof(Repository<>));
services.AddSingleton<IVarietyService, VarietyService>();
services.AddSingleton<IYarnService, YarnService>();
services.AddSingleton<ITrayService, TrayService>();
@ -44,7 +44,6 @@ public static class ServiceExtensions
services.AddSingleton<IDictService, DictService>();
services.AddSingleton<IHyosungWmsService, HyosungWmsService>();
services.AddSingleton<IPalletService, PalletService>();
services.AddSingleton<IReportExportService, ReportExportService>();
return services;
}

View File

@ -12,37 +12,34 @@ public class AgvBinService : IAgvBinService
public AgvBinService(IServiceProvider provider)
{
_repository = provider.CreateScope().ServiceProvider.GetRequiredService<IRepository<AgvBinEntity>>();
//_repository = provider.GetService<IRepository<AgvBinEntity>>();
_cache = _repository.GetList();
_repository = provider.CreateScope().ServiceProvider.GetRequiredService<IRepository<AgvBinEntity>>();
_cache = _repository.GetList();
}
public async Task<AgvBinEntity> GetAvailableBin(int height)
{
var bin = await _repository.CopyNew().AsQueryable()
.Where(x => x.IsFree && !x.IsDeleted).OrderBy(x => x.Sort).FirstAsync();
if (bin.BinCode == "B10")
if (height < 180)
{
await _repository.CopyNew().AsUpdateable()
.Where(x => x.RackType == 2 && !x.IsDeleted)
.SetColumns(x => x.IsFree, true)
.ExecuteCommandAsync();
}
else if (bin.BinCode == "B33")
{
await _repository.CopyNew().AsUpdateable()
.Where(x => x.RackType == 1 && !x.IsDeleted)
.SetColumns(x => x.IsFree, true)
.ExecuteCommandAsync();
return _cache
.Where(x =>
x is { CtnrType: 1, IsFree: true } ||
x is { CtnrType: 2, IsFree: true } &&
_cache.Any(y =>
y is { CtnrType: 1, IsFree: false } && y.BinCode == x.BinCode &&
y is { Height: < 180 })
)
.OrderByDescending(x => x.CtnrType)
.ThenBy(x => x.Sort)
.First();
}
return bin;
return _cache.Where(a => a is { IsFree: true }).OrderBy(a => a.CtnrType).First();
}
public Task BindAsync(AgvBinEntity entity)
{
entity.IsFree = false;
_cache.First(e => e.Id == entity.Id).IsFree = false;
return _repository.CopyNew().UpdateAsync(entity);
return _repository.UpdateAsync(entity);
}
}

View File

@ -13,32 +13,19 @@ public class DictService : IDictService
public DictService(IServiceProvider provider)
{
_repository = provider.CreateScope()
.ServiceProvider.GetRequiredService<IRepository<DictEntity>>();
//_repository = provider.GetService<IRepository<DictEntity>>();
_cache = _repository.GetList();
_repository = provider.CreateScope()
.ServiceProvider.GetRequiredService<IRepository<DictEntity>>();
_cache = _repository.GetList();
}
public async Task<string> GetKeyAsync(string type, string name)
{
return _cache.FirstOrDefault(d => d.Type == type && d.Value == name)?.Key ?? "";
return _cache.FirstOrDefault(d => d.Type == type && d.Value == name)?.Value ?? "";
}
public async Task<List<DictEntity>> GetDictsByTypeAsync(string type)
{
return _cache.Where(d => d.Type == type).ToList();
}
public async Task SetValue(string type, string key, string value)
{
await _repository.CopyNew().AsUpdateable()
.Where(x => x.Type == type && x.Key == key).SetColumns(x => x.Value, value).ExecuteCommandAsync(); ;
}
public async Task<string> GetValue(string type, string key)
{
var dict = await _repository.CopyNew().GetFirstAsync(x => x.Type == type && x.Key == key);
return dict.Value;
}
}

View File

@ -1,4 +1,3 @@
using Seyounth.Hyosung.Data.Models;
using SqlSugar;
namespace Seyounth.Hyosung.Data.Services.Hyosung.Entities;
@ -6,71 +5,34 @@ namespace Seyounth.Hyosung.Data.Services.Hyosung.Entities;
[SugarTable("LABEL_RESULT")]
public class LabelResult
{
public string BE_ID { get; set; } = "2240";
public string BAR_CODE { get; set; } = "";
public string ITEM_CODE { get; set; } = "";
public string LABEL_ID { get; set; } = "TY_CN_PRODUCT";
public string WMS_UOM { get; set; } = "";
public string ERP_UOM { get; set; } = "";
public string MFG_DATE { get; set; } = "";
public decimal NET_WEIGHT { get; set; } = 0;
public decimal GROSS_WEIGHT { get; set; } = 0;
public string MFG_LINE { get; set; } = "TYJP11";
public string GRADE { get; set; } = "";
public string LOT { get; set; } = "";
public string BOX_NO { get; set; } = "";
// public string DENIER { get; set; } = "";
// public string FILA { get; set; } = "";
public string CUSTOMER_NAME { get; set; } = "";
// public string REMARKS { get; set; } = "";
// public string TRI_INTERFACE_YN { get; set; } = "";
public string TRI_TYPE { get; set; } = "ZP10";
public string COMMON_S1 { get; set; } = "";
public string COMMON_S2 { get; set; } = "";
public string COMMON_S3 { get; set; } = "";
public string COMMON_S4 { get; set; } = "";
public string COMMON_S5 { get; set; } = "";
//public string COMMON_S4 { get; set; } = "";
//public string COMMON_S5 { get; set; } = "";
//public string COMMON_N1 { get; set; } = "";
//public string TRI_YN { get; set; } = "";
public string CREATED_BY { get; set; } = "seyounth";
public string CREATED_ON { get; set; } = DateTime.Now.ToString("yyyy-MM-dd");
public string MODIFIED_BY { get; set; } = "seyounth";
public string MODIFIED_ON { get; set; } = DateTime.Now.ToString("yyyy-MM-dd");
public double COMMON_N1 { get; set; } = 0;
public LabelResult(Tray tray, Variety variety)
{
LABEL_ID = tray.TrayCode;
BE_ID = "2240";
BAR_CODE = tray.Barcode ?? "";
ITEM_CODE = variety.Code;
MFG_DATE = DateTime.Now.ToString("yyyyMMdd");
NET_WEIGHT = (decimal)tray.NetWeight;
GROSS_WEIGHT = (decimal)tray.GrossWeight;
GRADE = tray.Grade ?? "";
LOT = variety.Lot.ToString();
BOX_NO = $"{DateTime.Now.ToString("yyMMdd" + "J") + tray.ControlNo.ToString()?.PadLeft(3, '0')}";
CREATED_BY = "seyounth";
CREATED_ON = DateTime.Now.ToString("yyyy-MM-dd");
COMMON_S1 = tray.Type?? "";
COMMON_S2 = variety.TotalCount.ToString();
COMMON_S3=tray.DenFila?? "";
COMMON_S4 = tray.DtexFila?? "";
COMMON_S5 = "0";
COMMON_N1 = (double)tray.ControlNo;
MODIFIED_BY = "seyounth";
MODIFIED_ON = DateTime.Now.ToString("yyyy-MM-dd");
}
public LabelResult()
{
}
public string BE_ID { get; set; }
public string BAR_CODE { get; set; }
public string ITEM_CODE { get; set; }
public string LABEL_ID { get; set; }
public string WMS_UOM { get; set; }
public string ERP_UOM { get; set; }
public string MFG_DATE { get; set; }
public decimal NET_WEIGHT { get; set; }
public double GROSS_WEIGHT { get; set; }
public string MFG_LINE { get; set; }
public string GRADE { get; set; }
public string LOT { get; set; }
public string BOX_NO { get; set; }
public string DENIER { get; set; }
public string FILA { get; set; }
public string CUSTOMER_NAME { get; set; }
public string REMARKS { get; set; }
public string TRI_INTERFACE_YN { get; set; }
public string TRI_TYPE { get; set; }
public string COMMON_S1 { get; set; }
public string COMMON_S2 { get; set; }
public string COMMON_S3 { get; set; }
public string COMMON_S4 { get; set; }
public string COMMON_S5 { get; set; }
public string COMMON_N1 { get; set; }
public string TRI_YN { get; set; }
public string CREATED_BY { get; set; }
public string CREATED_ON { get; set; }
public string MODIFIED_BY { get; set; }
public string MODIFIED_ON { get; set; }
}

View File

@ -1,26 +0,0 @@
namespace Seyounth.Hyosung.Data.Services.Hyosung.Entities;
public class MST_ITEM
{
public string BE_ID { get; set; } = "2240";
public string ITEM_CODE { get; set; }
public string ITEM_CODE_TYPE { get; set; } = "FERT";
public string COMMON_S1 { get; set; }
public string COMMON_S2 { get; set; }
public string COMMON_S3 { get; set; }
public string COMMON_S4 { get; set; }
public string COMMON_S5 { get; set; }
public string ERP_UOM_ID { get; set; }
public string WMS_UOM_ID { get; set; }
}

View File

@ -1,9 +0,0 @@
namespace Seyounth.Hyosung.Data.Services.Hyosung.Entities;
public class MST_ITEM_VERSION
{
public string ITEM_CODE { get; set; }
public string WORK_CENTER { get; set; }
}

View File

@ -53,12 +53,12 @@ public class HyosungWmsService : IHyosungWmsService
else
{
await _db.Updateable<MST_BOXNO_SEQ_NON_DATE>()
.SetColumns(i => new MST_BOXNO_SEQ_NON_DATE
{
LastNo = controlNo,
ModifiedTime = DateTime.Now,
ModifiedBy = "seyounth"
})
.SetColumns(i => new MST_BOXNO_SEQ_NON_DATE
{
LastNo = controlNo,
ModifiedTime = DateTime.Now,
ModifiedBy = "seyounth"
})
.Where(i => i.BeId == "2240" &&
i.ItemCode == variety.Code &&
i.CheckCode == checkCode).ExecuteCommandAsync();
@ -70,7 +70,7 @@ public class HyosungWmsService : IHyosungWmsService
try
{
string code = $"{itemCode.Trim()} {DateTime.Now.AddDays(0):yyMMdd}";
string code2 = $"{lot.Trim()}{(controlNo - 1).ToString().PadLeft(4, '0')}0";
string code2 = $"{lot.Trim()}{(controlNo-1).ToString().PadLeft(4, '0')}0";
// 使用 SqlSugar 进行查询
return await _db.Queryable<LabelResult>()
@ -80,32 +80,10 @@ public class HyosungWmsService : IHyosungWmsService
x.BE_ID == "2240"
)
.FirstAsync();
}
catch (Exception e)
} catch (Exception e)
{
throw e;
}
}
public async Task AddLabelResult(LabelResult result)
{
try
{
var mst_item = await _db.Queryable<MST_ITEM>()
.FirstAsync(t => t.BE_ID == "2240"
&& t.ITEM_CODE == result.ITEM_CODE
&& t.ITEM_CODE_TYPE == "FERT");
result.WMS_UOM = mst_item.WMS_UOM_ID;
result.ERP_UOM = mst_item.ERP_UOM_ID;
var workCenter = await _db.Queryable<MST_ITEM_VERSION>()
.FirstAsync(v => v.ITEM_CODE == result.ITEM_CODE);
result.MFG_LINE=(workCenter?.WORK_CENTER)??"TYJP11";
await _db.Insertable(result).ExecuteCommandAsync();
}catch(Exception e)
{
}
}
}

View File

@ -10,8 +10,6 @@ public interface IHyosungWmsService
Task<MST_ITEM_2240_V> GetItemInfoByItemCode(string itemCode);
Task UpdateControlNo(Variety variety, int controlNo);
Task<LabelResult> GetLabelResult(string itemCode, string lot, int controlNo);
Task AddLabelResult(LabelResult result);
Task<LabelResult> GetLabelResult(string itemCode,string lot,int controlNo);
}

View File

@ -7,8 +7,4 @@ public interface IDictService
Task<string> GetKeyAsync(string type, string value);
Task<List<DictEntity>> GetDictsByTypeAsync(string type);
Task SetValue(string type, string key,string value);
Task<string> GetValue(string type, string key);
}

View File

@ -1,13 +0,0 @@
namespace Seyounth.Hyosung.Data.Services;
public interface IReportExportService
{
Task ExportAsync(string trayCode);
Task ExportSampleAsync(string trayCode);
Task ExportNoExportAsync();
Task ExportTodayTotalReportAsync();
}

View File

@ -1,4 +1,3 @@
using System.Globalization;
using Seyounth.Hyosung.Data.Models;
using Seyounth.Hyosung.Data.Services.Hyosung.Entities;
@ -18,23 +17,21 @@ public interface ITrayService
/// </summary>
/// <param name="code"></param>
/// <returns></returns>
Task<int> GetIdByCode(string code);
Task<int> GetIdByCode(long code);
/// <summary>
///
/// </summary>
/// <param name="code"></param>
/// <returns></returns>
Task<Tray> GetByCode(string code);
Task<Tray> GetIsPacking();
Task<Tray> GetByCode(long code);
/// <summary>
/// 生成控制号
/// </summary>
/// <param name="trayCode"></param>
/// <returns></returns>
Task StorageAsync(string trayCode);
Task StorageAsync(long trayCode);
/// <summary>
/// 打印托盘
@ -44,16 +41,5 @@ public interface ITrayService
/// <param name="controlNo"></param>
/// <param name="itemInfo"></param>
/// <returns></returns>
Task<Tray> PrintTrayAsync(string trayCode, MST_ITEM_2240_V itemInfo,Variety variety);
Task UpdateHeightAsync(string trayCode, int height);
Task ExportedAsync(string trayCode);
Task<List<string>> GetNoExportCodesAsync();
Task SetControlNoAsync(string trayCode, int controlNo);
Task<List<Tray>> GetTodayTrayAsync();
Task PrintTrayAsync(long trayCode, int stackHeight, int controlNo, MST_ITEM_2240_V itemInfo);
}

View File

@ -39,9 +39,4 @@ public interface IVarietyService
/// <param name="pallet"></param>
/// <returns></returns>
Task AddPalletAsync(Pallet pallet);
Task SetLastNo(int varietyId, int lastNo);
Task<int?> GetLastNo(int varietyId);
}

View File

@ -5,21 +5,21 @@ namespace Seyounth.Hyosung.Data.Services;
public interface IYarnService
{
ConcurrentDictionary<string, Yarn> NoFinished { get; }
ConcurrentDictionary<long, Yarn> NoFinished { get; }
Task<Yarn?> AddYarnAsync(Yarn yarn);
Task<List<Yarn>> GetYarnsByTrayIdAsync(int trayId);
Task<Yarn> GetYarnByCodeAsync(string code);
Task<Yarn> GetYarnByCodeAsync(long code);
/// <summary>
/// 完成指定纱
/// </summary>
/// <param name="yarnCode"></param>
/// <returns></returns>
Task FinishYarnAsync(string yarnCode);
Task FinishYarnAsync(long yarnCode);
/// <summary>
/// 绑定托盘号
@ -27,5 +27,5 @@ public interface IYarnService
/// <param name="yarnCode"></param>
/// <param name="trayId"></param>
/// <returns></returns>
Task BindTrayAsync(string yarnCode, int trayId);
Task BindTrayAsync(long yarnCode, int trayId);
}

View File

@ -13,8 +13,7 @@ public class PalletService : IPalletService
public PalletService(IServiceProvider serviceProvider)
{
_palletRepository = serviceProvider.CreateScope().ServiceProvider
.GetRequiredService<IRepository<PalletEntity>>();
// _palletRepository = serviceProvider.GetService<IRepository<PalletEntity>>();
.GetRequiredService<IRepository<PalletEntity>>();
_pallets = _palletRepository.GetList().Select(Pallet.FromEntity).ToList();
}

View File

@ -1,251 +0,0 @@
using System.Data;
using System.Globalization;
using ClosedXML.Excel;
using Microsoft.Extensions.Logging;
using Seyounth.Hyosung.Data.Models;
namespace Seyounth.Hyosung.Data.Services;
public class ReportExportService(
IYarnService yarnService,
IVarietyService varietyService,
ITrayService trayService,
ILogger<ReportExportService> logger)
: IReportExportService
{
const string TempPath = "./exportTemp.xlsx";
public async Task ExportAsync(string trayCode)
{
try
{
var tray = await trayService.GetByCode(trayCode);
var variety = await varietyService.GetById(tray.VarietyId);
var yarns = await yarnService.GetYarnsByTrayIdAsync(tray.Id);
await Create(tray, variety, yarns);
await trayService.ExportedAsync(tray.TrayCode);
}
catch (Exception e)
{
logger.LogError(e, $"export report [{trayCode}] error");
}
}
public async Task ExportSampleAsync(string trayCode)
{
try
{
var tray = await trayService.GetByCode(trayCode);
var variety = await varietyService.GetById(tray.VarietyId);
var yarns = await yarnService.GetYarnsByTrayIdAsync(tray.Id);
await CreateSample(tray, variety, yarns);
await trayService.ExportedAsync(tray.TrayCode);
}
catch (Exception e)
{
logger.LogError(e, $"export report [{trayCode}] error");
}
}
private async Task CreateSample(Tray tray, Variety variety, List<Yarn> yarns)
{
try
{
DataTable dt = new DataTable();
dt.Columns.Add("LOT");
dt.Columns.Add("DEN");
dt.Columns.Add("总个数/垛");
dt.Columns.Add("生产时间");
dt.Columns.Add("机台");
dt.Columns.Add("班次");
dt.Columns.Add("码垛时间");
for (int i = 1; i <= yarns.Count; i++)
{
if (i == 1)
{
dt.Rows.Add(yarns[i - 1].Lot, tray.DenFila, yarns.Count, yarns[i - 1].ProduceTime,
yarns[i - 1].Machine, yarns[i - 1].WorkShift, yarns[i - 1].StackTime);
}
else
{
dt.Rows.Add(yarns[i - 1].Lot, tray.DenFila, " ", yarns[i - 1].ProduceTime,
yarns[i - 1].Machine, yarns[i - 1].WorkShift,yarns[i - 1].StackTime);
}
}
var path = await GetDirectoryAsync();
var fileName = $"{variety.Lot}_{tray.Barcode.Split(" ")[1]}_{DateTime.Now:yyyyMMdd}.xlsx";
var filePath = Path.Combine(path, fileName);
using var workbook = new XLWorkbook();
var worksheet = workbook.Worksheets.Add(dt,"export");
// 设置数据行字体大小
var dataRows = worksheet.RowsUsed();
foreach (var row in dataRows)
{
row.Style.Font.FontSize = 14;
}
// 自动调整列宽
worksheet.Columns().AdjustToContents();
workbook.SaveAs(filePath);
}
catch (Exception e)
{
logger.LogError(e, "export today report error");
}
}
private async Task Create(Tray tray, Variety variety, List<Yarn> yarns)
{
using var workbook = new XLWorkbook(TempPath);
var worksheet = workbook.Worksheet(1); // 假设使用第一个工作表
worksheet.Cell("D2").Value = tray.Barcode; // 填充 TrayCode 到第一列
worksheet.Cell("D3").Value = variety.Code; // 填充 VarietyName 到第二列
worksheet.Cell("D4").Value = tray.DenFila;
worksheet.Cell("I3").Value = tray.FinishTime?.ToString("yyyy-MM-dd HH:mm:ss");
worksheet.Cell("I4").Value = tray.DtexFila;
worksheet.Cell("L3").Value = tray.Grade;
worksheet.Cell("M3").Value = variety.StackingLayers;
worksheet.Cell("N3").Value = tray.Unit?.ToString();
worksheet.Cell("O3").Value = yarns.Count.ToString();
worksheet.Cell("P3").Value = tray.ControlNo?.ToString();
worksheet.Cell("Q3").Value = tray.GrossWeight.ToString(CultureInfo.InvariantCulture);
worksheet.Cell("R3").Value = tray.NetWeight.ToString(CultureInfo.InvariantCulture);
int row = 8; // 假设数据从第二行开始填充
for (int i = 1; i <= yarns.Count; i++)
{
worksheet.Cell(row, "B").Value = i; // 填充 YarnId 到第一列
worksheet.Cell(row, "C").Value = yarns[i - 1].Lot; // 填充 YarnName 到第二列
worksheet.Cell(row, "D").Value = variety.Code; // 填充 YarnName 到第二列
worksheet.Cell(row, "F").Value = yarns[i - 1].Machine;
worksheet.Cell(row, "H").Value = yarns[i - 1].WorkShift;
worksheet.Cell(row, "I").Value = yarns[i - 1].QrCode;
worksheet.Cell(row, "P").Value = yarns[i - 1].StackTime?.ToString("yyyy-MM-dd HH:mm:ss");
row++;
}
for (int i = 8; i < row; i++)
{
worksheet.Row(i).Height = 31.5;
}
// 自动调整列宽
// worksheet.Columns().AdjustToContents();
// 获取数据区域
var dataRange = worksheet.Range(8, 2, row - 1, 18);
// 设置外边框样式
dataRange.Style.Border.OutsideBorder = XLBorderStyleValues.Thick;
dataRange.Style.Border.InsideBorder = XLBorderStyleValues.Medium;
dataRange.Style.Border.OutsideBorderColor = XLColor.Black;
var path = await GetDirectoryAsync(tray.FinishTime);
var fileName =
$"{variety.Lot}-{tray.TrayCode}-{tray.FinishTime?.ToString("yyyyMMddHHmmss")}.xlsx";
var filePath = Path.Combine(path, fileName);
// 保存工作簿到新文件
workbook.SaveAs(filePath);
}
public async Task ExportNoExportAsync()
{
var codes = await trayService.GetNoExportCodesAsync();
codes.ForEach(async void (code) =>
{
try
{
await ExportSampleAsync(code);
}
catch (Exception e)
{
logger.LogError(e, $"export report [{code}] error");
}
});
}
public async Task ExportTodayTotalReportAsync()
{
try
{
DataTable dt = new DataTable();
dt.Columns.Add("序号");
dt.Columns.Add("LOT");
dt.Columns.Add("品类");
dt.Columns.Add("条码");
dt.Columns.Add("数量");
dt.Columns.Add("毛重");
dt.Columns.Add("净重");
dt.Columns.Add("控制号");
dt.Columns.Add("完成时间");
var trays = await trayService.GetTodayTrayAsync();
for (int i = 0; i < trays.Count; i++)
{
var variety = await varietyService.GetById(trays[i].VarietyId);
var yarns = await yarnService.GetYarnsByTrayIdAsync(trays[i].Id);
dt.Rows.Add(i + 1, variety.Lot, variety.Code, trays[i].Barcode, yarns.Count,
trays[i].GrossWeight, trays[i].NetWeight, trays[i].ControlNo,
trays[i].FinishTime?.ToString("yyyy-MM-dd HH:mm:ss"));
}
var path = await GetTotalDirectoryAsync();
var fileName = $"每日报表-{DateTime.Now:yyyyMMdd}.xlsx";
var filePath = Path.Combine(path, fileName);
using var workbook = new XLWorkbook();
var worksheet = workbook.Worksheets.Add(dt);
var headerRow = worksheet.FirstRowUsed();
headerRow.Style.Font.FontSize = 16;
// 设置数据行字体大小
var dataRows = worksheet.RowsUsed().Skip(1);
foreach (var row in dataRows)
{
row.Style.Font.FontSize = 14;
}
// 自动调整列宽
worksheet.Columns().AdjustToContents();
workbook.SaveAs(filePath);
}
catch (Exception e)
{
logger.LogError(e, "export today report error");
}
}
private async Task<string> GetTotalDirectoryAsync(DateTime? date = null)
{
var root = "D:\\每日报表";
if (date is null)
date = DateTime.Now;
// 构建文件夹路径,格式为 年/月/日
string directoryPath = Path.Combine(root, date.Value.Year.ToString(), date.Value.Month.ToString());
// 检查文件夹是否存在
if (!Directory.Exists(directoryPath))
{
// 如果不存在,则创建文件夹
await Task.Run(() => Directory.CreateDirectory(directoryPath));
}
return directoryPath;
}
public async Task<string> GetDirectoryAsync(DateTime? date = null)
{
var root = "D:\\码垛信息";
if (date is null)
date = DateTime.Now;
// 构建文件夹路径,格式为 年/月/日
string directoryPath = Path.Combine(root, date.Value.Year.ToString(), date.Value.Month.ToString(),
date.Value.Day.ToString());
// 检查文件夹是否存在
if (!Directory.Exists(directoryPath))
{
// 如果不存在,则创建文件夹
await Task.Run(() => Directory.CreateDirectory(directoryPath));
}
return directoryPath;
}
}

View File

@ -6,62 +6,57 @@ using Seyounth.Hyosung.Data.Models;
using Seyounth.Hyosung.Data.Repositories;
using Seyounth.Hyosung.Data.Services.Hyosung;
using Seyounth.Hyosung.Data.Services.Hyosung.Entities;
using SqlSugar;
namespace Seyounth.Hyosung.Data.Services;
public class TrayService : ITrayService
{
//private readonly ConcurrentDictionary<string, Tray> _cache = new();
// private readonly <TrayEntity> _repository;
private readonly ConcurrentDictionary<long, Tray> _cache = new();
private readonly IRepository<TrayEntity> _repository;
private readonly IHyosungWmsService _hyosungWmsService;
private readonly ISqlSugarClient _db;
public TrayService(IServiceProvider provider, IHyosungWmsService hyosungWmsService, ISqlSugarClient db)
public TrayService(IServiceProvider provider, IHyosungWmsService hyosungWmsService)
{
_db = db;
// _repository = provider.CreateScope().ServiceProvider.GetRequiredService<IRepository<TrayEntity>>();
//_repository = provider.GetService<IRepository<TrayEntity>>();
// var trays = _db.Queryable<TrayEntity>().Where(t => t.ControlNo == null).ToListAsync().Result;
_repository = provider.CreateScope().ServiceProvider.GetRequiredService<IRepository<TrayEntity>>();
var trays = _repository.GetList(t => t.ControlNo == null);
_hyosungWmsService = hyosungWmsService;
//foreach (var tray in trays)
//{
// _cache.TryAdd(tray.TrayCode, Tray.FromEntity(tray));
//}
foreach (var tray in trays)
{
_cache.TryAdd(tray.TrayCode, Tray.FromEntity(tray));
}
}
public async Task<Tray> GeneraNewTray(int varietyId)
{
var tray = new Tray()
{
TrayCode = DateTime.Now.ToTimestamp().ToString(),
TrayCode = DateTime.Now.ToTimestamp(),
VarietyId = varietyId,
CreateTime = DateTime.Now
};
var count = await _db.CopyNew().Queryable<TrayEntity>().CountAsync(t => t.VarietyId == tray.VarietyId);
var count = await _repository.CountAsync(t => t.VarietyId == tray.VarietyId);
tray.IsEven = count % 2 == 0;
var identity = await _db.CopyNew().Insertable<TrayEntity>(tray.ToEntity()).ExecuteReturnIdentityAsync();
var identity = await _repository.InsertReturnIdentityAsync(tray.ToEntity());
tray.Id = identity;
// _cache.TryAdd(tray.TrayCode, tray);
_cache.TryAdd(tray.TrayCode, tray);
return tray;
}
public async Task<int> GetIdByCode(string code)
public async Task<int> GetIdByCode(long code)
{
//try
//{
// return _cache[code].Id;
//}
//catch
//{
return (await _db.CopyNew().Queryable<TrayEntity>().Where(d => d.TrayCode == code).FirstAsync()).Id;
// }
try
{
return _cache[code].Id;
}
catch
{
return (await _repository.GetFirstAsync(d => d.TrayCode == code)).Id;
}
}
public async Task<Tray> GetByCode(string code)
public async Task<Tray> GetByCode(long code)
{
return Tray.FromEntity(await _db.CopyNew().Queryable<TrayEntity>().Where(t => t.TrayCode == code).FirstAsync());
return Tray.FromEntity(await _repository.GetSingleAsync(t => t.TrayCode == code));
}
public Task StorageAsync(string trayCode, int stackHeight, int controlNo, MST_ITEM_2240_V itemInfo)
@ -69,89 +64,36 @@ public class TrayService : ITrayService
throw new NotImplementedException();
}
public async Task<Tray> PrintTrayAsync(string trayCode, MST_ITEM_2240_V itemInfo, Variety variety)
public async Task PrintTrayAsync(long trayCode, int stackHeight, int controlNo, MST_ITEM_2240_V itemInfo)
{
Tray tray;
//try
//{
// tray = _cache[trayCode];
//}
//catch
//{
tray = await GetByCode(trayCode);
//}
try
{
tray = _cache[trayCode];
}
catch
{
tray = await GetByCode(trayCode);
}
tray.ControlNo = controlNo;
tray.StackHeight = stackHeight;
tray.Grade = itemInfo.GRADE;
tray.Type = itemInfo.TYPE;
tray.DenFila = itemInfo.DEN_FILA;
tray.DtexFila = itemInfo.DTEX_FILA;
tray.Unit = itemInfo.UNIT;
tray.NetWeight = variety.NetWeight ?? itemInfo.NET_WEIGHT;
tray.GrossWeight = variety.GrossWeight ?? itemInfo.GROSS_WEIGHT;
var netWeight = tray.NetWeight.ToString("0.0");
if (netWeight.EndsWith(".0"))
netWeight = netWeight.Replace(".0", "");
tray.Barcode =
$"{itemInfo.ITEM_CODE} {DateTime.Now:yyMMdd}{netWeight.PadLeft(6,'0')}{itemInfo.LOTNO.PadLeft(4, '0')}{tray.ControlNo?.ToString().PadLeft(4, '0')}0";
await _db.Updateable<TrayEntity>(tray.ToEntity()).ExecuteCommandAsync();
// _cache.Remove(tray.TrayCode, out _);
return tray;
tray.NetWeight = itemInfo.NET_WEIGHT;
tray.GrossWeight = itemInfo.GROSS_WEIGHT;
await _repository.UpdateAsync(tray.ToEntity());
_cache.Remove(tray.TrayCode, out _);
}
public async Task StorageAsync(string trayCode)
public async Task StorageAsync(long trayCode)
{
var tray = await _db.CopyNew().Queryable<TrayEntity>().Where(d => d.TrayCode == trayCode).FirstAsync();
var tray = await GetByCode(trayCode);
tray.FinishTime = DateTime.Now;
tray.IsPacking = true;
await _db.CopyNew().Updateable<TrayEntity>(tray).ExecuteCommandAsync();
// _cache.TryRemove(tray.TrayCode, out _);
}
public async Task UpdateHeightAsync(string trayCode, int height)
{
await _db.CopyNew().Updateable<TrayEntity>()
.Where(x => x.TrayCode == trayCode)
.SetColumns(x => x.StackHeight, height)
.SetColumns(x => x.IsPacking, false)
.ExecuteCommandAsync();
}
public Task ExportedAsync(string trayCode)
{
return _db.CopyNew().Updateable<TrayEntity>()
.Where(x => x.TrayCode == trayCode)
.SetColumns(x => x.Exported, true).ExecuteCommandAsync();
}
public async Task<List<string>> GetNoExportCodesAsync()
{
var tray = await _db.CopyNew().Queryable<TrayEntity>().Where(x => x.Exported != true && x.FinishTime != null)
.ToListAsync();
var trayCodes = tray.Select(x => x.TrayCode).ToList();
return trayCodes;
}
public Task SetControlNoAsync(string trayCode, int controlNo)
{
return _db.CopyNew()
.Updateable<TrayEntity>()
.Where(d => d.TrayCode == trayCode)
.SetColumns(x => x.ControlNo, controlNo)
.ExecuteCommandAsync();
}
public Task<List<Tray>> GetTodayTrayAsync()
{
return _db.CopyNew()
.Queryable<TrayEntity>()
.Where(x => x.FinishTime >= DateTime.Today && x.FinishTime < DateTime.Today.AddDays(1))
.ToListAsync(x => Tray.FromEntity(x));
}
public async Task<Tray> GetIsPacking()
{
var tray = await _db.CopyNew().Queryable<TrayEntity>().Where(x => x.IsPacking != null && x.IsPacking.Value)
.FirstAsync();
return Tray.FromEntity(tray);
await _repository.UpdateAsync(tray.ToEntity());
_cache.Remove(tray.TrayCode, out _);
}
}

View File

@ -19,10 +19,8 @@ public class VarietyService : IVarietyService
{
_varietyRepository =
provider.CreateScope().ServiceProvider.GetRequiredService<IRepository<VarietyEntity>>();
_palletRepository = provider.CreateScope().ServiceProvider.GetRequiredService<IRepository<PalletEntity>>();
//_varietyRepository = provider.GetService<IRepository<VarietyEntity>>();
// _palletRepository = provider.GetService<IRepository<PalletEntity>>();
_varietiesCache = new List<VarietyEntity>(_varietyRepository.GetList());
_palletRepository = provider.CreateScope().ServiceProvider.GetRequiredService<IRepository<PalletEntity>>();
_varietiesCache = new List<VarietyEntity>(_varietyRepository.GetList());
_palletsCache = new List<PalletEntity>(_palletRepository.GetList());
}
catch (Exception e)
@ -86,18 +84,4 @@ public class VarietyService : IVarietyService
{
return _varietiesCache.Select(v => Variety.Create(v, _palletsCache.ToList())).ToList();
}
public async Task<int?> GetLastNo(int varietyId)
{
var variety = await (_varietyRepository.CopyNew().GetFirstAsync(x=>x.Id==varietyId));
return variety.LastNo;
}
public async Task SetLastNo(int varietyId,int lastNo)
{
await _varietyRepository.CopyNew().AsUpdateable()
.Where(x => x.Id == varietyId)
.SetColumns(x => x.LastNo , lastNo)
.ExecuteCommandAsync();
}
}

View File

@ -13,8 +13,7 @@ public class YarnService : IYarnService
public YarnService(IServiceProvider provider)
{
_yarnRepository = provider.CreateScope().ServiceProvider.GetRequiredService<IRepository<ScannedYarnEntity>>();
// _yarnRepository = provider.GetService<IRepository<ScannedYarnEntity>>();
NoFinished = new ConcurrentDictionary<string, Yarn>();
NoFinished = new ConcurrentDictionary<long, Yarn>();
var yarns = _yarnRepository.GetList(y => !y.IsFinished);
foreach (var yarn in yarns)
{
@ -22,11 +21,11 @@ public class YarnService : IYarnService
}
}
public ConcurrentDictionary<string, Yarn> NoFinished { get; }
public ConcurrentDictionary<long, Yarn> NoFinished { get; }
public async Task<Yarn?> AddYarnAsync(Yarn yarn)
{
var id = await _yarnRepository.CopyNew().InsertReturnIdentityAsync(yarn.ToEntity());
var id = await _yarnRepository.InsertReturnIdentityAsync(yarn.ToEntity());
yarn.Id = id;
NoFinished.TryAdd(yarn.ScanCode, yarn);
return yarn;
@ -34,11 +33,11 @@ public class YarnService : IYarnService
public async Task<List<Yarn>> GetYarnsByTrayIdAsync(int trayId)
{
return (await _yarnRepository.CopyNew().GetListAsync(y => y.TrayId == trayId))
return (await _yarnRepository.GetListAsync(y => y.TrayId == trayId))
.Select(Yarn.FromEntity).ToList();
}
public async Task<Yarn> GetYarnByCodeAsync(string code)
public async Task<Yarn> GetYarnByCodeAsync(long code)
{
try
{
@ -46,27 +45,27 @@ public class YarnService : IYarnService
}
catch
{
return Yarn.FromEntity(await _yarnRepository.CopyNew().GetFirstAsync(d => d.ScanCode == code)) ;
return Yarn.FromEntity(await _yarnRepository.GetFirstAsync(d => d.ScanCode == code)) ;
}
}
public async Task FinishYarnAsync(string yarnCode)
public async Task FinishYarnAsync(long yarnCode)
{
var yarn = NoFinished[yarnCode];
yarn.IsFinished = true;
await _yarnRepository.CopyNew().UpdateAsync(yarn.ToEntity());
await _yarnRepository.UpdateAsync(yarn.ToEntity());
NoFinished.TryRemove(yarnCode, out _);
}
public async Task BindTrayAsync(string yarnCode, int trayId)
public async Task BindTrayAsync(long yarnCode, int trayId)
{
var yarn = NoFinished[yarnCode];
yarn.TrayId = trayId;
yarn.StackTime = DateTime.Now;
yarn.IsFinished = true;
yarn.IsFinished = true;
await _yarnRepository.CopyNew().UpdateAsync(yarn.ToEntity());
await _yarnRepository.UpdateAsync(yarn.ToEntity());
NoFinished.TryRemove(yarnCode, out _);
}
}

View File

@ -7,12 +7,10 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="ClosedXML" Version="0.104.2" />
<PackageReference Include="CommunityToolkit.Mvvm" Version="8.4.0" />
<PackageReference Include="McProtocol" Version="1.2.5" />
<PackageReference Include="Microsoft.Extensions.Configuration" Version="9.0.3" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="9.0.3" />
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="9.0.3" />
<PackageReference Include="SqlSugarCore" Version="5.1.4.182" />
</ItemGroup>
@ -20,10 +18,4 @@
<ProjectReference Include="..\Seyounth.Core\Seyounth.Core.csproj" />
</ItemGroup>
<ItemGroup>
<None Update="exportTemp.xlsx">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>
</Project>

View File

@ -10,7 +10,6 @@ using Seyounth.Hyosung.Data.Models;
using Seyounth.Hyosung.Data.Models.Plc;
using Seyounth.Hyosung.Data.Services;
using Seyounth.Hyosung.Data.Services.Hyosung;
using Seyounth.Hyosung.Data.Services.Hyosung.Entities;
using Seyounth.Hyosung.Runtime.Models;
namespace Seyounth.Hyosung.Runtime;
@ -24,21 +23,14 @@ public class HyosungRuntime(
ITrayService trayService,
IVarietyService varietyService,
IHyosungAgvService hyosungAgvService,
IHyosungWmsService hyosungWmsService,
IDictService dictService,
IReportExportService reportExportService) : IHyosungRuntime
IHyosungWmsService hyosungWmsService) : IHyosungRuntime
{
public PackLineOption PackLineOption { get; private set; }
public StackStationModel Stack1 { get; private set; } = new();
public StackStationModel Stack2 { get; private set; } = new();
private ConcurrentQueue<int> _packingQueue = new ConcurrentQueue<int>();
private string currentPrintTrayCode = "";
public async Task StartAsync(CancellationToken token)
{
reportExportService.ExportNoExportAsync();
//启动扫码服务
await hyosungScannerService.StartAsync(token);
await printer.StartAsync(token);
@ -50,50 +42,9 @@ public class HyosungRuntime(
hyosungPlcService.OnPlcPutCompleted += OnPlcPutCompleted;
hyosungPlcService.OnPlcRequestPackLineOption += OnPlcRequestPackLineOption;
hyosungPlcService.OnRequestPrintLabel += OnPlcRequestPrintLabel;
hyosungPlcService.OnRequestGetPrintLableOption += OnRequestGetPrintLabel;
hyosungPlcService.OnRequestScanEntry += OnPlcRequestScanEntry;
await hyosungPlcService.StartAsync(token);
}
private async Task OnPlcRequestScanEntry(int arg)
{
logger.LogInformation($"plc request scan entry:{arg}");
try
{
var carCode = await hyosungScannerService.ScanYarnCarAsync(arg);
var varietyId = await hyosungScannerService.ScanVarietyAsync(arg);
if (string.IsNullOrEmpty(carCode) || string.IsNullOrEmpty(varietyId))
{
await hyosungPlcService.WriteScanEntryResultAsync(arg, false);
logger.LogInformation($"scan entry fail");
}
else
{
var carType = carCode[..1];
int carNumber = carType switch
{
"A" => 1,
"B" => 2,
"C" => 3,
"D" => 4,
_ => 0
};
var variety = await varietyService.GetById(int.Parse(varietyId));
variety.YarnCarType = carNumber;
variety.YarnCarSide = 1;
await SendVarietyToPlcAsync(variety);
await hyosungPlcService.WriteScanEntryResultAsync(arg, true);
logger.LogInformation($"scan entry success: {carCode}");
}
}
catch (Exception e)
{
await hyosungPlcService.WriteScanEntryResultAsync(arg, false);
logger.LogError(e, $"scan entry fail");
}
}
public async Task StopAsync(CancellationToken token)
{
//先停止扫码服务
@ -116,15 +67,6 @@ public class HyosungRuntime(
logger.LogInformation($"send variety to plc success: {variety.Id}");
}
public async Task GenerateReportAsync()
{
var trays = await trayService.GetTodayTrayAsync();
foreach (var tray in trays)
{
}
}
/// <summary>
/// 处理PLC请求扫描治具事件
/// </summary>
@ -203,8 +145,6 @@ public class HyosungRuntime(
try
{
await trayService.StorageAsync(info.TrayCode);
reportExportService.ExportSampleAsync(info.TrayCode);
await hyosungAgvService.StorageAsync(info.TrayCode);
//标志下线已完成
await hyosungPlcService.LeaveCompletedAsync();
@ -305,55 +245,31 @@ public class HyosungRuntime(
/// <param name="arg"></param>
/// <returns></returns>
/// <exception cref="NotImplementedException"></exception>
private async Task OnPlcRequestPackLineOption(string arg)
private async Task OnPlcRequestPackLineOption(long arg)
{
logger.LogInformation($"plc request pack line option");
try
{
var tray = await trayService.GetByCode(arg);
var variety = await varietyService.GetById(tray.VarietyId);
_packingQueue.Enqueue(variety.Id);
var mod = await hyosungWmsService.GetItemInfoByItemCode(variety.Code);
var grade = "1";
if (mod.GRADE != "AA") grade = mod.GRADE;
var count = _packingQueue.Count(x => x == variety.Id);
var control = await varietyService.GetLastNo(variety.Id);
if (control is null)
control = await hyosungWmsService.GetControlNo(variety, grade);
else
control = control + 1;
if (control == 1000)
control = 1;
var isEven = control % 2 == 0;
await varietyService.SetLastNo(variety.Id, control.Value);
await trayService.SetControlNoAsync(arg, control.Value);
PackLineOption = new PackLineOption()
{
HeadCount = variety.StackHeadCount ?? 0,
HasBox = variety.HasBox,
IsTop = variety.NeedTopBoard is NeedType.Need or NeedType.NotNeed
? variety.NeedTopBoard == NeedType.Need
: tray.IsEven && variety.NeedTopBoard == NeedType.EvenNeed,
IsPack = variety.NeedPackStrap is NeedType.Need or NeedType.NotNeed
? variety.NeedPackStrap == NeedType.Need
: tray.IsEven && variety.NeedPackStrap == NeedType.EvenNeed,
IsFilm = variety.NeedFilmWrapping is NeedType.Need or NeedType.NotNeed
? variety.NeedFilmWrapping == NeedType.Need
: tray.IsEven && variety.NeedFilmWrapping == NeedType.EvenNeed,
IsLam = variety.NeedFilmCoating is NeedType.Need or NeedType.NotNeed
? variety.NeedFilmCoating == NeedType.Need
: tray.IsEven && variety.NeedFilmCoating == NeedType.EvenNeed,
TrayCode = arg
};
if (variety.NeedTopBoard == NeedType.Need || (isEven && variety.NeedTopBoard == NeedType.EvenNeed) ||
(!isEven && variety.NeedTopBoard == NeedType.OddNeed))
PackLineOption.IsTop = true;
else
PackLineOption.IsTop = false;
if (variety.NeedPackStrap == NeedType.Need || (isEven && variety.NeedPackStrap == NeedType.EvenNeed) ||
(!isEven && variety.NeedPackStrap == NeedType.OddNeed))
PackLineOption.IsPack = true;
else
PackLineOption.IsPack = false;
if (variety.NeedFilmWrapping == NeedType.Need ||
(isEven && variety.NeedFilmWrapping == NeedType.EvenNeed) ||
(!isEven && variety.NeedFilmWrapping == NeedType.OddNeed))
PackLineOption.IsFilm = true;
else
PackLineOption.IsFilm = false;
if (variety.NeedFilmCoating == NeedType.Need || (isEven && variety.NeedFilmCoating == NeedType.EvenNeed) ||
(!isEven && variety.NeedFilmCoating == NeedType.OddNeed))
PackLineOption.IsLam = true;
else
PackLineOption.IsLam = false;
await hyosungPlcService.WritePackLineOptionAsync(PackLineOption);
logger.LogInformation($"plc request pack line option success");
}
@ -363,39 +279,6 @@ public class HyosungRuntime(
}
}
private async Task OnRequestGetPrintLabel(string arg)
{
try
{
logger.LogInformation("request print option");
currentPrintTrayCode = arg;
var tray = await trayService.GetByCode(arg);
var variety = await varietyService.GetById(tray.VarietyId);
var mod = await hyosungWmsService.GetItemInfoByItemCode(variety.Code);
// var grade = "1";
// if (mod.GRADE != "AA") grade = mod.GRADE;
// int? controlNo;
// if (tray.ControlNo is null || tray.ControlNo == 0)
// {
// controlNo = await varietyService.GetLastNo(variety.Id);
// if (controlNo is null)
// controlNo = await hyosungWmsService.GetControlNo(variety, grade);
// else
// controlNo += 1;
//
// }
tray = await trayService.PrintTrayAsync(arg, mod, variety);
await dictService.SetValue("System", "CurrentPackingTrayCode", arg);
await hyosungPlcService.WritePrintLableOptionsAsync(variety.MasterLabelCount, variety.SubLabelCount);
logger.LogInformation("request print option succeed");
}
catch(Exception e)
{
logger.LogError(e, "GetPrintOptionError");
}
}
/// <summary>
/// 处理贴标站请求贴标事件
/// </summary>
@ -403,31 +286,29 @@ public class HyosungRuntime(
/// <param name="arg2"></param>
/// <returns></returns>
/// <exception cref="NotImplementedException"></exception>
private async Task OnPlcRequestPrintLabel(int arg1, int height)
private async Task OnPlcRequestPrintLabel(int arg1, long trayCode, int height)
{
var trayCode = await dictService.GetValue("System", "CurrentPackingTrayCode");
var tray = await trayService.GetByCode(trayCode);
logger.LogInformation($"plc request print label:{arg1} {tray.TrayCode} {height}");
//var tray = await trayService.GetByCode(currentPrintTrayCode);
var variety = await varietyService.GetById(tray.VarietyId);
await trayService.UpdateHeightAsync(tray.TrayCode, height);
logger.LogInformation($"plc request print label:{arg1} {trayCode} {height}");
try
{
var tray = await trayService.GetByCode(trayCode);
var variety = await varietyService.GetById(tray.VarietyId);
var mod = await hyosungWmsService.GetItemInfoByItemCode(variety.Code);
var grade = "1";
if (mod.GRADE != "AA") grade = mod.GRADE;
var controlNo = await hyosungWmsService.GetControlNo(variety, grade);
await trayService.PrintTrayAsync(trayCode, height, controlNo, mod);
if (arg1 == 1)
{
await printer.PrintAsync(1, tray.TrayCode);
await hyosungPlcService.WritePrintLabelResultAsync(arg1, true);
await printer.PrintAsync(1, trayCode);
}
else
{
await printer.PrintAsync(2, tray.TrayCode);
await hyosungPlcService.WritePrintLabelResultAsync(arg1, true);
var version=await hyosungWmsService.GetItemInfoByItemCode(variety.Code);
// await varietyService.SetLastNo(variety.Id, tray.ControlNo.Value);
//await hyosungWmsService.UpdateControlNo(variety, tray.ControlNo.Value);
// await hyosungWmsService.AddLabelResult(new LabelResult(tray, variety));
}
await printer.PrintAsync(2, trayCode);
await hyosungPlcService.WritePrintLabelResultAsync(arg1, true);
await hyosungWmsService.UpdateControlNo(variety, controlNo);
logger.LogInformation($"plc request print label success");
}
catch (Exception e)

View File

@ -32,10 +32,4 @@ public interface IHyosungRuntime
/// <param name="variety"></param>
/// <returns></returns>
Task SendVarietyToPlcAsync(Variety variety);
/// <summary>
/// 生成当日报表
/// </summary>
/// <returns></returns>
Task GenerateReportAsync();
}

View File

@ -9,7 +9,7 @@ namespace Seyounth.Hyosung.Runtime.Models;
public partial class StackStationModel
{
[ObservableProperty] [DefaultValue("NoData")]
private string trayCode;
private long trayCode;
[ObservableProperty] [DefaultValue("NoData")]
private string varietyCode;

View File

@ -5,7 +5,6 @@ using System.Reflection;
using System.Runtime.InteropServices;
using System.Text;
using System.Windows;
using System.Windows.Media;
using System.Windows.Threading;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
@ -31,7 +30,6 @@ public partial class App : Application
public App()
{
RenderOptions.ProcessRenderMode = System.Windows.Interop.RenderMode.Default;
var builder = Host
.CreateApplicationBuilder();
builder.Logging.ClearProviders();

View File

@ -19,8 +19,6 @@ public partial class HomeViewModel : ObservableObject
[ObservableProperty] private List<string> _yarnCarTypes;
[ObservableProperty] private List<string> _yarnCarSide;
[ObservableProperty] private Variety _selectedVariety;
[ObservableProperty] private PackLineOption _packLineOption;
@ -38,9 +36,6 @@ public partial class HomeViewModel : ObservableObject
_yarnCarTypes.Add("B");
_yarnCarTypes.Add("C");
_yarnCarTypes.Add("D");
_yarnCarSide = new();
_yarnCarSide.Add("正面");
_yarnCarSide.Add("反面");
_varieties = new ObservableCollection<Variety>(varietyService.GetAll());
DispatcherTimer timer = new DispatcherTimer();
timer = new DispatcherTimer();
@ -56,6 +51,5 @@ public partial class HomeViewModel : ObservableObject
{
Stack1 = _runtime.Stack1;
Stack2 = _runtime.Stack2;
PackLineOption = _runtime.PackLineOption;
}
}

View File

@ -173,12 +173,11 @@
Foreground="White"
ItemsSource="{Binding ViewModel.YarnCarTypes}" />
<TextBlock VerticalAlignment="Center" Margin="10"
Foreground="White" Grid.Row="2" Grid.Column="0" Text="纱车正反面:" />
<ComboBox x:Name="YarnSideComboBox" Grid.Column="1" Margin="10" Grid.Row="2"
HorizontalAlignment="Stretch"
HorizontalContentAlignment="Right"
Foreground="White"
ItemsSource="{Binding ViewModel.YarnCarSide}" />
Foreground="White" Grid.Row="2" Grid.Column="0" Text="码垛层数:" />
<TextBox Grid.Column="1" Margin="10" Grid.Row="2" IsEnabled="False"
TextAlignment="Right"
Foreground="White"
Text="{Binding ViewModel.SelectedVariety.StackingLayers}" />
<TextBlock VerticalAlignment="Center" Margin="10"
Foreground="White" Grid.Row="3" Grid.Column="0" Text="总数:" />
<TextBox Grid.Column="1" Margin="10" Grid.Row="3" IsEnabled="False"

View File

@ -2,7 +2,6 @@
using System.Windows.Controls;
using MaterialDesignThemes.Wpf;
using Seyounth.Hyosung.Data.Models;
using Seyounth.Hyosung.Data.Services;
using Seyounth.Hyosung.Data.Services.Hyosung;
using Seyounth.Hyosung.Runtime;
using Seyounth.Hyosung.ViewModels;
@ -20,10 +19,7 @@ namespace Seyounth.Hyosung.Views.Pages
private readonly IHyosungWmsService _wmsService;
public HomeViewPage(HomeViewModel viewModel,
IHyosungRuntime runtime,
IHyosungWmsService wmsService,
IVarietyService varietyService)
public HomeViewPage(HomeViewModel viewModel, IHyosungRuntime runtime, IHyosungWmsService wmsService)
{
_wmsService = wmsService;
_runtime = runtime;
@ -45,7 +41,7 @@ namespace Seyounth.Hyosung.Views.Pages
ButtonProgressAssist.SetIsIndicatorVisible(ChangeVarietyButton, true);
ChangeVarietyButton.IsEnabled = false;
variety.YarnCarSide = YarnSideComboBox.SelectedIndex+1;
variety.YarnCarSide = 1;
variety.YarnCarType = YarnCarTypeComboBox.SelectedIndex + 1;
_runtime.SendVarietyToPlcAsync(variety)
.ContinueWith(task =>
@ -71,11 +67,7 @@ namespace Seyounth.Hyosung.Views.Pages
{
var variety = selectedItem as Variety;
var info = await _wmsService.GetItemInfoByItemCode(variety.Code);
int? controlNo;
if (variety.LastNo is null || variety.LastNo == 0)
controlNo = await _wmsService.GetControlNo(variety, info.GRADE);
else
controlNo = variety.LastNo + 1;
var controlNo = await _wmsService.GetControlNo(variety, info.GRADE);
await Dispatcher.InvokeAsync(() =>
{
ControlNoTextBlock.Text = $"控制号: {controlNo}";

View File

@ -1,391 +0,0 @@
Subject: [PATCH] 更新打印部分代码
---
Index: Seyounth.Hyosung.Core/Agv/HyosungAgvService.cs
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/Seyounth.Hyosung.Core/Agv/HyosungAgvService.cs b/Seyounth.Hyosung.Core/Agv/HyosungAgvService.cs
--- a/Seyounth.Hyosung.Core/Agv/HyosungAgvService.cs (revision e3f343fbb080e86d7154639348f436b03e9362b4)
+++ b/Seyounth.Hyosung.Core/Agv/HyosungAgvService.cs (revision ce0a2a6362e96697323b6547b4d1697e25e07072)
@@ -35,7 +35,7 @@
PositionCode = bin.CtnrCode,
Type = "05"
};
- var ctnrType = await dictService.GetKeyAsync("AgvRackType", height.ToString());
+ var ctnrType = await dictService.GetKeyAsync("AgvRackType", bin.Height.ToString());
await _agv.CarryToAsync(start, stop, ctnrType, 120, "1");
await agvBinService.BindAsync(bin);
}
Index: Seyounth.Hyosung.Core/Plc/HyosungPlcService.cs
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/Seyounth.Hyosung.Core/Plc/HyosungPlcService.cs b/Seyounth.Hyosung.Core/Plc/HyosungPlcService.cs
--- a/Seyounth.Hyosung.Core/Plc/HyosungPlcService.cs (revision e3f343fbb080e86d7154639348f436b03e9362b4)
+++ b/Seyounth.Hyosung.Core/Plc/HyosungPlcService.cs (revision ce0a2a6362e96697323b6547b4d1697e25e07072)
@@ -105,14 +105,25 @@
await _writer.WriteShortsAsync(12120, ls.ToArray());
}
- public async Task WritePrintLabelResultAsync(int index, bool result)
+ public async Task WritePrintLabelResultAsync(int index, int side, bool result)
{
var address = index == 1 ? 13060 : 13061;
if (index == 2)
- await _writer.WriteShortsAsync(13053, 4);
+ {
+ var data = SetBit(0, side);
+ await _writer.WriteShortsAsync(13053, data);
+ }
+
await _writer.WriteShortsAsync(address, (short)(result ? 1 : 2));
}
+ static byte SetBit(byte value, int bitPosition)
+ {
+ // 创建一个掩码,该掩码只有第 bitPosition 位为 1
+ byte mask = (byte)(1 << bitPosition);
+ // 使用按位或操作将 value 的第 bitPosition 位置为 1
+ return (byte)(value | mask);
+ }
public event Func<int, Task>? OnPlcRequestScanProduct;
@@ -254,11 +265,11 @@
YarnCount = status[0],
TotalYarnCount = status[1]
};
- if (yarn1!=0)
+ if (yarn1 != 0)
info.YarnCode.Add(yarn1);
- if (yarn2!=0)
+ if (yarn2 != 0)
info.YarnCode.Add(yarn2);
- if (yarn3!=0)
+ if (yarn3 != 0)
info.YarnCode.Add(yarn3);
if (info.YarnCode.Count != info.YarnCount)
{
Index: Seyounth.Hyosung.Core/Plc/IHyosungPlcService.cs
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/Seyounth.Hyosung.Core/Plc/IHyosungPlcService.cs b/Seyounth.Hyosung.Core/Plc/IHyosungPlcService.cs
--- a/Seyounth.Hyosung.Core/Plc/IHyosungPlcService.cs (revision e3f343fbb080e86d7154639348f436b03e9362b4)
+++ b/Seyounth.Hyosung.Core/Plc/IHyosungPlcService.cs (revision ce0a2a6362e96697323b6547b4d1697e25e07072)
@@ -58,7 +58,7 @@
Task WritePackLineOptionAsync(PackLineOption option);
- Task WritePrintLabelResultAsync(int index, bool result);
+ Task WritePrintLabelResultAsync(int index, int side, bool result);
/// <summary>
/// Plc请求扫描产品
Index: Seyounth.Hyosung.Core/Printer/HyosungPrinter.cs
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/Seyounth.Hyosung.Core/Printer/HyosungPrinter.cs b/Seyounth.Hyosung.Core/Printer/HyosungPrinter.cs
--- a/Seyounth.Hyosung.Core/Printer/HyosungPrinter.cs (revision e3f343fbb080e86d7154639348f436b03e9362b4)
+++ b/Seyounth.Hyosung.Core/Printer/HyosungPrinter.cs (revision ce0a2a6362e96697323b6547b4d1697e25e07072)
@@ -111,7 +111,7 @@
{ "1670dtex -144F", $"\"{tray.DtexFila}\"" },
{ "1500D - 144F", $"\"{tray.DenFila}\"" },
{ "$SA", $"\"{tray.Grade}\"" },
- { "$900", $"\"{labelResult.NET_WEIGHT.ToString("0.0")}\"" },
+ { "$900", $"\"{labelResult.NET_WEIGHT:0.0}\"" },
{ "25-01-01", $"\"{DateTime.Now:yy-MM-dd}\"" },
{ "$90", $"\"{variety.TotalCount}\"" },
{ "$965", $"\"{labelResult.GROSS_WEIGHT}\"" },
Index: Seyounth.Hyosung.Data/Entities/AgvBinEntity.cs
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/Seyounth.Hyosung.Data/Entities/AgvBinEntity.cs b/Seyounth.Hyosung.Data/Entities/AgvBinEntity.cs
--- a/Seyounth.Hyosung.Data/Entities/AgvBinEntity.cs (revision e3f343fbb080e86d7154639348f436b03e9362b4)
+++ b/Seyounth.Hyosung.Data/Entities/AgvBinEntity.cs (revision ce0a2a6362e96697323b6547b4d1697e25e07072)
@@ -31,4 +31,6 @@
[SugarColumn(ColumnDescription = "排序")]
public int Sort { get; set; }
+
+ public bool IsDeleted { get; set; }
}
\ No newline at end of file
Index: Seyounth.Hyosung.Data/Services/AgvBinService.cs
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/Seyounth.Hyosung.Data/Services/AgvBinService.cs b/Seyounth.Hyosung.Data/Services/AgvBinService.cs
--- a/Seyounth.Hyosung.Data/Services/AgvBinService.cs (revision e3f343fbb080e86d7154639348f436b03e9362b4)
+++ b/Seyounth.Hyosung.Data/Services/AgvBinService.cs (revision ce0a2a6362e96697323b6547b4d1697e25e07072)
@@ -18,22 +18,43 @@
public async Task<AgvBinEntity> GetAvailableBin(int height)
{
- if (height < 180)
+ var bin = await _repository.AsQueryable()
+ .Where(x => x.IsFree && x.IsDeleted == false)
+ .OrderBy(x => x.Sort)
+ .FirstAsync();
+ if (bin.BinCode == "B10")
+ {
+ await _repository.AsUpdateable()
+ .Where(x => x.RackType == 2 && x.IsDeleted == false)
+ .SetColumns(x => x.IsFree, true)
+ .ExecuteCommandAsync();
+ }
+ else if (bin.BinCode == "B33")
{
- return _cache
- .Where(x =>
- x is { CtnrType: 1, IsFree: true } ||
- x is { CtnrType: 2, IsFree: true } &&
- _cache.Any(y =>
- y is { CtnrType: 1, IsFree: false } && y.BinCode == x.BinCode &&
- y is { Height: < 180 })
- )
- .OrderByDescending(x => x.CtnrType)
- .ThenBy(x => x.Sort)
- .First();
+ await _repository.AsUpdateable()
+ .Where(x => x.RackType == 1 && x.IsDeleted == false)
+ .SetColumns(x => x.IsFree, true)
+ .ExecuteCommandAsync();
}
- return _cache.Where(a => a is { IsFree: true }).OrderBy(a => a.CtnrType).First();
+ return bin;
+
+ // if (height < 180)
+ // {
+ // return _cache
+ // .Where(x =>
+ // x is { CtnrType: 1, IsFree: true } ||
+ // x is { CtnrType: 2, IsFree: true } &&
+ // _cache.Any(y =>
+ // y is { CtnrType: 1, IsFree: false } && y.BinCode == x.BinCode &&
+ // y is { Height: < 180 })
+ // )
+ // .OrderByDescending(x => x.CtnrType)
+ // .ThenBy(x => x.Sort)
+ // .First();
+ // }
+ //
+ // return _cache.Where(a => a is { IsFree: true }).OrderBy(a => a.CtnrType).First();
}
public Task BindAsync(AgvBinEntity entity)
Index: Seyounth.Hyosung.Data/Services/Hyosung/HyosungWmsService.cs
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/Seyounth.Hyosung.Data/Services/Hyosung/HyosungWmsService.cs b/Seyounth.Hyosung.Data/Services/Hyosung/HyosungWmsService.cs
--- a/Seyounth.Hyosung.Data/Services/Hyosung/HyosungWmsService.cs (revision e3f343fbb080e86d7154639348f436b03e9362b4)
+++ b/Seyounth.Hyosung.Data/Services/Hyosung/HyosungWmsService.cs (revision ce0a2a6362e96697323b6547b4d1697e25e07072)
@@ -53,12 +53,12 @@
else
{
await _db.Updateable<MST_BOXNO_SEQ_NON_DATE>()
- .SetColumns(i => new MST_BOXNO_SEQ_NON_DATE
- {
- LastNo = controlNo,
- ModifiedTime = DateTime.Now,
- ModifiedBy = "seyounth"
- })
+ .SetColumns(i => new MST_BOXNO_SEQ_NON_DATE
+ {
+ LastNo = controlNo,
+ ModifiedTime = DateTime.Now,
+ ModifiedBy = "seyounth"
+ })
.Where(i => i.BeId == "2240" &&
i.ItemCode == variety.Code &&
i.CheckCode == checkCode).ExecuteCommandAsync();
@@ -70,7 +70,7 @@
try
{
string code = $"{itemCode.Trim()} {DateTime.Now.AddDays(0):yyMMdd}";
- string code2 = $"{lot.Trim()}{(controlNo-1).ToString().PadLeft(4, '0')}0";
+ string code2 = $"{lot.Trim()}{(controlNo - 1).ToString().PadLeft(4, '0')}0";
// 使用 SqlSugar 进行查询
return await _db.Queryable<LabelResult>()
@@ -80,10 +80,10 @@
x.BE_ID == "2240"
)
.FirstAsync();
- } catch (Exception e)
+ }
+ catch (Exception e)
{
throw e;
}
-
}
}
\ No newline at end of file
Index: Seyounth.Hyosung.Runtime/HyosungRuntime.cs
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/Seyounth.Hyosung.Runtime/HyosungRuntime.cs b/Seyounth.Hyosung.Runtime/HyosungRuntime.cs
--- a/Seyounth.Hyosung.Runtime/HyosungRuntime.cs (revision e3f343fbb080e86d7154639348f436b03e9362b4)
+++ b/Seyounth.Hyosung.Runtime/HyosungRuntime.cs (revision ce0a2a6362e96697323b6547b4d1697e25e07072)
@@ -291,29 +291,31 @@
logger.LogInformation($"plc request print label:{arg1} {trayCode} {height}");
try
{
-
- var tray = await trayService.GetByCode(trayCode);
- var variety = await varietyService.GetById(tray.VarietyId);
- var mod = await hyosungWmsService.GetItemInfoByItemCode(variety.Code);
- var grade = "1";
- if (mod.GRADE != "AA") grade = mod.GRADE;
- var controlNo = await hyosungWmsService.GetControlNo(variety, grade);
+ var tray = await trayService.GetByCode(trayCode);
+ var variety = await varietyService.GetById(tray.VarietyId);
+ var mod = await hyosungWmsService.GetItemInfoByItemCode(variety.Code);
+ var grade = "1";
+ if (mod.GRADE != "AA") grade = mod.GRADE;
+ var controlNo = await hyosungWmsService.GetControlNo(variety, grade);
await trayService.PrintTrayAsync(trayCode, height, controlNo, mod);
if (arg1 == 1)
{
-
- await printer.PrintAsync(1, trayCode);
+ await printer.PrintAsync(1, trayCode);
+ await hyosungPlcService.WritePrintLabelResultAsync(arg1, variety.SubLabelCount, true);
}
else
+ {
await printer.PrintAsync(2, trayCode);
+ await hyosungPlcService.WritePrintLabelResultAsync(arg1, variety.MasterLabelCount, true);
+ }
- await hyosungPlcService.WritePrintLabelResultAsync(arg1, true);
+
await hyosungWmsService.UpdateControlNo(variety, controlNo);
logger.LogInformation($"plc request print label success");
}
catch (Exception e)
{
- await hyosungPlcService.WritePrintLabelResultAsync(arg1, false);
+ await hyosungPlcService.WritePrintLabelResultAsync(arg1, 1, false);
logger.LogError(e, "print label fail");
}
}
Index: Seyounth.Hyosung/ViewModels/HomeViewModel.cs
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/Seyounth.Hyosung/ViewModels/HomeViewModel.cs b/Seyounth.Hyosung/ViewModels/HomeViewModel.cs
--- a/Seyounth.Hyosung/ViewModels/HomeViewModel.cs (revision e3f343fbb080e86d7154639348f436b03e9362b4)
+++ b/Seyounth.Hyosung/ViewModels/HomeViewModel.cs (revision ce0a2a6362e96697323b6547b4d1697e25e07072)
@@ -51,5 +51,6 @@
{
Stack1 = _runtime.Stack1;
Stack2 = _runtime.Stack2;
+ PackLineOption = _runtime.PackLineOption;
}
}
\ No newline at end of file
Index: Seyounth.Hyosung/Views/Pages/HomeViewPage.xaml
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/Seyounth.Hyosung/Views/Pages/HomeViewPage.xaml b/Seyounth.Hyosung/Views/Pages/HomeViewPage.xaml
--- a/Seyounth.Hyosung/Views/Pages/HomeViewPage.xaml (revision e3f343fbb080e86d7154639348f436b03e9362b4)
+++ b/Seyounth.Hyosung/Views/Pages/HomeViewPage.xaml (revision ce0a2a6362e96697323b6547b4d1697e25e07072)
@@ -68,6 +68,9 @@
DisplayMemberBinding="{Binding Lot}"
Header="Lot" />
<GridViewColumn
+ DisplayMemberBinding="{Binding ScanTime}"
+ Header="扫码时间" />
+ <GridViewColumn
DisplayMemberBinding="{Binding StackTime}"
Header="码垛时间" />
</GridView>
@@ -125,6 +128,9 @@
<GridViewColumn
DisplayMemberBinding="{Binding Lot}"
Header="Lot" />
+ <GridViewColumn
+ DisplayMemberBinding="{Binding ScanTime}"
+ Header="扫码时间" />
<GridViewColumn
DisplayMemberBinding="{Binding StackTime}"
Header="码垛时间" />
@@ -305,7 +311,7 @@
</Grid.ColumnDefinitions>
<TextBlock VerticalAlignment="Center" Margin="10"
Foreground="White" Grid.Row="0" Grid.Column="0" Text="主-贴标数:" />
- <TextBox Foreground="White" IsEnabled="False" Margin="10" Grid.Row="0" Grid.Column="1" />
+ <TextBox Foreground="White" IsEnabled="False" Margin="10" Grid.Row="0" Grid.Column="1" />
<TextBlock VerticalAlignment="Center" Margin="10"
Foreground="White" Grid.Row="1" Grid.Column="0" Text="主-前:" />
<CheckBox Grid.Row="1" Grid.Column="1" HorizontalAlignment="Center" />
@@ -317,27 +323,27 @@
<TextBlock VerticalAlignment="Center" Margin="10"
Foreground="White" Grid.Row="3" Grid.Column="0" Text="主-后:" />
<CheckBox Grid.Row="3" Grid.Column="1" HorizontalAlignment="Center" />
-
+
<TextBlock VerticalAlignment="Center" Margin="10"
Foreground="White" Grid.Row="4" Grid.Column="0" Text="主-右:" />
<CheckBox Grid.Row="4" Grid.Column="1" HorizontalAlignment="Center" />
-
+
<TextBlock VerticalAlignment="Center" Margin="10"
Foreground="White" Grid.Row="0" Grid.Column="2" Text="副-贴标数:" />
- <TextBox Foreground="White" IsEnabled="False" Margin="10" Grid.Row="0" Grid.Column="3" />
-
+ <TextBox Foreground="White" IsEnabled="False" Margin="10" Grid.Row="0" Grid.Column="3" />
+
<TextBlock VerticalAlignment="Center" Margin="10"
Foreground="White" Grid.Row="1" Grid.Column="2" Text="副-前:" />
<CheckBox Grid.Row="1" Grid.Column="3" HorizontalAlignment="Center" />
-
+
<TextBlock VerticalAlignment="Center" Margin="10"
Foreground="White" Grid.Row="2" Grid.Column="2" Text="副-左:" />
<CheckBox Grid.Row="2" Grid.Column="3" HorizontalAlignment="Center" />
-
+
<TextBlock VerticalAlignment="Center" Margin="10"
Foreground="White" Grid.Row="3" Grid.Column="2" Text="副-后:" />
<CheckBox Grid.Row="3" Grid.Column="3" HorizontalAlignment="Center" />
-
+
<TextBlock VerticalAlignment="Center" Margin="10"
Foreground="White" Grid.Row="4" Grid.Column="2" Text="副-右:" />
<CheckBox Grid.Row="4" Grid.Column="3" HorizontalAlignment="Center" />
Index: Seyounth.Hyosung/Views/Pages/VarietyPage.xaml
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/Seyounth.Hyosung/Views/Pages/VarietyPage.xaml b/Seyounth.Hyosung/Views/Pages/VarietyPage.xaml
--- a/Seyounth.Hyosung/Views/Pages/VarietyPage.xaml (revision e3f343fbb080e86d7154639348f436b03e9362b4)
+++ b/Seyounth.Hyosung/Views/Pages/VarietyPage.xaml (revision ce0a2a6362e96697323b6547b4d1697e25e07072)
@@ -67,6 +67,8 @@
AutoGenerateColumns="False"
HeadersVisibility="All"
VerticalContentAlignment="Center"
+ VirtualizingStackPanel.IsVirtualizing="True"
+ VirtualizingStackPanel.VirtualizationMode="Recycling"
ItemsSource="{Binding ViewModel.Varieties, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
CellEditEnding="DataGrid_CellEditEnding">
<DataGrid.Columns>

View File

@ -1,391 +0,0 @@
Subject: [PATCH] 更新打印部分代码
---
Index: Seyounth.Hyosung.Core/Agv/HyosungAgvService.cs
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/Seyounth.Hyosung.Core/Agv/HyosungAgvService.cs b/Seyounth.Hyosung.Core/Agv/HyosungAgvService.cs
--- a/Seyounth.Hyosung.Core/Agv/HyosungAgvService.cs (revision e3f343fbb080e86d7154639348f436b03e9362b4)
+++ b/Seyounth.Hyosung.Core/Agv/HyosungAgvService.cs (revision ce0a2a6362e96697323b6547b4d1697e25e07072)
@@ -35,7 +35,7 @@
PositionCode = bin.CtnrCode,
Type = "05"
};
- var ctnrType = await dictService.GetKeyAsync("AgvRackType", height.ToString());
+ var ctnrType = await dictService.GetKeyAsync("AgvRackType", bin.Height.ToString());
await _agv.CarryToAsync(start, stop, ctnrType, 120, "1");
await agvBinService.BindAsync(bin);
}
Index: Seyounth.Hyosung.Core/Plc/HyosungPlcService.cs
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/Seyounth.Hyosung.Core/Plc/HyosungPlcService.cs b/Seyounth.Hyosung.Core/Plc/HyosungPlcService.cs
--- a/Seyounth.Hyosung.Core/Plc/HyosungPlcService.cs (revision e3f343fbb080e86d7154639348f436b03e9362b4)
+++ b/Seyounth.Hyosung.Core/Plc/HyosungPlcService.cs (revision ce0a2a6362e96697323b6547b4d1697e25e07072)
@@ -105,14 +105,25 @@
await _writer.WriteShortsAsync(12120, ls.ToArray());
}
- public async Task WritePrintLabelResultAsync(int index, bool result)
+ public async Task WritePrintLabelResultAsync(int index, int side, bool result)
{
var address = index == 1 ? 13060 : 13061;
if (index == 2)
- await _writer.WriteShortsAsync(13053, 4);
+ {
+ var data = SetBit(0, side);
+ await _writer.WriteShortsAsync(13053, data);
+ }
+
await _writer.WriteShortsAsync(address, (short)(result ? 1 : 2));
}
+ static byte SetBit(byte value, int bitPosition)
+ {
+ // 创建一个掩码,该掩码只有第 bitPosition 位为 1
+ byte mask = (byte)(1 << bitPosition);
+ // 使用按位或操作将 value 的第 bitPosition 位置为 1
+ return (byte)(value | mask);
+ }
public event Func<int, Task>? OnPlcRequestScanProduct;
@@ -254,11 +265,11 @@
YarnCount = status[0],
TotalYarnCount = status[1]
};
- if (yarn1!=0)
+ if (yarn1 != 0)
info.YarnCode.Add(yarn1);
- if (yarn2!=0)
+ if (yarn2 != 0)
info.YarnCode.Add(yarn2);
- if (yarn3!=0)
+ if (yarn3 != 0)
info.YarnCode.Add(yarn3);
if (info.YarnCode.Count != info.YarnCount)
{
Index: Seyounth.Hyosung.Core/Plc/IHyosungPlcService.cs
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/Seyounth.Hyosung.Core/Plc/IHyosungPlcService.cs b/Seyounth.Hyosung.Core/Plc/IHyosungPlcService.cs
--- a/Seyounth.Hyosung.Core/Plc/IHyosungPlcService.cs (revision e3f343fbb080e86d7154639348f436b03e9362b4)
+++ b/Seyounth.Hyosung.Core/Plc/IHyosungPlcService.cs (revision ce0a2a6362e96697323b6547b4d1697e25e07072)
@@ -58,7 +58,7 @@
Task WritePackLineOptionAsync(PackLineOption option);
- Task WritePrintLabelResultAsync(int index, bool result);
+ Task WritePrintLabelResultAsync(int index, int side, bool result);
/// <summary>
/// Plc请求扫描产品
Index: Seyounth.Hyosung.Core/Printer/HyosungPrinter.cs
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/Seyounth.Hyosung.Core/Printer/HyosungPrinter.cs b/Seyounth.Hyosung.Core/Printer/HyosungPrinter.cs
--- a/Seyounth.Hyosung.Core/Printer/HyosungPrinter.cs (revision e3f343fbb080e86d7154639348f436b03e9362b4)
+++ b/Seyounth.Hyosung.Core/Printer/HyosungPrinter.cs (revision ce0a2a6362e96697323b6547b4d1697e25e07072)
@@ -111,7 +111,7 @@
{ "1670dtex -144F", $"\"{tray.DtexFila}\"" },
{ "1500D - 144F", $"\"{tray.DenFila}\"" },
{ "$SA", $"\"{tray.Grade}\"" },
- { "$900", $"\"{labelResult.NET_WEIGHT.ToString("0.0")}\"" },
+ { "$900", $"\"{labelResult.NET_WEIGHT:0.0}\"" },
{ "25-01-01", $"\"{DateTime.Now:yy-MM-dd}\"" },
{ "$90", $"\"{variety.TotalCount}\"" },
{ "$965", $"\"{labelResult.GROSS_WEIGHT}\"" },
Index: Seyounth.Hyosung.Data/Entities/AgvBinEntity.cs
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/Seyounth.Hyosung.Data/Entities/AgvBinEntity.cs b/Seyounth.Hyosung.Data/Entities/AgvBinEntity.cs
--- a/Seyounth.Hyosung.Data/Entities/AgvBinEntity.cs (revision e3f343fbb080e86d7154639348f436b03e9362b4)
+++ b/Seyounth.Hyosung.Data/Entities/AgvBinEntity.cs (revision ce0a2a6362e96697323b6547b4d1697e25e07072)
@@ -31,4 +31,6 @@
[SugarColumn(ColumnDescription = "排序")]
public int Sort { get; set; }
+
+ public bool IsDeleted { get; set; }
}
\ No newline at end of file
Index: Seyounth.Hyosung.Data/Services/AgvBinService.cs
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/Seyounth.Hyosung.Data/Services/AgvBinService.cs b/Seyounth.Hyosung.Data/Services/AgvBinService.cs
--- a/Seyounth.Hyosung.Data/Services/AgvBinService.cs (revision e3f343fbb080e86d7154639348f436b03e9362b4)
+++ b/Seyounth.Hyosung.Data/Services/AgvBinService.cs (revision ce0a2a6362e96697323b6547b4d1697e25e07072)
@@ -18,22 +18,43 @@
public async Task<AgvBinEntity> GetAvailableBin(int height)
{
- if (height < 180)
+ var bin = await _repository.AsQueryable()
+ .Where(x => x.IsFree && x.IsDeleted == false)
+ .OrderBy(x => x.Sort)
+ .FirstAsync();
+ if (bin.BinCode == "B10")
+ {
+ await _repository.AsUpdateable()
+ .Where(x => x.RackType == 2 && x.IsDeleted == false)
+ .SetColumns(x => x.IsFree, true)
+ .ExecuteCommandAsync();
+ }
+ else if (bin.BinCode == "B33")
{
- return _cache
- .Where(x =>
- x is { CtnrType: 1, IsFree: true } ||
- x is { CtnrType: 2, IsFree: true } &&
- _cache.Any(y =>
- y is { CtnrType: 1, IsFree: false } && y.BinCode == x.BinCode &&
- y is { Height: < 180 })
- )
- .OrderByDescending(x => x.CtnrType)
- .ThenBy(x => x.Sort)
- .First();
+ await _repository.AsUpdateable()
+ .Where(x => x.RackType == 1 && x.IsDeleted == false)
+ .SetColumns(x => x.IsFree, true)
+ .ExecuteCommandAsync();
}
- return _cache.Where(a => a is { IsFree: true }).OrderBy(a => a.CtnrType).First();
+ return bin;
+
+ // if (height < 180)
+ // {
+ // return _cache
+ // .Where(x =>
+ // x is { CtnrType: 1, IsFree: true } ||
+ // x is { CtnrType: 2, IsFree: true } &&
+ // _cache.Any(y =>
+ // y is { CtnrType: 1, IsFree: false } && y.BinCode == x.BinCode &&
+ // y is { Height: < 180 })
+ // )
+ // .OrderByDescending(x => x.CtnrType)
+ // .ThenBy(x => x.Sort)
+ // .First();
+ // }
+ //
+ // return _cache.Where(a => a is { IsFree: true }).OrderBy(a => a.CtnrType).First();
}
public Task BindAsync(AgvBinEntity entity)
Index: Seyounth.Hyosung.Data/Services/Hyosung/HyosungWmsService.cs
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/Seyounth.Hyosung.Data/Services/Hyosung/HyosungWmsService.cs b/Seyounth.Hyosung.Data/Services/Hyosung/HyosungWmsService.cs
--- a/Seyounth.Hyosung.Data/Services/Hyosung/HyosungWmsService.cs (revision e3f343fbb080e86d7154639348f436b03e9362b4)
+++ b/Seyounth.Hyosung.Data/Services/Hyosung/HyosungWmsService.cs (revision ce0a2a6362e96697323b6547b4d1697e25e07072)
@@ -53,12 +53,12 @@
else
{
await _db.Updateable<MST_BOXNO_SEQ_NON_DATE>()
- .SetColumns(i => new MST_BOXNO_SEQ_NON_DATE
- {
- LastNo = controlNo,
- ModifiedTime = DateTime.Now,
- ModifiedBy = "seyounth"
- })
+ .SetColumns(i => new MST_BOXNO_SEQ_NON_DATE
+ {
+ LastNo = controlNo,
+ ModifiedTime = DateTime.Now,
+ ModifiedBy = "seyounth"
+ })
.Where(i => i.BeId == "2240" &&
i.ItemCode == variety.Code &&
i.CheckCode == checkCode).ExecuteCommandAsync();
@@ -70,7 +70,7 @@
try
{
string code = $"{itemCode.Trim()} {DateTime.Now.AddDays(0):yyMMdd}";
- string code2 = $"{lot.Trim()}{(controlNo-1).ToString().PadLeft(4, '0')}0";
+ string code2 = $"{lot.Trim()}{(controlNo - 1).ToString().PadLeft(4, '0')}0";
// 使用 SqlSugar 进行查询
return await _db.Queryable<LabelResult>()
@@ -80,10 +80,10 @@
x.BE_ID == "2240"
)
.FirstAsync();
- } catch (Exception e)
+ }
+ catch (Exception e)
{
throw e;
}
-
}
}
\ No newline at end of file
Index: Seyounth.Hyosung.Runtime/HyosungRuntime.cs
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/Seyounth.Hyosung.Runtime/HyosungRuntime.cs b/Seyounth.Hyosung.Runtime/HyosungRuntime.cs
--- a/Seyounth.Hyosung.Runtime/HyosungRuntime.cs (revision e3f343fbb080e86d7154639348f436b03e9362b4)
+++ b/Seyounth.Hyosung.Runtime/HyosungRuntime.cs (revision ce0a2a6362e96697323b6547b4d1697e25e07072)
@@ -291,29 +291,31 @@
logger.LogInformation($"plc request print label:{arg1} {trayCode} {height}");
try
{
-
- var tray = await trayService.GetByCode(trayCode);
- var variety = await varietyService.GetById(tray.VarietyId);
- var mod = await hyosungWmsService.GetItemInfoByItemCode(variety.Code);
- var grade = "1";
- if (mod.GRADE != "AA") grade = mod.GRADE;
- var controlNo = await hyosungWmsService.GetControlNo(variety, grade);
+ var tray = await trayService.GetByCode(trayCode);
+ var variety = await varietyService.GetById(tray.VarietyId);
+ var mod = await hyosungWmsService.GetItemInfoByItemCode(variety.Code);
+ var grade = "1";
+ if (mod.GRADE != "AA") grade = mod.GRADE;
+ var controlNo = await hyosungWmsService.GetControlNo(variety, grade);
await trayService.PrintTrayAsync(trayCode, height, controlNo, mod);
if (arg1 == 1)
{
-
- await printer.PrintAsync(1, trayCode);
+ await printer.PrintAsync(1, trayCode);
+ await hyosungPlcService.WritePrintLabelResultAsync(arg1, variety.SubLabelCount, true);
}
else
+ {
await printer.PrintAsync(2, trayCode);
+ await hyosungPlcService.WritePrintLabelResultAsync(arg1, variety.MasterLabelCount, true);
+ }
- await hyosungPlcService.WritePrintLabelResultAsync(arg1, true);
+
await hyosungWmsService.UpdateControlNo(variety, controlNo);
logger.LogInformation($"plc request print label success");
}
catch (Exception e)
{
- await hyosungPlcService.WritePrintLabelResultAsync(arg1, false);
+ await hyosungPlcService.WritePrintLabelResultAsync(arg1, 1, false);
logger.LogError(e, "print label fail");
}
}
Index: Seyounth.Hyosung/ViewModels/HomeViewModel.cs
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/Seyounth.Hyosung/ViewModels/HomeViewModel.cs b/Seyounth.Hyosung/ViewModels/HomeViewModel.cs
--- a/Seyounth.Hyosung/ViewModels/HomeViewModel.cs (revision e3f343fbb080e86d7154639348f436b03e9362b4)
+++ b/Seyounth.Hyosung/ViewModels/HomeViewModel.cs (revision ce0a2a6362e96697323b6547b4d1697e25e07072)
@@ -51,5 +51,6 @@
{
Stack1 = _runtime.Stack1;
Stack2 = _runtime.Stack2;
+ PackLineOption = _runtime.PackLineOption;
}
}
\ No newline at end of file
Index: Seyounth.Hyosung/Views/Pages/HomeViewPage.xaml
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/Seyounth.Hyosung/Views/Pages/HomeViewPage.xaml b/Seyounth.Hyosung/Views/Pages/HomeViewPage.xaml
--- a/Seyounth.Hyosung/Views/Pages/HomeViewPage.xaml (revision e3f343fbb080e86d7154639348f436b03e9362b4)
+++ b/Seyounth.Hyosung/Views/Pages/HomeViewPage.xaml (revision ce0a2a6362e96697323b6547b4d1697e25e07072)
@@ -68,6 +68,9 @@
DisplayMemberBinding="{Binding Lot}"
Header="Lot" />
<GridViewColumn
+ DisplayMemberBinding="{Binding ScanTime}"
+ Header="扫码时间" />
+ <GridViewColumn
DisplayMemberBinding="{Binding StackTime}"
Header="码垛时间" />
</GridView>
@@ -125,6 +128,9 @@
<GridViewColumn
DisplayMemberBinding="{Binding Lot}"
Header="Lot" />
+ <GridViewColumn
+ DisplayMemberBinding="{Binding ScanTime}"
+ Header="扫码时间" />
<GridViewColumn
DisplayMemberBinding="{Binding StackTime}"
Header="码垛时间" />
@@ -305,7 +311,7 @@
</Grid.ColumnDefinitions>
<TextBlock VerticalAlignment="Center" Margin="10"
Foreground="White" Grid.Row="0" Grid.Column="0" Text="主-贴标数:" />
- <TextBox Foreground="White" IsEnabled="False" Margin="10" Grid.Row="0" Grid.Column="1" />
+ <TextBox Foreground="White" IsEnabled="False" Margin="10" Grid.Row="0" Grid.Column="1" />
<TextBlock VerticalAlignment="Center" Margin="10"
Foreground="White" Grid.Row="1" Grid.Column="0" Text="主-前:" />
<CheckBox Grid.Row="1" Grid.Column="1" HorizontalAlignment="Center" />
@@ -317,27 +323,27 @@
<TextBlock VerticalAlignment="Center" Margin="10"
Foreground="White" Grid.Row="3" Grid.Column="0" Text="主-后:" />
<CheckBox Grid.Row="3" Grid.Column="1" HorizontalAlignment="Center" />
-
+
<TextBlock VerticalAlignment="Center" Margin="10"
Foreground="White" Grid.Row="4" Grid.Column="0" Text="主-右:" />
<CheckBox Grid.Row="4" Grid.Column="1" HorizontalAlignment="Center" />
-
+
<TextBlock VerticalAlignment="Center" Margin="10"
Foreground="White" Grid.Row="0" Grid.Column="2" Text="副-贴标数:" />
- <TextBox Foreground="White" IsEnabled="False" Margin="10" Grid.Row="0" Grid.Column="3" />
-
+ <TextBox Foreground="White" IsEnabled="False" Margin="10" Grid.Row="0" Grid.Column="3" />
+
<TextBlock VerticalAlignment="Center" Margin="10"
Foreground="White" Grid.Row="1" Grid.Column="2" Text="副-前:" />
<CheckBox Grid.Row="1" Grid.Column="3" HorizontalAlignment="Center" />
-
+
<TextBlock VerticalAlignment="Center" Margin="10"
Foreground="White" Grid.Row="2" Grid.Column="2" Text="副-左:" />
<CheckBox Grid.Row="2" Grid.Column="3" HorizontalAlignment="Center" />
-
+
<TextBlock VerticalAlignment="Center" Margin="10"
Foreground="White" Grid.Row="3" Grid.Column="2" Text="副-后:" />
<CheckBox Grid.Row="3" Grid.Column="3" HorizontalAlignment="Center" />
-
+
<TextBlock VerticalAlignment="Center" Margin="10"
Foreground="White" Grid.Row="4" Grid.Column="2" Text="副-右:" />
<CheckBox Grid.Row="4" Grid.Column="3" HorizontalAlignment="Center" />
Index: Seyounth.Hyosung/Views/Pages/VarietyPage.xaml
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/Seyounth.Hyosung/Views/Pages/VarietyPage.xaml b/Seyounth.Hyosung/Views/Pages/VarietyPage.xaml
--- a/Seyounth.Hyosung/Views/Pages/VarietyPage.xaml (revision e3f343fbb080e86d7154639348f436b03e9362b4)
+++ b/Seyounth.Hyosung/Views/Pages/VarietyPage.xaml (revision ce0a2a6362e96697323b6547b4d1697e25e07072)
@@ -67,6 +67,8 @@
AutoGenerateColumns="False"
HeadersVisibility="All"
VerticalContentAlignment="Center"
+ VirtualizingStackPanel.IsVirtualizing="True"
+ VirtualizingStackPanel.VirtualizationMode="Recycling"
ItemsSource="{Binding ViewModel.Varieties, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
CellEditEnding="DataGrid_CellEditEnding">
<DataGrid.Columns>