This commit is contained in:
syc_zhaoqianyan 2025-10-31 09:56:25 +08:00
parent 76d5c3d5c7
commit 228d3d2a86
46 changed files with 1684 additions and 3281 deletions

Binary file not shown.

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,13 @@
{ {
"version": 1, "version": 1,
"isRoot": true, "isRoot": true,
"tools": {} "tools": {
"dotnet-ef": {
"version": "9.0.6",
"commands": [
"dotnet-ef"
],
"rollForward": false
}
}
} }

View File

@ -10,11 +10,11 @@ https://go.microsoft.com/fwlink/?LinkID=208121.
<LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration> <LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
<LastUsedPlatform>Any CPU</LastUsedPlatform> <LastUsedPlatform>Any CPU</LastUsedPlatform>
<PublishProvider>FileSystem</PublishProvider> <PublishProvider>FileSystem</PublishProvider>
<PublishUrl>bin\Release\net6.0\publish\</PublishUrl> <PublishUrl>D:\AD盘\新建文件夹</PublishUrl>
<WebPublishMethod>FileSystem</WebPublishMethod> <WebPublishMethod>FileSystem</WebPublishMethod>
<_TargetId>Folder</_TargetId> <_TargetId>Folder</_TargetId>
<SiteUrlToLaunchAfterPublish /> <SiteUrlToLaunchAfterPublish />
<TargetFramework>net6.0</TargetFramework> <TargetFramework>net8.0</TargetFramework>
<RuntimeIdentifier>win-x64</RuntimeIdentifier> <RuntimeIdentifier>win-x64</RuntimeIdentifier>
<ProjectGuid>d3b021e9-97fd-4f90-817a-24ec873e547b</ProjectGuid> <ProjectGuid>d3b021e9-97fd-4f90-817a-24ec873e547b</ProjectGuid>
<SelfContained>true</SelfContained> <SelfContained>true</SelfContained>

View File

@ -4,8 +4,8 @@ https://go.microsoft.com/fwlink/?LinkID=208121.
--> -->
<Project> <Project>
<PropertyGroup> <PropertyGroup>
<_PublishTargetUrl>D:\盛原成\骏马二期\MES\backend\code\apps\Syc.Basic.Web.WMS.HttpApi.Host\bin\Release\net6.0\publish\</_PublishTargetUrl> <_PublishTargetUrl>D:\AD盘\新建文件夹</_PublishTargetUrl>
<History>True|2024-10-17T08:48:40.2516489Z;True|2024-10-11T16:31:58.0638668+08:00;</History> <History>True|2025-10-14T01:55:20.8397035Z||;True|2025-10-14T09:47:50.6329259+08:00||;True|2025-10-14T09:21:41.0082215+08:00||;True|2025-10-14T09:12:48.2246215+08:00||;True|2025-10-13T15:49:11.3000400+08:00||;True|2025-10-13T15:39:23.3882777+08:00||;True|2025-10-13T15:37:36.1898742+08:00||;True|2025-10-13T15:24:03.8577628+08:00||;True|2025-10-13T15:22:18.1040326+08:00||;True|2025-10-13T14:52:42.5366229+08:00||;True|2025-10-13T14:30:45.1293637+08:00||;True|2025-10-13T13:44:04.9559440+08:00||;True|2025-10-13T11:23:33.0973594+08:00||;True|2025-10-13T11:19:07.8165478+08:00||;True|2025-10-13T11:03:15.1919334+08:00||;True|2025-10-13T10:59:11.0905529+08:00||;False|2025-10-13T10:58:29.5919735+08:00||;True|2025-10-12T17:23:43.5067894+08:00||;True|2025-10-12T17:12:07.1250247+08:00||;True|2025-10-12T17:10:07.6819749+08:00||;True|2025-10-12T17:03:16.4435860+08:00||;True|2025-10-12T16:48:49.6634960+08:00||;True|2025-10-12T16:47:52.7450982+08:00||;True|2025-10-12T16:41:34.1386818+08:00||;True|2025-10-12T16:21:47.1876143+08:00||;True|2025-10-12T15:37:11.6532017+08:00||;True|2025-10-12T15:28:04.8417959+08:00||;True|2025-10-11T14:47:40.1965699+08:00||;True|2025-10-07T15:48:49.6803059+08:00||;True|2025-07-09T18:15:14.6157523+08:00||;True|2025-07-09T18:03:48.5671798+08:00||;True|2025-07-09T17:22:07.0714896+08:00||;True|2025-07-09T16:51:02.1734781+08:00||;True|2025-07-09T15:36:53.8844874+08:00||;True|2025-07-04T17:48:33.6869691+08:00||;True|2025-07-04T12:18:47.2920156+08:00||;True|2025-07-04T12:17:31.7702038+08:00||;True|2024-10-17T16:48:40.2516489+08:00||;True|2024-10-11T16:31:58.0638668+08:00||;</History>
<LastFailureDetails /> <LastFailureDetails />
</PropertyGroup> </PropertyGroup>
</Project> </Project>

View File

@ -5,6 +5,6 @@
</PropertyGroup> </PropertyGroup>
<PropertyGroup> <PropertyGroup>
<ActiveDebugProfile>Syc.Basic.Web.WMS.HttpApi.Host</ActiveDebugProfile> <ActiveDebugProfile>Syc.Basic.Web.WMS.HttpApi.Host</ActiveDebugProfile>
<NameOfLastUsedPublishProfile>D:\盛原成\骏马二期\MES\backend\code\apps\Syc.Basic.Web.WMS.HttpApi.Host\Properties\PublishProfiles\FolderProfile.pubxml</NameOfLastUsedPublishProfile> <NameOfLastUsedPublishProfile>D:\D盘\项目\榆林\YuLInHSCode\Seyounth.Auto.Hs\apps\Syc.Basic.Web.WMS.HttpApi.Host\Properties\PublishProfiles\FolderProfile.pubxml</NameOfLastUsedPublishProfile>
</PropertyGroup> </PropertyGroup>
</Project> </Project>

View File

@ -25,7 +25,7 @@
"ValidateAudience": true, "ValidateAudience": true,
"Audience": "www.phqmo.blog.com", "Audience": "www.phqmo.blog.com",
"ValidateLifetime": true, "ValidateLifetime": true,
"ExpiredTime": 120, "ExpiredTime": 1440,
"ClockSkew": 2 "ClockSkew": 2
}, },
"CAP": { "CAP": {
@ -63,13 +63,15 @@
{ {
// //
"Id": 1, "Id": 1,
"IP": "127.0.0.1",//"192.168.3.202", //"IP": "192.168.3.202",
"IP": "127.0.0.1",
"Port": 2002 "Port": 2002
}, },
{ {
// //
"Id": 2, "Id": 2,
"IP": "127.0.0.1",//"192.168.3.120", //"IP": "192.168.3.120",
"IP": "127.0.0.1",
"Port": 2003 "Port": 2003
} }
], ],
@ -77,13 +79,15 @@
{ {
// //
"Id": 1, "Id": 1,
"IP": "127.0.0.1", "IP": "192.168.3.217",
//"IP": "127.0.0.1",
"Port": 9102 "Port": 9102
}, },
{ {
// //
"Id": 2, "Id": 2,
"IP": "192.168.3.217", "IP": "192.168.3.217",
//"IP": "127.0.0.1",
"Port": 9101 "Port": 9101
} }
], ],
@ -92,18 +96,22 @@
// //
"Id": 1, "Id": 1,
"IP": "192.168.3.99", "IP": "192.168.3.99",
"Port": 9110 //"IP": "127.0.0.1",
"Port": 9100
}, },
{ {
// //
"Id": 2, "Id": 2,
"IP": "192.168.3.100", "IP": "192.168.3.100",
"Port": 9111 //"IP": "127.0.0.1",
"Port": 9100
} }
], ],
"Plc": { "Plc": {
//PLC //PLC
"IP": "192.168.3.30", "IP": "192.168.3.30",
"Port": 502 "Port": 502
//"IP": "127.0.0.1",
//"Port": 6000
} }
} }

View File

@ -24,15 +24,18 @@ namespace Syc.Basic.Web.WMS.Dto
//生产批号 //生产批号
public string Lot_No { get; set; } public string Lot_No { get; set; }
//长度 //长度
public double? Length { get; set; } public string? Length { get; set; }
//打包时间 //打包时间
public DateTime? Dom_Time { get; set; } public string? Dom_Time { get; set; }
//生产日期 //生产日期
public string? Exp_Time { get; set; } public string? Exp_Time { get; set; }
public int DataType { get; set; }
public string Mark { get; set; }
/// <summary> /// <summary>
/// 是否在装箱 /// 是否在装箱
/// </summary> /// </summary>
public bool IsUse { get; set; } = true; public bool IsUse { get; set; } = true;
public int IsDelete { get; set; } public int IsDelete { get; set; }
public DateTime? Create_Time { get; set; }
} }
} }

View File

@ -0,0 +1,100 @@
using BarTender;
using Microsoft.Extensions.Logging;
using Syc.Basic.Web.WMS.Dto;
using Syc.Basic.Web.WMS.Entitys;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Syc.Basic.Web.WMS
{
public class BarTenderHelper
{
/// <summary>
/// 打印标签
/// </summary>
/// <param name="templatePath">模板全路径D://AD盘/新建文件夹/xxxx.btw</param>
/// <param name="deviceName">打印机名称</param>
/// <param name="@params">模板变量参数</param>
/// <returns></returns>
public static void Print(string templatePath,string deviceName,Dictionary<string,string> @params = null)
{
Console.WriteLine("开始打印");
Application bartenderApp = new Application();
var btFormat = bartenderApp.Formats.Open(templatePath,false,deviceName);
if (@params is not null && @params.Any())
{
foreach (var param in @params)
btFormat.SetNamedSubStringValue(param.Key, param.Value);
}
btFormat.IdenticalCopiesOfLabel = 1;
//设置打印份数,自动贴标就只出一张
BarTender.Messages btMsgs;
//开始打印
var btPrintRtn = btFormat.Print(PrintJobName:"打印标签",WaitForSpoolJobToComplete:false,Messages:out btMsgs);
if (btPrintRtn != BarTender.BtPrintResult.btSuccess)
foreach (BarTender.Message msg in btMsgs)
{
var text = msg.Message;
}
//输出错误日志
if (btPrintRtn != BarTender.BtPrintResult.btSuccess)
{
foreach(BarTender.Message msg in btMsgs)
{
var text = msg.Message;
}
}
//关闭模板
btFormat.Close(BarTender.BtSaveOptions.btPromptSave);
//退出打印程序
bartenderApp.Quit(BarTender.BtSaveOptions.btDoNotSaveChanges);
}
/// <summary>
/// 打印箱子标签
/// </summary>
/// <param name="box"></param>
public static void BoxPrint(Box box)
{
Dictionary<string, string> list = new Dictionary<string, string>()
{
{"$TYPE", box.Type },
{"$SPEC", box.Spec },
{"$QTY", box.Qty.ToString()},
{"$CTN", Math.Round(box.Net_Weight.Value,2).ToString()},
{ "$LOTNO", box.Lot_No },
{"$LENGTH", box.Length },
{ "$DATE", box.Dom_Time.ToString()},
{ "$EXP", box.Exp_Time.ToString()},
{ "$CODE", box.Code }
};
Print(@"D:\btw\装箱码垛标签.btw", "NOVEXX Solutions XLP 504 (300 dpi)Max", list);
}
/// <summary>
/// 打印丝锭标签
/// </summary>
/// <param name="box"></param>
public static void SilkPrint(Silk silk)
{
Dictionary<string, string> list = new Dictionary<string, string>()
{
{"$Name", silk.Name },
{"$Type", silk.Type },
{"$NetWeight", Math.Round(silk.Net_Weight.Value,2).ToString() },
{ "$Length", silk.Length},
{"$Date", silk.Date.ToString() },
{ "$LotNo", silk.Lot_No},
{ "$Code", silk.Code}
};
Print(@"D:\btw\丝锭标签.btw", "NOVEXX Solutions XLP 504 (300 dpi)Min", list);
}
}
}

View File

@ -27,8 +27,9 @@ namespace Syc.Basic.Web.WMS.DeviceEventHandle
private readonly IPrinterService printerService; private readonly IPrinterService printerService;
private readonly IUnitOfWorkManager unitOfWork; private readonly IUnitOfWorkManager unitOfWork;
private readonly ILogger<DefaultBalanceEventHandle> logger; private readonly ILogger<DefaultBalanceEventHandle> logger;
private readonly IRepository<AutoLabel> autoRepository;
private readonly static object _lock = new object(); private readonly static object _lock = new object();
public DefaultBalanceEventHandle(IRepository<Silk> silkRepository,IPlcService plcService,IRepository<Produce> produceRepository,IRepository<Box> boxRepository,IPrinterService printerService,IUnitOfWorkManager unitOfWork, ILogger<DefaultBalanceEventHandle> logger) public DefaultBalanceEventHandle(IRepository<Silk> silkRepository, IPlcService plcService, IRepository<Produce> produceRepository, IRepository<Box> boxRepository, IPrinterService printerService, IUnitOfWorkManager unitOfWork, ILogger<DefaultBalanceEventHandle> logger, IRepository<AutoLabel> autoRepository)
{ {
this.silkRepository = silkRepository; this.silkRepository = silkRepository;
this.plcService = plcService; this.plcService = plcService;
@ -37,6 +38,7 @@ namespace Syc.Basic.Web.WMS.DeviceEventHandle
this.printerService = printerService; this.printerService = printerService;
this.unitOfWork = unitOfWork; this.unitOfWork = unitOfWork;
this.logger = logger; this.logger = logger;
this.autoRepository = autoRepository;
} }
public async Task ExecAsync(decimal weight, int id) public async Task ExecAsync(decimal weight, int id)
@ -80,38 +82,96 @@ namespace Syc.Basic.Web.WMS.DeviceEventHandle
/// <returns></returns> /// <returns></returns>
public async Task Yanr(decimal weight) public async Task Yanr(decimal weight)
{ {
if (await silkRepository.AnyAsync(e => e.Status == 0 && e.IsDelete == 0)) #region
{ //要扫码称重的
var silk = await silkRepository.FirstOrDefaultAsync(e => e.Status == 0 && e.IsDelete == 0);//QueueManage.YarnBalanceQueue.Dequeue(); //if (await silkRepository.AnyAsync(e => e.Status == 0 && e.IsDelete == 0))
silk.Status = 1; //{
silk.Status_Details = "已称重待装箱"; // var silk = await silkRepository.FirstOrDefaultAsync(e => e.Status == 0 && e.IsDelete == 0);//QueueManage.YarnBalanceQueue.Dequeue();
silk.Net_Weight = (double)weight; // silk.Status = (int)SilkStatus.已称重;
await silkRepository.UpdateAsync(silk); // silk.Status_Details = "已称重";
string content = "#!A1" + // silk.Net_Weight = (double)weight;
"\r\n#N13" + // await silkRepository.UpdateAsync(silk);
"\r\n#PC1017/0" + // string content = "#!A1" +
"\r\n#IMR44/46" + // "\r\n#N13" +
//"\r\n#HV50" + // "\r\n#PC1017/0" +
"\r\n#PR6//" + // "\r\n#IMR44/46" +
"\r\n#PO0" + // //"\r\n#HV50" +
"\r\n#ERNC/1//0.00" + // "\r\n#PR6//" +
"\r\n#R0/0" + // "\r\n#PO0" +
"\r\n#T3.64 #J43.18 #FD/0/L #SS100/BVUN/21X21/0 #VW/L/\"YuLinHengShenXinCaiLiaoYouXianGongSi\"#G" + // "\r\n#ERNC/1//0.00" +
"\r\n#T11.85 #J40.47 #FD/0/L #SS100/BVUN/19X19/0 #VW/L/\"Yulin Hengshen COLtd\"#G" + // "\r\n#R0/0" +
"\r\n#T2.28 #J25.31 #FD/0/L #SS100/BVUN/20X20/0 #VW/L/\"Name " + silk.Name +"\"#G" + // "\r\n#T3.64 #J43.18 #FD/0/L #SS100/BVUN/21X21/0 #VW/L/\"YuLinHengShenXinCaiLiaoYouXianGongSi\"#G" +
"\r\n#T2.28 #J20.91 #FD/0/L #SS100/BVUN/20X20/0 #VW/L/\"Type " +silk.Type+ "\"#G" + // "\r\n#T11.85 #J40.47 #FD/0/L #SS100/BVUN/19X19/0 #VW/L/\"Yulin Hengshen COLtd\"#G" +
"\r\n#T2.28 #J16.51 #FD/0/L #SS100/BVUN/20X20/0 #VW/L/\"Net Weight "+silk.Net_Weight+ "\"#G" + // "\r\n#T2.28 #J25.31 #FD/0/L #SS100/BVUN/20X20/0 #VW/L/\"Name " + silk.Name +"\"#G" +
"\r\n#T2.28 #J12.61 #FD/0/L #SS100/BVUN/20X20/0 #VW/L/\"Length "+silk.Length+ "\"#G" + // "\r\n#T2.28 #J20.91 #FD/0/L #SS100/BVUN/20X20/0 #VW/L/\"Type " +silk.Type+ "\"#G" +
"\r\n#T2.28 #J7.95 #FD/0/L #SS100/BVUN/20X20/0 #VW/L/\"Date "+silk.Date.ToString()+ "\"#G" + // "\r\n#T2.28 #J16.51 #FD/0/L #SS100/BVUN/20X20/0 #VW/L/\"Net Weight "+silk.Net_Weight+ "\"#G" +
"\r\n#T2.28 #J3.89 #FD/0/L #SS100/BVUN/20X20/0 #VW/L/\"Lot No "+silk.Lot_No+ "\"#G" + // "\r\n#T2.28 #J12.61 #FD/0/L #SS100/BVUN/20X20/0 #VW/L/\"Length "+silk.Length+ "\"#G" +
"\r\n#T11.51 #J29.54 #FD/0/L #SB13/ONKP2.0/8.80/2 #VW/L/\"" + silk.Code+"\"#G" + // "\r\n#T2.28 #J7.95 #FD/0/L #SS100/BVUN/20X20/0 #VW/L/\"Date "+silk.Date.ToString()+ "\"#G" +
"\r\n#Q1#G" + // "\r\n#T2.28 #J3.89 #FD/0/L #SS100/BVUN/20X20/0 #VW/L/\"Lot No "+silk.Lot_No+ "\"#G" +
"\r\n#!P1" + // "\r\n#T11.51 #J29.54 #FD/0/L #SB13/ONKP2.0/8.80/2 #VW/L/\"" + silk.Code+"\"#G" +
"\r\n"; // "\r\n#Q1#G" +
await printerService.PrintAsync(1, content); // "\r\n#!P1" +
// "\r\n";
// await printerService.PrintAsync(1, content);
// logger.LogInformation($"Silk({silk.Id}|{silk.Code})状态更改为【已称重待装箱】,同时向打印机发送打印标签指令");
//}
#endregion
//不扫码称重
logger.LogInformation("称重的体重为" + weight);
if ((double)weight < 0.2)
return;
var produce = await produceRepository.FirstOrDefaultAsync(x => x.IfUse == 1 && x.IsDelete == 0);
if (produce == null)
throw Oops.Oh("没有生产设置");
var date = DateOnly.Parse(DateTime.Now.ToString("yyyy-MM-dd"));
var autolabel = await autoRepository.FirstOrDefaultAsync(x => x.Date == date && x.Type == (int)AutoLabelType.);
var timestr = DateTime.Now.ToString("yyyyMMddHHmmss");
if (autolabel == null)
{
autolabel = await autoRepository.InsertAsync(new AutoLabel()
{
Date = date,
Sort = 0,
Mark = timestr,
Type = (int)AutoLabelType.
}, true);
logger.LogInformation($"Silk({silk.Id}|{silk.Code})状态更改为【已称重待装箱】,同时向打印机发送打印标签指令");
} }
autolabel.Sort += 1;
logger.LogInformation(timestr + autolabel.Sort.ToString().PadLeft(4, '0'));
await autoRepository.UpdateAsync(autolabel);
var silk = new Silk()
{
Status = (int)SilkStatus.,
Status_Details = "已称重",
Net_Weight = (double)weight,
Code = timestr + autolabel.Sort.ToString().PadLeft(4, '0'),
Createtime = DateTime.Now,
IsDelete = 0,
Date = DateTime.Now,
Name = produce.Type,
Length = produce.Length,
Lot_No = produce.Lot_No,
Type = produce.Spec
};
var data = await silkRepository.InsertAsync(silk, true);
//打印丝锭小标签
BarTenderHelper.SilkPrint(silk);
logger.LogInformation($"Silk({data.Id}|{silk.Code})状态更改为【已称重】,同时向打印机发送打印标签指令");
} }
/// <summary> /// <summary>
@ -121,25 +181,55 @@ namespace Syc.Basic.Web.WMS.DeviceEventHandle
public async Task Box(decimal weight) public async Task Box(decimal weight)
{ {
/* PLC未给顶升到位信号则忽略此次事件处理 */ /* PLC未给顶升到位信号则忽略此次事件处理 */
if (!await plcService.IsTop()) return;
if (!await plcService.IsTop())
{
var a = await plcService.IsTop();
logger.LogInformation($"上顶的状态{a}");
return;
}
if (await silkRepository.AnyAsync(e => e.Status == 1 && e.IsDelete == 0)) if (await silkRepository.AnyAsync(e => e.Status == 1 && e.IsDelete == 0))
{ {
var produce = await produceRepository.FirstOrDefaultAsync(e => e.IfUse == 1 && e.IsDelete == 0);
var query = await silkRepository.GetQueryableAsync(); var query = await silkRepository.GetQueryableAsync();
query =query.Where(x => x.Status == 1 && x.IsDelete == 0); query = query.Where(x => x.Status == 1 && x.IsDelete == 0 && x.Type == produce.Spec && x.Name == produce.Type && x.Length == produce.Length && x.Lot_No == produce.Lot_No);
var count = query.Count(); var count = query.Count();
var produce = await produceRepository.FirstOrDefaultAsync(e => e.IfUse == 1);
if (produce is null) if (produce is null)
throw Oops.Oh("无生产信息,请先设置生产信息再扫码"); throw Oops.Oh("无生产信息,请先设置生产信息再称重");
if (produce.Qty.Value > count) if (produce.Qty.Value > count)
{ {
throw Oops.Oh("数量未满箱,无法打印标签"); throw Oops.Oh($"{produce.Type}数量未满箱,无法打印标签");
} }
logger.LogInformation($"当前生产信息:{produce.Name}|{produce.Spec}|{produce.Lot_No}|{produce.BoxSpec}|{produce.Qty}"); logger.LogInformation($"当前生产信息:{produce.Name}|{produce.Spec}|{produce.Lot_No}|{produce.BoxSpec}|{produce.Qty}");
//var netWeight = query.FirstOrDefault(e => e.Code == QueueManage.BoxQueue.FirstOrDefault()).Net_Weight * produce.Qty.Value; //var netWeight = query.FirstOrDefault(e => e.Code == QueueManage.BoxQueue.FirstOrDefault()).Net_Weight * produce.Qty.Value;
var takeQuery = query.Take(produce.Qty.Value); var takeQuery = query.Take(produce.Qty.Value);
var netWeight = takeQuery.Sum(e => e.Net_Weight); var netWeight = takeQuery.Sum(e => e.Net_Weight);
var date = DateOnly.Parse(DateTime.Now.ToString("yyyy-MM-dd"));
var autolabel = await autoRepository.FirstOrDefaultAsync(x => x.Date == date && x.Type == (int)AutoLabelType.);
var timestr = DateTime.Now.ToString("yyyyMMddHHmmss");
if (autolabel == null)
{
autolabel = await autoRepository.InsertAsync(new AutoLabel()
{
Date = date,
Sort = 0,
Mark = timestr,
Type = (int)AutoLabelType.
}, true);
}
autolabel.Sort += 1;
logger.LogInformation("成箱流水号:" + timestr + autolabel.Sort.ToString().PadLeft(4, '0'));
await autoRepository.UpdateAsync(autolabel);
var box = new Box() var box = new Box()
{ {
Dom_Time = DateTime.Now, Dom_Time = DateTime.Now,
@ -148,34 +238,21 @@ namespace Syc.Basic.Web.WMS.DeviceEventHandle
Qty = produce.Qty, Qty = produce.Qty,
Length = produce.Length, Length = produce.Length,
Lot_No = produce.Lot_No, Lot_No = produce.Lot_No,
Code = Guid.NewGuid().ToString().Substring(9, 18), //Code = Guid.NewGuid().ToString().Substring(9, 18),
Code = timestr + autolabel.Sort.ToString().PadLeft(4, '0'),
Net_Weight = netWeight, Net_Weight = netWeight,
Spec = produce.BoxSpec, Spec = produce.Spec,
Gross_Weight = (double)weight, Gross_Weight = (double)weight,
IsUse = true, IsUse = true,
IsDelete = 0 IsDelete = 0,
DataType = (int)BoxDataType.,
Create_Time = DateTime.Now,
Mark = "已称重装箱打印标签,箱子内装单品数量" + produce.Qty
}; };
string content = "#!A1" +
"\r\n#N13" + //打印成箱大标签
"\r\n#PC1017/0" + BarTenderHelper.BoxPrint(box);
"\r\n#IMR104/130" + logger.LogInformation($"打印条码{box.Code},成箱码垛标签打印成功");
//"\r\n#HV50" +
"\r\n#PR6//" +
"\r\n#PO0" +
"\r\n#ERNC/1//0.00" +
"\r\n#R0/0" +
"\r\n#T7.28 #J11.17 #FD/1/L #SS100/BVUN/51X68/0 #VW/L/\"YuLinHengShenXinCaiLiaoYouXianGongSi\"#G" +
"\r\n#T13.37 #J40.30 #FD/1/L #SS100/BVUN/46X62/0 #VW/L/\"Yulin Hengshen COLtd\"#G" +
"\r\n#T52.15 #J9.14 #FD/1/L #SS100/BVUN/47X63/0 #VW/L/\"TYPE " + box.Type + "\"#G" +
"\r\n#T67.39 #J9.14 #FD/1/L #SS100/BVUN/47X63/0 #VW/L/\"QTY/PCS " + box.Qty + "\"#G" +
"\r\n#T82.63 #J9.14 #FD/1/L #SS100/BVUN/47X63/0 #VW/L/\"LOT NO. " + box.Lot_No + "\"#G" +
"\r\n#T98.97 #J9.14 #FD/1/L #SS100/BVUN/47X63/0 #VW/L/\"DOM. " + box.Dom_Time.ToString() + "\"#G" +
"\r\n#T52.15 #J69.25 #FD/1/L #SS100/BVUN/47X63/0 #VW/L/\"SPEC " + box.Spec + "\"#G" +
"\r\n#T67.39 #J69.25 #FD/1/L #SS100/BVUN/47X63/0 #VW/L/\"CTY./NO. " + box.Net_Weight + "\"#G" +
"\r\n#T81.19 #J69.25 #FD/1/L #SS100/BVUN/47X63/0 #VW/L/\"LENGTH " + box.Length + "\"#G" +
"\r\n#T98.21 #J69.25 #FD/1/L #SS100/BVUN/47X63/0 #VW/L/\"EXP. " + box.Exp_Time.ToString() + "\"#G" +
"\r\n#T41.06 #J6.68 #FD/1/L #SB13/ONKP2.0/20.82/5 #VW/L/\"" + box.Code + "\"#G" +
"\r\n#Q1#G\r\n#!P1\r\n";
var entity = await boxRepository.InsertAsync(box, true); var entity = await boxRepository.InsertAsync(box, true);
var silks = takeQuery.ToList(); var silks = takeQuery.ToList();
@ -186,14 +263,17 @@ namespace Syc.Basic.Web.WMS.DeviceEventHandle
{ {
logger.LogInformation($"{e.Code}已装箱"); logger.LogInformation($"{e.Code}已装箱");
e.BoxId = entity.Id; e.BoxId = entity.Id;
e.Status = 2; e.Status = (int)SilkStatus.;
e.Status_Details = "已装箱"; e.Status_Details = "已装箱";
}); });
await silkRepository.UpdateManyAsync(silks); await silkRepository.UpdateManyAsync(silks);
await printerService.PrintAsync(2, content);
await plcService.ClearTop(); await plcService.ClearTop();
await plcService.ClearData();
await plcService.BoxTagPrintDoneAsync((short)1); await plcService.BoxTagPrintDoneAsync((short)1);
logger.LogInformation($"称重完成,已将数据({box.Id}|{box.Code})插入到box表同时向打印机发送出标指令"); await plcService.PrintEnd();
logger.LogInformation($"称重完成,已将数据({entity.Id}|{box.Code})插入到box表同时向打印机发送出标指令");
} }
} }
} }

View File

@ -46,28 +46,28 @@ namespace Syc.Basic.Web.WMS
/// <returns></returns> /// <returns></returns>
public async Task ExecAsync(string code, int id) public async Task ExecAsync(string code, int id)
{ {
using (var uow = uowm.Reserve(UnitOfWork.UnitOfWorkReservationName)) //using (var uow = uowm.Reserve(UnitOfWork.UnitOfWorkReservationName))
{ //{
try // try
{ // {
if (id == 1) // if (id == 1)
await Yarn(code); // await Yarn(code);
else // else
await Box(code); // await Box(code);
await uow.CompleteAsync(); // await uow.CompleteAsync();
} // }
catch (Exception ex) when (ex is FriendlyException friendlyException) // catch (Exception ex) when (ex is FriendlyException friendlyException)
{ // {
logger.LogError(ex.GetBaseException(),"扫码报错"); // logger.LogError(ex.GetBaseException(),"扫码报错");
await WebSocketManager.SocketManager.BroadcastAsync(friendlyException.Message); // await WebSocketManager.SocketManager.BroadcastAsync(friendlyException.Message);
await uow.RollbackAsync(); // await uow.RollbackAsync();
} // }
catch (Exception ex) // catch (Exception ex)
{ // {
logger.LogError(ex.GetBaseException(), "扫码报错"); // logger.LogError(ex.GetBaseException(), "扫码报错");
await uow.RollbackAsync(); // await uow.RollbackAsync();
} // }
} //}
} }
/// <summary> /// <summary>

View File

@ -0,0 +1,13 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Syc.Basic.Web.WMS.Dto
{
public class FullPalletInput
{
public int Num { get; set; }
}
}

View File

@ -12,11 +12,12 @@ namespace Syc.Basic.Web.WMS.Dto
public int Id { get; set; } public int Id { get; set; }
public string Type { get; set; } public string Type { get; set; }
public string Spec { get; set; } public string Spec { get; set; }
public double Length { get; set; } public string Length { get; set; }
public string Lot_No { get; set; } public string Lot_No { get; set; }
public string Name { get; set; } //public string Name { get; set; }
public int? Qty { get; set; } public int? Qty { get; set; }
public string BoxSpec { get; set; } //public string BoxSpec { get; set; }
public string Date { get; set; }
public string Exp_Time { get; set; } public string Exp_Time { get; set; }
public int IfUse { get; set; } public int IfUse { get; set; }
public int IsDelete { get; set; } public int IsDelete { get; set; }

View File

@ -18,7 +18,7 @@ namespace Syc.Basic.Web.WMS.Dto
//净重 //净重
public double? Net_Weight { get; set; } public double? Net_Weight { get; set; }
//长度 //长度
public double? Length { get; set; } public string? Length { get; set; }
//包装时间 //包装时间
public DateTime? Date { get; set; } public DateTime? Date { get; set; }
//生产批号 //生产批号

View File

@ -0,0 +1,15 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Syc.Basic.Web.WMS.Dto
{
public class UserInput
{
public int Id { get; set; }
public string JiuPassword { get; set; }
public string NewPassword { get; set; }
}
}

View File

@ -0,0 +1,34 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Syc.Basic.Web.WMS
{
public enum BoxDataType
{
,
,
,
,
,
}
public enum SilkStatus
{
,
,
,
,
,
}
public enum AutoLabelType
{
,
,
}
}

View File

@ -25,7 +25,6 @@ using Volo.Abp.Domain.Repositories;
namespace Syc.Basic.Web.WMS.Service namespace Syc.Basic.Web.WMS.Service
{ {
//[ApiExplorerSettings(GroupName = "鉴权/授权服务"), Authorize] //[ApiExplorerSettings(GroupName = "鉴权/授权服务"), Authorize]
[AllowAnonymous]
public class AuthService : ApiService, IAuthService public class AuthService : ApiService, IAuthService
{ {
private readonly IJwtTokenService jwtTokenService; private readonly IJwtTokenService jwtTokenService;
@ -54,7 +53,7 @@ namespace Syc.Basic.Web.WMS.Service
/// </summary> /// </summary>
/// <param name="input"></param> /// <param name="input"></param>
/// <returns></returns> /// <returns></returns>
[HttpPost] [HttpPost,AllowAnonymous]
public async Task<AuthResultDto> LoginAsync(LoginInput input) public async Task<AuthResultDto> LoginAsync(LoginInput input)
{ {
var userDO = await userDomainService.GetUserByAccountAsync(input.UserName); var userDO = await userDomainService.GetUserByAccountAsync(input.UserName);

View File

@ -0,0 +1,90 @@
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using Seyounth.Auto.Hs.Runtime.Plc;
using Seyounth.Auto.Hs.Runtime.Printer;
using Syc.Basic.Web.WMS.Dto;
using Syc.Basic.Web.WMS.Entitys;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Volo.Abp.Domain.Repositories;
namespace Syc.Basic.Web.WMS.Service
{
[AllowAnonymous]
public class AutoService : ApiService
{
private readonly IPrinterService printerService;
private readonly IRepository<AutoLabel> autoReposutory;
private readonly ILogger<AutoService> logger;
private readonly IPlcService plcService;
public AutoService(IPrinterService PrinterService,IRepository<AutoLabel> AutoReposutory,ILogger<AutoService> logger,IPlcService plcService)
{
printerService = PrinterService;
autoReposutory = AutoReposutory;
this.logger = logger;
this.plcService = plcService;
}
/// <summary>
/// 打印唯一标签
/// </summary>
/// <param name="num"></param>
/// <returns></returns>
[HttpPost]
public async Task AutoLabel(int num)
{
var date = DateOnly.Parse(DateTime.Now.ToString("yyyy-MM-dd"));
var autolabel = await autoReposutory.FirstOrDefaultAsync(x => x.Date == date&&x.Type==(int)AutoLabelType.);
var d = date.ToString("yyMMdd");
if (autolabel == null)
{
autolabel = await autoReposutory.InsertAsync(new AutoLabel()
{
Date = date,
Sort = 1,
Mark = "T" + d,
Type = (int)AutoLabelType.
},true);
}
//for (var i = 1; i <= num; i++)
//{
// autolabel.Sort += 1;
// logger.LogInformation(autolabel.Mark + autolabel.Sort.ToString().PadLeft(4, '0'));
// string content = "^XA" +
// "\r\n^MMP" +
// "\r\n^LL0" +
// "\r\n^JUS" +
// "\r\n#!A1" +
// "\r\n#N13" +
// "\r\n#PC1017/0" +
// "\r\n#IMR44/46" +
// "\r\n#PR6//" +
// "\r\n#PO0" +
// "\r\n#ERNC/1//0.00" +
// "\r\n#R0/0" +
// "\r\n#T11.51 #J29.54 #FD/0/L #SB13/ONKP2.0/8.80/2 #VW/L/\"" + autolabel.Mark + autolabel.Sort.ToString().PadLeft(4, '0') + "\"#G" +
// "\r\n#Q1#G" +
// "\r\n#!P1" +
// "\r\n^XZ";
// await printerService.PrintAsync(1, content);
//}
await autoReposutory.UpdateAsync(autolabel);
}
}
}

View File

@ -29,8 +29,9 @@ namespace Syc.Basic.Web.WMS.Service
private readonly IPlcService plcService; private readonly IPlcService plcService;
private readonly ILogger<BoxService> logger; private readonly ILogger<BoxService> logger;
private readonly IPrinterService printerService; private readonly IPrinterService printerService;
private readonly IRepository<AutoLabel> autoRepository;
public BoxService(IRepository<Box> boxRepository,IRepository<Produce> produceRepository,IRepository<Silk> silkRepository,IPlcService plcService, ILogger<BoxService> logger,IPrinterService printerService) public BoxService(IRepository<Box> boxRepository, IRepository<Produce> produceRepository, IRepository<Silk> silkRepository, IPlcService plcService, ILogger<BoxService> logger, IPrinterService printerService, IRepository<AutoLabel> autoRepository)
{ {
this.boxRepository = boxRepository; this.boxRepository = boxRepository;
this.produceRepository = produceRepository; this.produceRepository = produceRepository;
@ -38,6 +39,7 @@ namespace Syc.Basic.Web.WMS.Service
this.plcService = plcService; this.plcService = plcService;
this.logger = logger; this.logger = logger;
this.printerService = printerService; this.printerService = printerService;
this.autoRepository = autoRepository;
} }
/// <summary> /// <summary>
/// 查询纸箱 /// 查询纸箱
@ -54,7 +56,7 @@ namespace Syc.Basic.Web.WMS.Service
if (input.Spec != null) if (input.Spec != null)
boxlist = boxlist.Where(x => x.Spec.Contains(input.Spec)); boxlist = boxlist.Where(x => x.Spec.Contains(input.Spec));
var result = boxlist.PageResult(input.Page, input.PageSize); var result = boxlist.OrderByDescending(x => x.Id).PageResult(input.Page, input.PageSize);
var data = result.Queryable.Select(e => new BoxDto() var data = result.Queryable.Select(e => new BoxDto()
{ {
Length = e.Length, Length = e.Length,
@ -62,8 +64,11 @@ namespace Syc.Basic.Web.WMS.Service
Qty = e.Qty, Qty = e.Qty,
Id = e.Id, Id = e.Id,
Code = e.Code, Code = e.Code,
Dom_Time = e.Dom_Time, Dom_Time = DateTime.Parse(e.Dom_Time.ToString()).ToString("yyyy-MM-dd HH:mm:ss"),
Exp_Time = e.Exp_Time.ToString(), DataType = e.DataType,
Mark = e.Mark,
Create_Time = e.Create_Time,
Exp_Time = DateTime.Parse(e.Exp_Time.ToString()).ToString("yyyy-MM-dd HH:mm:ss"),
Lot_No = e.Lot_No, Lot_No = e.Lot_No,
Spec = e.Spec, Spec = e.Spec,
Gross_Weight = e.Gross_Weight, Gross_Weight = e.Gross_Weight,
@ -72,7 +77,7 @@ namespace Syc.Basic.Web.WMS.Service
PageOutput<BoxDto> pageOutput = new PageOutput<BoxDto>(); PageOutput<BoxDto> pageOutput = new PageOutput<BoxDto>();
pageOutput.Total = boxlist.Count(); pageOutput.Total = boxlist.Count();
pageOutput.Data = data.OrderByDescending(x=>x.Id); pageOutput.Data = data;
pageOutput.PageIndex = input.Page; pageOutput.PageIndex = input.Page;
pageOutput.PageSize = input.PageSize; pageOutput.PageSize = input.PageSize;
return pageOutput; return pageOutput;
@ -86,18 +91,22 @@ namespace Syc.Basic.Web.WMS.Service
public async Task<List<BoxDto>> GetBoxByNum() public async Task<List<BoxDto>> GetBoxByNum()
{ {
var produce = await produceRepository.FirstOrDefaultAsync(x => x.IfUse == 1); var produce = await produceRepository.FirstOrDefaultAsync(x => x.IfUse == 1);
var silks = await silkRepository.GetListAsync(x=>x.Status==1||x.Status==0); if (produce == null)
throw Oops.Oh("没有生产设置");
//var silks = await silkRepository.GetListAsync(x=>x.Status==1||x.Status==0);
var boxlist = await boxRepository.GetQueryableAsync(); var boxlist = await boxRepository.GetQueryableAsync();
boxlist = boxlist.Where(x => x.IsDelete == 0); boxlist = boxlist.Where(x => x.IsDelete == 0 && x.Spec == produce.Spec && x.Type == produce.Type && x.Lot_No == produce.Lot_No);
var data = boxlist.Select(e => new BoxDto() var data = boxlist.Where(x => x.DataType == 0).Select(e => new BoxDto()
{ {
Net_Weight = e.Net_Weight, Net_Weight = e.Net_Weight,
Id = e.Id, Id = e.Id,
Code = e.Code Code = e.Code,
DataType = e.DataType,
Mark = e.Mark
}).ToList(); }).ToList();
return data.OrderByDescending(x => x.Id).ToList().Take(1).ToList(); return data.OrderByDescending(x => x.Id).Take(15).ToList();
} }
/// <summary> /// <summary>
/// 添加纸箱 /// 添加纸箱
@ -107,53 +116,128 @@ namespace Syc.Basic.Web.WMS.Service
[HttpPost] [HttpPost]
public async Task InsertBox(BoxDto input) public async Task InsertBox(BoxDto input)
{ {
if (await boxRepository.AnyAsync(x => x.Code == input.Code)) var produce = await produceRepository.FirstOrDefaultAsync(x => x.IfUse == 1);
throw Oops.Oh("条码已存在,不允许添加"); var silksQuery = await silkRepository.GetQueryableAsync();
var boxs = await boxRepository.GetListAsync(e => e.IsUse); var silks = silksQuery.Where(x => x.IsDelete == 0 && x.Status == (int)SilkStatus.).OrderBy(x => x.Id).Take((int)produce.Qty).ToList();
if (boxs.Any())
if (produce == null)
throw Oops.Oh("没有生产设置");
if (silks.Count < produce.Qty)
{ {
boxs.ForEach(e => e.IsUse = false); logger.LogWarning($"没有{produce.Qty}条{produce.Type}的单品的信息,只有{silks.Count}条,无法创建码垛信息");
await boxRepository.UpdateManyAsync(boxs); throw Oops.Oh($"没有{produce.Qty}条{produce.Type}的单品的信息,只有{silks.Count}条,无法创建码垛信息");
//return;
} }
var netWeight = silks.Sum(x => x.Net_Weight);
var weight = silks.Average(x => x.Net_Weight);
var date = DateOnly.Parse(DateTime.Now.ToString("yyyy-MM-dd"));
var autolabel = await autoRepository.FirstOrDefaultAsync(x => x.Date == date && x.Type == (int)AutoLabelType.);
var timestr = DateTime.Now.ToString("yyyyMMddHHmmss");
if (autolabel == null)
{
autolabel = await autoRepository.InsertAsync(new AutoLabel()
{
Date = date,
Sort = 0,
Mark = timestr,
Type = (int)AutoLabelType.
}, true);
}
autolabel.Sort += 1;
logger.LogInformation("手动添加成箱信息" + timestr + autolabel.Sort.ToString().PadLeft(4, '0'));
await autoRepository.UpdateAsync(autolabel);
var box = new Box() var box = new Box()
{ {
Dom_Time = DateTime.Now, Dom_Time = DateTime.Now,
Exp_Time = string.IsNullOrWhiteSpace(input.Exp_Time) ? null : Convert.ToDateTime(input.Exp_Time), Exp_Time = produce.Exp_Time,
Qty = input.Qty, Qty = produce.Qty,
Length = input.Length, Length = produce.Length,
Lot_No = input.Lot_No, Lot_No = produce.Lot_No,
Code = input.Code, Code = timestr + autolabel.Sort.ToString().PadLeft(4, '0'),
Net_Weight = input.Net_Weight, Net_Weight = netWeight,
Spec = input.Spec, Spec = produce.Spec,
Create_Time = DateTime.Now,
Type = produce.Type,
IsUse = true, IsUse = true,
IsDelete = 0 IsDelete = 0,
DataType = (int)BoxDataType.,
Mark = "已经手动添加装箱信息"
}; };
var entity = await boxRepository.InsertAsync(box, true); var entity = await boxRepository.InsertAsync(box, true);
string content = "#!A1" +
"\r\n#N13" +
"\r\n#PC1017/0" +
"\r\n#IMR104/130" +
//"\r\n#HV50" +
"\r\n#PR6//" +
"\r\n#PO0" +
"\r\n#ERNC/1//0.00" +
"\r\n#R0/0" +
"\r\n#T7.28 #J11.17 #FD/1/L #SS100/BVUN/51X68/0 #VW/L/\"YuLinHengShenXinCaiLiaoYouXianGongSi\"#G" +
"\r\n#T13.37 #J40.30 #FD/1/L #SS100/BVUN/46X62/0 #VW/L/\"Yulin Hengshen COLtd\"#G" +
"\r\n#T52.15 #J9.14 #FD/1/L #SS100/BVUN/47X63/0 #VW/L/\"TYPE " + box.Type + "\"#G" +
"\r\n#T67.39 #J9.14 #FD/1/L #SS100/BVUN/47X63/0 #VW/L/\"QTY/PCS " + box.Qty + "\"#G" +
"\r\n#T82.63 #J9.14 #FD/1/L #SS100/BVUN/47X63/0 #VW/L/\"LOT NO. " + box.Lot_No + "\"#G" +
"\r\n#T98.97 #J9.14 #FD/1/L #SS100/BVUN/47X63/0 #VW/L/\"DOM. " + box.Dom_Time.ToString() + "\"#G" +
"\r\n#T52.15 #J69.25 #FD/1/L #SS100/BVUN/47X63/0 #VW/L/\"SPEC " + box.Spec + "\"#G" +
"\r\n#T67.39 #J69.25 #FD/1/L #SS100/BVUN/47X63/0 #VW/L/\"CTY./NO. " + box.Net_Weight + "\"#G" +
"\r\n#T81.19 #J69.25 #FD/1/L #SS100/BVUN/47X63/0 #VW/L/\"LENGTH " + box.Length + "\"#G" +
"\r\n#T98.21 #J69.25 #FD/1/L #SS100/BVUN/47X63/0 #VW/L/\"EXP. " + box.Exp_Time.ToString() + "\"#G" +
"\r\n#T41.06 #J6.68 #FD/1/L #SB13/ONKP2.0/20.82/5 #VW/L/\"" + box.Code + "\"#G" +
"\r\n#Q1#G\r\n#!P1\r\n";
await printerService.PrintAsync(2, content);
logger.LogInformation($"已手动添加装箱信息,装箱编号:{box.Code},包含单品数量:{silks.Count}");
List<Silk> list = new List<Silk>();
foreach (var silk in silks)
{
silk.Status = (int)SilkStatus.;
silk.BoxId = entity.Id;
silk.Status_Details = "已手动装箱";
list.Add(silk);
}
await silkRepository.UpdateManyAsync(list);
}
/// <summary>
/// 添加纸箱
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost]
public async Task AddInsertBox(BoxDto input)
{
var date = DateOnly.Parse(DateTime.Now.ToString("yyyy-MM-dd"));
var autolabel = await autoRepository.FirstOrDefaultAsync(x => x.Date == date && x.Type == (int)AutoLabelType.);
var timestr = DateTime.Now.ToString("yyyyMMddHHmmss");
if (autolabel == null)
{
autolabel = await autoRepository.InsertAsync(new AutoLabel()
{
Date = date,
Sort = 0,
Mark = timestr,
Type = (int)AutoLabelType.
}, true);
}
autolabel.Sort += 1;
logger.LogInformation("手动添加成箱信息" + timestr + autolabel.Sort.ToString().PadLeft(4, '0'));
await autoRepository.UpdateAsync(autolabel);
var box = new Box()
{
Dom_Time = DateTime.Now,
Exp_Time = DateTime.Parse(input.Exp_Time),
Qty = input.Qty,
Length = input.Length,
Lot_No = input.Lot_No,
Code = timestr + autolabel.Sort.ToString().PadLeft(4, '0'),
Net_Weight = input.Net_Weight,
Spec = input.Spec,
Create_Time = DateTime.Now,
Type = input.Type,
IsUse = true,
IsDelete = 0,
DataType = (int)BoxDataType.,
Mark = "手动添加的成箱信息数据库未绑定单品信息"
};
var entity = await boxRepository.InsertAsync(box, true);
logger.LogInformation($"手动添加的成箱信息未绑定单品信息:{box.Code},未含单品数量");
BarTenderHelper.BoxPrint(box);
logger.LogInformation($"打印条码{box.Code},成箱标签打印成功");
} }
/// <summary> /// <summary>
@ -166,28 +250,10 @@ namespace Syc.Basic.Web.WMS.Service
{ {
var box = await boxRepository.FirstOrDefaultAsync(x => x.Id == input.id); var box = await boxRepository.FirstOrDefaultAsync(x => x.Id == input.id);
string content = "#!A1" + BarTenderHelper.BoxPrint(box);
"\r\n#N13" + logger.LogInformation($"打印条码{box.Code},成箱标签打印成功");
"\r\n#PC1017/0" + //throw Oops.Oh("成箱标签打印成功");
"\r\n#IMR104/130" +
//"\r\n#HV50" +
"\r\n#PR6//" +
"\r\n#PO0" +
"\r\n#ERNC/1//0.00" +
"\r\n#R0/0" +
"\r\n#T7.28 #J11.17 #FD/1/L #SS100/BVUN/51X68/0 #VW/L/\"YuLinHengShenXinCaiLiaoYouXianGongSi\"#G" +
"\r\n#T13.37 #J40.30 #FD/1/L #SS100/BVUN/46X62/0 #VW/L/\"Yulin Hengshen COLtd\"#G" +
"\r\n#T52.15 #J9.14 #FD/1/L #SS100/BVUN/47X63/0 #VW/L/\"TYPE " + box.Type + "\"#G" +
"\r\n#T67.39 #J9.14 #FD/1/L #SS100/BVUN/47X63/0 #VW/L/\"QTY/PCS " + box.Qty + "\"#G" +
"\r\n#T82.63 #J9.14 #FD/1/L #SS100/BVUN/47X63/0 #VW/L/\"LOT NO. " + box.Lot_No + "\"#G" +
"\r\n#T98.97 #J9.14 #FD/1/L #SS100/BVUN/47X63/0 #VW/L/\"DOM. " + box.Dom_Time.ToString() + "\"#G" +
"\r\n#T52.15 #J69.25 #FD/1/L #SS100/BVUN/47X63/0 #VW/L/\"SPEC " + box.Spec + "\"#G" +
"\r\n#T67.39 #J69.25 #FD/1/L #SS100/BVUN/47X63/0 #VW/L/\"CTY./NO. " + box.Net_Weight + "\"#G" +
"\r\n#T81.19 #J69.25 #FD/1/L #SS100/BVUN/47X63/0 #VW/L/\"LENGTH " + box.Length + "\"#G" +
"\r\n#T98.21 #J69.25 #FD/1/L #SS100/BVUN/47X63/0 #VW/L/\"EXP. " + box.Exp_Time.ToString() + "\"#G" +
"\r\n#T41.06 #J6.68 #FD/1/L #SB13/ONKP2.0/20.82/5 #VW/L/\"" + box.Code + "\"#G" +
"\r\n#Q1#G\r\n#!P1\r\n";
await printerService.PrintAsync(2, content);
} }
/// <summary> /// <summary>
@ -202,10 +268,11 @@ namespace Syc.Basic.Web.WMS.Service
box.Spec = input.Spec; box.Spec = input.Spec;
box.Length = input.Length; box.Length = input.Length;
box.Code = input.Code; //box.Code = input.Code;
box.Lot_No = input.Lot_No; box.Lot_No = input.Lot_No;
box.Net_Weight = input.Net_Weight; box.Net_Weight = input.Net_Weight;
box.Dom_Time = DateTime.Now; box.Dom_Time = DateTime.Now;
box.Type = input.Type;
box.Qty = input.Qty; box.Qty = input.Qty;
box.Exp_Time = string.IsNullOrWhiteSpace(input.Exp_Time) ? null : Convert.ToDateTime(input.Exp_Time); box.Exp_Time = string.IsNullOrWhiteSpace(input.Exp_Time) ? null : Convert.ToDateTime(input.Exp_Time);
await boxRepository.UpdateAsync(box); await boxRepository.UpdateAsync(box);
@ -252,6 +319,16 @@ namespace Syc.Basic.Web.WMS.Service
await plcService.SetTemperatureAsync(input.Id); await plcService.SetTemperatureAsync(input.Id);
} }
/// <summary>
/// 复位
/// </summary>
/// <returns></returns>
[HttpGet]
public async Task ClearData()
{
await plcService.ClearData();
}
/// <summary> /// <summary>
/// 设置热缩机温度 /// 设置热缩机温度
/// </summary> /// </summary>
@ -260,5 +337,178 @@ namespace Syc.Basic.Web.WMS.Service
{ {
return await plcService.GetTemperatureAsync(); return await plcService.GetTemperatureAsync();
} }
/// <summary>
/// 整箱码垛打印标签
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost]
public async Task BoxsPalletPrint(FullPalletInput input)
{
var produce = await produceRepository.FirstOrDefaultAsync(x => x.IfUse == 1);
var boxQuery = await boxRepository.GetQueryableAsync();
var boxs = boxQuery.Where(x => x.DataType == 0 && x.IsDelete == 0).OrderBy(x => x.Id).Take(input.Num).ToList();
if (produce == null)
throw Oops.Oh("没有生产设置");
if (boxs.Count < input.Num)
{
logger.LogWarning($"没有{input.Num}条{produce.Type}的整箱的信息,只有{boxs.Count}条,无法创建码垛信息");
throw Oops.Oh($"没有{input.Num}条{produce.Type}的整箱的信息,只有{boxs.Count}条,无法创建码垛信息");
//return;
}
#region Code
var netWeight = boxs.Sum(x => x.Net_Weight);
var date = DateOnly.Parse(DateTime.Now.ToString("yyyy-MM-dd"));
var autolabel = await autoRepository.FirstOrDefaultAsync(x => x.Date == date && x.Type == (int)AutoLabelType.);
var timestr = DateTime.Now.ToString("yyyyMMddHHmmss");
if (autolabel == null)
{
autolabel = await autoRepository.InsertAsync(new AutoLabel()
{
Date = date,
Sort = 0,
Mark = timestr,
Type = (int)AutoLabelType.
}, true);
}
autolabel.Sort += 1;
logger.LogInformation("整箱码垛生成Code" + timestr + autolabel.Sort.ToString().PadLeft(4, '0'));
await autoRepository.UpdateAsync(autolabel);
#endregion
var box = new Box()
{
Dom_Time = DateTime.Now,
Type = produce.Type,
Exp_Time = produce.Exp_Time,
Qty = input.Num,
Length = produce.Length,
Lot_No = produce.Lot_No,
//Code = Guid.NewGuid().ToString().Substring(9, 18),
Code = timestr + autolabel.Sort.ToString().PadLeft(4, '0'),
Net_Weight = netWeight,
Spec = produce.Spec,
IsUse = true,
IsDelete = 0,
DataType = (int)BoxDataType.,
Create_Time = DateTime.Now,
Mark = "整箱手动码垛,码垛整箱数量" + input.Num
};
var Box = await boxRepository.InsertAsync(box, true);
logger.LogInformation($"已添加码垛信息,码垛编号:{box.Code},包含整箱数量:{boxs.Count}");
List<Box> list = new List<Box>();
foreach (var item in boxs)
{
item.DataType = (int)BoxDataType.;
item.Mark = "已码垛到编号" + Box.Code + "中,码垛数据编号ID" + Box.Id;
list.Add(item);
}
await boxRepository.UpdateManyAsync(list);
#region
//打印标签
BarTenderHelper.BoxPrint(box);
logger.LogInformation($"打印条码{box.Code},成箱码垛标签打印成功");
//throw Oops.Oh("成箱码垛标签打印成功");
#endregion
}
/// <summary>
/// 单品码垛打印标签
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost]
public async Task SilksPalletPrint(FullPalletInput input)
{
var produce = await produceRepository.FirstOrDefaultAsync(x => x.IfUse == 1);
var silksQuery = await silkRepository.GetQueryableAsync();
var silks = silksQuery.Where(x => x.IsDelete == 0 && x.Status == (int)SilkStatus.).OrderBy(x => x.Id).Take(input.Num).ToList();
if (produce == null)
throw Oops.Oh("没有生产设置");
if (silks.Count < input.Num)
{
logger.LogWarning($"没有{input.Num}条{produce.Type}的单品的信息,只有{silks.Count}条,无法创建码垛信息");
throw Oops.Oh($"没有{input.Num}条{produce.Type}的单品的信息,只有{silks.Count}条,无法创建码垛信息");
//return;
}
var netWeight = silks.Sum(x => x.Net_Weight);
var weight = silks.Average(x => x.Net_Weight);
#region
var date = DateOnly.Parse(DateTime.Now.ToString("yyyy-MM-dd"));
var autolabel = await autoRepository.FirstOrDefaultAsync(x => x.Date == date && x.Type == (int)AutoLabelType.);
var timestr = DateTime.Now.ToString("yyyyMMddHHmmss");
if (autolabel == null)
{
autolabel = await autoRepository.InsertAsync(new AutoLabel()
{
Date = date,
Sort = 0,
Mark = timestr,
Type = (int)AutoLabelType.
}, true);
}
autolabel.Sort += 1;
logger.LogInformation("丝锭码垛生成Code" + timestr + autolabel.Sort.ToString().PadLeft(4, '0'));
await autoRepository.UpdateAsync(autolabel);
#endregion
var box = new Box()
{
Dom_Time = DateTime.Now,
Type = produce.Type,
Exp_Time = produce.Exp_Time,
Qty = input.Num,
Length = produce.Length,
Lot_No = produce.Lot_No,
//Code = Guid.NewGuid().ToString().Substring(9, 18),
Code = timestr + autolabel.Sort.ToString().PadLeft(4, '0'),
Net_Weight = netWeight,
Spec = produce.Spec,
IsUse = true,
IsDelete = 0,
DataType = (int)BoxDataType.,
Create_Time = DateTime.Now,
Mark = "单品手动码垛,码垛单品数量" + input.Num
};
var Box = await boxRepository.InsertAsync(box, true);
logger.LogInformation($"已添加码垛信息,码垛编号:{box.Code},包含单品数量:{silks.Count}");
List<Silk> list = new List<Silk>();
foreach (var silk in silks)
{
silk.Status = 3;
silk.BoxId = Box.Id;
silk.Status_Details = "已码垛";
list.Add(silk);
}
await silkRepository.UpdateManyAsync(list);
#region
//打印标签
BarTenderHelper.BoxPrint(box);
logger.LogInformation($"打印条码{box.Code},丝锭码垛标签打印成功");
//throw Oops.Oh("丝锭码垛标签打印成功");
#endregion
}
} }
} }

View File

@ -47,10 +47,11 @@ namespace Syc.Basic.Web.WMS.Service
Id = x.Id, Id = x.Id,
Length = x.Length, Length = x.Length,
Type = x.Type, Type = x.Type,
BoxSpec = x.BoxSpec, //BoxSpec = x.BoxSpec,
Date = x.Date.HasValue ? x.Exp_Time.Value.ToString("yyyy-MM-dd HH:m") : "-",
Exp_Time = x.Exp_Time.HasValue ? x.Exp_Time.Value.ToString("yyyy-MM-dd HH:m") : "-", Exp_Time = x.Exp_Time.HasValue ? x.Exp_Time.Value.ToString("yyyy-MM-dd HH:m") : "-",
IfUse = x.IfUse, IfUse = x.IfUse,
Name = x.Name, //Name = x.Name,
Qty = x.Qty Qty = x.Qty
}); });
@ -100,10 +101,11 @@ namespace Syc.Basic.Web.WMS.Service
Spec = input.Spec, Spec = input.Spec,
Type = input.Type, Type = input.Type,
Qty = input.Qty, Qty = input.Qty,
BoxSpec = input.BoxSpec, BoxSpec = input.Spec,
Date= string.IsNullOrWhiteSpace(input.Date) ? null : Convert.ToDateTime(input.Exp_Time),
Exp_Time = string.IsNullOrWhiteSpace(input.Exp_Time) ? null : Convert.ToDateTime(input.Exp_Time), Exp_Time = string.IsNullOrWhiteSpace(input.Exp_Time) ? null : Convert.ToDateTime(input.Exp_Time),
IfUse = 1, IfUse = 1,
Name = input.Name, Name = input.Type,
IsDelete = 0 IsDelete = 0
}; };
@ -124,8 +126,9 @@ namespace Syc.Basic.Web.WMS.Service
produce.Length = input.Length; produce.Length = input.Length;
produce.Lot_No = input.Lot_No; produce.Lot_No = input.Lot_No;
produce.Qty = input.Qty; produce.Qty = input.Qty;
produce.Name = input.Name; produce.Name = input.Type;
produce.BoxSpec = input.BoxSpec; produce.BoxSpec = input.Spec;
produce.Date = string.IsNullOrWhiteSpace(input.Date) ? null : Convert.ToDateTime(input.Date);
produce.Exp_Time = string.IsNullOrWhiteSpace(input.Exp_Time) ? null : Convert.ToDateTime(input.Exp_Time); produce.Exp_Time = string.IsNullOrWhiteSpace(input.Exp_Time) ? null : Convert.ToDateTime(input.Exp_Time);
await produceRepository.UpdateAsync(produce); await produceRepository.UpdateAsync(produce);
} }

View File

@ -22,13 +22,15 @@ namespace Syc.Basic.Web.WMS.Service
private readonly IRepository<Produce> produceRepository; private readonly IRepository<Produce> produceRepository;
private readonly IRepository<Silk> silkRepository; private readonly IRepository<Silk> silkRepository;
private readonly ILogger<SilkService> logger; private readonly ILogger<SilkService> logger;
private readonly IRepository<AutoLabel> autoRepository;
public SilkService(IPrinterService printerService,IRepository<Produce> produceRepository ,IRepository<Silk> silkRepository,ILogger<SilkService> logger) public SilkService(IPrinterService printerService, IRepository<Produce> produceRepository, IRepository<Silk> silkRepository, ILogger<SilkService> logger, IRepository<AutoLabel> autoRepository)
{ {
this.printerService = printerService; this.printerService = printerService;
this.produceRepository = produceRepository; this.produceRepository = produceRepository;
this.silkRepository = silkRepository; this.silkRepository = silkRepository;
this.logger = logger; this.logger = logger;
this.autoRepository = autoRepository;
} }
/// <summary> /// <summary>
/// 根据数量查询丝锭 /// 根据数量查询丝锭
@ -38,9 +40,11 @@ namespace Syc.Basic.Web.WMS.Service
[HttpGet] [HttpGet]
public async Task<List<SilkDto>> GetSilkByNum() public async Task<List<SilkDto>> GetSilkByNum()
{ {
var produce = await produceRepository.FirstOrDefaultAsync(x => x.IfUse == 1); var produce = await produceRepository.FirstOrDefaultAsync(x => x.IfUse == 1 && x.IsDelete == 0);
if (produce == null)
throw Oops.Oh("没有生产设置");
var list = await silkRepository.GetQueryableAsync(); var list = await silkRepository.GetQueryableAsync();
list = list.Where(x => x.Status==1 && x.IsDelete == 0 || x.Status == 0 && x.IsDelete == 0); list = list.Where(x => x.Status == 1 && x.IsDelete == 0 && x.Type == produce.Spec && x.Lot_No == produce.Lot_No && x.Name == produce.Type || x.Status == 0 && x.IsDelete == 0 && x.Type == produce.Spec && x.Lot_No == produce.Lot_No && x.Name == produce.Type);
var data = list.Select(e => new SilkDto() var data = list.Select(e => new SilkDto()
{ {
@ -51,7 +55,7 @@ namespace Syc.Basic.Web.WMS.Service
Status_Details = e.Status_Details Status_Details = e.Status_Details
}).ToList(); }).ToList();
return data.OrderByDescending(x => x.Id).ToList().ToList(); return data.OrderByDescending(x => x.Id).ToList();
} }
/// <summary> /// <summary>
/// 查询丝锭 /// 查询丝锭
@ -68,7 +72,7 @@ namespace Syc.Basic.Web.WMS.Service
if (input.Lot_No != null) if (input.Lot_No != null)
silklist = silklist.Where(x => x.Type.Contains(input.Lot_No)); silklist = silklist.Where(x => x.Type.Contains(input.Lot_No));
var result = silklist.PageResult(input.Page, input.PageSize); var result = silklist.OrderByDescending(x => x.Id).PageResult(input.Page, input.PageSize);
var data = result.Queryable.Select(x => new SilkDto() var data = result.Queryable.Select(x => new SilkDto()
{ {
Name = x.Name, Name = x.Name,
@ -86,7 +90,7 @@ namespace Syc.Basic.Web.WMS.Service
PageOutput<SilkDto> pageOutput = new PageOutput<SilkDto>(); PageOutput<SilkDto> pageOutput = new PageOutput<SilkDto>();
pageOutput.Total = silklist.Count(); pageOutput.Total = silklist.Count();
pageOutput.Data = data.OrderByDescending(x => x.Id); pageOutput.Data = data;
pageOutput.PageIndex = input.Page; pageOutput.PageIndex = input.Page;
pageOutput.PageSize = input.PageSize; pageOutput.PageSize = input.PageSize;
return pageOutput; return pageOutput;
@ -99,44 +103,50 @@ namespace Syc.Basic.Web.WMS.Service
[HttpPost] [HttpPost]
public async Task InsertSilk(SilkDto input) public async Task InsertSilk(SilkDto input)
{ {
if (await silkRepository.AnyAsync(x => x.Code == input.Code&&x.IsDelete==0)) var produce = await produceRepository.FirstOrDefaultAsync(x => x.IfUse == 1);
throw Oops.Oh("条码已存在,不允许添加");
if (produce == null)
throw Oops.Oh("没有生产设置");
var date = DateOnly.Parse(DateTime.Now.ToString("yyyy-MM-dd"));
var autolabel = await autoRepository.FirstOrDefaultAsync(x => x.Date == date && x.Type == (int)AutoLabelType.);
var timestr = DateTime.Now.ToString("yyyyMMddHHmmss");
if (autolabel == null)
{
autolabel = await autoRepository.InsertAsync(new AutoLabel()
{
Date = date,
Sort = 0,
Mark = timestr,
Type = (int)AutoLabelType.
}, true);
}
autolabel.Sort += 1;
logger.LogInformation("添加丝锭单品流水号" + timestr + autolabel.Sort.ToString().PadLeft(4, '0'));
await autoRepository.UpdateAsync(autolabel);
var silk = new Silk() var silk = new Silk()
{ {
Date = DateTime.Now, Date = DateTime.Now,
Length = input.Length, Length = produce.Length,
Lot_No = input.Lot_No, Lot_No = produce.Lot_No,
Code = input.Code, Code = timestr + autolabel.Sort.ToString().PadLeft(4, '0'),
Net_Weight = input.Net_Weight, Net_Weight = input.Net_Weight,
Name = input.Name, Name = produce.Type,
Type = input.Type, Type = produce.Spec,
Createtime = DateTime.Now,
Status = (int)SilkStatus.,
Status_Details = "手动添加称重",
IsDelete = 0 IsDelete = 0
}; };
var entity = await silkRepository.InsertAsync(silk, true); var entity = await silkRepository.InsertAsync(silk, true);
string content = "#!A1" + logger.LogInformation($"添加丝锭成功");
"\r\n#N13" +
"\r\n#PC1017/0" + BarTenderHelper.SilkPrint(silk);
"\r\n#IMR44/46" + logger.LogInformation($"打印{silk.Code}条码丝锭标签成功");
//"\r\n#HV50" +
"\r\n#PR6//" +
"\r\n#PO0" +
"\r\n#ERNC/1//0.00" +
"\r\n#R0/0" +
"\r\n#T3.64 #J43.18 #FD/0/L #SS100/BVUN/21X21/0 #VW/L/\"YuLinHengShenXinCaiLiaoYouXianGongSi\"#G" +
"\r\n#T11.85 #J40.47 #FD/0/L #SS100/BVUN/19X19/0 #VW/L/\"Yulin Hengshen COLtd\"#G" +
"\r\n#T2.28 #J25.31 #FD/0/L #SS100/BVUN/20X20/0 #VW/L/\"Name " + silk.Name + "\"#G" +
"\r\n#T2.28 #J20.91 #FD/0/L #SS100/BVUN/20X20/0 #VW/L/\"Type " + silk.Type + "\"#G" +
"\r\n#T2.28 #J16.51 #FD/0/L #SS100/BVUN/20X20/0 #VW/L/\"Net Weight " + silk.Net_Weight + "\"#G" +
"\r\n#T2.28 #J12.61 #FD/0/L #SS100/BVUN/20X20/0 #VW/L/\"Length " + silk.Length + "\"#G" +
"\r\n#T2.28 #J7.95 #FD/0/L #SS100/BVUN/20X20/0 #VW/L/\"Date " + silk.Date.ToString() + "\"#G" +
"\r\n#T2.28 #J3.89 #FD/0/L #SS100/BVUN/20X20/0 #VW/L/\"Lot No " + silk.Lot_No + "\"#G" +
"\r\n#T11.51 #J29.54 #FD/0/L #SB13/ONKP2.0/8.80/2 #VW/L/\"" + silk.Code + "\"#G" +
"\r\n#Q1#G" +
"\r\n#!P1" +
"\r\n";
await printerService.PrintAsync(1,content);
} }
/// <summary> /// <summary>
@ -149,28 +159,8 @@ namespace Syc.Basic.Web.WMS.Service
{ {
var silk = await silkRepository.FirstOrDefaultAsync(x => x.Id == input.id); var silk = await silkRepository.FirstOrDefaultAsync(x => x.Id == input.id);
string content = "#!A1" + BarTenderHelper.SilkPrint(silk);
"\r\n#N13" + logger.LogInformation($"打印{silk.Code}条码丝锭标签成功");
"\r\n#PC1017/0" +
"\r\n#IMR44/46" +
//"\r\n#HV50" +
"\r\n#PR6//" +
"\r\n#PO0" +
"\r\n#ERNC/1//0.00" +
"\r\n#R0/0" +
"\r\n#T3.64 #J43.18 #FD/0/L #SS100/BVUN/21X21/0 #VW/L/\"YuLinHengShenXinCaiLiaoYouXianGongSi\"#G" +
"\r\n#T11.85 #J40.47 #FD/0/L #SS100/BVUN/19X19/0 #VW/L/\"Yulin Hengshen COLtd\"#G" +
"\r\n#T2.28 #J25.31 #FD/0/L #SS100/BVUN/20X20/0 #VW/L/\"Name " + silk.Name + "\"#G" +
"\r\n#T2.28 #J20.91 #FD/0/L #SS100/BVUN/20X20/0 #VW/L/\"Type " + silk.Type + "\"#G" +
"\r\n#T2.28 #J16.51 #FD/0/L #SS100/BVUN/20X20/0 #VW/L/\"Net Weight " + silk.Net_Weight + "\"#G" +
"\r\n#T2.28 #J12.61 #FD/0/L #SS100/BVUN/20X20/0 #VW/L/\"Length " + silk.Length + "\"#G" +
"\r\n#T2.28 #J7.95 #FD/0/L #SS100/BVUN/20X20/0 #VW/L/\"Date " + silk.Date.ToString() + "\"#G" +
"\r\n#T2.28 #J3.89 #FD/0/L #SS100/BVUN/20X20/0 #VW/L/\"Lot No " + silk.Lot_No + "\"#G" +
"\r\n#T11.51 #J29.54 #FD/0/L #SB13/ONKP2.0/8.80/2 #VW/L/\"" + silk.Code + "\"#G" +
"\r\n#Q1#G" +
"\r\n#!P1" +
"\r\n";
await printerService.PrintAsync(1, content);
} }
/// <summary> /// <summary>
/// 修改丝锭 /// 修改丝锭
@ -185,7 +175,7 @@ namespace Syc.Basic.Web.WMS.Service
silks.Name = input.Name; silks.Name = input.Name;
silks.Type = input.Type; silks.Type = input.Type;
silks.Length = input.Length; silks.Length = input.Length;
silks.Code = input.Code; //silks.Code = input.Code;
silks.Lot_No = input.Lot_No; silks.Lot_No = input.Lot_No;
silks.Net_Weight = input.Net_Weight; silks.Net_Weight = input.Net_Weight;
silks.Date = DateTime.Now; silks.Date = DateTime.Now;

View File

@ -1,6 +1,8 @@
using DotNetCore.CAP; using DotNetCore.CAP;
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using Seyounth.Auto.Hs.Runtime.Printer;
using Syc.Authorize.JwtBearer; using Syc.Authorize.JwtBearer;
using Syc.Basic.Web.Services; using Syc.Basic.Web.Services;
using Syc.Basic.Web.WMS.Dtos.Auth; using Syc.Basic.Web.WMS.Dtos.Auth;
@ -19,6 +21,16 @@ namespace Syc.Basic.Web.WMS.Service
[AllowAnonymous] [AllowAnonymous]
public class TestService:ApiService public class TestService:ApiService
{ {
private readonly IPrinterService printerService;
private readonly IRepository<AutoLabel> autoReposutory;
private readonly ILogger<AutoService> logger;
public TestService(IPrinterService PrinterService, IRepository<AutoLabel> AutoReposutory, ILogger<AutoService> logger)
{
printerService = PrinterService;
autoReposutory = AutoReposutory;
this.logger = logger;
}
[HttpGet] [HttpGet]
public async Task<object> GetTest() public async Task<object> GetTest()

View File

@ -21,6 +21,7 @@ using System.Threading.Tasks;
using Volo.Abp; using Volo.Abp;
using Volo.Abp.Application.Services; using Volo.Abp.Application.Services;
using Volo.Abp.Domain.Repositories; using Volo.Abp.Domain.Repositories;
using Syc.Basic.Web.WMS.Dto;
namespace Syc.Basic.Web.WMS.Service namespace Syc.Basic.Web.WMS.Service
{ {
@ -83,12 +84,28 @@ namespace Syc.Basic.Web.WMS.Service
if (users.Count > 0) if (users.Count > 0)
await repository.DeleteManyAsync(users); await repository.DeleteManyAsync(users);
} }
/// <summary>
/// 修改密码
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
public async Task EditPassword(UserInput input)
{
var userDO = await repository.FirstOrDefaultAsync(x=>x.Id==input.Id);
if (userDO.Password != Tools.SecurityUtil.MD5Encrypt(input.NewPassword, Encoding.ASCII))
throw Oops.Oh("旧密码与密码不一致");
if (userDO.IsNullOrEmpty())
throw Oops.Oh("用户不存在");
if (input.NewPassword == input.JiuPassword)
throw Oops.Oh("新密码不能与旧密码一样");
userDO.Password = Tools.SecurityUtil.MD5Encrypt(input.NewPassword, Encoding.ASCII);
await repository.UpdateAsync(userDO);
}
public async Task Edit(UserInsertInput input) public async Task Edit(UserInsertInput input)
{ {
var accountExist = await repository.AnyAsync(e => e.Account == input.username && e.Id != input.id);
if (accountExist)
throw Oops.Oh("账号已存在,请重复使用");
var userDO = await userRepository.GetUserByAccountAsync(input.username); var userDO = await userRepository.GetUserByAccountAsync(input.username);
if(userDO.IsNullOrEmpty()) if(userDO.IsNullOrEmpty())
throw Oops.Oh("用户不存在"); throw Oops.Oh("用户不存在");

View File

@ -9,6 +9,18 @@
<DocumentationFile>$(MSBuildProjectName).xml</DocumentationFile> <DocumentationFile>$(MSBuildProjectName).xml</DocumentationFile>
</PropertyGroup> </PropertyGroup>
<ItemGroup>
<COMReference Include="BarTender">
<WrapperTool>tlbimp</WrapperTool>
<VersionMinor>0</VersionMinor>
<VersionMajor>11</VersionMajor>
<Guid>d58562c1-e51b-11cf-8941-00a024a9083f</Guid>
<Lcid>0</Lcid>
<Isolated>false</Isolated>
<EmbedInteropTypes>true</EmbedInteropTypes>
</COMReference>
</ItemGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="DotNetCore.CAP" Version="8.2.0" /> <PackageReference Include="DotNetCore.CAP" Version="8.2.0" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.Core" Version="2.2.5" /> <PackageReference Include="Microsoft.AspNetCore.Mvc.Core" Version="2.2.5" />

View File

@ -4,6 +4,27 @@
<name>Syc.Basic.Web.WMS.Application</name> <name>Syc.Basic.Web.WMS.Application</name>
</assembly> </assembly>
<members> <members>
<member name="M:Syc.Basic.Web.WMS.BarTenderHelper.Print(System.String,System.String,System.Collections.Generic.Dictionary{System.String,System.String})">
<summary>
打印标签
</summary>
<param name="templatePath">模板全路径D://AD盘/新建文件夹/xxxx.btw</param>
<param name="deviceName">打印机名称</param>
<param name="@params">模板变量参数</param>
<returns></returns>
</member>
<member name="M:Syc.Basic.Web.WMS.BarTenderHelper.BoxPrint(Syc.Basic.Web.WMS.Entitys.Box)">
<summary>
打印箱子标签
</summary>
<param name="box"></param>
</member>
<member name="M:Syc.Basic.Web.WMS.BarTenderHelper.SilkPrint(Syc.Basic.Web.WMS.Entitys.Silk)">
<summary>
打印丝锭标签
</summary>
<param name="box"></param>
</member>
<member name="M:Syc.Basic.Web.WMS.DeviceEventHandle.DefaultBalanceEventHandle.Yanr(System.Decimal)"> <member name="M:Syc.Basic.Web.WMS.DeviceEventHandle.DefaultBalanceEventHandle.Yanr(System.Decimal)">
<summary> <summary>
丝锭称重 丝锭称重
@ -76,6 +97,13 @@
<returns></returns> <returns></returns>
<exception cref="T:System.NotImplementedException"></exception> <exception cref="T:System.NotImplementedException"></exception>
</member> </member>
<member name="M:Syc.Basic.Web.WMS.Service.AutoService.AutoLabel(System.Int32)">
<summary>
打印唯一标签
</summary>
<param name="num"></param>
<returns></returns>
</member>
<member name="M:Syc.Basic.Web.WMS.Service.BoxService.GetBoxList(Syc.Basic.Web.WMS.Dto.BoxInput)"> <member name="M:Syc.Basic.Web.WMS.Service.BoxService.GetBoxList(Syc.Basic.Web.WMS.Dto.BoxInput)">
<summary> <summary>
查询纸箱 查询纸箱
@ -97,6 +125,13 @@
<param name="input"></param> <param name="input"></param>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:Syc.Basic.Web.WMS.Service.BoxService.AddInsertBox(Syc.Basic.Web.WMS.Dto.BoxDto)">
<summary>
添加纸箱
</summary>
<param name="input"></param>
<returns></returns>
</member>
<member name="M:Syc.Basic.Web.WMS.Service.BoxService.PrintBox(Syc.Basic.Web.WMS.Dto.DelInput)"> <member name="M:Syc.Basic.Web.WMS.Service.BoxService.PrintBox(Syc.Basic.Web.WMS.Dto.DelInput)">
<summary> <summary>
打印纸箱 打印纸箱
@ -131,12 +166,32 @@
</summary> </summary>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:Syc.Basic.Web.WMS.Service.BoxService.ClearData">
<summary>
复位
</summary>
<returns></returns>
</member>
<member name="M:Syc.Basic.Web.WMS.Service.BoxService.GetTemperature"> <member name="M:Syc.Basic.Web.WMS.Service.BoxService.GetTemperature">
<summary> <summary>
设置热缩机温度 设置热缩机温度
</summary> </summary>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:Syc.Basic.Web.WMS.Service.BoxService.BoxsPalletPrint(Syc.Basic.Web.WMS.Dto.FullPalletInput)">
<summary>
整箱码垛打印标签
</summary>
<param name="input"></param>
<returns></returns>
</member>
<member name="M:Syc.Basic.Web.WMS.Service.BoxService.SilksPalletPrint(Syc.Basic.Web.WMS.Dto.FullPalletInput)">
<summary>
单品码垛打印标签
</summary>
<param name="input"></param>
<returns></returns>
</member>
<member name="M:Syc.Basic.Web.WMS.Service.ProduceService.GetProduceList(Syc.Basic.Web.WMS.Dto.ProduceInput)"> <member name="M:Syc.Basic.Web.WMS.Service.ProduceService.GetProduceList(Syc.Basic.Web.WMS.Dto.ProduceInput)">
<summary> <summary>
查询生产 查询生产
@ -235,6 +290,13 @@
<param name="input"></param> <param name="input"></param>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:Syc.Basic.Web.WMS.Service.UserAppService.EditPassword(Syc.Basic.Web.WMS.Dto.UserInput)">
<summary>
修改密码
</summary>
<param name="input"></param>
<returns></returns>
</member>
<member name="M:Syc.Basic.Web.WMS.Service.UserAppService.Profile"> <member name="M:Syc.Basic.Web.WMS.Service.UserAppService.Profile">
<summary> <summary>
个人信息 个人信息

View File

@ -0,0 +1,17 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Volo.Abp.Domain.Entities;
namespace Syc.Basic.Web.WMS.Entitys
{
public class AutoLabel:Entity<int>
{
public DateOnly Date { get; set; }
public int Type { get; set; }
public int Sort { get; set; }
public string Mark { get; set; }
}
}

View File

@ -24,15 +24,20 @@ namespace Syc.Basic.Web.WMS.Entitys
//生产批号 //生产批号
public string Lot_No { get; set; } public string Lot_No { get; set; }
//长度 //长度
public double? Length { get; set; } public string? Length { get; set; }
//打包时间 //打包时间
public DateTime? Dom_Time { get; set; } public DateTime? Dom_Time { get; set; }
//生产日期 //生产日期
public DateTime? Exp_Time { get; set; } public DateTime? Exp_Time { get; set; }
//数据类型(0:整箱1码垛)
public int DataType { get; set; }
//描述
public string? Mark { get; set; }
/// <summary> /// <summary>
/// 是否在装箱 /// 是否在装箱
/// </summary> /// </summary>
public bool IsUse { get; set; } = true; public bool IsUse { get; set; } = true;
public int IsDelete { get; set; } public int IsDelete { get; set; }
public DateTime? Create_Time { get; set; }
} }
} }

View File

@ -12,11 +12,12 @@ namespace Syc.Basic.Web.WMS.Entitys
{ {
public string Type { get; set; } public string Type { get; set; }
public string Spec { get; set; } public string Spec { get; set; }
public double Length { get; set; } public string Length { get; set; }
public string Lot_No { get; set; } public string Lot_No { get; set; }
public string Name { get; set; } public string Name { get; set; }
public int? Qty { get; set; } public int? Qty { get; set; }
public string BoxSpec { get; set; } public string BoxSpec { get; set; }
public DateTime? Date { get; set; }
public DateTime? Exp_Time { get; set; } public DateTime? Exp_Time { get; set; }
public int IfUse { get; set; } public int IfUse { get; set; }
public int IsDelete { get; set; } public int IsDelete { get; set; }

View File

@ -19,14 +19,14 @@ namespace Syc.Basic.Web.WMS.Entitys
//净重 //净重
public double? Net_Weight { get; set; } public double? Net_Weight { get; set; }
//长度 //长度
public double? Length { get; set; } public string? Length { get; set; }
//包装时间 //包装时间
public DateTime? Date { get; set; } public DateTime? Date { get; set; }
//生产批号 //生产批号
public string Lot_No { get; set; } public string Lot_No { get; set; }
/// <summary> /// <summary>
/// 0:已扫码待称重 1:已称重待装箱 2:已装箱 /// 0:已扫码待称重 1:已称重待装箱 2:已装箱 3:已码垛
/// </summary> /// </summary>
[ConcurrencyCheck] [ConcurrencyCheck]
public int Status { get; set; } public int Status { get; set; }

View File

@ -180,6 +180,12 @@ namespace Syc.Basic.Web.EntityFrameworkCore
b.ConfigureByConvention(); b.ConfigureByConvention();
}); });
modelBuilder.Entity<AutoLabel>(b =>
{
b.ToTable(nameof(AutoLabel));
b.ConfigureByConvention();
});
return modelBuilder; return modelBuilder;
} }
} }

View File

@ -82,6 +82,8 @@ public class WMSDbContext :
public virtual DbSet<Silk> Silk { get; set; } public virtual DbSet<Silk> Silk { get; set; }
//生产 //生产
public virtual DbSet<Produce> Produce { get; set; } public virtual DbSet<Produce> Produce { get; set; }
//自动生成条码
public virtual DbSet<AutoLabel> AutoLabel { get; set; }
protected override void OnModelCreating(ModelBuilder builder) protected override void OnModelCreating(ModelBuilder builder)

View File

@ -123,18 +123,21 @@ namespace Seyounth.Auto.Hs.Runtime.Balances
weight = Convert.ToDecimal(matchs.Value); weight = Convert.ToDecimal(matchs.Value);
; ;
//logger.LogInformation("YYYYYYYYYYYYYYYYYYYY"); //logger.LogInformation("YYYYYYYYYYYYYYYYYYYY");
//logger.LogInformation($"Received data: {result},weight:{weight},tag:{tag}");
//1.刚开机,重量为 0 //1.刚开机,重量为 0
if (weight <= 0) if (weight <= 0)
{ {
//logger.LogInformation("tag=true");
tag = true; tag = true;
continue; continue;
} }
; //logger.LogInformation($"cccccccc");
if (MonitorWeightStability(_weights, weight)) if (MonitorWeightStability(_weights, weight))
{ {
//logger.LogInformation($"BBBBBBBB");
if (tag) if (tag)
{ {
//logger.LogInformation($"丝锭称接收数据:{result},字节数:{readCount}"); logger.LogInformation($"丝锭称接收数据:{result},字节数:{readCount}");
using (var scope = serviceProvider.CreateAsyncScope()) using (var scope = serviceProvider.CreateAsyncScope())
{ {
var handles = scope.ServiceProvider.GetService<IEnumerable<IBalanceEventHandle>>(); var handles = scope.ServiceProvider.GetService<IEnumerable<IBalanceEventHandle>>();

View File

@ -135,6 +135,16 @@ public class HsAutoRuntime : IHsAutoRuntime
: $"Printer connection failed. error: {t.Exception?.Message}"); : $"Printer connection failed. error: {t.Exception?.Message}");
}) })
}; };
//while (true)
//{
// foreach (var task in tasks)
// {
// _logger.LogInformation($"{task.Id}:{task.Status}");
// }
// await Task.Delay(1000);
//}
return Task.WhenAll(tasks); return Task.WhenAll(tasks);
} }

View File

@ -6,7 +6,7 @@ public class HsBackgroundService(IHsAutoRuntime hs) : BackgroundService
{ {
public override async Task StartAsync(CancellationToken cancellationToken) public override async Task StartAsync(CancellationToken cancellationToken)
{ {
await hs.RunAsync(); hs.RunAsync();
await base.StartAsync(cancellationToken); await base.StartAsync(cancellationToken);
} }

View File

@ -55,6 +55,16 @@ public interface IPlcService
/// </summary> /// </summary>
/// <returns></returns> /// <returns></returns>
Task ClearTop(); Task ClearTop();
/// <summary>
/// 复位
/// </summary>
/// <returns></returns>
Task ClearData();
/// <summary>
/// 打印完成
/// </summary>
/// <returns></returns>
Task PrintEnd();
/// <summary> /// <summary>
/// 外箱标签打印完成 /// 外箱标签打印完成

View File

@ -76,4 +76,16 @@ public class PlcService : IPlcService
{ {
await _plc.WriteAsync("1002", 0); await _plc.WriteAsync("1002", 0);
} }
public async Task PrintEnd()
{
await _plc.WriteAsync<short>("1101", 1);
_logger.LogInformation("已向1101写入1发送打印完成信号");
}
public async Task ClearData()
{
await _plc.WriteAsync<short>("1103", 1);
_logger.LogInformation("已向1103写入1发送复位信号");
}
} }

View File

@ -54,46 +54,47 @@ namespace Seyounth.Auto.Hs.Runtime.Scanner
/// <returns></returns> /// <returns></returns>
public async Task ConnectAsync() public async Task ConnectAsync()
{ {
while (true) logger.LogInformation("箱扫码枪已弃用不连接");
{ //while (true)
if (_tcp is not null) //{
{ // if (_tcp is not null)
try // {
{ // try
_tcp.Dispose(); // {
} // _tcp.Dispose();
catch (Exception ex) // }
{ // catch (Exception ex)
/* // {
* // /*
*/ // * 忽略释放异常
} // */
// }
} // }
_tcp = new TcpClient(); // _tcp = new TcpClient();
try // try
{ // {
await _tcp.ConnectAsync(new IPEndPoint(IPAddress.Parse(DeviceConnectConfig.IP), DeviceConnectConfig.Port)); // await _tcp.ConnectAsync(new IPEndPoint(IPAddress.Parse(DeviceConnectConfig.IP), DeviceConnectConfig.Port));
if (_stream is not null) // if (_stream is not null)
_stream.Dispose(); // _stream.Dispose();
_stream = _tcp.GetStream(); // _stream = _tcp.GetStream();
logger.LogInformation("箱扫码枪连接成功,开始接收数据"); // logger.LogInformation("箱扫码枪连接成功,开始接收数据");
_receiveDataCancellationToken?.Cancel(); // _receiveDataCancellationToken?.Cancel();
_receiveDataCancellationToken = new CancellationTokenSource(); // _receiveDataCancellationToken = new CancellationTokenSource();
ReceiveData(_receiveDataCancellationToken.Token); // ReceiveData(_receiveDataCancellationToken.Token);
break; // break;
} // }
catch (Exception ex) when (ex.GetBaseException() is OperationCanceledException oce || ex.GetBaseException() is SocketException socketException) // catch (Exception ex) when (ex.GetBaseException() is OperationCanceledException oce || ex.GetBaseException() is SocketException socketException)
{ // {
await Task.Delay(1000 * 5); // await Task.Delay(1000 * 5);
logger.LogError(ex.GetBaseException(), "箱扫码枪连接失败,尝试重连中"); // logger.LogError(ex.GetBaseException(), "箱扫码枪连接失败,尝试重连中");
continue; // continue;
} // }
catch (Exception ex) // catch (Exception ex)
{ // {
logger.LogError(ex, "箱扫码枪连接失败"); // logger.LogError(ex, "箱扫码枪连接失败");
} // }
} //}
} }
/// <summary> /// <summary>

View File

@ -48,46 +48,47 @@ namespace Seyounth.Auto.Hs.Runtime.Scanner
/// <returns></returns> /// <returns></returns>
public async Task ConnectAsync() public async Task ConnectAsync()
{ {
while (true) logger.LogInformation("丝锭扫码枪已弃用");
{ //while (true)
if (_tcp is not null) //{
{ // if (_tcp is not null)
try // {
{ // try
_tcp.Dispose(); // {
} // _tcp.Dispose();
catch (Exception ex) // }
{ // catch (Exception ex)
/* // {
* // /*
*/ // * 忽略释放异常
} // */
// }
} // }
_tcp = new TcpClient(); // _tcp = new TcpClient();
try // try
{ // {
await _tcp.ConnectAsync(new IPEndPoint(IPAddress.Parse(DeviceConnectConfig.IP), DeviceConnectConfig.Port)); // await _tcp.ConnectAsync(new IPEndPoint(IPAddress.Parse(DeviceConnectConfig.IP), DeviceConnectConfig.Port));
if (_stream is not null) // if (_stream is not null)
_stream.Dispose(); // _stream.Dispose();
_stream = _tcp.GetStream(); // _stream = _tcp.GetStream();
logger.LogInformation("人工扫码枪连接成功,开始接收数据"); // logger.LogInformation("人工扫码枪连接成功,开始接收数据");
_receiveDataCancellationToken?.Cancel(); // _receiveDataCancellationToken?.Cancel();
_receiveDataCancellationToken = new CancellationTokenSource(); // _receiveDataCancellationToken = new CancellationTokenSource();
ReceiveData(_receiveDataCancellationToken.Token); // ReceiveData(_receiveDataCancellationToken.Token);
break; // break;
} // }
catch (Exception ex) when (ex.GetBaseException() is OperationCanceledException oce || ex.GetBaseException() is SocketException socketException) // catch (Exception ex) when (ex.GetBaseException() is OperationCanceledException oce || ex.GetBaseException() is SocketException socketException)
{ // {
await Task.Delay(1000 * 5); // await Task.Delay(1000 * 5);
logger.LogError(ex.GetBaseException(), "人工扫码枪连接失败,尝试重连中"); // logger.LogError(ex.GetBaseException(), "人工扫码枪连接失败,尝试重连中");
continue; // continue;
} // }
catch (Exception ex) // catch (Exception ex)
{ // {
logger.LogError(ex, "人工扫码枪连接失败"); // logger.LogError(ex, "人工扫码枪连接失败");
} // }
} //}
} }
/// <summary> /// <summary>

View File

@ -6,6 +6,18 @@
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
</PropertyGroup> </PropertyGroup>
<ItemGroup>
<COMReference Include="BarTender">
<WrapperTool>tlbimp</WrapperTool>
<VersionMinor>0</VersionMinor>
<VersionMajor>11</VersionMajor>
<Guid>d58562c1-e51b-11cf-8941-00a024a9083f</Guid>
<Lcid>0</Lcid>
<Isolated>false</Isolated>
<EmbedInteropTypes>true</EmbedInteropTypes>
</COMReference>
</ItemGroup>
<!--<ItemGroup> <!--<ItemGroup>
<Compile Remove="Handlers\**" /> <Compile Remove="Handlers\**" />
<EmbeddedResource Remove="Handlers\**" /> <EmbeddedResource Remove="Handlers\**" />