diff --git a/src/Khd.Core.Api/Controllers/RecieveRcsController.cs b/src/Khd.Core.Api/Controllers/RecieveRcsController.cs index cd65964..9fcaf38 100644 --- a/src/Khd.Core.Api/Controllers/RecieveRcsController.cs +++ b/src/Khd.Core.Api/Controllers/RecieveRcsController.cs @@ -25,22 +25,6 @@ namespace Khd.Core.Api.Controllers public ReponseagvCallbackDto agvCallback(agvCallbackDto agvCallbackDto) { LogManager.Info($"RecieveRcsController接口信息:{agvCallbackDto.ToJsonString()}"); - agvCallbackDto.method = "outbin"; - return _application.AgvCallback(agvCallbackDto); - - } - - - /// - /// 接收agv接收任务通知接口 - /// - /// - /// - [HttpPost("agvContinue")] - public ReponseagvCallbackDto agvContinue(agvCallbackDto agvCallbackDto) - { - LogManager.Info($"RecieveRcsController接口信息:{agvCallbackDto.ToJsonString()}"); - agvCallbackDto.method = "continue"; return _application.AgvCallback(agvCallbackDto); } diff --git a/src/Khd.Core.Api/appsettings.json b/src/Khd.Core.Api/appsettings.json index 1114562..73658d4 100644 --- a/src/Khd.Core.Api/appsettings.json +++ b/src/Khd.Core.Api/appsettings.json @@ -12,8 +12,8 @@ "AllowedHosts": "*", "ConnectionStrings": { //"DefaultConnection": "server=175.27.215.92;port=3306;database=hwjy-cloud;uid=kehaida;pwd=khd2024;charset='utf8';persistsecurityinfo=True;SslMode=None;Allow User Variables=True", - "DefaultConnection": "server=175.27.215.92;port=3306;database=hwjy-cloud;uid=kehaida;pwd=khd2024;charset='utf8';persistsecurityinfo=True;SslMode=None;Allow User Variables=True" - //"DefaultConnection": "Data Source=121.36.58.109;Initial Catalog=lanju_op_xiaolan_ds;Persist Security Info=True;User ID=sa;Password=haiwei@123;MultipleActiveResultSets=True;TrustServerCertificate=True" + //"DefaultConnection": "server=175.27.215.92;port=3306;database=hwjy-cloud;uid=kehaida;pwd=khd2024;charset='utf8';persistsecurityinfo=True;SslMode=None;Allow User Variables=True", + "DefaultConnection": "server=localhost;port=3306;database=jyhb;uid=root;pwd=root;charset='utf8';persistsecurityinfo=True;SslMode=None;Allow User Variables=True" }, "JwtSecurityOption": { "SigningKey": "3c41f60c-1d12-11ec-890d-00163e1b8678", diff --git a/src/Khd.Core.Application/WcsTaskApplication.cs b/src/Khd.Core.Application/WcsTaskApplication.cs index e84e88e..a9b227a 100644 --- a/src/Khd.Core.Application/WcsTaskApplication.cs +++ b/src/Khd.Core.Application/WcsTaskApplication.cs @@ -48,11 +48,14 @@ namespace Khd.Core.Application try { //处理逻辑 - var wcscmd = _dbContext.WcsCmd.Where(t => t.objid == Convert.ToInt64(agvCallbackDto.taskCode)).FirstOrDefault(); + var wcscmd = _dbContext.WcsCmd + .Where(t=>t.taskCode==agvCallbackDto.taskCode) + .Where(t => t.taskId == Convert.ToInt64(agvCallbackDto.reqCode)).FirstOrDefault(); if (wcscmd != null) { + //start 开始 end结束 continue继续 //待取货 - if (agvCallbackDto.method == "continue") + if (agvCallbackDto.method.ToLower() == "start") { wcscmd.cmdStatus = 2; wcscmd.sendFlag = 1; @@ -60,7 +63,7 @@ namespace Khd.Core.Application _dbContext.SaveChanges(); } //已取货待放货 - if (agvCallbackDto.method == "compeleted") + if (agvCallbackDto.method.ToLower() == "continue") { wcscmd.cmdStatus = 3; wcscmd.sendFlag = 1; @@ -70,7 +73,7 @@ namespace Khd.Core.Application var list = _dbContext.WcsTask.Where(t => t.objid == wcscmd.taskId).Update(a => new WcsTask() { currPointNo = wcscmd.equipmentNo }); } //放货完成 - if (agvCallbackDto.method == "outbin") + if (agvCallbackDto.method.ToLower() == "end") { wcscmd.cmdStatus = 5; wcscmd.sendFlag = 1; diff --git a/src/Khd.Core.Domain/Dto/webapi/genAgvSchedulingTask.cs b/src/Khd.Core.Domain/Dto/webapi/genAgvSchedulingTask.cs index 5f0e16c..009e5d9 100644 --- a/src/Khd.Core.Domain/Dto/webapi/genAgvSchedulingTask.cs +++ b/src/Khd.Core.Domain/Dto/webapi/genAgvSchedulingTask.cs @@ -26,6 +26,18 @@ namespace Khd.Core.Domain.Dto.webapi public string tokenCode { get; set; } /// /// 任务类型, + /// 业务流程 + /// 5层柜体来料验收拆分 柜体物料 提升机输送线对接位-验收拆分区 WMS F501 2 + /// 5层柜体来料入库 柜体物料 验收拆分区-原材料周转区 WMS F502 2 + /// 5层辅料立体库物料入库 辅料料箱 回转输送线回库口-辅料库货架 WMS F503 1 + /// 5层辅料立体库分拣出库 辅料料箱 辅料库货架-回转输送线出库口 WMS F504 1 + /// 5层辅料立体库分拣回库 辅料料箱 回转输送线回库口-辅料库货架 WMS F505 1 + /// 5层辅料配送流程 辅料料箱 物料分拣位-装配区领料工位 WMS F506 空值 + /// 5层背板安装区物料配送 柜体物料 原材料周转区-背板安装区 WMS F507 2 + /// 5层半成品下线 半成品柜 背板安装区-半成品周转区 WMS F508 2 + /// 5层半成品检验 半成品柜 半成品周转区-检测台 WMS F509 2 + /// 5层成品柜体入库 成品柜体 检验台-成品区 WMS F510 2 + /// 5层成品柜体出库 成品柜体 成品区-提升机输送线对接点 WMS F511 2 /// public string taskTyp { get; set; } /// diff --git a/src/Khd.Core.Domain/Models/BaseEquip.cs b/src/Khd.Core.Domain/Models/BaseEquip.cs index d42fe05..3bf1e7d 100644 --- a/src/Khd.Core.Domain/Models/BaseEquip.cs +++ b/src/Khd.Core.Domain/Models/BaseEquip.cs @@ -17,6 +17,8 @@ namespace Khd.Core.Domain.Models [Table("wcs_base_equip")] public class BaseEquip { + [Column("agv_position_code")] + public string agvPositionCode; [Key] [Column("objid")] diff --git a/src/Khd.Core.Domain/Models/BasePlcpoint.cs b/src/Khd.Core.Domain/Models/BasePlcpoint.cs index 775e402..8610d8d 100644 --- a/src/Khd.Core.Domain/Models/BasePlcpoint.cs +++ b/src/Khd.Core.Domain/Models/BasePlcpoint.cs @@ -20,7 +20,7 @@ namespace Khd.Core.Domain.Models [Key] [Column("id")] - public long id { get; set; } + public long? id { get; set; } /// /// plc点位编码 @@ -38,7 +38,7 @@ namespace Khd.Core.Domain.Models /// 点位长度 /// [Column("plcpoint_length")] - public string plcpointLength { get; set; } + public int? plcpointLength { get; set; } /// /// 点位地址 diff --git a/src/Khd.Core.Domain/Models/WcsCmd.cs b/src/Khd.Core.Domain/Models/WcsCmd.cs index 66d30db..4067f6a 100644 --- a/src/Khd.Core.Domain/Models/WcsCmd.cs +++ b/src/Khd.Core.Domain/Models/WcsCmd.cs @@ -21,7 +21,7 @@ namespace Khd.Core.Domain.Models /// 任务代码 /// [Column("task_code")] - public string taskCode; + public string taskCode { get; set; } [Key] [Column("objid")] diff --git a/src/Khd.Core.Domain/Models/WmsRawOutstock.cs b/src/Khd.Core.Domain/Models/WmsRawOutstock.cs index 80a6e72..cc0873c 100644 --- a/src/Khd.Core.Domain/Models/WmsRawOutstock.cs +++ b/src/Khd.Core.Domain/Models/WmsRawOutstock.cs @@ -64,11 +64,9 @@ namespace Khd.Core.Domain.Models [Column("station_id")] public int? stationId { get; set; } - /// - /// 物料ID,关联物料表物料id - /// - [Column("product_id")] - public long? productId { get; set; } + + [Column("material_id")] + public long? materialId { get; set; } /// /// 物料批次 diff --git a/src/Khd.Core.Domain/Models/WmsRawStock.cs b/src/Khd.Core.Domain/Models/WmsRawStock.cs index a164a4c..684d925 100644 --- a/src/Khd.Core.Domain/Models/WmsRawStock.cs +++ b/src/Khd.Core.Domain/Models/WmsRawStock.cs @@ -141,6 +141,9 @@ namespace Khd.Core.Domain.Models /// [Column("active_flag")] public string activeFlag { get; set; } + + [Column("sale_order_id")] + public long? saleOrderId { get; set; } } } diff --git a/src/Khd.Core.Plc/S7/PlcSynchronous.cs b/src/Khd.Core.Plc/S7/PlcSynchronous.cs index 8c35dc2..774dbcf 100644 --- a/src/Khd.Core.Plc/S7/PlcSynchronous.cs +++ b/src/Khd.Core.Plc/S7/PlcSynchronous.cs @@ -79,6 +79,12 @@ namespace Khd.Core.Plc.S7 return Read(adr.DataType, adr.DbNumber, adr.StartByte, adr.VarType, 1, (byte)adr.BitNumber); } + public object? Read(string variable,VarType varType) + { + var adr = new PLCAddress(variable); + return Read(adr.DataType, adr.DbNumber, adr.StartByte, varType, 1, (byte)adr.BitNumber); + } + /// /// Reads all the bytes needed to fill a struct in C#, starting from a certain address, and return an object that can be casted to the struct. /// diff --git a/src/Khd.Core.Plc/StaticPlcHelper.cs b/src/Khd.Core.Plc/StaticPlcHelper.cs index e65e848..f65e10c 100644 --- a/src/Khd.Core.Plc/StaticPlcHelper.cs +++ b/src/Khd.Core.Plc/StaticPlcHelper.cs @@ -18,19 +18,47 @@ namespace Khd.Core.Plc /// 写入地址 /// 值 /// 长度 - public static void WriteToPoint(this Plc.S7.Plc plc,string address,string valueString,string len) + public static void WriteToPoint(this Plc.S7.Plc plc, string address, string? valueString, string? len) { + if (len == null) + { + throw new ArgumentException("StaticPlcHelper Ex len is null"); + } + if (valueString == null) + { + throw new ArgumentException("StaticPlcHelper Ex valueString is null"); + } var value = GetValue(len, valueString); plc.Write(address, value); } + /// + /// 读取RFID + /// + /// plc + /// 读取地址 + /// 长度 + /// 读取到的RFID + public static string? ReadRFID(this Plc.S7.Plc plc, string address, int len = 36) + { + string[] adds = address.Split("."); + int db = int.Parse(adds[0].Replace("DB", "")); + int startByteAdr = int.Parse(adds[1].Replace("DBX", "")); + var result = (byte[]?)plc.Read(S7.DataType.DataBlock, db, startByteAdr, S7.VarType.Byte, len); + if (result == null) + { + return null; + } + return Encoding.UTF8.GetString(result).Replace("\0", "").Replace("$", "").Trim(); + } + /// /// 电气写入点位高低位转换 /// /// 点位地址位长度 /// 写入数值 /// - private static object GetValue(string len, string value) + public static object GetValue(string? len, string? value) { if (len == "2") { @@ -40,6 +68,10 @@ namespace Khd.Core.Plc { return Convert.ToInt32(value); } + if (len == "6") + { + return Convert.ToByte(value); + } return 0; } } diff --git a/src/Khd.Core.Wcs/Global/PlcConfig.cs b/src/Khd.Core.Wcs/Global/PlcConfig.cs index 37a3ce7..3873161 100644 --- a/src/Khd.Core.Wcs/Global/PlcConfig.cs +++ b/src/Khd.Core.Wcs/Global/PlcConfig.cs @@ -1,8 +1,10 @@ -namespace Khd.Core.Wcs.Global +using Khd.Core.Plc.S7; + +namespace Khd.Core.Wcs.Global { public class PlcConfig { - public int CpuType { get; set; } + public CpuType CpuType { get; set; } public string IP { get; set; } public int Port { get; set; } public short Rack { get; set; } diff --git a/src/Khd.Core.Wcs/MainCentralControl.cs b/src/Khd.Core.Wcs/MainCentralControl.cs index ebce8a2..5d623b9 100644 --- a/src/Khd.Core.Wcs/MainCentralControl.cs +++ b/src/Khd.Core.Wcs/MainCentralControl.cs @@ -1,10 +1,14 @@ using Khd.Core.EntityFramework; +using Khd.Core.Plc; using Khd.Core.Plc.S7; using Khd.Core.Wcs.Global; using Khd.Core.Wcs.Wcs; using Masuit.Tools.Logging; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; +using System.Data; +using System.Net.Http.Headers; +using System.Text; namespace Khd.Core.Wcs { @@ -32,36 +36,35 @@ namespace Khd.Core.Wcs { try { //加载配置项 + + using var scope = _host.Services.CreateScope(); + using var dbContext = scope.ServiceProvider.GetRequiredService(); + //设置程序启动时清空点位的数据=>0为 Int16位 + QingKongDianWei = StaticPlcHelper.GetValue("2", "0"); + //设置默认处理完成=>1为 Int16位 + WcsChuLiWanCheng = StaticPlcHelper.GetValue("2", "1"); + //设置默认去向=>1为 Int16位 + WcsMoRenQuXiang = StaticPlcHelper.GetValue("2", "1"); + + StaticData.BasePlcpointList = dbContext.BasePlcpoint.Where(t => t.isDelete == 0).ToList(); + StaticData.BaseEquip = dbContext.BaseEquip.ToList(); foreach (var plcConfig in StaticData.PlcConfigs) { if (!StaticData.PlcDic.Any(t => t.Key == plcConfig.Code)) { Plc.S7.Plc plc; - plc = new Plc.S7.Plc((CpuType)plcConfig.CpuType, plcConfig.IP, plcConfig.Port, plcConfig.Rack, plcConfig.Slot); - plc.Open(); + plc = new Plc.S7.Plc(plcConfig.CpuType, plcConfig.IP, plcConfig.Port, plcConfig.Rack, plcConfig.Slot); + //plc.Open(); StaticData.PlcDic.TryAdd(plcConfig.Code, plc); } } - using var scope = _host.Services.CreateScope(); - using var dbContext = scope.ServiceProvider.GetRequiredService(); - - //设置程序启动时清空点位的数据=>0为 Int16位 - QingKongDianWei = GetValue("2", "0"); - //设置默认处理完成=>1为 Int16位 - WcsChuLiWanCheng = GetValue("2", "1"); - //设置默认去向=>1为 Int16位 - WcsMoRenQuXiang = GetValue("2", "1"); - - StaticData.BasePlcpointList = dbContext.BasePlcpoint.Where(t => t.isDelete == 0).ToList(); - StaticData.BaseEquip = dbContext.BaseEquip.ToList(); - ////创建任务 //CreateTaskByRecord createTaskByRecord = new(_host, StaticData.PlcDic[0], ""); //createTaskByRecord.StartPoint(); - //一楼提升机以及接驳位 - FirstFloor firstFloor = new(_host, StaticData.PlcDic[0]); - firstFloor.StartPoint(); + ////一楼提升机以及接驳位 + //FirstFloor firstFloor = new(_host, StaticData.PlcDic[0]); + //firstFloor.StartPoint(); ////二层接驳位 //var SecondBaseFloorEquip = StaticData.BaseEquip.Where(t => t.floorNo == 2 && t.equipType == 1).First(); @@ -88,20 +91,20 @@ namespace Khd.Core.Wcs //ThirdFloorAGV thirdFloorAGV = new(_host, StaticData.PlcDic[0], ThirdFloorAgvEquip.floorNo.Value, ThirdFloorAgvEquip.equipNo); //thirdFloorAGV.StartPoint(); - //五层接驳位 - var FifthBaseFloorEquip = StaticData.BaseEquip.Where(t => t.floorNo == 5 && t.equipType == 1).First(); - FiveFloorPoint fifthFloorPoint = new(_host, StaticData.PlcDic[0], FifthBaseFloorEquip.floorNo.Value, FifthBaseFloorEquip.equipNo); - fifthFloorPoint.StartPoint(); + ////五层接驳位 + //var FifthBaseFloorEquip = StaticData.BaseEquip.Where(t => t.floorNo == 5 && t.equipType == 1).First(); + //FiveFloorPoint fifthFloorPoint = new(_host, StaticData.PlcDic[0], FifthBaseFloorEquip.floorNo.Value, FifthBaseFloorEquip.equipNo); + //fifthFloorPoint.StartPoint(); ////五层线体 //var FiveFloorLineEquip = StaticData.BaseEquip.Where(t => t.floorNo == 4 && t.equipType == 3).First(); //FiveFloorLine fiveFloorLine = new(_host, StaticData.PlcDic[0], FiveFloorLineEquip.floorNo.Value, FiveFloorLineEquip.equipNo); //fiveFloorLine.StartPoint(); - ////五层CTU - //var FiveFloorCTUEquip = StaticData.BaseEquip.Where(t => t.floorNo == 5 && t.equipType == 6).First(); - //FiveFloorCTU fiveFloorCTU = new(_host, StaticData.PlcDic[0], FiveFloorCTUEquip.floorNo.Value, FiveFloorCTUEquip.equipNo); - //fiveFloorCTU.StartPoint(); + //五层CTU + var FiveFloorCTUEquip = StaticData.BaseEquip.Where(t => t.floorNo == 5 && t.equipType == 6).First(); + FiveFloorCTU fiveFloorCTU = new(_host, StaticData.PlcDic[0], FiveFloorCTUEquip.floorNo.Value, FiveFloorCTUEquip.equipNo); + fiveFloorCTU.StartPoint(); ////五层AGV //var FifthFloorAgvEquip = StaticData.BaseEquip.Where(t => t.floorNo == 5 && t.equipType == 5).First(); @@ -115,23 +118,5 @@ namespace Khd.Core.Wcs } } - /// - /// 电气写入点位高低位转换 - /// - /// 点位地址位长度 - /// 写入数值 - /// - public static object GetValue(string len, string value) - { - if (len == "2") - { - return Convert.ToInt16(value); - } - if (len == "4") - { - return Convert.ToInt32(value); - } - return 0; - } } } diff --git a/src/Khd.Core.Wcs/Wcs/SystemData.cs b/src/Khd.Core.Wcs/SystemData.cs similarity index 90% rename from src/Khd.Core.Wcs/Wcs/SystemData.cs rename to src/Khd.Core.Wcs/SystemData.cs index a3948ed..c1c7b19 100644 --- a/src/Khd.Core.Wcs/Wcs/SystemData.cs +++ b/src/Khd.Core.Wcs/SystemData.cs @@ -5,7 +5,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; -namespace Khd.Core.Wcs.Wcs +namespace Khd.Core.Wcs { public class SystemData { @@ -21,7 +21,7 @@ namespace Khd.Core.Wcs.Wcs while (list.Contains(_serialNo)) { _serialNo++; - if(_serialNo > 9999) + if (_serialNo > 9999) { _serialNo = 1; } @@ -29,6 +29,6 @@ namespace Khd.Core.Wcs.Wcs return _serialNo; } } - + } } diff --git a/src/Khd.Core.Wcs/Wcs/CreateTaskByRecord.cs b/src/Khd.Core.Wcs/Wcs/CreateTaskByRecord.cs index 34acc02..ead0c82 100644 --- a/src/Khd.Core.Wcs/Wcs/CreateTaskByRecord.cs +++ b/src/Khd.Core.Wcs/Wcs/CreateTaskByRecord.cs @@ -5,7 +5,9 @@ using Khd.Core.Wcs.Global; using Masuit.Tools.Logging; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; +using SixLabors.ImageSharp; using System.Data; +using System.Security.Cryptography; using Z.EntityFramework.Plus; namespace Khd.Core.Wcs.Wcs @@ -61,7 +63,7 @@ namespace Khd.Core.Wcs.Wcs var FlowPointThread = new Thread(MonitorInLocatorPoint); FlowPointThread.Start(); - Console.WriteLine(DateTime.Now+":出库任务监听启动成功"); + Console.WriteLine(DateTime.Now + ":出库任务监听启动成功"); LogManager.Info("出库任务监听启动成功"); } public void MonitorInLocatorPoint() @@ -148,80 +150,186 @@ namespace Khd.Core.Wcs.Wcs } } + + /// + /// 原材料出库 + /// public void CreateRawTask() { using var scope = _host.Services.CreateScope(); using var dbContext = scope.ServiceProvider.GetRequiredService(); //原材料库存 - var rawStock = dbContext.WmsRawStock.Where(t => t.activeFlag == "0").ToList(); + var rawStock = dbContext.WmsRawStock.Where(t => t.activeFlag == "1").ToList(); //原材料出库记录 - var rawOutStock = dbContext.WmsRawOutstock.Where(t => t.executeStatus == "0").ToList(); + var rawOutStock = dbContext.WmsRawOutstock + .Where(t => t.executeStatus != "2").ToList(); foreach (var item in rawOutStock) { //自动获取id + if (item.warehouseId == 512)//CTU出库 + { + var wmsRawStocks = rawStock + .Where(t => t.materialId == item.materialId && t.warehouseId == item.warehouseId) + .Select(t => t.palletInfoCode) + .ToList(); - var objid = StaticData.SnowId.NextId(); - long orderID = 0; - //插入锁定库存 - WcsOutstockLock stockLock = new() - { - objid = objid, - materialId = item.productId, - qty = 1, - warehouseId = item.warehouseId, - wmsOrderId = item.rawOutstockId, - wmsOrderDetailId = item.rawOutstockId, - createBy = "sys", - createTime = DateTime.Now - }; - dbContext.Add(stockLock); - if (item.warehouseId == 5)//五楼辅料出库 - { - //辅料出库时,需创建订单表数据 - orderID = StaticData.SnowId.NextId(); - WcsWarehouseOrder order = new() + var wmsBaseLocations = dbContext.WmsBaseLocation + .Where(t => t.activeFlag == "1") + .Where(t => t.delFlag == "0") + .Where(t => t.locationScrapType == "1") + .Where(t => t.instockFlag == "0") + .Where(t => t.outstockFlag == "0") + .Where(t => t.warehouseId == item.warehouseId) + .Where(t => wmsRawStocks.Contains(t.containerCode)) + .ToList(); + + decimal needNumber = item.outstockAmount - item.realOutstockAmount; + if (needNumber <= 0) { - objid = orderID, - wmsOrderId = item.rawOutstockId, - orderType = Convert.ToInt32(item.taskType), - qty = 1, - createBy = "", - createTime = DateTime.Now - }; - dbContext.Add(order); + item.executeStatus = "2"; + dbContext.Update(item); + dbContext.SaveChanges(); + continue; + } + + var bill = from a in wmsBaseLocations + from b in rawStock + where a.containerCode == b.palletInfoCode + select new { a, b }; + //如果第一列满足需求,则按第一列排序,否则按最后一列排序 + if (bill.Where(t => t.a.locColumn == 1).Select(t => t.b.totalAmount - t.b.occupyAmount - t.b.frozenAmount).Sum() > needNumber) + { + bill = bill.OrderBy(t => t.a.locColumn).ToList(); + } + else + { + bill = bill.OrderByDescending(t => t.a.locColumn).ToList(); + } + //做数量限制 + + bill = bill.Take(5 - dbContext.WcsCmd.Where(t => t.cmdStatus < 3 && t.nextPointId == 20).Count()); + BaseEquip ctuEquip = StaticData.BaseEquip.First(t => t.objid == 11); + BaseEquip lineEquip = StaticData.BaseEquip.First(t => t.objid == 20); + foreach (var b in bill) + { + item.executeStatus = "1"; + WmsBaseLocation location = b.a; + WmsRawStock stock = b.b; + WcsTask wcsTask; + int qty = 0; + if (stock.totalAmount - stock.occupyAmount - stock.frozenAmount <= needNumber)//该料箱全部出 + { + item.realOutstockAmount += stock.totalAmount - stock.occupyAmount - stock.frozenAmount; + qty = Convert.ToInt32(stock.totalAmount - stock.frozenAmount); + stock.occupyAmount += qty; + stock.updateDate = DateTime.Now; + } + else + { + item.realOutstockAmount += needNumber; + stock.occupyAmount += needNumber; + qty = Convert.ToInt32(needNumber); + stock.updateDate = DateTime.Now; + } + wcsTask = new WcsTask() + { + objid = StaticData.SnowId.NextId(), + orderId = item.rawOutstockId, + taskType = 38, + containerNo = location.containerCode, + createBy = "WCS", + createTime = DateTime.Now, + taskStatus = 0, + materialId = item.materialId, + currPointId = location.locationId, + currPointNo = location.locationCode, + startPointId = location.locationId, + startPointNo = location.locationCode, + nextPointId = ctuEquip.objid, + nextPointNo = ctuEquip.equipNo, + endPointId = lineEquip.objid, + endPointNo = lineEquip.equipNo, + equipmentNo = ctuEquip.equipNo, + useFlag = 1, + qty = qty + }; + dbContext.Add(wcsTask); + dbContext.Update(stock); + dbContext.SaveChanges(); + if (qty == needNumber) + { + break; + } + } + dbContext.Update(item); + dbContext.SaveChanges(); } - var dic = StaticData.BaseDictionary.Where(t => t.dicKey == "TaskType" && t.ud1 == "O").FirstOrDefault(); - if(dic!= null) + else { - WcsTask rawTask = new() - { - objid = StaticData.SnowId.NextId(), - orderId = item.rawOutstockId, - masterId = orderID, - taskType = Convert.ToInt32(dic.dicValue), - containerNo = "", - taskStatus = 0, - materialId = item.warehouseId, - qty = 1, - startPointId = item.warehouseId, - startPointNo = "", - currPointId = item.warehouseId, - currPointNo = "", - endPointId = item.warehouseId, - endPointNo = "" - }; - dbContext.Add(rawTask); - //获取最早入库时间 - var firstDate = rawStock.Where(t => t.materialId == item.productId && t.warehouseId == item.warehouseId).OrderBy(t => t.createDate).FirstOrDefault(); - - //回写wms出库记录表 - dbContext.WmsRawOutstock.Where(t => t.rawOutstockId == item.rawOutstockId).Update(t => new WmsProductOutstock() - { - executeStatus = "1", - updateDate = DateTime.Now - }); } + //var objid = StaticData.SnowId.NextId(); + //long orderID = 0; + ////插入锁定库存 + //WcsOutstockLock stockLock = new() + //{ + // objid = objid, + // materialId = item.productId, + // qty = 1, + // warehouseId = item.warehouseId, + // wmsOrderId = item.rawOutstockId, + // wmsOrderDetailId = item.rawOutstockId, + // createBy = "sys", + // createTime = DateTime.Now + //}; + //dbContext.Add(stockLock); + //if (item.warehouseId == 5)//五楼辅料出库 + //{ + // //辅料出库时,需创建订单表数据 + // orderID = StaticData.SnowId.NextId(); + // WcsWarehouseOrder order = new() + // { + // objid = orderID, + // wmsOrderId = item.rawOutstockId, + // orderType = Convert.ToInt32(item.taskType), + // qty = 1, + // createBy = "", + // createTime = DateTime.Now + // }; + // dbContext.Add(order); + //} + //var dic = StaticData.BaseDictionary.Where(t => t.dicKey == "TaskType" && t.ud1 == "O").FirstOrDefault(); + //if (dic != null) + //{ + // WcsTask rawTask = new() + // { + // objid = StaticData.SnowId.NextId(), + // orderId = item.rawOutstockId, + // masterId = orderID, + // taskType = Convert.ToInt32(dic.dicValue), + // containerNo = "", + // taskStatus = 0, + // materialId = item.materialId, + // qty = 1, + // startPointId = item.warehouseId, + // startPointNo = "", + // currPointId = item.warehouseId, + // currPointNo = "", + // endPointId = item.warehouseId, + // endPointNo = "" + // }; + // dbContext.Add(rawTask); + + // //获取最早入库时间 + // var firstDate = rawStock.Where(t => t.materialId == item.productId && t.warehouseId == item.warehouseId).OrderBy(t => t.createDate).FirstOrDefault(); + + // //回写wms出库记录表 + // dbContext.WmsRawOutstock.Where(t => t.rawOutstockId == item.rawOutstockId).Update(t => new WmsProductOutstock() + // { + // executeStatus = "1", + // updateDate = DateTime.Now + // }); + //} } } diff --git a/src/Khd.Core.Wcs/Wcs/FirstFloor.cs b/src/Khd.Core.Wcs/Wcs/FirstFloor.cs index 75739dc..557a8d9 100644 --- a/src/Khd.Core.Wcs/Wcs/FirstFloor.cs +++ b/src/Khd.Core.Wcs/Wcs/FirstFloor.cs @@ -3,6 +3,7 @@ using Khd.Core.Application.Interface; using Khd.Core.Domain.Models; using Khd.Core.EntityFramework; using Khd.Core.Plc; +using Khd.Core.Plc.S7; using Khd.Core.Wcs.Global; using Masuit.Tools.Logging; using Microsoft.Extensions.DependencyInjection; @@ -17,9 +18,9 @@ namespace Khd.Core.Wcs.Wcs public class FirstFloor { private readonly IHost _host; - private readonly Plc.S7.Plc _plc; - private long F01 = 1; - private long T01 = 6; + private Plc.S7.Plc _plc; + private readonly long F01 = 1; + private readonly long T01 = 6; /// /// 一楼RFID 读 /// @@ -29,10 +30,6 @@ namespace Khd.Core.Wcs.Wcs /// private readonly BasePlcpoint linesignal01; /// - /// 去向 写 - /// - private readonly BasePlcpoint wcsrun01; - /// /// 提升机流水号 读 /// private readonly BasePlcpoint serialno06; @@ -67,9 +64,6 @@ namespace Khd.Core.Wcs.Wcs this.RFID001 = StaticData.BasePlcpointList.First(t => t.equipmentNo.Contains("FirstFloorLine") && t.plcpointNo.Contains("RFID001")); //到位信号 读 this.linesignal01 = StaticData.BasePlcpointList.First(t => t.equipmentNo.Contains("FirstFloorLine") && t.plcpointNo.Contains("linesignal01")); - //去向 写 - this.wcsrun01 = StaticData.BasePlcpointList.First(t => t.equipmentNo.Contains("FirstFloorLine") && t.plcpointNo.Contains("wcsrun01")); - //一楼提升机流水号 读 this.serialno06 = StaticData.BasePlcpointList.First(t => t.equipmentNo.Contains("Hoister") && t.plcpointNo.Contains("serialno06")); @@ -91,14 +85,18 @@ namespace Khd.Core.Wcs.Wcs /// public void StartPoint() { - Thread firstFloorLine = new Thread(FirstFloorLine); - firstFloorLine.IsBackground = true; + Thread firstFloorLine = new(FirstFloorLine) + { + IsBackground = true + }; firstFloorLine.Start(); Console.WriteLine(DateTime.Now + ":一楼接驳位线程启动成功"); LogManager.Info("一楼接驳位线程启动成功"); - Thread firstFloorHoister = new Thread(FirstFloorHoister); - firstFloorHoister.IsBackground = true; + Thread firstFloorHoister = new(FirstFloorHoister) + { + IsBackground = true + }; firstFloorHoister.Start(); Console.WriteLine(DateTime.Now + ":一楼提升机线程启动成功"); LogManager.Info("一楼提升机线程启动成功"); @@ -116,9 +114,8 @@ namespace Khd.Core.Wcs.Wcs { try { - var RFID001Value = this._plc.Read(this.RFID001.plcpointAddress); //一楼RFID 读 + var RFID001Value = this._plc.ReadRFID(this.RFID001.plcpointAddress); //一楼RFID 读 var linesignal01Value = this._plc.Read(this.linesignal01.plcpointAddress); //到位信号 读 - var wcsrun01Value = this._plc.Read(this.wcsrun01.plcpointAddress); //去向 写 //正常读到plc值 if (linesignal01Value != null && RFID001Value != null) @@ -126,15 +123,14 @@ namespace Khd.Core.Wcs.Wcs //正常托盘到位 if (Convert.ToInt32(linesignal01Value) == 1) { - //判断task表里没有该rfid的未完成的入库信息,未下发去向 - var task = dbContext.WcsTask.Where(t => t.containerNo == RFID001Value.ToString() && t.taskStatus < 1).FirstOrDefault(); + var task = dbContext.WcsTask.Where(t => t.containerNo == RFID001Value && t.taskStatus < 1).FirstOrDefault(); if (task == null) { //入库 //根据托盘号获取物料码 - var material = dbContext.MesBasePalletInfo.Where(t => t.palletInfoCode == RFID001Value.ToString()).FirstOrDefault(); + var material = dbContext.MesBasePalletInfo.Where(t => t.palletInfoCode == RFID001Value).FirstOrDefault(); if (material != null) { var warehouseId = dbContext.WmsWarehouseMaterial.Where(t => t.storageType == "1" && t.storageId == material.materialId).FirstOrDefault()?.warehouseId; @@ -151,11 +147,11 @@ namespace Khd.Core.Wcs.Wcs var newTask = new WcsTask() { objid = StaticData.SnowId.NextId(), - serialNo = 1235, + serialNo = SystemData.GetSerialNo(dbContext), equipmentNo = "F01", taskType = Convert.ToInt32(dic.dicValue), taskStatus = 0, - containerNo = RFID001Value.ToString(), + containerNo = RFID001Value, materialNo = material.materialCode, materialId = material.materialId, qty = Convert.ToInt32(material.bindAmount), @@ -179,35 +175,58 @@ namespace Khd.Core.Wcs.Wcs } } } - else if (Itpyes.Contains(task.taskType)) + else if (Itpyes.Contains(task.taskType))//按照正常任务下发 { - task.currPointId = F01; - task.currPointNo = "F01"; - task.nextPointId = T01; - task.nextPointNo = "T01"; - task.taskStatus = 0; - task.updateBy = "一楼接驳位线程"; - task.updateTime = DateTime.Now; - task.remark = "一楼创建入库任务"; - dbContext.WcsTask.Update(task); - dbContext.SaveChanges(); + if (task.nextPointId != T01) + { + task.currPointId = F01; + task.currPointNo = "F01"; + task.nextPointId = T01; + task.nextPointNo = "T01"; + task.taskStatus = 0; + task.updateBy = "一楼接驳位线程"; + task.updateTime = DateTime.Now; + task.remark = "一楼创建入库任务"; + dbContext.WcsTask.Update(task); + dbContext.SaveChanges(); + } } //出库 else { //清空托盘绑定 - //var material = dbContext.MesBasePalletInfo.Where(t => t.palletInfoCode == RFID001Value.ToString()).FirstOrDefault(); - //if (material != null) - //{ - // dbContext.MesBasePalletInfo.Where(t => t.palletInfoCode == RFID001Value.ToString()).Delete(); - // dbContext.SaveChanges(); - //} + var material = dbContext.MesBasePalletInfo.Where(t => t.palletInfoCode == RFID001Value).FirstOrDefault(); + if (material != null) + { + material.bindAmount = 0; + material.materialBarcode = null; + material.materialCode = null; + material.materialId = null; + material.materialName = null; + material.updateBy = "SYS"; + material.updateTime = DateTime.Now; + dbContext.Update(material); + //dbContext.MesBasePalletInfo.Where(t => t.palletInfoCode == RFID001Value).Delete(); + dbContext.SaveChanges(); + } } } } } catch (Exception ex) { + if (ex is PlcException) + { + try + { + this._plc = new Plc.S7.Plc(this._plc.CPU, this._plc.IP, this._plc.Port, this._plc.Rack, this._plc.Slot); + this._plc.Open(); + } + catch + { + + } + } LogManager.Error(ex); } Thread.Sleep(1000); @@ -228,7 +247,7 @@ namespace Khd.Core.Wcs.Wcs var serialno06Value = this._plc.Read(this.serialno06.plcpointAddress); //提升机流水号 读 var equipstate06Value = this._plc.Read(this.equipstate06.plcpointAddress); //提升机状态 读 var hoisterTrayIn06Value = this._plc.Read(this.hoistertrayin06.plcpointAddress); //提升机货物到位状态 读 - var currentfloor06Value = this._plc.Read(this.currentfloor06.plcpointAddress); //提升机当前楼层 写 + var currentfloor06Value = this._plc.Read(this.currentfloor06.plcpointAddress); //提升机当前楼层 读 var targetfloor06Value = this._plc.Read(this.targetfloor06.plcpointAddress); //提升机目的楼层 写 var reserialno06 = this._plc.Read(this.reserialno06.plcpointAddress); //反馈流水号 @@ -241,7 +260,7 @@ namespace Khd.Core.Wcs.Wcs var wcsTask = dbContext.WcsTask.Where(t => t.nextPointId == T01).OrderBy(t => t.createTime).FirstOrDefault(); if (wcsTask != null) { - if (wcsTask.taskStatus == 0)//创建 + if (wcsTask.taskStatus == 0 && Convert.ToInt32(hoisterTrayIn06Value) == 0)//创建状态,并且里面没有货物 { if (Convert.ToInt32(currentfloor06Value) == wcsTask.fromFloorNo) { @@ -250,7 +269,8 @@ namespace Khd.Core.Wcs.Wcs wcsTask.updateTime = DateTime.Now; wcsTask.remark = "提升机任务执行中"; BasePlcpoint basePlcpoint = StaticData.BasePlcpointList.First(t => t.floorNo == wcsTask.fromFloorNo && t.plcpointNo.Contains("wcsrun")); - this._plc.WriteToPoint(basePlcpoint.plcpointAddress, "1", basePlcpoint.plcpointLength); + this._plc.WriteToPoint(basePlcpoint.plcpointAddress, "1", basePlcpoint.plcpointLength.ToString()); + this._plc.WriteToPoint(this.serialno06.plcpointAddress, wcsTask.serialNo.ToString(), this.serialno06.plcpointLength.ToString()); dbContext.Update(wcsTask); dbContext.SaveChanges(); } @@ -260,12 +280,13 @@ namespace Khd.Core.Wcs.Wcs wcsTask.updateBy = "提升机线程"; wcsTask.updateTime = DateTime.Now; wcsTask.remark = "提升机任务执行中"; - this._plc.WriteToPoint(this.targetfloor06.plcpointAddress, wcsTask.fromFloorNo.ToString(),this.targetfloor06.plcpointLength);//目的地楼层 + this._plc.WriteToPoint(this.targetfloor06.plcpointAddress, wcsTask.fromFloorNo.ToString(), this.targetfloor06.plcpointLength.ToString());//目的地楼层 + this._plc.WriteToPoint(this.serialno06.plcpointAddress, wcsTask.serialNo.ToString(), this.serialno06.plcpointLength.ToString()); dbContext.Update(wcsTask); dbContext.SaveChanges(); } } - if (wcsTask.taskStatus == 1) + if (wcsTask.taskStatus == 1 && Convert.ToInt32(reserialno06) == wcsTask.serialNo) { if (Convert.ToInt32(currentfloor06Value) == wcsTask.fromFloorNo)//提升机当前楼层为初始地楼层 { @@ -274,12 +295,12 @@ namespace Khd.Core.Wcs.Wcs wcsTask.updateTime = DateTime.Now; wcsTask.remark = "提升机任务执行中"; BasePlcpoint basePlcpoint = StaticData.BasePlcpointList.First(t => t.floorNo == wcsTask.fromFloorNo && t.plcpointNo.Contains("wcsrun")); - this._plc.WriteToPoint(basePlcpoint.plcpointAddress, "1", basePlcpoint.plcpointLength); + this._plc.WriteToPoint(basePlcpoint.plcpointAddress, "1", basePlcpoint.plcpointLength.ToString()); dbContext.Update(wcsTask); dbContext.SaveChanges(); } } - if (wcsTask.taskStatus == 2) + if (wcsTask.taskStatus == 2 && Convert.ToInt32(reserialno06) == wcsTask.serialNo) { if (Convert.ToInt32(hoisterTrayIn06Value) == 1)//托盘已经进提升机 { @@ -287,19 +308,19 @@ namespace Khd.Core.Wcs.Wcs wcsTask.updateBy = "提升机线程"; wcsTask.updateTime = DateTime.Now; wcsTask.remark = "提升机任务执行完成"; - this._plc.WriteToPoint(this.targetfloor06.plcpointAddress, wcsTask.floorNo.ToString(),this.targetfloor06.plcpointLength);//目的地楼层 + this._plc.WriteToPoint(this.targetfloor06.plcpointAddress, wcsTask.floorNo.ToString(), this.targetfloor06.plcpointLength.ToString());//目的地楼层 dbContext.Update(wcsTask); dbContext.SaveChanges(); } } - if (wcsTask.taskStatus == 3 && Convert.ToInt32(currentfloor06Value) == wcsTask.floorNo)//任务状态为3,且当前楼层为任务的目的楼层 + if (wcsTask.taskStatus == 3 && Convert.ToInt32(currentfloor06Value) == wcsTask.floorNo && Convert.ToInt32(reserialno06) == wcsTask.serialNo)//任务状态为3,且当前楼层为任务的目的楼层 { wcsTask.taskStatus = 4; wcsTask.updateBy = "提升机线程"; wcsTask.updateTime = DateTime.Now; wcsTask.remark = "提升机任务执行完成"; BasePlcpoint basePlcpoint = StaticData.BasePlcpointList.First(t => t.floorNo == wcsTask.fromFloorNo && t.plcpointNo.Contains("wcsrun")); - this._plc.WriteToPoint(basePlcpoint.plcpointAddress, "2", basePlcpoint.plcpointLength);//去向为2,表示提升机已到达目的地,让货出去 + this._plc.WriteToPoint(basePlcpoint.plcpointAddress, "2", basePlcpoint.plcpointLength.ToString());//去向为2,表示提升机已到达目的地,让货出去 dbContext.Update(wcsTask); dbContext.SaveChanges(); } @@ -309,6 +330,18 @@ namespace Khd.Core.Wcs.Wcs } catch (Exception ex) { + if (ex is PlcException) + { + try + { + this._plc = new Plc.S7.Plc(this._plc.CPU, this._plc.IP, this._plc.Port, this._plc.Rack, this._plc.Slot); + this._plc.Open(); + } + catch + { + + } + } LogManager.Error(ex); } Thread.Sleep(1000); diff --git a/src/Khd.Core.Wcs/Wcs/FiveFloorAGV.cs b/src/Khd.Core.Wcs/Wcs/FiveFloorAGV.cs index b8b93cd..9953ba1 100644 --- a/src/Khd.Core.Wcs/Wcs/FiveFloorAGV.cs +++ b/src/Khd.Core.Wcs/Wcs/FiveFloorAGV.cs @@ -1,4 +1,5 @@ -using Khd.Core.Domain.Dto.webapi; +using Jc.SnowId; +using Khd.Core.Domain.Dto.webapi; using Khd.Core.Domain.Models; using Khd.Core.EntityFramework; using Khd.Core.Wcs.Global; @@ -21,10 +22,8 @@ namespace Khd.Core.Wcs.Wcs private readonly BasePlcpoint LineRFID; private readonly BasePlcpoint LineWcsrun; private readonly BasePlcpoint LineSignal; - private readonly BasePlcpoint LineIsPallet; - private readonly BasePlcpoint LineSerialNO; int FloorNo { get; set; } - string EquipNo = ""; + private readonly string EquipNo = ""; int agvID = 10; public FiveFloorAGV(IHost host, Plc.S7.Plc plc, int floor, string equipNo) { @@ -36,8 +35,6 @@ namespace Khd.Core.Wcs.Wcs this.LineRFID = this.ScanPoint.First(t => t.plcpointNo.Contains("RFID")); this.LineWcsrun = this.ScanPoint.First(t => t.plcpointNo.Contains("wcsrun")); this.LineSignal = this.ScanPoint.First(t => t.plcpointNo.Contains("linesignal")); - this.LineIsPallet = this.ScanPoint.First(t => t.plcpointNo.Contains("ispallet")); - this.LineSerialNO = this.ScanPoint.First(t => t.plcpointNo.Contains("serialno")); //var lineRFID = this._plc.Read(NodeSettingCarNo.plcpointAddress); try { @@ -56,7 +53,7 @@ namespace Khd.Core.Wcs.Wcs public void StartPoint() { - Thread FlowPointThread = new Thread(MonitorInLocatorPoint); + Thread FlowPointThread = new(MonitorInLocatorPoint); FlowPointThread.Start(); Console.WriteLine(DateTime.Now + ":五楼AGV上件扫描监听启动成功"); LogManager.Info("五楼AGV上件扫描监听启动成功"); @@ -80,48 +77,120 @@ namespace Khd.Core.Wcs.Wcs { if (item.taskStatus == 0)//下发任务 { - BaseEquip baseEquip = StaticData.BaseEquip.First(t => t.floorNo == 5 && t.equipType == 1); - WcsCmd wcsCmd = new WcsCmd() + if (taskType.Contains(item.taskType))//入库任务 { - objid = item.objid, - cmdStatus = 0, - taskId = item.orderId, - useFlag = 1, - cmdType = item.taskType, - containerNo = item.containerNo, - createTime = DateTime.Now, - createBy = FloorNo + "楼AGV", - currPointId = baseEquip.objid, - currPointNo = baseEquip.equipNo, - nextPointId = item.endPointId, - nextPointNo = item.endPointNo, - }; - RequestAGVTaskDto agvTask = new RequestAGVTaskDto(); - agvTask.reqCode = item.objid.ToString(); - agvTask.positionCodePath = new List - { - new Position + if (Convert.ToInt32(this._plc.Read(LineSignal.plcpointAddress)) == 1) { - positionCode=wcsCmd.currPointNo, - type="1" - }, - new Position - { - positionCode=wcsCmd.nextPointNo, - type="2" + Console.WriteLine($"{DateTime.Now}:5楼接驳位上有货,无法下发Agv出库任务"); + continue; } - }; - string message = JsonConvert.SerializeObject(agvTask); - string result = HttpHelper.HttpPost("http://172.16.12.24:8182/rcms/services/rest/hikRpcService/genAgvSchedulingTask", message); - var reponseMessage = JsonConvert.DeserializeObject(result); - if (reponseMessage != null && reponseMessage.message == "成功") + WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.endPointId); + BaseEquip baseEquip = StaticData.BaseEquip.First(t => t.floorNo == 5 && t.equipType == 1); + WcsCmd wcsCmd = new() + { + objid = StaticData.SnowId.NextId(), + cmdStatus = 0, + taskId = item.objid, + useFlag = 1, + cmdType = item.taskType, + containerNo = item.containerNo, + createTime = DateTime.Now, + createBy = FloorNo + "楼AGV", + currPointId = item.currPointId, + currPointNo = baseEquip.agvPositionCode, + nextPointId = item.endPointId, + nextPointNo = wmsBaseLocation.agvPositionCode, + }; + var agvTask = new RequestAGVTaskDto + { + reqCode = item.objid.ToString(), + positionCodePath = new List + { + new () + { + positionCode=wcsCmd.currPointNo, + type="1" + }, + new () + { + positionCode=wcsCmd.nextPointNo, + type="2" + } + }, + ctnrTyp = "2", + }; + string message = JsonConvert.SerializeObject(agvTask); + string result = HttpHelper.SendPostMessage("172.16.12.24", 8182, "rcms/services/rest/hikRpcService/genAgvSchedulingTask", message); + var reponseMessage = JsonConvert.DeserializeObject(result); + if (reponseMessage != null && reponseMessage.message == "成功") + { + wcsCmd.taskCode = reponseMessage.data; + wcsCmd.cmdStatus = 1; + item.taskStatus = 1; + dbContext.Update(item); + dbContext.Add(wcsCmd); + dbContext.SaveChanges(); + } + else + { + + } + } + else//出库任务 { - wcsCmd.taskCode = reponseMessage.data; - wcsCmd.cmdStatus = 1; - item.taskStatus = 1; - dbContext.Update(item); - dbContext.Add(wcsCmd); - dbContext.SaveChanges(); + if (Convert.ToInt32(this._plc.Read(LineSignal.plcpointAddress)) == 1) + { + Console.WriteLine($"{DateTime.Now}:5楼接驳位上有货,无法下发Agv出库任务"); + continue; + } + WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.startPointId); + BaseEquip baseEquip = StaticData.BaseEquip.First(t => t.floorNo == 5 && t.equipType == 1); + WcsCmd wcsCmd = new() + { + objid = item.objid, + cmdStatus = 0, + taskId = item.orderId, + useFlag = 1, + cmdType = item.taskType, + containerNo = item.containerNo, + createTime = DateTime.Now, + createBy = FloorNo + "楼AGV", + currPointId = item.currPointId, + currPointNo = wmsBaseLocation.agvPositionCode, + nextPointId = item.endPointId, + nextPointNo = baseEquip.agvPositionCode, + }; + RequestAGVTaskDto agvTask = new() + { + reqCode = item.objid.ToString(), + positionCodePath = new List + { + new () + { + positionCode=wcsCmd.currPointNo, + type="1" + }, + new () + { + positionCode=wcsCmd.nextPointNo, + type="2" + } + }, + taskTyp = "", + ctnrTyp = "2" + }; + string message = JsonConvert.SerializeObject(agvTask); + string result = HttpHelper.HttpPost("http://172.16.12.24:8182/rcms/services/rest/hikRpcService/genAgvSchedulingTask", message); + var reponseMessage = JsonConvert.DeserializeObject(result); + if (reponseMessage != null && reponseMessage.message == "成功") + { + wcsCmd.taskCode = reponseMessage.data; + wcsCmd.cmdStatus = 1; + item.taskStatus = 1; + dbContext.Update(item); + dbContext.Add(wcsCmd); + dbContext.SaveChanges(); + } } } else @@ -131,11 +200,13 @@ namespace Khd.Core.Wcs.Wcs { if (wcsCmd.cmdStatus == 2) { - RequestAGVTaskDto agvTask = new RequestAGVTaskDto(); - agvTask.reqCode = item.objid.ToString(); - agvTask.taskCode = wcsCmd.taskCode; + var agvTask = new RequestAGVTaskDto + { + reqCode = item.objid.ToString(), + taskCode = wcsCmd.taskCode + }; string message = JsonConvert.SerializeObject(agvTask); - string result = HttpHelper.HttpPost("http://172.16.12.24:8182/rcms/services/rest/hikRpcService/continueTask", message); + string result = HttpHelper.SendPostMessage("172.16.12.24", 8182, "rcms/services/rest/hikRpcService/continueTask", message); ReponseMessage? reponseMessage = JsonConvert.DeserializeObject(result); if (reponseMessage != null && reponseMessage.message == "成功") { @@ -144,7 +215,7 @@ namespace Khd.Core.Wcs.Wcs dbContext.SaveChanges(); } } - else if (wcsCmd.cmdStatus == 4) + else if (wcsCmd.cmdStatus == 5) { //任务完成 //如果是入库任务,更新库存信息,并删除任务 @@ -209,8 +280,8 @@ namespace Khd.Core.Wcs.Wcs var wareHouseList = StaticData.WmsBaseWarehouse.ToList(); var equip = StaticData.BaseEquip.Where(t => t.floorNo == floorNo && t.equipType == 4).FirstOrDefault(); //入库类型 - List taskInType = new List { 1, 3, 5, 7 }; - List taskOutType = new List { 2, 4, 6, 8 }; + List taskInType = new() { 1, 3, 5, 7 }; + List taskOutType = new() { 2, 4, 6, 8 }; try { //获取条码号,如果该条码任务存在就继续任务,如果条码不存在,创建入库任务并调度agv diff --git a/src/Khd.Core.Wcs/Wcs/FiveFloorCTU.cs b/src/Khd.Core.Wcs/Wcs/FiveFloorCTU.cs index 2f8b283..f7076cb 100644 --- a/src/Khd.Core.Wcs/Wcs/FiveFloorCTU.cs +++ b/src/Khd.Core.Wcs/Wcs/FiveFloorCTU.cs @@ -19,10 +19,8 @@ namespace Khd.Core.Wcs.Wcs private readonly IHost _host; private readonly Plc.S7.Plc _plc; private readonly BasePlcpoint LineRFID; - private readonly BasePlcpoint LineWcsrun; - private readonly BasePlcpoint LineSignal; - private readonly BasePlcpoint LineIsPallet; - private readonly BasePlcpoint LineSerialNO; + private readonly BasePlcpoint isarrive; + private readonly BasePlcpoint isput; int FloorNo { get; set; } string EquipNo = ""; int CTUID = 11; @@ -33,11 +31,9 @@ namespace Khd.Core.Wcs.Wcs FloorNo = floor; EquipNo = equipNo; this.ScanPoint = StaticData.BasePlcpointList.Where(t => t.floorNo == floor).ToList();//加载当前站点所对应的点位 - this.LineRFID = this.ScanPoint.First(t => t.plcpointNo.Contains("RFID")); - this.LineWcsrun = this.ScanPoint.First(t => t.plcpointNo.Contains("wcsrun")); - this.LineSignal = this.ScanPoint.First(t => t.plcpointNo.Contains("linesignal")); - this.LineIsPallet = this.ScanPoint.First(t => t.plcpointNo.Contains("ispallet")); - this.LineSerialNO = this.ScanPoint.First(t => t.plcpointNo.Contains("serialno")); + this.LineRFID = this.ScanPoint.First(t => t.plcpointNo.Contains("RFID5001")); + this.isarrive = this.ScanPoint.First(t => t.plcpointNo.Contains("isarrive")); + this.isput = this.ScanPoint.First(t => t.plcpointNo.Contains("isput")); //var lineRFID = this._plc.Read(NodeSettingCarNo.plcpointAddress); try @@ -60,10 +56,64 @@ namespace Khd.Core.Wcs.Wcs Thread FlowPointThread = new Thread(MonitorInLocatorPoint); FlowPointThread.Start(); - Console.WriteLine(DateTime.Now+":五楼CTU上件扫描监听启动"); + + //Thread FlowCTUInWareThread = new Thread(MonitorInWare); + //FlowCTUInWareThread.Start(); + Console.WriteLine(DateTime.Now + ":五楼CTU上件扫描监听启动"); LogManager.Info("五楼CTU上件扫描监听启动"); } + private void MonitorInWare(object? obj) + { + using var scope = _host.Services.CreateScope(); + using var dbContext = scope.ServiceProvider.GetRequiredService(); + while (true) + { + try + { + var rfid = this._plc.Read(LineRFID.plcpointAddress); + var isArrive = this._plc.Read(isarrive.plcpointAddress); + if (rfid != null && isArrive != null && Convert.ToInt32(isArrive) == 1) + { + //根据rfid找到库位 + //生成入库任务 + var wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.containerCode == rfid.ToString()); + BaseEquip baseEquip = StaticData.BaseEquip.First(t => t.equipNo == "FL051"); + BaseEquip ctuEquip = StaticData.BaseEquip.First(t => t.objid == 11); + if (wmsBaseLocation != null) + { + var wcsTask = new WcsTask() + { + objid = StaticData.SnowId.NextId(), + startPointId = baseEquip.objid, + startPointNo = baseEquip.agvPositionCode, + currPointId = baseEquip.objid, + currPointNo = baseEquip.agvPositionCode, + nextPointId = ctuEquip.objid, + nextPointNo = ctuEquip.equipNo, + endPointId = wmsBaseLocation.locationId, + endPointNo = wmsBaseLocation.agvPositionCode, + taskType = 1, + taskStatus = 0, + floorNo = 5, + ud1 = "0",//是否是最后一个任务 + containerNo = rfid.ToString(), + equipmentNo = baseEquip.equipNo, + createBy = FloorNo + "楼CTU", + createTime = DateTime.Now, + }; + dbContext.Add(wcsTask); + dbContext.SaveChanges(); + } + } + } + catch + { + + } + } + } + public void MonitorInLocatorPoint() { List taskType = new() { 1, 3, 5, 7 }; @@ -73,57 +123,114 @@ namespace Khd.Core.Wcs.Wcs { try { - var taskList = dbContext.WcsTask.Where(t => t.nextPointId == CTUID && (t.taskType == 7 || t.taskType == 8)).ToList(); + var taskList = dbContext.WcsTask.Where(t => t.nextPointId == CTUID).ToList(); if (taskList.Count == 0) { LogManager.Info(FloorNo + "楼CTU无任务"); } foreach (var item in taskList) { - if (item.taskStatus == 0)//下发任务 + if (item.taskStatus == 0)//CTU会同时生成多个任务,生成就下发? { - BaseEquip baseEquip = StaticData.BaseEquip.First(t => t.floorNo == 5 && t.equipType == 1); - WcsCmd wcsCmd = new WcsCmd() + if (item.taskType % 2 == 0)//出库任务 { - objid = item.objid, - cmdStatus = 0, - taskId = item.orderId, - useFlag = 1, - cmdType = item.taskType, - containerNo = item.containerNo, - createTime = DateTime.Now, - createBy = FloorNo + "楼AGV", - currPointId = baseEquip.objid, - currPointNo = baseEquip.equipNo, - nextPointId = item.endPointId, - nextPointNo = item.endPointNo, - }; - RequestAGVTaskDto agvTask = new RequestAGVTaskDto(); - agvTask.reqCode = item.objid.ToString(); - agvTask.positionCodePath = new List - { - new Position + BaseEquip baseEquip = StaticData.BaseEquip.First(t => t.objid == item.endPointId); + WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.startPointId); + var wcsCmd = new WcsCmd() { - positionCode=wcsCmd.currPointNo, - type="1" - }, - new Position + objid = StaticData.SnowId.NextId(), + cmdStatus = 0, + taskId = item.objid, + useFlag = 1, + cmdType = item.taskType, + containerNo = item.containerNo, + createTime = DateTime.Now, + createBy = FloorNo + "楼CTU", + currPointId = wmsBaseLocation.locationId, + currPointNo = wmsBaseLocation.agvPositionCode, + nextPointId = baseEquip.objid, + nextPointNo = baseEquip.agvPositionCode, + taskCode=null + }; + var agvTask = new RequestAGVTaskDto { - positionCode=wcsCmd.nextPointNo, - type="2" + reqCode = wcsCmd.objid.ToString(), + positionCodePath = new List + { + new() { + positionCode=wcsCmd.currPointNo, + type="05" + }, + new() { + positionCode=wcsCmd.nextPointNo, + type="05" + }, + }, + ctnrTyp = "1", + taskTyp = "F504" + }; + string message = JsonConvert.SerializeObject(agvTask); + string result = HttpHelper.HttpPost("http://172.16.12.24:8182/rcms/services/rest/hikRpcService/genAgvSchedulingTask", message); + var reponseMessage = JsonConvert.DeserializeObject(result); + if (reponseMessage != null && reponseMessage.message == "成功") + { + wcsCmd.taskCode = reponseMessage.data; + wcsCmd.cmdStatus = 1; + item.taskStatus = 1; + dbContext.Update(item); + dbContext.WcsCmd.Add(wcsCmd); + dbContext.SaveChanges(); } - }; - string message = JsonConvert.SerializeObject(agvTask); - string result = HttpHelper.HttpPost("http://172.16.12.24:8182/rcms/services/rest/hikRpcService/genAgvSchedulingTask", message); - var reponseMessage = JsonConvert.DeserializeObject(result); - if (reponseMessage != null && reponseMessage.message == "成功") + } + else//入库任务 { - wcsCmd.taskCode = reponseMessage.data; - wcsCmd.cmdStatus = 1; - item.taskStatus = 1; - dbContext.Update(item); - dbContext.Add(wcsCmd); - dbContext.SaveChanges(); + BaseEquip baseEquip = StaticData.BaseEquip.First(t => t.objid == item.startPointId); + WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.endPointId); + var wcsCmd = new WcsCmd() + { + objid = StaticData.SnowId.NextId(), + cmdStatus = 0, + taskId = item.objid, + useFlag = 1, + cmdType = item.taskType, + containerNo = item.containerNo, + createTime = DateTime.Now, + createBy = FloorNo + "楼CTU", + nextPointId = wmsBaseLocation.locationId, + nextPointNo = wmsBaseLocation.agvPositionCode, + currPointId = baseEquip.objid, + currPointNo = baseEquip.agvPositionCode, + }; + var agvTask = new RequestAGVTaskDto + { + reqCode = item.objid.ToString(), + positionCodePath = new List + { + new() { + positionCode=wcsCmd.currPointNo, + type="0" + }, + new() { + positionCode=wcsCmd.nextPointNo, + type="0" + }, + }, + ctnrTyp = "1", + taskTyp = "F503" + }; + string message = JsonConvert.SerializeObject(agvTask); + string result = HttpHelper.HttpPost("http://172.16.12.24:8182/rcms/services/rest/hikRpcService/genAgvSchedulingTask", message); + var reponseMessage = JsonConvert.DeserializeObject(result); + if (reponseMessage != null && reponseMessage.message == "成功") + { + wcsCmd.taskCode = reponseMessage.data; + wcsCmd.cmdStatus = 1; + item.taskStatus = 1; + dbContext.Update(wmsBaseLocation); + dbContext.Update(item); + dbContext.Add(wcsCmd); + dbContext.SaveChanges(); + } } } else @@ -131,22 +238,24 @@ namespace Khd.Core.Wcs.Wcs WcsCmd? wcsCmd = dbContext.WcsCmd.FirstOrDefault(t => t.objid == item.objid); if (wcsCmd != null) { - if (wcsCmd.cmdStatus == 2) + if (wcsCmd.cmdStatus == 3) { - RequestAGVTaskDto agvTask = new RequestAGVTaskDto(); - agvTask.reqCode = item.objid.ToString(); - agvTask.taskCode = wcsCmd.taskCode; + var agvTask = new RequestAGVTaskDto + { + reqCode = item.objid.ToString(), + taskCode = wcsCmd.taskCode + }; string message = JsonConvert.SerializeObject(agvTask); string result = HttpHelper.HttpPost("http://172.16.12.24:8182/rcms/services/rest/hikRpcService/continueTask", message); ReponseMessage? reponseMessage = JsonConvert.DeserializeObject(result); if (reponseMessage != null && reponseMessage.message == "成功") { - wcsCmd.cmdStatus = 3; + wcsCmd.cmdStatus = 4; dbContext.Update(wcsCmd); dbContext.SaveChanges(); } } - else if (wcsCmd.cmdStatus == 4) + else if (wcsCmd.cmdStatus == 5) { //任务完成 //如果是入库任务,更新库存信息,并删除任务 @@ -158,7 +267,6 @@ namespace Khd.Core.Wcs.Wcs wmsBaseLocation.locationStatus = "1"; dbContext.Update(wmsBaseLocation); - dbContext.WcsCmd.Where(t => t.objid == wcsCmd.objid).Delete(); dbContext.WcsTask.Where(t => t.objid == item.objid).Delete(); dbContext.SaveChanges(); @@ -198,6 +306,8 @@ namespace Khd.Core.Wcs.Wcs } } + + /// /// 下发任务 /// diff --git a/src/Khd.Core.Wcs/Wcs/FiveFloorPoint.cs b/src/Khd.Core.Wcs/Wcs/FiveFloorPoint.cs index 24bc253..3eb6a0c 100644 --- a/src/Khd.Core.Wcs/Wcs/FiveFloorPoint.cs +++ b/src/Khd.Core.Wcs/Wcs/FiveFloorPoint.cs @@ -1,11 +1,13 @@ using Khd.Core.Domain.Dto.webapi; using Khd.Core.Domain.Models; using Khd.Core.EntityFramework; +using Khd.Core.Plc; using Khd.Core.Wcs.Global; using Masuit.Tools.Logging; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Newtonsoft.Json; +using System.Security.Cryptography; namespace Khd.Core.Wcs.Wcs { @@ -20,8 +22,7 @@ namespace Khd.Core.Wcs.Wcs private readonly BasePlcpoint LineRFID; private readonly BasePlcpoint LineWcsrun; private readonly BasePlcpoint LineSignal; - private readonly BasePlcpoint LineIsPallet; - private readonly BasePlcpoint LineSerialNO; + int FloorNo { get; set; } string EquipNo = ""; public FiveFloorPoint(IHost host, Plc.S7.Plc plc, int floor, string equipNo) @@ -31,11 +32,9 @@ namespace Khd.Core.Wcs.Wcs FloorNo = floor; EquipNo = equipNo; this.ScanPoint = StaticData.BasePlcpointList.Where(t => t.floorNo == floor).ToList();//加载当前站点所对应的点位 - this.LineRFID = this.ScanPoint.First(t => t.plcpointNo.Contains("RFID")); + this.LineRFID = this.ScanPoint.First(t => t.plcpointNo.Contains("RFID005")); this.LineWcsrun = this.ScanPoint.First(t => t.plcpointNo.Contains("wcsrun")); this.LineSignal = this.ScanPoint.First(t => t.plcpointNo.Contains("linesignal")); - this.LineIsPallet = this.ScanPoint.First(t => t.plcpointNo.Contains("ispallet")); - this.LineSerialNO = this.ScanPoint.First(t => t.plcpointNo.Contains("serialno")); try { @@ -63,7 +62,7 @@ namespace Khd.Core.Wcs.Wcs public void MonitorInLocatorPoint() { - List ITypes = new List { 1, 3, 5, 7 }; + List ITypes = new() { 1, 3, 5, 7 }; using var scope = _host.Services.CreateScope(); using var dbContext = scope.ServiceProvider.GetRequiredService(); while (true) @@ -71,13 +70,12 @@ namespace Khd.Core.Wcs.Wcs try { //入库任务 - var rfid = this._plc.Read(LineRFID.plcpointAddress); + var rfid = this._plc.ReadRFID(LineRFID.plcpointAddress); var isSignal = this._plc.Read(LineSignal.plcpointAddress); - var isPallet = this._plc.Read(LineIsPallet.plcpointAddress); - if (rfid != null && isSignal != null && isPallet != null) + if (rfid != null && isSignal != null) { //正常读到输送线信息 有到位信号,并且有托盘,获取条码信息 - if (Convert.ToInt32(isSignal) > 0 && Convert.ToInt32(isPallet) == 1) + if (Convert.ToInt32(isSignal) == 1) { //获取条码信息 var palletNo = Convert.ToString(rfid); @@ -91,19 +89,43 @@ namespace Khd.Core.Wcs.Wcs var wmsBaseLocations = dbContext.WmsBaseLocation.Where(t => t.warehouseFloor == FloorNo) .Where(t => t.activeFlag == "1") .Where(t => t.delFlag == "0") - .Where(t => t.instockFlag == "0") .Where(t => t.locationScrapType == "1") - .Where(t => t.locationStatus == "1") + .Where(t => t.instockFlag == "0") .Where(t => t.outstockFlag == "0") - .Where(t=>string.IsNullOrEmpty(t.containerCode)) + //.Where(t => t.locationStatus == "1") + //.Where(t => string.IsNullOrEmpty(t.containerCode)) .ToList(); + List containerCodes = wmsBaseLocations.Where(t => t.locDeep == 1).Select(t => t.containerCode).ToList();//深库位的托盘 + List mesBasePalletInfos = dbContext.MesBasePalletInfo + .Where(t => t.materialId == wcsTask.materialId) + .Where(t => containerCodes.Contains(t.palletInfoCode)).ToList();//深库位的托盘的物料等于当前任务的物料 + + var bill = from a in mesBasePalletInfos + join b in wmsBaseLocations.Where(t => t.locDeep == 1) on a.palletInfoCode equals b.containerCode + select new { b };//等于当前任务的物料的托盘的库位信息 + + var outBill = from a in bill + from b in wmsBaseLocations + where a.b.layerNum == b.layerNum + && b.locDeep == 2 + && a.b.locRow == b.locRow + && a.b.locColumn == b.locColumn + && b.locationStatus == "1" + && b.outstockFlag == "0" + && b.instockFlag == "0" + && string.IsNullOrEmpty(b.containerCode) + select new { a.b };//在上面的基础上获取对应托盘的外侧库位的空库位信息 + + WmsBaseLocation? wmsBaseLocation = null; + wmsBaseLocation ??= outBill.FirstOrDefault()?.b;//先找相同物料的外侧库位 + wmsBaseLocation ??= wmsBaseLocations.Where(t => string.IsNullOrEmpty(t.containerCode)).FirstOrDefault(t => t.locDeep == 2);//找不到再找深库位 + wmsBaseLocation ??= wmsBaseLocations.Where(t => string.IsNullOrEmpty(t.containerCode)).FirstOrDefault();//找不到再找任意库位 //深浅库位问题?库位入库优先级等 var AgvEquip = StaticData.BaseEquip.First(t => t.floorNo == 5 && t.equipType == 5);//背负Agv - if (wmsBaseLocations.Count > 0) + if (wmsBaseLocations.Count > 0 && wmsBaseLocation != null) { - WmsBaseLocation wmsBaseLocation = wmsBaseLocations.First(); wcsTask.taskStatus = 0;//创建状态 wcsTask.updateTime = DateTime.Now; wcsTask.currPointId = baseEquip.objid; @@ -118,6 +140,10 @@ namespace Khd.Core.Wcs.Wcs dbContext.Update(wcsTask); dbContext.SaveChanges(); } + else + { + Console.WriteLine(DateTime.Now + ":五楼接驳位调度入库任务,未找到库位"); + } } else//出库 { diff --git a/src/Khd.Core.Wcs/Wcs/FourthFloorPoint.cs b/src/Khd.Core.Wcs/Wcs/FourthFloorPoint.cs new file mode 100644 index 0000000..a025402 --- /dev/null +++ b/src/Khd.Core.Wcs/Wcs/FourthFloorPoint.cs @@ -0,0 +1,148 @@ +using Khd.Core.Domain.Models; +using Khd.Core.EntityFramework; +using Khd.Core.Plc.S7; +using Khd.Core.Wcs.Global; +using Masuit.Tools.Logging; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Z.EntityFramework.Plus; + +namespace Khd.Core.Wcs.Wcs +{ + /// + /// 四楼接驳位 + /// + public class FourthFloorPoint + { + private readonly int Floor; + private readonly Plc.S7.Plc _plc; + private readonly IHost host; + private readonly BasePlcpoint LineRFID; + private readonly BasePlcpoint LineSignal; + private readonly BasePlcpoint WcsRun; + public FourthFloorPoint(int floor, Plc.S7.Plc plc, IHost host) + { + Floor = floor; + _plc = plc; + this.host = host; + this.LineRFID = StaticData.BasePlcpointList.First(t => t.floorNo == 4 && t.plcpointNo.Contains("RFID")); + this.LineSignal = StaticData.BasePlcpointList.First(t => t.floorNo == 4 && t.plcpointNo.Contains("signal")); + this.WcsRun = StaticData.BasePlcpointList.First(t => t.floorNo == 4 && t.plcpointNo.Contains("wcsrun")); + } + + public void StartPoint() + { + Thread MonitorInLocatorPointThread=new Thread(MonitorInLocatorPoint); + MonitorInLocatorPointThread.Start(); + } + + private void MonitorInLocatorPoint() + { + List Itpyes = new() { 1, 3, 5, 7 }; + using var scope = host.Services.CreateScope(); + using var dbContext = scope.ServiceProvider.GetRequiredService(); + while (true) + { + try + { + var RFID004Value = this._plc.Read(this.LineRFID.plcpointAddress); //一楼RFID 读 + var linesignal04Value = this._plc.Read(this.LineSignal.plcpointAddress); //到位信号 读 + var wcsrun04Value = this._plc.Read(this.WcsRun.plcpointAddress); //去向 写 + + //正常读到plc值 + if (linesignal04Value != null && RFID004Value != null) + { + //正常托盘到位 + if (Convert.ToInt32(linesignal04Value) == 1) + { + + //判断task表里没有该rfid的未完成的入库信息,未下发去向 + var task = dbContext.WcsTask.Where(t => t.containerNo == RFID004Value.ToString() && t.taskStatus < 1).FirstOrDefault(); + if (task == null) + { + //入库 + + //根据托盘号获取物料码 + var material = dbContext.MesBasePalletInfo.Where(t => t.palletInfoCode == RFID004Value.ToString()).FirstOrDefault(); + if (material != null) + { + var warehouseId = dbContext.WmsWarehouseMaterial.Where(t => t.storageType == "1" && t.storageId == material.materialId).FirstOrDefault()?.warehouseId; + if (warehouseId != null) + { + var TargetFloor = dbContext.WmsBaseWarehouse.Where(t => t.warehouseId == warehouseId).FirstOrDefault(); + if (TargetFloor != null) + { + //插入task表 + + var dic = StaticData.BaseDictionary.Where(t => t.dicKey == "TaskType" && t.ud1 == "I" && t.dicField == TargetFloor.warehouseInstockType).FirstOrDefault(); + if (dic != null) + { + var newTask = new WcsTask() + { + objid = StaticData.SnowId.NextId(), + serialNo = 1235, + equipmentNo = "F04", + taskType = Convert.ToInt32(dic.dicValue), + taskStatus = 0, + containerNo = RFID004Value.ToString(), + materialNo = material.materialCode, + materialId = material.materialId, + qty = Convert.ToInt32(material.bindAmount), + startPointId = 4, + startPointNo = "F04", + currPointId = 4, + currPointNo = "F04", + nextPointId = 6, + nextPointNo = "T01", + endPointId = warehouseId, + fromFloorNo = 4, + floorNo = TargetFloor.warehouseFloor, + useFlag = 1, + createBy = "四楼接驳位", + createTime = DateTime.Now, + remark = "四楼创建入库任务" + }; + dbContext.Add(newTask); + } + } + } + } + } + else if (Itpyes.Contains(task.taskType)) + { + if (task.nextPointId != 6) + { + task.currPointId = 4; + task.currPointNo = "F04"; + task.nextPointId = 6; + task.nextPointNo = "T01"; + task.taskStatus = 0; + task.updateBy = "四楼接驳位线程"; + task.updateTime = DateTime.Now; + task.remark = "四楼创建入库任务"; + dbContext.WcsTask.Update(task); + dbContext.SaveChanges(); + } + } + //出库 + else + { + + } + } + } + } + catch (Exception ex) + { + LogManager.Error(ex); + } + Thread.Sleep(1000); + } + } + } +} diff --git a/src/Khd.Core.Wcs/Wcs/WcsToWms.cs b/src/Khd.Core.Wcs/Wcs/WcsToWms.cs index 0ad3dfe..f6a9a9a 100644 --- a/src/Khd.Core.Wcs/Wcs/WcsToWms.cs +++ b/src/Khd.Core.Wcs/Wcs/WcsToWms.cs @@ -91,22 +91,13 @@ namespace Khd.Core.Wcs.Wcs /// /// /// - public bool continueTask(continueTaskDto continueTaskDto) + public ReponseMessage? continueTask(continueTaskDto continueTaskDto) { //继续执行 var url = "http://IP:PORT/rcms/services/rest/hikRpcService/continueTask"; var concontentType = "application/json"; var result = HttpHelper.HttpPost(url, continueTaskDto.ToJsonString(), concontentType, 60, null); - var model = (ReponseMessage)JsonConvert.DeserializeObject(result.ToString(), typeof(ReponseMessage)); - if (model.code == "0") - { - LogManager.Info("调用成功。"); - } - else - { - LogManager.Info("调用失败。"); - } - return true; + return JsonConvert.DeserializeObject(result.ToString()); } /// /// 继续执行 diff --git a/src/Khd.Core.Wcs/appsettings.json b/src/Khd.Core.Wcs/appsettings.json index 91fdeeb..85a0350 100644 --- a/src/Khd.Core.Wcs/appsettings.json +++ b/src/Khd.Core.Wcs/appsettings.json @@ -1,7 +1,8 @@ { "ConnectionStrings": { //"DefaultConnection": "server=106.12.13.113;port=3336;database=khd_jyhb;uid=khd;pwd=khd@123;charset='utf8';persistsecurityinfo=True;SslMode=none;Allow User Variables=True", - "DefaultConnection": "server=175.27.215.92;port=3306;database=hwjy-cloud;uid=kehaida;pwd=khd2024;charset='utf8';persistsecurityinfo=True;SslMode=None;Allow User Variables=True" + "DefaultConnection": "server=localhost;port=3306;database=jyhb;uid=root;pwd=root;charset='utf8';persistsecurityinfo=True;SslMode=None;Allow User Variables=True" + //"DefaultConnection": "server=175.27.215.92;port=3306;database=hwjy-cloud;uid=kehaida;pwd=khd2024;charset='utf8';persistsecurityinfo=True;SslMode=None;Allow User Variables=True" }, "PlcConfigs": [ { @@ -21,11 +22,11 @@ "WaitTime": "60000", "SiteCode": "999" }, - "Logging": { - "LogLevel": { - "Default": "Information", - "Microsoft": "Warning", - "Microsoft.Hosting.Lifetime": "Information" - } - } + //"Logging": { + // "LogLevel": { + // "Default": "Information", + // "Microsoft": "Warning", + // "Microsoft.Hosting.Lifetime": "Information" + // } + //} }