Compare commits

..

4 Commits

Author SHA1 Message Date
228d3d2a86 new 2025-10-31 09:56:25 +08:00
76d5c3d5c7 Merge branch 'master' of http://8.134.253.216:8081/syc_zhangzhuo/Seyounth.Auto.Hs 2025-07-01 14:46:59 +08:00
90472cc3f2 后端 2025-07-01 14:46:41 +08:00
d4018aab3f 1.后端 2025-07-01 14:39:07 +08:00
48 changed files with 1819 additions and 3278 deletions

4
.gitignore vendored
View File

@ -3,3 +3,7 @@ obj/
/packages/
riderModule.iml
/_ReSharper.Caches/
/.vs/Seyounth.Auto.Hs/FileContentIndex/d8cedab5-57b0-4eeb-86c4-c233d0ed9e8c.vsidx
/.vs/Seyounth.Auto.Hs/FileContentIndex/0d7533c4-24eb-4861-b4ca-0bab093f3588.vsidx
/.vs/Seyounth.Auto.Hs/FileContentIndex/9996901b-cb5b-46a6-bc29-fdf8e11c942f.vsidx
/.vs/Seyounth.Auto.Hs/FileContentIndex

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,
"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>
<LastUsedPlatform>Any CPU</LastUsedPlatform>
<PublishProvider>FileSystem</PublishProvider>
<PublishUrl>bin\Release\net6.0\publish\</PublishUrl>
<PublishUrl>D:\AD盘\新建文件夹</PublishUrl>
<WebPublishMethod>FileSystem</WebPublishMethod>
<_TargetId>Folder</_TargetId>
<SiteUrlToLaunchAfterPublish />
<TargetFramework>net6.0</TargetFramework>
<TargetFramework>net8.0</TargetFramework>
<RuntimeIdentifier>win-x64</RuntimeIdentifier>
<ProjectGuid>d3b021e9-97fd-4f90-817a-24ec873e547b</ProjectGuid>
<SelfContained>true</SelfContained>

View File

@ -4,8 +4,8 @@ https://go.microsoft.com/fwlink/?LinkID=208121.
-->
<Project>
<PropertyGroup>
<_PublishTargetUrl>D:\盛原成\骏马二期\MES\backend\code\apps\Syc.Basic.Web.WMS.HttpApi.Host\bin\Release\net6.0\publish\</_PublishTargetUrl>
<History>True|2024-10-17T08:48:40.2516489Z;True|2024-10-11T16:31:58.0638668+08:00;</History>
<_PublishTargetUrl>D:\AD盘\新建文件夹</_PublishTargetUrl>
<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 />
</PropertyGroup>
</Project>

View File

@ -5,6 +5,6 @@
</PropertyGroup>
<PropertyGroup>
<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>
</Project>

View File

@ -25,7 +25,7 @@
"ValidateAudience": true,
"Audience": "www.phqmo.blog.com",
"ValidateLifetime": true,
"ExpiredTime": 120,
"ExpiredTime": 1440,
"ClockSkew": 2
},
"CAP": {
@ -63,13 +63,15 @@
{
//
"Id": 1,
"IP": "127.0.0.1",//"192.168.3.202",
//"IP": "192.168.3.202",
"IP": "127.0.0.1",
"Port": 2002
},
{
//
"Id": 2,
"IP": "127.0.0.1",//"192.168.3.120",
//"IP": "192.168.3.120",
"IP": "127.0.0.1",
"Port": 2003
}
],
@ -77,13 +79,15 @@
{
//
"Id": 1,
"IP": "127.0.0.1",
"IP": "192.168.3.217",
//"IP": "127.0.0.1",
"Port": 9102
},
{
//
"Id": 2,
"IP": "192.168.3.217",
//"IP": "127.0.0.1",
"Port": 9101
}
],
@ -92,18 +96,22 @@
//
"Id": 1,
"IP": "192.168.3.99",
"Port": 9110
//"IP": "127.0.0.1",
"Port": 9100
},
{
//
"Id": 2,
"IP": "192.168.3.100",
"Port": 9111
//"IP": "127.0.0.1",
"Port": 9100
}
],
"Plc": {
//PLC
"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 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 int DataType { get; set; }
public string Mark { get; set; }
/// <summary>
/// 是否在装箱
/// </summary>
public bool IsUse { get; set; } = true;
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 IUnitOfWorkManager unitOfWork;
private readonly ILogger<DefaultBalanceEventHandle> logger;
private readonly IRepository<AutoLabel> autoRepository;
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.plcService = plcService;
@ -37,6 +38,7 @@ namespace Syc.Basic.Web.WMS.DeviceEventHandle
this.printerService = printerService;
this.unitOfWork = unitOfWork;
this.logger = logger;
this.autoRepository = autoRepository;
}
public async Task ExecAsync(decimal weight, int id)
@ -80,38 +82,96 @@ namespace Syc.Basic.Web.WMS.DeviceEventHandle
/// <returns></returns>
public async Task Yanr(decimal weight)
{
if (await silkRepository.AnyAsync(e => e.Status == 0 && e.IsDelete == 0))
{
var silk = await silkRepository.FirstOrDefaultAsync(e => e.Status == 0 && e.IsDelete == 0);//QueueManage.YarnBalanceQueue.Dequeue();
silk.Status = 1;
silk.Status_Details = "已称重待装箱";
silk.Net_Weight = (double)weight;
await silkRepository.UpdateAsync(silk);
string content = "#!A1" +
"\r\n#N13" +
"\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);
#region
//要扫码称重的
//if (await silkRepository.AnyAsync(e => e.Status == 0 && e.IsDelete == 0))
//{
// var silk = await silkRepository.FirstOrDefaultAsync(e => e.Status == 0 && e.IsDelete == 0);//QueueManage.YarnBalanceQueue.Dequeue();
// silk.Status = (int)SilkStatus.已称重;
// silk.Status_Details = "已称重";
// silk.Net_Weight = (double)weight;
// await silkRepository.UpdateAsync(silk);
// string content = "#!A1" +
// "\r\n#N13" +
// "\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);
// 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>
@ -121,25 +181,55 @@ namespace Syc.Basic.Web.WMS.DeviceEventHandle
public async Task Box(decimal weight)
{
/* 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))
{
var produce = await produceRepository.FirstOrDefaultAsync(e => e.IfUse == 1 && e.IsDelete == 0);
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 produce = await produceRepository.FirstOrDefaultAsync(e => e.IfUse == 1);
if (produce is null)
throw Oops.Oh("无生产信息,请先设置生产信息再扫码");
throw Oops.Oh("无生产信息,请先设置生产信息再称重");
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}");
//var netWeight = query.FirstOrDefault(e => e.Code == QueueManage.BoxQueue.FirstOrDefault()).Net_Weight * produce.Qty.Value;
var takeQuery = query.Take(produce.Qty.Value);
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()
{
Dom_Time = DateTime.Now,
@ -148,34 +238,21 @@ namespace Syc.Basic.Web.WMS.DeviceEventHandle
Qty = produce.Qty,
Length = produce.Length,
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,
Spec = produce.BoxSpec,
Spec = produce.Spec,
Gross_Weight = (double)weight,
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" +
"\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";
//打印成箱大标签
BarTenderHelper.BoxPrint(box);
logger.LogInformation($"打印条码{box.Code},成箱码垛标签打印成功");
var entity = await boxRepository.InsertAsync(box, true);
var silks = takeQuery.ToList();
@ -186,14 +263,17 @@ namespace Syc.Basic.Web.WMS.DeviceEventHandle
{
logger.LogInformation($"{e.Code}已装箱");
e.BoxId = entity.Id;
e.Status = 2;
e.Status = (int)SilkStatus.;
e.Status_Details = "已装箱";
});
await silkRepository.UpdateManyAsync(silks);
await printerService.PrintAsync(2, content);
await plcService.ClearTop();
await plcService.ClearData();
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>
public async Task ExecAsync(string code, int id)
{
using (var uow = uowm.Reserve(UnitOfWork.UnitOfWorkReservationName))
{
try
{
if (id == 1)
await Yarn(code);
else
await Box(code);
await uow.CompleteAsync();
}
catch (Exception ex) when (ex is FriendlyException friendlyException)
{
logger.LogError(ex.GetBaseException(),"扫码报错");
await WebSocketManager.SocketManager.BroadcastAsync(friendlyException.Message);
await uow.RollbackAsync();
}
catch (Exception ex)
{
logger.LogError(ex.GetBaseException(), "扫码报错");
await uow.RollbackAsync();
}
}
//using (var uow = uowm.Reserve(UnitOfWork.UnitOfWorkReservationName))
//{
// try
// {
// if (id == 1)
// await Yarn(code);
// else
// await Box(code);
// await uow.CompleteAsync();
// }
// catch (Exception ex) when (ex is FriendlyException friendlyException)
// {
// logger.LogError(ex.GetBaseException(),"扫码报错");
// await WebSocketManager.SocketManager.BroadcastAsync(friendlyException.Message);
// await uow.RollbackAsync();
// }
// catch (Exception ex)
// {
// logger.LogError(ex.GetBaseException(), "扫码报错");
// await uow.RollbackAsync();
// }
//}
}
/// <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 string Type { 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 Name { get; set; }
//public string Name { 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 int IfUse { 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? Length { get; set; }
public string? Length { 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
{
//[ApiExplorerSettings(GroupName = "鉴权/授权服务"), Authorize]
[AllowAnonymous]
public class AuthService : ApiService, IAuthService
{
private readonly IJwtTokenService jwtTokenService;
@ -54,7 +53,7 @@ namespace Syc.Basic.Web.WMS.Service
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost]
[HttpPost,AllowAnonymous]
public async Task<AuthResultDto> LoginAsync(LoginInput input)
{
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 ILogger<BoxService> logger;
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.produceRepository = produceRepository;
@ -38,6 +39,7 @@ namespace Syc.Basic.Web.WMS.Service
this.plcService = plcService;
this.logger = logger;
this.printerService = printerService;
this.autoRepository = autoRepository;
}
/// <summary>
/// 查询纸箱
@ -54,7 +56,7 @@ namespace Syc.Basic.Web.WMS.Service
if (input.Spec != null)
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()
{
Length = e.Length,
@ -62,8 +64,11 @@ namespace Syc.Basic.Web.WMS.Service
Qty = e.Qty,
Id = e.Id,
Code = e.Code,
Dom_Time = e.Dom_Time,
Exp_Time = e.Exp_Time.ToString(),
Dom_Time = DateTime.Parse(e.Dom_Time.ToString()).ToString("yyyy-MM-dd HH:mm:ss"),
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,
Spec = e.Spec,
Gross_Weight = e.Gross_Weight,
@ -72,9 +77,9 @@ namespace Syc.Basic.Web.WMS.Service
PageOutput<BoxDto> pageOutput = new PageOutput<BoxDto>();
pageOutput.Total = boxlist.Count();
pageOutput.Data = data.OrderByDescending(x=>x.Id);
pageOutput.Data = data;
pageOutput.PageIndex = input.Page;
pageOutput.PageSize=input.PageSize;
pageOutput.PageSize = input.PageSize;
return pageOutput;
}
/// <summary>
@ -85,19 +90,23 @@ namespace Syc.Basic.Web.WMS.Service
[HttpGet]
public async Task<List<BoxDto>> GetBoxByNum()
{
var produce=await produceRepository.FirstOrDefaultAsync(x=>x.IfUse==1);
var silks = await silkRepository.GetListAsync(x=>x.Status==1||x.Status==0);
var produce = await produceRepository.FirstOrDefaultAsync(x => x.IfUse == 1);
if (produce == null)
throw Oops.Oh("没有生产设置");
//var silks = await silkRepository.GetListAsync(x=>x.Status==1||x.Status==0);
var boxlist = await boxRepository.GetQueryableAsync();
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,
Id = e.Id,
Code = e.Code
Code = e.Code,
DataType = e.DataType,
Mark = e.Mark
}).ToList();
return data.OrderByDescending(x => x.Id).ToList().Take(1).ToList();
return data.OrderByDescending(x => x.Id).Take(15).ToList();
}
/// <summary>
/// 添加纸箱
@ -107,53 +116,128 @@ namespace Syc.Basic.Web.WMS.Service
[HttpPost]
public async Task InsertBox(BoxDto input)
{
if (await boxRepository.AnyAsync(x => x.Code == input.Code))
throw Oops.Oh("条码已存在,不允许添加");
var boxs = await boxRepository.GetListAsync(e => e.IsUse);
if (boxs.Any())
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((int)produce.Qty).ToList();
if (produce == null)
throw Oops.Oh("没有生产设置");
if (silks.Count < produce.Qty)
{
boxs.ForEach(e => e.IsUse = false);
await boxRepository.UpdateManyAsync(boxs);
logger.LogWarning($"没有{produce.Qty}条{produce.Type}的单品的信息,只有{silks.Count}条,无法创建码垛信息");
throw Oops.Oh($"没有{produce.Qty}条{produce.Type}的单品的信息,只有{silks.Count}条,无法创建码垛信息");
//return;
}
var netWeight = silks.Sum(x => x.Net_Weight);
var weight = silks.Average(x => x.Net_Weight);
var date = DateOnly.Parse(DateTime.Now.ToString("yyyy-MM-dd"));
var autolabel = await autoRepository.FirstOrDefaultAsync(x => x.Date == date && x.Type == (int)AutoLabelType.);
var timestr = DateTime.Now.ToString("yyyyMMddHHmmss");
if (autolabel == null)
{
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 = string.IsNullOrWhiteSpace(input.Exp_Time) ? null : Convert.ToDateTime(input.Exp_Time),
Exp_Time = produce.Exp_Time,
Qty = produce.Qty,
Length = produce.Length,
Lot_No = produce.Lot_No,
Code = timestr + autolabel.Sort.ToString().PadLeft(4, '0'),
Net_Weight = netWeight,
Spec = produce.Spec,
Create_Time = DateTime.Now,
Type = produce.Type,
IsUse = true,
IsDelete = 0,
DataType = (int)BoxDataType.,
Mark = "已经手动添加装箱信息"
};
var entity = await boxRepository.InsertAsync(box, true);
logger.LogInformation($"已手动添加装箱信息,装箱编号:{box.Code},包含单品数量:{silks.Count}");
List<Silk> list = new List<Silk>();
foreach (var silk in silks)
{
silk.Status = (int)SilkStatus.;
silk.BoxId = entity.Id;
silk.Status_Details = "已手动装箱";
list.Add(silk);
}
await silkRepository.UpdateManyAsync(list);
}
/// <summary>
/// 添加纸箱
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost]
public async Task AddInsertBox(BoxDto input)
{
var date = DateOnly.Parse(DateTime.Now.ToString("yyyy-MM-dd"));
var autolabel = await autoRepository.FirstOrDefaultAsync(x => x.Date == date && x.Type == (int)AutoLabelType.);
var timestr = DateTime.Now.ToString("yyyyMMddHHmmss");
if (autolabel == null)
{
autolabel = await autoRepository.InsertAsync(new AutoLabel()
{
Date = date,
Sort = 0,
Mark = timestr,
Type = (int)AutoLabelType.
}, true);
}
autolabel.Sort += 1;
logger.LogInformation("手动添加成箱信息" + timestr + autolabel.Sort.ToString().PadLeft(4, '0'));
await autoRepository.UpdateAsync(autolabel);
var box = new Box()
{
Dom_Time = DateTime.Now,
Exp_Time = DateTime.Parse(input.Exp_Time),
Qty = input.Qty,
Length = input.Length,
Lot_No = input.Lot_No,
Code = input.Code,
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
IsDelete = 0,
DataType = (int)BoxDataType.,
Mark = "手动添加的成箱信息数据库未绑定单品信息"
};
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);
var entity = await boxRepository.InsertAsync(box, true);
logger.LogInformation($"手动添加的成箱信息未绑定单品信息:{box.Code},未含单品数量");
BarTenderHelper.BoxPrint(box);
logger.LogInformation($"打印条码{box.Code},成箱标签打印成功");
}
/// <summary>
@ -164,30 +248,12 @@ namespace Syc.Basic.Web.WMS.Service
[HttpPost]
public async Task PrintBox(DelInput input)
{
var box = await boxRepository.FirstOrDefaultAsync(x=>x.Id==input.id);
var box = await boxRepository.FirstOrDefaultAsync(x => x.Id == input.id);
BarTenderHelper.BoxPrint(box);
logger.LogInformation($"打印条码{box.Code},成箱标签打印成功");
//throw Oops.Oh("成箱标签打印成功");
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);
}
/// <summary>
@ -202,10 +268,11 @@ namespace Syc.Basic.Web.WMS.Service
box.Spec = input.Spec;
box.Length = input.Length;
box.Code = input.Code;
//box.Code = input.Code;
box.Lot_No = input.Lot_No;
box.Net_Weight = input.Net_Weight;
box.Dom_Time = DateTime.Now;
box.Type = input.Type;
box.Qty = input.Qty;
box.Exp_Time = string.IsNullOrWhiteSpace(input.Exp_Time) ? null : Convert.ToDateTime(input.Exp_Time);
await boxRepository.UpdateAsync(box);
@ -236,7 +303,7 @@ namespace Syc.Basic.Web.WMS.Service
var boxs = await boxRepository.GetListAsync(x => input.ids.Contains(x.Id));
if (boxs.Count == 0)
throw Oops.Oh("删除失败,数据为空");
for(var i = 0; i < boxs.Count; i++)
for (var i = 0; i < boxs.Count; i++)
{
boxs[i].IsDelete = 1;
}
@ -252,6 +319,16 @@ namespace Syc.Basic.Web.WMS.Service
await plcService.SetTemperatureAsync(input.Id);
}
/// <summary>
/// 复位
/// </summary>
/// <returns></returns>
[HttpGet]
public async Task ClearData()
{
await plcService.ClearData();
}
/// <summary>
/// 设置热缩机温度
/// </summary>
@ -260,5 +337,178 @@ namespace Syc.Basic.Web.WMS.Service
{
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,
Length = x.Length,
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") : "-",
IfUse = x.IfUse,
Name = x.Name,
//Name = x.Name,
Qty = x.Qty
});
@ -100,10 +101,11 @@ namespace Syc.Basic.Web.WMS.Service
Spec = input.Spec,
Type = input.Type,
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),
IfUse = 1,
Name = input.Name,
Name = input.Type,
IsDelete = 0
};
@ -124,8 +126,9 @@ namespace Syc.Basic.Web.WMS.Service
produce.Length = input.Length;
produce.Lot_No = input.Lot_No;
produce.Qty = input.Qty;
produce.Name = input.Name;
produce.BoxSpec = input.BoxSpec;
produce.Name = input.Type;
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);
await produceRepository.UpdateAsync(produce);
}

View File

@ -16,19 +16,21 @@ using Volo.Abp.Domain.Repositories;
namespace Syc.Basic.Web.WMS.Service
{
[AllowAnonymous]
public class SilkService:ApiService
public class SilkService : ApiService
{
private readonly IPrinterService printerService;
private readonly IRepository<Produce> produceRepository;
private readonly IRepository<Silk> silkRepository;
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.produceRepository = produceRepository;
this.silkRepository = silkRepository;
this.logger = logger;
this.autoRepository = autoRepository;
}
/// <summary>
/// 根据数量查询丝锭
@ -38,9 +40,11 @@ namespace Syc.Basic.Web.WMS.Service
[HttpGet]
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();
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()
{
@ -51,7 +55,7 @@ namespace Syc.Basic.Web.WMS.Service
Status_Details = e.Status_Details
}).ToList();
return data.OrderByDescending(x => x.Id).ToList().ToList();
return data.OrderByDescending(x => x.Id).ToList();
}
/// <summary>
/// 查询丝锭
@ -68,25 +72,25 @@ namespace Syc.Basic.Web.WMS.Service
if (input.Lot_No != null)
silklist = silklist.Where(x => x.Type.Contains(input.Lot_No));
var result = silklist.PageResult(input.Page, input.PageSize);
var data = result.Queryable.Select(x=>new SilkDto()
var result = silklist.OrderByDescending(x => x.Id).PageResult(input.Page, input.PageSize);
var data = result.Queryable.Select(x => new SilkDto()
{
Name=x.Name,
Net_Weight=x.Net_Weight,
Lot_No=x.Lot_No,
Code=x.Code,
Date=x.Date,
Id=x.Id,
Length=x.Length,
Type=x.Type,
BoxId=x.BoxId,
Status=x.Status,
Status_Details=x.Status_Details
Name = x.Name,
Net_Weight = x.Net_Weight,
Lot_No = x.Lot_No,
Code = x.Code,
Date = x.Date,
Id = x.Id,
Length = x.Length,
Type = x.Type,
BoxId = x.BoxId,
Status = x.Status,
Status_Details = x.Status_Details
});
PageOutput<SilkDto> pageOutput = new PageOutput<SilkDto>();
pageOutput.Total = silklist.Count();
pageOutput.Data = data.OrderByDescending(x => x.Id);
pageOutput.Data = data;
pageOutput.PageIndex = input.Page;
pageOutput.PageSize = input.PageSize;
return pageOutput;
@ -99,44 +103,50 @@ namespace Syc.Basic.Web.WMS.Service
[HttpPost]
public async Task InsertSilk(SilkDto input)
{
if (await silkRepository.AnyAsync(x => x.Code == input.Code&&x.IsDelete==0))
throw Oops.Oh("条码已存在,不允许添加");
var produce = await produceRepository.FirstOrDefaultAsync(x => x.IfUse == 1);
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()
{
Date = DateTime.Now,
Length = input.Length,
Lot_No = input.Lot_No,
Code = input.Code,
Length = produce.Length,
Lot_No = produce.Lot_No,
Code = timestr + autolabel.Sort.ToString().PadLeft(4, '0'),
Net_Weight = input.Net_Weight,
Name = input.Name,
Type = input.Type,
Name = produce.Type,
Type = produce.Spec,
Createtime = DateTime.Now,
Status = (int)SilkStatus.,
Status_Details = "手动添加称重",
IsDelete = 0
};
var entity = await silkRepository.InsertAsync(silk,true);
var entity = await silkRepository.InsertAsync(silk, true);
string content = "#!A1" +
"\r\n#N13" +
"\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);
logger.LogInformation($"添加丝锭成功");
BarTenderHelper.SilkPrint(silk);
logger.LogInformation($"打印{silk.Code}条码丝锭标签成功");
}
/// <summary>
@ -147,30 +157,10 @@ namespace Syc.Basic.Web.WMS.Service
[HttpPost]
public async Task PrintSilk(DelInput input)
{
var silk = await silkRepository.FirstOrDefaultAsync(x=>x.Id==input.id);
var silk = await silkRepository.FirstOrDefaultAsync(x => x.Id == input.id);
string content = "#!A1" +
"\r\n#N13" +
"\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);
BarTenderHelper.SilkPrint(silk);
logger.LogInformation($"打印{silk.Code}条码丝锭标签成功");
}
/// <summary>
/// 修改丝锭
@ -180,12 +170,12 @@ namespace Syc.Basic.Web.WMS.Service
[HttpPost]
public async Task UpdateSilk(SilkDto input)
{
var silks = await silkRepository.FirstOrDefaultAsync(x=>x.Id==input.Id);
var silks = await silkRepository.FirstOrDefaultAsync(x => x.Id == input.Id);
silks.Name = input.Name;
silks.Type = input.Type;
silks.Length = input.Length;
silks.Code = input.Code;
//silks.Code = input.Code;
silks.Lot_No = input.Lot_No;
silks.Net_Weight = input.Net_Weight;
silks.Date = DateTime.Now;

View File

@ -1,6 +1,8 @@
using DotNetCore.CAP;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using Seyounth.Auto.Hs.Runtime.Printer;
using Syc.Authorize.JwtBearer;
using Syc.Basic.Web.Services;
using Syc.Basic.Web.WMS.Dtos.Auth;
@ -19,6 +21,16 @@ namespace Syc.Basic.Web.WMS.Service
[AllowAnonymous]
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]
public async Task<object> GetTest()

View File

@ -21,6 +21,7 @@ using System.Threading.Tasks;
using Volo.Abp;
using Volo.Abp.Application.Services;
using Volo.Abp.Domain.Repositories;
using Syc.Basic.Web.WMS.Dto;
namespace Syc.Basic.Web.WMS.Service
{
@ -83,12 +84,28 @@ namespace Syc.Basic.Web.WMS.Service
if (users.Count > 0)
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)
{
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);
if(userDO.IsNullOrEmpty())
throw Oops.Oh("用户不存在");

View File

@ -9,6 +9,18 @@
<DocumentationFile>$(MSBuildProjectName).xml</DocumentationFile>
</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>
<PackageReference Include="DotNetCore.CAP" Version="8.2.0" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.Core" Version="2.2.5" />

View File

@ -4,6 +4,27 @@
<name>Syc.Basic.Web.WMS.Application</name>
</assembly>
<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)">
<summary>
丝锭称重
@ -76,6 +97,13 @@
<returns></returns>
<exception cref="T:System.NotImplementedException"></exception>
</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)">
<summary>
查询纸箱
@ -97,6 +125,13 @@
<param name="input"></param>
<returns></returns>
</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)">
<summary>
打印纸箱
@ -131,12 +166,32 @@
</summary>
<returns></returns>
</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">
<summary>
设置热缩机温度
</summary>
<returns></returns>
</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)">
<summary>
查询生产
@ -235,6 +290,13 @@
<param name="input"></param>
<returns></returns>
</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">
<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 double? Length { get; set; }
public string? Length { get; set; }
//打包时间
public DateTime? Dom_Time { get; set; }
//生产日期
public DateTime? Exp_Time { get; set; }
//数据类型(0:整箱1码垛)
public int DataType { get; set; }
//描述
public string? Mark { get; set; }
/// <summary>
/// 是否在装箱
/// </summary>
public bool IsUse { get; set; } = true;
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 Spec { get; set; }
public double Length { get; set; }
public string Length { get; set; }
public string Lot_No { get; set; }
public string Name { get; set; }
public int? Qty { get; set; }
public string BoxSpec { get; set; }
public DateTime? Date { get; set; }
public DateTime? Exp_Time { get; set; }
public int IfUse { 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? Length { get; set; }
public string? Length { get; set; }
//包装时间
public DateTime? Date { get; set; }
//生产批号
public string Lot_No { get; set; }
/// <summary>
/// 0:已扫码待称重 1:已称重待装箱 2:已装箱
/// 0:已扫码待称重 1:已称重待装箱 2:已装箱 3:已码垛
/// </summary>
[ConcurrencyCheck]
public int Status { get; set; }

View File

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

View File

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

View File

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

View File

@ -135,6 +135,16 @@ public class HsAutoRuntime : IHsAutoRuntime
: $"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);
}

View File

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

View File

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

View File

@ -8,7 +8,7 @@ public class PlcService : IPlcService
private readonly ILogger<PlcService> _logger;
private readonly IPlc _plc;
public PlcService(IPlc plc,ILogger<PlcService> logger)
public PlcService(IPlc plc, ILogger<PlcService> logger)
{
_logger = logger;
_plc = plc;
@ -63,7 +63,7 @@ public class PlcService : IPlcService
public async Task BoxTagPrintDoneAsync(short value)
{
await _plc.WriteAsync<short>("1102",value);
await _plc.WriteAsync<short>("1102", value);
_logger.LogInformation("已回复打印完成信号");
}
@ -74,6 +74,18 @@ public class PlcService : IPlcService
public async Task ClearTop()
{
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>
public async Task ConnectAsync()
{
while (true)
{
if (_tcp is not null)
{
try
{
_tcp.Dispose();
}
catch (Exception ex)
{
/*
*
*/
}
logger.LogInformation("箱扫码枪已弃用不连接");
//while (true)
//{
// if (_tcp is not null)
// {
// try
// {
// _tcp.Dispose();
// }
// catch (Exception ex)
// {
// /*
// * 忽略释放异常
// */
// }
}
_tcp = new TcpClient();
try
{
await _tcp.ConnectAsync(new IPEndPoint(IPAddress.Parse(DeviceConnectConfig.IP), DeviceConnectConfig.Port));
if (_stream is not null)
_stream.Dispose();
_stream = _tcp.GetStream();
logger.LogInformation("箱扫码枪连接成功,开始接收数据");
_receiveDataCancellationToken?.Cancel();
_receiveDataCancellationToken = new CancellationTokenSource();
ReceiveData(_receiveDataCancellationToken.Token);
break;
}
catch (Exception ex) when (ex.GetBaseException() is OperationCanceledException oce || ex.GetBaseException() is SocketException socketException)
{
await Task.Delay(1000 * 5);
logger.LogError(ex.GetBaseException(), "箱扫码枪连接失败,尝试重连中");
continue;
}
catch (Exception ex)
{
logger.LogError(ex, "箱扫码枪连接失败");
}
}
// }
// _tcp = new TcpClient();
// try
// {
// await _tcp.ConnectAsync(new IPEndPoint(IPAddress.Parse(DeviceConnectConfig.IP), DeviceConnectConfig.Port));
// if (_stream is not null)
// _stream.Dispose();
// _stream = _tcp.GetStream();
// logger.LogInformation("箱扫码枪连接成功,开始接收数据");
// _receiveDataCancellationToken?.Cancel();
// _receiveDataCancellationToken = new CancellationTokenSource();
// ReceiveData(_receiveDataCancellationToken.Token);
// break;
// }
// catch (Exception ex) when (ex.GetBaseException() is OperationCanceledException oce || ex.GetBaseException() is SocketException socketException)
// {
// await Task.Delay(1000 * 5);
// logger.LogError(ex.GetBaseException(), "箱扫码枪连接失败,尝试重连中");
// continue;
// }
// catch (Exception ex)
// {
// logger.LogError(ex, "箱扫码枪连接失败");
// }
//}
}
/// <summary>

View File

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

View File

@ -6,6 +6,18 @@
<Nullable>enable</Nullable>
</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>
<Compile Remove="Handlers\**" />
<EmbeddedResource Remove="Handlers\**" />

132
新建 文本文档.txt Normal file
View File

@ -0,0 +1,132 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.9.34616.47
MinimumVisualStudioVersion = 10.0.40219.1
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Share", "Share", "{156E45DF-D59B-4EA0-9BC0-77692BD91E1E}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Service", "Service", "{685CBDEC-BE8B-4B23-8EDA-42C0B312322F}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "apps", "apps", "{EB48C776-7740-4A71-8E82-B7AE9CFEB7C3}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Syc.Basic.Web.WMS.HttpApi.Host", "apps\Syc.Basic.Web.WMS.HttpApi.Host\Syc.Basic.Web.WMS.HttpApi.Host.csproj", "{E3F72AF0-2B74-46B9-837A-A5C1417CFBF8}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Syc.Basic.Web.WMS.Application", "services\Syc.Basic.Web.WMS.Application\Syc.Basic.Web.WMS.Application.csproj", "{3137A5F4-375A-4FB0-AA4B-7C0380A48BB2}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Syc.Basic.Web.WMS.Application.Contracts", "services\Syc.Basic.Web.WMS.Application.Contracts\Syc.Basic.Web.WMS.Application.Contracts.csproj", "{A454C322-58E6-4FEB-B709-5E277C7E71B7}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Syc.Basic.Web.WMS.Domain", "services\Syc.Basic.Web.WMS.Domain\Syc.Basic.Web.WMS.Domain.csproj", "{B1BFBB4E-0213-4D41-A05B-43C276F9CDAB}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Syc.Basic.Web.WMS.Domain.Shared", "services\Syc.Basic.Web.WMS.Domain.Shared\Syc.Basic.Web.WMS.Domain.Shared.csproj", "{7A014245-A193-435C-B1BA-2666EBD86CCA}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Syc.Basic.Web.WMS.EntityFrameworkCore", "services\Syc.Basic.Web.WMS.EntityFrameworkCore\Syc.Basic.Web.WMS.EntityFrameworkCore.csproj", "{3B487959-6744-4784-B5F8-F91012F37C70}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Syc.Basic.Web.WMS.HttpApi", "services\Syc.Basic.Web.WMS.HttpApi\Syc.Basic.Web.WMS.HttpApi.csproj", "{68ECAB75-580B-425E-9D84-832E6F6F8BCD}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Syc.Basic.Web.WMS.HttpApi.Client", "services\Syc.Basic.Web.WMS.HttpApi.Client\Syc.Basic.Web.WMS.HttpApi.Client.csproj", "{A12CE372-B83A-43A1-86CB-CEAF4B2C4154}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Seyounth.Auto.Hs.Runtime", "share\Seyounth.Auto.Hs.Runtime\Seyounth.Auto.Hs.Runtime.csproj", "{0AA64147-2900-4336-B8B7-B2F385DAD4A2}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Seyounth.Auto.Plc", "share\Seyounth.Auto.Plc\Seyounth.Auto.Plc.csproj", "{ECA65280-9549-40C5-9876-21D111D7C811}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Syc.Abp.Application.Contracts", "share\Syc.Abp.Application.Contracts\Syc.Abp.Application.Contracts.csproj", "{3881133B-BE58-46FA-978F-558A53004984}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Syc.Abp.Caching", "share\Syc.Abp.Caching\Syc.Abp.Caching.csproj", "{EB8E5222-4E85-4EBD-9894-33238CE89662}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Syc.Abp.Domain", "share\Syc.Abp.Domain\Syc.Abp.Domain.csproj", "{E0ACC792-32CF-4698-A2DF-5697BD4395F0}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Syc.Abp.HttpApi.Client", "share\Syc.Abp.HttpApi.Client\Syc.Abp.HttpApi.Client.csproj", "{68D70001-A1DA-4D99-A828-98346F42C435}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Syc.Authorize.JwtBearer", "share\Syc.Authorize.JwtBearer\Syc.Authorize.JwtBearer.csproj", "{D5714C79-0651-4BAB-80D2-65D73B82E2F1}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{E3F72AF0-2B74-46B9-837A-A5C1417CFBF8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E3F72AF0-2B74-46B9-837A-A5C1417CFBF8}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E3F72AF0-2B74-46B9-837A-A5C1417CFBF8}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E3F72AF0-2B74-46B9-837A-A5C1417CFBF8}.Release|Any CPU.Build.0 = Release|Any CPU
{3137A5F4-375A-4FB0-AA4B-7C0380A48BB2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3137A5F4-375A-4FB0-AA4B-7C0380A48BB2}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3137A5F4-375A-4FB0-AA4B-7C0380A48BB2}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3137A5F4-375A-4FB0-AA4B-7C0380A48BB2}.Release|Any CPU.Build.0 = Release|Any CPU
{A454C322-58E6-4FEB-B709-5E277C7E71B7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{A454C322-58E6-4FEB-B709-5E277C7E71B7}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A454C322-58E6-4FEB-B709-5E277C7E71B7}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A454C322-58E6-4FEB-B709-5E277C7E71B7}.Release|Any CPU.Build.0 = Release|Any CPU
{B1BFBB4E-0213-4D41-A05B-43C276F9CDAB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B1BFBB4E-0213-4D41-A05B-43C276F9CDAB}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B1BFBB4E-0213-4D41-A05B-43C276F9CDAB}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B1BFBB4E-0213-4D41-A05B-43C276F9CDAB}.Release|Any CPU.Build.0 = Release|Any CPU
{7A014245-A193-435C-B1BA-2666EBD86CCA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7A014245-A193-435C-B1BA-2666EBD86CCA}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7A014245-A193-435C-B1BA-2666EBD86CCA}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7A014245-A193-435C-B1BA-2666EBD86CCA}.Release|Any CPU.Build.0 = Release|Any CPU
{3B487959-6744-4784-B5F8-F91012F37C70}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3B487959-6744-4784-B5F8-F91012F37C70}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3B487959-6744-4784-B5F8-F91012F37C70}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3B487959-6744-4784-B5F8-F91012F37C70}.Release|Any CPU.Build.0 = Release|Any CPU
{68ECAB75-580B-425E-9D84-832E6F6F8BCD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{68ECAB75-580B-425E-9D84-832E6F6F8BCD}.Debug|Any CPU.Build.0 = Debug|Any CPU
{68ECAB75-580B-425E-9D84-832E6F6F8BCD}.Release|Any CPU.ActiveCfg = Release|Any CPU
{68ECAB75-580B-425E-9D84-832E6F6F8BCD}.Release|Any CPU.Build.0 = Release|Any CPU
{A12CE372-B83A-43A1-86CB-CEAF4B2C4154}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{A12CE372-B83A-43A1-86CB-CEAF4B2C4154}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A12CE372-B83A-43A1-86CB-CEAF4B2C4154}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A12CE372-B83A-43A1-86CB-CEAF4B2C4154}.Release|Any CPU.Build.0 = Release|Any CPU
{0AA64147-2900-4336-B8B7-B2F385DAD4A2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{0AA64147-2900-4336-B8B7-B2F385DAD4A2}.Debug|Any CPU.Build.0 = Debug|Any CPU
{0AA64147-2900-4336-B8B7-B2F385DAD4A2}.Release|Any CPU.ActiveCfg = Release|Any CPU
{0AA64147-2900-4336-B8B7-B2F385DAD4A2}.Release|Any CPU.Build.0 = Release|Any CPU
{ECA65280-9549-40C5-9876-21D111D7C811}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{ECA65280-9549-40C5-9876-21D111D7C811}.Debug|Any CPU.Build.0 = Debug|Any CPU
{ECA65280-9549-40C5-9876-21D111D7C811}.Release|Any CPU.ActiveCfg = Release|Any CPU
{ECA65280-9549-40C5-9876-21D111D7C811}.Release|Any CPU.Build.0 = Release|Any CPU
{3881133B-BE58-46FA-978F-558A53004984}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3881133B-BE58-46FA-978F-558A53004984}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3881133B-BE58-46FA-978F-558A53004984}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3881133B-BE58-46FA-978F-558A53004984}.Release|Any CPU.Build.0 = Release|Any CPU
{EB8E5222-4E85-4EBD-9894-33238CE89662}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{EB8E5222-4E85-4EBD-9894-33238CE89662}.Debug|Any CPU.Build.0 = Debug|Any CPU
{EB8E5222-4E85-4EBD-9894-33238CE89662}.Release|Any CPU.ActiveCfg = Release|Any CPU
{EB8E5222-4E85-4EBD-9894-33238CE89662}.Release|Any CPU.Build.0 = Release|Any CPU
{E0ACC792-32CF-4698-A2DF-5697BD4395F0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E0ACC792-32CF-4698-A2DF-5697BD4395F0}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E0ACC792-32CF-4698-A2DF-5697BD4395F0}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E0ACC792-32CF-4698-A2DF-5697BD4395F0}.Release|Any CPU.Build.0 = Release|Any CPU
{68D70001-A1DA-4D99-A828-98346F42C435}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{68D70001-A1DA-4D99-A828-98346F42C435}.Debug|Any CPU.Build.0 = Debug|Any CPU
{68D70001-A1DA-4D99-A828-98346F42C435}.Release|Any CPU.ActiveCfg = Release|Any CPU
{68D70001-A1DA-4D99-A828-98346F42C435}.Release|Any CPU.Build.0 = Release|Any CPU
{D5714C79-0651-4BAB-80D2-65D73B82E2F1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D5714C79-0651-4BAB-80D2-65D73B82E2F1}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D5714C79-0651-4BAB-80D2-65D73B82E2F1}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D5714C79-0651-4BAB-80D2-65D73B82E2F1}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{E3F72AF0-2B74-46B9-837A-A5C1417CFBF8} = {EB48C776-7740-4A71-8E82-B7AE9CFEB7C3}
{3137A5F4-375A-4FB0-AA4B-7C0380A48BB2} = {685CBDEC-BE8B-4B23-8EDA-42C0B312322F}
{A454C322-58E6-4FEB-B709-5E277C7E71B7} = {685CBDEC-BE8B-4B23-8EDA-42C0B312322F}
{B1BFBB4E-0213-4D41-A05B-43C276F9CDAB} = {685CBDEC-BE8B-4B23-8EDA-42C0B312322F}
{7A014245-A193-435C-B1BA-2666EBD86CCA} = {685CBDEC-BE8B-4B23-8EDA-42C0B312322F}
{3B487959-6744-4784-B5F8-F91012F37C70} = {685CBDEC-BE8B-4B23-8EDA-42C0B312322F}
{68ECAB75-580B-425E-9D84-832E6F6F8BCD} = {685CBDEC-BE8B-4B23-8EDA-42C0B312322F}
{A12CE372-B83A-43A1-86CB-CEAF4B2C4154} = {685CBDEC-BE8B-4B23-8EDA-42C0B312322F}
{0AA64147-2900-4336-B8B7-B2F385DAD4A2} = {156E45DF-D59B-4EA0-9BC0-77692BD91E1E}
{ECA65280-9549-40C5-9876-21D111D7C811} = {156E45DF-D59B-4EA0-9BC0-77692BD91E1E}
{3881133B-BE58-46FA-978F-558A53004984} = {156E45DF-D59B-4EA0-9BC0-77692BD91E1E}
{EB8E5222-4E85-4EBD-9894-33238CE89662} = {156E45DF-D59B-4EA0-9BC0-77692BD91E1E}
{E0ACC792-32CF-4698-A2DF-5697BD4395F0} = {156E45DF-D59B-4EA0-9BC0-77692BD91E1E}
{68D70001-A1DA-4D99-A828-98346F42C435} = {156E45DF-D59B-4EA0-9BC0-77692BD91E1E}
{D5714C79-0651-4BAB-80D2-65D73B82E2F1} = {156E45DF-D59B-4EA0-9BC0-77692BD91E1E}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {45CD52A2-9BCF-4BCE-BFE4-6512506C0D1F}
EndGlobalSection
EndGlobal