From 494fd0d9cd57fb90764aea842ba0de568b2c5cca Mon Sep 17 00:00:00 2001 From: liuwf Date: Mon, 2 Sep 2024 18:03:22 +0800 Subject: [PATCH] =?UTF-8?q?change-2F=E5=85=A5=E5=BA=93=E6=B7=BB=E5=8A=A0pr?= =?UTF-8?q?oduct=5Finstock=E3=80=81=E5=B0=8F=E5=8C=85=E5=85=A5=E5=8F=A3?= =?UTF-8?q?=E5=8F=AB=E7=A9=BA=E6=89=98=E4=BF=A1=E5=8F=B7=E6=94=B9=E4=B8=BA?= =?UTF-8?q?(=20=E6=89=98=E7=9B=98=E5=BA=93=E5=8F=AB=E6=96=99=E4=BF=A1?= =?UTF-8?q?=E5=8F=B7=EF=BC=8C=E5=B9=B6=E4=B8=94=E9=80=9A=E8=AE=AF=E6=AD=A3?= =?UTF-8?q?=E5=B8=B8,=E5=B9=B6=E4=B8=94=E5=B0=8F=E5=8C=85=E5=85=A5?= =?UTF-8?q?=E5=8F=A3=E6=97=A0=E6=96=99)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Models/MesProductPlanDetail.cs | 136 ++++++++++++++++++ .../DefaultDbContext.cs | 3 +- src/Khd.Core.Wcs/MainCentralControl.cs | 10 +- src/Khd.Core.Wcs/Wcs/SecondFloorAGV.cs | 47 +++++- src/Khd.Core.Wcs/Wcs/SecondFloorLine.cs | 17 ++- 5 files changed, 202 insertions(+), 11 deletions(-) create mode 100644 src/Khd.Core.Domain/Models/MesProductPlanDetail.cs diff --git a/src/Khd.Core.Domain/Models/MesProductPlanDetail.cs b/src/Khd.Core.Domain/Models/MesProductPlanDetail.cs new file mode 100644 index 0000000..42c37c2 --- /dev/null +++ b/src/Khd.Core.Domain/Models/MesProductPlanDetail.cs @@ -0,0 +1,136 @@ + +//----------------------------------------------------------------------- +// +// * Copyright (C) 2021 KEHAIDASOFT All Rights Reserved +// * version : 4.0.30319.42000 +// * author : khd by t4-2 +// +//----------------------------------------------------------------------- + +using System; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; + +namespace Khd.Core.Domain.Models +{ + [Table("mes_product_plan_detail")] + public class MesProductPlanDetail + { + [Key] + [Column("plan_detail_id")] + public long PlanDetailId { get; set; } + + /// + /// 明细编号 + /// + [Column("plan_detail_code")] + [Required] + [StringLength(64)] + public string PlanDetailCode { get; set; } + + /// + /// 生产计划ID + /// + [Column("plan_id")] + [Required] + public long PlanId { get; set; } + + /// + /// 计划编号, 关联mes_product_plan_info的plan_code + /// + [Column("plan_code")] + [Required] + [StringLength(64)] + public string PlanCode { get; set; } + + /// + /// 操作人员ID,关联sys_user的user_id + /// + [Column("user_id")] + public long? UserId { get; set; } + + /// + /// 操作人员名称,关联sys_user的user_name + /// + [Column("user_name")] + [StringLength(64)] + public string UserName { get; set; } + + /// + /// 开始时间 + /// + [Column("real_begin_time")] + public DateTime? RealBeginTime { get; set; } + + /// + /// 完成时间 + /// + [Column("real_end_time")] + public DateTime? RealEndTime { get; set; } + + /// + /// 文件ID,关联附件信息主键 + /// + [Column("attach_id")] + public int? AttachId { get; set; } + + /// + /// 明细状态:1-未开始;2-已开始;3-已完成;9-异常完成(校验物料信息不完整) + /// + [Column("plan_detail_status")] + [Required] + [StringLength(1)] + public string PlanDetailStatus { get; set; } = "1"; + + /// + /// 是否标识:1-是;0-否 + /// + [Column("is_flag")] + [Required] + [StringLength(1)] + public string IsFlag { get; set; } = "1"; + + /// + /// 备注 + /// + [Column("remark")] + [StringLength(500)] + public string Remark { get; set; } + + /// + /// 创建人 + /// + [Column("create_by")] + [StringLength(64)] + public string CreateBy { get; set; } + + /// + /// 创建时间 + /// + [Column("create_time")] + public DateTime? CreateTime { get; set; } + + /// + /// 更新人 + /// + [Column("update_by")] + [StringLength(64)] + public string UpdateBy { get; set; } + + /// + /// 更新时间 + /// + [Column("update_time")] + public DateTime? UpdateTime { get; set; } + + /// + /// 物料条码 + /// + [Column("material_barcode")] + [StringLength(64)] + public string MaterialBarcode { get; set; } + } + + +} + diff --git a/src/Khd.Core.EntityFramework/DefaultDbContext.cs b/src/Khd.Core.EntityFramework/DefaultDbContext.cs index dc28d57..512c5c0 100644 --- a/src/Khd.Core.EntityFramework/DefaultDbContext.cs +++ b/src/Khd.Core.EntityFramework/DefaultDbContext.cs @@ -27,8 +27,9 @@ namespace Khd.Core.EntityFramework public DbSet BasePlcpoint { get; set; } public DbSet BasePlc { get; set; } - + public DbSet MesBasePalletInfo { get; set; } + public DbSet MesProductPlanDetail { get; set; } public DbSet WcsCmd { get; set; } diff --git a/src/Khd.Core.Wcs/MainCentralControl.cs b/src/Khd.Core.Wcs/MainCentralControl.cs index 35e0f4e..1544c6a 100644 --- a/src/Khd.Core.Wcs/MainCentralControl.cs +++ b/src/Khd.Core.Wcs/MainCentralControl.cs @@ -1,8 +1,10 @@ -using Khd.Core.Domain.Models; +using Jc.SnowId; +using Khd.Core.Domain.Models; using Khd.Core.EntityFramework; using Khd.Core.Library; using Khd.Core.Wcs.Global; using Khd.Core.Wcs.Wcs; +using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using System.Data; @@ -44,6 +46,7 @@ namespace Khd.Core.Wcs StaticData.BaseEquip = dbContext.BaseEquip.ToList();//设备信息 StaticData.BaseDictionary = dbContext.BaseDictionary.ToList();//字典表,Agv任务模板 StaticData.DmsBaseAlarmRuleList = dbContext.DmsBaseAlarmRule.ToList(); + foreach (var plcConfig in StaticData.PlcConfigs) { if (!StaticData.PlcDic.Any(t => t.Key == plcConfig.Code)) @@ -120,7 +123,12 @@ namespace Khd.Core.Wcs Console.WriteLine(ex.Message); logger.Error(ex.Message + "\n" + ex.StackTrace); } + + } + + + } } diff --git a/src/Khd.Core.Wcs/Wcs/SecondFloorAGV.cs b/src/Khd.Core.Wcs/Wcs/SecondFloorAGV.cs index 2e5dd18..099a760 100644 --- a/src/Khd.Core.Wcs/Wcs/SecondFloorAGV.cs +++ b/src/Khd.Core.Wcs/Wcs/SecondFloorAGV.cs @@ -275,7 +275,7 @@ namespace Khd.Core.Wcs.Wcs } else { - _logger.Info("五楼Agv下发任务失败" + item.taskType + result); + _logger.Info("2楼Agv下发任务失败" + item.taskType + result); } } else if (item.taskType == StaticTaskType.SecondStorageToLift)//库位-提升机 @@ -623,10 +623,21 @@ namespace Khd.Core.Wcs.Wcs { if (item.taskType == StaticTaskType.SecondLineToSmallPackage) { + // 托盘库叫料信号 var agvPutPoint = StaticData.BasePlcpointList.First(t => t.id == 54); - var agvPutValue = StaticData.PlcDic[2].Read(agvPutPoint.plcpointAddress);//小包入口叫料 - if (agvPutValue !=null && Convert.ToInt32(agvPutValue) == 0) + //2F托盘库产线数据通讯情况 + var ConnectStatus2FPoint = StaticData.BasePlcpointList.First(t => t.id == 73); + //2F托盘库入口上料光电 + var PalletInIsHas2FPoint = StaticData.BasePlcpointList.First(t => t.id == 74); + + var agvPutValue = StaticData.PlcDic[2].Read(agvPutPoint.plcpointAddress);//托盘库叫料信号 + var ConnectStatus2F = StaticData.PlcDic[2].Read(ConnectStatus2FPoint.plcpointAddress);//2F托盘库产线数据通讯情况 + var PalletInIsHas2F = StaticData.PlcDic[2].Read(PalletInIsHas2FPoint.plcpointAddress);//2F托盘库入口上料光电 + + + if (agvPutValue !=null && ConnectStatus2F != null && PalletInIsHas2F !=null&& Convert.ToInt32(agvPutValue) == 1 && Convert.ToInt32(ConnectStatus2F) == 1 && Convert.ToInt32(PalletInIsHas2F) == 0) { + // 托盘库叫料信号,并且通讯正常,并且小包入口无料 ,才可放托盘 var agvTask = new RequestAGVTaskDto { reqCode = StaticData.SnowId.NextId().ToString(), @@ -654,8 +665,6 @@ namespace Khd.Core.Wcs.Wcs } if (item.taskType == StaticTaskType.SecondSmallPackageToStorage) { - - //WmsProductInstock? wmsProductInstock = dbContext.WmsProductInstock.FirstOrDefault(t => t.productInstockId == item.orderId); //if (wmsProductInstock != null) //{ @@ -696,6 +705,34 @@ namespace Khd.Core.Wcs.Wcs warehouseFloor = 2, warehouseId = wmsBaseLocation.warehouseId }; + #region 插入productStock表 + + WmsProductInstock wmsProductInstock = new WmsProductInstock(); + wmsProductInstock.taskCode = StaticData.SnowId.NextId().ToString(); + wmsProductInstock.warehouseId = wmsBaseLocation.warehouseId; + wmsProductInstock.warehouseFloor = 2; + wmsProductInstock.locationCode = wmsBaseLocation.locationCode; + wmsProductInstock.productType = "3"; + wmsProductInstock.operationType = "3"; + wmsProductInstock.planCode = mesBaseBarcodeInfo.planCode; + wmsProductInstock.planDetailCode = mesBaseBarcodeInfo.planDetailCode; + wmsProductInstock.SaleOrderId = mesBaseBarcodeInfo.saleOrderId; + wmsProductInstock.saleorderCode = mesBaseBarcodeInfo.saleorderCode; + wmsProductInstock.instockType = "1"; + wmsProductInstock.productId = mesBaseBarcodeInfo.materialId; + wmsProductInstock.productBatch = mesBaseBarcodeInfo.barcodeInfo; + wmsProductInstock.instockAmount = mesBaseBarcodeInfo.amount; + wmsProductInstock.palletInfoCode = mesBaseBarcodeInfo.palletInfoCode; + wmsProductInstock.auditStatus = "1"; + wmsProductInstock.executeStatus = "2"; + wmsProductInstock.applyBy = "WCS"; + wmsProductInstock.applyDate = DateTime.Now; + wmsProductInstock.updateBy = "WCS"; + wmsProductInstock.updateDate = DateTime.Now; + wmsProductInstock.beginTime = DateTime.Now; + wmsProductInstock.endTime = DateTime.Now; + dbContext.Add(wmsProductInstock); + #endregion //wmsProductInstockDetail.executeStatus = "2"; //wmsProductInstock.endTime = DateTime.Now; //wmsProductInstock.executeStatus = "2"; diff --git a/src/Khd.Core.Wcs/Wcs/SecondFloorLine.cs b/src/Khd.Core.Wcs/Wcs/SecondFloorLine.cs index 4fd2418..73d8396 100644 --- a/src/Khd.Core.Wcs/Wcs/SecondFloorLine.cs +++ b/src/Khd.Core.Wcs/Wcs/SecondFloorLine.cs @@ -45,7 +45,13 @@ namespace Khd.Core.Wcs.Wcs using var dbContext = scope.ServiceProvider.GetRequiredService(); var rfidPoint = StaticData.BasePlcpointList.First(t => t.id == 52); var agvGetPoint = StaticData.BasePlcpointList.First(t => t.id == 53); + // 托盘库叫料信号 var agvPutPoint = StaticData.BasePlcpointList.First(t => t.id == 54); + //2F托盘库产线数据通讯情况 + var ConnectStatus2FPoint = StaticData.BasePlcpointList.First(t => t.id == 73); + //2F托盘库入口上料光电 + var PalletInIsHas2FPoint = StaticData.BasePlcpointList.First(t => t.id == 74); + BaseEquip agvEquip = StaticData.BaseEquip.First(t => t.objid == 8); BaseEquip endEquip = StaticData.BaseEquip.First(t => t.objid == 36); List canNotIn = new List(); @@ -54,13 +60,16 @@ namespace Khd.Core.Wcs.Wcs try { dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); - var agvPutValue = StaticData.PlcDic[2].Read(agvPutPoint.plcpointAddress);//小包入口叫料 + var agvPutValue = StaticData.PlcDic[2].Read(agvPutPoint.plcpointAddress);//托盘库叫料信号 + var ConnectStatus2F = StaticData.PlcDic[2].Read(ConnectStatus2FPoint.plcpointAddress);//2F托盘库产线数据通讯情况 + var PalletInIsHas2F = StaticData.PlcDic[2].Read(PalletInIsHas2FPoint.plcpointAddress);//2F托盘库入口上料光电 + var agvGetValue = StaticData.PlcDic[2].Read(agvGetPoint.plcpointAddress);//小包出口的到位 var rfidValue = StaticData.PlcDic[2].ReadRFID(rfidPoint.plcpointAddress,15);//小包出口的RFID - if (agvGetValue != null && agvPutValue != null && rfidValue != null)//读Plc + if (agvGetValue != null && agvPutValue != null && rfidValue != null && ConnectStatus2F!=null && PalletInIsHas2F!=null)//读Plc { - - if (Convert.ToInt32(agvPutValue) == 0)//小包入口叫料 + // 托盘库叫料信号,并且通讯正常,并且小包入口无料才可叫料 + if (Convert.ToInt32(agvPutValue) == 1 && Convert.ToInt32(ConnectStatus2F) == 1 && Convert.ToInt32(PalletInIsHas2F) == 0)//小包入口叫料 { bool canCreate = dbContext.WcsTask.Where(t => t.nextPointId == 8 || t.endPointId == endEquip.objid).Any();//有没有生成任务