diff --git a/src/Khd.Core.Domain/Models/DmsBaseAlarmRule.cs b/src/Khd.Core.Domain/Models/DmsBaseAlarmRule.cs index 7a673af..b5f0480 100644 --- a/src/Khd.Core.Domain/Models/DmsBaseAlarmRule.cs +++ b/src/Khd.Core.Domain/Models/DmsBaseAlarmRule.cs @@ -1,10 +1,12 @@ -using System.ComponentModel.DataAnnotations.Schema; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; namespace Khd.Core.Domain.Models { [Table("dms_base_alarm_rule")] public class DmsBaseAlarmRule { + [Key] [Column("alarm_rule_id")] public long AlarmRuleId { get; set; } diff --git a/src/Khd.Core.Domain/Models/DmsBaseDeviceLedger.cs b/src/Khd.Core.Domain/Models/DmsBaseDeviceLedger.cs index 9b47bee..6ceefb8 100644 --- a/src/Khd.Core.Domain/Models/DmsBaseDeviceLedger.cs +++ b/src/Khd.Core.Domain/Models/DmsBaseDeviceLedger.cs @@ -1,10 +1,12 @@ -using System.ComponentModel.DataAnnotations.Schema; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; namespace Khd.Core.Domain.Models { [Table("dms_base_device_ledger")] public class DmsBaseDeviceLedger { + [Key] [Column("device_id")] public long DeviceId { get; set; } diff --git a/src/Khd.Core.Domain/Models/DmsRecordAlarmInfo.cs b/src/Khd.Core.Domain/Models/DmsRecordAlarmInfo.cs index 671fb2b..fbd1ac3 100644 --- a/src/Khd.Core.Domain/Models/DmsRecordAlarmInfo.cs +++ b/src/Khd.Core.Domain/Models/DmsRecordAlarmInfo.cs @@ -1,4 +1,5 @@ using System; +using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; namespace Khd.Core.Domain.Models @@ -6,6 +7,7 @@ namespace Khd.Core.Domain.Models [Table("dms_record_alarm_info")] public class DmsRecordAlarmInfo { + [Key] [Column("alarm_id")] public long AlarmId { get; set; } diff --git a/src/Khd.Core.Domain/Models/DmsRecordAlarmTime.cs b/src/Khd.Core.Domain/Models/DmsRecordAlarmTime.cs index ebcbc7a..ed58954 100644 --- a/src/Khd.Core.Domain/Models/DmsRecordAlarmTime.cs +++ b/src/Khd.Core.Domain/Models/DmsRecordAlarmTime.cs @@ -1,4 +1,5 @@ using System; +using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; namespace Khd.Core.Domain.Models @@ -6,6 +7,7 @@ namespace Khd.Core.Domain.Models [Table("dms_record_alarm_time")] public class DmsRecordAlarmTime { + [Key] [Column("alarm_id")] public long AlarmId { get; set; } diff --git a/src/Khd.Core.Domain/Models/MesBaseMaterialInfo.cs b/src/Khd.Core.Domain/Models/MesBaseMaterialInfo.cs index 2137cb9..960e92b 100644 --- a/src/Khd.Core.Domain/Models/MesBaseMaterialInfo.cs +++ b/src/Khd.Core.Domain/Models/MesBaseMaterialInfo.cs @@ -23,11 +23,11 @@ namespace Khd.Core.Domain.Models [Column("material_subclass")] public string MaterialSubclass { get; set; } [Column("material_type_id")] - public string MaterialTypeId { get; set; } + public int? MaterialTypeId { get; set; } [Column("batch_flag")] public string BatchFlag { get; set; } [Column("batch_amount")] - public int? BatchAmount { get; set; } + public decimal? BatchAmount { get; set; } [Column("material_unit_id")] public long? MaterialUnitId { get; set; } [Column("material_unit")] @@ -43,7 +43,7 @@ namespace Khd.Core.Domain.Models //[Column("bind_flag")] //public string BindFlag { get; set; } [Column("factory_id")] - public string FactoryId { get; set; } + public int? FactoryId { get; set; } [Column("create_org_id")] public long? CreateOrgId { get; set; } [Column("use_org_id")] @@ -51,9 +51,9 @@ namespace Khd.Core.Domain.Models [Column("prodline_id")] public int? ProdlineId { get; set; } [Column("active_flag")] - public int? ActiveFlag { get; set; } + public string ActiveFlag { get; set; } [Column("deleted_flag")] - public int? DeletedFlag { get; set; } + public string DeletedFlag { get; set; } [Column("remark")] public string Remark { get; set; } [Column("purchase_price_unit_id")] diff --git a/src/Khd.Core.Domain/Models/WmsBaseLocation.cs b/src/Khd.Core.Domain/Models/WmsBaseLocation.cs index 146cd95..b4b0ce2 100644 --- a/src/Khd.Core.Domain/Models/WmsBaseLocation.cs +++ b/src/Khd.Core.Domain/Models/WmsBaseLocation.cs @@ -224,6 +224,12 @@ namespace Khd.Core.Domain.Models [Column("container_status")] public string ContainerStatus { get; set; } + + /// + /// 异常描述 + /// + [Column("exception_desc")] + public string ExceptionDesc { get; set; } } } diff --git a/src/Khd.Core.Wcs/SystemData.cs b/src/Khd.Core.Wcs/SystemData.cs index 19bbca4..10f3fb0 100644 --- a/src/Khd.Core.Wcs/SystemData.cs +++ b/src/Khd.Core.Wcs/SystemData.cs @@ -39,7 +39,7 @@ namespace Khd.Core.Wcs if (wmsBaseLocation.locDeep == 1) { WmsBaseLocation? wmsLocation = dbContext.WmsBaseLocation.Where(t => t.locDeep == 2 && t.locRow == wmsBaseLocation.locRow && t.locColumn == (wmsBaseLocation.locColumn % 2 == 0 ? wmsBaseLocation.locColumn - 1 : wmsBaseLocation.locColumn + 1)).FirstOrDefault(); - if (wmsLocation != null) + if (wmsLocation != null && wmsLocation.locationStatus == "1") { wmsLocation.locationStatus = "2"; dbContext.Update(wmsLocation); @@ -57,7 +57,40 @@ namespace Khd.Core.Wcs if (wmsBaseLocation.locDeep == 1) { WmsBaseLocation? wmsLocation = dbContext.WmsBaseLocation.Where(t => t.locDeep == 2 && t.locRow == wmsBaseLocation.locRow && t.locColumn == (wmsBaseLocation.locColumn % 2 == 0 ? wmsBaseLocation.locColumn - 1 : wmsBaseLocation.locColumn + 1)).FirstOrDefault(); - if (wmsLocation != null) + if (wmsLocation != null && wmsLocation.locationStatus != "3" && wmsLocation.locationStatus != "9") + { + wmsLocation.locationStatus = "1"; + dbContext.Update(wmsLocation); + } + } + } + + /// + /// 报警库位 + /// + public static void AlarmLocation(WmsBaseLocation wmsBaseLocation, DefaultDbContext dbContext) + { + if (wmsBaseLocation.locDeep == 2) + { + WmsBaseLocation? wmsLocation = dbContext.WmsBaseLocation.Where(t => t.locDeep == 1 && t.locRow == wmsBaseLocation.locRow && t.locColumn == (wmsBaseLocation.locColumn % 2 == 0 ? wmsBaseLocation.locColumn - 1 : wmsBaseLocation.locColumn + 1)).FirstOrDefault(); + if (wmsLocation != null && wmsLocation.locationStatus != "3") + { + wmsLocation.locationStatus = "8"; + wmsLocation.ExceptionDesc = "外侧库位异常导致内测库位异常"; + dbContext.Update(wmsLocation); + } + } + } + + /// + /// 解除报警库位 + /// + public static void UnAlarmLocation(WmsBaseLocation wmsBaseLocation, DefaultDbContext dbContext) + { + if (wmsBaseLocation.locDeep == 2) + { + WmsBaseLocation? wmsLocation = dbContext.WmsBaseLocation.Where(t => t.locDeep == 1 && t.locRow == wmsBaseLocation.locRow && t.locColumn == (wmsBaseLocation.locColumn % 2 == 0 ? wmsBaseLocation.locColumn - 1 : wmsBaseLocation.locColumn + 1)).FirstOrDefault(); + if (wmsLocation != null && wmsLocation.locationStatus == "8") { wmsLocation.locationStatus = "1"; dbContext.Update(wmsLocation); diff --git a/src/Khd.Core.Wpf/Form/FormBoardT.xaml b/src/Khd.Core.Wpf/Form/FormBoardT.xaml index 7a6e2dc..195ec8b 100644 --- a/src/Khd.Core.Wpf/Form/FormBoardT.xaml +++ b/src/Khd.Core.Wpf/Form/FormBoardT.xaml @@ -966,73 +966,99 @@ Width="1714" Height="1060" Background="#213269" Margin="0,-15,0,0" > - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + - - + + + + + + + + + + + + + + + + + + - + IsReadOnly="True" />--> - - + IsReadOnly="True" />--> @@ -1153,7 +1197,7 @@ - + diff --git a/src/Khd.Core.Wpf/Form/FormBoardT.xaml.cs b/src/Khd.Core.Wpf/Form/FormBoardT.xaml.cs index 8df8d76..035e43a 100644 --- a/src/Khd.Core.Wpf/Form/FormBoardT.xaml.cs +++ b/src/Khd.Core.Wpf/Form/FormBoardT.xaml.cs @@ -11,8 +11,10 @@ using Khd.Core.Wpf.Scan; using Khd.Core.Wpf.TaskForm; using Masuit.Tools; using Masuit.Tools.Logging; +using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; +using Microsoft.IdentityModel.Tokens; using System; using System.Collections.Generic; using System.Collections.ObjectModel; @@ -28,6 +30,7 @@ using System.Windows.Controls; using System.Windows.Input; using System.Windows.Threading; using Z.EntityFramework.Plus; +using static HandyControl.Tools.Interop.InteropValues; namespace Khd.Core.Wpf.Form { @@ -36,7 +39,7 @@ namespace Khd.Core.Wpf.Form /// public partial class FormBoardT : Window { - + private List productIds = new List() { 231, 531, 521 }; public static long? UserId = 1; public static readonly JcSnowId _jcSnowId = new JcSnowId(); private readonly IHost _host; @@ -57,7 +60,7 @@ namespace Khd.Core.Wpf.Form public List barcodeLsit = new List(); private int pageCount = 15; private object updateLock = new object(); - + private readonly List locationDtos = new List(); private ObservableCollection itemsControlItems; //人工叫料选中类 @@ -117,7 +120,6 @@ namespace Khd.Core.Wpf.Form { itemsControlItems = new ObservableCollection(); itemsControl.ItemsSource = itemsControlItems; - Task.Run(() => { foreach (var plcConfig in SystemData.PlcConfigs) @@ -876,6 +878,7 @@ namespace Khd.Core.Wpf.Form { Pagination1.PageIndex = 1; this.EquipListSelectDy.SelectedIndex = -1; + locationDtos.Clear(); GetBaseLocations(); } /// @@ -888,28 +891,54 @@ namespace Khd.Core.Wpf.Form var scope = _host.Services.CreateScope(); var dbContext = scope.ServiceProvider.GetRequiredService(); var locationCode = lba_ThrifTtitle6.Text; - long materialId = 0; - try + string sql; + if (productIds.Contains(warehouse.warehouseId)) { - materialId = Convert.ToInt64(lba_ThrifTtitle5.Text); + sql = $@"select distinct t1.location_id LocationId, + t1.location_code LocationCode, + t1.location_status LocationStatus, + t1.warehouse_floor FloorNo, + t2.pallet_info_code ContainerCode, + t2.material_id MaterialId, + t2.sale_order_id SaleOrderId + from wms_base_location t1 + left join wms_raw_stock t2 + on t1.location_code = t2.location_code + where t1.warehouse_id = {warehouse.warehouseId}"; } - catch + else { - + sql = $@"select distinct t1.location_id LocationId, + t1.location_code LocationCode, + t1.warehouse_floor FloorNo, + t1.location_status LocationStatus, + t2.pallet_info_code ContainerCode, + t2.product_id MaterialId, + t2.sale_order_id SaleOrderId + from wms_base_location t1 + left join wms_product_stock t2 + on t1.location_code = t2.location_code + where t1.warehouse_id = {warehouse.warehouseId}"; } - int sum = dbContext.WmsRawStock - .WhereIf(!string.IsNullOrEmpty(lba_ThrifTtitle6.Text), t => t.locationCode.Contains(locationCode)) - .WhereIf(!string.IsNullOrEmpty(lba_ThrifTtitle5.Text), t => t.materialId == materialId) - .Where(t => t.warehouseId == warehouse.warehouseId) - .Count(); + if (!string.IsNullOrEmpty(locationCode)) + { + sql += " and t1.location_code like '%" + locationCode + "%'"; + } + if (!string.IsNullOrEmpty(this.locationStatus.SelectedItem?.ToString())) + { + if(this.locationStatus.SelectedItem is ComboBoxItem item&&!string.IsNullOrEmpty(item.Tag?.ToString())) + { + sql += " and t1.location_status = " + item.Tag + ""; + } + } + var data = dbContext.ExecuteSqlQuery(sql); + int sum = data.Count; + data = data.Skip((this.Pagination1.PageIndex - 1) * this.pageCount).Take(this.pageCount).ToList(); + data.ForEach(t => + { + t.LocationStatus = SystemData.LocationStatusDic.GetValueOrDefault(t.LocationStatus, "未知"); + }); Pagination1.MaxPageCount = (sum / pageCount) + (sum % pageCount == 0 ? 0 : 1); - var data = dbContext.WmsRawStock - .WhereIf(!string.IsNullOrEmpty(lba_ThrifTtitle6.Text), t => t.locationCode.Contains(locationCode)) - .WhereIf(!string.IsNullOrEmpty(lba_ThrifTtitle5.Text), t => t.materialId == materialId) - .Where(t => t.warehouseId == warehouse.warehouseId) - .Skip((Pagination1.PageIndex - 1) * pageCount) - .Take(pageCount) - .ToList(); this.LoadMaterial1.ItemsSource = null; this.LoadMaterial1.ItemsSource = data; this.LoadMaterial1.Items.Refresh(); @@ -4158,6 +4187,104 @@ namespace Khd.Core.Wpf.Form } } + + private void LocationPersonBox_Click(object sender, RoutedEventArgs e) + { + if (sender is CheckBox check) + { + if (check.IsChecked == true) + { + if (LoadMaterial1.SelectedItem is LocationDto location) + { + locationDtos.Add(location); + } + } + else + { + if (LoadMaterial1.SelectedItem is LocationDto location) + { + locationDtos.Remove(location); + } + } + } + } + + private void LockLocation_Click(object sender, RoutedEventArgs e) + { + if (locationDtos.Count == 0) + { + HandyControl.Controls.MessageBox.Show("请选择库位!"); + return; + } + List locationCodes = locationDtos.Select(t => t.LocationCode).ToList(); + MessageBoxResult messageBoxResult = HandyControl.Controls.MessageBox.Show($"锁定库位{string.Join("\n", locationCodes)}", "提示", MessageBoxButton.OKCancel, MessageBoxImage.Question); + if (messageBoxResult == MessageBoxResult.OK) + { + using var scope = _host.Services.CreateScope(); + using var dbContext = scope.ServiceProvider.GetRequiredService(); + using var transaction = dbContext.Database.BeginTransaction(); + try + { + List wmsBaseLocations = dbContext.WmsBaseLocation.Where(t => locationCodes.Contains(t.locationCode)).ToList(); + foreach (var location in wmsBaseLocations) + { + location.locationStatus = "3"; + location.ExceptionDesc = "人工锁定"; + SystemData.AlarmLocation(location, dbContext); + dbContext.Update(location); + } + dbContext.SaveChanges(); + transaction.Commit(); + locationDtos.Clear(); + GetBaseLocations(); + HandyControl.Controls.MessageBox.Show("锁定成功!"); + + } + catch + { + transaction.Rollback(); + } + } + } + + private void UnLockLocation_Click(object sender, RoutedEventArgs e) + { + if (locationDtos.Count == 0) + { + HandyControl.Controls.MessageBox.Show("请选择库位!"); + return; + } + List locationCodes = locationDtos.Select(t => t.LocationCode).ToList(); + MessageBoxResult messageBoxResult = HandyControl.Controls.MessageBox.Show($"解锁库位{string.Join("\n", locationCodes)}", "提示", MessageBoxButton.OKCancel, MessageBoxImage.Question); + if (messageBoxResult == MessageBoxResult.OK) + { + using var scope = _host.Services.CreateScope(); + using var dbContext = scope.ServiceProvider.GetRequiredService(); + using var transaction = dbContext.Database.BeginTransaction(); + try + { + List wmsBaseLocations = dbContext.WmsBaseLocation.Where(t => locationCodes.Contains(t.locationCode)).ToList(); + foreach (var location in wmsBaseLocations) + { + location.locationStatus = "1"; + location.ExceptionDesc = "人工解锁"; + SystemData.UnAlarmLocation(location, dbContext); + dbContext.Update(location); + } + dbContext.SaveChanges(); + transaction.Commit(); + locationDtos.Clear(); + GetBaseLocations(); + HandyControl.Controls.MessageBox.Show("解锁成功!"); + + } + catch + { + transaction.Rollback(); + } + } + } + } } diff --git a/src/Khd.Core.Wpf/SystemData.cs b/src/Khd.Core.Wpf/SystemData.cs index bf25218..bb5781b 100644 --- a/src/Khd.Core.Wpf/SystemData.cs +++ b/src/Khd.Core.Wpf/SystemData.cs @@ -1,5 +1,7 @@ using Khd.Core.Domain.Models; +using Khd.Core.EntityFramework; using System.Collections.Generic; +using System.Linq; using System.Windows.Media; namespace Khd.Core.Wpf @@ -84,5 +86,50 @@ namespace Khd.Core.Wpf public static List BaseDictionary = new List(); public static List PlcConfigs = new List(); public static Dictionary PlcDic = new Dictionary(); + + public static readonly Dictionary LocationStatusDic = new Dictionary() + { + {"1","正常" }, + {"2","自动锁定" }, + {"3","人工锁定" }, + {"4","移库锁定" }, + {"5","合库锁定" }, + {"6","出库锁定" }, + {"8","因外侧库位异常导致内侧库位无法使用" }, + {"9","异常库位" }, + }; + + /// + /// 报警库位 + /// + public static void AlarmLocation(WmsBaseLocation wmsBaseLocation, DefaultDbContext dbContext) + { + if (wmsBaseLocation.locDeep == 2) + { + WmsBaseLocation? wmsLocation = dbContext.WmsBaseLocation.Where(t => t.locDeep == 1 && t.locRow == wmsBaseLocation.locRow && t.locColumn == (wmsBaseLocation.locColumn % 2 == 0 ? wmsBaseLocation.locColumn - 1 : wmsBaseLocation.locColumn + 1)).FirstOrDefault(); + if (wmsLocation != null&&wmsLocation.locationStatus!="3") + { + wmsLocation.locationStatus = "8"; + wmsLocation.ExceptionDesc = "外侧库位异常导致内测库位异常"; + dbContext.Update(wmsLocation); + } + } + } + + /// + /// 解除报警库位 + /// + public static void UnAlarmLocation(WmsBaseLocation wmsBaseLocation, DefaultDbContext dbContext) + { + if (wmsBaseLocation.locDeep == 2) + { + WmsBaseLocation? wmsLocation = dbContext.WmsBaseLocation.Where(t => t.locDeep == 1 && t.locRow == wmsBaseLocation.locRow && t.locColumn == (wmsBaseLocation.locColumn % 2 == 0 ? wmsBaseLocation.locColumn - 1 : wmsBaseLocation.locColumn + 1)).FirstOrDefault(); + if (wmsLocation != null && wmsLocation.locationStatus == "8") + { + wmsLocation.locationStatus = "1"; + dbContext.Update(wmsLocation); + } + } + } } } diff --git a/src/Khd.Core.Wpf/appsettings.json b/src/Khd.Core.Wpf/appsettings.json index af2784c..92204c3 100644 --- a/src/Khd.Core.Wpf/appsettings.json +++ b/src/Khd.Core.Wpf/appsettings.json @@ -3,8 +3,8 @@ //mysql 本地 //"DefaultConnection": "server=106.12.13.113;port=3306;database=khd_jyhb;uid=root;pwd=root;charset='utf8';persistsecurityinfo=True;SslMode=none;Allow User Variables=True" //khd服务器 - "DefaultConnection": "server=172.16.12.100;port=3306;database=hwjy-cloud;uid=kehaida;pwd=khdrkjy2024...;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=172.16.12.100;port=3306;database=hwjy-cloud;uid=kehaida;pwd=khdrkjy2024...;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" }, "PlcConfigs": [ diff --git a/src/Khd.Core.Wpf/dto/LocationDto.cs b/src/Khd.Core.Wpf/dto/LocationDto.cs new file mode 100644 index 0000000..c560d4d --- /dev/null +++ b/src/Khd.Core.Wpf/dto/LocationDto.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Khd.Core.Wpf.dto +{ + internal class LocationDto + { + public long LocationId { get; set; } + public string LocationCode { get; set; } + public string LocationStatus { get; set; } + public string ContainerCode { get; set; } + public int MaterialId { get; set; } + public int SaleOrderId {get; set; } + public int FloorNo { get; set; } + } +}